From 21fcfa3348213aa87f0e3aef62ca4720c6d31cb7 Mon Sep 17 00:00:00 2001 From: Robert Xu Date: Thu, 10 Nov 2011 18:04:39 -0500 Subject: initial commit to suse branch: eclipse integration --- opensuse/README.FIRST | 2 + opensuse/arts/arts-1.5.10.tar.bz2 | Bin 787583 -> 0 bytes opensuse/arts/arts-start-on-demand.diff | 25 - opensuse/arts/arts-vorbis-fix.dif | 27 - opensuse/arts/arts.changes | 1406 --- opensuse/arts/arts.spec | 197 - opensuse/arts/artswrapper.7.gz | Bin 1134 -> 0 bytes opensuse/arts/avoid_la_files.diff | 26 - opensuse/arts/baselibs.conf | 1 - opensuse/arts/fortify_source.patch | 13 - opensuse/arts/no-informational-messages.diff | 15 - .../usage-data.xml | 0 opensuse/core/.metadata/.lock | 0 opensuse/core/.metadata/.log | 194 + .../core/.metadata/.mylyn/.repositories.xml.zip | Bin 0 -> 458 bytes .../core/.metadata/.mylyn/repositories.xml.zip | Bin 0 -> 620 bytes .../repositoryConfigurations | Bin 0 -> 719 bytes .../serverCache/repositoryConfigurations | Bin 0 -> 2100 bytes .../.metadata/.plugins/org.eclipse.cdt.core/.log | 2 + .../.root/.indexes/history.version | 1 + .../.root/.indexes/properties.index | Bin 0 -> 151 bytes .../.root/.indexes/properties.version | 1 + .../org.eclipse.core.resources/.root/2.tree | Bin 0 -> 2207 bytes .../.safetable/org.eclipse.core.resources | Bin 0 -> 850 bytes ...com.atlassian.connector.eclipse.bamboo.ui.prefs | 3 + .../com.atlassian.connector.eclipse.jira.ui.prefs | 3 + ...om.atlassian.connector.eclipse.monitor.ui.prefs | 3 + .../.settings/org.eclipse.cdt.debug.core.prefs | 3 + .../.settings/org.eclipse.cdt.ui.prefs | 5 + .../.settings/org.eclipse.core.resources.prefs | 3 + .../.settings/org.eclipse.debug.ui.prefs | 3 + .../.settings/org.eclipse.epp.mpc.ui.prefs | 3 + .../.settings/org.eclipse.jdt.ui.prefs | 15 + .../.settings/org.eclipse.m2e.discovery.prefs | 3 + .../.settings/org.eclipse.mylyn.context.core.prefs | 3 + .../.settings/org.eclipse.mylyn.monitor.ui.prefs | 3 + .../.settings/org.eclipse.mylyn.tasks.ui.prefs | 3 + .../.settings/org.eclipse.team.ui.prefs | 3 + .../.settings/org.eclipse.ui.editors.prefs | 3 + .../.settings/org.eclipse.ui.ide.prefs | 6 + .../.settings/org.eclipse.ui.prefs | 3 + .../.settings/org.eclipse.ui.workbench.prefs | 3 + .../org.eclipse.equinox.p2.ui/dialog_settings.xml | 3 + .../dialog_settings.xml | 10 + .../org.eclipse.jdt.core/invalidArchivesCache | Bin 0 -> 4 bytes .../org.eclipse.jdt.core/nonChainingJarsCache | Bin 0 -> 4 bytes .../variablesAndContainers.dat | Bin 0 -> 129 bytes .../org.eclipse.jdt.ui/OpenTypeHistory.xml | 2 + .../QualifiedTypeNameHistory.xml | 2 + .../org.eclipse.jdt.ui/dialog_settings.xml | 5 + .../.workspace/2011/11/46/refactorings.history | 3 + .../.workspace/2011/11/46/refactorings.index | 3 + .../dialog_settings.xml | 7 + .../org.eclipse.m2e.logback.configuration/0.log | 1 + .../logback.1.0.100.20110804-1717.xml | 41 + .../org.eclipse.team.ui/syncParticipants.xml | 2 + .../org.eclipse.ui.editors/dialog_settings.xml | 5 + .../org.eclipse.ui.ide/dialog_settings.xml | 16 + .../org.eclipse.ui.intro/dialog_settings.xml | 4 + .../org.eclipse.ui.workbench/dialog_settings.xml | 20 + .../org.eclipse.ui.workbench/workbench.xml | 172 + .../org.eclipse.ui.workbench/workingsets.xml | 4 + opensuse/core/.metadata/version.ini | 1 + opensuse/core/arts/.project | 12 + opensuse/core/arts/arts-start-on-demand.diff | 25 + opensuse/core/arts/arts-vorbis-fix.dif | 27 + opensuse/core/arts/arts.changes | 1406 +++ opensuse/core/arts/arts.spec | 197 + opensuse/core/arts/artswrapper.7.gz | Bin 0 -> 1134 bytes opensuse/core/arts/avoid_la_files.diff | 26 + opensuse/core/arts/baselibs.conf | 1 + opensuse/core/arts/fortify_source.patch | 13 + opensuse/core/arts/no-informational-messages.diff | 15 + opensuse/core/libdbus-1-tqt-0/.project | 12 + opensuse/core/libdbus-1-tqt-0/README.VERSION | 1 + .../libdbus-1-tqt-0/fix_circular_destructor.patch | 14 + opensuse/core/libdbus-1-tqt-0/fix_ifdef.patch | 18 + .../core/libdbus-1-tqt-0/libdbus-1-tqt-0.changes | 58 + opensuse/core/libdbus-1-tqt-0/libdbus-1-tqt-0.spec | 135 + opensuse/core/libdbus-1-tqt-0/r785103.patch | 996 ++ opensuse/core/libdbus-1-tqt-0/r795238.patch | 60 + opensuse/core/libdbus-tqt-1-0/.project | 12 + opensuse/core/libdbus-tqt-1-0/README.VERSION | 1 + opensuse/core/libdbus-tqt-1-0/baselibs.conf | 1 + .../dbus-qt3-compile-fix-thoenig-01.patch | 85 + ...do-not-close-shared-connection-thoenig-01.patch | 12 + .../core/libdbus-tqt-1-0/libdbus-tqt-1-0.changes | 61 + opensuse/core/libdbus-tqt-1-0/libdbus-tqt-1-0.spec | 147 + opensuse/core/libtqt4/.project | 12 + opensuse/core/libtqt4/libtqt4.changes | 11 + opensuse/core/libtqt4/libtqt4.spec | 173 + opensuse/core/qt3/.project | 12 + opensuse/core/tde-filesystem/.project | 12 + opensuse/core/tde-filesystem/COPYING | 502 + opensuse/core/tde-filesystem/macros.tde | 150 + .../core/tde-filesystem/tde-filesystem.changes | 5 + opensuse/core/tde-filesystem/tde-filesystem.spec | 61 + opensuse/core/tdeaccessibility/.project | 12 + opensuse/core/tdeaddons/.project | 12 + opensuse/core/tdeartwork/.project | 12 + opensuse/core/tdebase/.project | 12 + opensuse/core/tdebase/3_5_BRANCH.diff | 1176 +++ opensuse/core/tdebase/access.diff | 51 + opensuse/core/tdebase/applet-lock-logout.diff | 122 + opensuse/core/tdebase/arts-start-on-demand.diff | 98 + opensuse/core/tdebase/artwork.diff | 35 + opensuse/core/tdebase/autorun.patch | 27 + opensuse/core/tdebase/background_default.diff | 13 + opensuse/core/tdebase/baselibs.conf | 2 + opensuse/core/tdebase/beagle-0.3.diff | 21 + opensuse/core/tdebase/bnc.desktop | 8 + opensuse/core/tdebase/bnc584223.diff | 189 + opensuse/core/tdebase/clock-applet-style.diff | 22 + opensuse/core/tdebase/clock-suse-integrate.diff | 288 + opensuse/core/tdebase/console8x16.pcf.gz | Bin 0 -> 12244 bytes opensuse/core/tdebase/default-kdeprintfax.diff | 13 + opensuse/core/tdebase/default_fonts.diff | 25 + opensuse/core/tdebase/devmon-automounter.sh | 1086 +++ .../core/tdebase/dont-always-start-kaccess.diff | 66 + opensuse/core/tdebase/fileshareset.8.gz | Bin 0 -> 1086 bytes opensuse/core/tdebase/fileshareset2.tar.bz2 | Bin 0 -> 8677 bytes opensuse/core/tdebase/fix-desktop-icons.diff | 250 + opensuse/core/tdebase/fix-kcontrol-yast.diff | 63 + opensuse/core/tdebase/fix-kio-smb-auth.diff | 13 + .../core/tdebase/fix-lockup-from-gnome-apps.diff | 20 + opensuse/core/tdebase/fix_default_theme_reset.diff | 59 + opensuse/core/tdebase/gcc44.diff | 20 + .../core/tdebase/hide-only-showin-entries.diff | 14 + .../improve-panelservicemenu-geticonset.diff | 32 + opensuse/core/tdebase/ioslaveinfo-icon.diff | 13 + opensuse/core/tdebase/kcheckpass-pam-11.0 | 6 + opensuse/core/tdebase/kcheckpass-pam-11.1 | 5 + opensuse/core/tdebase/kcheckpass-pam-legacy | 7 + opensuse/core/tdebase/kcheckpass.8.gz | Bin 0 -> 836 bytes opensuse/core/tdebase/kcminit-ignore-arts.diff | 14 + opensuse/core/tdebase/kcmkdm-default-grub.diff | 13 + opensuse/core/tdebase/kcmsamba_log.diff | 31 + opensuse/core/tdebase/kcmshell_use_kde-sound.diff | 11 + opensuse/core/tdebase/kcontrol-energy.diff | 167 + opensuse/core/tdebase/kcontrol.diff | 11 + opensuse/core/tdebase/kde3-session-restore.diff | 12 + opensuse/core/tdebase/kde3-session.diff | 13 + opensuse/core/tdebase/kdebase_khc_rellinks.diff | 606 ++ .../core/tdebase/kdebase_networkstatus_branch.diff | 36 + opensuse/core/tdebase/kdeeject.diff | 58 + opensuse/core/tdebase/kdesktop_icons.diff | 311 + .../core/tdebase/kdesu-remember-keep-password.diff | 18 + opensuse/core/tdebase/kdesud-security.diff | 21 + opensuse/core/tdebase/kdm-admin-mode.diff | 424 + opensuse/core/tdebase/kdm-aliasing.diff | 11 + .../core/tdebase/kdm-align-userlist-labels.diff | 46 + opensuse/core/tdebase/kdm-all-users-nopass.diff | 34 + opensuse/core/tdebase/kdm-audit-log.diff | 190 + opensuse/core/tdebase/kdm-color-scheme.diff | 28 + opensuse/core/tdebase/kdm-consolekit.diff | 822 ++ opensuse/core/tdebase/kdm-cope-with-new-grub.diff | 27 + opensuse/core/tdebase/kdm-make_it_cool.diff | 1534 +++ opensuse/core/tdebase/kdm-mark_autologin.diff | 13 + opensuse/core/tdebase/kdm-pam-np-legacy | 7 + opensuse/core/tdebase/kdm-relaxed-auth.diff | 22 + opensuse/core/tdebase/kdm-suspend-hal.diff | 331 + opensuse/core/tdebase/kdm-sysconfig-values.diff | 737 ++ opensuse/core/tdebase/kdm-use-rpmoptflags.diff | 29 + opensuse/core/tdebase/kdm-wordbreak.diff | 22 + opensuse/core/tdebase/kfontinst.diff | 10 + opensuse/core/tdebase/khelpcenter-beagle.diff | 172 + .../tdebase/khelpcenter-delayed-indexcheck.cpp | 23 + .../tdebase/khelpcenter-gnome-support-legacy.patch | 327 + .../core/tdebase/khelpcenter-gnome-support.patch | 335 + .../core/tdebase/khelpcenter-localindices.patch | 41 + .../khelpcenter-use-suseconfig-indexer.diff | 25 + .../core/tdebase/khelpcenter-use-susehelp.diff | 13 + .../core/tdebase/khotkeys-multimedia-action.diff | 345 + .../core/tdebase/khotkeys-multimedia-action2.diff | 81 + opensuse/core/tdebase/kicker-defaults.diff | 57 + opensuse/core/tdebase/kickerrc | 63 + opensuse/core/tdebase/kickoff-beagle.diff | 1329 +++ opensuse/core/tdebase/kickoff-data.tar.bz2 | Bin 0 -> 581352 bytes .../core/tdebase/kickoff-install-software.diff | 25 + opensuse/core/tdebase/kickoff-kcm.diff | 217 + opensuse/core/tdebase/kickoff.diff | 9812 ++++++++++++++++++++ opensuse/core/tdebase/kio-media-errorhandling.diff | 18 + opensuse/core/tdebase/klipperrc.diff | 22 + .../tdebase/kmenu-search-fs20050503-fixed.diff | 342 + .../core/tdebase/kmenu-search-slowdown-fix.diff | 129 + opensuse/core/tdebase/knetattach-show.diff | 7 + opensuse/core/tdebase/kompmgr_use_defaults.diff | 34 + opensuse/core/tdebase/konq-combo-editor.diff | 42 + opensuse/core/tdebase/konsole-schema-update.diff | 33 + opensuse/core/tdebase/konsole_keytab.diff | 17 + opensuse/core/tdebase/kpamgreeter.diff | 852 ++ opensuse/core/tdebase/krandr-0.5.2.1.diff.bz2 | Bin 0 -> 22752 bytes opensuse/core/tdebase/kscreensaver-random-NG.diff | 189 + opensuse/core/tdebase/ksmserver-defaulttohalt.diff | 13 + opensuse/core/tdebase/ksmserver-kdeinit.diff | 67 + opensuse/core/tdebase/ksmserver-suspend.diff | 233 + opensuse/core/tdebase/ksmserver-timed.diff | 700 ++ opensuse/core/tdebase/ksmserver-tooltips.diff | 38 + opensuse/core/tdebase/ksplashml.patch | 19 + opensuse/core/tdebase/ksysguard-slp-ratelimit.diff | 15 + opensuse/core/tdebase/ksysguardd-openslp.diff | 288 + opensuse/core/tdebase/ksysguardd.init | 80 + opensuse/core/tdebase/ksysguardd.reg | 12 + opensuse/core/tdebase/kwinbindings.diff | 43 + .../core/tdebase/kxkb-include-latin-layout.diff | 14 + opensuse/core/tdebase/less_verbal_kdesu.patch | 26 + opensuse/core/tdebase/libkonq-kdemm.diff | 117 + opensuse/core/tdebase/locale-dont-show-flag.diff | 33 + opensuse/core/tdebase/lock-xvkbd.diff | 380 + opensuse/core/tdebase/lowdiskspace.patch | 413 + opensuse/core/tdebase/mach_blass.diff | 160 + .../core/tdebase/make-wallpapers-hideable.diff | 48 + opensuse/core/tdebase/media-cryptosupport.diff | 31 + opensuse/core/tdebase/media-iPod.diff | 26 + opensuse/core/tdebase/media-teardown_crypto.diff | 175 + opensuse/core/tdebase/media_suse.diff | 49 + .../tdebase/mediamanager-mount-point-utf8.diff | 13 + opensuse/core/tdebase/minicli-combo-editor.diff | 34 + opensuse/core/tdebase/mp3-info.tar.bz2 | Bin 0 -> 2606 bytes opensuse/core/tdebase/mtab-reenable.patch | 153 + opensuse/core/tdebase/non-fast-malloc.diff | 15 + opensuse/core/tdebase/nsplugin-Preference.diff | 13 + opensuse/core/tdebase/nsplugin-init-gtk.diff | 49 + opensuse/core/tdebase/openssl1.patch | 40 + opensuse/core/tdebase/optional-compmgr.diff | 32 + opensuse/core/tdebase/quick_browser_menu.diff | 30 + opensuse/core/tdebase/remove-beagle-stuff.diff | 34 + .../core/tdebase/restore-description-parens.diff | 13 + opensuse/core/tdebase/rotate-wacom-pointers.diff | 291 + opensuse/core/tdebase/runupdater.patch | 133 + opensuse/core/tdebase/select-wm-gui.diff | 635 ++ opensuse/core/tdebase/short-menus.diff | 209 + opensuse/core/tdebase/show-konqueror-in-menu.diff | 30 + opensuse/core/tdebase/simplify-randr-settings.diff | 91 + opensuse/core/tdebase/sourceforge.desktop | 7 + opensuse/core/tdebase/spellcheck-default-utf8.diff | 13 + opensuse/core/tdebase/startkde.diff | 80 + opensuse/core/tdebase/startkde.suse.sh | 140 + opensuse/core/tdebase/stopkde.suse.sh | 13 + opensuse/core/tdebase/suse_default_move.diff | 83 + opensuse/core/tdebase/suspend-kpowersave.diff | 178 + opensuse/core/tdebase/suspend-unmount.diff | 179 + opensuse/core/tdebase/system-folder_man.diff | 13 + opensuse/core/tdebase/systray_order.diff | 162 + opensuse/core/tdebase/taskbar.patch | 29 + opensuse/core/tdebase/tdebase.changes | 5422 +++++++++++ opensuse/core/tdebase/tdebase.fillup | 25 + opensuse/core/tdebase/tdebase.spec | 1851 ++++ opensuse/core/tdebase/teach-minicli-lock.diff | 30 + opensuse/core/tdebase/uninit.diff | 10 + .../core/tdebase/use-full-hinting-by-default.diff | 35 + opensuse/core/tdebase/use-pam-before-classic.diff | 17 + opensuse/core/tdebase/wizard_small.png | Bin 0 -> 40259 bytes .../workaround-pdf-on64bit-nsplugin-bug.diff | 44 + opensuse/core/tdebase/xcursor.diff | 36 + opensuse/core/tdebase/xinerama.patch | 951 ++ opensuse/core/tdebase/zh_TW.flag.png | Bin 0 -> 175 bytes opensuse/core/tdebindings/.project | 12 + opensuse/core/tdedevelop/.project | 12 + opensuse/core/tdeedu/.project | 12 + opensuse/core/tdegames/.project | 12 + opensuse/core/tdegraphics/.project | 12 + opensuse/core/tdelibs/.project | 12 + opensuse/core/tdelibs/10888-bt.tar.gz | Bin 0 -> 48208 bytes opensuse/core/tdelibs/3_5_BRANCH.diff | 126 + opensuse/core/tdelibs/CATALOG.kdelibs3.diff | 139 + opensuse/core/tdelibs/add-suse-translations.diff | 14 + opensuse/core/tdelibs/admin.diff | 55 + opensuse/core/tdelibs/admin.tar.bz2 | Bin 0 -> 188090 bytes opensuse/core/tdelibs/allow-man-setgid.diff | 32 + opensuse/core/tdelibs/api_docu_description | 36 + .../core/tdelibs/applications.menu-fallback.diff | 19 + opensuse/core/tdelibs/arts-acinclude.patch | 66 + opensuse/core/tdelibs/artwork.diff | 46 + opensuse/core/tdelibs/autostart-spec.diff | 55 + opensuse/core/tdelibs/avahi-pidfile.diff | 13 + opensuse/core/tdelibs/baselibs.conf | 3 + opensuse/core/tdelibs/bnc557126.diff | 21 + .../tdelibs/bug-382959_kabc_fix_vcardparser.patch | 562 ++ .../core/tdelibs/bug-399296_ftphandling-fix.diff | 57 + opensuse/core/tdelibs/bundle-locale-help.diff | 107 + opensuse/core/tdelibs/clever-menu.diff | 221 + opensuse/core/tdelibs/common_options | 156 + opensuse/core/tdelibs/cr16-filesys-file_broken.png | Bin 0 -> 696 bytes opensuse/core/tdelibs/create-kdeapi | 107 + opensuse/core/tdelibs/default-useragent.diff | 13 + opensuse/core/tdelibs/desktop-translations.diff | 209 + opensuse/core/tdelibs/disable-idn-support.diff | 34 + .../tdelibs/disable-samba-dialog-without-smb.diff | 66 + opensuse/core/tdelibs/do_make | 96 + opensuse/core/tdelibs/fileshare.diff | 296 + .../fix-dcopidlng-within-kdelibs-build.diff | 16 + opensuse/core/tdelibs/fix-gnome-help-support.diff | 130 + .../tdelibs/fix-gnome-help-support_legacy.diff | 126 + opensuse/core/tdelibs/fix-kdemm-build.diff | 88 + opensuse/core/tdelibs/fix-kerberos-printing.diff | 37 + opensuse/core/tdelibs/fix-macmenu.patch | 11 + opensuse/core/tdelibs/fix-qxembed.diff | 80 + opensuse/core/tdelibs/flash-player-non-oss.diff | 44 + .../core/tdelibs/fontconfig-reverse-lookup.diff | 137 + opensuse/core/tdelibs/gcc44.diff | 20 + opensuse/core/tdelibs/gcc45.diff | 31 + opensuse/core/tdelibs/google-mail.diff | 18 + opensuse/core/tdelibs/ignore-inline-menu.diff | 18 + .../tdelibs/integrate-global-pixmaps-10.1.diff | 26 + .../core/tdelibs/integrate-global-pixmaps-new.diff | 13 + opensuse/core/tdelibs/kcontrol_crash_patch.diff | 11 + opensuse/core/tdelibs/kde3rc.dif | 17 + opensuse/core/tdelibs/kde4-applications.diff | 70 + opensuse/core/tdelibs/kdecode_fakes_include.diff | 18 + .../tdelibs/kdelibs-3.5.10-CVE-2009-2702.patch | 62 + .../tdelibs/kdelibs-3.5.10-cve-2009-1698.patch | 42 + .../tdelibs/kdelibs-3.5.10-cve-2009-1725.patch | 13 + ...delibs-3.5.10-cve-2009-2537-select-length.patch | 30 + opensuse/core/tdelibs/kdelibs-3.5.10-kio.patch | 47 + .../kdelibs-3.5.10-latex-syntax-kile-2.0.3.patch | 143 + .../core/tdelibs/kdelibs-3.5.10-ossl-1.x.patch | 180 + opensuse/core/tdelibs/kdelibs-3.5.10.tar.bz2 | Bin 0 -> 15614607 bytes opensuse/core/tdelibs/kdelibs-3.5.12.99.tar.bz2 | Bin 0 -> 14993135 bytes .../core/tdelibs/kdelibs-3.5.4-CVE-2009-1690.patch | 545 ++ .../core/tdelibs/kdelibs3-gcc-4.1-miscompile.diff | 15 + .../tdelibs/kdelibs3-hicolor-scalable-sizes.patch | 50 + .../tdelibs/kdelibs_networkstatus_branch2.diff | 69 + opensuse/core/tdelibs/kdemm-20050330.tar.bz2 | Bin 0 -> 42068 bytes opensuse/core/tdelibs/kdemm-filepreview.diff | 40 + opensuse/core/tdelibs/kdemm.diff | 669 ++ opensuse/core/tdelibs/kdeprint-restart-cupsd.diff | 32 + opensuse/core/tdelibs/kdeprint-utf8.diff | 13 + opensuse/core/tdelibs/kdesu-settings.diff | 50 + opensuse/core/tdelibs/kdeversion.diff | 13 + opensuse/core/tdelibs/kfile-beagle.diff | 42 + opensuse/core/tdelibs/kickoff-drop-shadow.diff | 177 + opensuse/core/tdelibs/kimproxy-warning.diff | 13 + opensuse/core/tdelibs/kmimelist.diff | 81 + opensuse/core/tdelibs/kremoteencoding-utf8.diff | 28 + opensuse/core/tdelibs/ktip-icon-hack.diff | 56 + opensuse/core/tdelibs/kwalletd-try-open.diff | 81 + .../core/tdelibs/light_v_2_scrollbar_patch.patch | 34 + opensuse/core/tdelibs/limit-max-image-size.diff | 28 + opensuse/core/tdelibs/lpoptions-cups-1.2.diff | 28 + opensuse/core/tdelibs/mimetype-changes.diff | 36 + opensuse/core/tdelibs/mimetype-icons.tar.bz2 | Bin 0 -> 84604 bytes opensuse/core/tdelibs/mozilla-sliders.patch | 19 + opensuse/core/tdelibs/networkstatus.diff | 6006 ++++++++++++ opensuse/core/tdelibs/no-debug-by-default.diff | 158 + .../no-progress-for-beagle-status-query.diff | 13 + opensuse/core/tdelibs/noauto-package.diff | 13 + opensuse/core/tdelibs/oom_score_adj.patch | 36 + .../core/tdelibs/patch-mimetype-iconnames.diff | 39 + .../core/tdelibs/prefer_distribution_settings.dif | 13 + opensuse/core/tdelibs/printpreview.patch | 14 + opensuse/core/tdelibs/r874968-ebay-crash.diff | 24 + opensuse/core/tdelibs/rubberband-selection.diff | 380 + opensuse/core/tdelibs/show-distribution.diff | 21 + opensuse/core/tdelibs/silence.diff | 13 + opensuse/core/tdelibs/smooth-scrolling.diff | 267 + opensuse/core/tdelibs/spellcheck-default-utf8.diff | 26 + opensuse/core/tdelibs/stat-on-media.diff | 14 + opensuse/core/tdelibs/tdelibs-devel-doc.changes | 2956 ++++++ opensuse/core/tdelibs/tdelibs-devel-doc.spec | 115 + opensuse/core/tdelibs/tdelibs.changes | 4301 +++++++++ opensuse/core/tdelibs/tdelibs.spec | 825 ++ opensuse/core/tdelibs/tderc | 11 + opensuse/core/tdelibs/textcompletion-editor.diff | 344 + opensuse/core/tdelibs/use-mediamanager.diff | 44 + opensuse/core/tdelibs/use-xauthlocalhostname.diff | 240 + ...icedocument.presentationml.presentation.desktop | 10 + ...mats-officedocument.spreadsheetml.sheet.desktop | 10 + ...fficedocument.wordprocessingml.document.desktop | 10 + opensuse/core/tdelibs/x-jar-desktop.diff | 10 + opensuse/core/tdelibs/x-kde-InitialPreference.diff | 16 + opensuse/core/tdelibs/xinerama.patch | 543 ++ opensuse/core/tdelibs/xml-catalog.diff | 44 + opensuse/core/tdelibs/xmlhttprequest_3.x.diff | 47 + opensuse/core/tdemultimedia/.project | 12 + opensuse/core/tdenetwork/.project | 12 + opensuse/core/tdepim/.project | 12 + opensuse/core/tdesdk/.project | 12 + opensuse/core/tdetoys/.project | 12 + opensuse/core/tdeutils/.project | 12 + opensuse/core/tdewebdev/.project | 12 + opensuse/libdbus-1-tqt-0/README.VERSION | 1 - .../libdbus-1-tqt-0/fix_circular_destructor.patch | 14 - opensuse/libdbus-1-tqt-0/fix_ifdef.patch | 18 - opensuse/libdbus-1-tqt-0/libdbus-1-tqt-0.changes | 58 - opensuse/libdbus-1-tqt-0/libdbus-1-tqt-0.spec | 135 - opensuse/libdbus-1-tqt-0/r785103.patch | 996 -- opensuse/libdbus-1-tqt-0/r795238.patch | 60 - opensuse/libdbus-tqt-1-0/README.VERSION | 1 - opensuse/libdbus-tqt-1-0/baselibs.conf | 1 - .../dbus-qt3-compile-fix-thoenig-01.patch | 85 - ...do-not-close-shared-connection-thoenig-01.patch | 12 - opensuse/libdbus-tqt-1-0/dbus-tqt-0.62.tar.bz2 | Bin 187005 -> 0 bytes opensuse/libdbus-tqt-1-0/libdbus-tqt-1-0.changes | 61 - opensuse/libdbus-tqt-1-0/libdbus-tqt-1-0.spec | 147 - opensuse/libtqt4/libtqt4.changes | 11 - opensuse/libtqt4/libtqt4.spec | 173 - opensuse/libtqt4/tqtinterface-3.5.12.99.tar.bz2 | Bin 768340 -> 0 bytes opensuse/qt3/_link | 8 - opensuse/tde-filesystem/COPYING | 502 - opensuse/tde-filesystem/macros.tde | 150 - opensuse/tde-filesystem/tde-filesystem.changes | 5 - opensuse/tde-filesystem/tde-filesystem.spec | 61 - opensuse/tdebase/3_5_BRANCH.diff | 1176 --- opensuse/tdebase/access.diff | 51 - opensuse/tdebase/applet-lock-logout.diff | 122 - opensuse/tdebase/arts-start-on-demand.diff | 98 - opensuse/tdebase/artwork.diff | 35 - opensuse/tdebase/autorun.patch | 27 - opensuse/tdebase/background_default.diff | 13 - opensuse/tdebase/baselibs.conf | 2 - opensuse/tdebase/beagle-0.3.diff | 21 - opensuse/tdebase/bnc.desktop | 8 - opensuse/tdebase/bnc584223.diff | 189 - opensuse/tdebase/clock-applet-style.diff | 22 - opensuse/tdebase/clock-suse-integrate.diff | 288 - opensuse/tdebase/console8x16.pcf.gz | Bin 12244 -> 0 bytes opensuse/tdebase/default-kdeprintfax.diff | 13 - opensuse/tdebase/default_fonts.diff | 25 - opensuse/tdebase/devmon-automounter.sh | 1086 --- opensuse/tdebase/dont-always-start-kaccess.diff | 66 - opensuse/tdebase/fileshareset.8.gz | Bin 1086 -> 0 bytes opensuse/tdebase/fileshareset2.tar.bz2 | Bin 8677 -> 0 bytes opensuse/tdebase/fix-desktop-icons.diff | 250 - opensuse/tdebase/fix-kcontrol-yast.diff | 63 - opensuse/tdebase/fix-kio-smb-auth.diff | 13 - opensuse/tdebase/fix-lockup-from-gnome-apps.diff | 20 - opensuse/tdebase/fix_default_theme_reset.diff | 59 - opensuse/tdebase/gcc44.diff | 20 - opensuse/tdebase/hide-only-showin-entries.diff | 14 - .../improve-panelservicemenu-geticonset.diff | 32 - opensuse/tdebase/ioslaveinfo-icon.diff | 13 - opensuse/tdebase/kcheckpass-pam-11.0 | 6 - opensuse/tdebase/kcheckpass-pam-11.1 | 5 - opensuse/tdebase/kcheckpass-pam-legacy | 7 - opensuse/tdebase/kcheckpass.8.gz | Bin 836 -> 0 bytes opensuse/tdebase/kcminit-ignore-arts.diff | 14 - opensuse/tdebase/kcmkdm-default-grub.diff | 13 - opensuse/tdebase/kcmsamba_log.diff | 31 - opensuse/tdebase/kcmshell_use_kde-sound.diff | 11 - opensuse/tdebase/kcontrol-energy.diff | 167 - opensuse/tdebase/kcontrol.diff | 11 - opensuse/tdebase/kde3-session-restore.diff | 12 - opensuse/tdebase/kde3-session.diff | 13 - opensuse/tdebase/kdebase_khc_rellinks.diff | 606 -- opensuse/tdebase/kdebase_networkstatus_branch.diff | 36 - opensuse/tdebase/kdeeject.diff | 58 - opensuse/tdebase/kdesktop_icons.diff | 311 - opensuse/tdebase/kdesu-remember-keep-password.diff | 18 - opensuse/tdebase/kdesud-security.diff | 21 - opensuse/tdebase/kdm-admin-mode.diff | 424 - opensuse/tdebase/kdm-aliasing.diff | 11 - opensuse/tdebase/kdm-align-userlist-labels.diff | 46 - opensuse/tdebase/kdm-all-users-nopass.diff | 34 - opensuse/tdebase/kdm-audit-log.diff | 190 - opensuse/tdebase/kdm-color-scheme.diff | 28 - opensuse/tdebase/kdm-consolekit.diff | 822 -- opensuse/tdebase/kdm-cope-with-new-grub.diff | 27 - opensuse/tdebase/kdm-make_it_cool.diff | 1534 --- opensuse/tdebase/kdm-mark_autologin.diff | 13 - opensuse/tdebase/kdm-pam-np-legacy | 7 - opensuse/tdebase/kdm-relaxed-auth.diff | 22 - opensuse/tdebase/kdm-suspend-hal.diff | 331 - opensuse/tdebase/kdm-sysconfig-values.diff | 737 -- opensuse/tdebase/kdm-use-rpmoptflags.diff | 29 - opensuse/tdebase/kdm-wordbreak.diff | 22 - opensuse/tdebase/kfontinst.diff | 10 - opensuse/tdebase/khelpcenter-beagle.diff | 172 - .../tdebase/khelpcenter-delayed-indexcheck.cpp | 23 - .../tdebase/khelpcenter-gnome-support-legacy.patch | 327 - opensuse/tdebase/khelpcenter-gnome-support.patch | 335 - opensuse/tdebase/khelpcenter-localindices.patch | 41 - .../khelpcenter-use-suseconfig-indexer.diff | 25 - opensuse/tdebase/khelpcenter-use-susehelp.diff | 13 - opensuse/tdebase/khotkeys-multimedia-action.diff | 345 - opensuse/tdebase/khotkeys-multimedia-action2.diff | 81 - opensuse/tdebase/kicker-defaults.diff | 57 - opensuse/tdebase/kickerrc | 63 - opensuse/tdebase/kickoff-beagle.diff | 1329 --- opensuse/tdebase/kickoff-data.tar.bz2 | Bin 581352 -> 0 bytes opensuse/tdebase/kickoff-install-software.diff | 25 - opensuse/tdebase/kickoff-kcm.diff | 217 - opensuse/tdebase/kickoff.diff | 9812 -------------------- opensuse/tdebase/kio-media-errorhandling.diff | 18 - opensuse/tdebase/klipperrc.diff | 22 - .../tdebase/kmenu-search-fs20050503-fixed.diff | 342 - opensuse/tdebase/kmenu-search-slowdown-fix.diff | 129 - opensuse/tdebase/knetattach-show.diff | 7 - opensuse/tdebase/kompmgr_use_defaults.diff | 34 - opensuse/tdebase/konq-combo-editor.diff | 42 - opensuse/tdebase/konsole-schema-update.diff | 33 - opensuse/tdebase/konsole_keytab.diff | 17 - opensuse/tdebase/kpamgreeter.diff | 852 -- opensuse/tdebase/krandr-0.5.2.1.diff.bz2 | Bin 22752 -> 0 bytes opensuse/tdebase/kscreensaver-random-NG.diff | 189 - opensuse/tdebase/ksmserver-defaulttohalt.diff | 13 - opensuse/tdebase/ksmserver-kdeinit.diff | 67 - opensuse/tdebase/ksmserver-suspend.diff | 233 - opensuse/tdebase/ksmserver-timed.diff | 700 -- opensuse/tdebase/ksmserver-tooltips.diff | 38 - opensuse/tdebase/ksplashml.patch | 19 - opensuse/tdebase/ksysguard-slp-ratelimit.diff | 15 - opensuse/tdebase/ksysguardd-openslp.diff | 288 - opensuse/tdebase/ksysguardd.init | 80 - opensuse/tdebase/ksysguardd.reg | 12 - opensuse/tdebase/kwinbindings.diff | 43 - opensuse/tdebase/kxkb-include-latin-layout.diff | 14 - opensuse/tdebase/less_verbal_kdesu.patch | 26 - opensuse/tdebase/libkonq-kdemm.diff | 117 - opensuse/tdebase/locale-dont-show-flag.diff | 33 - opensuse/tdebase/lock-xvkbd.diff | 380 - opensuse/tdebase/lowdiskspace.patch | 413 - opensuse/tdebase/mach_blass.diff | 160 - opensuse/tdebase/make-wallpapers-hideable.diff | 48 - opensuse/tdebase/media-cryptosupport.diff | 31 - opensuse/tdebase/media-iPod.diff | 26 - opensuse/tdebase/media-teardown_crypto.diff | 175 - opensuse/tdebase/media_suse.diff | 49 - .../tdebase/mediamanager-mount-point-utf8.diff | 13 - opensuse/tdebase/minicli-combo-editor.diff | 34 - opensuse/tdebase/mp3-info.tar.bz2 | Bin 2606 -> 0 bytes opensuse/tdebase/mtab-reenable.patch | 153 - opensuse/tdebase/non-fast-malloc.diff | 15 - opensuse/tdebase/nsplugin-Preference.diff | 13 - opensuse/tdebase/nsplugin-init-gtk.diff | 49 - opensuse/tdebase/openssl1.patch | 40 - opensuse/tdebase/optional-compmgr.diff | 32 - opensuse/tdebase/quick_browser_menu.diff | 30 - opensuse/tdebase/remove-beagle-stuff.diff | 34 - opensuse/tdebase/restore-description-parens.diff | 13 - opensuse/tdebase/rotate-wacom-pointers.diff | 291 - opensuse/tdebase/runupdater.patch | 133 - opensuse/tdebase/select-wm-gui.diff | 635 -- opensuse/tdebase/short-menus.diff | 209 - opensuse/tdebase/show-konqueror-in-menu.diff | 30 - opensuse/tdebase/simplify-randr-settings.diff | 91 - opensuse/tdebase/sourceforge.desktop | 7 - opensuse/tdebase/spellcheck-default-utf8.diff | 13 - opensuse/tdebase/startkde.diff | 80 - opensuse/tdebase/startkde.suse.sh | 140 - opensuse/tdebase/stopkde.suse.sh | 13 - opensuse/tdebase/suse_default_move.diff | 83 - opensuse/tdebase/suspend-kpowersave.diff | 178 - opensuse/tdebase/suspend-unmount.diff | 179 - opensuse/tdebase/system-folder_man.diff | 13 - opensuse/tdebase/systray_order.diff | 162 - opensuse/tdebase/taskbar.patch | 29 - opensuse/tdebase/tdebase.changes | 5422 ----------- opensuse/tdebase/tdebase.fillup | 25 - opensuse/tdebase/tdebase.spec | 1851 ---- opensuse/tdebase/teach-minicli-lock.diff | 30 - opensuse/tdebase/uninit.diff | 10 - opensuse/tdebase/use-full-hinting-by-default.diff | 35 - opensuse/tdebase/use-pam-before-classic.diff | 17 - opensuse/tdebase/wizard_small.png | Bin 40259 -> 0 bytes .../workaround-pdf-on64bit-nsplugin-bug.diff | 44 - opensuse/tdebase/xcursor.diff | 36 - opensuse/tdebase/xinerama.patch | 951 -- opensuse/tdebase/zh_TW.flag.png | Bin 175 -> 0 bytes opensuse/tdelibs/10888-bt.tar.gz | Bin 48208 -> 0 bytes opensuse/tdelibs/3_5_BRANCH.diff | 126 - opensuse/tdelibs/CATALOG.kdelibs3.diff | 139 - opensuse/tdelibs/add-suse-translations.diff | 14 - opensuse/tdelibs/admin.diff | 55 - opensuse/tdelibs/admin.tar.bz2 | Bin 188090 -> 0 bytes opensuse/tdelibs/allow-man-setgid.diff | 32 - opensuse/tdelibs/api_docu_description | 36 - opensuse/tdelibs/applications.menu-fallback.diff | 19 - opensuse/tdelibs/arts-acinclude.patch | 66 - opensuse/tdelibs/artwork.diff | 46 - opensuse/tdelibs/autostart-spec.diff | 55 - opensuse/tdelibs/avahi-pidfile.diff | 13 - opensuse/tdelibs/baselibs.conf | 3 - opensuse/tdelibs/bnc557126.diff | 21 - .../tdelibs/bug-382959_kabc_fix_vcardparser.patch | 562 -- opensuse/tdelibs/bug-399296_ftphandling-fix.diff | 57 - opensuse/tdelibs/bundle-locale-help.diff | 107 - opensuse/tdelibs/clever-menu.diff | 221 - opensuse/tdelibs/common_options | 156 - opensuse/tdelibs/cr16-filesys-file_broken.png | Bin 696 -> 0 bytes opensuse/tdelibs/create-kdeapi | 107 - opensuse/tdelibs/default-useragent.diff | 13 - opensuse/tdelibs/desktop-translations.diff | 209 - opensuse/tdelibs/disable-idn-support.diff | 34 - .../tdelibs/disable-samba-dialog-without-smb.diff | 66 - opensuse/tdelibs/do_make | 96 - opensuse/tdelibs/fileshare.diff | 296 - .../fix-dcopidlng-within-kdelibs-build.diff | 16 - opensuse/tdelibs/fix-gnome-help-support.diff | 130 - .../tdelibs/fix-gnome-help-support_legacy.diff | 126 - opensuse/tdelibs/fix-kdemm-build.diff | 88 - opensuse/tdelibs/fix-kerberos-printing.diff | 37 - opensuse/tdelibs/fix-macmenu.patch | 11 - opensuse/tdelibs/fix-qxembed.diff | 80 - opensuse/tdelibs/flash-player-non-oss.diff | 44 - opensuse/tdelibs/fontconfig-reverse-lookup.diff | 137 - opensuse/tdelibs/gcc44.diff | 20 - opensuse/tdelibs/gcc45.diff | 31 - opensuse/tdelibs/google-mail.diff | 18 - opensuse/tdelibs/ignore-inline-menu.diff | 18 - .../tdelibs/integrate-global-pixmaps-10.1.diff | 26 - opensuse/tdelibs/integrate-global-pixmaps-new.diff | 13 - opensuse/tdelibs/kcontrol_crash_patch.diff | 11 - opensuse/tdelibs/kde3rc.dif | 17 - opensuse/tdelibs/kde4-applications.diff | 70 - opensuse/tdelibs/kdecode_fakes_include.diff | 18 - .../tdelibs/kdelibs-3.5.10-CVE-2009-2702.patch | 62 - .../tdelibs/kdelibs-3.5.10-cve-2009-1698.patch | 42 - .../tdelibs/kdelibs-3.5.10-cve-2009-1725.patch | 13 - ...delibs-3.5.10-cve-2009-2537-select-length.patch | 30 - opensuse/tdelibs/kdelibs-3.5.10-kio.patch | 47 - .../kdelibs-3.5.10-latex-syntax-kile-2.0.3.patch | 143 - opensuse/tdelibs/kdelibs-3.5.10-ossl-1.x.patch | 180 - opensuse/tdelibs/kdelibs-3.5.10.tar.bz2 | Bin 15614607 -> 0 bytes opensuse/tdelibs/kdelibs-3.5.12.99.tar.bz2 | Bin 14993135 -> 0 bytes opensuse/tdelibs/kdelibs-3.5.4-CVE-2009-1690.patch | 545 -- opensuse/tdelibs/kdelibs3-gcc-4.1-miscompile.diff | 15 - .../tdelibs/kdelibs3-hicolor-scalable-sizes.patch | 50 - .../tdelibs/kdelibs_networkstatus_branch2.diff | 69 - opensuse/tdelibs/kdemm-20050330.tar.bz2 | Bin 42068 -> 0 bytes opensuse/tdelibs/kdemm-filepreview.diff | 40 - opensuse/tdelibs/kdemm.diff | 669 -- opensuse/tdelibs/kdeprint-restart-cupsd.diff | 32 - opensuse/tdelibs/kdeprint-utf8.diff | 13 - opensuse/tdelibs/kdesu-settings.diff | 50 - opensuse/tdelibs/kdeversion.diff | 13 - opensuse/tdelibs/kfile-beagle.diff | 42 - opensuse/tdelibs/kickoff-drop-shadow.diff | 177 - opensuse/tdelibs/kimproxy-warning.diff | 13 - opensuse/tdelibs/kmimelist.diff | 81 - opensuse/tdelibs/kremoteencoding-utf8.diff | 28 - opensuse/tdelibs/ktip-icon-hack.diff | 56 - opensuse/tdelibs/kwalletd-try-open.diff | 81 - opensuse/tdelibs/light_v_2_scrollbar_patch.patch | 34 - opensuse/tdelibs/limit-max-image-size.diff | 28 - opensuse/tdelibs/lpoptions-cups-1.2.diff | 28 - opensuse/tdelibs/mimetype-changes.diff | 36 - opensuse/tdelibs/mimetype-icons.tar.bz2 | Bin 84604 -> 0 bytes opensuse/tdelibs/mozilla-sliders.patch | 19 - opensuse/tdelibs/networkstatus.diff | 6006 ------------ opensuse/tdelibs/no-debug-by-default.diff | 158 - .../no-progress-for-beagle-status-query.diff | 13 - opensuse/tdelibs/noauto-package.diff | 13 - opensuse/tdelibs/oom_score_adj.patch | 36 - opensuse/tdelibs/patch-mimetype-iconnames.diff | 39 - opensuse/tdelibs/prefer_distribution_settings.dif | 13 - opensuse/tdelibs/printpreview.patch | 14 - opensuse/tdelibs/r874968-ebay-crash.diff | 24 - opensuse/tdelibs/rubberband-selection.diff | 380 - opensuse/tdelibs/show-distribution.diff | 21 - opensuse/tdelibs/silence.diff | 13 - opensuse/tdelibs/smooth-scrolling.diff | 267 - opensuse/tdelibs/spellcheck-default-utf8.diff | 26 - opensuse/tdelibs/stat-on-media.diff | 14 - opensuse/tdelibs/tdelibs-devel-doc.changes | 2956 ------ opensuse/tdelibs/tdelibs-devel-doc.spec | 115 - opensuse/tdelibs/tdelibs.changes | 4301 --------- opensuse/tdelibs/tdelibs.spec | 825 -- opensuse/tdelibs/tderc | 11 - opensuse/tdelibs/textcompletion-editor.diff | 344 - opensuse/tdelibs/use-mediamanager.diff | 44 - opensuse/tdelibs/use-xauthlocalhostname.diff | 240 - ...icedocument.presentationml.presentation.desktop | 10 - ...mats-officedocument.spreadsheetml.sheet.desktop | 10 - ...fficedocument.wordprocessingml.document.desktop | 10 - opensuse/tdelibs/x-jar-desktop.diff | 10 - opensuse/tdelibs/x-kde-InitialPreference.diff | 16 - opensuse/tdelibs/xinerama.patch | 543 -- opensuse/tdelibs/xml-catalog.diff | 44 - opensuse/tdelibs/xmlhttprequest_3.x.diff | 47 - 670 files changed, 65724 insertions(+), 64884 deletions(-) delete mode 100644 opensuse/arts/arts-1.5.10.tar.bz2 delete mode 100644 opensuse/arts/arts-start-on-demand.diff delete mode 100644 opensuse/arts/arts-vorbis-fix.dif delete mode 100644 opensuse/arts/arts.changes delete mode 100644 opensuse/arts/arts.spec delete mode 100644 opensuse/arts/artswrapper.7.gz delete mode 100644 opensuse/arts/avoid_la_files.diff delete mode 100644 opensuse/arts/baselibs.conf delete mode 100644 opensuse/arts/fortify_source.patch delete mode 100644 opensuse/arts/no-informational-messages.diff create mode 100644 opensuse/core/.metadata/.atlassian-connector-for-eclipse/usage-data.xml create mode 100644 opensuse/core/.metadata/.lock create mode 100644 opensuse/core/.metadata/.log create mode 100644 opensuse/core/.metadata/.mylyn/.repositories.xml.zip create mode 100644 opensuse/core/.metadata/.mylyn/repositories.xml.zip create mode 100644 opensuse/core/.metadata/.plugins/com.atlassian.connector.eclipse.bamboo.core/repositoryConfigurations create mode 100644 opensuse/core/.metadata/.plugins/com.atlassian.connector.eclipse.jira.core/serverCache/repositoryConfigurations create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.cdt.core/.log create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/history.version create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/properties.index create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/properties.version create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.root/2.tree create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.safetable/org.eclipse.core.resources create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.core.runtime/.settings/com.atlassian.connector.eclipse.bamboo.ui.prefs create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.core.runtime/.settings/com.atlassian.connector.eclipse.jira.ui.prefs create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.core.runtime/.settings/com.atlassian.connector.eclipse.monitor.ui.prefs create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.cdt.debug.core.prefs create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.cdt.ui.prefs create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.core.resources.prefs create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.debug.ui.prefs create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.epp.mpc.ui.prefs create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.jdt.ui.prefs create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.m2e.discovery.prefs create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.mylyn.context.core.prefs create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.mylyn.monitor.ui.prefs create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.mylyn.tasks.ui.prefs create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.team.ui.prefs create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.editors.prefs create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.ide.prefs create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.prefs create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.workbench.prefs create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.equinox.p2.ui/dialog_settings.xml create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.equinox.security.ui/dialog_settings.xml create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.jdt.core/invalidArchivesCache create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.jdt.core/nonChainingJarsCache create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.jdt.core/variablesAndContainers.dat create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.jdt.ui/OpenTypeHistory.xml create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.jdt.ui/QualifiedTypeNameHistory.xml create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.jdt.ui/dialog_settings.xml create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.ltk.core.refactoring/.refactorings/.workspace/2011/11/46/refactorings.history create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.ltk.core.refactoring/.refactorings/.workspace/2011/11/46/refactorings.index create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.ltk.ui.refactoring/dialog_settings.xml create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.m2e.logback.configuration/0.log create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.m2e.logback.configuration/logback.1.0.100.20110804-1717.xml create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.team.ui/syncParticipants.xml create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.ui.editors/dialog_settings.xml create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.ui.ide/dialog_settings.xml create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.ui.intro/dialog_settings.xml create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.ui.workbench/dialog_settings.xml create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.ui.workbench/workbench.xml create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.ui.workbench/workingsets.xml create mode 100644 opensuse/core/.metadata/version.ini create mode 100644 opensuse/core/arts/.project create mode 100644 opensuse/core/arts/arts-start-on-demand.diff create mode 100644 opensuse/core/arts/arts-vorbis-fix.dif create mode 100644 opensuse/core/arts/arts.changes create mode 100644 opensuse/core/arts/arts.spec create mode 100644 opensuse/core/arts/artswrapper.7.gz create mode 100644 opensuse/core/arts/avoid_la_files.diff create mode 100644 opensuse/core/arts/baselibs.conf create mode 100644 opensuse/core/arts/fortify_source.patch create mode 100644 opensuse/core/arts/no-informational-messages.diff create mode 100644 opensuse/core/libdbus-1-tqt-0/.project create mode 100644 opensuse/core/libdbus-1-tqt-0/README.VERSION create mode 100644 opensuse/core/libdbus-1-tqt-0/fix_circular_destructor.patch create mode 100644 opensuse/core/libdbus-1-tqt-0/fix_ifdef.patch create mode 100644 opensuse/core/libdbus-1-tqt-0/libdbus-1-tqt-0.changes create mode 100644 opensuse/core/libdbus-1-tqt-0/libdbus-1-tqt-0.spec create mode 100644 opensuse/core/libdbus-1-tqt-0/r785103.patch create mode 100644 opensuse/core/libdbus-1-tqt-0/r795238.patch create mode 100644 opensuse/core/libdbus-tqt-1-0/.project create mode 100644 opensuse/core/libdbus-tqt-1-0/README.VERSION create mode 100644 opensuse/core/libdbus-tqt-1-0/baselibs.conf create mode 100644 opensuse/core/libdbus-tqt-1-0/dbus-qt3-compile-fix-thoenig-01.patch create mode 100644 opensuse/core/libdbus-tqt-1-0/dbus-qt3-do-not-close-shared-connection-thoenig-01.patch create mode 100644 opensuse/core/libdbus-tqt-1-0/libdbus-tqt-1-0.changes create mode 100644 opensuse/core/libdbus-tqt-1-0/libdbus-tqt-1-0.spec create mode 100644 opensuse/core/libtqt4/.project create mode 100644 opensuse/core/libtqt4/libtqt4.changes create mode 100644 opensuse/core/libtqt4/libtqt4.spec create mode 100644 opensuse/core/qt3/.project create mode 100644 opensuse/core/tde-filesystem/.project create mode 100644 opensuse/core/tde-filesystem/COPYING create mode 100644 opensuse/core/tde-filesystem/macros.tde create mode 100644 opensuse/core/tde-filesystem/tde-filesystem.changes create mode 100644 opensuse/core/tde-filesystem/tde-filesystem.spec create mode 100644 opensuse/core/tdeaccessibility/.project create mode 100644 opensuse/core/tdeaddons/.project create mode 100644 opensuse/core/tdeartwork/.project create mode 100644 opensuse/core/tdebase/.project create mode 100644 opensuse/core/tdebase/3_5_BRANCH.diff create mode 100644 opensuse/core/tdebase/access.diff create mode 100644 opensuse/core/tdebase/applet-lock-logout.diff create mode 100644 opensuse/core/tdebase/arts-start-on-demand.diff create mode 100644 opensuse/core/tdebase/artwork.diff create mode 100644 opensuse/core/tdebase/autorun.patch create mode 100644 opensuse/core/tdebase/background_default.diff create mode 100644 opensuse/core/tdebase/baselibs.conf create mode 100644 opensuse/core/tdebase/beagle-0.3.diff create mode 100644 opensuse/core/tdebase/bnc.desktop create mode 100644 opensuse/core/tdebase/bnc584223.diff create mode 100644 opensuse/core/tdebase/clock-applet-style.diff create mode 100644 opensuse/core/tdebase/clock-suse-integrate.diff create mode 100644 opensuse/core/tdebase/console8x16.pcf.gz create mode 100644 opensuse/core/tdebase/default-kdeprintfax.diff create mode 100644 opensuse/core/tdebase/default_fonts.diff create mode 100644 opensuse/core/tdebase/devmon-automounter.sh create mode 100644 opensuse/core/tdebase/dont-always-start-kaccess.diff create mode 100644 opensuse/core/tdebase/fileshareset.8.gz create mode 100644 opensuse/core/tdebase/fileshareset2.tar.bz2 create mode 100644 opensuse/core/tdebase/fix-desktop-icons.diff create mode 100644 opensuse/core/tdebase/fix-kcontrol-yast.diff create mode 100644 opensuse/core/tdebase/fix-kio-smb-auth.diff create mode 100644 opensuse/core/tdebase/fix-lockup-from-gnome-apps.diff create mode 100644 opensuse/core/tdebase/fix_default_theme_reset.diff create mode 100644 opensuse/core/tdebase/gcc44.diff create mode 100644 opensuse/core/tdebase/hide-only-showin-entries.diff create mode 100644 opensuse/core/tdebase/improve-panelservicemenu-geticonset.diff create mode 100644 opensuse/core/tdebase/ioslaveinfo-icon.diff create mode 100644 opensuse/core/tdebase/kcheckpass-pam-11.0 create mode 100644 opensuse/core/tdebase/kcheckpass-pam-11.1 create mode 100644 opensuse/core/tdebase/kcheckpass-pam-legacy create mode 100644 opensuse/core/tdebase/kcheckpass.8.gz create mode 100644 opensuse/core/tdebase/kcminit-ignore-arts.diff create mode 100644 opensuse/core/tdebase/kcmkdm-default-grub.diff create mode 100644 opensuse/core/tdebase/kcmsamba_log.diff create mode 100644 opensuse/core/tdebase/kcmshell_use_kde-sound.diff create mode 100644 opensuse/core/tdebase/kcontrol-energy.diff create mode 100644 opensuse/core/tdebase/kcontrol.diff create mode 100644 opensuse/core/tdebase/kde3-session-restore.diff create mode 100644 opensuse/core/tdebase/kde3-session.diff create mode 100644 opensuse/core/tdebase/kdebase_khc_rellinks.diff create mode 100644 opensuse/core/tdebase/kdebase_networkstatus_branch.diff create mode 100644 opensuse/core/tdebase/kdeeject.diff create mode 100644 opensuse/core/tdebase/kdesktop_icons.diff create mode 100644 opensuse/core/tdebase/kdesu-remember-keep-password.diff create mode 100644 opensuse/core/tdebase/kdesud-security.diff create mode 100644 opensuse/core/tdebase/kdm-admin-mode.diff create mode 100644 opensuse/core/tdebase/kdm-aliasing.diff create mode 100644 opensuse/core/tdebase/kdm-align-userlist-labels.diff create mode 100644 opensuse/core/tdebase/kdm-all-users-nopass.diff create mode 100644 opensuse/core/tdebase/kdm-audit-log.diff create mode 100644 opensuse/core/tdebase/kdm-color-scheme.diff create mode 100644 opensuse/core/tdebase/kdm-consolekit.diff create mode 100644 opensuse/core/tdebase/kdm-cope-with-new-grub.diff create mode 100644 opensuse/core/tdebase/kdm-make_it_cool.diff create mode 100644 opensuse/core/tdebase/kdm-mark_autologin.diff create mode 100644 opensuse/core/tdebase/kdm-pam-np-legacy create mode 100644 opensuse/core/tdebase/kdm-relaxed-auth.diff create mode 100644 opensuse/core/tdebase/kdm-suspend-hal.diff create mode 100644 opensuse/core/tdebase/kdm-sysconfig-values.diff create mode 100644 opensuse/core/tdebase/kdm-use-rpmoptflags.diff create mode 100644 opensuse/core/tdebase/kdm-wordbreak.diff create mode 100644 opensuse/core/tdebase/kfontinst.diff create mode 100644 opensuse/core/tdebase/khelpcenter-beagle.diff create mode 100644 opensuse/core/tdebase/khelpcenter-delayed-indexcheck.cpp create mode 100644 opensuse/core/tdebase/khelpcenter-gnome-support-legacy.patch create mode 100644 opensuse/core/tdebase/khelpcenter-gnome-support.patch create mode 100644 opensuse/core/tdebase/khelpcenter-localindices.patch create mode 100644 opensuse/core/tdebase/khelpcenter-use-suseconfig-indexer.diff create mode 100644 opensuse/core/tdebase/khelpcenter-use-susehelp.diff create mode 100644 opensuse/core/tdebase/khotkeys-multimedia-action.diff create mode 100644 opensuse/core/tdebase/khotkeys-multimedia-action2.diff create mode 100644 opensuse/core/tdebase/kicker-defaults.diff create mode 100644 opensuse/core/tdebase/kickerrc create mode 100644 opensuse/core/tdebase/kickoff-beagle.diff create mode 100644 opensuse/core/tdebase/kickoff-data.tar.bz2 create mode 100644 opensuse/core/tdebase/kickoff-install-software.diff create mode 100644 opensuse/core/tdebase/kickoff-kcm.diff create mode 100644 opensuse/core/tdebase/kickoff.diff create mode 100644 opensuse/core/tdebase/kio-media-errorhandling.diff create mode 100644 opensuse/core/tdebase/klipperrc.diff create mode 100644 opensuse/core/tdebase/kmenu-search-fs20050503-fixed.diff create mode 100644 opensuse/core/tdebase/kmenu-search-slowdown-fix.diff create mode 100644 opensuse/core/tdebase/knetattach-show.diff create mode 100644 opensuse/core/tdebase/kompmgr_use_defaults.diff create mode 100644 opensuse/core/tdebase/konq-combo-editor.diff create mode 100644 opensuse/core/tdebase/konsole-schema-update.diff create mode 100644 opensuse/core/tdebase/konsole_keytab.diff create mode 100644 opensuse/core/tdebase/kpamgreeter.diff create mode 100644 opensuse/core/tdebase/krandr-0.5.2.1.diff.bz2 create mode 100644 opensuse/core/tdebase/kscreensaver-random-NG.diff create mode 100644 opensuse/core/tdebase/ksmserver-defaulttohalt.diff create mode 100644 opensuse/core/tdebase/ksmserver-kdeinit.diff create mode 100644 opensuse/core/tdebase/ksmserver-suspend.diff create mode 100644 opensuse/core/tdebase/ksmserver-timed.diff create mode 100644 opensuse/core/tdebase/ksmserver-tooltips.diff create mode 100644 opensuse/core/tdebase/ksplashml.patch create mode 100644 opensuse/core/tdebase/ksysguard-slp-ratelimit.diff create mode 100644 opensuse/core/tdebase/ksysguardd-openslp.diff create mode 100644 opensuse/core/tdebase/ksysguardd.init create mode 100644 opensuse/core/tdebase/ksysguardd.reg create mode 100644 opensuse/core/tdebase/kwinbindings.diff create mode 100644 opensuse/core/tdebase/kxkb-include-latin-layout.diff create mode 100644 opensuse/core/tdebase/less_verbal_kdesu.patch create mode 100644 opensuse/core/tdebase/libkonq-kdemm.diff create mode 100644 opensuse/core/tdebase/locale-dont-show-flag.diff create mode 100644 opensuse/core/tdebase/lock-xvkbd.diff create mode 100644 opensuse/core/tdebase/lowdiskspace.patch create mode 100644 opensuse/core/tdebase/mach_blass.diff create mode 100644 opensuse/core/tdebase/make-wallpapers-hideable.diff create mode 100644 opensuse/core/tdebase/media-cryptosupport.diff create mode 100644 opensuse/core/tdebase/media-iPod.diff create mode 100644 opensuse/core/tdebase/media-teardown_crypto.diff create mode 100644 opensuse/core/tdebase/media_suse.diff create mode 100644 opensuse/core/tdebase/mediamanager-mount-point-utf8.diff create mode 100644 opensuse/core/tdebase/minicli-combo-editor.diff create mode 100644 opensuse/core/tdebase/mp3-info.tar.bz2 create mode 100644 opensuse/core/tdebase/mtab-reenable.patch create mode 100644 opensuse/core/tdebase/non-fast-malloc.diff create mode 100644 opensuse/core/tdebase/nsplugin-Preference.diff create mode 100644 opensuse/core/tdebase/nsplugin-init-gtk.diff create mode 100644 opensuse/core/tdebase/openssl1.patch create mode 100644 opensuse/core/tdebase/optional-compmgr.diff create mode 100644 opensuse/core/tdebase/quick_browser_menu.diff create mode 100644 opensuse/core/tdebase/remove-beagle-stuff.diff create mode 100644 opensuse/core/tdebase/restore-description-parens.diff create mode 100644 opensuse/core/tdebase/rotate-wacom-pointers.diff create mode 100644 opensuse/core/tdebase/runupdater.patch create mode 100644 opensuse/core/tdebase/select-wm-gui.diff create mode 100644 opensuse/core/tdebase/short-menus.diff create mode 100644 opensuse/core/tdebase/show-konqueror-in-menu.diff create mode 100644 opensuse/core/tdebase/simplify-randr-settings.diff create mode 100644 opensuse/core/tdebase/sourceforge.desktop create mode 100644 opensuse/core/tdebase/spellcheck-default-utf8.diff create mode 100644 opensuse/core/tdebase/startkde.diff create mode 100644 opensuse/core/tdebase/startkde.suse.sh create mode 100644 opensuse/core/tdebase/stopkde.suse.sh create mode 100644 opensuse/core/tdebase/suse_default_move.diff create mode 100644 opensuse/core/tdebase/suspend-kpowersave.diff create mode 100644 opensuse/core/tdebase/suspend-unmount.diff create mode 100644 opensuse/core/tdebase/system-folder_man.diff create mode 100644 opensuse/core/tdebase/systray_order.diff create mode 100644 opensuse/core/tdebase/taskbar.patch create mode 100644 opensuse/core/tdebase/tdebase.changes create mode 100644 opensuse/core/tdebase/tdebase.fillup create mode 100644 opensuse/core/tdebase/tdebase.spec create mode 100644 opensuse/core/tdebase/teach-minicli-lock.diff create mode 100644 opensuse/core/tdebase/uninit.diff create mode 100644 opensuse/core/tdebase/use-full-hinting-by-default.diff create mode 100644 opensuse/core/tdebase/use-pam-before-classic.diff create mode 100644 opensuse/core/tdebase/wizard_small.png create mode 100644 opensuse/core/tdebase/workaround-pdf-on64bit-nsplugin-bug.diff create mode 100644 opensuse/core/tdebase/xcursor.diff create mode 100644 opensuse/core/tdebase/xinerama.patch create mode 100644 opensuse/core/tdebase/zh_TW.flag.png create mode 100644 opensuse/core/tdebindings/.project create mode 100644 opensuse/core/tdedevelop/.project create mode 100644 opensuse/core/tdeedu/.project create mode 100644 opensuse/core/tdegames/.project create mode 100644 opensuse/core/tdegraphics/.project create mode 100644 opensuse/core/tdelibs/.project create mode 100644 opensuse/core/tdelibs/10888-bt.tar.gz create mode 100644 opensuse/core/tdelibs/3_5_BRANCH.diff create mode 100644 opensuse/core/tdelibs/CATALOG.kdelibs3.diff create mode 100644 opensuse/core/tdelibs/add-suse-translations.diff create mode 100644 opensuse/core/tdelibs/admin.diff create mode 100644 opensuse/core/tdelibs/admin.tar.bz2 create mode 100644 opensuse/core/tdelibs/allow-man-setgid.diff create mode 100644 opensuse/core/tdelibs/api_docu_description create mode 100644 opensuse/core/tdelibs/applications.menu-fallback.diff create mode 100644 opensuse/core/tdelibs/arts-acinclude.patch create mode 100644 opensuse/core/tdelibs/artwork.diff create mode 100644 opensuse/core/tdelibs/autostart-spec.diff create mode 100644 opensuse/core/tdelibs/avahi-pidfile.diff create mode 100644 opensuse/core/tdelibs/baselibs.conf create mode 100644 opensuse/core/tdelibs/bnc557126.diff create mode 100644 opensuse/core/tdelibs/bug-382959_kabc_fix_vcardparser.patch create mode 100644 opensuse/core/tdelibs/bug-399296_ftphandling-fix.diff create mode 100644 opensuse/core/tdelibs/bundle-locale-help.diff create mode 100644 opensuse/core/tdelibs/clever-menu.diff create mode 100644 opensuse/core/tdelibs/common_options create mode 100644 opensuse/core/tdelibs/cr16-filesys-file_broken.png create mode 100644 opensuse/core/tdelibs/create-kdeapi create mode 100644 opensuse/core/tdelibs/default-useragent.diff create mode 100644 opensuse/core/tdelibs/desktop-translations.diff create mode 100644 opensuse/core/tdelibs/disable-idn-support.diff create mode 100644 opensuse/core/tdelibs/disable-samba-dialog-without-smb.diff create mode 100644 opensuse/core/tdelibs/do_make create mode 100644 opensuse/core/tdelibs/fileshare.diff create mode 100644 opensuse/core/tdelibs/fix-dcopidlng-within-kdelibs-build.diff create mode 100644 opensuse/core/tdelibs/fix-gnome-help-support.diff create mode 100644 opensuse/core/tdelibs/fix-gnome-help-support_legacy.diff create mode 100644 opensuse/core/tdelibs/fix-kdemm-build.diff create mode 100644 opensuse/core/tdelibs/fix-kerberos-printing.diff create mode 100644 opensuse/core/tdelibs/fix-macmenu.patch create mode 100644 opensuse/core/tdelibs/fix-qxembed.diff create mode 100644 opensuse/core/tdelibs/flash-player-non-oss.diff create mode 100644 opensuse/core/tdelibs/fontconfig-reverse-lookup.diff create mode 100644 opensuse/core/tdelibs/gcc44.diff create mode 100644 opensuse/core/tdelibs/gcc45.diff create mode 100644 opensuse/core/tdelibs/google-mail.diff create mode 100644 opensuse/core/tdelibs/ignore-inline-menu.diff create mode 100644 opensuse/core/tdelibs/integrate-global-pixmaps-10.1.diff create mode 100644 opensuse/core/tdelibs/integrate-global-pixmaps-new.diff create mode 100644 opensuse/core/tdelibs/kcontrol_crash_patch.diff create mode 100644 opensuse/core/tdelibs/kde3rc.dif create mode 100644 opensuse/core/tdelibs/kde4-applications.diff create mode 100644 opensuse/core/tdelibs/kdecode_fakes_include.diff create mode 100644 opensuse/core/tdelibs/kdelibs-3.5.10-CVE-2009-2702.patch create mode 100644 opensuse/core/tdelibs/kdelibs-3.5.10-cve-2009-1698.patch create mode 100644 opensuse/core/tdelibs/kdelibs-3.5.10-cve-2009-1725.patch create mode 100644 opensuse/core/tdelibs/kdelibs-3.5.10-cve-2009-2537-select-length.patch create mode 100644 opensuse/core/tdelibs/kdelibs-3.5.10-kio.patch create mode 100644 opensuse/core/tdelibs/kdelibs-3.5.10-latex-syntax-kile-2.0.3.patch create mode 100644 opensuse/core/tdelibs/kdelibs-3.5.10-ossl-1.x.patch create mode 100644 opensuse/core/tdelibs/kdelibs-3.5.10.tar.bz2 create mode 100644 opensuse/core/tdelibs/kdelibs-3.5.12.99.tar.bz2 create mode 100644 opensuse/core/tdelibs/kdelibs-3.5.4-CVE-2009-1690.patch create mode 100644 opensuse/core/tdelibs/kdelibs3-gcc-4.1-miscompile.diff create mode 100644 opensuse/core/tdelibs/kdelibs3-hicolor-scalable-sizes.patch create mode 100644 opensuse/core/tdelibs/kdelibs_networkstatus_branch2.diff create mode 100644 opensuse/core/tdelibs/kdemm-20050330.tar.bz2 create mode 100644 opensuse/core/tdelibs/kdemm-filepreview.diff create mode 100644 opensuse/core/tdelibs/kdemm.diff create mode 100644 opensuse/core/tdelibs/kdeprint-restart-cupsd.diff create mode 100644 opensuse/core/tdelibs/kdeprint-utf8.diff create mode 100644 opensuse/core/tdelibs/kdesu-settings.diff create mode 100644 opensuse/core/tdelibs/kdeversion.diff create mode 100644 opensuse/core/tdelibs/kfile-beagle.diff create mode 100644 opensuse/core/tdelibs/kickoff-drop-shadow.diff create mode 100644 opensuse/core/tdelibs/kimproxy-warning.diff create mode 100644 opensuse/core/tdelibs/kmimelist.diff create mode 100644 opensuse/core/tdelibs/kremoteencoding-utf8.diff create mode 100644 opensuse/core/tdelibs/ktip-icon-hack.diff create mode 100644 opensuse/core/tdelibs/kwalletd-try-open.diff create mode 100644 opensuse/core/tdelibs/light_v_2_scrollbar_patch.patch create mode 100644 opensuse/core/tdelibs/limit-max-image-size.diff create mode 100644 opensuse/core/tdelibs/lpoptions-cups-1.2.diff create mode 100644 opensuse/core/tdelibs/mimetype-changes.diff create mode 100644 opensuse/core/tdelibs/mimetype-icons.tar.bz2 create mode 100644 opensuse/core/tdelibs/mozilla-sliders.patch create mode 100644 opensuse/core/tdelibs/networkstatus.diff create mode 100644 opensuse/core/tdelibs/no-debug-by-default.diff create mode 100644 opensuse/core/tdelibs/no-progress-for-beagle-status-query.diff create mode 100644 opensuse/core/tdelibs/noauto-package.diff create mode 100644 opensuse/core/tdelibs/oom_score_adj.patch create mode 100644 opensuse/core/tdelibs/patch-mimetype-iconnames.diff create mode 100644 opensuse/core/tdelibs/prefer_distribution_settings.dif create mode 100644 opensuse/core/tdelibs/printpreview.patch create mode 100644 opensuse/core/tdelibs/r874968-ebay-crash.diff create mode 100644 opensuse/core/tdelibs/rubberband-selection.diff create mode 100644 opensuse/core/tdelibs/show-distribution.diff create mode 100644 opensuse/core/tdelibs/silence.diff create mode 100644 opensuse/core/tdelibs/smooth-scrolling.diff create mode 100644 opensuse/core/tdelibs/spellcheck-default-utf8.diff create mode 100644 opensuse/core/tdelibs/stat-on-media.diff create mode 100644 opensuse/core/tdelibs/tdelibs-devel-doc.changes create mode 100644 opensuse/core/tdelibs/tdelibs-devel-doc.spec create mode 100644 opensuse/core/tdelibs/tdelibs.changes create mode 100644 opensuse/core/tdelibs/tdelibs.spec create mode 100644 opensuse/core/tdelibs/tderc create mode 100644 opensuse/core/tdelibs/textcompletion-editor.diff create mode 100644 opensuse/core/tdelibs/use-mediamanager.diff create mode 100644 opensuse/core/tdelibs/use-xauthlocalhostname.diff create mode 100644 opensuse/core/tdelibs/vnd.openxmlformats-officedocument.presentationml.presentation.desktop create mode 100644 opensuse/core/tdelibs/vnd.openxmlformats-officedocument.spreadsheetml.sheet.desktop create mode 100644 opensuse/core/tdelibs/vnd.openxmlformats-officedocument.wordprocessingml.document.desktop create mode 100644 opensuse/core/tdelibs/x-jar-desktop.diff create mode 100644 opensuse/core/tdelibs/x-kde-InitialPreference.diff create mode 100644 opensuse/core/tdelibs/xinerama.patch create mode 100644 opensuse/core/tdelibs/xml-catalog.diff create mode 100644 opensuse/core/tdelibs/xmlhttprequest_3.x.diff create mode 100644 opensuse/core/tdemultimedia/.project create mode 100644 opensuse/core/tdenetwork/.project create mode 100644 opensuse/core/tdepim/.project create mode 100644 opensuse/core/tdesdk/.project create mode 100644 opensuse/core/tdetoys/.project create mode 100644 opensuse/core/tdeutils/.project create mode 100644 opensuse/core/tdewebdev/.project delete mode 100644 opensuse/libdbus-1-tqt-0/README.VERSION delete mode 100644 opensuse/libdbus-1-tqt-0/fix_circular_destructor.patch delete mode 100644 opensuse/libdbus-1-tqt-0/fix_ifdef.patch delete mode 100644 opensuse/libdbus-1-tqt-0/libdbus-1-tqt-0.changes delete mode 100644 opensuse/libdbus-1-tqt-0/libdbus-1-tqt-0.spec delete mode 100644 opensuse/libdbus-1-tqt-0/r785103.patch delete mode 100644 opensuse/libdbus-1-tqt-0/r795238.patch delete mode 100644 opensuse/libdbus-tqt-1-0/README.VERSION delete mode 100644 opensuse/libdbus-tqt-1-0/baselibs.conf delete mode 100644 opensuse/libdbus-tqt-1-0/dbus-qt3-compile-fix-thoenig-01.patch delete mode 100644 opensuse/libdbus-tqt-1-0/dbus-qt3-do-not-close-shared-connection-thoenig-01.patch delete mode 100644 opensuse/libdbus-tqt-1-0/dbus-tqt-0.62.tar.bz2 delete mode 100644 opensuse/libdbus-tqt-1-0/libdbus-tqt-1-0.changes delete mode 100644 opensuse/libdbus-tqt-1-0/libdbus-tqt-1-0.spec delete mode 100644 opensuse/libtqt4/libtqt4.changes delete mode 100644 opensuse/libtqt4/libtqt4.spec delete mode 100644 opensuse/libtqt4/tqtinterface-3.5.12.99.tar.bz2 delete mode 100644 opensuse/qt3/_link delete mode 100644 opensuse/tde-filesystem/COPYING delete mode 100644 opensuse/tde-filesystem/macros.tde delete mode 100644 opensuse/tde-filesystem/tde-filesystem.changes delete mode 100644 opensuse/tde-filesystem/tde-filesystem.spec delete mode 100644 opensuse/tdebase/3_5_BRANCH.diff delete mode 100644 opensuse/tdebase/access.diff delete mode 100644 opensuse/tdebase/applet-lock-logout.diff delete mode 100644 opensuse/tdebase/arts-start-on-demand.diff delete mode 100644 opensuse/tdebase/artwork.diff delete mode 100644 opensuse/tdebase/autorun.patch delete mode 100644 opensuse/tdebase/background_default.diff delete mode 100644 opensuse/tdebase/baselibs.conf delete mode 100644 opensuse/tdebase/beagle-0.3.diff delete mode 100644 opensuse/tdebase/bnc.desktop delete mode 100644 opensuse/tdebase/bnc584223.diff delete mode 100644 opensuse/tdebase/clock-applet-style.diff delete mode 100644 opensuse/tdebase/clock-suse-integrate.diff delete mode 100644 opensuse/tdebase/console8x16.pcf.gz delete mode 100644 opensuse/tdebase/default-kdeprintfax.diff delete mode 100644 opensuse/tdebase/default_fonts.diff delete mode 100644 opensuse/tdebase/devmon-automounter.sh delete mode 100644 opensuse/tdebase/dont-always-start-kaccess.diff delete mode 100644 opensuse/tdebase/fileshareset.8.gz delete mode 100644 opensuse/tdebase/fileshareset2.tar.bz2 delete mode 100644 opensuse/tdebase/fix-desktop-icons.diff delete mode 100644 opensuse/tdebase/fix-kcontrol-yast.diff delete mode 100644 opensuse/tdebase/fix-kio-smb-auth.diff delete mode 100644 opensuse/tdebase/fix-lockup-from-gnome-apps.diff delete mode 100644 opensuse/tdebase/fix_default_theme_reset.diff delete mode 100644 opensuse/tdebase/gcc44.diff delete mode 100644 opensuse/tdebase/hide-only-showin-entries.diff delete mode 100644 opensuse/tdebase/improve-panelservicemenu-geticonset.diff delete mode 100644 opensuse/tdebase/ioslaveinfo-icon.diff delete mode 100644 opensuse/tdebase/kcheckpass-pam-11.0 delete mode 100644 opensuse/tdebase/kcheckpass-pam-11.1 delete mode 100644 opensuse/tdebase/kcheckpass-pam-legacy delete mode 100644 opensuse/tdebase/kcheckpass.8.gz delete mode 100644 opensuse/tdebase/kcminit-ignore-arts.diff delete mode 100644 opensuse/tdebase/kcmkdm-default-grub.diff delete mode 100644 opensuse/tdebase/kcmsamba_log.diff delete mode 100644 opensuse/tdebase/kcmshell_use_kde-sound.diff delete mode 100644 opensuse/tdebase/kcontrol-energy.diff delete mode 100644 opensuse/tdebase/kcontrol.diff delete mode 100644 opensuse/tdebase/kde3-session-restore.diff delete mode 100644 opensuse/tdebase/kde3-session.diff delete mode 100644 opensuse/tdebase/kdebase_khc_rellinks.diff delete mode 100644 opensuse/tdebase/kdebase_networkstatus_branch.diff delete mode 100644 opensuse/tdebase/kdeeject.diff delete mode 100644 opensuse/tdebase/kdesktop_icons.diff delete mode 100644 opensuse/tdebase/kdesu-remember-keep-password.diff delete mode 100644 opensuse/tdebase/kdesud-security.diff delete mode 100644 opensuse/tdebase/kdm-admin-mode.diff delete mode 100644 opensuse/tdebase/kdm-aliasing.diff delete mode 100644 opensuse/tdebase/kdm-align-userlist-labels.diff delete mode 100644 opensuse/tdebase/kdm-all-users-nopass.diff delete mode 100644 opensuse/tdebase/kdm-audit-log.diff delete mode 100644 opensuse/tdebase/kdm-color-scheme.diff delete mode 100644 opensuse/tdebase/kdm-consolekit.diff delete mode 100644 opensuse/tdebase/kdm-cope-with-new-grub.diff delete mode 100644 opensuse/tdebase/kdm-make_it_cool.diff delete mode 100644 opensuse/tdebase/kdm-mark_autologin.diff delete mode 100644 opensuse/tdebase/kdm-pam-np-legacy delete mode 100644 opensuse/tdebase/kdm-relaxed-auth.diff delete mode 100644 opensuse/tdebase/kdm-suspend-hal.diff delete mode 100644 opensuse/tdebase/kdm-sysconfig-values.diff delete mode 100644 opensuse/tdebase/kdm-use-rpmoptflags.diff delete mode 100644 opensuse/tdebase/kdm-wordbreak.diff delete mode 100644 opensuse/tdebase/kfontinst.diff delete mode 100644 opensuse/tdebase/khelpcenter-beagle.diff delete mode 100644 opensuse/tdebase/khelpcenter-delayed-indexcheck.cpp delete mode 100644 opensuse/tdebase/khelpcenter-gnome-support-legacy.patch delete mode 100644 opensuse/tdebase/khelpcenter-gnome-support.patch delete mode 100644 opensuse/tdebase/khelpcenter-localindices.patch delete mode 100644 opensuse/tdebase/khelpcenter-use-suseconfig-indexer.diff delete mode 100644 opensuse/tdebase/khelpcenter-use-susehelp.diff delete mode 100644 opensuse/tdebase/khotkeys-multimedia-action.diff delete mode 100644 opensuse/tdebase/khotkeys-multimedia-action2.diff delete mode 100644 opensuse/tdebase/kicker-defaults.diff delete mode 100644 opensuse/tdebase/kickerrc delete mode 100644 opensuse/tdebase/kickoff-beagle.diff delete mode 100644 opensuse/tdebase/kickoff-data.tar.bz2 delete mode 100644 opensuse/tdebase/kickoff-install-software.diff delete mode 100644 opensuse/tdebase/kickoff-kcm.diff delete mode 100644 opensuse/tdebase/kickoff.diff delete mode 100644 opensuse/tdebase/kio-media-errorhandling.diff delete mode 100644 opensuse/tdebase/klipperrc.diff delete mode 100644 opensuse/tdebase/kmenu-search-fs20050503-fixed.diff delete mode 100644 opensuse/tdebase/kmenu-search-slowdown-fix.diff delete mode 100644 opensuse/tdebase/knetattach-show.diff delete mode 100644 opensuse/tdebase/kompmgr_use_defaults.diff delete mode 100644 opensuse/tdebase/konq-combo-editor.diff delete mode 100644 opensuse/tdebase/konsole-schema-update.diff delete mode 100644 opensuse/tdebase/konsole_keytab.diff delete mode 100644 opensuse/tdebase/kpamgreeter.diff delete mode 100644 opensuse/tdebase/krandr-0.5.2.1.diff.bz2 delete mode 100644 opensuse/tdebase/kscreensaver-random-NG.diff delete mode 100644 opensuse/tdebase/ksmserver-defaulttohalt.diff delete mode 100644 opensuse/tdebase/ksmserver-kdeinit.diff delete mode 100644 opensuse/tdebase/ksmserver-suspend.diff delete mode 100644 opensuse/tdebase/ksmserver-timed.diff delete mode 100644 opensuse/tdebase/ksmserver-tooltips.diff delete mode 100644 opensuse/tdebase/ksplashml.patch delete mode 100644 opensuse/tdebase/ksysguard-slp-ratelimit.diff delete mode 100644 opensuse/tdebase/ksysguardd-openslp.diff delete mode 100644 opensuse/tdebase/ksysguardd.init delete mode 100644 opensuse/tdebase/ksysguardd.reg delete mode 100644 opensuse/tdebase/kwinbindings.diff delete mode 100644 opensuse/tdebase/kxkb-include-latin-layout.diff delete mode 100644 opensuse/tdebase/less_verbal_kdesu.patch delete mode 100644 opensuse/tdebase/libkonq-kdemm.diff delete mode 100644 opensuse/tdebase/locale-dont-show-flag.diff delete mode 100644 opensuse/tdebase/lock-xvkbd.diff delete mode 100644 opensuse/tdebase/lowdiskspace.patch delete mode 100644 opensuse/tdebase/mach_blass.diff delete mode 100644 opensuse/tdebase/make-wallpapers-hideable.diff delete mode 100644 opensuse/tdebase/media-cryptosupport.diff delete mode 100644 opensuse/tdebase/media-iPod.diff delete mode 100644 opensuse/tdebase/media-teardown_crypto.diff delete mode 100644 opensuse/tdebase/media_suse.diff delete mode 100644 opensuse/tdebase/mediamanager-mount-point-utf8.diff delete mode 100644 opensuse/tdebase/minicli-combo-editor.diff delete mode 100644 opensuse/tdebase/mp3-info.tar.bz2 delete mode 100644 opensuse/tdebase/mtab-reenable.patch delete mode 100644 opensuse/tdebase/non-fast-malloc.diff delete mode 100644 opensuse/tdebase/nsplugin-Preference.diff delete mode 100644 opensuse/tdebase/nsplugin-init-gtk.diff delete mode 100644 opensuse/tdebase/openssl1.patch delete mode 100644 opensuse/tdebase/optional-compmgr.diff delete mode 100644 opensuse/tdebase/quick_browser_menu.diff delete mode 100644 opensuse/tdebase/remove-beagle-stuff.diff delete mode 100644 opensuse/tdebase/restore-description-parens.diff delete mode 100644 opensuse/tdebase/rotate-wacom-pointers.diff delete mode 100644 opensuse/tdebase/runupdater.patch delete mode 100644 opensuse/tdebase/select-wm-gui.diff delete mode 100644 opensuse/tdebase/short-menus.diff delete mode 100644 opensuse/tdebase/show-konqueror-in-menu.diff delete mode 100644 opensuse/tdebase/simplify-randr-settings.diff delete mode 100644 opensuse/tdebase/sourceforge.desktop delete mode 100644 opensuse/tdebase/spellcheck-default-utf8.diff delete mode 100644 opensuse/tdebase/startkde.diff delete mode 100644 opensuse/tdebase/startkde.suse.sh delete mode 100644 opensuse/tdebase/stopkde.suse.sh delete mode 100644 opensuse/tdebase/suse_default_move.diff delete mode 100644 opensuse/tdebase/suspend-kpowersave.diff delete mode 100644 opensuse/tdebase/suspend-unmount.diff delete mode 100644 opensuse/tdebase/system-folder_man.diff delete mode 100644 opensuse/tdebase/systray_order.diff delete mode 100644 opensuse/tdebase/taskbar.patch delete mode 100644 opensuse/tdebase/tdebase.changes delete mode 100644 opensuse/tdebase/tdebase.fillup delete mode 100644 opensuse/tdebase/tdebase.spec delete mode 100644 opensuse/tdebase/teach-minicli-lock.diff delete mode 100644 opensuse/tdebase/uninit.diff delete mode 100644 opensuse/tdebase/use-full-hinting-by-default.diff delete mode 100644 opensuse/tdebase/use-pam-before-classic.diff delete mode 100644 opensuse/tdebase/wizard_small.png delete mode 100644 opensuse/tdebase/workaround-pdf-on64bit-nsplugin-bug.diff delete mode 100644 opensuse/tdebase/xcursor.diff delete mode 100644 opensuse/tdebase/xinerama.patch delete mode 100644 opensuse/tdebase/zh_TW.flag.png delete mode 100644 opensuse/tdelibs/10888-bt.tar.gz delete mode 100644 opensuse/tdelibs/3_5_BRANCH.diff delete mode 100644 opensuse/tdelibs/CATALOG.kdelibs3.diff delete mode 100644 opensuse/tdelibs/add-suse-translations.diff delete mode 100644 opensuse/tdelibs/admin.diff delete mode 100644 opensuse/tdelibs/admin.tar.bz2 delete mode 100644 opensuse/tdelibs/allow-man-setgid.diff delete mode 100644 opensuse/tdelibs/api_docu_description delete mode 100644 opensuse/tdelibs/applications.menu-fallback.diff delete mode 100644 opensuse/tdelibs/arts-acinclude.patch delete mode 100644 opensuse/tdelibs/artwork.diff delete mode 100644 opensuse/tdelibs/autostart-spec.diff delete mode 100644 opensuse/tdelibs/avahi-pidfile.diff delete mode 100644 opensuse/tdelibs/baselibs.conf delete mode 100644 opensuse/tdelibs/bnc557126.diff delete mode 100644 opensuse/tdelibs/bug-382959_kabc_fix_vcardparser.patch delete mode 100644 opensuse/tdelibs/bug-399296_ftphandling-fix.diff delete mode 100644 opensuse/tdelibs/bundle-locale-help.diff delete mode 100644 opensuse/tdelibs/clever-menu.diff delete mode 100644 opensuse/tdelibs/common_options delete mode 100644 opensuse/tdelibs/cr16-filesys-file_broken.png delete mode 100644 opensuse/tdelibs/create-kdeapi delete mode 100644 opensuse/tdelibs/default-useragent.diff delete mode 100644 opensuse/tdelibs/desktop-translations.diff delete mode 100644 opensuse/tdelibs/disable-idn-support.diff delete mode 100644 opensuse/tdelibs/disable-samba-dialog-without-smb.diff delete mode 100644 opensuse/tdelibs/do_make delete mode 100644 opensuse/tdelibs/fileshare.diff delete mode 100644 opensuse/tdelibs/fix-dcopidlng-within-kdelibs-build.diff delete mode 100644 opensuse/tdelibs/fix-gnome-help-support.diff delete mode 100644 opensuse/tdelibs/fix-gnome-help-support_legacy.diff delete mode 100644 opensuse/tdelibs/fix-kdemm-build.diff delete mode 100644 opensuse/tdelibs/fix-kerberos-printing.diff delete mode 100644 opensuse/tdelibs/fix-macmenu.patch delete mode 100644 opensuse/tdelibs/fix-qxembed.diff delete mode 100644 opensuse/tdelibs/flash-player-non-oss.diff delete mode 100644 opensuse/tdelibs/fontconfig-reverse-lookup.diff delete mode 100644 opensuse/tdelibs/gcc44.diff delete mode 100644 opensuse/tdelibs/gcc45.diff delete mode 100644 opensuse/tdelibs/google-mail.diff delete mode 100644 opensuse/tdelibs/ignore-inline-menu.diff delete mode 100644 opensuse/tdelibs/integrate-global-pixmaps-10.1.diff delete mode 100644 opensuse/tdelibs/integrate-global-pixmaps-new.diff delete mode 100644 opensuse/tdelibs/kcontrol_crash_patch.diff delete mode 100644 opensuse/tdelibs/kde3rc.dif delete mode 100644 opensuse/tdelibs/kde4-applications.diff delete mode 100644 opensuse/tdelibs/kdecode_fakes_include.diff delete mode 100644 opensuse/tdelibs/kdelibs-3.5.10-CVE-2009-2702.patch delete mode 100644 opensuse/tdelibs/kdelibs-3.5.10-cve-2009-1698.patch delete mode 100644 opensuse/tdelibs/kdelibs-3.5.10-cve-2009-1725.patch delete mode 100644 opensuse/tdelibs/kdelibs-3.5.10-cve-2009-2537-select-length.patch delete mode 100644 opensuse/tdelibs/kdelibs-3.5.10-kio.patch delete mode 100644 opensuse/tdelibs/kdelibs-3.5.10-latex-syntax-kile-2.0.3.patch delete mode 100644 opensuse/tdelibs/kdelibs-3.5.10-ossl-1.x.patch delete mode 100644 opensuse/tdelibs/kdelibs-3.5.10.tar.bz2 delete mode 100644 opensuse/tdelibs/kdelibs-3.5.12.99.tar.bz2 delete mode 100644 opensuse/tdelibs/kdelibs-3.5.4-CVE-2009-1690.patch delete mode 100644 opensuse/tdelibs/kdelibs3-gcc-4.1-miscompile.diff delete mode 100644 opensuse/tdelibs/kdelibs3-hicolor-scalable-sizes.patch delete mode 100644 opensuse/tdelibs/kdelibs_networkstatus_branch2.diff delete mode 100644 opensuse/tdelibs/kdemm-20050330.tar.bz2 delete mode 100644 opensuse/tdelibs/kdemm-filepreview.diff delete mode 100644 opensuse/tdelibs/kdemm.diff delete mode 100644 opensuse/tdelibs/kdeprint-restart-cupsd.diff delete mode 100644 opensuse/tdelibs/kdeprint-utf8.diff delete mode 100644 opensuse/tdelibs/kdesu-settings.diff delete mode 100644 opensuse/tdelibs/kdeversion.diff delete mode 100644 opensuse/tdelibs/kfile-beagle.diff delete mode 100644 opensuse/tdelibs/kickoff-drop-shadow.diff delete mode 100644 opensuse/tdelibs/kimproxy-warning.diff delete mode 100644 opensuse/tdelibs/kmimelist.diff delete mode 100644 opensuse/tdelibs/kremoteencoding-utf8.diff delete mode 100644 opensuse/tdelibs/ktip-icon-hack.diff delete mode 100644 opensuse/tdelibs/kwalletd-try-open.diff delete mode 100644 opensuse/tdelibs/light_v_2_scrollbar_patch.patch delete mode 100644 opensuse/tdelibs/limit-max-image-size.diff delete mode 100644 opensuse/tdelibs/lpoptions-cups-1.2.diff delete mode 100644 opensuse/tdelibs/mimetype-changes.diff delete mode 100644 opensuse/tdelibs/mimetype-icons.tar.bz2 delete mode 100644 opensuse/tdelibs/mozilla-sliders.patch delete mode 100644 opensuse/tdelibs/networkstatus.diff delete mode 100644 opensuse/tdelibs/no-debug-by-default.diff delete mode 100644 opensuse/tdelibs/no-progress-for-beagle-status-query.diff delete mode 100644 opensuse/tdelibs/noauto-package.diff delete mode 100644 opensuse/tdelibs/oom_score_adj.patch delete mode 100644 opensuse/tdelibs/patch-mimetype-iconnames.diff delete mode 100644 opensuse/tdelibs/prefer_distribution_settings.dif delete mode 100644 opensuse/tdelibs/printpreview.patch delete mode 100644 opensuse/tdelibs/r874968-ebay-crash.diff delete mode 100644 opensuse/tdelibs/rubberband-selection.diff delete mode 100644 opensuse/tdelibs/show-distribution.diff delete mode 100644 opensuse/tdelibs/silence.diff delete mode 100644 opensuse/tdelibs/smooth-scrolling.diff delete mode 100644 opensuse/tdelibs/spellcheck-default-utf8.diff delete mode 100644 opensuse/tdelibs/stat-on-media.diff delete mode 100644 opensuse/tdelibs/tdelibs-devel-doc.changes delete mode 100644 opensuse/tdelibs/tdelibs-devel-doc.spec delete mode 100644 opensuse/tdelibs/tdelibs.changes delete mode 100644 opensuse/tdelibs/tdelibs.spec delete mode 100644 opensuse/tdelibs/tderc delete mode 100644 opensuse/tdelibs/textcompletion-editor.diff delete mode 100644 opensuse/tdelibs/use-mediamanager.diff delete mode 100644 opensuse/tdelibs/use-xauthlocalhostname.diff delete mode 100644 opensuse/tdelibs/vnd.openxmlformats-officedocument.presentationml.presentation.desktop delete mode 100644 opensuse/tdelibs/vnd.openxmlformats-officedocument.spreadsheetml.sheet.desktop delete mode 100644 opensuse/tdelibs/vnd.openxmlformats-officedocument.wordprocessingml.document.desktop delete mode 100644 opensuse/tdelibs/x-jar-desktop.diff delete mode 100644 opensuse/tdelibs/x-kde-InitialPreference.diff delete mode 100644 opensuse/tdelibs/xinerama.patch delete mode 100644 opensuse/tdelibs/xml-catalog.diff delete mode 100644 opensuse/tdelibs/xmlhttprequest_3.x.diff diff --git a/opensuse/README.FIRST b/opensuse/README.FIRST index 889760702..0b7ca9c91 100644 --- a/opensuse/README.FIRST +++ b/opensuse/README.FIRST @@ -1,5 +1,7 @@ Here contains the specfiles for Trinity. They are updated here, and built at build.lincomlinux.org (closed to public). +In addition, there is a home project at home:bravoall1552:trinity +and the core and apps folders contain applications. For local building, use the following command: osc -A https://api.opensuse.org/ build --local-package --alternative-project openSUSE:Factory standard i586 diff --git a/opensuse/arts/arts-1.5.10.tar.bz2 b/opensuse/arts/arts-1.5.10.tar.bz2 deleted file mode 100644 index a772aa04a..000000000 Binary files a/opensuse/arts/arts-1.5.10.tar.bz2 and /dev/null differ diff --git a/opensuse/arts/arts-start-on-demand.diff b/opensuse/arts/arts-start-on-demand.diff deleted file mode 100644 index 032231c16..000000000 --- a/opensuse/arts/arts-start-on-demand.diff +++ /dev/null @@ -1,25 +0,0 @@ -Index: mcop/objectmanager.cc -=================================================================== ---- mcop/objectmanager.cc.orig -+++ mcop/objectmanager.cc -@@ -28,6 +28,7 @@ - #include "extensionloader.h" - #include "debug.h" - #include -+#include - #include - #include - -@@ -267,6 +268,12 @@ bool ObjectManager::addGlobalReference(O - - string ObjectManager::getGlobalReference(const string& name) - { -+ static bool started_arts = false; -+ if (!started_arts) -+ { -+ system("arts-start"); -+ started_arts = true; -+ } - return Dispatcher::the()->globalComm().get(name); - } - diff --git a/opensuse/arts/arts-vorbis-fix.dif b/opensuse/arts/arts-vorbis-fix.dif deleted file mode 100644 index 70f71496b..000000000 --- a/opensuse/arts/arts-vorbis-fix.dif +++ /dev/null @@ -1,27 +0,0 @@ -Index: flow/gsl/gslloader.c -=================================================================== ---- flow/gsl/gslloader.c.orig -+++ flow/gsl/gslloader.c -@@ -313,7 +313,8 @@ gsl_wave_chunk_create (GslWaveDsc *wav - - /* FIXME: we essentially create a dcache for each wchunk here ;( */ - -- dcache = gsl_data_cache_from_dhandle (dhandle, gsl_get_config ()->wave_chunk_padding * wave_dsc->n_channels); -+ /* dcache = gsl_data_cache_from_dhandle (dhandle, gsl_get_config ()->wave_chunk_padding * wave_dsc->n_channels); */ -+ dcache = gsl_data_cache_from_dhandle (dhandle, 0); /* FIXME: padding is bad for vorbis... */ - gsl_data_handle_unref (dhandle); - if (!dcache) - return NULL; -Index: flow/gsl/gslcommon.c -=================================================================== ---- flow/gsl/gslcommon.c.orig -+++ flow/gsl/gslcommon.c -@@ -1585,7 +1585,7 @@ gsl_init (const GslConfigValue values[], - 1, /* n_processors */ - 2, /* wave_chunk_padding */ - 4, /* wave_chunk_big_pad */ -- 512, /* dcache_block_size */ -+ 8192, /* dcache_block_size */ - 1024 * 1024, /* dcache_cache_memory */ - 69, /* midi_kammer_note */ - 440, /* kammer_freq */ diff --git a/opensuse/arts/arts.changes b/opensuse/arts/arts.changes deleted file mode 100644 index 690c5f92d..000000000 --- a/opensuse/arts/arts.changes +++ /dev/null @@ -1,1406 +0,0 @@ -------------------------------------------------------------------- -Sun Aug 21 02:15:14 UTC 2011 - rxu@lincomlinux.org - -- introduce devel-static subpackage - - libgsl.a is built as a static library - - there is no way to turn it off in build configuration - - it has not been tested whether removing it will trigger bad stuff - -------------------------------------------------------------------- -Fri Aug 12 00:02:16 UTC 2011 - rxu@lincomlinux.org - -- replace provides tde-kdelibs in favor of tdelibs - -------------------------------------------------------------------- -Thu Aug 11 23:51:32 UTC 2011 - rxu@lincomlinux.org - -- upgrade to the trinity version of arts -- remove dependencies for qt3-devel in favor of libtqt4-devel -- require tde-filesystem for build time macros -- replace provides kdelibs3 in favor of tde-kdelibs - -------------------------------------------------------------------- -Sun Feb 21 09:54:20 UTC 2010 - coolo@novell.com - -- apply patch from fedora to support autoconf >= 2.64 - -------------------------------------------------------------------- -Fri Dec 18 16:44:25 CET 2009 - jengelh@medozas.de - -- add baselibs.conf as a source - -------------------------------------------------------------------- -Mon Jun 15 10:04:03 CEST 2009 - coolo@novell.com - -- take all autotools -- rediff to avoid fuzz - -------------------------------------------------------------------- -Wed Dec 10 12:34:56 CET 2008 - olh@suse.de - -- use Obsoletes: -XXbit only for ppc64 to help solver during distupgrade - (bnc#437293) - -------------------------------------------------------------------- -Thu Oct 30 12:34:56 CET 2008 - olh@suse.de - -- obsolete old -XXbit packages (bnc#437293) - -------------------------------------------------------------------- -Wed Aug 20 07:17:59 CEST 2008 - coolo@suse.de - -- update to 1.5.10 - * remove patches sent upstream - -------------------------------------------------------------------- -Thu Apr 10 12:54:45 CEST 2008 - ro@suse.de - -- added baselibs.conf file to build xxbit packages - for multilib support - -------------------------------------------------------------------- -Wed Feb 27 14:49:18 CET 2008 - sbrabec@suse.cz - -- Fixed artsdsp on bi-arch machines (bnc#71776, kde#158501). - -------------------------------------------------------------------- -Wed Feb 13 23:19:53 CET 2008 - dmueller@suse.de - -- update to 1.5.9: - * remove patches that are upstreamed - -------------------------------------------------------------------- -Wed Nov 28 14:12:44 CET 2007 - dmueller@suse.de - -- fix build against glibc 2.7 - -------------------------------------------------------------------- -Mon Oct 22 14:15:09 CEST 2007 - dmueller@suse.de - -- fix build against gcc 4.3 - -------------------------------------------------------------------- -Tue Oct 9 10:49:45 CEST 2007 - stbinner@suse.de - -- update to 1.5.8 release: stop polling NotificationManager for new - notifications, instead handle notifications on demand. This gets - rid of the 50ms timer that was burning energy unnecessarily. - -------------------------------------------------------------------- -Wed Sep 19 17:45:39 CEST 2007 - dmueller@suse.de - -- fix arts starting in multiple instances (#178930) - -------------------------------------------------------------------- -Mon May 14 22:04:44 CEST 2007 - stbinner@suse.de - -- update to 1.5.7 release (just version bump) - -------------------------------------------------------------------- -Wed Apr 18 17:22:10 CEST 2007 - dmueller@suse.de - -- remove some obsolete sections - -------------------------------------------------------------------- -Tue Jan 16 13:27:50 CET 2007 - stbinner@suse.de - -- update to 1.5.6 release (just version bump) - -------------------------------------------------------------------- -Fri Nov 10 11:10:49 CET 2006 - stbinner@suse.de - -- revert to previous version of arts-start-on-demand.diff (#178930) - -------------------------------------------------------------------- -Wed Nov 8 16:45:22 CET 2006 - stbinner@suse.de - -- remove historic "Provides:" (#218798) - -------------------------------------------------------------------- -Mon Nov 6 14:57:26 CET 2006 - ltinkl@suse.cz - -- fix #178930: aRts starts in multiple instances - -------------------------------------------------------------------- -Fri Oct 20 13:24:26 CEST 2006 - dmueller@suse.de - -- fix build with automake 1.10 - -------------------------------------------------------------------- -Tue Oct 3 10:05:54 CEST 2006 - stbinner@suse.de - -- update to 1.5.5 release tarball - -------------------------------------------------------------------- -Sun Oct 1 18:25:06 CEST 2006 - stbinner@suse.de - -- update 1_5_BRANCH.diff (endian fix for alsa) - -------------------------------------------------------------------- -Sun Sep 10 00:30:21 CEST 2006 - dmueller@suse.de - -- use RPM_OPT_FLAGS - -------------------------------------------------------------------- -Thu Sep 7 14:09:58 CEST 2006 - coolo@suse.de - -- resmgr isn't needed on >= 10.1 - -------------------------------------------------------------------- -Thu Aug 31 13:37:23 CEST 2006 - stbinner@suse.de - -- add man page for artswrapper (#187356) - -------------------------------------------------------------------- -Wed Aug 23 10:40:10 CEST 2006 - stbinner@suse.de - -- add 1_5_BRANCH.diff - -------------------------------------------------------------------- -Sun Jul 23 20:42:54 CEST 2006 - coolo@suse.de - -- update to aRts 1.5.4: - * add return value checks for set*uid() functions - -------------------------------------------------------------------- -Tue Jul 4 07:58:04 CEST 2006 - cthiel@suse.de - -- fix build - -------------------------------------------------------------------- -Wed Jun 7 11:58:48 CEST 2006 - dmueller@suse.de - -- check return values of set*uid (#180223, CVE-2006-2916) - -------------------------------------------------------------------- -Wed May 24 09:48:35 CEST 2006 - stbinner@suse.de - -- version number increase to 1.5.3 - -------------------------------------------------------------------- -Sat May 20 15:10:00 CEST 2006 - adrian@suse.de - -- do not require libdrm-devel for < 10.1 - -------------------------------------------------------------------- -Mon Mar 20 13:27:05 CET 2006 - stbinner@suse.de - -- update to 1.5.2 - * Avoid accessing deleted memory. - -------------------------------------------------------------------- -Fri Jan 27 17:57:38 CET 2006 - dmueller@suse.de - -- add patch to avoid .la dependency for lt_dlopen - -------------------------------------------------------------------- -Fri Jan 27 15:53:03 CET 2006 - dmueller@suse.de - -- fix packaging error (#135811) - -------------------------------------------------------------------- -Wed Jan 25 21:32:50 CET 2006 - mls@suse.de - -- converted neededforbuild to BuildRequires - -------------------------------------------------------------------- -Sat Jan 21 14:27:07 CET 2006 - coolo@suse.de - -- update to 1.5.1 - -------------------------------------------------------------------- -Mon Jan 9 15:17:48 CET 2006 - dmueller@suse.de - -- require alsa-devel even on s390(x) - -------------------------------------------------------------------- -Thu Dec 1 21:01:14 CET 2005 - dmueller@suse.de - -- update to branch - -------------------------------------------------------------------- -Mon Nov 21 15:02:03 CET 2005 - stbinner@suse.de - -- update to version 1.5 RC 2 - -------------------------------------------------------------------- -Thu Nov 10 11:31:07 CET 2005 - stbinner@suse.de - -- update to version 1.5 RC 1 - -------------------------------------------------------------------- -Wed Oct 12 10:39:59 CEST 2005 - stbinner@suse.de - -- update to version 1.4.92 (1.5 Beta 2) - -------------------------------------------------------------------- -Fri Sep 16 15:32:06 CEST 2005 - stbinner@suse.de - -- update to version 1.4.91 (1.5 Beta) - -------------------------------------------------------------------- -Mon Aug 29 19:35:51 CEST 2005 - dmueller@suse.de - -- fix arts when using $TMPDIR (#113564) - -------------------------------------------------------------------- -Wed Aug 17 18:06:28 CEST 2005 - coolo@suse.de - -- let arts start it self -- pleasing the libtool check - -------------------------------------------------------------------- -Thu Jul 21 09:26:22 CEST 2005 - coolo@suse.de - -- update to version 1.4.2 - -------------------------------------------------------------------- -Fri Jul 8 01:40:07 CEST 2005 - dmueller@suse.de - -- fix build - -------------------------------------------------------------------- -Tue May 24 10:40:25 CEST 2005 - adrian@suse.de - -- update to version 1.4.1 - -------------------------------------------------------------------- -Tue Apr 19 14:47:54 CEST 2005 - coolo@suse.de - -- don't use debug - -------------------------------------------------------------------- -Mon Apr 18 14:57:37 CEST 2005 - coolo@suse.de - -- update admin for gcc4 - -------------------------------------------------------------------- -Thu Apr 14 17:17:06 CEST 2005 - sbrabec@suse.cz - -- Added audiofile-devel to neededforbuild. - -------------------------------------------------------------------- -Wed Mar 16 09:31:03 CET 2005 - adrian@suse.de - -- clean up /tmp dir after ending (#71976, by Waldo) - -------------------------------------------------------------------- -Wed Mar 9 17:02:21 CET 2005 - coolo@suse.de - -- adding patch by Waldo to avoid problems on resume from RAM - -------------------------------------------------------------------- -Sat Mar 5 09:24:21 CET 2005 - adrian@suse.de - -- update to 3.4.0 final - -------------------------------------------------------------------- -Sat Feb 26 09:11:49 CET 2005 - adrian@suse.de - -- update to 3.4.0 RC1 - -------------------------------------------------------------------- -Fri Feb 25 15:48:01 CET 2005 - adrian@suse.de - -- add resmgr support for oss output - -------------------------------------------------------------------- -Thu Feb 24 11:52:06 CET 2005 - adrian@suse.de - -- update to version 3.4.0 RC1, first try -- remove unneeded unsermake from nfb - -------------------------------------------------------------------- -Mon Feb 21 11:25:58 CET 2005 - adrian@suse.de - -- update to current snapshot - -------------------------------------------------------------------- -Mon Feb 14 14:40:59 CET 2005 - adrian@suse.de - -- update from CVS - -------------------------------------------------------------------- -Fri Feb 11 10:28:46 CET 2005 - adrian@suse.de - -- update from CVS - -------------------------------------------------------------------- -Mon Feb 7 11:28:05 CET 2005 - adrian@suse.de - -- update to beta 2 - -------------------------------------------------------------------- -Tue Feb 1 12:47:15 CET 2005 - adrian@suse.de - -- default to oss again due to problems with alsa on 64bit - -------------------------------------------------------------------- -Fri Jan 28 16:22:53 CET 2005 - adrian@suse.de - -- update to current snapshot - -------------------------------------------------------------------- -Thu Jan 20 16:53:09 CET 2005 - adrian@suse.de - -- update to current snapshot - -------------------------------------------------------------------- -Wed Jan 19 16:51:47 CET 2005 - coolo@suse.de - -- fixing requirements of the installed .la files - -------------------------------------------------------------------- -Sun Jan 9 10:01:13 CET 2005 - adrian@suse.de - -- final beta1 - -------------------------------------------------------------------- -Tue Jan 4 10:17:00 CET 2005 - coolo@suse.de - -- update to beta1 snapshot - -------------------------------------------------------------------- -Tue Dec 14 09:20:25 CET 2004 - coolo@suse.de - -- next update to HEAD to fix the next compilation problem - -------------------------------------------------------------------- -Fri Dec 10 09:02:12 CET 2004 - adrian@suse.de - -- update to current HEAD to fix compilation problems in other - applications - -------------------------------------------------------------------- -Wed Dec 8 13:25:07 CET 2004 - adrian@suse.de - -- update to official 3.4 alpha 1 - -------------------------------------------------------------------- -Mon Dec 6 15:17:28 CET 2004 - adrian@suse.de - -- update to KDE head snapshot - -------------------------------------------------------------------- -Mon Nov 29 17:32:03 CET 2004 - adrian@suse.de - -- update to version 1.3.2 - -------------------------------------------------------------------- -Tue Oct 12 10:32:40 CEST 2004 - adrian@suse.de - -- update to version 1.3.1 - -------------------------------------------------------------------- -Thu Sep 30 18:15:44 CEST 2004 - adrian@suse.de - -- remove Requires: mad-devel from arts-devel - -------------------------------------------------------------------- -Sun Aug 29 16:51:21 CEST 2004 - adrian@suse.de - -- remove mad support, we use akode from kdemultimedia instead - -------------------------------------------------------------------- -Mon Aug 16 14:16:14 CEST 2004 - adrian@suse.de - -- update to version 1.3.0 - -------------------------------------------------------------------- -Tue Aug 10 08:57:57 CEST 2004 - adrian@suse.de - -- update to version 1.3.0 RC2 - -------------------------------------------------------------------- -Fri Aug 6 10:00:59 CEST 2004 - adrian@suse.de - -- update to version 1.3.0 RC1 - -------------------------------------------------------------------- -Mon Aug 2 09:24:08 CEST 2004 - adrian@suse.de - -- accept automake 1.9 - -------------------------------------------------------------------- -Mon Jul 19 09:59:35 CEST 2004 - adrian@suse.de - -- update to version 3.2.92 (KDE 3.3 beta 2) - -------------------------------------------------------------------- -Sat Jun 26 11:07:58 CEST 2004 - adrian@suse.de - -- update to version 3.2.91 (KDE 3.3 beta 1) - * enable support for jack - -------------------------------------------------------------------- -Mon May 31 18:26:24 CEST 2004 - adrian@suse.de - -- update to version 1.2.3 (for KDE 3.2.3 release) - -------------------------------------------------------------------- -Mon Apr 19 16:36:01 CEST 2004 - coolo@suse.de - -- adding requirements so the .la files point to existant files - -------------------------------------------------------------------- -Wed Apr 14 10:09:30 CEST 2004 - adrian@suse.de - -- update to version 1.2.2 - -------------------------------------------------------------------- -Sat Apr 3 11:57:55 CEST 2004 - ro@suse.de - -- remove wrong hunk from alsa-default.diff - -------------------------------------------------------------------- -Thu Apr 1 16:34:32 CEST 2004 - adrian@suse.de - -- official enabled alsa output again (patch got anyway applied before) - -------------------------------------------------------------------- -Thu Apr 1 11:55:09 CEST 2004 - tiwai@suse.de - -- fixed the high CPU usage of ogg/vorbis and mp3 (bug #37855). - increasing cache size and disabled padding. -- suppress debug messages. - -------------------------------------------------------------------- -Tue Mar 23 12:09:33 CET 2004 - adrian@suse.de - -- apply 64bit aliasing fix from Matz (#36653) - -------------------------------------------------------------------- -Mon Mar 1 10:31:35 CET 2004 - coolo@suse.de - -- update to version 1.2.1 - -------------------------------------------------------------------- -Sun Feb 29 15:37:35 CET 2004 - adrian@suse.de - -- use oss output as default again - (alsa output is known to be broken atm. b.k.o #30651) - -------------------------------------------------------------------- -Tue Feb 24 18:08:18 CET 2004 - adrian@suse.de - -- suppress informational messages - -------------------------------------------------------------------- -Mon Jan 26 23:25:05 CET 2004 - adrian@suse.de - -- update to version 1.2.0 ( KDE 3.2 final ) - -------------------------------------------------------------------- -Sun Jan 18 21:43:52 CET 2004 - adrian@suse.de - -- update to version 1.1.95 ( KDE 3.2 RC1 ) - -------------------------------------------------------------------- -Tue Jan 13 13:31:54 CET 2004 - adrian@suse.de - -- update to snapshot 2004011309 - -------------------------------------------------------------------- -Tue Dec 30 15:08:10 CET 2003 - adrian@suse.de - -- update to snapshot 2003123011 - -------------------------------------------------------------------- -Mon Dec 15 14:19:14 CET 2003 - adrian@suse.de - -- update to snapshot 2003121511 -- accept automake 1.8 - -------------------------------------------------------------------- -Mon Dec 1 22:00:31 CET 2003 - adrian@suse.de - -- update to 1.1.94 ( KDE 3.2 beta 2 ) - -------------------------------------------------------------------- -Thu Nov 13 23:14:30 CET 2003 - adrian@suse.de - -- update to new snapshot from 2003102409 - -------------------------------------------------------------------- -Wed Oct 29 09:58:44 CET 2003 - adrian@suse.de - -- update to 3.2 beta 1 - -------------------------------------------------------------------- -Tue Oct 21 09:34:51 CEST 2003 - adrian@suse.de - -- update to snapshot 2003102008 - -------------------------------------------------------------------- -Sun Oct 5 14:31:09 CEST 2003 - adrian@suse.de - -- update to snapshot 2003100510 - -------------------------------------------------------------------- -Tue Sep 30 10:15:13 CEST 2003 - adrian@suse.de - -- update to 1.1.92_2003093009 - * last tar ball was broken - -------------------------------------------------------------------- -Mon Sep 29 15:59:09 CEST 2003 - adrian@suse.de - -- update to version 1.1.92 (KDE 3.2 alpha 2) - -------------------------------------------------------------------- -Mon Sep 8 23:32:38 CEST 2003 - adrian@suse.de - -- update to version 1.1.4 - -------------------------------------------------------------------- -Tue Sep 2 14:45:17 CEST 2003 - coolo@suse.de - -- fixing artsdsp (most likely cause for #29358) - -------------------------------------------------------------------- -Wed Aug 20 12:59:12 CEST 2003 - adrian@suse.de - -- fix again for x86_64 (based on Takashis patch) -- prefer alsa over oss, if avaible - -------------------------------------------------------------------- -Tue Jul 29 10:32:22 CEST 2003 - adrian@suse.de - -- fix build on lib64 - -------------------------------------------------------------------- -Tue Jul 29 09:17:04 CEST 2003 - adrian@suse.de - -- add support for gmcop again -- fix build for < 8.0 - -------------------------------------------------------------------- -Tue Jul 22 08:33:14 CEST 2003 - coolo@suse.de - -- don't strip - -------------------------------------------------------------------- -Thu Jul 17 13:04:12 CEST 2003 - adrian@suse.de - -- remove temporary hacks again - -------------------------------------------------------------------- -Tue Jul 15 21:17:35 CEST 2003 - adrian@suse.de - -- update to version 1.1.3 (KDE 3.1.3) -- add some temporary hacks for > 8.2 (qt 3.2) - -------------------------------------------------------------------- -Thu Jun 12 08:09:35 CEST 2003 - coolo@suse.de - -- package directories -- run ldconfig like mad - -------------------------------------------------------------------- -Wed May 7 08:26:17 CEST 2003 - adrian@suse.de - -- update to version 1.1.2 (for KDE 3.1.2) - -------------------------------------------------------------------- -Thu Apr 10 10:18:42 CEST 2003 - adrian@suse.de - -- fix build for 8.0 - -------------------------------------------------------------------- -Tue Apr 8 01:38:47 CEST 2003 - ro@suse.de - -- fix head calling syntax in admin tarball - -------------------------------------------------------------------- -Tue Mar 11 12:52:30 CET 2003 - adrian@suse.de - -- update to version 1.1.1 second try - * minor memory/crash fix -- sync admin tar ball with kdelibs - -------------------------------------------------------------------- -Tue Mar 4 18:29:26 CET 2003 - adrian@suse.de - -- add missing Provides kdelibs-artsd - -------------------------------------------------------------------- -Mon Mar 3 16:32:46 CET 2003 - coolo@suse.de - -- fixing configure check for non-32bit architectures - -------------------------------------------------------------------- -Mon Mar 3 01:27:19 CET 2003 - adrian@suse.de - -- update to version 1.1.1 - * all changes were already in 1_1_BRANCH patch - -------------------------------------------------------------------- -Mon Feb 24 18:37:21 CET 2003 - adrian@suse.de - -- remove -mminimal-toc - -------------------------------------------------------------------- -Fri Jan 17 13:23:03 CET 2003 - adrian@suse.de - -- use official 1.1 tar ball, which will be released with KDE 3.1 - -------------------------------------------------------------------- -Mon Nov 25 12:02:23 CET 2002 - adrian@suse.de - -- update to RC5 - -------------------------------------------------------------------- -Sat Nov 23 16:18:35 CET 2002 - adrian@suse.de - -- fix build for < SuSE 8.1 - -------------------------------------------------------------------- -Tue Nov 19 17:36:36 CET 2002 - adrian@suse.de - -- update to version 1.1.0-final -- fix build on x86_64 - -------------------------------------------------------------------- -Sun Nov 3 13:16:21 CET 2002 - adrian@suse.de - -- update to version 1.1.0.20021030 ~= RC1 - -------------------------------------------------------------------- -Mon Oct 7 11:33:49 CEST 2002 - adrian@suse.de - -- update to version 3.0.4 - -------------------------------------------------------------------- -Thu Aug 8 16:09:27 CEST 2002 - adrian@suse.de - -- fix configure parameters - -------------------------------------------------------------------- -Wed Aug 7 23:22:36 CEST 2002 - adrian@suse.de - -- update to new 1.0.3 tar ball which comes with KDE 3.0.3 -- update admin tar ball - -------------------------------------------------------------------- -Wed Jul 31 17:54:07 CEST 2002 - tiwai@suse.de - -- fixed weird sound output on x86-64 (bug #17295). - -------------------------------------------------------------------- -Tue Jul 23 14:46:06 CEST 2002 - adrian@suse.de - -- add support for gnome/glib 2.0 in -gmcop subpackage -- add support for vorbis - -------------------------------------------------------------------- -Wed Jul 17 12:08:11 CEST 2002 - meissner@suse.de - -- compile with -mminimal-toc on ppc64 - -------------------------------------------------------------------- -Mon Jul 8 08:55:43 CEST 2002 - adrian@suse.de - -- fix security problem with arts - * update to 1.0.3: - using setuid instead of seteuid in artswrapper, so a exploited - artsd can not get root again. - -------------------------------------------------------------------- -Thu Jun 27 12:06:10 CEST 2002 - adrian@suse.de - -- move mcopidl to -devel package -- use %run_ldconfig - -------------------------------------------------------------------- -Mon Jun 24 20:53:46 CEST 2002 - adrian@suse.de - -- update to version 1.0.2 - -------------------------------------------------------------------- -Wed Jun 19 17:56:07 CEST 2002 - uli@suse.de - -- disable final on ARM - -------------------------------------------------------------------- -Fri Jun 7 13:53:45 CEST 2002 - adrian@suse.de - -- use same admin tar ball as in kdelibs3 -- using fixed libtool for -m32/-m64 (fixed by matz) - -------------------------------------------------------------------- -Thu May 9 21:57:53 CEST 2002 - adrian@suse.de - -- update to version 1.0.1 (part of KDE 3.0.1 bug-fix release) - -------------------------------------------------------------------- -Thu May 2 16:38:25 CEST 2002 - meissner@suse.de - -- enhanced varargs handling to be more generic (using __va_copy) - -------------------------------------------------------------------- -Tue Apr 2 16:37:00 CEST 2002 - ro@suse.de - -- work around automake problem - -------------------------------------------------------------------- -Mon Mar 25 23:46:29 CET 2002 - adrian@suse.de - -- use second try of version 1.0.0 - -------------------------------------------------------------------- -Mon Mar 25 10:03:24 CET 2002 - adrian@suse.de - -- update to version 1.0.0 (KDE 3.0 final) - -------------------------------------------------------------------- -Thu Mar 21 01:17:11 CET 2002 - adrian@suse.de - -- update to version 0.9.9 (for KDE 3.0rc3) - -------------------------------------------------------------------- -Sun Mar 10 17:03:12 CET 2002 - adrian@suse.de - -- update to version 0.9.8 (for KDE 3.0rc2) - -------------------------------------------------------------------- -Mon Mar 4 17:31:00 CET 2002 - adrian@suse.de - -- update to snapshot 0.7.1.2002030321 - -------------------------------------------------------------------- -Mon Feb 25 17:38:31 CET 2002 - adrian@suse.de - -- update to snapshot 0.7.1.2002022512 - -------------------------------------------------------------------- -Mon Feb 18 20:46:28 CET 2002 - adrian@suse.de - -- update to snapshot 0.7.1.2002021810 - -------------------------------------------------------------------- -Thu Feb 14 23:22:42 CET 2002 - adrian@suse.de - -- update to snapshot 0.7.1.2002021421 - -------------------------------------------------------------------- -Wed Feb 13 23:52:30 CET 2002 - adrian@suse.de - -- split arts from kdelibs3 package -- using a 0.7.1 snapshot - -------------------------------------------------------------------- -Mon Feb 11 15:07:20 CET 2002 - adrian@suse.de - -- update to snapshot 2.92.2002021111 - -------------------------------------------------------------------- -Mon Feb 4 23:51:35 CET 2002 - adrian@suse.de - -- update to 2.92 (KDE 3.0 beta 2) -- create common_compile_flags file - -------------------------------------------------------------------- -Fri Feb 1 00:26:05 CET 2002 - ro@suse.de - -- changed neededforbuild to - -------------------------------------------------------------------- -Mon Jan 28 14:49:00 CET 2002 - adrian@suse.de - -- update to snapshot from 2.91.2002012811 - -------------------------------------------------------------------- -Wed Jan 23 01:50:51 CET 2002 - adrian@suse.de - -- add missing header files - -------------------------------------------------------------------- -Wed Jan 23 00:31:21 CET 2002 - adrian@suse.de - -- update to snapshot 2.91.2002012221 - -------------------------------------------------------------------- -Tue Jan 15 18:24:51 CET 2002 - adrian@suse.de - -- update to snapshot 2.91.2002011511 - -------------------------------------------------------------------- -Sat Jan 5 18:28:06 CET 2002 - adrian@suse.de - -- update to recent/todays snapshot -- disable rpath for SuSE > 7.3 - (/opt/kde3/lib is in ld.so.conf) -- add Requires: line for at least Qt 3.0.1 - -------------------------------------------------------------------- -Mon Dec 17 15:58:49 CET 2001 - adrian@suse.de - -- fix compile on s390 -- add fix for khtml seg fault -- do not build documentation for <7.3 distributions until kdoc - is fixed - -------------------------------------------------------------------- -Wed Dec 12 17:02:34 CET 2001 - adrian@suse.de - -- update to KDE 3.0 Beta 1 - -------------------------------------------------------------------- -Tue Dec 4 20:13:20 CET 2001 - adrian@suse.de - -- use current CVS snapshot - -------------------------------------------------------------------- -Fri Nov 2 12:30:45 CET 2001 - adrian@suse.de - -- using cvs snapshot from 01 Nov 2001 - -------------------------------------------------------------------- -Sat Oct 20 17:57:21 CEST 2001 - adrian@suse.de - -- using newer cvs-snapshot - (compiles again with qt 3 final) - -------------------------------------------------------------------- -Tue Oct 9 11:55:41 CEST 2001 - adrian@suse.de - -- branch to first kdelibs 3 (alpha 1) - -------------------------------------------------------------------- -Mon Sep 24 01:40:05 CEST 2001 - adrian@suse.de - -- add security fix for peer-ssl from Dirk -- add fix to make it possible to allow JS from local pages - -------------------------------------------------------------------- -Fri Sep 21 22:51:53 CEST 2001 - adrian@suse.de - -- add fix for kbuildsycoca --incremental from Waldo - (changed files (due to updated packages or a SuSEconfig run for - example) do not lead anymore to an incorrect ksycoca database. - -------------------------------------------------------------------- -Tue Sep 18 08:55:26 CEST 2001 - adrian@suse.de - -- add symbolic link to /opt/kde2/doc/HTML/en/kdeapi -- #neededforbuild cups -> cups-libs - -------------------------------------------------------------------- -Sat Sep 15 19:13:06 CEST 2001 - adrian@suse.de - -- add klineedit fix -- add warning that kdDebug function is disabled (except for ppc) -- fix kdelibs-2.2.1.dif (do not apply patch for ppc-only global) - -------------------------------------------------------------------- -Thu Sep 13 09:36:06 CEST 2001 - adrian@suse.de - -- add fix for kjs (octal parsing) -- add fix icondialog (custom icon directorys) -- fix ia64 patch - -------------------------------------------------------------------- -Tue Sep 11 10:54:21 CEST 2001 - adrian@suse.de - -- add security fixes for kssl (do not save keys on disk) -- add Qt API to the API index page - -------------------------------------------------------------------- -Mon Sep 10 14:41:23 CEST 2001 - adrian@suse.de - -- update to to second try of kdelibs 2.2.1 tar ball - * JavaScript fixes -- fix ia64 workarounds to build on older distris - -------------------------------------------------------------------- -Sun Sep 9 17:57:01 CEST 2001 - schwab@suse.de - -- Fix specfile for ia64 workarounds. - -------------------------------------------------------------------- -Sat Sep 8 20:40:27 CEST 2001 - adrian@suse.de - -- updating to final 2.2.1 tar ball - -------------------------------------------------------------------- -Sun Sep 2 09:59:21 CEST 2001 - adrian@suse.de - -- update to KDE_2_2_BRANCH from 02.09.2001 - * compile fixes - * KFile crash fix - * KDockWidget crash fix, caused crash in quanta - * fix login with chars in password >127 - * load charsets file on demand - * kxmlgui fixed to read really the complete xml file. -- drop -cups package, the cups libs are now splitted from the cups - package. -- add kmimetype hack to get a fallback application for device icons -- make KDE quiet by default (kdDebug default value is 4 now) - -------------------------------------------------------------------- -Tue Aug 28 15:53:23 CEST 2001 - adrian@suse.de - -- update to KDE_2_2_BRANCH from 28.08.2001 - * fix kspell for iso 13 languages - * fix $PATH for kdesu - * check the preview action in setPreviewWidget() - * check for aborted save - * official patch for kbuildsycoca - * kfile fixes - * crash fixes in userstylesheets - * large file system support fix - * crash fix in kbugreport -- removed patches for kbuildsycoca and large file support - -------------------------------------------------------------------- -Sat Aug 25 09:49:21 CEST 2001 - adrian@suse.de - -- update to KDE_2_2_BRANCH from 25.08.2001 - * khtml supports - * kded updates - * translation updates -- kbuildsycoca speed optimisation - (original patch from Lubos Lunak, reworked to be BC) - -------------------------------------------------------------------- -Tue Aug 21 12:25:49 CEST 2001 - adrian@suse.de - -- using KDE_2_2_BRANCH from 21.08.2001 - * html parser fixes - * artsd fixes - * ... -- disable FAM by default, it can be enabled with - export USE_FAM=1 -- disable and obsolete -i686 package, until the number of problems - are solved - -------------------------------------------------------------------- -Mon Aug 6 23:55:17 CEST 2001 - adrian@suse.de - -- add assert into khtml/misc/loader.cpp as recomended by Dirk -- switch on SSE support in i386 architecture - (arts has a runtime checking) -- clean up file list -- ia64 workarounds - -------------------------------------------------------------------- -Mon Aug 6 10:59:49 CEST 2001 - adrian@suse.de - -- update to final 2.2 - -------------------------------------------------------------------- -Wed Aug 1 15:57:30 CEST 2001 - adrian@suse.de - -- update to 2.2rc1 - -------------------------------------------------------------------- -Fri Jul 6 11:53:42 CEST 2001 - adrian@suse.de - -- generate API documentation - (no need to install kdevelop for api docu anymore) - -------------------------------------------------------------------- -Fri Jun 29 15:39:12 CEST 2001 - adrian@suse.de - -- 2.2beta1 - -------------------------------------------------------------------- -Mon May 28 10:39:18 CEST 2001 - adrian@suse.de - -- 2.2alpha2 - -------------------------------------------------------------------- -Mon Apr 16 22:02:33 CEST 2001 - adrian@suse.de - -- 2.2alpha1 - -------------------------------------------------------------------- -Fri Apr 13 12:54:18 CEST 2001 - adrian@suse.de - -- add currency symbol to KFontDialog preview for testing purposes - -------------------------------------------------------------------- -Tue Apr 10 20:49:07 CEST 2001 - adrian@suse.de - -- revert also kdeinit changes (compile fix) -- add fixes for javascript from CVS -- add fixes for font name mapping from CVS -- add kdeinit_shutdown patch from Waldo - -------------------------------------------------------------------- -Tue Apr 10 01:01:16 MEST 2001 - adrian@suse.de - -- minor fix, but hopefully fix linker problems on all P-II systems - -------------------------------------------------------------------- -Mon Apr 9 11:24:07 CEST 2001 - adrian@suse.de - -- disable alsa for 7.0-ppc - -------------------------------------------------------------------- -Fri Apr 6 11:01:59 CEST 2001 - adrian@suse.de - -- drop the -nostdlib flag during linking. this causes problems - (since not all need libs are used) on some architectures -- -O2 for axp - -------------------------------------------------------------------- -Thu Apr 5 08:56:33 CEST 2001 - adrian@suse.de - -- update to 2_1_BRANCH. - this fixes the proxy server authentication problem - -------------------------------------------------------------------- -Wed Mar 28 18:28:29 CEST 2001 - adrian@suse.de - -- disable ssl support for 7.0-ppc - (problems with the compiler and linker, which can not be fixed - without to loss the BC) - -------------------------------------------------------------------- -Tue Mar 27 12:08:53 CEST 2001 - ro@suse.de - -- changed neededforbuild to - -------------------------------------------------------------------- -Tue Mar 20 21:58:31 CET 2001 - adrian@suse.de - -- enable -O2 for ppc - using inline gcc bug workaround for ia64 - -------------------------------------------------------------------- -Tue Mar 20 18:53:42 CET 2001 - adrian@suse.de - -- update to 2.1.1 (official tar ball) - -------------------------------------------------------------------- -Mon Mar 19 22:03:49 CET 2001 - adrian@suse.de - -- update to current 2_1_BRANCH - we have kde-config as executable binary back - (lots of configure scripts test this) - -------------------------------------------------------------------- -Mon Mar 19 15:39:26 CET 2001 - adrian@suse.de - -- add cyrus-sassl to #neededforbuild - -------------------------------------------------------------------- -Sat Mar 17 21:38:50 CET 2001 - adrian@suse.de - -- added missing packages in #neededforbuild - -------------------------------------------------------------------- -Sat Mar 17 13:32:29 CET 2001 - adrian@suse.de - -- fix CATALOG for distributions <7.2 - update to current 2_1_0_TAG - -------------------------------------------------------------------- -Tue Mar 13 14:29:16 CET 2001 - ro@suse.de - -- added CATALOG for docbook_3 - -------------------------------------------------------------------- -Tue Mar 13 01:12:30 CET 2001 - ro@suse.de - -- changed neededforbuild to - -------------------------------------------------------------------- -Thu Feb 22 19:22:17 CET 2001 - adrian@suse.de - -- the final final 2.1.0 tar ball ... - -------------------------------------------------------------------- -Wed Feb 21 22:42:47 CET 2001 - adrian@suse.de - -- use the right KDE BRANCH (not my fault ;-) - -------------------------------------------------------------------- -Wed Feb 21 17:16:51 CET 2001 - adrian@suse.de - -- update to final 2.1.0 - -------------------------------------------------------------------- -Wed Feb 14 17:04:08 CET 2001 - adrian@suse.de - -- update to 2.1 post beta 2 - -------------------------------------------------------------------- -Mon Jan 22 14:44:41 CET 2001 - stepan@suse.de - -- alpha axp compile fixes for gcc 2.95.2 - -------------------------------------------------------------------- -Tue Jan 16 12:05:26 CET 2001 - adrian@suse.de - -- add a check of return value in kprocess. - Hopefully no crashes anymore. - -------------------------------------------------------------------- -Mon Jan 15 22:13:16 CET 2001 - adrian@suse.de - -- disable --enable-final until the glibc/compiler problem in - kprocess is fixed - -------------------------------------------------------------------- -Mon Jan 15 14:01:38 CET 2001 - adrian@suse.de - -- fix index.desktop for distris <7.1 - -------------------------------------------------------------------- -Sat Jan 13 18:49:40 CET 2001 - adrian@suse.de - -- fix local support in kicker. native language again in menus - this fix does not work for chinese people - fix index.desktop in highcolor, 22x22 actions icons can be loaded - again - -------------------------------------------------------------------- -Fri Jan 12 00:02:33 CET 2001 - adrian@suse.de - -- create some links to see the konqueror gear again - fix hicolor index file - -------------------------------------------------------------------- -Tue Jan 9 22:07:19 CET 2001 - adrian@suse.de - -- added security fix for kdesu from Waldo - -------------------------------------------------------------------- -Mon Jan 8 15:43:09 CET 2001 - adrian@suse.de - -- fix SuSE icon description - -------------------------------------------------------------------- -Sun Jan 7 15:56:58 CET 2001 - adrian@suse.de - -- use additional pathes, to not conflict with older pathes - -------------------------------------------------------------------- -Sun Jan 7 14:24:01 CET 2001 - adrian@suse.de - -- new icon handling. much more clean now and the - dependencie to icons is not needed anymore - -------------------------------------------------------------------- -Sat Jan 6 17:15:51 CET 2001 - adrian@suse.de - -- fix locale support. - LANG=de_DE or LANG=de_DE.utf-8 is working now. - -------------------------------------------------------------------- -Tue Jan 2 21:51:19 CET 2001 - adrian@suse.de - -- added a fix for font handling, if antialising is used - (Thanks Kurt) - -------------------------------------------------------------------- -Mon Jan 1 22:16:48 CET 2001 - adrian@suse.de - -- remove charset for german. this confuses the font handling - added fix for stalled, but broken connections; thanks waldo - -------------------------------------------------------------------- -Sat Dec 30 21:22:21 CET 2000 - adrian@suse.de - -- extend rpm mimelnk for *.spm files - disabled threading - -------------------------------------------------------------------- -Wed Dec 27 18:33:15 CET 2000 - adrian@suse.de - -- drop message in kdeinit, which produce a lot of invalid bugzilla entrys - -------------------------------------------------------------------- -Wed Dec 20 10:38:25 CET 2000 - adrian@suse.de - -- added openssl-devel for #neededforbuild - -------------------------------------------------------------------- -Sun Dec 17 15:55:15 CET 2000 - adrian@suse.de - -- moved icon links back to kdelibs :-( - -------------------------------------------------------------------- -Sun Dec 17 12:54:19 CET 2000 - adrian@suse.de - -- moved icon links from this package to kdebase - -------------------------------------------------------------------- -Fri Dec 15 14:35:38 CET 2000 - adrian@suse.de - -- brown paper bag fix ... I spend Rudi a beer ... - -------------------------------------------------------------------- -Fri Dec 15 12:02:02 CET 2000 - adrian@suse.de - -- added icon packages to #neededforbuild - -------------------------------------------------------------------- -Thu Dec 14 12:38:23 CET 2000 - adrian@suse.de - -- fixed specfile - -------------------------------------------------------------------- -Wed Dec 13 19:22:39 CET 2000 - adrian@suse.de - -- fixed icon links - -------------------------------------------------------------------- -Wed Dec 13 16:52:23 CET 2000 - adrian@suse.de - -- update to current 2_0_BRANCH - -------------------------------------------------------------------- -Wed Nov 29 14:25:31 CET 2000 - adrian@suse.de - -- update to 2.0.1 - -------------------------------------------------------------------- -Wed Nov 22 02:01:26 CET 2000 - ro@suse.de - -- remove penguin.png (in kdebase) - -------------------------------------------------------------------- -Tue Nov 21 15:07:15 CET 2000 - adrian@suse.de - -- fixed /etc/kderc - -------------------------------------------------------------------- -Tue Nov 21 00:08:08 CET 2000 - adrian@suse.de - -- added icon support for non kde icons - added /etc/kderc - ~/Desktop -> ~/KDesktop - -------------------------------------------------------------------- -Thu Nov 16 15:46:49 CET 2000 - adrian@suse.de - -- update to newer snapshot from KDE_2_0_BRANCH - fixed sgml catalog file for our sgml enviroment - -------------------------------------------------------------------- -Fri Nov 3 08:45:45 CET 2000 - adrian@suse.de - -- fixed needed for build - -------------------------------------------------------------------- -Thu Nov 2 20:35:30 CET 2000 - adrian@suse.de - -- fixed file list - -------------------------------------------------------------------- -Tue Oct 17 04:52:05 CEST 2000 - adrian@suse.de - -- update to 2.0.0 -- changed default for ~/.kde to ~/.kde2 -- dropped klibs2i and klibs2cr again -- splitted package in - * kdelibs - * kdelibs-devel - -------------------------------------------------------------------- -Wed Sep 20 11:29:35 CEST 2000 - adrian@suse.de - -- the last fix :-( - -------------------------------------------------------------------- -Sun Sep 17 00:27:08 CEST 2000 - adrian@suse.de - -- splited klibs2 into klibs2, klibs2i (international version - without crypt support) and klibs2cr (crypt version) - -------------------------------------------------------------------- -Sat Sep 16 15:17:06 CEST 2000 - adrian@suse.de - -- removed ssl/ssh support - added big endian fix in KPixmap - -------------------------------------------------------------------- -Tue Sep 12 11:49:35 MEST 2000 - adrian@suse.de - -- changed to -O0 for ppc and alpha - -------------------------------------------------------------------- -Tue Sep 12 08:56:11 CEST 2000 - adrian@suse.de - -- update to RC 1 - -------------------------------------------------------------------- -Mon Aug 21 14:04:31 CEST 2000 - adrian@suse.de - -- update to beta 4 - -------------------------------------------------------------------- -Mon Jul 24 17:46:04 CEST 2000 - adrian@suse.de - -- update to second version of beta 3 - -------------------------------------------------------------------- -Fri Jul 21 22:39:53 CEST 2000 - adrian@suse.de - -- update to beta 3 - -------------------------------------------------------------------- -Mon Jul 17 19:24:01 CEST 2000 - adrian@suse.de - -- update to snapshot from 17.07.2000 - -------------------------------------------------------------------- -Thu Jul 6 19:48:47 CEST 2000 - adrian@suse.de - -- Spec file created from kdelibs-1.91.20000706.tar.gz by autospec - - -------------------------------------------------------------------- -Fri Jun 9 17:15:52 CEST 2000 - adrian@suse.de - -- correct neededforbuild and updated khtml - -------------------------------------------------------------------- -Fri Jun 9 02:35:16 CEST 2000 - adrian@suse.de - -- update to 1.91; beta 2 - -------------------------------------------------------------------- -Tue Jun 6 01:29:47 CEST 2000 - adrian@suse.de - -- snapshot from 06.06.2000 - -------------------------------------------------------------------- -Sun May 28 09:22:23 CEST 2000 - adrian@suse.de - -- snapshot from 28.05.2000 - new type of spec file - -------------------------------------------------------------------- -Fri May 12 13:29:41 CEST 2000 - adrian@suse.de - -- update to KDE 1.90 - -------------------------------------------------------------------- -Thu Apr 27 17:45:45 CEST 2000 - adrian@suse.de - -- snapshot from 25.04.2000 - -------------------------------------------------------------------- -Thu Apr 20 14:27:28 CEST 2000 - adrian@suse.de - -- fixed file list - -------------------------------------------------------------------- -Wed Apr 19 17:17:42 CEST 2000 - adrian@suse.de - -- snapshot from 17.04.2000 - -------------------------------------------------------------------- -Thu Apr 6 19:21:15 CEST 2000 - adrian@suse.de - -- snapshot from 06.04.2000 - -------------------------------------------------------------------- -Thu Mar 30 18:44:11 CEST 2000 - adrian@suse.de - -- first KDE libs 2 package. PRE 1.90 Version - diff --git a/opensuse/arts/arts.spec b/opensuse/arts/arts.spec deleted file mode 100644 index b7fd43e5f..000000000 --- a/opensuse/arts/arts.spec +++ /dev/null @@ -1,197 +0,0 @@ -# -# spec file for package arts -# -# Copyright (c) 2011 the Trinity Project (opensuse). -# -# All modifications and additions to the file contributed by third parties -# remain the property of their copyright owners, unless otherwise agreed -# upon. The license for this file, and modifications and additions to the -# file, is the same license as for the pristine package itself (unless the -# license for the pristine package is not an Open Source License, in which -# case the license is the MIT License). An "Open Source License" is a -# license that conforms to the Open Source Definition (Version 1.9) -# published by the Open Source Initiative. - -# Please submit bugfixes or comments via http://bugs.trinitydesktop.org/ -# - -# norootforbuild - - -Name: arts -BuildRequires: alsa-devel audiofile-devel cmake glib2-devel jack-devel libdrm-devel libjpeg-devel libvorbis-devel libtqt4-devel readline-devel update-desktop-files tde-filesystem -BuildRequires: tde-filesystem -License: GPLv2+ -Group: Productivity/Multimedia/Sound/Players -Summary: Modular Software Synthesizer -PreReq: permissions -Version: 1.5.10 -Release: 1 -Source0: %{name}-%{version}.tar.bz2 -Source1: artswrapper.7.gz -Source2: baselibs.conf -Patch2: no-informational-messages.diff -Patch5: arts-vorbis-fix.dif -Patch7: fortify_source.patch -Patch8: arts-start-on-demand.diff -Patch9: avoid_la_files.diff -BuildRoot: %{_tmppath}/%{name}-%{version}-build - -%description -A modular software synthesizer that generates realtime audio streams, -includes midi support, is easily extendable, and uses CORBA for -separation of GUI and synthesis. - - - -Authors: --------- - Stefan Westerfeld - -%package devel -License: GPLv2+ -# usefiles /opt/tde/bin/artsc-config /opt/tde/bin/mcopidl -Summary: Include Files and Libraries mandatory for Development. -Group: Development/Libraries/Other -Provides: tdelibs:/opt/tde/include/artsc/artsc.h -Requires: libtqt4-devel arts = %version glib2-devel jack-devel libogg-devel libvorbis-devel audiofile-devel libstdc++-devel -Requires: alsa-devel tde-filesystem - -%description devel -A modular software synthesizer that generates realtime audio streams, -supports MIDI, is easily extendable, and uses CORBA for separation of -the GUI and synthesis. - - - -Authors: --------- - Stefan Westerfeld - -%package devel-static -License: GPLv2+ -Summary: Include Files and Libraries mandatory for Development. -Group: Development/Libraries/Other - -%description devel-static -A modular software synthesizer that generates realtime audio streams, -supports MIDI, is easily extendable, and uses CORBA for separation of -the GUI and synthesis. - - - -Authors: --------- - Stefan Westerfeld - -%package gmcop -License: GPLv2+ -# usesubdirs gmcop -Summary: A Modular Software Synthesizer -Group: Productivity/Multimedia/Sound/Players - -%description gmcop -A modular software synthesizer that generates real-time audio streams, -supports midi, is easily extendable, and uses CORBA for separation of -GUI and synthesis. - - - -Authors: --------- - Stefan Westerfeld - -%prep -%setup -qn arts-%{version} -%patch2 -%patch5 -%patch7 -%patch8 -%patch9 - -%build -CXXFLAGS="$CXXFLAGS $RPM_OPT_FLAGS -DNDEBUG" CFLAGS="$CXXFLAGS" %cmake_tde -d build -- -DWITH_MAD=OFF -DCMAKE_SKIP_RPATH=OFF - -# shut off MAD support because that is only available in packman - -#%ifarch %ix86 -# I trust in arts runtime checking ... -#echo "#define HAVE_X86_SSE 1" >> config.h -#%endif -# broken automake ? -#make -C flow/gsl gslconfig.h -# broken automake ? -#make %{?jobs:-j%jobs} - -%make_tde -d build - -%install -%makeinstall_tde -d build -%ifarch x86_64 -mkdir -p $RPM_BUILD_ROOT/%{_tde_prefix}/lib -ln -sf ../lib64/mcop $RPM_BUILD_ROOT/%{_tde_prefix}/lib/mcop -%endif -mkdir -p -m 755 $RPM_BUILD_ROOT/%_mandir/man7 -cp %SOURCE1 $RPM_BUILD_ROOT/%_mandir/man7/ - -# unneeded -rm -rf %{buildroot}/%{_tde_libdir}/*.la - -%clean -rm -rf $RPM_BUILD_ROOT - -%post -%run_ldconfig -%run_permissions - -%postun -%run_ldconfig - -%post gmcop -%run_ldconfig - -%postun gmcop -%run_ldconfig -%verifyscript -%verify_permissions -e %{_tde_bindir}/artswrapper - -%files -%defattr(-,root,root,755) -%doc COPYING.LIB COPYING -%dir %{_tde_prefix} -%dir %{_tde_bindir} -%{_tde_bindir}/artscat -%{_tde_bindir}/arts[dpsr]* -%verify(not mode) %{_tde_bindir}/artswrapper -%dir %{_tde_libdir} -%{_tde_libdir}/libarts*.so.* -%{_tde_libdir}/libkmedia2*.so.* -%{_tde_libdir}/libmcop.so.* -%{_tde_libdir}/libmcop_mt.so.* -%{_tde_libdir}/libqtmcop.so.* -%{_tde_libdir}/libsoundserver_idl.so.* -# these need to be in the base package for lt_dlopen() -%{_tde_libdir}/*.so -%{_tde_libdir}/mcop -%ifarch x86_64 -%{_tde_prefix}/lib -%endif -%{_mandir}/man7/artswrapper.7.gz - -%files devel -%defattr(-,root,root) -%{_tde_bindir}/artsc-config -%{_tde_bindir}/mcopidl -%dir %{_tde_includedir} -%{_tde_includedir}/* -%{_libdir}/pkgconfig/arts.pc - -%files devel-static -%defattr(-,root,root) -%{_tde_libdir}/libgsl.a - -%files gmcop -%defattr(-,root,root) -%{_tde_libdir}/libgmcop.so.* - -%changelog diff --git a/opensuse/arts/artswrapper.7.gz b/opensuse/arts/artswrapper.7.gz deleted file mode 100644 index 92eb0982b..000000000 Binary files a/opensuse/arts/artswrapper.7.gz and /dev/null differ diff --git a/opensuse/arts/avoid_la_files.diff b/opensuse/arts/avoid_la_files.diff deleted file mode 100644 index 7c592d687..000000000 --- a/opensuse/arts/avoid_la_files.diff +++ /dev/null @@ -1,26 +0,0 @@ ---- artsc/Makefile.am -+++ artsc/Makefile.am -@@ -1,4 +1,4 @@ --AM_CFLAGS = -DARTSC_BACKEND='"$(libdir)/libartscbackend.la"' -+AM_CFLAGS = -DARTSC_BACKEND='"$(libdir)/libartscbackend.so"' - AM_CPPFLAGS = -DCOMPILING_ARTSC - lib_LTLIBRARIES = libartsc.la libartscbackend.la libartsdsp.la libartsdsp_st.la - FLOWLIBS = $(top_builddir)/flow/libartsflow.la ---- mcop/extensionloader.cc -+++ mcop/extensionloader.cc -@@ -56,7 +56,14 @@ - /* this will catch all startup classes here */ - StartupManager::setExtensionLoader(this); - -- lt_dlinit(); -+ lt_dlinit(); -+ -+ string::size_type len = dlfilename.length(); -+ if (len > 0 && dlfilename[len-1] == 'a' && dlfilename[len-2] == 'l') { -+ dlfilename[len-1] = 'o'; -+ dlfilename[len-2] = 's'; -+ } -+ - handle = lt_dlopen(dlfilename.c_str()); - - StartupManager::setExtensionLoader(0); diff --git a/opensuse/arts/baselibs.conf b/opensuse/arts/baselibs.conf deleted file mode 100644 index 1dec19ada..000000000 --- a/opensuse/arts/baselibs.conf +++ /dev/null @@ -1 +0,0 @@ -arts diff --git a/opensuse/arts/fortify_source.patch b/opensuse/arts/fortify_source.patch deleted file mode 100644 index fb14bc2ab..000000000 --- a/opensuse/arts/fortify_source.patch +++ /dev/null @@ -1,13 +0,0 @@ -Index: flow/gsl/gslloader-oggvorbis.c -=================================================================== ---- flow/gsl/gslloader-oggvorbis.c.orig -+++ flow/gsl/gslloader-oggvorbis.c -@@ -25,7 +25,7 @@ - #include - #include - #include -- -+#include - - /* --- structures --- */ - typedef struct diff --git a/opensuse/arts/no-informational-messages.diff b/opensuse/arts/no-informational-messages.diff deleted file mode 100644 index e25ea16d1..000000000 --- a/opensuse/arts/no-informational-messages.diff +++ /dev/null @@ -1,15 +0,0 @@ -Index: mcop/debug.cc -=================================================================== -RCS file: /home/kde/arts/mcop/debug.cc,v -retrieving revision 1.14 -diff -u -3 -p -r1.14 debug.cc ---- mcop/debug.cc 13 Oct 2003 19:59:41 -0000 1.14 -+++ mcop/debug.cc 24 Feb 2004 17:07:40 -0000 -@@ -92,7 +92,6 @@ static void output_message(Debug::Level - buff = arts_strdup_printf("%s -w 'Sound server warning message:\n\n%s' &", messageAppName, quoted_msg); - break; - case Debug::lInfo: -- buff = arts_strdup_printf("%s -i 'Sound server informational message:\n\n%s' &", messageAppName, quoted_msg); - break; - default: - break; // avoid compile warning diff --git a/opensuse/core/.metadata/.atlassian-connector-for-eclipse/usage-data.xml b/opensuse/core/.metadata/.atlassian-connector-for-eclipse/usage-data.xml new file mode 100644 index 000000000..e69de29bb diff --git a/opensuse/core/.metadata/.lock b/opensuse/core/.metadata/.lock new file mode 100644 index 000000000..e69de29bb diff --git a/opensuse/core/.metadata/.log b/opensuse/core/.metadata/.log new file mode 100644 index 000000000..4ea9566c8 --- /dev/null +++ b/opensuse/core/.metadata/.log @@ -0,0 +1,194 @@ +!SESSION 2011-11-08 22:55:25.406 ----------------------------------------------- +eclipse.buildId=I20110613-1736 +java.version=1.6.0_23 +java.vendor=Sun Microsystems Inc. +BootLoader constants: OS=linux, ARCH=x86, WS=gtk, NL=en_US +Command-line arguments: -os linux -ws gtk -arch x86 -data /home/rxu/tde-packaging/opensuse/eclipsewkspace + +!ENTRY org.eclipse.ui 4 4 2011-11-08 22:58:06.439 +!MESSAGE Invalid preference page path: XML Syntax + +!ENTRY org.eclipse.linuxtools.rpm.ui.editor 2 127 2011-11-08 22:58:18.299 +!MESSAGE Return value of process was non-zero value 127. This may mean output is not accurate. +!SESSION 2011-11-08 23:25:03.267 ----------------------------------------------- +eclipse.buildId=I20110613-1736 +java.version=1.6.0_23 +java.vendor=Sun Microsystems Inc. +BootLoader constants: OS=linux, ARCH=x86, WS=gtk, NL=en_US +Command-line arguments: -os linux -ws gtk -arch x86 + +!ENTRY org.eclipse.mylyn.tasks.core 4 0 2011-11-08 23:26:44.318 +!MESSAGE Could not store authorization credentials +!STACK 0 +org.eclipse.equinox.security.storage.StorageException: No password provided. + at org.eclipse.equinox.internal.security.storage.SecurePreferences.put(SecurePreferences.java:237) + at org.eclipse.equinox.internal.security.storage.SecurePreferencesWrapper.put(SecurePreferencesWrapper.java:110) + at org.eclipse.mylyn.tasks.core.TaskRepository.addAuthInfo(TaskRepository.java:264) + at org.eclipse.mylyn.tasks.core.TaskRepository.setCredentials(TaskRepository.java:758) + at org.eclipse.mylyn.tasks.ui.wizards.AbstractRepositorySettingsPage.applyTo(AbstractRepositorySettingsPage.java:1633) + at com.atlassian.connector.eclipse.internal.bamboo.ui.BambooRepositorySettingsPage.applyToValidate(BambooRepositorySettingsPage.java:191) + at com.atlassian.connector.eclipse.internal.bamboo.ui.BambooRepositorySettingsPage.createTaskRepository(BambooRepositorySettingsPage.java:198) + at org.eclipse.mylyn.tasks.ui.wizards.AbstractRepositorySettingsPage$11.linkActivated(AbstractRepositorySettingsPage.java:556) + at org.eclipse.ui.forms.widgets.AbstractHyperlink.handleActivate(AbstractHyperlink.java:233) + at org.eclipse.ui.forms.widgets.AbstractHyperlink.handleMouseUp(AbstractHyperlink.java:327) + at org.eclipse.ui.forms.widgets.AbstractHyperlink.access$2(AbstractHyperlink.java:311) + at org.eclipse.ui.forms.widgets.AbstractHyperlink$4.handleEvent(AbstractHyperlink.java:125) + at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1258) + at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3588) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3209) + at org.eclipse.jface.window.Window.runEventLoop(Window.java:825) + at org.eclipse.jface.window.Window.open(Window.java:801) + at org.eclipse.mylyn.internal.tasks.ui.commands.AddTaskRepositoryHandler.showWizard(AddTaskRepositoryHandler.java:52) + at org.eclipse.mylyn.internal.tasks.ui.commands.AddTaskRepositoryHandler.execute(AddTaskRepositoryHandler.java:39) + at org.eclipse.ui.internal.handlers.HandlerProxy.execute(HandlerProxy.java:293) + at org.eclipse.core.commands.Command.executeWithChecks(Command.java:476) + at com.atlassian.connector.eclipse.internal.bamboo.ui.actions.RepositoryConfigurationAction.openNewRepositoryWizard(RepositoryConfigurationAction.java:93) + at com.atlassian.connector.eclipse.internal.bamboo.ui.actions.RepositoryConfigurationAction.access$0(RepositoryConfigurationAction.java:82) + at com.atlassian.connector.eclipse.internal.bamboo.ui.actions.RepositoryConfigurationAction$1.run(RepositoryConfigurationAction.java:61) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:135) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3563) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3212) + at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2696) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2660) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2494) + at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:674) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:667) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:123) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:344) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:616) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:622) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:577) + at org.eclipse.equinox.launcher.Main.run(Main.java:1410) + +!ENTRY org.eclipse.mylyn.tasks.core 4 0 2011-11-08 23:26:45.689 +!MESSAGE Could not store authorization credentials +!STACK 0 +org.eclipse.equinox.security.storage.StorageException: No password provided. + at org.eclipse.equinox.internal.security.storage.SecurePreferences.put(SecurePreferences.java:237) + at org.eclipse.equinox.internal.security.storage.SecurePreferencesWrapper.put(SecurePreferencesWrapper.java:110) + at org.eclipse.mylyn.tasks.core.TaskRepository.addAuthInfo(TaskRepository.java:264) + at org.eclipse.mylyn.tasks.core.TaskRepository.setCredentials(TaskRepository.java:751) + at org.eclipse.mylyn.tasks.ui.wizards.AbstractRepositorySettingsPage.applyTo(AbstractRepositorySettingsPage.java:1653) + at com.atlassian.connector.eclipse.internal.bamboo.ui.BambooRepositorySettingsPage.applyToValidate(BambooRepositorySettingsPage.java:191) + at com.atlassian.connector.eclipse.internal.bamboo.ui.BambooRepositorySettingsPage.createTaskRepository(BambooRepositorySettingsPage.java:198) + at org.eclipse.mylyn.tasks.ui.wizards.AbstractRepositorySettingsPage$11.linkActivated(AbstractRepositorySettingsPage.java:556) + at org.eclipse.ui.forms.widgets.AbstractHyperlink.handleActivate(AbstractHyperlink.java:233) + at org.eclipse.ui.forms.widgets.AbstractHyperlink.handleMouseUp(AbstractHyperlink.java:327) + at org.eclipse.ui.forms.widgets.AbstractHyperlink.access$2(AbstractHyperlink.java:311) + at org.eclipse.ui.forms.widgets.AbstractHyperlink$4.handleEvent(AbstractHyperlink.java:125) + at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1258) + at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3588) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3209) + at org.eclipse.jface.window.Window.runEventLoop(Window.java:825) + at org.eclipse.jface.window.Window.open(Window.java:801) + at org.eclipse.mylyn.internal.tasks.ui.commands.AddTaskRepositoryHandler.showWizard(AddTaskRepositoryHandler.java:52) + at org.eclipse.mylyn.internal.tasks.ui.commands.AddTaskRepositoryHandler.execute(AddTaskRepositoryHandler.java:39) + at org.eclipse.ui.internal.handlers.HandlerProxy.execute(HandlerProxy.java:293) + at org.eclipse.core.commands.Command.executeWithChecks(Command.java:476) + at com.atlassian.connector.eclipse.internal.bamboo.ui.actions.RepositoryConfigurationAction.openNewRepositoryWizard(RepositoryConfigurationAction.java:93) + at com.atlassian.connector.eclipse.internal.bamboo.ui.actions.RepositoryConfigurationAction.access$0(RepositoryConfigurationAction.java:82) + at com.atlassian.connector.eclipse.internal.bamboo.ui.actions.RepositoryConfigurationAction$1.run(RepositoryConfigurationAction.java:61) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:135) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3563) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3212) + at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2696) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2660) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2494) + at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:674) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:667) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:123) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:344) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:616) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:622) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:577) + at org.eclipse.equinox.launcher.Main.run(Main.java:1410) + +!ENTRY org.eclipse.mylyn.tasks.core 4 0 2011-11-08 23:26:46.542 +!MESSAGE Could not store authorization credentials +!STACK 0 +org.eclipse.equinox.security.storage.StorageException: No password provided. + at org.eclipse.equinox.internal.security.storage.SecurePreferences.put(SecurePreferences.java:237) + at org.eclipse.equinox.internal.security.storage.SecurePreferencesWrapper.put(SecurePreferencesWrapper.java:110) + at org.eclipse.mylyn.tasks.core.TaskRepository.addAuthInfo(TaskRepository.java:264) + at org.eclipse.mylyn.tasks.core.TaskRepository.setCredentials(TaskRepository.java:758) + at org.eclipse.mylyn.tasks.ui.wizards.AbstractRepositorySettingsPage.applyTo(AbstractRepositorySettingsPage.java:1664) + at com.atlassian.connector.eclipse.internal.bamboo.ui.BambooRepositorySettingsPage.applyToValidate(BambooRepositorySettingsPage.java:191) + at com.atlassian.connector.eclipse.internal.bamboo.ui.BambooRepositorySettingsPage.createTaskRepository(BambooRepositorySettingsPage.java:198) + at org.eclipse.mylyn.tasks.ui.wizards.AbstractRepositorySettingsPage$11.linkActivated(AbstractRepositorySettingsPage.java:556) + at org.eclipse.ui.forms.widgets.AbstractHyperlink.handleActivate(AbstractHyperlink.java:233) + at org.eclipse.ui.forms.widgets.AbstractHyperlink.handleMouseUp(AbstractHyperlink.java:327) + at org.eclipse.ui.forms.widgets.AbstractHyperlink.access$2(AbstractHyperlink.java:311) + at org.eclipse.ui.forms.widgets.AbstractHyperlink$4.handleEvent(AbstractHyperlink.java:125) + at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1258) + at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3588) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3209) + at org.eclipse.jface.window.Window.runEventLoop(Window.java:825) + at org.eclipse.jface.window.Window.open(Window.java:801) + at org.eclipse.mylyn.internal.tasks.ui.commands.AddTaskRepositoryHandler.showWizard(AddTaskRepositoryHandler.java:52) + at org.eclipse.mylyn.internal.tasks.ui.commands.AddTaskRepositoryHandler.execute(AddTaskRepositoryHandler.java:39) + at org.eclipse.ui.internal.handlers.HandlerProxy.execute(HandlerProxy.java:293) + at org.eclipse.core.commands.Command.executeWithChecks(Command.java:476) + at com.atlassian.connector.eclipse.internal.bamboo.ui.actions.RepositoryConfigurationAction.openNewRepositoryWizard(RepositoryConfigurationAction.java:93) + at com.atlassian.connector.eclipse.internal.bamboo.ui.actions.RepositoryConfigurationAction.access$0(RepositoryConfigurationAction.java:82) + at com.atlassian.connector.eclipse.internal.bamboo.ui.actions.RepositoryConfigurationAction$1.run(RepositoryConfigurationAction.java:61) + at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35) + at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:135) + at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3563) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3212) + at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2696) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2660) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2494) + at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:674) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:667) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:123) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:344) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:616) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:622) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:577) + at org.eclipse.equinox.launcher.Main.run(Main.java:1410) + +!ENTRY org.eclipse.mylyn.discovery.ui 4 0 2011-11-08 23:44:59.992 +!MESSAGE Problems occurred while performing installation: The following connectors are not available: Hudson/Jenkins (id=com.tasktop.client.pro.feature.group, site=http://download.eclipse.org/mylyn/releases/latest) +!STACK 1 +org.eclipse.core.runtime.CoreException: The following connectors are not available: Hudson/Jenkins (id=com.tasktop.client.pro.feature.group, site=http://download.eclipse.org/mylyn/releases/latest) + at org.eclipse.mylyn.internal.discovery.ui.PrepareInstallProfileJob_e_3_6.checkForUnavailable(PrepareInstallProfileJob_e_3_6.java:227) + at org.eclipse.mylyn.internal.discovery.ui.PrepareInstallProfileJob_e_3_6.computeInstallableUnits(PrepareInstallProfileJob_e_3_6.java:137) + at org.eclipse.mylyn.internal.discovery.ui.PrepareInstallProfileJob_e_3_6.run(PrepareInstallProfileJob_e_3_6.java:89) + at org.eclipse.jface.operation.ModalContext$ModalContextThread.run(ModalContext.java:121) +!SUBENTRY 1 org.eclipse.mylyn.discovery.ui 4 0 2011-11-08 23:45:00.004 +!MESSAGE The following connectors are not available: Hudson/Jenkins (id=com.tasktop.client.pro.feature.group, site=http://download.eclipse.org/mylyn/releases/latest) + +!ENTRY org.eclipse.ui 4 4 2011-11-09 22:51:48.325 +!MESSAGE Invalid preference page path: XML Syntax diff --git a/opensuse/core/.metadata/.mylyn/.repositories.xml.zip b/opensuse/core/.metadata/.mylyn/.repositories.xml.zip new file mode 100644 index 000000000..60e926974 Binary files /dev/null and b/opensuse/core/.metadata/.mylyn/.repositories.xml.zip differ diff --git a/opensuse/core/.metadata/.mylyn/repositories.xml.zip b/opensuse/core/.metadata/.mylyn/repositories.xml.zip new file mode 100644 index 000000000..fafe51d40 Binary files /dev/null and b/opensuse/core/.metadata/.mylyn/repositories.xml.zip differ diff --git a/opensuse/core/.metadata/.plugins/com.atlassian.connector.eclipse.bamboo.core/repositoryConfigurations b/opensuse/core/.metadata/.plugins/com.atlassian.connector.eclipse.bamboo.core/repositoryConfigurations new file mode 100644 index 000000000..fe2e1fc53 Binary files /dev/null and b/opensuse/core/.metadata/.plugins/com.atlassian.connector.eclipse.bamboo.core/repositoryConfigurations differ diff --git a/opensuse/core/.metadata/.plugins/com.atlassian.connector.eclipse.jira.core/serverCache/repositoryConfigurations b/opensuse/core/.metadata/.plugins/com.atlassian.connector.eclipse.jira.core/serverCache/repositoryConfigurations new file mode 100644 index 000000000..49dfe2a5a Binary files /dev/null and b/opensuse/core/.metadata/.plugins/com.atlassian.connector.eclipse.jira.core/serverCache/repositoryConfigurations differ diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.cdt.core/.log b/opensuse/core/.metadata/.plugins/org.eclipse.cdt.core/.log new file mode 100644 index 000000000..f59b31276 --- /dev/null +++ b/opensuse/core/.metadata/.plugins/org.eclipse.cdt.core/.log @@ -0,0 +1,2 @@ +*** SESSION Nov 08, 2011 22:55:31.27 ------------------------------------------- +*** SESSION Nov 08, 2011 23:25:53.43 ------------------------------------------- diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/history.version b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/history.version new file mode 100644 index 000000000..25cb955ba --- /dev/null +++ b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/history.version @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/properties.index b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/properties.index new file mode 100644 index 000000000..9032b8f9c Binary files /dev/null and b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/properties.index differ diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/properties.version b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/properties.version new file mode 100644 index 000000000..6b2aaa764 --- /dev/null +++ b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/properties.version @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.root/2.tree b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.root/2.tree new file mode 100644 index 000000000..0b596fd36 Binary files /dev/null and b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.root/2.tree differ diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.safetable/org.eclipse.core.resources b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.safetable/org.eclipse.core.resources new file mode 100644 index 000000000..70213890d Binary files /dev/null and b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.safetable/org.eclipse.core.resources differ diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.runtime/.settings/com.atlassian.connector.eclipse.bamboo.ui.prefs b/opensuse/core/.metadata/.plugins/org.eclipse.core.runtime/.settings/com.atlassian.connector.eclipse.bamboo.ui.prefs new file mode 100644 index 000000000..ffa55e749 --- /dev/null +++ b/opensuse/core/.metadata/.plugins/org.eclipse.core.runtime/.settings/com.atlassian.connector.eclipse.bamboo.ui.prefs @@ -0,0 +1,3 @@ +#Thu Nov 10 17:56:54 EST 2011 +secure_storage.migration.done=true +eclipse.preferences.version=1 diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.runtime/.settings/com.atlassian.connector.eclipse.jira.ui.prefs b/opensuse/core/.metadata/.plugins/org.eclipse.core.runtime/.settings/com.atlassian.connector.eclipse.jira.ui.prefs new file mode 100644 index 000000000..ffa55e749 --- /dev/null +++ b/opensuse/core/.metadata/.plugins/org.eclipse.core.runtime/.settings/com.atlassian.connector.eclipse.jira.ui.prefs @@ -0,0 +1,3 @@ +#Thu Nov 10 17:56:54 EST 2011 +secure_storage.migration.done=true +eclipse.preferences.version=1 diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.runtime/.settings/com.atlassian.connector.eclipse.monitor.ui.prefs b/opensuse/core/.metadata/.plugins/org.eclipse.core.runtime/.settings/com.atlassian.connector.eclipse.monitor.ui.prefs new file mode 100644 index 000000000..279d1a3b7 --- /dev/null +++ b/opensuse/core/.metadata/.plugins/org.eclipse.core.runtime/.settings/com.atlassian.connector.eclipse.monitor.ui.prefs @@ -0,0 +1,3 @@ +#Thu Nov 10 17:56:55 EST 2011 +com.atlassian.connector.eclipse.monitor.usage.first.time=false +eclipse.preferences.version=1 diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.cdt.debug.core.prefs b/opensuse/core/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.cdt.debug.core.prefs new file mode 100644 index 000000000..1c9f20aee --- /dev/null +++ b/opensuse/core/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.cdt.debug.core.prefs @@ -0,0 +1,3 @@ +#Wed Nov 09 22:51:51 EST 2011 +org.eclipse.cdt.debug.core.cDebug.common_source_containers=\n\n\n\n +eclipse.preferences.version=1 diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.cdt.ui.prefs b/opensuse/core/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.cdt.ui.prefs new file mode 100644 index 000000000..6f6bda394 --- /dev/null +++ b/opensuse/core/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.cdt.ui.prefs @@ -0,0 +1,5 @@ +#Tue Nov 08 23:25:01 EST 2011 +spelling_locale_initialized=true +useAnnotationsPrefPage=true +eclipse.preferences.version=1 +useQuickDiffPrefPage=true diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.core.resources.prefs b/opensuse/core/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 000000000..5424769b4 --- /dev/null +++ b/opensuse/core/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,3 @@ +#Tue Nov 08 22:58:03 EST 2011 +version=1 +eclipse.preferences.version=1 diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.debug.ui.prefs b/opensuse/core/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.debug.ui.prefs new file mode 100644 index 000000000..0519b0ac5 --- /dev/null +++ b/opensuse/core/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.debug.ui.prefs @@ -0,0 +1,3 @@ +#Wed Nov 09 22:52:39 EST 2011 +eclipse.preferences.version=1 +org.eclipse.debug.ui.PREF_LAUNCH_PERSPECTIVES=\n\n diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.epp.mpc.ui.prefs b/opensuse/core/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.epp.mpc.ui.prefs new file mode 100644 index 000000000..8081020b6 --- /dev/null +++ b/opensuse/core/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.epp.mpc.ui.prefs @@ -0,0 +1,3 @@ +#Tue Nov 08 23:25:01 EST 2011 +eclipse.preferences.version=1 +CatalogDescriptor=http\://marketplace.eclipse.org diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.jdt.ui.prefs b/opensuse/core/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.jdt.ui.prefs new file mode 100644 index 000000000..208b1b435 --- /dev/null +++ b/opensuse/core/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.jdt.ui.prefs @@ -0,0 +1,15 @@ +#Tue Nov 08 23:25:01 EST 2011 +useQuickDiffPrefPage=true +proposalOrderMigrated=true +tabWidthPropagated=true +content_assist_proposals_background=255,255,255 +org.eclipse.jdt.ui.javadoclocations.migrated=true +useAnnotationsPrefPage=true +org.eclipse.jface.textfont=1|Monospace|10.0|0|GTK|1|; +org.eclipse.jdt.internal.ui.navigator.layout=2 +org.eclipse.jdt.ui.editor.tab.width= +org.eclipse.jdt.ui.formatterprofiles.version=12 +spelling_locale_initialized=true +eclipse.preferences.version=1 +content_assist_proposals_foreground=60,60,60 +fontPropagated=true diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.m2e.discovery.prefs b/opensuse/core/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.m2e.discovery.prefs new file mode 100644 index 000000000..1359d84fb --- /dev/null +++ b/opensuse/core/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.m2e.discovery.prefs @@ -0,0 +1,3 @@ +#Tue Nov 08 23:25:01 EST 2011 +eclipse.preferences.version=1 +org.eclipse.m2e.discovery.pref.projects= diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.mylyn.context.core.prefs b/opensuse/core/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.mylyn.context.core.prefs new file mode 100644 index 000000000..ee93bd53f --- /dev/null +++ b/opensuse/core/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.mylyn.context.core.prefs @@ -0,0 +1,3 @@ +#Tue Nov 08 23:25:52 EST 2011 +eclipse.preferences.version=1 +mylyn.attention.migrated=true diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.mylyn.monitor.ui.prefs b/opensuse/core/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.mylyn.monitor.ui.prefs new file mode 100644 index 000000000..02007c06e --- /dev/null +++ b/opensuse/core/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.mylyn.monitor.ui.prefs @@ -0,0 +1,3 @@ +#Tue Nov 08 23:25:52 EST 2011 +org.eclipse.mylyn.monitor.activity.tracking.enabled.checked=true +eclipse.preferences.version=1 diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.mylyn.tasks.ui.prefs b/opensuse/core/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.mylyn.tasks.ui.prefs new file mode 100644 index 000000000..674a5f6b1 --- /dev/null +++ b/opensuse/core/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.mylyn.tasks.ui.prefs @@ -0,0 +1,3 @@ +#Thu Nov 10 17:56:54 EST 2011 +org.eclipse.mylyn.tasks.ui.messages.enabled=true +eclipse.preferences.version=1 diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.team.ui.prefs b/opensuse/core/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.team.ui.prefs new file mode 100644 index 000000000..a52c96112 --- /dev/null +++ b/opensuse/core/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.team.ui.prefs @@ -0,0 +1,3 @@ +#Tue Nov 08 23:25:01 EST 2011 +eclipse.preferences.version=1 +org.eclipse.team.ui.first_time=false diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.editors.prefs b/opensuse/core/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.editors.prefs new file mode 100644 index 000000000..f14dd68db --- /dev/null +++ b/opensuse/core/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.editors.prefs @@ -0,0 +1,3 @@ +#Tue Nov 08 23:25:01 EST 2011 +eclipse.preferences.version=1 +overviewRuler_migration=migrated_3.1 diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.ide.prefs b/opensuse/core/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.ide.prefs new file mode 100644 index 000000000..119bdeca9 --- /dev/null +++ b/opensuse/core/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.ide.prefs @@ -0,0 +1,6 @@ +#Thu Nov 10 17:56:55 EST 2011 +eclipse.preferences.version=1 +TASKS_FILTERS_MIGRATE=true +tipsAndTricks=true +platformState=1318629149040 +quickStart=true diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.prefs b/opensuse/core/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.prefs new file mode 100644 index 000000000..cc7e8030e --- /dev/null +++ b/opensuse/core/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.prefs @@ -0,0 +1,3 @@ +#Tue Nov 08 22:55:33 EST 2011 +eclipse.preferences.version=1 +showIntro=false diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.workbench.prefs b/opensuse/core/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.workbench.prefs new file mode 100644 index 000000000..3e25db9ff --- /dev/null +++ b/opensuse/core/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.workbench.prefs @@ -0,0 +1,3 @@ +#Tue Nov 08 23:25:01 EST 2011 +PLUGINS_NOT_ACTIVATED_ON_STARTUP=org.eclipse.m2e.discovery; +eclipse.preferences.version=1 diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.equinox.p2.ui/dialog_settings.xml b/opensuse/core/.metadata/.plugins/org.eclipse.equinox.p2.ui/dialog_settings.xml new file mode 100644 index 000000000..5ca0b7769 --- /dev/null +++ b/opensuse/core/.metadata/.plugins/org.eclipse.equinox.p2.ui/dialog_settings.xml @@ -0,0 +1,3 @@ + +
+
diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.equinox.security.ui/dialog_settings.xml b/opensuse/core/.metadata/.plugins/org.eclipse.equinox.security.ui/dialog_settings.xml new file mode 100644 index 000000000..c9aee8488 --- /dev/null +++ b/opensuse/core/.metadata/.plugins/org.eclipse.equinox.security.ui/dialog_settings.xml @@ -0,0 +1,10 @@ + +
+
+ + + + + +
+
diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.jdt.core/invalidArchivesCache b/opensuse/core/.metadata/.plugins/org.eclipse.jdt.core/invalidArchivesCache new file mode 100644 index 000000000..593f4708d Binary files /dev/null and b/opensuse/core/.metadata/.plugins/org.eclipse.jdt.core/invalidArchivesCache differ diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.jdt.core/nonChainingJarsCache b/opensuse/core/.metadata/.plugins/org.eclipse.jdt.core/nonChainingJarsCache new file mode 100644 index 000000000..593f4708d Binary files /dev/null and b/opensuse/core/.metadata/.plugins/org.eclipse.jdt.core/nonChainingJarsCache differ diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.jdt.core/variablesAndContainers.dat b/opensuse/core/.metadata/.plugins/org.eclipse.jdt.core/variablesAndContainers.dat new file mode 100644 index 000000000..3bcf5c05a Binary files /dev/null and b/opensuse/core/.metadata/.plugins/org.eclipse.jdt.core/variablesAndContainers.dat differ diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.jdt.ui/OpenTypeHistory.xml b/opensuse/core/.metadata/.plugins/org.eclipse.jdt.ui/OpenTypeHistory.xml new file mode 100644 index 000000000..a4ee3cbc9 --- /dev/null +++ b/opensuse/core/.metadata/.plugins/org.eclipse.jdt.ui/OpenTypeHistory.xml @@ -0,0 +1,2 @@ + + diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.jdt.ui/QualifiedTypeNameHistory.xml b/opensuse/core/.metadata/.plugins/org.eclipse.jdt.ui/QualifiedTypeNameHistory.xml new file mode 100644 index 000000000..9e390f501 --- /dev/null +++ b/opensuse/core/.metadata/.plugins/org.eclipse.jdt.ui/QualifiedTypeNameHistory.xml @@ -0,0 +1,2 @@ + + diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.jdt.ui/dialog_settings.xml b/opensuse/core/.metadata/.plugins/org.eclipse.jdt.ui/dialog_settings.xml new file mode 100644 index 000000000..304eb7b33 --- /dev/null +++ b/opensuse/core/.metadata/.plugins/org.eclipse.jdt.ui/dialog_settings.xml @@ -0,0 +1,5 @@ + +
+
+
+
diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.ltk.core.refactoring/.refactorings/.workspace/2011/11/46/refactorings.history b/opensuse/core/.metadata/.plugins/org.eclipse.ltk.core.refactoring/.refactorings/.workspace/2011/11/46/refactorings.history new file mode 100644 index 000000000..47aa28376 --- /dev/null +++ b/opensuse/core/.metadata/.plugins/org.eclipse.ltk.core.refactoring/.refactorings/.workspace/2011/11/46/refactorings.history @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.ltk.core.refactoring/.refactorings/.workspace/2011/11/46/refactorings.index b/opensuse/core/.metadata/.plugins/org.eclipse.ltk.core.refactoring/.refactorings/.workspace/2011/11/46/refactorings.index new file mode 100644 index 000000000..349dc3b74 --- /dev/null +++ b/opensuse/core/.metadata/.plugins/org.eclipse.ltk.core.refactoring/.refactorings/.workspace/2011/11/46/refactorings.index @@ -0,0 +1,3 @@ +1320812229683 Delete 2 resources +1320897148756 Delete resource 'tdeaccessibility' +1320897860502 Delete resource 'tdesdk' diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.ltk.ui.refactoring/dialog_settings.xml b/opensuse/core/.metadata/.plugins/org.eclipse.ltk.ui.refactoring/dialog_settings.xml new file mode 100644 index 000000000..27eb4040f --- /dev/null +++ b/opensuse/core/.metadata/.plugins/org.eclipse.ltk.ui.refactoring/dialog_settings.xml @@ -0,0 +1,7 @@ + +
+
+ + +
+
diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.m2e.logback.configuration/0.log b/opensuse/core/.metadata/.plugins/org.eclipse.m2e.logback.configuration/0.log new file mode 100644 index 000000000..c35676ae2 --- /dev/null +++ b/opensuse/core/.metadata/.plugins/org.eclipse.m2e.logback.configuration/0.log @@ -0,0 +1 @@ +2011-11-08 23:25:58,999 [Worker-1] INFO org.mortbay.log - Logging to Logger[org.mortbay.log] via org.mortbay.log.Slf4jLog diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.m2e.logback.configuration/logback.1.0.100.20110804-1717.xml b/opensuse/core/.metadata/.plugins/org.eclipse.m2e.logback.configuration/logback.1.0.100.20110804-1717.xml new file mode 100644 index 000000000..e0de5155a --- /dev/null +++ b/opensuse/core/.metadata/.plugins/org.eclipse.m2e.logback.configuration/logback.1.0.100.20110804-1717.xml @@ -0,0 +1,41 @@ + + + + %date [%thread] %-5level %logger{35} - %msg%n + + + + + + ${org.eclipse.m2e.log.dir}/0.log + + ${org.eclipse.m2e.log.dir}/%i.log + 1 + 10 + + + 100MB + + + %date [%thread] %-5level %logger{35} - %msg%n + + + + + + WARN + + + + + + + + + + + + + + + diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.team.ui/syncParticipants.xml b/opensuse/core/.metadata/.plugins/org.eclipse.team.ui/syncParticipants.xml new file mode 100644 index 000000000..f7e3799ca --- /dev/null +++ b/opensuse/core/.metadata/.plugins/org.eclipse.team.ui/syncParticipants.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.ui.editors/dialog_settings.xml b/opensuse/core/.metadata/.plugins/org.eclipse.ui.editors/dialog_settings.xml new file mode 100644 index 000000000..50f1edb31 --- /dev/null +++ b/opensuse/core/.metadata/.plugins/org.eclipse.ui.editors/dialog_settings.xml @@ -0,0 +1,5 @@ + +
+
+
+
diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.ui.ide/dialog_settings.xml b/opensuse/core/.metadata/.plugins/org.eclipse.ui.ide/dialog_settings.xml new file mode 100644 index 000000000..3bdd3137e --- /dev/null +++ b/opensuse/core/.metadata/.plugins/org.eclipse.ui.ide/dialog_settings.xml @@ -0,0 +1,16 @@ + +
+
+ + + + + +
+
+ + + + +
+
diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.ui.intro/dialog_settings.xml b/opensuse/core/.metadata/.plugins/org.eclipse.ui.intro/dialog_settings.xml new file mode 100644 index 000000000..f118f0213 --- /dev/null +++ b/opensuse/core/.metadata/.plugins/org.eclipse.ui.intro/dialog_settings.xml @@ -0,0 +1,4 @@ + +
+ +
diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.ui.workbench/dialog_settings.xml b/opensuse/core/.metadata/.plugins/org.eclipse.ui.workbench/dialog_settings.xml new file mode 100644 index 000000000..cca42a9cb --- /dev/null +++ b/opensuse/core/.metadata/.plugins/org.eclipse.ui.workbench/dialog_settings.xml @@ -0,0 +1,20 @@ + +
+
+ + + + +
+
+ + + + + + + + + +
+
diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.ui.workbench/workbench.xml b/opensuse/core/.metadata/.plugins/org.eclipse.ui.workbench/workbench.xml new file mode 100644 index 000000000..6dc004b05 --- /dev/null +++ b/opensuse/core/.metadata/.plugins/org.eclipse.ui.workbench/workbench.xml @@ -0,0 +1,172 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.ui.workbench/workingsets.xml b/opensuse/core/.metadata/.plugins/org.eclipse.ui.workbench/workingsets.xml new file mode 100644 index 000000000..24dc7b23d --- /dev/null +++ b/opensuse/core/.metadata/.plugins/org.eclipse.ui.workbench/workingsets.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/opensuse/core/.metadata/version.ini b/opensuse/core/.metadata/version.ini new file mode 100644 index 000000000..c51ff745b --- /dev/null +++ b/opensuse/core/.metadata/version.ini @@ -0,0 +1 @@ +org.eclipse.core.runtime=1 \ No newline at end of file diff --git a/opensuse/core/arts/.project b/opensuse/core/arts/.project new file mode 100644 index 000000000..18fc2a88d --- /dev/null +++ b/opensuse/core/arts/.project @@ -0,0 +1,12 @@ + + + arts + + + + + + + org.eclipse.linuxtools.rpm.core.rpmnature + + diff --git a/opensuse/core/arts/arts-start-on-demand.diff b/opensuse/core/arts/arts-start-on-demand.diff new file mode 100644 index 000000000..032231c16 --- /dev/null +++ b/opensuse/core/arts/arts-start-on-demand.diff @@ -0,0 +1,25 @@ +Index: mcop/objectmanager.cc +=================================================================== +--- mcop/objectmanager.cc.orig ++++ mcop/objectmanager.cc +@@ -28,6 +28,7 @@ + #include "extensionloader.h" + #include "debug.h" + #include ++#include + #include + #include + +@@ -267,6 +268,12 @@ bool ObjectManager::addGlobalReference(O + + string ObjectManager::getGlobalReference(const string& name) + { ++ static bool started_arts = false; ++ if (!started_arts) ++ { ++ system("arts-start"); ++ started_arts = true; ++ } + return Dispatcher::the()->globalComm().get(name); + } + diff --git a/opensuse/core/arts/arts-vorbis-fix.dif b/opensuse/core/arts/arts-vorbis-fix.dif new file mode 100644 index 000000000..70f71496b --- /dev/null +++ b/opensuse/core/arts/arts-vorbis-fix.dif @@ -0,0 +1,27 @@ +Index: flow/gsl/gslloader.c +=================================================================== +--- flow/gsl/gslloader.c.orig ++++ flow/gsl/gslloader.c +@@ -313,7 +313,8 @@ gsl_wave_chunk_create (GslWaveDsc *wav + + /* FIXME: we essentially create a dcache for each wchunk here ;( */ + +- dcache = gsl_data_cache_from_dhandle (dhandle, gsl_get_config ()->wave_chunk_padding * wave_dsc->n_channels); ++ /* dcache = gsl_data_cache_from_dhandle (dhandle, gsl_get_config ()->wave_chunk_padding * wave_dsc->n_channels); */ ++ dcache = gsl_data_cache_from_dhandle (dhandle, 0); /* FIXME: padding is bad for vorbis... */ + gsl_data_handle_unref (dhandle); + if (!dcache) + return NULL; +Index: flow/gsl/gslcommon.c +=================================================================== +--- flow/gsl/gslcommon.c.orig ++++ flow/gsl/gslcommon.c +@@ -1585,7 +1585,7 @@ gsl_init (const GslConfigValue values[], + 1, /* n_processors */ + 2, /* wave_chunk_padding */ + 4, /* wave_chunk_big_pad */ +- 512, /* dcache_block_size */ ++ 8192, /* dcache_block_size */ + 1024 * 1024, /* dcache_cache_memory */ + 69, /* midi_kammer_note */ + 440, /* kammer_freq */ diff --git a/opensuse/core/arts/arts.changes b/opensuse/core/arts/arts.changes new file mode 100644 index 000000000..690c5f92d --- /dev/null +++ b/opensuse/core/arts/arts.changes @@ -0,0 +1,1406 @@ +------------------------------------------------------------------- +Sun Aug 21 02:15:14 UTC 2011 - rxu@lincomlinux.org + +- introduce devel-static subpackage + - libgsl.a is built as a static library + - there is no way to turn it off in build configuration + - it has not been tested whether removing it will trigger bad stuff + +------------------------------------------------------------------- +Fri Aug 12 00:02:16 UTC 2011 - rxu@lincomlinux.org + +- replace provides tde-kdelibs in favor of tdelibs + +------------------------------------------------------------------- +Thu Aug 11 23:51:32 UTC 2011 - rxu@lincomlinux.org + +- upgrade to the trinity version of arts +- remove dependencies for qt3-devel in favor of libtqt4-devel +- require tde-filesystem for build time macros +- replace provides kdelibs3 in favor of tde-kdelibs + +------------------------------------------------------------------- +Sun Feb 21 09:54:20 UTC 2010 - coolo@novell.com + +- apply patch from fedora to support autoconf >= 2.64 + +------------------------------------------------------------------- +Fri Dec 18 16:44:25 CET 2009 - jengelh@medozas.de + +- add baselibs.conf as a source + +------------------------------------------------------------------- +Mon Jun 15 10:04:03 CEST 2009 - coolo@novell.com + +- take all autotools +- rediff to avoid fuzz + +------------------------------------------------------------------- +Wed Dec 10 12:34:56 CET 2008 - olh@suse.de + +- use Obsoletes: -XXbit only for ppc64 to help solver during distupgrade + (bnc#437293) + +------------------------------------------------------------------- +Thu Oct 30 12:34:56 CET 2008 - olh@suse.de + +- obsolete old -XXbit packages (bnc#437293) + +------------------------------------------------------------------- +Wed Aug 20 07:17:59 CEST 2008 - coolo@suse.de + +- update to 1.5.10 + * remove patches sent upstream + +------------------------------------------------------------------- +Thu Apr 10 12:54:45 CEST 2008 - ro@suse.de + +- added baselibs.conf file to build xxbit packages + for multilib support + +------------------------------------------------------------------- +Wed Feb 27 14:49:18 CET 2008 - sbrabec@suse.cz + +- Fixed artsdsp on bi-arch machines (bnc#71776, kde#158501). + +------------------------------------------------------------------- +Wed Feb 13 23:19:53 CET 2008 - dmueller@suse.de + +- update to 1.5.9: + * remove patches that are upstreamed + +------------------------------------------------------------------- +Wed Nov 28 14:12:44 CET 2007 - dmueller@suse.de + +- fix build against glibc 2.7 + +------------------------------------------------------------------- +Mon Oct 22 14:15:09 CEST 2007 - dmueller@suse.de + +- fix build against gcc 4.3 + +------------------------------------------------------------------- +Tue Oct 9 10:49:45 CEST 2007 - stbinner@suse.de + +- update to 1.5.8 release: stop polling NotificationManager for new + notifications, instead handle notifications on demand. This gets + rid of the 50ms timer that was burning energy unnecessarily. + +------------------------------------------------------------------- +Wed Sep 19 17:45:39 CEST 2007 - dmueller@suse.de + +- fix arts starting in multiple instances (#178930) + +------------------------------------------------------------------- +Mon May 14 22:04:44 CEST 2007 - stbinner@suse.de + +- update to 1.5.7 release (just version bump) + +------------------------------------------------------------------- +Wed Apr 18 17:22:10 CEST 2007 - dmueller@suse.de + +- remove some obsolete sections + +------------------------------------------------------------------- +Tue Jan 16 13:27:50 CET 2007 - stbinner@suse.de + +- update to 1.5.6 release (just version bump) + +------------------------------------------------------------------- +Fri Nov 10 11:10:49 CET 2006 - stbinner@suse.de + +- revert to previous version of arts-start-on-demand.diff (#178930) + +------------------------------------------------------------------- +Wed Nov 8 16:45:22 CET 2006 - stbinner@suse.de + +- remove historic "Provides:" (#218798) + +------------------------------------------------------------------- +Mon Nov 6 14:57:26 CET 2006 - ltinkl@suse.cz + +- fix #178930: aRts starts in multiple instances + +------------------------------------------------------------------- +Fri Oct 20 13:24:26 CEST 2006 - dmueller@suse.de + +- fix build with automake 1.10 + +------------------------------------------------------------------- +Tue Oct 3 10:05:54 CEST 2006 - stbinner@suse.de + +- update to 1.5.5 release tarball + +------------------------------------------------------------------- +Sun Oct 1 18:25:06 CEST 2006 - stbinner@suse.de + +- update 1_5_BRANCH.diff (endian fix for alsa) + +------------------------------------------------------------------- +Sun Sep 10 00:30:21 CEST 2006 - dmueller@suse.de + +- use RPM_OPT_FLAGS + +------------------------------------------------------------------- +Thu Sep 7 14:09:58 CEST 2006 - coolo@suse.de + +- resmgr isn't needed on >= 10.1 + +------------------------------------------------------------------- +Thu Aug 31 13:37:23 CEST 2006 - stbinner@suse.de + +- add man page for artswrapper (#187356) + +------------------------------------------------------------------- +Wed Aug 23 10:40:10 CEST 2006 - stbinner@suse.de + +- add 1_5_BRANCH.diff + +------------------------------------------------------------------- +Sun Jul 23 20:42:54 CEST 2006 - coolo@suse.de + +- update to aRts 1.5.4: + * add return value checks for set*uid() functions + +------------------------------------------------------------------- +Tue Jul 4 07:58:04 CEST 2006 - cthiel@suse.de + +- fix build + +------------------------------------------------------------------- +Wed Jun 7 11:58:48 CEST 2006 - dmueller@suse.de + +- check return values of set*uid (#180223, CVE-2006-2916) + +------------------------------------------------------------------- +Wed May 24 09:48:35 CEST 2006 - stbinner@suse.de + +- version number increase to 1.5.3 + +------------------------------------------------------------------- +Sat May 20 15:10:00 CEST 2006 - adrian@suse.de + +- do not require libdrm-devel for < 10.1 + +------------------------------------------------------------------- +Mon Mar 20 13:27:05 CET 2006 - stbinner@suse.de + +- update to 1.5.2 + * Avoid accessing deleted memory. + +------------------------------------------------------------------- +Fri Jan 27 17:57:38 CET 2006 - dmueller@suse.de + +- add patch to avoid .la dependency for lt_dlopen + +------------------------------------------------------------------- +Fri Jan 27 15:53:03 CET 2006 - dmueller@suse.de + +- fix packaging error (#135811) + +------------------------------------------------------------------- +Wed Jan 25 21:32:50 CET 2006 - mls@suse.de + +- converted neededforbuild to BuildRequires + +------------------------------------------------------------------- +Sat Jan 21 14:27:07 CET 2006 - coolo@suse.de + +- update to 1.5.1 + +------------------------------------------------------------------- +Mon Jan 9 15:17:48 CET 2006 - dmueller@suse.de + +- require alsa-devel even on s390(x) + +------------------------------------------------------------------- +Thu Dec 1 21:01:14 CET 2005 - dmueller@suse.de + +- update to branch + +------------------------------------------------------------------- +Mon Nov 21 15:02:03 CET 2005 - stbinner@suse.de + +- update to version 1.5 RC 2 + +------------------------------------------------------------------- +Thu Nov 10 11:31:07 CET 2005 - stbinner@suse.de + +- update to version 1.5 RC 1 + +------------------------------------------------------------------- +Wed Oct 12 10:39:59 CEST 2005 - stbinner@suse.de + +- update to version 1.4.92 (1.5 Beta 2) + +------------------------------------------------------------------- +Fri Sep 16 15:32:06 CEST 2005 - stbinner@suse.de + +- update to version 1.4.91 (1.5 Beta) + +------------------------------------------------------------------- +Mon Aug 29 19:35:51 CEST 2005 - dmueller@suse.de + +- fix arts when using $TMPDIR (#113564) + +------------------------------------------------------------------- +Wed Aug 17 18:06:28 CEST 2005 - coolo@suse.de + +- let arts start it self +- pleasing the libtool check + +------------------------------------------------------------------- +Thu Jul 21 09:26:22 CEST 2005 - coolo@suse.de + +- update to version 1.4.2 + +------------------------------------------------------------------- +Fri Jul 8 01:40:07 CEST 2005 - dmueller@suse.de + +- fix build + +------------------------------------------------------------------- +Tue May 24 10:40:25 CEST 2005 - adrian@suse.de + +- update to version 1.4.1 + +------------------------------------------------------------------- +Tue Apr 19 14:47:54 CEST 2005 - coolo@suse.de + +- don't use debug + +------------------------------------------------------------------- +Mon Apr 18 14:57:37 CEST 2005 - coolo@suse.de + +- update admin for gcc4 + +------------------------------------------------------------------- +Thu Apr 14 17:17:06 CEST 2005 - sbrabec@suse.cz + +- Added audiofile-devel to neededforbuild. + +------------------------------------------------------------------- +Wed Mar 16 09:31:03 CET 2005 - adrian@suse.de + +- clean up /tmp dir after ending (#71976, by Waldo) + +------------------------------------------------------------------- +Wed Mar 9 17:02:21 CET 2005 - coolo@suse.de + +- adding patch by Waldo to avoid problems on resume from RAM + +------------------------------------------------------------------- +Sat Mar 5 09:24:21 CET 2005 - adrian@suse.de + +- update to 3.4.0 final + +------------------------------------------------------------------- +Sat Feb 26 09:11:49 CET 2005 - adrian@suse.de + +- update to 3.4.0 RC1 + +------------------------------------------------------------------- +Fri Feb 25 15:48:01 CET 2005 - adrian@suse.de + +- add resmgr support for oss output + +------------------------------------------------------------------- +Thu Feb 24 11:52:06 CET 2005 - adrian@suse.de + +- update to version 3.4.0 RC1, first try +- remove unneeded unsermake from nfb + +------------------------------------------------------------------- +Mon Feb 21 11:25:58 CET 2005 - adrian@suse.de + +- update to current snapshot + +------------------------------------------------------------------- +Mon Feb 14 14:40:59 CET 2005 - adrian@suse.de + +- update from CVS + +------------------------------------------------------------------- +Fri Feb 11 10:28:46 CET 2005 - adrian@suse.de + +- update from CVS + +------------------------------------------------------------------- +Mon Feb 7 11:28:05 CET 2005 - adrian@suse.de + +- update to beta 2 + +------------------------------------------------------------------- +Tue Feb 1 12:47:15 CET 2005 - adrian@suse.de + +- default to oss again due to problems with alsa on 64bit + +------------------------------------------------------------------- +Fri Jan 28 16:22:53 CET 2005 - adrian@suse.de + +- update to current snapshot + +------------------------------------------------------------------- +Thu Jan 20 16:53:09 CET 2005 - adrian@suse.de + +- update to current snapshot + +------------------------------------------------------------------- +Wed Jan 19 16:51:47 CET 2005 - coolo@suse.de + +- fixing requirements of the installed .la files + +------------------------------------------------------------------- +Sun Jan 9 10:01:13 CET 2005 - adrian@suse.de + +- final beta1 + +------------------------------------------------------------------- +Tue Jan 4 10:17:00 CET 2005 - coolo@suse.de + +- update to beta1 snapshot + +------------------------------------------------------------------- +Tue Dec 14 09:20:25 CET 2004 - coolo@suse.de + +- next update to HEAD to fix the next compilation problem + +------------------------------------------------------------------- +Fri Dec 10 09:02:12 CET 2004 - adrian@suse.de + +- update to current HEAD to fix compilation problems in other + applications + +------------------------------------------------------------------- +Wed Dec 8 13:25:07 CET 2004 - adrian@suse.de + +- update to official 3.4 alpha 1 + +------------------------------------------------------------------- +Mon Dec 6 15:17:28 CET 2004 - adrian@suse.de + +- update to KDE head snapshot + +------------------------------------------------------------------- +Mon Nov 29 17:32:03 CET 2004 - adrian@suse.de + +- update to version 1.3.2 + +------------------------------------------------------------------- +Tue Oct 12 10:32:40 CEST 2004 - adrian@suse.de + +- update to version 1.3.1 + +------------------------------------------------------------------- +Thu Sep 30 18:15:44 CEST 2004 - adrian@suse.de + +- remove Requires: mad-devel from arts-devel + +------------------------------------------------------------------- +Sun Aug 29 16:51:21 CEST 2004 - adrian@suse.de + +- remove mad support, we use akode from kdemultimedia instead + +------------------------------------------------------------------- +Mon Aug 16 14:16:14 CEST 2004 - adrian@suse.de + +- update to version 1.3.0 + +------------------------------------------------------------------- +Tue Aug 10 08:57:57 CEST 2004 - adrian@suse.de + +- update to version 1.3.0 RC2 + +------------------------------------------------------------------- +Fri Aug 6 10:00:59 CEST 2004 - adrian@suse.de + +- update to version 1.3.0 RC1 + +------------------------------------------------------------------- +Mon Aug 2 09:24:08 CEST 2004 - adrian@suse.de + +- accept automake 1.9 + +------------------------------------------------------------------- +Mon Jul 19 09:59:35 CEST 2004 - adrian@suse.de + +- update to version 3.2.92 (KDE 3.3 beta 2) + +------------------------------------------------------------------- +Sat Jun 26 11:07:58 CEST 2004 - adrian@suse.de + +- update to version 3.2.91 (KDE 3.3 beta 1) + * enable support for jack + +------------------------------------------------------------------- +Mon May 31 18:26:24 CEST 2004 - adrian@suse.de + +- update to version 1.2.3 (for KDE 3.2.3 release) + +------------------------------------------------------------------- +Mon Apr 19 16:36:01 CEST 2004 - coolo@suse.de + +- adding requirements so the .la files point to existant files + +------------------------------------------------------------------- +Wed Apr 14 10:09:30 CEST 2004 - adrian@suse.de + +- update to version 1.2.2 + +------------------------------------------------------------------- +Sat Apr 3 11:57:55 CEST 2004 - ro@suse.de + +- remove wrong hunk from alsa-default.diff + +------------------------------------------------------------------- +Thu Apr 1 16:34:32 CEST 2004 - adrian@suse.de + +- official enabled alsa output again (patch got anyway applied before) + +------------------------------------------------------------------- +Thu Apr 1 11:55:09 CEST 2004 - tiwai@suse.de + +- fixed the high CPU usage of ogg/vorbis and mp3 (bug #37855). + increasing cache size and disabled padding. +- suppress debug messages. + +------------------------------------------------------------------- +Tue Mar 23 12:09:33 CET 2004 - adrian@suse.de + +- apply 64bit aliasing fix from Matz (#36653) + +------------------------------------------------------------------- +Mon Mar 1 10:31:35 CET 2004 - coolo@suse.de + +- update to version 1.2.1 + +------------------------------------------------------------------- +Sun Feb 29 15:37:35 CET 2004 - adrian@suse.de + +- use oss output as default again + (alsa output is known to be broken atm. b.k.o #30651) + +------------------------------------------------------------------- +Tue Feb 24 18:08:18 CET 2004 - adrian@suse.de + +- suppress informational messages + +------------------------------------------------------------------- +Mon Jan 26 23:25:05 CET 2004 - adrian@suse.de + +- update to version 1.2.0 ( KDE 3.2 final ) + +------------------------------------------------------------------- +Sun Jan 18 21:43:52 CET 2004 - adrian@suse.de + +- update to version 1.1.95 ( KDE 3.2 RC1 ) + +------------------------------------------------------------------- +Tue Jan 13 13:31:54 CET 2004 - adrian@suse.de + +- update to snapshot 2004011309 + +------------------------------------------------------------------- +Tue Dec 30 15:08:10 CET 2003 - adrian@suse.de + +- update to snapshot 2003123011 + +------------------------------------------------------------------- +Mon Dec 15 14:19:14 CET 2003 - adrian@suse.de + +- update to snapshot 2003121511 +- accept automake 1.8 + +------------------------------------------------------------------- +Mon Dec 1 22:00:31 CET 2003 - adrian@suse.de + +- update to 1.1.94 ( KDE 3.2 beta 2 ) + +------------------------------------------------------------------- +Thu Nov 13 23:14:30 CET 2003 - adrian@suse.de + +- update to new snapshot from 2003102409 + +------------------------------------------------------------------- +Wed Oct 29 09:58:44 CET 2003 - adrian@suse.de + +- update to 3.2 beta 1 + +------------------------------------------------------------------- +Tue Oct 21 09:34:51 CEST 2003 - adrian@suse.de + +- update to snapshot 2003102008 + +------------------------------------------------------------------- +Sun Oct 5 14:31:09 CEST 2003 - adrian@suse.de + +- update to snapshot 2003100510 + +------------------------------------------------------------------- +Tue Sep 30 10:15:13 CEST 2003 - adrian@suse.de + +- update to 1.1.92_2003093009 + * last tar ball was broken + +------------------------------------------------------------------- +Mon Sep 29 15:59:09 CEST 2003 - adrian@suse.de + +- update to version 1.1.92 (KDE 3.2 alpha 2) + +------------------------------------------------------------------- +Mon Sep 8 23:32:38 CEST 2003 - adrian@suse.de + +- update to version 1.1.4 + +------------------------------------------------------------------- +Tue Sep 2 14:45:17 CEST 2003 - coolo@suse.de + +- fixing artsdsp (most likely cause for #29358) + +------------------------------------------------------------------- +Wed Aug 20 12:59:12 CEST 2003 - adrian@suse.de + +- fix again for x86_64 (based on Takashis patch) +- prefer alsa over oss, if avaible + +------------------------------------------------------------------- +Tue Jul 29 10:32:22 CEST 2003 - adrian@suse.de + +- fix build on lib64 + +------------------------------------------------------------------- +Tue Jul 29 09:17:04 CEST 2003 - adrian@suse.de + +- add support for gmcop again +- fix build for < 8.0 + +------------------------------------------------------------------- +Tue Jul 22 08:33:14 CEST 2003 - coolo@suse.de + +- don't strip + +------------------------------------------------------------------- +Thu Jul 17 13:04:12 CEST 2003 - adrian@suse.de + +- remove temporary hacks again + +------------------------------------------------------------------- +Tue Jul 15 21:17:35 CEST 2003 - adrian@suse.de + +- update to version 1.1.3 (KDE 3.1.3) +- add some temporary hacks for > 8.2 (qt 3.2) + +------------------------------------------------------------------- +Thu Jun 12 08:09:35 CEST 2003 - coolo@suse.de + +- package directories +- run ldconfig like mad + +------------------------------------------------------------------- +Wed May 7 08:26:17 CEST 2003 - adrian@suse.de + +- update to version 1.1.2 (for KDE 3.1.2) + +------------------------------------------------------------------- +Thu Apr 10 10:18:42 CEST 2003 - adrian@suse.de + +- fix build for 8.0 + +------------------------------------------------------------------- +Tue Apr 8 01:38:47 CEST 2003 - ro@suse.de + +- fix head calling syntax in admin tarball + +------------------------------------------------------------------- +Tue Mar 11 12:52:30 CET 2003 - adrian@suse.de + +- update to version 1.1.1 second try + * minor memory/crash fix +- sync admin tar ball with kdelibs + +------------------------------------------------------------------- +Tue Mar 4 18:29:26 CET 2003 - adrian@suse.de + +- add missing Provides kdelibs-artsd + +------------------------------------------------------------------- +Mon Mar 3 16:32:46 CET 2003 - coolo@suse.de + +- fixing configure check for non-32bit architectures + +------------------------------------------------------------------- +Mon Mar 3 01:27:19 CET 2003 - adrian@suse.de + +- update to version 1.1.1 + * all changes were already in 1_1_BRANCH patch + +------------------------------------------------------------------- +Mon Feb 24 18:37:21 CET 2003 - adrian@suse.de + +- remove -mminimal-toc + +------------------------------------------------------------------- +Fri Jan 17 13:23:03 CET 2003 - adrian@suse.de + +- use official 1.1 tar ball, which will be released with KDE 3.1 + +------------------------------------------------------------------- +Mon Nov 25 12:02:23 CET 2002 - adrian@suse.de + +- update to RC5 + +------------------------------------------------------------------- +Sat Nov 23 16:18:35 CET 2002 - adrian@suse.de + +- fix build for < SuSE 8.1 + +------------------------------------------------------------------- +Tue Nov 19 17:36:36 CET 2002 - adrian@suse.de + +- update to version 1.1.0-final +- fix build on x86_64 + +------------------------------------------------------------------- +Sun Nov 3 13:16:21 CET 2002 - adrian@suse.de + +- update to version 1.1.0.20021030 ~= RC1 + +------------------------------------------------------------------- +Mon Oct 7 11:33:49 CEST 2002 - adrian@suse.de + +- update to version 3.0.4 + +------------------------------------------------------------------- +Thu Aug 8 16:09:27 CEST 2002 - adrian@suse.de + +- fix configure parameters + +------------------------------------------------------------------- +Wed Aug 7 23:22:36 CEST 2002 - adrian@suse.de + +- update to new 1.0.3 tar ball which comes with KDE 3.0.3 +- update admin tar ball + +------------------------------------------------------------------- +Wed Jul 31 17:54:07 CEST 2002 - tiwai@suse.de + +- fixed weird sound output on x86-64 (bug #17295). + +------------------------------------------------------------------- +Tue Jul 23 14:46:06 CEST 2002 - adrian@suse.de + +- add support for gnome/glib 2.0 in -gmcop subpackage +- add support for vorbis + +------------------------------------------------------------------- +Wed Jul 17 12:08:11 CEST 2002 - meissner@suse.de + +- compile with -mminimal-toc on ppc64 + +------------------------------------------------------------------- +Mon Jul 8 08:55:43 CEST 2002 - adrian@suse.de + +- fix security problem with arts + * update to 1.0.3: + using setuid instead of seteuid in artswrapper, so a exploited + artsd can not get root again. + +------------------------------------------------------------------- +Thu Jun 27 12:06:10 CEST 2002 - adrian@suse.de + +- move mcopidl to -devel package +- use %run_ldconfig + +------------------------------------------------------------------- +Mon Jun 24 20:53:46 CEST 2002 - adrian@suse.de + +- update to version 1.0.2 + +------------------------------------------------------------------- +Wed Jun 19 17:56:07 CEST 2002 - uli@suse.de + +- disable final on ARM + +------------------------------------------------------------------- +Fri Jun 7 13:53:45 CEST 2002 - adrian@suse.de + +- use same admin tar ball as in kdelibs3 +- using fixed libtool for -m32/-m64 (fixed by matz) + +------------------------------------------------------------------- +Thu May 9 21:57:53 CEST 2002 - adrian@suse.de + +- update to version 1.0.1 (part of KDE 3.0.1 bug-fix release) + +------------------------------------------------------------------- +Thu May 2 16:38:25 CEST 2002 - meissner@suse.de + +- enhanced varargs handling to be more generic (using __va_copy) + +------------------------------------------------------------------- +Tue Apr 2 16:37:00 CEST 2002 - ro@suse.de + +- work around automake problem + +------------------------------------------------------------------- +Mon Mar 25 23:46:29 CET 2002 - adrian@suse.de + +- use second try of version 1.0.0 + +------------------------------------------------------------------- +Mon Mar 25 10:03:24 CET 2002 - adrian@suse.de + +- update to version 1.0.0 (KDE 3.0 final) + +------------------------------------------------------------------- +Thu Mar 21 01:17:11 CET 2002 - adrian@suse.de + +- update to version 0.9.9 (for KDE 3.0rc3) + +------------------------------------------------------------------- +Sun Mar 10 17:03:12 CET 2002 - adrian@suse.de + +- update to version 0.9.8 (for KDE 3.0rc2) + +------------------------------------------------------------------- +Mon Mar 4 17:31:00 CET 2002 - adrian@suse.de + +- update to snapshot 0.7.1.2002030321 + +------------------------------------------------------------------- +Mon Feb 25 17:38:31 CET 2002 - adrian@suse.de + +- update to snapshot 0.7.1.2002022512 + +------------------------------------------------------------------- +Mon Feb 18 20:46:28 CET 2002 - adrian@suse.de + +- update to snapshot 0.7.1.2002021810 + +------------------------------------------------------------------- +Thu Feb 14 23:22:42 CET 2002 - adrian@suse.de + +- update to snapshot 0.7.1.2002021421 + +------------------------------------------------------------------- +Wed Feb 13 23:52:30 CET 2002 - adrian@suse.de + +- split arts from kdelibs3 package +- using a 0.7.1 snapshot + +------------------------------------------------------------------- +Mon Feb 11 15:07:20 CET 2002 - adrian@suse.de + +- update to snapshot 2.92.2002021111 + +------------------------------------------------------------------- +Mon Feb 4 23:51:35 CET 2002 - adrian@suse.de + +- update to 2.92 (KDE 3.0 beta 2) +- create common_compile_flags file + +------------------------------------------------------------------- +Fri Feb 1 00:26:05 CET 2002 - ro@suse.de + +- changed neededforbuild to + +------------------------------------------------------------------- +Mon Jan 28 14:49:00 CET 2002 - adrian@suse.de + +- update to snapshot from 2.91.2002012811 + +------------------------------------------------------------------- +Wed Jan 23 01:50:51 CET 2002 - adrian@suse.de + +- add missing header files + +------------------------------------------------------------------- +Wed Jan 23 00:31:21 CET 2002 - adrian@suse.de + +- update to snapshot 2.91.2002012221 + +------------------------------------------------------------------- +Tue Jan 15 18:24:51 CET 2002 - adrian@suse.de + +- update to snapshot 2.91.2002011511 + +------------------------------------------------------------------- +Sat Jan 5 18:28:06 CET 2002 - adrian@suse.de + +- update to recent/todays snapshot +- disable rpath for SuSE > 7.3 + (/opt/kde3/lib is in ld.so.conf) +- add Requires: line for at least Qt 3.0.1 + +------------------------------------------------------------------- +Mon Dec 17 15:58:49 CET 2001 - adrian@suse.de + +- fix compile on s390 +- add fix for khtml seg fault +- do not build documentation for <7.3 distributions until kdoc + is fixed + +------------------------------------------------------------------- +Wed Dec 12 17:02:34 CET 2001 - adrian@suse.de + +- update to KDE 3.0 Beta 1 + +------------------------------------------------------------------- +Tue Dec 4 20:13:20 CET 2001 - adrian@suse.de + +- use current CVS snapshot + +------------------------------------------------------------------- +Fri Nov 2 12:30:45 CET 2001 - adrian@suse.de + +- using cvs snapshot from 01 Nov 2001 + +------------------------------------------------------------------- +Sat Oct 20 17:57:21 CEST 2001 - adrian@suse.de + +- using newer cvs-snapshot + (compiles again with qt 3 final) + +------------------------------------------------------------------- +Tue Oct 9 11:55:41 CEST 2001 - adrian@suse.de + +- branch to first kdelibs 3 (alpha 1) + +------------------------------------------------------------------- +Mon Sep 24 01:40:05 CEST 2001 - adrian@suse.de + +- add security fix for peer-ssl from Dirk +- add fix to make it possible to allow JS from local pages + +------------------------------------------------------------------- +Fri Sep 21 22:51:53 CEST 2001 - adrian@suse.de + +- add fix for kbuildsycoca --incremental from Waldo + (changed files (due to updated packages or a SuSEconfig run for + example) do not lead anymore to an incorrect ksycoca database. + +------------------------------------------------------------------- +Tue Sep 18 08:55:26 CEST 2001 - adrian@suse.de + +- add symbolic link to /opt/kde2/doc/HTML/en/kdeapi +- #neededforbuild cups -> cups-libs + +------------------------------------------------------------------- +Sat Sep 15 19:13:06 CEST 2001 - adrian@suse.de + +- add klineedit fix +- add warning that kdDebug function is disabled (except for ppc) +- fix kdelibs-2.2.1.dif (do not apply patch for ppc-only global) + +------------------------------------------------------------------- +Thu Sep 13 09:36:06 CEST 2001 - adrian@suse.de + +- add fix for kjs (octal parsing) +- add fix icondialog (custom icon directorys) +- fix ia64 patch + +------------------------------------------------------------------- +Tue Sep 11 10:54:21 CEST 2001 - adrian@suse.de + +- add security fixes for kssl (do not save keys on disk) +- add Qt API to the API index page + +------------------------------------------------------------------- +Mon Sep 10 14:41:23 CEST 2001 - adrian@suse.de + +- update to to second try of kdelibs 2.2.1 tar ball + * JavaScript fixes +- fix ia64 workarounds to build on older distris + +------------------------------------------------------------------- +Sun Sep 9 17:57:01 CEST 2001 - schwab@suse.de + +- Fix specfile for ia64 workarounds. + +------------------------------------------------------------------- +Sat Sep 8 20:40:27 CEST 2001 - adrian@suse.de + +- updating to final 2.2.1 tar ball + +------------------------------------------------------------------- +Sun Sep 2 09:59:21 CEST 2001 - adrian@suse.de + +- update to KDE_2_2_BRANCH from 02.09.2001 + * compile fixes + * KFile crash fix + * KDockWidget crash fix, caused crash in quanta + * fix login with chars in password >127 + * load charsets file on demand + * kxmlgui fixed to read really the complete xml file. +- drop -cups package, the cups libs are now splitted from the cups + package. +- add kmimetype hack to get a fallback application for device icons +- make KDE quiet by default (kdDebug default value is 4 now) + +------------------------------------------------------------------- +Tue Aug 28 15:53:23 CEST 2001 - adrian@suse.de + +- update to KDE_2_2_BRANCH from 28.08.2001 + * fix kspell for iso 13 languages + * fix $PATH for kdesu + * check the preview action in setPreviewWidget() + * check for aborted save + * official patch for kbuildsycoca + * kfile fixes + * crash fixes in userstylesheets + * large file system support fix + * crash fix in kbugreport +- removed patches for kbuildsycoca and large file support + +------------------------------------------------------------------- +Sat Aug 25 09:49:21 CEST 2001 - adrian@suse.de + +- update to KDE_2_2_BRANCH from 25.08.2001 + * khtml supports + * kded updates + * translation updates +- kbuildsycoca speed optimisation + (original patch from Lubos Lunak, reworked to be BC) + +------------------------------------------------------------------- +Tue Aug 21 12:25:49 CEST 2001 - adrian@suse.de + +- using KDE_2_2_BRANCH from 21.08.2001 + * html parser fixes + * artsd fixes + * ... +- disable FAM by default, it can be enabled with + export USE_FAM=1 +- disable and obsolete -i686 package, until the number of problems + are solved + +------------------------------------------------------------------- +Mon Aug 6 23:55:17 CEST 2001 - adrian@suse.de + +- add assert into khtml/misc/loader.cpp as recomended by Dirk +- switch on SSE support in i386 architecture + (arts has a runtime checking) +- clean up file list +- ia64 workarounds + +------------------------------------------------------------------- +Mon Aug 6 10:59:49 CEST 2001 - adrian@suse.de + +- update to final 2.2 + +------------------------------------------------------------------- +Wed Aug 1 15:57:30 CEST 2001 - adrian@suse.de + +- update to 2.2rc1 + +------------------------------------------------------------------- +Fri Jul 6 11:53:42 CEST 2001 - adrian@suse.de + +- generate API documentation + (no need to install kdevelop for api docu anymore) + +------------------------------------------------------------------- +Fri Jun 29 15:39:12 CEST 2001 - adrian@suse.de + +- 2.2beta1 + +------------------------------------------------------------------- +Mon May 28 10:39:18 CEST 2001 - adrian@suse.de + +- 2.2alpha2 + +------------------------------------------------------------------- +Mon Apr 16 22:02:33 CEST 2001 - adrian@suse.de + +- 2.2alpha1 + +------------------------------------------------------------------- +Fri Apr 13 12:54:18 CEST 2001 - adrian@suse.de + +- add currency symbol to KFontDialog preview for testing purposes + +------------------------------------------------------------------- +Tue Apr 10 20:49:07 CEST 2001 - adrian@suse.de + +- revert also kdeinit changes (compile fix) +- add fixes for javascript from CVS +- add fixes for font name mapping from CVS +- add kdeinit_shutdown patch from Waldo + +------------------------------------------------------------------- +Tue Apr 10 01:01:16 MEST 2001 - adrian@suse.de + +- minor fix, but hopefully fix linker problems on all P-II systems + +------------------------------------------------------------------- +Mon Apr 9 11:24:07 CEST 2001 - adrian@suse.de + +- disable alsa for 7.0-ppc + +------------------------------------------------------------------- +Fri Apr 6 11:01:59 CEST 2001 - adrian@suse.de + +- drop the -nostdlib flag during linking. this causes problems + (since not all need libs are used) on some architectures +- -O2 for axp + +------------------------------------------------------------------- +Thu Apr 5 08:56:33 CEST 2001 - adrian@suse.de + +- update to 2_1_BRANCH. + this fixes the proxy server authentication problem + +------------------------------------------------------------------- +Wed Mar 28 18:28:29 CEST 2001 - adrian@suse.de + +- disable ssl support for 7.0-ppc + (problems with the compiler and linker, which can not be fixed + without to loss the BC) + +------------------------------------------------------------------- +Tue Mar 27 12:08:53 CEST 2001 - ro@suse.de + +- changed neededforbuild to + +------------------------------------------------------------------- +Tue Mar 20 21:58:31 CET 2001 - adrian@suse.de + +- enable -O2 for ppc + using inline gcc bug workaround for ia64 + +------------------------------------------------------------------- +Tue Mar 20 18:53:42 CET 2001 - adrian@suse.de + +- update to 2.1.1 (official tar ball) + +------------------------------------------------------------------- +Mon Mar 19 22:03:49 CET 2001 - adrian@suse.de + +- update to current 2_1_BRANCH + we have kde-config as executable binary back + (lots of configure scripts test this) + +------------------------------------------------------------------- +Mon Mar 19 15:39:26 CET 2001 - adrian@suse.de + +- add cyrus-sassl to #neededforbuild + +------------------------------------------------------------------- +Sat Mar 17 21:38:50 CET 2001 - adrian@suse.de + +- added missing packages in #neededforbuild + +------------------------------------------------------------------- +Sat Mar 17 13:32:29 CET 2001 - adrian@suse.de + +- fix CATALOG for distributions <7.2 + update to current 2_1_0_TAG + +------------------------------------------------------------------- +Tue Mar 13 14:29:16 CET 2001 - ro@suse.de + +- added CATALOG for docbook_3 + +------------------------------------------------------------------- +Tue Mar 13 01:12:30 CET 2001 - ro@suse.de + +- changed neededforbuild to + +------------------------------------------------------------------- +Thu Feb 22 19:22:17 CET 2001 - adrian@suse.de + +- the final final 2.1.0 tar ball ... + +------------------------------------------------------------------- +Wed Feb 21 22:42:47 CET 2001 - adrian@suse.de + +- use the right KDE BRANCH (not my fault ;-) + +------------------------------------------------------------------- +Wed Feb 21 17:16:51 CET 2001 - adrian@suse.de + +- update to final 2.1.0 + +------------------------------------------------------------------- +Wed Feb 14 17:04:08 CET 2001 - adrian@suse.de + +- update to 2.1 post beta 2 + +------------------------------------------------------------------- +Mon Jan 22 14:44:41 CET 2001 - stepan@suse.de + +- alpha axp compile fixes for gcc 2.95.2 + +------------------------------------------------------------------- +Tue Jan 16 12:05:26 CET 2001 - adrian@suse.de + +- add a check of return value in kprocess. + Hopefully no crashes anymore. + +------------------------------------------------------------------- +Mon Jan 15 22:13:16 CET 2001 - adrian@suse.de + +- disable --enable-final until the glibc/compiler problem in + kprocess is fixed + +------------------------------------------------------------------- +Mon Jan 15 14:01:38 CET 2001 - adrian@suse.de + +- fix index.desktop for distris <7.1 + +------------------------------------------------------------------- +Sat Jan 13 18:49:40 CET 2001 - adrian@suse.de + +- fix local support in kicker. native language again in menus + this fix does not work for chinese people + fix index.desktop in highcolor, 22x22 actions icons can be loaded + again + +------------------------------------------------------------------- +Fri Jan 12 00:02:33 CET 2001 - adrian@suse.de + +- create some links to see the konqueror gear again + fix hicolor index file + +------------------------------------------------------------------- +Tue Jan 9 22:07:19 CET 2001 - adrian@suse.de + +- added security fix for kdesu from Waldo + +------------------------------------------------------------------- +Mon Jan 8 15:43:09 CET 2001 - adrian@suse.de + +- fix SuSE icon description + +------------------------------------------------------------------- +Sun Jan 7 15:56:58 CET 2001 - adrian@suse.de + +- use additional pathes, to not conflict with older pathes + +------------------------------------------------------------------- +Sun Jan 7 14:24:01 CET 2001 - adrian@suse.de + +- new icon handling. much more clean now and the + dependencie to icons is not needed anymore + +------------------------------------------------------------------- +Sat Jan 6 17:15:51 CET 2001 - adrian@suse.de + +- fix locale support. + LANG=de_DE or LANG=de_DE.utf-8 is working now. + +------------------------------------------------------------------- +Tue Jan 2 21:51:19 CET 2001 - adrian@suse.de + +- added a fix for font handling, if antialising is used + (Thanks Kurt) + +------------------------------------------------------------------- +Mon Jan 1 22:16:48 CET 2001 - adrian@suse.de + +- remove charset for german. this confuses the font handling + added fix for stalled, but broken connections; thanks waldo + +------------------------------------------------------------------- +Sat Dec 30 21:22:21 CET 2000 - adrian@suse.de + +- extend rpm mimelnk for *.spm files + disabled threading + +------------------------------------------------------------------- +Wed Dec 27 18:33:15 CET 2000 - adrian@suse.de + +- drop message in kdeinit, which produce a lot of invalid bugzilla entrys + +------------------------------------------------------------------- +Wed Dec 20 10:38:25 CET 2000 - adrian@suse.de + +- added openssl-devel for #neededforbuild + +------------------------------------------------------------------- +Sun Dec 17 15:55:15 CET 2000 - adrian@suse.de + +- moved icon links back to kdelibs :-( + +------------------------------------------------------------------- +Sun Dec 17 12:54:19 CET 2000 - adrian@suse.de + +- moved icon links from this package to kdebase + +------------------------------------------------------------------- +Fri Dec 15 14:35:38 CET 2000 - adrian@suse.de + +- brown paper bag fix ... I spend Rudi a beer ... + +------------------------------------------------------------------- +Fri Dec 15 12:02:02 CET 2000 - adrian@suse.de + +- added icon packages to #neededforbuild + +------------------------------------------------------------------- +Thu Dec 14 12:38:23 CET 2000 - adrian@suse.de + +- fixed specfile + +------------------------------------------------------------------- +Wed Dec 13 19:22:39 CET 2000 - adrian@suse.de + +- fixed icon links + +------------------------------------------------------------------- +Wed Dec 13 16:52:23 CET 2000 - adrian@suse.de + +- update to current 2_0_BRANCH + +------------------------------------------------------------------- +Wed Nov 29 14:25:31 CET 2000 - adrian@suse.de + +- update to 2.0.1 + +------------------------------------------------------------------- +Wed Nov 22 02:01:26 CET 2000 - ro@suse.de + +- remove penguin.png (in kdebase) + +------------------------------------------------------------------- +Tue Nov 21 15:07:15 CET 2000 - adrian@suse.de + +- fixed /etc/kderc + +------------------------------------------------------------------- +Tue Nov 21 00:08:08 CET 2000 - adrian@suse.de + +- added icon support for non kde icons + added /etc/kderc + ~/Desktop -> ~/KDesktop + +------------------------------------------------------------------- +Thu Nov 16 15:46:49 CET 2000 - adrian@suse.de + +- update to newer snapshot from KDE_2_0_BRANCH + fixed sgml catalog file for our sgml enviroment + +------------------------------------------------------------------- +Fri Nov 3 08:45:45 CET 2000 - adrian@suse.de + +- fixed needed for build + +------------------------------------------------------------------- +Thu Nov 2 20:35:30 CET 2000 - adrian@suse.de + +- fixed file list + +------------------------------------------------------------------- +Tue Oct 17 04:52:05 CEST 2000 - adrian@suse.de + +- update to 2.0.0 +- changed default for ~/.kde to ~/.kde2 +- dropped klibs2i and klibs2cr again +- splitted package in + * kdelibs + * kdelibs-devel + +------------------------------------------------------------------- +Wed Sep 20 11:29:35 CEST 2000 - adrian@suse.de + +- the last fix :-( + +------------------------------------------------------------------- +Sun Sep 17 00:27:08 CEST 2000 - adrian@suse.de + +- splited klibs2 into klibs2, klibs2i (international version + without crypt support) and klibs2cr (crypt version) + +------------------------------------------------------------------- +Sat Sep 16 15:17:06 CEST 2000 - adrian@suse.de + +- removed ssl/ssh support + added big endian fix in KPixmap + +------------------------------------------------------------------- +Tue Sep 12 11:49:35 MEST 2000 - adrian@suse.de + +- changed to -O0 for ppc and alpha + +------------------------------------------------------------------- +Tue Sep 12 08:56:11 CEST 2000 - adrian@suse.de + +- update to RC 1 + +------------------------------------------------------------------- +Mon Aug 21 14:04:31 CEST 2000 - adrian@suse.de + +- update to beta 4 + +------------------------------------------------------------------- +Mon Jul 24 17:46:04 CEST 2000 - adrian@suse.de + +- update to second version of beta 3 + +------------------------------------------------------------------- +Fri Jul 21 22:39:53 CEST 2000 - adrian@suse.de + +- update to beta 3 + +------------------------------------------------------------------- +Mon Jul 17 19:24:01 CEST 2000 - adrian@suse.de + +- update to snapshot from 17.07.2000 + +------------------------------------------------------------------- +Thu Jul 6 19:48:47 CEST 2000 - adrian@suse.de + +- Spec file created from kdelibs-1.91.20000706.tar.gz by autospec + + +------------------------------------------------------------------- +Fri Jun 9 17:15:52 CEST 2000 - adrian@suse.de + +- correct neededforbuild and updated khtml + +------------------------------------------------------------------- +Fri Jun 9 02:35:16 CEST 2000 - adrian@suse.de + +- update to 1.91; beta 2 + +------------------------------------------------------------------- +Tue Jun 6 01:29:47 CEST 2000 - adrian@suse.de + +- snapshot from 06.06.2000 + +------------------------------------------------------------------- +Sun May 28 09:22:23 CEST 2000 - adrian@suse.de + +- snapshot from 28.05.2000 + new type of spec file + +------------------------------------------------------------------- +Fri May 12 13:29:41 CEST 2000 - adrian@suse.de + +- update to KDE 1.90 + +------------------------------------------------------------------- +Thu Apr 27 17:45:45 CEST 2000 - adrian@suse.de + +- snapshot from 25.04.2000 + +------------------------------------------------------------------- +Thu Apr 20 14:27:28 CEST 2000 - adrian@suse.de + +- fixed file list + +------------------------------------------------------------------- +Wed Apr 19 17:17:42 CEST 2000 - adrian@suse.de + +- snapshot from 17.04.2000 + +------------------------------------------------------------------- +Thu Apr 6 19:21:15 CEST 2000 - adrian@suse.de + +- snapshot from 06.04.2000 + +------------------------------------------------------------------- +Thu Mar 30 18:44:11 CEST 2000 - adrian@suse.de + +- first KDE libs 2 package. PRE 1.90 Version + diff --git a/opensuse/core/arts/arts.spec b/opensuse/core/arts/arts.spec new file mode 100644 index 000000000..b7fd43e5f --- /dev/null +++ b/opensuse/core/arts/arts.spec @@ -0,0 +1,197 @@ +# +# spec file for package arts +# +# Copyright (c) 2011 the Trinity Project (opensuse). +# +# All modifications and additions to the file contributed by third parties +# remain the property of their copyright owners, unless otherwise agreed +# upon. The license for this file, and modifications and additions to the +# file, is the same license as for the pristine package itself (unless the +# license for the pristine package is not an Open Source License, in which +# case the license is the MIT License). An "Open Source License" is a +# license that conforms to the Open Source Definition (Version 1.9) +# published by the Open Source Initiative. + +# Please submit bugfixes or comments via http://bugs.trinitydesktop.org/ +# + +# norootforbuild + + +Name: arts +BuildRequires: alsa-devel audiofile-devel cmake glib2-devel jack-devel libdrm-devel libjpeg-devel libvorbis-devel libtqt4-devel readline-devel update-desktop-files tde-filesystem +BuildRequires: tde-filesystem +License: GPLv2+ +Group: Productivity/Multimedia/Sound/Players +Summary: Modular Software Synthesizer +PreReq: permissions +Version: 1.5.10 +Release: 1 +Source0: %{name}-%{version}.tar.bz2 +Source1: artswrapper.7.gz +Source2: baselibs.conf +Patch2: no-informational-messages.diff +Patch5: arts-vorbis-fix.dif +Patch7: fortify_source.patch +Patch8: arts-start-on-demand.diff +Patch9: avoid_la_files.diff +BuildRoot: %{_tmppath}/%{name}-%{version}-build + +%description +A modular software synthesizer that generates realtime audio streams, +includes midi support, is easily extendable, and uses CORBA for +separation of GUI and synthesis. + + + +Authors: +-------- + Stefan Westerfeld + +%package devel +License: GPLv2+ +# usefiles /opt/tde/bin/artsc-config /opt/tde/bin/mcopidl +Summary: Include Files and Libraries mandatory for Development. +Group: Development/Libraries/Other +Provides: tdelibs:/opt/tde/include/artsc/artsc.h +Requires: libtqt4-devel arts = %version glib2-devel jack-devel libogg-devel libvorbis-devel audiofile-devel libstdc++-devel +Requires: alsa-devel tde-filesystem + +%description devel +A modular software synthesizer that generates realtime audio streams, +supports MIDI, is easily extendable, and uses CORBA for separation of +the GUI and synthesis. + + + +Authors: +-------- + Stefan Westerfeld + +%package devel-static +License: GPLv2+ +Summary: Include Files and Libraries mandatory for Development. +Group: Development/Libraries/Other + +%description devel-static +A modular software synthesizer that generates realtime audio streams, +supports MIDI, is easily extendable, and uses CORBA for separation of +the GUI and synthesis. + + + +Authors: +-------- + Stefan Westerfeld + +%package gmcop +License: GPLv2+ +# usesubdirs gmcop +Summary: A Modular Software Synthesizer +Group: Productivity/Multimedia/Sound/Players + +%description gmcop +A modular software synthesizer that generates real-time audio streams, +supports midi, is easily extendable, and uses CORBA for separation of +GUI and synthesis. + + + +Authors: +-------- + Stefan Westerfeld + +%prep +%setup -qn arts-%{version} +%patch2 +%patch5 +%patch7 +%patch8 +%patch9 + +%build +CXXFLAGS="$CXXFLAGS $RPM_OPT_FLAGS -DNDEBUG" CFLAGS="$CXXFLAGS" %cmake_tde -d build -- -DWITH_MAD=OFF -DCMAKE_SKIP_RPATH=OFF + +# shut off MAD support because that is only available in packman + +#%ifarch %ix86 +# I trust in arts runtime checking ... +#echo "#define HAVE_X86_SSE 1" >> config.h +#%endif +# broken automake ? +#make -C flow/gsl gslconfig.h +# broken automake ? +#make %{?jobs:-j%jobs} + +%make_tde -d build + +%install +%makeinstall_tde -d build +%ifarch x86_64 +mkdir -p $RPM_BUILD_ROOT/%{_tde_prefix}/lib +ln -sf ../lib64/mcop $RPM_BUILD_ROOT/%{_tde_prefix}/lib/mcop +%endif +mkdir -p -m 755 $RPM_BUILD_ROOT/%_mandir/man7 +cp %SOURCE1 $RPM_BUILD_ROOT/%_mandir/man7/ + +# unneeded +rm -rf %{buildroot}/%{_tde_libdir}/*.la + +%clean +rm -rf $RPM_BUILD_ROOT + +%post +%run_ldconfig +%run_permissions + +%postun +%run_ldconfig + +%post gmcop +%run_ldconfig + +%postun gmcop +%run_ldconfig +%verifyscript +%verify_permissions -e %{_tde_bindir}/artswrapper + +%files +%defattr(-,root,root,755) +%doc COPYING.LIB COPYING +%dir %{_tde_prefix} +%dir %{_tde_bindir} +%{_tde_bindir}/artscat +%{_tde_bindir}/arts[dpsr]* +%verify(not mode) %{_tde_bindir}/artswrapper +%dir %{_tde_libdir} +%{_tde_libdir}/libarts*.so.* +%{_tde_libdir}/libkmedia2*.so.* +%{_tde_libdir}/libmcop.so.* +%{_tde_libdir}/libmcop_mt.so.* +%{_tde_libdir}/libqtmcop.so.* +%{_tde_libdir}/libsoundserver_idl.so.* +# these need to be in the base package for lt_dlopen() +%{_tde_libdir}/*.so +%{_tde_libdir}/mcop +%ifarch x86_64 +%{_tde_prefix}/lib +%endif +%{_mandir}/man7/artswrapper.7.gz + +%files devel +%defattr(-,root,root) +%{_tde_bindir}/artsc-config +%{_tde_bindir}/mcopidl +%dir %{_tde_includedir} +%{_tde_includedir}/* +%{_libdir}/pkgconfig/arts.pc + +%files devel-static +%defattr(-,root,root) +%{_tde_libdir}/libgsl.a + +%files gmcop +%defattr(-,root,root) +%{_tde_libdir}/libgmcop.so.* + +%changelog diff --git a/opensuse/core/arts/artswrapper.7.gz b/opensuse/core/arts/artswrapper.7.gz new file mode 100644 index 000000000..92eb0982b Binary files /dev/null and b/opensuse/core/arts/artswrapper.7.gz differ diff --git a/opensuse/core/arts/avoid_la_files.diff b/opensuse/core/arts/avoid_la_files.diff new file mode 100644 index 000000000..7c592d687 --- /dev/null +++ b/opensuse/core/arts/avoid_la_files.diff @@ -0,0 +1,26 @@ +--- artsc/Makefile.am ++++ artsc/Makefile.am +@@ -1,4 +1,4 @@ +-AM_CFLAGS = -DARTSC_BACKEND='"$(libdir)/libartscbackend.la"' ++AM_CFLAGS = -DARTSC_BACKEND='"$(libdir)/libartscbackend.so"' + AM_CPPFLAGS = -DCOMPILING_ARTSC + lib_LTLIBRARIES = libartsc.la libartscbackend.la libartsdsp.la libartsdsp_st.la + FLOWLIBS = $(top_builddir)/flow/libartsflow.la +--- mcop/extensionloader.cc ++++ mcop/extensionloader.cc +@@ -56,7 +56,14 @@ + /* this will catch all startup classes here */ + StartupManager::setExtensionLoader(this); + +- lt_dlinit(); ++ lt_dlinit(); ++ ++ string::size_type len = dlfilename.length(); ++ if (len > 0 && dlfilename[len-1] == 'a' && dlfilename[len-2] == 'l') { ++ dlfilename[len-1] = 'o'; ++ dlfilename[len-2] = 's'; ++ } ++ + handle = lt_dlopen(dlfilename.c_str()); + + StartupManager::setExtensionLoader(0); diff --git a/opensuse/core/arts/baselibs.conf b/opensuse/core/arts/baselibs.conf new file mode 100644 index 000000000..1dec19ada --- /dev/null +++ b/opensuse/core/arts/baselibs.conf @@ -0,0 +1 @@ +arts diff --git a/opensuse/core/arts/fortify_source.patch b/opensuse/core/arts/fortify_source.patch new file mode 100644 index 000000000..fb14bc2ab --- /dev/null +++ b/opensuse/core/arts/fortify_source.patch @@ -0,0 +1,13 @@ +Index: flow/gsl/gslloader-oggvorbis.c +=================================================================== +--- flow/gsl/gslloader-oggvorbis.c.orig ++++ flow/gsl/gslloader-oggvorbis.c +@@ -25,7 +25,7 @@ + #include + #include + #include +- ++#include + + /* --- structures --- */ + typedef struct diff --git a/opensuse/core/arts/no-informational-messages.diff b/opensuse/core/arts/no-informational-messages.diff new file mode 100644 index 000000000..e25ea16d1 --- /dev/null +++ b/opensuse/core/arts/no-informational-messages.diff @@ -0,0 +1,15 @@ +Index: mcop/debug.cc +=================================================================== +RCS file: /home/kde/arts/mcop/debug.cc,v +retrieving revision 1.14 +diff -u -3 -p -r1.14 debug.cc +--- mcop/debug.cc 13 Oct 2003 19:59:41 -0000 1.14 ++++ mcop/debug.cc 24 Feb 2004 17:07:40 -0000 +@@ -92,7 +92,6 @@ static void output_message(Debug::Level + buff = arts_strdup_printf("%s -w 'Sound server warning message:\n\n%s' &", messageAppName, quoted_msg); + break; + case Debug::lInfo: +- buff = arts_strdup_printf("%s -i 'Sound server informational message:\n\n%s' &", messageAppName, quoted_msg); + break; + default: + break; // avoid compile warning diff --git a/opensuse/core/libdbus-1-tqt-0/.project b/opensuse/core/libdbus-1-tqt-0/.project new file mode 100644 index 000000000..073316fd0 --- /dev/null +++ b/opensuse/core/libdbus-1-tqt-0/.project @@ -0,0 +1,12 @@ + + + libdbus-1-tqt-0 + + + + + + + org.eclipse.linuxtools.rpm.core.rpmnature + + diff --git a/opensuse/core/libdbus-1-tqt-0/README.VERSION b/opensuse/core/libdbus-1-tqt-0/README.VERSION new file mode 100644 index 000000000..b8b49c0d6 --- /dev/null +++ b/opensuse/core/libdbus-1-tqt-0/README.VERSION @@ -0,0 +1 @@ +In the TRINITY tree this is dependencies/dbus-1-tqt. diff --git a/opensuse/core/libdbus-1-tqt-0/fix_circular_destructor.patch b/opensuse/core/libdbus-1-tqt-0/fix_circular_destructor.patch new file mode 100644 index 000000000..cadd26ca0 --- /dev/null +++ b/opensuse/core/libdbus-1-tqt-0/fix_circular_destructor.patch @@ -0,0 +1,14 @@ +Index: tools/dbusxml2qt3/methodgen.cpp +=================================================================== +--- tools/dbusxml2qt3/methodgen.cpp (Revision 805416) ++++ tools/dbusxml2qt3/methodgen.cpp (Arbeitskopie) +@@ -1740,7 +1740,8 @@ + stream << " for (; it != endIt; ++it)" << endl; + stream << " {" << endl; + stream << " QDBusObjectBase* interface = it.data();" << endl; +- stream << " delete interface;" << endl; ++ stream << " if (interface != this)" << endl; ++ stream << " delete interface;" << endl; + stream << " }" << endl; + stream << " interfaces.clear();" << endl; + stream << "}" << endl; diff --git a/opensuse/core/libdbus-1-tqt-0/fix_ifdef.patch b/opensuse/core/libdbus-1-tqt-0/fix_ifdef.patch new file mode 100644 index 000000000..99da35290 --- /dev/null +++ b/opensuse/core/libdbus-1-tqt-0/fix_ifdef.patch @@ -0,0 +1,18 @@ +--- dbus/qdbusobjectpath.h ++++ dbus/qdbusobjectpath.h +@@ -21,6 +21,9 @@ + * + */ + ++#ifndef QDBUSOBJECTPATH_H ++#define QDBUSOBJECTPATH_H ++ + #include + + /** +@@ -111,3 +114,5 @@ + */ + static int validate(const QCString& path); + }; ++ ++#endif diff --git a/opensuse/core/libdbus-1-tqt-0/libdbus-1-tqt-0.changes b/opensuse/core/libdbus-1-tqt-0/libdbus-1-tqt-0.changes new file mode 100644 index 000000000..f5e01f9af --- /dev/null +++ b/opensuse/core/libdbus-1-tqt-0/libdbus-1-tqt-0.changes @@ -0,0 +1,58 @@ +------------------------------------------------------------------- +Sat Aug 13 15:57:46 UTC 2011 - rxu@lincomlinux.org + +- upgrade to TQt version and adjust accordingly + +------------------------------------------------------------------- +Fri Mar 6 15:38:51 CET 2009 - crrodriguez@suse.de + +- remove static libraries and "la" files + +------------------------------------------------------------------- +Thu May 8 17:15:13 CEST 2008 - hschaa@suse.de + +- Add fix_circular_destructor.patch which fixes a crash in the + generated objects + +------------------------------------------------------------------- +Wed Apr 9 17:45:53 CEST 2008 - hschaa@suse.de + +- Update to SVN revision 795238 which fixes some issues with KNM + +------------------------------------------------------------------- +Thu Mar 13 10:32:01 CET 2008 - hschaa@suse.de + +- Update to 0.8.1 + SVN revision 785103 +- Remove BRANCH_UPDATE.diff +- Add r785103.patch + +------------------------------------------------------------------- +Fri Feb 8 01:03:49 CET 2008 - dmueller@suse.de + +- also allow building on s390/s390x + +------------------------------------------------------------------- +Fri Jan 11 12:14:10 CET 2008 - hschaa@suse.de + +- add ifdefs to qdbusobjectpath.h (fix_ifdef.patch) + +------------------------------------------------------------------- +Wed Jan 9 19:01:49 CET 2008 - dmueller@suse.de + +- fix generation of nm introspection (branch update) + +------------------------------------------------------------------- +Mon Dec 17 16:43:44 CET 2007 - dmueller@suse.de + +- include bugfixes from SVN + +------------------------------------------------------------------- +Wed Dec 12 14:03:53 CET 2007 - hschaa@suse.de + +- Added packages to PDB + +------------------------------------------------------------------- +Fri Nov 30 13:30:33 CET 2007 - hschaa@suse.de + +- Initial checkin + diff --git a/opensuse/core/libdbus-1-tqt-0/libdbus-1-tqt-0.spec b/opensuse/core/libdbus-1-tqt-0/libdbus-1-tqt-0.spec new file mode 100644 index 000000000..06368c32d --- /dev/null +++ b/opensuse/core/libdbus-1-tqt-0/libdbus-1-tqt-0.spec @@ -0,0 +1,135 @@ +# +# spec file for package libdbus-1-tqt-0 +# +# Copyright (c) 2011 the Trinity Project (opensuse). +# +# All modifications and additions to the file contributed by third parties +# remain the property of their copyright owners, unless otherwise agreed +# upon. The license for this file, and modifications and additions to the +# file, is the same license as for the pristine package itself (unless the +# license for the pristine package is not an Open Source License, in which +# case the license is the MIT License). An "Open Source License" is a +# license that conforms to the Open Source Definition (Version 1.9) +# published by the Open Source Initiative. + +# Please submit bugfixes or comments via http://bugs.trinitydesktop.org/ +# + +# norootforbuild + + +Name: libdbus-1-tqt-0 +Url: http://www.freedesktop.org/wiki/Software/DBusBindings +%define appname libdbus-1-tqt +BuildRequires: dbus-1-devel libtqt4-devel cmake +License: GPL v2 or later +Group: Development/Libraries/C and C++ +AutoReqProv: on +Version: 0.8.1 +Release: 1 +Summary: TQt DBus Bindings +BuildRoot: %{_tmppath}/%{name}-%{version}-build +Source0: %{appname}-%{version}.tar.bz2 +Patch1: fix_ifdef.patch +Patch2: r785103.patch +Patch3: r795238.patch +Patch4: fix_circular_destructor.patch + +%description +This library provides TQt-classes for accessing the DBus + + + +Authors: +-------- + Kevin Krammer + +%package devel +License: GPL v2 or later +Summary: Development files for libdbus-1-tqt +Group: Development/Libraries/C and C++ +Requires: %{name} = %{version}-%{release} +Requires: dbus-1-devel libtqt4-devel + +%description devel +This library provides TQt-classes for accessing the DBus. + +This package holds the development files for libdbus-1-tqt. + + + +Authors: +-------- + Kevin Krammer + +%package -n dbusxml2tqt +License: GPL v2 or later +Summary: Generate TQt-classes from DBus-introspection data +Group: Development/Libraries/C and C++ +Requires: %{name} = %{version}-%{release} + +%description -n dbusxml2tqt +dbusxml2tqt allows to generate TQt-classes from DBus-introspection data + + + +Authors: +-------- + Kevin Krammer + +%prep +%setup -n %{appname}-%{version} -q +%patch1 +%patch2 -p1 +%patch3 -p0 +%patch4 -p0 + +%build +mkdir build +cd build +cmake ../ +%{__make} %{?jobs:-j%jobs} + +%install +make install DESTDIR=$RPM_BUILD_ROOT +#install -D -m 0755 ./tools/dbusxml2qt3/dbusxml2qt3 $RPM_BUILD_ROOT%{_bindir}/dbusxml2tqt +%{__rm} -f %{buildroot}%{_libdir}/*.la + +%post -p /sbin/ldconfig + +%postun -p /sbin/ldconfig + +%clean +rm -rf $RPM_BUILD_ROOT + +%files +%defattr(-,root,root) +%doc README AUTHORS ChangeLog COPYING INSTALL +%{_libdir}/libdbus-1-tqt.so.0 +%{_libdir}/libdbus-1-tqt.so.0.8.1 + +%files devel +%defattr(-,root,root) +%{_libdir}/libdbus-1-tqt.so +%dir %{_includedir}/dbus-1.0/tqt +%dir %{_includedir}/dbus-1.0/tqt/dbus +%{_includedir}/dbus-1.0/tqt/dbus/tqdbusconnection.h +%{_includedir}/dbus-1.0/tqt/dbus/tqdbusdata.h +%{_includedir}/dbus-1.0/tqt/dbus/tqdbusdataconverter.h +%{_includedir}/dbus-1.0/tqt/dbus/tqdbusdatalist.h +%{_includedir}/dbus-1.0/tqt/dbus/tqdbusdatamap.h +%{_includedir}/dbus-1.0/tqt/dbus/tqdbuserror.h +%{_includedir}/dbus-1.0/tqt/dbus/tqdbusmacros.h +%{_includedir}/dbus-1.0/tqt/dbus/tqdbusmessage.h +%{_includedir}/dbus-1.0/tqt/dbus/tqdbusobject.h +%{_includedir}/dbus-1.0/tqt/dbus/tqdbusobjectpath.h +%{_includedir}/dbus-1.0/tqt/dbus/tqdbusproxy.h +%{_includedir}/dbus-1.0/tqt/dbus/tqdbusvariant.h +%{_libdir}/pkgconfig/dbus-1-tqt.pc + +%files -n dbusxml2tqt +%defattr(-,root,root) +%{_bindir}/dbusxml2tqt + +%changelog + diff --git a/opensuse/core/libdbus-1-tqt-0/r785103.patch b/opensuse/core/libdbus-1-tqt-0/r785103.patch new file mode 100644 index 000000000..d07b87180 --- /dev/null +++ b/opensuse/core/libdbus-1-tqt-0/r785103.patch @@ -0,0 +1,996 @@ +diff -ur libdbus-1-qt3-0.8.1/qdbusintegrator.cpp ../dbus-qt4-qt3backport/qdbusintegrator.cpp +--- libdbus-1-qt3-0.8.1/qdbusintegrator.cpp 2007-12-17 12:34:08.000000000 +0100 ++++ ../dbus-qt4-qt3backport/qdbusintegrator.cpp 2008-03-13 10:28:54.000000000 +0100 +@@ -121,7 +121,7 @@ + QDBusConnectionPrivate *d = static_cast(data); + + int flags = dbus_watch_get_flags(watch); +- int fd = dbus_watch_get_fd(watch); ++ int fd = dbus_watch_get_unix_fd(watch); + + QDBusConnectionPrivate::Watcher watcher; + if (flags & DBUS_WATCH_READABLE) { +@@ -163,7 +163,7 @@ + //qDebug("remove watch"); + + QDBusConnectionPrivate *d = static_cast(data); +- int fd = dbus_watch_get_fd(watch); ++ int fd = dbus_watch_get_unix_fd(watch); + + QDBusConnectionPrivate::WatcherHash::iterator it = d->watchers.find(fd); + if (it != d->watchers.end()) +@@ -205,7 +205,7 @@ + //qDebug("toggle watch"); + + QDBusConnectionPrivate *d = static_cast(data); +- int fd = dbus_watch_get_fd(watch); ++ int fd = dbus_watch_get_unix_fd(watch); + + QDBusConnectionPrivate::WatcherHash::iterator it = d->watchers.find(fd); + if (it != d->watchers.end()) { +@@ -218,7 +218,7 @@ + int flags = dbus_watch_get_flags(watch); + + // qDebug("toggle watch %d to %d (write: %d, read: %d)", +-// dbus_watch_get_fd(watch), enabled, ++// dbus_watch_get_unix_fd(watch), enabled, + // flags & DBUS_WATCH_WRITABLE, flags & DBUS_WATCH_READABLE); + + if (flags & DBUS_WATCH_READABLE && (*wit).read) +diff -ur libdbus-1-qt3-0.8.1/tools/dbusxml2qt3/classgen.cpp ../dbus-qt4-qt3backport/tools/dbusxml2qt3/classgen.cpp +--- libdbus-1-qt3-0.8.1/tools/dbusxml2qt3/classgen.cpp 2007-12-17 12:34:08.000000000 +0100 ++++ ../dbus-qt4-qt3backport/tools/dbusxml2qt3/classgen.cpp 2008-03-13 10:28:54.000000000 +0100 +@@ -38,6 +38,11 @@ + insert(key, true); + } + ++ void removeString(const QString& key) ++ { ++ erase(key); ++ } ++ + void insertStringList(const QStringList& list) + { + QStringList::const_iterator it = list.begin(); +@@ -194,6 +199,14 @@ + forwards.insertString("class QDomElement"); + if (!classData.signals.isEmpty()) + forwards.insertString("class QString"); ++ if (!classData.asyncMethods.isEmpty()) ++ { ++ includes["Qt"].insertString(""); ++ forwards.erase("template class QMap"); ++ ++ includes["qdbus"].insertString(""); ++ forwards.erase("class QDBusMessage"); ++ } + break; + + case Class::Proxy: +@@ -205,6 +218,11 @@ + forwards.insertString("class QString"); + if (!classData.properties.isEmpty()) + forwards.insertString("class QDBusVariant"); ++ if (!classData.asyncMethods.isEmpty()) ++ { ++ includes["Qt"].insertString(""); ++ forwards.erase("template class QMap"); ++ } + break; + + case Class::Node: +@@ -345,7 +363,7 @@ + stream << "#include \"" << (*it).name.lower() << ".h\"" << endl; + } + +- stream << "#include \"introspectable.h\"" << endl; ++ stream << "#include \"introspectableinterface.h\"" << endl; + + stream << endl; + } +@@ -442,7 +460,30 @@ + static void writeMethodDeclarations(const Class& classData, Class::Role role, + QTextStream& stream) + { +- if (!classData.methods.isEmpty()) ++ if (role == Class::Interface && !classData.asyncReplyMethods.isEmpty()) ++ { ++ stream << "public:" << endl; ++ ++ QValueList::const_iterator it = ++ classData.asyncReplyMethods.begin(); ++ QValueList::const_iterator endIt = ++ classData.asyncReplyMethods.end(); ++ for (; it != endIt; ++it) ++ { ++ Method method = *it; ++ method.name += "AsyncReply"; ++ ++ stream << " virtual void "; ++ MethodGenerator::writeMethodDeclaration(method, false, false, stream); ++ ++ stream << " virtual void " << (*it).name ++ << "AsyncError(int asyncCallId, const QDBusError& error);" ++ << endl; ++ stream << endl; ++ } ++ } ++ ++ if (!classData.methods.isEmpty() || !classData.asyncMethods.isEmpty()) + { + bool pureVirtual = true; + switch (role) +@@ -465,9 +506,35 @@ + QValueList::const_iterator endIt = classData.methods.end(); + for (; it != endIt; ++it) + { ++ if ((*it).async) continue; ++ + stream << " virtual bool "; + MethodGenerator::writeMethodDeclaration(*it, pureVirtual, true, stream); + } ++ ++ it = classData.asyncMethods.begin(); ++ endIt = classData.asyncMethods.end(); ++ for (; it != endIt; ++it) ++ { ++ Method method = *it; ++ method.name += "Async"; ++ ++ switch (role) ++ { ++ case Class::Interface: ++ stream << " virtual void "; ++ MethodGenerator::writeMethodDeclaration(method, pureVirtual, false, stream); ++ break; ++ ++ case Class::Proxy: ++ stream << " virtual bool "; ++ MethodGenerator::writeMethodDeclaration(method, pureVirtual, true, stream); ++ break; ++ ++ case Class::Node: // no async methods ++ break; ++ } ++ } + } + + if (!classData.properties.isEmpty()) +@@ -511,7 +578,7 @@ + switch (role) + { + case Class::Interface: +- if (!classData.methods.isEmpty()) ++ if (!classData.methods.isEmpty() || !classData.asyncMethods.isEmpty()) + { + stream << "protected: // implement sending replies" << endl; + stream << " virtual void handleMethodReply(const QDBusMessage& reply) = 0;" << endl; +@@ -527,15 +594,35 @@ + break; + + case Class::Proxy: ++ { + if (!classData.signals.isEmpty()) + { + stream << "protected slots: // usually no need to reimplement" << endl; + stream << " virtual void slotHandleDBusSignal(const QDBusMessage& message);" << endl; + stream << endl; + } ++ ++ if (!classData.asyncReplySignals.isEmpty()) ++ { ++ if (classData.signals.isEmpty()) ++ { ++ stream << "protected slots: // usually no need to reimplement" << endl; ++ } ++ stream << " virtual void slotHandleAsyncReply(int id, const QDBusMessage& message);" << endl; ++ stream << endl; ++ } ++ + stream << "protected:" << endl; + stream << " QDBusProxy* m_baseProxy;" << endl; ++ ++ if (!classData.asyncMethods.isEmpty()) ++ { ++ stream << endl; ++ stream << " QMap m_asyncCalls;" << endl; ++ } ++ + break; ++ } + + case Class::Node: // not variable methods + break; +@@ -547,7 +634,8 @@ + static void writeSignalDeclarations(const Class& classData, Class::Role role, + QTextStream& stream) + { +- if (classData.signals.isEmpty()) return; ++ if (classData.signals.isEmpty() && classData.asyncReplySignals.isEmpty()) ++ return; + + QString prefix; + switch (role) +@@ -578,6 +666,18 @@ + MethodGenerator::writeMethodDeclaration(*it, false, false, stream); + } + ++ it = classData.asyncReplySignals.begin(); ++ endIt = classData.asyncReplySignals.end(); ++ for (; it != endIt; ++it) ++ { ++ stream << prefix; ++ ++ Method signal = *it; ++ signal.name += "AsyncReply"; ++ ++ MethodGenerator::writeMethodDeclaration(signal, false, false, stream); ++ } ++ + stream << endl; + } + +@@ -598,8 +698,6 @@ + static void writeMethodCallDeclarations(const Class& classData, + QTextStream& stream) + { +- if (classData.methods.isEmpty()) return; +- + QValueList::const_iterator it = classData.methods.begin(); + QValueList::const_iterator endIt = classData.methods.end(); + for (; it != endIt; ++it) +@@ -607,6 +705,26 @@ + stream << " "; + MethodGenerator::writeMethodCallDeclaration(*it, stream); + } ++ ++ if (!classData.asyncReplyMethods.isEmpty()) ++ { ++ stream << "protected:" << endl; ++ stream << " QMap m_asyncCalls;" << endl; ++ stream << endl; ++ } ++} ++ ++static void writeInterfaceAsyncReplyHandlers(const Class& classData, ++ QTextStream& stream) ++{ ++ if (classData.asyncReplyMethods.isEmpty()) return; ++ ++ QValueList::const_iterator it = classData.asyncReplyMethods.begin(); ++ QValueList::const_iterator endIt = classData.asyncReplyMethods.end(); ++ for (; it != endIt; ++it) ++ { ++ MethodGenerator::writeInterfaceAsyncReplyHandler(classData, *it, stream); ++ } + } + + static void writeMethodCalls(const Class& classData, QTextStream& stream) +@@ -615,6 +733,15 @@ + QValueList::const_iterator endIt = classData.methods.end(); + for (; it != endIt; ++it) + { ++ if ((*it).async) continue; ++ ++ MethodGenerator::writeMethodCall(classData, *it, stream); ++ } ++ ++ it = classData.asyncMethods.begin(); ++ endIt = classData.asyncMethods.end(); ++ for (; it != endIt; ++it) ++ { + MethodGenerator::writeMethodCall(classData, *it, stream); + } + } +@@ -625,6 +752,15 @@ + QValueList::const_iterator endIt = classData.methods.end(); + for (; it != endIt; ++it) + { ++ if ((*it).async) continue; ++ ++ MethodGenerator::writeProxyMethod(classData.name, *it, stream); ++ } ++ ++ it = classData.asyncMethods.begin(); ++ endIt = classData.asyncMethods.end(); ++ for (; it != endIt; ++it) ++ { + MethodGenerator::writeProxyMethod(classData.name, *it, stream); + } + } +@@ -643,6 +779,121 @@ + } + } + ++static void splitAsyncProxyMethods(Class& classData) ++{ ++ // create the async identifier ++ Argument idArgMethod; ++ idArgMethod.name = "asyncCallId"; ++ idArgMethod.signature = "int"; ++ idArgMethod.isPrimitive = true; ++ idArgMethod.direction = Argument::Out; ++ ++ Argument idArgSignal = idArgMethod; ++ idArgSignal.direction = Argument::In; ++ ++ QValueList::iterator it = classData.methods.begin(); ++ QValueList::iterator endIt = classData.methods.end(); ++ for (; it != endIt; ++it) ++ { ++ if (!(*it).async) continue; ++ ++ Method method = *it; ++ ++ QValueList methodArgs; ++ QValueList signalArgs; ++ ++ // add id argument ++ methodArgs << idArgMethod; ++ signalArgs << idArgSignal; ++ ++ // split in/out arguments: "in" belong to the method, "out" to the new signal ++ QValueList::const_iterator argIt = method.arguments.begin(); ++ QValueList::const_iterator argEndIt = method.arguments.end(); ++ for (; argIt != argEndIt; ++argIt) ++ { ++ if ((*argIt).direction == Argument::Out) ++ { ++ // signal parameters are "out" but have "in" signature, ++ // e.g. "const T&" ++ Argument arg = *argIt; ++ arg.direction = Argument::In; ++ ++ signalArgs << arg; ++ } ++ else ++ methodArgs << *argIt; ++ } ++ ++ // change method ++ method.arguments = methodArgs; ++ ++ classData.asyncMethods << method; ++ ++ // create "callback" signal ++ Method signal = method; ++ signal.arguments = signalArgs; ++ ++ classData.asyncReplySignals << signal; ++ } ++} ++ ++static void splitAsyncInterfaceMethods(Class& classData) ++{ ++ // create the async identifier ++ Argument idArgMethod; ++ idArgMethod.name = "asyncCallId"; ++ idArgMethod.signature = "int"; ++ idArgMethod.isPrimitive = true; ++ idArgMethod.direction = Argument::In; ++ ++ Argument idArgReply = idArgMethod; ++ ++ QValueList::iterator it = classData.methods.begin(); ++ QValueList::iterator endIt = classData.methods.end(); ++ for (; it != endIt; ++it) ++ { ++ if (!(*it).async) continue; ++ ++ Method method = *it; ++ ++ QValueList methodArgs; ++ QValueList replyArgs; ++ ++ // add id argument ++ methodArgs << idArgMethod; ++ replyArgs << idArgReply; ++ ++ // split in/out arguments: "in" belong to the call, "out" to the reply ++ QValueList::const_iterator argIt = method.arguments.begin(); ++ QValueList::const_iterator argEndIt = method.arguments.end(); ++ for (; argIt != argEndIt; ++argIt) ++ { ++ if ((*argIt).direction == Argument::Out) ++ { ++ // reply parameters are "out" for the service but "in" for ++ // the reply handler ++ Argument arg = *argIt; ++ arg.direction = Argument::In; ++ ++ replyArgs << arg; ++ } ++ else ++ methodArgs << *argIt; ++ } ++ ++ // change method ++ method.arguments = methodArgs; ++ ++ classData.asyncMethods << method; ++ ++ // create reply handler ++ Method reply = method; ++ reply.arguments = replyArgs; ++ ++ classData.asyncReplyMethods << reply; ++ } ++} ++ + bool ClassGenerator::initStreams(const QString& baseName, + QTextStream& headerStream, + QTextStream& sourceStream) +@@ -680,7 +931,6 @@ + { + closeIncludeGuard(baseName, headerStream); + writeFileFooter(headerStream); +- + writeFileFooter(sourceStream); + + QIODevice* device = headerStream.device(); +@@ -717,33 +967,36 @@ + QTextStream& headerStream, + QTextStream& sourceStream) + { ++ Class classDataCopy = classData; ++ splitAsyncInterfaceMethods(classDataCopy); ++ + // create header +- writeHeaderIncludes(classData, Class::Interface, headerStream); ++ writeHeaderIncludes(classDataCopy, Class::Interface, headerStream); + +- openNamespaces(classData.namespaces, headerStream); +- openClassDeclaration(classData, Class::Interface, headerStream); ++ openNamespaces(classDataCopy.namespaces, headerStream); ++ openClassDeclaration(classDataCopy, Class::Interface, headerStream); + +- writeSignalDeclarations(classData, Class::Interface, headerStream); +- writeMethodDeclarations(classData, Class::Interface, headerStream); +- writeMethodCallDeclarations(classData, headerStream); ++ writeSignalDeclarations(classDataCopy, Class::Interface, headerStream); ++ writeMethodDeclarations(classDataCopy, Class::Interface, headerStream); ++ writeMethodCallDeclarations(classDataCopy, headerStream); + +- closeClassDeclaration(classData, Class::Interface, headerStream); +- closeNamespaces(classData.namespaces, headerStream); ++ closeClassDeclaration(classDataCopy, Class::Interface, headerStream); ++ closeNamespaces(classDataCopy.namespaces, headerStream); + + // create source +- writeSourceIncludes(classData, Class::Interface, sourceStream); +- +- openNamespaces(classData.namespaces, sourceStream); ++ writeSourceIncludes(classDataCopy, Class::Interface, sourceStream); + +- MethodGenerator::writeIntrospectionDataMethod(classData, sourceStream); ++ openNamespaces(classDataCopy.namespaces, sourceStream); + +- writeSignalEmitters(classData, sourceStream); ++ MethodGenerator::writeIntrospectionDataMethod(classDataCopy, sourceStream); + +- writeMethodCalls(classData, sourceStream); ++ writeSignalEmitters(classDataCopy, sourceStream); ++ writeInterfaceAsyncReplyHandlers(classDataCopy, sourceStream); ++ writeMethodCalls(classDataCopy, sourceStream); + +- MethodGenerator::writeInterfaceMainMethod(classData, sourceStream); ++ MethodGenerator::writeInterfaceMainMethod(classDataCopy, sourceStream); + +- closeNamespaces(classData.namespaces, sourceStream); ++ closeNamespaces(classDataCopy.namespaces, sourceStream); + + return true; + } +@@ -752,33 +1005,39 @@ + QTextStream& headerStream, + QTextStream& sourceStream) + { ++ Class classDataCopy = classData; ++ splitAsyncProxyMethods(classDataCopy); ++ + // create header +- writeHeaderIncludes(classData, Class::Proxy, headerStream); ++ writeHeaderIncludes(classDataCopy, Class::Proxy, headerStream); + +- openNamespaces(classData.namespaces, headerStream); +- openClassDeclaration(classData, Class::Proxy, headerStream); ++ openNamespaces(classDataCopy.namespaces, headerStream); ++ openClassDeclaration(classDataCopy, Class::Proxy, headerStream); + +- writeSignalDeclarations(classData, Class::Proxy, headerStream); +- writeMethodDeclarations(classData, Class::Proxy, headerStream); ++ writeSignalDeclarations(classDataCopy, Class::Proxy, headerStream); ++ writeMethodDeclarations(classDataCopy, Class::Proxy, headerStream); + +- closeClassDeclaration(classData, Class::Proxy, headerStream); +- closeNamespaces(classData.namespaces, headerStream); ++ closeClassDeclaration(classDataCopy, Class::Proxy, headerStream); ++ closeNamespaces(classDataCopy.namespaces, headerStream); + + // create source +- writeSourceIncludes(classData, Class::Proxy, sourceStream); ++ writeSourceIncludes(classDataCopy, Class::Proxy, sourceStream); + +- openNamespaces(classData.namespaces, sourceStream); ++ openNamespaces(classDataCopy.namespaces, sourceStream); + +- MethodGenerator::writeProxyBegin(classData, sourceStream); ++ MethodGenerator::writeProxyBegin(classDataCopy, sourceStream); + +- writeProxyMethods(classData, sourceStream); ++ writeProxyMethods(classDataCopy, sourceStream); + +- writeProxyProperties(classData, sourceStream); ++ writeProxyProperties(classDataCopy, sourceStream); + +- if (!classData.signals.isEmpty()) +- MethodGenerator::writeSignalHandler(classData, sourceStream); ++ if (!classDataCopy.signals.isEmpty()) ++ MethodGenerator::writeSignalHandler(classDataCopy, sourceStream); + +- closeNamespaces(classData.namespaces, sourceStream); ++ if (!classDataCopy.asyncReplySignals.isEmpty()) ++ MethodGenerator::writeProxyAsyncReplyHandler(classDataCopy, sourceStream); ++ ++ closeNamespaces(classDataCopy.namespaces, sourceStream); + + return true; + } +@@ -796,7 +1055,6 @@ + + closeClassDeclaration(classData, Class::Node, headerStream); + closeNamespaces(classData.namespaces, headerStream); +- closeIncludeGuard(classData.name, headerStream); + + // create source + writeSourceIncludes(classData, Class::Node, sourceStream); +diff -ur libdbus-1-qt3-0.8.1/tools/dbusxml2qt3/main.cpp ../dbus-qt4-qt3backport/tools/dbusxml2qt3/main.cpp +--- libdbus-1-qt3-0.8.1/tools/dbusxml2qt3/main.cpp 2007-12-17 12:34:08.000000000 +0100 ++++ ../dbus-qt4-qt3backport/tools/dbusxml2qt3/main.cpp 2008-03-13 10:28:54.000000000 +0100 +@@ -153,12 +153,16 @@ + exit(3); + } + +- QStringList nameParts = QStringList::split("::", options["classname"]); ++ // class name for node is handled differently later on ++ if (!generateNode) ++ { ++ QStringList nameParts = QStringList::split("::", options["classname"]); + +- interfaces[0].name = nameParts.back(); ++ interfaces[0].name = nameParts.back(); + +- nameParts.pop_back(); +- interfaces[0].namespaces = nameParts; ++ nameParts.pop_back(); ++ interfaces[0].namespaces = nameParts; ++ } + } + + if (checkForOption(options, "namespace")) +@@ -284,6 +288,7 @@ + Method method; + method.name = "Introspect"; + method.noReply = false; ++ method.async = false; + + Argument argument; + argument.name = "data"; +diff -ur libdbus-1-qt3-0.8.1/tools/dbusxml2qt3/methodgen.cpp ../dbus-qt4-qt3backport/tools/dbusxml2qt3/methodgen.cpp +--- libdbus-1-qt3-0.8.1/tools/dbusxml2qt3/methodgen.cpp 2007-12-17 12:34:08.000000000 +0100 ++++ ../dbus-qt4-qt3backport/tools/dbusxml2qt3/methodgen.cpp 2008-03-13 10:28:54.000000000 +0100 +@@ -279,6 +279,24 @@ + return annotations; + } + ++static bool hasAnnotation(const QDomElement& element, const QString& annotation, QString* value = 0) ++{ ++ for (QDomNode node = element.firstChild(); !node.isNull(); ++ node = node.nextSibling()) ++ { ++ if (!node.isElement()) continue; ++ ++ QDomElement childElement = node.toElement(); ++ if (childElement.tagName() != "annotation") continue; ++ if (childElement.attribute("name") != annotation) continue; ++ ++ if (value != 0) *value = childElement.attribute("value"); ++ return true; ++ } ++ ++ return false; ++} ++ + static QValueList extractArguments(const QDomElement& methodElement, + Class& classData) + { +@@ -568,9 +586,13 @@ + method.name = element.attribute("name"); + method.arguments = extractArguments(element, classData); + method.noReply = false; ++ method.async = false; + + if (element.tagName() == "method") ++ { ++ method.async = hasAnnotation(element, "org.freedesktop.DBus.GLib.Async"); + classData.methods.append(method); ++ } + else + classData.signals.append(method); + } +@@ -689,36 +711,85 @@ + void MethodGenerator::writeMethodCallDeclaration(const Method& method, + QTextStream& stream) + { +- stream << "QDBusMessage call" << method.name +- << "(const QDBusMessage& mesage);" << endl; ++ if (method.async) ++ stream << "void call" << method.name << "Async"; ++ else ++ stream << "QDBusMessage call" << method.name; ++ ++ stream << "(const QDBusMessage& message);" << endl; + stream << endl; + } + + void MethodGenerator::writeMethodCall(const Class& classData, + const Method& method, QTextStream& stream) + { +- stream << "QDBusMessage " << classData.name << "::call" << method.name +- << "(const QDBusMessage& message)" << endl;; ++ if (method.async) ++ stream << "void " << classData.name << "::call" << method.name << "Async"; ++ else ++ stream << "QDBusMessage " << classData.name << "::call" << method.name; ++ ++ stream << "(const QDBusMessage& message)" << endl; + + stream << "{" << endl; +- stream << " QDBusError error;" << endl; +- stream << " QDBusMessage reply;" << endl; +- stream << endl; + +- writeVariables(" ", method, stream); ++ if (method.async) ++ { ++ // FIXME: using writeVariables by removing asyncCallId argument ++ Method reducedMethod = method; ++ reducedMethod.arguments.pop_front(); ++ ++ writeVariables(" ", reducedMethod, stream); ++ } ++ else ++ { ++ stream << " QDBusError error;" << endl; ++ stream << " QDBusMessage reply;" << endl; ++ stream << endl; ++ ++ writeVariables(" ", method, stream); ++ } + + stream << endl; +- stream << " if (" << method.name << "("; ++ ++ if (method.async) ++ { ++ stream << " int _asyncCallId = 0;" << endl; ++ stream << " while (m_asyncCalls.find(_asyncCallId) != m_asyncCalls.end())" ++ << endl; ++ stream << " {" << endl; ++ stream << " ++_asyncCallId;" << endl; ++ stream << " }" << endl; ++ stream << " m_asyncCalls.insert(_asyncCallId, message);" << endl; ++ stream << endl; ++ ++ stream << " " << method.name << "Async("; ++ } ++ else ++ stream << " if (" << method.name << "("; + + QValueList::const_iterator it = method.arguments.begin(); + QValueList::const_iterator endIt = method.arguments.end(); +- for (; it != endIt; ++it) ++ while (it != endIt) + { +- stream << "_" << (*it).name << ", "; ++ stream << "_" << (*it).name; ++ ++ ++it; ++ if (it != endIt) stream << ", "; + } + +- stream << "error))" << endl; ++ if (method.async) ++ { ++ stream << ");" << endl; ++ stream << endl; ++ ++ stream << " return;" << endl; ++ stream << "}" << endl; ++ stream << endl; ++ return; ++ } + ++ if (method.arguments.count() > 0) stream << ", "; ++ stream << "error))" << endl; + + stream << " {" << endl; + stream << " reply = QDBusMessage::methodReply(message);" << endl; +@@ -878,6 +949,102 @@ + stream << endl; + } + ++ ++void MethodGenerator::writeInterfaceAsyncReplyHandler(const Class& classData, ++ const Method& method, QTextStream& stream) ++{ ++ stream << "void " << classData.name << "::" << method.name ++ << "AsyncReply("; ++ ++ QValueList::const_iterator it = method.arguments.begin(); ++ QValueList::const_iterator endIt = method.arguments.end(); ++ while (it != endIt) ++ { ++ if (!(*it).isPrimitive && (*it).direction == Argument::In) ++ stream << "const "; ++ ++ stream << (*it).signature; ++ ++ if (!(*it).isPrimitive || (*it).direction == Argument::Out) stream << "&"; ++ ++ stream << " " << (*it).name; ++ ++ ++it; ++ if (it != endIt) stream << ", "; ++ } ++ stream << ")" << endl; ++ stream << endl; ++ stream << "{" << endl; ++ ++ stream << " QMap::iterator findIt = m_asyncCalls.find(asyncCallId);" << endl; ++ stream << " if (findIt == m_asyncCalls.end()) return;" << endl; ++ stream << endl; ++ ++ stream << " QDBusMessage call = findIt.data();" << endl; ++ stream << " m_asyncCalls.erase(findIt);" << endl; ++ stream << endl; ++ ++ stream << " QDBusMessage reply = QDBusMessage::methodReply(call);" ++ << endl; ++ ++ it = method.arguments.begin(); ++ for (++it; it != endIt; ++it) // skip asyncCallId at beginning ++ { ++ if (!(*it).annotatedType.isEmpty()) ++ { ++ stream << " QDBusData " << (*it).name << "Data;" << endl; ++ ++ // TODO error handling ++ stream << " if (QDBusDataConverter::convertToQDBusData<" ++ << (*it).annotatedType << ">(" << (*it).name << ", " ++ << (*it).name << "Data" ++ << ") != QDBusDataConverter::Success) return false;" ++ << endl; ++ stream << " reply << " << (*it).name << "Data;" << endl; ++ } ++ else if (!(*it).accessor.isEmpty()) ++ { ++ stream << " reply << QDBusData::from" << (*it).accessor << "("; ++ ++ if ((*it).subAccessor.isEmpty()) ++ stream << (*it).name; ++ else ++ stream << (*it).containerClass << "(" << (*it).name << ")"; ++ ++ stream << ");" << endl; ++ } ++ else ++ stream << " reply << " << (*it).name << ";" << endl; ++ } ++ stream << endl; ++ ++ stream << " handleMethodReply(reply);" << endl; ++ ++ stream << "}" << endl; ++ stream << endl; ++ ++ stream << "void " << classData.name << "::" << method.name ++ << "AsyncError(int asyncCallId, const QDBusError& error)"; ++ stream << endl; ++ ++ stream << "{" << endl; ++ ++ stream << " QMap::iterator findIt = m_asyncCalls.find(asyncCallId);" << endl; ++ stream << " if (findIt == m_asyncCalls.end()) return;" << endl; ++ stream << endl; ++ ++ stream << " QDBusMessage call = findIt.data();" << endl; ++ stream << " m_asyncCalls.erase(findIt);" << endl; ++ stream << endl; ++ ++ stream << " QDBusMessage reply = QDBusMessage::methodError(call, error);" ++ << endl; ++ stream << " handleMethodReply(reply);" << endl; ++ ++ stream << "}" << endl; ++ stream << endl; ++} ++ + void MethodGenerator::writeInterfaceMainMethod(const Class& classData, + QTextStream& stream) + { +@@ -897,10 +1064,19 @@ + { + stream << " if (message.member() == \"" << (*it).name << "\")" << endl; + stream << " {" << endl; +- stream << " QDBusMessage reply = call" << (*it).name << "(message);" +- << endl; +- stream << " handleMethodReply(reply);" << endl; +- stream << endl; ++ ++ if ((*it).async) ++ { ++ stream << " call" << (*it).name << "Async(message);" << endl; ++ stream << endl; ++ } ++ else ++ { ++ stream << " QDBusMessage reply = call" << (*it).name ++ << "(message);" << endl; ++ stream << " handleMethodReply(reply);" << endl; ++ stream << endl; ++ } + stream << " return true;" << endl; + stream << " }" << endl; + stream << endl; +@@ -967,6 +1143,15 @@ + << endl; + } + ++ if (!classData.asyncReplySignals.isEmpty()) ++ { ++ stream << " QObject::connect(m_baseProxy, " ++ << "SIGNAL(asyncReply(int, const QDBusMessage&))," << endl; ++ stream << " this, " ++ << " SLOT(slotHandleAsyncReply(int, const QDBusMessage&)));" ++ << endl; ++ } ++ + stream << "}" << endl; + + stream << endl; +@@ -988,7 +1173,8 @@ + void MethodGenerator::writeProxyMethod(const QString& className, + const Method& method, QTextStream& stream) + { +- stream << "bool " << className << "::" << method.name << "("; ++ stream << "bool " << className << "::" << method.name ++ << (method.async ? "Async(" : "("); + + QValueList::const_iterator it = method.arguments.begin(); + QValueList::const_iterator endIt = method.arguments.end(); +@@ -1064,6 +1250,22 @@ + return; + } + ++ if (method.async) ++ { ++ stream << " asyncCallId = m_baseProxy->sendWithAsyncReply(\""; ++ stream << method.name << "\", parameters);" << endl; ++ stream << endl; ++ ++ stream << " if (asyncCallId != 0) m_asyncCalls[asyncCallId] = \"" ++ << method.name << "\";" << endl; ++ stream << endl; ++ ++ stream << " return (asyncCallId != 0);" << endl; ++ stream << "}" << endl; ++ stream << endl; ++ return; ++ } ++ + stream << " QDBusMessage reply = m_baseProxy->sendWithReply(\""; + stream << method.name << "\", parameters, &error);" << endl; + stream << endl; +@@ -1335,6 +1537,58 @@ + } + } + ++void MethodGenerator::writeProxyAsyncReplyHandler(const Class& classData, ++ QTextStream& stream) ++{ ++ stream << "void " << classData.name ++ << "::slotHandleAsyncReply(int asyncCallId, const QDBusMessage& message)" << endl; ++ stream << "{" << endl; ++ ++ stream << " QMap::iterator findIt = " ++ << "m_asyncCalls.find(asyncCallId);" << endl; ++ stream << " if (findIt == m_asyncCalls.end()) return;" << endl; ++ stream << endl; ++ stream << " const QString signalName = findIt.data();" << endl; ++ stream << " m_asyncCalls.erase(findIt);" << endl; ++ stream << endl; ++ ++ QValueList::const_iterator it = classData.asyncReplySignals.begin(); ++ QValueList::const_iterator endIt = classData.asyncReplySignals.end(); ++ bool first = true; ++ for (; it != endIt; ++it) ++ { ++ stream << " "; ++ ++ if (!first) ++ stream << "else "; ++ else ++ first = false; ++ ++ stream << "if (signalName == \"" << (*it).name << "\")" << endl; ++ stream << " {" << endl; ++ ++ // FIXME tricking writeVariables and writeSignalEmit into writing ++ // the reply emit code by manipulating arguments and name ++ stream << " int _asyncCallId = asyncCallId;" << endl; ++ ++ Method signal = *it; ++ signal.arguments.pop_front(); ++ ++ writeVariables(" ", signal, stream); ++ stream << endl; ++ ++ signal = *it; ++ signal.name += "AsyncReply"; ++ ++ writeSignalEmit(signal, stream); ++ ++ stream << " }" << endl; ++ } ++ ++ stream << "}" << endl; ++ stream << endl; ++} ++ + void MethodGenerator::writeIntrospectionDataMethod(const Class& classData, + QTextStream& stream) + { +diff -ur libdbus-1-qt3-0.8.1/tools/dbusxml2qt3/methodgen.h ../dbus-qt4-qt3backport/tools/dbusxml2qt3/methodgen.h +--- libdbus-1-qt3-0.8.1/tools/dbusxml2qt3/methodgen.h 2007-12-17 12:34:08.000000000 +0100 ++++ ../dbus-qt4-qt3backport/tools/dbusxml2qt3/methodgen.h 2008-03-13 10:28:55.000000000 +0100 +@@ -61,6 +61,7 @@ + QString name; + QValueList arguments; + bool noReply; ++ bool async; + }; + + class Property : public Argument +@@ -86,6 +87,10 @@ + QValueList methods; + QValueList signals; + QValueList properties; ++ ++ QValueList asyncMethods; ++ QValueList asyncReplySignals; ++ QValueList asyncReplyMethods; + }; + + class MethodGenerator +@@ -109,6 +114,10 @@ + static void writeSignalEmitter(const Class& classData, const Method& method, + QTextStream& stream); + ++ static void writeInterfaceAsyncReplyHandler(const Class& classData, ++ const Method& method, ++ QTextStream& stream); ++ + static void writeInterfaceMainMethod(const Class& classData, + QTextStream& stream); + +@@ -125,6 +134,9 @@ + static void writeProxyProperty(const Class& classData, const Property& property, + QTextStream& stream); + ++ static void writeProxyAsyncReplyHandler(const Class& classData, ++ QTextStream& stream); ++ + static void writeIntrospectionDataMethod(const Class& classData, + QTextStream& stream); + diff --git a/opensuse/core/libdbus-1-tqt-0/r795238.patch b/opensuse/core/libdbus-1-tqt-0/r795238.patch new file mode 100644 index 000000000..3213c823d --- /dev/null +++ b/opensuse/core/libdbus-1-tqt-0/r795238.patch @@ -0,0 +1,60 @@ +Index: dbus/qdbusdatamap.h +=================================================================== +--- dbus/qdbusdatamap.h (Revision 785103) ++++ dbus/qdbusdatamap.h (Revision 795238) +@@ -173,7 +173,7 @@ + } + else if (hasContainerValueType()) + { +- if (it.data()->buildSignature() != containerSignature) ++ if (it.data().buildDBusSignature() != containerSignature) + { + m_valueType = QDBusData::Invalid; + m_containerValueType = QDBusData(); +Index: dbus/qdbuserror.h +=================================================================== +--- dbus/qdbuserror.h (Revision 785103) ++++ dbus/qdbuserror.h (Revision 795238) +@@ -119,7 +119,7 @@ + * Returned by QDBusConnection's addConnection if the specified address + * isn't a valid D-Bus bus address. + * +- * @see QDBusConnection:::addConnection(const QString&,const QString&); ++ * @see QDBusConnection::addConnection(const QString&,const QString&); + */ + BadAddress, + +Index: tools/dbusxml2qt3/classgen.cpp +=================================================================== +--- tools/dbusxml2qt3/classgen.cpp (Revision 785103) ++++ tools/dbusxml2qt3/classgen.cpp (Revision 795238) +@@ -168,6 +168,17 @@ + extractForwardDeclarations(*it, forwards); + } + ++ it = classData.signals.begin(); ++ endIt = classData.signals.end(); ++ for (; it != endIt; ++it) ++ { ++ if ((*it).arguments.isEmpty()) continue; ++ ++ extractHeaderIncludes(*it, includes); ++ extractForwardDeclarations(*it, forwards); ++ } ++ ++ + QValueList::const_iterator propertyIt = classData.properties.begin(); + QValueList::const_iterator propertyEndIt = classData.properties.end(); + for (; propertyIt != propertyEndIt; ++propertyIt) +Index: dbus-1-qt3.pc.in +=================================================================== +--- dbus-1-qt3.pc.in (Revision 785103) ++++ dbus-1-qt3.pc.in (Revision 795238) +@@ -1,6 +1,6 @@ + prefix=@prefix@ + exec_prefix=@exec_prefix@ +-libdir=${prefix}/lib ++libdir=@libdir@ + includedir=${prefix}/include/dbus-1.0/qt3 + + Name: dbus-1-qt3 diff --git a/opensuse/core/libdbus-tqt-1-0/.project b/opensuse/core/libdbus-tqt-1-0/.project new file mode 100644 index 000000000..f94f9c9ac --- /dev/null +++ b/opensuse/core/libdbus-tqt-1-0/.project @@ -0,0 +1,12 @@ + + + libdbus-tqt-1-0 + + + + + + + org.eclipse.linuxtools.rpm.core.rpmnature + + diff --git a/opensuse/core/libdbus-tqt-1-0/README.VERSION b/opensuse/core/libdbus-tqt-1-0/README.VERSION new file mode 100644 index 000000000..3167a4836 --- /dev/null +++ b/opensuse/core/libdbus-tqt-1-0/README.VERSION @@ -0,0 +1 @@ +In the TRINITY tree this is dependencies/dbus-tqt. diff --git a/opensuse/core/libdbus-tqt-1-0/baselibs.conf b/opensuse/core/libdbus-tqt-1-0/baselibs.conf new file mode 100644 index 000000000..245517231 --- /dev/null +++ b/opensuse/core/libdbus-tqt-1-0/baselibs.conf @@ -0,0 +1 @@ +libdbus-tqt-1-0 diff --git a/opensuse/core/libdbus-tqt-1-0/dbus-qt3-compile-fix-thoenig-01.patch b/opensuse/core/libdbus-tqt-1-0/dbus-qt3-compile-fix-thoenig-01.patch new file mode 100644 index 000000000..00b8b6026 --- /dev/null +++ b/opensuse/core/libdbus-tqt-1-0/dbus-qt3-compile-fix-thoenig-01.patch @@ -0,0 +1,85 @@ +--- dbus-qt3/connection.cpp 2005-04-18 05:19:17.000000000 -0600 ++++ dbus-qt3/connection.cpp 2005-04-19 14:35:07.000000000 -0600 +@@ -154,6 +154,7 @@ + + void* Connection::virtual_hook( int, void* ) + { ++ return (void *)NULL; + } + + void Connection::dbus_connection_setup_with_qt_main (DBusConnection *connection) +--- dbus-qt3/message.cpp 2005-04-18 05:19:17.000000000 -0600 ++++ dbus-qt3/message.cpp 2005-04-19 14:55:32.000000000 -0600 +@@ -359,6 +359,7 @@ + Message Message::operator=( const Message& other ) + { + //FIXME: ref the other.d->msg instead of copying it? ++ return (Message &)(d->msg); + } + /** + * Destructs message. +@@ -508,42 +509,49 @@ + const dbus_bool_t right_size_bool = b; + dbus_message_append_args( d->msg, DBUS_TYPE_BOOLEAN, &right_size_bool, + DBUS_TYPE_INVALID ); ++ return (Message &)(d->msg); + } + + Message& Message::operator<<( Q_INT8 byte ) + { + dbus_message_append_args( d->msg, DBUS_TYPE_BYTE, &byte, + DBUS_TYPE_INVALID ); ++ return (Message &)(d->msg); + } + + Message& Message::operator<<( Q_INT32 num ) + { + dbus_message_append_args( d->msg, DBUS_TYPE_INT32, &num, + DBUS_TYPE_INVALID ); ++ return (Message &)(d->msg); + } + + Message& Message::operator<<( Q_UINT32 num ) + { + dbus_message_append_args( d->msg, DBUS_TYPE_UINT32, &num, + DBUS_TYPE_INVALID ); ++ return (Message &)(d->msg); + } + + Message& Message::operator<<( Q_INT64 num ) + { + dbus_message_append_args( d->msg, DBUS_TYPE_INT64, &num, + DBUS_TYPE_INVALID ); ++ return (Message &)(d->msg); + } + + Message& Message::operator<<( Q_UINT64 num ) + { + dbus_message_append_args( d->msg, DBUS_TYPE_UINT64, &num, + DBUS_TYPE_INVALID ); ++ return (Message &)(d->msg); + } + + Message& Message::operator<<( double num ) + { + dbus_message_append_args( d->msg, DBUS_TYPE_DOUBLE, &num, + DBUS_TYPE_INVALID ); ++ return (Message &)(d->msg); + } + + Message& Message::operator<<( const QString& str ) +@@ -551,11 +559,13 @@ + const char *u = str.utf8(); + dbus_message_append_args( d->msg, DBUS_TYPE_STRING, &u, + DBUS_TYPE_INVALID ); ++ return (Message &)(d->msg); + } + + Message& Message::operator<<( const QVariant& custom ) + { + //FIXME: imeplement ++ return (Message &)(d->msg); + } + + } + diff --git a/opensuse/core/libdbus-tqt-1-0/dbus-qt3-do-not-close-shared-connection-thoenig-01.patch b/opensuse/core/libdbus-tqt-1-0/dbus-qt3-do-not-close-shared-connection-thoenig-01.patch new file mode 100644 index 000000000..3cc726de1 --- /dev/null +++ b/opensuse/core/libdbus-tqt-1-0/dbus-qt3-do-not-close-shared-connection-thoenig-01.patch @@ -0,0 +1,12 @@ +--- dbus-qt3/connection.cpp 2006-10-20 16:33:29.000000000 +0200 ++++ dbus-qt3/connection.cpp 2006-10-20 16:33:10.000000000 +0200 +@@ -106,7 +106,7 @@ + + void Connection::close() + { +- dbus_connection_close ( d->connection ); ++ dbus_connection_unref ( d->connection ); + } + + void Connection::flush() + diff --git a/opensuse/core/libdbus-tqt-1-0/libdbus-tqt-1-0.changes b/opensuse/core/libdbus-tqt-1-0/libdbus-tqt-1-0.changes new file mode 100644 index 000000000..c3d66974d --- /dev/null +++ b/opensuse/core/libdbus-tqt-1-0/libdbus-tqt-1-0.changes @@ -0,0 +1,61 @@ +------------------------------------------------------------------- +Wed Aug 24 19:36:38 UTC 2011 - rxu@lincomlinux.org + +- fix naming error: libdbus-tqt-1-0 + +------------------------------------------------------------------- +Sat Aug 13 16:49:42 UTC 2011 - rxu@lincomlinux.org + +- upgrade to trinity dbus-tqt and adjust accordingly + +------------------------------------------------------------------- +Sat Dec 19 00:39:25 CET 2009 - jengelh@medozas.de + +- add baselibs.conf as a source + +------------------------------------------------------------------- +Wed Dec 10 12:34:56 CET 2008 - olh@suse.de + +- use Obsoletes: -XXbit only for ppc64 to help solver during distupgrade + (bnc#437293) + +------------------------------------------------------------------- +Thu Oct 30 12:34:56 CET 2008 - olh@suse.de + +- obsolete old -XXbit packages (bnc#437293) + +------------------------------------------------------------------- +Thu Apr 10 12:54:45 CEST 2008 - ro@suse.de + +- added baselibs.conf file to build xxbit packages + for multilib support + +------------------------------------------------------------------- +Mon Nov 6 15:53:15 CET 2006 - thoenig@suse.de + +- loosen dependency to D-Bus + +------------------------------------------------------------------- +Fri Oct 20 16:42:06 CEST 2006 - thoenig@suse.de + +- add dbus-qt3-do-not-close-shared-connection-thoenig-01.patch: + Do not close shared connection +- F=dbus-qt3-compile-fix-thoenig-01; mv $.diff $F.patch + +------------------------------------------------------------------- +Mon Aug 21 12:49:44 CEST 2006 - thoenig@suse.de + +- remove hack for 64bit architectures +- use bz2 for tar ball + +------------------------------------------------------------------- +Thu Aug 17 18:22:08 CEST 2006 - dmueller@suse.de + +- really enable -fstack-protector +- fix build on x86_64 + +------------------------------------------------------------------- +Tue Aug 1 23:03:23 CEST 2006 - thoenig@suse.de + +- split out binings to sparate spec files + diff --git a/opensuse/core/libdbus-tqt-1-0/libdbus-tqt-1-0.spec b/opensuse/core/libdbus-tqt-1-0/libdbus-tqt-1-0.spec new file mode 100644 index 000000000..85cfb9d28 --- /dev/null +++ b/opensuse/core/libdbus-tqt-1-0/libdbus-tqt-1-0.spec @@ -0,0 +1,147 @@ +# +# spec file for package dbus-1-tqt +# +# Copyright (c) 2011 the Trinity Project (opensuse). +# +# All modifications and additions to the file contributed by third parties +# remain the property of their copyright owners, unless otherwise agreed +# upon. The license for this file, and modifications and additions to the +# file, is the same license as for the pristine package itself (unless the +# license for the pristine package is not an Open Source License, in which +# case the license is the MIT License). An "Open Source License" is a +# license that conforms to the Open Source Definition (Version 1.9) +# published by the Open Source Initiative. + +# Please submit bugfixes or comments via http://bugs.trinitydesktop.org/ +# + +# norootforbuild + + +Name: libdbus-tqt-1-0 +BuildRequires: dbus-1 dbus-1-devel libtqt4-devel cmake +URL: http://dbus.freedesktop.org/ +License: GPLv2+ +Group: Development/Libraries/TDE +Version: 0.62 +Release: 1 +AutoReqProv: on +Summary: TQt/KDE bindings for D-Bus +Source0: dbus-tqt-%{version}.tar.bz2 +Source1: baselibs.conf +Patch0: dbus-qt3-compile-fix-thoenig-01.patch +Patch1: dbus-qt3-do-not-close-shared-connection-thoenig-01.patch +BuildRoot: %{_tmppath}/%{name}-%{version}-build +Requires: dbus-1 >= %( echo `rpm -q --queryformat '%{VERSION}-%{RELEASE}' dbus-1`) +Provides: dbus-1-tqt + +%package devel +License: Other uncritical OpenSource License +Summary: Developer package for TQt/KDE bindings for D-Bus +Requires: dbus-1 >= %( echo `rpm -q --queryformat '%{VERSION}-%{RELEASE}' dbus-1`) +Requires: dbus-1-devel >= %( echo `rpm -q --queryformat '%{VERSION}-%{RELEASE}' dbus-1-devel`) +Requires: %{name} = %{version} +Provides: dbus-1-tqt-devel +AutoReqProv: on +Group: Development/Libraries/TDE + +%description +TQt/KDE bindings for D-Bus. + + + +Authors: +-------- + Olivier Andrieu + Philip Blundell + Anders Carlsson + Kristian Hogsberg + Alex Larsson + Michael Meeks + Seth Nickell + Havoc Pennington + Harri Porten + Matthew Rickard + Zack Rusin + Joe Shaw + Colin Walters + David Zeuthen + +%description devel +Developer package for TQt/KDE bindings for D-Bus. + + + +Authors: +-------- + Olivier Andrieu + Philip Blundell + Anders Carlsson + Kristian Hogsberg + Alex Larsson + Michael Meeks + Seth Nickell + Havoc Pennington + Harri Porten + Matthew Rickard + Zack Rusin + Joe Shaw + Colin Walters + David Zeuthen + +%prep +%setup -n dbus-tqt-%{version} -q +#%patch0 -p0 +#%patch1 -p0 + +%build +RPM_OPT_FLAGS="${RPM_OPT_FLAGS} -fstack-protector -fno-strict-aliasing -fPIC" +export CFLAGS="${RPM_OPT_FLAGS}" +export CXXFLAGS="${RPM_OPT_FLAGS}" +mkdir build +cd build + cmake -DCMAKE_SKIP_RPATH=ON \\\ + -DCMAKE_INSTALL_PREFIX=%{_prefix} \\\ + -DCMAKE_INSTALL_LIBDIR:PATH=%{_libdir} \\\ +      -DINCLUDE_INSTALL_DIR:PATH=%{_includedir} \\\ + -DLIB_INSTALL_DIR:PATH=%{_libdir} \\\ + -DLIBEXEC_INSTALL_DIR:PATH=%{_libexecdir} \\\ + -DSYSCONF_INSTALL_DIR:PATH=%{_sysconfdir} \\\ + -DCMAKE_VERBOSE_MAKEFILE=ON \\\ +      -DQT_LIBRARY_DIRS=/usr/lib/qt3/%{_lib} \\\ +      -DQT_INCLUDE_DIRS=/usr/lib/qt3/include \\\ + -DPKGCONFIG_INSTALL_DIR=%{_libdir}/pkgconfig \\\ + -DMAN_INSTALL_DIR=%{_mandir} \ + ../ +make + +%install +cd build +make DESTDIR=%{buildroot} install + +%post +%{run_ldconfig} + +%postun +%{run_ldconfig} + +%clean +%{__rm} -rf %{buildroot} + +%files +%defattr(-, root, root) +%{_libdir}/libdbus-tqt-1.so.0* + +%files devel +%defattr(-, root, root) +%dir %{_includedir}/dbus-1.0 +%dir %{_includedir}/dbus-1.0/dbus +%{_includedir}/dbus-1.0/dbus/connection.h +%{_includedir}/dbus-1.0/dbus/dbus-qt.h +%{_includedir}/dbus-1.0/dbus/message.h +%{_includedir}/dbus-1.0/dbus/server.h +%{_libdir}/libdbus-tqt-1.la +%{_libdir}/libdbus-tqt-1.so +%{_libdir}/pkgconfig/dbus-tqt.pc + +%changelog diff --git a/opensuse/core/libtqt4/.project b/opensuse/core/libtqt4/.project new file mode 100644 index 000000000..fcebb9b05 --- /dev/null +++ b/opensuse/core/libtqt4/.project @@ -0,0 +1,12 @@ + + + libtqt4 + + + + + + + org.eclipse.linuxtools.rpm.core.rpmnature + + diff --git a/opensuse/core/libtqt4/libtqt4.changes b/opensuse/core/libtqt4/libtqt4.changes new file mode 100644 index 000000000..f27210b31 --- /dev/null +++ b/opensuse/core/libtqt4/libtqt4.changes @@ -0,0 +1,11 @@ +------------------------------------------------------------------- +Sat Aug 20 22:47:41 UTC 2011 - rxu@lincomlinux.org + +- remove the tqtinterface subpackage: it belongs in -devel +- add a shebang to convert_qt_tqt1 + +------------------------------------------------------------------- +Thu Aug 11 02:59:00 UTC 2011 - rxu@lincomlinux.org + +- initial creation libtqt4 + diff --git a/opensuse/core/libtqt4/libtqt4.spec b/opensuse/core/libtqt4/libtqt4.spec new file mode 100644 index 000000000..9108235bc --- /dev/null +++ b/opensuse/core/libtqt4/libtqt4.spec @@ -0,0 +1,173 @@ +# +# spec file for package tqtinterface +# +# Copyright (c) 2011 the Trinity Project (opensuse). +# +# All modifications and additions to the file contributed by third parties +# remain the property of their copyright owners, unless otherwise agreed +# upon. The license for this file, and modifications and additions to the +# file, is the same license as for the pristine package itself (unless the +# license for the pristine package is not an Open Source License, in which +# case the license is the MIT License). An "Open Source License" is a +# license that conforms to the Open Source Definition (Version 1.9) +# published by the Open Source Initiative. + +# Please submit bugfixes or comments via http://bugs.trinitydesktop.org/ +# + +# norootforbuild + +Name: libtqt4 +License: GPLv2+ +Group: Graphical Desktop/TDE +Summary: Interface and abstraction library for Qt and Trinity +Version: 3.5.12.99 +Release: 1 +Source0: tqtinterface-%{version}.tar.bz2 +URL: http://www.trinitydesktop.org/ + +BuildRoot: %{_tmppath}/%{name}-%{version}-build + +%define with_qt3 1 +%define with_qt4 0 + +%if %{with_qt3} +BuildRequires: qt3-devel >= 3.3.8c +Requires: qt3 >= 3.3.8c +%endif + +%if %{with_qt4} +BuildRequires: libqt4-devel >= 4.7.0 +Requires: libqt4-x11 >= 4.7.0 +%endif + +BuildRequires: cmake +BuildRequires: pkgconfig +BuildRequires: libtool +BuildRequires: gcc-c++ + +%description +This package includes libraries that abstract the underlying Qt system +from the actual Trinity code, allowing easy, complete upgrades to new +versions of Qt. + +It also contains various functions that have been removed from newer +versions of Qt, but are completely portable and isolated from other +APIs such as Xorg. This allows the Trinity project to efficiently +perform certain operations that are infeasible or unneccessarily +difficult when using pure Qt4 or above. + +Authors: +-------- + Timothy Pearson +    Robert Xu +    Tim Williams +    Serghei Amelian + +%package devel +Summary: TQtinterface header files +Group: Graphical Desktop/TDE +Requires: libtqt4 = %{version} +%if %{with_qt3} +Requires: qt3-devel >= 3.3.8c +%endif +%if %{with_qt4} +Requires: libqt4-devel >= 4.7.0 +%endif +%description devel +This package contains Trinity specific window options and commands. +You need this package to compile Trinity modules. (TQT headers) + + +Authors: +-------- + Timothy Pearson +    Robert Xu +    Tim Williams +    Serghei Amelian + + +%prep +%setup -qn tqtinterface-%{version} + +%build +CFLAGS="${CFLAGS:-%optflags}" ; export CFLAGS ; +CXXFLAGS="${CXXFLAGS:-%optflags}" ; export CXXFLAGS ; +FFLAGS="${FFLAGS:-%optflags}" ; export FFLAGS ; +mkdir build +cd build +cmake \ + -DCMAKE_VERBOSE_MAKEFILE=ON \ + -DCMAKE_INSTALL_PREFIX:PATH=%{_prefix} \ + -DCMAKE_INSTALL_LIBDIR:PATH=%{_libdir} \ + -DINCLUDE_INSTALL_DIR:PATH=%{_includedir} \ + -DLIB_INSTALL_DIR:PATH=%{_libdir} \ + -DSYSCONF_INSTALL_DIR:PATH=%{_sysconfdir} \ + -DSHARE_INSTALL_PREFIX:PATH=%{_datadir} \ +%if "%{?_lib}" == "lib64" + -DLIB_SUFFIX=64 \ +%endif + -DBUILD_SHARED_LIBS:BOOL=ON \ +%if %{with_qt3} + -DQT_VERSION=3 \ +%endif +%if %{with_qt4} + -DQT_VERSION=4 \ +%endif + -DQT_LIBRARY_DIRS=/usr/lib/qt3/%{_lib} \ + -DQT_INCLUDE_DIRS=/usr/lib/qt3/include \ + -DPKGCONFIG_INSTALL_DIR=%{_libdir}/pkgconfig \ + ../ + +make %{?_smp_mflags} VERBOSE=1 + +%install +cd build +make DESTDIR=%{buildroot} install +rm -rf %{buildroot}/%{_libdir}/*.la + +# What is this? Leftovers?! +rm -rf %{buildroot}/%{_libdir}/debug + +# Shebang, please. +echo "#!/bin/bash" > %{buildroot}%{_bindir}/convert_qt_tqt1.new +cat %{buildroot}%{_bindir}/convert_qt_tqt1 >> %{buildroot}%{_bindir}/convert_qt_tqt1.new +rm -f %{buildroot}%{_bindir}/convert_qt_tqt1 +mv -v %{buildroot}%{_bindir}/convert_qt_tqt1.new %{buildroot}%{_bindir}/convert_qt_tqt1 +chmod +x %{buildroot}%{_bindir}/convert_qt_tqt1 + + +%clean +rm -rf $RPM_BUILD_ROOT + +%post -p /sbin/ldconfig + +%postun -p /sbin/ldconfig + +%files +%defattr(-,root,root,755) +%{_libdir}/libtqt.so.* +%{_libdir}/libtqassistantclient.so.* + +%files devel +%defattr(-,root,root,755) +%dir %{_includedir}/Qt +%{_includedir}/Qt/q*.h +%{_includedir}/tq*.h +%{_libdir}/pkgconfig/tqt.pc +%{_libdir}/libtqt.so +%{_libdir}/libtqassistantclient.so +%{_bindir}/convert_qt_tqt1 +%{_bindir}/convert_qt_tqt2 +%{_bindir}/convert_qt_tqt3 +%{_bindir}/dcopidl-tqt +%{_bindir}/dcopidl2cpp-tqt +%{_bindir}/dcopidlng-tqt +%{_bindir}/mcopidl-tqt +%{_bindir}/moc-tqt +%{_bindir}/tmoc +%{_bindir}/tqt-replace +%{_bindir}/tqt-replace-stream +%{_bindir}/uic-tqt + +%changelog diff --git a/opensuse/core/qt3/.project b/opensuse/core/qt3/.project new file mode 100644 index 000000000..c1be4d5ba --- /dev/null +++ b/opensuse/core/qt3/.project @@ -0,0 +1,12 @@ + + + qt3 + + + + + + + org.eclipse.linuxtools.rpm.core.rpmnature + + diff --git a/opensuse/core/tde-filesystem/.project b/opensuse/core/tde-filesystem/.project new file mode 100644 index 000000000..f5ebb3417 --- /dev/null +++ b/opensuse/core/tde-filesystem/.project @@ -0,0 +1,12 @@ + + + tde-filesystem + + + + + + + org.eclipse.linuxtools.rpm.core.rpmnature + + diff --git a/opensuse/core/tde-filesystem/COPYING b/opensuse/core/tde-filesystem/COPYING new file mode 100644 index 000000000..f67590d5b --- /dev/null +++ b/opensuse/core/tde-filesystem/COPYING @@ -0,0 +1,502 @@ +          GNU LESSER GENERAL PUBLIC LICENSE +               Version 2.1, February 1999 +  + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. +  +[This is the first released version of the Lesser GPL.  It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] +  +                Preamble +  +  The licenses for most software are designed to take away your +freedom to share and change it.  By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. +  +  This license, the Lesser General Public License, applies to some +specially designated software packages--typically libraries--of the +Free Software Foundation and other authors who decide to use it.  You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations below. +  +  When we speak of free software, we are referring to freedom of use, +not price.  Our General Public Licenses are designed to make sure that +you have the freedom to distribute copies of free software (and charge +for this service if you wish); that you receive source code or can get +it if you want it; that you can change the software and use pieces of +it in new free programs; and that you are informed that you can do +these things. +  +  To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights.  These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. +  +  For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you.  You must make sure that they, too, receive or can get the source +code.  If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it.  And you must show them these terms so they know their rights. +  +  We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. +  +  To protect each distributor, we want to make it very clear that +there is no warranty for the free library.  Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. +  +  Finally, software patents pose a constant threat to the existence of +any free program.  We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder.  Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. +  +  Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License.  This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License.  We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. +  +  When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library.  The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom.  The Lesser General +Public License permits more lax criteria for linking other code with +the library. +  +  We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License.  It also provides other free software developers Less +of an advantage over competing non-free programs.  These disadvantages +are the reason we use the ordinary General Public License for many +libraries.  However, the Lesser license provides advantages in certain +special circumstances. +  +  For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it becomes +a de-facto standard.  To achieve this, non-free programs must be +allowed to use the library.  A more frequent case is that a free +library does the same job as widely used non-free libraries.  In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. +  +  In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software.  For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. +  +  Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. +  +  The precise terms and conditions for copying, distribution and +modification follow.  Pay close attention to the difference between a +"work based on the library" and a "work that uses the library".  The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. +  +          GNU LESSER GENERAL PUBLIC LICENSE +   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION +  +  0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". +  +  A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. +  +  The "Library", below, refers to any such software library or work +which has been distributed under these terms.  A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language.  (Hereinafter, translation is +included without limitation in the term "modification".) +  +  "Source code" for a work means the preferred form of the work for +making modifications to it.  For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control compilation +and installation of the library. +  +  Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope.  The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it).  Whether that is true depends on what the Library does +and what the program that uses the Library does. +    +  1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. +  +  You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. +  +  2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: +  +    a) The modified work must itself be a software library. +  +    b) You must cause the files modified to carry prominent notices +    stating that you changed the files and the date of any change. +  +    c) You must cause the whole of the work to be licensed at no +    charge to all third parties under the terms of this License. +  +    d) If a facility in the modified Library refers to a function or a +    table of data to be supplied by an application program that uses +    the facility, other than as an argument passed when the facility +    is invoked, then you must make a good faith effort to ensure that, +    in the event an application does not supply such function or +    table, the facility still operates, and performs whatever part of +    its purpose remains meaningful. +  +    (For example, a function in a library to compute square roots has +    a purpose that is entirely well-defined independent of the +    application.  Therefore, Subsection 2d requires that any +    application-supplied function or table used by this function must +    be optional: if the application does not supply it, the square +    root function must still compute square roots.) +  +These requirements apply to the modified work as a whole.  If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works.  But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. +  +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. +  +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. +  +  3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library.  To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License.  (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.)  Do not make any other change in +these notices. +  +  Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. +  +  This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. +  +  4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. +  +  If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. +  +  5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library".  Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. +  +  However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library".  The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. +  +  When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library.  The +threshold for this to be true is not precisely defined by law. +  +  If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work.  (Executables containing this object code plus portions of the +Library will still fall under Section 6.) +  +  Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. +  +  6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. +  +  You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License.  You must supply a copy of this License.  If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License.  Also, you must do one +of these things: +  +    a) Accompany the work with the complete corresponding +    machine-readable source code for the Library including whatever +    changes were used in the work (which must be distributed under +    Sections 1 and 2 above); and, if the work is an executable linked +    with the Library, with the complete machine-readable "work that +    uses the Library", as object code and/or source code, so that the +    user can modify the Library and then relink to produce a modified +    executable containing the modified Library.  (It is understood +    that the user who changes the contents of definitions files in the +    Library will not necessarily be able to recompile the application +    to use the modified definitions.) +  +    b) Use a suitable shared library mechanism for linking with the +    Library.  A suitable mechanism is one that (1) uses at run time a +    copy of the library already present on the user's computer system, +    rather than copying library functions into the executable, and (2) +    will operate properly with a modified version of the library, if +    the user installs one, as long as the modified version is +    interface-compatible with the version that the work was made with. +  +    c) Accompany the work with a written offer, valid for at +    least three years, to give the same user the materials +    specified in Subsection 6a, above, for a charge no more +    than the cost of performing this distribution. +  +    d) If distribution of the work is made by offering access to copy +    from a designated place, offer equivalent access to copy the above +    specified materials from the same place. +  +    e) Verify that the user has already received a copy of these +    materials or that you have already sent this user a copy. +  +  For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it.  However, as a special exception, +the materials to be distributed need not include anything that is +normally distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. +  +  It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system.  Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. +  +  7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: +  +    a) Accompany the combined library with a copy of the same work +    based on the Library, uncombined with any other library +    facilities.  This must be distributed under the terms of the +    Sections above. +  +    b) Give prominent notice with the combined library of the fact +    that part of it is a work based on the Library, and explaining +    where to find the accompanying uncombined form of the same work. +  +  8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License.  Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License.  However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. +  +  9. You are not required to accept this License, since you have not +signed it.  However, nothing else grants you permission to modify or +distribute the Library or its derivative works.  These actions are +prohibited by law if you do not accept this License.  Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. +  +  10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions.  You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties with +this License. +  +  11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License.  If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all.  For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. +  +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. +  +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices.  Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. +  +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. +  +  12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may add +an explicit geographical distribution limitation excluding those countries, +so that distribution is permitted only in or among countries not thus +excluded.  In such case, this License incorporates the limitation as if +written in the body of this License. +  +  13. The Free Software Foundation may publish revised and/or new +versions of the Lesser General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. +  +Each version is given a distinguishing version number.  If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation.  If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. +  +  14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission.  For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this.  Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. +  +                NO WARRANTY +  +  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. +  +  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. +  +             END OF TERMS AND CONDITIONS +  +           How to Apply These Terms to Your New Libraries +  +  If you develop a new library, and you want it to be of the greatest +possible use to the public, we recommend making it free software that +everyone can redistribute and change.  You can do so by permitting +redistribution under these terms (or, alternatively, under the terms of the +ordinary General Public License). +  +  To apply these terms, attach the following notices to the library.  It is +safest to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. +  +     +    Copyright (C)   +  +    This library is free software; you can redistribute it and/or +    modify it under the terms of the GNU Lesser General Public +    License as published by the Free Software Foundation; either +    version 2.1 of the License, or (at your option) any later version. +  +    This library is distributed in the hope that it will be useful, +    but WITHOUT ANY WARRANTY; without even the implied warranty of +    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU +    Lesser General Public License for more details. +  +    You should have received a copy of the GNU Lesser General Public +    License along with this library; if not, write to the Free Software +    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA +  +Also add information on how to contact you by electronic and paper mail. +  +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the library, if +necessary.  Here is a sample; alter the names: +  +  Yoyodyne, Inc., hereby disclaims all copyright interest in the +  library `Frob' (a library for tweaking knobs) written by James Random Hacker. +  +  , 1 April 1990 +  Ty Coon, President of Vice +  +That's all there is to it! diff --git a/opensuse/core/tde-filesystem/macros.tde b/opensuse/core/tde-filesystem/macros.tde new file mode 100644 index 000000000..b488ea8e7 --- /dev/null +++ b/opensuse/core/tde-filesystem/macros.tde @@ -0,0 +1,150 @@ +# +# Disclaimer: this was taken from macros.kde4. Some items +# are not applicable to Trinity, but are still here. +# NEW: this obsoletes common_options from kdelibs3 + +%_tde_prefix /opt/tde +%_tde_bindir %{_tde_prefix}/bin +%_tde_libdir %{_tde_prefix}/%{_lib} +%_tde_modulesdir %{_tde_libdir}/tde +%_tde_libexecdir %{_tde_libdir}/tde/libexec +%_tde_sysconfdir %{_sysconfdir} +%_tde_iconsdir %{_tde_prefix}/share/icons +%_tde_sbindir %{_tde_prefix}/sbin +%_tde_sharedir %{_tde_prefix}/share +%_tde_datadir %{_tde_sharedir}/apps +%_tde_appdir %{_tde_datadir} +%_tde_applicationsdir %{_tde_sharedir}/applications +%_tde_appsdir %{_tde_sharedir}/applnk +%_tde_configdir %{_tde_sharedir}/config +%_tde_configkcfgdir %{_tde_sharedir}/config.kcfg +%_tde_servicesdir %{_tde_sharedir}/services +%_tde_servicetypesdir %{_tde_sharedir}/servicetypes +%_tde_includedir %{_tde_prefix}/include +%_tde_docdir %{_tde_sharedir}/doc/ +%_tde_htmldir %{_tde_sharedir}/doc/HTML +%_tde_wallpapersdir %{_tde_sharedir}/wallpapers +%_tde_icondir %{_tde_sharedir}/icons +%_tde_sounddir %{_tde_sharedir}/sounds +%_tde_locale %{_tde_sharedir}/locale +%_tde_mimedir %{_tde_sharedir}/mimelnk +%_tde_styledir %{_tde_libdir}/tde/plugins/styles +%_tde_widgetdir %{_tde_libdir}/tde/plugins/designer + +# these are for backwards compatibility +%_kde3_prefix %{_tde_prefix} +%_kde3_libdir %{_tde_libdir} +%_kde3_share_dir %{_tde_sharedir} +%_kde3_config_dir %{_tde_configdir} +%_kde3_html_dir %{_tde_htmldir} +%_tde_modules %{_tde_modulesdir} +%_tde_servicetypes %{_tde_servicetypesdir} + +%_tde_platform_version 3.5.13 + +%tde_runtime_requires Requires: tdebase3-runtime >= %_tde_platform_version qt3 >= 3.3.8c + +%_tde_build_type release + +%cmake_tde(d:) \ + export CFLAGS=$RPM_OPT_FLAGS \ + export CXXFLAGS=$RPM_OPT_FLAGS \ + export LDFLAGS="-Wl,-Bsymbolic-functions $LDFLAGS" \ + _tde_libsuffix=$(echo %_lib | cut -b4-) \ + bdir=. \ + %{-d:dir=%{-d*} \ + mkdir $dir \ + cd $dir \ + bdir=.. } \ + cmake -DCMAKE_SKIP_RPATH=ON \\\ + -DCMAKE_INSTALL_PREFIX=%{_tde_prefix} \\\ + -DCMAKE_INSTALL_LIBDIR:PATH=%{_tde_libdir} \\\ + -DINCLUDE_INSTALL_DIR:PATH=%{_tde_includedir} \\\ + -DLIB_INSTALL_DIR:PATH=%{_tde_libdir} \\\ + -DLIBEXEC_INSTALL_DIR:PATH=%{_tde_libexecdir} \\\ + -DLIB_SUFFIX="$_tde_libsuffix" \\\ + -DSYSCONF_INSTALL_DIR:PATH=%{_sysconfdir} \\\ + -DCMAKE_BUILD_TYPE=%{_tde_build_type} \\\ + -DCMAKE_VERBOSE_MAKEFILE=ON \\\ + -DQT_LIBRARY_DIRS=/usr/lib/qt3/%{_lib} \\\ + -DQT_INCLUDE_DIRS=/usr/lib/qt3/include \\\ + -DPKGCONFIG_INSTALL_DIR=%{_libdir}/pkgconfig \\\ + -DMAN_INSTALL_DIR=%{_mandir} \\\ + -DINFO_INSTALL_DIR=%{_infodir} \\\ + $bdir %* \ + if [ "$bdir" == ".." ]; then \ + cd .. \ + fi \ +%{nil} + +%make_tde(d:) \ + bdir=. \ + %{-d:dir=%{-d*} \ + cd $dir \ + bdir=.. } \ + make %{?_smp_mflags} VERBOSE=1 \ + if [ "$bdir" == ".." ]; then \ + cd .. \ + fi \ +%{nil} + +%makeinstall_tde(d:) \ + bdir=. \ + %{-d:dir=%{-d*} \ + cd $dir \ + bdir=.. } \ + make DESTDIR=%{?buildroot:%{buildroot}} install VERBOSE=1 \ + if [ "$bdir" == ".." ]; then \ + cd .. \ + fi \ +%{nil} + +%tde_post_install \ + # remove not needed development files + rm -f $RPM_BUILD_ROOT/%{_tde_libdir}/libkdeinit_*.la \ + # not worth the hassle + rm -rf $RPM_BUILD_ROOT/%{_tde_icondir}/locolor \ + # move icons in one theme - prefering hicolor + d="$RPM_BUILD_ROOT/%{_tde_icondir}/crystalsvg" \ + if [ -d "$d" -a ! -e "$d/index.theme" ]; then \ + find "$d" -type f | while read src; do \ + dest="${src/\/crystalsvg\///hicolor/}" \ + dir="${dest%/*}" \ + mkdir -p "$dir" \ + mv "$src" "$dest" \ + done \ + fi \ + # we do this 3 times as there is a 3 fold hierarchy + if [ -d $RPM_BUILD_ROOT/%{_tde_icondir} ]; then \ + for i in `seq 1 3`; do \ + find $RPM_BUILD_ROOT/%{_tde_icondir} -type d -exec rmdir -v --ignore-fail-on-non-empty -- {} \; || true \ + done \ + fi \ + if [ -d $RPM_BUILD_ROOT/%{_tde_locale}/sr@Latn ]; then \ + mv $RPM_BUILD_ROOT/%{_tde_locale}/sr@Latn $RPM_BUILD_ROOT/%{_tde_locale}/sr@latin \ + fi \ + if test -e /usr/lib/rpm/suse_update_desktop_file.sh; then \ + distribution='' \ + if test -f $HOME/.rpmmacros && test -d /usr/src/packages/SRPMS; then \ + distribution=`grep ^%distribution $HOME/.rpmmacros | cut '-d ' -f2` \ + fi \ + find $RPM_BUILD_ROOT/opt/kde3/share \\\ + -name '*.desktop' 2> /dev/null | while read file; do \ + test -r "$file" || continue \ + grep -q "^X-SuSE-translate=" "$file" && continue \ + case "$file" in \ + */.hidden/*) \ + /usr/lib/rpm/suse_update_desktop_file.sh -n "$file" \ + ;; \ + *) \ + if test -n "$distribution"; then \ + /usr/lib/rpm/suse_update_desktop_file.sh --project "$distribution" --basedir /usr/src/packages/SRPMS "$file" \ + else \ + /usr/lib/rpm/suse_update_desktop_file.sh "$file" \ + fi \ + ;; \ + esac \ + done \ + fi \ +%{nil} + diff --git a/opensuse/core/tde-filesystem/tde-filesystem.changes b/opensuse/core/tde-filesystem/tde-filesystem.changes new file mode 100644 index 000000000..c63ff71b2 --- /dev/null +++ b/opensuse/core/tde-filesystem/tde-filesystem.changes @@ -0,0 +1,5 @@ +------------------------------------------------------------------- +Tue Aug 9 21:06:07 UTC 2011 - rxu@lincomlinux.org + +- initial package + diff --git a/opensuse/core/tde-filesystem/tde-filesystem.spec b/opensuse/core/tde-filesystem/tde-filesystem.spec new file mode 100644 index 000000000..06fa6b5fe --- /dev/null +++ b/opensuse/core/tde-filesystem/tde-filesystem.spec @@ -0,0 +1,61 @@ +# +# spec file for package tde-filesystem +# +# Copyright (c) 2011 the Trinity Project (opensuse). +# +# All modifications and additions to the file contributed by third parties +# remain the property of their copyright owners, unless otherwise agreed +# upon. The license for this file, and modifications and additions to the +# file, is the same license as for the pristine package itself (unless the +# license for the pristine package is not an Open Source License, in which +# case the license is the MIT License). An "Open Source License" is a +# license that conforms to the Open Source Definition (Version 1.9) +# published by the Open Source Initiative. + +# Please submit bugfixes or comments via http://bugs.trinitydesktop.org/ +# + +# norootforbuild + + +Name: tde-filesystem +Url: http://www.trinitydesktop.org/ +Version: 3.5.13 +Release: 1 +License: LGPLv2.1+ +Group: System/Fhs +BuildRoot: %{_tmppath}/%{name}-%{version}-build +Summary: Trinity Directory Layout +Source0: macros.tde +Source1: COPYING +BuildArch: noarch +# Spare Dependency that we want tde-filesystem to pull in. +Requires: cmake + +%description +This package installs the Trinity directory structure. + + + +Authors: +-------- + The Trinity Project + +%prep + +%build + +%install + install -D -m644 %{SOURCE0} $RPM_BUILD_ROOT/etc/rpm/macros.tde + install -D -m644 %{SOURCE1} $RPM_BUILD_ROOT//usr/share/doc/packages/tde-filesystem/COPYING + +%clean +rm -rf "$RPM_BUILD_ROOT" + +%files +%defattr(-,root,root) +%config /etc/rpm/macros.tde +%dir /usr/share/doc/packages/tde-filesystem +/usr/share/doc/packages/tde-filesystem/COPYING + +%changelog diff --git a/opensuse/core/tdeaccessibility/.project b/opensuse/core/tdeaccessibility/.project new file mode 100644 index 000000000..0880e607d --- /dev/null +++ b/opensuse/core/tdeaccessibility/.project @@ -0,0 +1,12 @@ + + + tdeaccessibility + + + + + + + org.eclipse.linuxtools.rpm.core.rpmnature + + diff --git a/opensuse/core/tdeaddons/.project b/opensuse/core/tdeaddons/.project new file mode 100644 index 000000000..908aebf4d --- /dev/null +++ b/opensuse/core/tdeaddons/.project @@ -0,0 +1,12 @@ + + + tdeaddons + + + + + + + org.eclipse.linuxtools.rpm.core.rpmnature + + diff --git a/opensuse/core/tdeartwork/.project b/opensuse/core/tdeartwork/.project new file mode 100644 index 000000000..d0f97323d --- /dev/null +++ b/opensuse/core/tdeartwork/.project @@ -0,0 +1,12 @@ + + + tdeartwork + + + + + + + org.eclipse.linuxtools.rpm.core.rpmnature + + diff --git a/opensuse/core/tdebase/.project b/opensuse/core/tdebase/.project new file mode 100644 index 000000000..27414a33c --- /dev/null +++ b/opensuse/core/tdebase/.project @@ -0,0 +1,12 @@ + + + tdebase + + + + + + + org.eclipse.linuxtools.rpm.core.rpmnature + + diff --git a/opensuse/core/tdebase/3_5_BRANCH.diff b/opensuse/core/tdebase/3_5_BRANCH.diff new file mode 100644 index 000000000..bff4be17d --- /dev/null +++ b/opensuse/core/tdebase/3_5_BRANCH.diff @@ -0,0 +1,1176 @@ +package: kdebase-3.5.10.tar.bz2 +kdemod: kdebase +Index: BRANCH_STATUS +=================================================================== +--- /dev/null ++++ BRANCH_STATUS +@@ -0,0 +1,2 @@ ++current HEAD: 865247 ++svn di between //tags/KDE/3.5.10/kdebase and //branches/KDE/3.5/kdebase +Index: kcontrol/background/bgrender.cpp +=================================================================== +--- kcontrol/background/bgrender.cpp.orig ++++ kcontrol/background/bgrender.cpp +@@ -1163,9 +1163,8 @@ void KVirtualBGRenderer::desktopResized( + m_pPixmap = new QPixmap(m_size); + m_pPixmap->fill(Qt::black); + } +- +- for (unsigned i=0; idesktopResized(); ++ ++ initRenderers(); + } + + +Index: kcontrol/info/opengl.cpp +=================================================================== +--- kcontrol/info/opengl.cpp.orig ++++ kcontrol/info/opengl.cpp +@@ -608,7 +608,6 @@ static QListViewItem *get_gl_info(Displa + } + else { + kdDebug() << "Error: glXMakeCurrent failed\n"; +- glXDestroyContext(dpy, ctx); + } + + glXDestroyContext(dpy, ctx); +Index: kicker/taskbar/taskbar.cpp +=================================================================== +--- kicker/taskbar/taskbar.cpp.orig ++++ kicker/taskbar/taskbar.cpp +@@ -61,8 +61,6 @@ TaskBar::TaskBar( QWidget *parent, const + m_textShadowEngine(0), + m_ignoreUpdates(false) + { +- setFrameStyle( NoFrame ); +- + arrowType = LeftArrow; + blocklayout = true; + +@@ -81,6 +79,8 @@ TaskBar::TaskBar( QWidget *parent, const + connect(&m_relayoutTimer, SIGNAL(timeout()), + this, SLOT(reLayout())); + ++ connect(this, SIGNAL(contentsMoving(int, int)), SLOT(setBackground())); ++ + // connect manager + connect(TaskManager::the(), SIGNAL(taskAdded(Task::Ptr)), + this, SLOT(add(Task::Ptr))); +@@ -647,7 +647,7 @@ void TaskBar::reLayoutEventually() + + if (!blocklayout && !m_ignoreUpdates) + { +- m_relayoutTimer.start(100, true); ++ m_relayoutTimer.start(25, true); + } + } + +@@ -814,24 +814,16 @@ void TaskBar::reLayout() + QTimer::singleShot(100, this, SLOT(publishIconGeometry())); + } + +-void TaskBar::viewportResizeEvent( QResizeEvent* e ) +-{ +- Panner::viewportResizeEvent(e); +- setViewportBackground(); +-} +- + void TaskBar::setViewportBackground() + { + const QPixmap *bg = parentWidget()->backgroundPixmap(); + +- viewport()->unsetPalette(); +- + if (bg) + { + QPixmap pm(parentWidget()->size()); + pm.fill(parentWidget(), pos() + viewport()->pos()); + viewport()->setPaletteBackgroundPixmap(pm); +- viewport()->setBackgroundOrigin( WidgetOrigin ); ++ viewport()->setBackgroundOrigin(WidgetOrigin); + } + else + viewport()->setPaletteBackgroundColor(paletteBackgroundColor()); +Index: kicker/taskbar/taskbar.h +=================================================================== +--- kicker/taskbar/taskbar.h.orig ++++ kicker/taskbar/taskbar.h +@@ -63,12 +63,11 @@ public: + + QImage* blendGradient(const QSize& size); + +- void setBackground(); +- + KTextShadowEngine *textShadowEngine(); + + public slots: + void configure(); ++ void setBackground(); + + signals: + void containerCountChanged(); +@@ -98,7 +97,6 @@ protected: + void viewportMouseReleaseEvent( QMouseEvent* ); + void viewportMouseDoubleClickEvent( QMouseEvent* ); + void viewportMouseMoveEvent( QMouseEvent* ); +- void viewportResizeEvent( QResizeEvent * ); + void wheelEvent(QWheelEvent*); + void propagateMouseEvent( QMouseEvent* ); + void resizeEvent( QResizeEvent* ); +Index: kicker/libkicker/panner.cpp +=================================================================== +--- kicker/libkicker/panner.cpp.orig ++++ kicker/libkicker/panner.cpp +@@ -35,28 +35,28 @@ CONNECTION WITH THE SOFTWARE OR THE USE + #include "panner.h" + #include "panner.moc" + +- + Panner::Panner( QWidget* parent, const char* name ) +- : QScrollView( parent, name ), ++ : QWidget( parent, name ), + _luSB(0), +- _rdSB(0) ++ _rdSB(0), ++ _cwidth(0), _cheight(0), ++ _cx(0), _cy(0) + { + KGlobal::locale()->insertCatalogue("libkicker"); + setBackgroundOrigin( AncestorOrigin ); + + _updateScrollButtonsTimer = new QTimer(this); + connect(_updateScrollButtonsTimer, SIGNAL(timeout()), this, SLOT(reallyUpdateScrollButtons())); +- +- setResizePolicy(Manual); +- setVScrollBarMode( QScrollView::AlwaysOff ); +- setHScrollBarMode( QScrollView::AlwaysOff ); +- +- viewport()->setBackgroundMode( PaletteBackground ); +- viewport()->setBackgroundOrigin( AncestorOrigin ); + ++ _clipper = new QWidget(this); ++ _clipper->setBackgroundOrigin(AncestorOrigin); ++ _clipper->installEventFilter( this ); ++ _viewport = new QWidget(_clipper); ++ _viewport->setBackgroundOrigin(AncestorOrigin); ++ + // layout + _layout = new QBoxLayout(this, QBoxLayout::LeftToRight); +- _layout->addWidget(viewport(), 1); ++ _layout->addWidget(_clipper, 1); + setOrientation(Horizontal); + } + +@@ -64,6 +64,37 @@ Panner::~Panner() + { + } + ++void Panner::createScrollButtons() ++{ ++ if (_luSB) ++ { ++ return; ++ } ++ ++ // left/up scroll button ++ _luSB = new SimpleArrowButton(this); ++ _luSB->installEventFilter(this); ++ //_luSB->setAutoRepeat(true); ++ _luSB->setMinimumSize(12, 12); ++ _luSB->hide(); ++ _layout->addWidget(_luSB); ++ connect(_luSB, SIGNAL(pressed()), SLOT(startScrollLeftUp())); ++ connect(_luSB, SIGNAL(released()), SLOT(stopScroll())); ++ ++ // right/down scroll button ++ _rdSB = new SimpleArrowButton(this); ++ _rdSB->installEventFilter(this); ++ //_rdSB->setAutoRepeat(true); ++ _rdSB->setMinimumSize(12, 12); ++ _rdSB->hide(); ++ _layout->addWidget(_rdSB); ++ connect(_rdSB, SIGNAL(pressed()), SLOT(startScrollRightDown())); ++ connect(_rdSB, SIGNAL(released()), SLOT(stopScroll())); ++ ++ // set up the buttons ++ setupButtons(); ++} ++ + void Panner::setupButtons() + { + if (orientation() == Horizontal) +@@ -110,55 +141,54 @@ void Panner::setOrientation(Orientation + reallyUpdateScrollButtons(); + } + +-void Panner::resizeEvent( QResizeEvent* e ) ++void Panner::resizeEvent( QResizeEvent* ) + { +- QScrollView::resizeEvent( e ); +- updateScrollButtons(); ++ //QScrollView::resizeEvent( e ); ++ //updateScrollButtons(); + } + + void Panner::scrollRightDown() + { + if(orientation() == Horizontal) // scroll right +- scrollBy( 40, 0 ); ++ scrollBy( _step, 0 ); + else // scroll down +- scrollBy( 0, 40 ); ++ scrollBy( 0, _step ); ++ if (_step < 64) ++ _step++; + } + + void Panner::scrollLeftUp() + { + if(orientation() == Horizontal) // scroll left +- scrollBy( -40, 0 ); ++ scrollBy( -_step, 0 ); + else // scroll up +- scrollBy( 0, -40 ); ++ scrollBy( 0, -_step ); ++ if (_step < 64) ++ _step++; + } + +-void Panner::createScrollButtons() ++void Panner::startScrollRightDown() + { +- if (_luSB) +- { +- return; +- } +- +- // left/up scroll button +- _luSB = new SimpleArrowButton(this); +- _luSB->installEventFilter(this); +- _luSB->setAutoRepeat(true); +- _luSB->setMinimumSize(12, 12); +- _luSB->hide(); +- _layout->addWidget(_luSB); +- connect(_luSB, SIGNAL(clicked()), SLOT(scrollLeftUp())); ++ _scrollTimer = new QTimer(this); ++ connect(_scrollTimer, SIGNAL(timeout()), SLOT(scrollRightDown())); ++ _scrollTimer->start(50); ++ _step = 8; ++ scrollRightDown(); ++} + +- // right/down scroll button +- _rdSB = new SimpleArrowButton(this); +- _rdSB->installEventFilter(this); +- _rdSB->setAutoRepeat(true); +- _rdSB->setMinimumSize(12, 12); +- _rdSB->hide(); +- _layout->addWidget(_rdSB); +- connect(_rdSB, SIGNAL(clicked()), SLOT(scrollRightDown())); ++void Panner::startScrollLeftUp() ++{ ++ _scrollTimer = new QTimer(this); ++ connect(_scrollTimer, SIGNAL(timeout()), SLOT(scrollLeftUp())); ++ _scrollTimer->start(50); ++ _step = 8; ++ scrollLeftUp(); ++} + +- // set up the buttons +- setupButtons(); ++void Panner::stopScroll() ++{ ++ delete _scrollTimer; ++ _scrollTimer = 0; + } + + void Panner::reallyUpdateScrollButtons() +@@ -176,7 +206,7 @@ void Panner::reallyUpdateScrollButtons() + delta = contentsHeight() - height(); + } + +- if (delta > 1) ++ if (delta >= 1) + { + createScrollButtons(); + +@@ -184,21 +214,11 @@ void Panner::reallyUpdateScrollButtons() + // we need to do this every single time + _luSB->show(); + _rdSB->show(); +- +- if (orientation() == Horizontal) +- { +- setMargins(0, 0, _luSB->width() + _rdSB->width(), 0); +- } +- else +- { +- setMargins(0, 0, 0, _luSB->height() + _rdSB->height()); +- } + } + else if (_luSB && _luSB->isVisibleTo(this)) + { + _luSB->hide(); + _rdSB->hide(); +- setMargins(0, 0, 0, 0); + } + } + +@@ -207,8 +227,170 @@ void Panner::updateScrollButtons() + _updateScrollButtonsTimer->start(200, true); + } + ++void Panner::setContentsPos(int x, int y) ++{ ++ if (x < 0) ++ x = 0; ++ else if (x > (contentsWidth() - visibleWidth())) ++ x = contentsWidth() - visibleWidth(); ++ ++ if (y < 0) ++ y = 0; ++ else if (y > (contentsHeight() - visibleHeight())) ++ y = contentsHeight() - visibleHeight(); ++ ++ if (x == contentsX() && y == contentsY()) ++ return; ++ ++ _viewport->move(-x, -y); ++ emit contentsMoving(x, y); ++} ++ ++void Panner::scrollBy(int dx, int dy) ++{ ++ setContentsPos(contentsX() + dx, contentsY() + dy); ++} ++ + void Panner::resizeContents( int w, int h ) + { +- QScrollView::resizeContents( w, h ); ++ _viewport->resize(w, h); ++ setContentsPos(contentsX(), contentsY()); + updateScrollButtons(); + } ++ ++QPoint Panner::contentsToViewport( const QPoint& p ) const ++{ ++ return QPoint(p.x() - contentsX() - _clipper->x(), p.y() - contentsY() - _clipper->y()); ++} ++ ++QPoint Panner::viewportToContents( const QPoint& vp ) const ++{ ++ return QPoint(vp.x() + contentsX() + _clipper->x(), vp.y() + contentsY() + _clipper->y()); ++} ++ ++void Panner::contentsToViewport( int x, int y, int& vx, int& vy ) const ++{ ++ const QPoint v = contentsToViewport(QPoint(x,y)); ++ vx = v.x(); ++ vy = v.y(); ++} ++ ++void Panner::viewportToContents( int vx, int vy, int& x, int& y ) const ++{ ++ const QPoint c = viewportToContents(QPoint(vx,vy)); ++ x = c.x(); ++ y = c.y(); ++} ++ ++void Panner::ensureVisible( int x, int y ) ++{ ++ ensureVisible(x, y, 50, 50); ++} ++ ++void Panner::ensureVisible( int x, int y, int xmargin, int ymargin ) ++{ ++ int pw=visibleWidth(); ++ int ph=visibleHeight(); ++ ++ int cx=-contentsX(); ++ int cy=-contentsY(); ++ int cw=contentsWidth(); ++ int ch=contentsHeight(); ++ ++ if ( pw < xmargin*2 ) ++ xmargin=pw/2; ++ if ( ph < ymargin*2 ) ++ ymargin=ph/2; ++ ++ if ( cw <= pw ) { ++ xmargin=0; ++ cx=0; ++ } ++ if ( ch <= ph ) { ++ ymargin=0; ++ cy=0; ++ } ++ ++ if ( x < -cx+xmargin ) ++ cx = -x+xmargin; ++ else if ( x >= -cx+pw-xmargin ) ++ cx = -x+pw-xmargin; ++ ++ if ( y < -cy+ymargin ) ++ cy = -y+ymargin; ++ else if ( y >= -cy+ph-ymargin ) ++ cy = -y+ph-ymargin; ++ ++ if ( cx > 0 ) ++ cx=0; ++ else if ( cx < pw-cw && cw>pw ) ++ cx=pw-cw; ++ ++ if ( cy > 0 ) ++ cy=0; ++ else if ( cy < ph-ch && ch>ph ) ++ cy=ph-ch; ++ ++ setContentsPos( -cx, -cy ); ++} ++ ++bool Panner::eventFilter( QObject *obj, QEvent *e ) ++{ ++ if ( obj == _viewport || obj == _clipper ) ++ { ++ switch ( e->type() ) ++ { ++ case QEvent::Resize: ++ viewportResizeEvent((QResizeEvent *)e); ++ break; ++ case QEvent::MouseButtonPress: ++ viewportMousePressEvent( (QMouseEvent*)e ); ++ if ( ((QMouseEvent*)e)->isAccepted() ) ++ return true; ++ break; ++ case QEvent::MouseButtonRelease: ++ viewportMouseReleaseEvent( (QMouseEvent*)e ); ++ if ( ((QMouseEvent*)e)->isAccepted() ) ++ return true; ++ break; ++ case QEvent::MouseButtonDblClick: ++ viewportMouseDoubleClickEvent( (QMouseEvent*)e ); ++ if ( ((QMouseEvent*)e)->isAccepted() ) ++ return true; ++ break; ++ case QEvent::MouseMove: ++ viewportMouseMoveEvent( (QMouseEvent*)e ); ++ if ( ((QMouseEvent*)e)->isAccepted() ) ++ return true; ++ break; ++ default: ++ break; ++ } ++ } ++ ++ return QWidget::eventFilter( obj, e ); // always continue with standard event processing ++} ++ ++void Panner::viewportResizeEvent( QResizeEvent* ) ++{ ++} ++ ++void Panner::viewportMousePressEvent( QMouseEvent* e) ++{ ++ e->ignore(); ++} ++ ++void Panner::viewportMouseReleaseEvent( QMouseEvent* e ) ++{ ++ e->ignore(); ++} ++ ++void Panner::viewportMouseDoubleClickEvent( QMouseEvent* e ) ++{ ++ e->ignore(); ++} ++ ++void Panner::viewportMouseMoveEvent( QMouseEvent* e ) ++{ ++ e->ignore(); ++} +Index: kicker/libkicker/panner.h +=================================================================== +--- kicker/libkicker/panner.h.orig ++++ kicker/libkicker/panner.h +@@ -24,14 +24,14 @@ CONNECTION WITH THE SOFTWARE OR THE USE + #ifndef __panner_h__ + #define __panner_h__ + +-#include ++#include + + #include "simplebutton.h" + + class QBoxLayout; + class QTimer; + +-class KDE_EXPORT Panner : public QScrollView ++class KDE_EXPORT Panner : public QWidget + { + Q_OBJECT + +@@ -43,17 +43,55 @@ public: + + Qt::Orientation orientation() const { return _orient; } + virtual void setOrientation(Orientation orientation); ++ ++ QWidget *viewport() const { return _viewport; } ++ ++ QRect contentsRect() const { return QRect(0, 0, width(), height()); } ++ ++ int contentsX() const { return _viewport ? -_viewport->x() : 0; } ++ int contentsY() const { return _viewport ? -_viewport->y() : 0; } ++ int contentsWidth() const { return _viewport ? _viewport->width() : 0; } ++ int contentsHeight() const { return _viewport ? _viewport->height() : 0; } ++ void setContentsPos(int x, int y); ++ ++ int visibleWidth() const { return _clipper->width(); } ++ int visibleHeight() const { return _clipper->height(); } ++ ++ void contentsToViewport( int x, int y, int& vx, int& vy ) const; ++ void viewportToContents( int vx, int vy, int& x, int& y ) const; ++ QPoint contentsToViewport( const QPoint& ) const; ++ QPoint viewportToContents( const QPoint& ) const; ++ ++ void addChild(QWidget *child) { child->show(); } ++ void removeChild(QWidget *child) { child->hide(); } ++ int childX(QWidget *child) const { return child->x(); } ++ int childY(QWidget *child) const { return child->y(); } ++ void moveChild(QWidget *child, int x, int y) { child->move(x, y); } ++ ++ void ensureVisible( int x, int y ); ++ void ensureVisible( int x, int y, int xmargin, int ymargin ); + + public slots: + virtual void resizeContents( int w, int h ); ++ void startScrollRightDown(); ++ void startScrollLeftUp(); ++ void stopScroll(); + void scrollRightDown(); + void scrollLeftUp(); + void reallyUpdateScrollButtons(); ++ void scrollBy(int dx, int dy); ++ ++signals: ++ void contentsMoving(int x, int y); + + protected: +- void resizeEvent(QResizeEvent *ev); +- void contentsWheelEvent(QWheelEvent *){;} +- void viewportWheelEvent(QWheelEvent *){;} ++ virtual bool eventFilter( QObject *obj, QEvent *e ); ++ virtual void resizeEvent(QResizeEvent *ev); ++ virtual void viewportResizeEvent( QResizeEvent* ); ++ virtual void viewportMousePressEvent( QMouseEvent* ); ++ virtual void viewportMouseReleaseEvent( QMouseEvent* ); ++ virtual void viewportMouseDoubleClickEvent( QMouseEvent* ); ++ virtual void viewportMouseMoveEvent( QMouseEvent* ); + + private: + void setupButtons(); +@@ -65,6 +103,13 @@ private: + SimpleArrowButton *_luSB; // Left Scroll Button + SimpleArrowButton *_rdSB; // Right Scroll Button + QTimer *_updateScrollButtonsTimer; ++ QTimer *_scrollTimer; ++ ++ QWidget *_clipper; ++ QWidget *_viewport; ++ int _cwidth, _cheight; ++ int _cx, _cy; ++ int _step; + }; + + #endif +Index: kicker/extensions/taskbar/taskbarextension.cpp +=================================================================== +--- kicker/extensions/taskbar/taskbarextension.cpp.orig ++++ kicker/extensions/taskbar/taskbarextension.cpp +@@ -170,7 +170,6 @@ void TaskBarExtension::setBackgroundThem + } + + unsetPalette(); +- m_container->unsetPalette(); + + if (KickerSettings::useBackgroundTheme()) + { +@@ -215,17 +214,17 @@ void TaskBarExtension::setBackgroundThem + KickerLib::colorize(bgImage); + } + setPaletteBackgroundPixmap(bgImage); +- m_container->setPaletteBackgroundPixmap(bgImage); + } + } ++ ++ m_container->setBackground(); + } + + void TaskBarExtension::updateBackground(const QPixmap& bgImage) + { + unsetPalette(); + setPaletteBackgroundPixmap(bgImage); +- m_container->unsetPalette(); +- m_container->setPaletteBackgroundPixmap(bgImage); ++ m_container->setBackground(); + } + + void TaskBarExtension::resizeEvent(QResizeEvent *e) +Index: kicker/kicker/core/container_extension.cpp +=================================================================== +--- kicker/kicker/core/container_extension.cpp.orig ++++ kicker/kicker/core/container_extension.cpp +@@ -126,6 +126,7 @@ void ExtensionContainer::init() + connect(Kicker::the()->kwinModule(), SIGNAL(currentDesktopChanged(int)), + this, SLOT( currentDesktopChanged(int))); + ++ setBackgroundOrigin(AncestorOrigin); + setFrameStyle(NoFrame); + setLineWidth(0); + setMargin(0); +@@ -163,7 +164,7 @@ void ExtensionContainer::init() + { + _userHidden = static_cast(tmp); + } +- ++ + if (m_extension) + { + // if we have an extension, we need to grab the extension-specific +Index: kicker/kicker/core/containerarea.cpp +=================================================================== +--- kicker/kicker/core/containerarea.cpp.orig ++++ kicker/kicker/core/containerarea.cpp +@@ -90,15 +90,12 @@ ContainerArea::ContainerArea(KConfig* _c + m_addAppletDialog(0) + { + setBackgroundOrigin( WidgetOrigin ); +- viewport()->setBackgroundOrigin( AncestorOrigin ); + +- m_contents = new QWidget(viewport()); +- m_contents->setBackgroundOrigin(AncestorOrigin); ++ m_contents = viewport(); + + m_layout = new ContainerAreaLayout(m_contents); + +- // Install an event filter to propagate layout hints coming from +- // m_contents. ++ // Install an event filter to propagate layout hints coming from m_contents. + m_contents->installEventFilter(this); + + setBackground(); +Index: kicker/kicker/core/panelextension.cpp +=================================================================== +--- kicker/kicker/core/panelextension.cpp.orig ++++ kicker/kicker/core/panelextension.cpp +@@ -74,7 +74,6 @@ PanelExtension::PanelExtension(const QSt + connect(_containerArea, SIGNAL(maintainFocus(bool)), this, SIGNAL(maintainFocus(bool))); + _layout->addWidget(_containerArea); + +- _containerArea->setFrameStyle(QFrame::NoFrame); + _containerArea->viewport()->installEventFilter(this); + _containerArea->configure(); + +Index: kicker/applets/systemtray/systemtrayapplet.h +=================================================================== +--- kicker/applets/systemtray/systemtrayapplet.h.orig ++++ kicker/applets/systemtray/systemtrayapplet.h +@@ -118,6 +118,7 @@ public: + TrayEmbed( bool kdeTray, QWidget* parent = NULL ); + bool kdeTray() const { return kde_tray; } + void setBackground(); ++ void getIconSize(int defaultIconSize); + private: + bool kde_tray; + }; +Index: kicker/applets/systemtray/systemtrayapplet.cpp +=================================================================== +--- kicker/applets/systemtray/systemtrayapplet.cpp.orig ++++ kicker/applets/systemtray/systemtrayapplet.cpp +@@ -54,6 +54,8 @@ CONNECTION WITH THE SOFTWARE OR THE USE + + #include + ++#define ICON_MARGIN 1 ++ + extern "C" + { + KDE_EXPORT KPanelApplet* init(QWidget *parent, const QString& configFile) +@@ -459,9 +461,9 @@ void SystemTrayApplet::embedWindow( WId + delete emb; + return; + } +- ++ + connect(emb, SIGNAL(embeddedWindowDestroyed()), SLOT(updateTrayWindows())); +- emb->setMinimumSize(m_iconSize, m_iconSize); ++ emb->getIconSize(m_iconSize); + + if (shouldHide(w)) + { +@@ -471,7 +473,7 @@ void SystemTrayApplet::embedWindow( WId + } + else + { +- emb->hide(); ++ //emb->hide(); + emb->setBackground(); + emb->show(); + m_shownWins.append(emb); +@@ -515,7 +517,7 @@ void SystemTrayApplet::updateVisibleWins + { + for (; emb != lastEmb; ++emb) + { +- (*emb)->hide(); ++ //(*emb)->hide(); + (*emb)->setBackground(); + (*emb)->show(); + } +@@ -744,8 +746,7 @@ int SystemTrayApplet::widthForHeight(int + } + + int currentHeight = height(); +- int minHeight = m_iconSize + 4; +- if (currentHeight != h && currentHeight != minHeight) ++ if (currentHeight != h) + { + SystemTrayApplet* me = const_cast(this); + me->setMinimumSize(0, 0); +@@ -764,8 +765,7 @@ int SystemTrayApplet::heightForWidth(int + } + + int currentWidth = width(); +- int minSize = m_iconSize + 4; +- if (currentWidth != w && currentWidth != minSize) ++ if (currentWidth != w) + { + SystemTrayApplet* me = const_cast(this); + me->setMinimumSize(0, 0); +@@ -782,10 +782,8 @@ void SystemTrayApplet::moveEvent( QMoveE + } + + +-void SystemTrayApplet::resizeEvent( QResizeEvent* e ) ++void SystemTrayApplet::resizeEvent( QResizeEvent* ) + { +- KPanelApplet::resizeEvent(e); +- + layoutTray(); + // we need to give ourselves a chance to adjust our size before calling this + QTimer::singleShot(0, this, SIGNAL(updateLayout())); +@@ -808,7 +806,7 @@ void SystemTrayApplet::layoutTray() + int i = 0, line, nbrOfLines, heightWidth; + bool showExpandButton = m_expandButton && m_expandButton->isVisibleTo(this); + delete m_layout; +- m_layout = new QGridLayout(this, 1, 1, 2, 2); ++ m_layout = new QGridLayout(this, 1, 1, ICON_MARGIN, ICON_MARGIN); + + if (m_expandButton) + { +@@ -828,18 +826,18 @@ void SystemTrayApplet::layoutTray() + + // + // The margin and spacing specified in the layout implies that: +- // [-- 2 pixels --] [-- first icon --] [-- 2 pixels --] ... [-- 2 pixels --] [-- last icon --] [-- 2 pixels --] ++ // [-- ICON_MARGIN pixels --] [-- first icon --] [-- ICON_MARGIN pixels --] ... [-- ICON_MARGIN pixels --] [-- last icon --] [-- ICON_MARGIN pixels --] + // +- // So, if we say that iconWidth is the icon width plus the 2 pixels spacing, then the available width for the icons +- // is the widget width minus 2 pixels margin. Forgetting these 2 pixels broke the layout algorithm in KDE <= 3.5.9. ++ // So, if we say that iconWidth is the icon width plus the ICON_MARGIN pixels spacing, then the available width for the icons ++ // is the widget width minus ICON_MARGIN pixels margin. Forgetting these ICON_MARGIN pixels broke the layout algorithm in KDE <= 3.5.9. + // +- // This fix makes the workaround in the heightForWidth() and widthForHeight() methods unneeded. ++ // This fix makes the workarounds in the heightForWidth() and widthForHeight() methods unneeded. + // + + if (orientation() == Vertical) + { +- int iconWidth = maxIconWidth() + 2; // +2 for the margins that implied by the layout +- heightWidth = width() - 2; ++ int iconWidth = maxIconWidth() + ICON_MARGIN; // +2 for the margins that implied by the layout ++ heightWidth = width() - ICON_MARGIN; + // to avoid nbrOfLines=0 we ensure heightWidth >= iconWidth! + heightWidth = heightWidth < iconWidth ? iconWidth : heightWidth; + nbrOfLines = heightWidth / iconWidth; +@@ -860,12 +858,12 @@ void SystemTrayApplet::layoutTray() + emb != lastEmb; ++emb) + { + line = i % nbrOfLines; +- (*emb)->hide(); ++ //(*emb)->hide(); + (*emb)->show(); + m_layout->addWidget(*emb, col, line, + Qt::AlignHCenter | Qt::AlignVCenter); + +- if (line + 1 == nbrOfLines) ++ if ((line + 1) == nbrOfLines) + { + ++col; + } +@@ -879,12 +877,12 @@ void SystemTrayApplet::layoutTray() + emb != lastEmb; ++emb) + { + line = i % nbrOfLines; +- (*emb)->hide(); ++ //(*emb)->hide(); + (*emb)->show(); + m_layout->addWidget(*emb, col, line, + Qt::AlignHCenter | Qt::AlignVCenter); + +- if (line + 1 == nbrOfLines) ++ if ((line + 1) == nbrOfLines) + { + ++col; + } +@@ -894,8 +892,8 @@ void SystemTrayApplet::layoutTray() + } + else // horizontal + { +- int iconHeight = maxIconHeight() + 2; // +2 for the margins that implied by the layout +- heightWidth = height() - 2; ++ int iconHeight = maxIconHeight() + ICON_MARGIN; // +2 for the margins that implied by the layout ++ heightWidth = height() - ICON_MARGIN; + heightWidth = heightWidth < iconHeight ? iconHeight : heightWidth; // to avoid nbrOfLines=0 + nbrOfLines = heightWidth / iconHeight; + +@@ -914,12 +912,12 @@ void SystemTrayApplet::layoutTray() + for (TrayEmbedList::const_iterator emb = m_hiddenWins.begin(); emb != lastEmb; ++emb) + { + line = i % nbrOfLines; +- (*emb)->hide(); ++ //(*emb)->hide(); + (*emb)->show(); + m_layout->addWidget(*emb, line, col, + Qt::AlignHCenter | Qt::AlignVCenter); + +- if (line + 1 == nbrOfLines) ++ if ((line + 1) == nbrOfLines) + { + ++col; + } +@@ -933,12 +931,12 @@ void SystemTrayApplet::layoutTray() + emb != lastEmb; ++emb) + { + line = i % nbrOfLines; +- (*emb)->hide(); ++ //(*emb)->hide(); + (*emb)->show(); + m_layout->addWidget(*emb, line, col, + Qt::AlignHCenter | Qt::AlignVCenter); + +- if (line + 1 == nbrOfLines) ++ if ((line + 1) == nbrOfLines) + { + ++col; + } +@@ -975,6 +973,21 @@ TrayEmbed::TrayEmbed( bool kdeTray, QWid + : QXEmbed( parent ), kde_tray( kdeTray ) + { + hide(); ++} ++ ++void TrayEmbed::getIconSize(int defaultIconSize) ++{ ++ QSize minSize = minimumSizeHint(); ++ ++ int width = minSize.width(); ++ int height = minSize.height(); ++ ++ if (width < 1 || width > defaultIconSize) ++ width = defaultIconSize; ++ if (height < 1 || height > defaultIconSize) ++ height = defaultIconSize; ++ ++ setFixedSize(width, height); + setBackground(); + } + +@@ -994,9 +1007,7 @@ void TrayEmbed::setBackground() + + if (!isHidden()) + { +- hide(); +- show(); ++ XClearArea(x11Display(), embeddedWinId(), 0, 0, 0, 0, True); + } +- //XClearArea(x11Display(), embeddedWinId(), 0, 0, 0, 0, True); + } + +Index: kicker/applets/clock/clock.h +=================================================================== +--- kicker/applets/clock/clock.h.orig ++++ kicker/applets/clock/clock.h +@@ -41,6 +41,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE + + #include + #include "settings.h" ++#include "kshadowengine.h" + + class QTimer; + class QBoxLayout; +@@ -152,6 +153,9 @@ class PlainClock : public QLabel, public + bool showDayOfWeek(); + + protected: ++ void paintEvent(QPaintEvent *e); ++ void drawContents(QPainter *p); ++ + QString _timeStr; + }; + +@@ -279,6 +283,8 @@ class ClockApplet : public KPanelApplet, + QDate clockGetDate(); + + virtual void updateKickerTip(KickerTip::Data&); ++ ++ KTextShadowEngine *shadowEngine(); + + k_dcop: + void reconfigure(); +@@ -335,6 +341,7 @@ class ClockApplet : public KPanelApplet, + QStringList _remotezonelist; + KPopupMenu* menu; + ClockAppletToolTip m_tooltip; ++ KTextShadowEngine *m_shadowEngine; + }; + + +Index: kicker/applets/clock/Makefile.am +=================================================================== +--- kicker/applets/clock/Makefile.am.orig ++++ kicker/applets/clock/Makefile.am +@@ -1,7 +1,7 @@ + pic_DATA = lcd.png + picdir = $(kde_datadir)/clockapplet/pics + +-INCLUDES = -I$(top_srcdir)/kicker/libkicker $(all_includes) ++INCLUDES = -I$(top_srcdir)/kicker/libkicker -I../../libkicker $(all_includes) + + kde_module_LTLIBRARIES = clock_panelapplet.la + +Index: kicker/applets/clock/clock.cpp +=================================================================== +--- kicker/applets/clock/clock.cpp.orig ++++ kicker/applets/clock/clock.cpp +@@ -57,6 +57,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE + + #include // libkickermain + ++#include "kickerSettings.h" + #include "clock.h" + #include "datepicker.h" + #include "zone.h" +@@ -219,6 +220,7 @@ ClockWidget::~ClockWidget() + PlainClock::PlainClock(ClockApplet *applet, Prefs *prefs, QWidget *parent, const char *name) + : QLabel(parent, name), ClockWidget(applet, prefs) + { ++ setWFlags(WNoAutoErase); + setBackgroundOrigin(AncestorOrigin); + loadSettings(); + updateClock(); +@@ -228,7 +230,7 @@ PlainClock::PlainClock(ClockApplet *appl + int PlainClock::preferedWidthForHeight(int ) const + { + QString maxLengthTime = KGlobal::locale()->formatTime( QTime( 23, 59 ), _prefs->plainShowSeconds()); +- return fontMetrics().width( maxLengthTime+2 ); ++ return fontMetrics().width( maxLengthTime ) + 8; + } + + +@@ -244,7 +246,7 @@ void PlainClock::updateClock() + + if (_force || newStr != _timeStr) { + _timeStr = newStr; +- setText(_timeStr); ++ update(); + } + } + +@@ -266,6 +268,32 @@ bool PlainClock::showDayOfWeek() + return _prefs->plainShowDayOfWeek(); + } + ++void PlainClock::paintEvent(QPaintEvent *) ++{ ++ QPainter p; ++ QPixmap buf(size()); ++ buf.fill(this, 0, 0); ++ p.begin(&buf); ++ p.setFont(font()); ++ p.setPen(paletteForegroundColor()); ++ drawContents(&p); ++ drawFrame(&p); ++ p.end(); ++ p.begin(this); ++ p.drawPixmap(0, 0, buf); ++ p.end(); ++} ++ ++void PlainClock::drawContents(QPainter *p) ++{ ++ QRect tr(0, 0, width(), height()); ++ ++ if (!KickerSettings::transparent()) ++ p->drawText(tr, AlignCenter, _timeStr); ++ else ++ _applet->shadowEngine()->drawText(*p, tr, AlignCenter, _timeStr, size()); ++} ++ + //************************************************************ + + +@@ -834,12 +862,22 @@ void FuzzyClock::drawContents(QPainter * + + p->setFont(_prefs->fuzzyFont()); + p->setPen(_prefs->fuzzyForegroundColor()); +- if (_applet->getOrientation() == Vertical) { ++ ++ QRect tr; ++ ++ if (_applet->getOrientation() == Vertical) ++ { + p->rotate(90); +- p->drawText(4, -2, height() - 8, -(width()) + 2, AlignCenter, _timeStr); +- } else { +- p->drawText(4, 2, width() - 8, height() - 4, AlignCenter, _timeStr); ++ tr = QRect(4, -2, height() - 8, -(width()) + 2); + } ++ else ++ tr = QRect(4, 2, width() - 8, height() - 4); ++ ++ if (!KickerSettings::transparent()) ++ p->drawText(tr, AlignCenter, _timeStr); ++ else ++ _applet->shadowEngine()->drawText(*p, tr, AlignCenter, _timeStr, size()); ++ + alreadyDrawing = false; + } + +@@ -872,7 +910,8 @@ ClockApplet::ClockApplet(const QString& + _prefs(new Prefs(sharedConfig())), + zone(new Zone(config())), + menu(0), +- m_tooltip(this) ++ m_tooltip(this), ++ m_shadowEngine(0) + { + DCOPObject::setObjId("ClockApplet"); + _prefs->readConfig(); +@@ -910,6 +949,7 @@ ClockApplet::ClockApplet(const QString& + + ClockApplet::~ClockApplet() + { ++ delete m_shadowEngine; + //reverse for the moment + KGlobal::locale()->removeCatalogue("clockapplet"); + KGlobal::locale()->removeCatalogue("timezones"); // For time zone translations +@@ -929,6 +969,16 @@ ClockApplet::~ClockApplet() + config()->sync(); + } + ++ ++KTextShadowEngine *ClockApplet::shadowEngine() ++{ ++ if (!m_shadowEngine) ++ m_shadowEngine = new KTextShadowEngine(); ++ ++ return m_shadowEngine; ++} ++ ++ + int ClockApplet::widthForHeight(int h) const + { + if (orientation() == Qt::Vertical) +Index: kioslave/media/mediamanager/halbackend.cpp +=================================================================== +--- kioslave/media/mediamanager/halbackend.cpp.orig ++++ kioslave/media/mediamanager/halbackend.cpp +@@ -851,13 +851,6 @@ QStringList HALBackend::mountoptions(con + result << tmp; + } + +- if ( valids.contains("locale") ) +- { +- value = config.readBoolEntry( "locale", true ); +- tmp = QString( "locale=%1" ).arg( value ? "true" : "false" ); +- result << tmp; +- } +- + if (valids.contains("utf8")) + { + value = config.readBoolEntry("utf8", true); +@@ -878,6 +871,17 @@ QStringList HALBackend::mountoptions(con + result << "shortname=lower"; + } + ++ // pass our locale to the ntfs-3g driver so it can translate local characters ++ if (valids.contains("locale") && fstype == "ntfs-3g") ++ { ++ // have to obtain LC_CTYPE as returned by the `locale` command ++ // check in the same order as `locale` does ++ char *cType; ++ if ( (cType = getenv("LC_ALL")) || (cType = getenv("LC_CTYPE")) || (cType = getenv("LANG")) ) { ++ result << QString("locale=%1").arg(cType); ++ } ++ } ++ + if (valids.contains("sync")) + { + value = config.readBoolEntry("sync", ( valids.contains("flush") && !fstype.endsWith("fat") ) && removable); +@@ -931,7 +935,7 @@ bool HALBackend::setMountoptions(const Q + + QMap valids = MediaManagerUtils::splitOptions(options); + +- const char *names[] = { "ro", "quiet", "atime", "uid", "utf8", "flush", "sync", "locale", 0 }; ++ const char *names[] = { "ro", "quiet", "atime", "uid", "utf8", "flush", "sync", 0 }; + for (int index = 0; names[index]; ++index) + if (valids.contains(names[index])) + config.writeEntry(names[index], valids[names[index]] == "true"); +@@ -951,10 +955,6 @@ bool HALBackend::setMountoptions(const Q + config.writeEntry("automount", valids["automount"]); + } + +- if (valids.contains("locale") ) { +- config.writeEntry("locale", valids["locale"]); +- } +- + return true; + } + +@@ -1153,11 +1153,6 @@ QString HALBackend::mount(const Medium * + soptions << QString("uid=%1").arg(getuid()); + } + +- if (valids["locale"] == "true") +- { +- soptions << QString("locale=%1").arg( KGlobal::locale()->language() ); +- } +- + if (valids["ro"] == "true") + soptions << "ro"; + +@@ -1182,6 +1177,11 @@ QString HALBackend::mount(const Medium * + soptions << QString("shortname=%1").arg(valids["shortname"]); + } + ++ if (valids.contains("locale")) ++ { ++ soptions << QString("locale=%1").arg(valids["locale"]); ++ } ++ + if (valids.contains("journaling")) + { + QString option = valids["journaling"]; +Index: knetattach/knetattach.ui +=================================================================== +--- knetattach/knetattach.ui.orig ++++ knetattach/knetattach.ui +@@ -236,7 +236,7 @@ + + + +- 32768 ++ 65535 + + + 1 diff --git a/opensuse/core/tdebase/access.diff b/opensuse/core/tdebase/access.diff new file mode 100644 index 000000000..9f105550b --- /dev/null +++ b/opensuse/core/tdebase/access.diff @@ -0,0 +1,51 @@ +Index: kcontrol/access/kaccess.cpp +=================================================================== +--- kcontrol/access/kaccess.cpp.orig ++++ kcontrol/access/kaccess.cpp +@@ -216,7 +216,7 @@ void KAccessApp::readSettings() + xkb->ctrls->debounce_delay = config->readNumEntry("BounceKeysDelay", 500); + + // gestures for enabling the other features +- _gestures = config->readBoolEntry("Gestures", true); ++ _gestures = config->readBoolEntry("Gestures", ::access("/opt/kde3/bin/kmag", X_OK) == 0); + if (_gestures) + xkb->ctrls->enabled_ctrls |= XkbAccessXKeysMask; + else +@@ -241,7 +241,7 @@ void KAccessApp::readSettings() + else + xkb->ctrls->ax_options &= ~(XkbAX_FeatureFBMask | XkbAX_SlowWarnFBMask); + +- _gestureConfirmation = config->readBoolEntry("GestureConfirmation", true); ++ _gestureConfirmation = config->readBoolEntry("GestureConfirmation", ::access("/opt/kde3/bin/kmag", X_OK) == 0); + + _kNotifyModifiers = config->readBoolEntry("kNotifyModifiers", false); + _kNotifyAccessX = config->readBoolEntry("kNotifyAccessX", false); +Index: kcontrol/access/kcmaccess.cpp +=================================================================== +--- kcontrol/access/kcmaccess.cpp.orig ++++ kcontrol/access/kcmaccess.cpp +@@ -7,6 +7,7 @@ + + + #include ++#include + #include + + #include +@@ -686,12 +687,14 @@ void KAccessConfig::load( bool useDefaul + bounceKeysDelay->setValue(config->readNumEntry("BounceKeysDelay", 500)); + bounceKeysRejectBeep->setChecked(config->readBoolEntry("BounceKeysRejectBeep", true)); + +- gestures->setChecked(config->readBoolEntry("Gestures", true)); ++ gestures->setChecked(config->readBoolEntry("Gestures", ++ ::access("/opt/kde3/bin/kmag", X_OK) == 0)); + timeout->setChecked(config->readBoolEntry("AccessXTimeout", false)); + timeoutDelay->setValue(config->readNumEntry("AccessXTimeoutDelay", 30)); + + accessxBeep->setChecked(config->readBoolEntry("AccessXBeep", true)); +- gestureConfirmation->setChecked(config->readBoolEntry("GestureConfirmation", false)); ++ gestureConfirmation->setChecked(config->readBoolEntry("GestureConfirmation", ++ ::access("/opt/kde3/bin/kmag", X_OK) == 0)); + kNotifyAccessX->setChecked(config->readBoolEntry("kNotifyAccessX", false)); + + delete config; diff --git a/opensuse/core/tdebase/applet-lock-logout.diff b/opensuse/core/tdebase/applet-lock-logout.diff new file mode 100644 index 000000000..75363e768 --- /dev/null +++ b/opensuse/core/tdebase/applet-lock-logout.diff @@ -0,0 +1,122 @@ +Index: kicker/applets/lockout/lockout.cpp +=================================================================== +--- kicker/applets/lockout/lockout.cpp.orig ++++ kicker/applets/lockout/lockout.cpp +@@ -31,6 +31,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE + #include + #include + #include ++#include + + #include + +@@ -54,7 +55,7 @@ extern "C" + } + + Lockout::Lockout( const QString& configFile, QWidget *parent, const char *name) +- : KPanelApplet( configFile, KPanelApplet::Normal, 0, parent, name ), bTransparent( false ) ++ : KPanelApplet( configFile, KPanelApplet::Normal, 0, parent, name ), bTransparent( false ), bAlternateButtonOrder( false ) + { + KConfig *conf = config(); + conf->setGroup("lockout"); +@@ -71,8 +72,16 @@ Lockout::Lockout( const QString& configF + layout->setMargin( 0 ); + layout->setSpacing( 0 ); + +- lockButton = new SimpleButton( this, "lock"); +- logoutButton = new SimpleButton( this, "logout"); ++ bAlternateButtonOrder = !conf->readBoolEntry( "OriginalLayout",true ); ++ ++ if (bAlternateButtonOrder) { ++ lockButton = new SimpleButton( this, "lock"); ++ logoutButton = new SimpleButton( this, "logout"); ++ } ++ else { ++ logoutButton = new SimpleButton( this, "logout"); ++ lockButton = new SimpleButton( this, "lock"); ++ } + + QToolTip::add( lockButton, i18n("Lock the session") ); + QToolTip::add( logoutButton, i18n("Log out") ); +@@ -204,12 +213,15 @@ bool Lockout::eventFilter( QObject *o, Q + this, SLOT( lock() ) ); + popup->insertSeparator(); + ++ popup->insertItem( i18n( "&Alternate Button Order" ), 90 ); + i18n("&Transparent"); + //popup->insertItem( i18n( "&Transparent" ), 100 ); + popup->insertItem( SmallIcon( "configure" ), + i18n( "&Configure Screen Saver..." ), + this, SLOT( slotLockPrefs() ) ); + ++ popup->setItemChecked( 90, bAlternateButtonOrder ); ++ popup->connectItem(90, this, SLOT( slotButtonOrder() ) ); + //popup->setItemChecked( 100, bTransparent ); + //popup->connectItem(100, this, SLOT( slotTransparent() ) ); + //if (conf->entryIsImmutable( "Transparent" )) +@@ -226,6 +238,7 @@ bool Lockout::eventFilter( QObject *o, Q + popup->insertItem( SmallIcon( "exit" ), i18n("&Log Out..."), + this, SLOT( logout() ) ); + popup->insertSeparator(); ++ popup->insertItem( i18n( "&Alternate Button Order" ), 90 ); + //popup->insertItem( i18n( "&Transparent" ), 100 ); + popup->insertItem( SmallIcon( "configure" ), + i18n( "&Configure Session Manager..." ), +@@ -235,6 +248,9 @@ bool Lockout::eventFilter( QObject *o, Q + //popup->connectItem(100, this, SLOT( slotTransparent() ) ); + //if (conf->entryIsImmutable( "Transparent" )) + // popup->setItemEnabled( 100, false ); ++ popup->setItemChecked( 90, bAlternateButtonOrder ); ++ popup->connectItem(90, this, SLOT( slotButtonOrder() ) ); ++ + popup->exec( me->globalPos() ); + delete popup; + +@@ -263,6 +279,27 @@ void Lockout::slotTransparent() + conf->sync(); + } + ++void Lockout::slotButtonOrder() ++{ ++ QObject* child = children()->getFirst(); ++ ++ if (bAlternateButtonOrder) ++ child = lockButton; ++ else ++ child = logoutButton; ++ ++ removeChild(child); ++ insertChild(child); ++ update(); ++ ++ bAlternateButtonOrder = !bAlternateButtonOrder; ++ ++ KConfig* conf = config(); ++ conf->setGroup("lockout"); ++ conf->writeEntry( "OriginalLayout", !bAlternateButtonOrder ); ++ conf->sync(); ++} ++ + void Lockout::slotLogoutPrefs() + { + // Run the logout settings. +Index: kicker/applets/lockout/lockout.h +=================================================================== +--- kicker/applets/lockout/lockout.h.orig ++++ kicker/applets/lockout/lockout.h +@@ -36,6 +36,7 @@ private slots: + + void slotLockPrefs(); + void slotLogoutPrefs(); ++ void slotButtonOrder(); + void slotTransparent(); + void slotIconChanged(); + +@@ -47,6 +48,7 @@ private: + QBoxLayout *layout; + + bool bTransparent; ++ bool bAlternateButtonOrder; + }; + + #endif // LOCKOUT_H diff --git a/opensuse/core/tdebase/arts-start-on-demand.diff b/opensuse/core/tdebase/arts-start-on-demand.diff new file mode 100644 index 000000000..27fcc2292 --- /dev/null +++ b/opensuse/core/tdebase/arts-start-on-demand.diff @@ -0,0 +1,98 @@ +Index: kcontrol/arts/Makefile.am +=================================================================== +--- kcontrol/arts/Makefile.am.orig ++++ kcontrol/arts/Makefile.am +@@ -1,3 +1,9 @@ ++bin_PROGRAMS = arts-start ++ ++arts_start_SOURCES = arts-start.cpp ++arts_start_LDFLAGS = $(all_libraries) ++arts_start_LDADD = $(LIB_KDECORE) ++ + kde_module_LTLIBRARIES = kcm_arts.la + + kcm_arts_la_SOURCES = arts.cpp generaltab.ui hardwaretab.ui krichtextlabel.cpp +Index: kcontrol/arts/arts-start.cpp +=================================================================== +--- /dev/null ++++ kcontrol/arts/arts-start.cpp +@@ -0,0 +1,79 @@ ++/* ++ ++ Copyright (C) 2007 Lubos Lunak ++ ++ This program is free software; you can redistribute it and/or modify ++ it under the terms of the GNU General Public License as published by ++ the Free Software Foundation; either version 2 of the License, or ++ (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with this program; if not, write to the Free Software ++ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ++ ++ Permission is also granted to link this program with the Qt ++ library, treating Qt like a library that normally accompanies the ++ operating system kernel, whether or not that is in fact the case. ++ ++*/ ++ ++#include ++#include ++#include ++#include ++#include ++ ++static bool arts_running() ++ { ++ int status = system( "artsshell status >/dev/null 2>/dev/null" ); ++ return WIFEXITED( status ) && WEXITSTATUS( status ) == 0; ++ } ++ ++int main() ++ { ++ // Try to launch arts this way only a single time in the whole session. After first ++ // try set X property on the root window and following attemps bail out if it's set. ++ Display* dpy = XOpenDisplay( NULL ); ++ if( dpy == NULL ) // don't launch arts without X ++ return 4; ++ Atom atom = XInternAtom( dpy, "_KDE_ARTS_TRIED", False ); ++ int count; ++ Atom* atoms = XListProperties( dpy, DefaultRootWindow( dpy ), &count ); ++ bool tried = false; ++ if( atoms != NULL ) ++ { ++ for( int i = 0; ++ i < count; ++ ++i ) ++ if( atoms[ i ] == atom ) ++ { ++ tried = true; ++ break; ++ } ++ } ++ if( tried ) // this should probably wait, but artsshell will result in calling this too ++ return 2; ++ long dummy = 1; ++ XChangeProperty( dpy, DefaultRootWindow( dpy ), atom, atom, 32, PropModeReplace, (const unsigned char*)&dummy, 1 ); ++ XCloseDisplay( dpy ); ++ KInstance inst( "arts-start" ); ++ KConfig config("kcmartsrc", true, false); ++ config.setGroup("Arts"); ++ if( !config.readBoolEntry("StartServer",true)) ++ return 2; ++ system( "kcminit arts" ); ++ for( int i = 0; ++ i < 50; // give it 5 seconds ++ ++i ) ++ { ++ if( arts_running()) ++ return 0; ++ usleep( 100 * 1000 ); ++ } ++ return 3; ++ } diff --git a/opensuse/core/tdebase/artwork.diff b/opensuse/core/tdebase/artwork.diff new file mode 100644 index 000000000..ba13e5757 --- /dev/null +++ b/opensuse/core/tdebase/artwork.diff @@ -0,0 +1,35 @@ +Index: kioslave/fish/fish.protocol +=================================================================== +--- kioslave/fish/fish.protocol.orig ++++ kioslave/fish/fish.protocol +@@ -10,7 +10,7 @@ makedir=true + deleting=true + linking=true + moving=true +-Icon=remote ++Icon=folder_html + Description=A kioslave for the FISH protocol + Description[af]='n Kioslave vir die FISH protokol + Description[be]=Kioslave Ð´Ð»Ñ Ð¿Ñ€Ð°Ñ‚Ð°ÐºÐ¾Ð»Ð° FISH +Index: kioslave/floppy/floppy.protocol +=================================================================== +--- kioslave/floppy/floppy.protocol.orig ++++ kioslave/floppy/floppy.protocol +@@ -9,6 +9,6 @@ writing=true + makedir=true + deleting=true + moving=true +-Icon=3floppy_mount ++Icon=3floppy_unmount + DocPath=kioslave/floppy.html + Class=:local +Index: kioslave/nfs/nfs.protocol +=================================================================== +--- kioslave/nfs/nfs.protocol.orig ++++ kioslave/nfs/nfs.protocol +@@ -11,4 +11,4 @@ deleting=true + linking=true + moving=true + DocPath=kioslave/nfs.html +-Icon=nfs_mount ++Icon=nfs_unmount diff --git a/opensuse/core/tdebase/autorun.patch b/opensuse/core/tdebase/autorun.patch new file mode 100644 index 000000000..962740cdc --- /dev/null +++ b/opensuse/core/tdebase/autorun.patch @@ -0,0 +1,27 @@ +Index: kioslave/media/medianotifier/medianotifier.cpp +=================================================================== +--- kioslave/media/medianotifier/medianotifier.cpp.orig ++++ kioslave/media/medianotifier/medianotifier.cpp +@@ -133,7 +133,7 @@ bool MediaNotifier::autostart( const KFi + // be checked for the following Autostart files in order of precedence: + // .autorun, autorun, autorun.sh + QStringList autorun_list; +- autorun_list << ".autorun" << "autorun" << "autorun.sh"; ++ autorun_list << ".autorun" << "autorun" << "autorun.sh" << "setup.sh" << "media.1/patches"; + + QStringList::iterator it = autorun_list.begin(); + QStringList::iterator end = autorun_list.end(); +@@ -191,7 +191,12 @@ bool MediaNotifier::execAutorun( const K + // with the current working directory ( CWD ) set to the root + // directory of the medium. + KProcess proc; +- proc << "sh" << autorunFile; ++ if (autorunFile == "setup.sh") ++ proc << "kdesu" << autorunFile; ++ else if (autorunFile == "media.1/patches") ++ proc << "kdesu" << "--nonewdcop" << "/sbin/yast2" << "online_update" << ".cd_default"; ++ else ++ proc << "sh" << autorunFile; + proc.setWorkingDirectory( path ); + proc.start(); + proc.detach(); diff --git a/opensuse/core/tdebase/background_default.diff b/opensuse/core/tdebase/background_default.diff new file mode 100644 index 000000000..71f9a96bb --- /dev/null +++ b/opensuse/core/tdebase/background_default.diff @@ -0,0 +1,13 @@ +Index: kcontrol/background/bgwallpaper.cpp +=================================================================== +--- kcontrol/background/bgwallpaper.cpp.orig ++++ kcontrol/background/bgwallpaper.cpp +@@ -149,7 +149,7 @@ void BGMultiWallpaperDialog::slotAdd() + mimeTypes += "image/svg+xml"; + #endif + +- KFileDialog fileDialog(KGlobal::dirs()->findDirs("wallpaper", "").first(), ++ KFileDialog fileDialog("/usr/share/wallpapers", + mimeTypes.join( " " ), this, + 0L, true); + diff --git a/opensuse/core/tdebase/baselibs.conf b/opensuse/core/tdebase/baselibs.conf new file mode 100644 index 000000000..29e28ab1d --- /dev/null +++ b/opensuse/core/tdebase/baselibs.conf @@ -0,0 +1,2 @@ +kdebase3 +kdebase3-runtime diff --git a/opensuse/core/tdebase/beagle-0.3.diff b/opensuse/core/tdebase/beagle-0.3.diff new file mode 100644 index 000000000..6e65be590 --- /dev/null +++ b/opensuse/core/tdebase/beagle-0.3.diff @@ -0,0 +1,21 @@ +--- kicker/configure.in.in 2008/01/28 11:03:28 1.1 ++++ kicker/configure.in.in 2008/01/28 11:03:45 +@@ -42,14 +42,14 @@ + AC_SUBST(GLIB_LIBADD) + AC_SUBST(GLIB_LDFLAGS) + +-dnl Check for libbeagle 0.2.0 ++dnl Check for libbeagle 0.3.0 + # LIBBEAGLE_CFLAGS: cflags for compiling libbeagle dependant sources + # LIBBEAGLE_LIBADD: libbeagle libraries (-l options) + # LIBBEAGLE_LDFLAGS: flags containing path to libbeagle libraries (-L options) + +-LIBBEAGLE_PACKAGES="libbeagle-0.0" +-LIBBEAGLE_VERSION="0.2.4" +-AC_MSG_CHECKING(for libbeagle-0.2.4 (at least $LIBBEAGLE_VERSION)) ++LIBBEAGLE_PACKAGES="libbeagle-1.0" ++LIBBEAGLE_VERSION="0.3.0" ++AC_MSG_CHECKING(for libbeagle-0.3.0 (at least $LIBBEAGLE_VERSION)) + + if $PKG_CONFIG --atleast-pkgconfig-version 0.15 ; then + if $PKG_CONFIG --atleast-version $LIBBEAGLE_VERSION $LIBBEAGLE_PACKAGES >/dev/null 2>&1 ; then diff --git a/opensuse/core/tdebase/bnc.desktop b/opensuse/core/tdebase/bnc.desktop new file mode 100644 index 000000000..c5db233cf --- /dev/null +++ b/opensuse/core/tdebase/bnc.desktop @@ -0,0 +1,8 @@ +[Desktop Entry] +Charset= +Hidden=false +Keys=bnc +Name=Novell Bugzilla +Query=https://bugzilla.novell.com/show_bug.cgi?id=\\{@} +ServiceTypes=SearchProvider +Type=Service diff --git a/opensuse/core/tdebase/bnc584223.diff b/opensuse/core/tdebase/bnc584223.diff new file mode 100644 index 000000000..370abf150 --- /dev/null +++ b/opensuse/core/tdebase/bnc584223.diff @@ -0,0 +1,189 @@ +--- kdebase-3.5.10/kdm/backend/ctrl.c.sav 2010-03-23 13:22:28.000000000 +0100 ++++ kdebase-3.5.10/kdm/backend/ctrl.c 2010-03-23 14:21:48.619350322 +0100 +@@ -78,7 +78,25 @@ nukeSock( struct cmdsock *cs ) + } + + ++#ifdef HONORS_SOCKET_PERMS + static CtrlRec ctrl = { 0, 0, -1, 0, 0, { -1, 0, 0 } }; ++#else ++static CtrlRec ctrl = { 0, 0, 0, -1, 0, 0, { -1, 0, 0 } }; ++ ++static int mkTempDir( char *dir ) ++{ ++ int i, l = strlen( dir ) - 6; ++ ++ for (i = 0; i < 100; i++) { ++ randomStr( dir + l ); ++ if (!mkdir( dir, 0700 )) ++ return True; ++ if (errno != EEXIST) ++ break; ++ } ++ return False; ++} ++#endif + + void + openCtrl( struct display *d ) +@@ -140,22 +158,50 @@ openCtrl( struct display *d ) + if (strlen( cr->path ) >= sizeof(sa.sun_path)) + LogError( "path %\"s too long; no control sockets will be available\n", + cr->path ); +- else if (mkdir( sockdir, 0755 ) && errno != EEXIST) ++#ifdef HONORS_SOCKET_PERMS ++ else if (mkdir( sockdir, 0700 ) && errno != EEXIST) + LogError( "mkdir %\"s failed; no control sockets will be available\n", + sockdir ); ++ else if (unlink( cr->path ) && errno != ENOENT) ++ LogError( "unlink %\"s failed: %m; control socket will not be available\n", ++ cr->path ); + else { +- if (!d) +- chown( sockdir, -1, fifoGroup ); ++#else ++ else if (unlink( sockdir ) && errno != ENOENT) ++ LogError( "unlink %\"s failed: %m; control socket will not be available\n", ++ sockdir ); ++ else if (!strApp( &cr->realdir, sockdir, "-XXXXXX", (char *)0)) ++ ; ++ else if (!mkTempDir( cr->realdir )) { ++ LogError( "mkdir %\"s failed: %m; control socket will not be available\n", ++ cr->realdir ); ++ free( cr->realdir ); ++ cr->realdir = 0; ++ } else if (symlink( cr->realdir, sockdir )) { ++ LogError( "symlink %\"s => %\"s failed: %m; control socket will not be available\n", ++ sockdir, cr->realdir ); ++ rmdir( cr->realdir ); ++ free( cr->realdir ); ++ cr->realdir = 0; ++ } else { ++ chown( sockdir, 0, d ? 0 : fifoGroup ); + chmod( sockdir, 0750 ); ++#endif + if ((cr->fd = socket( PF_UNIX, SOCK_STREAM, 0 )) < 0) + LogError( "Cannot create control socket\n" ); + else { +- unlink( cr->path ); + sa.sun_family = AF_UNIX; + strcpy( sa.sun_path, cr->path ); + if (!bind( cr->fd, (struct sockaddr *)&sa, sizeof(sa) )) { + if (!listen( cr->fd, 5 )) { ++#ifdef HONORS_SOCKET_PERMS ++ chmod( cr->path, 0660 ); ++ if (!d) ++ chown( cr->path, -1, fifoGroup ); ++ chmod( sockdir, 0755 ); ++#else + chmod( cr->path, 0666 ); ++#endif + RegisterCloseOnFork( cr->fd ); + RegisterInput( cr->fd ); + free( sockdir ); +@@ -170,6 +216,14 @@ openCtrl( struct display *d ) + close( cr->fd ); + cr->fd = -1; + } ++#ifdef HONORS_SOCKET_PERMS ++ rmdir( sockdir ); ++#else ++ unlink( sockdir ); ++ rmdir( cr->realdir ); ++ free( cr->realdir ); ++ cr->realdir = 0; ++#endif + } + free( cr->path ); + cr->path = 0; +@@ -190,7 +244,14 @@ closeCtrl( struct display *d ) + cr->fd = -1; + unlink( cr->path ); + *strrchr( cr->path, '/' ) = 0; ++#ifdef HONORS_SOCKET_PERMS + rmdir( cr->path ); ++#else ++ unlink( cr->path ); ++ rmdir( cr->realdir ); ++ free( cr->realdir ); ++ cr->realdir = 0; ++#endif + free( cr->path ); + cr->path = 0; + while (cr->css) { +@@ -218,12 +279,12 @@ chownCtrl( CtrlRec *cr, int uid ) + { + if (cr->fpath) + chown( cr->fpath, uid, -1 ); +- if (cr->path) { +- char *ptr = strrchr( cr->path, '/' ); +- *ptr = 0; ++ if (cr->path) ++#ifdef HONORS_SOCKET_PERMS + chown( cr->path, uid, -1 ); +- *ptr = '/'; +- } ++#else ++ chown( cr->realdir, uid, -1 ); ++#endif + } + + void +--- kdebase-3.5.10/kdm/backend/dm.h.sav 2010-03-23 13:22:28.401354858 +0100 ++++ kdebase-3.5.10/kdm/backend/dm.h 2010-03-23 13:28:24.843351116 +0100 +@@ -218,6 +218,9 @@ typedef struct { + struct cmdsock *css; /* open connections */ + + char *path; /* filename of the socket */ ++#ifndef HONORS_SOCKET_PERMS ++ char *realdir; /* real dirname of the socket */ ++#endif + int fd; /* fd of the socket */ + int gid; /* owner group of the socket */ + +--- kdebase-3.5.10/config.h.in.sav 2008-08-20 18:00:23.000000000 +0200 ++++ kdebase-3.5.10/config.h.in 2010-03-23 13:36:38.913475918 +0100 +@@ -739,6 +739,9 @@ + /* Defined if your system has XRandR support */ + #undef XRANDR_SUPPORT + ++/* Define to 1 if OS honors permission bits on socket inodes */ ++#undef HONORS_SOCKET_PERMS ++ + /* + * jpeg.h needs HAVE_BOOLEAN, when the system uses boolean in system + * headers and I'm too lazy to write a configure test as long as only +--- kdebase-3.5.10/configure.in.in.sav 2006-07-22 10:15:55.000000000 +0200 ++++ kdebase-3.5.10/configure.in.in 2010-03-23 13:51:24.504477535 +0100 +@@ -274,3 +274,31 @@ AC_SUBST(LIBART_RPATH) + AC_ARG_WITH([composite], + AC_HELP_STRING([--without-composite], [Disable Xcomposite support (default: check)]) ) + ++AC_TRY_RUN([ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++int main() ++{ ++ int fd, fd2; ++ struct sockaddr_un sa; ++ ++ if ((fd = socket(PF_UNIX, SOCK_STREAM, 0)) < 0) ++ return 2; ++ sa.sun_family = AF_UNIX; ++ strcpy(sa.sun_path, "testsock"); ++ unlink(sa.sun_path); ++ if (bind(fd, (struct sockaddr *)&sa, sizeof(sa))) ++ return 2; ++ chmod(sa.sun_path, 0); ++ setuid(getuid() + 1000); ++ if ((fd2 = socket(PF_UNIX, SOCK_STREAM, 0)) < 0) ++ return 2; ++ connect(fd2, (struct sockaddr *)&sa, sizeof(sa)); ++ return errno != EACCES; ++} ++], AC_DEFINE_UNQUOTED(HONORS_SOCKET_PERMS, 1, [Define to 1 if OS honors permission bits on socket inodes])) diff --git a/opensuse/core/tdebase/clock-applet-style.diff b/opensuse/core/tdebase/clock-applet-style.diff new file mode 100644 index 000000000..42c768337 --- /dev/null +++ b/opensuse/core/tdebase/clock-applet-style.diff @@ -0,0 +1,22 @@ +Index: kicker/applets/clock/clockapplet.kcfg +=================================================================== +--- kicker/applets/clock/clockapplet.kcfg.orig ++++ kicker/applets/clock/clockapplet.kcfg +@@ -14,7 +14,7 @@ + + + +- Digital ++ Plain + + + +@@ -56,7 +56,7 @@ defFont.setPointSize(8); + + + defFont=KGlobalSettings::generalFont(); +-defFont.setPointSize(8); ++defFont.setPointSize(16); + defFont.setBold(true); + + defFont diff --git a/opensuse/core/tdebase/clock-suse-integrate.diff b/opensuse/core/tdebase/clock-suse-integrate.diff new file mode 100644 index 000000000..a4d24dff8 --- /dev/null +++ b/opensuse/core/tdebase/clock-suse-integrate.diff @@ -0,0 +1,288 @@ +Index: kcontrol/clock/tzone.cpp +=================================================================== +--- kcontrol/clock/tzone.cpp.orig ++++ kcontrol/clock/tzone.cpp +@@ -27,12 +27,16 @@ + + #include + #include ++#include + + #include + #include + #include + #include + #include ++#include ++#include ++#include + + //#include "xpm/world.xpm" + #include "tzone.h" +@@ -55,6 +59,8 @@ Tzone::Tzone(QWidget * parent, const cha + connect( tzonelist, SIGNAL(selectionChanged()), SLOT(handleZoneChange()) ); + + m_local = new QLabel(this); ++ ++ setupSuseTimezone(); + + load(); + +@@ -158,28 +164,38 @@ void Tzone::save() + + QString val = selectedzone; + #else +- QFile fTimezoneFile("/etc/timezone"); ++ QString tz = "/usr/share/zoneinfo/" + selectedzone; + +- if (fTimezoneFile.open(IO_WriteOnly | IO_Truncate) ) ++ kdDebug() << "Set time zone " << tz << endl; ++ ++ writeSuseTimezone( selectedzone ); ++ ++ if( !KStandardDirs::findExe( "zic" ).isEmpty()) + { +- QTextStream t(&fTimezoneFile); +- t << selectedzone; +- fTimezoneFile.close(); ++ KProcess proc; ++ proc << "zic" << "-l" << selectedzone; ++ proc.start( KProcess::Block ); + } ++ else ++ { ++ QFile fTimezoneFile("/etc/timezone"); + +- QString tz = "/usr/share/zoneinfo/" + selectedzone; +- +- kdDebug() << "Set time zone " << tz << endl; ++ if (fTimezoneFile.open(IO_WriteOnly | IO_Truncate) ) ++ { ++ QTextStream t(&fTimezoneFile); ++ t << selectedzone; ++ fTimezoneFile.close(); ++ } + +- if (!QFile::remove("/etc/localtime")) +- { ++ if (!QFile::remove("/etc/localtime")) ++ { + //After the KDE 3.2 release, need to add an error message +- } +- else ++ } ++ else + if (!KIO::NetAccess::file_copy(KURL(tz),KURL("/etc/localtime"))) + KMessageBox::error( 0, i18n("Error setting new timezone."), + i18n("Timezone Error")); +- ++ } + QString val = ":" + tz; + #endif // !USE_SOLARIS + +@@ -198,3 +214,58 @@ void Tzone::save() + + currentZone(); + } ++ ++// read the configured timezone from /etc/sysconfig/clock ++// and simply set it as $TZ, KDE code then will take it as the timezone ++void Tzone::setupSuseTimezone() ++{ ++ QFile f( "/etc/sysconfig/clock" ); ++ if( !f.open( IO_ReadOnly )) ++ return; ++ QTextStream str( &f ); ++ while( !str.atEnd()) ++ { ++ QString line = str.readLine(); ++ if( line.startsWith( "TIMEZONE=" )) ++ { ++ QRegExp r( "\\s*TIMEZONE=\"(.*)\"\\s*" ); ++ if( r.exactMatch( line )) ++ { ++ QString tz = r.cap( 1 ); ++ setenv( "TZ", tz.ascii(), 1 ); ++ } ++ } ++ } ++} ++ ++void Tzone::writeSuseTimezone( QString zone ) ++{ ++ QFile f( "/etc/sysconfig/clock" ); ++ if( !f.open( IO_ReadOnly )) ++ return; ++ KSaveFile out( "/etc/sysconfig/clock", 0644 ); ++ QFile* fout = out.file(); ++ if( fout == NULL ) ++ return; ++ QTextStream str( &f ); ++ QTextStream strout( fout ); ++ while( !str.atEnd()) ++ { ++ QString line = str.readLine(); ++ if( line.startsWith( "TIMEZONE=" )) ++ { ++ QRegExp r( "\\s*TIMEZONE=\"(.*)\"\\s*" ); ++ if( r.exactMatch( line )) ++ { ++ QString tz = r.cap( 1 ); ++ if( tz == zone ) // not changed, abort ++ { ++ out.abort(); ++ return; ++ } ++ line = "TIMEZONE=\"" + zone + "\""; ++ } ++ } ++ strout << line << '\n'; ++ } ++} +Index: kcontrol/clock/tzone.h +=================================================================== +--- kcontrol/clock/tzone.h.orig ++++ kcontrol/clock/tzone.h +@@ -47,6 +47,8 @@ protected slots: + + private: + void currentZone(); ++ void setupSuseTimezone(); ++ void writeSuseTimezone( QString timezone ); + KTimezones m_zoneDb; + QLabel *m_local; + KTimezoneWidget *tzonelist; +Index: kcontrol/clock/dtime.h +=================================================================== +--- kcontrol/clock/dtime.h.orig ++++ kcontrol/clock/dtime.h +@@ -65,6 +65,9 @@ signals: + void timeout(); + void set_time(); + void changeDate(QDate); ++#if 1 ++ void configureTimeServer(); ++#endif + + private: + void findNTPutility(); +@@ -72,7 +75,11 @@ private: + + QWidget* privateLayoutWidget; + QCheckBox *setDateTimeAuto; ++#if 1 ++ QPushButton *timeServerConfigure; ++#else + QComboBox *timeServerList; ++#endif + + KDatePicker *cal; + QComboBox *month; +Index: kcontrol/clock/dtime.cpp +=================================================================== +--- kcontrol/clock/dtime.cpp.orig ++++ kcontrol/clock/dtime.cpp +@@ -38,6 +38,7 @@ + #include + #include + #include ++#include + + #include "dtime.h" + #include "dtime.moc" +@@ -74,6 +75,18 @@ Dtime::Dtime(QWidget * parent, const cha + connect(setDateTimeAuto, SIGNAL(toggled(bool)), SLOT(configChanged())); + layout1->addWidget( setDateTimeAuto ); + ++#if 1 ++ // simply add a pushbutton that'll invoke the yast module ++ ntpUtility = KStandardDirs::findExe( "rcntp"); ++ timeServerConfigure = new QPushButton( i18n( "Configure" ), privateLayoutWidget, "timeServerConfigure" ); ++ connect(timeServerConfigure, SIGNAL(clicked()), SLOT(configChanged())); ++ connect(timeServerConfigure, SIGNAL(clicked()), SLOT(configureTimeServer())); ++ connect(setDateTimeAuto, SIGNAL(toggled(bool)), timeServerConfigure, SLOT(setEnabled(bool))); ++ timeServerConfigure->setEnabled(false); ++ layout1->addWidget( timeServerConfigure ); ++ if( ntpUtility.isEmpty()) ++ privateLayoutWidget->hide(); ++#else + timeServerList = new QComboBox( false, privateLayoutWidget, "timeServerList" ); + connect(timeServerList, SIGNAL(activated(int)), SLOT(configChanged())); + connect(timeServerList, SIGNAL(textChanged(const QString &)), SLOT(configChanged())); +@@ -82,6 +95,7 @@ Dtime::Dtime(QWidget * parent, const cha + timeServerList->setEditable(true); + layout1->addWidget( timeServerList ); + findNTPutility(); ++#endif + + // Date box + QGroupBox* dateBox = new QGroupBox( this, "dateBox" ); +@@ -179,7 +193,11 @@ Dtime::Dtime(QWidget * parent, const cha + hour->setEnabled(false); + minute->setEnabled(false); + second->setEnabled(false); ++#if 1 ++ timeServerConfigure->setEnabled(false); ++#else + timeServerList->setEnabled(false); ++#endif + setDateTimeAuto->setEnabled(false); + } + kclock->setEnabled(false); +@@ -241,6 +259,15 @@ void Dtime::configChanged(){ + void Dtime::load() + { + KConfig config("kcmclockrc", true, false); ++#if 1 ++ if( !ntpUtility.isEmpty()) ++ { ++ KProcess proc; ++ proc << ntpUtility << "status"; ++ proc.start( KProcess::Block ); ++ setDateTimeAuto->setChecked( proc.exitStatus() == 0 ); ++ } ++#else + config.setGroup("NTP"); + timeServerList->insertStringList(QStringList::split(',', config.readEntry("servers", + i18n("Public Time Server (pool.ntp.org),\ +@@ -249,6 +276,7 @@ europe.pool.ntp.org,\ + north-america.pool.ntp.org,\ + oceania.pool.ntp.org")))); + setDateTimeAuto->setChecked(config.readBoolEntry("enabled", false)); ++#endif + + // Reset to the current date and time + time = QTime::currentTime(); +@@ -264,6 +292,7 @@ oceania.pool.ntp.org")))); + void Dtime::save() + { + KConfig config("kcmclockrc", false, false); ++#if 0 + config.setGroup("NTP"); + + // Save the order, but don't duplicate! +@@ -301,7 +330,9 @@ void Dtime::save() + kdDebug() << "Set date from time server " << timeServer.latin1() << " success!" << endl; + } + } +- else { ++ else ++#endif ++ { + // User time setting + KProcess c_proc; + +@@ -356,6 +387,13 @@ void Dtime::timeout() + kclock->setTime( time ); + } + ++void Dtime::configureTimeServer() ++{ ++ KProcess proc; ++ proc << "/sbin/yast2" << "ntp-client"; ++ proc.start( KProcess::DontCare ); ++} ++ + QString Dtime::quickHelp() const + { + return i18n("

Date & Time

This control module can be used to set the system date and" diff --git a/opensuse/core/tdebase/console8x16.pcf.gz b/opensuse/core/tdebase/console8x16.pcf.gz new file mode 100644 index 000000000..db4be9f47 Binary files /dev/null and b/opensuse/core/tdebase/console8x16.pcf.gz differ diff --git a/opensuse/core/tdebase/default-kdeprintfax.diff b/opensuse/core/tdebase/default-kdeprintfax.diff new file mode 100644 index 000000000..ed686b4a7 --- /dev/null +++ b/opensuse/core/tdebase/default-kdeprintfax.diff @@ -0,0 +1,13 @@ +Index: kdeprint/kdeprintfax/confsystem.cpp +=================================================================== +--- kdeprint/kdeprintfax/confsystem.cpp.orig ++++ kdeprint/kdeprintfax/confsystem.cpp +@@ -103,7 +103,7 @@ void ConfSystem::load() + m_commands << conf->readPathEntry("HylaFax", defaultCommand(hylafax_default_cmd)); + m_commands << conf->readPathEntry("Mgetty", defaultCommand(mgetty_default_cmd)); + m_commands << conf->readPathEntry( "Other", QString::null ); +- QString v = conf->readEntry("System", "efax"); ++ QString v = conf->readEntry("System", "hylafax"); + if (v == "mgetty") m_current = MGETTY_ID; + else if (v == "hylafax") m_current = HYLAFAX_ID; + else if ( v == "other" ) m_current = OTHER_ID; diff --git a/opensuse/core/tdebase/default_fonts.diff b/opensuse/core/tdebase/default_fonts.diff new file mode 100644 index 000000000..4300b5aed --- /dev/null +++ b/opensuse/core/tdebase/default_fonts.diff @@ -0,0 +1,25 @@ +Index: kcontrol/fonts/fonts.cpp +=================================================================== +--- kcontrol/fonts/fonts.cpp.orig ++++ kcontrol/fonts/fonts.cpp +@@ -1,3 +1,4 @@ ++ + // KDE Display fonts setup tab + // + // Copyright (c) Mark Donohoe 1997 +@@ -524,11 +525,11 @@ KFonts::KFonts(QWidget *parent, const ch + + // Keep in sync with kdelibs/kdecore/kglobalsettings.cpp + +- QFont f0("Sans Serif", 10); +- QFont f1("Monospace", 10); ++ QFont f0("Sans Serif", 12); ++ QFont f1("courier", 12); + QFont f2("Sans Serif", 10); +- QFont f3("Sans Serif", 9, QFont::Bold); +- QFont f4("Sans Serif", 10); ++ QFont f3("Sans Serif", 12, QFont::Bold); ++ QFont f4("Sans Serif", 11); + + f0.setPointSize(10); + f1.setPointSize(10); diff --git a/opensuse/core/tdebase/devmon-automounter.sh b/opensuse/core/tdebase/devmon-automounter.sh new file mode 100644 index 000000000..ff2de18f1 --- /dev/null +++ b/opensuse/core/tdebase/devmon-automounter.sh @@ -0,0 +1,1086 @@ +#!/bin/bash +# Script Name: devmon http://igurublog.wordpress.com/downloads/script-devmon/ +# Requires: udisks bash>=4 +# Recommended: consolekit zenity +# License: GNU GENERAL PUBLIC LICENSE Version 3 http://www.gnu.org/licenses/gpl-3.0.txt +# Thanks to Bernard Baeyens (berbae) for code from udisksvm script +# https://bbs.archlinux.org/viewtopic.php?id=112397 + +#========================================================================= + +defaultmountoptions="noexec,nosuid,noatime" + +#========================================================================= + +help() +{ + cat << EOF +devmon version 1.0.5 +Automounts and unmounts optical and removable drives using udisks +Requires: udisks bash>=4 Recommended: consolekit zenity +Usage: devmon [AUTOMOUNT-OPTIONS] # Run as daemon to automount + devmon [MOUNT-OPTIONS] # Or run as client to manually un/mount +AUTOMOUNT-OPTIONS: (these can be used only in daemon mode) +--exec-on-device DEVICE "COMMAND" Execute COMMAND after mounting DEVICE +--exec-on-label "LABEL" "COMMAND" Execute COMMAND after mounting LABEL +--exec-on-video "COMMAND" Execute COMMAND after video DVD mount +--exec-on-audio "COMMAND" Execute COMMAND after audio CD insertion +--exec-on-disc "COMMAND" Execute COMMAND after data CD/DVD mount +--exec-on-drive "COMMAND" Execute COMMAND after drive mount +--exec-on-unmount "COMMAND" Execute COMMAND after unmount +--exec-on-remove "COMMAND" Execute COMMAND after drive removal + Where the following in COMMAND will be replaced with: + %d mount point directory (eg /media/cd) + %f device name (eg /dev/sdd1) + %l label of mounted volume + Multiple --exec-on-XXX options may be used to execute multiple commands. + Other exec-on-XXX commands are ignored if exec-on-device or -label executed. +--mount-options "OPTIONS" Default: $defaultmountoptions +--info-on-mount Show mounted drive info in a zenity dialog +--no-mount Don't mount anything, just exec (disables + --exec-on-video) +--no-unmount Don't unmount all removable drives on exit + +MOUNT-OPTIONS: (these can be used only in client mode) +--unmount-removable | -r Sync and unmount all removable drives and show + pop-up dialog (zenity installation required) +--unmount-recent | -c Unmount most recently mounted removable drive +--unmount-optical | -o Unmount all optical drives (error pop-up only) +--unmount-all | -u Same as --unmount-removable --unmount-optical +--unmount DIR|DEVICE Unmount DEVICE or mount point DIR +--eject DIR|DEVICE Unmount and eject DEVICE or mount point DIR +--mount-all | -a Mount all removable and optical drives +--mount DEVICE Mount DEVICE +--mount-options|--mount-fstype|--unmount-options|--eject-options "OPTIONS" + These options will be passed to udisks + +UNIVERSAL OPTIONS: (these can be used in both daemon and client modes) +--ignore-device DEVICE Ignore DEVICE (eg /dev/sdd1) +--ignore-label "LABEL" Ignore volume with LABEL +--sync | -s Add sync mount option for ext2-4 ntfs ufs, or + flush for fat & vfat (slower writing but safer) +--internal Also attempt to un/mount internal system drives + (this is mostly a fix for esata issues) +--no-gui | -g Do not show zenity pop-up dialogs +Instructions and updates: + http://igurublog.wordpress.com/downloads/script-devmon/ +EOF + exit +} + +test2() +{ + if [ "${2:0:1}" = "-" ] || [ "$2" = "" ]; then + echo "devmon: Option $1 requires an argument" 1>&2 + exit 1 + fi +} + +test3() +{ + if [ "${2:0:1}" = "-" ] || [ "$2" = "" ] || \ + [ "${3:0:1}" = "-" ] || [ "$3" = "" ]; then + echo "devmon: Option $1 requires two arguments" 1>&2 + exit 1 + fi +} + +unknown() +{ + echo "devmon: Unknown option $1" 1>&2 + echo " For help use: devmon --help" 1>&2 + exit 1 +} + +# parse command line +execoix=0 +execomx=0 +execovx=0 +execoax=0 +execodx=0 +execolx=0 +execoux=0 +execorx=0 +umntx=0 +mntx=0 +ejx=0 +igdevx=0 +iglabx=0 +while [ "$1" != "" ]; do + if [ "${1:0:1}" = "-" ]; then + case "$1" in + --help ) + help + exit + ;; + # don't use eval on these to preserve command strings + --exec-on-drive ) + test2 "$1" "$2" + execoi[$execoix]="$2" + (( execoix++ )) + shift + ;; + --exec-on-disc ) + test2 "$1" "$2" + execom[$execomx]="$2" + (( execomx++ )) + shift + ;; + --exec-on-video ) + test2 "$1" "$2" + execov[$execovx]="$2" + (( execovx++ )) + shift + ;; + --exec-on-audio ) + test2 "$1" "$2" + execoa[$execoax]="$2" + (( execoax++ )) + shift + ;; + --exec-on-device ) + test3 "$1" "$2" "$3" + execod1[$execodx]="$2" + execod2[$execodx]="$3" + (( execodx++ )) + shift 2 + ;; + --exec-on-label ) + test3 "$1" "$2" "$3" + execol1[$execolx]="$2" + execol2[$execolx]="$3" + (( execolx++ )) + shift 2 + ;; + --exec-on-unmount ) + test2 "$1" "$2" + execou[$execoux]="$2" + (( execoux++ )) + shift + ;; + --exec-on-remove ) + test2 "$1" "$2" + execor[$execorx]="$2" + (( execorx++ )) + shift + ;; + --info-on-mount ) + infomount=1 + ;; + --no-mount ) + nomount=1 + ;; + --sync ) + syncopt=1 + ;; + --unmount-on-exit ) + # leave for usage compat with versions prior to 1.0.1 + ;; + --no-unmount ) + nounmount=1 + ;; + --unmount-all ) + unmountrem=1 + unmountoptical=1 + ;; + --unmount-removable ) + unmountrem=1 + ;; + --unmount-optical ) + unmountoptical=1 + ;; + --unmount-recent ) + unmountrecent=1 + ;; + --unmount ) + test2 "$1" "$2" + umnt[$umntx]="$2" + (( umntx++ )) + shift + ;; + --mount-all ) + mountall=1 + ;; + --mount ) + test2 "$1" "$2" + mnt[$mntx]="$2" + (( mntx++ )) + shift + ;; + --eject ) + test2 "$1" "$2" + ej[$ejx]="$2" + (( ejx++ )) + shift + ;; + --mount-options ) + test2 "$1" "$2" + mountoptions="$2" + shift + ;; + --mount-fstype ) + test2 "$1" "$2" + mountfstype="$2" + shift + ;; + --unmount-options ) + test2 "$1" "$2" + unmountoptions="$2" + shift + ;; + --eject-options ) + test2 "$1" "$2" + ejectoptions="$2" + shift + ;; + --internal ) + internal=1 + ;; + --nogui | --no-gui ) + nogui=1 + ;; + --ignore-device ) + test2 "$1" "$2" + igdev[$igdevx]="$2" + (( igdevx++ )) + shift + ;; + --ignore-label ) + test2 "$1" "$2" + iglab[$iglabx]="$2" + (( iglabx++ )) + shift + ;; + --* ) + unknown "$1";; + -* ) + o="${1:1}" + while [ "$o" != "" ]; do + case "${o:0:1}" in + r ) + unmountrem=1;; + o ) + unmountoptical=1;; + u ) + unmountrem=1 + unmountoptical=1 + ;; + a ) + mountall=1;; + s ) + syncopt=1;; + c ) + unmountrecent=1;; + g ) + nogui=1;; + h ) + help + exit + ;; + * ) + unknown "-${o:0:1}";; + esac + o="${o:1}" + done + ;; + esac + else + unknown "$1" + fi + shift +done +(( mountmode = umntx + mntx + ejx + unmountrem + unmountoptical + mountall + unmountrecent )) + +# Warnings +if [ "$(whoami)" = "root" ]; then + echo "WARNING: running devmon as root is usually not required or recommended" 1>&2 +fi + +if (( execoix + execomx + execovx + execoax + execodx + execolx + execoux + execorx \ + + nounmount + infomount != 0 )) && (( mountmode != 0 )); then + echo "WARNING: devmon automount options ignored in mount mode" 1>&2 +fi + +driveinfo() #$1=dev #Optional $2=quiet +{ + unset systeminternal usage ismounted presentationnopolicy hasmedia \ + opticaldisc numaudiotracks type partition media blank label + uinfos=`udisks --show-info $1 2> /dev/null` + label=`echo "$uinfos" | grep -m 1 "^ label:" | sed 's/ *label: *\(.*\)/\1/'` + listinfos=`echo "$uinfos" | grep \ + -e "^ system internal:" \ + -e "^ usage:" \ + -e "^ type:" \ + -e "^ is mounted:" \ + -e "^ presentation nopolicy:" \ + -e "^ has media" \ + -e "^ optical disc:" \ + -e " blank:" \ + -e " num audio tracks:" \ + -e "^ partition:" \ + -e " media:"` + # The change for type= is to take only its first value in listinfos + listinfos=$(echo "$listinfos" | sed 's/ //g + s/:/=/ + s/opticaldisc=/&1/ + s/type=\(.*\)/type=${type:-\1}/ + s/[()]//g + s/partition=/&1/') + eval "$listinfos" + if (( internal == 1 )); then + systeminternal="ignored" + fi + # Take only the first character + hasmedia=${hasmedia:0:1} + # If "partition:" not find in listinfos, should mean it is not a partition + partition=${partition:-0} + nopolicy="$presentationnopolicy" + if (( mountmode == 0 )) && [ "$systeminternal" != "1" ] && [ "$2" != "quiet" ]; then + if [ "$usage" = "filesystem" ] || [ "$opticaldisc" = "1" ]; then + echo "device: [$1]" + echo " systeminternal: [$systeminternal]" + echo " usage: [$usage]" + echo " type: [$type]" + echo " label: [$label]" + echo " ismounted: [$ismounted]" + echo " nopolicy: [$nopolicy]" + echo " hasmedia: [$hasmedia]" + echo " opticaldisc: [$opticaldisc]" + echo " numaudiotracks: [$numaudiotracks]" + echo " blank: [$blank]" + echo " media: [$media]" + echo " partition: [$partition]" + fi + fi +} + +ignoredevice() +{ + idx=0 + while (( idx < igdevx )); do + if [ "$1" = "${igdev[$idx]}" ]; then + echo "devmon: ignored device $1" + return 0 + fi + (( idx++ )) + done + return 1 +} + +ignorelabel() +{ + ilx=0 + while (( ilx < iglabx )); do + if [ "$1" = "${iglab[$ilx]}" ]; then + echo "devmon: ignored label $1" + return 0 + fi + (( ilx++ )) + done + return 1 +} + +execcommands() # $exectype "${exec[@]}" +{ + exectype="$1" + shift + while [ "$1" != "" ]; do + usercmd="$1" + usercmd="${usercmd//%f/$dv}" + usercmd="${usercmd//%l/'$lb'}" + usercmd="${usercmd//%d/'$point'}" + if [ "$usercmd" != "" ]; then + echo "devmon: [$exectype] eval $usercmd &" + eval $usercmd & + fi + shift + done +} + +mountdev() # $1=device [$2=label] [$3=devtype or fstype] +{ + # set label comment + if [ "$2" = "" ]; then + lblcmt="" + else + lblcmt="($2)" + fi + # set mount-fstype option + if [ "$mountfstype" != "" ]; then + fst="--mount-fstype" + else + fst="" + fi + # set default mount options + if [ "$mountoptions" != "" ]; then + mopts="$mountoptions" + else + mopts="$defaultmountoptions" + fi + # set sync mount options + if (( syncopt == 1 )); then + case "$3" in + ext2 | ext3 | ext4 | ufs | ntfs ) + mopts="$mopts,sync";; + fat | vfat ) + mopts="$mopts,flush";; + esac + fi + # mount + mntmsg="devmon: mount $1 --mount-options $mopts $fst $mountfstype $lblcmt" + if [ "$3" != "nofs" ]; then + echo "$mntmsg" + fi + umsg=`udisks --mount $1 --mount-options "$mopts" $fst $mountfstype 2>&1` + mounterr="$?" + # get mount point + point=`echo "$umsg" | grep "^Mounted " | sed 's/^Mounted .* at \(.*\)/\1/'` + if [ "$mounterr" != "0" ] || [ "$point" = "" ]; then + # if $3=nofs then there was no apparent filesystem but we tried to mount it + # anyway in case it didn't report the filesystem accurately, so ignore the + # error + if [ "$3" != "nofs" ]; then + echo "$umsg" 1>&2 + echo "devmon: error mounting $1 ($mounterr)" 1>&2 + if (( mountmode == 0 )) && (( polkiterrgiven != 1 )) && \ + [ "$(echo "$umsg" | grep "Not Authorized")" != "" ]; then + if (( nogui != 1 )); then + ( sleep 3 && WINDOWID="" zenity --error --no-wrap --title="devmon error" \ + --text="udisks functions are not authorized through policykit,\nso devmon cannot automount drives.\nPlease see devmon's consolekit installation instructions:\n\nhttp://igurublog.wordpress.com/downloads/script-devmon/#install\n\n(To silence this pop-up add --no-gui to devmon's command line.)" &> /dev/null ) & + fi + echo "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@" 1>&2 + echo "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@" 1>&2 + echo "udisks functions are not authorized through policykit," 1>&2 + echo "so devmon cannot automount drives." 1>&2 + echo "Please see devmon's consolekit installation instructions:" 1>&2 + echo "http://igurublog.wordpress.com/downloads/script-devmon/#install" 1>&2 + echo "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@" 1>&2 + echo "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@" 1>&2 + polkiterrgiven=1 + fi + fi + uerr=3 + return 3 + elif [ "$3" = "nofs" ]; then + # no filesystem reported but successful mount + echo "$mntmsg" + fi + echo "$umsg" +} + +unmountdev() # $1=device +{ + if [ "$unmountoptions" != "" ]; then + echo "devmon: unmount $1 --unmount-options $unmountoptions" + uerrmsg=`udisks --unmount $1 --unmount-options "$unmountoptions" 2>&1` + else + echo "devmon: unmount $1" + uerrmsg=`udisks --unmount $1 2>&1` + fi + if [ "$uerrmsg" != "" ]; then + # bug: udisks returns $?==0 when unmount fails + echo "$uerrmsg" + uerr=3 + return 3 + fi +} + +ejectdev() +{ + if [ "$ejectoptions" != "" ]; then + echo "devmon: eject $1 --eject-options $ejectoptions" + udisks --eject $1 --eject-options "$ejectoptions" + else + echo "devmon: eject $1" + udisks --eject $1 + fi + if [ "$?" != "0" ]; then + uerr=3 + return 3 + fi +} + +mountdrive() # $1=device $2=label [$3=devtype or fstype] +{ + dv="$1" + lb="$2" + tp="$3" + unset point + + if ( ignoredevice "$dv" ) || ( ignorelabel "$lb" ); then + return + fi + + # mount + if [ "$tp" != "audiocd" ] && (( nomount != 1 )); then + mountdev $dv "$lb" "$tp" + if [ "$?" != "0" ]; then + return + fi + fi + + # exec on device + unset execdone + x=0 + while (( x < execodx )); do + if [ "${execod1[$x]}" = "$dv" ]; then + usercmd="${execod2[$x]}" + usercmd="${usercmd//%f/$dv}" + usercmd="${usercmd//%l/'$lb'}" + usercmd="${usercmd//%d/'$point'}" + if [ "$usercmd" != "" ]; then + echo "devmon: [exec on device] eval $usercmd" + eval $usercmd & + execdone=1 + fi + fi + (( x++ )) + done + if (( execdone == 1 )); then return; fi + + # exec on label + x=0 + while (( x < execolx )); do + if [ "${execol1[$x]}" = "$lb" ]; then + usercmd="${execol2[$x]}" + usercmd="${usercmd//%f/$dv}" + usercmd="${usercmd//%l/'$lb'}" + usercmd="${usercmd//%d/'$point'}" + if [ "$usercmd" != "" ]; then + echo "devmon: [exec on label] eval $usercmd" + eval $usercmd & + execdone=1 + fi + fi + (( x++ )) + done + if (( execdone == 1 )); then return; fi + + # exec on video + if [ "$tp" = "dvd" ] && [ "$point" != "" ] && [ -d "$point/VIDEO_TS" ]; then + echo "devmon: videodvd $dv ($lb) on $point" + if (( execovx != 0 )); then + execcommands "exec on video" "${execov[@]}" + fi + return + fi + + # exec on audio + if [ "$tp" = "audiocd" ]; then + echo "devmon: audiocd $dv ($lb)" + if (( execoax != 0 )); then + execcommands "exec on audio" "${execoa[@]}" + fi + return + fi + + # exec on disc + if [ "$tp" = "optical" ] || [ "$tp" = "dvd" ]; then + if [ "$point" != "" ] || (( nomount == 1 )); then + if (( execomx != 0 )); then + execcommands "exec on disc" "${execom[@]}" + fi + fi + return + fi + + # exec on drive + if [ "$point" != "" ] || (( nomount == 1 )); then + if (( execoix != 0 )); then + execcommands "exec on drive" "${execoi[@]}" + fi + fi + + # info on mount + if [ "$point" != "" ] && (( infomount == 1 )) && (( nomount != 1 )); then + sleep .5 + echo "devmon: [info on mount] $dv" + if (( nogui != 1 )); then + WINDOWID="" zenity --info --text="The following device has been mounted:\n\n$(df -hT "$dv" \ + | grep "$dv" | awk '{print "Device:\\t"$1"\x0AType:\\t"$2"\nSize:\\t\\t"$3"\nUsed:\\t"$4"\n""Avail:\\t"$5"\nUse%:\\t"$6"\nMount:\\t"$7,$8,$9,$10}')\nLabel:\\t$lb" --title="devmon mount" & + fi + df -hT "$dv" + fi +} + +mountalldrives() +{ + # Mount all optical drives, no exec + x=0 + while [ -e /dev/sr$x ]; do + driveinfo /dev/sr$x + if [ "$numaudiotracks" = "" ]; then + numaudiotracks=0 + fi + if [ "$systeminternal" != "1" ] && [ "$opticaldisc" = "1" ] && \ + [ "$ismounted" != "1" ] && [ "$hasmedia" != "0" ] && \ + [ "$blank" != "1" ] && (( numaudiotracks == 0 )) && \ + [ "$nopolicy" != "1" ]; then + if ( ignoredevice "/dev/sr$x" ) || ( ignorelabel "$label" ); then + (( x++ )) + continue + fi + mountdev /dev/sr$x "$label" + eval notejectedsr$x=1 + fi + (( x++ )) + done + # Mount removable drives, no exec + IFSOLD="$IFS" + IFS=$'\n' + partlist=`grep " sd[a-z0-9]*$" /proc/partitions | sed 's/.* \(sd[a-z0-9]*\)/\1/'` + for p in $partlist; do + if ( ignoredevice "/dev/$p" ); then + continue + fi + driveinfo /dev/$p + if ( ignorelabel "$label" ); then + continue + else + if [ "$systeminternal" != "1" ] && [ "$opticaldisc" != "1" ] && \ + [ "$ismounted" = "0" ] && [ "$nopolicy" != "1" ]; then + if [ "$usage" = "filesystem" ]; then + echo "mountdev /dev/$p $label $type" + mountdev /dev/$p "$label" "$type" + else + mountdev /dev/$p "$label" nofs + fi + fi + fi + done + IFS="$IFSOLD" +} + +trapexit() +{ + kill $COPROC_PID 2> /dev/null + + # prevent trap code from executing multiple times on different signals + if (( trapdone != 1 )); then + trapdone=1 + # Unmount All + if (( nounmount != 1 )); then + IFSOLD="$IFS" + IFS=$'\n' + uerr=0 + partlist=`grep " sd[a-z0-9]*$" /proc/partitions | \ + sed 's/.* \(sd[a-z0-9]*\)/\1/'` + for p in $partlist; do + if ( ignoredevice "/dev/$p" ); then + continue + fi + driveinfo /dev/$p + if ( ignorelabel "$label" ); then + continue + else + if [ "$systeminternal" != "1" ] && [ "$opticaldisc" != "1" ] && \ + [ "$usage" = "filesystem" ] && [ "$ismounted" = "1" ]; then + echo "devmon: [on exit] unmount /dev/$p &" + udisks --unmount /dev/$p & + if [ "$?" != "0" ]; then + uerr=3 + fi + fi + fi + done + IFS="$IFSOLD" + fi + echo 'devmon: stopped' + exit $uerr + fi +} + +# Client Mode +if (( mountmode != 0 )); then + uerr=0 + if (( unmountrem == 1 )) || (( unmountrecent == 1 )); then + y=0 + unset udrive zpid + IFSOLD="$IFS" + IFS=$'\n' + if (( unmountrem == 1 )); then + # Unmount All Removable Drives + partlist=`grep " sd[a-z0-9]*$" /proc/partitions | sed 's/.* \(sd[a-z0-9]*\)/\1/'` + msgtitle="devmon unmount" + else + # Unmount Recent + partlist=`mount | grep "^/dev/.* on " | sed 's/^\/dev\/\(.*\) on .*/\1/' \ + | grep -v -e "null" -e "shm" -e "mapper" -e "snd" \ + -e "video" -e "random" | tac` + msgtitle="devmon unmount recent" + fi + for p in $partlist; do + if ( ignoredevice "/dev/$p" ); then + continue + fi + driveinfo /dev/$p + if ( ignorelabel "$label" ); then + continue + else + if [ "$systeminternal" != "1" ] && [ "$opticaldisc" != "1" ] \ + && [ "$ismounted" = "1" ]; then + udrive[$y]="/dev/$p" + (( y++ )) + if (( unmountrem != 1 )); then break; fi + fi + fi + done + IFS="$IFSOLD" + if (( y == 0 )); then + msg="No removable drives are mounted" + echo "$msg" + else + msg="Unmounting ${udrive[@]}...\n\n(This dialog will close when the devices are unmounted)" + echo "Preparing to unmount ${udrive[@]}" + fi + if (( nogui != 1 )); then + WINDOWID="" zenity --info --title="$msgtitle" --text="$msg" &> /dev/null & + zpid=$! + fi + if (( y > 0 )); then + echo "devmon: sync" + sync + for d in ${udrive[@]}; do + unmountdev $d + if [ "$?" != "0" ] && (( nogui != 1 )); then + driveinfo "$d" quiet + if [ "$label" = "" ]; then + lb="" + else + lb=" ($label)" + fi + msg="Unmount error on $d$lb:\n\n$uerrmsg" + WINDOWID="" zenity --error --title="$msgtitle" --text="$msg" &> /dev/null & + fi + done + echo "devmon: sync" + sync + fi + if [ "$zpid" != "" ]; then + sleep 2 + kill $zpid 2> /dev/null + fi + fi + + # Unmount Optical + if (( unmountoptical == 1 )); then + x=0 + while [ -e "/dev/sr$x" ]; do + if ( ignoredevice "/dev/sr$x" ); then + (( x++ )) + continue + fi + driveinfo /dev/sr$x + if ( ignorelabel "$label" ); then + (( x++ )) + continue + else + if [ "$systeminternal" != "1" ] && [ "$opticaldisc" = "1" ] && \ + [ "$ismounted" = "1" ]; then + unmountdev /dev/sr$x + if [ "$?" != "0" ] && (( nogui != 1 )); then + if [ "$label" = "" ]; then + lb="" + else + lb=" ($label)" + fi + msg="Unmount error on /dev/sr$x$lb:\n\n$uerrmsg" + WINDOWID="" zenity --error --title="devmon unmount optical" \ + --text="$msg" &> /dev/null & + fi + fi + fi + (( x++ )) + done + fi + + # Unmount DIR|DEVICE + if (( umntx > 0 )); then + x=0 + while (( x < umntx )); do + d="${umnt[$x]}" + # remove trailing slash + if [ "$d" != "/" ]; then + d="${d%/}" + fi + if [ "${d:0:5}" = "/dev/" ]; then + # Unmount DEVICE + unmountdev "$d" + else + # Unmount DIR + if [ "$(dirname "$d")" = "." ]; then + if [ -d "$(pwd)/$d" ]; then + d="$(pwd)/$d" + elif [ -d "/media/$d" ]; then + d="/media/$d" + elif [ -e "/dev/$d" ] && [ "$(mount | grep "^/dev/$d on ")" != "" ]; then + unmountdev "/dev/$d" + (( x++ )) + continue + fi + fi + if [ ! -d "$d" ]; then + echo "devmon: No such directory or mounted device $d" 1>&2 + uerr=3 + else + dv=`mount | grep -m 1 " on $d type " | awk '{print $1}'` + if [ "$dv" = "" ]; then + echo "devmon: Nothing mounted on $d (mtab)" 1>&2 + uerr=3 + else + unmountdev "$dv" + fi + fi + fi + (( x++ )) + done + fi + + # Eject DIR|DEVICE + if (( ejx > 0 )); then + x=0 + while (( x < ejx )); do + d="${ej[$x]}" + # remove trailing slash + if [ "$d" != "/" ]; then + d="${d%/}" + fi + dv="" + if [ "${d:0:5}" = "/dev/" ]; then + # Eject DEVICE + dv="$d" + else + # Eject DIR + if [ "$(dirname "$d")" = "." ]; then + if [ -d "$(pwd)/$d" ]; then + d="$(pwd)/$d" + elif [ -d "/media/$d" ]; then + d="/media/$d" + elif [ -e "/dev/$d" ] && [ "$(mount | grep "^/dev/$d on ")" != "" ]; then + dv="/dev/$d" + fi + fi + if [ "$dv" = "" ]; then + if [ ! -d "$d" ]; then + echo "devmon: No such directory or mounted device $d" 1>&2 + uerr=3 + else + dv=`mount | grep -m 1 " on $d type " | awk '{print $1}'` + if [ "$dv" = "" ]; then + echo "devmon: Nothing mounted on $d (mtab)" 1>&2 + uerr=3 + fi + fi + fi + fi + if [ "$dv" != "" ]; then + driveinfo "$dv" + if [ "$systeminternal" != "1" ] && [ "$opticaldisc" = "1" ] && \ + [ "$ismounted" = "1" ]; then + unmountdev "$dv" + fi + ejectdev "$dv" + fi + (( x++ )) + done + fi + + # Mount DEVICE + if (( mntx > 0 )); then + x=0 + while (( x < mntx )); do + d="${mnt[$x]}" + # remove trailing slash + if [ "$d" != "/" ]; then + d="${d%/}" + fi + if [ "$(dirname "$d")" = "." ] && [ "${d:0:5}" != "/dev/" ]; then + d="/dev/$d" + fi + driveinfo "$d" quiet + if [ "$opticaldisc" = "1" ]; then + mountdev $d "$label" + else + mountdev $d "$label" "$type" + fi + (( x++ )) + done + fi + + # Mount All Unmounted + if (( mountall == 1 )); then + mountalldrives + fi + + exit $uerr +fi + +# Daemon Mode +if [ "$mountfstype" != "" ]; then + echo "WARNING: --mount-fstype ignored in daemon mode" 1>&2 + mountfstype="" +fi +if [ "$unmountoptions" != "" ]; then + echo "WARNING: --unmount-options ignored in daemon mode" 1>&2 + unmountoptions="" +fi +if [ "$ejectoptions" != "" ]; then + echo "WARNING: --eject-options ignored in daemon mode" 1>&2 + ejectoptions="" +fi +pidcount=`ps h -C ${0//*\//} -o pid | wc -l` +if (( pidcount > 2 )); then + echo + echo "WARNING: multiple instances of devmon appear to be running" + echo +fi + +# Trigger udisks daemon start two ways +if [ -e /dev/sr0 ]; then + udisks --poll-for-media /dev/sr0 +fi +udisks --show-info /dev/sda > /dev/null +sleep 2 # helps successful sr0 startup mount on reboot + + +# Startup Mounting +if (( nomount != 1 )); then + mountalldrives +fi + +# Start monitoring +coproc udisks --monitor +err=$? +trap trapexit EXIT SIGINT SIGTERM SIGQUIT +trap "echo devmon: ignored HUP" SIGHUP + +if [ $err != "0" ] || [ ! ps -p $COPROC_PID &>/dev/null ]; then + echo "devmon: unable to start udisks --monitor" 1>&2 + echo " is udisks installed and dbus running?" 1>&2 + exit 2 +fi + + +# Monitoring Loop +while ps -p $COPROC_PID &>/dev/null; do + read -u ${COPROC[0]} + echo "===========================================" + echo "$REPLY" + event="${REPLY%:*}" + devpath="${REPLY#*:}" + devpath="/dev/${devpath##*/}" + if [ "$event" != "" ] && [ "$devpath" != "/dev/" ] && [ -e "$devpath" ]; then + case $event in + added ) + driveinfo $devpath + if [ "$systeminternal" != "1" ] && [ "$ismounted" = "0" ] && \ + [ "$nopolicy" != "1" ]; then + if [ "$usage" = "filesystem" ]; then + mountdrive $devpath "$label" "$type" + else + mountdrive $devpath "$label" nofs + fi + fi + ;; + job-changed ) + ;; + removed ) + ;; + changed ) + driveinfo $devpath + eval notejected=\$notejected${devpath#/dev/} + eval devmounted=\$devmounted${devpath#/dev/} + eval devmounted${devpath#/dev/}="$ismounted" + # If notejected==1 then cd has not been ejected and was probably + # manually unmounted, so don't automount it. Otherwise + # devmon will instantly mount any manual unmount. + if [ "$systeminternal" != "1" ] && [ "$opticaldisc" = "1" ] && \ + [ "$ismounted" != "1" ] && [ "$hasmedia" != "0" ] && \ + [ "$blank" != "1" ] && (( notejected != 1 )) && \ + [ "$nopolicy" != "1" ]; then + if [ "$media" = "optical_dvd" ]; then + mountdrive $devpath "$label" dvd + elif (( numaudiotracks > 0 )); then + mountdrive $devpath "$label" audiocd + else + mountdrive $devpath "$label" optical + fi + eval notejected${devpath#/dev/}=1 + else + if [ "$systeminternal" != "1" ] && \ + [ "$ismounted" != "1" ] && [ "$hasmedia" = "0" ]; then + # disc ejected + echo "devmon: $devpath eject detected" + eval notejected${devpath#/dev/}=0 + fi + if [ "$systeminternal" != "1" ] && [ "$ismounted" != "1" ] && \ + [ "$nopolicy" != "1" ] && [ "$devmounted" = "1" ]; then + # exec-on-unmount + if (( execoux != 0 )); then + if ( ! ignoredevice "$devpath" ) && ( ! ignorelabel "$label" ); then + dv="$devpath" + execcommands "exec on unmount" "${execou[@]}" + fi + fi + fi + fi + ;; + esac + elif [ "$event" = "removed" ]; then + eval unset devmounted${devpath#/dev/} + # exec-on-remove + if (( execorx != 0 )); then + if ( ! ignoredevice "$devpath" ); then + unset lb point + dv="$devpath" + execcommands "exec on remove" "${execor[@]}" + fi + fi + fi +done + +exit + +# CHANGELOG +# 1.0.5: --exec-on-unmount now executes only once per unmount +# 1.0.4: added --exec-on-unmount, --exec-on-remove +# added multiple instance warning +# %f device spec no longer passed in quotes to commands +# 1.0.3: help updated for sync +# corrected exec-on-drive bug introduced in 1.0.1 +# 1.0.2: --sync adds sync for ntfs +# 1.0.1: added --sync +# added --no-unmount; unmount-on-exit is now default +# obey UDISKS_PRESENTATION_NOPOLICY to inhibit automount +# added unmount-all error pop-ups +# 1.0.0: added --unmount-recent +# improved udisks mount info to stdout +# improved mount/unmount without apparent filesystem +# 0.9.5: ignore trailing slash in un/mount dir/dev specs +# attempt to mount no filesystem in case there is one +# 0.9.4: polkit error more selective +# 0.9.3: corrected problems with spaces in volume labels +# corrected un/mounting of partitionless devices +# corrected --ignore-devices problem +# added not authorized pop-up error +# 0.9.2: added --internal +# 0.9.1: corrected --unmount-on-removable not recognized +# 0.9.0: changed --unmount-all to --unmount-removable +# added --unmount-all (now includes optical) +# added --unmount-optical +# added --unmount DIR|DEVICE +# added --eject DIR|DEVICE +# added --mount-all +# added --mount DEVICE +# added --info-on-mount +# added pass options to udisks +# better error msg from udisks +# individual drive eject detection +# no limit on number of optical drives +# 0.8.2: more verbose errors +# run as root changed to warning +# 0.8.1: added --unmount-on-exit +# adjusted start daemon trigger, timing +# added 'do not run as root' catcher +# added trap to ignore SIGHUP + diff --git a/opensuse/core/tdebase/dont-always-start-kaccess.diff b/opensuse/core/tdebase/dont-always-start-kaccess.diff new file mode 100644 index 000000000..f50747274 --- /dev/null +++ b/opensuse/core/tdebase/dont-always-start-kaccess.diff @@ -0,0 +1,66 @@ +Index: kcontrol/access/kcmaccess.cpp +=================================================================== +--- kcontrol/access/kcmaccess.cpp.orig ++++ kcontrol/access/kcmaccess.cpp +@@ -103,10 +103,57 @@ void ExtendedIntNumInput::slotSliderValu + + static bool needToRunKAccessDaemon( KConfig *config ) + { +- // We always start the KAccess Daemon, if it is not needed, +- // it will terminate itself after configuring the AccessX +- // features. +- return true; ++ KConfigGroup bell( config, "Bell" ); ++ ++ if (!bell.readBoolEntry("SystemBell", true)) ++ return true; ++ if (bell.readBoolEntry("ArtsBell", false)) ++ return true; ++ if (bell.readBoolEntry("VisibleBell", false)) ++ return true; ++ ++ KConfigGroup keyboard( config, "Keyboard" ); ++ ++ if (keyboard.readBoolEntry("StickyKeys", false)) ++ return true; ++ if (keyboard.readBoolEntry("SlowKeys", false)) ++ return true; ++ if (keyboard.readBoolEntry("BounceKeys", false)) ++ return true; ++ if (keyboard.readBoolEntry("Gestures", true)) ++ return true; ++ // Find out whether the gestures are activated by default in the X configuration or not. ++ int major = XkbMajorVersion; ++ int minor = XkbMinorVersion; ++ if (XkbLibraryVersion(&major, &minor)) ++ { ++ int opcode_rtrn; ++ int error_rtrn; ++ int xkb_opcode; ++ if (XkbQueryExtension(qt_xdisplay(), &opcode_rtrn, &xkb_opcode, &error_rtrn, ++ &major, &minor)) ++ { ++ if(XkbDescPtr xkbdesc = XkbGetMap(qt_xdisplay(), 0, XkbUseCoreKbd)) ++ { ++ if(XkbGetControls(qt_xdisplay(), XkbAllControlsMask/*XkbAccessXKeysMask*/, xkbdesc ) == Success ) ++ { ++ if(xkbdesc->ctrls->enabled_ctrls & XkbAccessXKeysMask) ++ { ++ XkbFreeClientMap(xkbdesc,0,True); ++ return true; ++ } ++ } ++ XkbFreeClientMap(xkbdesc,0,True); ++ } ++ } ++ } ++ ++ KConfigGroup mouse( config, "Mouse" ); ++ ++ if (mouse.readBoolEntry("MouseKeys", false)) ++ return true; ++ ++ return false; // don't need it + } + + QString mouseKeysShortcut (Display *display) { diff --git a/opensuse/core/tdebase/fileshareset.8.gz b/opensuse/core/tdebase/fileshareset.8.gz new file mode 100644 index 000000000..c311d10b3 Binary files /dev/null and b/opensuse/core/tdebase/fileshareset.8.gz differ diff --git a/opensuse/core/tdebase/fileshareset2.tar.bz2 b/opensuse/core/tdebase/fileshareset2.tar.bz2 new file mode 100644 index 000000000..5e26bb796 Binary files /dev/null and b/opensuse/core/tdebase/fileshareset2.tar.bz2 differ diff --git a/opensuse/core/tdebase/fix-desktop-icons.diff b/opensuse/core/tdebase/fix-desktop-icons.diff new file mode 100644 index 000000000..27d83f685 --- /dev/null +++ b/opensuse/core/tdebase/fix-desktop-icons.diff @@ -0,0 +1,250 @@ +Index: kcontrol/componentchooser/componentchooser.desktop +=================================================================== +--- kcontrol/componentchooser/componentchooser.desktop.orig ++++ kcontrol/componentchooser/componentchooser.desktop +@@ -1,6 +1,6 @@ + [Desktop Entry] + Exec=kcmshell componentchooser +-Icon=misc ++Icon=kcmcomponentchooser + Type=Application + + +Index: kcontrol/taskbar/kcmtaskbar.desktop +=================================================================== +--- kcontrol/taskbar/kcmtaskbar.desktop.orig ++++ kcontrol/taskbar/kcmtaskbar.desktop +@@ -1,5 +1,5 @@ + [Desktop Entry] +-Icon=kmenu ++Icon=kcmtaskbar + Type=Application + DocPath=kcontrol/kcmtaskbar/index.html + Exec=kcmshell kcmtaskbar +Index: kcontrol/nics/nic.desktop +=================================================================== +--- kcontrol/nics/nic.desktop.orig ++++ kcontrol/nics/nic.desktop +@@ -2,7 +2,7 @@ + Exec=kcmshell nic + Type=Application + DocPath=kinfocenter/nics/index.html +-Icon=network ++Icon=kcmnic + + + X-KDE-Library=nic +Index: kcontrol/input/mouse.desktop +=================================================================== +--- kcontrol/input/mouse.desktop.orig ++++ kcontrol/input/mouse.desktop +@@ -1,6 +1,6 @@ + [Desktop Entry] + Exec=kcmshell mouse +-Icon=mouse ++Icon=kcmmouse + Type=Application + DocPath=kcontrol/mouse/index.html + +Index: kcontrol/smserver/kcmsmserver.desktop +=================================================================== +--- kcontrol/smserver/kcmsmserver.desktop.orig ++++ kcontrol/smserver/kcmsmserver.desktop +@@ -1,5 +1,5 @@ + [Desktop Entry] +-Icon=exit ++Icon=kcmsmserver + Type=Application + DocPath=kcontrol/kcmsmserver/index.html + Exec=kcmshell kcmsmserver +Index: kcontrol/kded/kcmkded.desktop +=================================================================== +--- kcontrol/kded/kcmkded.desktop.orig ++++ kcontrol/kded/kcmkded.desktop +@@ -1,6 +1,6 @@ + [Desktop Entry] + Exec=kcmshell kcmkded +-Icon=services ++Icon=kcmkded + Type=Application + + +Index: kcontrol/konq/desktop.desktop +=================================================================== +--- kcontrol/konq/desktop.desktop.orig ++++ kcontrol/konq/desktop.desktop +@@ -1,7 +1,7 @@ + [Desktop Entry] + Type=Application + DocPath=kcontrol/desktop/index.html#desktop-number +-Icon=desktop ++Icon=kcmdesktop + Exec=kcmshell desktop + + +Index: kcontrol/konq/desktopbehavior.desktop +=================================================================== +--- kcontrol/konq/desktopbehavior.desktop.orig ++++ kcontrol/konq/desktopbehavior.desktop +@@ -1,7 +1,7 @@ + [Desktop Entry] + Type=Application + DocPath=kcontrol/desktopbehavior/index.html +-Icon=desktop ++Icon=kcmdesktopbehavior + Exec=kcmshell desktopbehavior + + +Index: kcontrol/privacy/privacy.desktop +=================================================================== +--- kcontrol/privacy/privacy.desktop.orig ++++ kcontrol/privacy/privacy.desktop +@@ -1,5 +1,5 @@ + [Desktop Entry] +-Icon=trashcan_empty ++Icon=kcmprivacy + Comment=Privacy - a kcontrol module to clean unwanted traces the user leaves on the system + Comment[af]=Privaatheid - 'n Beheer module wat voetspore wat deur gebruikers op die stelsel gelaat word skoon maak + Comment[ar]=الخصوصية - وحدة kcontrol لتنظي٠الآثار غير المرغوب بها التي يتركها المستخدم على النظام +Index: kcontrol/crypto/crypto.desktop +=================================================================== +--- kcontrol/crypto/crypto.desktop.orig ++++ kcontrol/crypto/crypto.desktop +@@ -1,5 +1,5 @@ + [Desktop Entry] +-Icon=encrypted ++Icon=kcmcrypto + Type=Application + Exec=kcmshell crypto + DocPath=kcontrol/crypto/index.html +Index: kcontrol/kio/netpref.desktop +=================================================================== +--- kcontrol/kio/netpref.desktop.orig ++++ kcontrol/kio/netpref.desktop +@@ -76,7 +76,7 @@ Comment[zh_CN]=é…置通用网络首选é + Comment[zh_TW]=設定一般網路喜好設定,例如逾時值 + Comment[zu]=Hlanganisela okuncanyelwa uwonkewonke koxhumano olusazekile, njengamanani esikhathi sokuphuma + Exec=kcmshell netpref +-Icon=network ++Icon=kcmnetpref + Keywords=timeout,iopref,netpref,network preferences,ftp + Keywords[be]=ТÑрмін чаканнÑ,УлаÑціваÑці Ñеткі,timeout,iopref,netpref,network preferences,ftp + Keywords[bg]=проÑрочка, време, времето, пауза, прекъÑване, връзка, timeout, iopref, netpref, network preferences, ftp +Index: kcontrol/konqhtml/khtml_filter.desktop +=================================================================== +--- kcontrol/konqhtml/khtml_filter.desktop.orig ++++ kcontrol/konqhtml/khtml_filter.desktop +@@ -1,7 +1,7 @@ + [Desktop Entry] + Type=Application + DocPath=kcontrol/khtml/index.html#khtml-adblock +-Icon=filter ++Icon=kcmkhtml_filter + Exec=kcmshell khtml_filter + + X-KDE-Library=konqhtml +Index: kcontrol/joystick/joystick.desktop +=================================================================== +--- kcontrol/joystick/joystick.desktop.orig ++++ kcontrol/joystick/joystick.desktop +@@ -173,5 +173,5 @@ Type=Application + X-KDE-FactoryName=kcm_joystick + X-KDE-Library=joystick + X-KDE-Test-Module=true +-Icon=joystick ++Icon=kcmjoystick + Categories=Qt;KDE;X-KDE-settings-hardware; +Index: kcontrol/colors/colors.desktop +=================================================================== +--- kcontrol/colors/colors.desktop.orig ++++ kcontrol/colors/colors.desktop +@@ -1,6 +1,6 @@ + [Desktop Entry] + Exec=kcmshell colors +-Icon=colorscm ++Icon=kcmcolors + Type=Application + DocPath=kcontrol/colors/index.html + +Index: kcontrol/performance/kcmperformance.desktop +=================================================================== +--- kcontrol/performance/kcmperformance.desktop.orig ++++ kcontrol/performance/kcmperformance.desktop +@@ -1,5 +1,5 @@ + [Desktop Entry] +-Icon=launch ++Icon=kcmperformance + Type=Application + Exec=kcmshell kcmperformance + +Index: kcontrol/launch/kcmlaunch.desktop +=================================================================== +--- kcontrol/launch/kcmlaunch.desktop.orig ++++ kcontrol/launch/kcmlaunch.desktop +@@ -1,5 +1,5 @@ + [Desktop Entry] +-Icon=launch ++Icon=kcmlaunch + Type=Application + DocPath=kcontrol/kcmlaunch/index.html + Exec=kcmshell kcmlaunch +Index: kcontrol/dnssd/kcm_kdnssd.desktop +=================================================================== +--- kcontrol/dnssd/kcm_kdnssd.desktop.orig ++++ kcontrol/dnssd/kcm_kdnssd.desktop +@@ -70,7 +70,7 @@ Comment[zh_TW]=設定æœå‹™åµæ¸¬ + Exec=kcmshell kcm_kdnssd + GenericName= + GenericName[ko]=ì¼ë°˜ +-Icon=blockdevice ++Icon=kcmkdnssd + MimeType= + Name=Service Discovery + Name[af]=Dienste ontdekker +Index: kcontrol/spellchecking/spellchecking.desktop +=================================================================== +--- kcontrol/spellchecking/spellchecking.desktop.orig ++++ kcontrol/spellchecking/spellchecking.desktop +@@ -1,6 +1,6 @@ + [Desktop Entry] + Exec=kcmshell spellchecking +-Icon=spellcheck ++Icon=kcmspellchecking + Type=Application + DocPath=kcontrol/spellchecking/index.html + +Index: konqueror/sidebar/trees/history_module/kcmhistory.desktop +=================================================================== +--- konqueror/sidebar/trees/history_module/kcmhistory.desktop.orig ++++ konqueror/sidebar/trees/history_module/kcmhistory.desktop +@@ -1,5 +1,5 @@ + [Desktop Entry] +-Icon=history ++Icon=kcmhistory + Type=Application + Exec=kcmshell kcmhistory + +Index: kioslave/cgi/kcmcgi/kcmcgi.desktop +=================================================================== +--- kioslave/cgi/kcmcgi/kcmcgi.desktop.orig ++++ kioslave/cgi/kcmcgi/kcmcgi.desktop +@@ -1,5 +1,5 @@ + [Desktop Entry] +-Icon=run ++Icon=kcmcgi + Type=Application + Exec=kcmshell kcmcgi + DocPath= +Index: kioslave/media/kcmodule/media.desktop +=================================================================== +--- kioslave/media/kcmodule/media.desktop.orig ++++ kioslave/media/kcmodule/media.desktop +@@ -1,7 +1,7 @@ + [Desktop Entry] + Type=Application + #DocPath= +-Icon=system ++Icon=kcmmedia + Exec=kcmshell media + + diff --git a/opensuse/core/tdebase/fix-kcontrol-yast.diff b/opensuse/core/tdebase/fix-kcontrol-yast.diff new file mode 100644 index 000000000..5902d904d --- /dev/null +++ b/opensuse/core/tdebase/fix-kcontrol-yast.diff @@ -0,0 +1,63 @@ +Index: kcontrol/kcontrol/modules.cpp +=================================================================== +--- kcontrol/kcontrol/modules.cpp.orig ++++ kcontrol/kcontrol/modules.cpp +@@ -19,6 +19,7 @@ + + #include + #include ++#include + + + #include +@@ -59,6 +60,10 @@ ConfigModule::~ConfigModule() + + ProxyWidget *ConfigModule::module() + { ++ KDesktopFile kd(service()->desktopEntryPath()); ++ if ( !kd.readEntry("X-SuSE-YaST-Call").isEmpty() ) ++ setenv("KCMYAST2_CALL", kd.readEntry("X-SuSE-YaST-Call").latin1(), 1 ); ++ + if (_module) + return _module; + +@@ -168,6 +173,7 @@ void ConfigModule::runAsRoot() + // prepare the process to run the kcmshell + QString cmd = service()->exec().stripWhiteSpace(); + bool kdeshell = false; ++ bool proxy = false; + if (cmd.left(5) == "kdesu") + { + cmd = cmd.remove(0,5).stripWhiteSpace(); +@@ -185,6 +191,15 @@ void ConfigModule::runAsRoot() + kdeshell = true; + } + ++ KDesktopFile kd(service()->desktopEntryPath()); ++ if ( !kd.readEntry("X-SuSE-YaST-Call").isEmpty() ){ ++ kdeshell = true; ++ proxy = true; ++ cmd=service()->desktopEntryPath(); ++ ++ setenv("KCMYAST2_CALL", kd.readEntry("X-SuSE-YaST-Call").latin1(), 1 ); ++ } ++ + // run the process + QString kdesu = KStandardDirs::findExe("kdesu"); + if (!kdesu.isEmpty()) +@@ -196,12 +211,12 @@ void ConfigModule::runAsRoot() + // in that case the modules is started through kdesud and kdesu + // returns before the module is running and that doesn't work. + // We also don't have a way to close the module in that case. +- *_rootProcess << "--n"; // Don't keep password. ++ *_rootProcess << "--n" << "-t"; // Don't keep password. + if (kdeshell) { +- *_rootProcess << QString("%1 %2 --embed %3 --lang %4").arg(locate("exe", "kcmshell")).arg(cmd).arg(_embedWidget->winId()).arg(KGlobal::locale()->language()); ++ *_rootProcess << QString("%1 %2 %3 %4 --lang %5").arg(locate("exe", "kcmshell")).arg(cmd).arg(proxy?"--embed-proxy":"--embed").arg(_embedWidget->winId()).arg(KGlobal::locale()->language()); + } + else { +- *_rootProcess << QString("%1 --embed %2 --lang %3").arg(cmd).arg(_embedWidget->winId()).arg( KGlobal::locale()->language() ); ++ *_rootProcess << QString("%1 %2 %3 --lang %4").arg(cmd).arg(proxy?"--embed-proxy":"--embed").arg(_embedWidget->winId()).arg( KGlobal::locale()->language() ); + } + + connect(_rootProcess, SIGNAL(processExited(KProcess*)), this, SLOT(rootExited(KProcess*))); diff --git a/opensuse/core/tdebase/fix-kio-smb-auth.diff b/opensuse/core/tdebase/fix-kio-smb-auth.diff new file mode 100644 index 000000000..d591be038 --- /dev/null +++ b/opensuse/core/tdebase/fix-kio-smb-auth.diff @@ -0,0 +1,13 @@ +? kioslave/smb/kio_smb_la_all_cpp.cpp +Index: kioslave/smb/kio_smb_auth.cpp +=================================================================== +--- kioslave/smb/kio_smb_auth.cpp.orig ++++ kioslave/smb/kio_smb_auth.cpp +@@ -144,6 +144,7 @@ bool SMBSlave::checkPassword(SMBUrl &url + if ( openPassDlg(info) ) { + kdDebug(KIO_SMB) << "openPassDlg returned " << info.username << endl; + url.setUser(info.username); ++ url.setPass(info.password); + return true; + } + kdDebug(KIO_SMB) << "no value from openPassDlg\n"; diff --git a/opensuse/core/tdebase/fix-lockup-from-gnome-apps.diff b/opensuse/core/tdebase/fix-lockup-from-gnome-apps.diff new file mode 100644 index 000000000..05fc4313b --- /dev/null +++ b/opensuse/core/tdebase/fix-lockup-from-gnome-apps.diff @@ -0,0 +1,20 @@ +Index: khelpcenter/navigator.cpp +=================================================================== +--- khelpcenter/navigator.cpp.orig ++++ khelpcenter/navigator.cpp +@@ -333,9 +333,14 @@ void Navigator::selectItem( const KURL & + // First, populate the NavigatorAppItems if we don't want the home page + if ( url != homeURL() ) { + for ( QListViewItem *item = mContentsTree->firstChild(); item; +- item = item->nextSibling() ) { ++ item = item->nextSibling() ) { + NavigatorAppItem *appItem = dynamic_cast( item ); + if ( appItem ) appItem->populate( true /* recursive */ ); ++ for ( QListViewItem *subitem = item->firstChild(); subitem; ++ subitem = subitem->nextSibling() ) { ++ appItem = dynamic_cast( subitem ); ++ if ( appItem ) appItem->populate( true /* recursive */ ); ++ } + } + } + diff --git a/opensuse/core/tdebase/fix_default_theme_reset.diff b/opensuse/core/tdebase/fix_default_theme_reset.diff new file mode 100644 index 000000000..2b2a6805a --- /dev/null +++ b/opensuse/core/tdebase/fix_default_theme_reset.diff @@ -0,0 +1,59 @@ +Index: kcontrol/kthememanager/ktheme.cpp +=================================================================== +--- kcontrol/kthememanager/ktheme.cpp.orig ++++ kcontrol/kthememanager/ktheme.cpp +@@ -188,11 +188,11 @@ QString KTheme::createYourself( bool pac + globalConf->setGroup( "Icons" ); + QDomElement iconElem = m_dom.createElement( "icons" ); + iconElem.setAttribute( "name", globalConf->readEntry( "Theme",KIconTheme::current() ) ); +- createIconElems( "DesktopIcons", "desktop", iconElem, globalConf ); +- createIconElems( "MainToolbarIcons", "mainToolbar", iconElem, globalConf ); +- createIconElems( "PanelIcons", "panel", iconElem, globalConf ); +- createIconElems( "SmallIcons", "small", iconElem, globalConf ); +- createIconElems( "ToolbarIcons", "toolbar", iconElem, globalConf ); ++ createIconElems( "DesktopIcons", "desktop", 32, iconElem, globalConf ); ++ createIconElems( "MainToolbarIcons", "mainToolbar", 22, iconElem, globalConf ); ++ createIconElems( "PanelIcons", "panel", 32, iconElem, globalConf ); ++ createIconElems( "SmallIcons", "small", 16, iconElem, globalConf ); ++ createIconElems( "ToolbarIcons", "toolbar", 22, iconElem, globalConf ); + m_root.appendChild( iconElem ); + + // 4. Sounds +@@ -726,7 +726,7 @@ QString KTheme::getProperty( QDomElement + } + + void KTheme::createIconElems( const QString & group, const QString & object, +- QDomElement parent, KConfig * cfg ) ++ int defsize, QDomElement parent, KConfig * cfg ) + { + cfg->setGroup( group ); + QStringList elemNames; +@@ -745,7 +745,9 @@ void KTheme::createIconElems( const QStr + QDomElement tmpCol = m_dom.createElement( *it ); + tmpCol.setAttribute( "object", object ); + +- if ( (*it).contains( "Value" ) || *it == "Size" ) ++ if ( *it == "Size" ) ++ tmpCol.setAttribute( "value", cfg->readNumEntry( *it, defsize ) ); ++ else if ( (*it).contains( "Value" )) + tmpCol.setAttribute( "value", cfg->readNumEntry( *it, 1 ) ); + else if ( (*it).contains( "DisabledEffect" ) ) + tmpCol.setAttribute( "name", cfg->readEntry( *it, "togray" ) ); +Index: kcontrol/kthememanager/ktheme.h +=================================================================== +--- kcontrol/kthememanager/ktheme.h.orig ++++ kcontrol/kthememanager/ktheme.h +@@ -155,11 +155,12 @@ private: + * Creates a list of "icon" elements based on: + * @param group The group in the KConfig object @p cfg + * @param object Specifier (similiar, but not identical to @p group) ++ * @param defsize default icon size + * @param parent Parent element to append to + * @param cfg The KConfig object to work with + */ + void createIconElems( const QString & group, const QString & object, +- QDomElement parent, KConfig * cfg ); ++ int defsize, QDomElement parent, KConfig * cfg ); + + /** + * Creates a color DOM element @p name, with a specifier @p object, diff --git a/opensuse/core/tdebase/gcc44.diff b/opensuse/core/tdebase/gcc44.diff new file mode 100644 index 000000000..999b5f3ca --- /dev/null +++ b/opensuse/core/tdebase/gcc44.diff @@ -0,0 +1,20 @@ +--- kcontrol/kfontinst/kfontinst/Fontmap.cpp.sav 2006-01-19 18:00:49.000000000 +0100 ++++ kcontrol/kfontinst/kfontinst/Fontmap.cpp 2009-05-29 14:50:08.000000000 +0200 +@@ -44,7 +44,7 @@ + + using namespace std; + +-static char * findSpace(char *str) ++static const char * findSpace(const char *str) + { + while(str && *str!=' ' && *str!='\t') + str++; +@@ -65,7 +65,7 @@ static bool parseLine(const char *line, + char a[constMaxLen+1], + b[constFileMaxLen+1]; + +- char *slash1=strchr(line, '/'), ++ const char *slash1=strchr(line, '/'), + *space1=slash1 ? findSpace(slash1) : NULL, //strchr(slash1, ' ') : NULL, + *ob=slash1 ? strchr(slash1, '(') : NULL, + *cb=ob ? strchr(ob, ')') : NULL, diff --git a/opensuse/core/tdebase/hide-only-showin-entries.diff b/opensuse/core/tdebase/hide-only-showin-entries.diff new file mode 100644 index 000000000..f403d38c5 --- /dev/null +++ b/opensuse/core/tdebase/hide-only-showin-entries.diff @@ -0,0 +1,14 @@ +Index: konqueror/konq_mainwindow.cc +=================================================================== +--- konqueror/konq_mainwindow.cc.orig ++++ konqueror/konq_mainwindow.cc +@@ -4926,6 +4926,9 @@ void KonqMainWindow::updateOpenWithActio + KTrader::OfferList::ConstIterator end = services.end(); + for (; it != end; ++it ) + { ++ if ( (*it)->noDisplay() ) ++ continue; ++ + KAction *action = new KAction( i18n( "Open with %1" ).arg( (*it)->name() ), 0, 0, (*it)->desktopEntryName().latin1() ); + action->setIcon( (*it)->icon() ); + diff --git a/opensuse/core/tdebase/improve-panelservicemenu-geticonset.diff b/opensuse/core/tdebase/improve-panelservicemenu-geticonset.diff new file mode 100644 index 000000000..842976d5a --- /dev/null +++ b/opensuse/core/tdebase/improve-panelservicemenu-geticonset.diff @@ -0,0 +1,32 @@ +Index: kicker/libkicker/global.cpp +=================================================================== +--- kicker/libkicker/global.cpp.orig ++++ kicker/libkicker/global.cpp +@@ -425,6 +425,12 @@ QIconSet menuIconSet(const QString& icon + KIcon::ActiveState, + 0, + true); ++ QPixmap disabled = KGlobal::iconLoader()->loadIcon(icon, ++ KIcon::Small, ++ 0, ++ KIcon::DisabledState, ++ 0, ++ true); + + // make sure they are not larger than 20x20 + if (normal.width() > 20 || normal.height() > 20) +@@ -437,8 +443,14 @@ QIconSet menuIconSet(const QString& icon + active.convertFromImage(active.convertToImage().smoothScale(20,20)); + } + ++ if (disabled.width() > 20 || disabled.height() > 20) ++ { ++ disabled.convertFromImage(disabled.convertToImage().smoothScale(20,20)); ++ } ++ + iconset.setPixmap(normal, QIconSet::Small, QIconSet::Normal); + iconset.setPixmap(active, QIconSet::Small, QIconSet::Active); ++ iconset.setPixmap(disabled, QIconSet::Small, QIconSet::Disabled); + } + } + diff --git a/opensuse/core/tdebase/ioslaveinfo-icon.diff b/opensuse/core/tdebase/ioslaveinfo-icon.diff new file mode 100644 index 000000000..5f64f89d9 --- /dev/null +++ b/opensuse/core/tdebase/ioslaveinfo-icon.diff @@ -0,0 +1,13 @@ +Index: kcontrol/ioslaveinfo/ioslaveinfo.desktop +=================================================================== +--- kcontrol/ioslaveinfo/ioslaveinfo.desktop.orig ++++ kcontrol/ioslaveinfo/ioslaveinfo.desktop +@@ -79,7 +79,7 @@ Comment[zh_TW]=å¯ç”¨å”定的資訊 + Comment[zu]=Ulwazi mayelana nemithetho elandelwayo ekhona + DocPath=kinfocenter/protocols/index.html + Exec=kcmshell ioslaveinfo +-Icon=history ++Icon=enhanced_browsing + Keywords=Protocol,IO slaves,Slaves,Network,Information,Timeout + Keywords[ar]=الميÙاق,IO Slaves,Slaves,الشبكة,معلومات Ù†Ùاذ الوقت + Keywords[az]=Protokol, IO KölÉ™lÉ™ri, KölÉ™lÉ™r, ŞəbÉ™kÉ™,MÉ™'lumat, Vaxt Dolması diff --git a/opensuse/core/tdebase/kcheckpass-pam-11.0 b/opensuse/core/tdebase/kcheckpass-pam-11.0 new file mode 100644 index 000000000..eae973612 --- /dev/null +++ b/opensuse/core/tdebase/kcheckpass-pam-11.0 @@ -0,0 +1,6 @@ +#%PAM-1.0 +auth include common-auth +account include common-account +password include common-password +session include common-session +session required pam_resmgr.so diff --git a/opensuse/core/tdebase/kcheckpass-pam-11.1 b/opensuse/core/tdebase/kcheckpass-pam-11.1 new file mode 100644 index 000000000..c6a7c9c90 --- /dev/null +++ b/opensuse/core/tdebase/kcheckpass-pam-11.1 @@ -0,0 +1,5 @@ +#%PAM-1.0 +auth include common-auth +account include common-account +password include common-password +session include common-session diff --git a/opensuse/core/tdebase/kcheckpass-pam-legacy b/opensuse/core/tdebase/kcheckpass-pam-legacy new file mode 100644 index 000000000..87df34589 --- /dev/null +++ b/opensuse/core/tdebase/kcheckpass-pam-legacy @@ -0,0 +1,7 @@ +#%PAM-1.0 +auth include common-auth +account include common-account +password include common-password +session include common-session +session required pam_devperm.so +session required pam_resmgr.so diff --git a/opensuse/core/tdebase/kcheckpass.8.gz b/opensuse/core/tdebase/kcheckpass.8.gz new file mode 100644 index 000000000..81f8aae2a Binary files /dev/null and b/opensuse/core/tdebase/kcheckpass.8.gz differ diff --git a/opensuse/core/tdebase/kcminit-ignore-arts.diff b/opensuse/core/tdebase/kcminit-ignore-arts.diff new file mode 100644 index 000000000..2c987aae1 --- /dev/null +++ b/opensuse/core/tdebase/kcminit-ignore-arts.diff @@ -0,0 +1,14 @@ +Index: kcminit/main.cpp +=================================================================== +--- kcminit/main.cpp.orig ++++ kcminit/main.cpp +@@ -98,6 +98,9 @@ void KCMInit::runModules( int phase ) + if (library.isEmpty()) + library = service->library(); + ++ if (library == "arts" && list.size() > 1) ++ continue; ++ + if (library.isEmpty() || service->init().isEmpty()) + continue; // Skip + diff --git a/opensuse/core/tdebase/kcmkdm-default-grub.diff b/opensuse/core/tdebase/kcmkdm-default-grub.diff new file mode 100644 index 000000000..1d758eb57 --- /dev/null +++ b/opensuse/core/tdebase/kcmkdm-default-grub.diff @@ -0,0 +1,13 @@ +Index: kcontrol/kdm/kdm-shut.cpp +=================================================================== +--- kcontrol/kdm/kdm-shut.cpp.orig ++++ kcontrol/kdm/kdm-shut.cpp +@@ -90,7 +90,7 @@ KDMSessionsWidget::KDMSessionsWidget(QWi + QGroupBox *group4 = new QGroupBox( i18n("Miscellaneous"), this ); + + bm_combo = new KBackedComboBox( group4 ); +- bm_combo->insertItem("None", i18n("boot manager", "None")); ++ bm_combo->insertItem("None", i18n("boot manager", "Grub")); + bm_combo->insertItem("Grub", i18n("Grub")); + #if defined(__linux__) && ( defined(__i386__) || defined(__amd64__) ) + bm_combo->insertItem("Lilo", i18n("Lilo")); diff --git a/opensuse/core/tdebase/kcmsamba_log.diff b/opensuse/core/tdebase/kcmsamba_log.diff new file mode 100644 index 000000000..e29ca1e13 --- /dev/null +++ b/opensuse/core/tdebase/kcmsamba_log.diff @@ -0,0 +1,31 @@ +Index: kcontrol/samba/kcmsambalog.cpp +=================================================================== +--- kcontrol/samba/kcmsambalog.cpp.orig ++++ kcontrol/samba/kcmsambalog.cpp +@@ -39,7 +39,7 @@ LogView::LogView(QWidget *parent,KConfig + ,configFile(config) + ,filesCount(0) + ,connectionsCount(0) +-,logFileName("/var/log/samba.log",this) ++,logFileName("/var/log/samba/log.smbd",this) + ,label(&logFileName,i18n("Samba log file: "),this) + ,viewHistory(this) + ,showConnOpen(i18n("Show opened connections"),this) +@@ -88,7 +88,7 @@ LogView::LogView(QWidget *parent,KConfig + " on this page. The log file (shown above) will be read to obtain the" + " events logged by samba.") ); + +- logFileName.setURL("/var/log/samba.log"); ++ logFileName.setURL("/var/log/samba/log.smbd"); + + viewHistory.setAllColumnsShowFocus(TRUE); + viewHistory.setFocusPolicy(QWidget::ClickFocus); +@@ -130,7 +130,7 @@ void LogView::loadSettings() + { + if (configFile==0) return; + configFile->setGroup(LOGGROUPNAME); +- logFileName.setURL(configFile->readPathEntry( "SambaLogFile", "/var/log/samba.log")); ++ logFileName.setURL(configFile->readPathEntry( "SambaLogFile", "/var/log/samba/log.smbd")); + + showConnOpen.setChecked(configFile->readBoolEntry( "ShowConnectionOpen", TRUE)); + showConnClose.setChecked(configFile->readBoolEntry( "ShowConnectionClose", FALSE)); diff --git a/opensuse/core/tdebase/kcmshell_use_kde-sound.diff b/opensuse/core/tdebase/kcmshell_use_kde-sound.diff new file mode 100644 index 000000000..ac6d434e4 --- /dev/null +++ b/opensuse/core/tdebase/kcmshell_use_kde-sound.diff @@ -0,0 +1,11 @@ +Index: kcontrol/info/sound.desktop +=================================================================== +--- kcontrol/info/sound.desktop.orig ++++ kcontrol/info/sound.desktop +@@ -1,5 +1,5 @@ + [Desktop Entry] +-Exec=kcmshell sound ++Exec=kcmshell kde-sound + Icon=kcmsound + Type=Application + DocPath=kinfocenter/sound/index.html diff --git a/opensuse/core/tdebase/kcontrol-energy.diff b/opensuse/core/tdebase/kcontrol-energy.diff new file mode 100644 index 000000000..b98a648bc --- /dev/null +++ b/opensuse/core/tdebase/kcontrol-energy.diff @@ -0,0 +1,167 @@ +Index: kcontrol/energy/energy.h +=================================================================== +--- kcontrol/energy/energy.h.orig ++++ kcontrol/energy/energy.h +@@ -44,6 +44,7 @@ private slots: + void slotChangeStandby(int); + void slotChangeSuspend(int); + void slotChangeOff(int); ++ void slotLaunchKPowersave(); + void openURL(const QString &); + + private: +@@ -54,7 +55,7 @@ private: + static void applySettings(bool, int, int, int); + friend void init_energy(); + +- bool m_bChanged, m_bDPMS, m_bEnabled, m_bMaintainSanity; ++ bool m_bChanged, m_bDPMS, m_bKPowersave, m_bEnabled, m_bMaintainSanity; + int m_Standby, m_Suspend, m_Off; + int m_StandbyDesired, m_SuspendDesired, m_OffDesired; + +Index: kcontrol/energy/energy.cpp +=================================================================== +--- kcontrol/energy/energy.cpp.orig ++++ kcontrol/energy/energy.cpp +@@ -26,6 +26,7 @@ + #include + #include + #include ++#include + + #include + #include +@@ -36,6 +37,7 @@ + #include + #include + #include ++#include + + #include + #include +@@ -140,6 +142,7 @@ KEnergy::KEnergy(QWidget *parent, const + m_Suspend = DFLT_SUSPEND; + m_Off = DFLT_OFF; + m_bDPMS = false; ++ m_bKPowersave = false; + m_bMaintainSanity = true; + + setQuickHelp( i18n("

Display Power Control

If your display supports" +@@ -154,6 +157,13 @@ KEnergy::KEnergy(QWidget *parent, const + #ifdef HAVE_DPMS + int dummy; + m_bDPMS = DPMSQueryExtension(qt_xdisplay(), &dummy, &dummy); ++ ++ DCOPRef kpowersave("kpowersave", "KPowersaveIface"); ++ DCOPReply managingDPMS = kpowersave.call("currentSchemeManagesDPMS()"); ++ if (managingDPMS.isValid()) { ++ m_bKPowersave = managingDPMS; ++ m_bDPMS = !m_bKPowersave; ++ } + #endif + + QVBoxLayout *top = new QVBoxLayout(this, 0, KDialog::spacingHint()); +@@ -162,14 +172,26 @@ KEnergy::KEnergy(QWidget *parent, const + + QLabel *lbl; + if (m_bDPMS) { +- m_pCBEnable= new QCheckBox(i18n("&Enable display power management" ), this); +- connect(m_pCBEnable, SIGNAL(toggled(bool)), SLOT(slotChangeEnable(bool))); +- hbox->addWidget(m_pCBEnable); ++ KGlobal::locale()->insertCatalogue("kpowersave"); ++ ++ // ### these i18n strings need to be synced with kpowersave !! ++ m_pCBEnable= new QCheckBox(i18n("&Enable display power management" ), this); ++ connect(m_pCBEnable, SIGNAL(toggled(bool)), SLOT(slotChangeEnable(bool))); ++ hbox->addWidget(m_pCBEnable); + QWhatsThis::add( m_pCBEnable, i18n("Check this option to enable the" +- " power saving features of your display.") ); +- } else { ++ " power saving features of your display.") ); ++ ++ // ### ++ } else if(m_bKPowersave) { ++ m_pCBEnable = new QCheckBox(i18n("&Enable specific display power management"), this); ++ hbox->addWidget(m_pCBEnable); ++ m_bEnabled = false; ++ m_pCBEnable->setChecked(true); ++ m_pCBEnable->setEnabled(false); ++ ++ } else { + lbl = new QLabel(i18n("Your display does not support power saving."), this); +- hbox->addWidget(lbl); ++ hbox->addWidget(lbl); + } + + KURLLabel *logo = new KURLLabel(this); +@@ -183,6 +205,7 @@ connect(logo, SIGNAL(leftClickedURL(cons + hbox->addWidget(logo); + + // Sliders ++ if (!m_bKPowersave) { + m_pStandbySlider = new KIntNumInput(m_Standby, this); + m_pStandbySlider->setLabel(i18n("&Standby after:")); + m_pStandbySlider->setRange(0, 120, 10); +@@ -218,6 +241,17 @@ connect(logo, SIGNAL(leftClickedURL(cons + " greatest level of power saving that can be achieved while the" + " display is still physically turned on.") ); + ++ } ++ else { ++ m_pStandbySlider = 0; ++ m_pSuspendSlider = 0; ++ m_pOffSlider = 0; ++ QPushButton* btnKPowersave = new QPushButton(this); ++ btnKPowersave->setText(i18n("Configure KPowersave...")); ++ connect(btnKPowersave, SIGNAL(clicked()), SLOT(slotLaunchKPowersave())); ++ top->addWidget(btnKPowersave); ++ } ++ + top->addStretch(); + + if (m_bDPMS) +@@ -270,7 +304,8 @@ void KEnergy::defaults() + + void KEnergy::readSettings() + { +- m_bEnabled = m_pConfig->readBoolEntry("displayEnergySaving", false); ++ if (m_bDPMS) ++ m_bEnabled = m_pConfig->readBoolEntry("displayEnergySaving", false); + m_Standby = m_pConfig->readNumEntry("displayStandby", DFLT_STANDBY); + m_Suspend = m_pConfig->readNumEntry("displaySuspend", DFLT_SUSPEND); + m_Off = m_pConfig->readNumEntry("displayPowerOff", DFLT_OFF); +@@ -297,20 +332,27 @@ void KEnergy::writeSettings() + m_bChanged = false; + } + ++void KEnergy::slotLaunchKPowersave() ++{ ++ DCOPRef r("kpowersave", "KPowersaveIface"); ++ r.send("openConfigureDialog()"); ++} + + void KEnergy::showSettings() + { + m_bMaintainSanity = false; + + if (m_bDPMS) +- m_pCBEnable->setChecked(m_bEnabled); ++ m_pCBEnable->setChecked(m_bEnabled); + +- m_pStandbySlider->setEnabled(m_bEnabled); +- m_pStandbySlider->setValue(m_Standby); +- m_pSuspendSlider->setEnabled(m_bEnabled); +- m_pSuspendSlider->setValue(m_Suspend); +- m_pOffSlider->setEnabled(m_bEnabled); +- m_pOffSlider->setValue(m_Off); ++ if (!m_bKPowersave) { ++ m_pStandbySlider->setEnabled(m_bEnabled); ++ m_pStandbySlider->setValue(m_Standby); ++ m_pSuspendSlider->setEnabled(m_bEnabled); ++ m_pSuspendSlider->setValue(m_Suspend); ++ m_pOffSlider->setEnabled(m_bEnabled); ++ m_pOffSlider->setValue(m_Off); ++ } + + m_bMaintainSanity = true; + } diff --git a/opensuse/core/tdebase/kcontrol.diff b/opensuse/core/tdebase/kcontrol.diff new file mode 100644 index 000000000..ab23e34ba --- /dev/null +++ b/opensuse/core/tdebase/kcontrol.diff @@ -0,0 +1,11 @@ +Index: kcontrol/kcontrol/KControl.desktop +=================================================================== +--- kcontrol/kcontrol/KControl.desktop.orig ++++ kcontrol/kcontrol/KControl.desktop +@@ -1,4 +1,6 @@ + [Desktop Entry] ++Categories=Qt;KDE;X-SuSE-core ++OnlyShowIn=KDE; + Exec=kcontrol -caption "%c" %i %m + Icon=kcontrol + Type=Application diff --git a/opensuse/core/tdebase/kde3-session-restore.diff b/opensuse/core/tdebase/kde3-session-restore.diff new file mode 100644 index 000000000..6ade7063b --- /dev/null +++ b/opensuse/core/tdebase/kde3-session-restore.diff @@ -0,0 +1,12 @@ +Index: kde3 +=================================================================== +--- kde3.orig ++++ kde3 +@@ -6,4 +6,7 @@ + # and make sure this script is in $PATH (e.g. make a symlink if necessary). + # + ++PATH=/opt/kde3/bin:${PATH/:\/opt\/kde3\/bin} ++export PATH ++ + exec "$@" diff --git a/opensuse/core/tdebase/kde3-session.diff b/opensuse/core/tdebase/kde3-session.diff new file mode 100644 index 000000000..763879088 --- /dev/null +++ b/opensuse/core/tdebase/kde3-session.diff @@ -0,0 +1,13 @@ +Index: kdm/kfrontend/sessions/kde.desktop.in +=================================================================== +--- kdm/kfrontend/sessions/kde.desktop.in.orig ++++ kdm/kfrontend/sessions/kde.desktop.in +@@ -3,7 +3,7 @@ Encoding=UTF-8 + Type=XSession + Exec=@KDE_BINDIR@/startkde + TryExec=@KDE_BINDIR@/startkde +-Name=KDE ++Name=KDE3 + Name[hi]=केडीई + Name[mn]=КДЭ + Name[ta]=Kà®à®±à¯à®±à®•à¯ காவலன௠diff --git a/opensuse/core/tdebase/kdebase_khc_rellinks.diff b/opensuse/core/tdebase/kdebase_khc_rellinks.diff new file mode 100644 index 000000000..e11269095 --- /dev/null +++ b/opensuse/core/tdebase/kdebase_khc_rellinks.diff @@ -0,0 +1,606 @@ +Index: khelpcenter/khelpcenterui.rc +=================================================================== +--- khelpcenter/khelpcenterui.rc.orig ++++ khelpcenter/khelpcenterui.rc +@@ -1,5 +1,5 @@ + +- ++ + + + &File +@@ -23,8 +23,8 @@ + + + &Go +- +- ++ ++ + + + +@@ -41,13 +41,19 @@ + + + +- ++ + + + + +- + + ++ ++ ++ ++ ++ ++ ++ + + +Index: khelpcenter/mainwindow.cpp +=================================================================== +--- khelpcenter/mainwindow.cpp.orig ++++ khelpcenter/mainwindow.cpp +@@ -41,6 +41,7 @@ + #include + #include + #include ++#include + + #include + #include +@@ -106,6 +107,8 @@ MainWindow::MainWindow() + + connect( mDoc, SIGNAL( selectionChanged() ), + SLOT( enableCopyTextAction() ) ); ++ connect( mDoc, SIGNAL( completed() ), ++ SLOT( updateLinkActions() ) ); + + statusBar()->insertItem(i18n("Preparing Index"), 0, 1); + statusBar()->setItemAlignment(0, AlignLeft | AlignVCenter); +@@ -250,6 +253,8 @@ void MainWindow::setupActions() + new KAction( i18n( "Configure Fonts..." ), KShortcut(), this, SLOT( slotConfigureFonts() ), actionCollection(), "configure_fonts" ); + new KAction( i18n( "Increase Font Sizes" ), "viewmag+", KShortcut(), this, SLOT( slotIncFontSizes() ), actionCollection(), "incFontSizes" ); + new KAction( i18n( "Decrease Font Sizes" ), "viewmag-", KShortcut(), this, SLOT( slotDecFontSizes() ), actionCollection(), "decFontSizes" ); ++ ++ initActions(); + } + + void MainWindow::slotCopySelectedText() +@@ -462,6 +467,418 @@ void MainWindow::slotConfigureFonts() + mDoc->slotReload(); + } + ++void MainWindow::initActions() ++{ ++ kdDebug() << k_funcinfo << endl; ++ ++ // ------------- Navigation links -------------- ++ kaction_map["home"] = new KAction( i18n("&Top"), "2uparrow", KShortcut("Ctrl+Alt+T"), this, SLOT(goHome()), actionCollection(), "rellinks_top" ); ++ kaction_map["home"]->setWhatsThis( i18n("

This link references a home page or the top of some hierarchy.

") ); ++ ++ kaction_map["up"] = new KAction( i18n("&Up"), "1uparrow", KShortcut("Ctrl+Alt+U"), this, SLOT(goUp()), actionCollection(), "rellinks_up" ); ++ kaction_map["up"]->setWhatsThis( i18n("

This link references the immediate parent of the current document.

") ); ++ ++ bool isRTL = QApplication::reverseLayout(); ++ ++ kaction_map["begin"] = new KAction( i18n("&First"), isRTL ? "2rightarrow" : "2leftarrow", KShortcut("Ctrl+Alt+F"), this, SLOT(goFirst()), actionCollection(), "rellinks_first" ); ++ kaction_map["begin"]->setWhatsThis( i18n("

This link type tells search engines which document is considered by the author to be the starting point of the collection.

") ); ++ ++ kaction_map["prev"] = new KAction( i18n("&Previous"), isRTL ? "1rightarrow" : "1leftarrow", KShortcut("Ctrl+Alt+P"), this, SLOT(goPrevious()), actionCollection(), "rellinks_previous" ); ++ kaction_map["prev"]->setWhatsThis( i18n("

This link references the previous document in an ordered series of documents.

") ); ++ ++ kaction_map["next"] = new KAction( i18n("&Next"), isRTL ? "1leftarrow" : "1rightarrow", KShortcut("Ctrl+Alt+N"), this, SLOT(goNext()), actionCollection(), "rellinks_next" ); ++ kaction_map["next"]->setWhatsThis( i18n("

This link references the next document in an ordered series of documents.

") ); ++ ++ kaction_map["last"] = new KAction( i18n("&Last"), isRTL ? "2leftarrow" : "2rightarrow", KShortcut("Ctrl+Alt+L"), this, SLOT(goLast()), actionCollection(), "rellinks_last" ); ++ kaction_map["last"]->setWhatsThis( i18n("

This link references the end of a sequence of documents.

") ); ++ ++ // ------------ special items -------------------------- ++ kaction_map["search"] = new KAction( i18n("&Search"), "filefind", KShortcut("Ctrl+Alt+S"), this, SLOT(goSearch()), actionCollection(), "rellinks_search" ); ++ kaction_map["search"]->setWhatsThis( i18n("

This link references the search.

") ); ++ ++ // ------------ Document structure links --------------- ++ m_document = new KActionMenu( i18n("Document"), "contents", actionCollection(), "rellinks_document" ); ++ m_document->setWhatsThis( i18n("

This menu contains the links referring the document information.

") ); ++ m_document->setDelayed(false); ++ ++ kaction_map["contents"] = new KAction( i18n("Table of &Contents"), "contents", KShortcut("Ctrl+Alt+C"), this, SLOT(goContents()), actionCollection(), "rellinks_toc" ); ++ m_document->insert(kaction_map["contents"]); ++ kaction_map["contents"]->setWhatsThis( i18n("

This link references the table of contents.

") ); ++ ++ kactionmenu_map["chapter"] = new KActionMenu( i18n("Chapters"), "fileopen", actionCollection(), "rellinks_chapters" ); ++ m_document->insert(kactionmenu_map["chapter"]); ++ connect( kactionmenu_map["chapter"]->popupMenu(), SIGNAL( activated( int ) ), this, SLOT(goChapter(int))); ++ kactionmenu_map["chapter"]->setWhatsThis( i18n("

This menu references the chapters of the document.

") ); ++ kactionmenu_map["chapter"]->setDelayed(false); ++ ++ kactionmenu_map["section"] = new KActionMenu( i18n("Sections"), "fileopen", actionCollection(), "rellinks_sections" ); ++ m_document->insert(kactionmenu_map["section"]); ++ connect( kactionmenu_map["section"]->popupMenu(), SIGNAL( activated( int ) ), this, SLOT( goSection( int ) ) ); ++ kactionmenu_map["section"]->setWhatsThis( i18n("

This menu references the sections of the document.

") ); ++ kactionmenu_map["section"]->setDelayed(false); ++ ++ kactionmenu_map["subsection"] = new KActionMenu( i18n("Subsections"), "fileopen", actionCollection(), "rellinks_subsections" ); ++ m_document->insert(kactionmenu_map["subsection"]); ++ connect( kactionmenu_map["subsection"]->popupMenu(), SIGNAL( activated( int ) ), this, SLOT( goSubsection( int ) ) ); ++ kactionmenu_map["subsection"]->setWhatsThis( i18n("

This menu references the subsections of the document.

") ); ++ kactionmenu_map["subsection"]->setDelayed(false); ++ ++ kactionmenu_map["appendix"] = new KActionMenu( i18n("Appendix"), "edit", actionCollection(), "rellinks_appendix" ); ++ m_document->insert(kactionmenu_map["appendix"]); ++ connect( kactionmenu_map["appendix"]->popupMenu(), SIGNAL( activated( int ) ), this, SLOT( goAppendix( int ) ) ); ++ kactionmenu_map["appendix"]->setWhatsThis( i18n("

This link references the appendix.

") ); ++ kactionmenu_map["appendix"]->setDelayed(false); ++ ++ kaction_map["glossary"] = new KAction( i18n("&Glossary"), "flag", KShortcut("Ctrl+Alt+G"), this, SLOT(goGlossary()), actionCollection(), "rellinks_glossary" ); ++ m_document->insert(kaction_map["glossary"]); ++ kaction_map["glossary"]->setWhatsThis( i18n("

This link references the glossary.

") ); ++ ++ kaction_map["index"] = new KAction( i18n("&Index"), "info", KShortcut("Ctrl+Alt+I"), this, SLOT(goIndex()), actionCollection(), "rellinks_index" ); ++ m_document->insert(kaction_map["index"]); ++ kaction_map["index"]->setWhatsThis( i18n("

This link references the index.

") ); ++ ++ // Other links ++ m_more = new KActionMenu( i18n("More"), "misc", actionCollection(), "rellinks_more" ); ++ m_more->setWhatsThis( i18n("

This menu contains other important links.

") ); ++ m_more->setDelayed(false); ++ ++ kaction_map["help"] = new KAction( i18n("&Help"), "help", KShortcut("Ctrl+Alt+H"), this, SLOT(goHelp()), actionCollection(), "rellinks_help" ); ++ m_more->insert(kaction_map["help"]); ++ kaction_map["help"]->setWhatsThis( i18n("

This link references the help.

") ); ++ ++ kaction_map["author"] = new KAction( i18n("&Authors"), "mail_new", KShortcut("Ctrl+Alt+A"), this, SLOT(goAuthor()), actionCollection(), "rellinks_authors" ); ++ m_more->insert(kaction_map["author"]); ++ kaction_map["author"]->setWhatsThis( i18n("

This link references the author.

") ); ++ ++ kaction_map["copyright"] = new KAction( i18n("Copy&right"), "signature", KShortcut("Ctrl+Alt+R"), this, SLOT(goCopyright()), actionCollection(), "rellinks_copyright" ); ++ m_more->insert(kaction_map["copyright"]); ++ kaction_map["copyright"]->setWhatsThis( i18n("

This link references the copyright.

") ); ++ ++ kactionmenu_map["bookmark"] = new KActionMenu( i18n("Bookmarks"), "bookmark_folder", actionCollection(), "rellinks_bookmarks" ); ++ m_more->insert(kactionmenu_map["bookmark"]); ++ kactionmenu_map["bookmark"]->setWhatsThis( i18n("

This menu references the bookmarks.

") ); ++ connect( kactionmenu_map["bookmark"]->popupMenu(), SIGNAL( activated( int ) ), this, SLOT( goBookmark( int ) ) ); ++ kactionmenu_map["bookmark"]->setDelayed(false); ++ ++ kactionmenu_map["alternate"] = new KActionMenu( i18n("Other Versions"), "attach", actionCollection(), "rellinks_other_versions" ); ++ m_more->insert(kactionmenu_map["alternate"]); ++ kactionmenu_map["alternate"]->setWhatsThis( i18n("

This link references the alternate versions of this document.

") ); ++ connect( kactionmenu_map["alternate"]->popupMenu(), SIGNAL( activated( int ) ), this, SLOT( goAlternate( int ) ) ); ++ kactionmenu_map["alternate"]->setDelayed(false); ++ ++ // Unclassified menu ++ m_links = new KActionMenu( i18n("Miscellaneous"), "rellinks", actionCollection(), "rellinks_links" ); ++ kactionmenu_map["unclassified"] = m_links; ++ kactionmenu_map["unclassified"]->setWhatsThis( i18n("

Miscellaneous links.

") ); ++ connect( kactionmenu_map["unclassified"]->popupMenu(), SIGNAL( activated( int ) ), this, SLOT( goAllElements( int ) ) ); ++ kactionmenu_map["unclassified"]->setDelayed(false); ++ ++ // We unactivate all the possible actions ++ disableAll(); ++} ++ ++/* Code from plugin_rellinks ++ * Copyright (C) 2002, Anders Lund * ++ * Copyright (C) 2003, 2004, Franck Qu�ain * ++ * Copyright (C) 2004, Kevin Krammer * ++ * Copyright (C) 2004, 2005, Oliviet Goffart ++*/ ++void MainWindow::updateLinkActions() ++{ ++ // We disable all ++ disableAll(); ++ ++ // get a list of LINK nodes in document ++ DOM::NodeList linkNodes = mDoc->document().getElementsByTagName( "link" ); ++ ++ kdDebug() << "HELP Rellinks: Link nodes =" << linkNodes.length() << endl; ++ ++ unsigned long nodeLength = linkNodes.length(); ++ ++ for ( unsigned int i=0; i < nodeLength; i++ ) { ++ // create a entry for each one ++ DOM::Element e( linkNodes.item( i ) ); ++ ++ ++ // --- Retrieve of the relation type -- ++ ++ QString rel = e.getAttribute( "rel" ).string(); ++ rel = rel.simplifyWhiteSpace(); ++ if (rel.isEmpty()) { ++ // If the "rel" attribut is null then use the "rev" attribute... ++ QString rev = e.getAttribute( "rev" ).string(); ++ rev = rev.simplifyWhiteSpace(); ++ if (rev.isEmpty()) { ++ // if "rev" attribut is also empty => ignore ++ continue; ++ } ++ // Determine the "rel" equivalent of "rev" type ++ rel = transformRevToRel(rev); ++ } ++ // Determin the name used internally ++ QString lrel = getLinkType(rel.lower()); ++ // relation to ignore ++ if (lrel.isEmpty()) continue; ++ kdDebug() << "lrel=" << lrel << endl; ++ ++ // -- Retrieve of other usefull informations -- ++ ++ QString href = e.getAttribute( "href" ).string(); ++ // if nowhere to go, ignore the link ++ if (href.isEmpty()) continue; ++ QString title = e.getAttribute( "title" ).string(); ++ QString hreflang = e.getAttribute( "hreflang" ).string(); ++ ++ KURL ref( mDoc->url(), href ); ++ if ( title.isEmpty() ) ++ title = ref.prettyURL(); ++ ++ // escape ampersand before settings as action title, otherwise the menu entry will interpret it as an ++ // accelerator ++ title.replace('&', "&&"); ++ ++ // -- Menus activation -- ++ ++ // Activation of "Document" menu ? ++ if (lrel == "contents" || lrel == "glossary" || lrel == "index" || lrel == "appendix") { ++ m_document->setEnabled(true); ++ } ++ // Activation of "More" menu ? ++ if (lrel == "help" || lrel == "author" || lrel == "copyright" ) { ++ m_more->setEnabled(true); ++ } ++ ++ // -- Buttons or menu items activation / creation -- ++ if (lrel == "bookmark" || lrel == "alternate") { ++ int id = kactionmenu_map[lrel]->popupMenu()->insertItem( title ); ++ m_more->setEnabled(true); ++ kactionmenu_map[lrel]->setEnabled(true); ++ element_map[lrel][id] = e; ++ ++ } else if (lrel == "appendix" || lrel == "chapter" || lrel == "section" || lrel == "subsection") { ++ int id = kactionmenu_map[lrel]->popupMenu()->insertItem( title ); ++ m_document->setEnabled(true); ++ kactionmenu_map[lrel]->setEnabled(true); ++ element_map[lrel][id] = e; ++ ++ } else { ++ // It is a unique action ++ element_map[lrel][0] = e; ++ if (kaction_map[lrel]) { ++ kaction_map[lrel]->setEnabled(true); ++ // Tooltip ++ if (hreflang.isEmpty()) { ++ kaction_map[lrel]->setToolTip( title ); ++ } else { ++ kaction_map[lrel]->setToolTip( title + " [" + hreflang + "]"); ++ } ++ } else { ++ // For the moment all the elements are reference in a separated menu ++ // TODO : reference the unknown ? ++ int id = kactionmenu_map["unclassified"]->popupMenu()->insertItem( lrel + " : " + title ); ++ kactionmenu_map["unclassified"]->setEnabled(true); ++ element_map["unclassified"][id] = e; ++ } ++ ++ } ++ ++ } ++} ++ ++void MainWindow::disableAll() { ++ element_map.clear(); ++ ++ // Clear actions ++ KActionMap::Iterator it; ++ for ( it = kaction_map.begin(); it != kaction_map.end(); ++it ) { ++ // If I don't test it crash :( ++ if (it.data()) { ++ it.data()->setEnabled(false); ++ it.data()->setToolTip(it.data()->text().remove('&')); ++ } ++ } ++ ++ // Clear actions ++ KActionMenuMap::Iterator itmenu; ++ for ( itmenu = kactionmenu_map.begin(); itmenu != kactionmenu_map.end(); ++itmenu ) { ++ // If I don't test it crash :( ++ if (itmenu.data()) { ++ itmenu.data()->popupMenu()->clear(); ++ itmenu.data()->setEnabled(false); ++ itmenu.data()->setToolTip(itmenu.data()->text().remove('&')); ++ } ++ } ++ ++ // Unactivate menus ++ m_more->setEnabled(false); ++ m_document->setEnabled(false); ++ ++} ++ ++QString MainWindow::getLinkType(const QString &lrel) { ++ // Relations to ignore... ++ if (lrel.contains("stylesheet") ++ || lrel == "script" ++ || lrel == "icon" ++ || lrel == "shortcut icon" ++ || lrel == "prefetch" ) ++ return QString::null; ++ ++ // ...known relations... ++ if (lrel == "top" || lrel == "origin" || lrel == "start") ++ return "home"; ++ if (lrel == "parent") ++ return "up"; ++ if (lrel == "first") ++ return "begin"; ++ if (lrel == "previous") ++ return "prev"; ++ if (lrel == "child") ++ return "next"; ++ if (lrel == "end") ++ return "last"; ++ if (lrel == "toc") ++ return "contents"; ++ if (lrel == "find") ++ return "search"; ++ if (lrel == "alternative stylesheet") ++ return "alternate stylesheet"; ++ if (lrel == "authors") ++ return "author"; ++ if (lrel == "toc") ++ return "contents"; ++ ++ //...unknown relations or name that don't need to change ++ return lrel; ++} ++ ++QString MainWindow::transformRevToRel(const QString &rev) { ++ QString altRev = getLinkType(rev); ++ ++ // Known relations ++ if (altRev == "prev") ++ return getLinkType("next"); ++ if (altRev == "next") ++ return getLinkType("prev"); ++ if (altRev == "made") ++ return getLinkType("author"); ++ if (altRev == "up") ++ return getLinkType("child"); ++ if (altRev == "sibling") ++ return getLinkType("sibling"); ++ ++ //...unknown inverse relation => ignore for the moment ++ return QString::null; ++} ++ ++void MainWindow::goHome() { ++ goToLink("home"); ++} ++ ++void MainWindow::goUp() { ++ goToLink("up"); ++} ++ ++void MainWindow::goFirst() { ++ goToLink("begin"); ++} ++ ++void MainWindow::goPrevious() { ++ goToLink("prev"); ++} ++ ++void MainWindow::goNext() { ++ goToLink("next"); ++} ++ ++void MainWindow::goLast() { ++ goToLink("last"); ++} ++ ++void MainWindow::goContents() { ++ goToLink("contents"); ++} ++ ++void MainWindow::goIndex() { ++ goToLink("index"); ++} ++ ++void MainWindow::goGlossary() { ++ goToLink("glossary"); ++} ++ ++void MainWindow::goHelp() { ++ goToLink("help"); ++} ++ ++void MainWindow::goSearch() { ++ goToLink("search"); ++} ++ ++void MainWindow::goAuthor() { ++ goToLink("author"); ++} ++ ++ ++void MainWindow::goCopyright() { ++ goToLink("copyright"); ++} ++ ++void MainWindow::goBookmark(int id) { ++ goToLink("bookmark", id); ++} ++ ++void MainWindow::goChapter(int id) { ++ goToLink("chapter", id); ++} ++ ++void MainWindow::goSection(int id) { ++ goToLink("section", id); ++} ++ ++void MainWindow::goSubsection(int id) { ++ goToLink("subsection", id); ++} ++ ++void MainWindow::goAppendix(int id) { ++ goToLink("appendix", id); ++} ++ ++void MainWindow::goAlternate(int id) { ++ goToLink("alternate", id); ++} ++ ++void MainWindow::goAllElements(int id) { ++ goToLink("unclassified", id); ++} ++ ++/** Menu links */ ++void MainWindow::goToLink(const QString & rel, int id) { ++ // have the KHTML part open it ++ if (!mDoc) ++ return; ++ ++ DOM::Element e = element_map[rel][id]; ++ QString href = e.getAttribute("href").string(); ++ KURL url( mDoc->url(), href ); ++ QString target = e.getAttribute("target").string(); ++ ++ // URL arguments ++ KParts::URLArgs args; ++ args.frameName = target; ++ ++ // Add base url if not valid ++ if (url.isValid()) { ++ mDoc->browserExtension()->openURLRequest(url, args); ++ } else { ++ KURL baseURL = mDoc->baseURL(); ++ QString endURL = url.prettyURL(); ++ KURL realURL = KURL(baseURL, endURL); ++ mDoc->browserExtension()->openURLRequest(realURL, args); ++ } ++ ++} ++ + #include "mainwindow.moc" + + // vim:ts=2:sw=2:et +Index: khelpcenter/mainwindow.h +=================================================================== +--- khelpcenter/mainwindow.h.orig ++++ khelpcenter/mainwindow.h +@@ -13,6 +13,15 @@ + #include "navigator.h" + #include "glossary.h" + ++#include ++ ++class KAction; ++class KActionMenu; ++// type definitions ++typedef QMap DOMElementMap; ++typedef QMap KActionMap; ++typedef QMap KActionMenuMap; ++ + class KHTMLPart; + class QSplitter; + +@@ -68,11 +77,43 @@ class MainWindow : public KMainWindow, p + void writeConfig(); + + protected slots: ++ void updateLinkActions(); + void enableLastSearchAction(); + void enableCopyTextAction(); + + private: + void stop(); ++ /** ++ * initialise all KActions ++ */ ++ void initActions(); ++ /** ++ * Function used to disable all the item of the toolbar (c) rellinks ++ */ ++ void disableAll(); ++ /** ++ * Function used to get link type of a relation. ++ * For example "prev" is of type "previous" and "toc" is of type "contents" ++ * If the relation must be ignored return NULL. ++ * If the relation is unknow return the input relation type. ++ * @param lrel Previous relation name ++ * @return New relation name ++ */ ++ QString getLinkType(const QString &lrel); ++ /** ++ * Function used to return the "rel" equivalent of "rev" link type ++ * If the equivalent is not found return NULL ++ * @param rev Inverse relation name ++ * @return Equivalent relation name ++ */ ++ QString transformRevToRel(const QString &rev) ; ++ ++ /** ++ * Go to the link (c) rellinks ++ * @param rel Relation name ++ * @param id Identifier of the menu item ++ */ ++ void goToLink(const QString & rel, int id=0); + + private slots: + void slotGlossSelected(const GlossaryEntry &entry); +@@ -90,7 +131,29 @@ class MainWindow : public KMainWindow, p + void slotConfigureFonts(); + void slotCopySelectedText(); + +-private: ++ void goHome(); ++ void goUp(); ++ void goFirst(); ++ void goPrevious(); ++ void goNext(); ++ void goLast(); ++ void goContents(); ++ void goIndex(); ++ void goGlossary(); ++ void goHelp(); ++ void goSearch(); ++ void goCopyright(); ++ void goAuthor(); ++ ++ void goBookmark(int id); ++ void goChapter(int id); ++ void goSection(int id); ++ void goSubsection(int id); ++ void goAppendix(int id); ++ void goAlternate(int id); ++ void goAllElements(int id); ++ ++ private: + void updateZoomActions(); + + QSplitter *mSplitter; +@@ -100,6 +163,17 @@ private: + KAction *mLastSearchAction; + KAction *mCopyText; + LogDialog *mLogDialog; ++ //(c) rellinks ++ /** Map of KAction */ ++ KActionMap kaction_map; ++ /** Map of KActionMenu */ ++ KActionMenuMap kactionmenu_map; ++ /** Map of all the link element which can be managed by rellinks */ ++ QMap element_map; ++ KActionMenu *m_document; ++ KActionMenu *m_more; ++ KActionMenu *m_links; ++ + }; + + } diff --git a/opensuse/core/tdebase/kdebase_networkstatus_branch.diff b/opensuse/core/tdebase/kdebase_networkstatus_branch.diff new file mode 100644 index 000000000..8329d3cd2 --- /dev/null +++ b/opensuse/core/tdebase/kdebase_networkstatus_branch.diff @@ -0,0 +1,36 @@ +Index: konqueror/konq_frame.cc +=================================================================== +--- konqueror/konq_frame.cc.orig ++++ konqueror/konq_frame.cc +@@ -34,6 +34,7 @@ + #include + #include + #include ++#include + + #include "konq_events.h" + #include "konq_frame.h" +@@ -97,6 +98,10 @@ KonqFrameStatusBar::KonqFrameStatusBar( + m_progressBar->hide(); + addWidget( m_progressBar, 0, true /*permanent->right align*/ ); + ++ StatusBarNetworkStatusIndicator * indicator = new StatusBarNetworkStatusIndicator( this, "networkstatusindicator" ); ++ addWidget( indicator, 0, false ); ++ indicator->init(); ++ + fontChange(QFont()); + installEventFilter( this ); + } +Index: konqueror/Makefile.am +=================================================================== +--- konqueror/Makefile.am.orig ++++ konqueror/Makefile.am +@@ -48,7 +48,7 @@ noinst_HEADERS = KonqMainWindowIface.h K + konq_misc.h konq_openurlrequest.h konq_profiledlg.h konq_run.h \ + konq_view.h konq_viewmgr.h konq_extensionmanager.h version.h + +-konqueror_la_LDFLAGS = -module $(KDE_PLUGIN) $(all_libraries) ++konqueror_la_LDFLAGS = -module $(KDE_PLUGIN) $(all_libraries) -lconnectionmanager + konqueror_la_LIBADD = ../libkonq/libkonq.la libkonqueror_intern.la $(LIBMALLOC) $(LIB_KUTILS) + + # Hmm, this experiment of a static konq failed, don't trust it... diff --git a/opensuse/core/tdebase/kdeeject.diff b/opensuse/core/tdebase/kdeeject.diff new file mode 100644 index 000000000..d22e67fb6 --- /dev/null +++ b/opensuse/core/tdebase/kdeeject.diff @@ -0,0 +1,58 @@ +Index: kdeeject/kdeeject +=================================================================== +--- kdeeject/kdeeject.orig ++++ kdeeject/kdeeject +@@ -4,12 +4,38 @@ + # + # Copyright GPL v2 by David Faure + # +-if test $# -ge 1 -a "$1" != "--help"; then +- quiet=0 +- if test "$1" = "-q"; then +- quiet=1 +- shift +- fi ++quiet=0 ++if test "$1" = "-q"; then ++ quiet=1 ++ shift ++fi ++ ++if test "$1" = "--help"; then ++ echo "Usage: $0 where name is a device or a mountpoint." ++ exit 0 ++fi ++ ++if test -z "$1"; then ++ for dev in /dev/cdrom /dev/dvd /dev/dvdram /dev/cdrecorder; do ++ if test -e $dev; then ++ lp=`readlink $dev` ++ if test -n "$lp"; then ++ device=/dev/$lp ++ else ++ device=$dev ++ fi ++ break ++ fi ++ done ++else ++ device=$1 ++fi ++ ++udi=`dcop kded mediamanager properties $device 2>/dev/null | head -n 1 ` ++if test -n "$udi"; then ++ dcop kded mediamanager unmount "$udi" >/dev/null 2>&1 ++fi ++ + # Checking for stuff in the PATH is ugly with sh. + # I guess this is the reason for making this a kde app... + OS=`uname -s` +@@ -34,7 +60,5 @@ if test $# -ge 1 -a "$1" != "--help"; th + elif test $quiet -eq 0; then + kdialog --title "KDE Eject" --error "Eject $1 failed!" + fi +-else +- kdialog --title "KDE Eject" --msgbox "Usage: $0 where name is a device or a mountpoint." +-fi ++ + exit 1 diff --git a/opensuse/core/tdebase/kdesktop_icons.diff b/opensuse/core/tdebase/kdesktop_icons.diff new file mode 100644 index 000000000..5d208b0dd --- /dev/null +++ b/opensuse/core/tdebase/kdesktop_icons.diff @@ -0,0 +1,311 @@ +Index: kdesktop/KDesktopIface.h +=================================================================== +--- kdesktop/KDesktopIface.h.orig ++++ kdesktop/KDesktopIface.h +@@ -107,6 +107,35 @@ k_dcop: + * space for desktop icons + */ + virtual void desktopIconsAreaChanged(const QRect &area, int screen) = 0; ++ ++ /** ++ * Find the next free place for a not yet existing icon, so it fits ++ * in the user arrangement. Basicly prepare for icons to be moved in. ++ * It will try to find a place in the virtual grid near col,row ++ * where no other icon is. ++ * ++ * If you specify -1 for row or column, it will try to find the next ++ * free room where no other icon follows. E.g. if you specify column ++ * = -1 and row = 0, kdesktop will find the next vertical placement ++ * so that the icon appears at the end of the existing icons preferable ++ * in the first column. If the first column is full, it will find the ++ * next free room in the second column. ++ * ++ * If you specify both column and row, kdesktop won't care for aligning, ++ * or surrounding icons, but try to find the free place near the given ++ * grid place (e.g. specify 0,0 to find the nearest place in the left ++ * upper corner). ++ */ ++ virtual QPoint findPlaceForIcon( int column, int row) = 0; ++ ++ /// copy the desktop file in the Desktop and place it at x, y ++ virtual void addIcon(const QString &url, int x, int y) = 0; ++ ++ /// same with specific destination ++ virtual void addIcon(const QString &url, const QString &dest, int x, int y) = 0; ++ ++ /// remove the desktop file (either full path or relative) ++ virtual void removeIcon(const QString &dest) = 0; + }; + + #endif +Index: kdesktop/desktop.cc +=================================================================== +--- kdesktop/desktop.cc.orig ++++ kdesktop/desktop.cc +@@ -32,6 +32,9 @@ + #include + #include + #include ++#include ++#include ++#include + + #include + #include +@@ -58,6 +61,7 @@ + #include + #include + #include ++#include + // Create the equivalent of KAccelBase::connectItem + // and then remove this include and fix reconnects in initRoot() -- ellis + //#include +@@ -983,4 +987,47 @@ bool KDesktop::event(QEvent * e) + return QWidget::event(e); + } + ++QPoint KDesktop::findPlaceForIcon( int column, int row ) ++{ ++ if (m_pIconView) ++ return m_pIconView->findPlaceForIcon(column, row); ++ else ++ return QPoint(-1, -1); ++} ++ ++void KDesktop::addIcon(const QString & _url, int x, int y) ++{ ++ addIcon( _url, KGlobalSettings::desktopPath(), x, y ); ++} ++ ++void KDesktop::addIcon(const QString & _url, const QString & _dest, int x, int y) ++{ ++ QString filename = _url.mid(_url.findRev('/') + 1); ++ ++ QValueList files; ++ KIO::CopyInfo i; ++ i.uSource = KURL::fromPathOrURL( _url ); ++ i.uDest = KURL::fromPathOrURL( _dest ); ++ i.uDest.addPath( filename ); ++ files.append(i); ++ if (!QFile::exists(i.uDest.prettyURL().replace("file://",QString::null))) { m_pIconView->slotAboutToCreate( QPoint( x, y ), files ); ++ KIO::copy( i.uSource, i.uDest, false ); } ++ ++// m_pIconView->addFuturePosition(filename, x, y); ++ // qDebug("addIcon %s %s %d %d", _url.latin1(), _dest.latin1(), x, y); ++// system(QString("cp \"%1\" \"%2/%3\"").arg(KURL(_url).path()).arg(KURL(_dest).path()).arg(filename).latin1()); ++// m_pIconView->update( _dest ); ++} ++ ++void KDesktop::removeIcon(const QString &_url) ++{ ++ if (_url.at(0) != '/') { ++ qDebug("removeIcon with relative path not supported for now"); ++ return; ++ } ++ unlink(KURL(_url).path().latin1()); ++ QString dest = _url.left(_url.findRev('/') + 1); ++ m_pIconView->update( dest ); ++} ++ + #include "desktop.moc" +Index: kdesktop/desktop.h +=================================================================== +--- kdesktop/desktop.h.orig ++++ kdesktop/desktop.h +@@ -164,6 +164,11 @@ protected: + virtual void setIconsEnabled( bool enable ); + virtual bool event ( QEvent * e ); + ++ virtual QPoint findPlaceForIcon( int column, int row); ++ virtual void addIcon(const QString &url, int x, int y); ++ virtual void addIcon(const QString &url, const QString &dest, int x, int y); ++ virtual void removeIcon(const QString &url); ++ + private slots: + void desktopResized(); + +Index: kdesktop/kdiconview.cc +=================================================================== +--- kdesktop/kdiconview.cc.orig ++++ kdesktop/kdiconview.cc +@@ -962,6 +962,18 @@ void KDIconView::slotNewItems( const KFi + kdDebug(1214) << "KDIconView::slotNewItems count=" << entries.count() << endl; + KFileItemListIterator it(entries); + KFileIVI* fileIVI = 0L; ++ ++ if (m_nextItemPos.isNull() && !m_dotDirectory) { ++ // Not found, we'll need to save the new pos ++ kdDebug(1214)<<"Neither a drop position stored nor m_dotDirectory set"<url(); +@@ -1026,15 +1038,6 @@ void KDIconView::slotNewItems( const KFi + kdDebug(1214)<<"Using saved position"< viewport()->width()) ++ return QPoint(); ++ ++ while ( rect.bottom() < viewport()->height() - spacing() ) ++ { ++ if ( !isFreePosition(0,rect) ) ++ rect.moveBy(0, rect.height()); ++ else ++ return rect.topLeft(); ++ } ++ ++ return QPoint(); ++} ++ ++QPoint KDIconView::findPlaceForIconRow( int row, int dx, int dy ) ++{ ++ if (row < 0) ++ return QPoint(); ++ ++ QRect rect; ++ rect.moveTopLeft(QPoint(0, row * dy)); ++ rect.setWidth(dx); ++ rect.setHeight(dy); ++ ++ if (rect.bottom() > viewport()->height()) ++ return QPoint(); ++ ++ while (rect.right() < viewport()->width() - spacing()) ++ { ++ if (!isFreePosition(0,rect)) ++ rect.moveBy(rect.width()+spacing(), 0); ++ else ++ return rect.topLeft(); ++ } ++ ++ return QPoint(); ++} ++ ++QPoint KDIconView::findPlaceForIcon( int column, int row) ++{ ++ int dx = gridXValue(), dy = 0; ++ QIconViewItem *item = firstItem(); ++ for ( ; item; item = item->nextItem() ) { ++ dx = QMAX( dx, item->width() ); ++ dy = QMAX( dy, item->height() ); ++ } ++ ++ dx += spacing(); ++ dy += spacing(); ++ ++ if (row == -1) { ++ int max_cols = viewport()->width() / dx; ++ int delta = 0; ++ QPoint res; ++ do { ++ delta++; ++ res = findPlaceForIconCol(column + (delta / 2) * (-2 * (delta % 2) + 1), ++ dx, dy); ++ if (delta / 2 > QMAX(max_cols - column, column)) ++ return res; ++ } while (res.isNull()); ++ return res; ++ } ++ ++ if (column == -1) { ++ int max_rows = viewport()->height() / dy; ++ int delta = 0; ++ QPoint res; ++ do { ++ delta++; ++ res = findPlaceForIconRow(row + (delta / 2) * (-2 * (delta % 2) + 1), ++ dx, dy); ++ if (delta / 2 > QMAX(max_rows - row, row)) ++ return res; ++ } while (res.isNull()); ++ return res; ++ } ++ ++ // very unlikely - if I may add that ++ return QPoint(0, 0); ++} ++ + void KDIconView::saveIconPositions() + { + kdDebug(1214) << "KDIconView::saveIconPositions" << endl; +@@ -1665,4 +1760,11 @@ void KDIconView::saveIconPositions() + m_dotDirectory->sync(); + } + ++void KDIconView::update( const QString &_url ) ++{ ++ if (m_dirLister) ++ m_dirLister->updateDirectory( _url ); ++} ++ ++ + #include "kdiconview.moc" +Index: kdesktop/kdiconview.h +=================================================================== +--- kdesktop/kdiconview.h.orig ++++ kdesktop/kdiconview.h +@@ -73,6 +73,8 @@ public: + + QStringList selectedURLs(); + ++ void update( const QString &url ); ++ + /** + * Save the icon positions + */ +@@ -103,6 +105,10 @@ public: + + void startDirLister(); + ++ QPoint findPlaceForIconCol( int column, int dx, int dy ); ++ QPoint findPlaceForIconRow( int row, int dx, int dy ); ++ QPoint findPlaceForIcon( int column, int row ); ++ + protected slots: + + // slots connected to the icon view +@@ -112,8 +118,9 @@ protected slots: + void slotMouseButtonClickedKDesktop(int _button, QIconViewItem* _item, const QPoint& _global); + void slotContextMenuRequested(QIconViewItem* _item, const QPoint& _global); + void slotEnableAction( const char * name, bool enabled ); ++public slots: + void slotAboutToCreate(const QPoint &pos, const QValueList &files); +- ++protected slots: + void slotItemRenamed(QIconViewItem*, const QString &name); + + // slots connected to the directory lister diff --git a/opensuse/core/tdebase/kdesu-remember-keep-password.diff b/opensuse/core/tdebase/kdesu-remember-keep-password.diff new file mode 100644 index 000000000..29e9002d8 --- /dev/null +++ b/opensuse/core/tdebase/kdesu-remember-keep-password.diff @@ -0,0 +1,18 @@ +Subject: Default to kdesu password remembering on, but remember last state +From: Lubos Lunak +Feature: bnc#386531 +Patch-upstream: no +Relates: kdebase4/kdesu-remember-keep-password.diff, kdelibs3/kdesu-settings.diff + +Index: kdesu/kdesu/kdesu.cpp +=================================================================== +--- kdesu/kdesu/kdesu.cpp (revision 810363) ++++ kdesu/kdesu/kdesu.cpp (working copy) +@@ -382,6 +382,7 @@ + change_uid = false; + password = dlg.password(); + keep = dlg.keep(); ++ KConfigGroup(config,"Passwords").writeEntry("Keep", keep); + data.setSilent( KStartupInfoData::No ); + KStartupInfo::sendChange( id, data ); + } diff --git a/opensuse/core/tdebase/kdesud-security.diff b/opensuse/core/tdebase/kdesud-security.diff new file mode 100644 index 000000000..40b44de71 --- /dev/null +++ b/opensuse/core/tdebase/kdesud-security.diff @@ -0,0 +1,21 @@ +Index: kdesu/kdesud/kdesud.cpp +=================================================================== +--- kdesu/kdesud/kdesud.cpp.orig ++++ kdesu/kdesud/kdesud.cpp +@@ -45,6 +45,7 @@ + #include + #include + ++#include + #include + #include + #include +@@ -248,6 +249,8 @@ int create_socket() + + int main(int argc, char *argv[]) + { ++ prctl(PR_SET_DUMPABLE, 0); ++ + KAboutData aboutData("kdesud", I18N_NOOP("KDE su daemon"), + Version, I18N_NOOP("Daemon used by kdesu"), + KAboutData::License_Artistic, diff --git a/opensuse/core/tdebase/kdm-admin-mode.diff b/opensuse/core/tdebase/kdm-admin-mode.diff new file mode 100644 index 000000000..6028d7698 --- /dev/null +++ b/opensuse/core/tdebase/kdm-admin-mode.diff @@ -0,0 +1,424 @@ +Index: kdm/config.def +=================================================================== +--- kdm/config.def.orig ++++ kdm/config.def +@@ -2002,6 +2002,17 @@ Description: + Specify the widget style for the greeter. Empty means to use the + built-in default which currently is Plastik. + ++Key: UseAdminSession ++Type: bool ++Default: false ++User: greeter ++Instance: #*/! ++Comment: ++ Admin session ++Description: ++ If given there will be a special button that requires root password ++ and starts the given session ++ + Key: ColorScheme + Type: string + Default: "" +Index: kdm/kfrontend/Makefile.am +=================================================================== +--- kdm/kfrontend/Makefile.am.orig ++++ kdm/kfrontend/Makefile.am +@@ -21,6 +21,7 @@ kdm_greet_SOURCES = \ + kchooser.cpp \ + kgverify.cpp \ + kdmshutdown.cpp \ ++ kdmadmindialog.cpp \ + kgreeter.cpp \ + kgapp.cpp + kdm_greet_LDFLAGS = $(all_libraries) $(KDE_RPATH) +Index: kdm/kfrontend/kdmadmindialog.cpp +=================================================================== +--- /dev/null ++++ kdm/kfrontend/kdmadmindialog.cpp +@@ -0,0 +1,176 @@ ++ /* ++ ++ Admin dialog ++ ++ Copyright (C) 1997, 1998, 2000 Steffen Hansen ++ Copyright (C) 2000-2003 Oswald Buddenhagen ++ ++ ++ This program is free software; you can redistribute it and/or modify ++ it under the terms of the GNU General Public License as published by ++ the Free Software Foundation; either version 2 of the License, or ++ (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with this program; if not, write to the Free Software ++ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ++ ++ */ ++ ++#include "kdmadmindialog.h" ++#include "kdmconfig.h" ++#include "kgdialog.h" ++#include "kdm_greet.h" ++#include ++ ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include ++#include ++#include ++#include ++#include ++ ++int KDMAdmin::curPlugin = -1; ++PluginList KDMAdmin::pluginList; ++ ++KDMAdmin::KDMAdmin( const QString &user, QWidget *_parent ) ++ : inherited( _parent ) ++ , verify( 0 ), curUser(user) ++{ ++ QSizePolicy fp( QSizePolicy::Fixed, QSizePolicy::Fixed ); ++ ++ QVBoxLayout *box = new QVBoxLayout( this, 10 ); ++ ++ QHBoxLayout *hlay = new QHBoxLayout( box ); ++ ++ GSendInt( G_ReadDmrc ); ++ GSendStr( "root" ); ++ GRecvInt(); // ignore status code ... ++ ++ if (curPlugin < 0) { ++ curPlugin = 0; ++ pluginList = KGVerify::init( "classic" ); ++ } ++ verify = new KGStdVerify( this, this, ++ this, "root", ++ pluginList, KGreeterPlugin::Authenticate, ++ KGreeterPlugin::Shutdown ); ++ verify->selectPlugin( curPlugin ); ++ box->addLayout( verify->getLayout() ); ++ QAccel *accel = new QAccel( this ); ++ accel->insertItem( ALT+Key_A, 0 ); ++ connect( accel, SIGNAL(activated(int)), SLOT(slotActivatePlugMenu()) ); ++ ++ box->addWidget( new KSeparator( KSeparator::HLine, this ) ); ++ ++ okButton = new KPushButton( KStdGuiItem::ok(), this ); ++ okButton->setSizePolicy( fp ); ++ okButton->setDefault( true ); ++ cancelButton = new KPushButton( KStdGuiItem::cancel(), this ); ++ cancelButton->setSizePolicy( fp ); ++ ++ hlay = new QHBoxLayout( box ); ++ hlay->addStretch( 1 ); ++ hlay->addWidget( okButton ); ++ hlay->addStretch( 1 ); ++ hlay->addWidget( cancelButton ); ++ hlay->addStretch( 1 ); ++ ++ connect( okButton, SIGNAL(clicked()), SLOT(accept()) ); ++ connect( cancelButton, SIGNAL(clicked()), SLOT(reject()) ); ++ ++ slotWhenChanged(); ++} ++ ++KDMAdmin::~KDMAdmin() ++{ ++ hide(); ++ delete verify; ++} ++ ++void ++KDMAdmin::slotActivatePlugMenu() ++{ ++ QPopupMenu *cmnu = verify->getPlugMenu(); ++ QSize sh( cmnu->sizeHint() / 2 ); ++ cmnu->exec( geometry().center() - QPoint( sh.width(), sh.height() ) ); ++} ++ ++void ++KDMAdmin::accept() ++{ ++ verify->accept(); ++} ++ ++void ++KDMAdmin::slotWhenChanged() ++{ ++ verify->abort(); ++ verify->setEnabled( 1 ); ++ verify->start(); ++} ++ ++void ++KDMAdmin::bye_bye() ++{ ++ GSendInt( G_GetDmrc ); ++ GSendStr( "Session" ); ++ char *sess = GRecvStr(); ++ if (sess && strcmp(sess, "admin")) { ++ GSendInt( G_PutDmrc ); ++ GSendStr( "OrigSession"); ++ GSendStr( sess); ++ free(sess); ++ } ++ ++ GSendInt( G_PutDmrc ); ++ GSendStr( "Session" ); ++ GSendStr( "admin" ); ++ inherited::accept(); ++} ++ ++void ++KDMAdmin::verifyPluginChanged( int id ) ++{ ++ curPlugin = id; ++ adjustSize(); ++} ++ ++void ++KDMAdmin::verifyOk() ++{ ++ bye_bye(); ++} ++ ++void ++KDMAdmin::verifyFailed() ++{ ++ okButton->setEnabled( false ); ++ cancelButton->setEnabled( false ); ++} ++ ++void ++KDMAdmin::verifyRetry() ++{ ++ okButton->setEnabled( true ); ++ cancelButton->setEnabled( true ); ++} ++ ++void ++KDMAdmin::verifySetUser( const QString & ) ++{ ++} ++ ++ ++#include "kdmadmindialog.moc" +Index: kdm/kfrontend/kdmadmindialog.h +=================================================================== +--- /dev/null ++++ kdm/kfrontend/kdmadmindialog.h +@@ -0,0 +1,70 @@ ++ /* ++ ++ Shutdown dialog ++ ++ Copyright (C) 1997, 1998 Steffen Hansen ++ Copyright (C) 2000-2003 Oswald Buddenhagen ++ ++ ++ This program is free software; you can redistribute it and/or modify ++ it under the terms of the GNU General Public License as published by ++ the Free Software Foundation; either version 2 of the License, or ++ (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with this program; if not, write to the Free Software ++ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ++ ++ */ ++ ++ ++#ifndef KDMADMIN_H ++#define KDMADMIN_H ++ ++#include "kgverify.h" ++ ++#include ++ ++class LiloInfo; ++class QLabel; ++class KPushButton; ++class QButtonGroup; ++class QComboBox; ++ ++class KDMAdmin : public FDialog, public KGVerifyHandler { ++ Q_OBJECT ++ typedef FDialog inherited; ++ ++public: ++ KDMAdmin( const QString &user, QWidget *_parent = 0 ); ++ ~KDMAdmin(); ++ ++public slots: ++ void accept(); ++ void slotWhenChanged(); ++ void slotActivatePlugMenu(); ++ ++private: ++ void bye_bye(); ++ ++ KPushButton *okButton, *cancelButton; ++ KGStdVerify *verify; ++ QString curUser; ++ ++ static int curPlugin; ++ static PluginList pluginList; ++ ++public: // from KGVerifyHandler ++ virtual void verifyPluginChanged( int id ); ++ virtual void verifyOk(); ++ virtual void verifyFailed(); ++ virtual void verifyRetry(); ++ virtual void verifySetUser( const QString &user ); ++}; ++ ++#endif +Index: kdm/kfrontend/kgreeter.cpp +=================================================================== +--- kdm/kfrontend/kgreeter.cpp.orig ++++ kdm/kfrontend/kgreeter.cpp +@@ -27,6 +27,7 @@ Foundation, Inc., 51 Franklin Street, Fi + #include "kdmconfig.h" + #include "kdmclock.h" + #include "kdm_greet.h" ++#include "kdmadmindialog.h" + #include "themer/kdmthemer.h" + #include "themer/kdmitem.h" + #include "themer/kdmlabel.h" +@@ -509,7 +510,7 @@ KGreeter::insertSessions() + for (char **dit = _sessionsDirs; *dit; ++dit) { + QStringList ents = QDir( *dit ).entryList(); + for (QStringList::ConstIterator it = ents.begin(); it != ents.end(); ++it) +- if ((*it).endsWith( ".desktop" )) { ++ if ((*it).endsWith( ".desktop" ) && !(*it).endsWith("admin.desktop")) { + KSimpleConfig dsk( QString( *dit ).append( '/' ).append( *it ) ); + dsk.setGroup( "Desktop Entry" ); + putSession( (*it).left( (*it).length() - 8 ), +@@ -648,6 +649,17 @@ KGreeter::slotLoadPrevWM() + return; + } + } else { ++ if (!strcmp(sess, "admin")) { ++ // need to get the original ++ GSendInt( G_GetDmrc); ++ GSendStr( "OrigSession"); ++ sess = GRecvStr(); ++ if (!sess) { ++ free(sess); ++ sess = strdup("default"); ++ } ++ } ++ + for (uint i = 0; i < sessionTypes.count() && !sessionTypes[i].hid; i++) + if (sessionTypes[i].type == sess) { + free( sess ); +@@ -998,6 +1010,12 @@ KThemedGreeter::KThemedGreeter() + } + } + ++ admin_button = themer->findNode( "admin_button"); ++ if ( admin_button ) { ++ if ( !_useAdminSession ) ++ admin_button->hide( true ); ++ } ++ + if (plugMenu) { + inserten( i18n("&Authentication Method"), 0, plugMenu ); + needSep = true; +@@ -1103,6 +1121,8 @@ KThemedGreeter::slotThemeActivated( cons + slotSessMenu(); + else if (id == "system_button") + slotActionMenu(); ++ else if (id == "admin_button") ++ slotAskAdminPassword(); + } + + void +@@ -1129,4 +1149,15 @@ KThemedGreeter::keyPressEvent( QKeyEvent + accept(); + } + ++void ++KThemedGreeter::slotAskAdminPassword() ++{ ++ KDMAdmin k(curUser, this); ++ if (k.exec()) { ++ GSendInt(G_Ready); ++ hide(); ++ done(ex_exit); ++ } ++} ++ + #include "kgreeter.moc" +Index: kdm/kfrontend/kgreeter.h +=================================================================== +--- kdm/kfrontend/kgreeter.h.orig ++++ kdm/kfrontend/kgreeter.h +@@ -146,6 +146,7 @@ class KThemedGreeter : public KGreeter { + void slotThemeActivated( const QString &id ); + void slotSessMenu(); + void slotActionMenu(); ++ void slotAskAdminPassword(); + + protected: + virtual void updateStatus( bool fail, bool caps, int timedleft ); +@@ -158,7 +159,7 @@ class KThemedGreeter : public KGreeter { + KdmThemer *themer; + KdmItem *caps_warning, *xauth_warning, *pam_error, *timed_label, + *console_rect, *userlist_rect, +- *session_button, *system_button; ++ *session_button, *system_button, *admin_button; + + public: // from KGVerifyHandler + virtual void verifyFailed(); +Index: kdm/kfrontend/sessions/Makefile.am +=================================================================== +--- kdm/kfrontend/sessions/Makefile.am.orig ++++ kdm/kfrontend/sessions/Makefile.am +@@ -1,6 +1,6 @@ + sessionsdir = $(kde_datadir)/kdm/sessions + sessions_DATA = \ +- kde.desktop gnome.desktop \ ++ admin.desktop kde.desktop gnome.desktop \ + 9wm.desktop \ + aewm++.desktop \ + aewm.desktop \ +Index: kdm/kfrontend/sessions/admin.desktop +=================================================================== +--- /dev/null ++++ kdm/kfrontend/sessions/admin.desktop +@@ -0,0 +1,7 @@ ++[Desktop Entry] ++Encoding=UTF-8 ++Type=XSession ++Exec=YaSTadminSession ++TryExec=YaSTadminSession ++Name=admin ++Comment=Yast Admin Session +Index: kdm/kfrontend/themer/kdmlabel.cpp +=================================================================== +--- kdm/kfrontend/themer/kdmlabel.cpp.orig ++++ kdm/kfrontend/themer/kdmlabel.cpp +@@ -214,6 +214,7 @@ static const struct { + { "language", I18N_NOOP("&Language") }, + { "session", I18N_NOOP("Session &Type") }, + { "system", I18N_NOOP("&System") }, // i18n("Actions"); ++ { "admin", I18N_NOOP("&Administration") }, + { "disconnect", I18N_NOOP("&Disconnect") }, + { "quit", I18N_NOOP("&Quit") }, + { "halt", I18N_NOOP("Power O&ff") }, diff --git a/opensuse/core/tdebase/kdm-aliasing.diff b/opensuse/core/tdebase/kdm-aliasing.diff new file mode 100644 index 000000000..73fc86e54 --- /dev/null +++ b/opensuse/core/tdebase/kdm-aliasing.diff @@ -0,0 +1,11 @@ +Index: kdm/backend/Makefile.am +=================================================================== +--- kdm/backend/Makefile.am.orig ++++ kdm/backend/Makefile.am +@@ -1,5 +1,6 @@ + # forcibly remove thread-related defines & flags + AUTOMAKE_OPTIONS = foreign ++CFLAGS = $(XDM_CFLAGS) -fno-strict-aliasing + CPPFLAGS = $(USER_INCLUDES) $(X_INCLUDES) $(KRB4_INCS) $(KRB5_INCS) -I.. -I../.. + LDFLAGS = $(USER_LDFLAGS) $(X_LDFLAGS) $(X_RPATH) $(KRB4_RPATH) $(KRB5_RPATH) + LDADD = $(LIB_X11) -lXau $(LIBXDMCP) $(PASSWDLIBS) $(LIBSHADOW) $(LIBGEN) \ diff --git a/opensuse/core/tdebase/kdm-align-userlist-labels.diff b/opensuse/core/tdebase/kdm-align-userlist-labels.diff new file mode 100644 index 000000000..65accc55f --- /dev/null +++ b/opensuse/core/tdebase/kdm-align-userlist-labels.diff @@ -0,0 +1,46 @@ +Index: kdm/kfrontend/kgreeter.cpp +=================================================================== +--- kdm/kfrontend/kgreeter.cpp.orig ++++ kdm/kfrontend/kgreeter.cpp +@@ -59,6 +59,7 @@ Foundation, Inc., 51 Franklin Street, Fi + #include + #include + #include ++#include + + #include + #include +@@ -313,6 +314,33 @@ KGreeter::insertUser( const QImage &defa + if ( p.isNull() ) + p = default_pix; + ++ const int size = 48; ++ const int wdiff = size - p.size().width(); ++ const int hdiff = size - p.size().height(); ++ if (wdiff>0 || hdiff>0) { ++ QPixmap pix(p); ++ QBitmap mask; ++ mask.convertFromImage(p.createAlphaMask()); ++ pix.resize(size, size); ++ bitBlt(&pix, wdiff/2.0, hdiff/2.0, &pix); ++ if (mask.isNull()) { ++ mask = QBitmap(size, size); ++ mask.fill(Qt::color1); ++ } ++ else { ++ mask.resize(size, size); ++ bitBlt(&mask, wdiff/2.0, hdiff/2.0, &mask); ++ } ++ QPainter pa(&mask); ++ pa.fillRect(0, 0, size, hdiff/2.0, Qt::color0); ++ pa.fillRect(0, 0, wdiff/2.0, size, Qt::color0); ++ pa.fillRect(size-(wdiff/2.0), 0, size, size, Qt::color0); ++ pa.fillRect(0, size-(hdiff/2.0), size, size, Qt::color0); ++ pa.end(); ++ pix.setMask(mask); ++ p=pix.convertToImage(); ++ } ++ + QString realname = KStringHandler::from8Bit( ps->pw_gecos ); + realname.truncate( realname.find( ',' ) ); + if (realname.isEmpty() || realname == username) diff --git a/opensuse/core/tdebase/kdm-all-users-nopass.diff b/opensuse/core/tdebase/kdm-all-users-nopass.diff new file mode 100644 index 000000000..612c6a553 --- /dev/null +++ b/opensuse/core/tdebase/kdm-all-users-nopass.diff @@ -0,0 +1,34 @@ +Index: kdm/backend/client.c +=================================================================== +--- kdm/backend/client.c.orig ++++ kdm/backend/client.c +@@ -386,6 +386,9 @@ AccNoPass( const char *un, struct passwd + if (cursource != PWSRC_MANUAL) + return 1; + ++ if (td->noPassAllUsers) ++ return 1; ++ + for (hg = 0, fp = td->noPassUsers; *fp; fp++) + if (**fp == '@') + hg = 1; +Index: kdm/config.def +=================================================================== +--- kdm/config.def.orig ++++ kdm/config.def +@@ -1852,6 +1852,15 @@ Description: + (and any other user with UID = 0). + Never list root. + ++Key: NoPassAllUsers ++Type: bool ++Default: false ++User: core ++Instance: #:0/true ++Comment: & ++Description: ++ All users can login without password ++ + Key: AutoLoginEnable + Type: bool + Default: false diff --git a/opensuse/core/tdebase/kdm-audit-log.diff b/opensuse/core/tdebase/kdm-audit-log.diff new file mode 100644 index 000000000..de571e44d --- /dev/null +++ b/opensuse/core/tdebase/kdm-audit-log.diff @@ -0,0 +1,190 @@ +Index: kdm/backend/client.c +=================================================================== +--- kdm/backend/client.c.orig ++++ kdm/backend/client.c +@@ -87,6 +87,14 @@ extern int loginsuccess( const char *Use + #include "consolekit.h" + #endif + ++#define AU_FAILED 0 ++#define AU_SUCCESS 1 ++#ifdef HAVE_LIBAUDIT ++#include ++#else ++#define log_to_audit_system(l,h,d,s) do { ; } while (0) ++#endif ++ + /* + * Session data, mostly what struct verify_info was for + */ +@@ -291,6 +299,56 @@ fail_delay( int retval ATTR_UNUSED, unsi + {} + # endif + ++ /** ++ * log_to_audit_system: ++ * @login: Name of user ++ * @hostname: Name of host machine ++ * @tty: Name of display ++ * @success: 1 for success, 0 for failure ++ * ++ * Logs the success or failure of the login attempt with the linux kernel ++ * audit system. The intent is to capture failed events where the user ++ * fails authentication or otherwise is not permitted to login. There are ++ * many other places where pam could potentially fail and cause login to ++ * fail, but these are system failures rather than the signs of an account ++ * being hacked. ++ * ++ * Returns nothing. ++ */ ++ ++#ifdef HAVE_LIBAUDIT ++static void ++log_to_audit_system (const char *loginname, ++ const char *hostname, ++ const char *tty, ++ int success) ++{ ++ struct passwd *pw; ++ char buf[64]; ++ int audit_fd; ++ ++ audit_fd = audit_open(); ++ if (loginname) ++ pw = getpwnam(loginname); ++ else { ++ loginname = "unknown"; ++ pw = NULL; ++ } ++ Debug("log_to_audit %p %s\n", pw, loginname); ++ ++ if (pw) { ++ snprintf(buf, sizeof(buf), "uid=%d", pw->pw_uid); ++ audit_log_user_message(audit_fd, AUDIT_USER_LOGIN, ++ buf, hostname, NULL, tty, (int)success); ++ } else { ++ snprintf(buf, sizeof(buf), "acct=%s", loginname); ++ audit_log_user_message(audit_fd, AUDIT_USER_LOGIN, ++ buf, hostname, NULL, tty, (int)success); ++ } ++ close(audit_fd); ++} ++#endif ++ + static int + doPAMAuth( const char *psrv, struct pam_data *pdata ) + { +@@ -349,6 +407,8 @@ doPAMAuth( const char *psrv, struct pam_ + GSendStr( curuser ); + } + if (pretc != PAM_SUCCESS) { ++ /* Log the failed login attempt */ ++ log_to_audit_system (curuser, td->remoteHost, td->name, AU_FAILED); + switch (pretc) { + case PAM_USER_UNKNOWN: + case PAM_AUTH_ERR: +@@ -702,6 +762,8 @@ Verify( GConvFunc gconv, int rootok ) + if (!p->pw_uid) { + if (!rootok && !td->allowRootLogin) + V_RET_FAIL( "Root logins are not allowed" ); ++ /* Log the failed login attempt */ ++ log_to_audit_system (curuser, td->remoteHost, td->name, AU_FAILED); + return 1; /* don't deny root to log in */ + } + +@@ -738,6 +800,8 @@ Verify( GConvFunc gconv, int rootok ) + } + if (pretc == PAM_SUCCESS) + break; ++ /* Log the failed login attempt */ ++ log_to_audit_system (curuser, td->remoteHost, td->name, AU_FAILED); + /* effectively there is only PAM_AUTHTOK_ERR */ + GSendInt( V_FAIL ); + } +@@ -827,6 +891,8 @@ Verify( GConvFunc gconv, int rootok ) + GSendInt( V_MSG_ERR ); + GSendStr( "Your account has expired;" + " please contact your system administrator" ); ++ /* Log the failed login attempt */ ++ log_to_audit_system (curuser, td->remoteHost, td->name, AU_FAILED); + GSendInt( V_FAIL ); + LC_RET0; + } else if (tim > (expir - warntime) && !quietlog) { +@@ -861,6 +927,8 @@ Verify( GConvFunc gconv, int rootok ) + GSendInt( V_MSG_ERR ); + GSendStr( "Your account has expired;" + " please contact your system administrator" ); ++ /* Log the failed login attempt */ ++ log_to_audit_system (curuser, td->remoteHost, td->name, AU_FAILED); + GSendInt( V_FAIL ); + LC_RET0; + } +@@ -920,6 +988,8 @@ Verify( GConvFunc gconv, int rootok ) + close( fd ); + } + GSendStr( "Logins are not allowed at the moment.\nTry again later" ); ++ /* Log the failed login attempt */ ++ log_to_audit_system (curuser, td->remoteHost, td->name, AU_FAILED); + GSendInt( V_FAIL ); + LC_RET0; + } +@@ -930,6 +1000,8 @@ Verify( GConvFunc gconv, int rootok ) + PrepErrorGreet(); + GSendInt( V_MSG_ERR ); + GSendStr( "You are not allowed to login at the moment" ); ++ /* Log the failed login attempt */ ++ log_to_audit_system (curuser, td->remoteHost, td->name, AU_FAILED); + GSendInt( V_FAIL ); + LC_RET0; + } +@@ -941,6 +1013,8 @@ Verify( GConvFunc gconv, int rootok ) + Debug( "shell not in /etc/shells\n" ); + endusershell(); + V_RET_FAIL( "Your login shell is not listed in /etc/shells" ); ++ /* Log the failed login attempt */ ++ log_to_audit_system (curuser, td->remoteHost, td->name, AU_FAILED); + } + if (!strcmp( s, p->pw_shell )) { + endusershell(); +@@ -1365,6 +1439,9 @@ StartClient() + # define D_LOGIN_SETGROUP 0 + #endif /* USE_PAM */ + ++ /* Login succeeded */ ++ log_to_audit_system (curuser, td->remoteHost, td->name, AU_SUCCESS); ++ + removeAuth = 1; + chownCtrl( &td->ctrl, curuid ); + endpwent(); +Index: kdm/configure.in.in +=================================================================== +--- kdm/configure.in.in.orig ++++ kdm/configure.in.in +@@ -288,3 +288,27 @@ fi + AC_SUBST(DBUS_LIBS) + + dnl AC_OUTPUT(kdm/kfrontend/sessions/kde.desktop) ++ ++ ++AC_ARG_WITH(libaudit, ++ [ --with-libaudit=[auto/yes/no] Add Linux audit support [default=auto]],, ++ with_libaudit=auto) ++ ++# Check for Linux auditing API ++# ++# libaudit detection ++if test x$with_libaudit = xno ; then ++ have_libaudit=no; ++else ++ # See if we have audit daemon library ++ AC_CHECK_LIB(audit, audit_log_user_message, ++ have_libaudit=yes, have_libaudit=no) ++fi ++ ++AM_CONDITIONAL(HAVE_LIBAUDIT, test x$have_libaudit = xyes) ++ ++if test x$have_libaudit = xyes ; then ++ EXTRA_DAEMON_LIBS="$EXTRA_DAEMON_LIBS -laudit" ++ AC_DEFINE(HAVE_LIBAUDIT,1,[linux audit support]) ++fi ++ diff --git a/opensuse/core/tdebase/kdm-color-scheme.diff b/opensuse/core/tdebase/kdm-color-scheme.diff new file mode 100644 index 000000000..f45486ad1 --- /dev/null +++ b/opensuse/core/tdebase/kdm-color-scheme.diff @@ -0,0 +1,28 @@ +Index: kdm/kfrontend/kgapp.cpp +=================================================================== +--- kdm/kfrontend/kgapp.cpp.orig ++++ kdm/kfrontend/kgapp.cpp +@@ -42,6 +42,7 @@ Foundation, Inc., 51 Franklin Street, Fi + #include + #include + #include ++#include + + #include // free(), exit() + #include // alarm() +@@ -144,7 +145,14 @@ kg_main( const char *argv0 ) + if (!_GUIStyle.isEmpty()) + app.setStyle( _GUIStyle ); + +- _colorScheme = locate( "data", "kdisplay/color-schemes/" + _colorScheme + ".kcsrc" ); ++ const QString _configColorScheme = _colorScheme; ++ ++ if (_useTheme && !_theme.isEmpty()) ++ _colorScheme = _theme + "/color.kcsrc"; ++ ++ if (!QFile::exists(_colorScheme)) ++ _colorScheme = locate( "data", "kdisplay/color-schemes/" + _configColorScheme + ".kcsrc" ); ++ + if (!_colorScheme.isEmpty()) { + KSimpleConfig config( _colorScheme, true ); + config.setGroup( "Color Scheme" ); diff --git a/opensuse/core/tdebase/kdm-consolekit.diff b/opensuse/core/tdebase/kdm-consolekit.diff new file mode 100644 index 000000000..9b4df34bc --- /dev/null +++ b/opensuse/core/tdebase/kdm-consolekit.diff @@ -0,0 +1,822 @@ +Index: kdm/backend/client.c +=================================================================== +--- kdm/backend/client.c.orig ++++ kdm/backend/client.c +@@ -83,6 +83,10 @@ extern int loginsuccess( const char *Use + #endif + #include + ++#ifdef WITH_CONSOLE_KIT ++#include "consolekit.h" ++#endif ++ + /* + * Session data, mostly what struct verify_info was for + */ +@@ -1124,8 +1128,13 @@ static int removeSession; + static int removeCreds; + #endif + ++#ifdef WITH_CONSOLE_KIT ++int ++StartClient( const char *ck_session_cookie ) ++#else + int + StartClient() ++#endif + { + const char *home, *sessargs, *desksess; + char **env, *xma; +@@ -1223,6 +1232,11 @@ StartClient() + if (krbtkfile[0] != '\0') + env = setEnv( env, "KRBTKFILE", krbtkfile ); + #endif ++#ifdef WITH_CONSOLE_KIT ++ if (ck_session_cookie != NULL) { ++ env = setEnv ( env, "XDG_SESSION_COOKIE", ck_session_cookie ); ++ } ++#endif + userEnviron = inheritEnv( env, envvars ); + env = systemEnv( p->pw_name ); + systemEnviron = setEnv( env, "HOME", p->pw_dir ); +Index: kdm/backend/consolekit.c +=================================================================== +--- /dev/null ++++ kdm/backend/consolekit.c +@@ -0,0 +1,552 @@ ++/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- ++ * ++ * Copyright (C) 2006-2007 William Jon McCann ++ * Copyright (C) 2007 Kevin Kofler ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ++ * ++ */ ++ ++#include "dm.h" ++#include "dm_auth.h" ++#include "dm_error.h" ++ ++#include ++#include ++#include ++ ++#define DBUS_API_SUBJECT_TO_CHANGE ++#include ++ ++#include "consolekit.h" ++ ++ ++#define CK_NAME "org.freedesktop.ConsoleKit" ++#define CK_PATH "/org/freedesktop/ConsoleKit" ++#define CK_INTERFACE "org.freedesktop.ConsoleKit" ++#define CK_MANAGER_PATH "/org/freedesktop/ConsoleKit/Manager" ++#define CK_MANAGER_INTERFACE "org.freedesktop.ConsoleKit.Manager" ++#define CK_SESSION_INTERFACE "org.freedesktop.ConsoleKit.Session" ++ ++static DBusConnection *private_connection = NULL; ++ ++static void ++add_param_int (DBusMessageIter *iter_struct, ++ const char *key, ++ int value) ++{ ++ DBusMessageIter iter_struct_entry; ++ DBusMessageIter iter_var; ++ ++ dbus_message_iter_open_container (iter_struct, ++ DBUS_TYPE_STRUCT, ++ NULL, ++ &iter_struct_entry); ++ ++ dbus_message_iter_append_basic (&iter_struct_entry, ++ DBUS_TYPE_STRING, ++ &key); ++ ++ dbus_message_iter_open_container (&iter_struct_entry, ++ DBUS_TYPE_VARIANT, ++ DBUS_TYPE_INT32_AS_STRING, ++ &iter_var); ++ ++ dbus_message_iter_append_basic (&iter_var, ++ DBUS_TYPE_INT32, ++ &value); ++ ++ dbus_message_iter_close_container (&iter_struct_entry, ++ &iter_var); ++ ++ dbus_message_iter_close_container (iter_struct, &iter_struct_entry); ++} ++ ++static void ++add_param_boolean (DBusMessageIter *iter_struct, ++ const char *key, ++ int value) ++{ ++ DBusMessageIter iter_struct_entry; ++ DBusMessageIter iter_var; ++ ++ dbus_message_iter_open_container (iter_struct, ++ DBUS_TYPE_STRUCT, ++ NULL, ++ &iter_struct_entry); ++ ++ dbus_message_iter_append_basic (&iter_struct_entry, ++ DBUS_TYPE_STRING, ++ &key); ++ ++ dbus_message_iter_open_container (&iter_struct_entry, ++ DBUS_TYPE_VARIANT, ++ DBUS_TYPE_BOOLEAN_AS_STRING, ++ &iter_var); ++ ++ dbus_message_iter_append_basic (&iter_var, ++ DBUS_TYPE_BOOLEAN, ++ &value); ++ ++ dbus_message_iter_close_container (&iter_struct_entry, ++ &iter_var); ++ ++ dbus_message_iter_close_container (iter_struct, &iter_struct_entry); ++} ++ ++static void ++add_param_string (DBusMessageIter *iter_struct, ++ const char *key, ++ const char *value) ++{ ++ DBusMessageIter iter_struct_entry; ++ DBusMessageIter iter_var; ++ ++ dbus_message_iter_open_container (iter_struct, ++ DBUS_TYPE_STRUCT, ++ NULL, ++ &iter_struct_entry); ++ ++ dbus_message_iter_append_basic (&iter_struct_entry, ++ DBUS_TYPE_STRING, ++ &key); ++ ++ dbus_message_iter_open_container (&iter_struct_entry, ++ DBUS_TYPE_VARIANT, ++ DBUS_TYPE_STRING_AS_STRING, ++ &iter_var); ++ ++ dbus_message_iter_append_basic (&iter_var, ++ DBUS_TYPE_STRING, ++ &value); ++ ++ dbus_message_iter_close_container (&iter_struct_entry, ++ &iter_var); ++ ++ dbus_message_iter_close_container (iter_struct, &iter_struct_entry); ++} ++ ++static int ++session_get_x11_display (DBusConnection *connection, ++ const char *ssid, ++ char **str) ++{ ++ DBusError error; ++ DBusMessage *message; ++ DBusMessage *reply; ++ DBusMessageIter iter; ++ const char *value; ++ ++ if (str != NULL) { ++ *str = NULL; ++ } ++ ++ message = dbus_message_new_method_call (CK_NAME, ++ ssid, ++ CK_SESSION_INTERFACE, ++ "GetX11Display"); ++ if (message == NULL) { ++ Debug ("ConsoleKit: Couldn't allocate the D-Bus message"); ++ return FALSE; ++ } ++ ++ dbus_error_init (&error); ++ reply = dbus_connection_send_with_reply_and_block (connection, ++ message, ++ -1, &error); ++ if (dbus_error_is_set (&error)) { ++ Debug ("ConsoleKit: %s raised:\n %s\n\n", error.name, error.message); ++ reply = NULL; ++ } ++ ++ dbus_connection_flush (connection); ++ dbus_message_unref (message); ++ ++ if (reply == NULL) { ++ return FALSE; ++ } ++ ++ dbus_message_iter_init (reply, &iter); ++ dbus_message_iter_get_basic (&iter, &value); ++ if (str != NULL) { ++ *str = strdup (value); ++ } ++ dbus_message_unref (reply); ++ ++ return TRUE; ++} ++ ++static int ++session_unlock (DBusConnection *connection, ++ const char *ssid) ++{ ++ DBusError error; ++ DBusMessage *message; ++ DBusMessage *reply; ++ ++ Debug ("ConsoleKit: Unlocking session %s", ssid); ++ message = dbus_message_new_method_call (CK_NAME, ++ ssid, ++ CK_SESSION_INTERFACE, ++ "Unlock"); ++ if (message == NULL) { ++ Debug ("ConsoleKit: Couldn't allocate the D-Bus message"); ++ return FALSE; ++ } ++ ++ dbus_error_init (&error); ++ reply = dbus_connection_send_with_reply_and_block (connection, ++ message, ++ -1, &error); ++ dbus_message_unref (message); ++ dbus_message_unref (reply); ++ dbus_connection_flush (connection); ++ ++ if (dbus_error_is_set (&error)) { ++ Debug ("ConsoleKit: %s raised:\n %s\n\n", error.name, error.message); ++ return FALSE; ++ } ++ ++ return TRUE; ++} ++ ++/* from libhal */ ++static char ** ++get_path_array_from_iter (DBusMessageIter *iter, ++ int *num_elements) ++{ ++ int count; ++ char **buffer; ++ ++ count = 0; ++ buffer = (char **)malloc (sizeof (char *) * 8); ++ ++ if (buffer == NULL) ++ goto oom; ++ ++ buffer[0] = NULL; ++ while (dbus_message_iter_get_arg_type (iter) == DBUS_TYPE_OBJECT_PATH) { ++ const char *value; ++ char *str; ++ ++ if ((count % 8) == 0 && count != 0) { ++ buffer = realloc (buffer, sizeof (char *) * (count + 8)); ++ if (buffer == NULL) ++ goto oom; ++ } ++ ++ dbus_message_iter_get_basic (iter, &value); ++ str = strdup (value); ++ if (str == NULL) ++ goto oom; ++ ++ buffer[count] = str; ++ ++ dbus_message_iter_next (iter); ++ count++; ++ } ++ ++ if ((count % 8) == 0) { ++ buffer = realloc (buffer, sizeof (char *) * (count + 1)); ++ if (buffer == NULL) ++ goto oom; ++ } ++ ++ buffer[count] = NULL; ++ if (num_elements != NULL) ++ *num_elements = count; ++ return buffer; ++ ++oom: ++ LogWarn ("%s %d : error allocating memory\n", __FILE__, __LINE__); ++ return NULL; ++ ++} ++ ++static char ** ++get_sessions_for_user (DBusConnection *connection, ++ const char *user, ++ const char *x11_display) ++{ ++ DBusError error; ++ DBusMessage *message; ++ DBusMessage *reply; ++ DBusMessageIter iter; ++ DBusMessageIter iter_reply; ++ DBusMessageIter iter_array; ++ struct passwd *pwent; ++ char **sessions; ++ ++ sessions = NULL; ++ message = NULL; ++ reply = NULL; ++ ++ pwent = getpwnam (user); ++ ++ dbus_error_init (&error); ++ message = dbus_message_new_method_call (CK_NAME, ++ CK_MANAGER_PATH, ++ CK_MANAGER_INTERFACE, ++ "GetSessionsForUser"); ++ if (message == NULL) { ++ Debug ("ConsoleKit: Couldn't allocate the D-Bus message"); ++ goto out; ++ } ++ ++ dbus_message_iter_init_append (message, &iter); ++ dbus_message_iter_append_basic (&iter, ++ DBUS_TYPE_UINT32, ++ &pwent->pw_uid); ++ ++ dbus_error_init (&error); ++ reply = dbus_connection_send_with_reply_and_block (connection, ++ message, ++ -1, &error); ++ dbus_connection_flush (connection); ++ ++ if (dbus_error_is_set (&error)) { ++ Debug ("ConsoleKit: %s raised:\n %s\n\n", error.name, error.message); ++ goto out; ++ } ++ ++ if (reply == NULL) { ++ Debug ("ConsoleKit: No reply for GetSessionsForUser"); ++ goto out; ++ } ++ ++ dbus_message_iter_init (reply, &iter_reply); ++ if (dbus_message_iter_get_arg_type (&iter_reply) != DBUS_TYPE_ARRAY) { ++ Debug ("ConsoleKit: Wrong reply for GetSessionsForUser - expecting an array."); ++ goto out; ++ } ++ ++ dbus_message_iter_recurse (&iter_reply, &iter_array); ++ sessions = get_path_array_from_iter (&iter_array, NULL); ++ ++ out: ++ if (message != NULL) { ++ dbus_message_unref (message); ++ } ++ if (reply != NULL) { ++ dbus_message_unref (reply); ++ } ++ ++ return sessions; ++} ++ ++void ++unlock_ck_session (const char *user, ++ const char *x11_display) ++{ ++ DBusError error; ++ DBusConnection *connection; ++ char **sessions; ++ int i; ++ ++ Debug ("ConsoleKit: Unlocking session for %s on %s", user, x11_display); ++ ++ dbus_error_init (&error); ++ connection = dbus_bus_get (DBUS_BUS_SYSTEM, &error); ++ if (connection == NULL) { ++ Debug ("ConsoleKit: Failed to connect to the D-Bus daemon: %s", error.message); ++ dbus_error_free (&error); ++ return; ++ } ++ ++ sessions = get_sessions_for_user (connection, user, x11_display); ++ if (sessions == NULL || sessions[0] == NULL) { ++ Debug ("ConsoleKit: no sessions found"); ++ return; ++ } ++ ++ for (i = 0; sessions[i] != NULL; i++) { ++ char *ssid; ++ char *xdisplay; ++ ++ ssid = sessions[i]; ++ session_get_x11_display (connection, ssid, &xdisplay); ++ Debug ("ConsoleKit: session %s has DISPLAY %s", ssid, xdisplay); ++ ++ if (xdisplay != NULL ++ && x11_display != NULL ++ && strcmp (xdisplay, x11_display) == 0) { ++ int res; ++ ++ res = session_unlock (connection, ssid); ++ if (! res) { ++ LogError ("ConsoleKit: Unable to unlock %s", ssid); ++ } ++ } ++ ++ free (xdisplay); ++ } ++ ++ freeStrArr (sessions); ++} ++ ++char * ++open_ck_session (struct passwd *pwent, ++ struct display *d) ++{ ++ DBusConnection *connection; ++ DBusError error; ++ DBusMessage *message; ++ DBusMessage *reply; ++ DBusMessageIter iter; ++ DBusMessageIter iter_struct; ++ char *cookie; ++ ++ cookie = NULL; ++ ++ Debug ("ConsoleKit: Opening session for %s", pwent->pw_name); ++ ++ dbus_error_init (&error); ++ connection = dbus_bus_get_private (DBUS_BUS_SYSTEM, &error); ++ private_connection = connection; ++ ++ if (connection == NULL) { ++ Debug ("ConsoleKit: Failed to connect to the D-Bus daemon: %s", error.message); ++ dbus_error_free (&error); ++ return NULL; ++ } ++ ++ dbus_connection_set_exit_on_disconnect (connection, FALSE); ++ /* FIXME: What to do about these? ++ dbus_connection_set_watch_functions( connection, ++ dbusAddWatch, ++ dbusRemoveWatch, ++ dbusToggleWatch, ++ data, 0 ); ++ dbus_connection_set_timeout_functions( connection, ++ dbusAddTimeout, ++ dbusRemoveTimeout, ++ dbusToggleTimeout, ++ data, 0 ); ++ dbus_connection_set_wakeup_main_function( connection, ++ dbusWakeupMain, ++ data, 0 ); */ ++ ++ dbus_error_init (&error); ++ message = dbus_message_new_method_call (CK_NAME, ++ CK_MANAGER_PATH, ++ CK_MANAGER_INTERFACE, ++ "OpenSessionWithParameters"); ++ if (message == NULL) { ++ Debug ("ConsoleKit: Couldn't allocate the D-Bus message"); ++ return NULL; ++ } ++ ++ dbus_message_iter_init_append (message, &iter); ++ dbus_message_iter_open_container (&iter, ++ DBUS_TYPE_ARRAY, ++ DBUS_STRUCT_BEGIN_CHAR_AS_STRING ++ DBUS_TYPE_STRING_AS_STRING ++ DBUS_TYPE_VARIANT_AS_STRING ++ DBUS_STRUCT_END_CHAR_AS_STRING, ++ &iter_struct); ++ ++ add_param_int (&iter_struct, "user", pwent->pw_uid); ++ add_param_string (&iter_struct, "x11-display", d->name); ++ add_param_boolean (&iter_struct, "is-local", ((d->displayType & d_location) == dLocal)); ++#ifdef XDMCP ++ if (d->status == remoteLogin && !((d->displayType & d_location) == dLocal)) { ++ add_param_string (&iter_struct, "remote-host-name", d->remoteHost); ++ } ++#endif ++ ++#ifdef HAVE_VTS ++ if (d->serverVT > 0) { ++ char device[20]; ++ ++ /* FIXME: how does xorg construct this */ ++ sprintf(device, "/dev/tty%d", d->serverVT); ++ add_param_string (&iter_struct, "x11-display-device", device); ++ } ++#endif ++ ++ dbus_message_iter_close_container (&iter, &iter_struct); ++ ++ reply = dbus_connection_send_with_reply_and_block (connection, ++ message, ++ -1, &error); ++ if (dbus_error_is_set (&error)) { ++ Debug ("ConsoleKit: %s raised:\n %s\n\n", error.name, error.message); ++ reply = NULL; ++ } ++ ++ dbus_connection_flush (connection); ++ ++ dbus_message_unref (message); ++ dbus_error_free (&error); ++ ++ if (reply != NULL) { ++ const char *value; ++ ++ dbus_message_iter_init (reply, &iter); ++ dbus_message_iter_get_basic (&iter, &value); ++ cookie = strdup (value); ++ dbus_message_unref (reply); ++ } ++ ++ return cookie; ++} ++ ++void ++close_ck_session (const char *cookie) ++{ ++ DBusError error; ++ DBusMessage *message; ++ DBusMessage *reply; ++ DBusMessageIter iter; ++ ++ if (cookie == NULL) { ++ return; ++ } ++ ++ if (private_connection == NULL) { ++ return; ++ } ++ ++ dbus_error_init (&error); ++ message = dbus_message_new_method_call (CK_NAME, ++ CK_MANAGER_PATH, ++ CK_MANAGER_INTERFACE, ++ "CloseSession"); ++ if (message == NULL) { ++ Debug ("ConsoleKit: Couldn't allocate the D-Bus message"); ++ return; ++ } ++ ++ dbus_message_iter_init_append (message, &iter); ++ dbus_message_iter_append_basic (&iter, ++ DBUS_TYPE_STRING, ++ &cookie); ++ ++ reply = dbus_connection_send_with_reply_and_block (private_connection, ++ message, ++ -1, &error); ++ if (dbus_error_is_set (&error)) { ++ Debug ("ConsoleKit: %s raised:\n %s\n\n", error.name, error.message); ++ reply = NULL; ++ } ++ ++ dbus_connection_flush (private_connection); ++ ++ dbus_message_unref (message); ++ dbus_error_free (&error); ++ ++ dbus_connection_close (private_connection); ++ private_connection = NULL; ++} +Index: kdm/backend/consolekit.h +=================================================================== +--- /dev/null ++++ kdm/backend/consolekit.h +@@ -0,0 +1,36 @@ ++/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- ++ * ++ * Copyright (C) 2006 William Jon McCann ++ * Copyright (C) 2007 Kevin Kofler ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ++ * ++ */ ++ ++ ++#ifndef __CONSOLE_KIT_H ++#define __CONSOLE_KIT_H ++ ++#include ++ ++struct display; ++ ++char * open_ck_session (struct passwd *pwent, ++ struct display *display); ++void close_ck_session (const char *cookie); ++void unlock_ck_session (const char *user, ++ const char *x11_display); ++ ++#endif /* __CONSOLE_KIT_H */ +Index: kdm/backend/dm.h +=================================================================== +--- kdm/backend/dm.h.orig ++++ kdm/backend/dm.h +@@ -37,6 +37,8 @@ from the copyright holder. + #ifndef _DM_H_ + #define _DM_H_ 1 + ++#define WITH_CONSOLE_KIT ++ + #include "greet.h" + #include + +@@ -476,7 +478,11 @@ char **GRecvArgv( void ); + #define GCONV_BINARY 5 + typedef char *(*GConvFunc)( int what, const char *prompt ); + int Verify( GConvFunc gconv, int rootok ); ++#ifdef WITH_CONSOLE_KIT ++int StartClient( const char *ck_session_cookie ); ++#else + int StartClient( void ); ++#endif + void SessionExit( int status ) ATTR_NORETURN; + int ReadDmrc( void ); + extern char **userEnviron, **systemEnviron; +Index: kdm/backend/Imakefile +=================================================================== +--- kdm/backend/Imakefile.orig ++++ kdm/backend/Imakefile +@@ -155,13 +155,13 @@ PROCTITLE_DEFINES = -DHAS_SETPROCTITLE + netaddr.c reset.c resource.c protodpy.c policy.c \ + session.c socket.c streams.c util.c xdmcp.c \ + process.c mitauth.c \ +- genauth.c access.c choose.c \ ++ genauth.c access.c choose.c consolekit.c \ + $(XDMAUTHSRCS) $(RPCSRCS) $(KRB5SRCS) + COMMOBJS = auth.o daemon.o server.o dpylist.o dm.o error.o \ + netaddr.o reset.o resource.o protodpy.o policy.o \ + session.o socket.o streams.o util.o xdmcp.o \ + process.o mitauth.o \ +- genauth.o access.o choose.o \ ++ genauth.o access.o choose.o consolekit.o \ + $(XDMAUTHOBJS) $(RPCOBJS) $(KRB5OBJS) + + SRCS1 = $(COMMSRCS) client.c +Index: kdm/backend/Makefile.am +=================================================================== +--- kdm/backend/Makefile.am.orig ++++ kdm/backend/Makefile.am +@@ -1,6 +1,6 @@ + # forcibly remove thread-related defines & flags + AUTOMAKE_OPTIONS = foreign +-AM_CPPFLAGS = $(USER_INCLUDES) $(X_INCLUDES) $(KRB4_INCS) $(KRB5_INCS) -I.. -I../.. ++AM_CPPFLAGS = -DWITH_CONSOLE_KIT=1 $(USER_INCLUDES) $(X_INCLUDES) $(KRB4_INCS) $(KRB5_INCS) $(DBUS_INCS) -I.. -I../.. + + bin_PROGRAMS = kdm + kdm_SOURCES = \ +@@ -9,6 +9,7 @@ kdm_SOURCES = \ + bootman.c \ + choose.c \ + client.c \ ++ consolekit.c \ + ctrl.c \ + daemon.c \ + dm.c \ +@@ -37,7 +38,7 @@ kdm_SOURCES = \ + kdm_LDFLAGS = $(USER_LDFLAGS) $(X_LDFLAGS) $(X_RPATH) $(KRB4_RPATH) $(KRB5_RPATH) + kdm_LDADD = $(LIB_X11) -lXau $(LIBXDMCP) $(PASSWDLIBS) \ + $(LIB_LIBS) $(KRB4_LIBS) $(KRB5_LIBS) $(LIBSOCKET) $(LIBRESOLV) \ +- $(LIBUCB) $(LIBUTIL) $(LIBPOSIX4) ++ $(DBUS_LIBS) $(LIBUCB) $(LIBUTIL) $(LIBPOSIX4) + + EXTRA_DIST = printf.c + +Index: kdm/backend/session.c +=================================================================== +--- kdm/backend/session.c.orig ++++ kdm/backend/session.c +@@ -45,6 +45,10 @@ from the copyright holder. + #include + #include + ++#ifdef WITH_CONSOLE_KIT ++#include "consolekit.h" ++#endif ++ + struct display *td; + const char *td_setup = "auto"; + +@@ -530,6 +534,9 @@ ManageSession( struct display *d ) + int ex, cmd; + volatile int clientPid = 0; + volatile Time_t tdiff = 0; ++#ifdef WITH_CONSOLE_KIT ++ char *ck_session_cookie; ++#endif + + td = d; + Debug( "ManageSession %s\n", d->name ); +@@ -626,7 +633,12 @@ ManageSession( struct display *d ) + if (td_setup) + SetupDisplay( td_setup ); + ++#ifdef WITH_CONSOLE_KIT ++ ck_session_cookie = open_ck_session (getpwnam(curuser), d); ++ if (!(clientPid = StartClient(ck_session_cookie))) { ++#else + if (!(clientPid = StartClient())) { ++#endif + LogError( "Client start failed\n" ); + SessionExit( EX_NORMAL ); /* XXX maybe EX_REMANAGE_DPY? -- enable in dm.c! */ + } +@@ -648,6 +660,14 @@ ManageSession( struct display *d ) + catchTerm( SIGTERM ); + } + } ++ ++#ifdef WITH_CONSOLE_KIT ++ if (ck_session_cookie != NULL) { ++ close_ck_session (ck_session_cookie); ++ free (ck_session_cookie); ++ } ++#endif ++ + /* + * Sometimes the Xsession somehow manages to exit before + * a server crash is noticed - so we sleep a bit and wait +Index: kdm/configure.in.in +=================================================================== +--- kdm/configure.in.in.orig ++++ kdm/configure.in.in +@@ -240,4 +240,51 @@ if test "x$with_kdm_xconsole" = xyes; th + AC_DEFINE(WITH_KDM_XCONSOLE, 1, [Build kdm with built-in xconsole]) + fi + ++########### Check for DBus ++ ++ AC_MSG_CHECKING(for DBus) ++ ++ dbus_inc=NOTFOUND ++ dbus_lib=NOTFOUND ++ dbus=NOTFOUND ++ ++ search_incs="$kde_includes $kde_extra_includes /usr/include /usr/include/dbus-1.0 /usr/local/include /usr/local/include/dbus-1.0" ++ AC_FIND_FILE(dbus/dbus.h, $search_incs, dbus_incdir) ++ ++ search_incs_arch_deps="$kde_includes $kde_extra_includes /usr/lib$kdelibsuff/dbus-1.0/include /usr/local/lib$kdelibsuff/dbus-1.0/include" ++ AC_FIND_FILE(dbus/dbus-arch-deps.h, $search_incs_arch_deps, dbus_incdir_arch_deps) ++ ++ if test -r $dbus_incdir/dbus/dbus.h && test -r $dbus_incdir_arch_deps/dbus/dbus-arch-deps.h ; then ++ DBUS_INCS="-I$dbus_incdir -I$dbus_incdir_arch_deps" ++ dbus_inc=FOUND ++ fi ++ ++ search_libs="$kde_libraries $kde_extra_libs /usr/lib$kdelibsuff /usr/local/lib$kdelibsuff" ++ AC_FIND_FILE(libdbus-1.so, $search_libs, dbus_libdir) ++ ++ if test -r $dbus_libdir/libdbus-1.so ; then ++ DBUS_LIBS="-L$dbus_libdir -ldbus-1" ++ dbus_lib=FOUND ++ fi ++ ++ if test $dbus_inc != FOUND || test $dbus_lib != FOUND ; then ++ KDE_PKG_CHECK_MODULES( DBUS, "dbus-1", [ DBUS_INCS=$DBUS_CFLAGS; dbus_inc=FOUND; dbus_lib=FOUND; ] , AC_MSG_RESULT( Nothing found on PKG_CONFIG_PATH ) ) ++ fi ++ ++ dbus_bus_var=`pkg-config --variable=system_bus_default_address dbus-1 2>/dev/null` ++ if test -z "$dbus_bus_var"; then ++ dbus_bus_var="unix:path=/var/run/dbus/system_bus_socket" ++ fi ++ AC_DEFINE_UNQUOTED(DBUS_SYSTEM_BUS, "$dbus_bus_var", [Define the unix domain path for dbus system bus]) ++ ++ if test $dbus_inc = FOUND && test $dbus_lib = FOUND ; then ++ AC_MSG_RESULT(headers $DBUS_INCS libraries $DBUS_LIBS) ++ dbus=FOUND ++ else ++ AC_MSG_RESULT(searched but not found) ++ fi ++ ++ AC_SUBST(DBUS_INCS) ++ AC_SUBST(DBUS_LIBS) ++ + dnl AC_OUTPUT(kdm/kfrontend/sessions/kde.desktop) diff --git a/opensuse/core/tdebase/kdm-cope-with-new-grub.diff b/opensuse/core/tdebase/kdm-cope-with-new-grub.diff new file mode 100644 index 000000000..cf28cf9be --- /dev/null +++ b/opensuse/core/tdebase/kdm-cope-with-new-grub.diff @@ -0,0 +1,27 @@ +Index: kdm/backend/bootman.c +=================================================================== +--- kdm/backend/bootman.c.orig ++++ kdm/backend/bootman.c +@@ -132,19 +132,14 @@ setGrub( const char *opt, SdRec *sdr ) + static void + commitGrub( void ) + { +- FILE *f; +- int pid; +- static const char *args[] = { 0, "--batch", "--no-floppy", 0 }; ++ char buffer[PATH_MAX]; + + if (sdRec.bmstamp != mTime( GRUB_MENU ) && + setGrub( sdRec.osname, &sdRec ) != BO_OK) + return; + +- args[0] = grub; +- if ((f = pOpen( (char **)args, 'w', &pid ))) { +- fprintf( f, "savedefault --default=%d --once\n", sdRec.osindex ); +- pClose( f, pid ); +- } ++ snprintf(buffer, PATH_MAX, "/usr/sbin/grubonce %d", sdRec.osindex); ++ system(buffer); + } + + static char *lilo; diff --git a/opensuse/core/tdebase/kdm-make_it_cool.diff b/opensuse/core/tdebase/kdm-make_it_cool.diff new file mode 100644 index 000000000..fb1f5b076 --- /dev/null +++ b/opensuse/core/tdebase/kdm-make_it_cool.diff @@ -0,0 +1,1534 @@ +Index: kdm/kfrontend/kdm_greet.c +=================================================================== +--- kdm/kfrontend/kdm_greet.c.orig ++++ kdm/kfrontend/kdm_greet.c +@@ -44,8 +44,8 @@ Foundation, Inc., 51 Franklin Street, Fi + # include + #endif + +-#if defined(HAVE_XTEST) || defined(HAVE_XKB) + # include ++#if defined(HAVE_XTEST) || defined(HAVE_XKB) + # include + #endif + +Index: kdm/kfrontend/themer/kdmrect.h +=================================================================== +--- kdm/kfrontend/themer/kdmrect.h.orig ++++ kdm/kfrontend/themer/kdmrect.h +@@ -36,6 +36,7 @@ class KdmRect : public KdmItem { + + public: + KdmRect( KdmItem *parent, const QDomNode &node, const char *name = 0 ); ++ KdmRect( QWidget *parent, const QDomNode &node, const char *name = 0 ); + + protected: + // draw the rect +@@ -54,8 +55,9 @@ protected: + bool hasBorder; + } rect; + +-// virtual void setWidget( QWidget *widget ); ++ virtual void setWidget( QWidget *widget ); + // virtual void setLayoutItem( QLayoutItem *item ); ++ void init( const QDomNode &node, const char *name ); + + private: + void setAttribs( QWidget *widget ); +Index: kdm/kfrontend/themer/kdmitem.h +=================================================================== +--- kdm/kfrontend/themer/kdmitem.h.orig ++++ kdm/kfrontend/themer/kdmitem.h +@@ -90,6 +90,8 @@ public: + * Item constructor and destructor + */ + KdmItem( KdmItem *parent, const QDomNode &node = QDomNode(), const char *name = 0 ); ++ KdmItem( QWidget *parent, const QDomNode &node = QDomNode(), const char *name = 0 ); // for the root ++ + virtual ~KdmItem(); + + /** +@@ -151,6 +153,7 @@ public: + + KdmItem *findNode( const QString &id ) const; + virtual void setWidget( QWidget *widget ); ++ QWidget *widget() const { return myWidget; } + virtual void setLayoutItem( QLayoutItem *item ); + + virtual void hide( bool force = false ); +@@ -160,6 +163,9 @@ public: + bool isExplicitlyHidden() const { return isShown == ExplicitlyHidden; } + QRect rect() const { return area; } + ++ QWidget *parentWidget() const; ++ QString getId() const { return id; } ++ + signals: + void needUpdate( int x, int y, int w, int h ); + void activated( const QString &id ); +@@ -237,6 +243,7 @@ protected: + void parseColor( const QString &, QColor & ); + + void inheritFromButton( KdmItem *button ); ++ void init( const QDomNode &node = QDomNode(), const char *name = 0 ); + + QString itemType, id; + QValueList m_children; +Index: kdm/kfrontend/themer/kdmpixmap.h +=================================================================== +--- kdm/kfrontend/themer/kdmpixmap.h.orig ++++ kdm/kfrontend/themer/kdmpixmap.h +@@ -61,9 +61,10 @@ protected: + } pixmap; + + private: +- // Method to load the pixmap given by the theme +- void loadPixmap( const QString &fileName, QPixmap &p, QString &path ); ++ // Method to load the pixmap path given by the theme ++ QString fullPath( const QString &fileName ); + void renderSvg( PixmapStruct::PixmapClass *pClass, const QRect &area ); ++ void loadPixmap( PixmapStruct::PixmapClass *pClass ); + }; + + #endif +Index: kdm/kfrontend/themer/kdmlabel.h +=================================================================== +--- kdm/kfrontend/themer/kdmlabel.h.orig ++++ kdm/kfrontend/themer/kdmlabel.h +@@ -67,6 +67,7 @@ protected: + + public slots: + void update(); ++ void slotAccel(); + + private: + /* Method to lookup the caption associated with an item */ +@@ -76,6 +77,10 @@ private: + QString lookupText( const QString &t ); + + QString cText; ++ int cAccel; ++ QAccel *myAccel; ++ ++ void setTextInt(const QString &); + }; + + #endif +Index: kdm/kfrontend/themer/kdmthemer.cpp +=================================================================== +--- kdm/kfrontend/themer/kdmthemer.cpp.orig ++++ kdm/kfrontend/themer/kdmthemer.cpp +@@ -36,11 +36,13 @@ + + #include + #include +-//#include // animation timer - TODO ++#include // animation timer - TODO + #include + #include + #include + #include ++#include ++#include + + #include + +@@ -72,7 +74,8 @@ KdmThemer::KdmThemer( const QString &_fi + return; + } + // Set the root (screen) item +- rootItem = new KdmRect( 0, QDomNode(), "kdm root" ); ++ rootItem = new KdmRect( parent, QDomNode(), "kdm root" ); ++ + connect( rootItem, SIGNAL(needUpdate( int, int, int, int )), + widget(), SLOT(update( int, int, int, int )) ); + +@@ -82,6 +85,9 @@ KdmThemer::KdmThemer( const QString &_fi + generateItems( rootItem ); + + connect( rootItem, SIGNAL(activated( const QString & )), SIGNAL(activated( const QString & )) ); ++ connect( rootItem, SIGNAL(activated( const QString & )), SLOT(slotActivated( const QString & )) ); ++ ++ QTimer::singleShot(800, this, SLOT(slotPaintRoot())); + + /* *TODO* + // Animation timer +@@ -151,7 +157,7 @@ KdmThemer::widgetEvent( QEvent *e ) + case QEvent::Paint: + { + QRect paintRect = static_cast(e)->rect(); +- kdDebug() << "paint on: " << paintRect << endl; ++ kdDebug() << timestamp() << " paint on: " << paintRect << endl; + + if (!backBuffer) + backBuffer = new QPixmap( widget()->size() ); +@@ -195,7 +201,7 @@ KdmThemer::generateItems( KdmItem *paren + + // Get its tag, and check it's correct ("greeter") + if (theme.tagName() != "greeter") { +- kdDebug() << "This does not seem to be a correct theme file." << endl; ++ kdDebug() << timestamp() << " This does not seem to be a correct theme file." << endl; + return; + } + // Get the list of child nodes +@@ -214,6 +220,13 @@ KdmThemer::generateItems( KdmItem *paren + if (tagName == "item") { + if (!willDisplay( subnode )) + continue; ++ QString id = el.attribute("id"); ++ if (id.startsWith("plugin-specific-")) { ++ id = id.mid(strlen("plugin-specific-")); ++ if (!_pluginsLogin.contains(id)) ++ continue; ++ } ++ + // It's a new item. Draw it + QString type = el.attribute( "type" ); + +@@ -225,13 +238,11 @@ KdmThemer::generateItems( KdmItem *paren + newItem = new KdmPixmap( parent, subnode ); + else if (type == "rect") + newItem = new KdmRect( parent, subnode ); +- else if (type == "entry") { ++ else if (type == "entry" || type == "list") { + newItem = new KdmRect( parent, subnode ); + newItem->setType( type ); + } + // newItem = new KdmEntry( parent, subnode ); +- //else if (type=="list") +- // newItem = new KdmList( parent, subnode ); + else if (type == "svg") + newItem = new KdmPixmap( parent, subnode ); + if (newItem) { +@@ -287,6 +298,11 @@ bool KdmThemer::willDisplay( const QDomN + #endif + if (type == "halt" || type == "reboot") + return _allowShutdown != SHUT_NONE; ++ else if (type == "userlist") ++ return _userList; ++ else if ( type == "!userlist" ) ++ return !_userList; ++ + // if (type == "system") + // return true; + +@@ -301,7 +317,7 @@ KdmThemer::showStructure( QObject *obj ) + const QObjectList *wlist = obj->children(); + static int counter = 0; + if (counter == 0) +- kdDebug() << "\n\n<======= Widget tree =================" << endl; ++ kdDebug() << timestamp() << " \n\n<======= Widget tree =================" << endl; + if (wlist) { + counter++; + QObjectListIterator it( *wlist ); +@@ -323,7 +339,46 @@ KdmThemer::showStructure( QObject *obj ) + counter--; + } + if (counter == 0) +- kdDebug() << "\n\n<======= Widget tree =================\n\n" << endl; ++ kdDebug() << timestamp() << " \n\n<======= Widget tree =================\n\n" << endl; ++} ++ ++void ++KdmThemer::slotActivated( const QString &id ) ++{ ++ QString toactivate; ++ if (id == "username-label") ++ toactivate = "user-entry"; ++ else if (id == "password-label") ++ toactivate = "pw-entry"; ++ else ++ return; ++ ++ KdmItem *item = findNode(toactivate); ++ if (!item || !item->widget()) ++ return; ++ ++ item->widget()->setFocus(); ++ QLineEdit *le = (QLineEdit*)item->widget()->qt_cast("QLineEdit"); ++ if (le) ++ le->selectAll(); ++} ++ ++void ++KdmThemer::slotPaintRoot() ++{ ++ KdmItem *back_item = findNode("background"); ++ if (!back_item) ++ return; ++ ++ QRect screen = QApplication::desktop()->screenGeometry(0); ++ QPixmap pm(screen.size()); ++ ++ QPainter painter( &pm, true ); ++ back_item->paint( &painter, back_item->rect()); ++ painter.end(); ++ ++ QApplication::desktop()->screen()->setErasePixmap(pm); ++ QApplication::desktop()->screen()->erase(); + } + + #include "kdmthemer.moc" +Index: kdm/kfrontend/themer/kdmthemer.h +=================================================================== +--- kdm/kfrontend/themer/kdmthemer.h.orig ++++ kdm/kfrontend/themer/kdmthemer.h +@@ -80,6 +80,10 @@ public: + signals: + void activated( const QString &id ); + ++protected slots: ++ void slotActivated( const QString &id ); ++ void slotPaintRoot(); ++ + private: + /* + * Our display mode (e.g. console, remote, ...) +Index: kdm/kfrontend/themer/kdmlayout.cpp +=================================================================== +--- kdm/kfrontend/themer/kdmlayout.cpp.orig ++++ kdm/kfrontend/themer/kdmlayout.cpp +@@ -20,6 +20,7 @@ + */ + + #include "kdmlayout.h" ++#include "kdmconfig.h" + #include "kdmitem.h" + + #include +@@ -35,11 +36,11 @@ KdmLayoutFixed::KdmLayoutFixed( const QD + void + KdmLayoutFixed::update( const QRect &parentGeometry, bool force ) + { +- kdDebug() << "KdmLayoutFixed::update " << parentGeometry << endl; ++ kdDebug() << timestamp() << " KdmLayoutFixed::update " << parentGeometry << endl; + + // I can't layout children if the parent rectangle is not valid + if (parentGeometry.width() < 0 || parentGeometry.height() < 0) { +- kdDebug() << "invalid\n"; ++ kdDebug() << timestamp() << " invalid\n"; + return; + } + // For each child in list I ask their hinted size and set it! +@@ -102,7 +103,7 @@ KdmLayoutBox::update( const QRect &paren + childrenRect.setTop( childrenRect.top() + height + box.spacing ); + } else { + QRect temp( childrenRect.left(), childrenRect.top(), width, childrenRect.height() ); +- kdDebug() << "placement " << *it << " " << temp << " " << (*it)->placementHint( temp ) << endl; ++ kdDebug() << timestamp() << " placement " << *it << " " << temp << " " << (*it)->placementHint( temp ) << endl; + temp = (*it)->placementHint( temp ); + (*it)->setGeometry( temp, force ); + childrenRect.setLeft( childrenRect.left() + width + box.spacing ); +@@ -125,7 +126,7 @@ KdmLayoutBox::update( const QRect &paren + kdDebug() << this << " placementHint " << *it << " " << temp << " " << itemRect << endl; + temp.setWidth( itemRect.width() ); + childrenRect.setLeft( childrenRect.left() + itemRect.size().width() + box.spacing ); +- kdDebug() << "childrenRect after " << *it << " " << childrenRect << endl; ++ kdDebug() << timestamp() << " childrenRect after " << *it << " " << childrenRect << endl; + } + itemRect = (*it)->placementHint( temp ); + kdDebug() << this << " placementHint2 " << *it << " " << temp << " " << itemRect << endl; +Index: kdm/kfrontend/themer/kdmrect.cpp +=================================================================== +--- kdm/kfrontend/themer/kdmrect.cpp.orig ++++ kdm/kfrontend/themer/kdmrect.cpp +@@ -33,6 +33,18 @@ + KdmRect::KdmRect( KdmItem *parent, const QDomNode &node, const char *name ) + : KdmItem( parent, node, name ) + { ++ init( node, name ); ++} ++ ++KdmRect::KdmRect( QWidget *parent, const QDomNode &node, const char *name ) ++ : KdmItem( parent, node, name ) ++{ ++ init( node, name ); ++} ++ ++void ++KdmRect::init( const QDomNode &node, const char * ) ++{ + itemType = "rect"; + + // Set default values for rect (note: strings are already Null) +@@ -137,13 +149,6 @@ KdmRect::recursiveSetAttribs( QLayoutIte + } + + void +-KdmRect::setWidget( QWidget *widget ) +-{ +- KdmItem::setWidget( widget ); +- setAttribs( widget ); +-} +- +-void + KdmRect::setLayoutItem( QLayoutItem *item ) + { + KdmItem::setLayoutItem( item ); +@@ -151,4 +156,17 @@ KdmRect::setLayoutItem( QLayoutItem *ite + } + */ + ++void ++KdmRect::setWidget( QWidget *widget ) ++{ ++ if ( rect.normal.color.isValid() && widget ) ++ { ++ QPalette p = widget->palette(); ++ p.setColor( QPalette::Normal, QColorGroup::Text, rect.normal.color ); ++ widget->setPalette(p); ++ } ++ KdmItem::setWidget( widget ); ++ //setAttribs( widget ); ++} ++ + #include "kdmrect.moc" +Index: kdm/kfrontend/themer/kdmitem.cpp +=================================================================== +--- kdm/kfrontend/themer/kdmitem.cpp.orig ++++ kdm/kfrontend/themer/kdmitem.cpp +@@ -23,10 +23,11 @@ + * Generic Kdm Item + */ + +-//#define DRAW_OUTLINE 1 // for debugging only ++// #define DRAW_OUTLINE 1 // for debugging only + + #include "kdmitem.h" + #include "kdmlayout.h" ++#include "kdmconfig.h" + + #include + #include +@@ -35,9 +36,7 @@ + #include + #include + #include +-#ifdef DRAW_OUTLINE +-# include +-#endif ++#include + + KdmItem::KdmItem( KdmItem *parent, const QDomNode &node, const char *name ) + : QObject( parent, name ) +@@ -48,6 +47,25 @@ KdmItem::KdmItem( KdmItem *parent, const + , myLayoutItem( 0 ) + , buttonParent( 0 ) + { ++ init(node, name); ++} ++ ++ ++KdmItem::KdmItem( QWidget *parent, const QDomNode &node, const char *name ) ++ : QObject( parent, name ) ++ , boxManager( 0 ) ++ , fixedManager( 0 ) ++ , image( 0 ) ++ , myWidget( 0 ) ++ , myLayoutItem( 0 ) ++ , buttonParent( 0 ) ++{ ++ init(node, name); ++} ++ ++void ++KdmItem::init( const QDomNode &node, const char * ) ++{ + // Set default layout for every item + currentManager = MNone; + pos.x = pos.y = 0; +@@ -62,7 +80,7 @@ KdmItem::KdmItem( KdmItem *parent, const + state = Snormal; + + // The "toplevel" node (the screen) is really just like a fixed node +- if (!parent || !parent->inherits( "KdmItem" )) { ++ if (!parent() || !parent()->inherits( "KdmItem" )) { + setFixedLayout(); + return; + } +@@ -87,7 +105,7 @@ KdmItem::KdmItem( KdmItem *parent, const + id = tnode.toElement().attribute( "id", QString::number( (ulong)this, 16 ) ); + + // Tell 'parent' to add 'me' to its children +- KdmItem *parentItem = static_cast( parent ); ++ KdmItem *parentItem = static_cast( parent() ); + parentItem->addChildItem( this ); + } + +@@ -195,7 +213,7 @@ KdmItem::setWidget( QWidget *widget ) + if (frame) + frame->setFrameStyle( QFrame::NoFrame ); + +- myWidget->setGeometry(area); ++ setGeometry(area, true); + + connect( myWidget, SIGNAL(destroyed()), SLOT(widgetGone()) ); + } +@@ -236,15 +254,21 @@ KdmItem::setGeometry( const QRect &newGe + + area = newGeometry; + +- if (myWidget) +- myWidget->setGeometry( newGeometry ); ++ if (myWidget) { ++ QRect widGeo = newGeometry; ++ if ( widGeo.height() > myWidget->maximumHeight() ) { ++ widGeo.moveTop( widGeo.top() + ( widGeo.height() - myWidget->maximumHeight() ) / 2 ); ++ widGeo.setHeight( myWidget->maximumHeight() ); ++ } ++ myWidget->setGeometry( widGeo ); ++ } + if (myLayoutItem) + myLayoutItem->setGeometry( newGeometry ); + + // recurr to all boxed children + if (boxManager && !boxManager->isEmpty()) + boxManager->update( newGeometry, force ); +- ++ + // recurr to all fixed children + if (fixedManager && !fixedManager->isEmpty()) + fixedManager->update( newGeometry, force ); +@@ -258,8 +282,16 @@ KdmItem::paint( QPainter *p, const QRect + if (isHidden()) + return; + +- if (myWidget || (myLayoutItem && myLayoutItem->widget())) +- return; ++ if (myWidget || (myLayoutItem && myLayoutItem->widget())) { ++ // KListView because it's missing a Q_OBJECT ++ if ( myWidget && myWidget->isA( "KListView" ) ) { ++ QPixmap copy( myWidget->size() ); ++ kdDebug() << myWidget->geometry() << " " << area << " " << myWidget->size() << endl; ++ bitBlt( ©, QPoint( 0, 0), p->device(), myWidget->geometry(), Qt::CopyROP ); ++ myWidget->setPaletteBackgroundPixmap( copy ); ++ } ++ return; ++ } + + if (area.intersects( rect )) { + QRect contentsRect = area.intersect( rect ); +@@ -280,6 +312,8 @@ KdmItem::paint( QPainter *p, const QRect + QValueList::Iterator it; + for (it = m_children.begin(); it != m_children.end(); ++it) + (*it)->paint( p, rect ); ++ ++ + } + + KdmItem *KdmItem::currentActive = 0; +@@ -287,8 +321,11 @@ KdmItem *KdmItem::currentActive = 0; + void + KdmItem::mouseEvent( int x, int y, bool pressed, bool released ) + { ++ if (isShown == ExplicitlyHidden) ++ return; ++ + if (buttonParent && buttonParent != this) { +- buttonParent->mouseEvent( x, y, pressed, released ); ++ buttonParent->mouseEvent( x, y, pressed, released ); + return; + } + +@@ -362,7 +399,8 @@ KdmItem::placementHint( const QRect &par + w = parentRect.width(), + h = parentRect.height(); + +- kdDebug() << "KdmItem::placementHint parentRect=" << id << parentRect << " hintedSize=" << hintedSize << endl; ++ kdDebug() << timestamp() << " KdmItem::placementHint parentRect=" << parentRect << " hintedSize=" << hintedSize << endl; ++ + // check if width or height are set to "box" + if (pos.wType == DTbox || pos.hType == DTbox) { + if (myLayoutItem || myWidget) +@@ -372,7 +410,7 @@ KdmItem::placementHint( const QRect &par + return parentRect; + boxHint = boxManager->sizeHint(); + } +- kdDebug() << " => boxHint " << boxHint << endl; ++ kdDebug() << timestamp() << " boxHint " << boxHint << endl; + } + + if (pos.xType == DTpixel) +@@ -380,25 +418,25 @@ KdmItem::placementHint( const QRect &par + else if (pos.xType == DTnpixel) + x = parentRect.right() - pos.x; + else if (pos.xType == DTpercent) +- x += int( parentRect.width() / 100.0 * pos.x ); ++ x += qRound( parentRect.width() / 100.0 * pos.x ); + + if (pos.yType == DTpixel) + y += pos.y; + else if (pos.yType == DTnpixel) + y = parentRect.bottom() - pos.y; + else if (pos.yType == DTpercent) +- y += int( parentRect.height() / 100.0 * pos.y ); ++ y += qRound( parentRect.height() / 100.0 * pos.y ); + + if (pos.wType == DTpixel) + w = pos.width; + else if (pos.wType == DTnpixel) + w -= pos.width; + else if (pos.wType == DTpercent) +- w = int( parentRect.width() / 100.0 * pos.width ); ++ w = qRound( parentRect.width() / 100.0 * pos.width ); + else if (pos.wType == DTbox) + w = boxHint.width(); + else if (hintedSize.width() > 0) +- w = hintedSize.width(); ++ w = hintedSize.width(); + else + w = 0; + +@@ -407,14 +445,22 @@ KdmItem::placementHint( const QRect &par + else if (pos.hType == DTnpixel) + h -= pos.height; + else if (pos.hType == DTpercent) +- h = int( parentRect.height() / 100.0 * pos.height ); ++ h = qRound( parentRect.height() / 100.0 * pos.height ); + else if (pos.hType == DTbox) + h = boxHint.height(); +- else if (hintedSize.height() > 0) +- h = hintedSize.height(); +- else ++ else if (hintedSize.height() > 0) { ++ if (w && pos.wType != DTnone) ++ h = (hintedSize.height() * w) / hintedSize.width(); ++ else ++ h = hintedSize.height(); ++ } else + h = 0; + ++ // we choose to take the hinted size, but it's better to listen to the aspect ratio ++ if (pos.wType == DTnone && pos.hType != DTnone && h && w) { ++ w = qRound(float(hintedSize.width() * h) / hintedSize.height()); ++ } ++ + // defaults to center + int dx = -w / 2, dy = -h / 2; + +@@ -430,7 +476,7 @@ KdmItem::placementHint( const QRect &par + dx = -w; + } + // KdmItem *p = static_cast( parent() ); +- kdDebug() << "KdmItem::placementHint " << id << " x=" << x << " dx=" << dx << " w=" << w << " y=" << y << " dy=" << dy << " h=" << h << " " << parentRect << endl; ++ kdDebug() << timestamp() << " placementHint " << this << " x=" << x << " dx=" << dx << " w=" << w << " y=" << y << " dy=" << dy << " h=" << h << " " << parentRect << endl; + y += dy; + x += dx; + +@@ -529,4 +575,17 @@ KdmItem::setFixedLayout( const QDomNode + currentManager = MFixed; + } + ++QWidget * ++KdmItem::parentWidget() const ++{ ++ if (myWidget) ++ return myWidget; ++ if (!this->parent()) ++ return 0; ++ ++ if (parent()->qt_cast("QWidget")) ++ return (QWidget*)parent(); ++ return ((KdmItem*)parent())->parentWidget(); ++} ++ + #include "kdmitem.moc" +Index: kdm/kfrontend/themer/kdmpixmap.cpp +=================================================================== +--- kdm/kfrontend/themer/kdmpixmap.cpp.orig ++++ kdm/kfrontend/themer/kdmpixmap.cpp +@@ -22,6 +22,7 @@ + #include + + #include "kdmpixmap.h" ++#include + + #include + #ifdef HAVE_LIBART +@@ -29,6 +30,7 @@ + #endif + + #include ++#include + + #include + #include +@@ -58,21 +60,28 @@ KdmPixmap::KdmPixmap( KdmItem *parent, c + QString tagName = el.tagName(); + + if (tagName == "normal") { +- loadPixmap( el.attribute( "file", "" ), pixmap.normal.pixmap, pixmap.normal.fullpath ); ++ pixmap.normal.fullpath = fullPath( el.attribute( "file", "" ) ); + parseColor( el.attribute( "tint", "#ffffff" ), pixmap.normal.tint ); + pixmap.normal.alpha = el.attribute( "alpha", "1.0" ).toFloat(); + } else if (tagName == "active") { + pixmap.active.present = true; +- loadPixmap( el.attribute( "file", "" ), pixmap.active.pixmap, pixmap.active.fullpath ); ++ pixmap.active.fullpath = fullPath( el.attribute( "file", "" ) ); + parseColor( el.attribute( "tint", "#ffffff" ), pixmap.active.tint ); + pixmap.active.alpha = el.attribute( "alpha", "1.0" ).toFloat(); + } else if (tagName == "prelight") { + pixmap.prelight.present = true; +- loadPixmap( el.attribute( "file", "" ), pixmap.prelight.pixmap, pixmap.prelight.fullpath ); ++ pixmap.prelight.fullpath = fullPath(el.attribute( "file", "" ) ); + parseColor( el.attribute( "tint", "#ffffff" ), pixmap.prelight.tint ); + pixmap.prelight.alpha = el.attribute( "alpha", "1.0" ).toFloat(); + } + } ++ ++ // look if we have to have the aspect ratio ready ++ if (((pos.wType == DTnone && pos.hType != DTnone) || ++ (pos.wType != DTnone && pos.hType == DTnone) || ++ (pos.wType == DTnone && pos.hType == DTnone)) && ++ !pixmap.normal.fullpath.endsWith( ".svg" )) ++ loadPixmap( &pixmap.normal ); + } + + QSize +@@ -100,19 +109,16 @@ KdmPixmap::setGeometry( const QRect &new + } + + +-void +-KdmPixmap::loadPixmap( const QString &fileName, QPixmap &map, QString &fullName ) ++QString ++KdmPixmap::fullPath( const QString &fileName) + { +- if (fileName.isEmpty()) +- return; ++ if (fileName.isEmpty()) ++ return QString::null; + +- fullName = fileName; ++ QString fullName = fileName; + if (fullName.at( 0 ) != '/') + fullName = baseDir() + "/" + fileName; +- +- if (!fullName.endsWith( ".svg" )) // we delay it for svgs +- if (!map.load( fullName )) +- fullName = QString::null; ++ return fullName; + } + + void +@@ -140,6 +146,25 @@ KdmPixmap::renderSvg( PixmapStruct::Pixm + } + + void ++KdmPixmap::loadPixmap( PixmapStruct::PixmapClass *pClass ) ++{ ++ QString fullpath = pClass->fullpath; ++ ++ kdDebug() << timestamp() << " load " << fullpath << endl; ++ int index = fullpath.findRev('.'); ++ QString ext = fullpath.right(fullpath.length() - index); ++ fullpath = fullpath.left(index); ++ kdDebug() << timestamp() << " ext " << ext << " " << fullpath << endl; ++ QString testpath = QString("-%1x%2").arg(area.width()).arg(area.height()) + ext; ++ kdDebug() << timestamp() << " testing for " << fullpath + testpath << endl; ++ if (KStandardDirs::exists(fullpath + testpath)) ++ pClass->pixmap.load(fullpath + testpath); ++ else ++ pClass->pixmap.load( fullpath + ext ); ++ kdDebug() << timestamp() << " done\n"; ++} ++ ++void + KdmPixmap::drawContents( QPainter *p, const QRect &r ) + { + // choose the correct pixmap class +@@ -149,12 +174,20 @@ KdmPixmap::drawContents( QPainter *p, co + if (state == Sprelight && pixmap.prelight.present) + pClass = &pixmap.prelight; + ++ kdDebug() << "draw " << id << " " << pClass->pixmap.isNull() << endl; ++ + if (pClass->pixmap.isNull()) { +- if (pClass->fullpath.isEmpty()) // if neither is set, we're empty ++ ++ if (pClass->fullpath.isEmpty()) // if neither is set, we're empty + return; +- +- kdDebug() << "renderSVG\n"; +- renderSvg( pClass, area ); ++ ++ if (!pClass->fullpath.endsWith( ".svg" ) ) { ++ loadPixmap(pClass); ++ } else { ++ kdDebug() << timestamp() << " renderSVG\n"; ++ renderSvg( pClass, area ); ++ kdDebug() << timestamp() << " done\n"; ++ } + } + + int px = area.left() + r.left(); +@@ -176,25 +209,37 @@ KdmPixmap::drawContents( QPainter *p, co + + + if (pClass->readyPixmap.isNull()) { +- QImage scaledImage; ++ ++ bool haveTint = pClass->tint.rgb() != 0xFFFFFF; ++ bool haveAlpha = pClass->alpha < 1.0; + ++ QImage scaledImage; ++ + // use the loaded pixmap or a scaled version if needed + ++ kdDebug() << timestamp() << " prepare readyPixmap " << pClass->fullpath << " " << area.size() << " " << pClass->pixmap.size() << endl; + if (area.size() != pClass->pixmap.size()) { + if (pClass->fullpath.endsWith( ".svg" )) { +- kdDebug() << "renderSVG\n"; ++ kdDebug() << timestamp() << " renderSVG\n"; + renderSvg( pClass, area ); + scaledImage = pClass->pixmap.convertToImage(); + } else { +- kdDebug() << "convertFromImage\n"; ++ kdDebug() << timestamp() << " convertFromImage smoothscale\n"; + QImage tempImage = pClass->pixmap.convertToImage(); ++ kdDebug() << timestamp() << " convertToImage done\n"; + scaledImage = tempImage.smoothScale( area.width(), area.height() ); ++ kdDebug() << timestamp() << " done\n"; + } +- } else ++ } else { ++ if (haveTint || haveAlpha) ++ { + scaledImage = pClass->pixmap.convertToImage(); +- +- bool haveTint = pClass->tint.rgb() != 0xFFFFFF; +- bool haveAlpha = pClass->alpha < 1.0; ++ // enforce rgba values for the later ++ scaledImage = scaledImage.convertDepth( 32 ); ++ } ++ else ++ pClass->readyPixmap = pClass->pixmap; ++ } + + if (haveTint || haveAlpha) { + // blend image(pix) with the given tint +@@ -221,9 +266,12 @@ KdmPixmap::drawContents( QPainter *p, co + + } + +- pClass->readyPixmap.convertFromImage( scaledImage ); ++ if (!scaledImage.isNull()) { ++ kdDebug() << timestamp() << " convertFromImage " << id << " " << area << endl; ++ pClass->readyPixmap.convertFromImage( scaledImage ); ++ } + } +- // kdDebug() << "Pixmap::drawContents " << pClass->readyPixmap.size() << " " << px << " " << py << " " << sx << " " << sy << " " << sw << " " << sh << endl; ++ kdDebug() << timestamp() << " Pixmap::drawContents " << pClass->readyPixmap.size() << " " << px << " " << py << " " << sx << " " << sy << " " << sw << " " << sh << endl; + p->drawPixmap( px, py, pClass->readyPixmap, sx, sy, sw, sh ); + } + +Index: kdm/kfrontend/themer/kdmlabel.cpp +=================================================================== +--- kdm/kfrontend/themer/kdmlabel.cpp.orig ++++ kdm/kfrontend/themer/kdmlabel.cpp +@@ -19,8 +19,10 @@ + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + ++#include + #include "kdmlabel.h" +-#include ++#include "kdmconfig.h" ++#include "../kgreeter.h" + + #include + #include +@@ -31,6 +33,7 @@ + #include + #include + #include ++#include + + #include + #include +@@ -39,7 +42,7 @@ + #endif + + KdmLabel::KdmLabel( KdmItem *parent, const QDomNode &node, const char *name ) +- : KdmItem( parent, node, name ) ++ : KdmItem( parent, node, name ), myAccel(0) + { + itemType = "label"; + +@@ -92,21 +95,46 @@ KdmLabel::KdmLabel( KdmItem *parent, con + } + } + +- // Check if this is a timer label ++ // Check if this is a timer label) + label.isTimer = label.text.find( "%c" ) >= 0; + if (label.isTimer) { + timer = new QTimer( this ); + timer->start( 1000 ); + connect( timer, SIGNAL(timeout()), SLOT(update()) ); + } +- cText = lookupText( label.text ); ++ setTextInt( lookupText( label.text ) ); ++} ++ ++void ++KdmLabel::setTextInt( const QString &txt) ++{ ++ // TODO: catch && ++ cText = txt; ++ cAccel = txt.find('&'); ++ delete myAccel; ++ myAccel = 0; ++ if (cAccel != -1) { ++ cText.remove('&'); ++ myAccel = new QAccel(parentWidget()); ++ myAccel->insertItem(ALT + UNICODE_ACCEL + cText.at(cAccel).lower().unicode()); ++ connect(myAccel, SIGNAL(activated(int)), SLOT(slotAccel())); ++ } ++} ++ ++void ++KdmLabel::slotAccel() ++{ ++ if (buttonParent) ++ emit activated(buttonParent->getId()); ++ else ++ emit activated(id); + } + + void + KdmLabel::setText( const QString &txt ) + { + label.text = txt; +- update(); ++ setTextInt( lookupText( label.text ) ); + } + + QSize +@@ -139,7 +167,23 @@ KdmLabel::drawContents( QPainter *p, con + p->setFont( l->font ); + p->setPen( l->color ); + //TODO paint clipped (tested but not working..) +- p->drawText( area, AlignLeft | SingleLine, cText ); ++ if (cAccel != -1 && (!id.isEmpty() || buttonParent) ) { ++ QString left = cText.left(cAccel); ++ QString right = cText.mid(cAccel + 1); ++ p->drawText( area, AlignLeft | SingleLine, left ); ++ QRect tarea = area; ++ QFontMetrics fm(l->font); ++ tarea.rLeft() += fm.width(left); ++ QFont f(l->font); ++ f.setUnderline(true); ++ p->setFont ( f ); ++ p->drawText( tarea, AlignLeft | SingleLine, QString(cText.at(cAccel))); ++ tarea.rLeft() += fm.width(cText.at(cAccel)); ++ p->setFont( l->font ); ++ p->drawText( tarea, AlignLeft | SingleLine, right); ++ } else { ++ p->drawText( area, AlignLeft | SingleLine, cText); ++ } + } + + void +@@ -159,7 +203,7 @@ KdmLabel::update() + { + QString text = lookupText( label.text ); + if (text != cText) { +- cText = text; ++ setTextInt(text); + needUpdate(); + } + } +@@ -167,22 +211,23 @@ KdmLabel::update() + static const struct { + const char *type, *text; + } stocks[] = { +- { "language", I18N_NOOP("Language") }, +- { "session", I18N_NOOP("Session Type") }, +- { "system", I18N_NOOP("Menu") }, // i18n("Actions"); +- { "disconnect", I18N_NOOP("Disconnect") }, +- { "quit", I18N_NOOP("Quit") }, +- { "halt", I18N_NOOP("Power off") }, +- { "suspend", I18N_NOOP("Suspend") }, +- { "reboot", I18N_NOOP("Reboot") }, ++ { "language", I18N_NOOP("&Language") }, ++ { "session", I18N_NOOP("Session &Type") }, ++ { "system", I18N_NOOP("&System") }, // i18n("Actions"); ++ { "disconnect", I18N_NOOP("&Disconnect") }, ++ { "quit", I18N_NOOP("&Quit") }, ++ { "halt", I18N_NOOP("Power O&ff") }, ++ { "suspend", I18N_NOOP("S&uspend") }, ++ { "reboot", I18N_NOOP("&Reboot") }, + { "chooser", I18N_NOOP("XDMCP Chooser") }, + { "config", I18N_NOOP("Configure") }, +- { "caps-lock-warning", I18N_NOOP("You have got caps lock on.") }, +- { "timed-label", I18N_NOOP("User %s will login in %d seconds") }, +- { "welcome-label", I18N_NOOP("Welcome to %h") }, // _greetString +- { "username-label", I18N_NOOP("Username:") }, +- { "password-label", I18N_NOOP("Password:") }, +- { "login", I18N_NOOP("Login") } ++ { "caps-lock-warning", I18N_NOOP("Caps Lock is enabled.") }, ++ { "timed-label", I18N_NOOP("User %s will log in in %d seconds") }, ++ { "welcome-label", I18N_NOOP("Welcome to %h") }, // _greetString ++ { "username-label", I18N_NOOP("&Username:") }, ++ { "password-label", I18N_NOOP("&Password:") }, ++ { "domain-label", I18N_NOOP("&Domain:") }, ++ { "login", I18N_NOOP("L&ogin") } + }; + + QString +@@ -195,7 +240,7 @@ KdmLabel::lookupStock( const QString &st + if (type == stocks[i].type) + return i18n(stocks[i].text); + +- kdDebug() << "Invalid element. Check your theme!" << endl; ++ kdDebug() << timestamp() << " Invalid element. Check your theme!" << endl; + return stock; + } + +@@ -205,7 +250,6 @@ KdmLabel::lookupText( const QString &t ) + QString text = t; + + text.replace( '_', '&' ); +-// text.remove( '_' ); // FIXME add key accels, remove underscores for now + + QMap m; + struct utsname uts; +Index: kdm/kfrontend/kdmconfig.h +=================================================================== +--- kdm/kfrontend/kdmconfig.h.orig ++++ kdm/kfrontend/kdmconfig.h +@@ -35,6 +35,7 @@ Foundation, Inc., 51 Franklin Street, Fi + #include + #include + #include ++#include + + extern QString _stsFile; + extern bool _isLocal; +@@ -46,6 +47,19 @@ CONF_GREET_CPP_DECLS + struct dpySpec; + void decodeSess( dpySpec *sess, QString &user, QString &loc ); + ++extern struct timeval st; ++ ++inline QString timestamp() { ++ struct timeval nst; ++ gettimeofday(&nst, 0); ++ if (!st.tv_sec) ++ gettimeofday(&st, 0); ++ ++ QString ret; ++ ret.sprintf("[%07ld]", (nst.tv_sec - st.tv_sec) * 1000 + (nst.tv_usec - st.tv_usec) / 1000); ++ return ret; ++} ++ + extern "C" + #endif + void init_config( void ); +Index: kdm/kfrontend/kgreeter.h +=================================================================== +--- kdm/kfrontend/kgreeter.h.orig ++++ kdm/kfrontend/kgreeter.h +@@ -73,9 +73,10 @@ class KGreeter : public KGDialog, public + void slotUserEntered(); + + protected: ++ void readFacesList(); + void installUserList(); + void insertUser( const QImage &, const QString &, struct passwd * ); +- void insertUsers(); ++ void insertUsers( int limit = -1); + void putSession( const QString &, const QString &, bool, const char * ); + void insertSessions(); + virtual void pluginSetup(); +@@ -87,10 +88,13 @@ class KGreeter : public KGDialog, public + QStringList *userList; + QPopupMenu *sessMenu; + QValueVector sessionTypes; ++ QStringList randomFaces; ++ QMap randomFacesMap; + int nNormals, nSpecials; + int curPrev, curSel; + bool prevValid; + bool needLoad; ++ bool themed; + + static int curPlugin; + static PluginList pluginList; +Index: kdm/kfrontend/kgdialog.cpp +=================================================================== +--- kdm/kfrontend/kgdialog.cpp.orig ++++ kdm/kfrontend/kgdialog.cpp +@@ -29,6 +29,7 @@ Foundation, Inc., 51 Franklin Street, Fi + #include "kdm_greet.h" + + #include ++#include + + #include + #include +@@ -58,7 +59,7 @@ KGDialog::completeMenu() + #ifdef HAVE_VTS + if (_isLocal) { + dpyMenu = new QPopupMenu( this ); +- int id = inserten( i18n("Sw&itch User"), ALT+Key_I, dpyMenu ); ++ int id = inserten( i18n("Sw&itch User"), CTRL + Key_I, dpyMenu ); + connect( dpyMenu, SIGNAL(activated( int )), + SLOT(slotDisplaySelected( int )) ); + connect( dpyMenu, SIGNAL(aboutToShow()), +@@ -71,7 +72,7 @@ KGDialog::completeMenu() + + if (_allowClose) + inserten( _isLocal ? i18n("R&estart X Server") : i18n("Clos&e Connection"), +- ALT+Key_E, SLOT(slotExit()) ); ++ 0, SLOT(slotExit()) ); + + #ifdef XDMCP + if (_isLocal && _loginMode != _switchIf) { +@@ -81,10 +82,11 @@ KGDialog::completeMenu() + #endif + + if (_hasConsole) +- inserten( i18n("Co&nsole Login"), ALT+Key_N, SLOT(slotConsole()) ); ++ inserten( i18n("Co&nsole Login"), CTRL+Key_N, SLOT(slotConsole()) ); + + if (_allowShutdown != SHUT_NONE) { +- inserten( i18n("&Shutdown..."), ALT+Key_S, SLOT(slotShutdown( int )) ); ++ ensureMenu(); ++ optMenu->insertItem(SmallIconSet( "exit" ), i18n("&Shutdown..."), this, SLOT(slotShutdown(int)), CTRL+Key_S ); + QAccel *accel = new QAccel( this ); + accel->insertItem( ALT+CTRL+Key_Delete ); + connect( accel, SIGNAL(activated( int )), SLOT(slotShutdown( int )) ); +Index: kdm/kfrontend/kdmconfig.cpp +=================================================================== +--- kdm/kfrontend/kdmconfig.cpp.orig ++++ kdm/kfrontend/kdmconfig.cpp +@@ -33,6 +33,8 @@ Foundation, Inc., 51 Franklin Street, Fi + #include + #include + ++struct timeval st = {0, 0}; ++ + CONF_GREET_DEFS + + QString _stsFile; +Index: kdm/kfrontend/kgapp.cpp +=================================================================== +--- kdm/kfrontend/kgapp.cpp.orig ++++ kdm/kfrontend/kgapp.cpp +@@ -36,6 +36,8 @@ Foundation, Inc., 51 Franklin Street, Fi + #include + #include + #include ++#include ++#include + + #include + #include +@@ -130,6 +132,7 @@ kg_main( const char *argv0 ) + static char *argv[] = { (char *)"kdmgreet", 0 }; + KCmdLineArgs::init( 1, argv, *argv, 0, 0, 0, true ); + ++ kdDebug() << timestamp() << "start" << endl; + kde_have_kipc = false; + KApplication::disableAutoDcopRegistration(); + KCrash::setSafer( true ); +@@ -166,6 +169,7 @@ kg_main( const char *argv0 ) + + GSendInt( G_Ready ); + ++ kdDebug() << timestamp() << " main1" << endl; + setCursor( dpy, app.desktop()->winId(), XC_left_ptr ); + + for (;;) { +@@ -206,6 +210,7 @@ kg_main( const char *argv0 ) + if (_useTheme && !_theme.isEmpty()) { + KThemedGreeter *tgrt; + dialog = tgrt = new KThemedGreeter; ++ kdDebug() << timestamp() << " themed" << endl; + if (!tgrt->isOK()) { + delete tgrt; + dialog = new KStdGreeter; +Index: kdm/kfrontend/kgreeter.cpp +=================================================================== +--- kdm/kfrontend/kgreeter.cpp.orig ++++ kdm/kfrontend/kgreeter.cpp +@@ -38,6 +38,7 @@ Foundation, Inc., 51 Franklin Street, Fi + #include + #include + #include ++#include + + #undef Unsorted // x headers suck - make qdir.h work with --enable-final + #include +@@ -46,6 +47,7 @@ Foundation, Inc., 51 Franklin Street, Fi + #include + #include + #include ++#include + #include + #include + #include +@@ -63,27 +65,46 @@ Foundation, Inc., 51 Franklin Street, Fi + #include + #include + #include ++#include ++#include + + #include + + class UserListView : public KListView { + public: +- UserListView( QWidget *parent = 0, const char *name = 0 ) ++ UserListView( bool _them, QWidget *parent = 0, const char *name = 0 ) + : KListView( parent, name ) +- , cachedSizeHint( -1, 0 ) ++ , themed(_them), cachedSizeHint( -1, 0 ) + { + setSizePolicy( QSizePolicy::Preferred, QSizePolicy::Ignored ); + header()->hide(); + addColumn( QString::null ); + setColumnAlignment( 0, AlignVCenter ); + setResizeMode( QListView::LastColumn ); ++ if (themed) { ++ setBackgroundMode( Qt::NoBackground ); ++ viewport()->setBackgroundMode( Qt::NoBackground ); ++ setFrameStyle( QFrame::NoFrame ); ++ } + } + ++ bool themed; + mutable QSize cachedSizeHint; + +- protected: ++ int sumHeight() const ++ { ++ int sum = 0; ++ for (QListViewItem *itm = firstChild(); itm; itm = itm->nextSibling()) { ++ sum += itm->height(); ++ } ++ return sum; ++ } ++public: + virtual QSize sizeHint() const + { ++ if (themed) ++ return KListView::sizeHint(); ++ + if (!cachedSizeHint.isValid()) { + constPolish(); + uint maxw = 0; +@@ -98,8 +119,23 @@ class UserListView : public KListView { + } + return cachedSizeHint; + } +-}; ++ virtual void paintEmptyArea ( QPainter * p, const QRect & rect ) ++ { ++ if (!themed) ++ return KListView::paintEmptyArea(p, rect ); ++ ++ const QPixmap *pm = paletteBackgroundPixmap(); ++ if (!pm || pm->isNull()) ++ return; ++ ++ kdDebug() << "paintEmpty " << rect << endl; ++ QRect devRect = p->xForm( rect ); ++ kdDebug() << "paintEmpty2 " << devRect << endl; ++ p->drawPixmap(0, 0, *pm, devRect.left(), devRect.top() ); ++ } + ++ QPixmap background; ++}; + + int KGreeter::curPlugin = -1; + PluginList KGreeter::pluginList; +@@ -115,12 +151,14 @@ KGreeter::KGreeter( bool framed ) + , curSel( -1 ) + , prevValid( true ) + , needLoad( false ) ++ , themed( framed ) + { + stsFile = new KSimpleConfig( _stsFile ); + stsFile->setGroup( "PrevUser" ); + + if (_userList) { +- userView = new UserListView( this ); ++ readFacesList(); ++ userView = new UserListView( framed, this ); + connect( userView, SIGNAL(clicked( QListViewItem * )), + SLOT(slotUserClicked( QListViewItem * )) ); + connect( userView, SIGNAL(doubleClicked( QListViewItem * )), +@@ -128,10 +166,8 @@ KGreeter::KGreeter( bool framed ) + } + if (_userCompletion) + userList = new QStringList; +- if (userView || userList) +- insertUsers(); + +- sessMenu = new QPopupMenu( this ); ++ sessMenu = new QPopupMenu( this ); + connect( sessMenu, SIGNAL(activated( int )), + SLOT(slotSessionSelected( int )) ); + insertSessions(); +@@ -150,6 +186,33 @@ KGreeter::~KGreeter() + delete stsFile; + } + ++void KGreeter::readFacesList() ++{ ++ FILE *f = fopen( QFile::encodeName( _faceDir + "/.randomlist" ), "rt" ); ++ if ( !f ) ++ return; ++ QTextIStream is( f ); ++ while ( !is.eof() ) ++ { ++ QString line = is.readLine().simplifyWhiteSpace(); ++ if ( line.isEmpty() ) ++ continue; ++ QString icon; ++ int index = line.find( ' ' ); ++ if ( index > 0 ) { ++ icon = line.left( index ); ++ line = line.mid( index ); ++ } else { ++ icon = line; ++ line = QString::null; ++ } ++ randomFaces.push_back( icon ); ++ QStringList list = QStringList::split( ' ', line ); ++ for ( QStringList::ConstIterator it = list.begin(); it != list.end(); ++it ) ++ randomFacesMap[*it] = icon; ++ } ++} ++ + class UserListViewItem : public KListViewItem { + public: + UserListViewItem( UserListView *parent, const QString &text, +@@ -163,6 +226,14 @@ class UserListViewItem : public KListVie + parent->cachedSizeHint.setWidth( -1 ); + } + ++ virtual void paintCell(QPainter *p, const QColorGroup &cg, int column, int width, int alignment) ++ { ++ if (((UserListView*)listView())->themed) ++ QListViewItem::paintCell(p, cg, column, width, alignment); ++ else ++ KListViewItem::paintCell(p, cg, column, width, alignment); ++ } ++ + QString login; + }; + +@@ -224,10 +295,23 @@ KGreeter::insertUser( const QImage &defa + QSize ns( 48, 48 ); + if (p.size() != ns) + p = p.convertDepth( 32 ).smoothScale( ns, QImage::ScaleMin ); +- goto gotit; ++ break; + } while (--nd >= 0); +- p = default_pix; +- gotit: ++ ++ if ( p.isNull() && randomFaces.count() ) { ++ QString randomFace = randomFacesMap[username]; ++ if ( randomFace.isNull() ) { ++ QStringList::size_type index = 0; ++ for ( size_t i = 0; i < username.length(); ++i ) ++ index += ( 0x7f - username.at( i ).latin1() ) % 37; ++ randomFace = randomFaces[ index % randomFaces.count() ]; ++ } ++ p.load( _faceDir + "/../pics/users/" + randomFace + ".png" ); ++ } ++ ++ if ( p.isNull() ) ++ p = default_pix; ++ + QString realname = KStringHandler::from8Bit( ps->pw_gecos ); + realname.truncate( realname.find( ',' ) ); + if (realname.isEmpty() || realname == username) +@@ -278,7 +362,7 @@ UserList::UserList( char **in ) + } + + void +-KGreeter::insertUsers() ++KGreeter::insertUsers(int limit_users) + { + struct passwd *ps; + +@@ -305,6 +389,8 @@ KGreeter::insertUsers() + if (_showUsers == SHOW_ALL) { + UserList noUsers( _noUsers ); + QDict dupes( 1000 ); ++ QStringList toinsert; ++ int count = 0; + for (setpwent(); (ps = getpwent()) != 0;) { + if (*ps->pw_dir && *ps->pw_shell && + (ps->pw_uid >= (unsigned)_lowUserId || +@@ -316,10 +402,53 @@ KGreeter::insertUsers() + QString username( QFile::decodeName( ps->pw_name ) ); + if (!dupes.find( username )) { + dupes.insert( username, (int *)-1 ); +- insertUser( default_pix, username, ps ); ++ toinsert.append( username ); ++ ++ if ( limit_users >= 0 && ++count > limit_users ) ++ break; + } + } + } ++ if ( limit_users >= 0 && ++count > limit_users ) { ++ utmpname( _PATH_WTMP ); ++ setutxent(); ++ toinsert = QStringList(); ++ dupes.clear(); ++ ++ for ( count = 0; count < limit_users; ) { ++ struct utmpx * ent = getutxent(); ++ if ( !ent ) ++ break; ++ struct passwd *ps = getpwnam( ent->ut_user ); ++ if (ps && *ps->pw_dir && *ps->pw_shell && ++ (ps->pw_uid >= (unsigned)_lowUserId || ++ !ps->pw_uid && _showRoot) && ++ ps->pw_uid <= (unsigned)_highUserId && ++ !noUsers.hasUser( ps->pw_name ) && ++ !noUsers.hasGroup( ps->pw_gid )) ++ { ++ QString username( QFile::decodeName( ent->ut_user ) ); ++ if (!dupes.find( username )) { ++ dupes.insert( username, (int *)-1 ); ++ toinsert.append( username ); ++ count++; ++ } ++ } ++ ++ ++ } ++ endutxent(); ++ } ++ ++ for ( QStringList::ConstIterator it = toinsert.begin(); ++ it != toinsert.end(); ++it ) ++ { ++ // pretty stupid to do another lookup round, but the number is limited ++ // and caching struct passwd is pretty ugly ++ struct passwd *ps = getpwnam( QFile::encodeName( *it ) ); ++ if ( ps ) ++ insertUser( default_pix, *it, ps ); ++ } + } else { + UserList users( _users ); + if (users.hasGroups()) { +@@ -721,21 +850,24 @@ KStdGreeter::KStdGreeter() + hbox2->addStretch( 1 ); + + if (sessMenu->count() > 1) { +- inserten( i18n("Session &Type"), ALT+Key_T, sessMenu ); ++ inserten( i18n("Session &Type"), 0, sessMenu ); + needSep = true; + } + + if (plugMenu) { +- inserten( i18n("&Authentication Method"), ALT+Key_A, plugMenu ); ++ inserten( i18n("&Authentication Method"), 0, plugMenu ); + needSep = true; + } + + #ifdef XDMCP +- completeMenu( LOGIN_LOCAL_ONLY, ex_choose, i18n("&Remote Login"), ALT+Key_R ); ++ completeMenu( LOGIN_LOCAL_ONLY, ex_choose, i18n("&Remote Login"), 0 ); + #else + completeMenu(); + #endif + ++ if (userView || userList) ++ insertUsers(); ++ + if (optMenu) + menuButton->setPopup( optMenu ); + else +@@ -829,6 +961,9 @@ KThemedGreeter::KThemedGreeter() + if (xauth_warning && (_authorized || !_authComplain)) + xauth_warning->hide( true ); + ++ if (userView || userList) ++ insertUsers( 7 ); // TODO: find out how many are a good value ++ + // if (!_greetString.isEmpty()) { + // } + // clock = new KdmClock( this, "clock" ); +@@ -854,37 +989,31 @@ KThemedGreeter::KThemedGreeter() + if ((itm = themer->findNode( "session_button" ))) { + if (sessMenu->count() <= 1) + itm->hide( true ); +- else { +- session_button = itm; +- QAccel *accel = new QAccel( this ); +- accel->insertItem( ALT+Key_T, 0 ); +- connect( accel, SIGNAL(activated( int )), SLOT(slotSessMenu()) ); +- } ++ else ++ session_button = itm; + } else { + if (sessMenu->count() > 1) { +- inserten( i18n("Session &Type"), ALT+Key_T, sessMenu ); ++ inserten( i18n("Session &Type"), 0, sessMenu ); + needSep = true; + } + } + + if (plugMenu) { +- inserten( i18n("&Authentication Method"), ALT+Key_A, plugMenu ); ++ inserten( i18n("&Authentication Method"), 0, plugMenu ); + needSep = true; + } + + #ifdef XDMCP +- completeMenu( LOGIN_LOCAL_ONLY, ex_choose, i18n("&Remote Login"), ALT+Key_R ); ++ completeMenu( LOGIN_LOCAL_ONLY, ex_choose, i18n("&Remote Login"), 0 ); + #else + completeMenu(); + #endif + + system_button = themer->findNode( "system_button" ); +- QAccel *accel = new QAccel( this ); +- accel->insertItem( ALT+Key_M, 0 ); +- connect( accel, SIGNAL(activated( int )), SLOT(slotActionMenu()) ); + + pluginSetup(); + ++ + verify->start(); + } + +@@ -902,8 +1031,8 @@ KThemedGreeter::pluginSetup() + inherited::pluginSetup(); + + if (userView && verify->entitiesLocal() && verify->entityPresettable() && userlist_rect) { ++ userView->setMaximumHeight( userView->sumHeight() ); + userlist_rect->setWidget( userView ); +- userView->show(); + } else { + if (userView) + userView->hide(); +@@ -919,12 +1048,17 @@ KThemedGreeter::verifyFailed() + { + // goButton->setEnabled( false ); + inherited::verifyFailed(); ++ if (userView) ++ userView->setEnabled(false); + } + + void + KThemedGreeter::verifyRetry() + { + // goButton->setEnabled( true ); ++ if (userView) ++ userView->setEnabled(true); ++ + } + + QString KThemedGreeter::timedUser = QString::null; diff --git a/opensuse/core/tdebase/kdm-mark_autologin.diff b/opensuse/core/tdebase/kdm-mark_autologin.diff new file mode 100644 index 000000000..a913f5a94 --- /dev/null +++ b/opensuse/core/tdebase/kdm-mark_autologin.diff @@ -0,0 +1,13 @@ +Index: kdm/backend/client.c +=================================================================== +--- kdm/backend/client.c.orig ++++ kdm/backend/client.c +@@ -1214,6 +1214,8 @@ StartClient() + env = setEnv( env, "PATH", curuid ? td->userPath : td->systemPath ); + env = setEnv( env, "SHELL", p->pw_shell ); + env = setEnv( env, "HOME", p->pw_dir ); ++ if (cursource == PWSRC_AUTOLOGIN) ++ env = setEnv (env, "KDM_AUTOLOGIN", curuser); + #if !defined(USE_PAM) && !defined(_AIX) && defined(KERBEROS) + if (krbtkfile[0] != '\0') + env = setEnv( env, "KRBTKFILE", krbtkfile ); diff --git a/opensuse/core/tdebase/kdm-pam-np-legacy b/opensuse/core/tdebase/kdm-pam-np-legacy new file mode 100644 index 000000000..5d139e0bb --- /dev/null +++ b/opensuse/core/tdebase/kdm-pam-np-legacy @@ -0,0 +1,7 @@ +#%PAM-1.0 +auth required pam_permit.so +account include common-account +password include common-password +session include common-session +session required pam_devperm.so +session required pam_resmgr.so diff --git a/opensuse/core/tdebase/kdm-relaxed-auth.diff b/opensuse/core/tdebase/kdm-relaxed-auth.diff new file mode 100644 index 000000000..c94fa2b5d --- /dev/null +++ b/opensuse/core/tdebase/kdm-relaxed-auth.diff @@ -0,0 +1,22 @@ +Index: kdm/backend/auth.c +=================================================================== +--- kdm/backend/auth.c.orig ++++ kdm/backend/auth.c +@@ -518,6 +518,7 @@ DefineLocal( FILE *file, Xauth *auth, in + uname( &name ); + writeAddr( FamilyLocal, strlen( name.nodename ), name.nodename, + file, auth, ok ); ++ setenv("XAUTHLOCALHOSTNAME", name.nodename, 1); + #endif + + #if !defined(NEED_UTSNAME) || defined(__hpux) +@@ -1211,6 +1212,9 @@ SetUserAuthorization( struct display *d + userEnviron = setEnv( userEnviron, "XAUTHORITY", envname ); + systemEnviron = setEnv( systemEnviron, "XAUTHORITY", envname ); + } ++ name = getenv("XAUTHLOCALHOSTNAME"); ++ if (name) ++ userEnviron = setEnv( userEnviron, "XAUTHLOCALHOSTNAME", name); + /* a chown() used to be here, but this code runs as user anyway */ + } + Debug( "done SetUserAuthorization\n" ); diff --git a/opensuse/core/tdebase/kdm-suspend-hal.diff b/opensuse/core/tdebase/kdm-suspend-hal.diff new file mode 100644 index 000000000..711e1c114 --- /dev/null +++ b/opensuse/core/tdebase/kdm-suspend-hal.diff @@ -0,0 +1,331 @@ +Index: kdm/backend/ctrl.c +=================================================================== +--- kdm/backend/ctrl.c.orig ++++ kdm/backend/ctrl.c +@@ -483,6 +483,10 @@ processCtrl( const char *string, int len + Reply( "nuke\t" ); + } + } ++ if (d->allowSuspend != SHUT_NONE) { ++ Reply( "suspend\t" ); ++ } ++ + if ((d->displayType & d_location) == dLocal && + AnyReserveDisplays()) + Writer( fd, cbuf, sprintf( cbuf, "reserve %d\t", +Index: kdm/backend/greet.h +=================================================================== +--- kdm/backend/greet.h.orig ++++ kdm/backend/greet.h +@@ -125,6 +125,7 @@ from the copyright holder. + # define SHUT_REBOOT 1 /* how */ + # define SHUT_HALT 2 + # define SHUT_CONSOLE -1 /* pseudo-code */ ++# define SHUT_SUSPEND -2 /* pseudo-code */ + # define SHUT_SCHEDULE 0 /* when; config only */ + # define SHUT_TRYNOW 1 + # define SHUT_FORCENOW 2 +Index: kdm/config.def +=================================================================== +--- kdm/config.def.orig ++++ kdm/config.def +@@ -1799,6 +1799,19 @@ Description: + Who is allowed to shut down the system. This applies both to the + greeter and to the command FiFo. + ++Key: AllowSuspend ++Type: enum ++ None/SHUT_NONE: no Suspend... menu entry is shown at all ++ Root/SHUT_ROOT: the root password must be entered to suspend ++ All/SHUT_ALL: everybody can suspend the machine ++Default: Root ++User: greeter ++User: core ++Instance: #:0/All ++Comment: & ++Description: ++ If the user should have an option to suspend the system if configured to (also in the desktop) ++ + Key: AllowSdForceNow + Type: enum + None: no forced shutdown is allowed at all +Index: kdm/kfrontend/kdmshutdown.cpp +=================================================================== +--- kdm/kfrontend/kdmshutdown.cpp.orig ++++ kdm/kfrontend/kdmshutdown.cpp +@@ -22,6 +22,7 @@ Foundation, Inc., 51 Franklin Street, Fi + + */ + ++#include + #include "kdmshutdown.h" + #include "kdm_greet.h" + +@@ -34,6 +35,7 @@ Foundation, Inc., 51 Franklin Street, Fi + #include + #include + #include ++#include + + #include + #include +@@ -57,6 +59,10 @@ Foundation, Inc., 51 Franklin Street, Fi + int KDMShutdownBase::curPlugin = -1; + PluginList KDMShutdownBase::pluginList; + ++#define DBUS_HAL_INTERFACE "org.freedesktop.Hal" ++#define DBUS_HAL_SYSTEM_POWER_INTERFACE "org.freedesktop.Hal.Device.SystemPowerManagement" ++#define HAL_UDI_COMPUTER "/org/freedesktop/Hal/devices/computer" ++ + KDMShutdownBase::KDMShutdownBase( int _uid, QWidget *_parent ) + : inherited( _parent ) + , box( new QVBoxLayout( this, KDmh, KDsh ) ) +@@ -71,6 +77,7 @@ KDMShutdownBase::KDMShutdownBase( int _u + , verify( 0 ) + , needRoot( -1 ) + , uid( _uid ) ++ , willSuspend( false ) + { + } + +@@ -87,6 +94,7 @@ KDMShutdownBase::complete( QWidget *prev + + if (uid && + ((willShut && _allowShutdown == SHUT_ROOT) || ++ ( willSuspend && _allowSuspend == SHUT_ROOT ) || + (mayNuke && _allowNuke == SHUT_ROOT))) + { + rootlab = new QLabel( i18n("Root authorization required."), this ); +@@ -169,6 +177,7 @@ KDMShutdownBase::updateNeedRoot() + { + int nNeedRoot = uid && + (((willShut && _allowShutdown == SHUT_ROOT) || ++ ( willSuspend && _allowSuspend == SHUT_ROOT ) || + (_allowNuke == SHUT_ROOT && doesNuke))); + if (verify && nNeedRoot != needRoot) { + if (needRoot == 1) +@@ -425,7 +434,7 @@ KDMRadioButton::mouseDoubleClickEvent( Q + + + KDMDelayedPushButton::KDMDelayedPushButton( const KGuiItem &item, +- QWidget *parent, ++ QWidget *parent, + const char *name ) + : inherited( item, parent, name ) + , pop( 0 ) +@@ -490,6 +499,57 @@ KDMSlimShutdown::KDMSlimShutdown( QWidge + buttonlay->addWidget( btnReboot ); + connect( btnReboot, SIGNAL(clicked()), SLOT(slotReboot()) ); + ++ if ( _allowSuspend != SHUT_NONE ) ++ { ++ int supported = -1; ++ liblazy_hal_get_property_bool(HAL_UDI_COMPUTER, "power_management.can_suspend", &supported); ++ if (supported == 1) ++ suspend_ram = true; ++ else ++ suspend_ram = false; ++ ++ liblazy_hal_get_property_bool(HAL_UDI_COMPUTER, "power_management.can_standby", &supported); ++ if (supported == 1) ++ standby = true; ++ else ++ standby = false; ++ liblazy_hal_get_property_bool(HAL_UDI_COMPUTER, "power_management.can_hibernate", &supported); ++ if (supported == 1) ++ suspend_disk = true; ++ else ++ suspend_disk = false; ++ ++/* if (liblazy_polkit_is_user_allowed_by_uid(0, "hal-power-hibernate", NULL) != 1) ++ suspend_disk = false; ++ if (liblazy_polkit_is_user_allowed_by_uid(0, "hal-power-suspend", NULL) != 1) ++ suspend_ram = false; ++ if (liblazy_polkit_is_user_allowed_by_uid(0, "hal-power-standby", NULL) != 1) ++ standby = false; ++*/ ++ int sum = standby + suspend_ram + suspend_disk; ++ if ( sum ) { ++ buttonlay->addSpacing( KDialog::spacingHint() ); ++ ++ QButton *btnSuspend; ++ if (sum > 1) { ++ btnSuspend = new KDMDelayedPushButton( KGuiItem( i18n("&Suspend Computer"), "player_pause"), this ); ++ QPopupMenu *suspends = new QPopupMenu(this); ++ if (suspend_disk) ++ suspends->insertItem(i18n("Suspend to Disk"), 1); ++ if (suspend_ram) ++ suspends->insertItem(i18n("Suspend to RAM"), 2); ++ if (standby) ++ suspends->insertItem(i18n("Standby"), 3); ++ connect(suspends, SIGNAL(activated(int)), SLOT(slotSuspend(int))); ++ static_cast(btnSuspend)->setPopup(suspends); ++ } else { ++ btnSuspend = new KPushButton( KGuiItem( i18n("&Suspend Computer"), "player_pause"), this ); ++ } ++ buttonlay->addWidget( btnSuspend ); ++ connect(btnSuspend, SIGNAL(clicked()), SLOT(slotSuspend())); ++ } ++ } ++ + GSet( 1 ); + GSendInt( G_ListBootOpts ); + if (GRecvInt() == BO_OK) { +@@ -536,6 +596,65 @@ KDMSlimShutdown::~KDMSlimShutdown() + freeStrArr( targetList ); + } + ++void KDMSlimShutdown::slotSuspend() ++{ ++ if (suspend_disk) ++ slotSuspend( 1 ); ++ else if (suspend_ram) ++ slotSuspend( 2 ); ++ else if ( standby ) ++ slotSuspend( 3 ); ++ else ++ reject(); ++} ++ ++void KDMSlimShutdown::slotSuspend(int id) ++{ ++ reject(); ++ // dpySpec *sess = fetchSessions( lstRemote | lstTTY ); ++ // it would be nice to show the sessions to suspend, but it ++ // would require string changes (coolo) ++ dpySpec *sess = 0; ++ kdDebug() << "slotSuspend " << _allowSuspend << endl; ++ if (sess || _allowSuspend == SHUT_ROOT) ++ { ++ int ret = KDMConfShutdown( -1, sess, SHUT_SUSPEND, 0 ).exec(); ++ if ( !ret ) ++ return; ++ } ++ ++ int error = 0; ++ int wake = 0; ++ DBusMessage *reply; ++ ++ if (suspend_disk && id == 1) { ++ error = liblazy_dbus_system_send_method_call(DBUS_HAL_INTERFACE, ++ HAL_UDI_COMPUTER, ++ DBUS_HAL_SYSTEM_POWER_INTERFACE, ++ "Hibernate", ++ &reply, ++ DBUS_TYPE_INVALID); ++ } else if (suspend_ram && id == 2) ++ error = liblazy_dbus_system_send_method_call(DBUS_HAL_INTERFACE, ++ HAL_UDI_COMPUTER, ++ DBUS_HAL_SYSTEM_POWER_INTERFACE, ++ "Suspend", ++ &reply, ++ DBUS_TYPE_INT32, ++ &wake, ++ DBUS_TYPE_INVALID); ++ else if (standby && id == 3) ++ error = liblazy_dbus_system_send_method_call(DBUS_HAL_INTERFACE, ++ HAL_UDI_COMPUTER, ++ DBUS_HAL_SYSTEM_POWER_INTERFACE, ++ "Standby", ++ &reply, ++ DBUS_TYPE_INVALID); ++ else { ++ return; ++ } ++} ++ + void + KDMSlimShutdown::slotSched() + { +@@ -601,16 +720,27 @@ KDMConfShutdown::KDMConfShutdown( int _u + if (type == SHUT_CONSOLE) + willShut = false; + #endif ++ QString title; ++ if ( type == SHUT_HALT) ++ title = i18n("Turn Off Computer"); ++ else { ++#ifdef HAVE_VTS ++ if ( type == SHUT_CONSOLE) ++ title = i18n("Switch to Console"); ++ else ++#endif ++ if ( type == SHUT_SUSPEND ) { ++ willSuspend = true; ++ title = i18n( "Suspend Computer" ); ++ } ++ else ++ title = i18n("Restart Computer"); ++ } ++ + box->addWidget( new QLabel( QString( "
" + "%1%2" + "

" ) +- .arg( (type == SHUT_HALT) ? +- i18n("Turn Off Computer") : +-#ifdef HAVE_VTS +- (type == SHUT_CONSOLE) ? +- i18n("Switch to Console") : +-#endif +- i18n("Restart Computer") ) ++ .arg( title ) + .arg( os ? + i18n("
(Next boot: %1)") + .arg( QString::fromLocal8Bit( os ) ) : +Index: kdm/kfrontend/kdmshutdown.h +=================================================================== +--- kdm/kfrontend/kdmshutdown.h.orig ++++ kdm/kfrontend/kdmshutdown.h +@@ -67,7 +67,7 @@ class KDMShutdownBase : public FDialog, + #else + static const bool willShut = true; + #endif +- bool mayNuke, doesNuke, mayOk, maySched; ++ bool mayNuke, doesNuke, mayOk, maySched, willSuspend; + + private slots: + void slotSched(); +@@ -118,7 +118,6 @@ class KDMShutdown : public KDMShutdownBa + QComboBox *targets; + int oldTarget; + int sch_st, sch_to; +- + }; + + class KDMRadioButton : public QRadioButton { +@@ -168,10 +167,13 @@ class KDMSlimShutdown : public FDialog { + void slotReboot(); + void slotReboot( int ); + void slotSched(); ++ void slotSuspend(); ++ void slotSuspend(int); + + private: + bool checkShutdown( int type, const char *os ); + char **targetList; ++ bool suspend_disk, suspend_ram, standby; + + }; + +Index: kdm/kfrontend/Makefile.am +=================================================================== +--- kdm/kfrontend/Makefile.am.orig ++++ kdm/kfrontend/Makefile.am +@@ -4,7 +4,7 @@ GENKDMCONF_FLAGS = + SUBDIRS = themer themes pics sessions + + AM_CPPFLAGS = -I$(srcdir)/../backend -I.. -I$(top_srcdir)/kcontrol/background \ +- -I$(top_srcdir)/kdmlib $(all_includes) ++ -I$(top_srcdir)/kdmlib $(all_includes) $(DBUS_INCS) + + bin_PROGRAMS = kdm_config kdm_greet krootimage genkdmconf kdmctl + +@@ -25,7 +25,7 @@ kdm_greet_SOURCES = \ + kgreeter.cpp \ + kgapp.cpp + kdm_greet_LDFLAGS = $(all_libraries) $(KDE_RPATH) +-kdm_greet_LDADD = themer/libkdmthemer.a $(LIB_KDEUI) $(XTESTLIB) $(LIBPOSIX4) ++kdm_greet_LDADD = themer/libkdmthemer.a $(LIB_KDEUI) $(XTESTLIB) $(LIBPOSIX4) -llazy $(DBUS_LIBS) + + krootimage_SOURCES = krootimage.cpp + krootimage_LDFLAGS = $(all_libraries) $(KDE_RPATH) diff --git a/opensuse/core/tdebase/kdm-sysconfig-values.diff b/opensuse/core/tdebase/kdm-sysconfig-values.diff new file mode 100644 index 000000000..c3b9f8af9 --- /dev/null +++ b/opensuse/core/tdebase/kdm-sysconfig-values.diff @@ -0,0 +1,737 @@ +Index: kdm/config.def +=================================================================== +--- kdm/config.def.orig ++++ kdm/config.def +@@ -792,6 +792,21 @@ Description: + Do not change it, you may interfere with future + upgrades and this could result in &kdm; failing to run. + ++Key: SUSEConfigVersion ++Type: string ++Default: "" ++CDefault: - ++User: dummy ++# will be overwritten ++Instance: ++Comment: ++ This option exists solely for the purpose of a clean automatic upgrade. ++ Do not even think about changing it! ++Description: ++ This option exists solely for the purpose of clean automatic upgrades. ++ Do not change it, you may interfere with future ++ upgrades and this could result in &kdm; failing to run. ++ + Key: PAMService + If: defined(USE_PAM) + Type: string +@@ -874,10 +889,10 @@ Description: + + Key: PidFile + Type: string +-Default: "" ++Default: "/var/run/kdm.pid" + User: core +-Instance: "/var/run/kdm.pid" +-Merge: xdm ++Instance: "" ++Update: reset_sec_0_1 + Comment: + Where &kdm; should store its PID (do not store if empty). + Description: +@@ -901,10 +916,10 @@ Description: + Key: AuthDir + Type: path + # differs from XDM +-Default: "/var/run/xauth" ++Default: "/var/lib/xdm/authdir/authfiles" + User: core +-Instance: #"/tmp" +-Merge: xdm(P_authDir) ++Instance: #"" ++Update: reset_sec_0_1 + Comment: + Where to store authorization files. + Description: +@@ -930,7 +945,7 @@ Description: + + Key: ExportList + Type: list +-Default: "" ++Default: "LANG,XCURSOR_THEME" + User: core + Instance: #"LD_LIBRARY_PATH,ANOTHER_IMPORTANT_VAR" + Merge: xdm(P_List) +@@ -1063,9 +1078,10 @@ Description: + + Key: Enable + Type: bool +-Default: true ++Default: false + User: dep(xdmcpEnable) + Instance: false ++Update: reset_sec_0_1 + Comment: & + Description: + Whether &kdm; should listen to incoming &XDMCP; requests. +@@ -1102,11 +1118,10 @@ Description: + Key: Xaccess + Type: string + # differs from xdm +-Default: *KDMCONF "/Xaccess" ++Default: *"/etc/X11/xdm/Xaccess" + User: config(Xaccess) +-Instance: #"" +-Update: mk_xaccess +-Merge: xdm:accessFile ++Instance: # ++Update: reset_sec_0_1 + Comment: + &XDMCP; access control file in the usual XDM-Xaccess format. + Description: +@@ -1164,13 +1179,11 @@ Description: + + Key: Willing + Type: string +-Default: "" ++Default: "/etc/X11/xdm/Xwilling" + User: core + # will be overwritten + Instance: # +-Update: mk_willing +-Merge: xdm +-Merge: kdm:Xwilling ++Update: reset_sec_0_1 + Comment: + The program which is invoked to dynamically generate replies to &XDMCP; + DirectQuery or BroadcastQuery requests. +@@ -1244,7 +1257,7 @@ Type: enum + None/BO_NONE: no boot manager + Grub/BO_GRUB: Grub boot manager + Lilo/BO_LILO: Lilo boot manager (Linux on i386 & x86-64 only) +-Default: None ++Default: Grub + User: core + User: greeter + Instance: #Grub +@@ -1347,6 +1360,7 @@ Default: DEF_SERVER_CMD + DDefault: - + User: core + Instance: :*/DEF_SERVER_CMD ++Update: reset_sec_0_1 + Comment: + The command line to start the &X-Server;, without display number and VT spec. + This string is subject to word splitting. +@@ -1355,7 +1369,7 @@ Description: + This string is subject to word splitting. + + The default is something reasonable for the system on which &kdm; was built, +- like /usr/X11R6/bin/X. ++ like /usr/bin/X. + + Key: ServerArgsLocal + Type: string +@@ -1549,11 +1563,10 @@ Description: + Key: Resources + # XXX strictly speaking this is supposed to be a string list, i think. + Type: string +-Default: "" ++Default: "/etx/X11/xdm/Xresources" + User: core + Instance: #*/"" +-Update: cp_resources +-Merge: xdm ++Update: reset_sec_0_1 + Comment: + Specify a file with X-resources for the greeter, chooser and background. + The KDE frontend does not use this file, so you do not need it unless you +@@ -1581,12 +1594,11 @@ Description: + + Key: Setup + Type: string +-Default: "" ++Default: "/etc/X11/xdm/Xsetup" + User: core + # will be overwritten + Instance: #*/"" +-Update: mk_setup +-Merge: xdm ++Update: reset_sec_0_1 + Comment: + A program to run before the greeter is shown. Can be used to start an + xconsole or an alternative background generator. Subject to word splitting. +@@ -1602,12 +1614,11 @@ Description: + + Key: Startup + Type: string +-Default: "" ++Default: "/etc/X11/xdm/Xstartup" + User: core + # will be overwritten + Instance: #*/"" +-Update: mk_startup +-Merge: xdm ++Update: reset_sec_0_1 + Comment: + A program to run before a user session starts. Subject to word splitting. + Description: +@@ -1620,12 +1631,11 @@ Description: + + Key: Reset + Type: string +-Default: "" ++Default: "/etc/X11/xdm/Xreset" + User: core + # will be overwritten + Instance: #*/"" +-Update: mk_reset +-Merge: xdm ++Update: reset_sec_0_1 + Comment: + A program to run after a user session exits. Subject to word splitting. + Description: +@@ -1638,12 +1648,12 @@ Description: + + Key: Session + Type: string +-Default: XBINDIR "/xterm -ls -T" ++Default: "/etc/X11/xdm/Xsession" + #Merge: xdm - incompatible! + User: core + # will be overwritten + Instance: #*/"" +-Update: mk_session ++Update: reset_sec_0_1 + Comment: + The program which is run as the user which logs in. It is supposed to + interpret the session argument (see SessionsDirs) and start an appropriate +@@ -1746,10 +1756,11 @@ Description: + + Key: AllowRootLogin + Type: bool +-Default: true ++Default: false + User: core + User: greeter(showRoot) +-Instance: */false ++Instance: #*/false ++Update: reset_sec_1_2 + Merge: xdm + Comment: + Allow root logins? +@@ -1764,6 +1775,7 @@ User: core + # sensible? + Instance: */false + Instance: :*/true ++Update: reset_sec_0_1 + Merge: xdm + Comment: + Allow to log in, when user has set an empty password? +@@ -1775,12 +1787,13 @@ Type: enum + None/SHUT_NONE: no Shutdown... menu entry is shown at all + Root/SHUT_ROOT: the root password must be entered to shut down + All/SHUT_ALL: everybody can shut down the machine +-Default: All ++Default: Root + User: core + User: greeter + Instance: */Root +-Instance: :*/All +-Merge: kdm:-Greeter/ ++Instance: #:*/All ++Update: reset_sec_0_1 ++#Merge: kdm:-Greeter/ + Comment: & + Description: + Who is allowed to shut down the system. This applies both to the +@@ -1866,6 +1879,7 @@ Type: bool + Default: false + User: dep + Instance: #:0/true ++Update: reset_sec_0_1 + Comment: & + Description: + Enable automatic login. Use with extreme care! +@@ -1899,7 +1913,7 @@ Default: "" + PostProc: PautoLoginX + User: core(autoUser) + User: greeter +-Instance: #:0/"fred" ++Instance: #:0/"" + Merge: xdm:autoUser(P_autoUser) + Comment: & + Description: +@@ -1930,10 +1944,10 @@ Description: + + Key: SessionsDirs + Type: list +-Default: KDMDATA "/sessions" ++Default: "/etc/X11/sessions," KDMDATA "/sessions,/usr/share/xsessions" + User: core + User: greeter-c +-Instance: #*/"/etc/X11/sessions,/usr/share/xsessions" ++Instance: #*/"" + Comment: + The directories containing session type definitions in .desktop format. + Description: +@@ -2008,7 +2022,8 @@ Type: enum + Clock/LOGO_CLOCK: a neat analog clock + Default: Clock + User: greeter +-Instance: */Logo ++Instance: */Clock ++Update: reset_sec_0_1 + Comment: + What should be shown in the greeter's logo are: + Description: +@@ -2223,7 +2238,7 @@ Description: + + Key: HiddenUsers + Type: list +-Default: "" ++Default: "root" + User: greeter-c(noUsers) + Instance: #*/"root" + # depends on {Min,Max}ShowUID +@@ -2363,13 +2378,14 @@ Type: enum + Default: OneStar + User: greeter + Instance: #*/NoEcho ++Update: reset_sec_0_1 + Comment: & + Description: + The password input fields cloak the typed in text. Specify, how to do it: + + Key: UseBackground + Type: bool +-Default: true ++Default: false + User: greeter + Instance: #*/! + Comment: +@@ -2507,6 +2523,7 @@ Type: bool + Default: false + User: greeter + Instance: :0/true ++Update: reset_sec_0_1 + Comment: + Enable &kdm;'s built-in xconsole. Note that this can be enabled for only + one display at a time. +@@ -2595,9 +2612,10 @@ Description: + + Key: Preloader + Type: string +-Default: "" ++Default: KDE_BINDIR "/preloadkde" + User: greeter-c +-Instance: */KDE_BINDIR "/preloadkde" ++Instance: */"" ++Update: reset_sec_0_1 + Comment: & + Description: + A program to run while the greeter is visible. It is supposed to preload +@@ -2606,7 +2624,7 @@ Description: + + Key: UseTheme + Type: bool +-Default: false ++Default: true + User: greeter + Instance: #*/true + Comment: & +@@ -2615,9 +2633,10 @@ Description: + + Key: Theme + Type: string +-Default: "" ++Default: KDMDATA "/themes/SUSE" + User: greeter +-Instance: */KDMDATA "/themes/circles" ++Instance: */"" ++Update: reset_sec_0_1 + Comment: & + Description: + The theme to use for the greeter. Can point to either a directory or an XML +Index: kdm/kfrontend/read_sysconfig.sh +=================================================================== +--- /dev/null ++++ kdm/kfrontend/read_sysconfig.sh +@@ -0,0 +1,147 @@ ++#!/bin/bash ++# ++# Copyright (c) 2006 SUSE Linux Products GmbH Nuernberg, Germany. ++# ++# Author: Stephan Kulow ++# ++ ++# ++# check if we are started as root ++# only one of UID and USER must be set correctly ++# ++if test "$UID" != 0 -a "$USER" != root; then ++ echo "You must be root to start $0." ++ exit 1 ++fi ++ ++# ++# check for sysconfig/displaymanager or rc.config ++# ++test -f /etc/sysconfig/displaymanager && source /etc/sysconfig/displaymanager ++test -f /etc/sysconfig/security && source /etc/sysconfig/security ++test -f /etc/sysconfig/language && source /etc/sysconfig/language ++ ++# ++# source /etc/profile to get $kdedir ++# ++kdedir="/opt/kde3" ++kdmdir="/var/adm/kdm" ++ ++# check for write permissions ++[ -w ${kdmdir} ] || mkdir -p ${kdmdir} ++[ -w ${kdmdir} ] || exit ++ ++# ++# Set Style of Shutdown ++# ++ECHO_MODE="OneStar" ++ALLOW_ROOT_LOGIN="true" ++case "$DISPLAYMANAGER_SHUTDOWN" in ++ all|ALL|All) ++ DISPLAYMANAGER_SHUTDOWN=All;; ++ none|NONE|None) ++ DISPLAYMANAGER_SHUTDOWN=None;; ++ auto|Auto|AUTO) ++ case "$PERMISSION_SECURITY" in ++ *easy*) ++ DISPLAYMANAGER_SHUTDOWN=All ++ ;; ++ *paranoid*) ++ ECHO_MODE="NoEcho" ++ ALLOW_ROOT_LOGIN="false" ++ DISPLAYMANAGER_SHUTDOWN=Root ++ ;; ++ *) ++ DISPLAYMANAGER_SHUTDOWN=Root ++ ;; ++ esac ++ ;; ++ * ) ++ DISPLAYMANAGER_SHUTDOWN=Root;; ++esac ++ ++( ++echo "[X-*-Greeter]" ++if [ -n "$KDM_USERS" ]; then ++ echo "ShowUsers=Selected" ++ echo -n "SelectedUsers=" ++ echo ${KDM_USERS}|sed -e 's@ [ ]*@ @g' -e 's@ @,@g' ++else ++ echo "ShowUsers=NotHidden" ++fi ++if [ "$DISPLAYMANAGER_AD_INTEGRATION" = "yes" ]; then ++ echo "PluginsLogin=winbind" ++fi ++if [ -n "$DISPLAYMANAGER_KDM_THEME" -a -d "/opt/kde3/share/apps/kdm/themes/$DISPLAYMANAGER_KDM_THEME" ]; then ++ echo "Theme=/opt/kde3/share/apps/kdm/themes/$DISPLAYMANAGER_KDM_THEME" ++ echo "UseTheme=true" ++ echo "UseBackground=false" ++else ++ echo "UseTheme=false" ++ echo "UseBackground=true" ++fi ++# kdm has en_US as default instead of simply reading LC_LANG :( ++echo "Language=" ++ ++echo "[Xdmcp]" ++if [ "$DISPLAYMANAGER_REMOTE_ACCESS" = "yes" ]; then ++ echo "Enable=true" ++else ++ echo "Enable=false" ++fi ++ ++echo "[X-:0-Core]" ++if [ "$DISPLAYMANAGER_AUTOLOGIN" ]; then ++ echo "AutoLoginEnable=true" ++ echo "AutoLoginUser=${DISPLAYMANAGER_AUTOLOGIN}" ++else ++ echo "AutoLoginEnable=false" ++fi ++if [ "$DISPLAYMANAGER_XSERVER_TCP_PORT_6000_OPEN" = "yes" ]; then ++ echo "ServerArgsLocal=" ++else ++ echo "ServerArgsLocal=-nolisten tcp" ++fi ++if [ "$DISPLAYMANAGER_PASSWORD_LESS_LOGIN" = "yes" ]; then ++ echo "NoPassEnable=true" ++ echo "NoPassAllUsers=true" ++else ++ echo "NoPassEnable=false" ++ echo "NoPassAllUsers=false" ++fi ++ ++echo "[X-:*-Core]" ++echo "AllowShutdown=${DISPLAYMANAGER_SHUTDOWN}" ++echo "AllowRootLogin=${ALLOW_ROOT_LOGIN}" ++echo "AllowNullPasswd=${ALLOW_ROOT_LOGIN}" ++ ++echo "[X-*-Core]" ++ ++if test "$DISPLAYMANAGER_ROOT_LOGIN_REMOTE" = "yes"; then ++ echo "AllowRootLogin=true" ++else ++ echo "AllowRootLogin=false" ++fi ++ ++case "$DISPLAYMANAGER_XSERVER" in ++ Xgl) ++ xgl=`type -p Xgl` ++ echo "ServerCmd=$xgl $DISPLAYMANAGER_XGL_OPTS -br" ++ echo "ServerTimeout=50" ++ ;; ++ Xorg) ++ xorg=`type -p Xorg` ++ echo "ServerCmd=$xorg -br" ++ ;; ++ *) ++ echo "#Unknown X server - leaving X" ++ ;; ++esac ++ ++echo "[General]" ++if [ "$DISPLAYMANAGER_STARTS_XSERVER" != "yes" ]; then ++ echo "StaticServers=" ++fi ++ ++) > ${kdmdir}/kdmrc.sysconfig ++ +Index: kdm/kfrontend/kdm_config.c +=================================================================== +--- kdm/kfrontend/kdm_config.c.orig ++++ kdm/kfrontend/kdm_config.c +@@ -386,7 +386,7 @@ static const char *kdmrc = KDMCONF "/kdm + static Section *rootsec; + + static void +-ReadConf() ++ReadConfFile(const char *rcfile) + { + const char *nstr, *dstr, *cstr, *dhost, *dnum, *dclass; + char *s, *e, *st, *en, *ek, *sl, *pt; +@@ -396,14 +396,9 @@ ReadConf() + int nlen, dlen, clen, dhostl, dnuml, dclassl; + int i, line, sectmoan, restl; + File file; +- static int confread; + +- if (confread) +- return; +- confread = 1; +- +- Debug( "reading config %s ...\n", kdmrc ); +- if (!readFile( &file, kdmrc, "master configuration" )) ++ Debug( "reading config %s ...\n", rcfile ); ++ if (!readFile( &file, rcfile, "master configuration" )) + return; + + for (s = file.buf, line = 0, cursec = 0, sectmoan = 1; s < file.eof; s++) { +@@ -429,7 +424,7 @@ ReadConf() + e--; + if (*e != ']') { + cursec = 0; +- LogError( "Invalid section header at %s:%d\n", kdmrc, line ); ++ LogError( "Invalid section header at %s:%d\n", rcfile, line ); + continue; + } + nstr = sl + 1; +@@ -438,8 +433,8 @@ ReadConf() + if (nlen == cursec->nlen && + !memcmp( nstr, cursec->name, nlen )) + { +- LogInfo( "Multiple occurrences of section [%.*s] in %s. " +- "Consider merging them.\n", nlen, nstr, kdmrc ); ++ Debug( "Multiple occurrences of section [%.*s] in %s. " ++ "Consider merging them.\n", nlen, nstr, rcfile ); + goto secfnd; + } + if (nstr[0] == 'X' && nstr[1] == '-') { +@@ -495,7 +490,7 @@ ReadConf() + illsec: + cursec = 0; + LogError( "Unrecognized section name [%.*s] at %s:%d\n", +- nlen, nstr, kdmrc, line ); ++ nlen, nstr, rcfile, line ); + continue; + newsec: + if (!(cursec = Malloc( sizeof(*cursec) ))) +@@ -523,7 +518,7 @@ ReadConf() + if (!cursec) { + if (sectmoan) { + sectmoan = 0; +- LogError( "Entry outside any section at %s:%d", kdmrc, line ); ++ LogError( "Entry outside any section at %s:%d", rcfile, line ); + } + goto sktoeol; + } +@@ -531,13 +526,13 @@ ReadConf() + for (; (s < file.eof) && (*s != '\n'); s++) + if (*s == '=') + goto haveeq; +- LogError( "Invalid entry (missing '=') at %s:%d\n", kdmrc, line ); ++ LogError( "Invalid entry (missing '=') at %s:%d\n", rcfile, line ); + continue; + + haveeq: + for (ek = s - 1; ; ek--) { + if (ek < sl) { +- LogError( "Invalid entry (empty key) at %s:%d\n", kdmrc, line ); ++ LogError( "Invalid entry (empty key) at %s:%d\n", rcfile, line ); + goto sktoeol; + } + if (!isspace( *ek )) +@@ -551,7 +546,7 @@ ReadConf() + if (*s == '\\') { + s++; + if (s >= file.eof || *s == '\n') { +- LogError( "Trailing backslash at %s:%d\n", kdmrc, line ); ++ LogError( "Trailing backslash at %s:%d\n", rcfile, line ); + break; + } + switch (*s) { +@@ -580,29 +575,42 @@ ReadConf() + goto keyok; + } + LogError( "Unrecognized key '%.*s' in section [%.*s] at %s:%d\n", +- nlen, nstr, cursec->nlen, cursec->name, kdmrc, line ); ++ nlen, nstr, cursec->nlen, cursec->name, rcfile, line ); + continue; + keyok: + for (curent = cursec->entries; curent; curent = curent->next) + if (ce == curent->ent) { + LogError( "Multiple occurrences of key '%s' in section [%.*s]" + " of %s\n", +- ce->name, cursec->nlen, cursec->name, kdmrc ); ++ ce->name, cursec->nlen, cursec->name, rcfile ); + goto keyfnd; + } + if (!(curent = Malloc( sizeof(*curent) ))) + return; ++ curent->next = cursec->entries; ++ cursec->entries = curent; ++ keyfnd: + curent->ent = ce; + curent->line = line; + curent->val = st; + curent->vallen = en - st; +- curent->next = cursec->entries; +- cursec->entries = curent; +- keyfnd: + continue; + } + } + ++static void ReadConf() ++{ ++ static int confread = 0; ++ ++ if (confread) ++ return; ++ confread++; ++ ++ system("/opt/kde3/share/apps/kdm/read_sysconfig.sh"); ++ ReadConfFile("/var/adm/kdm/kdmrc.sysconfig"); ++ ReadConfFile(kdmrc); ++} ++ + static Entry * + FindGEnt( int id ) + { +Index: kdm/kfrontend/genkdmconf.c +=================================================================== +--- kdm/kfrontend/genkdmconf.c.orig ++++ kdm/kfrontend/genkdmconf.c +@@ -66,6 +66,7 @@ Foundation, Inc., 51 Franklin Street, Fi + #define stringify(x) __stringify(x) + + #define RCVERSTR stringify(RCVERMAJOR) "." stringify(RCVERMINOR) ++#define SUSERCVERSTR "2" + + static int old_scripts, no_old_scripts, old_confs, no_old, + no_backup, no_in_notice, use_destdir, mixed_scripts; +@@ -73,7 +74,7 @@ static const char *newdir = KDMCONF, *fa + *oldxdm, *oldkde; + + static int oldver; +- ++static int oldsusever; + + typedef struct StrList { + struct StrList *next; +@@ -462,6 +463,7 @@ wrconf( FILE *f ) + const char *cmt; + + putfqval( "General", "ConfigVersion", RCVERSTR ); ++ putfqval( "General", "SUSEConfigVersion", SUSERCVERSTR ); + for (cs = config; cs; cs = cs->next) { + fprintf( f, "%s[%s]\n", + cs->comment ? cs->comment : "\n", cs->name ); +@@ -1363,6 +1365,26 @@ upd_consolettys( Entry *ce, Section *cs + } + #endif + ++static void ++reset_sec_0_1( Entry *ce, Section *cs ATTR_UNUSED ) ++{ ++ if (oldsusever < 1 || !ce->written ) ++ { ++ ce->active = 0; ++ } ++ return; ++} ++ ++static void ++reset_sec_1_2( Entry *ce, Section *cs ATTR_UNUSED ) ++{ ++ if (oldsusever < 2 || !ce->written ) ++ { ++ ce->active = 0; ++ } ++ return; ++} ++ + #ifdef XDMCP + static void + cp_keyfile( Entry *ce, Section *cs ATTR_UNUSED ) +@@ -2228,7 +2250,7 @@ static int + mergeKdmRcNewer( const char *path ) + { + char *p; +- const char *cp, *sec, *key; ++ const char *cp, *sec, *key, *susever; + RSection *rootsect, *cs; + REntry *ce; + int i, j; +@@ -2291,8 +2313,12 @@ mergeKdmRcNewer( const char *path ) + } + + #ifdef XDMCP +- applydefs( kdmdefs_all, as(kdmdefs_all), path ); ++ /* applydefs( kdmdefs_all, as(kdmdefs_all), path ); */ + #endif ++ susever = getfqval( "General", "SUSEConfigVersion", "" ); ++ if (sscanf( susever, "%u", &oldsusever ) != 1) ++ oldsusever = 0; ++ + if (!*(cp = getfqval( "General", "ConfigVersion", "" ))) { /* < 3.1 */ + mod_usebg = 1; + if (is22conf( path )) { +Index: kdm/kfrontend/Makefile.am +=================================================================== +--- kdm/kfrontend/Makefile.am.orig ++++ kdm/kfrontend/Makefile.am +@@ -64,3 +64,7 @@ kdm_greet_COMPILE_FIRST = ../config.ci + kdm_config_COMPILE_FIRST = ../config.ci + genkdmconf_COMPILE_FIRST = ../config.ci + ++ ++appsdir = $(kde_datadir)/kdm ++apps_SCRIPTS = read_sysconfig.sh ++ diff --git a/opensuse/core/tdebase/kdm-use-rpmoptflags.diff b/opensuse/core/tdebase/kdm-use-rpmoptflags.diff new file mode 100644 index 000000000..85a03e02b --- /dev/null +++ b/opensuse/core/tdebase/kdm-use-rpmoptflags.diff @@ -0,0 +1,29 @@ +Index: kdm/backend/Makefile.am +=================================================================== +--- kdm/backend/Makefile.am.orig ++++ kdm/backend/Makefile.am +@@ -1,11 +1,6 @@ + # forcibly remove thread-related defines & flags + AUTOMAKE_OPTIONS = foreign +-CFLAGS = $(XDM_CFLAGS) -fno-strict-aliasing +-CPPFLAGS = $(USER_INCLUDES) $(X_INCLUDES) $(KRB4_INCS) $(KRB5_INCS) -I.. -I../.. +-LDFLAGS = $(USER_LDFLAGS) $(X_LDFLAGS) $(X_RPATH) $(KRB4_RPATH) $(KRB5_RPATH) +-LDADD = $(LIB_X11) -lXau $(LIBXDMCP) $(PASSWDLIBS) $(LIBSHADOW) $(LIBGEN) \ +- $(LIB_LIBS) $(KRB4_LIBS) $(KRB5_LIBS) $(LIBSOCKET) $(LIBRESOLV) \ +- $(LIBUCB) $(LIBUTIL) $(LIBPOSIX4) ++AM_CPPFLAGS = $(USER_INCLUDES) $(X_INCLUDES) $(KRB4_INCS) $(KRB5_INCS) -I.. -I../.. + + bin_PROGRAMS = kdm + kdm_SOURCES = \ +@@ -39,6 +34,11 @@ kdm_SOURCES = \ + xdmauth.c \ + xdmcp.c + ++kdm_LDFLAGS = $(USER_LDFLAGS) $(X_LDFLAGS) $(X_RPATH) $(KRB4_RPATH) $(KRB5_RPATH) ++kdm_LDADD = $(LIB_X11) -lXau $(LIBXDMCP) $(PASSWDLIBS) \ ++ $(LIB_LIBS) $(KRB4_LIBS) $(KRB5_LIBS) $(LIBSOCKET) $(LIBRESOLV) \ ++ $(LIBUCB) $(LIBUTIL) $(LIBPOSIX4) ++ + EXTRA_DIST = printf.c + + noinst_HEADERS = dm.h dm_socket.h dm_error.h dm_auth.h greet.h diff --git a/opensuse/core/tdebase/kdm-wordbreak.diff b/opensuse/core/tdebase/kdm-wordbreak.diff new file mode 100644 index 000000000..9c50ecdc9 --- /dev/null +++ b/opensuse/core/tdebase/kdm-wordbreak.diff @@ -0,0 +1,22 @@ +Index: kdm/kfrontend/kfdialog.cpp +=================================================================== +--- kdm/kfrontend/kfdialog.cpp.orig ++++ kdm/kfrontend/kfdialog.cpp +@@ -28,6 +28,7 @@ Foundation, Inc., 51 Franklin Street, Fi + #include + #include + #include ++#include + + #include + #include +@@ -137,6 +138,9 @@ KFMsgBox::KFMsgBox( QWidget *parent, QMe + QLabel *label1 = new QLabel( this ); + label1->setPixmap( QMessageBox::standardIcon( type ) ); + QLabel *label2 = new QLabel( text, this ); ++ QRect d = KGlobalSettings::desktopGeometry(this); ++ if ( label2->fontMetrics().size( 0, text).width() > d.width() * 3 / 5) ++ label2->setAlignment(Qt::WordBreak | Qt::AlignAuto ); + KPushButton *button = new KPushButton( KStdGuiItem::ok(), this ); + button->setDefault( true ); + button->setSizePolicy( QSizePolicy( QSizePolicy::Preferred, QSizePolicy::Preferred ) ); diff --git a/opensuse/core/tdebase/kfontinst.diff b/opensuse/core/tdebase/kfontinst.diff new file mode 100644 index 000000000..51c5e59b6 --- /dev/null +++ b/opensuse/core/tdebase/kfontinst.diff @@ -0,0 +1,10 @@ +--- kcontrol/kfontinst/kfontinst/Main.cpp ++++ kcontrol/kfontinst/kfontinst/Main.cpp 2004/01/27 08:43:25 +@@ -80,6 +80,7 @@ + QStringList::ConstIterator xftIt; + + for(xftIt=CGlobal::cfg().getUserFontsDirs().begin(); xftIt!=CGlobal::cfg().getUserFontsDirs().end(); ++xftIt) ++ CMisc::doCmd("/sbin/conf.d/SuSEconfig.fonts", "--module", "fonts"); + CMisc::doCmd(XFT_CACHE_CMD, CMisc::xDirSyntax(*xftIt)); + #else + CMisc::doCmd(XFT_CACHE_CMD, CMisc::xDirSyntax(ds)); diff --git a/opensuse/core/tdebase/khelpcenter-beagle.diff b/opensuse/core/tdebase/khelpcenter-beagle.diff new file mode 100644 index 000000000..6b4314e6a --- /dev/null +++ b/opensuse/core/tdebase/khelpcenter-beagle.diff @@ -0,0 +1,172 @@ +Index: khelpcenter/searchhandlers/khc_beagle_search.pl +=================================================================== +--- /dev/null ++++ khelpcenter/searchhandlers/khc_beagle_search.pl +@@ -0,0 +1,88 @@ ++#!/usr/bin/perl -w ++# vim:sw=4:et ++ ++use warnings; ++use strict; ++use Getopt::Long; ++ ++sub isBeagleRunning() ++{ ++ open(IN, "-|") || exec "beagle-ping"; ++ while() { ++ if (/^Daemon version:/) { ++ close(IN); ++ return 1; ++ } ++ } ++ close(IN); ++ return 0; ++} ++ ++sub formatHTML($$) ++{ ++ my ($query, $hits) = @_; ++ ++ print "\n\n"; ++ ++ foreach my $hit(@$hits) { ++ print "
  • $hit
  • \n"; ++ } ++ print "\n\n\n"; ++} ++ ++sub beagleQuery($$$) ++{ ++ my ($words, $method, $maxnum) = @_; ++ ++ my @hits = (); ++ ++ open(IN, "-|") || exec "beagle-query", "--type", "DocbookEntry", "--type", "File", "--max-hits", $maxnum, @$words, "ext:docbook"; ++ while() { ++ chop; ++ next if (/^Debug:/); ++ ++ my $uri = $_; ++ $uri = $1 if ($uri =~ /^file:\/\/(.*)$/); ++ ++ print "uri: $uri\n"; ++ my $helpLink = &makeHelpLink($uri); ++ ++ push(@hits, $helpLink) if (!grep { /^$helpLink$/ } @hits); ++ } ++ close(IN); ++ return @hits; ++} ++ ++sub makeHelpLink($) ++{ ++ # Try to figure out the name of the application from the path to its index.docbook file ++ ++ my ($path) = @_; ++ my @pathcomponents = split '/', $path; ++ ++ my $appName = $pathcomponents[-2]; ++ my $appName2 = $pathcomponents[-3]; ++ ++ if ($appName eq $appName2 or $appName2 eq "doc" ++ or (-d "/usr/share/locale/$appName2")) { ++ return "$appName"; ++ } ++ return "$appName ($appName2)"; ++} ++ ++my $method = "and"; ++my $maxnum = 100; ++ ++GetOptions("method=s", \$method, "maxnum=i", \$maxnum); ++ ++my @hits = ("The Beagle daemon is not running, search is not available"); ++ ++my @words = @ARGV; ++ ++if (isBeagleRunning()) { ++ @hits = beagleQuery(\@words, $method, $maxnum); ++} ++ ++@hits = ("There are no search results") if ($#hits < 0); ++ ++formatHTML(\@words, \@hits); +Index: khelpcenter/searchhandlers/khc_beagle_index.pl +=================================================================== +--- /dev/null ++++ khelpcenter/searchhandlers/khc_beagle_index.pl +@@ -0,0 +1,49 @@ ++#!/usr/bin/perl ++# vim:sw=4:et ++ ++use warnings; ++ ++sub getKDEDocDir() ++{ ++ my $prefix = `kde-config --prefix`; ++ chomp $prefix; ++ ++ $prefix = "/opt/kde" if (not defined($prefix)); ++ return "$prefix/share/doc"; ++} ++ ++sub addRoot() ++{ ++ my $kdedocdir = &getKDEDocDir; ++ ++ open (IN, "-|") || exec "beagle-config", "indexing", "ListRoots"; ++ ++ my $kdedoc_found = 0; ++ while() { ++ if (/^$kdedocdir/o) { ++ $kdedoc_found = 1; ++ last; ++ } ++ } ++ close(IN); ++ ++ if (not $kdedoc_found) { ++ `beagle-config indexing AddRoot $kdedocdir`; ++ `beagle-config indexing AddRoot $kdedocdir-bundle`; ++ } ++} ++ ++sub createExistsFile($$) ++{ ++ my ($idir, $ident) = @_; ++ ++ open(OUT, ">", "$idir/$idir"); ++ close(OUT); ++} ++ ++my $idir = $ARGV[0]; ++my $ident = $ARGV[1]; ++ ++if (addRoot) { ++ createExistsFile($idir, $ident); ++} +Index: khelpcenter/searchhandlers/docbook.desktop +=================================================================== +--- khelpcenter/searchhandlers/docbook.desktop.orig ++++ khelpcenter/searchhandlers/docbook.desktop +@@ -2,5 +2,5 @@ + + DocumentTypes=text/docbook + +-SearchCommand=khc_htsearch.pl --docbook --indexdir=%d --config=%i --words=%w --method=%o --maxnum=%m --lang=en +-IndexCommand=khc_docbookdig.pl --indexdir=%d --docpath=%p --identifier=%i ++SearchCommand=khc_beagle_search.pl --method=%o --maxnum=%m %w ++IndexCommand=khc_beagle_index.pl %d %i +Index: khelpcenter/searchhandlers/Makefile.am +=================================================================== +--- khelpcenter/searchhandlers/Makefile.am.orig ++++ khelpcenter/searchhandlers/Makefile.am +@@ -3,7 +3,7 @@ searchhandlers_DATA = htdig.desktop man. + searchhandlersdir = $(kde_datadir)/khelpcenter/searchhandlers + + kde_bin_SCRIPTS = khc_htdig.pl khc_htsearch.pl khc_mansearch.pl \ +- khc_docbookdig.pl ++ khc_docbookdig.pl khc_beagle_search.pl khc_beagle_index.pl + + htdigdata_DATA = htdig_long.html + diff --git a/opensuse/core/tdebase/khelpcenter-delayed-indexcheck.cpp b/opensuse/core/tdebase/khelpcenter-delayed-indexcheck.cpp new file mode 100644 index 000000000..37c3f195c --- /dev/null +++ b/opensuse/core/tdebase/khelpcenter-delayed-indexcheck.cpp @@ -0,0 +1,23 @@ +Index: khelpcenter/navigator.cpp +=================================================================== +--- khelpcenter/navigator.cpp.orig ++++ khelpcenter/navigator.cpp +@@ -121,8 +121,6 @@ Navigator::Navigator( View *view, QWidge + + mTabWidget = new QTabWidget( this ); + topLayout->addWidget( mTabWidget ); +- connect( mTabWidget, SIGNAL( currentChanged( QWidget * ) ), +- SLOT( slotTabChanged( QWidget * ) ) ); + + setupContentsTab(); + setupGlossaryTab(); +@@ -136,6 +134,9 @@ Navigator::Navigator( View *view, QWidge + mSearchWidget->updateScopeList(); + mSearchWidget->readConfig( KGlobal::config() ); + } ++ ++ connect( mTabWidget, SIGNAL( currentChanged( QWidget * ) ), ++ SLOT( slotTabChanged( QWidget * ) ) ); + } + + Navigator::~Navigator() diff --git a/opensuse/core/tdebase/khelpcenter-gnome-support-legacy.patch b/opensuse/core/tdebase/khelpcenter-gnome-support-legacy.patch new file mode 100644 index 000000000..fb9a11ee4 --- /dev/null +++ b/opensuse/core/tdebase/khelpcenter-gnome-support-legacy.patch @@ -0,0 +1,327 @@ +Index: khelpcenter/table-of-contents.xslt +================================================================================ +--- khelpcenter/docentry.cpp ++++ khelpcenter/docentry.cpp +@@ -1,5 +1,6 @@ + #include + #include ++#include + + #include + #include +@@ -206,6 +207,37 @@ + { + KDesktopFile file( fileName ); + ++ static QString desktop; ++ if (desktop.isNull()) { ++ QString win_man = getenv("WINDOWMANAGER"); ++ if (win_man.contains ("gnome", FALSE)) ++ desktop = "GNOME"; ++ else if (win_man.contains ("kde", FALSE)) ++ desktop = "KDE"; ++ else ++ desktop = ""; ++ kdDebug() << "DocEntry::desktop = " << desktop << endl; ++ }; ++ ++ QString onlyShowIn = file.readEntry ("OnlyShowIn"); ++ ++ kdDebug() << "DocEntry::readFromFile(): " << fileName << " onlyShowIn = " << onlyShowIn << endl; ++ ++ if ( !onlyShowIn.isNull() ) { ++ if (desktop.isEmpty()) ++ return false; ++ QStringList list = QStringList::split (";", onlyShowIn); ++ if ( ! list.contains (desktop) ) ++ return false; ++ } ++ ++ QString notShowIn = file.readEntry ("NotShowIn"); ++ if ( !notShowIn.isNull() ) { ++ QStringList list = QStringList::split (";", notShowIn); ++ if ( list.contains (desktop) ) ++ return false; ++ } ++ + mName = file.readName(); + mSearch = file.readEntry( "X-DOC-Search" ); + mIcon = file.readIcon(); +--- khelpcenter/navigator.cpp ++++ khelpcenter/navigator.cpp +@@ -22,6 +22,7 @@ + #include + #include + #include ++#include + + #include + #include +@@ -275,6 +276,38 @@ + const QString &file ) + { + KDesktopFile desktopFile( file ); ++ ++ static QString desktop; ++ if (desktop.isNull()) { ++ QString win_man = getenv("WINDOWMANAGER"); ++ if (win_man.contains ("gnome", FALSE)) ++ desktop = "GNOME"; ++ else if (win_man.contains ("kde", FALSE)) ++ desktop = "KDE"; ++ else ++ desktop = ""; ++ kdDebug() << "Navigator::desktop = " << desktop << endl; ++ }; ++ ++ QString onlyShowIn = desktopFile.readEntry ("OnlyShowIn"); ++ ++ kdDebug() << "Navigator::createItemFromDesktopFile(): " << file << " onlyShowIn = " << onlyShowIn << endl; ++ ++ if ( !onlyShowIn.isNull() ) { ++ if (desktop.isEmpty()) ++ return; ++ QStringList list = QStringList::split (";", onlyShowIn); ++ if ( ! list.contains (desktop) ) ++ return; ++ } ++ ++ QString notShowIn = desktopFile.readEntry ("NotShowIn"); ++ if ( !notShowIn.isNull() ) { ++ QStringList list = QStringList::split (";", notShowIn); ++ if ( list.contains (desktop) ) ++ return; ++ } ++ + QString docPath = desktopFile.readDocPath(); + if ( !docPath.isNull() ) { + // First parameter is ignored if second is an absolute path +@@ -317,6 +350,9 @@ + { + alternativeURL.setQuery("anchor="+url.ref()); + alternativeURL.setRef(QString::null); ++ } else if (url.url().endsWith("/index.html")) ++ { ++ alternativeURL = KURL (url.url().left (url.url().length() - strlen ("/index.html"))); + } + + // If the navigator already has the given URL selected, do nothing. +@@ -401,15 +437,43 @@ + TOC *tocTree = item->createTOC(); + kdDebug( 1400 ) << "slotItemSelected(): Trying to build TOC for " + << item->entry()->name() << endl; +- tocTree->setApplication( url.directory() ); ++ if (url.directory() != "/") ++ tocTree->setApplication( url.directory() ); ++ else ++ tocTree->setApplication( url.path() ); + QString doc = View::langLookup( url.path() ); + // Enforce the original .docbook version, in case langLookup returns a + // cached version + if ( !doc.isNull() ) { +- int pos = doc.find( ".html" ); +- if ( pos >= 0 ) { +- doc.replace( pos, 5, ".docbook" ); +- } ++ if (doc.endsWith( ".html" )) { ++ doc = doc.left (doc.length() - 5) + ".docbook"; ++ } ++ ++ QFileInfo di (doc); ++ if (!di.isFile()) { ++ ++ int last_slash = doc.findRev ('/'); ++ if (last_slash >= 1) { ++ ++ QString filename = doc.right(doc.length() - last_slash - 1); ++ if (filename == "index.html" || filename == "") { ++ ++ int slash2 = doc.findRev('/', last_slash -1); ++ if (slash2 != -1 && slash2 != 0) { ++ ++ int slash3 = doc.findRev('/', slash2 - 1); ++ if (slash3 != -1) { ++ QString xml_file = doc.left(last_slash) + "/" + doc.mid(slash3 + 1, slash2 - (slash3 + 1)) + ".xml"; ++ kdDebug() << "xml_file " << xml_file << endl; ++ QFileInfo fi(xml_file); ++ if (fi.exists()) ++ doc = xml_file; ++ ++ } ++ } ++ } ++ } ++ } + kdDebug( 1400 ) << "slotItemSelected(): doc = " << doc << endl; + + tocTree->build( doc ); +--- khelpcenter/navigatorappitem.cpp ++++ khelpcenter/navigatorappitem.cpp +@@ -21,6 +21,8 @@ + + #include "docentry.h" + ++#include ++ + #include + #include + +@@ -134,11 +136,42 @@ + + QString NavigatorAppItem::documentationURL( KService *s ) + { ++ static QString desktop; ++ if (desktop.isNull()) { ++ QString win_man = getenv("WINDOWMANAGER"); ++ if (win_man.contains ("gnome", FALSE)) ++ desktop = "GNOME"; ++ else if (win_man.contains ("kde", FALSE)) ++ desktop = "KDE"; ++ else ++ desktop = ""; ++ kdDebug() << "NavigatorAppItem::desktop = " << desktop << endl; ++ }; ++ ++ QString onlyShowIn = s->property("OnlyShowIn", QVariant::String).toString(); ++ ++ kdDebug() << "NavigatorAppItem::onlyShowIn = " << onlyShowIn << endl; ++ ++ if ( !onlyShowIn.isNull() ) { ++ if (desktop.isEmpty()) ++ return QString::null; ++ QStringList list = QStringList::split (";", onlyShowIn); ++ if ( ! list.contains (desktop) ) ++ return QString::null; ++ } ++ ++ QString notShowIn = s->property("NotShowIn", QVariant::String).toString(); ++ if ( !notShowIn.isNull() ) { ++ QStringList list = QStringList::split (";", notShowIn); ++ if ( list.contains (desktop) ) ++ return QString::null; ++ } ++ + QString docPath = s->property( "DocPath" ).toString(); + if ( docPath.isEmpty() ) + return QString::null; + +- if ( docPath.startsWith( "file:") || docPath.startsWith( "http:" ) ) ++ if ( docPath.startsWith( "file:") || docPath.startsWith( "http:" ) || docPath.startsWith( "ghelp:" )) + return docPath; + + return QString( "help:/" ) + docPath; +--- khelpcenter/table-of-contents.xslt ++++ khelpcenter/table-of-contents.xslt +@@ -8,6 +8,12 @@ + + + ++ ++ ++ ++ ++ ++ + + + <xsl:value-of select="title"/> +@@ -20,7 +26,15 @@ +
    + <xsl:value-of select="title"/> + ++ +
    +
    + ++ ++ ++<xsl:value-of select="title"/> ++ ++ ++ ++ + +--- khelpcenter/view.cpp ++++ khelpcenter/view.cpp +@@ -146,21 +146,51 @@ + // assemble the local search paths + const QStringList localDoc = KGlobal::dirs()->resourceDirs("html"); + ++ kdDebug() << "Looking up help for: " << fname << endl; ++ ++ QString path; ++ QString file_name; ++ int slash = fname.findRev ('/'); ++ if (slash == -1 || slash == 0) { ++ path = fname; ++ file_name = "/"; ++ } else { ++ path = fname.left (slash); ++ file_name = fname.right (fname.length() - slash); ++ } ++ ++ QStringList langs = KGlobal::locale()->languageList(); ++ QStringList::ConstIterator lang; ++ for (lang = langs.begin(); lang != langs.end(); ++lang) ++ if (*lang == "en") ++ search.append(QString("/opt/gnome/share/gnome/help/%1/C%2").arg(path).arg(file_name)); ++ else ++ search.append(QString("/opt/gnome/share/gnome/help/%1/%2%3").arg(path).arg(*lang).arg(file_name)); ++ ++ langs.append( "en" ); ++ langs.remove( "C" ); ++ ++ // this is kind of compat hack as we install our docs in en/ but the ++ // default language is en_US ++ for (QStringList::Iterator it = langs.begin(); it != langs.end(); ++it) ++ if ( *it == "en_US" ) ++ *it = "en"; ++ + // look up the different languages +- for (int id=localDoc.count()-1; id >= 0; --id) ++ int ldCount = localDoc.count(); ++ for (int id=0; id < ldCount; id++) + { +- QStringList langs = KGlobal::locale()->languageList(); +- langs.append( "en" ); +- langs.remove( "C" ); + QStringList::ConstIterator lang; + for (lang = langs.begin(); lang != langs.end(); ++lang) +- search.append(QString("%1%2/%3").arg(localDoc[id]).arg(*lang).arg(fname)); ++ search.append(QString("%1%2/%3").arg(localDoc[id]).arg(*lang).arg(path + file_name)); + } + + // try to locate the file + QStringList::Iterator it; + for (it = search.begin(); it != search.end(); ++it) + { ++ kdDebug() << "Looking for help in: " << *it << endl; ++ + QFileInfo info(*it); + if (info.exists() && info.isFile() && info.isReadable()) + return *it; +@@ -168,7 +198,7 @@ + // Fall back to the index.docbook for this language if we couldn't find its + // specific docbook file. If we are not looking up docbook (images, + // css etc) then look in other languages first. +- if ( ( *it ).endsWith( "docbook" ) ) ++ if ( ( *it ).endsWith( "docbook" ) || ( *it).endsWith( ".xml") ) + { + QString file = (*it).left((*it).findRev('/')) + "/index.docbook"; + info.setFile(file); +@@ -176,9 +206,15 @@ + { + return *it; + } ++ ++ file = (*it).left((*it).findRev('/')) + "/" + path + ".xml"; ++ info.setFile(file); ++ if (info.exists() && info.isFile() && info.isReadable()) ++ return *it; + } + } + ++ + return QString::null; + } + diff --git a/opensuse/core/tdebase/khelpcenter-gnome-support.patch b/opensuse/core/tdebase/khelpcenter-gnome-support.patch new file mode 100644 index 000000000..d98ae01dc --- /dev/null +++ b/opensuse/core/tdebase/khelpcenter-gnome-support.patch @@ -0,0 +1,335 @@ +Index: khelpcenter/docentry.cpp +=================================================================== +--- khelpcenter/docentry.cpp.orig ++++ khelpcenter/docentry.cpp +@@ -1,5 +1,6 @@ + #include + #include ++#include + + #include + #include +@@ -206,6 +207,37 @@ bool DocEntry::readFromFile( const QStri + { + KDesktopFile file( fileName ); + ++ static QString desktop; ++ if (desktop.isNull()) { ++ QString win_man = getenv("WINDOWMANAGER"); ++ if (win_man.contains ("gnome", FALSE)) ++ desktop = "GNOME"; ++ else if (win_man.contains ("kde", FALSE)) ++ desktop = "KDE"; ++ else ++ desktop = ""; ++ kdDebug() << "DocEntry::desktop = " << desktop << endl; ++ }; ++ ++ QString onlyShowIn = file.readEntry ("OnlyShowIn"); ++ ++ kdDebug() << "DocEntry::readFromFile(): " << fileName << " onlyShowIn = " << onlyShowIn << endl; ++ ++ if ( !onlyShowIn.isNull() ) { ++ if (desktop.isEmpty()) ++ return false; ++ QStringList list = QStringList::split (";", onlyShowIn); ++ if ( ! list.contains (desktop) ) ++ return false; ++ } ++ ++ QString notShowIn = file.readEntry ("NotShowIn"); ++ if ( !notShowIn.isNull() ) { ++ QStringList list = QStringList::split (";", notShowIn); ++ if ( list.contains (desktop) ) ++ return false; ++ } ++ + mName = file.readName(); + mSearch = file.readEntry( "X-DOC-Search" ); + mIcon = file.readIcon(); +Index: khelpcenter/navigator.cpp +=================================================================== +--- khelpcenter/navigator.cpp.orig ++++ khelpcenter/navigator.cpp +@@ -22,6 +22,7 @@ + #include + #include + #include ++#include + + #include + #include +@@ -275,6 +276,38 @@ void Navigator::createItemFromDesktopFil + const QString &file ) + { + KDesktopFile desktopFile( file ); ++ ++ static QString desktop; ++ if (desktop.isNull()) { ++ QString win_man = getenv("WINDOWMANAGER"); ++ if (win_man.contains ("gnome", FALSE)) ++ desktop = "GNOME"; ++ else if (win_man.contains ("kde", FALSE)) ++ desktop = "KDE"; ++ else ++ desktop = ""; ++ kdDebug() << "Navigator::desktop = " << desktop << endl; ++ }; ++ ++ QString onlyShowIn = desktopFile.readEntry ("OnlyShowIn"); ++ ++ kdDebug() << "Navigator::createItemFromDesktopFile(): " << file << " onlyShowIn = " << onlyShowIn << endl; ++ ++ if ( !onlyShowIn.isNull() ) { ++ if (desktop.isEmpty()) ++ return; ++ QStringList list = QStringList::split (";", onlyShowIn); ++ if ( ! list.contains (desktop) ) ++ return; ++ } ++ ++ QString notShowIn = desktopFile.readEntry ("NotShowIn"); ++ if ( !notShowIn.isNull() ) { ++ QStringList list = QStringList::split (";", notShowIn); ++ if ( list.contains (desktop) ) ++ return; ++ } ++ + QString docPath = desktopFile.readDocPath(); + if ( !docPath.isNull() ) { + // First parameter is ignored if second is an absolute path +@@ -317,6 +350,9 @@ void Navigator::selectItem( const KURL & + { + alternativeURL.setQuery("anchor="+url.ref()); + alternativeURL.setRef(QString::null); ++ } else if (url.url().endsWith("/index.html")) ++ { ++ alternativeURL = KURL (url.url().left (url.url().length() - strlen ("/index.html"))); + } + + // If the navigator already has the given URL selected, do nothing. +@@ -401,15 +437,43 @@ void Navigator::slotItemSelected( QListV + TOC *tocTree = item->createTOC(); + kdDebug( 1400 ) << "slotItemSelected(): Trying to build TOC for " + << item->entry()->name() << endl; +- tocTree->setApplication( url.directory() ); ++ if (url.directory() != "/") ++ tocTree->setApplication( url.directory() ); ++ else ++ tocTree->setApplication( url.path() ); + QString doc = View::langLookup( url.path() ); + // Enforce the original .docbook version, in case langLookup returns a + // cached version + if ( !doc.isNull() ) { +- int pos = doc.find( ".html" ); +- if ( pos >= 0 ) { +- doc.replace( pos, 5, ".docbook" ); +- } ++ if (doc.endsWith( ".html" )) { ++ doc = doc.left (doc.length() - 5) + ".docbook"; ++ } ++ ++ QFileInfo di (doc); ++ if (!di.isFile()) { ++ ++ int last_slash = doc.findRev ('/'); ++ if (last_slash >= 1) { ++ ++ QString filename = doc.right(doc.length() - last_slash - 1); ++ if (filename == "index.html" || filename == "") { ++ ++ int slash2 = doc.findRev('/', last_slash -1); ++ if (slash2 != -1 && slash2 != 0) { ++ ++ int slash3 = doc.findRev('/', slash2 - 1); ++ if (slash3 != -1) { ++ QString xml_file = doc.left(last_slash) + "/" + doc.mid(slash3 + 1, slash2 - (slash3 + 1)) + ".xml"; ++ kdDebug() << "xml_file " << xml_file << endl; ++ QFileInfo fi(xml_file); ++ if (fi.exists()) ++ doc = xml_file; ++ ++ } ++ } ++ } ++ } ++ } + kdDebug( 1400 ) << "slotItemSelected(): doc = " << doc << endl; + + tocTree->build( doc ); +Index: khelpcenter/navigatorappitem.cpp +=================================================================== +--- khelpcenter/navigatorappitem.cpp.orig ++++ khelpcenter/navigatorappitem.cpp +@@ -21,6 +21,8 @@ + + #include "docentry.h" + ++#include ++ + #include + #include + +@@ -134,11 +136,42 @@ void NavigatorAppItem::populate( bool re + + QString NavigatorAppItem::documentationURL( KService *s ) + { ++ static QString desktop; ++ if (desktop.isNull()) { ++ QString win_man = getenv("WINDOWMANAGER"); ++ if (win_man.contains ("gnome", FALSE)) ++ desktop = "GNOME"; ++ else if (win_man.contains ("kde", FALSE)) ++ desktop = "KDE"; ++ else ++ desktop = ""; ++ kdDebug() << "NavigatorAppItem::desktop = " << desktop << endl; ++ }; ++ ++ QString onlyShowIn = s->property("OnlyShowIn", QVariant::String).toString(); ++ ++ kdDebug() << "NavigatorAppItem::onlyShowIn = " << onlyShowIn << endl; ++ ++ if ( !onlyShowIn.isNull() ) { ++ if (desktop.isEmpty()) ++ return QString::null; ++ QStringList list = QStringList::split (";", onlyShowIn); ++ if ( ! list.contains (desktop) ) ++ return QString::null; ++ } ++ ++ QString notShowIn = s->property("NotShowIn", QVariant::String).toString(); ++ if ( !notShowIn.isNull() ) { ++ QStringList list = QStringList::split (";", notShowIn); ++ if ( list.contains (desktop) ) ++ return QString::null; ++ } ++ + QString docPath = s->property( "DocPath" ).toString(); + if ( docPath.isEmpty() ) + return QString::null; + +- if ( docPath.startsWith( "file:") || docPath.startsWith( "http:" ) ) ++ if ( docPath.startsWith( "file:") || docPath.startsWith( "http:" ) || docPath.startsWith( "ghelp:" )) + return docPath; + + return QString( "help:/" ) + docPath; +Index: khelpcenter/table-of-contents.xslt +=================================================================== +--- khelpcenter/table-of-contents.xslt.orig ++++ khelpcenter/table-of-contents.xslt +@@ -8,6 +8,12 @@ + + + ++ ++ ++ ++ ++ ++ + + + <xsl:value-of select="title"/> +@@ -20,7 +26,15 @@ +
    + <xsl:value-of select="title"/> + ++ +
    +
    + ++ ++ ++<xsl:value-of select="title"/> ++ ++ ++ ++ + +Index: khelpcenter/view.cpp +=================================================================== +--- khelpcenter/view.cpp.orig ++++ khelpcenter/view.cpp +@@ -150,21 +150,51 @@ QString View::langLookup( const QString + // assemble the local search paths + const QStringList localDoc = KGlobal::dirs()->resourceDirs("html"); + ++ kdDebug() << "Looking up help for: " << fname << endl; ++ ++ QString path; ++ QString file_name; ++ int slash = fname.findRev ('/'); ++ if (slash == -1 || slash == 0) { ++ path = fname; ++ file_name = "/"; ++ } else { ++ path = fname.left (slash); ++ file_name = fname.right (fname.length() - slash); ++ } ++ ++ QStringList langs = KGlobal::locale()->languageList(); ++ QStringList::ConstIterator lang; ++ for (lang = langs.begin(); lang != langs.end(); ++lang) ++ if (*lang == "en") ++ search.append(QString("/usr/share/gnome/help/%1/C%2").arg(path).arg(file_name)); ++ else ++ search.append(QString("/usr/share/gnome/help/%1/%2%3").arg(path).arg(*lang).arg(file_name)); ++ ++ langs.append( "en" ); ++ langs.remove( "C" ); ++ ++ // this is kind of compat hack as we install our docs in en/ but the ++ // default language is en_US ++ for (QStringList::Iterator it = langs.begin(); it != langs.end(); ++it) ++ if ( *it == "en_US" ) ++ *it = "en"; ++ + // look up the different languages +- for (int id=localDoc.count()-1; id >= 0; --id) ++ int ldCount = localDoc.count(); ++ for (int id=0; id < ldCount; id++) + { +- QStringList langs = KGlobal::locale()->languageList(); +- langs.append( "en" ); +- langs.remove( "C" ); + QStringList::ConstIterator lang; + for (lang = langs.begin(); lang != langs.end(); ++lang) +- search.append(QString("%1%2/%3").arg(localDoc[id]).arg(*lang).arg(fname)); ++ search.append(QString("%1%2/%3").arg(localDoc[id]).arg(*lang).arg(path + file_name)); + } + + // try to locate the file + QStringList::Iterator it; + for (it = search.begin(); it != search.end(); ++it) + { ++ kdDebug() << "Looking for help in: " << *it << endl; ++ + QFileInfo info(*it); + if (info.exists() && info.isFile() && info.isReadable()) + return *it; +@@ -172,7 +202,7 @@ QString View::langLookup( const QString + // Fall back to the index.docbook for this language if we couldn't find its + // specific docbook file. If we are not looking up docbook (images, + // css etc) then look in other languages first. +- if ( ( *it ).endsWith( "docbook" ) ) ++ if ( ( *it ).endsWith( "docbook" ) || ( *it).endsWith( ".xml") ) + { + QString file = (*it).left((*it).findRev('/')) + "/index.docbook"; + info.setFile(file); +@@ -180,9 +210,15 @@ QString View::langLookup( const QString + { + return *it; + } ++ ++ file = (*it).left((*it).findRev('/')) + "/" + path + ".xml"; ++ info.setFile(file); ++ if (info.exists() && info.isFile() && info.isReadable()) ++ return *it; + } + } + ++ + return QString::null; + } + diff --git a/opensuse/core/tdebase/khelpcenter-localindices.patch b/opensuse/core/tdebase/khelpcenter-localindices.patch new file mode 100644 index 000000000..a2b41a78a --- /dev/null +++ b/opensuse/core/tdebase/khelpcenter-localindices.patch @@ -0,0 +1,41 @@ +Index: khelpcenter/kcmhelpcenter.cpp +=================================================================== +--- khelpcenter/kcmhelpcenter.cpp.orig ++++ khelpcenter/kcmhelpcenter.cpp +@@ -321,6 +321,7 @@ bool KCMHelpCenter::save() + + void KCMHelpCenter::load() + { ++ findWriteableIndexDir(); + mIndexDirLabel->setText( Prefs::indexDirectory() ); + + mListView->clear(); +@@ -675,6 +676,12 @@ void KCMHelpCenter::checkSelection() + enableButtonOK( count != 0 ); + } + ++void KCMHelpCenter::findWriteableIndexDir() ++{ ++ QFileInfo currentDir( Prefs::indexDirectory() ); ++ if ( !currentDir.isWritable() ) ++ Prefs::setIndexDirectory( KGlobal::dirs()->saveLocation("data", "khelpcenter/index/") ); ++} + #include "kcmhelpcenter.moc" + + // vim:ts=2:sw=2:et +Index: khelpcenter/kcmhelpcenter.h +=================================================================== +--- khelpcenter/kcmhelpcenter.h.orig ++++ khelpcenter/kcmhelpcenter.h +@@ -146,6 +146,11 @@ class KCMHelpCenter : public KDialogBase + + void advanceProgress(); + ++ /** ++ * Find a user-writeable location for the indices, if the current location ++ * is not. ++ */ ++ void findWriteableIndexDir(); + private: + KHC::SearchEngine *mEngine; + diff --git a/opensuse/core/tdebase/khelpcenter-use-suseconfig-indexer.diff b/opensuse/core/tdebase/khelpcenter-use-suseconfig-indexer.diff new file mode 100644 index 000000000..e63e26ff7 --- /dev/null +++ b/opensuse/core/tdebase/khelpcenter-use-suseconfig-indexer.diff @@ -0,0 +1,25 @@ +Index: khelpcenter/navigator.cpp +=================================================================== +--- khelpcenter/navigator.cpp.orig ++++ khelpcenter/navigator.cpp +@@ -654,10 +654,16 @@ void Navigator::hideSearch() + + bool Navigator::checkSearchIndex() + { +- KConfig *cfg = KGlobal::config(); +- cfg->setGroup( "Search" ); +- if ( cfg->readBoolEntry( "IndexExists", false ) ) return true; +- ++ // just check that the index dir contains something ++ QDir indexDir( Prefs::indexDirectory() ); ++ QStringList dirEntries = indexDir.entryList(); ++ QStringList::Iterator it = dirEntries.begin(); ++ const QStringList::Iterator end = dirEntries.end(); ++ for ( ; it != end; ++it ) ++ { ++ if ( *it != "." && *it != ".." ) ++ return true; ++ } + if ( mIndexDialog && mIndexDialog->isShown() ) return true; + + QString text = i18n( "A search index does not yet exist. Do you want " diff --git a/opensuse/core/tdebase/khelpcenter-use-susehelp.diff b/opensuse/core/tdebase/khelpcenter-use-susehelp.diff new file mode 100644 index 000000000..6c130a6d1 --- /dev/null +++ b/opensuse/core/tdebase/khelpcenter-use-susehelp.diff @@ -0,0 +1,13 @@ +Index: kdebase-3.5.10/khelpcenter/khelpcenter.desktop +=================================================================== +--- kdebase-3.5.10.orig/khelpcenter/khelpcenter.desktop ++++ kdebase-3.5.10/khelpcenter/khelpcenter.desktop +@@ -127,7 +127,7 @@ Icon=khelpcenter + DocPath=khelpcenter/index.html + Type=Service + Terminal=false +-Exec=khelpcenter %u ++Exec=susehelp %u + SwallowExec= + SwallowTitle= + X-KDE-StartupNotify=true diff --git a/opensuse/core/tdebase/khotkeys-multimedia-action.diff b/opensuse/core/tdebase/khotkeys-multimedia-action.diff new file mode 100644 index 000000000..050e31d60 --- /dev/null +++ b/opensuse/core/tdebase/khotkeys-multimedia-action.diff @@ -0,0 +1,345 @@ +Index: khotkeys/data/multimedia_keys.khotkeys +=================================================================== +--- /dev/null ++++ khotkeys/data/multimedia_keys.khotkeys +@@ -0,0 +1,311 @@ ++[Data] ++DataCount=1 ++ ++[Data_1] ++Comment=This group contains actions that are set up by default.\n ++DataCount=8 ++Enabled=true ++Name=Preset Actions ++SystemGroup=0 ++Type=ACTION_DATA_GROUP ++AllowMerge=true ++ ++[Data_1Conditions] ++Comment= ++ConditionsCount=0 ++ ++[Data_1_1] ++Comment=Opens the My Computer window when the multimedia My Computer key is pressed.\n ++Enabled=true ++Name=My Computer ++Type=COMMAND_URL_SHORTCUT_ACTION_DATA ++ ++[Data_1_1Actions] ++ActionsCount=1 ++ ++[Data_1_1Actions0] ++CommandURL=sysinfo:/ ++Type=COMMAND_URL ++ ++[Data_1_1Conditions] ++Comment= ++ConditionsCount=0 ++ ++[Data_1_1Triggers] ++Comment=Simple_action ++TriggersCount=1 ++ ++[Data_1_1Triggers0] ++Key=XF86MyComputer ++Type=SHORTCUT ++ ++[Data_1_2] ++Comment=Launch or activate Amarok when the multimedia Media key is pressed.\n ++Enabled=true ++Name=Media ++Type=COMMAND_URL_SHORTCUT_ACTION_DATA ++ ++[Data_1_2Actions] ++ActionsCount=1 ++ ++[Data_1_2Actions0] ++CommandURL=amarok ++Type=COMMAND_URL ++ ++[Data_1_2Conditions] ++Comment= ++ConditionsCount=0 ++ ++[Data_1_2Triggers] ++Comment=Simple_action ++TriggersCount=1 ++ ++[Data_1_2Triggers0] ++Key=XF86AudioMedia ++Type=SHORTCUT ++ ++[Data_1_3] ++Comment=When the multimedia Calculator key is pressed, KCalc is either launched or activated if it is already running.\n ++DataCount=2 ++Enabled=true ++Name=Calculator ++SystemGroup=0 ++Type=ACTION_DATA_GROUP ++ ++[Data_1_3Conditions] ++Comment= ++ConditionsCount=0 ++ ++[Data_1_3_1] ++Comment=Runs KCalc if it is not already running.\n ++Enabled=true ++Name=Run KCalc ++Type=GENERIC_ACTION_DATA ++ ++[Data_1_3_1Actions] ++ActionsCount=1 ++ ++[Data_1_3_1Actions0] ++CommandURL=kcalc ++Type=COMMAND_URL ++ ++[Data_1_3_1Conditions] ++Comment= ++ConditionsCount=1 ++ ++[Data_1_3_1Conditions0] ++ConditionsCount=1 ++Type=NOT ++ ++[Data_1_3_1Conditions00] ++Type=EXISTING_WINDOW ++ ++[Data_1_3_1Conditions00Window] ++Comment=kcalc ++WindowsCount=1 ++ ++[Data_1_3_1Conditions00Window0] ++Class=kcalc Kcalc ++ClassType=2 ++Comment=kcalc ++Role=kcalc-mainwindow#1 ++RoleType=0 ++Title=KCalc ++TitleType=0 ++Type=SIMPLE ++WindowTypes=1 ++ ++[Data_1_3_1Triggers] ++Comment= ++TriggersCount=1 ++ ++[Data_1_3_1Triggers0] ++Key=XF86Calculator ++Type=SHORTCUT ++ ++[Data_1_3_2] ++Comment=Activates KCalc window if it is already running.\n ++Enabled=true ++Name=Activate KCalc ++Type=GENERIC_ACTION_DATA ++ ++[Data_1_3_2Actions] ++ActionsCount=1 ++ ++[Data_1_3_2Actions0] ++Type=ACTIVATE_WINDOW ++ ++[Data_1_3_2Actions0Window] ++Comment=kcalc ++WindowsCount=1 ++ ++[Data_1_3_2Actions0Window0] ++Class=kcalc Kcalc ++ClassType=2 ++Comment=kcalc ++Role=kcalc-mainwindow#1 ++RoleType=0 ++Title=KCalc ++TitleType=0 ++Type=SIMPLE ++WindowTypes=1 ++ ++[Data_1_3_2Conditions] ++Comment= ++ConditionsCount=1 ++ ++[Data_1_3_2Conditions0] ++Type=EXISTING_WINDOW ++ ++[Data_1_3_2Conditions0Window] ++Comment=kcalc ++WindowsCount=1 ++ ++[Data_1_3_2Conditions0Window0] ++Class=kcalc Kcalc ++ClassType=2 ++Comment=kcalc ++Role=kcalc-mainwindow#1 ++RoleType=0 ++Title=KCalc ++TitleType=0 ++Type=SIMPLE ++WindowTypes=1 ++ ++[Data_1_3_2Triggers] ++Comment= ++TriggersCount=1 ++ ++[Data_1_3_2Triggers0] ++Key=XF86Calculator ++Type=SHORTCUT ++ ++[Data_1_4] ++Comment=Launches the default terminal application when the multimedia Terminal key is pressed.\n ++Enabled=true ++Name=Terminal ++Type=COMMAND_URL_SHORTCUT_ACTION_DATA ++ ++[Data_1_4Actions] ++ActionsCount=1 ++ ++[Data_1_4Actions0] ++CommandURL=KHOTKEYS_TERMINAL ++Type=COMMAND_URL ++ ++[Data_1_4Conditions] ++Comment= ++ConditionsCount=0 ++ ++[Data_1_4Triggers] ++Comment=Simple_action ++TriggersCount=1 ++ ++[Data_1_4Triggers0] ++Key=XF86Terminal ++Type=SHORTCUT ++ ++[Data_1_5] ++Comment=Opens the default browser when the multimedia WWW key is pressed.\n ++Enabled=true ++Name=Browser (HomePage) ++Type=COMMAND_URL_SHORTCUT_ACTION_DATA ++ ++[Data_1_5Actions] ++ActionsCount=1 ++ ++[Data_1_5Actions0] ++CommandURL=KHOTKEYS_BROWSER ++Type=COMMAND_URL ++ ++[Data_1_5Conditions] ++Comment= ++ConditionsCount=0 ++ ++[Data_1_5Triggers] ++Comment=Simple_action ++TriggersCount=1 ++ ++[Data_1_5Triggers0] ++Key=XF86WWW ++Type=SHORTCUT ++ ++[Data_1_6] ++Comment=Ejecting when the multimedia Eject key is pressed.\n ++Enabled=true ++Name=Eject ++Type=COMMAND_URL_SHORTCUT_ACTION_DATA ++ ++[Data_1_6Actions] ++ActionsCount=1 ++ ++[Data_1_6Actions0] ++CommandURL=kdeeject "" ++Type=COMMAND_URL ++ ++[Data_1_6Conditions] ++Comment= ++ConditionsCount=0 ++ ++[Data_1_6Triggers] ++Comment=Simple_action ++TriggersCount=1 ++ ++[Data_1_6Triggers0] ++Key=XF86Eject ++Type=SHORTCUT ++ ++[Data_1_7] ++Comment=Launches KFind when the multimedia Search key is pressed.\n ++Enabled=true ++Name=Search ++Type=COMMAND_URL_SHORTCUT_ACTION_DATA ++ ++[Data_1_7Actions] ++ActionsCount=1 ++ ++[Data_1_7Actions0] ++CommandURL=kfind ++Type=COMMAND_URL ++ ++[Data_1_7Conditions] ++Comment= ++ConditionsCount=0 ++ ++[Data_1_7Triggers] ++Comment=Simple_action ++TriggersCount=1 ++ ++[Data_1_7Triggers0] ++Key=XF86Search ++Type=SHORTCUT ++ ++[Data_1_8] ++Comment=Opens a new mail composer window when the multimedia Mail key is pressed.\n ++Enabled=true ++Name=Launch Mail ++Type=COMMAND_URL_SHORTCUT_ACTION_DATA ++ ++[Data_1_8Actions] ++ActionsCount=1 ++ ++[Data_1_8Actions0] ++CommandURL=mailto:? ++Type=COMMAND_URL ++ ++[Data_1_8Conditions] ++Comment= ++ConditionsCount=0 ++ ++[Data_1_8Triggers] ++Comment=Simple_action ++TriggersCount=1 ++ ++[Data_1_8Triggers0] ++Key=XF86Mail ++Type=SHORTCUT ++ ++[Main] ++Version=2 ++ImportId=multimedia_keys ++ +Index: khotkeys/data/Makefile.am +=================================================================== +--- khotkeys/data/Makefile.am.orig ++++ khotkeys/data/Makefile.am +@@ -1,7 +1,9 @@ +-khotkeys_data_DATA = kde32b1.khotkeys konqueror_gestures_kde321.khotkeys printscreen.khotkeys ++khotkeys_data_DATA = kde32b1.khotkeys konqueror_gestures_kde321.khotkeys printscreen.khotkeys \ ++ multimedia_keys.khotkeys + khotkeys_datadir = $(kde_datadir)/khotkeys + +-khotkeys_update_DATA = khotkeys_32b1_update.upd konqueror_gestures_kde321_update.upd khotkeys_printscreen.upd ++khotkeys_update_DATA = khotkeys_32b1_update.upd konqueror_gestures_kde321_update.upd khotkeys_printscreen.upd \ ++ khotkeys_multimedia_keys.upd + khotkeys_updatedir = $(kde_datadir)/kconf_update + + EXTRA_DIST = $(khotkeys_data_DATA) $(khotkeys_update_DATA) +Index: khotkeys/data/khotkeys_multimedia_keys.upd +=================================================================== +--- /dev/null ++++ khotkeys/data/khotkeys_multimedia_keys.upd +@@ -0,0 +1,8 @@ ++Id=multimedia_keys ++# the file is intentionally a dummy, as the binary will update khotkeysrc, ++# the khotkeys_update will just remember it has been done ++File=khotkeys_update ++Group=Dummy ++Options=overwrite ++ScriptArguments=--id multimedia_keys ++Script=khotkeys_update diff --git a/opensuse/core/tdebase/khotkeys-multimedia-action2.diff b/opensuse/core/tdebase/khotkeys-multimedia-action2.diff new file mode 100644 index 000000000..9f995b1ab --- /dev/null +++ b/opensuse/core/tdebase/khotkeys-multimedia-action2.diff @@ -0,0 +1,81 @@ +Index: khotkeys/shared/actions.cpp +=================================================================== +--- khotkeys/shared/actions.cpp.orig ++++ khotkeys/shared/actions.cpp +@@ -29,6 +29,7 @@ + #include + #include + #include ++#include + + #include "windows.h" + #include "action_data.h" +@@ -116,7 +117,6 @@ void Command_url_action::execute() + { + if( command_url().isEmpty()) + return; +- KURIFilterData uri; + QString cmd = command_url(); + static bool sm_ready = false; + if( !sm_ready ) +@@ -124,6 +124,9 @@ void Command_url_action::execute() + kapp->propagateSessionManager(); + sm_ready = true; + } ++ if( substituteAndHandleSpecial( cmd )) ++ return; ++ KURIFilterData uri; + // int space_pos = command_url().find( ' ' ); + // if( command_url()[ 0 ] != '\'' && command_url()[ 0 ] != '"' && space_pos > -1 + // && command_url()[ space_pos - 1 ] != '\\' ) +@@ -176,6 +179,38 @@ void Command_url_action::execute() + timeout.start( 1000, true ); // 1sec timeout + } + ++// do special command substitutions, return true if also already handled ++bool Command_url_action::substituteAndHandleSpecial( QString& cmd ) ++ { ++ if( cmd.contains( "KHOTKEYS_BROWSER" )) ++ { // the default browser ++ KConfig config( QString::fromLatin1("kfmclientrc")); // see KRun ++ config.setGroup("General"); ++ QString browser = config.readEntry("BrowserApplication"); ++ if( browser.startsWith( QString::fromLatin1( "!" ))) ++ browser = browser.mid( 1 ); ++ else ++ { ++ KService::Ptr service = KService::serviceByStorageId( browser ); ++ if( service ) ++ { ++ browser = service->exec(); ++ browser.replace( QRegExp( " %.?" ), "" ); // remove " %u" and others ++ } ++ } ++ if( browser.isEmpty()) ++ browser = QString::fromLatin1( "konqueror" ); // opens in webbrowsing profile by default ++ cmd = cmd.replace( "KHOTKEYS_BROWSER", browser ); ++ } ++ if( cmd.contains( "KHOTKEYS_TERMINAL" )) ++ { // the default terminal application ++ KConfigGroup config( KGlobal::config(), "General" ); ++ QString terminal = config.readPathEntry( "TerminalApplication", "konsole" ); ++ cmd = cmd.replace( "KHOTKEYS_TERMINAL", terminal ); ++ } ++ return false; ++ } ++ + QString Command_url_action::description() const + { + return i18n( "Command/URL : " ) + command_url(); +Index: khotkeys/shared/actions.h +=================================================================== +--- khotkeys/shared/actions.h.orig ++++ khotkeys/shared/actions.h +@@ -75,6 +75,7 @@ class KDE_EXPORT Command_url_action + protected: + QTimer timeout; + private: ++ bool substituteAndHandleSpecial( QString& cmd ); + QString _command_url; + }; + diff --git a/opensuse/core/tdebase/kicker-defaults.diff b/opensuse/core/tdebase/kicker-defaults.diff new file mode 100644 index 000000000..a92cae562 --- /dev/null +++ b/opensuse/core/tdebase/kicker-defaults.diff @@ -0,0 +1,57 @@ +Index: kcontrol/kcontrol/KControl.desktop +=================================================================== +--- kcontrol/kcontrol/KControl.desktop.orig ++++ kcontrol/kcontrol/KControl.desktop +@@ -7,7 +7,9 @@ Type=Application + DocPath=kcontrol/index.html + X-KDE-StartupNotify=true + +-Name=Control Center ++GenericName=Configure Desktop ++GenericName[de]=Desktop-Einstellungen ++Name=Personal Settings + Name[af]=Beheer Sentrum + Name[ar]=مركز التحكم + Name[az]=Ä°darÉ™ MÉ™rkÉ™zi +@@ -93,3 +95,4 @@ Name[zu]=Indawo Yokulawula + + X-DCOP-ServiceType=Unique + Categories=Qt;KDE;Core; ++Keywords=control,center +Index: kicker/libkicker/kickerSettings.kcfg +=================================================================== +--- kicker/libkicker/kickerSettings.kcfg.orig ++++ kicker/libkicker/kickerSettings.kcfg +@@ -159,7 +159,7 @@ + + + +- prefmenu.desktop,systemmenu.desktop ++ recentdocs.desktop,systemmenu.desktop + + + +Index: kicker/menuext/system/systemmenu.desktop +=================================================================== +--- kicker/menuext/system/systemmenu.desktop.orig ++++ kicker/menuext/system/systemmenu.desktop +@@ -1,5 +1,5 @@ + [Desktop Entry] +-Name=System Menu ++Name=My System + Name[af]=Stelsel Kieslys + Name[ar]=قائمة النظام + Name[be]=СіÑÑ‚Ñмнае меню +Index: kcontrol/kicker/hidingtab_impl.cpp +=================================================================== +--- kcontrol/kicker/hidingtab_impl.cpp.orig ++++ kcontrol/kicker/hidingtab_impl.cpp +@@ -200,7 +200,7 @@ void HidingTab::defaults() + m_delaySpinBox->setValue( 3 ); + m_autoHideSwitch->setChecked( false ); + m_lHB->setChecked( false ); +- m_rHB->setChecked( true ); ++ m_rHB->setChecked( false ); + m_animateHiding->setChecked( true ); + m_hideSlider->setValue( 10 ); + m_delaySpinBox->setValue( 3 ); diff --git a/opensuse/core/tdebase/kickerrc b/opensuse/core/tdebase/kickerrc new file mode 100644 index 000000000..e5d6351a7 --- /dev/null +++ b/opensuse/core/tdebase/kickerrc @@ -0,0 +1,63 @@ +[ServiceMenuButton_1] +Label=work/ +RelPath=work/ + +[buttons] +EnableIconZoom=false +EnableTileBackground=false + +[menus] +DetailedMenuEntries=false +ReduceMenuDepth=true +ShowUnimportantEntries=false + +[Applet_1] +DesktopFile=minipagerapplet.desktop +FreeSpace=0.25 + +[Applet_2] +ConfigFile=taskbar_panelappletrc +DesktopFile=taskbarapplet.desktop +FreeSpace=0.25 + +[Applet_3] +ConfigFile=systemtray_panelappletrc +DesktopFile=systemtrayapplet.desktop +FreeSpace=1 + +[Applet_4] +DesktopFile=clockapplet.desktop +FreeSpace=1 + +[General] +Applets=KMenuButton_1,ServiceMenuButton_1,ServiceButton_2,ServiceButton_1,ServiceButton_6,ServiceButton_3,ServiceButton_4,Applet_1,Applet_2,Applet_3,Applet_4 +CustomSize=58 +# this size gets converted to "3" via kconf_update +Size=58 + +[KFileDialog Speedbar] +Speedbar IconSize=32 + +[KMenuButton_1] +FreeSpace=0 + +[ServiceButton_1] +DesktopFile=System/konsole.desktop +FreeSpace=0 + +[ServiceButton_2] +DesktopFile=Home.desktop +FreeSpace=0 + +[ServiceButton_3] +DesktopFile=Internet/konqbrowser.desktop +FreeSpace=0 + +[ServiceButton_4] +DesktopFile=Internet/KMail.desktop +FreeSpace=0 + +[ServiceButton_6] +DesktopFile=Help.desktop +FreeSpace=0 + diff --git a/opensuse/core/tdebase/kickoff-beagle.diff b/opensuse/core/tdebase/kickoff-beagle.diff new file mode 100644 index 000000000..a850e78ce --- /dev/null +++ b/opensuse/core/tdebase/kickoff-beagle.diff @@ -0,0 +1,1329 @@ +--- configure.in.in (Revision 0) ++++ configure.in.in (Revision 849791) +@@ -0,0 +1,78 @@ ++dnl Check for pkg-config ++AC_PATH_PROG(PKG_CONFIG, pkg-config, no) ++ ++if test "$PKG_CONFIG" = "no"; then ++ AC_MSG_ERROR([ ++This package requires pkg-config. ++]) ++fi ++ ++dnl Check for Glib-2.0 ++# GLIB_CFLAGS: cflags for compiling glib dependant sources ++# GLIB_LIBADD: glib libraries (-l options) ++# GLIB_LDFLAGS: flags containing path to glib libraries (-L options) ++ ++GLIB_PACKAGES="gmodule-2.0 gthread-2.0" ++GLIB_VERSION="1.3.3" ++AC_MSG_CHECKING(for GLib-2.0 (at least $GLIB_VERSION)) ++ ++if $PKG_CONFIG --atleast-pkgconfig-version 0.15 ; then ++ if $PKG_CONFIG --atleast-version $GLIB_VERSION $GLIB_PACKAGES >/dev/null 2>&1 ; then ++ GLIB_CFLAGS="`$PKG_CONFIG --cflags $GLIB_PACKAGES`" ++ GLIB_LIBADD="`$PKG_CONFIG --libs-only-l --libs-only-other $GLIB_PACKAGES`" ++ GLIB_LDFLAGS="`$PKG_CONFIG --libs-only-L $GLIB_PACKAGES`" ++ AC_MSG_RESULT(yes) ++ fi ++else ++ if $PKG_CONFIG --atleast-version $GLIB_VERSION $GLIB_PACKAGES >/dev/null 2>&1 ; then ++ GLIB_CFLAGS="`$PKG_CONFIG --cflags $GLIB_PACKAGES`" ++ GLIB_LIBADD="`$PKG_CONFIG --libs-only-l $GLIB_PACKAGES`" ++ GLIB_LDFLAGS="`$PKG_CONFIG --libs-only-L $GLIB_PACKAGES`" ++ AC_MSG_RESULT(yes) ++ AC_MSG_WARN([you may need to run make LDFLAGS=-pthread to compile arts]) ++ fi ++fi ++ ++if test -z "$GLIB_LIBADD"; then ++ AC_MSG_RESULT(not installed) ++ DO_NOT_COMPILE="$DO_NOT_COMPILE kerry gmcop" ++fi ++ ++AC_SUBST(GLIB_CFLAGS) ++AC_SUBST(GLIB_LIBADD) ++AC_SUBST(GLIB_LDFLAGS) ++ ++dnl Check for libbeagle 0.2.0 ++# LIBBEAGLE_CFLAGS: cflags for compiling libbeagle dependant sources ++# LIBBEAGLE_LIBADD: libbeagle libraries (-l options) ++# LIBBEAGLE_LDFLAGS: flags containing path to libbeagle libraries (-L options) ++ ++LIBBEAGLE_PACKAGES="libbeagle-0.0" ++LIBBEAGLE_VERSION="0.2.4" ++AC_MSG_CHECKING(for libbeagle-0.2.4 (at least $LIBBEAGLE_VERSION)) ++ ++if $PKG_CONFIG --atleast-pkgconfig-version 0.15 ; then ++ if $PKG_CONFIG --atleast-version $LIBBEAGLE_VERSION $LIBBEAGLE_PACKAGES >/dev/null 2>&1 ; then ++ LIBBEAGLE_CFLAGS="`$PKG_CONFIG --cflags $LIBBEAGLE_PACKAGES`" ++ LIBBEAGLE_LIBADD="`$PKG_CONFIG --libs-only-l --libs-only-other $LIBBEAGLE_PACKAGES`" ++ LIBBEAGLE_LDFLAGS="`$PKG_CONFIG --libs-only-L $LIBBEAGLE_PACKAGES`" ++ AC_MSG_RESULT(yes) ++ fi ++else ++ if $PKG_CONFIG --atleast-version $LIBBEAGLE_VERSION $LIBBEAGLE_PACKAGES >/dev/null 2>&1 ; then ++ LIBBEAGLE_CFLAGS="`$PKG_CONFIG --cflags $LIBBEAGLE_PACKAGES`" ++ LIBBEAGLE_LIBADD="`$PKG_CONFIG --libs-only-l $LIBBEAGLE_PACKAGES`" ++ LIBBEAGLE_LDFLAGS="`$PKG_CONFIG --libs-only-L $LIBBEAGLE_PACKAGES`" ++ AC_MSG_RESULT(yes) ++ AC_MSG_WARN([you may need to run make LDFLAGS=-pthread to compile arts]) ++ fi ++fi ++ ++if test -z "$LIBBEAGLE_LIBADD"; then ++ AC_MSG_RESULT(not installed) ++ DO_NOT_COMPILE="$DO_NOT_COMPILE kerry gmcop" ++fi ++ ++AC_SUBST(LIBBEAGLE_CFLAGS) ++AC_SUBST(LIBBEAGLE_LIBADD) ++AC_SUBST(LIBBEAGLE_LDFLAGS) +--- kicker/plugins/beaglesearch.cpp (Revision 0) ++++ kicker/plugins/beaglesearch.cpp (Revision 849791) +@@ -0,0 +1,362 @@ ++/***************************************************************** ++ ++ Copyright (c) 2006 Debajyoti Bera ++ ++ This program is free software; you can redistribute it and/or ++ modify it under the terms of the GNU General Public ++ License as published by the Free Software Foundation; either ++ version 2 of the License, or (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with this program; see the file COPYING. If not, write to ++ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ++ Boston, MA 02110-1301, USA. ++ ++******************************************************************/ ++ ++#include "beaglesearch.h" ++ ++#include ++#include ++#include ++#include ++#include ++ ++void beagle_init () ++{ ++ g_type_init (); ++} ++ ++// ---------------- Hit --------------------------- ++ ++Hit::Hit (BeagleHit *_hit) : processed (false) ++{ ++ hit = beagle_hit_ref (_hit); ++} ++ ++Hit::~Hit () ++{ ++ beagle_hit_unref (hit); ++ if (! processed) ++ return; ++ QDictIterator it (property_map); ++ for( ; it.current(); ++it ) ++ ((QStringList *)it.current())->clear (); ++ ++} ++ ++void Hit::processProperties () ++{ ++ processed = true; ++ GSList *prop_list = beagle_hit_get_all_properties (hit); ++ GSList *it; ++ property_map.setAutoDelete (true); ++ for (it = prop_list; it; it = it->next) { ++ BeagleProperty *property = (BeagleProperty *) it->data; ++ QString key = QString::fromUtf8 (beagle_property_get_key (property)); ++ if (! property_map [key]) ++ property_map.insert (key, new QStringList ()); ++ property_map [key]->append (QString::fromUtf8 (beagle_property_get_value (property))); ++ } ++ g_slist_free (prop_list); ++} ++ ++const QString Hit::operator[] (QString prop_name) ++{ ++ if (! processed) ++ processProperties (); ++ ++ QStringList *prop_list = property_map [prop_name]; ++ if (! prop_list) ++ return QString::null; ++ if (prop_list->count () != 1) ++ return QString::null; ++ return (QString)prop_list->first (); ++} ++ ++// ---------------- BeagleSearch ------------------ ++ ++BeagleSearchResult::BeagleSearchResult(int client_id) ++ : client_id (client_id), total (0) ++{ ++ hitlist = new QPtrList; ++ hitlist->setAutoDelete (true); ++} ++ ++ ++BeagleSearchResult::~BeagleSearchResult() ++{ ++ // everything is set to autodelete ++} ++ ++void BeagleSearchResult::addHit(BeagleHit *_hit) ++{ ++ Hit *hit = new Hit (_hit); ++ hitlist->prepend (hit); ++} ++ ++const QPtrList *BeagleSearchResult::getHits () const ++{ ++ return hitlist; ++} ++ ++ ++static int total_hits; ++ ++static void print_feed_item_hit (BeagleHit *hit) ++{ ++ const char *text; ++ ++ if (beagle_hit_get_one_property (hit, "dc:title", &text)) ++ g_print ("Blog: %s\n", text); ++} ++ ++static void print_file_hit (BeagleHit *hit) ++{ ++ g_print ("File: %s, (%s)\n", beagle_hit_get_uri (hit), beagle_hit_get_mime_type (hit)); ++} ++ ++static void print_other_hit (BeagleHit *hit) ++{ ++ const char *text; ++ ++ g_print ("%s (%s)", beagle_hit_get_uri (hit), ++ beagle_hit_get_source (hit)); ++ if (beagle_hit_get_one_property (hit, "dc:title", &text)) ++ g_print ("title = %s\n", text); ++} ++ ++static void print_hit (BeagleHit *hit) ++{ ++ if (strcmp (beagle_hit_get_type (hit), "FeedItem") == 0) { ++ print_feed_item_hit (hit); ++ } ++ else if (strcmp (beagle_hit_get_type (hit), "File") == 0) { ++ print_file_hit (hit); ++ } else { ++ print_other_hit (hit); ++ } ++} ++ ++// ---------------- BeagleSearchClient ------------------ ++ ++void BeagleSearchClient::run () ++{ ++ kdDebug () << "Starting query ..." << endl; ++ ++ QTime query_timer; ++ query_timer.start (); ++ ++ g_signal_connect (query, "hits-added", ++ G_CALLBACK (hitsAddedSlot), ++ this); ++ g_signal_connect (query, "finished", ++ G_CALLBACK (finishedSlot), ++ this); ++ beagle_client_send_request_async (client, ++ BEAGLE_REQUEST (query), ++ NULL); ++ g_main_loop_run (main_loop); ++ kdDebug () << "Finished query ..." << endl; ++ ++ QCustomEvent *ev; ++ if (collate_results) { ++ result->query_msec = query_timer.elapsed (); ++ ++ ev = new QCustomEvent (RESULTFOUND, result); ++ QApplication::postEvent (object, ev); ++ } ++ ++ ev = new QCustomEvent (KILLME, this); ++ QApplication::postEvent (object, ev); ++ ++} ++ ++void BeagleSearchClient::stopClient () ++{ ++ if (finished ()) ++ return; // duh! ++ kdDebug () << "Query thread " << id << " not yet finished ..." << endl; ++ // get ready for suicide ++ client_mutex->lock (); ++ kill_me = true; ++ g_signal_handlers_disconnect_by_func ( ++ query, ++ (void *)hitsAddedSlot, ++ this); ++ g_signal_handlers_disconnect_by_func ( ++ query, ++ (void *)finishedSlot, ++ this); ++ g_main_loop_quit (main_loop); ++ client_mutex->unlock (); ++} ++ ++void BeagleSearchClient::hitsAddedSlot (BeagleQuery *query, ++ BeagleHitsAddedResponse *response, ++ BeagleSearchClient *bsclient) ++{ ++ GSList *hits, *l; ++ gint i; ++ gint nr_hits; ++ ++ // check if we are supposed to be killed ++ bsclient->client_mutex->lock (); ++ if (bsclient->kill_me) { ++ kdDebug () << "Suicide time before processing" << endl; ++ bsclient->client_mutex->unlock (); ++ return; ++ } ++ bsclient->client_mutex->unlock (); ++ ++ hits = beagle_hits_added_response_get_hits (response); ++ ++ nr_hits = g_slist_length (hits); ++ total_hits += nr_hits; ++ g_print ("Found hits (%d) at %ld:\n", nr_hits, time (NULL)); ++ ++ BeagleSearchResult *search_result; ++ if (! bsclient->collate_results) ++ search_result = new BeagleSearchResult (bsclient->id); ++ else ++ search_result = bsclient->result; ++ search_result->total += nr_hits; ++ ++ for (l = hits, i = 1; l; l = l->next, ++i) { ++ //g_print ("[%d] ", i); ++ //print_hit (BEAGLE_HIT (l->data)); ++ //g_print ("\n"); ++ ++ search_result->addHit(BEAGLE_HIT (l->data));//hit); ++ } ++ g_print ("[%ld] hits adding finished \n", time (NULL)); ++ ++ // check if we are supposed to be killed ++ bsclient->client_mutex->lock (); ++ if (bsclient->kill_me) { ++ kdDebug () << "Suicide time before sending ..." << endl; ++ bsclient->client_mutex->unlock (); ++ if (! bsclient->collate_results) ++ delete search_result; ++ return; ++ } ++ bsclient->client_mutex->unlock (); ++ ++ // time to send back results, if user asked so ++ if (bsclient->collate_results) ++ return; ++ QCustomEvent *ev = new QCustomEvent (RESULTFOUND, search_result); ++ g_print ("[%ld] event notified \n", time (NULL)); ++ QApplication::postEvent (bsclient->object, ev); ++} ++ ++void BeagleSearchClient::finishedSlot (BeagleQuery *query, ++ BeagleFinishedResponse *response, ++ BeagleSearchClient *bsclient) ++{ ++ // check if we are supposed to be killed ++ bsclient->client_mutex->lock (); ++ bool should_kill = bsclient->kill_me; ++ QObject* receiver = bsclient->object; ++ bsclient->client_mutex->unlock (); ++ ++ if (should_kill) ++ return; ++ ++ g_main_loop_quit (bsclient->main_loop); ++ ++ if (bsclient->collate_results) ++ return; // if we are collating, everything will be send from a central place ++ if (receiver) { ++ QCustomEvent *ev = new QCustomEvent (SEARCHOVER, bsclient); ++ g_print ("[%ld] query finish notified \n", time (NULL)); ++ QApplication::postEvent (receiver, ev); ++ } ++} ++ ++// ----------------- BeagleUtil ------------------- ++ ++BeagleQuery * ++BeagleUtil::createQueryFromString (QString query_str, ++ QStringList &sources_menu, ++ QStringList &types_menu, ++ int max_hits_per_source) ++{ ++ BeagleQuery *beagle_query = beagle_query_new (); ++ beagle_query_set_max_hits (beagle_query, max_hits_per_source); // this is per source! ++ ++ kdDebug () << "Creating query from \"" << query_str << "\"" << endl; ++ for ( QStringList::Iterator it = sources_menu.begin(); it != sources_menu.end(); ++it ) ++ beagle_query_add_source (beagle_query, g_strdup ((*it).utf8 ())); ++ ++ for ( QStringList::Iterator it = types_menu.begin(); it != types_menu.end(); ++it ) ++ beagle_query_add_hit_type (beagle_query, g_strdup ((*it).utf8 ())); ++ ++ QStringList query_terms; ++ QString start_date, end_date; ++ QStringList words = QStringList::split (' ', query_str, false); ++ for ( QStringList::Iterator it = words.begin(); it != words.end(); ++it ) { ++ QStringList key_value_pair = QStringList::split ('=', *it, false); ++ if (key_value_pair.count () == 1) ++ query_terms += *it; ++ else if (key_value_pair.count () == 2) { ++ QString key = key_value_pair [0].lower (); ++ QString value = key_value_pair [1]; ++ if (key == "mime") ++ beagle_query_add_mime_type (beagle_query, g_strdup (value.utf8 ())); ++ else if (key == "type") ++ beagle_query_add_hit_type (beagle_query, g_strdup (value.utf8 ())); ++ else if (key == "source") ++ beagle_query_add_source (beagle_query, g_strdup (value.utf8 ())); ++ else if (key == "start") ++ start_date = value; ++ else if (key == "end") ++ end_date = value; ++ else ++ query_terms += *it; ++ } else ++ query_terms += *it; ++ } ++ ++ beagle_query_add_text (beagle_query, g_strdup (query_terms.join (" ").utf8 ())); ++ kdDebug () << "Adding query text:" << query_terms.join (" ").utf8 () << endl; ++ ++ if (start_date.isNull () && end_date.isNull ()) ++ return beagle_query; ++ ++ //kdDebug () << "Handling dates ..." << endl; ++ BeagleQueryPartDate * date_part = beagle_query_part_date_new (); ++ if (! start_date.isNull ()) ++ beagle_query_part_date_set_start_date (date_part, timestringToBeagleTimestamp (start_date)); ++ if (! end_date.isNull ()) ++ beagle_query_part_date_set_end_date (date_part, timestringToBeagleTimestamp (end_date)); ++ beagle_query_add_part (beagle_query, BEAGLE_QUERY_PART (date_part)); ++ ++ return beagle_query; ++} ++ ++// timestring format allowed YYYYmmDD ++BeagleTimestamp * ++BeagleUtil::timestringToBeagleTimestamp(QString timestring) ++{ ++ //kdDebug () << "datetime string:" << timestring << endl; ++ // FIXME: error check timestring format ++ if (timestring.isNull () || timestring.stripWhiteSpace () == "" || timestring.length() != 8 ) ++ return beagle_timestamp_new_from_unix_time (QDateTime::currentDateTime ().toTime_t ()); ++ //QDateTime dt = QDateTime::fromString (timestring, Qt::ISODate); ++ struct tm tm_time; ++ time_t timet_time; ++ time (&timet_time); ++ localtime_r (&timet_time, &tm_time); ++ strptime (timestring.ascii(), "%Y%m%d", &tm_time); ++ tm_time.tm_sec = tm_time.tm_min = tm_time.tm_hour = 0; ++ //kdDebug() << asctime (&tm_time) << endl; ++ timet_time = mktime (&tm_time); ++ return beagle_timestamp_new_from_unix_time (timet_time); ++} ++ +--- kicker/plugins/kickoff-beagle-plugin.cpp (Revision 0) ++++ kicker/plugins/kickoff-beagle-plugin.cpp (Revision 849791) +@@ -0,0 +1,499 @@ ++/*************************************************************************** ++ * Copyright (C) 2006 by Stephan Binner * ++ * Copyright (c) 2006 Debajyoti Bera * ++ * * ++ * This program is free software; you can redistribute it and/or modify * ++ * it under the terms of the GNU General Public License as published by * ++ * the Free Software Foundation; either version 2 of the License, or * ++ * (at your option) any later version. * ++ * * ++ * This program is distributed in the hope that it will be useful, * ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of * ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * ++ * GNU General Public License for more details. * ++ * * ++ * You should have received a copy of the GNU General Public License * ++ * along with this program; if not, write to the * ++ * Free Software Foundation, Inc., * ++ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * ++ ***************************************************************************/ ++ ++#include "kickoff-beagle-plugin.h" ++ ++#include ++#include ++ ++#include ++#include ++#include ++#include ++ ++QString dc_identifier = "dc:identifier"; ++QString dc_title = "dc:title"; ++QString parent_dc_title = "parent:dc:title"; ++QString exactfilename = "beagle:ExactFilename"; ++QString fixme_name = "fixme:Name"; ++QString beagle_filename = "beagle:Filename"; ++QString fixme_attachment_title = "fixme:attachment_title"; ++QString fixme_hasattachments = "fixme:hasAttachments"; ++QString parent_prefix = "parent:"; ++QString fixme_folder = "fixme:folder"; ++QString fixme_categories = "fixme:Categories"; ++QString fixme_comment = "fixme:Comment"; ++QString fixme_width = "fixme:width"; ++QString fixme_height = "fixme:height"; ++QString fixme_from_address = "fixme:from_address"; ++QString fixme_artist = "fixme:artist"; ++QString fixme_album = "fixme:album"; ++QString dc_source = "dc:source"; ++QString dc_publisher = "dc:publisher"; ++QString digikam_tag = "digikam:Tag"; ++QString fixme_speakingto = "fixme:speakingto"; ++QString fixme_starttime = "fixme:starttime"; ++QString comma_string = ","; ++QString vCard_FN = "vCard:FN"; ++QString vCard_PREFEMAIL = "vCard:PREFEMAIL"; ++QString fixme_uid = "fixme:uid"; ++ ++static CATEGORY getHitCategory (Hit *hit) ++{ ++ QString hittype = hit->getType(); ++ QString hitsource = hit->getSource(); ++ ++ // if hit source is None, dont handle it. Might be anthrax-envelope :) ++ if (hitsource.isNull()) ++ return OTHER; ++ ++ if (hitsource == "documentation") ++ return DOCS; ++ ++ if (hittype == "IMLog") ++ return CHATS; ++ ++ // sure shots ++ if (hittype == "FeedItem") ++ return FEEDS; ++ if (hittype == "WebHistory") ++ return WEBHIST; ++ if (hittype == "MailMessage") ++ return MAILS; ++ if (hittype == "Note") ++ return NOTES; ++ ++ // check for applications ++ if (hittype == "File" && (*hit) ["beagle:FilenameExtension"] == ".desktop") ++ return APPS; ++ ++ // check for music ++ QString hitmimetype = hit->getMimeType(); ++ if (hitsource == "Amarok" ++ || hitmimetype.startsWith ("audio") ++ || hitmimetype == "application/ogg") ++ return MUSIC; // not an exhaustive search ++ ++ // check for images from files ++ if (hitsource == "Files" && hitmimetype.startsWith ("image")) ++ return PICS; ++ ++ if (hitsource == "Files" && hitmimetype.startsWith ("video")) ++ return VIDEOS; ++ ++ if (hitsource == "Files") ++ return FILES; ++ ++ if (hitsource == "KAddressBook") ++ return ACTIONS; ++ ++ return OTHER; ++} ++ ++K_EXPORT_COMPONENT_FACTORY( kickoffsearch_beagle, ++ KGenericFactory( "kickoffsearch_beagle" ) ) ++ ++KickoffBeaglePlugin::KickoffBeaglePlugin(QObject *parent, const char* name, const QStringList&) ++ : KickoffSearch::Plugin(parent, name ), genericTitle( true ) ++{ ++ g_type_init (); ++ current_beagle_client = NULL; ++} ++ ++bool KickoffBeaglePlugin::daemonRunning() ++{ ++ return beagle_util_daemon_is_running(); ++} ++ ++void KickoffBeaglePlugin::query(QString term, bool _genericTitle) ++{ ++ genericTitle = _genericTitle; ++ current_query_str = term; ++ ++ // Beagle search ++ if (current_beagle_client != NULL) { ++ kdDebug () << "Previous client w/id " << current_beagle_client->id << " still running ... ignoring it." << endl; ++ current_beagle_client->stopClient (); ++ } ++ current_beagle_client_id = KApplication::random (); ++ kdDebug () << "Creating client with id:" << current_beagle_client_id << endl; ++ ++ BeagleClient *beagle_client = beagle_client_new (NULL); ++ if (beagle_client == NULL) { ++ kdDebug() << "beagle service not running ..." << endl; ++ return; ++ } ++ ++ QStringList sources, types; ++ BeagleQuery *beagle_query = BeagleUtil::createQueryFromString (term, sources, types, 99); // maximum 99 results, if this doesnt work, blame the stars ++ ++ current_beagle_client = new BeagleSearchClient ( ++ current_beagle_client_id, ++ this, ++ beagle_client, ++ beagle_query, ++ false); ++ current_beagle_client->start(); ++// kdDebug () << "Query dispatched at " << time (NULL) << endl; ++} ++ ++void KickoffBeaglePlugin::cleanClientList () ++{ ++ toclean_list_mutex.lock (); ++ BeagleSearchClient *old_client = toclean_client_list.take (0); ++ if (old_client != NULL) { // failsafe ++ kdDebug () << "Cleanup old client " << old_client->id << endl; ++ delete old_client; ++ } ++ toclean_list_mutex.unlock (); ++} ++ ++void KickoffBeaglePlugin::customEvent (QCustomEvent *e) ++{ ++ if (e->type () == RESULTFOUND) { ++// kdDebug () << "Quick query thread at " << time (NULL) << " with current_id=" << current_beagle_client_id << " finished ..." << endl; ++ BeagleSearchResult *result = (BeagleSearchResult *) e->data (); ++ if (current_beagle_client_id != result->client_id) { ++ kdDebug () << "Stale result from " << result->client_id << endl; ++ delete result; ++ // FIXME: Should I also free e ? ++ } else { ++ kdDebug () << "Good results ...total=" << result->total << endl; ++ showResults (result); ++ } ++ //KPassivePopup::message( "This is the message", this ); ++ } else if (e->type () == SEARCHOVER) { ++ BeagleSearchClient *client = (BeagleSearchClient *) e->data (); ++ if (client == NULL) { ++// kdDebug () << "Query finished event at " << time (NULL) << " but client is already deleted" << endl; ++ return; ++ } ++// kdDebug () << "Query finished event at " << time (NULL) << " for id=" << client->id << endl; ++ if (current_beagle_client_id == client->id) { ++ kickoffSearchInterface()->searchOver(); ++ current_beagle_client = NULL; // important ! ++ } ++ } else if (e->type () == KILLME) { ++ BeagleSearchClient *client = (BeagleSearchClient *) e->data (); ++ if (client->finished ()) ++ delete client; ++ else { ++ // add client to cleanup list ++ toclean_list_mutex.lock (); ++ toclean_client_list.append (client); ++ kdDebug () << "Scheduling client to be deleted in 500ms" << endl; ++ toclean_list_mutex.unlock (); ++ QTimer::singleShot (500, this, SLOT (cleanClientList ())); ++ } ++ } ++} ++ ++// this method decides what to display in the result list ++HitMenuItem *KickoffBeaglePlugin::hitToHitMenuItem (int category, Hit *hit) ++{ ++ QString title, info, mimetype, icon; ++ int score = 0; ++ KURL uri; ++ ++#if 0 ++ kdDebug() << "*** " << hit->getUri() << endl; ++ QDict all = hit->getAllProperties(); ++ QDictIterator it( all ); ++ for( ; it.current(); ++it ) ++ kdDebug() << it.currentKey() << ": " << *(it.current()) << endl; ++#endif ++ ++ switch (category) { ++ case FILES: ++ { ++ uri = hit->getUri (); ++ QString uristr = uri.path (); ++ title = (*hit) [exactfilename]; ++ int last_slash = uristr.findRev ('/', -1); ++ info = i18n("Folder: %1").arg(last_slash == 0 ? "/" ++ : uristr.section ('/', -2, -2)); ++ } ++ break; ++ case ACTIONS: ++ { ++ if (hit->getSource()=="KAddressBook"){ ++ title = i18n("Send Email to %1").arg((*hit)[vCard_FN]); ++ info = (*hit)[vCard_PREFEMAIL]; ++ uri = "mailto:"+(*hit)[vCard_PREFEMAIL]; ++ mimetype = hit->getMimeType (); ++ icon = "mail_new"; ++ ++ HitMenuItem * first_item=new HitMenuItem (title, info, uri, mimetype, 0, category, icon, score); ++ kickoffSearchInterface()->addHitMenuItem(first_item); ++ ++ title =i18n("Open Addressbook at %1").arg((*hit)[vCard_FN]); ++ uri = "kaddressbook:/"+(*hit)[fixme_uid]; ++ icon = "kaddressbook"; ++ } ++ break; ++ } ++ case MAILS: ++ { ++ QString prefix = QString::null; ++ bool is_attachment = ((*hit) [parent_prefix + fixme_hasattachments] == "true"); ++ bool has_parent = (! hit->getParentUri ().isEmpty ()); ++ bool parent_mbox_file = false; ++ if (has_parent) ++ parent_mbox_file = ((*hit) [parent_prefix + fixme_folder] == QString::null); ++ ++ // Logic: ++ // If has_parent == false, everything is normal ++ // If has_parent == true, parent_mbox_file == false, everything is normal, use uri ++ // FIXME: If has_parent == true, parent_mbox_file == true, ??? ++ // If has_parent == true, is_attachment == true, hit is attach and access with prefix "parent:", use parenturi ++ // Else, not attachment (multipart), access with prefix "parent:", use parenturi ++ ++ if (has_parent && !parent_mbox_file) { ++ uri = hit->getParentUri (); ++ prefix = parent_prefix; ++ if (is_attachment) ++ title = (*hit) [fixme_attachment_title]; ++ if (title.isEmpty ()) ++ title = (*hit) [prefix + dc_title]; ++ if (title.isEmpty ()) ++ title = i18n("No subject"); ++ if (is_attachment) ++ title = title.prepend (i18n("(Attachment) ")); ++ info = (i18n("From %1").arg((*hit) [prefix + fixme_from_address])); ++ } else { ++ uri = hit->getUri (); ++ title = (*hit) [dc_title]; ++ info = (i18n("From %1").arg((*hit) [fixme_from_address])); ++ } ++ } ++ mimetype = "message/rfc822"; // to handle attachment results ++ break; ++ case MUSIC: ++ uri = hit->getUri (); ++ title = (*hit) [exactfilename]; ++ { ++ QString artist = (*hit) [fixme_artist]; ++ QString album = (*hit) [fixme_album]; ++ if (! artist.isEmpty ()) ++ info = (i18n("By %1").arg(artist)); ++ else if (! album.isEmpty ()) ++ info = (i18n("From Album %1").arg(album)); ++ else { ++ QString uristr = uri.path (); ++ int last_slash = uristr.findRev ('/', -1); ++ info = i18n("Folder: %1") ++ .arg(last_slash == 0 ? "/" : uristr.section ('/', -2, -2)); ++ } ++ } ++ break; ++ case VIDEOS: ++ uri = hit->getUri (); ++ title = (*hit) [exactfilename]; ++ { ++ QString uristr = uri.path (); ++ int last_slash = uristr.findRev ('/', -1); ++ info = i18n("Folder: %1").arg(last_slash == 0 ? "/" : uristr.section ('/', -2, -2)); ++ } ++ break; ++ case WEBHIST: ++ uri = hit->getUri (); ++ title = (*hit) [dc_title]; ++ title = title.replace(QRegExp("\n")," "); ++ mimetype = "text/html"; ++ if (title.isEmpty () || title.stripWhiteSpace ().isEmpty ()) { ++ title = uri.prettyURL (); ++ } else { ++ info = uri.host () + uri.path (); ++ } ++ break; ++ case FEEDS: ++ { ++ uri = KURL ((*hit) [dc_identifier]); ++ title = (*hit) [dc_title]; ++ mimetype = "text/html"; ++ QString publisher = (*hit) [dc_publisher]; ++ QString source = (*hit) [dc_source]; ++ if (! publisher.isEmpty ()) ++ info = publisher; ++ else if (! source.isEmpty ()) ++ info = source; ++ } ++ break; ++ case PICS: ++ { ++ uri = hit->getUri (); ++ title = (*hit) [exactfilename]; ++ QString width = (*hit) [fixme_width]; ++ QString height = (*hit) [fixme_height]; ++ if (width.isEmpty () || height.isEmpty ()) { ++ QString uristr = uri.path (); ++ int last_slash = uristr.findRev ('/', -1); ++ info = i18n("Folder: %1") ++ .arg(last_slash == 0 ? "/" : uristr.section ('/', -2, -2)); ++ break; ++ } ++ info = (QString (" (%1x%2)").arg (width).arg (height)); ++ const QStringList *tags = hit->getProperties (digikam_tag); ++ if (tags == NULL) ++ break; ++ QString tags_string = tags->join (comma_string); ++ info += (" " + tags_string); ++ } ++ break; ++ case APPS: ++ { ++ uri = hit->getUri (); ++ title = (*hit) [dc_title]; ++ KDesktopFile desktopfile(uri.path(),true); ++ if (genericTitle && !desktopfile.readGenericName().isEmpty()) { ++ title = desktopfile.readGenericName(); ++ info = desktopfile.readName(); ++ } ++ else { ++ title = desktopfile.readName(); ++ info = desktopfile.readGenericName(); ++ } ++ icon = desktopfile.readIcon(); ++ QString input = current_query_str.lower(); ++ QString command = desktopfile.readEntry("Exec"); ++ if (command==input) ++ score = 100; ++ else if (command.find(input)==0) ++ score = 50; ++ else if (command.find(input)!=-1) ++ score = 10; ++ else if (title==input) ++ score = 100; ++ else if (title.find(input)==0) ++ score = 50; ++ else if (title.find(input)!=-1) ++ score = 10; ++ break; ++ } ++ break; ++ case NOTES: ++ { ++ uri = hit->getUri (); ++ title = (*hit) [dc_title]; ++ title = i18n("Title: %1").arg(title.isEmpty() ? i18n("Untitled") : title); ++ ++ if (hit->getSource()=="KNotes") ++ icon="knotes"; ++ else ++ icon="contents2"; ++ } ++ break; ++ case CHATS: ++ { ++ uri = hit->getUri (); ++ title = (*hit) [fixme_speakingto]; ++ title = i18n("Conversation With %1").arg(title.isEmpty() ? i18n("Unknown Person") : title); ++ QDateTime datetime; ++ datetime = datetimeFromString((*hit) [fixme_starttime]); ++ info=i18n("Date: %1").arg(KGlobal::locale()->formatDateTime(datetime,false)); ++ if (hit->getMimeType()=="beagle/x-kopete-log") ++ icon="kopete"; ++ else ++ icon="gaim"; ++ } ++ break; ++ case DOCS: ++ { ++ uri = hit->getUri (); ++ title = (*hit) [dc_title]; ++ if (title.isEmpty () || title.stripWhiteSpace ().isEmpty ()) ++ title = uri.prettyURL (); ++ else { ++ QString uristr = uri.path (); ++ int last_slash = uristr.findRev ('/', -1); ++ info = i18n("Folder: %1").arg(last_slash == 0 ? "/" : uristr.section ('/', ++ -2, -2)); ++ } ++ } ++ break; ++ default: ++ return NULL; ++ } ++ if (mimetype.isEmpty ()) ++ mimetype = hit->getMimeType (); ++ return new HitMenuItem (title, info, uri, mimetype, 0, category, icon, score); ++} ++ ++void KickoffBeaglePlugin::showResults(BeagleSearchResult *result) ++{ ++ if (result->total == 0 ) { ++ // Dont report error from here ... ++ kdDebug() << "No matches found" << endl; ++ delete result; ++ return; ++ } ++ ++ const QPtrList *hits = result->getHits(); ++ if (hits == NULL) { ++ kdDebug () << "Hmm... null" << endl; ++ delete result; ++ return; ++ } ++ kickoffSearchInterface()->initCategoryTitlesUpdate(); ++ ++ QPtrListIterator it (*hits); ++ Hit *hit; ++ for (; (hit = it.current ()) != NULL; ++it) { ++ CATEGORY category = getHitCategory (hit); ++ ++ // if category is not handled, continue ++ if (category == OTHER) ++ continue; ++ ++ if ( category == APPS ) { ++ // we need to check if this is useful ++ KService cs( hit->getUri().path() ); ++ if ( cs.noDisplay() ) ++ continue; ++ } ++ ++ if (!kickoffSearchInterface()->anotherHitMenuItemAllowed(category)) ++ continue; ++ ++ HitMenuItem *hit_item = hitToHitMenuItem (category, hit); ++ ++ if (!hit_item) ++ continue; ++ ++ kickoffSearchInterface()->addHitMenuItem(hit_item); ++ } ++ ++ kickoffSearchInterface()->updateCategoryTitles(); ++ ++ delete result; ++} ++ ++QDateTime KickoffBeaglePlugin::datetimeFromString( const QString& s) ++{ ++ int year( s.mid( 0, 4 ).toInt() ); ++ int month( s.mid( 4, 2 ).toInt() ); ++ int day( s.mid( 6, 2 ).toInt() ); ++ int hour( s.mid( 8, 2 ).toInt() ); ++ int min( s.mid( 10, 2 ).toInt() ); ++ int sec( s.mid( 12, 2 ).toInt() ); ++ return QDateTime(QDate(year,month,day),QTime(hour,min,sec)); ++} ++ ++#include "kickoff-beagle-plugin.moc" +--- kicker/plugins/Makefile.am (Revision 0) ++++ kicker/plugins/Makefile.am (Revision 849791) +@@ -0,0 +1,24 @@ ++INCLUDES = -I$(top_srcdir)/interfaces $(all_includes) $(LIBBEAGLE_CFLAGS) $(GLIB_CFLAGS) ++METASOURCES = AUTO ++ ++# Install this plugin in the KDE modules directory ++kde_module_LTLIBRARIES = kickoffsearch_beagle.la ++ ++# Srcs for the plugin ++kickoffsearch_beagle_la_SOURCES = kickoff-beagle-plugin.cpp beaglesearch.cpp ++ ++# Libs needed by the plugin ++kickoffsearch_beagle_la_LIBADD = $(LIB_KPARTS) ../interfaces/libkickoffsearch_interfaces.la \ ++ $(LIBBEAGLE_LIBADD) $(GLIB_LIBADD) ++ ++# LD flags for the plugin ++# -module says: this is a module, i.e. something you're going to dlopen ++# so e.g. it has no version number like a normal shared lib would have. ++kickoffsearch_beagle_la_LDFLAGS = -module $(KDE_PLUGIN) $(all_libraries) ++ ++# Install the desktop file needed to detect the plugin ++kde_services_DATA = kickoffsearch_beagle.desktop ++ ++# i18n translation messages ++messages: rc.cpp ++ $(XGETTEXT) *.cpp *.h -o $(podir)/kickoffsearch_beagle.pot +--- kicker/plugins/kickoffsearch_beagle.desktop (Revision 0) ++++ kicker/plugins/kickoffsearch_beagle.desktop (Revision 849791) +@@ -0,0 +1,6 @@ ++[Desktop Entry] ++Name=Beagle Search ++Comment=Beagle search plugin for Kickoff search ++ServiceTypes=KickoffSearch/Plugin ++Type=Service ++X-KDE-Library=kickoffsearch_beagle +--- kicker/plugins/beaglesearch.h (Revision 0) ++++ kicker/plugins/beaglesearch.h (Revision 849791) +@@ -0,0 +1,234 @@ ++/***************************************************************** ++ ++ Copyright (c) 2006 Debajyoti Bera ++ ++ This program is free software; you can redistribute it and/or ++ modify it under the terms of the GNU General Public ++ License as published by the Free Software Foundation; either ++ version 2 of the License, or (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with this program; see the file COPYING. If not, write to ++ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ++ Boston, MA 02110-1301, USA. ++ ++******************************************************************/ ++ ++#ifndef BEAGLESEARCH_H ++#define BEAGLESEARCH_H ++ ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include ++ ++extern "C" { ++#include ++#include ++} ++ ++// BeagleSearchClient sends 3 types of events ++// when results are to be sent as they arrive, ++// - RESULTFOUND : when result is found ++// - SEARCHOVER : when search is over ++// - KILLME : just before thread finishes - used to cleanup the thread object ++// when results are to be sent after receiving all of them ++// - RESULTFOUND : when all results are obtained ++// - KILLME : just before thread finishes - used to cleanup the thread object ++#define RESULTFOUND (QEvent::Type)1001 /* QEvent::User + 1 */ ++#define SEARCHOVER (QEvent::Type)1002 /* QEvent::User + 2 */ ++#define KILLME (QEvent::Type)1003 /* QEvent::User + 3 */ ++ ++class QStringList; ++ ++// IMPORTANT: Call this before any beagle calls ++void beagle_init (); ++ ++class Hit { ++public: ++ Hit (BeagleHit *_hit); ++ ~Hit (); ++ ++ // convenience wrappers ++ // remember that the hit values are utf8 strings ++ const KURL getUri () const { return KURL (QString::fromUtf8 (beagle_hit_get_uri (hit)));} ++ const QString getType () const { return QString::fromUtf8 (beagle_hit_get_type (hit));} ++ const QString getMimeType () const { return QString::fromUtf8 (beagle_hit_get_mime_type (hit));} ++ const QString getSource () const { return QString::fromUtf8 (beagle_hit_get_source (hit));} ++ const KURL getParentUri () const { return KURL (QString::fromUtf8 (beagle_hit_get_parent_uri (hit)));} ++ const QDict& getAllProperties () ++ { ++ if (! processed) ++ processProperties (); ++ return property_map; ++ } ++ const QStringList* getProperties (QString prop_name) ++ { ++ if (! processed) ++ processProperties (); ++ return property_map [prop_name]; ++ } ++ const QString operator[] (QString prop_name); ++ ++private: ++ BeagleHit *hit; ++ QDict property_map; ++ // not every hit may be used. so, do a lazy processing of property_map ++ bool processed; ++ void processProperties (); ++}; ++ ++class BeagleSearchResult{ ++public: ++ BeagleSearchResult(int client_id); ++ ~BeagleSearchResult(); ++ void addHit (BeagleHit *hit); ++ QString getHitCategory (Hit *hit); ++ ++ // id of the bsclient ++ int client_id; ++ // time taken to finish query ++ int query_msec; ++ // total number of results in this query ++ int total; ++ ++ const QPtrList *getHits () const; ++ ++private: ++ // lists of hits ++ QPtrList *hitlist; ++}; ++ ++// caller should delete bsclient->result and bsclient ++class BeagleSearchClient : public QThread { ++public: ++ // passing NULL for client makes bsclient create client itself and ++ // delete it later ++ BeagleSearchClient (int id, ++ QObject *y, ++ BeagleClient *client, ++ BeagleQuery *query, ++ bool collate_results) ++ : id (id), kill_me (false), object (y), client (client), ++ query (query), destroy_client (false), collate_results (collate_results) ++ { ++ if (client == NULL) { ++ client = beagle_client_new (NULL); ++ destroy_client = true; ++ } ++ ++// if (client == NULL) ++// throw -1; ++ ++ main_loop = g_main_loop_new (NULL, FALSE); ++ if (collate_results) ++ result = new BeagleSearchResult (id); ++ ++ client_mutex = new QMutex (); ++ } ++ ++ // It is never safe to delete BeagleSearchClient directly, the thread might still be running ++ ~BeagleSearchClient () ++ { ++ if (! finished ()) { ++ kdDebug () << "Thread " << id << " still running. Waiting.........." << endl; ++ wait (); ++ } ++ ++ if (destroy_client) ++ g_object_unref (client); ++ g_main_loop_unref (main_loop); ++ g_object_unref (query); ++ kdDebug() << "Deleting client ..." << id << endl; ++ delete client_mutex; ++ } ++ ++private: ++ static void hitsAddedSlot (BeagleQuery *query, ++ BeagleHitsAddedResponse *response, ++ BeagleSearchClient *bsclient); ++ ++ static void finishedSlot (BeagleQuery *query, ++ BeagleFinishedResponse *response, ++ BeagleSearchClient *bsclient); ++ ++public: ++ // run() starts the query and sends the result as follows: ++ // - either wait till get back all results and send it as RESULTFOUND ++ // - or, send results as it gets them as RESULTFOUND and ++ // send SEARCHOVER when finished ++ // collate_results controls the behaviour ++ virtual void run ( ); ++ ++ // after stopClient() is called, application can safely go and remove previous menu entries ++ // - i.e. after stopClient is called, app doesnt except the eventhandler to receive any results ++ // - use client_id to determine which is the current client, set it right after stopclient ++ // - Eventhandler checks client id, if it is current, it adds stuff to the menu ++ // else, it discards everything ++ // Once eventhandler is being processed, doQuery() wont be called and vice versa ++ // so no need to serialize eventhandler and doquery ++ // ++ // stopClient needs to make sure that once it is called, the thread is finished asap. Use a mutex ++ // to serialize actions. callbacks need to use mutex too. ++ // stopclient has to remove signal handlers to prevent further signal calls, set kill_me flag ++ // and quite main loop ++ // stopClient can be called at the following times: ++ // - Waiting for the first result: ++ // nothing extra ++ // - in hitsAddedSlot, processing results ++ // in callback, before processing, if killme is set, just return. ++ // - in hitsAddedSlot, after sending results ++ // before sending, if killme is set, dont send results ++ // (doing it twice in hitsAdded because forming BeagleSearchResult can take time) ++ // - Waiting for more results ++ // nothing extra ++ // - in finishedSlot, before sending finishedMsg ++ // if killme is set, just return ++ // - in finishedSlot, after sending finishedMsg ++ // if killme is set, just return ++ // in Run(), when return from mainloop, if killme is set, dont do anything more but call delete this ++ void stopClient (); ++ ++ // id of the client ++ // this is required in case applications fires many clients in rapid succession ++ int id; ++ ++ GMainLoop * main_loop; ++ BeagleSearchResult *result; ++ ++ // this is set if the client is obsolete now i.e. ++ // the application doesnt need the results from the client anymore ++ bool kill_me; ++private: ++ // the application; need this to send events to the application ++ QObject *object; ++ // mutex to control setting the kill_me shared variable ++ QMutex *client_mutex; ++ BeagleClient *client; ++ BeagleQuery *query; ++ // should the client be destroyed by the client ++ // if the client created it, then most probably it should ++ bool destroy_client; ++ bool collate_results; ++}; ++ ++class BeagleUtil { ++public: ++ ++ static BeagleQuery *createQueryFromString (QString query_str, ++ QStringList &sources, ++ QStringList &types, ++ int max_hits_per_source = 100); ++ static BeagleTimestamp *timestringToBeagleTimestamp (QString timestring); ++}; ++ ++#endif +--- kicker/plugins/kickoff-beagle-plugin.h (Revision 0) ++++ kicker/plugins/kickoff-beagle-plugin.h (Revision 849791) +@@ -0,0 +1,64 @@ ++/*************************************************************************** ++ * Copyright (C) 2006 by Stephan Binner * ++ * Copyright (c) 2006 Debajyoti Bera * ++ * * ++ * This program is free software; you can redistribute it and/or modify * ++ * it under the terms of the GNU General Public License as published by * ++ * the Free Software Foundation; either version 2 of the License, or * ++ * (at your option) any later version. * ++ * * ++ * This program is distributed in the hope that it will be useful, * ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of * ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * ++ * GNU General Public License for more details. * ++ * * ++ * You should have received a copy of the GNU General Public License * ++ * along with this program; if not, write to the * ++ * Free Software Foundation, Inc., * ++ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * ++ ***************************************************************************/ ++ ++#ifndef CAPITALIZEPLUGIN_H ++#define CAPITALIZEPLUGIN_H ++ ++#include "../interfaces/kickoff-search-plugin.h" ++#include "beaglesearch.h" ++ ++class KickoffBeaglePlugin :public KickoffSearch::Plugin ++{ ++ Q_OBJECT ++ ++public: ++ KickoffBeaglePlugin(QObject *parent, const char* name, const QStringList&); ++ ++ void query(QString, bool); ++ bool daemonRunning(); ++ ++protected slots: ++ // to clean beaglesearchclients ++ void cleanClientList (); ++ ++private: ++ QString current_query_str; ++ ++ // all beagle activity is done through the BSC object ++ BeagleSearchClient *current_beagle_client; ++ ++ // used to send notification from the beagle thread to the main event loop ++ virtual void customEvent (QCustomEvent *e); ++ ++ QPtrList toclean_client_list; ++ QMutex toclean_list_mutex; ++ ++ // show the results ++ void showResults (BeagleSearchResult *); ++ HitMenuItem *hitToHitMenuItem (int category, Hit *hit); ++ ++ // use a different id for each bsc client, and use that to separate stale responses from current ones ++ int current_beagle_client_id; ++ ++ bool genericTitle; ++ QDateTime datetimeFromString( const QString& ); ++}; ++ ++#endif /* CAPITALIZEPLUGIN_H */ + +Eigenschaftsänderungen: kicker/plugins +___________________________________________________________________ +Hinzugefügt: svn:ignore + + .deps +kickoffsearch_beagle.la +.libs +Makefile +Makefile.in +*.moc + + +--- kicker/Makefile.am 2010/08/10 08:10:21 1.1 ++++ kicker/Makefile.am 2010/08/10 08:10:33 +@@ -1,6 +1,6 @@ + INCLUDES = $(all_includes) + +-SUBDIRS = core ui buttons interfaces . ++SUBDIRS = core ui buttons interfaces plugins . + + bin_PROGRAMS = + lib_LTLIBRARIES = +--- kicker/core/Makefile.am 2010/08/10 08:15:06 1.2 ++++ kicker/core/Makefile.am 2010/08/10 08:17:08 +@@ -1,6 +1,6 @@ + INCLUDES = -I$(srcdir)/../../libkicker -I../../libkicker \ + -I../ui -I$(srcdir)/../ui -I$(srcdir)/../buttons -I$(top_srcdir)/libkonq \ +- $(all_includes) ++ $(all_includes) $(LIBBEAGLE_CFLAGS) $(GLIB_CFLAGS) + + noinst_LTLIBRARIES = libkicker_core.la + +--- kicker/buttons/Makefile.am 2010/08/10 08:16:06 1.1 ++++ kicker/buttons/Makefile.am 2010/08/10 08:16:28 +@@ -1,5 +1,5 @@ + INCLUDES = -I$(srcdir)/../core -I$(srcdir)/../../libkicker -I../../libkicker \ +- -I../ui -I$(srcdir)/../ui -I$(top_srcdir)/libkonq $(all_includes) ++ -I../ui -I$(srcdir)/../ui -I$(top_srcdir)/libkonq $(all_includes) $(LIBBEAGLE_CFLAGS) $(GLIB_CFLAGS) + + noinst_LTLIBRARIES = libkicker_buttons.la + diff --git a/opensuse/core/tdebase/kickoff-data.tar.bz2 b/opensuse/core/tdebase/kickoff-data.tar.bz2 new file mode 100644 index 000000000..9841a0aa0 Binary files /dev/null and b/opensuse/core/tdebase/kickoff-data.tar.bz2 differ diff --git a/opensuse/core/tdebase/kickoff-install-software.diff b/opensuse/core/tdebase/kickoff-install-software.diff new file mode 100644 index 000000000..f053a45fb --- /dev/null +++ b/opensuse/core/tdebase/kickoff-install-software.diff @@ -0,0 +1,25 @@ +--- kicker/kicker/ui/k_new_mnu.cpp 2007/08/08 15:14:50 1.141 ++++ kicker/kicker/ui/k_new_mnu.cpp 2007/08/08 15:39:58 +@@ -1345,6 +1345,9 @@ + KService::Ptr p = KService::serviceByStorageId("/usr/share/applications/YaST.desktop"); + m_systemView->insertMenuItem(p, nId++, index++); + ++ p = KService::serviceByStorageId("/usr/share/applications/package-manager.desktop"); ++ m_systemView->insertMenuItem(p, nId++, index++); ++ + m_systemView->insertItem( "info", i18n( "System Information" ), + "sysinfo:/", "sysinfo:/", nId++, index++ ); + +--- kicker/kicker/ui/itemview.cpp 2007/08/08 15:14:50 1.141 ++++ kicker/kicker/ui/itemview.cpp 2007/08/08 15:59:35 +@@ -139,7 +139,9 @@ + void KMenuItem::setIcon(const QString& icon, int size) + { + m_icon = icon; +- QListViewItem::setPixmap(0, KGlobal::iconLoader()->loadIcon(icon, KIcon::Panel, size )); ++ QPixmap pixmap = KGlobal::iconLoader()->loadIcon(icon, KIcon::Panel, size, KIcon::DefaultState, 0L, true); ++ if (!pixmap.isNull()) ++ QListViewItem::setPixmap(0, pixmap); + } + + void KMenuItem::setHasChildren( bool flag ) diff --git a/opensuse/core/tdebase/kickoff-kcm.diff b/opensuse/core/tdebase/kickoff-kcm.diff new file mode 100644 index 000000000..1dd87afde --- /dev/null +++ b/opensuse/core/tdebase/kickoff-kcm.diff @@ -0,0 +1,217 @@ +--- menutab_impl.h (revision 755866) ++++ menutab_impl.h (revision 774645) +@@ -62,6 +62,7 @@ signals: + + public slots: + void launchMenuEditor(); ++ void menuStyleChanged(); + + protected: + kSubMenuItem *m_bookmarkMenu; +--- kicker_config_hiding.desktop (revision 755866) ++++ kicker_config_hiding.desktop (revision 774645) +@@ -146,7 +146,7 @@ Keywords[csb]=kicker,panel,kpanel,lëstà + Keywords[cy]=ciciwr,kicker,panel,kpanel,bar tasgau,bar cychwyn,bar lansio,lleoliad,maint,awto-guddio,hunan-guddio,cuddio,botymau,animeiddiad,cefndir,themâu,storfa dewislen, storfa,cache,celc,cudd,K-Menu,nodau tudalen,dogfenni diweddar,porydd cyflym,dewislen porydd,dewislen,eiconau,teiliau,rhaglenigion,ymcychwyn,amlygu,carnau,eiconau chwyddo + Keywords[da]=kicker,panel,kpanel,opgavelinje,startlinje,sted,størrelse,autogem,gem,knapper,animering,baggrund,temaer,menucache,cache,skjult,K-Menu,bogmærker,nylige dokumenter,hurtigsøger,søgemenu,menu,ikoner,fliser,panelprogrammer,opstart,markér,hÃ¥ndterer,ikoner + Keywords[de]=Kicker,Panel,Taskbar,Kontrollleiste,Startleiste,Klickstartleiste,Fensterleiste,Autom. ausblenden,Ausblenden, Knöpfe,Animation,Hintergründe,Stile,Design,Themes,Menü-Zwischenspeicher, K-Menü,Zwischenspeicher,Lesezeichen,Zuletzt geöffnete Dateien, Schnellanzeiger,Menüs,Symbole,Icons,Kacheln,Applets,Miniprogramme, Java-Miniprogramme,Hervorhebung,Anfasser,Sicherheitsstufen,Zoom für Symbole +-Keywords[el]=kicker,πίνακας,kpanel,γÏαμμή εÏγασιών,γÏαμμή έναÏξης,γÏαμμή εκκίνησης,τοποθεσία,μέγεθος,αυτόματη απόκÏυψη,απόκÏυψη,κουμπιά,εφέ κίνησης,φόντο,θέματα,λανθάνουσα μνήμη μενοÏ,λανθάνουσα μνήμη,κÏυφό, K-ΜενοÏ,σελιδοδείκτες,Ï€Ïόσφατα έγγÏαφα,γÏήγοÏος εξεÏευνητής,Î¼ÎµÎ½Î¿Ï ÎµÎ¾ÎµÏευνητή,μενοÏ,εικονίδια,tiles,μικÏοεφαÏμογές,έναÏξη,τονισμός,χειÏιστήÏια, μεγέθυνση εικονιδίων ++Keywords[el]=kicker,πίνακας,kpanel,γÏαμμή εÏγασιών,γÏαμμή έναÏξης,γÏαμμή εκκίνησης,τοποθεσία,μέγεθος,αυτόματη απόκÏυψη,απόκÏυψη,κουμπιά,εφέ κίνησης,φόντο,θέματα,λανθάνουσα μνήμη μενοÏ,λανθάνουσα μνήμη,κÏυφό, K-ΜενοÏ,σελιδοδείκτες,Ï€Ïόσφατα έγγÏαφα,γÏήγοÏος εξεÏευνητής,Î¼ÎµÎ½Î¿Ï ÎµÎ¾ÎµÏευνητή,μενοÏ,εικονίδια,tiles,εφαÏμογίδια,έναÏξη,τονισμός,χειÏιστήÏια, μεγέθυνση εικονιδίων + Keywords[eo]=lanĉilo,panelo,tasklistelo,situo,grandeco,aÅ­tokaÅo,kaÅo,butono,fono,etoso,menubufro,K-Menuo,legosigno,lasta dokumento,rapidrigardilo,rigardmenuo,piktogramo,kahelo,aplikaĵo,lanĉo,emfazo,teniloj,pligrandigo,fidindaj aplikaĵetoj,sekurecnivelo + Keywords[es]=kicker,panel,kpanel,barra de tareas,barra de inicio,barra de lanzamiento,dirección,tamaño,auto ocultar,ocultar,botones,animación,fondo,temas,caché de menú,caché,oculto,Menú K,marcadores,documentos recientes,navegador rápido,menú navegador,menú,iconos,mosaicos,miniaplicaciones,arranque,resaltado,asas,iconos ampliados + Keywords[et]=kicker,paneel,kpanel,tegumiriba,käivitusriba,asukoht,suurus,terminal,automaatne peitmine,peitmine,nupud,animatsioon,taust,teemad,menüü vahemälu,vahemälu,peidetud,K-menüü,järjehoidjad,viimati kasutatud dokumendid, kiirbrauser,lehitsemise menüü,menüü,ikoonid,apletid,käivitamine,esiletõstmine,piirded,ikoonide suurendamine,usaldusväärsed apletid,turvatase +--- menutab_impl.cpp (revision 755866) ++++ menutab_impl.cpp (revision 774645) +@@ -16,12 +16,16 @@ + */ + + #include ++#include + #include + #include + #include + #include + #include ++#include ++#include + ++#include + #include + #include + #include +@@ -123,12 +127,41 @@ void MenuTab::load( bool useDefaults ) + } + } + ++ c->setGroup("General"); ++ m_comboMenuStyle->setCurrentItem( c->readBoolEntry("LegacyKMenu", false) ? 1 : 0 ); ++ m_openOnHover->setChecked( c->readBoolEntry("OpenOnHover", true) ); ++ menuStyleChanged(); ++ ++ connect(m_comboMenuStyle, SIGNAL(activated(int)), SIGNAL(changed())); ++ connect(m_comboMenuStyle, SIGNAL(activated(int)), SLOT(menuStyleChanged())); ++ connect(m_openOnHover, SIGNAL(clicked()), SIGNAL(changed())); ++ + m_showFrequent->setChecked(true); + + if ( useDefaults ) + emit changed(); + } + ++void MenuTab::menuStyleChanged() ++{ ++ if (m_comboMenuStyle->currentItem()==1) { ++ m_openOnHover->setEnabled(false); ++ m_subMenus->setEnabled(true); ++ kcfg_UseSidePixmap->setEnabled(true); ++ kcfg_MenuEntryFormat->setEnabled(true); ++ kcfg_RecentVsOften->setEnabled(true); ++ m_showFrequent->setEnabled(true); ++ } ++ else { ++ m_openOnHover->setEnabled(true); ++ m_subMenus->setEnabled(false); ++ kcfg_UseSidePixmap->setEnabled(false); ++ kcfg_MenuEntryFormat->setEnabled(false); ++ kcfg_RecentVsOften->setEnabled(false); ++ m_showFrequent->setEnabled(false); ++ } ++} ++ + void MenuTab::save() + { + KSharedConfig::Ptr c = KSharedConfig::openConfig(KickerConfig::the()->configName()); +@@ -154,8 +187,17 @@ void MenuTab::save() + } + } + c->writeEntry("Extensions", ext); ++ c->setGroup("General"); + ++ bool kmenusetting = m_comboMenuStyle->currentItem()==1; ++ bool oldkmenusetting = c->readBoolEntry("LegacyKMenu", false); ++ ++ c->writeEntry("LegacyKMenu", kmenusetting); ++ c->writeEntry("OpenOnHover", m_openOnHover->isChecked()); + c->sync(); ++ ++ if (kmenusetting != oldkmenusetting) ++ DCOPRef ("kicker", "default").call("restart()"); + } + + void MenuTab::defaults() +--- menutab.ui (revision 755866) ++++ menutab.ui (revision 774645) +@@ -8,8 +8,8 @@ + + 0 + 0 +- 410 +- 437 ++ 923 ++ 649 + + + +@@ -19,6 +19,59 @@ + + 0 + ++ ++ ++ layout5 ++ ++ ++ ++ unnamed ++ ++ ++ ++ textLabel1 ++ ++ ++ Start menu style: ++ ++ ++ comboMenuStyle ++ ++ ++ ++ ++ ++ SUSE ++ ++ ++ ++ ++ KDE ++ ++ ++ ++ m_comboMenuStyle ++ ++ ++ ++ ++ spacer4 ++ ++ ++ Horizontal ++ ++ ++ Expanding ++ ++ ++ ++ 40 ++ 20 ++ ++ ++ ++ ++ + + + m_kmenuGroup +@@ -38,6 +91,14 @@ + + unnamed + ++ ++ ++ m_openOnHover ++ ++ ++ Open menu on mouse hover ++ ++ + + + kcfg_MenuEntryFormat +@@ -377,6 +438,8 @@ + + + ++ ++ + + m_formatSimple + m_formatNameDesc +@@ -400,8 +463,5 @@ + + klistview.h + knuminput.h +- knuminput.h +- knuminput.h +- knuminput.h + + +--- kicker_config_menus.desktop (revision 755866) ++++ kicker_config_menus.desktop (revision 774645) +@@ -143,7 +143,7 @@ Keywords[csb]=kicker,panel,kpanel,lëstà + Keywords[cy]=ciciwr,kicker,panel,kpanel,bar tasgau,bar cychwyn,bar lansio,lleoliad,maint,awto-guddio,hunan-guddio,cuddio,botymau,animeiddiad,cefndir,themâu,storfa dewislen, storfa,cache,celc,cudd,K-Menu,nodau tudalen,dogfenni diweddar,porydd cyflym,dewislen porydd,dewislen,eiconau,teiliau,rhaglenigion,ymcychwyn,amlygu,carnau,eiconau chwyddo + Keywords[da]=kicker,panel,kpanel,opgavelinje,startlinje,sted,størrelse,autogem,gem,knapper,animering,baggrund,temaer,menucache,cache,skjult,K-Menu,bogmærker,nylige dokumenter,hurtigsøger,søgemenu,menu,ikoner,fliser,panelprogrammer,opstart,markér,hÃ¥ndterer,ikoner + Keywords[de]=Kicker,Panel,Taskbar,Kontrollleiste,Startleiste,Klickstartleiste,Fensterleiste,Autom. ausblenden,Ausblenden, Knöpfe,Animation,Hintergründe,Stile,Design,Themes,Menü-Zwischenspeicher, K-Menü,Zwischenspeicher,Lesezeichen,Zuletzt geöffnete Dateien, Schnellanzeiger,Menüs,Symbole,Icons,Kacheln,Applets,Miniprogramme, Java-Miniprogramme,Hervorhebung,Anfasser,Sicherheitsstufen,Zoom für Symbole +-Keywords[el]=kicker,πίνακας,kpanel,γÏαμμή εÏγασιών,γÏαμμή έναÏξης,γÏαμμή εκκίνησης,τοποθεσία,μέγεθος,αυτόματη απόκÏυψη,απόκÏυψη,κουμπιά,εφέ κίνησης,φόντο,θέματα,λανθάνουσα μνήμη μενοÏ,λανθάνουσα μνήμη,κÏυφό, K-ΜενοÏ,σελιδοδείκτες,Ï€Ïόσφατα έγγÏαφα,γÏήγοÏος εξεÏευνητής,Î¼ÎµÎ½Î¿Ï ÎµÎ¾ÎµÏευνητή,μενοÏ,εικονίδια,tiles,μικÏοεφαÏμογές,έναÏξη,τονισμός,χειÏιστήÏια, μεγέθυνση εικονιδίων ++Keywords[el]=kicker,πίνακας,kpanel,γÏαμμή εÏγασιών,γÏαμμή έναÏξης,γÏαμμή εκκίνησης,τοποθεσία,μέγεθος,αυτόματη απόκÏυψη,απόκÏυψη,κουμπιά,εφέ κίνησης,φόντο,θέματα,λανθάνουσα μνήμη μενοÏ,λανθάνουσα μνήμη,κÏυφό, K-ΜενοÏ,σελιδοδείκτες,Ï€Ïόσφατα έγγÏαφα,γÏήγοÏος εξεÏευνητής,Î¼ÎµÎ½Î¿Ï ÎµÎ¾ÎµÏευνητή,μενοÏ,εικονίδια,tiles,εφαÏμογίδια,έναÏξη,τονισμός,χειÏιστήÏια, μεγέθυνση εικονιδίων + Keywords[eo]=lanĉilo,panelo,tasklistelo,situo,grandeco,aÅ­tokaÅo,kaÅo,butono,fono,etoso,menubufro,K-Menuo,legosigno,lasta dokumento,rapidrigardilo,rigardmenuo,piktogramo,kahelo,aplikaĵo,lanĉo,emfazo,teniloj,pligrandigo,fidindaj aplikaĵetoj,sekurecnivelo + Keywords[es]=kicker,panel,kpanel,barra de tareas,barra de inicio,barra de lanzamiento,dirección,tamaño,auto ocultar,ocultar,botones,animación,fondo,temas,caché de menú,caché,oculto,Menú K,marcadores,documentos recientes,navegador rápido,menú navegador,menú,iconos,mosaicos,miniaplicaciones,arranque,resaltado,asas,iconos ampliados + Keywords[et]=kicker,paneel,kpanel,tegumiriba,käivitusriba,asukoht,suurus,terminal,automaatne peitmine,peitmine,nupud,animatsioon,taust,teemad,menüü vahemälu,vahemälu,peidetud,K-menüü,järjehoidjad,viimati kasutatud dokumendid, kiirbrauser,lehitsemise menüü,menüü,ikoonid,apletid,käivitamine,esiletõstmine,piirded,ikoonide suurendamine,usaldusväärsed apletid,turvatase diff --git a/opensuse/core/tdebase/kickoff.diff b/opensuse/core/tdebase/kickoff.diff new file mode 100644 index 000000000..e2d73f567 --- /dev/null +++ b/opensuse/core/tdebase/kickoff.diff @@ -0,0 +1,9812 @@ +--- taskbar/taskcontainer.cpp (Revision 849788) ++++ taskbar/taskcontainer.cpp (Revision 849791) +@@ -67,7 +67,11 @@ + discardNextMouseEvent(false), + aboutToActivate(false), + m_mouseOver(false), +- m_paintEventCompression(false) ++ animationTimer(0, "TaskContainer::animationTimer"), ++ dragSwitchTimer(0, "TaskContainer::dragSwitchTimer"), ++ attentionTimer(0, "TaskContainer::attentionTimer"), ++ m_paintEventCompression(false), ++ m_paintEventCompressionTimer(0, "TaskContainer::paintEventCompressionTimer") + { + init(); + setAcceptDrops(true); // Always enabled to activate task during drag&drop. +@@ -95,7 +99,11 @@ + discardNextMouseEvent(false), + aboutToActivate(false), + m_mouseOver(false), +- m_paintEventCompression(false) ++ animationTimer(0, "TaskContainer::animationTimer"), ++ dragSwitchTimer(0, "TaskContainer::dragSwitchTimer"), ++ attentionTimer(0, "TaskContainer::attentionTimer"), ++ m_paintEventCompression(false), ++ m_paintEventCompressionTimer(0, "TaskContainer::paintEventCompressionTimer") + { + init(); + setEnabled(false); +--- taskbar/taskbar.cpp 2009/11/20 21:00:26 1.1 ++++ taskbar/taskbar.cpp 2009/11/20 21:00:38 +@@ -59,7 +59,8 @@ + m_showIcon(false), + m_showOnlyIconified(false), + m_textShadowEngine(0), +- m_ignoreUpdates(false) ++ m_ignoreUpdates(false), ++ m_relayoutTimer(0, "TaskBar::m_relayoutTimer") + { + arrowType = LeftArrow; + blocklayout = true; +--- libkicker/panelbutton.h (Revision 849788) ++++ libkicker/panelbutton.h (Revision 849791) +@@ -254,9 +254,11 @@ + /** + * Sets the direction to pop up the contents of the button. + */ +- void setPopupDirection(KPanelApplet::Direction d); ++ virtual void setPopupDirection(KPanelApplet::Direction d); + + protected: ++ ++ void setIconAlignment(AlignmentFlags align); + /** + * Subclasses must implement this to define the name of the button which is + * used to identify this button for saving and loading. It must be unique +@@ -391,6 +393,7 @@ + QPixmap m_iconz; // mouse over + KPanelExtension::Position m_arrowDirection; + KPanelApplet::Direction m_popupDirection; ++ AlignmentFlags m_iconAlignment; + Orientation m_orientation; + int m_size; + double m_fontPercent; +@@ -419,12 +422,12 @@ + * Sets the button's popup menu. + * @param popup the menu to pop up + */ +- void setPopup(QPopupMenu *popup); ++ void setPopup(QWidget *popup); + + /** + * @return the button's popup menu + */ +- QPopupMenu *popup() const; ++ QWidget *popup() const; + + bool eventFilter(QObject *, QEvent *); + virtual void showMenu(); +@@ -459,8 +462,8 @@ + private slots: + void menuAboutToHide(); + +-private: +- QPopupMenu *m_popup; ++protected: ++ QWidget *m_popup; + bool m_pressedDuringPopup; + bool m_initialized; + +--- libkicker/kickerSettings.kcfg (Revision 849788) ++++ libkicker/kickerSettings.kcfg (Revision 849791) +@@ -98,6 +98,70 @@ + + + ++ ++ ++ false ++ ++ ++ ++ ++ true ++ ++ ++ ++ ++ true ++ ++ ++ ++ ++ 0 ++ ++ ++ ++ ++ 0 ++ ++ ++ ++ ++ 0 ++ -100 ++ 100 ++ ++ ++ ++ ++ false ++ ++ ++ ++ ++ false ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ LabelAndIcon ++ ++ ++ ++ ++ ++ true ++ ++ ++ + + + +@@ -172,6 +236,19 @@ + false + + ++ ++ ++ ++ ++ ++ ++ false ++ ++ ++ ++ ++ ++ + + + +@@ -337,6 +414,29 @@ + + + ++ ++ ++ ++ ++ ++ ++ ++ 50 ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ 2 ++ ++ ++ ++ ++ + + + +--- libkicker/kickertip.cpp (Revision 849788) ++++ libkicker/kickertip.cpp (Revision 849791) +@@ -38,6 +38,7 @@ + + // putting this #include higher results in compile errors + #include ++#include + + static const int DEFAULT_FRAMES_PER_SECOND = 30; + +@@ -71,14 +72,16 @@ + m_dissolveDelta(-1), + m_direction(KPanelApplet::Up), + m_dirty(false), +- m_toolTipsEnabled(KickerSettings::showToolTips()), +- m_tippingFor(0) ++ m_tippingFor(0), ++ m_timer(0, "KickerTip::m_timer"), ++ m_frameTimer(0, "KickerTip::m_frameTimer") + { + setFocusPolicy(NoFocus); + setBackgroundMode(NoBackground); + resize(0, 0); + hide(); + connect(&m_frameTimer, SIGNAL(timeout()), SLOT(internalUpdate())); ++ connect(kapp, SIGNAL(settingsChanged(SettingsCategory)), SLOT(slotSettingsChanged())); + } + + KickerTip::~KickerTip() +@@ -87,6 +90,11 @@ + delete m_mimeFactory; + } + ++void KickerTip::slotSettingsChanged() ++{ ++ QToolTip::setGloballyEnabled(KickerSettings::showToolTips()); ++} ++ + void KickerTip::display() + { + if (!tippingEnabled()) +@@ -192,9 +200,7 @@ + + void KickerTip::mousePressEvent(QMouseEvent * /*e*/) + { +- QToolTip::setGloballyEnabled(m_toolTipsEnabled); + m_timer.stop(); +- m_frameTimer.stop(); + hide(); + } + +@@ -395,8 +401,11 @@ + m_tippingEnabled--; + } + ++ assert(m_tippingEnabled >= -1); ++ + if (m_tippingEnabled < 1 && m_self) + { ++ m_self->m_timer.stop(); + m_self->hide(); + } + } +@@ -411,6 +420,8 @@ + m_tippingFor = 0; + m_frameTimer.stop(); + QWidget::hide(); ++ ++ QToolTip::setGloballyEnabled(KickerSettings::showToolTips()); + } + + bool KickerTip::eventFilter(QObject *object, QEvent *event) +@@ -439,7 +450,6 @@ + !qApp->activePopupWidget() && + !isTippingFor(widget)) + { +- m_toolTipsEnabled = QToolTip::isGloballyEnabled(); + QToolTip::setGloballyEnabled(false); + + tipFor(widget); +@@ -461,8 +471,6 @@ + } + break; + case QEvent::Leave: +- QToolTip::setGloballyEnabled(m_toolTipsEnabled); +- + m_timer.stop(); + + if (isTippingFor(widget) && isVisible()) +@@ -475,9 +483,7 @@ + tipFor(0); + break; + case QEvent::MouseButtonPress: +- QToolTip::setGloballyEnabled(m_toolTipsEnabled); + m_timer.stop(); +- m_frameTimer.stop(); + hide(); + default: + break; +--- libkicker/kickertip.h (Revision 849788) ++++ libkicker/kickertip.h (Revision 849791) +@@ -92,6 +92,7 @@ + void tipperDestroyed(QObject* o); + void internalUpdate(); + void display(); ++ void slotSettingsChanged(); + + private: + QBitmap m_mask; +@@ -108,7 +109,6 @@ + QTimer m_timer; + QTimer m_frameTimer; + bool m_dirty; +- bool m_toolTipsEnabled; + + const QWidget* m_tippingFor; + +--- libkicker/panelbutton.cpp (Revision 849788) ++++ libkicker/panelbutton.cpp (Revision 849791) +@@ -42,6 +42,7 @@ + #include + #include + #include ++#include + + #include "global.h" + +@@ -65,6 +66,7 @@ + m_hasAcceptedDrag(false), + m_arrowDirection(KPanelExtension::Bottom), + m_popupDirection(KPanelApplet::Up), ++ m_iconAlignment(AlignCenter), + m_orientation(Horizontal), + m_size((KIcon::StdSizes)-1), + m_fontPercent(0.40) +@@ -186,6 +188,12 @@ + setArrowDirection(KickerLib::directionToPopupPosition(d)); + } + ++void PanelButton::setIconAlignment(AlignmentFlags align) ++{ ++ m_iconAlignment = align; ++ update(); ++} ++ + void PanelButton::setOrientation(Orientation o) + { + m_orientation = o; +@@ -300,7 +308,9 @@ + + int PanelButton::heightForWidth(int width) const + { +- return preferredDimension(width); ++ int rc=preferredDimension(width); ++ ++ return rc; + } + + const QPixmap& PanelButton::labelIcon() const +@@ -556,11 +566,16 @@ + icon.height() - 2); + } + ++ int y = 0; ++ if (m_iconAlignment & AlignVCenter) ++ y = (height() - icon.height()) / 2; ++ else if (m_iconAlignment & AlignBottom) ++ y = (height() - icon.height()); ++ + if (!m_buttonText.isEmpty() && orientation() == Horizontal) + { + int h = height(); + int w = width(); +- int y = (h - icon.height())/2; + p->save(); + QFont f = font(); + +@@ -629,8 +644,11 @@ + } + else if (!icon.isNull()) + { +- int y = (height() - icon.height()) / 2; +- int x = (width() - icon.width()) / 2; ++ int x = 0; ++ if (m_iconAlignment & AlignHCenter) ++ x = (width() - icon.width()) / 2; ++ else if (m_iconAlignment & AlignRight) ++ x = (width() - icon.width()); + p->drawPixmap(x, y, icon); + } + +@@ -792,7 +810,19 @@ + QString nm = m_iconName; + KIcon::States defaultState = isEnabled() ? KIcon::DefaultState : + KIcon::DisabledState; +- m_icon = ldr->loadIcon(nm, KIcon::Panel, m_size, defaultState, 0L, true); ++ if (nm=="kmenu-suse") ++ { ++ QString pth = locate( "data", "kicker/pics/kmenu_basic.mng" ); ++ if (!pth.isEmpty()) ++ { ++ m_icon = QImage(pth); ++ m_iconh = QPixmap(m_icon); ++ m_iconz = QPixmap(m_icon); ++ return; ++ } ++ } ++ else ++ m_icon = ldr->loadIcon(nm, KIcon::Panel, m_size, defaultState, 0L, true); + + if (m_icon.isNull()) + { +@@ -857,7 +887,7 @@ + connect(this, SIGNAL(pressed()), SLOT(slotExecMenu())); + } + +-void PanelPopupButton::setPopup(QPopupMenu *popup) ++void PanelPopupButton::setPopup(QWidget *popup) + { + if (m_popup) + { +@@ -875,7 +905,7 @@ + } + } + +-QPopupMenu *PanelPopupButton::popup() const ++QWidget *PanelPopupButton::popup() const + { + return m_popup; + } +@@ -954,7 +984,9 @@ + } + + m_popup->adjustSize(); +- m_popup->exec(KickerLib::popupPosition(popupDirection(), m_popup, this)); ++ if(dynamic_cast(m_popup)) ++ static_cast(m_popup)->exec(KickerLib::popupPosition(popupDirection(), m_popup, this)); ++ // else.. hmm. some derived class has to fix it. + } + + void PanelPopupButton::menuAboutToHide() +@@ -964,8 +996,10 @@ + return; + } + +- setDown(false); +- KickerTip::enableTipping(true); ++ if (isDown()) { ++ setDown(false); ++ KickerTip::enableTipping(true); ++ } + } + + void PanelPopupButton::triggerDrag() +@@ -983,3 +1017,5 @@ + m_initialized = initialized; + } + ++ ++ +--- extensions/kasbar/kasbar.cpp (Revision 849788) ++++ extensions/kasbar/kasbar.cpp (Revision 849791) +@@ -719,7 +719,7 @@ + i->setText( "Animated" ); + i->setIcon( KGlobal::iconLoader()->loadIcon( "icons", KIcon::NoGroup, KIcon::SizeMedium ) ); + i->setAnimation( resources()->startupAnimation() ); +- QTimer *aniTimer = new QTimer( i ); ++ QTimer *aniTimer = new QTimer( i, "aniTimer" ); + connect( aniTimer, SIGNAL( timeout() ), i, SLOT( advanceAnimation() ) ); + aniTimer->start( 100 ); + i->setShowAnimation( true ); +--- extensions/kasbar/kasclockitem.cpp (Revision 849788) ++++ extensions/kasbar/kasclockitem.cpp (Revision 849791) +@@ -38,7 +38,7 @@ + { + setCustomPopup( true ); + +- QTimer *t = new QTimer( this ); ++ QTimer *t = new QTimer( this, "t" ); + connect( t, SIGNAL( timeout() ), SLOT( updateTime() ) ); + t->start( 1000 ); + +--- extensions/kasbar/kasstartupitem.cpp (Revision 849788) ++++ extensions/kasbar/kasstartupitem.cpp (Revision 849791) +@@ -79,7 +79,7 @@ + setShowFrame( false ); + setAnimation( resources()->startupAnimation() ); + +- aniTimer = new QTimer( this ); ++ aniTimer = new QTimer( this, "aniTimer" ); + connect( aniTimer, SIGNAL( timeout() ), SLOT( aniTimerFired() ) ); + aniTimer->start( 100 ); + } +--- extensions/kasbar/kasloaditem.cpp (Revision 849788) ++++ extensions/kasbar/kasloaditem.cpp (Revision 849791) +@@ -33,7 +33,7 @@ + KasLoadItem::KasLoadItem( KasBar *parent ) + : KasItem( parent ) + { +- QTimer *t = new QTimer( this ); ++ QTimer *t = new QTimer( this, "KasLoadItem::t" ); + connect( t, SIGNAL( timeout() ), SLOT( updateDisplay() ) ); + t->start( 1000 ); + updateDisplay(); +--- kicker/interfaces/kickoff-search-plugin.h (Revision 0) ++++ kicker/interfaces/kickoff-search-plugin.h (Revision 849791) +@@ -0,0 +1,106 @@ ++/*************************************************************************** ++ * Copyright (C) 2006 by Stephan Binner * ++ * Copyright (c) 2006 Debajyoti Bera * ++ * * ++ * This program is free software; you can redistribute it and/or modify * ++ * it under the terms of the GNU General Public License as published by * ++ * the Free Software Foundation; either version 2 of the License, or * ++ * (at your option) any later version. * ++ * * ++ * This program is distributed in the hope that it will be useful, * ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of * ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * ++ * GNU General Public License for more details. * ++ * * ++ * You should have received a copy of the GNU General Public License * ++ * along with this program; if not, write to the * ++ * Free Software Foundation, Inc., * ++ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * ++ ***************************************************************************/ ++ ++#ifndef KICKOFF_SEARCH_PLUGIN_H ++#define KICKOFF_SEARCH_PLUGIN_H ++ ++#include "kickoffsearchinterface.h" ++ ++#include ++#include ++#include ++ ++typedef enum { ++ ACTIONS = 0, ++ APPS, ++ BOOKMARKS, ++ NOTES, ++ MAILS, ++ FILES, ++ MUSIC, ++ WEBHIST, ++ CHATS, ++ FEEDS, ++ PICS, ++ VIDEOS, ++ DOCS, ++ OTHER, ++ num_categories ++} CATEGORY; ++ ++class HitMenuItem ++{ ++public: ++ HitMenuItem (int id, int category) ++ : id (id), category (category),score(0) { } /* dummy */ ++ HitMenuItem (QString name, QString info, KURL uri, QString mimetype, int id, int category, QString icon=QString::null, int score = 0) ++ : display_name (name) ++ , display_info (info) ++ , uri (uri) ++ , mimetype (mimetype) ++ , id (id) ++ , category (category) ++ , icon (icon) ++ , score (score) ++ , service (NULL) { } ++ ++ ~HitMenuItem () { } ++ ++ bool operator< (HitMenuItem item) ++ { ++ return ((category == item.category && score > item.score) || (category == item.category && id < item.id) || ++ (category < item.category)); ++ } ++ ++ // FIXME: We dont really need to store display_name and display_info ++ QString display_name; // name to display ++ QString display_info; // other information to display ++ KURL uri; // uri to open when clicked ++ QString mimetype; ++ int id; // id of the item in the menu ++ int category; ++ QString icon; ++ int score; ++ KService::Ptr service; ++ ++ QString quotedPath () const ++ { ++ return uri.path ().replace ('"', "\\\""); ++ } ++}; ++ ++namespace KickoffSearch { ++ ++ class Plugin : public QObject ++ { ++ Q_OBJECT ++ ++ public: ++ Plugin(QObject *parent, const char* name=0); ++ virtual ~Plugin(); ++ ++ virtual bool daemonRunning()=0; ++ virtual void query(QString,bool)=0; ++ ++ KickoffSearchInterface * kickoffSearchInterface(); ++ }; ++}; ++ ++#endif /* KICKOFF_SEARCH_PLUGIN_H */ +--- kicker/interfaces/kickoffsearchinterface.cpp (Revision 0) ++++ kicker/interfaces/kickoffsearchinterface.cpp (Revision 849791) +@@ -0,0 +1,27 @@ ++/*************************************************************************** ++ * Copyright (C) 2006 by Stephan Binner * ++ * * ++ * This program is free software; you can redistribute it and/or modify * ++ * it under the terms of the GNU General Public License as published by * ++ * the Free Software Foundation; either version 2 of the License, or * ++ * (at your option) any later version. * ++ * * ++ * This program is distributed in the hope that it will be useful, * ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of * ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * ++ * GNU General Public License for more details. * ++ * * ++ * You should have received a copy of the GNU General Public License * ++ * along with this program; if not, write to the * ++ * Free Software Foundation, Inc., * ++ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * ++ ***************************************************************************/ ++ ++#include "kickoffsearchinterface.h" ++ ++KickoffSearch::KickoffSearchInterface::KickoffSearchInterface( QObject* parent, const char* name ) ++ :QObject( parent, name ) ++{ ++} ++ ++#include "kickoffsearchinterface.moc" +--- kicker/interfaces/Makefile.am (Revision 0) ++++ kicker/interfaces/Makefile.am (Revision 849791) +@@ -0,0 +1,12 @@ ++METASOURCES = AUTO ++INCLUDES= -I$(top_srcdir)/src $(all_includes) ++ ++# The library containing the plugin base class ++lib_LTLIBRARIES = libkickoffsearch_interfaces.la ++libkickoffsearch_interfaces_la_SOURCES = kickoff-search-plugin.cpp kickoffsearchinterface.cpp ++libkickoffsearch_interfaces_la_LDFLAGS = $(all_libraries) -version-info 0:0:0 ++ ++kickoffsearchincludedir = $(includedir) ++kickoffsearchinclude_HEADERS = kickoff-search-plugin.h kickoffsearchinterface.h ++ ++kde_servicetypes_DATA = kickoffsearchplugin.desktop +--- kicker/interfaces/kickoffsearchinterface.h (Revision 0) ++++ kicker/interfaces/kickoffsearchinterface.h (Revision 849791) +@@ -0,0 +1,46 @@ ++/*************************************************************************** ++ * Copyright (C) 2006 by Stephan Binner * ++ * * ++ * This program is free software; you can redistribute it and/or modify * ++ * it under the terms of the GNU General Public License as published by * ++ * the Free Software Foundation; either version 2 of the License, or * ++ * (at your option) any later version. * ++ * * ++ * This program is distributed in the hope that it will be useful, * ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of * ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * ++ * GNU General Public License for more details. * ++ * * ++ * You should have received a copy of the GNU General Public License * ++ * along with this program; if not, write to the * ++ * Free Software Foundation, Inc., * ++ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * ++ ***************************************************************************/ ++ ++#ifndef KICKOFFSEARCHINTERFACE_H ++#define KICKOFFSEARCHINTERFACE_H ++ ++#include ++ ++class HitMenuItem; ++ ++namespace KickoffSearch ++{ ++ class KickoffSearchInterface :public QObject ++ { ++ Q_OBJECT ++ ++ public: ++ KickoffSearchInterface( QObject* parent, const char* name = 0); ++ ++ public: ++ virtual bool anotherHitMenuItemAllowed(int cat) = 0; ++ virtual void addHitMenuItem(HitMenuItem* item) = 0; ++ virtual void searchOver() = 0; ++ virtual void initCategoryTitlesUpdate() = 0; ++ virtual void updateCategoryTitles() = 0; ++ }; ++} ++ ++#endif /* SELECTIONINTERFACE_H */ ++ +--- kicker/interfaces/kickoffsearchplugin.desktop (Revision 0) ++++ kicker/interfaces/kickoffsearchplugin.desktop (Revision 849791) +@@ -0,0 +1,4 @@ ++[Desktop Entry] ++Type=ServiceType ++X-KDE-ServiceType=KickoffSearch/Plugin ++Comment=A search plugin for Kickoff +--- kicker/interfaces/kickoff-search-plugin.cpp (Revision 0) ++++ kicker/interfaces/kickoff-search-plugin.cpp (Revision 849791) +@@ -0,0 +1,37 @@ ++/*************************************************************************** ++ * Copyright (C) 2006 by Stephan Binner * ++ * * ++ * This program is free software; you can redistribute it and/or modify * ++ * it under the terms of the GNU General Public License as published by * ++ * the Free Software Foundation; either version 2 of the License, or * ++ * (at your option) any later version. * ++ * * ++ * This program is distributed in the hope that it will be useful, * ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of * ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * ++ * GNU General Public License for more details. * ++ * * ++ * You should have received a copy of the GNU General Public License * ++ * along with this program; if not, write to the * ++ * Free Software Foundation, Inc., * ++ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * ++ ***************************************************************************/ ++ ++#include "kickoff-search-plugin.h" ++#include ++ ++KickoffSearch::Plugin::Plugin(QObject *parent, const char* name ) ++ :QObject( parent, name ) ++{ ++} ++ ++KickoffSearch::Plugin::~Plugin() ++{ ++} ++ ++KickoffSearch::KickoffSearchInterface* KickoffSearch::Plugin::kickoffSearchInterface() ++{ ++ return static_cast( parent()->child( 0, "KickoffSearch::KickoffSearchInterface" ) ); ++} ++ ++#include "kickoff-search-plugin.moc" + +Eigenschaftsänderungen: kicker/interfaces +___________________________________________________________________ +Hinzugefügt: svn:ignore + + .deps +libkickoffsearch_interfaces.la +.libs +Makefile +Makefile.in +*.moc + + +--- kicker/core/menumanager.h (Revision 849788) ++++ kicker/core/menumanager.h (Revision 849791) +@@ -28,7 +28,9 @@ + #include + + class PanelKMenu; ++class KMenu; + class KickerClientMenu; ++class KMenuStub; + class PanelPopupButton; + + typedef QValueList KButtonList; +@@ -50,13 +52,12 @@ + bool process(const QCString &fun, const QByteArray &data, QCString& replyType, QByteArray &reply); + + // KMenu controls +- PanelKMenu* kmenu() { return m_kmenu; } +- void showKMenu(); ++ KMenuStub* kmenu() { return m_kmenu; } + void popupKMenu(const QPoint &p); + + void registerKButton(PanelPopupButton *button); + void unregisterKButton(PanelPopupButton *button); +- PanelPopupButton* findKButtonFor(QPopupMenu* menu); ++ PanelPopupButton* findKButtonFor(QWidget* menu); + ~MenuManager(); + + public slots: +@@ -67,7 +68,7 @@ + void applicationRemoved(const QCString&); + + protected: +- PanelKMenu* m_kmenu; ++ KMenuStub* m_kmenu; + typedef QValueList ClientMenuList; + ClientMenuList clientmenus; + +--- kicker/core/kicker.cpp (Revision 849788) ++++ kicker/core/kicker.cpp (Revision 849791) +@@ -48,6 +48,8 @@ + #include "extensionmanager.h" + #include "pluginmanager.h" + #include "menumanager.h" ++#include "k_new_mnu.h" ++#include "k_mnu_stub.h" + #include "k_mnu.h" + #include "showdesktop.h" + #include "panelbutton.h" +@@ -106,6 +108,7 @@ + + KGlobal::iconLoader()->addExtraDesktopThemes(); + ++ KGlobal::locale()->insertCatalogue("kdmgreet"); + KGlobal::locale()->insertCatalogue("libkonq"); + KGlobal::locale()->insertCatalogue("libdmctl"); + KGlobal::locale()->insertCatalogue("libtaskbar"); +@@ -212,7 +215,7 @@ + + void Kicker::showKMenu() + { +- MenuManager::the()->showKMenu(); ++ MenuManager::the()->kmenuAccelActivated(); + } + + void Kicker::popupKMenu(const QPoint &p) +--- kicker/core/container_button.cpp (Revision 849788) ++++ kicker/core/container_button.cpp (Revision 849791) +@@ -43,6 +43,7 @@ + #include "desktopbutton.h" + #include "extensionbutton.h" + #include "kbutton.h" ++#include "knewbutton.h" + #include "kicker.h" + #include "kickerSettings.h" + #include "kickertip.h" +@@ -326,14 +327,20 @@ + : ButtonContainer(opMenu, parent) + { + checkImmutability(config); +- embedButton( new KButton(this) ); ++ if(KickerSettings::legacyKMenu()) ++ embedButton( new KButton(this) ); ++ else ++ embedButton( new KNewButton(this) ); + _actions = PanelAppletOpMenu::KMenuEditor; + } + + KMenuButtonContainer::KMenuButtonContainer(QPopupMenu *opMenu, QWidget* parent) + : ButtonContainer(opMenu, parent) + { +- embedButton( new KButton(this) ); ++ if(KickerSettings::legacyKMenu()) ++ embedButton( new KButton(this) ); ++ else ++ embedButton( new KNewButton(this) ); + _actions = PanelAppletOpMenu::KMenuEditor; + } + +--- kicker/core/main.cpp (Revision 849788) ++++ kicker/core/main.cpp (Revision 849791) +@@ -108,7 +108,7 @@ + appname.sprintf("kicker-screen-%d", kicker_screen_number); + + KAboutData aboutData( appname.data(), I18N_NOOP("KDE Panel"), +- version, description, KAboutData::License_BSD, ++ version, description, KAboutData::License_GPL_V2, + I18N_NOOP("(c) 1999-2004, The KDE Team") ); + + aboutData.addAuthor("Aaron J. Seigo", I18N_NOOP("Current maintainer"), "aseigo@kde.org"); +--- kicker/core/menumanager.cpp (Revision 849788) ++++ kicker/core/menumanager.cpp (Revision 849791) +@@ -31,9 +31,12 @@ + #include "client_mnu.h" + #include "container_extension.h" + #include "global.h" ++#include "k_new_mnu.h" + #include "k_mnu.h" ++#include "k_mnu_stub.h" + #include "kicker.h" + #include "panelbutton.h" ++#include "kickerSettings.h" + + #include "menumanager.h" + #include "menumanager.moc" +@@ -62,7 +65,11 @@ + MenuManager::MenuManager(QObject *parent) + : QObject(parent, "MenuManager"), DCOPObject("MenuManager") + { +- m_kmenu = new PanelKMenu; ++ if (KickerSettings::legacyKMenu()) ++ m_kmenu = new KMenuStub(new PanelKMenu); ++ else ++ m_kmenu = new KMenuStub(new KMenu); ++ + kapp->dcopClient()->setNotifications(true); + connect(kapp->dcopClient(), SIGNAL(applicationRemoved(const QCString&)), + this, SLOT(applicationRemoved(const QCString&))); +@@ -83,14 +90,8 @@ + m_kmenu->selectFirstItem(); + } + +-void MenuManager::showKMenu() +-{ +- m_kmenu->showMenu(); +-} +- + void MenuManager::popupKMenu(const QPoint &p) + { +-// kdDebug(1210) << "popupKMenu()" << endl; + if (m_kmenu->isVisible()) + { + m_kmenu->hide(); +@@ -120,7 +121,7 @@ + m_kbuttons.remove(button); + } + +-PanelPopupButton* MenuManager::findKButtonFor(QPopupMenu* menu) ++PanelPopupButton* MenuManager::findKButtonFor(QWidget* menu) + { + KButtonList::const_iterator itEnd = m_kbuttons.constEnd(); + for (KButtonList::const_iterator it = m_kbuttons.constBegin(); it != itEnd; ++it) +@@ -169,7 +170,7 @@ + const QSize size = m_kmenu->sizeHint(); + m_kmenu->resize(size.width(),size.height()); + +- PanelPopupButton* button = findKButtonFor(m_kmenu); ++ PanelPopupButton* button = findKButtonFor(m_kmenu->widget()); + + // let's unhide the panel while we're at it. traverse the widget + // hierarchy until we find the panel, if any +@@ -189,7 +190,6 @@ + + menuParent = menuParent->parent(); + } +- + button->showMenu(); + } + } +@@ -213,7 +213,7 @@ + + void MenuManager::removeMenu(QCString menu) + { +- bool iterate = true; ++ bool iterate = true, need_adjustSize = false; + ClientMenuList::iterator it = clientmenus.begin(); + for (; it != clientmenus.end(); iterate ? ++it : it) + { +@@ -224,15 +224,17 @@ + m_kmenu->removeClientMenu(m->idInParentMenu); + it = clientmenus.erase(it); + iterate = false; ++ need_adjustSize = true; + } + } +- m_kmenu->adjustSize(); ++ if (need_adjustSize) ++ m_kmenu->adjustSize(); + } + + + void MenuManager::applicationRemoved(const QCString& appRemoved) + { +- bool iterate = true; ++ bool iterate = true, need_adjustSize = false; + ClientMenuList::iterator it = clientmenus.begin(); + for (; it != clientmenus.end(); iterate ? ++it : it) + { +@@ -243,9 +245,11 @@ + m_kmenu->removeClientMenu(m->idInParentMenu); + it = clientmenus.erase(it); + iterate = false; ++ need_adjustSize = true; + } + } +- m_kmenu->adjustSize(); ++ if (need_adjustSize) ++ m_kmenu->adjustSize(); + } + + bool MenuManager::process(const QCString &fun, const QByteArray &data, +--- kicker/core/unhidetrigger.cpp (Revision 849788) ++++ kicker/core/unhidetrigger.cpp (Revision 849791) +@@ -39,7 +39,7 @@ + , _lastXineramaScreen( -1 ) + , enabledCount( 0 ) + { +- _timer = new QTimer( this ); ++ _timer = new QTimer( this, "UnhideTrigger" ); + connect( _timer, SIGNAL(timeout()), SLOT(pollMouse()) ); + } + +--- kicker/core/applethandle.cpp (Revision 849788) ++++ kicker/core/applethandle.cpp (Revision 849791) +@@ -150,7 +150,7 @@ + { + if (!m_handleHoverTimer) + { +- m_handleHoverTimer = new QTimer(this); ++ m_handleHoverTimer = new QTimer(this, "m_handleHoverTimer"); + connect(m_handleHoverTimer, SIGNAL(timeout()), + this, SLOT(checkHandleHover())); + m_applet->installEventFilter(this); +@@ -177,11 +177,7 @@ + m_drawHandle = true; + resetLayout(); + +- if (m_handleHoverTimer) +- { +- m_handleHoverTimer->start(250); +- } +- break; ++ break; + } + + case QEvent::Leave: +@@ -191,6 +187,11 @@ + break; + } + ++ if (m_handleHoverTimer) ++ { ++ m_handleHoverTimer->start(250); ++ } ++ + QWidget* w = dynamic_cast(o); + + bool nowDrawIt = false; +@@ -207,11 +208,6 @@ + + if (nowDrawIt != m_drawHandle) + { +- if (m_handleHoverTimer) +- { +- m_handleHoverTimer->stop(); +- } +- + m_drawHandle = nowDrawIt; + resetLayout(); + } +@@ -297,6 +293,11 @@ + } + + m_menuButton->setDown(false); ++ ++ if (m_handleHoverTimer) ++ { ++ m_handleHoverTimer->start(250); ++ } + } + + AppletHandleDrag::AppletHandleDrag(AppletHandle* parent) +--- kicker/core/containerarea.cpp 2009/11/20 21:00:18 1.1 ++++ kicker/core/containerarea.cpp 2009/11/20 21:00:38 +@@ -87,7 +87,8 @@ + m_immutable(_c->isImmutable()), + m_updateBackgroundsCalled(false), + m_layout(0), +- m_addAppletDialog(0) ++ m_addAppletDialog(0), ++ _autoScrollTimer(0, "ContainerArea::autoScrollTimer") + { + setBackgroundOrigin( WidgetOrigin ); + +--- kicker/core/Makefile.am (Revision 849788) ++++ kicker/core/Makefile.am (Revision 849791) +@@ -1,6 +1,6 @@ + INCLUDES = -I$(srcdir)/../../libkicker -I../../libkicker \ +- -I$(srcdir)/../ui -I$(srcdir)/../buttons -I$(top_srcdir)/libkonq \ +- $(all_includes) ++ -I../ui -I$(srcdir)/../ui -I$(srcdir)/../buttons -I$(top_srcdir)/libkonq \ ++ $(all_includes) + + noinst_LTLIBRARIES = libkicker_core.la + +--- kicker/Makefile.am (Revision 849788) ++++ kicker/Makefile.am (Revision 849791) +@@ -1,6 +1,6 @@ + INCLUDES = $(all_includes) + +-SUBDIRS = core ui buttons . ++SUBDIRS = core ui buttons interfaces . + + bin_PROGRAMS = + lib_LTLIBRARIES = +@@ -9,7 +9,7 @@ + CLEANFILES = dummy.cpp + + kicker_la_LIBADD = core/libkicker_core.la buttons/libkicker_buttons.la \ +- ui/libkicker_ui.la ../libkicker/libkickermain.la $(LIB_KIO) $(LIB_KUTILS) ++ ui/libkicker_ui.la ../libkicker/libkickermain.la $(LIB_KIO) $(LIB_KUTILS) $(LIB_KABC) + + kicker_la_SOURCES = dummy.cpp + kicker_la_LDFLAGS = -module $(KDE_PLUGIN) $(all_libraries) +--- kicker/ui/browser_mnu.cpp (Revision 849788) ++++ kicker/ui/browser_mnu.cpp (Revision 849791) +@@ -329,7 +329,7 @@ + if(_mimemap.count() > 0) { + + if(!_mimecheckTimer) +- _mimecheckTimer = new QTimer(this); ++ _mimecheckTimer = new QTimer(this, "_mimecheckTimer"); + + connect(_mimecheckTimer, SIGNAL(timeout()), SLOT(slotMimeCheck())); + _mimecheckTimer->start(0); +--- kicker/ui/flipscrollview.cpp (Revision 0) ++++ kicker/ui/flipscrollview.cpp (Revision 849791) +@@ -0,0 +1,324 @@ ++/***************************************************************** ++ ++Copyright (c) 2006 Will Stephenson ++ ++Permission is hereby granted, free of charge, to any person obtaining a copy ++of this software and associated documentation files (the "Software"), to deal ++in the Software without restriction, including without limitation the rights ++to use, copy, modify, merge, publish, distribute, sublicense, and/or sell ++copies of the Software, and to permit persons to whom the Software is ++furnished to do so, subject to the following conditions: ++ ++The above copyright notice and this permission notice shall be included in ++all copies or substantial portions of the Software. ++ ++THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR ++IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, ++FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE ++AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN ++AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN ++CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ++ ++******************************************************************/ ++ ++#include ++#include ++#include ++#include ++ ++#include "itemview.h" ++#include "flipscrollview.h" ++#include "kickerSettings.h" ++ ++/* Flip scroll steps, as percentage of itemview width to scroll per ++ * step. Assumes the itemview is scrolled in ten steps */ ++ ++/* slow start, then fast */ ++//static const double scrollSteps[] = { 0.05, 0.05, 0.1125, 0.1125, 0.1125, 0.1125, 0.1125, 0.1125, 0.1125, 0.1125 }; ++ ++/* slow fast slow */ ++//static const double scrollSteps[] = { 0.05, 0.05, 0.13, 0.13, 0.15, 0.13, 0.13, 0.13, 0.05, 0.05 }; ++ ++/* slow veryfast slow */ ++static const double scrollSteps[] = { 0.03, 0.03, 0.147, 0.147, 0.147, 0.147, 0.147, 0.147, 0.03, 0.028 }; ++; ++ ++BackFrame::BackFrame( QWidget *parent ) ++ : QFrame( parent ), mouse_inside( false ) ++{ ++ setFrameStyle( QFrame::NoFrame ); ++ if ( QApplication::reverseLayout() ) ++ left_triangle.load( locate( "data", "kicker/pics/right_triangle.png" ) ); ++ else ++ left_triangle.load( locate( "data", "kicker/pics/left_triangle.png" ) ); ++} ++ ++void BackFrame::drawContents( QPainter *p ) ++{ ++ QColor gray( 230, 230, 230 ); ++ if ( mouse_inside ) ++ p->fillRect( 3, 3, width() - 6, height() - 6, colorGroup().color( QColorGroup::Highlight ) ); ++ else ++ p->fillRect( 3, 3, width() - 6, height() - 6, gray ); ++ p->setPen( gray.dark(110) ); ++ p->drawRect( 3, 3, width() - 6, height() - 6 ); ++ ++ int pixsize = ( width() - 6 ) * 3 / 5; ++ QImage i = left_triangle.convertToImage().smoothScale( pixsize, pixsize ); ++ QPixmap tri; ++ tri.convertFromImage( i ); ++ ++ p->drawPixmap( ( width() - tri.width() ) / 2, ( height() - tri.height() ) / 2, tri ); ++} ++ ++void BackFrame::enterEvent( QEvent *e ) ++{ ++ mouse_inside = true; ++ update(); ++} ++ ++void BackFrame::leaveEvent( QEvent *e ) ++{ ++ mouse_inside = false; ++ update(); ++} ++ ++void BackFrame::mousePressEvent ( QMouseEvent * e ) ++{ ++ emit clicked(); ++} ++ ++FlipScrollView::FlipScrollView( QWidget * parent, const char * name ) ++ : QScrollView( parent, name ), mState( StoppedLeft ), mScrollDirection( 1 ), mShowBack( false ) ++{ ++ setVScrollBarMode( QScrollView::AlwaysOff ); ++ setHScrollBarMode( QScrollView::AlwaysOff ); ++ setFrameStyle( QFrame::NoFrame ); ++ mLeftView = new ItemView( this, "left_view" ); ++ addChild( mLeftView ); ++ ++ mRightView = new ItemView( this, "right_view" ); ++ addChild( mRightView ); ++ ++ mTimer = new QTimer( this, "mTimer" ); ++ connect( mTimer, SIGNAL( timeout() ), SLOT( slotScrollTimer() ) ); ++ ++ connect( mLeftView, SIGNAL( startService(KService::Ptr) ), ++ SIGNAL( startService(KService::Ptr) ) ); ++ connect( mLeftView, SIGNAL( startURL(const QString& ) ), ++ SIGNAL( startURL(const QString& ) ) ); ++ connect( mLeftView, SIGNAL( rightButtonPressed(QListViewItem*,const QPoint&,int) ), ++ SIGNAL( rightButtonPressed(QListViewItem*,const QPoint&,int) ) ); ++ connect( mRightView, SIGNAL( startService(KService::Ptr) ), ++ SIGNAL( startService(KService::Ptr) ) ); ++ connect( mRightView, SIGNAL( startURL(const QString& ) ), ++ SIGNAL( startURL(const QString& ) ) ); ++ connect( mRightView, SIGNAL( rightButtonPressed(QListViewItem*,const QPoint&,int) ), ++ SIGNAL( rightButtonPressed(QListViewItem*,const QPoint&,int) ) ); ++ ++ // wild hack to make sure it has correct width ++ mLeftView->setVScrollBarMode( QScrollView::AlwaysOn ); ++ mRightView->setVScrollBarMode( QScrollView::AlwaysOn ); ++ mLeftView->setVScrollBarMode( QScrollView::Auto ); ++ mRightView->setVScrollBarMode( QScrollView::Auto ); ++ ++ mBackrow = new BackFrame( this ); ++ mBackrow->resize( 24, 100 ); ++ connect( mBackrow, SIGNAL( clicked() ), SIGNAL( backButtonClicked() ) ); ++} ++ ++ItemView* FlipScrollView::prepareRightMove() ++{ ++ if ( mState != StoppedLeft ) ++ { ++ mTimer->stop(); ++ ItemView *swap = mLeftView; ++ mLeftView = mRightView; ++ mRightView = swap; ++ moveChild( mLeftView, 0, 0 ); ++ moveChild( mRightView, width(), 0 ); ++ mBackrow->hide(); ++ mRightView->resize( width(), height() ); ++ mLeftView->resize( width(), height() ); ++ setContentsPos( 0, 0 ); ++ } ++ ++ mState = StoppedLeft; ++ mRightView->clear(); ++ return mRightView; ++} ++ ++void FlipScrollView::showBackButton( bool enable ) ++{ ++ kdDebug() << "FlipScrollView::showBackButton " << enable << endl; ++ mShowBack = enable; ++} ++ ++ItemView* FlipScrollView::prepareLeftMove(bool clear) ++{ ++ if ( mState != StoppedRight ) ++ { ++ mTimer->stop(); ++ ItemView *swap = mLeftView; ++ mLeftView = mRightView; ++ mRightView = swap; ++ moveChild( mLeftView, 0, 0 ); ++ moveChild( mRightView, width(), 0 ); ++ mRightView->resize( width(), height() ); ++ mLeftView->resize( width(), height() ); ++ mBackrow->hide(); ++ setContentsPos( width(), 0 ); ++ } ++ ++ mState = StoppedRight; ++ if (clear) ++ mLeftView->clear(); ++ return mLeftView; ++} ++ ++void FlipScrollView::viewportResizeEvent ( QResizeEvent * ) ++{ ++ mLeftView->resize( size() ); ++ mRightView->resize( width() - mBackrow->width(), height() ); ++ mBackrow->resize( mBackrow->width(), height() ); ++ resizeContents( width() * 2, height() ); ++ moveChild( mBackrow, width(), 0 ); ++ moveChild( mRightView, width() + mBackrow->width(), 0 ); ++ setContentsPos( 0, 0 ); ++} ++ ++ItemView *FlipScrollView::currentView() const ++{ ++ if ( mState == StoppedRight ) ++ return mRightView; ++ else ++ return mLeftView; ++} ++ ++ItemView *FlipScrollView::leftView() const ++{ ++ return mLeftView; ++} ++ ++ItemView *FlipScrollView::rightView() const ++{ ++ return mRightView; ++} ++ ++FlipScrollView::~FlipScrollView() {} ++ ++static const int max_steps = 10; ++ ++void FlipScrollView::slotScrollTimer() ++{ ++ mStepsRemaining--; ++ assert( mStepsRemaining >= 0 && mStepsRemaining < int(sizeof( scrollSteps ) / sizeof( double )) ); ++ if (KickerSettings::scrollFlipView()) ++ scrollBy( ( int )( mScrollDirection * mLeftView->width() * scrollSteps[ mStepsRemaining ] ), 0 ); ++ else ++ scrollBy( ( int )( mScrollDirection * mLeftView->width()), 0 ); ++ ++ if ( mStepsRemaining == 0 ) ++ { ++ if ( mState == ScrollingRight ) ++ { ++ mState = StoppedRight; ++ setContentsPos( width(), 0 ); ++ } else { ++ mState = StoppedLeft; ++ setContentsPos( 0, 0 ); ++ } ++ ++ kdDebug() << "slotScrollTimer " << mShowBack << endl; ++ ++ if ( mShowBack ) ++ { ++ mBackrow->show(); ++ if ( mState == StoppedRight ) ++ { ++ ++ if ( QApplication::reverseLayout() ) ++ moveChild( mRightView, width(), 0 ); ++ else ++ moveChild( mRightView, width() + mBackrow->width(), 0 ); ++ mRightView->resize( width() - mBackrow->width(), height() ); ++ mLeftView->resize( width(), height() ); ++ if ( QApplication::reverseLayout() ) ++ moveChild( mBackrow, width() + mRightView->width(), 0 ); ++ else ++ moveChild( mBackrow, width(), 0 ); ++ moveChild( mLeftView, 0, 0 ); ++ } else ++ { ++ moveChild( mRightView, width(), 0 ); ++ mRightView->resize( width(), height() ); ++ mLeftView->resize( width() - mBackrow->width(), height() ); ++ if ( QApplication::reverseLayout() ) ++ { ++ moveChild( mBackrow, mLeftView->width(), 0 ); ++ moveChild( mLeftView, 0, 0 ); ++ } ++ else ++ { ++ moveChild( mBackrow, 0, 0 ); ++ moveChild( mLeftView, mBackrow->width(), 0 ); ++ } ++ } ++ } else ++ mBackrow->hide(); ++ ++ if (!mSelectMenuPath.isEmpty()) { ++ if (mSelectMenuPath=="kicker:/goup/") { ++ currentView()->setSelected(currentView()->firstChild(),true); ++ currentView()->firstChild()->repaint(); ++ } ++ else { ++ QListViewItem * child = currentView()->firstChild(); ++ while( child ) { ++ KMenuItem* kitem = dynamic_cast(child); ++ if (kitem && kitem->menuPath()==mSelectMenuPath) { ++ currentView()->setSelected(child,true); ++ kdDebug() << "child repaint\n"; ++ child->repaint(); ++ break; ++ } ++ child = child->nextSibling(); ++ } ++ } ++ } ++ mLeftView->setVScrollBarMode( QScrollView::Auto ); ++ mRightView->setVScrollBarMode( QScrollView::Auto ); ++ mTimer->stop(); ++ mLeftView->setMouseMoveSelects( true ); ++ mRightView->setMouseMoveSelects( true ); ++ } ++} ++ ++void FlipScrollView::flipScroll(const QString& selectMenuPath) ++{ ++ if ( mState == StoppedLeft ) ++ { ++ mState = ScrollingRight; ++ mScrollDirection = 1; ++ } ++ else ++ { ++ mState = ScrollingLeft; ++ mScrollDirection = -1; ++ } ++ ++ mLeftView->setVScrollBarMode( QScrollView::AlwaysOff ); ++ mRightView->setVScrollBarMode( QScrollView::AlwaysOff ); ++ if (KickerSettings::scrollFlipView()) ++ mStepsRemaining = max_steps; ++ else ++ mStepsRemaining = 1; ++ mTimer->start( 30 ); ++ mSelectMenuPath = selectMenuPath; ++ if (!mSelectMenuPath.isEmpty()) { ++ mLeftView->setMouseMoveSelects( false ); ++ mRightView->setMouseMoveSelects( false ); ++ } ++} ++ ++#include "flipscrollview.moc" +--- kicker/ui/query.cpp (Revision 0) ++++ kicker/ui/query.cpp (Revision 849791) +@@ -0,0 +1,136 @@ ++/***************************************************************** ++ ++ Copyright (c) 2006 Stephan Binner ++ ++ This program is free software; you can redistribute it and/or ++ modify it under the terms of the GNU General Public ++ License as published by the Free Software Foundation; either ++ version 2 of the License, or (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with this program; see the file COPYING. If not, write to ++ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ++ Boston, MA 02110-1301, USA. ++ ++******************************************************************/ ++ ++#include "query.h" ++#include ++ ++Query::Query() ++{ ++ alternatives.setAutoDelete(true); ++} ++ ++void Query::clear() ++{ ++ query_term = QString::null; ++ alternatives.clear(); ++} ++ ++void Query::set(const QString &term) ++{ ++ query_term = term; ++ alternatives.clear(); ++ ++ current_alternative = new Alternative; ++ current_part = QString::null; ++ within_quotes = false; ++ exclude_part = false; ++ ++ for (uint index=0;indexexcludes+=current_part.lower(); ++ else ++ current_alternative->includes+=current_part.lower(); ++ } ++ within_quotes = false; ++ exclude_part = false; ++ current_part = QString::null; ++} ++ ++QString Query::get() const ++{ ++ return query_term; ++} ++ ++bool Query::matches(const QString &term) ++{ ++ QString lower_term = term.lower(); ++ ++ for (Alternative* alt=alternatives.first(); alt; alt=alternatives.next()) { ++ if (!alt->includes.count()) ++ continue; ++ ++ bool next_alternative = false; ++ ++ for ( QStringList::ConstIterator it = alt->excludes.begin(); it != alt->excludes.end(); ++it ) { ++ if ( lower_term.find(*it)!=-1 ) { ++ next_alternative = true; ++ continue; ++ } ++ } ++ if (next_alternative) ++ continue; ++ ++ for ( QStringList::ConstIterator it = alt->includes.begin(); it != alt->includes.end(); ++it ) { ++ if ( lower_term.find(*it)==-1 ) { ++ next_alternative = true; ++ continue; ++ } ++ } ++ if (next_alternative) ++ continue; ++ ++//kdDebug() << "Found hit in '" << term << "'" << endl; ++ return true; ++ } ++ ++ return false; ++} +--- kicker/ui/k_new_mnu.cpp (Revision 0) ++++ kicker/ui/k_new_mnu.cpp (Revision 849791) +@@ -0,0 +1,3779 @@ ++/***************************************************************** ++ ++ Copyright (c) 1996-2000 the kicker authors. See file AUTHORS. ++ Copyright (c) 2006 Debajyoti Bera ++ Copyright (c) 2006 Dirk Mueller ++ ++ This program is free software; you can redistribute it and/or ++ modify it under the terms of the GNU General Public ++ License as published by the Free Software Foundation; either ++ version 2 of the License, or (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with this program; see the file COPYING. If not, write to ++ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ++ Boston, MA 02110-1301, USA. ++ ++******************************************************************/ ++ ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include "client_mnu.h" ++#include "container_base.h" ++#include "global.h" ++#include "knewbutton.h" ++#include "kicker.h" ++#include "kickerSettings.h" ++#include "konqbookmarkmanager.h" ++#include "menuinfo.h" ++#include "menumanager.h" ++#include "popupmenutitle.h" ++#include "quickbrowser_mnu.h" ++#include "recentapps.h" ++#include "flipscrollview.h" ++#include "itemview.h" ++#include ++#include ++#include ++ ++#include "media_watcher.h" ++#include "k_mnu.h" ++#include "k_new_mnu.h" ++#include "k_new_mnu.moc" ++#include "kickoff_bar.h" ++ ++#define WAIT_BEFORE_QUERYING 700 ++ ++#define IDS_PER_CATEGORY 20 ++#define ACTIONS_ID_BASE 10 ++#define APP_ID_BASE 10 + IDS_PER_CATEGORY ++#define BOOKMARKS_ID_BASE 10 + (IDS_PER_CATEGORY * 2) ++#define NOTES_ID_BASE 10 + (IDS_PER_CATEGORY * 3) ++#define MAIL_ID_BASE 10 + (IDS_PER_CATEGORY * 4) ++#define FILE_ID_BASE 10 + (IDS_PER_CATEGORY * 5) ++#define MUSIC_ID_BASE 10 + (IDS_PER_CATEGORY * 6) ++#define WEBHIST_ID_BASE 10 + (IDS_PER_CATEGORY * 7) ++#define CHAT_ID_BASE 10 + (IDS_PER_CATEGORY * 8) ++#define FEED_ID_BASE 10 + (IDS_PER_CATEGORY * 9) ++#define PIC_ID_BASE 10 + (IDS_PER_CATEGORY * 10) ++#define VIDEO_ID_BASE 10 + (IDS_PER_CATEGORY * 11) ++#define DOC_ID_BASE 10 + (IDS_PER_CATEGORY * 12) ++#define OTHER_ID_BASE 10 + (IDS_PER_CATEGORY * 13) ++ ++static QString calculate(const QString &exp) ++{ ++ QString result, cmd; ++ const QString bc = KStandardDirs::findExe("bc"); ++ if ( !bc.isEmpty() ) ++ cmd = QString("echo %1 | %2").arg(KProcess::quote(exp), KProcess::quote(bc)); ++ else ++ cmd = QString("echo $((%1))").arg(exp); ++ FILE *fs = popen(QFile::encodeName(cmd).data(), "r"); ++ if (fs) ++ { ++ QTextStream ts(fs, IO_ReadOnly); ++ result = ts.read().stripWhiteSpace(); ++ pclose(fs); ++ } ++ return result; ++} ++ ++static QString workaroundStringFreeze(const QString& str) ++{ ++ QString s = str; ++ ++ s.replace("","&"); ++ QRegExp re("<[^>]+>"); ++ re.setMinimal(true); ++ re.setCaseSensitive(false); ++ ++ s.replace(re, ""); ++ s = s.simplifyWhiteSpace(); ++ ++ return s; ++} ++ ++int base_category_id[] = {ACTIONS_ID_BASE, APP_ID_BASE, BOOKMARKS_ID_BASE, NOTES_ID_BASE, MAIL_ID_BASE, ++ FILE_ID_BASE, MUSIC_ID_BASE, WEBHIST_ID_BASE, CHAT_ID_BASE, FEED_ID_BASE, ++ PIC_ID_BASE, VIDEO_ID_BASE, DOC_ID_BASE, OTHER_ID_BASE}; ++ ++#include ++ ++static int used_size( QLabel *label, int oldsize ) ++{ ++ QSimpleRichText st( label->text(), KGlobalSettings::toolBarFont() ); ++ st.setWidth( oldsize ); ++ return QMAX( st.widthUsed(), oldsize ); ++} ++ ++KMenu::KMenu() ++ : KMenuBase(0, "SUSE::Kickoff::KMenu") ++ , m_sloppyTimer(0, "KNewMenu::sloppyTimer"), m_mediaFreeTimer(0, "KNewMenu::mediaFreeTimer"), ++ m_iconName(QString::null), m_orientation(UnDetermined), m_search_plugin( 0 ) ++{ ++ setMouseTracking(true); ++ connect(&m_sloppyTimer, SIGNAL(timeout()), SLOT(slotSloppyTimeout())); ++ ++ // set the first client id to some arbitrarily large value. ++ client_id = 10000; ++ // Don't automatically clear the main menu. ++ actionCollection = new KActionCollection(this); ++ ++ connect(Kicker::the(), SIGNAL(configurationChanged()), ++ this, SLOT(configChanged())); ++ ++ KUser * user = new KUser(); ++ ++ char hostname[256]; ++ hostname[0] = '\0'; ++ if (!gethostname( hostname, sizeof(hostname) )) ++ hostname[sizeof(hostname)-1] = '\0'; ++ ++ m_userInfo->setText( i18n( "User %1 on %2" ) ++ .arg( user->loginName() ).arg( hostname ) ); ++ setupUi(); ++ ++ m_userInfo->setBackgroundMode( PaletteBase ); ++ QColor userInfoColor = QApplication::palette().color( QPalette::Normal, QColorGroup::Mid ); ++ if ( qGray( userInfoColor.rgb() ) > 120 ) ++ userInfoColor = userInfoColor.dark( 200 ); ++ else ++ userInfoColor = userInfoColor.light( 200 ); ++ m_userInfo->setPaletteForegroundColor( userInfoColor ); ++ ++ m_tabBar = new KickoffTabBar(this, "m_tabBar"); ++ connect(m_tabBar, SIGNAL(tabClicked(QTab*)), SLOT(tabClicked(QTab*))); ++ ++ const int tab_icon_size = 32; ++ ++ m_tabs[FavoriteTab] = new QTab; ++ m_tabBar->addTab(m_tabs[FavoriteTab]); ++ m_tabBar->setToolTip(FavoriteTab, "" + i18n( "Most commonly used applications and documents" ) + "" ); ++ m_tabs[ApplicationsTab] = new QTab; ++ m_tabBar->addTab(m_tabs[ApplicationsTab]); ++ m_tabBar->setToolTip(ApplicationsTab, "" + i18n( "List of installed applications" ) + ++ "" ); ++ ++ m_tabs[ComputerTab] = new QTab; ++ m_tabBar->addTab(m_tabs[ComputerTab]); ++ m_tabBar->setToolTip(ComputerTab, "" + i18n( "Information and configuration of your " ++ "system, access to personal files, network resources and connected disk drives") ++ + ""); ++#if 0 ++ m_tabs[SearchTab] = new QTab; ++ m_tabBar->addTab(m_tabs[SearchTab]); ++#endif ++ m_tabs[HistoryTab] = new QTab; ++ m_tabBar->addTab(m_tabs[HistoryTab]); ++ m_tabBar->setToolTip(HistoryTab, "" + i18n( "Recently used applications and documents" ) + ++ "" ); ++ m_tabs[LeaveTab] = new QTab; ++ m_tabBar->addTab(m_tabs[LeaveTab]); ++ m_tabBar->setToolTip(LeaveTab, i18n("Logout, switch user, switch off or reset," ++ " suspend of the system" ) + "" ); ++ ++ if (KickerSettings::kickoffTabBarFormat() != KickerSettings::IconOnly) { ++ m_tabs[FavoriteTab]->setText(workaroundStringFreeze(i18n("

    Favorites

    "))); ++ m_tabs[HistoryTab]->setText(workaroundStringFreeze(i18n("

    History

    "))); ++ m_tabs[ComputerTab]->setText( ++ workaroundStringFreeze(i18n("

    Computer

    "))); ++ m_tabs[ApplicationsTab]->setText(workaroundStringFreeze(i18n("

    Applications

    "))); ++ m_tabs[LeaveTab]->setText( ++ workaroundStringFreeze(i18n("

    Leave

    "))); ++ } ++ ++ if (KickerSettings::kickoffTabBarFormat() != KickerSettings::LabelOnly) { ++ m_tabs[FavoriteTab]->setIconSet(BarIcon("bookmark", tab_icon_size)); ++ m_tabs[HistoryTab]->setIconSet(BarIcon("recently_used", tab_icon_size)); ++ m_tabs[ComputerTab]->setIconSet(BarIcon("system", tab_icon_size)); ++ m_tabs[ApplicationsTab]->setIconSet(BarIcon("player_playlist", tab_icon_size)); ++ m_tabs[LeaveTab]->setIconSet(BarIcon("leave", tab_icon_size)); ++ } ++ ++ connect(m_tabBar, SIGNAL(selected(int)), m_stacker, SLOT(raiseWidget(int))); ++ connect(m_stacker, SIGNAL(aboutToShow(int)), m_tabBar, SLOT(setCurrentTab(int))); ++ ++ m_favoriteView = new FavoritesItemView (m_stacker, "m_favoriteView"); ++ m_favoriteView->setAcceptDrops(true); ++ m_favoriteView->setItemsMovable(true); ++ m_stacker->addWidget(m_favoriteView, FavoriteTab); ++ ++ m_recentlyView = new ItemView (m_stacker, "m_recentlyView"); ++ m_stacker->addWidget(m_recentlyView, HistoryTab); ++ ++ m_systemView = new ItemView(m_stacker, "m_systemView"); ++ m_stacker->addWidget(m_systemView, ComputerTab ); ++ ++ m_browserView = new FlipScrollView(m_stacker, "m_browserView"); ++ m_stacker->addWidget(m_browserView, ApplicationsTab); ++ connect( m_browserView, SIGNAL( backButtonClicked() ), SLOT( slotGoBack() ) ); ++ ++ m_exitView = new FlipScrollView(m_stacker, "m_exitView"); ++ m_stacker->addWidget(m_exitView, LeaveTab); ++ connect( m_exitView, SIGNAL( backButtonClicked() ), SLOT( slotGoExitMainMenu() ) ); ++ ++ m_searchWidget = new QVBox (m_stacker, "m_searchWidget"); ++ m_searchWidget->setSpacing(0); ++ m_stacker->addWidget(m_searchWidget, 5); ++ ++ // search provider icon ++ QPixmap icon; ++ KURIFilterData data; ++ QStringList list; ++ data.setData( QString("some keyword") ); ++ list << "kurisearchfilter" << "kuriikwsfilter"; ++ ++ if ( KURIFilter::self()->filterURI(data, list) ) { ++ QString iconPath = locate("cache", KMimeType::favIconForURL(data.uri()) + ".png"); ++ if ( iconPath.isEmpty() ) ++ icon = SmallIcon("enhanced_browsing"); ++ else ++ icon = QPixmap( iconPath ); ++ } ++ else ++ icon = SmallIcon("enhanced_browsing"); ++ ++ m_searchResultsWidget = new ItemView (m_searchWidget, "m_searchResultsWidget"); ++ m_searchResultsWidget->setItemMargin(4); ++ m_searchResultsWidget->setIconSize(16); ++ m_searchActions = new ItemView (m_searchWidget, "m_searchActions"); ++ m_searchActions->setFocusPolicy(QWidget::NoFocus); ++ m_searchActions->setItemMargin(4); ++ m_searchInternet = new QListViewItem(m_searchActions, i18n("Search Internet")); ++ m_searchInternet->setPixmap(0,icon); ++ setTabOrder(m_kcommand, m_searchResultsWidget); ++ ++ m_kerryInstalled = !KStandardDirs::findExe(QString::fromLatin1("kerry")).isEmpty(); ++ m_isShowing = false; ++ ++ if (!m_kerryInstalled) { ++ m_searchIndex = 0; ++ m_searchActions->setMaximumHeight(5+m_searchInternet->height()); ++ } ++ else { ++ m_searchIndex = new QListViewItem(m_searchActions, i18n("Search Index")); ++ m_searchIndex->setPixmap(0,SmallIcon("kerry")); ++ m_searchActions->setMaximumHeight(5+m_searchIndex->height()*2); ++ } ++ connect(m_searchActions, SIGNAL(clicked(QListViewItem*)), SLOT(searchActionClicked(QListViewItem*))); ++ connect(m_searchActions, SIGNAL(returnPressed(QListViewItem*)), SLOT(searchActionClicked(QListViewItem*))); ++ connect(m_searchActions, SIGNAL(spacePressed(QListViewItem*)), SLOT(searchActionClicked(QListViewItem*))); ++ ++ connect(m_searchResultsWidget, SIGNAL(startService(KService::Ptr)), SLOT(slotStartService(KService::Ptr))); ++ connect(m_searchResultsWidget, SIGNAL(startURL(const QString&)), SLOT(slotStartURL(const QString&))); ++ connect(m_searchResultsWidget, SIGNAL(rightButtonPressed( QListViewItem*, const QPoint &, int )), SLOT(slotContextMenuRequested( QListViewItem*, const QPoint &, int ))); ++ ++ connect(m_recentlyView, SIGNAL(startService(KService::Ptr)), SLOT(slotStartService(KService::Ptr))); ++ connect(m_recentlyView, SIGNAL(startURL(const QString&)), SLOT(slotStartURL(const QString&))); ++ connect(m_recentlyView, SIGNAL(rightButtonPressed( QListViewItem*, const QPoint &, int )), SLOT(slotContextMenuRequested( QListViewItem*, const QPoint &, int ))); ++ ++ connect(m_favoriteView, SIGNAL(startService(KService::Ptr)), SLOT(slotStartService(KService::Ptr))); ++ connect(m_favoriteView, SIGNAL(startURL(const QString&)), SLOT(slotStartURL(const QString&))); ++ connect(m_favoriteView, SIGNAL(rightButtonPressed( QListViewItem*, const QPoint &, int )), SLOT(slotContextMenuRequested( QListViewItem*, const QPoint &, int ))); ++ connect(m_favoriteView, SIGNAL(moved(QListViewItem*, QListViewItem*, QListViewItem*)), SLOT(slotFavoritesMoved( QListViewItem*, QListViewItem*, QListViewItem* ))); ++ ++ connect(m_systemView, SIGNAL(startURL(const QString&)), SLOT(slotStartURL(const QString&))); ++ connect(m_systemView, SIGNAL(startService(KService::Ptr)), SLOT(slotStartService(KService::Ptr))); ++ connect(m_systemView, SIGNAL(rightButtonPressed( QListViewItem*, const QPoint &, int )), SLOT(slotContextMenuRequested( QListViewItem*, const QPoint &, int ))); ++ ++ connect(m_browserView, SIGNAL(startURL(const QString&)), SLOT(slotGoSubMenu(const QString&))); ++ connect(m_browserView, SIGNAL(startService(KService::Ptr)), SLOT(slotStartService(KService::Ptr))); ++ connect(m_browserView, SIGNAL(rightButtonPressed( QListViewItem*, const QPoint &, int )), SLOT(slotContextMenuRequested( QListViewItem*, const QPoint &, int ))); ++ ++ connect(m_exitView, SIGNAL(startURL(const QString&)), SLOT(slotStartURL(const QString&))); ++ connect(m_exitView, SIGNAL(rightButtonPressed( QListViewItem*, const QPoint &, int )), SLOT(slotContextMenuRequested( QListViewItem*, const QPoint &, int ))); ++ ++ m_kcommand->setDuplicatesEnabled( false ); ++ m_kcommand->setLineEdit(new KLineEdit(m_kcommand, "m_kcommand-lineedit")); ++ m_kcommand->setCompletionMode( KGlobalSettings::CompletionAuto ); ++ connect(m_kcommand, SIGNAL(cleared()), SLOT(clearedHistory())); ++ connect(m_kcommand->lineEdit(), SIGNAL(returnPressed()), SLOT(searchAccept())); ++ connect(m_kcommand->lineEdit(), SIGNAL(textChanged(const QString &)), SLOT(searchChanged(const QString &))); ++ ++ // URI Filter meta object... ++ m_filterData = new KURIFilterData(); ++ ++ max_category_id = new int [num_categories]; ++ categorised_hit_total = new int [num_categories]; ++ ++ input_timer = new QTimer (this, "input_timer"); ++ connect( input_timer, SIGNAL(timeout()), this, SLOT(doQuery()) ); ++ ++ init_search_timer = new QTimer (this, "init_search_timer"); ++ connect( init_search_timer, SIGNAL(timeout()), this, SLOT(initSearch()) ); ++ init_search_timer->start(2000, true); ++ ++ connect( m_favoriteView, SIGNAL( dropped (QDropEvent *, QListViewItem * ) ), ++ SLOT( slotFavDropped( QDropEvent *, QListViewItem * ) ) ); ++ ++ this->installEventFilter(this); ++ m_tabBar->installEventFilter(this); ++ m_favoriteView->installEventFilter(this); ++ m_recentlyView->installEventFilter(this); ++ m_browserView->leftView()->installEventFilter(this); ++ m_browserView->rightView()->installEventFilter(this); ++ m_systemView->installEventFilter(this); ++ m_exitView->leftView()->installEventFilter(this); ++ m_exitView->rightView()->installEventFilter(this); ++ m_kcommand->lineEdit()->installEventFilter(this); ++ m_searchLabel->installEventFilter(this); ++ m_searchPixmap->installEventFilter(this); ++ m_stacker->installEventFilter(this); ++ ++ emailRegExp = QRegExp("^([\\w\\-]+\\.)*[\\w\\-]+@([\\w\\-]+\\.)*[\\w\\-]+$"); ++ authRegExp = QRegExp("^[a-zA-Z]+://\\w+(:\\w+)?@([\\w\\-]+\\.)*[\\w\\-]+(:\\d+)?(/.*)?$"); ++ uriRegExp = QRegExp("^[a-zA-Z]+://([\\w\\-]+\\.)*[\\w\\-]+(:\\d+)?(/.*)?$"); ++ uri2RegExp = QRegExp("^([\\w\\-]+\\.)+[\\w\\-]+(:\\d+)?(/.*)?$"); ++ ++ m_resizeHandle = new QLabel(this); ++ m_resizeHandle->setBackgroundOrigin( QLabel::ParentOrigin ); ++ m_resizeHandle->setScaledContents(true); ++ m_resizeHandle->setFixedSize( 16, 16 ); ++ m_searchFrame->stackUnder( m_resizeHandle ); ++ m_isresizing = false; ++ ++ m_searchPixmap->setPixmap( BarIcon( "find", 32 ) ); ++ ++ QFont f = font(); ++ f.setPointSize( kMax( 7, (f.pointSize() * 4 / 5 ) + KickerSettings::kickoffFontPointSizeOffset() ) ); ++ m_tabBar->setFont ( f ); ++ f.setPointSize( kMax( 7, (f.pointSize() * 3 / 2 ) + KickerSettings::kickoffFontPointSizeOffset() ) ); ++ m_searchLabel->setFont( f ); ++ ++ static_cast(m_kcommand->lineEdit())->setClickMessage(i18n( "Applications, Contacts and Documents" ) ); ++ ++ bookmarkManager = 0; ++ m_addressBook = 0; ++ m_popupMenu = 0; ++ ++ main_border_tl.load( locate("data", "kicker/pics/main_corner_tl.png" ) ); ++ main_border_tr.load( locate("data", "kicker/pics/main_corner_tr.png" ) ); ++ ++ search_tab_left.load( locate("data", "kicker/pics/search-tab-left.png" ) ); ++ search_tab_right.load( locate("data", "kicker/pics/search-tab-right.png" ) ); ++ search_tab_center.load( locate("data", "kicker/pics/search-tab-center.png" ) ); ++ ++ search_tab_top_left.load( locate("data", "kicker/pics/search-tab-top-left.png" ) ); ++ search_tab_top_right.load( locate("data", "kicker/pics/search-tab-top-right.png" ) ); ++ search_tab_top_center.load( locate("data", "kicker/pics/search-tab-top-center.png" ) ); ++} ++ ++void KMenu::setupUi() ++{ ++ m_stacker = new QWidgetStack( this, "m_stacker" ); ++ m_stacker->setGeometry( QRect( 90, 260, 320, 220 ) ); ++ m_stacker->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)3, (QSizePolicy::SizeType)3, 1, 1, m_stacker->sizePolicy().hasHeightForWidth() ) ); ++ m_stacker->setPaletteBackgroundColor( QColor( 255, 255, 255 ) ); ++ // m_stacker->setFocusPolicy( QWidget::StrongFocus ); ++ m_stacker->setLineWidth( 0 ); ++ m_stacker->setFocusPolicy(QWidget::NoFocus); ++ connect(m_stacker, SIGNAL(aboutToShow(QWidget*)), SLOT(stackWidgetRaised(QWidget*))); ++ ++ m_kcommand->setName("m_kcommand"); ++} ++ ++KMenu::~KMenu() ++{ ++ saveConfig(); ++ ++ clearSubmenus(); ++ delete m_filterData; ++} ++ ++bool KMenu::eventFilter ( QObject * receiver, QEvent* e) ++{ ++//kdDebug() << "eventFilter receiver=" << receiver->name() << " type=" << e->type() << endl; ++ QWidget* raiseWidget = 0; ++ QRect raiseRect; ++ ++ if (e->type() == QEvent::KeyPress || ++ e->type() == QEvent::MouseButtonPress || ++ e->type() == QEvent::MouseMove ++ || e->type() == QEvent::FocusIn ++ || e->type() == QEvent::Wheel) { ++ QPoint p; ++ ++ if (e->type() == QEvent::MouseMove || e->type() == QEvent::MouseButtonPress) { ++ QMouseEvent* me = static_cast(e); ++ p = me->globalPos(); ++ } ++ else if (e->type() == QEvent::Wheel) { ++ QWheelEvent* we = static_cast(e); ++ p = we->globalPos(); ++ } ++ ++ while (receiver) { ++ if (receiver == m_tabBar && (e->type()!=QEvent::MouseMove || KickerSettings::kickoffSwitchTabsOnHover() ) ) { ++ QTab* s = m_tabBar->selectTab(m_tabBar->mapFromGlobal(p)); ++ if (s && s->identifier() == ApplicationsTab) ++ raiseWidget = m_browserView; ++ if (s && s->identifier() == FavoriteTab) ++ raiseWidget = m_favoriteView; ++ if (s && s->identifier() == HistoryTab) ++ raiseWidget = m_recentlyView; ++ if (s && s->identifier() == ComputerTab) ++ raiseWidget = m_systemView; ++ if (s && s->identifier() == LeaveTab) ++ raiseWidget = m_exitView; ++ ++ if (raiseWidget) ++ raiseRect = QRect( m_tabBar->mapToGlobal(s->rect().topLeft()), ++ s->rect().size()); ++ } ++ ++ /* we do not want hover activation for the search line edit as this can be ++ * pretty disturbing */ ++ if ( (receiver == m_searchPixmap || ++ ( ( receiver == m_searchLabel || receiver==m_kcommand->lineEdit() ) && ++ ( e->type() == QEvent::KeyPress || e->type() == QEvent::Wheel ++ || e->type() == QEvent::MouseButtonPress ) ) ) && ++ !m_isShowing) { ++ raiseWidget = m_searchWidget; ++ raiseRect = QRect( m_searchFrame->mapToGlobal(m_searchFrame->rect().topLeft()), ++ m_searchFrame->size()); ++ } ++ ++ if(raiseWidget) ++ break; ++ if(receiver->isWidgetType()) ++ receiver = static_cast(receiver)->parentWidget(true); ++ else ++ break; ++ } ++ ++ if (e->type() == QEvent::FocusIn && receiver && raiseWidget) { ++ m_searchResultsWidget->setFocusPolicy(QWidget::StrongFocus); ++ m_searchActions->setFocusPolicy(raiseWidget == m_searchWidget ? ++ QWidget::StrongFocus : QWidget::NoFocus); ++ setTabOrder(raiseWidget, m_searchResultsWidget); ++ if (raiseWidget != m_stacker->visibleWidget() ++ && static_cast(receiver)->focusPolicy() == QWidget::NoFocus ++ && m_stacker->id(raiseWidget) >= 0) { ++ ++ m_stacker->raiseWidget(raiseWidget); ++ return true; ++ } ++ ++ if (raiseWidget->focusPolicy() != QWidget::NoFocus) ++ return false; ++ } ++ ++ if (m_sloppyRegion.contains(p)) { ++ if (e->type() == QEvent::MouseButtonPress /*&& m_sloppyTimer.isActive()*/) ++ m_sloppySourceClicked = true; ++ ++ if (!m_sloppyTimer.isActive() || m_sloppySource != raiseRect) { ++ int timeout= style().styleHint(QStyle::SH_PopupMenu_SubMenuPopupDelay); ++ if (m_sloppySourceClicked) ++ timeout = 3000; ++ m_sloppyTimer.start(timeout); ++ } ++ ++ m_sloppyWidget = raiseWidget; ++ m_sloppySource = raiseRect; ++ return false; ++ } ++ } ++ ++ if(e->type() == QEvent::Enter && receiver->isWidgetType()) { ++ static_cast(receiver)->setMouseTracking(true); ++ QToolTip::hide(); ++ } ++ ++ if ( ( e->type() == QEvent::DragEnter || e->type() == QEvent::DragMove ) && ++ raiseWidget == m_favoriteView ) ++ { ++ m_stacker->raiseWidget(m_favoriteView); ++ ++ return false; ++ } ++ ++ // This is a nightmare of a hack, look away. Logic needs ++ // to be moved to the stacker and all widgets in the stacker ++ // must have focusNextPrevChild() overwritten to do nothing ++ if (e->type() == QEvent::KeyPress && !raiseRect.isNull()) { ++ ItemView* view; ++ if (m_browserView==m_stacker->visibleWidget()) ++ view = m_browserView->currentView(); ++ else if (m_exitView==m_stacker->visibleWidget()) ++ view = m_exitView->currentView(); ++ else ++ view = dynamic_cast(m_stacker->visibleWidget()); ++ ++ if (view) ++ { ++ bool handled = true; ++ switch (static_cast(e)->key()) { ++ case Key_Up: ++ if (view->selectedItem()) { ++ view->setSelected(view->selectedItem()->itemAbove(),true); ++ } ++ else { ++ view->setSelected(view->lastItem(),true); ++ } ++ break; ++ case Key_Down: ++ if (view->selectedItem()) { ++ view->setSelected(view->selectedItem()->itemBelow(),true); ++ } ++ else { ++ if (view->firstChild() && view->firstChild()->isSelectable()) ++ view->setSelected(view->firstChild(),true); ++ else if (view->childCount()>2) ++ view->setSelected(view->firstChild()->itemBelow(),true); ++ } ++ break; ++ case Key_Right: ++ if (view->selectedItem() && !static_cast(view->selectedItem())->hasChildren()) ++ break; ++ // nobreak ++ case Key_Enter: ++ case Key_Return: ++ if (view->selectedItem()) ++ view->slotItemClicked(view->selectedItem()); ++ ++ break; ++ case Key_Left: ++ if (m_browserView == m_stacker->visibleWidget() || m_exitView == m_stacker->visibleWidget()) { ++ FlipScrollView* flip = dynamic_cast(m_stacker->visibleWidget()); ++ if (flip->showsBackButton()) { ++ if (m_browserView == m_stacker->visibleWidget()) ++ goSubMenu( m_browserView->currentView()->backPath(), true ); ++ else ++ view->slotItemClicked(view->firstChild()); ++ } ++ break; ++ } ++ // nobreak ++ case Key_Backspace: ++ if (m_browserView == m_stacker->visibleWidget() || m_exitView == m_stacker->visibleWidget()) { ++ FlipScrollView* flip = dynamic_cast(m_stacker->visibleWidget()); ++ if (flip->showsBackButton()) { ++ if (m_browserView == m_stacker->visibleWidget()) ++ goSubMenu( m_browserView->currentView()->backPath(), true ); ++ else ++ view->slotItemClicked(view->firstChild()); ++ } ++ } ++ ++ break; ++ default: ++ handled = false; ++ } ++ ++ if (handled) ++ view->ensureItemVisible(view->selectedItem()); ++ ++ return handled; ++ } ++ } ++ ++ bool r = KMenuBase::eventFilter(receiver, e); ++ ++ if (!r && raiseWidget) ++ m_stacker->raiseWidget(raiseWidget); ++ ++ if (e->type() == QEvent::Wheel && raiseWidget ) ++ { ++ // due to an ugly Qt bug we have to kill wheel events ++ // that cause focus switches ++ r = true; ++ } ++ ++ if (e->type() == QEvent::Enter && receiver == m_stacker) ++ { ++ QRect r(m_stacker->mapToGlobal(QPoint(-8,-32)), m_stacker->size()); ++ r.setSize(r.size()+QSize(16,128)); ++ ++ m_sloppyRegion = QRegion(r); ++ } ++ ++ // redo the sloppy region ++ if (e->type() == QEvent::MouseMove && !r && raiseWidget) ++ { ++ QPointArray points(4); ++ ++ // hmm, eventually this should be mouse position + 10px, not ++ // just worst case. but worst case seems to work fine enough. ++ QPoint edge(raiseRect.topLeft()); ++ edge.setX(edge.x()+raiseRect.center().x()); ++ ++ if (m_orientation == BottomUp) ++ { ++ points.setPoint(0, m_stacker->mapToGlobal(m_stacker->rect().bottomLeft())); ++ points.setPoint(1, m_stacker->mapToGlobal(m_stacker->rect().bottomRight())); ++ ++ edge.setY(edge.y()+raiseRect.height()); ++ points.setPoint(2, edge+QPoint(+raiseRect.width()/4,0)); ++ points.setPoint(3, edge+QPoint(-raiseRect.width()/4,0)); ++ } ++ else ++ { ++ points.setPoint(0, m_stacker->mapToGlobal(m_stacker->rect().topLeft())); ++ points.setPoint(1, m_stacker->mapToGlobal(m_stacker->rect().topRight())); ++ points.setPoint(2, edge+QPoint(-raiseRect.width()/4,0)); ++ points.setPoint(3, edge+QPoint(+raiseRect.width()/4,0)); ++ } ++ ++ m_sloppyRegion = QRegion(points); ++ } ++ ++ return r; ++} ++ ++void KMenu::slotSloppyTimeout() ++{ ++ if (m_sloppyRegion.contains(QCursor::pos()) && !m_sloppySource.isNull()) ++ { ++ if ( m_sloppySource.contains(QCursor::pos())) ++ { ++ m_stacker->raiseWidget(m_sloppyWidget); ++ ++ m_sloppyWidget = 0; ++ m_sloppySource = QRect(); ++ m_sloppyRegion = QRegion(); ++ m_sloppySourceClicked = false; ++ } ++ } ++ m_sloppyTimer.stop(); ++} ++ ++void KMenu::paintSearchTab( bool active ) ++{ ++ QPixmap canvas( m_searchFrame->size() ); ++ QPainter p( &canvas ); ++ ++ QPixmap pix; ++ ++ if ( m_orientation == BottomUp ) ++ pix.load( locate("data", "kicker/pics/search-gradient.png" ) ); ++ else ++ pix.load( locate("data", "kicker/pics/search-gradient-topdown.png" ) ); ++ ++ pix.convertFromImage( pix.convertToImage().scale(pix.width(), m_searchFrame->height())); ++ p.drawTiledPixmap( 0, 0, m_searchFrame->width(), m_searchFrame->height(), pix ); ++ ++ if ( active ) { ++ ++ m_tabBar->deactivateTabs(true); ++ ++ p.setBrush( Qt::white ); ++ p.setPen( Qt::NoPen ); ++ ++ if ( m_orientation == BottomUp ) { ++ search_tab_center.convertFromImage( search_tab_center.convertToImage().scale(search_tab_center.width(), m_searchFrame->height())); ++ p.drawTiledPixmap( search_tab_left.width(), 0, m_searchFrame->width()-search_tab_left.width()-search_tab_right.width(), m_searchFrame->height(), search_tab_center ); ++ ++ search_tab_left.convertFromImage( search_tab_left.convertToImage().scale(search_tab_left.width(), m_searchFrame->height())); ++ p.drawPixmap( 0, 0, search_tab_left ); ++ ++ search_tab_right.convertFromImage( search_tab_right.convertToImage().scale(search_tab_right.width(), m_searchFrame->height())); ++ p.drawPixmap( m_searchFrame->width()-search_tab_right.width(), 0, search_tab_right ); ++ } ++ else { ++ search_tab_top_center.convertFromImage( search_tab_top_center.convertToImage().scale(search_tab_top_center.width(), m_searchFrame->height())); ++ p.drawTiledPixmap( search_tab_top_left.width(), 0, m_searchFrame->width()-search_tab_top_left.width()-search_tab_top_right.width(), m_searchFrame->height(), search_tab_top_center ); ++ ++ search_tab_top_left.convertFromImage( search_tab_top_left.convertToImage().scale(search_tab_top_left.width(), m_searchFrame->height())); ++ p.drawPixmap( 0, 0, search_tab_top_left ); ++ ++ search_tab_top_right.convertFromImage( search_tab_top_right.convertToImage().scale(search_tab_top_right.width(), m_searchFrame->height())); ++ p.drawPixmap( m_searchFrame->width()-search_tab_top_right.width(), 0, search_tab_top_right ); ++ } ++ } ++ else ++ m_tabBar->deactivateTabs(false); ++ ++ p.end(); ++ m_searchFrame->setPaletteBackgroundPixmap( canvas ); ++} ++ ++void KMenu::stackWidgetRaised(QWidget* raiseWidget) ++{ ++ paintSearchTab(raiseWidget == m_searchWidget); ++ ++ if (raiseWidget == m_browserView) { ++ if ( m_tabBar->currentTab() == ApplicationsTab) ++ slotGoSubMenu(QString::null); ++ if (m_browserDirty ) { ++ createNewProgramList(); ++ m_browserView->prepareRightMove(); ++ m_browserView->currentView()->clear(); ++ fillSubMenu(QString::null, m_browserView->currentView()); ++ m_browserDirty = false; ++ } ++ } ++ else if (raiseWidget == m_recentlyView) { ++ if (m_recentDirty) ++ updateRecent(); ++ } ++ else if (raiseWidget == m_exitView) { ++ if (m_tabBar->currentTab() == LeaveTab) ++ slotGoExitMainMenu(); ++ } ++ ++ ++#warning Qtab fixme ++#if 0 ++ else if (raiseWidget == m_systemView) ++ frame = m_system; ++ else if (raiseWidget == m_favoriteView) ++ frame = m_btnFavorites; ++ if (!frame) ++ return; ++ ++ if ( m_activeTab == frame ) ++ return; ++ ++ paintTab( m_activeTab, false ); ++ paintTab( frame, true ); ++ ++ // if (dynamic_cast(raiseWidget)) ++ // m_activeTab->setFocusProxy(static_cast(raiseWidget)->viewport()); ++ ++ if (0 && /*raiseWidget == m_stacker->visibleWidget() &&*/ !raiseWidget->hasFocus()) { ++ ++ if (dynamic_cast(raiseWidget)) ++ static_cast(raiseWidget)->viewport()->setFocus(); ++ else ++ raiseWidget->setFocus(); ++ } ++ ++ m_activeTab = frame; ++ ++ m_sloppyRegion = QRegion(); ++ m_sloppyTimer.stop(); ++ ++ ItemView* view; ++ if (raiseWidget == m_browserView) ++ view = m_browserView->currentView(); ++ else if (raiseWidget == m_exitView) ++ view = m_exitView->currentView(); ++ else ++ view = dynamic_cast(m_stacker->visibleWidget()); ++ if (view && !view->selectedItem()) { ++ if (view->firstChild() && view->firstChild()->isSelectable()) { ++ view->setSelected(view->firstChild(),true); ++ } ++ else if (view->childCount()>1) { ++ view->setSelected(view->firstChild()->itemBelow(),true); ++ } ++ } ++#endif ++} ++ ++void KMenu::paletteChanged() ++{ ++} ++ ++void KMenu::tabClicked(QTab* t) ++{ ++ if (t==m_tabs[ApplicationsTab]) ++ slotGoSubMenu(QString::null); ++ else if (t==m_tabs[LeaveTab]) ++ slotGoExitMainMenu(); ++} ++ ++void KMenu::slotGoBack() ++{ ++ goSubMenu( m_browserView->currentView()->backPath() ); ++} ++ ++void KMenu::slotGoExitMainMenu() ++{ ++ if (m_exitView->currentView()==m_exitView->rightView()) { ++ m_exitView->prepareLeftMove(false); ++ m_exitView->showBackButton(false); ++ m_exitView->flipScroll(QString::null); ++ } ++} ++ ++void KMenu::slotGoExitSubMenu(const QString& url) ++{ ++ m_exitView->prepareRightMove(); ++ m_exitView->showBackButton(true); ++ ++ int nId = serviceMenuEndId() + 1; ++ int index = 1; ++ ++ if (url=="kicker:/restart/") { ++ QStringList rebootOptions; ++ int def, cur; ++ if ( DM().bootOptions( rebootOptions, def, cur ) ) ++ { ++ if ( cur == -1 ) ++ cur = def; ++ ++ int boot_index = 0; ++ QStringList::ConstIterator it = rebootOptions.begin(); ++ for (; it != rebootOptions.end(); ++it, ++boot_index) ++ { ++ ++ QString option = i18n( "Start '%1'" ).arg( *it ); ++ if (boot_index == cur) ++ option = i18n("Start '%1' (current)").arg( *it ); ++ m_exitView->rightView()->insertItem( "reload", option, ++ i18n( "Restart and boot directly into '%1'").arg( *it ), ++ QString( "kicker:/restart_%1" ).arg( boot_index ), nId++, index++ ); ++ } ++ m_exitView->rightView()->insertHeader( nId++, "kicker:/restart/" ); ++ } ++ } ++ else /*if (url=="kicker:/switchuser/") */{ ++ m_exitView->rightView()->insertItem( "switchuser", i18n( "Start New Session" ), ++ i18n( "Start a parallel session" ), "kicker:/switchuser", nId++, index++ ); ++ ++ m_exitView->rightView()->insertItem( "lock", i18n( "Lock Current && Start New Session").replace("&&","&"), ++ i18n( "Lock screen and start a parallel session" ), "kicker:/switchuserafterlock", nId++, index++ ); ++ ++ SessList sess; ++ if (DM().localSessions( sess )) { ++ if (sess.count()>1) ++ m_exitView->rightView()->insertSeparator( nId++, QString::null, index++ ); ++ for (SessList::ConstIterator it = sess.begin(); it != sess.end(); ++it) { ++ if ((*it).vt && !(*it).self) { ++ QString user, loc; ++ DM().sess2Str2( *it, user, loc ); ++ QStringList list = QStringList::split(":", user); ++ m_exitView->rightView()->insertItem( "switchuser", i18n( "Switch to Session of User '%1'").arg(list[0]), ++ i18n("Session: %1").arg(list[1].mid(1)+", "+loc) , QString("kicker:/switchuser_%1").arg((*it).vt), nId++, index++ ); ++ } ++ } ++ } ++ ++ m_exitView->rightView()->insertHeader( nId++, "kicker:/switchuser/" ); ++ } ++ m_exitView->flipScroll(QString::null); ++} ++ ++void KMenu::slotGoSubMenu(const QString& relPath) ++{ ++ goSubMenu(relPath); ++} ++ ++void KMenu::goSubMenu(const QString& relPath, bool keyboard) ++{ ++ if ( relPath.startsWith( "kicker:/goup/" ) ) ++ { ++ QString rel = relPath.mid( strlen( "kicker:/goup/" ) ); ++ int index = rel.length() - 1; ++ if ( rel.endsWith( "/" ) ) ++ index--; ++ index = rel.findRev( '/', index ); ++ kdDebug() << "goup, rel '" << rel << "' " << index << endl; ++ QString currel = rel; ++ rel = rel.left( index + 1 ); ++ if ( rel == "/" ) ++ rel = QString::null; ++ ++ kdDebug() << "goup, rel '" << rel << "' " << rel.isEmpty() << endl; ++ fillSubMenu( rel, m_browserView->prepareLeftMove() ); ++ m_browserView->flipScroll(keyboard ? currel : QString::null); ++ return; ++ } else if (relPath.isEmpty()) ++ { ++ if (m_browserView->currentView()->path.isEmpty()) ++ return; ++ fillSubMenu( relPath, m_browserView->prepareLeftMove() ); ++ } else if ( relPath.startsWith( "kicker:/new/" ) ) ++ { ++ ItemView* view = m_browserView->prepareRightMove(); ++ m_browserView->showBackButton( true ); ++ ++ int nId = serviceMenuEndId() + 1; ++ view->insertHeader( nId++, "new/" ); ++ int index = 2; ++ for (QStringList::ConstIterator it = m_newInstalledPrograms.begin(); ++ it != m_newInstalledPrograms.end(); ++it) { ++ KService::Ptr p = KService::serviceByStorageId((*it)); ++ view->insertMenuItem(p, nId++, index++); ++ } ++ } else ++ { ++ //m_browserView->clear(); ++ fillSubMenu(relPath, m_browserView->prepareRightMove()); ++ } ++ m_browserView->flipScroll(keyboard ? "kicker:/goup/": QString::null); ++} ++ ++void KMenu::fillSubMenu(const QString& relPath, ItemView *view) ++{ ++ kdDebug() << "fillSubMenu() " << relPath << endl; ++ KServiceGroup::Ptr root = KServiceGroup::group(relPath); ++ Q_ASSERT( root ); ++ ++ KServiceGroup::List list = root->entries(true, true, true, KickerSettings:: ++ menuEntryFormat() == KickerSettings::DescriptionAndName || KickerSettings::menuEntryFormat() ++ == KickerSettings::DescriptionOnly); ++ ++ int nId = serviceMenuStartId(); ++ m_browserView->showBackButton( !relPath.isEmpty() ); ++ if ( !relPath.isEmpty() ) ++ { ++ view->insertHeader( nId++, relPath ); ++ } ++ else if ( m_newInstalledPrograms.count() ) { ++ KMenuItem *item = view->insertItem( "clock", i18n( "New Applications" ), ++ QString::null, "kicker:/new/", nId++, -1 ); ++ item->setHasChildren( true ); ++ view->insertSeparator( nId++, QString::null, -1 ); ++ } ++ ++ view->path = relPath; ++ ++ fillMenu (root, list, relPath, view, nId); ++} ++ ++void KMenu::fillMenu(KServiceGroup::Ptr& ++#ifdef KDELIBS_SUSE ++ _root ++#endif ++ , KServiceGroup::List& _list, ++ const QString& _relPath, ++ ItemView* view, ++ int& id) ++{ ++ bool separatorNeeded = false; ++ KServiceGroup::List::ConstIterator it = _list.begin(); ++#ifdef KDELIBS_SUSE ++ KSortableValueList,QCString> slist; ++ KSortableValueList,QCString> glist; ++ QMap specialTitle; ++ QMap categoryIcon; ++ QMap shortenedMenuPath; ++#endif ++ ++ for (; it != _list.end(); ++it) ++ { ++ KSycocaEntry * e = *it; ++ ++ if (e->isType(KST_KServiceGroup)) ++ { ++ KServiceGroup::Ptr g(static_cast(e)); ++#ifdef KDELIBS_SUSE ++ if ( true /*KickerSettings::reduceMenuDepth()*/ && g->SuSEshortMenu() ){ ++ KServiceGroup::List l = g->entries(true, true /*excludeNoDisplay_*/ ); ++ if ( l.count() == 1 ) { ++ // the special case, we want to short the menu. ++ // TOFIX? : this works only for one level ++ KServiceGroup::List::ConstIterator _it=l.begin(); ++ KSycocaEntry *_e = *_it; ++ if (_e->isType(KST_KService)) { ++ KService::Ptr s(static_cast(_e)); ++ QString key; ++ if ( g->SuSEgeneralDescription() ) { ++ // we use the application name ++ key = s->name(); ++ } ++ else { ++ // we use the normal menu description ++ key = s->name(); ++ if( !s->genericName().isEmpty() && g->caption()!=s->genericName()) { ++ if (KickerSettings::menuEntryFormat() == KickerSettings::NameAndDescription) ++ key = s->name() + " (" + g->caption() + ")"; ++ else if (KickerSettings::menuEntryFormat() == KickerSettings::DescriptionAndName) ++ key = g->caption() + " (" + s->name() + ")"; ++ else if (KickerSettings::menuEntryFormat() == KickerSettings::DescriptionOnly) ++ key = g->caption(); ++ } ++ } ++ specialTitle.insert( _e->name(), key ); ++ categoryIcon.insert( _e->name(), g->icon() ); ++ slist.insert( key.local8Bit(), _e ); ++ shortenedMenuPath.insert( _e->name(), g->relPath() ); ++ // and escape from here ++ continue; ++ } ++ } ++ } ++ glist.insert( g->caption().local8Bit(), e ); ++ }else if( e->isType(KST_KService)) { ++ KService::Ptr s(static_cast(e)); ++ slist.insert( s->name().local8Bit(), e ); ++ } else ++ slist.insert( e->name().local8Bit(), e ); ++ } ++ ++ _list = _root->SuSEsortEntries( slist, glist, true /*excludeNoDisplay_*/, true ); ++ it = _list.begin(); ++ ++ for (; it != _list.end(); ++it) { ++ ++ KSycocaEntry * e = *it; ++ ++ if (e->isType(KST_KServiceGroup)) { ++ ++ KServiceGroup::Ptr g(static_cast(e)); ++ if ( true /*KickerSettings::reduceMenuDepth()*/ && g->SuSEshortMenu() ){ ++ KServiceGroup::List l = g->entries(true, true /*excludeNoDisplay_*/ ); ++ if ( l.count() == 1 ) { ++ continue; ++ } ++ } ++ // standard sub menu ++#endif ++ QString groupCaption = g->caption(); ++ ++ // Avoid adding empty groups. ++ KServiceGroup::Ptr subMenuRoot = KServiceGroup::group(g->relPath()); ++ ++ int nbChildCount = subMenuRoot->childCount(); ++ if (nbChildCount == 0 && !g->showEmptyMenu()) ++ { ++ continue; ++ } ++ ++ bool is_description = KickerSettings::menuEntryFormat() == KickerSettings::DescriptionAndName || ++ KickerSettings::menuEntryFormat() == KickerSettings::DescriptionOnly; ++ ++ QString inlineHeaderName = g->showInlineHeader() ? groupCaption : ""; ++ ++ if ( nbChildCount == 1 && g->allowInline() && g->inlineAlias()) ++ { ++ KServiceGroup::Ptr element = KServiceGroup::group(g->relPath()); ++ if ( element ) ++ { ++ //just one element ++ ++ KServiceGroup::List listElement = element->entries(true, true, true, is_description ); ++ KSycocaEntry * e1 = *( listElement.begin() ); ++ if ( e1->isType( KST_KService ) ) ++ { ++ KService::Ptr s(static_cast(e1)); ++ view->insertMenuItem(s, id++, -1, 0); ++ continue; ++ } ++ } ++ } ++ ++ if (g->allowInline() && ((nbChildCount <= g->inlineValue() ) || (g->inlineValue() == 0))) ++ { ++ //inline all entries ++ KServiceGroup::Ptr rootElement = KServiceGroup::group(g->relPath()); ++ ++ if (!rootElement || !rootElement->isValid()) ++ { ++ break; ++ } ++ ++ ++ KServiceGroup::List listElement = rootElement->entries(true, true, true, is_description ); ++ ++#if 0 ++ if ( !g->inlineAlias() && !inlineHeaderName.isEmpty() ) ++ { ++ int mid = view->insertItem(new PopupMenuTitle(inlineHeaderName, font()), id++, id, 0); ++ m_browserView->setItemEnabled( mid, false ); ++ } ++#endif ++ ++ fillMenu( rootElement, listElement, g->relPath(), 0, id ); ++ continue; ++ } ++ ++ // Ignore dotfiles. ++ if ((g->name().at(0) == '.')) ++ { ++ continue; ++ } ++ ++ KMenuItem *item = view->insertItem(g->icon(), groupCaption, QString::null, g->relPath(), id++, -1); ++ item->setMenuPath(g->relPath()); ++ item->setHasChildren( true ); ++ ++#warning FIXME ++#if 0 ++ PanelServiceMenu * m = ++ newSubMenu(g->name(), g->relPath(), this, g->name().utf8(), inlineHeaderName); ++ m->setCaption(groupCaption); ++ ++ QIconSet iconset = KickerLib::menuIconSet(g->icon()); ++ ++ if (separatorNeeded) ++ { ++ insertSeparator(); ++ separatorNeeded = false; ++ } ++ ++ int newId = insertItem(iconset, groupCaption, m, id++); ++ entryMap_.insert(newId, static_cast(g)); ++ // We have to delete the sub menu our selves! (See Qt docs.) ++ subMenus.append(m); ++#endif ++ } ++ if (e->isType(KST_KService)) ++ { ++ KService::Ptr s(static_cast(e)); ++ if (_relPath.isEmpty()) { ++ QStringList favs = KickerSettings::favorites(); ++ if (favs.find(s->storageId())!=favs.end()) ++ continue; ++ } ++#ifdef KDELIBS_SUSE ++ KMenuItem *item = view->insertMenuItem(s, id++, -1, 0, QString::null, specialTitle[s->name()], categoryIcon[s->name()] ); ++ if (shortenedMenuPath[s->name()].isEmpty()) ++ item->setMenuPath(_relPath+s->menuId()); ++ else ++ item->setMenuPath(shortenedMenuPath[s->name()]+s->menuId()); ++#else ++ KMenuItem *item = view->insertMenuItem(s, id++, -1); ++ item->setMenuPath(_relPath+s->menuId()); ++#endif ++ } ++ else if (e->isType(KST_KServiceSeparator)) ++ { ++ separatorNeeded = true; ++ } ++ } ++ ++ view->slotMoveContent(); ++} ++ ++void KMenu::initialize() ++{ ++ static bool m_initialized=false; ++ if (m_initialized) ++ return; ++ m_initialized = true; ++ ++ kdDebug(1210) << "KMenu::initialize()" << endl; ++ ++ // in case we've been through here before, let's disconnect ++ disconnect(kapp, SIGNAL(kdisplayPaletteChanged()), ++ this, SLOT(paletteChanged())); ++ connect(kapp, SIGNAL(kdisplayPaletteChanged()), ++ this, SLOT(paletteChanged())); ++ ++ /* ++ If the user configured ksmserver to ++ */ ++ KConfig ksmserver("ksmserverrc", false, false); ++ ksmserver.setGroup("General"); ++ connect( m_branding, SIGNAL(clicked()), SLOT(slotOpenHomepage())); ++ m_tabBar->setTabEnabled(LeaveTab, kapp->authorize("logout")); ++ ++ // load search field history ++ QStringList histList = KickerSettings::history(); ++ int maxHistory = KickerSettings::historyLength(); ++ ++ bool block = m_kcommand->signalsBlocked(); ++ m_kcommand->blockSignals( true ); ++ m_kcommand->setMaxCount( maxHistory ); ++ m_kcommand->setHistoryItems( histList ); ++ m_kcommand->blockSignals( block ); ++ ++ QStringList compList = KickerSettings::completionItems(); ++ if( compList.isEmpty() ) ++ m_kcommand->completionObject()->setItems( histList ); ++ else ++ m_kcommand->completionObject()->setItems( compList ); ++ ++ KCompletionBox* box = m_kcommand->completionBox(); ++ if (box) ++ box->setActivateOnSelect( false ); ++ ++ m_finalFilters = KURIFilter::self()->pluginNames(); ++ m_finalFilters.remove("kuriikwsfilter"); ++ ++ m_middleFilters = m_finalFilters; ++ m_middleFilters.remove("localdomainurifilter"); ++ ++ QStringList favs = KickerSettings::favorites(); ++ if (favs.isEmpty()) { ++ QFile f(locate("data", "kicker/default-favs")); ++ if (f.open(IO_ReadOnly)) { ++ QTextStream is(&f); ++ ++ while (!is.eof()) ++ favs << is.readLine(); ++ ++ f.close(); ++ } ++ KickerSettings::setFavorites(favs); ++ KickerSettings::writeConfig(); ++ } ++ ++ int nId = serviceMenuEndId() + 1; ++ int index = 1; ++ for (QStringList::ConstIterator it = favs.begin(); it != favs.end(); ++it) ++ { ++ if ((*it)[0]=='/') { ++ KDesktopFile df((*it),true); ++ QString url = df.readURL(); ++ if (!KURL(url).isLocalFile() || QFile::exists(url.replace("file://",QString::null))) ++ m_favoriteView->insertItem(df.readIcon(),df.readName(),df.readGenericName(), url, nId++, index++); ++ } ++ else { ++ KService::Ptr p = KService::serviceByStorageId((*it)); ++ m_favoriteView->insertMenuItem(p, nId++, index++); ++ } ++ } ++ ++ //nId = m_favoriteView->insertSeparator( nId, QString::null, index++ ); ++// m_favoriteView->insertDocument(KURL("help:/khelpcenter/userguide/index.html"), nId++); ++ ++ insertStaticItems(); ++ ++ m_stacker->raiseWidget (m_favoriteView); ++} ++ ++void KMenu::insertStaticExitItems() ++{ ++ int nId = serviceMenuEndId() + 1; ++ int index = 1; ++ ++ m_exitView->leftView()->insertSeparator( nId++, i18n("Session"), index++ ); ++ if (kapp->authorize("logout")) ++ m_exitView->leftView()->insertItem( "undo", i18n( "Logout" ), ++ i18n( "End session" ), "kicker:/logout", nId++, index++ ); ++ if (kapp->authorize("lock_screen")) ++ m_exitView->leftView()->insertItem( "lock", i18n( "Lock" ), ++ i18n( "Lock screen" ), "kicker:/lock", nId++, index++ ); ++ ++ KConfig ksmserver("ksmserverrc", false, false); ++ ksmserver.setGroup("General"); ++ if (ksmserver.readEntry( "loginMode" ) == "restoreSavedSession") ++ { ++ m_exitView->leftView()->insertItem("filesave", i18n("Save Session"), ++ i18n("Save current Session for next login"), ++ "kicker:/savesession", nId++, index++ ); ++ } ++ if (DM().isSwitchable() && kapp->authorize("switch_user")) ++ { ++ KMenuItem *switchuser = m_exitView->leftView()->insertItem( "switchuser", i18n( "Switch User" ), ++ i18n( "Manage parallel sessions" ), "kicker:/switchuser/", nId++, index++ ); ++ switchuser->setHasChildren(true); ++ } ++ ++ bool maysd = false; ++ if (ksmserver.readBoolEntry( "offerShutdown", true ) && DM().canShutdown()) ++ maysd = true; ++ ++ if ( maysd ) ++ { ++ m_exitView->leftView()->insertSeparator( nId++, i18n("System"), index++ ); ++ m_exitView->leftView()->insertItem( "exit", i18n( "Shutdown Computer" ), ++ i18n( "Turn off computer" ), "kicker:/shutdown", nId++, index++ ); ++ ++ m_exitView->leftView()->insertItem( "reload", i18n( "&Restart Computer" ).replace("&",""), ++ i18n( "Restart and boot the default system" ), ++ "kicker:/restart", nId++, index++ ); ++ ++ insertSuspendOption(nId, index); ++ ++ int def, cur; ++ QStringList dummy_opts; ++ if ( DM().bootOptions( dummy_opts, def, cur ) ) ++ { ++ ++ KMenuItem *restart = m_exitView->leftView()->insertItem( "reload", i18n( "Start Operating System" ), ++ i18n( "Restart and boot another operating system" ), ++ "kicker:/restart/", nId++, index++ ); ++ restart->setHasChildren(true); ++ } ++ } ++} ++ ++void KMenu::insertStaticItems() ++{ ++ insertStaticExitItems(); ++ ++ int nId = serviceMenuEndId() + 10; ++ int index = 1; ++ ++ m_systemView->insertSeparator( nId++, i18n("Applications"), index++); ++ ++ KService::Ptr p = KService::serviceByStorageId("/usr/share/applications/YaST.desktop"); ++ m_systemView->insertMenuItem(p, nId++, index++); ++ ++ m_systemView->insertItem( "info", i18n( "System Information" ), ++ "sysinfo:/", "sysinfo:/", nId++, index++ ); ++ ++ m_systemView->insertSeparator( nId++, i18n("System Folders"), index++ ); ++ ++ m_systemView->insertItem( "folder_home", i18n( "Home Folder" ), ++ QDir::homeDirPath(), "file://"+QDir::homeDirPath(), nId++, index++ ); ++ ++ if ( KStandardDirs::exists( KGlobalSettings::documentPath() + "/" ) ) ++ { ++ QString documentPath = KGlobalSettings::documentPath(); ++ if ( documentPath.endsWith( "/" ) ) ++ documentPath = documentPath.left( documentPath.length() - 1 ); ++ if (documentPath!=QDir::homeDirPath()) ++ m_systemView->insertItem( "folder_man", i18n( "My Documents" ), documentPath, documentPath, nId++, index++ ); ++ } ++ ++ m_systemView->insertItem( "network", i18n( "Network Folders" ), ++ "remote:/", "remote:/", nId++, index++ ); ++ ++ m_mediaWatcher = new MediaWatcher( this ); ++ connect( m_mediaWatcher, SIGNAL( mediumChanged() ), SLOT( updateMedia() ) ); ++ m_media_id = 0; ++ ++ connect(&m_mediaFreeTimer, SIGNAL(timeout()), SLOT( updateMedia())); ++} ++ ++int KMenu::insertClientMenu(KickerClientMenu *) ++{ ++#if 0 ++ int id = client_id; ++ clients.insert(id, p); ++ return id; ++#endif ++ return 0; ++} ++ ++void KMenu::removeClientMenu(int) ++{ ++#if 0 ++ clients.remove(id); ++ slotClear(); ++#endif ++} ++ ++extern int kicker_screen_number; ++ ++void KMenu::slotLock() ++{ ++ kdDebug() << "slotLock " << endl; ++ accept(); ++ QCString appname( "kdesktop" ); ++ if ( kicker_screen_number ) ++ appname.sprintf("kdesktop-screen-%d", kicker_screen_number); ++ kapp->dcopClient()->send(appname, "KScreensaverIface", "lock()", ""); ++} ++ ++void KMenu::slotOpenHomepage() ++{ ++ accept(); ++ kapp->invokeBrowser("http://opensuse.org"); ++} ++ ++void KMenu::slotLogout() ++{ ++ kapp->requestShutDown(); ++} ++ ++void KMenu::slotPopulateSessions() ++{ ++ int p = 0; ++ DM dm; ++ ++ sessionsMenu->clear(); ++ if (kapp->authorize("start_new_session") && (p = dm.numReserve()) >= 0) ++ { ++ if (kapp->authorize("lock_screen")) ++ sessionsMenu->insertItem(/*SmallIconSet("lockfork"),*/ i18n("Lock Current && Start New Session"), 100 ); ++ sessionsMenu->insertItem(SmallIconSet("fork"), i18n("Start New Session"), 101 ); ++ if (!p) { ++ sessionsMenu->setItemEnabled( 100, false ); ++ sessionsMenu->setItemEnabled( 101, false ); ++ } ++ sessionsMenu->insertSeparator(); ++ } ++ SessList sess; ++ if (dm.localSessions( sess )) ++ for (SessList::ConstIterator it = sess.begin(); it != sess.end(); ++it) { ++ int id = sessionsMenu->insertItem( DM::sess2Str( *it ), (*it).vt ); ++ if (!(*it).vt) ++ sessionsMenu->setItemEnabled( id, false ); ++ if ((*it).self) ++ sessionsMenu->setItemChecked( id, true ); ++ } ++} ++ ++void KMenu::slotSessionActivated( int ent ) ++{ ++ if (ent == 100) ++ doNewSession( true ); ++ else if (ent == 101) ++ doNewSession( false ); ++ else if (!sessionsMenu->isItemChecked( ent )) ++ DM().lockSwitchVT( ent ); ++} ++ ++void KMenu::doNewSession( bool lock ) ++{ ++ int result = KMessageBox::warningContinueCancel( ++ kapp->desktop()->screen(kapp->desktop()->screenNumber(this)), ++ i18n("

    You have chosen to open another desktop session.
    " ++ "The current session will be hidden " ++ "and a new login screen will be displayed.
    " ++ "An F-key is assigned to each session; " ++ "F%1 is usually assigned to the first session, " ++ "F%2 to the second session and so on. " ++ "You can switch between sessions by pressing " ++ "Ctrl, Alt and the appropriate F-key at the same time. " ++ "Additionally, the KDE Panel and Desktop menus have " ++ "actions for switching between sessions.

    ") ++ .arg(7).arg(8), ++ i18n("Warning - New Session"), ++ KGuiItem(i18n("&Start New Session"), "fork"), ++ ":confirmNewSession", ++ KMessageBox::PlainCaption | KMessageBox::Notify); ++ ++ if (result==KMessageBox::Cancel) ++ return; ++ ++ if (lock) ++ slotLock(); ++ ++ DM().startReserve(); ++} ++ ++void KMenu::searchAccept() ++{ ++ QString cmd = m_kcommand->currentText().stripWhiteSpace(); ++ ++ bool logout = (cmd == "logout"); ++ bool lock = (cmd == "lock"); ++ ++ addToHistory(); ++ ++ if ( !logout && !lock ) ++ { ++ // first try if we have any search action ++ if (m_searchResultsWidget->currentItem()) { ++ m_searchResultsWidget->slotItemClicked(m_searchResultsWidget->currentItem()); ++ return; ++ } ++ } ++ ++ accept(); ++ saveConfig(); ++ ++ if ( logout ) ++ { ++ kapp->propagateSessionManager(); ++ kapp->requestShutDown(); ++ } ++ if ( lock ) ++ { ++ QCString appname( "kdesktop" ); ++ int kicker_screen_number = qt_xscreen(); ++ if ( kicker_screen_number ) ++ appname.sprintf("kdesktop-screen-%d", kicker_screen_number); ++ kapp->dcopClient()->send(appname, "KScreensaverIface", "lock()", ""); ++ } ++} ++ ++bool KMenu::runCommand() ++{ ++ kdDebug() << "runCommand() " << m_kcommand->lineEdit()->text() << endl; ++ // Ignore empty commands... ++ if ( m_kcommand->lineEdit()->text().isEmpty() ) ++ return true; ++ ++ accept(); ++ ++ if (input_timer->isActive ()) ++ input_timer->stop (); ++ ++ // Make sure we have an updated data ++ parseLine( true ); ++ ++ bool block = m_kcommand->signalsBlocked(); ++ m_kcommand->blockSignals( true ); ++ m_kcommand->clearEdit(); ++ m_kcommand->setFocus(); ++ m_kcommand->reset(); ++ m_kcommand->blockSignals( block ); ++ ++ ++ QString cmd; ++ KURL uri = m_filterData->uri(); ++ if ( uri.isLocalFile() && !uri.hasRef() && uri.query().isEmpty() ) ++ cmd = uri.path(); ++ else ++ cmd = uri.url(); ++ ++ QString exec; ++ ++ switch( m_filterData->uriType() ) ++ { ++ case KURIFilterData::LOCAL_FILE: ++ case KURIFilterData::LOCAL_DIR: ++ case KURIFilterData::NET_PROTOCOL: ++ case KURIFilterData::HELP: ++ { ++ // No need for kfmclient, KRun does it all (David) ++ (void) new KRun( m_filterData->uri(), parentWidget()); ++ return false; ++ } ++ case KURIFilterData::EXECUTABLE: ++ { ++ if( !m_filterData->hasArgsAndOptions() ) ++ { ++ // Look for desktop file ++ KService::Ptr service = KService::serviceByDesktopName(cmd); ++ if (service && service->isValid() && service->type() == "Application") ++ { ++ notifyServiceStarted(service); ++ KRun::run(*service, KURL::List()); ++ return false; ++ } ++ } ++ } ++ // fall-through to shell case ++ case KURIFilterData::SHELL: ++ { ++ if (kapp->authorize("shell_access")) ++ { ++ exec = cmd; ++ ++ if( m_filterData->hasArgsAndOptions() ) ++ cmd += m_filterData->argsAndOptions(); ++ ++ break; ++ } ++ else ++ { ++ KMessageBox::sorry( this, i18n("
    %1
    \n" ++ "You do not have permission to execute " ++ "this command.") ++ .arg( QStyleSheet::convertFromPlainText(cmd) )); ++ return true; ++ } ++ } ++ case KURIFilterData::UNKNOWN: ++ case KURIFilterData::ERROR: ++ default: ++ { ++ // Look for desktop file ++ KService::Ptr service = KService::serviceByDesktopName(cmd); ++ if (service && service->isValid() && service->type() == "Application") ++ { ++ notifyServiceStarted(service); ++ KRun::run(*service, KURL::List(), this); ++ return false; ++ } ++ ++ service = KService::serviceByName(cmd); ++ if (service && service->isValid() && service->type() == "Application") ++ { ++ notifyServiceStarted(service); ++ KRun::run(*service, KURL::List(), this); ++ return false; ++ } ++ ++ KMessageBox::sorry( this, i18n("
    %1
    \n" ++ "Could not run the specified command.") ++ .arg( QStyleSheet::convertFromPlainText(cmd) )); ++ return true; ++ } ++ } ++ ++ if ( KRun::runCommand( cmd, exec, m_iconName ) ) ++ return false; ++ ++ KMessageBox::sorry( this, i18n("
    %1
    \n" ++ "The specified command does not exist.").arg(cmd) ); ++ return true; // Let the user try again... ++} ++ ++void KMenu::show() ++{ ++ m_isShowing = true; ++ emit aboutToShow(); ++ ++ initialize(); ++ ++ PanelPopupButton *kButton = MenuManager::the()->findKButtonFor( this ); ++ if (kButton) ++ { ++ QPoint center = kButton->center(); ++ QRect screen = QApplication::desktop()->screenGeometry( center ); ++ setOrientation((center.y()-screen.y()raiseWidget(FavoriteTab); ++ m_kcommand->clear(); ++ current_query.clear(); ++ m_kcommand->setFocus(); ++ ++ // we need to reenable it ++ m_toolTipsEnabled = QToolTip::isGloballyEnabled(); ++ QToolTip::setGloballyEnabled(KickerSettings::showToolTips()); ++ ++ KMenuBase::show(); ++ m_isShowing = false; ++} ++ ++void KMenu::setOrientation(MenuOrientation orientation) ++{ ++ if (m_orientation == orientation) ++ return; ++ ++ m_orientation=orientation; ++ ++ m_resizeHandle->setCursor(m_orientation == BottomUp ? Qt::sizeBDiagCursor : Qt::sizeFDiagCursor); ++ ++ QPixmap pix; ++ if ( m_orientation == BottomUp ) ++ pix.load( locate("data", "kicker/pics/search-gradient.png" ) ); ++ else ++ pix.load( locate("data", "kicker/pics/search-gradient-topdown.png" ) ); ++ ++ pix.convertFromImage( pix.convertToImage().scale(pix.width(), m_searchFrame->height())); ++ m_search->mainWidget()->setPaletteBackgroundPixmap( pix ); ++ m_resizeHandle->setPaletteBackgroundPixmap( pix ); ++ ++ m_tabBar->setShape( m_orientation == BottomUp ++ ? QTabBar::RoundedBelow : QTabBar::RoundedAbove); ++ ++ QPixmap respix = QPixmap( locate("data", "kicker/pics/resize_handle.png" ) ); ++ if ( m_orientation == TopDown ) { ++ QWMatrix m; ++ m.rotate( 90.0 ); ++ respix=respix.xForm(m); ++ } ++ m_resizeHandle->setPixmap(respix); ++ ++ { ++ QWidget *footer = m_footer->mainWidget(); ++ QPixmap pix( 64, footer->height() ); ++ QPainter p( &pix ); ++ p.fillRect( 0, 0, 64, footer->height(), m_branding->colorGroup().brush( QColorGroup::Base ) ); ++ p.fillRect( 0, m_orientation == BottomUp ? footer->height() - 2 : 0, ++ 64, 3, KNewButton::self()->borderColor() ); ++ p.end(); ++ footer->setPaletteBackgroundPixmap( pix ); ++ } ++ ++ resizeEvent(new QResizeEvent(sizeHint(), sizeHint())); ++} ++ ++void KMenu::showMenu() ++{ ++ kdDebug() << "KMenu::showMenu()" << endl; ++ PanelPopupButton *kButton = MenuManager::the()->findKButtonFor(this); ++ if (kButton) ++ { ++ adjustSize(); ++ kButton->showMenu(); ++ } ++ else ++ { ++ show(); ++ } ++ kdDebug() << "end KMenu::showMenu()" << endl; ++} ++ ++void KMenu::hide() ++{ ++ //kdDebug() << "KMenu::hide() from " << kdBacktrace() << endl; ++ ++ // TODO: hide popups ++ ++ emit aboutToHide(); ++ ++ if (m_popupMenu) { ++ m_popupMenu->deleteLater(); ++ m_popupMenu=0; ++ } ++ m_mediaFreeTimer.stop(); ++ ++ m_isresizing = false; ++ ++ KickerSettings::setKMenuWidth(width()); ++ KickerSettings::setKMenuHeight(height()); ++ KickerSettings::writeConfig(); ++ ++ QToolTip::setGloballyEnabled(m_toolTipsEnabled); ++ ++ // remove focus from lineedit again, otherwise it doesn't kill its timers ++ m_stacker->raiseWidget(FavoriteTab); ++ ++ QWidget::hide(); ++} ++ ++void KMenu::paintEvent(QPaintEvent * e) ++{ ++ KMenuBase::paintEvent(e); ++ ++ QPainter p(this); ++ p.setClipRegion(e->region()); ++ ++ const BackgroundMode bgmode = backgroundMode(); ++ const QColorGroup::ColorRole crole = QPalette::backgroundRoleFromMode( bgmode ); ++ p.setBrush( colorGroup().brush( crole ) ); ++ ++ p.drawRect( 0, 0, width(), height() ); ++ int ypos = m_search->mainWidget()->geometry().bottom(); ++ ++ p.drawPixmap( 0, ypos, main_border_tl ); ++ p.drawPixmap( width() - main_border_tr.width(), ypos, main_border_tr ); ++ // p.drawPixmap( 0, ->y(), button_box_left ); ++} ++ ++ ++void KMenu::configChanged() ++{ ++ RecentlyLaunchedApps::the().m_bNeedToUpdate = false; ++ RecentlyLaunchedApps::the().configChanged(); ++ ++ m_exitView->leftView()->clear(); ++ insertStaticExitItems(); ++} ++ ++// create and fill "recent" section at first ++void KMenu::createRecentMenuItems() ++{ ++ RecentlyLaunchedApps::the().init(); ++ ++ if (!KickerSettings::numVisibleEntries()) ++ KickerSettings::setNumVisibleEntries(5); ++ ++ int nId = serviceMenuEndId() + 1; ++ m_recentlyView->insertSeparator( nId++, i18n( "Applications" ), -1 ); ++ ++ QStringList RecentApps; ++ ++ if (!KickerSettings::recentVsOften()) { ++ KickerSettings::setRecentVsOften(true); ++ RecentlyLaunchedApps::the().configChanged(); ++ RecentlyLaunchedApps::the().getRecentApps(RecentApps); ++ KickerSettings::setRecentVsOften(false); ++ RecentlyLaunchedApps::the().configChanged(); ++ } ++ else ++ RecentlyLaunchedApps::the().getRecentApps(RecentApps); ++ ++ ++ if (RecentApps.count() > 0) ++ { ++// bool bSeparator = KickerSettings::showMenuTitles(); ++ int nIndex = 0; ++ ++ for (QValueList::ConstIterator it = ++ RecentApps.begin(); it!=RecentApps.end(); ++it) ++ { ++ KService::Ptr s = KService::serviceByStorageId(*it); ++ if (!s) ++ { ++ RecentlyLaunchedApps::the().removeItem(*it); ++ } ++ else ++ m_recentlyView->insertMenuItem(s, nIndex++); ++ } ++ ++ } ++ ++ m_recentlyView->insertSeparator( nId++, i18n( "Documents" ), -1 ); ++ ++ QStringList fileList = KRecentDocument::recentDocuments(); ++ kdDebug() << "createRecentMenuItems=" << fileList << endl; ++ for (QStringList::ConstIterator it = fileList.begin(); ++ it != fileList.end(); ++ ++it) ++ m_recentlyView->insertRecentlyItem(*it, nId++); ++ ++} ++ ++void KMenu::clearSubmenus() ++{ ++ // we don't need to delete these on the way out since the libloader ++ // handles them for us ++ if (QApplication::closingDown()) ++ { ++ return; ++ } ++ ++ for (PopupMenuList::const_iterator it = dynamicSubMenus.constBegin(); ++ it != dynamicSubMenus.constEnd(); ++ ++it) ++ { ++ delete *it; ++ } ++ dynamicSubMenus.clear(); ++} ++ ++void KMenu::updateRecent() ++{ ++ m_recentlyView->clear(); ++ ++ createRecentMenuItems(); ++ ++ m_recentDirty = false; ++} ++ ++void KMenu::popup(const QPoint&, int) ++{ ++ showMenu(); ++} ++ ++void KMenu::clearRecentAppsItems() ++{ ++ RecentlyLaunchedApps::the().clearRecentApps(); ++ RecentlyLaunchedApps::the().save(); ++ RecentlyLaunchedApps::the().m_bNeedToUpdate = true; ++ updateRecent(); ++} ++ ++void KMenu::clearRecentDocsItems() ++{ ++ KRecentDocument::clear(); ++ updateRecent(); ++} ++ ++void KMenu::searchChanged(const QString & text) ++{ ++ if (!text.isEmpty()) { ++ const QColor on = QColor( 244, 244, 244 ); ++ const QColor off = QColor( 181, 181, 181 ); ++ m_stacker->raiseWidget(m_searchWidget); ++ paintSearchTab(true); ++ } ++ ++ m_searchActions->clearSelection(); ++ m_searchResultsWidget->clearSelection(); ++ ++ if (input_timer->isActive ()) ++ input_timer->stop (); ++ input_timer->start (WAIT_BEFORE_QUERYING, TRUE); ++} ++ ++bool KMenu::dontQueryNow (const QString& str) ++{ ++ if (str.isEmpty ()) ++ return true; ++ if (str == current_query.get()) ++ return true; ++ int length = str.length (); ++ int last_whitespace = str.findRev (' ', -1); ++ if (last_whitespace == length-1) ++ return false; // if the user typed a space, search ++ if (last_whitespace >= length-2) ++ return true; // dont search if the user only typed one character ++ QChar lastchar = str[length-1]; ++ if (lastchar == ":" || lastchar == "=") ++ return true; ++ return false; ++} ++ ++void KMenu::createNewProgramList() ++{ ++ m_seenProgramsChanged = false; ++ m_seenPrograms = KickerSettings::firstSeenApps(); ++ m_newInstalledPrograms.clear(); ++ ++ m_currentDate = QDate::currentDate().toString(Qt::ISODate); ++ ++ bool initialize = (m_seenPrograms.count() == 0); ++ ++ createNewProgramList(QString::null); ++ ++ if (initialize) { ++ for (QStringList::Iterator it = m_seenPrograms.begin(); it != m_seenPrograms.end(); ++it) ++ *(++it)="-"; ++ ++ m_newInstalledPrograms.clear(); ++ } ++ ++ if (m_seenProgramsChanged) { ++ KickerSettings::setFirstSeenApps(m_seenPrograms); ++ KickerSettings::writeConfig(); ++ } ++} ++ ++void KMenu::createNewProgramList(QString relPath) ++{ ++ KServiceGroup::Ptr group = KServiceGroup::group(relPath); ++ if (!group || !group->isValid()) ++ return; ++ ++ KServiceGroup::List list = group->entries(); ++ if (list.isEmpty()) ++ return; ++ ++ KServiceGroup::List::ConstIterator it = list.begin(); ++ for(; it != list.end(); ++it) { ++ KSycocaEntry *e = *it; ++ ++ if(e != 0) { ++ if(e->isType(KST_KServiceGroup)) { ++ KServiceGroup::Ptr g(static_cast(e)); ++ if(!g->noDisplay()) ++ createNewProgramList(g->relPath()); ++ } else if(e->isType(KST_KService)) { ++ KService::Ptr s(static_cast(e)); ++ if(s->type() == "Application" && !s->noDisplay() ) { ++ QString shortStorageId = s->storageId().replace(".desktop",QString::null); ++ QStringList::Iterator it_find = m_seenPrograms.begin(); ++ QStringList::Iterator it_end = m_seenPrograms.end(); ++ bool found = false; ++ for (; it_find != it_end; ++it_find) { ++ if (*(it_find)==shortStorageId) { ++ found = true; ++ break; ++ } ++ ++it_find; ++ } ++ if (!found) { ++ m_seenProgramsChanged=true; ++ m_seenPrograms+=shortStorageId; ++ m_seenPrograms+=m_currentDate; ++ if (m_newInstalledPrograms.find(s->storageId())==m_newInstalledPrograms.end()) ++ m_newInstalledPrograms+=s->storageId(); ++ } ++ else { ++ ++it_find; ++ if (*(it_find)!="-") { ++ QDate date = QDate::fromString(*(it_find),Qt::ISODate); ++ if (date.daysTo(QDate::currentDate())<3) { ++ if (m_newInstalledPrograms.find(s->storageId())==m_newInstalledPrograms.end()) ++ m_newInstalledPrograms+=s->storageId(); ++ } ++ else { ++ m_seenProgramsChanged=true; ++ (*it_find)="-"; ++ } ++ } ++ } ++ } ++ } ++ } ++ } ++} ++ ++void KMenu::searchProgramList(QString relPath) ++{ ++ KServiceGroup::Ptr group = KServiceGroup::group(relPath); ++ if (!group || !group->isValid()) ++ return; ++ ++ KServiceGroup::List list = group->entries(); ++ if (list.isEmpty()) ++ return; ++ ++ KServiceGroup::List::ConstIterator it = list.begin(); ++ for(; it != list.end(); ++it) { ++ KSycocaEntry *e = *it; ++ ++ if(e != 0) { ++ if(e->isType(KST_KServiceGroup)) { ++ KServiceGroup::Ptr g(static_cast(e)); ++ if(!g->noDisplay()) ++ searchProgramList(g->relPath()); ++ } else if(e->isType(KST_KService)) { ++ KService::Ptr s(static_cast(e)); ++ if(s->type() == "Application" && !s->noDisplay() && !checkUriInMenu(s->desktopEntryPath())) { ++ if (!current_query.matches(s->name()+' '+s->genericName()+' '+s->exec()+' '+ ++ s->keywords().join(",")+' '+s->comment()+' '+group->caption()+' '+ ++ s->categories().join(",")) || !anotherHitMenuItemAllowed(APPS)) ++ continue; ++ ++ QString input = current_query.get(); ++ int score = 0; ++ if (s->exec()==input) ++ score = 100; ++ else if (s->exec().find(input)==0) ++ score = 50; ++ else if (s->exec().find(input)!=-1) ++ score = 10; ++ else if (s->name().lower()==input) ++ score = 100; ++ else if (s->genericName().lower()==input) ++ score = 100; ++ else if (s->name().lower().find(input)==0) ++ score = 50; ++ else if (s->genericName().lower().find(input)==0) ++ score = 50; ++ else if (s->name().lower().find(input)!=-1) ++ score = 10; ++ else if (s->genericName().lower().find(input)!=-1) ++ score = 10; ++ ++ if (s->exec().find(' ')==-1) ++ score+=1; ++ ++ if (s->substituteUid()) ++ score-=1; ++ ++ if (s->noDisplay()) ++ score -= 100; ++ else if (s->terminal()) ++ score -= 50; ++ else ++ score += kMin(10, s->initialPreference()); ++ ++ QString firstLine, secondLine; ++ if ((KickerSettings::DescriptionAndName || KickerSettings::menuEntryFormat() == KickerSettings::DescriptionOnly) && !s->genericName().isEmpty()) { ++ firstLine = s->genericName(); ++ secondLine = s->name(); ++ } ++ else { ++ firstLine = s->name(); ++ secondLine = s->genericName(); ++ } ++ ++ HitMenuItem *hit_item = new HitMenuItem (firstLine, secondLine, ++ s->desktopEntryPath(), QString::null, 0, APPS, s->icon(), score); ++ if (hit_item == NULL) ++ continue; ++ ++ hit_item->service = s; ++ insertSearchResult(hit_item); ++ ++ QString exe = s->exec(); ++ int pos = exe.find(' '); ++ if (pos>0) ++ exe=exe.left(pos); ++ m_programsInMenu+=KGlobal::dirs()->findExe(exe); ++ } ++ } ++ } ++ } ++} ++ ++void KMenu::searchBookmarks(KBookmarkGroup group) ++{ ++ KBookmark bookmark = group.first(); ++ while(!bookmark.isNull()) { ++ if (bookmark.isGroup()) { ++ searchBookmarks(bookmark.toGroup()); ++ } else if (!bookmark.isSeparator() && !bookmark.isNull()) { ++ if (!current_query.matches(bookmark.fullText()+' '+bookmark.url().url()) || !anotherHitMenuItemAllowed(BOOKMARKS)) { ++ bookmark = group.next(bookmark); ++ continue; ++ } ++ ++ HitMenuItem *hit_item = new HitMenuItem (bookmark.fullText(), bookmark.fullText(), ++ bookmark.url(), QString::null, 0, BOOKMARKS, bookmark.icon()); ++ ++ insertSearchResult(hit_item); ++ } ++ bookmark = group.next(bookmark); ++ } ++} ++ ++void KMenu::initSearch() ++{ ++ if (!m_addressBook && KickerSettings::kickoffSearchAddressBook()) ++ m_addressBook = KABC::StdAddressBook::self( false ); ++ ++ if (!bookmarkManager) ++ bookmarkManager = KBookmarkManager::userBookmarksManager(); ++ ++ if (!m_search_plugin) { ++ m_search_plugin_interface = new QObject( this, "m_search_plugin_interface" ); ++ new MyKickoffSearchInterface( this, m_search_plugin_interface, "kickoffsearch interface" ); ++ KTrader::OfferList offers = KTrader::self()->query("KickoffSearch/Plugin"); ++ ++ KService::Ptr service = *offers.begin(); ++ if (service) { ++ int errCode = 0; ++ m_search_plugin = KParts::ComponentFactory::createInstanceFromService ++ ( service, m_search_plugin_interface, 0, QStringList(), &errCode); ++ } ++ } ++} ++ ++void KMenu::searchAddressbook() ++{ ++ if (!KickerSettings::kickoffSearchAddressBook()) ++ return; ++ ++ if (!m_addressBook) ++ m_addressBook = KABC::StdAddressBook::self( false ); ++ ++ KABC::AddressBook::ConstIterator it = m_addressBook->begin(); ++ while (it!=m_addressBook->end()) { ++ if (!current_query.matches((*it).assembledName()+' '+(*it).fullEmail())) { ++ it++; ++ continue; ++ } ++ ++ HitMenuItem *hit_item; ++ QString realName = (*it).realName(); ++ if (realName.isEmpty()) ++ realName=(*it).preferredEmail(); ++ ++ if (!(*it).preferredEmail().isEmpty()) { ++ if (!anotherHitMenuItemAllowed(ACTIONS)) { ++ it++; ++ continue; ++ } ++ ++ hit_item = new HitMenuItem (i18n("Send Email to %1").arg(realName), (*it).preferredEmail(), ++ "mailto:"+(*it).preferredEmail(), QString::null, 0, ACTIONS, "mail_new"); ++ ++ insertSearchResult(hit_item); ++ } ++ ++ if (!anotherHitMenuItemAllowed(ACTIONS)) { ++ it++; ++ continue; ++ } ++ ++ hit_item = new HitMenuItem (i18n("Open Addressbook at %1").arg(realName), (*it).preferredEmail(), ++ "kaddressbook:/"+(*it).uid(), QString::null, 0, ACTIONS, "kaddressbook"); ++ ++ insertSearchResult(hit_item); ++ ++ it++; ++ } ++} ++ ++QString KMenu::insertBreaks(const QString& text, QFontMetrics fm, int width, QString leadInsert) ++{ ++ QString result, line; ++ QStringList words = QStringList::split(' ', text); ++ ++ for(QStringList::Iterator it = words.begin(); it != words.end(); ++it) { ++ if (fm.width(line+' '+*it) >= width) { ++ if (!result.isEmpty()) ++ result = result + '\n'; ++ result = result + line; ++ line = leadInsert + *it; ++ } ++ else ++ line = line + ' ' + *it; ++ } ++ if (!result.isEmpty()) ++ result = result + '\n'; ++ ++ return result + line; ++} ++ ++void KMenu::clearSearchResults(bool showHelp) ++{ ++ m_searchResultsWidget->clear(); ++ m_searchResultsWidget->setFocusPolicy(showHelp ? QWidget::NoFocus : QWidget::StrongFocus); ++ setTabOrder(m_kcommand, m_searchResultsWidget); ++ ++ if (showHelp) { ++ const int width = m_searchResultsWidget->width()-10; ++ QFontMetrics fm = m_searchResultsWidget->fontMetrics(); ++ ++ QListViewItem* item; ++ item = new QListViewItem( m_searchResultsWidget, insertBreaks(i18n("- Add ext:type to specify a file extension."), fm, width, " ") ); ++ item->setSelectable(false); ++ item->setMultiLinesEnabled(true); ++ item = new QListViewItem( m_searchResultsWidget, insertBreaks(i18n("- When searching for a phrase, add quotes."), fm, width, " " ) ); ++ item->setSelectable(false); ++ item->setMultiLinesEnabled(true); ++ item = new QListViewItem( m_searchResultsWidget, insertBreaks(i18n("- To exclude search terms, use the minus symbol in front."), fm, width, " " ) ); ++ item->setSelectable(false); ++ item->setMultiLinesEnabled(true); ++ item = new QListViewItem( m_searchResultsWidget, insertBreaks(i18n("- To search for optional terms, use OR."), fm, width, " ") ); ++ item->setSelectable(false); ++ item->setMultiLinesEnabled(true); ++ item = new QListViewItem( m_searchResultsWidget, insertBreaks(i18n("- You can use upper and lower case."), fm, width, " ") ); ++ item->setSelectable(false); ++ item->setMultiLinesEnabled(true); ++ item = new QListViewItem( m_searchResultsWidget, i18n("Search Quick Tips")); ++ item->setSelectable(false); ++ } ++ ++ for (int i=0; ilineEdit()->text ().simplifyWhiteSpace (); ++ if (! return_pressed && dontQueryNow (query_str)) { ++ if (query_str.length()<3) ++ clearSearchResults(); ++ else { ++ if (m_searchResultsWidget->firstChild() && m_searchResultsWidget->firstChild()->isSelectable()) { ++ m_searchResultsWidget->setSelected(m_searchResultsWidget->firstChild(),true); ++ } ++ else if (m_searchResultsWidget->childCount()>1) { ++ m_searchResultsWidget->setSelected(m_searchResultsWidget->firstChild()->itemBelow(),true); ++ } ++ } ++ return; ++ } ++ kdDebug() << "Querying for [" << query_str << "]" << endl; ++ current_query.set(query_str); ++ ++ // reset search results ++ HitMenuItem *hit_item; ++ while ((hit_item = m_current_menu_items.take ()) != NULL) { ++ //kndDebug () << " (" << hit_item->id << "," << hit_item->category << ")" << endl; ++ delete hit_item; ++ } ++ ++ clearSearchResults(false); ++ m_searchPixmap->setMovie(QMovie(locate( "data", "kicker/pics/search-running.mng" ))); ++ ++ resetOverflowCategory(); ++ ++ initCategoryTitlesUpdate(); ++ ++ // calculate ? ++ QString cmd = query_str.stripWhiteSpace(); ++ if (!cmd.isEmpty() && (cmd[0].isNumber() || (cmd[0] == '(')) && ++ (QRegExp("[a-zA-Z\\]\\[]").search(cmd) == -1)) ++ { ++ QString result = calculate(cmd); ++ if (!result.isEmpty()) ++ { ++ categorised_hit_total[ACTIONS] ++; ++ HitMenuItem *hit_item = new HitMenuItem (i18n("%1 = %2").arg(query_str, result), QString::null, ++ "kcalc", QString::null, (++max_category_id [ACTIONS]), ACTIONS, "kcalc"); ++ int index = getHitMenuItemPosition (hit_item); ++ m_searchResultsWidget->insertItem(iconForHitMenuItem(hit_item), hit_item->display_name, ++ hit_item->display_info, KGlobal::dirs()->findExe("kcalc"), max_category_id [ACTIONS], index); ++ } ++ } ++ ++ // detect email address ++ if (emailRegExp.exactMatch(query_str)) { ++ categorised_hit_total[ACTIONS] ++; ++ HitMenuItem *hit_item = new HitMenuItem (i18n("Send Email to %1").arg(query_str), QString::null, ++ "mailto:"+query_str, QString::null, (++max_category_id [ACTIONS]), ACTIONS, "mail_new"); ++ int index = getHitMenuItemPosition (hit_item); ++ m_searchResultsWidget->insertItem(iconForHitMenuItem(hit_item), hit_item->display_name, hit_item->display_info, "mailto:"+query_str, max_category_id [ACTIONS], index); ++ } ++ ++ // quick own application search ++ m_programsInMenu.clear(); ++ searchProgramList(QString::null); ++ ++ KURIFilterData filterData; ++ filterData.setData(query_str); ++ filterData.setCheckForExecutables(true); ++ ++ if (KURIFilter::self()->filterURI(filterData)) { ++ ++ QString description; ++ QString exe; ++ ++ switch (filterData.uriType()) { ++ case KURIFilterData::LOCAL_FILE: ++ description = i18n("Open Local File: %1").arg(filterData.uri().url()); ++ break; ++ case KURIFilterData::LOCAL_DIR: ++ description = i18n("Open Local Dir: %1").arg(filterData.uri().url()); ++ break; ++ case KURIFilterData::NET_PROTOCOL: ++ description = i18n("Open Remote Location: %1").arg(filterData.uri().url()); ++ break; ++ case KURIFilterData::SHELL: ++ case KURIFilterData::EXECUTABLE: ++ { ++ exe = KGlobal::dirs()->findExe(filterData.uri().url()); ++#ifdef KDELIBS_SUSE ++ bool gimp_hack = false; ++ if (exe.endsWith("/bin/gimp")) { ++ QStringList::ConstIterator it = m_programsInMenu.begin(); ++ for (; it != m_programsInMenu.end(); ++it) ++ if ((*it).find("bin/gimp-remote-")!=-1) { ++ gimp_hack = true; ++ break; ++ } ++ } ++#endif ++ if (m_programsInMenu.find(exe)!=m_programsInMenu.end() ++#ifdef KDELIBS_SUSE ++ || gimp_hack ++#endif ++ ) ++ exe = QString::null; ++ else if (kapp->authorize("shell_access")) ++ { ++ if( filterData.hasArgsAndOptions() ) ++ exe += filterData.argsAndOptions(); ++ ++ description = i18n("Run '%1'").arg(exe); ++ exe = "kicker:/runcommand"; ++ } ++ } ++ default: ++ break; ++ } ++ ++ if (!description.isEmpty()) { ++ categorised_hit_total[ACTIONS] ++; ++ HitMenuItem *hit_item = new HitMenuItem (description, QString::null, ++ exe.isEmpty() ? filterData.uri() : exe, QString::null, ++ (++max_category_id [ACTIONS]), ACTIONS, exe.isEmpty() ? "fileopen": "run"); ++ int index = getHitMenuItemPosition (hit_item); ++ m_searchResultsWidget->insertItem(iconForHitMenuItem(hit_item), hit_item->display_name, ++ hit_item->display_info, ++ exe.isEmpty() ? filterData.uri().url() : exe, max_category_id [ACTIONS], index); ++ } ++ } ++ ++ // search Konqueror bookmarks; ++ if (!bookmarkManager) ++ bookmarkManager = KBookmarkManager::userBookmarksManager(); ++ ++ if (query_str.length()>=3) ++ searchBookmarks(bookmarkManager->root()); ++ ++ // search KDE addressbook ++ if (query_str.length()>=3) ++ searchAddressbook(); ++ ++ updateCategoryTitles(); ++ ++ if (m_searchResultsWidget->childCount()>1) ++ m_searchResultsWidget->setSelected(m_searchResultsWidget->firstChild()->itemBelow(),true); ++ m_searchActions->clearSelection(); ++ ++ if (!m_search_plugin) ++ initSearch(); ++ ++ // start search plugin only with at least 3 characters ++ if (query_str.length()<3 || !m_search_plugin || (m_search_plugin && !m_search_plugin->daemonRunning()) ) { ++ m_searchPixmap->setPixmap( BarIcon( "find", 32 ) ); ++ fillOverflowCategory(); ++ if (query_str.length()>2 && m_current_menu_items.isEmpty()) ++ reportError (i18n("No matches found")); ++ return; ++ } ++ ++ if (m_search_plugin) { ++ m_search_plugin->query(current_query.get(), KickerSettings::DescriptionAndName || KickerSettings::menuEntryFormat() == KickerSettings::DescriptionOnly); ++ } ++} ++ ++bool KMenu::anotherHitMenuItemAllowed(int cat, bool count) ++{ ++ // update number of hits in this category ++ if (count) ++ categorised_hit_total [cat] ++; ++ ++ // if number of hits in this category is more than allowed, dont process this ++ if (max_category_id [cat] - base_category_id [cat] < max_items(cat)) ++ return true; ++ ++ if (m_overflowCategoryState==None || (m_overflowCategoryState==Filling && m_overflowCategory==cat && ++ max_category_id [cat] + m_overflowList.count() - base_category_id [cat] < max_items(cat) * 2.0)) ++ return true; ++ ++ return false; ++} ++ ++void KMenu::addHitMenuItem(HitMenuItem* item) ++{ ++ if (checkUriInMenu(item->uri)) ++ return; ++ ++ // if number of hits in this category is more than allowed, dont process this ++ if (!anotherHitMenuItemAllowed(item->category, false)) ++ return; ++ ++ insertSearchResult(item); ++} ++ ++void KMenu::insertSearchResult(HitMenuItem* item) ++{ ++ if (m_overflowCategoryState==None) { ++ m_overflowCategoryState = Filling; ++ m_overflowCategory = item->category; ++ } ++ else if (m_overflowCategoryState==Filling && m_overflowCategory!=item->category) ++ m_overflowCategoryState = NotNeeded; ++ ++ if (max_category_id [item->category] - base_category_id [item->category] < max_items(item->category)) { ++ max_category_id [item->category]++; ++ item->id=max_category_id [item->category]; ++ ++ int index = getHitMenuItemPosition (item); ++ ++ kdDebug () << "Adding " << item->uri ++ << "(" << item->mimetype << ") with id=" ++ << max_category_id [item->category] << " at " << index << endl; ++ ++ KMenuItem *hit_item = m_searchResultsWidget->insertItem(iconForHitMenuItem(item), item->display_name, item->display_info, item->uri.url(), max_category_id [item->category], index); ++ hit_item->setService(item->service); ++ ++ kdDebug () << "Done inserting ... " << endl; ++ } ++ else if (m_overflowCategoryState==Filling && m_overflowCategory==item->category && ++ max_category_id [item->category] - base_category_id [item->category] < max_items(item->category) * 2) ++ m_overflowList.append(item); ++} ++ ++void KMenu::searchOver() ++{ ++ m_searchPixmap->setPixmap( BarIcon( "find", 32 ) ); ++ fillOverflowCategory(); ++ if (m_current_menu_items.isEmpty()) { ++ kdDebug() << "No matches found" << endl; ++ reportError (i18n("No matches found")); ++ } ++ if (!m_searchResultsWidget->selectedItem() && !m_searchActions->selectedItem() && m_searchResultsWidget->childCount()>1) { ++ m_searchResultsWidget->setSelected(m_searchResultsWidget->firstChild()->itemBelow(),true); ++ } ++} ++ ++void KMenu::initCategoryTitlesUpdate() ++{ ++ // Need to know if each category was updated with hits or had the first hit ++ // That way we know if we need to changetitle or inserttitle ++ already_added = new bool [num_categories]; ++ for (int i=0; iinsertSeparator(base_category_id [i], title, index); ++ kdDebug () << "Inserting heading with id=" << base_category_id[i] << " for " << categories[i] << " at " << index << endl; ++ } else { ++ // something was already displayed in this category ++ // update the title to reflect the total ++ sep = dynamic_cast( m_searchResultsWidget->findItem(base_category_id [i]) ); ++ if ( !sep ) ++ continue; ++ kdDebug () << "Changing heading of id=" << base_category_id[i] << " for " << categories[i] << endl; ++ } ++ ++ int max = max_items(i); ++ if (m_overflowCategoryState == Filling && m_overflowCategory == i) ++ max *= 2; ++ ++ if ( categorised_hit_total [i] > max ) { ++ if (m_kerryInstalled) ++ sep->setLink( i18n( "top %1 of %2" ).arg( max ).arg( categorised_hit_total [i] ), QString( "kerry:/%1" ).arg( i ) ); ++ else ++ sep->setText( 0, i18n( "%1 (top %2 of %3)" ).arg( i18n(categories [i].utf8()) ).arg( max ).arg( categorised_hit_total [i] ) ); ++ } ++ else { ++ sep->setLink( QString::null ); ++ } ++ } ++ delete[] already_added; ++ already_added = 0; ++} ++ ++QString KMenu::iconForHitMenuItem(HitMenuItem *hit_item) ++{ ++ // get the icon ++ if (!hit_item->icon.isEmpty()) ++ return hit_item->icon; ++ ++ if (hit_item->category == WEBHIST) { ++ QString favicon = KMimeType::favIconForURL (hit_item->uri); ++ if (! favicon.isEmpty ()) ++ return favicon; ++ } ++ ++ if (mimetype_iconstore.contains (hit_item->mimetype)) ++ return (mimetype_iconstore [hit_item->mimetype]); ++ else { ++ KMimeType::Ptr mimetype_ptr = KMimeType::mimeType (hit_item->mimetype); ++ QString mimetype_icon = mimetype_ptr->icon(QString::null, FALSE); ++ mimetype_iconstore [hit_item->mimetype] = mimetype_icon; ++ return mimetype_icon; ++ } ++ return QString::null; ++} ++ ++void KMenu::slotStartService(KService::Ptr ptr) ++{ ++ accept(); ++ ++ addToHistory(); ++ KApplication::startServiceByDesktopPath(ptr->desktopEntryPath(), ++ QStringList(), 0, 0, 0, "", true); ++ updateRecentlyUsedApps(ptr); ++} ++ ++ ++void KMenu::slotStartURL(const QString& u) ++{ ++ if ( u == "kicker:/goup/" ) { ++ // only m_exitView is connected to this slot, not m_browserView ++ slotGoExitMainMenu(); ++ return; ++ } ++ ++ if ( u == "kicker:/restart/" || u=="kicker:/switchuser/") { ++ slotGoExitSubMenu(u); ++ return; ++ } ++ ++ accept(); ++ ++ if ( u == "kicker:/lock" ) { ++ slotLock(); ++ } ++ else if ( u == "kicker:/logout" ) { ++#ifdef KDELIBS_SUSE ++ QByteArray params; ++ QDataStream stream(params, IO_WriteOnly); ++ stream << 0 << -1 << ""; ++ ++ kapp->dcopClient()->send("ksmserver", "default", "logoutTimed(int,int,QString)", params); ++#else ++ DCOPRef mediamanager("ksmserver", "ksmserver"); ++ DCOPReply reply = mediamanager.call( "logoutTimed", (int)KApplication::ShutdownTypeNone, (int)KApplication::ShutdownModeDefault ); ++ if (!reply.isValid() && KMessageBox::Continue==KMessageBox::warningContinueCancel(this, i18n("Do you really want to end the session?"), ++ i18n("Logout Confirmation"), KGuiItem(i18n("Logout"),"undo"))) ++ kapp->requestShutDown( KApplication::ShutdownConfirmNo, ++ KApplication::ShutdownTypeNone, ++ KApplication::ShutdownModeDefault ); ++ ++#endif ++ } ++ else if ( u == "kicker:/runcommand" ) ++ { ++ runCommand(); ++ } ++ else if ( u == "kicker:/shutdown" ) { ++#ifdef KDELIBS_SUSE ++ QByteArray params; ++ QDataStream stream(params, IO_WriteOnly); ++ stream << 2 << -1 << ""; ++ ++ kapp->dcopClient()->send("ksmserver", "default", "logoutTimed(int,int,QString)", params); ++#else ++ if (KMessageBox::Continue==KMessageBox::warningContinueCancel(this, i18n("Do you really want to turn off the computer?"), ++ i18n("Shutdown Confirmation"), KGuiItem(i18n("Shutdown"),"exit"))) ++ kapp->requestShutDown( KApplication::ShutdownConfirmNo, ++ KApplication::ShutdownTypeHalt, ++ KApplication::ShutdownModeDefault ); ++#endif ++ } ++ else if ( u == "kicker:/restart" ) { ++#ifdef KDELIBS_SUSE ++ QByteArray params; ++ QDataStream stream(params, IO_WriteOnly); ++ stream << 1 << -1 << QString::null; ++ ++ kapp->dcopClient()->send("ksmserver", "default", "logoutTimed(int,int,QString)", params); ++#else ++ if (KMessageBox::Continue==KMessageBox::warningContinueCancel(this, i18n("Do you really want to reset the computer and boot (another operating system)?"), ++ i18n("Restart Confirmation"), KGuiItem(i18n("Restart"),"reload"))) ++ kapp->requestShutDown( KApplication::ShutdownConfirmNo, ++ KApplication::ShutdownTypeReboot, ++ KApplication::ShutdownModeDefault ); ++#endif ++ } ++#ifdef KDELIBS_SUSE ++ else if ( u == "kicker:/suspend_disk" ) { ++ slotSuspend( 1 ); ++ } ++ else if ( u == "kicker:/suspend_ram" ) { ++ slotSuspend( 2 ); ++ } ++ else if ( u == "kicker:/standby" ) { ++ slotSuspend( 3 ); ++ } ++#endif ++ else if ( u == "kicker:/savesession" ) { ++ QByteArray data; ++ kapp->dcopClient()->send( "ksmserver", "default", ++ "saveCurrentSession()", data ); ++ } ++ else if ( u == "kicker:/switchuser" ) { ++ DM().startReserve(); ++ } ++ else if ( u == "kicker:/switchuserafterlock" ) { ++ slotLock(); ++ DM().startReserve(); ++ } ++ else if ( u.startsWith("kicker:/switchuser_") ) ++ DM().lockSwitchVT( u.mid(19).toInt() ); ++ else if ( u.startsWith("kicker:/restart_") ) { ++#ifdef KDELIBS_SUSE ++ QStringList rebootOptions; ++ int def, cur; ++ DM().bootOptions( rebootOptions, def, cur ); ++ ++ QByteArray params; ++ QDataStream stream(params, IO_WriteOnly); ++ stream << 1 << -1 << rebootOptions[u.mid(16).toInt()]; ++ ++ kapp->dcopClient()->send("ksmserver", "default", "logoutTimed(int,int,QString)", params); ++#else ++ KMessageBox::error( this, QString( "Sorry, not implemented." )); ++#endif ++ } ++#warning restart entry not supported ++#if 0 ++ else if ( u == "kicker:/restart_windows" ) { ++ if (KMessageBox::Continue==KMessageBox::warningContinueCancel(this, i18n("Do you really want to reset the computer and boot Microsoft Windows"), i18n("Start Windows Confirmation"), KGuiItem(i18n("Start Windows"),"reload"))) ++ KMessageBox::error( this, QString( "kicker:/restart_windows is not yet implemented " ) ); ++ } ++#endif ++ else if ( u.startsWith("kerry:/")) ++ { ++ QByteArray data; ++ QDataStream arg(data, IO_WriteOnly); ++ arg << m_kcommand->currentText() << kerry_categories[u.mid(7).toInt()]; ++ if (ensureServiceRunning("kerry")) ++ kapp->dcopClient()->send("kerry","search","search(QString,QString)", data); ++ } ++ else { ++ addToHistory(); ++ if (u.startsWith("kaddressbook:/")) { ++ KProcess *proc = new KProcess; ++ *proc << "kaddressbook" << "--uid" << u.mid(14); ++ proc->start(); ++ accept(); ++ return; ++ } else if (u.startsWith("note:/")) { ++ KProcess *proc = new KProcess; ++ *proc << "tomboy"; ++ *proc << "--open-note" << u; ++ if (!proc->start()) ++ KMessageBox::error(0,i18n("Could not start Tomboy.")); ++ return; ++ } ++ else if (u.startsWith("knotes:/") ) { ++ if (ensureServiceRunning("knotes")) { ++ QByteArray data; ++ QDataStream arg(data, IO_WriteOnly); ++ arg << u.mid(9,22); ++ ++ kapp->dcopClient()->send("knotes","KNotesIface","showNote(QString)", data); ++ } ++ return; ++ } ++ ++ kapp->propagateSessionManager(); ++ (void) new KRun( u, parentWidget()); ++ } ++} ++ ++void KMenu::slotContextMenuRequested( QListViewItem * item, const QPoint & pos, int /*col*/ ) ++{ ++ const QObject* source = sender(); ++ ++ if (!item) ++ return; ++ ++ KMenuItem* kitem = dynamic_cast(item); ++ if (!kitem) ++ return; ++ ++ KFileItemList _items; ++ _items.setAutoDelete(true); ++ ++ if (dynamic_cast(item)) ++ return; ++ ++ m_popupService = kitem->service(); ++ m_popupPath.menuPath = kitem->menuPath(); ++ if (!m_popupService) { ++ m_popupPath.title = kitem->title(); ++ m_popupPath.description = kitem->description(); ++ m_popupPath.path = kitem->path(); ++ m_popupPath.icon = kitem->icon(); ++ ++ if (m_popupPath.path.startsWith(locateLocal("data", QString::fromLatin1("RecentDocuments/")))) { ++ KDesktopFile df(m_popupPath.path,true); ++ m_popupPath.path=df.readURL(); ++ } ++ } ++ ++ m_popupMenu = new KPopupMenu(this); ++ connect(m_popupMenu, SIGNAL(activated(int)), SLOT(slotContextMenu(int))); ++ bool hasEntries = false; ++ ++ m_popupMenu->insertTitle(SmallIcon(kitem->icon()),kitem->title()); ++ ++ if (source==m_favoriteView) ++ { ++ hasEntries = true; ++ m_popupMenu->insertItem(SmallIconSet("remove"), ++ i18n("Remove From Favorites"), RemoveFromFavorites); ++ } ++ else if (!kitem->hasChildren() && !m_popupPath.path.startsWith("system:/") && ++ !m_popupPath.path.startsWith("kicker:/switchuser_") && !m_popupPath.path.startsWith("kicker:/restart_")) ++ { ++ hasEntries = true; ++ int num = m_popupMenu->insertItem(SmallIconSet("bookmark_add"), ++ i18n("Add to Favorites"), AddToFavorites); ++ ++ QStringList favs = KickerSettings::favorites(); ++ if (m_popupService && favs.find(m_popupService->storageId())!=favs.end()) ++ m_popupMenu->setItemEnabled(num, false); ++ else { ++ QStringList::Iterator it; ++ for (it = favs.begin(); it != favs.end(); ++it) ++ { ++ if ((*it)[0]=='/') ++ { ++ KDesktopFile df((*it),true); ++ if (df.readURL().replace("file://",QString::null)==m_popupPath.path) ++ break; ++ } ++ } ++ if (it!=favs.end()) ++ m_popupMenu->setItemEnabled(num, false); ++ } ++ } ++ ++ if (source!=m_exitView) { ++ if (m_popupService || (!m_popupPath.path.startsWith("kicker:/") && !m_popupPath.path.startsWith("system:/") && !m_popupPath.path.startsWith("kaddressbook:/"))) { ++ if (hasEntries) ++ m_popupMenu->insertSeparator(); ++ ++ if (kapp->authorize("editable_desktop_icons") ) ++ { ++ hasEntries = true; ++ if (m_popupPath.menuPath.endsWith("/")) ++ m_popupMenu->insertItem(SmallIconSet("desktop"), ++ i18n("Add Menu to Desktop"), AddMenuToDesktop); ++ else ++ m_popupMenu->insertItem(SmallIconSet("desktop"), ++ i18n("Add Item to Desktop"), AddItemToDesktop); ++ } ++ if (kapp->authorizeKAction("kicker_rmb") && !Kicker::the()->isImmutable()) ++ { ++ hasEntries = true; ++ if (m_popupPath.menuPath.endsWith("/")) ++ m_popupMenu->insertItem(SmallIconSet("kicker"), ++ i18n("Add Menu to Main Panel"), AddMenuToPanel); ++ else ++ m_popupMenu->insertItem(SmallIconSet("kicker"), ++ i18n("Add Item to Main Panel"), AddItemToPanel); ++ } ++ if (kapp->authorizeKAction("menuedit") && !kitem->menuPath().isEmpty()) ++ { ++ hasEntries = true; ++ if (kitem->menuPath().endsWith("/")) ++ m_popupMenu->insertItem(SmallIconSet("kmenuedit"), i18n("Edit Menu"), EditMenu); ++ else ++ m_popupMenu->insertItem(SmallIconSet("kmenuedit"), i18n("Edit Item"), EditItem); ++ } ++ if (kapp->authorize("run_command") && (m_popupService || (!m_popupPath.menuPath.isEmpty() && !m_popupPath.menuPath.endsWith("/")))) ++ { ++ hasEntries = true; ++ m_popupMenu->insertItem(SmallIconSet("run"), ++ i18n("Put Into Run Dialog"), PutIntoRunDialog); ++ } ++ } ++ if (source==m_searchResultsWidget || ((source==m_favoriteView || source==m_recentlyView || source == m_systemView) && !m_popupService && !m_popupPath.path.startsWith("kicker:/")) ) { ++ QString uri; ++ if (m_popupService) ++ uri = locate("apps", m_popupService->desktopEntryPath()); ++ else ++ uri = m_popupPath.path; ++ ++ QString mimetype = QString::null; ++ if ( m_popupPath.path.startsWith( "system:/media/" ) ) ++ mimetype = media_mimetypes[m_popupPath.path]; ++ ++ KFileItem* item = new KFileItem(uri, mimetype, KFileItem::Unknown); ++ _items.append( item ); ++ ++ const KURL kurl(uri); ++ KActionCollection act(this); ++ ++ KonqPopupMenu * konqPopupMenu = new KonqPopupMenu( KonqBookmarkManager::self(), _items, ++ kurl, act, (KNewMenu*)NULL, this, ++ item->isLocalFile() ? KonqPopupMenu::ShowProperties : KonqPopupMenu::NoFlags, ++ KParts::BrowserExtension::DefaultPopupItems ); ++ ++ if (konqPopupMenu->count()) { ++ if (hasEntries) { ++ m_popupMenu->insertSeparator(); ++ m_popupMenu->insertItem(SmallIconSet("add"),i18n("Advanced"), konqPopupMenu); ++ } ++ else { ++ delete m_popupMenu; ++ m_popupMenu = (KPopupMenu*)konqPopupMenu; ++ m_popupMenu->insertTitle(SmallIcon(kitem->icon()),kitem->title(),-1,0); ++ } ++ hasEntries = true; ++ } ++ } ++ } ++ ++ if (source==m_recentlyView) { ++ m_popupMenu->insertSeparator(); ++ if (m_popupService) ++ m_popupMenu->insertItem(SmallIconSet("history_clear"), ++ i18n("Clear Recently Used Applications"), ClearRecentlyUsedApps); ++ else ++ m_popupMenu->insertItem(SmallIconSet("history_clear"), ++ i18n("Clear Recently Used Documents"), ClearRecentlyUsedDocs); ++ } ++ ++ if (hasEntries) { ++ m_isShowing = true; ++ m_popupMenu->exec(pos); ++ m_isShowing = false; ++ } ++ ++ delete m_popupMenu; ++ m_popupMenu = 0; ++} ++ ++void KMenu::slotContextMenu(int selected) ++{ ++ KServiceGroup::Ptr g; ++ QByteArray ba; ++ QDataStream ds(ba, IO_WriteOnly); ++ ++ KURL src,dest; ++ KIO::CopyJob *job; ++ ++ KProcess *proc; ++ ++ QStringList favs = KickerSettings::favorites(); ++ ++ switch (selected) { ++ case AddItemToDesktop: ++ accept(); ++ if (m_popupService) { ++ src.setPath( KGlobal::dirs()->findResource( "apps", m_popupService->desktopEntryPath() ) ); ++ dest.setPath( KGlobalSettings::desktopPath() ); ++ dest.setFileName( src.fileName() ); ++ ++ job = KIO::copyAs( src, dest ); ++ job->setDefaultPermissions( true ); ++ } ++ else { ++ KDesktopFile* df = new KDesktopFile( newDesktopFile(KURL(m_popupPath.path), KGlobalSettings::desktopPath() ) ); ++ df->writeEntry("GenericName", m_popupPath.description); ++ df->writeEntry( "Icon", m_popupPath.icon ); ++ df->writePathEntry( "URL", m_popupPath.path ); ++ df->writeEntry( "Name", m_popupPath.title ); ++ df->writeEntry( "Type", "Link" ); ++ df->sync(); ++ delete df; ++ } ++ accept(); ++ break; ++ ++ case AddItemToPanel: ++ accept(); ++ if (m_popupService) ++ kapp->dcopClient()->send("kicker", "Panel", "addServiceButton(QString)", m_popupService->desktopEntryPath()); ++ else ++#warning FIXME special RecentDocuments/foo.desktop handling ++ kapp->dcopClient()->send("kicker", "Panel", "addURLButton(QString)", m_popupPath.path); ++ accept(); ++ break; ++ ++ case EditItem: ++ case EditMenu: ++ accept(); ++ proc = new KProcess(this); ++ *proc << KStandardDirs::findExe(QString::fromLatin1("kmenuedit")); ++ *proc << "/"+m_popupPath.menuPath.section('/',-200,-2) << m_popupPath.menuPath.section('/', -1); ++ proc->start(); ++ break; ++ ++ case PutIntoRunDialog: ++ accept(); ++ if (m_popupService) ++ kapp->dcopClient()->send("kdesktop", "default", "popupExecuteCommand(QString)", m_popupService->exec()); ++ else ++#warning FIXME special RecentDocuments/foo.desktop handling ++ kapp->dcopClient()->send("kdesktop", "default", "popupExecuteCommand(QString)", m_popupPath.path); ++ accept(); ++ break; ++ ++ case AddMenuToDesktop: { ++ accept(); ++ KDesktopFile *df = new KDesktopFile( newDesktopFile(KURL("programs:/"+m_popupPath.menuPath),KGlobalSettings::desktopPath())); ++ df->writeEntry( "Icon", m_popupPath.icon ); ++ df->writePathEntry( "URL", "programs:/"+m_popupPath.menuPath ); ++ df->writeEntry( "Name", m_popupPath.title ); ++ df->writeEntry( "Type", "Link" ); ++ df->sync(); ++ delete df; ++ ++ break; ++ } ++ case AddMenuToPanel: ++ accept(); ++ ds << "foo" << m_popupPath.menuPath; ++ kapp->dcopClient()->send("kicker", "Panel", "addServiceMenuButton(QString,QString)", ba); ++ break; ++ ++ case AddToFavorites: ++ if (m_popupService) { ++ if (favs.find(m_popupService->storageId())==favs.end()) { ++ KService::Ptr p = KService::serviceByStorageId(m_popupService->storageId()); ++ m_favoriteView->insertMenuItem(p, serviceMenuEndId()+favs.count()+1); ++ favs+=m_popupService->storageId(); ++ } ++ } ++ else { ++ QStringList::Iterator it; ++ for (it = favs.begin(); it != favs.end(); ++it) { ++ if ((*it)[0]=='/') { ++ KDesktopFile df((*it),true); ++ if (df.readURL().replace("file://",QString::null)==m_popupPath.path) ++ break; ++ } ++ } ++ if (it==favs.end()) { ++ QString file = KickerLib::newDesktopFile(m_popupPath.path); ++ KDesktopFile df(file); ++ df.writeEntry("Encoding", "UTF-8"); ++ df.writeEntry("Type","Link"); ++ df.writeEntry("Name", m_popupPath.title); ++ df.writeEntry("GenericName", m_popupPath.description); ++ df.writeEntry("Icon", m_popupPath.icon); ++ df.writeEntry("URL", m_popupPath.path); ++ ++ m_favoriteView->insertItem(m_popupPath.icon, m_popupPath.title, m_popupPath.description, ++ m_popupPath.path, serviceMenuEndId()+favs.count()+1, -1); ++ ++ favs+=file; ++ } ++ } ++ KickerSettings::setFavorites(favs); ++ KickerSettings::writeConfig(); ++ m_browserDirty=true; ++ m_stacker->raiseWidget(FavoriteTab); ++ break; ++ ++ case RemoveFromFavorites: ++ if (m_popupService) { ++ favs.erase(favs.find(m_popupService->storageId())); ++ ++ for (QListViewItemIterator it(m_favoriteView); it.current(); ++it) { ++ KMenuItem* kitem = static_cast(it.current()); ++ if (kitem->service() && kitem->service()->storageId() == m_popupService->storageId()) { ++ delete it.current(); ++ break; ++ } ++ } ++ } ++ else { ++ for (QStringList::Iterator it = favs.begin(); it != favs.end(); ++it) { ++ if ((*it)[0]=='/') { ++ KDesktopFile df((*it),true); ++ if (df.readURL().replace("file://",QString::null)==m_popupPath.path) { ++ QFile::remove((*it)); ++ favs.erase(it); ++ break; ++ } ++ } ++ } ++ for (QListViewItemIterator it(m_favoriteView); it.current(); ++it) { ++ KMenuItem* kitem = static_cast(it.current()); ++ if (!kitem->service() && kitem->path() == m_popupPath.path) { ++ delete it.current(); ++ break; ++ } ++ } ++ } ++ m_favoriteView->slotMoveContent(); ++ KickerSettings::setFavorites(favs); ++ KickerSettings::writeConfig(); ++ m_browserDirty=true; ++ m_stacker->raiseWidget(FavoriteTab); ++ break; ++ ++ case ClearRecentlyUsedApps: ++ clearRecentAppsItems(); ++ break; ++ ++ case ClearRecentlyUsedDocs: ++ clearRecentDocsItems(); ++ break; ++ ++ default: ++ break; ++ } ++} ++ ++void KMenu::resizeEvent ( QResizeEvent * e ) ++{ ++ //kdDebug() << "resizeEvent " << size() << endl; ++ KMenuBase::resizeEvent(e); ++ int ypos = 0; ++ // this is the height remaining to fill ++ int left_height = height(); ++ ++ if ( m_orientation == BottomUp ) ++ { ++ m_resizeHandle->move( e->size().width() - 19, 3); ++ ++ // put the search widget at the top of the menu and give it its desired ++ // height ++ m_search->mainWidget()->setGeometry( 0, ypos, width(), ++ m_search->minimumSize().height() ); ++ left_height -= m_search->minimumSize().height(); ++ ypos += m_search->minimumSize().height(); ++ ++ // place the footer widget at the bottom of the menu and give it its desired ++ // height ++ m_footer->mainWidget()->setGeometry( 0, height() - m_footer->minimumSize().height(), ++ width(), m_footer->minimumSize().height() ); ++ left_height -= m_footer->minimumSize().height(); ++ ++ // place the button box above the footer widget, horizontal placement ++ // has the width of the edge graphics subtracted ++ m_tabBar->setGeometry(button_box_left.width(), ++ height() - m_footer->minimumSize().height() - ++ m_tabBar->sizeHint().height(), ++ width() - button_box_left.width(), ++ m_tabBar->sizeHint().height() ); ++ left_height -= m_tabBar->sizeHint().height(); ++ ++ // place the main (stacker) widget below the search widget, ++ // in the remaining vertical space ++ m_stacker->setGeometry(0, ypos, ++ width(), ++ left_height ); ++ ++ } ++ else // TopDown orientation ++ { ++ // place the 'footer' widget at the top of the menu and give it ++ // its desired height ++ m_footer->mainWidget()->setGeometry( 0, ++ ypos /*height() - m_footer->minimumSize().height()*/, ++ width(), ++ m_footer->minimumSize().height() ); ++ ypos += m_footer->minimumSize().height(); ++ left_height -= m_footer->minimumSize().height(); ++ ++ // place the button box next at the top of the menu. ++ // has the width of the edge graphics subtracted ++ m_tabBar->setGeometry(button_box_left.width(), ypos, width() - button_box_left.width(), ++ m_tabBar->sizeHint().height()); ++ ++ ypos += m_tabBar->sizeHint().height(); ++ left_height -= m_tabBar->sizeHint().height(); ++ ++ // put the search widget above the footer widget ++ // height ++ m_search->mainWidget()->setGeometry( 0, ++ height() - m_search->minimumSize().height(), ++ width(), ++ m_search->minimumSize().height() ++ ); ++ left_height -= m_search->minimumSize().height(); ++ ++ // place the main (stacker) widget below the button box, ++ // in the remaining vertical space ++ m_stacker->setGeometry(0, ypos, ++ width(), ++ left_height ); ++ m_resizeHandle->move( e->size().width() - 19, e->size().height() - 19); ++ } ++ paintSearchTab( false ); ++} ++ ++void KMenu::mousePressEvent ( QMouseEvent * e ) ++{ ++ if ( m_orientation == BottomUp ) { ++ if (e->x() > width() - m_resizeHandle->width() && ++ e->y() < m_resizeHandle->height() ) ++ { ++ m_isresizing = true; ++ } ++ } ++ else { ++ if (e->x() > width() - m_resizeHandle->width() && ++ e->y() > height() - m_resizeHandle->height() ) ++ { ++ m_isresizing = true; ++ } ++ } ++ KMenuBase::mousePressEvent(e); ++} ++ ++void KMenu::mouseReleaseEvent ( QMouseEvent * /*e*/ ) ++{ ++ m_isresizing = false; ++} ++ ++void KMenu::mouseMoveEvent ( QMouseEvent * e ) ++{ ++ if ( hasMouseTracking() && m_isresizing ) { ++ m_stacker->setMinimumSize( QSize(0, 0) ); ++ m_stacker->setMaximumSize( QSize(32000, 32000) ); ++ int newWidth = QMAX( e->x() - x(), minimumSizeHint().width() ); ++ if ( m_orientation == BottomUp ) { ++ int newHeight = QMAX( height() - e->y(), minimumSizeHint().height() + 10 ); ++ int newY = y() + height() - newHeight; ++ setGeometry( x(), newY, newWidth, newHeight); ++ } ++ else { ++ setGeometry( x(), y(), newWidth, QMAX( e->y(), minimumSizeHint().height() + 10 )); ++ } ++ } ++} ++ ++void KMenu::clearedHistory() ++{ ++ saveConfig(); ++} ++ ++void KMenu::saveConfig() ++{ ++ KickerSettings::setHistory( m_kcommand->historyItems() ); ++ KickerSettings::setCompletionItems( m_kcommand->completionObject()->items() ); ++ KickerSettings::writeConfig(); ++} ++ ++void KMenu::notifyServiceStarted(KService::Ptr service) ++{ ++ // Inform other applications (like the quickstarter applet) ++ // that an application was started ++ QByteArray params; ++ QDataStream stream(params, IO_WriteOnly); ++ stream << "minicli" << service->storageId(); ++ kdDebug() << "minicli appLauncher dcop signal: " << service->storageId() << endl; ++ KApplication::kApplication()->dcopClient()->emitDCOPSignal("appLauncher", ++ "serviceStartedByStorageId(QString,QString)", params); ++} ++ ++void KMenu::parseLine( bool final ) ++{ ++ QString cmd = m_kcommand->currentText().stripWhiteSpace(); ++ m_filterData->setData( cmd ); ++ ++ if( final ) ++ KURIFilter::self()->filterURI( *(m_filterData), m_finalFilters ); ++ else ++ KURIFilter::self()->filterURI( *(m_filterData), m_middleFilters ); ++ ++ m_iconName = m_filterData->iconName(); ++ ++ kdDebug (1207) << "Command: " << m_filterData->uri().url() << endl; ++ kdDebug (1207) << "Arguments: " << m_filterData->argsAndOptions() << endl; ++} ++ ++// report error as a title in the menu ++void KMenu::reportError (QString error) ++{ ++ int index = 1000; //getHitMenuItemPosition (new HitMenuItem (base_category_id[0], 0)); ++ kndDebug () << "Inserting error:" << error << " at position " << index << endl; ++ m_searchResultsWidget->insertSeparator(OTHER_ID_BASE + 120, error, index); ++} ++ ++int KMenu::getHitMenuItemPosition ( HitMenuItem *hit_item) ++{ ++ QPtrListIterator it (m_current_menu_items); ++ const HitMenuItem *cur_item; ++ int pos = 0; ++ while ((cur_item = it.current ()) != NULL) { ++ ++it; ++ if ((cur_item->category!=hit_item->category || !cur_item->display_name.isEmpty()) && (*hit_item) < (*cur_item)) ++ break; ++ pos++; ++ } ++ m_current_menu_items.insert (pos, hit_item); ++ ++ return pos + 1; ++} ++ ++bool KMenu::checkUriInMenu( const KURL &uri) ++{ ++ QPtrListIterator it (m_current_menu_items); ++ const HitMenuItem *cur_item; ++ while ((cur_item = it.current ()) != NULL) { ++ ++it; ++ if (cur_item->uri == uri ) ++ return true; ++ } ++ ++ return false; ++} ++ ++void KMenu::searchActionClicked(QListViewItem* item) ++{ ++ accept(); ++ ++ addToHistory(); ++ if (item==m_searchIndex) { ++ QByteArray data; ++ QDataStream arg(data, IO_WriteOnly); ++ arg << m_kcommand->currentText(); ++ ++ if (ensureServiceRunning("kerry")) ++ kapp->dcopClient()->send("kerry","search","search(QString)", data); ++ } ++ else { ++ KURIFilterData data; ++ QStringList list; ++ data.setData( m_kcommand->currentText() ); ++ list << "kurisearchfilter" << "kuriikwsfilter"; ++ ++ if( !KURIFilter::self()->filterURI(data, list) ) { ++ KDesktopFile file("searchproviders/google.desktop", true, "services"); ++ data.setData(file.readEntry("Query").replace("\\{@}", m_kcommand->currentText())); ++ } ++ ++ (void) new KRun( data.uri(), parentWidget()); ++ } ++} ++ ++void KMenu::addToHistory() ++{ ++ QString search = m_kcommand->currentText().stripWhiteSpace(); ++ ++ if (search.length()<4) ++ return; ++ ++ m_kcommand->addToHistory( search ); ++} ++ ++QString KMenu::newDesktopFile(const KURL& url, const QString &directory) ++{ ++ QString base = url.fileName(); ++ if (base.endsWith(".desktop")) ++ base.truncate(base.length()-8); ++ QRegExp r("(.*)(?=-\\d+)"); ++ if (r.search(base) > -1) ++ base = r.cap(1); ++ ++ QString file = base + ".desktop"; ++ ++ for(int n = 1; ++n; ) ++ { ++ if (!QFile::exists(directory+file)) ++ break; ++ ++ file = QString("%2-%1.desktop").arg(n).arg(base); ++ } ++ return directory+file; ++} ++ ++void KMenu::updateRecentlyUsedApps(KService::Ptr &service) ++{ ++ QString strItem(service->desktopEntryPath()); ++ ++ // don't add an item from root kmenu level ++ if (!strItem.contains('/')) ++ { ++ return; ++ } ++ ++ // add it into recent apps list ++ RecentlyLaunchedApps::the().appLaunched(strItem); ++ RecentlyLaunchedApps::the().save(); ++ RecentlyLaunchedApps::the().m_bNeedToUpdate = true; ++} ++ ++QSize KMenu::sizeHint() const ++{ ++#warning FIXME ++ // this should be only for the inner area so layout changes do not break it ++ const int width = kMin(KickerSettings::kMenuWidth(), QApplication::desktop()->screen()->width()-50); ++ ++ const int height = kMin(KickerSettings::kMenuHeight(), QApplication::desktop()->screen()->height()-50); ++ QSize wanted(width, height); ++ kdDebug() << "show " << minimumSizeHint() << " " << m_stacker->minimumSizeHint() << " " ++ << m_searchFrame->minimumSizeHint() << " " << wanted << endl; ++ bool isDefault = wanted.isNull(); ++ wanted = wanted.expandedTo(minimumSizeHint()); ++ if ( isDefault ) ++ wanted.setHeight( wanted.height() + ( m_favoriteView->goodHeight() - m_stacker->minimumSizeHint().height() ) ); ++ ++ return wanted; ++} ++ ++QSize KMenu::minimumSizeHint() const ++{ ++ QSize minsize; ++ minsize.setWidth( minsize.width() + m_tabBar->sizeHint().width() ); ++ minsize.setWidth( QMAX( minsize.width(), ++ m_search->minimumSize().width() ) ); ++ minsize.setWidth( QMAX( minsize.width(), ++ m_search->minimumSize().width() ) ); ++ ++ minsize.setHeight( minsize.height() + ++ m_search->minimumSize().height() + ++ m_footer->minimumSize().height() + ++ 180 ); // 180 is a very rough guess for 32 icon size ++ return minsize; ++} ++ ++void KMenu::slotFavoritesMoved( QListViewItem* item, QListViewItem* /*afterFirst*/, QListViewItem* afterNow) ++{ ++ KMenuItem* kitem = dynamic_cast(item); ++ KMenuItem* kafterNow = dynamic_cast(afterNow); ++ ++ QStringList favs = KickerSettings::favorites(); ++ QStringList::Iterator it; ++ QString addFav = QString::null; ++ ++ // remove at old position ++ if (kitem->service()) ++ { ++ favs.erase(favs.find(kitem->service()->storageId())); ++ addFav = kitem->service()->storageId(); ++ } ++ else ++ { ++ for (it = favs.begin(); it != favs.end(); ++it) ++ { ++ if ((*it)[0]=='/') ++ { ++ KDesktopFile df((*it),true); ++ if (df.readURL().replace("file://",QString::null)==kitem->path()) ++ { ++ addFav = *it; ++ favs.erase(it); ++ break; ++ } ++ } ++ } ++ } ++ ++ if (addFav.isEmpty()) ++ return; ++ ++ if (!kafterNow || dynamic_cast(afterNow)) ++ { ++ favs.prepend(addFav); ++ } ++ else ++ { ++ // add at new position ++ for (it = favs.begin(); it != favs.end(); ++it) ++ { ++ if ((*it)[0]=='/' && !kafterNow->service()) ++ { ++ KDesktopFile df((*it),true); ++ if (df.readURL().replace("file://",QString::null)==kafterNow->path()) ++ { ++ kdDebug() << "insert after " << kafterNow->path() << endl; ++ favs.insert(++it,addFav); ++ break; ++ } ++ } ++ else if (kafterNow->service() && *it==kafterNow->service()->storageId()) ++ { ++ kdDebug() << "insert after service " << kafterNow->service() << endl; ++ favs.insert(++it,addFav); ++ break; ++ } ++ } ++ } ++ kdDebug() << "favs " << favs << endl; ++ ++ KickerSettings::setFavorites(favs); ++ KickerSettings::writeConfig(); ++ ++ m_favoriteView->slotMoveContent(); ++} ++ ++void KMenu::updateMedia() ++{ ++ QStringList devices = m_mediaWatcher->devices(); ++ if ( devices.isEmpty() ) ++ return; ++ ++ int nId = serviceMenuStartId(); ++ if ( m_media_id ) { ++ for ( int i = m_media_id + 1 ;; ++i ) ++ { ++ KMenuItem *item = m_systemView->findItem( i ); ++ if ( !item ) ++ break; ++ if ( !item->path().startsWith( "system:/" ) ) ++ break; ++ media_mimetypes.remove(item->path()); ++ delete item; ++ } ++ nId = m_media_id + 1; ++ } else { ++ m_media_id = nId; ++ m_systemView->insertSeparator( nId++, i18n("Media"), -1); ++ } ++ ++ for ( QStringList::ConstIterator it = devices.constBegin(); it != devices.constEnd(); ++it ) ++ { ++ QString id = ( *it ); ++ QString name = *++it; ++ QString label = *++it; ++ QString userLabel = ( *++it ); ++ bool mountable = ( *++it == "true" ); // bool ++ ( void )mountable; ++ QString deviceNode = ( *++it ); ++ QString mountPoint = ( *++it ); ++ QString fsType = ( *++it ); ++ bool mounted = ( *++it == "true" ); // bool ++ QString baseURL = ( *++it ); ++ QString mimeType = ( *++it ); ++ QString iconName = ( *++it ); ++ ++ media_mimetypes["system:/media/"+name] = mimeType; ++ ++ if ( iconName.isEmpty() ) // no user icon, query the MIME type ++ { ++ KMimeType::Ptr mime = KMimeType::mimeType( mimeType ); ++ iconName = mime->icon( QString::null, false ); ++ } ++ ++ QString descr = deviceNode; ++ if ( mounted ) ++ { ++ descr = mountPoint; ++ // calc the free/total space ++ struct statfs sfs; ++ if ( statfs( QFile::encodeName( mountPoint ), &sfs ) == 0 ) ++ { ++ uint64_t total = ( uint64_t )sfs.f_blocks * sfs.f_bsize; ++ uint64_t avail = ( uint64_t )( getuid() ? sfs.f_bavail : sfs.f_bfree ) * sfs.f_bsize; ++ if ( avail < total && avail > 1024 ) { ++ label += " " + i18n( "(%1 available)" ).arg( KIO::convertSize(avail) ); ++ } ++ } ++ } ++ m_systemView->insertItem( iconName, userLabel.isEmpty() ? label : userLabel, ++ descr, "system:/media/" + name, nId++, -1 ); ++ ++ ++it; // skip separator ++ } ++} ++ ++bool KMenu::ensureServiceRunning(const QString & service) ++{ ++ QStringList URLs; ++ QByteArray data, replyData; ++ QCString replyType; ++ QDataStream arg(data, IO_WriteOnly); ++ arg << service << URLs; ++ ++ if ( !kapp->dcopClient()->call( "klauncher", "klauncher", "start_service_by_desktop_name(QString,QStringList)", ++ data, replyType, replyData) ) { ++ qWarning( "call to klauncher failed."); ++ return false; ++ } ++ QDataStream reply(replyData, IO_ReadOnly); ++ ++ if ( replyType != "serviceResult" ) ++ { ++ qWarning( "unexpected result '%s' from klauncher.", replyType.data()); ++ return false; ++ } ++ int result; ++ QCString dcopName; ++ QString error; ++ reply >> result >> dcopName >> error; ++ if (result != 0) ++ { ++ qWarning("Error starting: %s", error.local8Bit().data()); ++ return false; ++ } ++ return true; ++} ++ ++void KMenu::slotFavDropped(QDropEvent * ev, QListViewItem *after ) ++{ ++ QStringList favs = KickerSettings::favorites(); ++ KMenuItem *newItem = 0; ++ ++ if (KMenuItemDrag::canDecode(ev)) ++ { ++ KMenuItemInfo item; ++ KMenuItemDrag::decode(ev,item); ++ ++ if (item.m_s) ++ { ++ if (favs.find(item.m_s->storageId())==favs.end()) ++ { ++ newItem = m_favoriteView->insertMenuItem(item.m_s, serviceMenuEndId()+favs.count()+1); ++ favs += item.m_s->storageId(); ++ } ++ } ++ else ++ { ++ QString uri = item.m_path; ++ if (uri.startsWith(locateLocal("data", QString::fromLatin1("RecentDocuments/")))) { ++ KDesktopFile df(uri,true); ++ uri=df.readURL(); ++ } ++ ++ QStringList::Iterator it; ++ for (it = favs.begin(); it != favs.end(); ++it) ++ { ++ if ((*it)[0]=='/') ++ { ++ KDesktopFile df((*it),true); ++ if (df.readURL().replace("file://",QString::null)==uri) ++ break; ++ } ++ } ++ if (it==favs.end()) ++ { ++ QString file = KickerLib::newDesktopFile(uri); ++ KDesktopFile df(file); ++ df.writeEntry("Encoding", "UTF-8"); ++ df.writeEntry("Type","Link"); ++ df.writeEntry("Name", item.m_title); ++ df.writeEntry("GenericName", item.m_description); ++ df.writeEntry("Icon", item.m_icon); ++ df.writeEntry("URL", uri); ++ ++ newItem = m_favoriteView->insertItem(item.m_icon, item.m_title, item.m_description, ++ uri, serviceMenuEndId()+favs.count()+1, -1); ++ favs += file; ++ } ++ } ++ } ++ else if (QTextDrag::canDecode(ev)) ++ { ++ QString text; ++ QTextDrag::decode(ev,text); ++ ++ if (text.endsWith(".desktop")) ++ { ++ KService::Ptr p = KService::serviceByDesktopPath(text.replace("file://",QString::null)); ++ if (p && favs.find(p->storageId())==favs.end()) { ++ newItem = m_favoriteView->insertMenuItem(p, serviceMenuEndId()+favs.count()+1); ++ favs+=p->storageId(); ++ } ++ } ++ else ++ { ++ QStringList::Iterator it; ++ for (it = favs.begin(); it != favs.end(); ++it) ++ { ++ if ((*it)[0]=='/') ++ { ++ KDesktopFile df((*it),true); ++ if (df.readURL().replace("file://",QString::null)==text) ++ break; ++ } ++ } ++ if (it==favs.end()) ++ { ++ KFileItem* item = new KFileItem(text, QString::null, KFileItem::Unknown); ++ KURL kurl(text); ++ ++ QString file = KickerLib::newDesktopFile(text); ++ KDesktopFile df(file); ++ df.writeEntry("Encoding", "UTF-8"); ++ df.writeEntry("Type","Link"); ++ df.writeEntry("Name", item->name()); ++ df.writeEntry("GenericName", i18n("Directory: %1").arg(kurl.upURL().path())); ++ df.writeEntry("Icon", item->iconName()); ++ df.writeEntry("URL", text); ++ ++ newItem = m_favoriteView->insertItem(item->iconName(), item->name(), i18n("Directory: %1").arg(kurl.upURL().path()), text, serviceMenuEndId()+favs.count()+1, -1); ++ favs += file; ++ } ++ } ++ } ++ ++ if ( newItem ) { ++ if (!after && m_favoriteView->childCount()>0) { ++ newItem->moveItem( m_favoriteView->firstChild() ); ++ m_favoriteView->firstChild()->moveItem( newItem ); ++ } ++ else ++ newItem->moveItem( after ); ++ KickerSettings::setFavorites(favs); ++ slotFavoritesMoved( newItem, 0, after ); ++ } ++ m_stacker->raiseWidget(m_favoriteView); ++} ++ ++void KMenu::resetOverflowCategory() ++{ ++ if (m_overflowCategoryState==NotNeeded) ++ m_overflowList.setAutoDelete( true ); ++ ++ m_overflowList.clear(); ++ m_overflowList.setAutoDelete( false ); ++ m_overflowCategoryState = None; ++ m_overflowCategory = num_categories; ++} ++ ++void KMenu::fillOverflowCategory() ++{ ++ if (m_overflowCategoryState==Filling) { ++ initCategoryTitlesUpdate(); ++ for (HitMenuItem * item = m_overflowList.first(); item; item = m_overflowList.next() ) { ++ max_category_id [item->category]++; ++ item->id=max_category_id [item->category]; ++ ++ KMenuItem *hit_item = m_searchResultsWidget->insertItem(iconForHitMenuItem(item), item->display_name, item->display_info, item->uri.url(), max_category_id [item->category], getHitMenuItemPosition (item)); ++ hit_item->setService(item->service); ++ } ++ updateCategoryTitles(); ++ } ++} ++ ++int KMenu::max_items(int category) const ++{ ++ if (category==ACTIONS) ++ return 10; ++ ++ return 5; ++} ++ ++#define DBUS_HAL_INTERFACE "org.freedesktop.Hal" ++#define DBUS_HAL_SYSTEM_POWER_INTERFACE "org.freedesktop.Hal.Device.SystemPowerManagement" ++#define HAL_UDI_COMPUTER "/org/freedesktop/Hal/devices/computer" ++ ++#ifdef KDELIBS_SUSE ++#include ++#endif ++ ++void KMenu::insertSuspendOption( int &nId, int &index ) ++{ ++#ifdef KDELIBS_SUSE ++ int supported = -1; ++ bool suspend_ram, suspend_disk, standby; ++ ++ liblazy_hal_get_property_bool(HAL_UDI_COMPUTER, "power_management.can_suspend", &supported); ++ if (supported == 1) ++ suspend_ram = true; ++ else ++ suspend_ram = false; ++ liblazy_hal_get_property_bool(HAL_UDI_COMPUTER, "power_management.can_standby", &supported); ++ if (supported == 1) ++ standby = true; ++ else ++ standby = false; ++ liblazy_hal_get_property_bool(HAL_UDI_COMPUTER, "power_management.can_hibernate", &supported); ++ if (supported == 1) ++ suspend_disk = true; ++ else ++ suspend_disk = false; ++ ++ if (liblazy_hal_is_caller_privileged("org.freedesktop.hal.power-management.hibernate") != 1) ++ suspend_disk = false; ++ if (liblazy_hal_is_caller_privileged("org.freedesktop.hal.power-management.suspend") != 1) ++ suspend_ram = false; ++ if (liblazy_hal_is_caller_privileged("org.freedesktop.hal.power-management.standby") != 1) ++ standby = false; ++ ++ if ( ! ( standby + suspend_ram + suspend_disk ) ) ++ return; ++ ++ i18n("Suspend Computer"); ++ ++ if ( suspend_disk ) ++ m_exitView->leftView()->insertItem( "suspend2disk", i18n( "Suspend to Disk" ), ++ i18n( "Pause without logging out" ), "kicker:/suspend_disk", nId++, index++ ); ++ ++ if ( suspend_ram ) ++ m_exitView->leftView()->insertItem( "suspend2ram", i18n( "Suspend to RAM" ), ++ i18n( "Pause without logging out" ), "kicker:/suspend_ram", nId++, index++ ); ++ ++ if ( standby ) ++ m_exitView->leftView()->insertItem( "player_pause", i18n( "Standby" ), ++ i18n( "Pause without logging out" ), "kicker:/standby", nId++, index++ ); ++#endif ++} ++ ++void KMenu::slotSuspend(int id) ++{ ++#ifdef KDELIBS_SUSE ++ int error = 0; ++ int wake = 0; ++ DBusMessage *reply = 0; ++ ++ if (id == 1) { ++ error = liblazy_dbus_system_send_method_call(DBUS_HAL_INTERFACE, ++ HAL_UDI_COMPUTER, ++ DBUS_HAL_SYSTEM_POWER_INTERFACE, ++ "Hibernate", ++ &reply, ++ DBUS_TYPE_INVALID); ++ } else if (id == 2) ++ error = liblazy_dbus_system_send_method_call(DBUS_HAL_INTERFACE, ++ HAL_UDI_COMPUTER, ++ DBUS_HAL_SYSTEM_POWER_INTERFACE, ++ "Suspend", ++ &reply, ++ DBUS_TYPE_INT32, ++ &wake, ++ DBUS_TYPE_INVALID); ++ else if (id == 3) ++ error = liblazy_dbus_system_send_method_call(DBUS_HAL_INTERFACE, ++ HAL_UDI_COMPUTER, ++ DBUS_HAL_SYSTEM_POWER_INTERFACE, ++ "Standby", ++ &reply, ++ DBUS_TYPE_INVALID); ++ else ++ return; ++ if (error) ++#endif ++ KMessageBox::error(this, i18n("Suspend failed")); ++ ++} ++ ++// vim:cindent:sw=4: +--- kicker/ui/kmenuitembase.ui (Revision 0) ++++ kicker/ui/kmenuitembase.ui (Revision 849791) +@@ -0,0 +1,141 @@ ++ ++KMenuItemBase ++ ++ ++ KMenuItemBase ++ ++ ++ ++ 0 ++ 0 ++ 514 ++ 80 ++ ++ ++ ++ ++ 7 ++ 5 ++ 0 ++ 0 ++ ++ ++ ++ ++ 0 ++ 0 ++ ++ ++ ++ ++ 32767 ++ 80 ++ ++ ++ ++ KMenuItemBase ++ ++ ++ ++ unnamed ++ ++ ++ 2 ++ ++ ++ ++ layout11 ++ ++ ++ ++ unnamed ++ ++ ++ ++ itemTitle ++ ++ ++ ++ 7 ++ 1 ++ 1 ++ 0 ++ ++ ++ ++ ++ 14 ++ ++ ++ ++ ++ ++ ++ RichText ++ ++ ++ WordBreak|AlignTop ++ ++ ++ ++ ++ itemDescription ++ ++ ++ ++ 7 ++ 7 ++ 0 ++ 1 ++ ++ ++ ++ ++ 188 ++ 188 ++ 188 ++ ++ ++ ++ ++ ++ ++ RichText ++ ++ ++ WordBreak|AlignTop ++ ++ ++ ++ ++ ++ ++ layout4 ++ ++ ++ ++ unnamed ++ ++ ++ ++ itemPixmap ++ ++ ++ ++ 64 ++ 64 ++ ++ ++ ++ ++ ++ ++ AlignTop|AlignHCenter ++ ++ ++ ++ ++ ++ ++ ++ +--- kicker/ui/addappletvisualfeedback.cpp (Revision 849788) ++++ kicker/ui/addappletvisualfeedback.cpp (Revision 849791) +@@ -51,6 +51,7 @@ + m_richText(0), + m_dissolveDelta(-1), + m_frames(1), ++ m_moveTimer(0, "m_moveTimer"), + m_dirty(false) + { + setFocusPolicy(NoFocus); +--- kicker/ui/kickoff_bar.cpp (Revision 0) ++++ kicker/ui/kickoff_bar.cpp (Revision 849791) +@@ -0,0 +1,200 @@ ++/***************************************************************** ++ ++ Copyright (c) 1996-2000 the kicker authors. See file AUTHORS. ++ Copyright (c) 2006 Dirk Mueller ++ ++ This program is free software; you can redistribute it and/or ++ modify it under the terms of the GNU General Public ++ License as published by the Free Software Foundation; either ++ version 2 of the License, or (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with this program; see the file COPYING. If not, write to ++ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ++ Boston, MA 02110-1301, USA. ++ ++******************************************************************/ ++ ++#include "kickoff_bar.h" ++#include "itemview.h" ++ ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include "kickerSettings.h" ++ ++KickoffTabBar::KickoffTabBar(QWidget* parent, const char* name) ++ : QTabBar(parent, name), m_tabsActivated(true) ++{ ++ setAcceptDrops(true); ++} ++ ++void KickoffTabBar::deactivateTabs(bool b) ++{ ++ m_tabsActivated = !b; ++ ++ update(); ++} ++ ++void KickoffTabBar::paint(QPainter* p, QTab* t, bool selected) const ++{ ++ QStyle::SFlags flags = QStyle::Style_Default; ++ ++ if (isEnabled() && t->isEnabled()) ++ flags |= QStyle::Style_Enabled; ++ if ( m_tabsActivated && selected ) ++ flags |= QStyle::Style_Selected; ++// else if(t == d->pressed) ++// flags |= QStyle::Style_Sunken; ++ //selection flags ++ if(t->rect().contains(mapFromGlobal(QCursor::pos()))) ++ flags |= QStyle::Style_MouseOver; ++ style().drawControl( QStyle::CE_TabBarTab, p, this, t->rect(), ++ colorGroup(), flags, QStyleOption(t) ); ++ ++ paintLabel( p, t->rect(), t, t->identifier() == keyboardFocusTab() ); ++} ++ ++ ++void KickoffTabBar::paintLabel(QPainter* p, const QRect& br, QTab* t, bool has_focus) const ++{ ++ QRect r = br; ++ ++ bool selected = m_tabsActivated && (currentTab() == t->identifier()); ++ int vframe = style().pixelMetric( QStyle::PM_TabBarTabVSpace, this ); ++ ++ p->setFont( font() ); ++ QFontMetrics fm = p->fontMetrics(); ++ int fw = fm.size( Qt::SingleLine|Qt::ShowPrefix, t->text() ).width(); ++ ++ QRect rt(r); ++ rt.setWidth(fw); ++ ++ if ( t->iconSet()) ++ { ++ // the tab has an iconset, draw it in the right mode ++ QIconSet::Mode mode = (t->isEnabled() && isEnabled()) ++ ? QIconSet::Normal : QIconSet::Disabled; ++ if ( mode == QIconSet::Normal && has_focus ) ++ mode = QIconSet::Active; ++ QPixmap pixmap = t->iconSet()->pixmap( QIconSet::Large, mode ); ++ int pixw = pixmap.width(); ++ int pixh = pixmap.height(); ++ int xoff = br.x() + (br.width() - pixw)/2; ++ int yoff = br.y() + (br.height() - 4 - pixh - ((KickerSettings::kickoffTabBarFormat() != KickerSettings::IconOnly) ? fm.height() : 0) - vframe)/2; ++ ++ p->drawPixmap( xoff, 4 + yoff, pixmap ); ++ ++ r.setTop(vframe/2 + yoff + pixh - 8); ++ rt.setTop(vframe/2 + yoff + pixh - 8); ++ rt.setHeight(((KickerSettings::kickoffTabBarFormat() != KickerSettings::IconOnly) ? fm.height() : 0) + vframe/2); ++ } ++ else ++ rt.setHeight(vframe/2 + fm.height()); ++ ++ rt.setWidth(fw+8); ++ rt.moveCenter(r.center()); ++ ++ QStyle::SFlags flags = QStyle::Style_Default; ++ ++ if (isEnabled() && t->isEnabled()) ++ flags |= QStyle::Style_Enabled; ++ if (has_focus) ++ flags |= QStyle::Style_HasFocus; ++ if ( selected ) ++ flags |= QStyle::Style_Selected; ++ // else if(t == d->pressed) ++ // flags |= QStyle::Style_Sunken; ++ if(t->rect().contains(mapFromGlobal(QCursor::pos()))) ++ flags |= QStyle::Style_MouseOver; ++ style().drawControl( QStyle::CE_TabBarLabel, p, this, rt, ++ t->isEnabled() ? colorGroup(): palette().disabled(), ++ flags, QStyleOption(t) ); ++} ++ ++QSize KickoffTabBar::sizeHint() const ++{ ++ QSize s = QTabBar::sizeHint(); ++ ++ return s; ++} ++ ++void KickoffTabBar::layoutTabs() ++{ ++ QTabBar::layoutTabs(); ++ ++ QFontMetrics fm = fontMetrics(); ++ int fh = ((KickerSettings::kickoffTabBarFormat() != KickerSettings::IconOnly) ? fm.height() : 0) + 4; ++ ++ int hframe = style().pixelMetric( QStyle::PM_TabBarTabHSpace, this ); ++ int vframe = style().pixelMetric( QStyle::PM_TabBarTabVSpace, this ); ++ int overlap = style().pixelMetric( QStyle::PM_TabBarTabOverlap, this ); ++ ++ QSize s; ++ for (int t = 0; t < count(); ++t) ++ { ++ QTab* tab = tabAt(t); ++ if (tab->iconSet()) ++ s = s.expandedTo(tab->iconSet()->pixmap(QIconSet::Large, QIconSet::Normal).size()); ++ } ++ ++ int x = 0; ++ for (int t = 0; t < count(); ++t) { ++ QTab* tab = tabAt(QApplication::reverseLayout() ? count() - t - 1 : t); ++ int h = fh; ++ if (tab->iconSet()) ++ h += 4 + s.height() + 4; ++ QRect r = tab->rect(); ++ ++ int fw = fm.size( Qt::SingleLine|Qt::ShowPrefix, tab->text() ).width(); ++ int iw = 0; ++ if ( tab->iconSet() != 0 ) ++ iw = tab->iconSet()->pixmap( QIconSet::Large, QIconSet::Normal ).width(); ++ int w = QMAX(iw, fw + 6 + 6 ) + hframe; ++ h += ((KickerSettings::kickoffTabBarFormat() != KickerSettings::IconOnly) ? fm.height() : 0) + vframe; ++ tab->setRect(QRect(QPoint(x, 0), style().sizeFromContents(QStyle::CT_TabBarTab, this, ++ QSize(w, h), QStyleOption(tab)))); ++ x += tab->rect().width() - overlap; ++ } ++} ++ ++void KickoffTabBar::dragEnterEvent(QDragEnterEvent* event) ++{ ++ event->accept(KMenuItemDrag::canDecode(event)); ++} ++ ++void KickoffTabBar::dragMoveEvent(QDragMoveEvent* event) ++{ ++ QTab* t = selectTab(event->pos()); ++ ++ // ### uhhh, look away ++ if (t && t->identifier() == 0) ++ { ++ setCurrentTab(t); ++ } ++} ++ ++void KickoffTabBar::mousePressEvent( QMouseEvent * e ) ++{ ++ if ( e->button() != LeftButton ) { ++ e->ignore(); ++ return; ++ } ++ QTab *t = selectTab( e->pos() ); ++ if ( t && t->isEnabled() ) { ++ emit tabClicked(t); ++ } ++ QTabBar::mousePressEvent(e); ++} ++ ++#include "kickoff_bar.moc" ++// vim:cindent:sw=4: +--- kicker/ui/media_watcher.h (Revision 0) ++++ kicker/ui/media_watcher.h (Revision 849791) +@@ -0,0 +1,51 @@ ++/***************************************************************** ++ ++Copyright (c) 2006 Stephan Kulow ++ ++Permission is hereby granted, free of charge, to any person obtaining a copy ++of this software and associated documentation files (the "Software"), to deal ++in the Software without restriction, including without limitation the rights ++to use, copy, modify, merge, publish, distribute, sublicense, and/or sell ++copies of the Software, and to permit persons to whom the Software is ++furnished to do so, subject to the following conditions: ++ ++The above copyright notice and this permission notice shall be included in ++all copies or substantial portions of the Software. ++ ++THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR ++IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, ++FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE ++AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN ++AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN ++CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ++ ++******************************************************************/ ++ ++#ifndef _media_watcher_ ++#define _media_watcher_ ++ ++#include ++#include ++#include ++ ++class MediaWatcher : public QObject, public DCOPObject ++{ ++ Q_OBJECT ++ K_DCOP ++ ++ QStringList m_devices; ++ void updateDevices(); ++ ++k_dcop: ++ void slotMediumAdded(QString medium, bool a); ++ ++signals: ++ void mediumChanged(); ++ ++public: ++ MediaWatcher(QObject *parent); ++ ++ QStringList devices() const { return m_devices; } ++}; ++ ++#endif +--- kicker/ui/appletop_mnu.h (Revision 849788) ++++ kicker/ui/appletop_mnu.h (Revision 849791) +@@ -47,6 +47,9 @@ + signals: + void escapePressed(); + ++protected slots: ++ void toggleLegacy(); ++ + protected: + void keyPressEvent(QKeyEvent* e); + }; +--- kicker/ui/flipscrollview.h (Revision 0) ++++ kicker/ui/flipscrollview.h (Revision 849791) +@@ -0,0 +1,118 @@ ++/***************************************************************** ++ ++Copyright (c) 2006 Will Stephenson ++ ++Permission is hereby granted, free of charge, to any person obtaining a copy ++of this software and associated documentation files (the "Software"), to deal ++in the Software without restriction, including without limitation the rights ++to use, copy, modify, merge, publish, distribute, sublicense, and/or sell ++copies of the Software, and to permit persons to whom the Software is ++furnished to do so, subject to the following conditions: ++ ++The above copyright notice and this permission notice shall be included in ++all copies or substantial portions of the Software. ++ ++THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR ++IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, ++FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE ++AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN ++AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN ++CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ++ ++******************************************************************/ ++ ++/* ++ * Flip scroll menu ++ * Each level of the menu is a separate QListView ++ * Child items are added to their own QListView. ++ * When a parent is clicked, we look up its child menu and insert ++ * that in a QScrollView, then scroll to it. ++ * ++ * Need to intercept QListViewItems' parent param and instead of ++ * inserting directly into parent, insert into parent item's listview ++ * ++ * So need ++ * - adapted QLVI ++ * - wrap QLV and offer same interface ++ */ ++ ++#ifndef FLIPSCROLLVIEW_H ++#define FLIPSCROLLVIEW_H ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include "service_mnu.h" ++ ++class ItemView; ++ ++class BackFrame : public QFrame ++{ ++ Q_OBJECT ++ ++public: ++ BackFrame( QWidget *parent ); ++ virtual void drawContents( QPainter *p ); ++ ++ void enterEvent ( QEvent * ); ++ void leaveEvent( QEvent * ); ++ void mousePressEvent ( QMouseEvent * e ); ++ ++signals: ++ void clicked(); ++ ++private: ++ QPixmap left_triangle; ++ bool mouse_inside; ++}; ++ ++class FlipScrollView : public QScrollView ++{ ++ Q_OBJECT ++public: ++ enum State{ StoppedLeft, StoppedRight, ScrollingLeft, ScrollingRight }; ++ FlipScrollView( QWidget * parent = 0, const char * name = 0 ); ++ ~FlipScrollView(); ++ ++ ItemView *currentView() const; ++ ItemView *leftView() const; ++ ItemView *rightView() const; ++ ItemView *prepareLeftMove(bool clear=true); ++ ItemView *prepareRightMove(); ++ ++ void flipScroll(const QString& selectMenuPath = QString::null); ++ void showBackButton(bool enable); ++ bool showsBackButton() const {return mShowBack;} ++ ++protected slots: ++ void slotScrollTimer(); ++ ++signals: ++ void startService(KService::Ptr kservice); ++ void startURL(const QString& u); ++ void rightButtonPressed(QListViewItem*,const QPoint&,int); ++ void backButtonClicked(); ++ ++protected: ++ void viewportResizeEvent ( QResizeEvent * ); ++ ++private: ++ ItemView * mLeftView; ++ ItemView * mRightView; ++// ItemView * mCurrentView; ++ int mStepsRemaining; ++ State mState; ++ QTimer * mTimer; ++ BackFrame *mBackrow; ++ QString mSelectMenuPath; ++ int mScrollDirection; ++ bool mShowBack; ++}; ++ ++ ++ ++ ++#endif +--- kicker/ui/k_new_mnu.h (Revision 0) ++++ kicker/ui/k_new_mnu.h (Revision 849791) +@@ -0,0 +1,342 @@ ++/***************************************************************** ++ ++ Copyright (c) 1996-2000 the kicker authors. See file AUTHORS. ++ Copyright (c) 2006 Debajyoti Bera ++ ++ This program is free software; you can redistribute it and/or ++ modify it under the terms of the GNU General Public ++ License as published by the Free Software Foundation; either ++ version 2 of the License, or (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with this program; see the file COPYING. If not, write to ++ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ++ Boston, MA 02110-1301, USA. ++ ++******************************************************************/ ++ ++#ifndef __k_new_mnu_h__ ++#define __k_new_mnu_h__ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include ++#include "../interfaces/kickoff-search-plugin.h" ++ ++#include "kmenubase.h" ++#include "service_mnu.h" ++#include "query.h" ++ ++class KickerClientMenu; ++class KickoffTabBar; ++class KBookmarkMenu; ++class KActionCollection; ++class KBookmarkOwner; ++class Panel; ++class QWidgetStack; ++class KHistoryCombo; ++class QScrollView; ++class PopupMenuTitle; ++class MediaWatcher; ++class KURIFilterData; ++class KBookmarkGroup; ++class KBookmarkManager; ++class ItemView; ++class FlipScrollView; ++class QListViewItem; ++class KMenuItem; ++class QListView; ++class QTabBar; ++class QTab; ++ ++static QString categories[14] = {I18N_NOOP("Actions"), I18N_NOOP("Applications"), I18N_NOOP("Bookmarks"), ++ I18N_NOOP("Notes"), I18N_NOOP("Emails"), I18N_NOOP("Files"), I18N_NOOP("Music"), ++ I18N_NOOP("Browsing History"), I18N_NOOP("Chat Logs"), I18N_NOOP("Feeds"), ++ I18N_NOOP("Pictures"), I18N_NOOP("Videos"), I18N_NOOP("Documentation"), ++ I18N_NOOP("Others")}; ++ ++static QString kerry_categories[14] = {"contacts", "applications", "webpages", "everything", "conversations", ++ "everything", "media", "webpages", "conversations", "webpages", "images", ++ "media", "everything", "everything"}; ++ ++enum MenuOrientation { BottomUp, TopDown, UnDetermined }; ++enum OverflowCategoryState { None, Filling, NotNeeded }; ++ ++class KMenu : public KMenuBase ++{ ++ Q_OBJECT ++ Q_PROPERTY (bool KStyleMenuDropShadow READ useKStyleMenuDropShadow ) ++ ++public: ++ KMenu(); ++ ~KMenu(); ++ ++ int insertClientMenu(KickerClientMenu *p); ++ void removeClientMenu(int id); ++ ++ bool useKStyleMenuDropShadow() const { return true; } ++ ++ virtual void showMenu(); ++ virtual bool eventFilter(QObject*, QEvent*); ++ ++ void clearRecentAppsItems(); ++ void clearRecentDocsItems(); ++ bool highlightMenuItem(const QString& /*id*/) { return false;} ++ ++ void selectFirstItem() {} ++ void popup(const QPoint&, int indexAtPoint); ++ ++ enum MaskEffect { Plain, Dissolve }; ++ ++ virtual QSize sizeHint() const; ++ virtual QSize minimumSizeHint() const; ++ ++ void searchOver(); ++ void initCategoryTitlesUpdate(); ++ bool anotherHitMenuItemAllowed(int cat, bool count=true); ++ void addHitMenuItem(HitMenuItem*); ++ void insertSearchResult(HitMenuItem* item); ++ ++ void updateCategoryTitles(); ++ ++signals: ++ void aboutToHide(); ++ void aboutToShow(); ++ ++public slots: ++ virtual void initialize(); ++ ++ virtual void hide(); ++ virtual void show(); ++ ++ void stackWidgetRaised(QWidget*); ++ ++protected slots: ++ void slotLock(); ++ void slotOpenHomepage(); ++ void slotLogout(); ++ void slotPopulateSessions(); ++ void slotSessionActivated( int ); ++ void slotGoSubMenu(const QString& relPath); ++ void slotGoBack(); ++ void slotGoExitMainMenu(); ++ void slotGoExitSubMenu(const QString& url); ++ void tabClicked(QTab*); ++ ++ void paletteChanged(); ++ virtual void configChanged(); ++ void updateRecent(); ++ ++ void initSearch(); ++ void searchAccept(); ++ void searchChanged(const QString &); ++ // when timeout happens or doQueryNow calls ++ void doQuery (bool return_pressed = false); ++ void searchActionClicked(QListViewItem*); ++ ++ void slotStartService(KService::Ptr); ++ void slotStartURL(const QString&); ++ void slotContextMenuRequested( QListViewItem * item, const QPoint & pos, int col ); ++ ++ void clearedHistory(); ++ ++ void slotSloppyTimeout(); ++ ++ void slotContextMenu(int); ++ void slotFavoritesMoved( QListViewItem*, QListViewItem*, QListViewItem* ); ++ ++ void updateMedia(); ++ void slotFavDropped(QDropEvent * e, QListViewItem *after ); ++ void slotSuspend(int id); ++ ++protected: ++ virtual void paintEvent(QPaintEvent *); ++ virtual void resizeEvent ( QResizeEvent * ); ++ virtual void mousePressEvent ( QMouseEvent * e ); ++ virtual void mouseReleaseEvent ( QMouseEvent * e ); ++ virtual void mouseMoveEvent ( QMouseEvent * e ); ++ ++ void doNewSession(bool lock); ++ void createRecentMenuItems(); ++ void insertStaticItems(); ++ void insertStaticExitItems(); ++ void insertSuspendOption( int &id, int &index ); ++ virtual void clearSubmenus(); ++// void raiseStackWidget(QWidget *view); ++ ++ bool runCommand(); ++ ++ void setupUi(); ++ ++ void saveConfig(); ++ void searchProgramList(QString relPath); ++ void searchBookmarks(KBookmarkGroup); ++ void searchAddressbook(); ++ ++ void createNewProgramList(); ++ void createNewProgramList(QString relPath); ++ ++ void paintSearchTab( bool active ); ++ ++ void goSubMenu(const QString& relPath, bool keyboard = false); ++ void setOrientation(MenuOrientation orientation); ++ ++private: ++ int serviceMenuStartId() { return 5242; } ++ int serviceMenuEndId() { return 5242; } ++ ++ void fillMenu( KServiceGroup::Ptr &_root, KServiceGroup::List &_list, ++ const QString &_relPath, ItemView* view, int & id ); ++ ++ void fillSubMenu(const QString& relPath, ItemView *view); ++ ++ QPopupMenu *sessionsMenu; ++ int client_id; ++ bool delay_init; ++ QIntDict clients; ++ KActionCollection *actionCollection; ++ PopupMenuList dynamicSubMenus; ++ ++ QTimer m_sloppyTimer; ++ QTimer m_mediaFreeTimer; ++ MediaWatcher * m_mediaWatcher; ++ QRegion m_sloppyRegion; ++ QRect m_sloppySource; ++ bool m_sloppySourceClicked; ++ QWidget * m_sloppyWidget; ++ ItemView * m_recentlyView; ++ ItemView * m_favoriteView; ++ ItemView * m_searchResultsWidget; ++ QListView * m_searchActions; ++ FlipScrollView * m_browserView; ++ ItemView * m_systemView; ++ FlipScrollView * m_exitView; ++ QVBox * m_searchWidget; ++ QLabel * m_resizeHandle; ++ ++ bool m_isresizing; ++ // timer for search without pressing enter feature ++ QTimer *input_timer, *init_search_timer; ++ ++ Query current_query; ++ ++ bool dontQueryNow(const QString &); ++ ++ // start timeout timer to call doQuery is enough time has passed since last keypress ++ void checkToDoQuery (const QString &); ++ // when return is pressed ++ void doQueryNow (); ++ void clearSearchResults(bool showHelp = true); ++ ++ int *max_category_id; // maximum id in this category: max_category_id - base_category_id gives the current number of hits displayed in this category ++ int *categorised_hit_total; // current number of hits returned in each category ++ ++ bool ensureServiceRunning(const QString & service); ++ ++ QString iconForHitMenuItem(HitMenuItem *hit_item); ++ ++ int getHitMenuItemPosition (HitMenuItem *hit_item); ++ QMap mimetype_iconstore; ++ QMap media_mimetypes; ++ // report error as a menu item ++ void reportError (QString err); ++ void addToHistory(); ++ ++ int max_items(int category) const; ++ QString TOP_CATEGORY_STRING; ++ bool *already_added; ++ ++ void notifyServiceStarted(KService::Ptr service); ++ void parseLine( bool final ); ++ QString m_iconName; ++ QStringList m_middleFilters; ++ QStringList m_finalFilters; ++ KURIFilterData* m_filterData; ++ QPtrList m_current_menu_items; ++ QListViewItem *m_searchIndex, *m_searchInternet; ++ ++ bool checkUriInMenu(const KURL &uri); ++ ++ QRegExp emailRegExp,uriRegExp,uri2RegExp,authRegExp; ++ ++ KBookmarkManager *bookmarkManager; ++ KABC::AddressBook* m_addressBook; ++ ++ enum ContextMenuEntry { AddItemToPanel, EditItem, AddMenuToPanel, EditMenu, ++ AddItemToDesktop, AddMenuToDesktop, PutIntoRunDialog, ++ AddToFavorites, RemoveFromFavorites, ClearRecentlyUsedApps, ++ ClearRecentlyUsedDocs }; ++ struct PopupPath ++ { ++ QString title, description, icon, path, menuPath; ++ }; ++ ++ enum KickoffTabEntry { FavoriteTab, ApplicationsTab, ComputerTab, ++ HistoryTab, LeaveTab, SearchTab, NumTabs }; ++ ++ KPopupMenu* m_popupMenu; ++ KService* m_popupService; ++ PopupPath m_popupPath; ++ ++ KickoffTabBar* m_tabBar; ++ QTab* m_tabs[NumTabs]; ++ ++ QString newDesktopFile(const KURL& url, const QString &directory); ++ void updateRecentlyUsedApps(KService::Ptr &service); ++ ++ QPixmap main_border_lc; ++ QPixmap main_border_rc; ++ QPixmap main_border_tl; ++ QPixmap main_border_tr; ++ QPixmap button_box_left; ++ ++ QPixmap search_tab_left; ++ QPixmap search_tab_right; ++ QPixmap search_tab_center; ++ ++ QPixmap search_tab_top_left; ++ QPixmap search_tab_top_right; ++ QPixmap search_tab_top_center; ++ ++ QWidgetStack *m_stacker; ++ ++ QStringList m_programsInMenu; ++ QStringList m_newInstalledPrograms, m_seenPrograms; ++ bool m_seenProgramsChanged; ++ QString m_currentDate; ++ ++ MenuOrientation m_orientation; ++ bool m_toolTipsEnabled; ++ int m_media_id; ++ ++ bool m_recentDirty, m_browserDirty, m_kerryInstalled, m_isShowing; ++ ++ KickoffSearch::Plugin* m_search_plugin; ++ QObject* m_search_plugin_interface; ++ ++ OverflowCategoryState m_overflowCategoryState; ++ QPtrList m_overflowList; ++ int m_overflowCategory; ++ ++ void resetOverflowCategory(); ++ void fillOverflowCategory(); ++ ++ QString insertBreaks(const QString& text, QFontMetrics fm, int width, QString leadInsert = QString::null); ++}; ++ ++#endif +--- kicker/ui/appletop_mnu.cpp (Revision 849788) ++++ kicker/ui/appletop_mnu.cpp (Revision 849791) +@@ -30,6 +30,7 @@ + #include "appletop_mnu.h" + #include "container_button.h" + #include "containerarea.h" ++#include "kickerSettings.h" + + PanelAppletOpMenu::PanelAppletOpMenu(int actions, QPopupMenu *opMenu, const QPopupMenu* appletsMenu, + const QString & title, const QString &icon, +@@ -159,6 +160,20 @@ + } + } + ++ if ((actions & PanelAppletOpMenu::KMenuEditor)) ++ { ++ if (needSeparator) ++ { ++ insertSeparator(); ++ needSeparator = false; ++ } ++ ++ if (KickerSettings::legacyKMenu()) ++ insertItem(SmallIcon("suse"), i18n("Switch to SUSE Menu Style"), this, SLOT(toggleLegacy())); ++ else ++ insertItem(SmallIcon("about_kde"), i18n("Switch to KDE Menu Style"), this, SLOT(toggleLegacy())); ++ } ++ + if ((actions & PanelAppletOpMenu::KMenuEditor) && kapp->authorizeKAction("menuedit")) + { + if (needSeparator) +@@ -205,4 +220,11 @@ + QPopupMenu::keyPressEvent(e); + } + ++void PanelAppletOpMenu::toggleLegacy() ++{ ++ KickerSettings::setLegacyKMenu(!KickerSettings::legacyKMenu()); ++ KickerSettings::writeConfig(); ++ Kicker::the()->restart(); ++} ++ + #include "appletop_mnu.moc" +--- kicker/ui/kmenubase.ui (Revision 0) ++++ kicker/ui/kmenubase.ui (Revision 849791) +@@ -0,0 +1,300 @@ ++ ++KMenuBase ++ ++ ++ KMenu ++ ++ ++ ++ 0 ++ 0 ++ 723 ++ 580 ++ ++ ++ ++ KMenu ++ ++ ++ MShadow ++ ++ ++ MShape ++ ++ ++ ++ m_search ++ ++ ++ ++ 20 ++ 40 ++ 190 ++ 54 ++ ++ ++ ++ ++ unnamed ++ ++ ++ 0 ++ ++ ++ 0 ++ ++ ++ ++ m_searchFrame ++ ++ ++ ++ 5 ++ 0 ++ 0 ++ 0 ++ ++ ++ ++ ++ 0 ++ 52 ++ ++ ++ ++ ++ 32767 ++ 52 ++ ++ ++ ++ StyledPanel ++ ++ ++ Raised ++ ++ ++ 0 ++ ++ ++ ++ unnamed ++ ++ ++ ++ layout18 ++ ++ ++ ++ unnamed ++ ++ ++ ++ m_searchLabel ++ ++ ++ ParentOrigin ++ ++ ++ ++ 14 ++ ++ ++ ++ Search: ++ ++ ++ ++ ++ m_kcommand ++ ++ ++ ++ 7 ++ 0 ++ 0 ++ 0 ++ ++ ++ ++ ++ ++ m_searchPixmap ++ ++ ++ ++ 1 ++ 1 ++ 0 ++ 0 ++ ++ ++ ++ ++ 32 ++ 32 ++ ++ ++ ++ ++ 32 ++ 32 ++ ++ ++ ++ PaletteBackground ++ ++ ++ ParentOrigin ++ ++ ++ true ++ ++ ++ ++ ++ ++ ++ ++ ++ spacer5_2 ++ ++ ++ Horizontal ++ ++ ++ Preferred ++ ++ ++ ++ 16 ++ 20 ++ ++ ++ ++ ++ ++ ++ ++ m_footer ++ ++ ++ ++ 20 ++ 110 ++ 407 ++ 34 ++ ++ ++ ++ ++ unnamed ++ ++ ++ 4 ++ ++ ++ 4 ++ ++ ++ ++ m_userInfo ++ ++ ++ ++ 3 ++ 0 ++ 0 ++ 0 ++ ++ ++ ++ User&nbsp;<b>user</b>&nbsp;on&nbsp;<b>host</b> ++ ++ ++ ++ ++ spacer13_2 ++ ++ ++ Horizontal ++ ++ ++ MinimumExpanding ++ ++ ++ ++ 10 ++ 20 ++ ++ ++ ++ ++ ++ m_branding ++ ++ ++ ++ 4 ++ 4 ++ 0 ++ 0 ++ ++ ++ ++ ++ 90 ++ 24 ++ ++ ++ ++ ++ ++ ++ image0 ++ ++ ++ true ++ ++ ++ true ++ ++ ++ ++ ++ spacer13 ++ ++ ++ Horizontal ++ ++ ++ Fixed ++ ++ ++ ++ 14 ++ 20 ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ 789cdd933d6fdb30104077ff0a21de8c82b12d5bb2507448f6021d0b141dc82369d9116d7d50b1ada2ffbdbca3c4444950244032b4b790efce7cd29de8eb59f4fddbd768763d692cb73b8820e7753493ad31971f3fbffc9a5c6d36d17219c5f36871f56972e57e104dd7324be325a2464cd24cc60a5120a6731eaf046241c879b64e113bc44dcc751223da802bc41de16ac092508a753a4754885922440a8892301332a5e79e10f91c169b0cf1963083345b231a423ee0bec78dc71c51c420393578249432e664be2354d2bd17628d0889cc0447bc20cab9d490205601a9df29e142cd3d9e0933b59234ba0321576b49d3d8f69878bc41544b952a6abf218c9590f41a9c70a5c0e33d21e885a2e1b4883ad1a9de2032420ac20f8affde3df5415bdea7f8b8c0fbed507fa59b0bf02119739f9172b46e755fc819dbf55bd07ba15fef0ec7f6b41f728c0dcf84bbc76ebedfbfde0d2042eb8fdd5b801de5b794281e06f716f7ee710f619d5227a1b01b1d0aeedc18e366660ec7b2ac18ab1d1a9745acd1ad3161f28631dbbb716d86c29112c2f86363770ec20a383a89b51a9a06b4b5503a2c10dd771b46d98cdcac180a052528cc13b781b6bd7759506d5b435541ddb6161cba16c0f5a174383872b3729057c19dbfe06ed16ddab642b7324638b77b870add3eaae76e1fb577db17e7fdcc5d586bcd5fddc59bdda7deed7d83db580a81ee93bb906eefd4ee0fa24201ddda53f9d4ad4ce92605fae466713843614ceddd17b83008d1b06618bd2b5e42de3da70b7019dfc1b2eb3af7e140a9ae7342d3d152babb75ee1a76ea7c9478ea5c92bd3bf6c7a870f6677cdc8cdd7d840bf40ef1cc7dfb716efd81eef78c7fd6fdfbf3e40f51236246 ++ ++ ++ ++ kmenubase.ui.h ++ ++ ++ init() ++ ++ ++ ++ kcombobox.h ++ ++ +--- kicker/ui/kickoff_bar.h (Revision 0) ++++ kicker/ui/kickoff_bar.h (Revision 849791) +@@ -0,0 +1,53 @@ ++/***************************************************************** ++ ++ Copyright (c) 1996-2000 the kicker authors. See file AUTHORS. ++ Copyright (c) 2006 Dirk Mueller ++ ++ This program is free software; you can redistribute it and/or ++ modify it under the terms of the GNU General Public ++ License as published by the Free Software Foundation; either ++ version 2 of the License, or (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with this program; see the file COPYING. If not, write to ++ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ++ Boston, MA 02110-1301, USA. ++ ++******************************************************************/ ++ ++#ifndef __kickoff_bar_h__ ++#define __kickoff_bar_h__ ++ ++#include ++ ++class KickoffTabBar : public QTabBar ++{ ++ Q_OBJECT ++public: ++ KickoffTabBar(QWidget* parent, const char* name); ++ ++ void deactivateTabs(bool b); ++ virtual QSize sizeHint() const; ++ ++protected: ++ virtual void paint(QPainter*, QTab*, bool) const; ++ virtual void paintLabel(QPainter* p, const QRect& br, QTab* t, bool has_focus) const; ++ virtual void layoutTabs(); ++ virtual void dragEnterEvent(QDragEnterEvent*); ++ virtual void dragMoveEvent(QDragMoveEvent*); ++ virtual void mousePressEvent ( QMouseEvent * ); ++ ++signals: ++ void tabClicked(QTab*); ++ ++private: ++ bool m_tabsActivated; ++}; ++ ++ ++#endif +--- kicker/ui/k_mnu_stub.cpp (Revision 0) ++++ kicker/ui/k_mnu_stub.cpp (Revision 849791) +@@ -0,0 +1,141 @@ ++/***************************************************************** ++ ++Copyright (c) 2006 Dirk Mueller ++ ++Permission is hereby granted, free of charge, to any person obtaining a copy ++of this software and associated documentation files (the "Software"), to deal ++in the Software without restriction, including without limitation the rights ++to use, copy, modify, merge, publish, distribute, sublicense, and/or sell ++copies of the Software, and to permit persons to whom the Software is ++furnished to do so, subject to the following conditions: ++ ++The above copyright notice and this permission notice shall be included in ++all copies or substantial portions of the Software. ++ ++THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR ++IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, ++FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE ++AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN ++AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN ++CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ++ ++******************************************************************/ ++ ++#include "k_mnu_stub.h" ++#include "k_new_mnu.h" ++#include "k_mnu.h" ++ ++void KMenuStub::removeClientMenu(int id) ++{ ++ if(m_type == t_KMenu) ++ return m_w.kmenu->removeClientMenu(id); ++ return m_w.panelkmenu->removeClientMenu(id); ++} ++ ++int KMenuStub::insertClientMenu(KickerClientMenu *p) ++{ ++ if(m_type == t_KMenu) ++ return m_w.kmenu->insertClientMenu(p); ++ return m_w.panelkmenu->insertClientMenu(p); ++} ++ ++void KMenuStub::adjustSize() ++{ ++ if(m_type == t_KMenu) ++ return m_w.kmenu->adjustSize(); ++ return m_w.panelkmenu->adjustSize(); ++} ++ ++void KMenuStub::hide() ++{ ++ if(m_type == t_KMenu) ++ return m_w.kmenu->hide(); ++ return m_w.panelkmenu->hide(); ++} ++ ++void KMenuStub::show() ++{ ++ if(m_type == t_KMenu) ++ return m_w.kmenu->show(); ++ return m_w.panelkmenu->show(); ++} ++ ++void KMenuStub::showMenu() ++{ ++ if(m_type == t_KMenu) ++ return m_w.kmenu->showMenu(); ++ return m_w.panelkmenu->showMenu(); ++} ++ ++#if 0 ++void KMenuStub::resize() ++{ ++ if(m_type == t_KMenu) ++ return m_w.kmenu->resize(); ++ return m_w.panelkmenu->resize(); ++} ++#endif ++ ++void KMenuStub::popup(const QPoint &pos, int indexAtPoint) ++{ ++ return m_type == t_KMenu ? ++ m_w.kmenu->popup(pos, indexAtPoint) ++ : m_w.panelkmenu->popup(pos, indexAtPoint); ++} ++ ++void KMenuStub::selectFirstItem() ++{ ++ if(m_type == t_KMenu) ++ return m_w.kmenu->selectFirstItem(); ++ return m_w.panelkmenu->selectFirstItem(); ++} ++ ++void KMenuStub::resize(int w, int h) ++{ ++ if(m_type == t_KMenu) ++ return m_w.kmenu->resize(w, h); ++ return m_w.panelkmenu->resize(w, h); ++} ++ ++QSize KMenuStub::sizeHint() const ++{ ++ if(m_type == t_KMenu) ++ return m_w.kmenu->sizeHint(); ++ return m_w.panelkmenu->sizeHint(); ++} ++ ++bool KMenuStub::highlightMenuItem( const QString &menuId ) ++{ ++ if(m_type == t_KMenu) ++ return m_w.kmenu->highlightMenuItem(menuId); ++ return m_w.panelkmenu->highlightMenuItem(menuId); ++} ++ ++void KMenuStub::clearRecentMenuItems() ++{ ++ if(m_type == t_KMenu) ++ return m_w.kmenu->clearRecentAppsItems(); ++ return m_w.panelkmenu->clearRecentMenuItems(); ++} ++ ++void KMenuStub::initialize() ++{ ++ if(m_type == t_KMenu) ++ return m_w.kmenu->initialize(); ++ return m_w.panelkmenu->initialize(); ++} ++ ++bool KMenuStub::isVisible() const ++{ ++ if(m_type == t_KMenu) ++ return m_w.kmenu->isVisible(); ++ return m_w.panelkmenu->isVisible(); ++} ++ ++QWidget* KMenuStub::widget() ++{ ++ if(m_type == t_KMenu) ++ return m_w.kmenu; ++ return m_w.panelkmenu; ++} ++ +--- kicker/ui/kmenubase.ui.h (Revision 0) ++++ kicker/ui/kmenubase.ui.h (Revision 849791) +@@ -0,0 +1,9 @@ ++#include ++ ++void KMenuBase::init() ++{ ++ XSetWindowAttributes attrs; ++ attrs.override_redirect = True; ++ XChangeWindowAttributes( qt_xdisplay(), winId(), CWOverrideRedirect, &attrs ); ++ setWFlags( Qt::WType_Popup ); ++} +--- kicker/ui/mykickoffsearchinterface.h (Revision 0) ++++ kicker/ui/mykickoffsearchinterface.h (Revision 849791) +@@ -0,0 +1,47 @@ ++/*************************************************************************** ++ * Copyright (C) 2006 by Stephan Binner * ++ * * ++ * This program is free software; you can redistribute it and/or modify * ++ * it under the terms of the GNU General Public License as published by * ++ * the Free Software Foundation; either version 2 of the License, or * ++ * (at your option) any later version. * ++ * * ++ * This program is distributed in the hope that it will be useful, * ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of * ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * ++ * GNU General Public License for more details. * ++ * * ++ * You should have received a copy of the GNU General Public License * ++ * along with this program; if not, write to the * ++ * Free Software Foundation, Inc., * ++ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * ++ ***************************************************************************/ ++ ++#ifndef MYKICKOFFSEARCHINTERFACE_H ++#define MYKICKOFFSEARCHINTERFACE_H ++ ++#include "../interfaces/kickoffsearchinterface.h" ++ ++class KMenu; ++ ++using namespace KickoffSearch; ++ ++class MyKickoffSearchInterface :public KickoffSearchInterface ++{ ++ Q_OBJECT ++ ++public: ++ MyKickoffSearchInterface( KMenu*, QObject* parent, const char* name = 0 ); ++ ++ bool anotherHitMenuItemAllowed(int cat); ++ void addHitMenuItem(HitMenuItem* item); ++ void searchOver(); ++ void initCategoryTitlesUpdate(); ++ void updateCategoryTitles(); ++ ++private: ++ KMenu* _menu; ++ ++}; ++ ++#endif /* MYKICKOFFSEARCHINTERFACE_H */ +--- kicker/ui/itemview.h (Revision 0) ++++ kicker/ui/itemview.h (Revision 849791) +@@ -0,0 +1,260 @@ ++/***************************************************************** ++ ++Copyright (c) 1996-2000 the kicker authors. See file AUTHORS. ++ ++Permission is hereby granted, free of charge, to any person obtaining a copy ++of this software and associated documentation files (the "Software"), to deal ++in the Software without restriction, including without limitation the rights ++to use, copy, modify, merge, publish, distribute, sublicense, and/or sell ++copies of the Software, and to permit persons to whom the Software is ++furnished to do so, subject to the following conditions: ++ ++The above copyright notice and this permission notice shall be included in ++all copies or substantial portions of the Software. ++ ++THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR ++IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, ++FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE ++AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN ++AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN ++CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ++ ++******************************************************************/ ++ ++#ifndef __itemview_h__ ++#define __itemview_h__ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include "kmenubase.h" ++#include "kmenuitembase.h" ++#include "service_mnu.h" ++ ++class KickerClientMenu; ++class KBookmarkMenu; ++class KActionCollection; ++class KBookmarkOwner; ++class Panel; ++class QWidgetStack; ++class KHistoryCombo; ++class QScrollView; ++class PopupMenuTitle; ++class QWidget; ++class QVBoxLayout; ++class QTimer; ++class KPixmap; ++ ++class KMenuItem : public QListViewItem ++{ ++public: ++ KMenuItem(int nId, QListView* parent) : QListViewItem(parent), m_id(nId) { init(); } ++ KMenuItem(int nId, QListViewItem* parent) : QListViewItem(parent), m_id(nId) { init(); } ++ ~KMenuItem(); ++ ++ void setIcon(const QString& icon, int size); ++ QString icon() const { return m_icon; } ++ void setTitle( const QString& text ); ++ QString title() const { return m_title; } ++ void setToolTip( const QString& text ); ++ QString toolTip() const { return m_tooltip; } ++ void setDescription(const QString& text); ++ QString description() const { return m_description; } ++ void setService(KService::Ptr& s) { m_s = s; } ++ KService::Ptr service() { return m_s; } ++ void setPath(const QString& u) { m_path = u; } ++ QString path() const { return m_path; } ++ void setMenuPath(const QString& u) { m_menuPath = u; } ++ QString menuPath() const { return m_menuPath; } ++ int id() const { return m_id; } ++ void setHasChildren(bool flag); ++ bool hasChildren() const { return m_has_children; } ++ void makeGradient(KPixmap &off, const QColor& c); ++ ++protected: ++ virtual void paintCell(QPainter* p, const QColorGroup & cg, int column, int width, int align); ++ virtual void paintCellInter(QPainter* p, const QColorGroup & cg, int column, int width, int align); ++ virtual void setup(); ++ ++private: ++ void init(); ++ ++ int m_id; ++ KService::Ptr m_s; ++ QString m_title; ++ QString m_description; ++ QString m_path; ++ QString m_icon; ++ QString m_tooltip; ++ QString m_menuPath; ++ float title_font_size; ++ float description_font_size; ++ bool m_has_children; ++ int m_old_width; ++ QPixmap right_triangle; ++}; ++ ++class KMenuItemSeparator : public KMenuItem ++{ ++public: ++ KMenuItemSeparator(int nId, QListView* parent); ++ virtual void setup(); ++ ++ virtual void paintCell(QPainter* p, const QColorGroup & cg, int column, int width, int align); ++ void setLink(const QString &text, const QString &link = QString::null ); ++ ++ QString linkUrl() const { return m_link_url; } ++ ++ /// returns true if the cursor has to change ++ bool hitsLink(const QPoint &pos); ++ ++protected: ++ void preparePixmap(int width); ++ QPixmap pixmap; ++ int left_margin; ++ ++private: ++ QListView* lv; ++ int cached_width; ++ QString m_link_text, m_link_url; ++ QRect m_link_rect; ++ ++}; ++ ++class KMenuItemHeader : public KMenuItemSeparator ++{ ++public: ++ KMenuItemHeader( int nId, const QString &relpath, QListView* parent); ++ virtual void setup(); ++ ++ virtual void paintCell(QPainter* p, const QColorGroup & cg, int column, int width, int align); ++ ++private: ++ QListView* lv; ++ QStringList paths; ++ QStringList texts; ++ QStringList icons; ++ QPixmap left_triangle; ++}; ++ ++class KMenuSpacer : public KMenuItem ++{ ++public: ++ KMenuSpacer(int nId, QListView* parent); ++ virtual void paintCell(QPainter* p, const QColorGroup & cg, int column, int width, int align); ++ virtual void setup(); ++ ++ void setHeight(int); ++}; ++ ++class ItemView : public KListView ++{ ++ friend class KMenuItem; ++ ++ Q_OBJECT ++public: ++ ItemView(QWidget* parent, const char* name = 0); ++ ++ KMenuItem* insertItem( const QString& icon, const QString& text, const QString& description, int nId, int nIndex, KMenuItem* parentItem = 0 ); ++ KMenuItem* insertItem( const QString& icon, const QString& text, const QString& description, const QString& path, int nId, int nIndex, KMenuItem* parentItem = 0 ); ++ int insertItem( PopupMenuTitle*, int, int); ++ int setItemEnabled(int id, bool enabled); ++ KMenuItemSeparator *insertSeparator(int id, const QString& text, int nIndex); ++ KMenuItemHeader *insertHeader(int id, const QString &relpath); ++ KMenuItem* insertMenuItem(KService::Ptr & s, int nId, int nIndex = -1, KMenuItem* parentItem = 0, ++ const QString &aliasname = QString::null, const QString &label = QString::null, ++ const QString &categoryIcon = QString::null); ++ KMenuItem* insertRecentlyItem(const QString& s, int nId, int nIndex = -1); ++ KMenuItem* insertDocumentItem(const QString& s, int nId, int nIndex = -1 , const QStringList* suppressGenericNames = 0, ++ const QString& aliasname = QString::null); ++ KMenuItem* insertSubItem(const QString& icon, const QString& caption, const QString& description, const QString& path, KMenuItem* parentItem); ++ KMenuItem* findItem(int nId); ++ ++ void setIconSize(int size) { m_iconSize = size; } ++ void setMouseMoveSelects(bool select) { m_mouseMoveSelects = select; } ++ void clear(); ++ int goodHeight(); ++ QString path; ++ void setBackPath( const QString &str ) { m_back_url = str; } ++ QString backPath() const { return m_back_url; } ++ ++public slots: ++ void slotItemClicked(QListViewItem*); ++ void slotMoveContent(); ++ ++signals: ++ void startService(KService::Ptr kservice); ++ void startURL(const QString& u); ++ ++protected: ++ void contentsMouseMoveEvent(QMouseEvent *e); ++ void contentsMousePressEvent ( QMouseEvent * e ); ++ void contentsWheelEvent(QWheelEvent *e); ++ void leaveEvent(QEvent *e); ++ virtual void resizeEvent ( QResizeEvent * e ); ++ virtual void viewportPaintEvent ( QPaintEvent * pe ); ++ virtual QDragObject* dragObject (); ++ virtual bool acceptDrag (QDropEvent* event) const; ++ virtual bool focusNextPrevChild(bool next); ++ ++private slots: ++ void slotItemClicked(int button, QListViewItem * item, const QPoint & pos, int c ); ++ ++private: ++ KMenuItem* itemAtIndex(int nIndex); ++ void moveItemToIndex(KMenuItem*, int); ++ ++ QWidget* m_itemBox; ++ QVBoxLayout* m_itemLayout; ++ KMenuItem *m_lastOne; ++ KMenuSpacer *m_spacer; ++ ++ QString m_back_url; ++ ++ bool m_mouseMoveSelects; ++ int m_iconSize; ++ int m_old_contentY; ++}; ++ ++class FavoritesItemView : public ItemView ++{ ++public: ++ FavoritesItemView(QWidget* parent, const char* name = 0); ++ ++protected: ++ virtual bool acceptDrag (QDropEvent* event) const; ++}; ++ ++class KMenuItemInfo ++{ ++public: ++ int m_id; ++ KService::Ptr m_s; ++ QString m_title; ++ QString m_description; ++ QString m_path; ++ QString m_icon; ++}; ++ ++class KMenuItemDrag : public QDragObject ++{ ++ public: ++ KMenuItemDrag(KMenuItem& item, QWidget *dragSource); ++ ~KMenuItemDrag(); ++ ++ virtual const char * format(int i = 0) const; ++ virtual QByteArray encodedData(const char *) const; ++ ++ static bool canDecode(const QMimeSource * e); ++ static bool decode(const QMimeSource* e, KMenuItemInfo& item); ++ ++ private: ++ QByteArray a; ++}; ++ ++#endif +--- kicker/ui/default-favs (Revision 0) ++++ kicker/ui/default-favs (Revision 849791) +@@ -0,0 +1,9 @@ ++MozillaFirefox.desktop ++kde-Kontact.desktop ++writer.desktop ++kde-amarok.desktop ++kde-digikam.desktop ++kde-Home.desktop ++kde-KControl.desktop ++kde-Help.desktop ++kde-konsole.desktop +--- kicker/ui/query.h (Revision 0) ++++ kicker/ui/query.h (Revision 849791) +@@ -0,0 +1,55 @@ ++/***************************************************************** ++ ++ Copyright (c) 2006 Stephan Binner ++ ++ This program is free software; you can redistribute it and/or ++ modify it under the terms of the GNU General Public ++ License as published by the Free Software Foundation; either ++ version 2 of the License, or (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with this program; see the file COPYING. If not, write to ++ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ++ Boston, MA 02110-1301, USA. ++ ++******************************************************************/ ++ ++#ifndef QUERY_H ++#define QUERY_H ++ ++#include ++#include ++ ++class Alternative ++{ ++public: ++ QStringList includes; ++ QStringList excludes; ++}; ++ ++class Query ++{ ++ public: ++ Query(); ++ void clear(); ++ void set(const QString &); ++ QString get() const; ++ bool matches(const QString &); ++ ++ private: ++ QString query_term; ++ QPtrList alternatives; ++ ++ void add_term(); ++ QString current_part; ++ Alternative *current_alternative; ++ bool within_quotes; ++ bool exclude_part; ++}; ++ ++#endif +--- kicker/ui/k_mnu_stub.h (Revision 0) ++++ kicker/ui/k_mnu_stub.h (Revision 849791) +@@ -0,0 +1,72 @@ ++/***************************************************************** ++ ++Copyright (c) 2006 Dirk Mueller ++ ++Permission is hereby granted, free of charge, to any person obtaining a copy ++of this software and associated documentation files (the "Software"), to deal ++in the Software without restriction, including without limitation the rights ++to use, copy, modify, merge, publish, distribute, sublicense, and/or sell ++copies of the Software, and to permit persons to whom the Software is ++furnished to do so, subject to the following conditions: ++ ++The above copyright notice and this permission notice shall be included in ++all copies or substantial portions of the Software. ++ ++THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR ++IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, ++FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE ++AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN ++AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN ++CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ++ ++******************************************************************/ ++ ++#ifndef __k_mnu_stub_h__ ++#define __k_mnu_stub_h__ ++ ++#include ++#include ++ ++class KickerClientMenu; ++class KMenu; ++class PanelKMenu; ++ ++ ++ ++ ++class KMenuStub ++{ ++public: ++ KMenuStub(KMenu* _kmenu) ++ : m_type(t_KMenu) { m_w.kmenu = _kmenu; } ++ KMenuStub(PanelKMenu* _panelkmenu) ++ : m_type(t_PanelKMenu) { m_w.panelkmenu = _panelkmenu; } ++ ~KMenuStub() {} ++ ++ void removeClientMenu(int id); ++ int insertClientMenu(KickerClientMenu *p); ++ void adjustSize(); ++ void hide(); ++ void show(); ++ void showMenu(); ++ void resize(); ++ void popup(const QPoint &pos, int indexAtPoint = -1); ++ void selectFirstItem(); ++ void resize(int, int); ++ QSize sizeHint() const; ++ bool highlightMenuItem( const QString &menuId ); ++ void clearRecentMenuItems(); ++ void initialize(); ++ ++ QWidget* widget(); ++ ++ bool isVisible() const; ++private: ++ enum {t_PanelKMenu, t_KMenu} m_type; ++ union { ++ KMenu* kmenu; ++ PanelKMenu* panelkmenu; ++ } m_w; ++}; ++ ++#endif +--- kicker/ui/Makefile.am (Revision 849788) ++++ kicker/ui/Makefile.am (Revision 849791) +@@ -1,38 +1,46 @@ + INCLUDES = -I$(srcdir)/../core -I../core -I$(srcdir)/../buttons \ + -I../../libkicker -I$(srcdir)/../../libkicker \ +- -I$(top_srcdir)/libkonq -I$(top_srcdir)/kdmlib $(all_includes) ++ -I$(top_srcdir)/libkonq -I$(top_srcdir)/kdmlib $(DBUS_INCS) $(all_includes) + + noinst_LTLIBRARIES = libkicker_ui.la + ++libkicker_ui_la_COMPILE_FIRST = kmenubase.h ++ + libkicker_ui_la_SOURCES = addbutton_mnu.cpp appletitem.ui appletview.ui addapplet.cpp \ + addapplet_mnu.cpp appletop_mnu.cpp \ + browser_mnu.cpp client_mnu.cpp dirdrop_mnu.cpp \ +- nonKDEButtonSettings.ui exe_dlg.cpp k_mnu.cpp k_mnu.skel\ +- quickbrowser_mnu.cpp service_mnu.cpp \ +- addextension_mnu.cpp extensionop_mnu.cpp \ +- recentapps.cpp browser_dlg.cpp \ ++ nonKDEButtonSettings.ui exe_dlg.cpp k_new_mnu.cpp k_mnu.cpp k_mnu.skel\ ++ quickbrowser_mnu.cpp service_mnu.cpp kmenubase.ui kmenuitembase.ui \ ++ addextension_mnu.cpp extensionop_mnu.cpp k_mnu_stub.cpp \ ++ recentapps.cpp browser_dlg.cpp itemview.cpp kickoff_bar.cpp \ + removeapplet_mnu.cpp removeextension_mnu.cpp removecontainer_mnu.cpp \ + removebutton_mnu.cpp popupmenutitle.cpp hidebutton.cpp \ +- addappletvisualfeedback.cpp ++ addappletvisualfeedback.cpp flipscrollview.cpp \ ++ media_watcher.cpp media_watcher.skel mykickoffsearchinterface.cpp query.cpp + +-libkicker_ui_la_LIBADD = $(top_builddir)/libkonq/libkonq.la $(top_builddir)/kdmlib/libdmctl.la ++libkicker_ui_la_LIBADD = $(top_builddir)/libkonq/libkonq.la $(top_builddir)/kdmlib/libdmctl.la \ ++ $(LIB_KABC) ../interfaces/libkickoffsearch_interfaces.la -llazy + + libkicker_ui_la_METASOURCES = AUTO + + noinst_HEADERS = addapplet.h appletwidget.h addbutton_mnu.h addapplet_mnu.h appletop_mnu.h \ +- browser_mnu.h client_mnu.h dirdrop_mnu.h exe_dlg.h k_mnu.h \ ++ browser_mnu.h client_mnu.h dirdrop_mnu.h exe_dlg.h k_new_mnu.h k_mnu.h \ + quickbrowser_mnu.h service_mnu.h \ + addextension_mnu.h extensionop_mnu.h \ +- recentapps.h browser_dlg.h \ ++ recentapps.h browser_dlg.h itemview.h query.h \ + removeapplet_mnu.h removeextension_mnu.h removecontainer_mnu.h \ + removebutton_mnu.h popupmenutitle.h hidebutton.h addappletvisualfeedback.h + ++kicker_ui_data_DATA = default-favs ++kicker_ui_datadir = $(kde_datadir)/kicker ++ + removecontainer_mnu.lo: ../../libkicker/kickerSettings.h + removeextension_mnu.lo: ../../libkicker/kickerSettings.h + addextension_mnu.lo: ../core/extensionSettings.h + appletop_mnu.lo: ../../libkicker/kickerSettings.h + extensionop_mnu.lo: ../../libkicker/kickerSettings.h + k_mnu.lo: ../../libkicker/kickerSettings.h ++k_new_mnu.lo: ../../libkicker/kickerSettings.h + removecontainer_mnu.lo: ../core/extensionSettings.h + removeextension_mnu.lo: ../core/extensionSettings.h + service_mnu.lo: ../../libkicker/kickerSettings.h +--- kicker/ui/mykickoffsearchinterface.cpp (Revision 0) ++++ kicker/ui/mykickoffsearchinterface.cpp (Revision 849791) +@@ -0,0 +1,54 @@ ++/*************************************************************************** ++ * Copyright (C) 2006 by Stephan Binner * ++ * * ++ * This program is free software; you can redistribute it and/or modify * ++ * it under the terms of the GNU General Public License as published by * ++ * the Free Software Foundation; either version 2 of the License, or * ++ * (at your option) any later version. * ++ * * ++ * This program is distributed in the hope that it will be useful, * ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of * ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * ++ * GNU General Public License for more details. * ++ * * ++ * You should have received a copy of the GNU General Public License * ++ * along with this program; if not, write to the * ++ * Free Software Foundation, Inc., * ++ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * ++ ***************************************************************************/ ++ ++#include "mykickoffsearchinterface.h" ++#include "../ui/k_new_mnu.h" ++ ++MyKickoffSearchInterface::MyKickoffSearchInterface( KMenu* menu, QObject* parent, const char* name ) ++ : KickoffSearchInterface( parent, name ), _menu( menu ) ++{ ++} ++ ++bool MyKickoffSearchInterface::anotherHitMenuItemAllowed(int cat) ++{ ++ return _menu->anotherHitMenuItemAllowed(cat); ++} ++ ++void MyKickoffSearchInterface::addHitMenuItem(HitMenuItem* item) ++{ ++ _menu->addHitMenuItem(item); ++} ++ ++ ++void MyKickoffSearchInterface::searchOver() ++{ ++ _menu->searchOver(); ++} ++ ++void MyKickoffSearchInterface::initCategoryTitlesUpdate() ++{ ++ _menu->initCategoryTitlesUpdate(); ++} ++ ++void MyKickoffSearchInterface::updateCategoryTitles() ++{ ++ _menu->updateCategoryTitles(); ++} ++ ++#include "mykickoffsearchinterface.moc" +--- kicker/ui/itemview.cpp (Revision 0) ++++ kicker/ui/itemview.cpp (Revision 849791) +@@ -0,0 +1,1257 @@ ++/***************************************************************** ++ ++Copyright (c) 1996-2000 the kicker authors. See file AUTHORS. ++ ++Permission is hereby granted, free of charge, to any person obtaining a copy ++of this software and associated documentation files (the "Software"), to deal ++in the Software without restriction, including without limitation the rights ++to use, copy, modify, merge, publish, distribute, sublicense, and/or sell ++copies of the Software, and to permit persons to whom the Software is ++furnished to do so, subject to the following conditions: ++ ++The above copyright notice and this permission notice shall be included in ++all copies or substantial portions of the Software. ++ ++THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR ++IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, ++FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE ++AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN ++AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN ++CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ++ ++******************************************************************/ ++ ++#include ++#include ++#include ++#include ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include "client_mnu.h" ++#include "container_base.h" ++#include "global.h" ++#include "kbutton.h" ++#include "kicker.h" ++#include "kickerSettings.h" ++#include "konqbookmarkmanager.h" ++#include "menuinfo.h" ++#include "menumanager.h" ++#include "popupmenutitle.h" ++#include "quickbrowser_mnu.h" ++#include "recentapps.h" ++ ++#include "k_mnu.h" ++#include "k_new_mnu.h" ++#include "itemview.h" ++ ++// -------------------------------------------------------------------------- ++ ++KMenuItem::~KMenuItem() ++{ ++ ItemView *listview = dynamic_cast( listView() ); ++ if ( listview && listview->m_lastOne == this) { ++ listview->m_lastOne = 0; ++ listview->m_old_contentY = -1; ++ } ++} ++ ++static double pointSize( double pixelSize, QPaintDevice *w ) ++{ ++ return pixelSize * 72. / QPaintDevice::x11AppDpiY( w->x11Screen () ); ++} ++ ++static int pixelSize( double pixelSize, QPaintDevice *w ) ++{ ++ return qRound( pixelSize * QPaintDevice::x11AppDpiY( w->x11Screen () ) / 72. ); ++} ++ ++void KMenuItem::init() ++{ ++ setMultiLinesEnabled(true); ++ m_s = 0; ++ m_path = QString::null; ++ m_icon = QString::null; ++ m_menuPath = QString::null; ++ setDragEnabled(true); ++ m_has_children = false; ++ m_old_width = -1; ++ if ( QApplication::reverseLayout() ) ++ right_triangle.load( locate( "data", "kicker/pics/left_triangle.png" ) ); ++ else ++ right_triangle.load( locate( "data", "kicker/pics/right_triangle.png" ) ); ++} ++ ++void KMenuItem::setTitle(const QString& txt) ++{ ++ m_title = txt; ++ setText( 0, txt ); ++ setup(); ++} ++ ++void KMenuItem::setToolTip(const QString& txt) ++{ ++ m_tooltip = txt; ++} ++ ++void KMenuItem::setDescription(const QString& txt) ++{ ++ m_description = txt; ++ setup(); ++} ++ ++void KMenuItem::setIcon(const QString& icon, int size) ++{ ++ m_icon = icon; ++ QListViewItem::setPixmap(0, KGlobal::iconLoader()->loadIcon(icon, KIcon::Panel, size )); ++} ++ ++void KMenuItem::setHasChildren( bool flag ) ++{ ++ m_has_children = flag; ++ repaint(); ++} ++ ++void KMenuItem::setup() ++{ ++ // if someone configured a larger generalFont than 10pt, he might have a _real_ problem with 7pt ++ // the 7pt could be read out of konquerorrc I guess ++ float min_font_size = 7. * QMAX(1., KGlobalSettings::generalFont().pointSizeFloat() / 10.); ++ ++ const int expected_height = 38; ++ description_font_size = QMAX( pointSize( expected_height * .3, listView() ) + KickerSettings::kickoffFontPointSizeOffset(), min_font_size ) ; ++ title_font_size = QMAX( pointSize( expected_height * .25, listView() ) + KickerSettings::kickoffFontPointSizeOffset(), min_font_size + 1 ); ++ ++ //kdDebug() << description_font_size << " " << title_font_size << " " << pointSize( expected_height * .25, listView() ) << endl; ++ QListViewItem::setup(); ++ setHeight( (int)QMAX( expected_height, pixelSize( title_font_size + description_font_size * 2.3, listView()))); ++} ++ ++void KMenuItem::paintCell(QPainter* p, const QColorGroup & cg, int column, int width, int align) ++{ ++ ItemView *listview = static_cast( listView() ); ++ int bottom = listView()->itemRect( this ).bottom(); ++ int diff = bottom - listView()->viewport()->height(); ++ ++ KPixmap pm; ++ pm.resize( width, height() ); ++ QPainter pp( &pm ); ++ paintCellInter( &pp, cg, column, width, align ); ++ pp.end(); ++ ++ if ( diff > 0 && diff <= height() ) // cut off ++ { ++ pm.resize( width, height() - diff ); ++ KPixmapEffect::blend( pm, float( diff ) / height(), ++ cg.color( QColorGroup::Background ), ++ KPixmapEffect::VerticalGradient ); ++ p->drawPixmap( 0, 0, pm ); ++ if ( listview->m_lastOne != this ) ++ { ++ listview->m_lastOne = this; ++ listview->m_old_contentY = -1; ++ } ++ } ++ else ++ { ++ p->drawPixmap( 0, 0, pm ); ++ if ( this == listview->m_lastOne ) { ++ if ( bottom < 0 ) ++ listview->m_lastOne = static_cast( itemAbove() ); ++ else ++ listview->m_lastOne = static_cast( itemBelow() ); ++ listview->m_old_contentY = -1; ++ repaint(); ++ } ++ } ++} ++ ++void KMenuItem::makeGradient( KPixmap &off, const QColor &c ) ++{ ++ KPixmap blend; ++ blend.resize( off.width() / 3, off.height() ); ++ bitBlt( &blend, 0, 0, &off, off.width() - blend.width(), 0, blend.width(), blend.height() ); ++ KPixmapEffect::blend( blend, 0.2, c, KPixmapEffect::HorizontalGradient ); ++ QPainter p( &off ); ++ p.drawPixmap( off.width() - blend.width(), 0, blend ); ++ p.end(); ++} ++ ++void KMenuItem::paintCellInter(QPainter* p, const QColorGroup & cg, int column, int width, int align) ++{ ++ const bool reverseLayout = QApplication::reverseLayout(); ++ ++ const BackgroundMode bgmode = listView()->viewport()->backgroundMode(); ++ const QColorGroup::ColorRole crole = QPalette::backgroundRoleFromMode( bgmode ); ++ QColor backg = cg.color( crole ); ++ ++ if ( isSelected() ) ++ backg = cg.color( QColorGroup::Highlight ); ++ p->fillRect( 0, 0, width, height(), backg ); ++ ++ QFontMetrics fm( p->fontMetrics() ); ++ ++ int pixsize = 32; ++ if ( height() < 36 ) ++ pixsize = 16; ++ const int left_margin = 30; ++ const int margin = 3; ++ ++// p->drawText( 2, 2, left_margin - 2, height(), align, QString::number( childCount () ) ); ++ ++ const QPixmap * pix = pixmap( column ); ++ ++ if ( pix ) ++ { ++ QPixmap pix32 = *pix; ++ ++ if ( pix->width() > pixsize ) ++ { ++ QImage i = pix->convertToImage().smoothScale( pixsize, pixsize ); ++ pix32.convertFromImage( i ); ++ } ++ if ( reverseLayout ) ++ p->drawPixmap( width - ( (pixsize - pix32.width()) / 2 + left_margin ) - pix32.width(), ++ ( height() - pix32.height() ) / 2, pix32 ); ++ else ++ p->drawPixmap( (pixsize - pix32.width()) / 2 + left_margin, ++ ( height() - pix32.height() ) / 2, pix32 ); ++ } ++ ++ if ( m_title.isEmpty() ) ++ return; ++ ++ int r = left_margin + pixsize + margin * 2; ++ ++ QFont f1 = p->font(); ++ f1.setPointSizeFloat( title_font_size ); ++ f1.setWeight( QFont::Normal ); // QFont::DemiBold == 63 ++ ++ QFont f2 = p->font(); ++ f2.setPointSizeFloat( description_font_size ); ++ f2.setWeight( QFont::Light ); ++ ++ int f1h = QFontMetrics( f1 ).height(); ++ int f2h = QFontMetrics( f2 ).height(); ++ ++ const int text_margin = 2; ++ int spacing = ( height() - f1h - f2h - text_margin ) / 2; ++ if ( m_description.isEmpty() ) ++ spacing = ( height() - f1h ) / 2; ++ ++ int right_triangle_size = pixelSize( 7, listView() ); ++ ++ int right_margin = listView()->verticalScrollBar()->width(); ++ if ( m_has_children ) ++ right_margin += right_triangle_size * 2; ++ ++ KPixmap off; ++ QPainter pp; ++ ++ off.resize( width-text_margin-r-right_margin, height() ); ++ pp.begin( &off ); ++ pp.fillRect( 0, 0, off.width(), off.height(), backg ); ++ ++ if (isSelected()) ++ pp.setPen( cg.color( QColorGroup::HighlightedText ) ); ++ else ++ pp.setPen( cg.color( QColorGroup::Text ) ); ++ ++ pp.setFont( f1 ); ++ pp.drawText( 0, 0, off.width(), off.height(), align, m_title ); ++ pp.end(); ++ if ( QFontMetrics( f1 ).width( m_title ) > off.width() ) ++ { ++ makeGradient( off, backg ); ++ if ( !m_description.isEmpty() ) ++ setToolTip( m_title + "

    " + m_description ); ++ else ++ setToolTip( m_title ); ++ } ++ if ( reverseLayout ) ++ p->drawPixmap( width - off.width() - r, spacing, off ); ++ else ++ p->drawPixmap( r, spacing, off ); ++ ++ if ( !m_description.isEmpty() ) ++ { ++ pp.begin( &off ); ++ pp.fillRect( 0, 0, off.width(), off.height(), backg ); ++ ++ QColor myColor = cg.color( QColorGroup::Text ).light( 200 ); ++ if ( qGray( myColor.rgb() ) == 0 ) ++ myColor = QColor( 100, 100, 110 ); ++ pp.setPen( myColor ); ++ pp.setPen( isSelected() ? cg.color( QColorGroup::Mid ) : myColor ); ++ pp.setFont( f2 ); ++ pp.drawText( 0, 0, off.width(), off.height(), align, m_description ); ++ pp.end(); ++ if ( QFontMetrics( f2 ).width( m_description ) > off.width() ) ++ { ++ makeGradient( off, backg ); ++ setToolTip( m_title + "

    " + m_description ); ++ } ++ if ( reverseLayout ) ++ p->drawPixmap( width - off.width() - r, spacing + text_margin + f1h, off ); ++ else ++ p->drawPixmap( r, spacing + text_margin + f1h, off ); ++ } ++ ++ if ( m_has_children ) ++ { ++ QImage i = right_triangle.convertToImage().smoothScale( right_triangle_size, ++ right_triangle_size ); ++ QPixmap tri; ++ tri.convertFromImage( i ); ++ ++ if ( reverseLayout ) ++ p->drawPixmap( right_margin - tri.width(), ( height() - f1h ) / 2, tri ); ++ else ++ p->drawPixmap( listView()->width() - right_margin, ( height() - f1h ) / 2, tri ); ++ } ++ ++ if ( m_old_width != width ) ++ { ++ // the listview caches paint events ++ m_old_width = width; ++ repaint(); ++ } ++} ++ ++// -------------------------------------------------------------------------- ++ ++KMenuItemSeparator::KMenuItemSeparator(int nId, QListView* parent) ++ : KMenuItem(nId, parent), lv(parent), cached_width( 0 ) ++{ ++ setEnabled(false); ++ left_margin = 15; ++} ++ ++void KMenuItemSeparator::setup() ++{ ++ KMenuItem::setup(); ++ ++ QFont f = QFont(); ++ QFontMetrics fm(f); ++ f.setPointSize( 8 + KickerSettings::kickoffFontPointSizeOffset() ); ++ if ( itemAbove() && !text( 0 ).isEmpty() ) ++ setHeight( (int)QMAX( 34., fm.height() * 1.4) ); ++ else ++ setHeight( (int)QMAX( 26., fm.height() * 1.4 ) ); ++} ++ ++void KMenuItemSeparator::setLink( const QString &text, const QString &url ) ++{ ++ m_link_text = text; ++ m_link_url = url; ++ m_link_rect = QRect(); ++} ++ ++bool KMenuItemSeparator::hitsLink( const QPoint &pos ) ++{ ++ return m_link_rect.contains( pos ); ++} ++ ++void KMenuItemSeparator::preparePixmap( int width ) ++{ ++ if ( cached_width != width ) ++ { ++ pixmap.load( locate("data", "kicker/pics/menu_separator.png" ) ); ++ QImage i = pixmap.convertToImage().smoothScale( width - 15 - left_margin, pixmap.height() ); ++ pixmap.convertFromImage( i ); ++ cached_width = width; ++ } ++} ++ ++void KMenuItemSeparator::paintCell(QPainter* p, const QColorGroup & cg, int column, int width, int align) ++{ ++ preparePixmap(width); ++ ++ const int h = height(); ++ ++ if (text(0).isEmpty()) { ++ KMenuItem::paintCell(p, cg, column, width, align); ++ p->drawPixmap( 15 , h/2, pixmap ); ++ } ++ else { ++ const BackgroundMode bgmode = lv->viewport()->backgroundMode(); ++ const QColorGroup::ColorRole crole = QPalette::backgroundRoleFromMode( bgmode ); ++ p->fillRect( 0, 0, width, h, cg.brush( crole ) ); ++ ++ int margin = 0; ++ if ( itemAbove() ) { ++ p->drawPixmap( 15 , h/4, pixmap ); ++ margin = h / 4; ++ } ++ QFont f = listView()->font(); ++ f.setWeight( QFont::Normal ); ++ f.setPointSize( 8 + KickerSettings::kickoffFontPointSizeOffset() ); ++ p->setFont( f ); ++ QColor myColor = cg.color( QColorGroup::Text ).light( 200 ); ++ if ( qGray( myColor.rgb() ) == 0 ) ++ myColor = QColor( 100, 100, 110 ); ++ p->setPen( myColor ); ++ int twidth = p->fontMetrics().width(text(0)); ++ int lwidth = 0; ++ int swidth = 0; ++ int fwidth = 0; ++ ++ if ( !m_link_text.isEmpty() ) ++ { ++ swidth = p->fontMetrics().width( " (" ); ++ lwidth = p->fontMetrics().width(m_link_text ); ++ fwidth = p->fontMetrics().width( ")" ); ++ } ++ int pos = int(lv->width() * 0.9 - twidth - swidth - lwidth - fwidth); ++ p->drawText( pos, margin + 5, ++ width, h - ( margin +5 ), AlignTop, text(0) ); ++ if ( !m_link_text.isEmpty() ) ++ { ++ pos += twidth; ++ p->drawText( pos, margin + 5, ++ width, h - ( margin +5 ), AlignTop, " (" ); ++ pos += swidth; ++ p->setPen( cg.color( QColorGroup::Link ) ); ++ f.setUnderline( true ); ++ p->setFont( f ); ++ p->drawText( pos, margin + 5, ++ width, h - ( margin +5 ), AlignTop, m_link_text ); ++ m_link_rect = QRect( pos, margin + 5, lwidth, p->fontMetrics().height() ); ++ pos += lwidth; ++ f.setUnderline( false ); ++ p->setFont( f ); ++ p->drawText( pos, margin + 5, ++ width, h - ( margin +5 ), AlignTop, ")" ); ++ } ++ } ++} ++ ++KMenuItemHeader::KMenuItemHeader(int nId, const QString& relPath, QListView* parent) ++ : KMenuItemSeparator(nId, parent) ++{ ++ setEnabled( false ); ++ QString path; ++ if (relPath.startsWith( "new/" /*"kicker:/new/"*/ )) { ++ paths.append( "kicker:/goup/" ); ++ texts.append( i18n("New Applications") ); ++ icons.append( "clock" ); ++ } ++ else if (relPath == "kicker:/restart/") { ++ texts.append( i18n("Restart Computer") ); ++ } ++ else if (relPath == "kicker:/switchuser/") { ++ texts.append( i18n("Switch User") ); ++ } ++ else { ++ KServiceGroup::Ptr subMenuRoot = KServiceGroup::group(relPath); ++ QStringList items = QStringList::split( '/', relPath ); ++ for ( QStringList::ConstIterator it = items.begin(); it != items.end(); ++it ) ++ { ++ path += *it + "/"; ++ paths.append( "kicker:/goup/" + path ); ++ KServiceGroup::Ptr subMenuRoot = KServiceGroup::group(path); ++ QString groupCaption = subMenuRoot->caption(); ++ texts.append( groupCaption ); ++ icons.append( subMenuRoot->icon() ); ++ } ++ } ++ ++ setPath( "kicker:/goup/" + path ); // the last wins for now ++ left_margin = 10; ++} ++ ++void KMenuItemHeader::setup() ++{ ++ KMenuItem::setup(); ++ ++ QFontMetrics fm( listView()->font() ); ++ setHeight( QMAX( int( texts.count() * fm.height() + ( texts.count() + 1 ) * 2 + 10 ), height()) ); ++ // nada ++} ++ ++void KMenuItemHeader::paintCell(QPainter* p, const QColorGroup & cg, int , int width, int align ) ++{ ++ preparePixmap(width); ++ ++ const BackgroundMode bgmode = listView()->viewport()->backgroundMode(); ++ const QColorGroup::ColorRole crole = QPalette::backgroundRoleFromMode( bgmode ); ++ ++ QBrush br = cg.brush( crole ); ++ if ( isSelected() ) { ++ br = cg.brush( QColorGroup::Highlight ); ++ p->fillRect( 0, 0, width, height() - 3, br ); ++ } else { ++ p->fillRect( 0, 0, width, height(), br ); ++ } ++ ++ QFontMetrics fm( p->fontMetrics() ); ++ const int left_margin = 10; ++ ++ const int margin = 3; ++ ++ int r = left_margin + margin * 2; ++ ++ const int min_font_size = 7; ++ int title_font_pixelSize = qRound( pixelSize( QMAX( pointSize( 12, listView() ) + KickerSettings::kickoffFontPointSizeOffset(), min_font_size + 1 ), listView() ) ); ++ ++ QFont f1 = p->font(); ++ f1.setPixelSize( title_font_pixelSize ); ++ p->setFont( f1 ); ++ int f1h = QFontMetrics( f1 ).height(); ++ ++ p->setPen( cg.color( QColorGroup::Text ) ); ++ ++ const int text_margin = 2; ++ int spacing = ( height() - texts.count() * f1h - QMAX( texts.count() - 1, 0 ) * text_margin ) / 2; ++ ++ for ( uint i = 0; i < texts.count(); ++i ) ++ { ++ if (i==texts.count()-1) { ++ f1.setWeight( QFont::DemiBold ); ++ p->setFont( f1 ); ++ f1h = QFontMetrics( f1 ).height(); ++ } ++ ++ p->drawText( r, spacing, width-text_margin-r, height(), align, texts[i] ); ++ spacing += text_margin + f1h; ++ r += title_font_pixelSize; ++ } ++ ++ p->drawPixmap( left_margin , height() - 2, pixmap ); ++} ++ ++KMenuSpacer::KMenuSpacer(int nId, QListView* parent) ++ : KMenuItem(nId, parent) ++{ ++ setEnabled(false); ++} ++ ++void KMenuSpacer::setup() ++{ ++ // nada ++} ++ ++void KMenuSpacer::paintCell(QPainter* p, const QColorGroup & cg, int , int width, int ) ++{ ++ const BackgroundMode bgmode = listView()->viewport()->backgroundMode(); ++ const QColorGroup::ColorRole crole = QPalette::backgroundRoleFromMode( bgmode ); ++ QBrush br = cg.brush( crole ); ++ ++ p->fillRect( 0, 0, width, height(), br ); ++} ++ ++void KMenuSpacer::setHeight( int i ) ++{ ++ KMenuItem::setHeight( i ); ++} ++ ++class ItemViewTip : public QToolTip ++{ ++public: ++ ItemViewTip( QWidget *parent, QListView *lv ); ++ ++ void maybeTip( const QPoint &pos ); ++ ++private: ++ QListView *view; ++ ++}; ++ ++ItemViewTip::ItemViewTip( QWidget *parent, QListView *lv ) ++ : QToolTip( parent ), view( lv ) ++{ ++} ++ ++void ItemViewTip::maybeTip( const QPoint &pos ) ++{ ++ KMenuItem *item = dynamic_cast( view->itemAt( pos ) ); ++ QPoint contentsPos = view->viewportToContents( pos ); ++ if ( !item ) ++ return; ++ ++ if ( item->toolTip().isNull() ) ++ return; ++ ++ QRect r = view->itemRect( item ); ++ int headerPos = view->header()->sectionPos( 0 ); ++ r.setLeft( headerPos ); ++ r.setRight( headerPos + view->header()->sectionSize( 0 ) ); ++ tip( r, item->toolTip() ); ++} ++ ++// -------------------------------------------------------------------------- ++ ++ItemView::ItemView(QWidget* parent, const char* name) ++ : KListView(parent, name), m_spacer( 0 ), ++ m_mouseMoveSelects(true), m_iconSize(32) ++{ ++ setHScrollBarMode( QScrollView::AlwaysOff ); ++ setFrameStyle( QFrame::NoFrame ); ++ setSelectionMode(QListView::Single); ++ addColumn(""); ++ header()->setStretchEnabled(1, 0); ++ //setColumnWidthMode(0, QListView::Maximum); ++ header()->hide(); ++ setMouseTracking(true); ++ setItemMargin(0); ++ setSorting(-1); ++ setTreeStepSize(38); ++ setFocusPolicy(QWidget::NoFocus); ++ ++ m_lastOne = 0; ++ m_old_contentY = -1; ++ ++ connect(this, SIGNAL(mouseButtonClicked( int, QListViewItem*, const QPoint &, int )), ++ SLOT(slotItemClicked(int, QListViewItem*, const QPoint &, int))); ++ ++ connect(this, SIGNAL(returnPressed(QListViewItem*)), SLOT(slotItemClicked(QListViewItem*))); ++ connect(this, SIGNAL(spacePressed(QListViewItem*)), SLOT(slotItemClicked(QListViewItem*))); ++ ++ new ItemViewTip( viewport(), this ); ++} ++ ++KMenuItemHeader *ItemView::insertHeader(int id, const QString &relpath) ++{ ++ KMenuItemHeader *newItem = new KMenuItemHeader(id, relpath, this ); ++ moveItemToIndex(newItem, 1); ++ setBackPath( "kicker:/goup/" + relpath ); // the last wins for now ++ ++ return newItem; ++} ++ ++KMenuItem* ItemView::findItem(int nId) ++{ ++ for (QListViewItemIterator it(this); it.current(); ++it) ++ { ++ if(static_cast(it.current())->id() == nId) ++ return static_cast(it.current()); ++ } ++ ++ return 0L; ++} ++ ++bool ItemView::focusNextPrevChild(bool /*next*/) ++{ ++ return false; ++} ++ ++KMenuItem* ItemView::itemAtIndex(int nIndex) ++{ ++ if(nIndex <= 0) ++ return 0L; ++ ++ if(nIndex >= childCount()) ++ return static_cast(lastItem()); ++ ++ int i = 1; ++ QListViewItemIterator it(this); ++ for (;it.current(); ++i, ++it) { ++ if(i == nIndex) ++ return static_cast(it.current()); ++ } ++ ++ return static_cast(lastItem()); ++} ++ ++KMenuItem* ItemView::insertItem( const QString& icon, const QString& text, const QString& description, const ++ QString& path, int nId, int nIndex, KMenuItem *parent) ++{ ++ KMenuItem* newItem = findItem(nId); ++ ++ if(!newItem && parent) ++ newItem = new KMenuItem(nId, parent ); ++ else if ( !newItem ) ++ newItem = new KMenuItem(nId, this ); ++ ++ newItem->setIcon(icon, m_iconSize); ++ newItem->setTitle(text); ++ newItem->setDescription(description); ++ newItem->setPath(path); ++ ++ if (nIndex==-1) ++ nIndex=childCount(); ++ ++ moveItemToIndex(newItem, nIndex); ++ ++ return newItem; ++} ++ ++KMenuItem* ItemView::insertItem( const QString& icon, const QString& text, const QString& description, ++ int nId, int nIndex, KMenuItem *parent) ++{ ++ return insertItem( icon, text, description, QString::null, nId, nIndex, parent); ++} ++ ++int ItemView::setItemEnabled(int id, bool enabled) ++{ ++ KMenuItem* item = findItem(id); ++ ++ if(item) ++ item->setEnabled(enabled); ++ ++ return 0; ++} ++ ++KMenuItemSeparator *ItemView::insertSeparator(int nId, const QString& text, int nIndex) ++{ ++ KMenuItemSeparator *newItem = new KMenuItemSeparator(nId, this); ++ ++ newItem->setText(0, text); ++ ++ if (nIndex==-1) ++ nIndex=childCount(); ++ ++ moveItemToIndex(newItem, nIndex); ++ return newItem; ++} ++ ++void ItemView::moveItemToIndex(KMenuItem* item, int nIndex) ++{ ++ ++ if (nIndex <= 0) { ++ takeItem(item); ++ KListView::insertItem(item); ++ } ++ else { ++ item->moveItem(itemAtIndex(nIndex)); ++ } ++} ++ ++void ItemView::slotMoveContent() ++{ ++ if ( !m_spacer ) ++ return; ++ ++ int item_height = 0; ++ QListViewItemIterator it( this ); ++ while ( it.current() ) { ++ if ( !dynamic_cast( it.current() ) && !it.current()->parent() && it.current()->isVisible() ) { ++ it.current()->invalidateHeight(); ++ item_height += it.current()->totalHeight(); ++ } ++ ++it; ++ } ++ ++ if ( height() > item_height ) ++ m_spacer->setHeight( height() - item_height ); ++ else ++ m_spacer->setHeight( 0 ); ++} ++ ++KMenuItem *ItemView::insertMenuItem(KService::Ptr& s, int nId, int nIndex, KMenuItem* parentItem, ++ const QString& aliasname, const QString & label, const QString & categoryIcon ) ++{ ++ if (!s) ++ return 0; ++ ++ QString serviceName = aliasname.isEmpty() ? s->name() : aliasname; ++ ++ kdDebug() << "insertMenuItem " << nId << " " << nIndex << " " << s->name() << endl; ++ KMenuItem* newItem = 0; //findItem(nId); ++ if(!newItem) ++ newItem = parentItem ? new KMenuItem(nId, parentItem) : new KMenuItem(nId, this); ++ ++ newItem->setIcon(s->icon()=="unknown" ? categoryIcon : s->icon(), m_iconSize); ++ if ((KickerSettings::DescriptionAndName || KickerSettings::menuEntryFormat() ++ == KickerSettings::DescriptionOnly) && !s->genericName().isEmpty()) { ++ newItem->setTitle(s->genericName()); ++ newItem->setDescription(label.isEmpty() ? serviceName : label); ++ } ++ else { ++ newItem->setTitle(label.isEmpty() ? serviceName : label); ++ newItem->setDescription(s->genericName()); ++ } ++ newItem->setService(s); ++ ++ if (nIndex==-2) ++ return newItem; ++ ++ if (nIndex==-1) ++ nIndex=childCount(); ++ ++ moveItemToIndex(newItem, nIndex); ++ ++ return newItem; ++} ++ ++KMenuItem* ItemView::insertDocumentItem(const QString& s, int nId, int nIndex, const QStringList* /*suppressGenericNames*/, ++ const QString& /*aliasname*/) ++{ ++ KMenuItem* newItem = findItem(nId); ++ ++ if(!newItem) ++ newItem = new KMenuItem(nId, this); ++ ++ KMimeType::Ptr mt = KMimeType::findByURL( s ); ++ newItem->setIcon(KMimeType::iconForURL( s ), m_iconSize); ++ newItem->setTitle(s); ++ newItem->setDescription(mt->comment()); ++ newItem->setPath(s); ++ ++ if (nIndex==-1) ++ nIndex=childCount(); ++ ++ moveItemToIndex(newItem, nIndex); ++ ++ return newItem; ++} ++ ++KMenuItem* ItemView::insertRecentlyItem(const QString& s, int nId, int nIndex) ++{ ++ KDesktopFile f(s, true /* read only */); ++ ++ KMenuItem* newItem = findItem(nId); ++ ++ if(!newItem) ++ newItem = new KMenuItem(nId, this); ++ ++ newItem->setIcon(f.readIcon(), m_iconSize); ++ ++ // work around upstream fixed bug ++ QString name=f.readName(); ++ if (name.isEmpty()) ++ name=f.readURL(); ++ ++ newItem->setTitle(name); ++ ++ QString comment = f.readComment(); ++ if (comment.isEmpty()) { ++ KURL url(f.readURL()); ++ if (!url.host().isEmpty()) ++ comment = i18n("Host: %1").arg(url.host()); ++ } ++ ++ newItem->setDescription(comment); ++ newItem->setPath(s); ++ ++ if (nIndex==-1) ++ nIndex=childCount(); ++ ++ moveItemToIndex(newItem, nIndex); ++ ++ return newItem; ++} ++ ++int ItemView::insertItem(PopupMenuTitle*, int, int) ++{ ++ return 0; ++} ++ ++KMenuItem* ItemView::insertSubItem(const QString& icon, const QString& caption, const QString& description, const QString& path, KMenuItem* parentItem) ++{ ++#warning FIXME ++ KMenuItem* newItem = parentItem ? new KMenuItem(-1, parentItem) : new KMenuItem(-1, this); ++ newItem->setTitle(caption); ++ newItem->setDescription(description); ++ newItem->setIcon(icon, m_iconSize); ++ newItem->setPath(path); ++ ++ return newItem; ++} ++ ++ ++ ++void ItemView::slotItemClicked(int button, QListViewItem * item, const QPoint & /*pos*/, int /*c*/ ) ++{ ++ if (button==1) ++ slotItemClicked(item); ++} ++ ++void ItemView::slotItemClicked(QListViewItem* item) ++{ ++ KMenuItem* kitem = dynamic_cast(item); ++ if ( !kitem ) ++ return; ++ ++ if(kitem->service()) { ++ emit startService(kitem->service()); ++ } ++ else if(!kitem->path().isEmpty()) { ++ emit startURL(kitem->path()); ++ } ++} ++ ++void ItemView::contentsMousePressEvent ( QMouseEvent * e ) ++{ ++ KListView::contentsMousePressEvent( e ); ++ ++ QPoint vp = contentsToViewport(e->pos()); ++ KMenuItemSeparator *si = dynamic_cast( itemAt( vp ) ); ++ if ( si ) ++ { ++ if ( si->hitsLink( vp - itemRect(si).topLeft() ) ) ++ emit startURL( si->linkUrl() ); ++ } ++} ++ ++void ItemView::contentsMouseMoveEvent(QMouseEvent *e) ++{ ++ QPoint vp = contentsToViewport(e->pos()); ++ QListViewItem * i = itemAt( vp ); ++ ++ bool link_cursor = false; ++ KMenuItemSeparator *si = dynamic_cast( i ); ++ if ( si ) ++ link_cursor = si->hitsLink( vp - itemRect(si).topLeft() ); ++ ++ if (i && !i->isSelectable() && !link_cursor) { ++ unsetCursor(); ++ viewport()->unsetCursor(); ++ return; ++ } ++ ++ KListView::contentsMouseMoveEvent(e); ++ ++ if (m_mouseMoveSelects) { ++ if(i && i->isEnabled() && !i->isSelected() && ++ // FIXME: This is wrong if you drag over the items. ++ (e->state() & (LeftButton|MidButton|RightButton)) == 0) ++ KListView::setSelected(i, true); ++ else if (!i && selectedItem()) ++ KListView::setSelected(selectedItem(), false); ++ } ++ ++ if ( link_cursor ) ++ setCursor( Qt::PointingHandCursor ); ++ else ++ unsetCursor(); ++ ++} ++ ++void ItemView::leaveEvent(QEvent* e) ++{ ++ KListView::leaveEvent(e); ++ ++ clearSelection(); ++} ++ ++void ItemView::resizeEvent ( QResizeEvent * e ) ++{ ++ KListView::resizeEvent( e ); ++// if ( m_lastOne ) ++// int diff = itemRect( m_lastOne ).bottom() - viewport()->height(); ++} ++ ++void ItemView::viewportPaintEvent ( QPaintEvent * pe ) ++{ ++ //kdDebug() << "viewportPaintEvent " << pe->rect() << " " << contentsY () << " " << m_old_contentY << endl; ++ KListView::viewportPaintEvent( pe ); ++ ++ if ( m_lastOne && m_old_contentY != contentsY() ) { ++ m_old_contentY = contentsY(); ++ m_lastOne->repaint(); ++ } ++} ++ ++void ItemView::clear() ++{ ++ KListView::clear(); ++ m_lastOne = 0; ++ m_old_contentY = -1; ++ m_back_url = QString::null; ++} ++ ++void ItemView::contentsWheelEvent(QWheelEvent *e) ++{ ++ KListView::contentsWheelEvent(e); ++ ++ QPoint vp = contentsToViewport(e->pos()); ++ QListViewItem * i = itemAt( vp ); ++ ++ if(i && i->isEnabled() && !i->isSelected() && ++ // FIXME: This is wrong if you drag over the items. ++ (e->state() & (LeftButton|MidButton|RightButton)) == 0) ++ KListView::setSelected(i, true); ++ else if (!i && selectedItem()) ++ KListView::setSelected(selectedItem(), false); ++} ++ ++QDragObject * ItemView::dragObject() ++{ ++ KMultipleDrag* o = 0; ++ QListViewItem *item = itemAt( viewport()->mapFromGlobal(QCursor::pos()) ); ++ if ( item ) { ++ KMenuItem* kitem = static_cast(item); ++ ++ if (dynamic_cast(item)) ++ return 0; ++ ++ o = new KMultipleDrag(viewport()); ++ QPixmap pix = KGlobal::iconLoader()->loadIcon( kitem->icon(), KIcon::Panel, m_iconSize); ++ QPixmap add = KGlobal::iconLoader()->loadIcon( "add", KIcon::Small ); ++ ++ QPainter p( &pix ); ++ p.drawPixmap(pix.height()-add.height(), pix.width()-add.width(), add); ++ p.end(); ++ ++ QBitmap mask; ++ ++ if (pix.mask()) ++ mask = *pix.mask(); ++ else { ++ mask.resize(pix.size()); ++ mask.fill(Qt::color1); ++ } ++ ++ bitBlt( &mask, pix.width()-add.width(), pix.height()-add.height(), add.mask(), 0, 0, add.width(), add.height(), OrROP ); ++ pix.setMask( mask ); ++ o->setPixmap(pix); ++ ++ if(kitem->service()) { ++ // If the path to the desktop file is relative, try to get the full ++ // path from KStdDirs. ++ QString path = kitem->service()->desktopEntryPath(); ++ path = locate("apps", path); ++ o->addDragObject(new KURLDrag(KURL::List(KURL(path)), 0)); ++ } ++ else if (kitem->path().startsWith("kicker:/new") || kitem->path().startsWith("system:/") ++ || kitem->path().startsWith("kicker:/switchuser_") || kitem->path().startsWith("kicker:/restart_")) { ++ delete o; ++ return 0; ++ } ++ else if (kitem->hasChildren()) { ++ o->addDragObject(new KURLDrag(KURL::List(KURL("programs:/"+kitem->menuPath())), 0)); ++ return o; ++ } ++ else if(!kitem->path().isEmpty() && !kitem->path().startsWith("kicker:/") && !kitem->path().startsWith("kaddressbook:/")) { ++ QString uri = kitem->path(); ++ ++ if (uri.startsWith(locateLocal("data", QString::fromLatin1("RecentDocuments/")))) { ++ KDesktopFile df(uri,true); ++ uri=df.readURL(); ++ } ++ ++ o->addDragObject(new KURLDrag(KURL::List(KURL(uri)), 0)); ++ } ++ ++ o->addDragObject(new KMenuItemDrag(*kitem,this)); ++ } ++ return o; ++} ++ ++int ItemView::goodHeight() ++{ ++ int item_height = 0; ++ QListViewItemIterator it( this ); ++ while ( it.current() ) { ++ if ( !dynamic_cast( it.current() ) && !it.current()->parent() && it.current()->isVisible() ) { ++ item_height += it.current()->height(); ++ } ++ ++it; ++ } ++ ++ return item_height; ++} ++ ++ ++KMenuItemDrag::KMenuItemDrag(KMenuItem& item, QWidget *dragSource) ++ : QDragObject(dragSource, 0) ++{ ++ QBuffer buff(a); ++ buff.open(IO_WriteOnly); ++ QDataStream s(&buff); ++ ++ s << item.id() << (item.service() ? item.service()->storageId() : QString::null) ++ << item.title() << item.description() << item.icon() << item.path(); ++} ++ ++KMenuItemDrag::~KMenuItemDrag() ++{ ++} ++ ++const char * KMenuItemDrag::format(int i) const ++{ ++ if (i == 0) ++ return "application/kmenuitem"; ++ ++ return 0; ++} ++ ++QByteArray KMenuItemDrag::encodedData(const char* mimeType) const ++{ ++ if (QString("application/kmenuitem") == mimeType) ++ return a; ++ ++ return QByteArray(); ++} ++ ++bool KMenuItemDrag::canDecode(const QMimeSource * e) ++{ ++ if (e->provides( "application/kmenuitem" ) ) ++ return true; ++ ++ return false; ++} ++ ++bool ItemView::acceptDrag (QDropEvent* event) const ++{ ++ if ( !acceptDrops() ) ++ return false; ++ ++ if (KMenuItemDrag::canDecode(event)) ++ return true; ++ ++ if (QTextDrag::canDecode(event)) { ++ QString text; ++ QTextDrag::decode(event,text); ++ return !text.startsWith("programs:/"); ++ } ++ ++ return itemsMovable(); ++} ++ ++bool KMenuItemDrag::decode(const QMimeSource* e, KMenuItemInfo& item) ++{ ++ QByteArray a = e->encodedData("application/kmenuitem"); ++ ++ if (a.isEmpty()) { ++ QStringList l; ++ bool ret = QUriDrag::decodeToUnicodeUris( e, l ); ++ if ( ret ) ++ { ++ for ( QStringList::ConstIterator it = l.begin(); it != l.end(); ++it ) ++ { ++ QString url = *it; ++ kdDebug () << "Url " << url << endl; ++ item.m_path = KURL( url ).path(); ++ if ( KDesktopFile::isDesktopFile( item.m_path ) ) ++ { ++ KDesktopFile df( item.m_path, true ); ++ item.m_description = df.readGenericName(); ++ item.m_icon = df.readIcon(); ++ item.m_title = df.readName(); ++ } ++ else ++ { ++ item.m_title = item.m_path; ++ item.m_icon = KMimeType::iconForURL( url ); ++ item.m_title = item.m_path.section( '/', -1, -1 ); ++ int last_slash = url.findRev ('/', -1); ++ if (last_slash == 0) ++ item.m_description = i18n("Directory: /)"); ++ else ++ item.m_description = i18n("Directory: ") + url.section ('/', -2, -2); ++ } ++ ++ return true; ++ } ++ } ++ return false; ++ } ++ ++ QBuffer buff(a); ++ buff.open(IO_ReadOnly); ++ QDataStream s(&buff); ++ ++ KMenuItemInfo i; ++ QString storageId; ++ s >> i.m_id >> storageId >> i.m_title >> i.m_description >> i.m_icon >> i.m_path; ++ ++ i.m_s = storageId.isEmpty() ? 0 : KService::serviceByStorageId(storageId); ++ item = i; ++ ++ return true; ++} ++ ++FavoritesItemView::FavoritesItemView(QWidget* parent, const char* name) ++ : ItemView(parent, name) ++{ ++} ++ ++bool FavoritesItemView::acceptDrag (QDropEvent* event) const ++{ ++ if (event->source()==this->viewport()) ++ return true; ++ ++ if (KMenuItemDrag::canDecode(event)) { ++ KMenuItemInfo item; ++ KMenuItemDrag::decode(event,item); ++ QStringList favs = KickerSettings::favorites(); ++ ++ if (item.m_s) ++ return favs.find(item.m_s->storageId())==favs.end(); ++ else { ++ QStringList::Iterator it; ++ ++ QString uri = item.m_path; ++ ++ if (uri.startsWith(locateLocal("data", QString::fromLatin1("RecentDocuments/")))) { ++ KDesktopFile df(uri,true); ++ uri=df.readURL(); ++ } ++ ++ for (it = favs.begin(); it != favs.end(); ++it) { ++ if ((*it)[0]=='/') { ++ KDesktopFile df((*it),true); ++ if (df.readURL().replace("file://",QString::null)==uri) ++ break; ++ } ++ } ++ return it==favs.end(); ++ } ++ } ++ ++ if (QTextDrag::canDecode(event)) { ++ QString text; ++ QTextDrag::decode(event,text); ++ QStringList favs = KickerSettings::favorites(); ++ ++ if (text.endsWith(".desktop")) { ++ KService::Ptr p = KService::serviceByDesktopPath(text.replace("file://",QString::null)); ++ return (p && favs.find(p->storageId())==favs.end()); ++ } ++ else { ++ QStringList::Iterator it; ++ for (it = favs.begin(); it != favs.end(); ++it) { ++ if ((*it)[0]=='/') { ++ KDesktopFile df((*it),true); ++ if (df.readURL().replace("file://",QString::null)==text) ++ break; ++ } ++ } ++ return it==favs.end(); ++ } ++ } ++ ++ return itemsMovable(); ++} ++ ++#include "itemview.moc" ++ ++// vim:cindent:sw=4: +--- kicker/ui/media_watcher.cpp (Revision 0) ++++ kicker/ui/media_watcher.cpp (Revision 849791) +@@ -0,0 +1,57 @@ ++/***************************************************************** ++ ++Copyright (c) 2006 Stephan Kulow ++ ++Permission is hereby granted, free of charge, to any person obtaining a copy ++of this software and associated documentation files (the "Software"), to deal ++in the Software without restriction, including without limitation the rights ++to use, copy, modify, merge, publish, distribute, sublicense, and/or sell ++copies of the Software, and to permit persons to whom the Software is ++furnished to do so, subject to the following conditions: ++ ++The above copyright notice and this permission notice shall be included in ++all copies or substantial portions of the Software. ++ ++THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR ++IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, ++FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE ++AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN ++AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN ++CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ++ ++******************************************************************/ ++ ++#include "media_watcher.h" ++#include ++#include ++#include ++#include ++ ++MediaWatcher::MediaWatcher( QObject *parent ) : ++ QObject( parent ), DCOPObject("mediawatcher") ++{ ++ connectDCOPSignal( "kded", "mediamanager", "mediumAdded(QString,bool)", ++ "slotMediumAdded(QString,bool)", true ); ++ connectDCOPSignal( "kded", "mediamanager", "mediumRemoved(QString,bool)", ++ "slotMediumAdded(QString,bool)", true ); ++ connectDCOPSignal( "kded", "mediamanager", "mediumChanged(QString,bool)", ++ "slotMediumAdded(QString,bool)", true ); ++ ++ updateDevices(); ++} ++ ++void MediaWatcher::updateDevices() ++{ ++ DCOPRef nsd( "kded", "mediamanager" ); ++ nsd.setDCOPClient( kapp->dcopClient() ); ++ m_devices = nsd.call( "fullList" ); ++} ++ ++void MediaWatcher::slotMediumAdded( QString item, bool a ) ++{ ++ updateDevices(); ++ ++ emit mediumChanged(); ++} ++ ++#include "media_watcher.moc" + +Eigenschaftsänderungen: kicker/ui +___________________________________________________________________ +Geändert: svn:ignore + - nonKDEButtonSettings.h +appletitem.h +appletview.cpp +nonKDEButtonSettings.cpp +k_mnu.kidl +appletview.h +appletitem.cpp +k_mnu_skel.cpp +.deps +.libs +Makefile +Makefile.in +*.moc + + + nonKDEButtonSettings.h +appletitem.h +appletview.cpp +nonKDEButtonSettings.cpp +k_mnu.kidl +appletview.h +appletitem.cpp +k_mnu_skel.cpp +.deps +.libs +Makefile +Makefile.in +*.moc +kmenuitembase.cpp +media_watcher.kidl +kmenubase.cpp +kmenuitembase.h +kmenubase.h +media_watcher_skel.cpp + + +--- kicker/buttons/knewbutton.cpp (Revision 0) ++++ kicker/buttons/knewbutton.cpp (Revision 849791) +@@ -0,0 +1,455 @@ ++/***************************************************************** ++ ++Copyright (c) 2006 Stephan Binner ++ Stephan Kulow ++ Dirk Mueller ++ ++Permission is hereby granted, free of charge, to any person obtaining a copy ++of this software and associated documentation files (the "Software"), to deal ++in the Software without restriction, including without limitation the rights ++to use, copy, modify, merge, publish, distribute, sublicense, and/or sell ++copies of the Software, and to permit persons to whom the Software is ++furnished to do so, subject to the following conditions: ++ ++The above copyright notice and this permission notice shall be included in ++all copies or substantial portions of the Software. ++ ++THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR ++IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, ++FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE ++AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN ++AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN ++CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ++ ++******************************************************************/ ++ ++#include ++#include ++ ++#include ++#include ++#include ++#include ++ ++#include ++#include ++#include ++#include ++#include ++ ++#include "kickerSettings.h" ++ ++#include "config.h" ++#include "global.h" ++ ++#include "menumanager.h" ++#include "k_mnu_stub.h" ++#include "k_new_mnu.h" ++ ++#include "knewbutton.h" ++#include "knewbutton.moc" ++ ++KNewButton *KNewButton::m_self = 0; ++ ++KNewButton::KNewButton( QWidget* parent ) ++ : KButton( parent ), ++ m_oldPos(0,0) ++{ ++ Q_ASSERT( !m_self ); ++ m_self = this; ++ m_hoverTimer = -1; ++ m_openTimer = -1; ++ m_active = false; ++ m_mouseInside = false; ++ m_drag = false; ++ ++ setIconAlignment((Qt::AlignmentFlags)(AlignTop|AlignRight)); ++ setAcceptDrops(true); ++ setIcon("kmenu-suse"); ++ setDrawArrow(false); ++ ++ m_movie = new QMovie(locate("data", "kicker/pics/kmenu_basic.mng")); ++ m_movie->connectUpdate(this, SLOT(updateMovie())); ++ m_movie->connectStatus(this, SLOT(slotStatus(int))); ++ m_movie->connectResize(this, SLOT(slotSetSize(const QSize&))); ++ ++ QApplication::desktop()->screen()->installEventFilter(this); ++ setMouseTracking(true); ++} ++ ++KNewButton::~KNewButton() ++{ ++ if ( m_self == this ) ++ m_self = 0; ++ setMouseTracking(false); ++ delete m_movie; ++} ++ ++void KNewButton::slotStatus(int status) ++{ ++ if(status == QMovie::EndOfLoop) ++ slotStopAnimation(); ++} ++ ++QColor KNewButton::borderColor() const ++{ ++ QImage img = m_active_pixmap.convertToImage(); ++ ++ for (int i = 0; i < img.width(); ++i) { ++ QRgb rgb = img.pixel(orientation() == Qt::Horizontal ? img.width() - i - 1 : ++ i, 2); ++ ++ if (qGreen(rgb) > 0x50) ++ return rgb; ++ } ++ ++ return img.pixel( orientation() == Qt::Horizontal ? img.width() - 2 : 2, 2); ++} ++ ++void KNewButton::show() ++{ ++ KButton::show(); ++ ++ if (KickerSettings::firstRun()) { ++ QTimer::singleShot(500,this,SLOT(slotExecMenu())); ++ KickerSettings::setFirstRun(false); ++ KickerSettings::writeConfig(); ++ } ++} ++ ++void KNewButton::updateMovie() ++{ ++ m_oldPos = QPoint( -1, -1 ); ++ drawEye(); ++ ++ if (!m_active && m_movie->running()) ++ m_movie->pause(); ++} ++ ++void KNewButton::setPopupDirection(KPanelApplet::Direction d) ++{ ++ KButton::setPopupDirection(d); ++ ++ delete m_movie; ++ ++ switch (d) { ++ case KPanelApplet::Left: ++ setIconAlignment((Qt::AlignmentFlags)(AlignTop|AlignLeft)); ++ m_movie = new QMovie(locate("data", "kicker/pics/kmenu_vertical.mng")); ++ break; ++ case KPanelApplet::Right: ++ setIconAlignment((Qt::AlignmentFlags)(AlignTop|AlignRight)); ++ m_movie = new QMovie(locate("data", "kicker/pics/kmenu_vertical.mng")); ++ break; ++ case KPanelApplet::Up: ++ setIconAlignment((Qt::AlignmentFlags)(AlignTop|AlignHCenter)); ++ m_movie = new QMovie(locate("data", "kicker/pics/kmenu_basic.mng")); ++ break; ++ case KPanelApplet::Down: ++ setIconAlignment((Qt::AlignmentFlags)(AlignBottom|AlignHCenter)); ++ m_movie = new QMovie(locate("data", "kicker/pics/kmenu_flipped.mng")); ++ } ++ ++ m_movie->connectUpdate(this, SLOT(updateMovie())); ++ m_movie->connectStatus(this, SLOT(slotStatus(int))); ++ m_movie->connectResize(this, SLOT(slotSetSize(const QSize&))); ++} ++ ++void KNewButton::slotSetSize(const QSize& s) ++{ ++ m_iconSize = s; ++} ++ ++double KNewButton::buttonScaleFactor(const QSize& s) const ++{ ++ double sf = 1.0; ++ ++ switch (popupDirection()) { ++ case KPanelApplet::Left: ++ case KPanelApplet::Right: ++// sf = kMin(double(s.width()) / m_iconSize.height(), double(s.height()) / m_iconSize.width()); ++// break; ++ case KPanelApplet::Up: ++ case KPanelApplet::Down: ++ sf = kMin(double(s.width()) / m_iconSize.width(), double(s.height()) / m_iconSize.height()); ++ break; ++ } ++ ++ if (sf > 0.8) sf = 1.0; ++ return sf; ++} ++ ++int KNewButton::widthForHeight(int height) const ++{ ++ int r = m_iconSize.width() * buttonScaleFactor(QSize(m_iconSize.width(), height)); ++ ++ if (!m_movie->running() && height != m_active_pixmap.height()) ++ { ++ KNewButton* that = const_cast(this); ++ QTimer::singleShot(0, that, SLOT(slotStopAnimation())); ++ } ++ ++ return r; ++} ++ ++int KNewButton::preferredDimension(int panelDim) const ++{ ++ return kMax(m_icon.width(), m_icon.height()); ++} ++ ++int KNewButton::heightForWidth(int width) const ++{ ++ int r = m_iconSize.width() * buttonScaleFactor(QSize(width, m_iconSize.height())); ++ if (!m_movie->running() && width != m_active_pixmap.width()) ++ { ++ KNewButton* that = const_cast(this); ++ QTimer::singleShot(0, that, SLOT(slotStopAnimation())); ++ } ++ return r; ++} ++ ++bool KNewButton::eventFilter(QObject *o, QEvent *e) ++{ ++ if (e->type() == QEvent::MouseButtonRelease || ++ e->type() == QEvent::MouseButtonPress || ++ e->type() == QEvent::MouseButtonDblClick ) ++ { ++ QMouseEvent *me = static_cast(e); ++ if (rect().contains(mapFromGlobal(me->globalPos()))) ++ { ++ if (m_pressedDuringPopup && m_popup && m_openTimer != -1 ++ && (me->button() & Qt::LeftButton) ) ++ return true; ++ } ++ } ++ ++ if (KickerSettings::kickoffDrawGeekoEye() && e->type() == QEvent::MouseMove) ++ { ++ QMouseEvent *me = static_cast(e); ++ if ((me->state() & MouseButtonMask) == NoButton) ++ drawEye(); ++ } ++ ++ return KButton::eventFilter(o, e); ++} ++ ++void KNewButton::drawEye() ++{ ++#define eye_x 62 ++#define eye_y 13 ++ QPoint mouse = QCursor::pos(); ++ QPoint me = mapToGlobal(QPoint(eye_x, eye_y)); ++ double a = atan2(mouse.y() - me.y(), mouse.x() - me.x()); ++ int dx = int(2.1 * cos(a)); ++ int dy = int(2.1 * sin(a)); ++ ++ QPoint newpos(eye_x+dx,eye_y+dy); ++ if (newpos!=m_oldPos) { ++ m_oldPos = newpos; ++ QPixmap pixmap = m_active_pixmap; ++ ++ double sf = 1.0; ++ ++ if(!m_movie->framePixmap().isNull()) ++ { ++ pixmap = m_movie->framePixmap(); ++ pixmap.detach(); ++ m_iconSize = pixmap.size(); ++ sf = buttonScaleFactor(size()); ++ ++ if (KickerSettings::kickoffDrawGeekoEye()) { ++ QPainter p(&pixmap); ++ p.setPen(white); ++ p.setBrush(white); ++ // p.setPen(QColor(110,185,55)); ++ p.drawRect(eye_x+dx, eye_y+dy, 2, 2); ++ p. end(); ++ } ++ } ++ ++ QWMatrix matrix; ++ switch (popupDirection()) { ++ case KPanelApplet::Left: ++ matrix.scale(sf, -sf); ++ matrix.rotate(90); ++ break; ++ case KPanelApplet::Up: ++ matrix.scale(sf, sf); ++ break; ++ case KPanelApplet::Right: ++ matrix.scale(sf, -sf); ++ matrix.rotate(90); ++ break; ++ case KPanelApplet::Down: ++ matrix.scale(sf, sf); ++ break; ++ } ++ m_active_pixmap = pixmap.xForm(matrix); ++ ++ repaint(false); ++ } ++#undef eye_x ++#undef eye_y ++} ++ ++void KNewButton::enterEvent(QEvent* e) ++{ ++ KButton::enterEvent(e); ++ ++ QSize s(size()); ++ s *= 0.25; ++ s = s.expandedTo(QSize(6,6)); ++ ++ switch (popupDirection()) { ++ case KPanelApplet::Left: ++ m_sloppyRegion = QRect(rect().topRight() - QPoint(s.width()-1, 0), s); ++ break; ++ case KPanelApplet::Right: ++ m_sloppyRegion = QRect(rect().topLeft(), s); ++ break; ++ case KPanelApplet::Up: ++ m_sloppyRegion = QRect(rect().bottomLeft() - QPoint(0, s.height()-1), s); ++ break; ++ case KPanelApplet::Down: ++ m_sloppyRegion = QRect(rect().topLeft(), s); ++ } ++ ++ m_active = true; ++ m_movie->unpause(); ++ m_movie->restart(); ++} ++ ++void KNewButton::rewindMovie() ++{ ++ m_oldPos = QPoint( -1, -1 ); ++ m_movie->unpause(); ++} ++ ++void KNewButton::dragEnterEvent(QDragEnterEvent* /*e*/) ++{ ++ if (m_hoverTimer != -1) ++ killTimer(m_hoverTimer); ++ ++ m_hoverTimer = startTimer(QApplication::startDragTime()); ++ m_mouseInside = true; ++ m_drag = true; ++} ++ ++void KNewButton::dragLeaveEvent(QDragLeaveEvent* /*e*/) ++{ ++ m_mouseInside = false; ++ m_drag = false; ++} ++ ++void KNewButton::leaveEvent(QEvent* e) ++{ ++ m_mouseInside = false; ++ if (m_hoverTimer != -1) ++ killTimer(m_hoverTimer); ++ m_hoverTimer = -1; ++ ++ KButton::leaveEvent(e); ++} ++ ++void KNewButton::mouseMoveEvent(QMouseEvent* e) ++{ ++ KButton::mouseMoveEvent(e); ++ ++ m_mouseInside = m_sloppyRegion.contains(e->pos()); ++ ++ if ( m_sloppyRegion.contains(e->pos())) ++ { ++ if (m_hoverTimer == -1 && KickerSettings::openOnHover()) ++ m_hoverTimer = startTimer(kMax(200,QApplication::doubleClickInterval()/2)); ++ } ++ else if (m_hoverTimer != -1) ++ { ++ killTimer(m_hoverTimer); ++ m_hoverTimer = -1; ++ } ++} ++ ++void KNewButton::slotStopAnimation() ++{ ++ m_active = false; ++ m_movie->pause(); ++ m_movie->restart(); ++ QTimer::singleShot(200, this, SLOT(rewindMovie())); ++} ++ ++const QPixmap& KNewButton::labelIcon() const ++{ ++ return m_active_pixmap; ++} ++ ++void KNewButton::slotExecMenu() ++{ ++ if (m_openTimer != -1) ++ killTimer(m_openTimer); ++ ++ m_openTimer = startTimer(QApplication::doubleClickInterval() * 3); ++ ++ if (m_active) ++ { ++ m_active = false; ++ m_movie->pause(); ++ m_movie->restart(); ++ } ++ ++ KButton::slotExecMenu(); ++ ++ assert(!KickerTip::tippingEnabled()); ++ assert(dynamic_cast(m_popup)); ++ ++ disconnect(dynamic_cast(m_popup), SIGNAL(aboutToHide()), this, ++ SLOT(slotStopAnimation())); ++ connect(dynamic_cast(m_popup), SIGNAL(aboutToHide()), ++ SLOT(slotStopAnimation())); ++ ++ m_popup->move(KickerLib::popupPosition(popupDirection(), m_popup, this)); ++ // I wish KMenu would properly done itself when it closes. But it doesn't. ++ ++ bool useEffect = true; // could be QApplication::isEffectEnabled() ++ useEffect = false; // too many Qt bugs to be useful ++ if (m_drag) ++ useEffect = false; ++ ++ m_drag = false; // once is enough ++ ++ if (useEffect) ++ { ++ switch (popupDirection()) { ++ case KPanelApplet::Left: ++ qScrollEffect(m_popup, QEffects::LeftScroll); ++ break; ++ case KPanelApplet::Up: ++ qScrollEffect(m_popup, QEffects::UpScroll); ++ break; ++ case KPanelApplet::Right: ++ qScrollEffect(m_popup, QEffects::RightScroll); ++ break; ++ case KPanelApplet::Down: ++ qScrollEffect(m_popup, QEffects::DownScroll); ++ break; ++ } ++ } ++ else ++ static_cast(m_popup)->show(); ++} ++ ++void KNewButton::timerEvent(QTimerEvent* e) ++{ ++ if (e->timerId() == m_hoverTimer) ++ { ++ if (m_mouseInside && !isDown()) ++ showMenu(); ++ ++ killTimer(m_hoverTimer); ++ m_hoverTimer = -1; ++ } ++ if (e->timerId() == m_openTimer) ++ { ++ killTimer(m_openTimer); ++ m_openTimer = -1; ++ } ++} +--- kicker/buttons/knewbutton.h (Revision 0) ++++ kicker/buttons/knewbutton.h (Revision 849791) +@@ -0,0 +1,98 @@ ++/***************************************************************** ++ ++Copyright (c) 2006 Stephan Binner ++ Stephan Kulow ++ Dirk Mueller ++ ++Permission is hereby granted, free of charge, to any person obtaining a copy ++of this software and associated documentation files (the "Software"), to deal ++in the Software without restriction, including without limitation the rights ++to use, copy, modify, merge, publish, distribute, sublicense, and/or sell ++copies of the Software, and to permit persons to whom the Software is ++furnished to do so, subject to the following conditions: ++ ++The above copyright notice and this permission notice shall be included in ++all copies or substantial portions of the Software. ++ ++THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR ++IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, ++FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE ++AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN ++AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN ++CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ++ ++******************************************************************/ ++ ++#ifndef __knewbutton_h__ ++#define __knewbutton_h__ ++ ++#include "kbutton.h" ++ ++#include ++#include ++ ++/** ++ * Button that contains the PanelKMenu and client menu manager. ++ */ ++class KNewButton : public KButton ++{ ++ Q_OBJECT ++ ++public: ++ KNewButton( QWidget *parent ); ++ ~KNewButton(); ++ ++ static KNewButton *self() { return m_self; } ++ ++ void loadConfig( const KConfigGroup& config ); ++ ++ virtual const QPixmap& labelIcon() const; ++ ++ virtual int widthForHeight(int height) const; ++ virtual int preferredDimension(int panelDim) const; ++ virtual int heightForWidth(int width) const; ++ ++ QColor borderColor() const; ++ ++ virtual void setPopupDirection(KPanelApplet::Direction d); ++ ++private slots: ++ void slotStatus(int); ++ void slotSetSize(const QSize&); ++ void slotStopAnimation(); ++ void rewindMovie(); ++ void updateMovie(); ++ ++protected: ++ virtual void show(); ++ virtual void slotExecMenu(); ++ virtual QString tileName() { return "KMenu"; } ++ virtual QString defaultIcon() const { return "go"; } ++ ++ virtual void enterEvent(QEvent* e); ++ virtual void leaveEvent(QEvent* e); ++ virtual void mouseMoveEvent(QMouseEvent* e); ++ virtual void dragEnterEvent(QDragEnterEvent*); ++ virtual void dragLeaveEvent(QDragLeaveEvent*); ++ virtual bool eventFilter(QObject *, QEvent *); ++ void timerEvent(QTimerEvent*); ++ ++private: ++ void drawEye(); ++ double buttonScaleFactor(const QSize& s) const; ++ ++ QMovie* m_movie; ++ QPixmap m_active_pixmap; ++ QPoint m_oldPos; ++ QSize m_iconSize; ++ QRect m_sloppyRegion; ++ int m_hoverTimer; ++ int m_openTimer; ++ bool m_active; ++ bool m_mouseInside; ++ bool m_drag; ++ ++ static KNewButton *m_self; ++}; ++ ++#endif +--- kicker/buttons/browserbutton.cpp (Revision 849788) ++++ kicker/buttons/browserbutton.cpp (Revision 849791) +@@ -65,7 +65,7 @@ + topMenu = new PanelBrowserMenu( path ); + setPopup(topMenu); + +- _menuTimer = new QTimer( this ); ++ _menuTimer = new QTimer( this, "_menuTimer" ); + connect( _menuTimer, SIGNAL(timeout()), SLOT(slotDelayedPopup()) ); + + QToolTip::add(this, i18n("Browse: %1").arg(path)); +--- kicker/buttons/kbutton.cpp (Revision 849788) ++++ kicker/buttons/kbutton.cpp (Revision 849791) +@@ -33,6 +33,7 @@ + + #include "menumanager.h" + #include "k_mnu.h" ++#include "k_mnu_stub.h" + + #include "kbutton.h" + #include "kbutton.moc" +@@ -43,7 +44,7 @@ + QToolTip::add(this, i18n("Applications, tasks and desktop sessions")); + setTitle(i18n("K Menu")); + +- setPopup(MenuManager::the()->kmenu()); ++ setPopup(MenuManager::the()->kmenu()->widget()); + MenuManager::the()->registerKButton(this); + setIcon("kmenu"); + +--- kicker/buttons/Makefile.am (Revision 849788) ++++ kicker/buttons/Makefile.am (Revision 849791) +@@ -1,10 +1,10 @@ + INCLUDES = -I$(srcdir)/../core -I$(srcdir)/../../libkicker -I../../libkicker \ +- -I$(srcdir)/../ui -I$(top_srcdir)/libkonq $(all_includes) ++ -I../ui -I$(srcdir)/../ui -I$(top_srcdir)/libkonq $(all_includes) + + noinst_LTLIBRARIES = libkicker_buttons.la + + libkicker_buttons_la_SOURCES = servicebutton.cpp bookmarksbutton.cpp \ +- browserbutton.cpp \ ++ browserbutton.cpp knewbutton.cpp \ + desktopbutton.cpp extensionbutton.cpp kbutton.cpp \ + nonkdeappbutton.cpp servicemenubutton.cpp urlbutton.cpp \ + windowlistbutton.cpp +--- applets/media/mediumbutton.cpp (Revision 849788) ++++ applets/media/mediumbutton.cpp (Revision 849791) +@@ -45,7 +45,8 @@ + #include + + MediumButton::MediumButton(QWidget *parent, const KFileItem &fileItem) +- : PanelPopupButton(parent), mActions(this, this), mFileItem(fileItem) ++ : PanelPopupButton(parent), mActions(this, this), mFileItem(fileItem), mOpenTimer(0, ++ "MediumButton::mOpenTimer") + { + KAction *a = KStdAction::paste(this, SLOT(slotPaste()), + &mActions, "pasteto"); +@@ -74,9 +75,9 @@ + + MediumButton::~MediumButton() + { +- QPopupMenu *menu = popup(); +- setPopup(0); +- delete menu; ++ QPopupMenu *menu = static_cast(popup()); ++ setPopup(0); ++ delete menu; + } + + const KFileItem &MediumButton::fileItem() const +@@ -94,29 +95,29 @@ + + void MediumButton::initPopup() + { +- QPopupMenu *old_popup = popup(); +- +- KFileItemList items; +- items.append(&mFileItem); +- +- KonqPopupMenu::KonqPopupFlags kpf = +- KonqPopupMenu::ShowProperties +- | KonqPopupMenu::ShowNewWindow; +- +- KParts::BrowserExtension::PopupFlags bef = +- KParts::BrowserExtension::DefaultPopupItems; +- +- KonqPopupMenu *new_popup = new KonqPopupMenu(0L, items, +- KURL("media:/"), mActions, 0L, +- this, kpf, bef); +- KPopupTitle *title = new KPopupTitle(new_popup); +- title->setTitle(mFileItem.text()); +- +- new_popup->insertItem(title, -1, 0); +- +- setPopup(new_popup); +- +- if (old_popup!=0L) delete old_popup; ++ QPopupMenu *old_popup = static_cast(popup()); ++ ++ KFileItemList items; ++ items.append(&mFileItem); ++ ++ KonqPopupMenu::KonqPopupFlags kpf = ++ KonqPopupMenu::ShowProperties ++ | KonqPopupMenu::ShowNewWindow; ++ ++ KParts::BrowserExtension::PopupFlags bef = ++ KParts::BrowserExtension::DefaultPopupItems; ++ ++ KonqPopupMenu *new_popup = new KonqPopupMenu(0L, items, ++ KURL("media:/"), mActions, 0L, ++ this, kpf, bef); ++ KPopupTitle *title = new KPopupTitle(new_popup); ++ title->setTitle(mFileItem.text()); ++ ++ new_popup->insertItem(title, -1, 0); ++ ++ setPopup(new_popup); ++ ++ if (old_popup!=0L) delete old_popup; + } + + void MediumButton::refreshType() +--- applets/naughty/NaughtyProcessMonitor.cpp (Revision 849788) ++++ applets/naughty/NaughtyProcessMonitor.cpp (Revision 849791) +@@ -94,7 +94,7 @@ + d = new NaughtyProcessMonitorPrivate; + d->interval_ = interval * 1000; + d->triggerLevel_ = triggerLevel; +- d->timer_ = new QTimer(this); ++ d->timer_ = new QTimer(this, "NaughtyProcessMonitorPrivate::timer"); + connect(d->timer_, SIGNAL(timeout()), this, SLOT(slotTimeout())); + } + +--- applets/launcher/quicklauncher.cpp (Revision 849788) ++++ applets/launcher/quicklauncher.cpp (Revision 849791) +@@ -110,7 +110,7 @@ + m_configAction = new KAction(i18n("Configure Quicklauncher..."), "configure", KShortcut(), + this, SLOT(slotConfigure()), this); + +- m_saveTimer = new QTimer(this); ++ m_saveTimer = new QTimer(this, "m_saveTimer"); + connect(m_saveTimer, SIGNAL(timeout()), this, SLOT(saveConfig())); + + m_popularity = new PopularityStatistics(); +--- applets/trash/trashbutton.cpp (Revision 849788) ++++ applets/trash/trashbutton.cpp (Revision 849791) +@@ -78,7 +78,7 @@ + + void TrashButton::initPopup() + { +- QPopupMenu *old_popup = popup(); ++ QPopupMenu *old_popup = static_cast(popup()); + + KFileItemList items; + items.append(&mFileItem); +--- applets/systemtray/systemtrayapplet.cpp (Revision 849788) ++++ applets/systemtray/systemtrayapplet.cpp (Revision 849791) +@@ -375,7 +375,7 @@ + connect(m_expandButton, SIGNAL(clicked()), + this, SLOT(toggleExpanded())); + +- m_autoRetractTimer = new QTimer(this); ++ m_autoRetractTimer = new QTimer(this, "m_autoRetractTimer"); + connect(m_autoRetractTimer, SIGNAL(timeout()), + this, SLOT(checkAutoRetract())); + } +--- applets/clock/clock.cpp (Revision 849788) ++++ applets/clock/clock.cpp (Revision 849791) +@@ -863,8 +863,8 @@ + _calendar(0), + _disableCalendar(false), + _clock(0), +- _timer(new QTimer(this)), +- m_layoutTimer(new QTimer(this)), ++ _timer(new QTimer(this, "ClockApplet::_timer")), ++ m_layoutTimer(new QTimer(this, "m_layoutTimer")), + m_layoutDelay(0), + m_followBackgroundSetting(true), + m_dateFollowBackgroundSetting(true), +--- applets/minipager/pagerbutton.cpp (Revision 849788) ++++ applets/minipager/pagerbutton.cpp (Revision 849791) +@@ -70,6 +70,8 @@ + m_bgPixmap(0), + m_isCommon(false), + m_currentWindow(0), ++ m_updateCompressor(0, "KMiniPagerButton::updateCompressor"), ++ m_dragSwitchTimer(0, "KMiniPagerButton::dragSwitchTimer"), + m_inside(false) + { + setToggleButton(true); +--- data/kmenu_side/Makefile.am (Revision 849788) ++++ data/kmenu_side/Makefile.am (Revision 849791) +@@ -1,6 +1,5 @@ +-kicker_kmenuside_pics_data_DATA = kside.png kside_tile.png ++kicker_kmenuside_pics_data_DATA = kside.png kside_tile.png ++kicker_kmenuside_pics_datadir = $(kde_datadir)/kicker/pics + +-kicker_kmenuside_pics_datadir = $(kde_datadir)/kicker/pics/ +- + EXTRA_DIST = $(kicker_kmenuside_pics_data_DATA) + +--- data/Makefile.am (Revision 849788) ++++ data/Makefile.am (Revision 849791) +@@ -1 +1 @@ +-SUBDIRS = icons tiles app_start_anim wallpaper kmenu_side ++SUBDIRS = icons tiles app_start_anim wallpaper kmenu_side kickoff +Kann nicht anzeigen: Dateityp ist als binär angegeben. +svn:mime-type = application/octet-stream + +Eigenschaftsänderungen: data/kickoff/cr32-action-suspend2disk.png +___________________________________________________________________ +Hinzugefügt: svn:mime-type + + application/octet-stream + +Kann nicht anzeigen: Dateityp ist als binär angegeben. +svn:mime-type = application/octet-stream + +Eigenschaftsänderungen: data/kickoff/search-tab-left.png +___________________________________________________________________ +Hinzugefügt: svn:mime-type + + application/octet-stream + +Kann nicht anzeigen: Dateityp ist als binär angegeben. +svn:mime-type = application/octet-stream + +Eigenschaftsänderungen: data/kickoff/main_corner_tr.png +___________________________________________________________________ +Hinzugefügt: svn:mime-type + + application/octet-stream + +Kann nicht anzeigen: Dateityp ist als binär angegeben. +svn:mime-type = application/octet-stream + +Eigenschaftsänderungen: data/kickoff/cr48-app-recently_used.png +___________________________________________________________________ +Hinzugefügt: svn:mime-type + + application/octet-stream + +Kann nicht anzeigen: Dateityp ist als binär angegeben. +svn:mime-type = application/octet-stream + +Eigenschaftsänderungen: data/kickoff/search-tab-top-left.png +___________________________________________________________________ +Hinzugefügt: svn:mime-type + + application/octet-stream + +Kann nicht anzeigen: Dateityp ist als binär angegeben. +svn:mime-type = application/octet-stream + +Eigenschaftsänderungen: data/kickoff/right_triangle.png +___________________________________________________________________ +Hinzugefügt: svn:mime-type + + application/octet-stream + +Kann nicht anzeigen: Dateityp ist als binär angegeben. +svn:mime-type = application/octet-stream + +Eigenschaftsänderungen: data/kickoff/cr16-action-suspend2disk.png +___________________________________________________________________ +Hinzugefügt: svn:mime-type + + application/octet-stream + +Kann nicht anzeigen: Dateityp ist als binär angegeben. +svn:mime-type = application/octet-stream + +Eigenschaftsänderungen: data/kickoff/crsc-action-suspend2ram.svgz +___________________________________________________________________ +Hinzugefügt: svn:mime-type + + application/octet-stream + +Kann nicht anzeigen: Dateityp ist als binär angegeben. +svn:mime-type = application/octet-stream + +Eigenschaftsänderungen: data/kickoff/cr128-action-suspend2ram.png +___________________________________________________________________ +Hinzugefügt: svn:mime-type + + application/octet-stream + +Kann nicht anzeigen: Dateityp ist als binär angegeben. +svn:mime-type = application/octet-stream + +Eigenschaftsänderungen: data/kickoff/cr32-action-leave.png +___________________________________________________________________ +Hinzugefügt: svn:mime-type + + application/octet-stream + +Kann nicht anzeigen: Dateityp ist als binär angegeben. +svn:mime-type = application/octet-stream + +Eigenschaftsänderungen: data/kickoff/left_triangle.png +___________________________________________________________________ +Hinzugefügt: svn:mime-type + + application/octet-stream + +Kann nicht anzeigen: Dateityp ist als binär angegeben. +svn:mime-type = application/octet-stream + +Eigenschaftsänderungen: data/kickoff/menu_separator.png +___________________________________________________________________ +Hinzugefügt: svn:mime-type + + application/octet-stream + +Kann nicht anzeigen: Dateityp ist als binär angegeben. +svn:mime-type = application/octet-stream + +Eigenschaftsänderungen: data/kickoff/cr32-action-suspend2ram.png +___________________________________________________________________ +Hinzugefügt: svn:mime-type + + application/octet-stream + +Kann nicht anzeigen: Dateityp ist als binär angegeben. +svn:mime-type = application/octet-stream + +Eigenschaftsänderungen: data/kickoff/cr48-action-leave.png +___________________________________________________________________ +Hinzugefügt: svn:mime-type + + application/octet-stream + +Kann nicht anzeigen: Dateityp ist als binär angegeben. +svn:mime-type = application/octet-stream + +Eigenschaftsänderungen: data/kickoff/cr16-action-suspend2ram.png +___________________________________________________________________ +Hinzugefügt: svn:mime-type + + application/octet-stream + +Kann nicht anzeigen: Dateityp ist als binär angegeben. +svn:mime-type = application/octet-stream + +Eigenschaftsänderungen: data/kickoff/search-tab-top-center.png +___________________________________________________________________ +Hinzugefügt: svn:mime-type + + application/octet-stream + +Kann nicht anzeigen: Dateityp ist als binär angegeben. +svn:mime-type = application/octet-stream + +Eigenschaftsänderungen: data/kickoff/search-tab-center.png +___________________________________________________________________ +Hinzugefügt: svn:mime-type + + application/octet-stream + +Kann nicht anzeigen: Dateityp ist als binär angegeben. +svn:mime-type = application/octet-stream + +Eigenschaftsänderungen: data/kickoff/cr64-action-suspend2ram.png +___________________________________________________________________ +Hinzugefügt: svn:mime-type + + application/octet-stream + +Kann nicht anzeigen: Dateityp ist als binär angegeben. +svn:mime-type = application/octet-stream + +Eigenschaftsänderungen: data/kickoff/cr48-action-suspend2ram.png +___________________________________________________________________ +Hinzugefügt: svn:mime-type + + application/octet-stream + +Kann nicht anzeigen: Dateityp ist als binär angegeben. +svn:mime-type = application/octet-stream + +Eigenschaftsänderungen: data/kickoff/search-gradient.png +___________________________________________________________________ +Hinzugefügt: svn:mime-type + + application/octet-stream + +Kann nicht anzeigen: Dateityp ist als binär angegeben. +svn:mime-type = application/octet-stream + +Eigenschaftsänderungen: data/kickoff/crsc-action-leave.svgz +___________________________________________________________________ +Hinzugefügt: svn:mime-type + + application/octet-stream + +Kann nicht anzeigen: Dateityp ist als binär angegeben. +svn:mime-type = application/octet-stream + +Eigenschaftsänderungen: data/kickoff/kmenu_vertical.mng +___________________________________________________________________ +Hinzugefügt: svn:mime-type + + application/octet-stream + +Kann nicht anzeigen: Dateityp ist als binär angegeben. +svn:mime-type = application/octet-stream + +Eigenschaftsänderungen: data/kickoff/cr64-action-suspend2disk.png +___________________________________________________________________ +Hinzugefügt: svn:mime-type + + application/octet-stream + +Kann nicht anzeigen: Dateityp ist als binär angegeben. +svn:mime-type = application/octet-stream + +Eigenschaftsänderungen: data/kickoff/cr48-action-suspend2disk.png +___________________________________________________________________ +Hinzugefügt: svn:mime-type + + application/octet-stream + +Kann nicht anzeigen: Dateityp ist als binär angegeben. +svn:mime-type = application/octet-stream + +Eigenschaftsänderungen: data/kickoff/resize_handle.png +___________________________________________________________________ +Hinzugefügt: svn:mime-type + + application/octet-stream + +Kann nicht anzeigen: Dateityp ist als binär angegeben. +svn:mime-type = application/octet-stream + +Eigenschaftsänderungen: data/kickoff/kmenu_basic.mng +___________________________________________________________________ +Hinzugefügt: svn:mime-type + + application/octet-stream + +Kann nicht anzeigen: Dateityp ist als binär angegeben. +svn:mime-type = application/octet-stream + +Eigenschaftsänderungen: data/kickoff/kmenu_flipped.mng +___________________________________________________________________ +Hinzugefügt: svn:mime-type + + application/octet-stream + +Kann nicht anzeigen: Dateityp ist als binär angegeben. +svn:mime-type = application/octet-stream + +Eigenschaftsänderungen: data/kickoff/search-running.mng +___________________________________________________________________ +Hinzugefügt: svn:mime-type + + application/octet-stream + +Kann nicht anzeigen: Dateityp ist als binär angegeben. +svn:mime-type = application/octet-stream + +Eigenschaftsänderungen: data/kickoff/search-tab-right.png +___________________________________________________________________ +Hinzugefügt: svn:mime-type + + application/octet-stream + +Kann nicht anzeigen: Dateityp ist als binär angegeben. +svn:mime-type = application/octet-stream + +Eigenschaftsänderungen: data/kickoff/search-tab-top-right.png +___________________________________________________________________ +Hinzugefügt: svn:mime-type + + application/octet-stream + +--- data/kickoff/Makefile.am (Revision 0) ++++ data/kickoff/Makefile.am (Revision 849791) +@@ -0,0 +1,14 @@ ++kicker_kmenuside_pics_data_DATA = resize_handle.png \ ++ main_corner_tl.png main_corner_tr.png search-gradient.png \ ++ menu_separator.png search-tab-center.png search-tab-left.png \ ++ search-tab-right.png search-tab-top-center.png search-tab-top-left.png \ ++ left_triangle.png right_triangle.png \ ++ kmenu_basic.mng kmenu_flipped.mng kmenu_vertical.mng \ ++ search-tab-top-right.png search-gradient-topdown.png search-running.mng ++ ++kicker_kmenuside_pics_datadir = $(kde_datadir)/kicker/pics ++ ++EXTRA_DIST = $(kicker_kmenuside_pics_data_DATA) ++ ++kickerdir = $(kde_datadir)/kicker/icons ++kicker_ICON = leave recently_used suspend2disk suspend2ram +Kann nicht anzeigen: Dateityp ist als binär angegeben. +svn:mime-type = application/octet-stream + +Eigenschaftsänderungen: data/kickoff/cr128-action-suspend2disk.png +___________________________________________________________________ +Hinzugefügt: svn:mime-type + + application/octet-stream + +Kann nicht anzeigen: Dateityp ist als binär angegeben. +svn:mime-type = application/octet-stream + +Eigenschaftsänderungen: data/kickoff/crsc-action-suspend2disk.svgz +___________________________________________________________________ +Hinzugefügt: svn:mime-type + + application/octet-stream + +Kann nicht anzeigen: Dateityp ist als binär angegeben. +svn:mime-type = application/octet-stream + +Eigenschaftsänderungen: data/kickoff/search-gradient-topdown.png +___________________________________________________________________ +Hinzugefügt: svn:mime-type + + application/octet-stream + +Kann nicht anzeigen: Dateityp ist als binär angegeben. +svn:mime-type = application/octet-stream + +Eigenschaftsänderungen: data/kickoff/main_corner_tl.png +___________________________________________________________________ +Hinzugefügt: svn:mime-type + + application/octet-stream + + +Eigenschaftsänderungen: data/kickoff +___________________________________________________________________ +Hinzugefügt: svn:ignore + + Makefile +Makefile.in + + diff --git a/opensuse/core/tdebase/kio-media-errorhandling.diff b/opensuse/core/tdebase/kio-media-errorhandling.diff new file mode 100644 index 000000000..fd9420f3b --- /dev/null +++ b/opensuse/core/tdebase/kio-media-errorhandling.diff @@ -0,0 +1,18 @@ +Index: kioslave/media/mediaimpl.cpp +=================================================================== +--- kioslave/media/mediaimpl.cpp.orig ++++ kioslave/media/mediaimpl.cpp +@@ -274,6 +274,13 @@ bool MediaImpl::ensureMediumMounted(Medi + return m_lastErrorCode==0; + } + ++ if (medium.id().isEmpty()) ++ { ++ m_lastErrorCode = KIO::ERR_COULD_NOT_MOUNT; ++ m_lastErrorMessage = i18n("No such medium."); ++ return false; ++ } ++ + return true; + } + diff --git a/opensuse/core/tdebase/klipperrc.diff b/opensuse/core/tdebase/klipperrc.diff new file mode 100644 index 000000000..d18b4852f --- /dev/null +++ b/opensuse/core/tdebase/klipperrc.diff @@ -0,0 +1,22 @@ +Index: klipper/klipperrc.desktop +=================================================================== +--- klipper/klipperrc.desktop.orig ++++ klipper/klipperrc.desktop +@@ -232,7 +232,7 @@ Number of commands=5 + Regexp=^https?://. + + [Action_1/Command_0] +-Commandline=kfmclient exec %s ++Commandline=kfmclient openURL %s + Description=Open with &Konqueror + Description[af]=Maak oop met Konqueror + Description[ar]=Ø¥Ùتح بــ &Konqueror +@@ -1644,7 +1644,7 @@ Number of commands=5 + Regexp=^ftp://. + + [Action_6/Command_0] +-Commandline=kfmclient exec %s ++Commandline=kfmclient openURL %s + Description=Open with &Konqueror + Description[af]=Maak oop met Konqueror + Description[ar]=Ø¥Ùتح بــ &Konqueror diff --git a/opensuse/core/tdebase/kmenu-search-fs20050503-fixed.diff b/opensuse/core/tdebase/kmenu-search-fs20050503-fixed.diff new file mode 100644 index 000000000..aa36d6a22 --- /dev/null +++ b/opensuse/core/tdebase/kmenu-search-fs20050503-fixed.diff @@ -0,0 +1,342 @@ +Index: kicker/kicker/ui/k_mnu.cpp +=================================================================== +--- kicker/kicker/ui/k_mnu.cpp.orig ++++ kicker/kicker/ui/k_mnu.cpp +@@ -26,9 +26,13 @@ CONNECTION WITH THE SOFTWARE OR THE USE + #include + #include + ++#include + #include ++#include + #include + #include ++#include ++#include + + #include + #include +@@ -40,9 +44,11 @@ CONNECTION WITH THE SOFTWARE OR THE USE + #include + #include + #include ++#include + #include + #include + #include ++#include + #include + + #include "client_mnu.h" +@@ -58,9 +64,12 @@ CONNECTION WITH THE SOFTWARE OR THE USE + #include "quickbrowser_mnu.h" + #include "recentapps.h" + ++ + #include "k_mnu.h" + #include "k_mnu.moc" + ++const int PanelKMenu::searchLineID(23140 /*whatever*/); ++ + PanelKMenu::PanelKMenu() + : PanelServiceMenu(QString::null, QString::null, 0, "KMenu") + , bookmarkMenu(0) +@@ -165,6 +174,26 @@ void PanelKMenu::paletteChanged() + } + } + ++ ++/* A MenuHBox is supposed to be inserted into a menu. ++ * You can set a special widget in the hbox which will ++ * get the focus if the user moves up or down with the ++ * cursor keys ++ */ ++class MenuHBox : public QHBox { ++public: ++ MenuHBox(PanelKMenu* parent) : QHBox(parent) ++ { ++ } ++ ++ virtual void keyPressEvent(QKeyEvent *e) ++ { ++ ++ } ++private: ++ PanelKMenu *parent; ++}; ++ + void PanelKMenu::initialize() + { + // kdDebug(1210) << "PanelKMenu::initialize()" << endl; +@@ -191,13 +220,29 @@ void PanelKMenu::initialize() + // add services + PanelServiceMenu::initialize(); + ++ // Insert search field ++ QHBox* hbox = new QHBox( this ); ++ KToolBarButton *clearButton = new KToolBarButton( "locationbar_erase", 0, hbox ); ++ searchEdit = new KLineEdit(hbox); searchEdit->setClickMessage(" "+i18n("Press '/' to search...")); ++ hbox->setFocusPolicy(QWidget::StrongFocus); ++ hbox->setFocusProxy(searchEdit); ++ hbox->setSpacing( 3 ); ++ connect(clearButton, SIGNAL(clicked()), searchEdit, SLOT(clear())); ++ connect(this, SIGNAL(aboutToHide()), this, SLOT(slotClearSearch())); ++ connect(searchEdit, SIGNAL(textChanged(const QString&)), ++ this, SLOT( slotUpdateSearch( const QString&))); ++ insertItem(hbox, searchLineID, 0); ++ ++ //QToolTip::add(clearButton, i18n("Clear Search")); ++ //QToolTip::add(searchEdit, i18n("Enter the name of an application")); ++ + if (KickerSettings::showMenuTitles()) + { + int id; + id = insertItem(new PopupMenuTitle(i18n("All Applications"), font()), -1 /* id */, 0); +- setItemEnabled( id, false ); ++ setItemEnabled(id, false); + id = insertItem(new PopupMenuTitle(i18n("Actions"), font()), -1 /* id */, -1); +- setItemEnabled( id, false ); ++ setItemEnabled(id, false); + } + + // create recent menu section +@@ -737,3 +782,43 @@ void PanelKMenu::clearRecentMenuItems() + } + + ++void PanelKMenu::slotUpdateSearch(const QString& searchString) ++{ ++ kdDebug() << "Searching for " << searchString << endl; ++ setSearchString(searchString); ++} ++ ++void PanelKMenu::slotClearSearch() ++{ ++ if (searchEdit && searchEdit->text().isEmpty() == false) { ++ QTimer::singleShot(0, searchEdit, SLOT(clear())); ++ } ++} ++ ++void PanelKMenu::keyPressEvent(QKeyEvent* e) ++{ ++ // We move the focus to the search field if the ++ // user presses '/'. This is the same shortcut as ++ // konqueror is using, and afaik it's hardcoded both ++ // here and there. This sucks badly for many non-us ++ // keyboard layouts, but for the sake of consistency ++ // we follow konqueror. ++ if (!searchEdit) return KPanelMenu::keyPressEvent(e); ++ ++ if (e->key() == Qt::Key_Slash && !searchEdit->hasFocus()) { ++ if (indexOf(searchLineID) >=0 ) { ++ setActiveItem(indexOf(searchLineID)); ++ } ++ } ++ else if (e->key() == Qt::Key_Escape && searchEdit->text().isEmpty() == false) { ++ searchEdit->clear(); ++ } ++ else if (e->key() == Qt::Key_Delete && !searchEdit->hasFocus() && ++ searchEdit->text().isEmpty() == false) ++ { ++ searchEdit->clear(); ++ } ++ else { ++ KPanelMenu::keyPressEvent(e); ++ } ++} +Index: kicker/kicker/ui/k_mnu.h +=================================================================== +--- kicker/kicker/ui/k_mnu.h.orig ++++ kicker/kicker/ui/k_mnu.h +@@ -73,6 +73,8 @@ protected slots: + void slotSaveSession(); + void slotRunCommand(); + void slotEditUserContact(); ++ void slotUpdateSearch(const QString &searchtext); ++ void slotClearSearch(); + void paletteChanged(); + virtual void configChanged(); + void updateRecent(); +@@ -89,6 +91,8 @@ protected: + void doNewSession(bool lock); + void createRecentMenuItems(); + virtual void clearSubmenus(); ++ void filterMenu(PanelServiceMenu* menu, const QString &searchString); ++ void keyPressEvent(QKeyEvent* e); + + private: + QPopupMenu *sessionsMenu; +@@ -101,6 +105,8 @@ private: + KActionCollection *actionCollection; + KBookmarkOwner *bookmarkOwner; + PopupMenuList dynamicSubMenus; ++ KLineEdit *searchEdit; ++ static const int searchLineID; + }; + + #endif +Index: kicker/kicker/ui/service_mnu.cpp +=================================================================== +--- kicker/kicker/ui/service_mnu.cpp.orig ++++ kicker/kicker/ui/service_mnu.cpp +@@ -26,6 +26,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE + #include + #include + #include ++#include + + #include + #include +@@ -100,6 +101,8 @@ void PanelServiceMenu::initialize() + clear(); + + clearSubmenus(); ++ searchSubMenuIDs.clear(); ++ searchMenuItems.clear(); + doInitialize(); + } + +@@ -296,6 +299,10 @@ void PanelServiceMenu::fillMenu(KService + + int newId = insertItem(iconset, groupCaption, m, id++); + entryMap_.insert(newId, static_cast(g)); ++ // This submenu will be searched when applying a search string ++ searchSubMenuIDs[m] = newId; ++ // Also search the submenu name itself ++ searchMenuItems.insert(newId); + // We have to delete the sub menu our selves! (See Qt docs.) + subMenus.append(m); + } +@@ -308,6 +315,7 @@ void PanelServiceMenu::fillMenu(KService + } + + KService::Ptr s(static_cast(e)); ++ searchMenuItems.insert(id); + insertMenuItem(s, id++, -1, &suppressGenericNames, QString::null, specialTitle[s->name()], categoryIcon[s->name()] ); + } + else if (e->isType(KST_KServiceSeparator)) +@@ -900,6 +908,8 @@ void PanelServiceMenu::slotClear() + delete *it; + } + subMenus.clear(); ++ searchSubMenuIDs.clear(); ++ searchMenuItems.clear(); + } + + void PanelServiceMenu::selectFirstItem() +@@ -924,3 +934,72 @@ void PanelServiceMenu::updateRecentlyUse + RecentlyLaunchedApps::the().m_bNeedToUpdate = true; + } + ++void PanelServiceMenu::setSearchString(const QString &searchString) ++{ ++ // We must initialize the menu, because it might have not been opened before ++ initialize(); ++ ++ bool foundSomething = false; ++ std::set nonemptyMenus; ++ std::set::const_iterator menuItemIt(searchMenuItems.begin()); ++ // Apply the filter on this menu ++ for (; menuItemIt != searchMenuItems.end(); ++menuItemIt) { ++ int id = *menuItemIt; ++ KService* s = dynamic_cast< KService* >( static_cast< KSycocaEntry* >( entryMap_[ id ])); ++ QString menuText = text(id); ++ if (menuText.contains(searchString, false) > 0 ++ || ( s != NULL && ( s->name().contains(searchString, false) > 0 ++ || s->exec().contains(searchString, false) > 0 ++ || s->comment().contains(searchString, false) > 0 ++ || s->genericName().contains(searchString, false) > 0 ++ || s->exec().contains(searchString, false) > 0 ) ++ )) { ++ setItemEnabled(id, true); ++ foundSomething = true; ++ nonemptyMenus.insert(id); ++ } ++ else { ++ setItemEnabled(id, false); ++ } ++ } ++ // Apply the filter on this menu ++ /*for (int i=count()-1; i>=0; --i) { ++ int id = idAt(i); ++ QString menuText = text(id); ++ if (menuText.contains(searchString, false) > 0) { ++ setItemEnabled(id, true); ++ foundSomething = true; ++ nonemptyMenus.insert(id); ++ } ++ else { ++ setItemEnabled(id, false); ++ } ++ }*/ ++ ++ PanelServiceMenuMap::iterator it(searchSubMenuIDs.begin()); ++ // Apply the search filter on submenus ++ for (; it != searchSubMenuIDs.end(); ++it) { ++ it.key()->setSearchString(searchString); ++ if (nonemptyMenus.find(it.data()) != nonemptyMenus.end()) { ++ // if the current menu is a match already, we don't ++ // block access to the contained items ++ setItemEnabled(it.data(), true); ++ it.key()->setSearchString(QString()); ++ foundSomething = true; ++ } ++ else if (it.key()->hasSearchResults()) { ++ setItemEnabled(it.data(), true); ++ foundSomething = true; ++ } ++ else { ++ setItemEnabled(it.data(), false); ++ } ++ } ++ ++ hasSearchResults_ = foundSomething; ++} ++ ++bool PanelServiceMenu::hasSearchResults() ++{ ++ return hasSearchResults_; ++} +Index: kicker/kicker/ui/service_mnu.h +=================================================================== +--- kicker/kicker/ui/service_mnu.h.orig ++++ kicker/kicker/ui/service_mnu.h +@@ -26,6 +26,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE + + #include + #include ++#include + + #include + #include +@@ -41,8 +42,11 @@ CONNECTION WITH THE SOFTWARE OR THE USE + * @author Rik Hemsley + */ + ++class KLineEdit; + typedef QMap EntryMap; + typedef QValueVector PopupMenuList; ++class PanelServiceMenu; ++typedef QMap PanelServiceMenuMap; + + class KDE_EXPORT PanelServiceMenu : public KPanelMenu + { +@@ -63,6 +67,8 @@ public: + virtual void showMenu(); + bool highlightMenuItem( const QString &menuId ); + void selectFirstItem(); ++ void setSearchString(const QString& searchString); ++ bool hasSearchResults(); + + private: + void fillMenu( KServiceGroup::Ptr &_root, KServiceGroup::List &_list, +@@ -115,6 +121,9 @@ protected: + bool addmenumode_; + QPoint startPos_; + PopupMenuList subMenus; ++ PanelServiceMenuMap searchSubMenuIDs; ++ bool hasSearchResults_; ++ std::set searchMenuItems; + + private slots: + void slotContextMenu(int); diff --git a/opensuse/core/tdebase/kmenu-search-slowdown-fix.diff b/opensuse/core/tdebase/kmenu-search-slowdown-fix.diff new file mode 100644 index 000000000..83c771db2 --- /dev/null +++ b/opensuse/core/tdebase/kmenu-search-slowdown-fix.diff @@ -0,0 +1,129 @@ +Index: kicker/kicker/ui/k_mnu.cpp +=================================================================== +--- kicker/kicker/ui/k_mnu.cpp.orig ++++ kicker/kicker/ui/k_mnu.cpp +@@ -771,6 +771,7 @@ void PanelKMenu::updateRecent() + insertSeparator(RecentlyLaunchedApps::the().m_nNumMenuItems); + } + } ++ iconsLoaded_ = false; + } + + void PanelKMenu::clearRecentMenuItems() +Index: kicker/kicker/ui/service_mnu.cpp +=================================================================== +--- kicker/kicker/ui/service_mnu.cpp.orig ++++ kicker/kicker/ui/service_mnu.cpp +@@ -63,13 +63,20 @@ PanelServiceMenu::PanelServiceMenu(const + insertInlineHeader_( insertInlineHeader ), + clearOnClose_(false), + addmenumode_(addmenumode), +- popupMenu_(0) ++ popupMenu_(0), ++ iconsLoaded_(false) + { + excludeNoDisplay_=true; + + connect(KSycoca::self(), SIGNAL(databaseChanged()), + SLOT(slotClearOnClose())); + connect(this, SIGNAL(aboutToHide()), this, SLOT(slotClose())); ++ ++ const int iconSize = KickerSettings::menuEntryHeight(); ++ QPixmap pix(iconSize,iconSize); ++ QBitmap map(iconSize,iconSize,true); ++ pix.setMask(map); ++ emptyiconset = QIconSet(pix,pix); + } + + PanelServiceMenu::~PanelServiceMenu() +@@ -103,6 +110,7 @@ void PanelServiceMenu::initialize() + clearSubmenus(); + searchSubMenuIDs.clear(); + searchMenuItems.clear(); ++ iconsLoaded_ = false; + doInitialize(); + } + +@@ -289,15 +297,13 @@ void PanelServiceMenu::fillMenu(KService + newSubMenu(g->name(), g->relPath(), this, g->name().utf8(), inlineHeaderName); + m->setCaption(groupCaption); + +- QIconSet iconset = KickerLib::menuIconSet(g->icon()); +- + if (separatorNeeded) + { + insertSeparator(); + separatorNeeded = false; + } + +- int newId = insertItem(iconset, groupCaption, m, id++); ++ int newId = insertItem(emptyiconset,groupCaption, m, id++); + entryMap_.insert(newId, static_cast(g)); + // This submenu will be searched when applying a search string + searchSubMenuIDs[m] = newId; +@@ -392,6 +398,12 @@ void PanelServiceMenu::doInitialize() + + void PanelServiceMenu::configChanged() + { ++ const int iconSize = KickerSettings::menuEntryHeight(); ++ QPixmap pix(iconSize,iconSize); ++ QBitmap map(iconSize,iconSize,true); ++ pix.setMask(map); ++ emptyiconset = QIconSet(pix,pix); ++ + deinitialize(); + } + +@@ -456,9 +468,9 @@ void PanelServiceMenu::insertMenuItem(KS + + int newId; + if ( label.isEmpty() ) +- newId = insertItem(KickerLib::menuIconSet(s->icon()), serviceName, nId, nIndex); ++ newId = insertItem(emptyiconset, serviceName, nId, nIndex); + else +- newId = insertItem(KickerLib::menuIconSet(s->icon()), label, nId, nIndex); ++ newId = insertItem(emptyiconset, label, nId, nIndex); + entryMap_.insert(newId, static_cast(s)); + } + +@@ -1003,3 +1015,23 @@ bool PanelServiceMenu::hasSearchResults( + { + return hasSearchResults_; + } ++ ++void PanelServiceMenu::slotAboutToShow() ++{ ++ KPanelMenu::slotAboutToShow(); ++ ++ if (!iconsLoaded_) { ++ EntryMap::Iterator mapIt; ++ for ( mapIt = entryMap_.begin(); mapIt != entryMap_.end(); ++mapIt ) { ++ KService *s = dynamic_cast(static_cast(mapIt.data())); ++ if (s) ++ changeItem(mapIt.key(),KickerLib::menuIconSet(s->icon()),text(mapIt.key())); ++ else { ++ KServiceGroup *g = dynamic_cast(static_cast(mapIt.data())); ++ if (g) ++ changeItem(mapIt.key(),KickerLib::menuIconSet(g->icon()),text(mapIt.key())); ++ } ++ } ++ iconsLoaded_ = true; ++ } ++} +Index: kicker/kicker/ui/service_mnu.h +=================================================================== +--- kicker/kicker/ui/service_mnu.h.orig ++++ kicker/kicker/ui/service_mnu.h +@@ -124,9 +124,12 @@ protected: + PanelServiceMenuMap searchSubMenuIDs; + bool hasSearchResults_; + std::set searchMenuItems; ++ QIconSet emptyiconset; ++ bool iconsLoaded_; + + private slots: + void slotContextMenu(int); ++ void slotAboutToShow(); + + private: + enum ContextMenuEntry { AddItemToPanel, EditItem, AddMenuToPanel, EditMenu, diff --git a/opensuse/core/tdebase/knetattach-show.diff b/opensuse/core/tdebase/knetattach-show.diff new file mode 100644 index 000000000..0f24370fd --- /dev/null +++ b/opensuse/core/tdebase/knetattach-show.diff @@ -0,0 +1,7 @@ +--- knetattach/knetattach.desktop 2008/12/02 13:49:00 1.1 ++++ knetattach/knetattach.desktop 2008/12/02 14:06:16 +@@ -80,3 +80,4 @@ + X-KDE-StartupNotify=true + Categories=Qt;KDE;Network; + DocPath=knetattach/index.html ++OnlyShowIn=KDE; diff --git a/opensuse/core/tdebase/kompmgr_use_defaults.diff b/opensuse/core/tdebase/kompmgr_use_defaults.diff new file mode 100644 index 000000000..00863fc66 --- /dev/null +++ b/opensuse/core/tdebase/kompmgr_use_defaults.diff @@ -0,0 +1,34 @@ +Index: kwin/kcmkwin/kwinoptions/windows.cpp +=================================================================== +--- kwin/kcmkwin/kwinoptions/windows.cpp.orig ++++ kwin/kcmkwin/kwinoptions/windows.cpp +@@ -46,6 +46,7 @@ + #include + #include + ++#include + #include + #include + #include +@@ -1524,6 +1525,8 @@ void KTranslucencyConfig::load( void ) + movingWindowOpacity->setEnabled(movingWindowTransparency->isChecked()); + dockWindowOpacity->setEnabled(dockWindowTransparency->isChecked()); + ++ if( !QFile::exists( QDir::homeDirPath() + "/.xcompmgrrc" )) ++ system( "/bin/cp /etc/opt/kde3/share/config/xcompmgrrc $HOME/.xcompmgrrc" ); + KConfig conf_(QDir::homeDirPath() + "/.xcompmgrrc"); + conf_.setGroup("xcompmgr"); + +Index: kwin/kompmgr/kompmgr.c +=================================================================== +--- kwin/kompmgr/kompmgr.c.orig ++++ kwin/kompmgr/kompmgr.c +@@ -2431,6 +2431,8 @@ loadConfig(char *filename){ + + strcat(filename, home); + strcat(filename, configfile); ++ if( access( filename, R_OK ) != 0 ) ++ system( "/bin/cp /etc/opt/kde3/share/config/xcompmgrrc $HOME/.xcompmgrrc" ); + } + + printf("trying '%s' as configfile\n\n", filename); diff --git a/opensuse/core/tdebase/konq-combo-editor.diff b/opensuse/core/tdebase/konq-combo-editor.diff new file mode 100644 index 000000000..8a205fb9f --- /dev/null +++ b/opensuse/core/tdebase/konq-combo-editor.diff @@ -0,0 +1,42 @@ +Index: konqueror/konq_combo.h +=================================================================== +--- konqueror/konq_combo.h.orig ++++ konqueror/konq_combo.h +@@ -87,6 +87,7 @@ signals: + + private slots: + void slotCleared(); ++ void slotRemoved( const QString& item ); + void slotSetIcon( int index ); + void slotActivated( const QString& text ); + +Index: konqueror/konq_combo.cc +=================================================================== +--- konqueror/konq_combo.cc.orig ++++ konqueror/konq_combo.cc +@@ -128,6 +128,9 @@ KonqCombo::KonqCombo( QWidget *parent, c + connect( this, SIGNAL(activated( const QString& )), + SLOT(slotActivated( const QString& )) ); + ++ setHistoryEditorEnabled( true ); ++ connect( this, SIGNAL(removed( const QString&) ), SLOT(slotRemoved( const QString& )) ); ++ + if ( !kapp->dcopClient()->isAttached() ) + kapp->dcopClient()->attach(); + } +@@ -506,6 +509,15 @@ void KonqCombo::slotCleared() + kapp->dcopClient()->send( "konqueror*", "KonquerorIface", "comboCleared(QCString)", data); + } + ++void KonqCombo::slotRemoved( const QString& item ) ++{ ++ QByteArray data; ++ QDataStream s( data, IO_WriteOnly ); ++ s << item << kapp->dcopClient()->defaultObject(); ++ kapp->dcopClient()->send( "konqueror*", "KonquerorIface", ++ "removeFromCombo(QString,QCString)", data); ++} ++ + void KonqCombo::removeURL( const QString& url ) + { + setUpdatesEnabled( false ); diff --git a/opensuse/core/tdebase/konsole-schema-update.diff b/opensuse/core/tdebase/konsole-schema-update.diff new file mode 100644 index 000000000..dbba940dd --- /dev/null +++ b/opensuse/core/tdebase/konsole-schema-update.diff @@ -0,0 +1,33 @@ +Index: konsole/other/BlackOnWhite.schema +=================================================================== +--- konsole/other/BlackOnWhite.schema.orig ++++ konsole/other/BlackOnWhite.schema +@@ -18,11 +18,11 @@ color 1 255 255 255 1 0 # regular b + + color 2 0 0 0 0 0 # regular color 0 Black + color 3 178 24 24 0 0 # regular color 1 Red +-color 4 24 178 24 0 0 # regular color 2 Green ++color 4 0 128 0 0 0 # regular color 2 Green + color 5 178 104 24 0 0 # regular color 3 Yellow + color 6 24 24 178 0 0 # regular color 4 Blue +-color 7 178 24 178 0 0 # regular color 5 Magenta +-color 8 24 178 178 0 0 # regular color 6 Cyan ++color 7 128 0 128 0 0 # regular color 5 Magenta ++color 8 16 128 128 0 0 # regular color 6 Cyan + color 9 178 178 178 0 0 # regular color 7 White + + # intensive colors +@@ -34,9 +34,9 @@ color 11 255 255 255 1 0 # intensive b + + color 12 104 104 104 0 0 # intensive color 0 + color 13 255 84 84 0 0 # intensive color 1 +-color 14 84 255 84 0 0 # intensive color 2 +-color 15 255 255 84 0 0 # intensive color 3 ++color 14 0 178 0 0 0 # intensive color 2 ++color 15 192 193 64 0 0 # intensive color 3 + color 16 84 84 255 0 0 # intensive color 4 +-color 17 255 84 255 0 0 # intensive color 5 +-color 18 84 255 255 0 0 # intensive color 6 ++color 17 178 0 178 0 0 # intensive color 5 ++color 18 55 178 178 0 0 # intensive color 6 + color 19 255 255 255 0 0 # intensive color 7 diff --git a/opensuse/core/tdebase/konsole_keytab.diff b/opensuse/core/tdebase/konsole_keytab.diff new file mode 100644 index 000000000..18698e2b2 --- /dev/null +++ b/opensuse/core/tdebase/konsole_keytab.diff @@ -0,0 +1,17 @@ +Index: konsole/other/x11r5.keytab +=================================================================== +--- konsole/other/x11r5.keytab.orig ++++ konsole/other/x11r5.keytab +@@ -32,10 +32,10 @@ key Left -Shift : "\EOD" + + key Enter : "\r" + +-key Home : "\E[1~" ++key Home : "\E[H" + key Insert-Shift : "\E[2~" + key Delete : "\E[3~" +-key End : "\E[4~" ++key End : "\E[F" + key Prior -Shift : "\E[5~" + key Next -Shift : "\E[6~" + diff --git a/opensuse/core/tdebase/kpamgreeter.diff b/opensuse/core/tdebase/kpamgreeter.diff new file mode 100644 index 000000000..ff8241623 --- /dev/null +++ b/opensuse/core/tdebase/kpamgreeter.diff @@ -0,0 +1,852 @@ +Index: kdm/backend/client.c +=================================================================== +--- kdm/backend/client.c.orig ++++ kdm/backend/client.c +@@ -547,6 +547,9 @@ Verify( GConvFunc gconv, int rootok ) + } else + psrv = PAMService; + pdata.usecur = TRUE; ++ } else if (!strcmp( curtype, "pam" )) { ++ psrv = PAMService; ++ pdata.usecur = FALSE; + } else { + sprintf( psrvb, "%.31s-%.31s", PAMService, curtype ); + psrv = psrvb; +@@ -616,7 +619,7 @@ Verify( GConvFunc gconv, int rootok ) + free( msg ); + V_RET_FAIL( 0 ); + } +- } else if (!strcmp( curtype, "generic" )) { ++ } else if (!strcmp( curtype, "generic" ) || !strcmp(curtype, "pam")) { + if (!gconv( GCONV_USER, 0 )) + return 0; + for (curret = 0;;) { +Index: kdm/kfrontend/themer/kdmlabel.h +=================================================================== +--- kdm/kfrontend/themer/kdmlabel.h.orig ++++ kdm/kfrontend/themer/kdmlabel.h +@@ -50,6 +50,7 @@ protected: + // handle switching between normal / active / prelight configurations + virtual void statusChanged(); + ++public: + struct LabelStruct { + QString text; + bool isTimer; +Index: kdmlib/kgreet_pam.cpp +=================================================================== +--- /dev/null ++++ kdmlib/kgreet_pam.cpp +@@ -0,0 +1,668 @@ ++/* ++ ++Conversation widget for kdm greeter ++ ++Copyright (C) 2008 Dirk Mueller ++ ++based on classic kdm greeter: ++ ++ Copyright (C) 1997, 1998, 2000 Steffen Hansen ++ Copyright (C) 2000-2003 Oswald Buddenhagen ++ ++ ++This program is free software; you can redistribute it and/or modify ++it under the terms of the GNU General Public License as published by ++the Free Software Foundation; either version 2 of the License, or ++(at your option) any later version. ++ ++This program is distributed in the hope that it will be useful, ++but WITHOUT ANY WARRANTY; without even the implied warranty of ++MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++GNU General Public License for more details. ++ ++You should have received a copy of the GNU General Public License ++along with this program; if not, write to the Free Software ++Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ++ ++*/ ++ ++#include "kgreet_pam.h" ++#include "themer/kdmthemer.h" ++#include "themer/kdmlabel.h" ++ ++#include ++#include ++#include ++#include ++ ++#include ++#include ++#include ++#include ++ ++#include ++#include ++#include ++#include ++ ++//#define PAM_GREETER_DEBUG ++ ++class KDMPasswordEdit : public KPasswordEdit { ++public: ++ KDMPasswordEdit( QWidget *parent ) : KPasswordEdit( parent, 0 ) {} ++ KDMPasswordEdit( KPasswordEdit::EchoModes echoMode, QWidget *parent ) : KPasswordEdit( echoMode, parent, 0 ) {} ++protected: ++ virtual void contextMenuEvent( QContextMenuEvent * ) {} ++}; ++ ++static FILE* log; ++static void debug(const char* fmt, ...) ++{ ++ va_list lst; ++ va_start(lst, fmt); ++ ++#ifdef PAM_GREETER_DEBUG ++#if 0 ++ vfprintf(log, fmt, lst); ++ fflush(log); ++#else ++ char buf[6000]; ++ sprintf(buf, "*** %s\n", fmt); ++ vsyslog(LOG_WARNING, buf, lst); ++#endif ++#endif ++ va_end(lst); ++} ++ ++static KPasswordEdit::EchoModes echoMode; ++ ++KPamGreeter::KPamGreeter( KGreeterPluginHandler *_handler, ++ KdmThemer *themer, ++ QWidget *parent, QWidget *pred, ++ const QString &_fixedEntity, ++ Function _func, Context _ctx ) : ++ QObject(), ++ KGreeterPlugin( _handler ), ++ fixedUser( _fixedEntity ), ++ func( _func ), ++ ctx( _ctx ), ++ exp( -1 ), ++ pExp( -1 ), ++ running( false ) ++{ ++ ctx = Login; ++ ++ debug("KPamGreeter constructed\n"); ++ ++ m_parentWidget = parent; ++ ++ KdmItem *user_entry = 0, *pw_entry = 0; ++ int line = 0; ++ ++ layoutItem = 0; ++ ++ if (themer && ++ (!(user_entry = themer->findNode( "user-entry" )) || ++ !(pw_entry = themer->findNode( "pw-entry" )))) ++ themer = 0; ++ ++ m_themer = themer; ++ ++ if (!themer) ++ layoutItem = new QGridLayout( 0, 0, 10 ); ++ ++ loginLabel = 0; ++ authLabel.clear(); ++ authEdit.clear(); ++ loginLabel = 0; ++ loginEdit = 0; ++ if (ctx == ExUnlock || ctx == ExChangeTok) ++ fixedUser = KUser().loginName(); ++ if (func != ChAuthTok) { ++ debug("func != ChAuthTok\n"); ++ debug("fixedUser: *%s*\n", fixedUser.latin1()); ++ ++ if (fixedUser.isEmpty()) { ++ loginEdit = new KLineEdit( parent ); ++ loginEdit->setContextMenuEnabled( false ); ++ connect( loginEdit, SIGNAL(lostFocus()), SLOT(slotLoginLostFocus()) ); ++ connect( loginEdit, SIGNAL(lostFocus()), SLOT(slotActivity()) ); ++ connect( loginEdit, SIGNAL(textChanged( const QString & )), SLOT(slotActivity()) ); ++ connect( loginEdit, SIGNAL(selectionChanged()), SLOT(slotActivity()) ); ++ if (pred) { ++ parent->setTabOrder( pred, loginEdit ); ++ pred = loginEdit; ++ } ++ if (!getLayoutItem()) { ++ loginEdit->adjustSize(); ++ user_entry->setWidget( loginEdit ); ++ } else { ++ loginLabel = new QLabel( loginEdit, i18n("Username:"), parent ); ++ getLayoutItem()->addWidget( loginLabel, line, 0 ); ++ getLayoutItem()->addWidget( loginEdit, line++, 1 ); ++ } ++ } else if (ctx != Login && ctx != Shutdown && getLayoutItem()) { ++ loginLabel = new QLabel( i18n("Username:"), parent ); ++ getLayoutItem()->addWidget( loginLabel, line, 0 ); ++ getLayoutItem()->addWidget( new QLabel( fixedUser, parent ), line++, 1 ); ++ } ++#if 0 ++ if (echoMode == -1) ++ passwdEdit = new KDMPasswordEdit( parent ); ++ else ++ passwdEdit = new KDMPasswordEdit( echoMode, ++ parent ); ++ connect( passwdEdit, SIGNAL(textChanged( const QString & )), ++ SLOT(slotActivity()) ); ++ connect( passwdEdit, SIGNAL(lostFocus()), SLOT(slotActivity()) ); ++ if (pred) { ++ parent->setTabOrder( pred, passwdEdit ); ++ pred = passwdEdit; ++ } ++ if (!getLayoutItem()) { ++ passwdEdit->adjustSize(); ++ pw_entry->setWidget( passwdEdit ); ++ } else { ++ passwdLabel = new QLabel( passwdEdit, ++ func == Authenticate ? ++ i18n("hello &Password:") : ++ i18n("Current &password:"), ++ parent ); ++ getLayoutItem()->addWidget( passwdLabel, line, 0 ); ++ getLayoutItem()->addWidget( passwdEdit, line++, 1 ); ++ } ++#endif ++ if (loginEdit) ++ loginEdit->setFocus(); ++ } ++ if (func != Authenticate) { ++ if (echoMode == -1) { ++ authEdit << new KDMPasswordEdit( echoMode, parent ); ++ authEdit << new KDMPasswordEdit( echoMode, parent ); ++ } else { ++ authEdit << new KDMPasswordEdit( parent ); ++ authEdit << new KDMPasswordEdit( parent ); ++ } ++ authLabel << new QLabel( authEdit[0], i18n("&New password:"), parent ); ++ authLabel << new QLabel( authEdit[1], i18n("Con&firm password:"), parent ); ++ if (pred) { ++ parent->setTabOrder( pred, authEdit[0] ); ++ parent->setTabOrder( authEdit[0], authEdit[1] ); ++ } ++ if (getLayoutItem()) { ++ getLayoutItem()->addWidget( authLabel[0], line, 0 ); ++ getLayoutItem()->addWidget( authEdit[0], line++, 1 ); ++ getLayoutItem()->addWidget( authLabel[1], line, 0 ); ++ getLayoutItem()->addWidget( authEdit[1], line, 1 ); ++ } ++ if (authEdit.size() >= 2) ++ authEdit[1]->setFocus(); ++ } ++} ++ ++// virtual ++KPamGreeter::~KPamGreeter() ++{ ++ debug("KPamGreeter::~KPamGreeter"); ++ abort(); ++ if (!layoutItem) { ++ delete loginEdit; ++ return; ++ } ++ QLayoutIterator it = static_cast(layoutItem)->iterator(); ++ for (QLayoutItem *itm = it.current(); itm; itm = ++it) ++ delete itm->widget(); ++ delete layoutItem; ++ debug("destructor finished, good bye"); ++} ++ ++void // virtual ++KPamGreeter::loadUsers( const QStringList &users ) ++{ ++ KCompletion *userNamesCompletion = new KCompletion; ++ userNamesCompletion->setItems( users ); ++ loginEdit->setCompletionObject( userNamesCompletion ); ++ loginEdit->setAutoDeleteCompletionObject( true ); ++ loginEdit->setCompletionMode( KGlobalSettings::CompletionAuto ); ++} ++ ++void // virtual ++KPamGreeter::presetEntity( const QString &entity, int field ) ++{ ++ debug("presetEntity(%s,%d) called!\n", entity.latin1(), field); ++ loginEdit->setText( entity ); ++ if (field == 1 && authEdit.size() >= 1) ++ authEdit[0]->setFocus(); ++ else { ++ loginEdit->setFocus(); ++ loginEdit->selectAll(); ++ if (field == -1 && authEdit.size() >= 1) { ++ authEdit[0]->setText( " " ); ++ authEdit[0]->setEnabled( false ); ++ authTok = false; ++ } ++ } ++ curUser = entity; ++} ++ ++QString // virtual ++KPamGreeter::getEntity() const ++{ ++ return fixedUser.isEmpty() ? loginEdit->text() : fixedUser; ++} ++ ++void // virtual ++KPamGreeter::setUser( const QString &user ) ++{ ++ // assert( fixedUser.isEmpty() ); ++ curUser = user; ++ loginEdit->setText( user ); ++ if (authEdit.size() >= 1) { ++ authEdit[0]->setFocus(); ++ authEdit[0]->selectAll(); ++ } ++} ++ ++void // virtual ++KPamGreeter::setEnabled(bool enable) ++{ ++ // assert( !passwd1Label ); ++ // assert( func == Authenticate && ctx == Shutdown ); ++// if (loginLabel) ++// loginLabel->setEnabled( enable ); ++ authEdit[0]->setEnabled( enable ); ++ setActive( enable ); ++ if (enable) ++ authEdit[0]->setFocus(); ++ } ++ ++void // private ++KPamGreeter::returnData() ++{ ++ debug("*************** returnData called with exp %d\n", exp); ++ ++ ++ switch (exp) { ++ case 0: ++ handler->gplugReturnText( (loginEdit ? loginEdit->text() : ++ fixedUser).local8Bit(), ++ KGreeterPluginHandler::IsUser ); ++ break; ++ case 1: ++ handler->gplugReturnText( authEdit[0]->password(), ++ KGreeterPluginHandler::IsPassword | ++ KGreeterPluginHandler::IsSecret ); ++ break; ++ case 2: ++ handler->gplugReturnText( authEdit[1]->password(), ++ KGreeterPluginHandler::IsSecret ); ++ break; ++ default: // case 3: ++ handler->gplugReturnText( authEdit[2]->password(), ++ KGreeterPluginHandler::IsNewPassword | ++ KGreeterPluginHandler::IsSecret ); ++ break; ++ } ++} ++ ++bool // virtual ++KPamGreeter::textMessage( const char *text, bool err ) ++{ ++ debug(" ************** textMessage(%s, %d)\n", text, err); ++ ++ if (!authEdit.size()) ++ return false; ++ ++ if (getLayoutItem()) { ++ QLabel* label = new QLabel(QString::fromUtf8(text), m_parentWidget); ++ getLayoutItem()->addWidget(label, state+1, 0, 0); ++ } ++ ++ return true; ++} ++ ++void // virtual ++KPamGreeter::textPrompt( const char *prompt, bool echo, bool nonBlocking ) ++{ ++ debug("textPrompt called with prompt %s echo %d nonBlocking %d", prompt, echo, nonBlocking); ++ debug("state is %d, authEdit.size is %d\n", state, authEdit.size()); ++ ++ if (state == 0 && echo) { ++ if (loginLabel) ++ loginLabel->setText(QString::fromUtf8(prompt)); ++ else if (m_themer) { ++ KdmLabel *kdmlabel = static_cast(m_themer->findNode("user-label")); ++ if (kdmlabel) { ++ //userLabel->setText(QString::fromUtf8(prompt)); ++ kdmlabel->label.text = QString::fromUtf8(prompt); ++ QTimer::singleShot(0, kdmlabel, SLOT(update())); ++ } ++ } ++ } ++ else if (state >= authEdit.size()) { ++ if (getLayoutItem()) { ++ QLabel* label = new QLabel(QString::fromUtf8(prompt), m_parentWidget); ++ getLayoutItem()->addWidget(label, state+1, 0, 0); ++ debug("added label widget to layout"); ++ } ++ else if (m_themer) { ++ debug("themer found!"); ++ KdmItem *pw_label = 0; ++ ++ KdmLabel *kdmlabel = static_cast(m_themer->findNode("pw-label")); ++ if (kdmlabel) { ++ //userLabel->setText(QString::fromUtf8(prompt)); ++ QString str = QString::fromUtf8(prompt); ++ kdmlabel->label.text = str; ++ QTimer::singleShot(0, kdmlabel, SLOT(update())); ++ } ++ } ++ ++ KDMPasswordEdit* passwdEdit; ++ ++ if (echoMode == -1) ++ passwdEdit = new KDMPasswordEdit( m_parentWidget ); ++ else ++ passwdEdit = new KDMPasswordEdit( echoMode, m_parentWidget); ++ connect( passwdEdit, SIGNAL(textChanged( const QString & )), ++ SLOT(slotActivity()) ); ++ connect( passwdEdit, SIGNAL(lostFocus()), SLOT(slotActivity()) ); ++ authEdit << passwdEdit; ++ ++#if 1 ++ for(QValueList::iterator it = authEdit.begin(); ++ it != authEdit.end(); ++ ++it) { ++ if ((*it)->isEnabled() && (*it)->text().isEmpty()) { ++ (*it)->setFocus(); ++ break; ++ } ++ } ++#endif ++ if (getLayoutItem()) ++ getLayoutItem()->addWidget(passwdEdit, state+1, 1, 0); ++ ++ if (m_themer) { ++ debug("themer found!"); ++ KdmItem *pw_entry = 0; ++ ++ pw_entry = m_themer->findNode("pw-entry"); ++ ++ if (pw_entry && passwdEdit) ++ pw_entry->setWidget(passwdEdit); ++ ++ if (0) { ++ //userLabel->setText(QString::fromUtf8(prompt)); ++ //kdmlabel->label.text = QString::fromUtf8(prompt); ++ //QTimer::singleShot(0, kdmlabel, SLOT(update())); ++ } ++ } ++ else ++ debug("no themer found!"); ++ } ++ ++state; ++ pExp = exp; ++ ++ exp = authEdit.size(); ++ debug("state %d exp: %d, has %d\n", state, exp, has); ++ ++ if (has >= exp || nonBlocking) ++ returnData(); ++} ++ ++bool // virtual ++KPamGreeter::binaryPrompt( const char *, bool ) ++{ ++ // this simply cannot happen ... :} ++ return true; ++} ++ ++void // virtual ++KPamGreeter::start() ++{ ++ debug("******* start() called\n"); ++ ++ while(authEdit.begin() != authEdit.end()) { ++ KPasswordEdit* item = *authEdit.remove(authEdit.begin()); ++ delete item; ++ } ++ ++ while(authLabel.begin() != authLabel.end()) { ++ QLabel* item = *authLabel.remove(authLabel.begin()); ++ delete item; ++ } ++ ++ authTok = !(authEdit.size() >= 2 && authEdit[1]->isEnabled()); ++ exp = has = -1; ++ state = 0; ++ running = true; ++ handler->gplugStart(); ++} ++ ++void // virtual ++KPamGreeter::suspend() ++{ ++} ++ ++void // virtual ++KPamGreeter::resume() ++{ ++} ++ ++void // virtual ++KPamGreeter::next() ++{ ++ debug("********* next() called state %d\n", state); ++ ++ if (state == 0 && running && handler) { ++ debug(" **** returned text!\n"); ++ handler->gplugReturnText( (loginEdit ? loginEdit->text() : ++ fixedUser).local8Bit(), ++ KGreeterPluginHandler::IsUser ); ++ setActive(false); ++ } ++ ++ has = 0; ++ ++ for(QValueList::iterator it = authEdit.begin(); ++ it != authEdit.end(); ++ ++it) { ++ ++ has++; ++ if ((*it)->hasFocus()) { ++ ++it; ++ if (it != authEdit.end()) ++ (*it)->setFocus(); ++ break; ++ } ++ if (it == authEdit.end()) ++ has = -1; ++ } ++ ++ debug(" has %d and exp %d\n", has, exp); ++ ++#if 0 ++ // assert( running ); ++ if (loginEdit && loginEdit->hasFocus()) { ++ passwdEdit->setFocus(); // will cancel running login if necessary ++ has = 0; ++ } else if (passwdEdit && passwdEdit->hasFocus()) { ++ if (passwd1Edit) ++ passwd1Edit->setFocus(); ++ has = 1; ++ } else if (passwd1Edit) { ++ if (passwd1Edit->hasFocus()) { ++ passwd2Edit->setFocus(); ++ has = 1; // sic! ++ } else ++ has = 3; ++ } else ++ has = 1; ++ if (exp < 0) ++ handler->gplugStart(); ++#endif ++ if (has >= exp) ++ returnData(); ++} ++ ++void // virtual ++KPamGreeter::abort() ++{ ++ debug("***** abort() called\n"); ++ ++ running = false; ++ if (exp >= 0) { ++ exp = -1; ++ handler->gplugReturnText( 0, 0 ); ++ } ++} ++ ++void // virtual ++KPamGreeter::succeeded() ++{ ++ debug("**** succeeded() called\n"); ++ ++ // assert( running || timed_login ); ++ if (!authTok) ++ setActive( false ); ++ else ++ setAllActive( false ); ++ exp = -1; ++ running = false; ++} ++ ++void // virtual ++KPamGreeter::failed() ++{ ++ // assert( running || timed_login ); ++ setActive( false ); ++ setAllActive( false ); ++ exp = -1; ++ running = false; ++} ++ ++#include ++void // virtual ++KPamGreeter::revive() ++{ ++ // assert( !running ); ++ setAllActive( true ); ++ ++#if 1 ++ if (authEdit.size() < 1) ++ return; ++#endif ++ ++ assert(authEdit.size() >= 1); ++ if (authTok) { ++ authEdit[0]->erase(); ++ if(authEdit.size() >= 2) ++ authEdit[1]->erase(); ++ authEdit[0]->setFocus(); ++ } else { ++ authEdit[0]->erase(); ++ if (loginEdit && loginEdit->isEnabled()) ++ authEdit[0]->setEnabled( true ); ++ else { ++ setActive( true ); ++ if (loginEdit && loginEdit->text().isEmpty()) ++ loginEdit->setFocus(); ++ else ++ authEdit[0]->setFocus(); ++ } ++ } ++} ++ ++void // virtual ++KPamGreeter::clear() ++{ ++ // assert( !running && !passwd1Edit ); ++ authEdit[0]->erase(); ++ if (loginEdit) { ++ loginEdit->clear(); ++ loginEdit->setFocus(); ++ curUser = QString::null; ++ } else ++ authEdit[0]->setFocus(); ++} ++ ++ ++// private ++ ++void ++KPamGreeter::setActive( bool enable ) ++{ ++ if (loginEdit) ++ loginEdit->setEnabled( enable ); ++} ++ ++void ++KPamGreeter::setAllActive( bool enable ) ++{ ++ for(QValueList::iterator it = authEdit.begin(); ++ it != authEdit.end(); ++ ++it) ++ (*it)->setEnabled( enable ); ++} ++ ++void ++KPamGreeter::slotLoginLostFocus() ++{ ++ if (!running) ++ return; ++ if (exp > 0) { ++ if (curUser == loginEdit->text()) ++ return; ++ exp = -1; ++ handler->gplugReturnText( 0, 0 ); ++ } ++ curUser = loginEdit->text(); ++ debug("curUser is %s", curUser.latin1()); ++ handler->gplugSetUser( curUser ); ++} ++ ++void ++KPamGreeter::slotActivity() ++{ ++ debug("slotActivity"); ++ ++ if (running) ++ handler->gplugActivity(); ++} ++ ++// factory ++ ++static bool init( const QString &, ++ QVariant (*getConf)( void *, const char *, const QVariant & ), ++ void *ctx ) ++{ ++ echoMode = (KPasswordEdit::EchoModes) getConf( ctx, "EchoMode", QVariant( -1 ) ).toInt(); ++ KGlobal::locale()->insertCatalogue( "kgreet_pam" ); ++ return true; ++} ++ ++static void done( void ) ++{ ++ KGlobal::locale()->removeCatalogue( "kgreet_pam" ); ++ if (log && log != stderr) ++ fclose(log); ++ log = 0; ++} ++ ++static KGreeterPlugin * ++create( KGreeterPluginHandler *handler, KdmThemer *themer, ++ QWidget *parent, QWidget *predecessor, ++ const QString &fixedEntity, ++ KGreeterPlugin::Function func, ++ KGreeterPlugin::Context ctx ) ++{ ++ return new KPamGreeter( handler, themer, parent, predecessor, fixedEntity, func, ctx ); ++} ++ ++KDE_EXPORT kgreeterplugin_info kgreeterplugin_info = { ++ I18N_NOOP("Pam conversation plugin"), "pam", ++ kgreeterplugin_info::Local | kgreeterplugin_info::Presettable, ++ init, done, create ++}; ++ ++#include "kgreet_pam.moc" +Index: kdmlib/kgreet_pam.h +=================================================================== +--- /dev/null ++++ kdmlib/kgreet_pam.h +@@ -0,0 +1,93 @@ ++/* ++ ++Conversation widget for kdm greeter ++ ++Copyright (C) 2008 Dirk Mueller ++ ++ ++This program is free software; you can redistribute it and/or modify ++it under the terms of the GNU General Public License as published by ++the Free Software Foundation; either version 2 of the License, or ++(at your option) any later version. ++ ++This program is distributed in the hope that it will be useful, ++but WITHOUT ANY WARRANTY; without even the implied warranty of ++MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++GNU General Public License for more details. ++ ++You should have received a copy of the GNU General Public License ++along with this program; if not, write to the Free Software ++Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ++ ++*/ ++ ++ ++#ifndef KGREET_CLASSIC_H ++#define KGREET_CLASSIC_H ++ ++#include "kgreeterplugin.h" ++ ++#include ++#include ++ ++class KLineEdit; ++class KPasswordEdit; ++class KSimpleConfig; ++class QGridLayout; ++class QLabel; ++ ++class KPamGreeter : public QObject, public KGreeterPlugin { ++ Q_OBJECT ++ ++ public: ++ KPamGreeter( KGreeterPluginHandler *handler, ++ KdmThemer *themer, ++ QWidget *parent, QWidget *predecessor, ++ const QString &fixedEntitiy, ++ Function func, Context ctx ); ++ ~KPamGreeter(); ++ virtual void loadUsers( const QStringList &users ); ++ virtual void presetEntity( const QString &entity, int field ); ++ virtual QString getEntity() const; ++ virtual void setUser( const QString &user ); ++ virtual void setEnabled( bool on ); ++ virtual bool textMessage( const char *message, bool error ); ++ virtual void textPrompt( const char *prompt, bool echo, bool nonBlocking ); ++ virtual bool binaryPrompt( const char *prompt, bool nonBlocking ); ++ virtual void start(); ++ virtual void suspend(); ++ virtual void resume(); ++ virtual void next(); ++ virtual void abort(); ++ virtual void succeeded(); ++ virtual void failed(); ++ virtual void revive(); ++ virtual void clear(); ++ ++ QGridLayout *getLayoutItem() const { return static_cast(layoutItem); } ++ ++ public slots: ++ void slotLoginLostFocus(); ++ void slotActivity(); ++ ++ private: ++ void setActive( bool enable ); ++ void setAllActive( bool enable ); ++ void returnData(); ++ ++ QLabel *loginLabel; ++ QValueList authLabel; ++ KLineEdit *loginEdit; ++ QWidget* m_parentWidget; ++ QValueList authEdit; ++ KSimpleConfig *stsFile; ++ KdmThemer *m_themer; ++ QString fixedUser, curUser; ++ Function func; ++ Context ctx; ++ int exp, pExp, has; ++ unsigned state; ++ bool running, authTok; ++}; ++ ++#endif /* KGREET_CLASSIC_H */ +Index: kdmlib/Makefile.am +=================================================================== +--- kdmlib/Makefile.am.orig ++++ kdmlib/Makefile.am +@@ -1,11 +1,15 @@ + AM_CPPFLAGS = -I$(top_srcdir)/kdm/kfrontend $(all_includes) + +-kde_module_LTLIBRARIES = kgreet_classic.la kgreet_winbind.la ++kde_module_LTLIBRARIES = kgreet_classic.la kgreet_pam.la kgreet_winbind.la + + kgreet_classic_la_SOURCES = kgreet_classic.cpp + kgreet_classic_la_LDFLAGS = -module -no-undefined $(KDE_PLUGIN) $(all_libraries) + kgreet_classic_la_LIBADD = $(LIB_KDEUI) + ++kgreet_pam_la_SOURCES = kgreet_pam.cpp ++kgreet_pam_la_LDFLAGS = -module -no-undefined $(KDE_PLUGIN) $(all_libraries) ++kgreet_pam_la_LIBADD = $(LIB_KDEUI) ++ + kgreet_winbind_la_SOURCES = kgreet_winbind.cpp + kgreet_winbind_la_LDFLAGS = -module -no-undefined $(KDE_PLUGIN) $(all_libraries) + kgreet_winbind_la_LIBADD = $(LIB_KDEUI) +Index: kcheckpass/checkpass_pam.c +=================================================================== +--- kcheckpass/checkpass_pam.c.orig ++++ kcheckpass/checkpass_pam.c +@@ -140,13 +140,16 @@ AuthReturn Authenticate(const char *call + openlog("kcheckpass", LOG_PID, LOG_AUTH); + + PAM_data.conv = conv; +- if (strcmp(method, "classic")) { +- sprintf(pservb, "%.31s-%.31s", caller, method); +- pam_service = pservb; +- } else { ++ if (!strcmp(method, "classic")) { + PAM_data.classic = 1; + pam_service = caller; + } ++ else if (!strcmp(method, "pam")) { ++ pam_service = caller; ++ } else { ++ sprintf(pservb, "%.31s-%.31s", caller, method); ++ pam_service = pservb; ++ } + pam_error = pam_start(pam_service, user, &PAM_conversation, &pamh); + if (pam_error != PAM_SUCCESS) + return AuthError; diff --git a/opensuse/core/tdebase/krandr-0.5.2.1.diff.bz2 b/opensuse/core/tdebase/krandr-0.5.2.1.diff.bz2 new file mode 100644 index 000000000..5e35b382b Binary files /dev/null and b/opensuse/core/tdebase/krandr-0.5.2.1.diff.bz2 differ diff --git a/opensuse/core/tdebase/kscreensaver-random-NG.diff b/opensuse/core/tdebase/kscreensaver-random-NG.diff new file mode 100644 index 000000000..389babf13 --- /dev/null +++ b/opensuse/core/tdebase/kscreensaver-random-NG.diff @@ -0,0 +1,189 @@ +Index: kscreensaver/random.cpp +=================================================================== +--- kscreensaver/random.cpp.orig ++++ kscreensaver/random.cpp +@@ -1,4 +1,4 @@ +-//----------------------------------------------------------------------------- ++ //----------------------------------------------------------------------------- + // + // Screen savers for KDE + // +@@ -19,6 +19,7 @@ + #include + #include + #include ++#include + + #include + #include +@@ -36,7 +37,7 @@ + + #define MAX_ARGS 20 + +-void usage(char *name) ++static void usage(char *name) + { + puts(i18n("Usage: %1 [-setup] [args]\n" + "Starts a random screen saver.\n" +@@ -60,6 +61,43 @@ static const KCmdLineOptions options[] = + + //---------------------------------------------------------------------------- + ++#ifdef HAVE_GLXCHOOSEVISUAL ++#include ++#endif ++ ++//------------------------------------- ++bool hasDirectRendering () { ++ Display *dpy = QApplication::desktop()->x11Display(); ++ ++#ifdef HAVE_GLXCHOOSEVISUAL ++ int attribSingle[] = { ++ GLX_RGBA, ++ GLX_RED_SIZE, 1, ++ GLX_GREEN_SIZE, 1, ++ GLX_BLUE_SIZE, 1, ++ None ++ }; ++ XVisualInfo* visinfo = glXChooseVisual ( ++ dpy, QApplication::desktop()->primaryScreen(), attribSingle ++ ); ++ if (visinfo) { ++ GLXContext ctx = glXCreateContext ( dpy, visinfo, NULL, True ); ++ if (glXIsDirect(dpy, ctx)) { ++ glXDestroyContext (dpy,ctx); ++ return true; ++ } ++ glXDestroyContext (dpy,ctx); ++ return false; ++ } else { ++ return false; ++ } ++#else ++#error no GL? ++ return false; ++#endif ++ ++} ++ + int main(int argc, char *argv[]) + { + KLocale::setMainCatalogue("kscreensaver"); +@@ -103,55 +141,63 @@ int main(int argc, char *argv[]) + + KConfig type("krandom.kssrc"); + type.setGroup("Settings"); +- bool opengl = type.readBoolEntry("OpenGL"); ++ bool opengl = type.readBoolEntry("OpenGL", hasDirectRendering()); ++ kdDebug() << "hasOPEN " << opengl << endl; + bool manipulatescreen = type.readBoolEntry("ManipulateScreen"); + bool fortune = !KStandardDirs::findExe("fortune").isEmpty(); ++ QStringList defaults = type.readListEntry( "Defaults" ); ++ QMap def_numbers; ++ for ( QStringList::ConstIterator it = defaults.begin(); it != defaults.end(); ++it ) { ++ int index = ( *it ).find( ':' ); ++ if ( index == -1 ) ++ def_numbers[*it] = 1; ++ else ++ def_numbers[( *it ).left( index )] = ( *it ).mid( index + 1 ).toInt(); ++ } + + for (uint i = 0; i < tempSaverFileList.count(); i++) + { +- kdDebug() << "Looking at " << tempSaverFileList[i] << endl; ++ int howoften = 1; ++ if ( defaults.count() != 0 ) { ++ QFileInfo fi( tempSaverFileList[i] ); ++ if ( def_numbers.contains( fi.fileName() ) ) ++ howoften = def_numbers[fi.fileName()]; ++ else ++ howoften = 0; ++ } ++ + KDesktopFile saver(tempSaverFileList[i], true); +- if(!saver.tryExec()) +- continue; +- kdDebug() << "read X-KDE-Type" << endl; ++ if (!saver.tryExec()) ++ continue; + QString saverType = saver.readEntry("X-KDE-Type"); +- +- if (saverType.isEmpty()) // no X-KDE-Type defined so must be OK +- { +- saverFileList.append(tempSaverFileList[i]); +- } +- else +- { ++ if (!saverType.isEmpty()) // no X-KDE-Type defined so must be OK ++ { + QStringList saverTypes = QStringList::split(";", saverType); + for (QStringList::ConstIterator it = saverTypes.begin(); it != saverTypes.end(); ++it ) + { +- kdDebug() << "saverTypes is "<< *it << endl; + if (*it == "ManipulateScreen") + { +- if (manipulatescreen) +- { +- saverFileList.append(tempSaverFileList[i]); +- } ++ if (!manipulatescreen) ++ howoften = 0; + } + else + if (*it == "OpenGL") + { +- if (opengl) +- { +- saverFileList.append(tempSaverFileList[i]); +- } ++ if (!opengl) ++ howoften = 0; + } + if (*it == "Fortune") + { +- if (fortune) +- { +- saverFileList.append(tempSaverFileList[i]); +- } ++ if (!fortune) ++ howoften = 0; + } + + } + } ++ for ( int j = 0; j < howoften; ++j ) ++ saverFileList.append(tempSaverFileList[i]); + } ++ kdDebug() << "final " << saverFileList << endl; + + KRandomSequence rnd; + int indx = rnd.getLong(saverFileList.count()); +@@ -229,7 +275,7 @@ KRandomSetup::KRandomSetup( QWidget *par + + KConfig config("krandom.kssrc"); + config.setGroup("Settings"); +- openGL->setChecked(config.readBoolEntry("OpenGL", true)); ++ openGL->setChecked(config.readBoolEntry("OpenGL", hasDirectRendering())); + manipulateScreen->setChecked(config.readBoolEntry("ManipulateScreen", true)); + } + +Index: kscreensaver/Makefile.am +=================================================================== +--- kscreensaver/Makefile.am.orig ++++ kscreensaver/Makefile.am +@@ -3,13 +3,13 @@ + + AM_CPPFLAGS = -UQT_NO_ASCII_CAST + +-INCLUDES = $(all_includes) ++INCLUDES = $(GLINC) $(all_includes) + AM_LDFLAGS = $(all_libraries) $(KDE_RPATH) + + bin_PROGRAMS = krandom.kss kblankscrn.kss + + krandom_kss_SOURCES = random.cpp +-krandom_kss_LDADD = $(LIB_KDEUI) -lm ++krandom_kss_LDADD = $(LIB_KDEUI) $(GLLIB) -lm + + kblankscrn_kss_SOURCES = blankscrn.cpp + kblankscrn_kss_LDADD = $(LIB_KDEUI) -lkscreensaver -lm diff --git a/opensuse/core/tdebase/ksmserver-defaulttohalt.diff b/opensuse/core/tdebase/ksmserver-defaulttohalt.diff new file mode 100644 index 000000000..71a8a5037 --- /dev/null +++ b/opensuse/core/tdebase/ksmserver-defaulttohalt.diff @@ -0,0 +1,13 @@ +Index: ksmserver/shutdowndlg.cpp +=================================================================== +--- ksmserver/shutdowndlg.cpp.orig ++++ ksmserver/shutdowndlg.cpp +@@ -222,7 +222,7 @@ KSMShutdownDlg::KSMShutdownDlg( QWidget* + btnHalt->setFont( btnFont ); + buttonlay->addWidget( btnHalt ); + connect(btnHalt, SIGNAL(clicked()), SLOT(slotHalt())); +- if ( sdtype == KApplication::ShutdownTypeHalt ) ++ if ( sdtype == KApplication::ShutdownTypeHalt || getenv("KDM_AUTOLOGIN") ) + btnHalt->setFocus(); + + // Reboot diff --git a/opensuse/core/tdebase/ksmserver-kdeinit.diff b/opensuse/core/tdebase/ksmserver-kdeinit.diff new file mode 100644 index 000000000..a21b92dc8 --- /dev/null +++ b/opensuse/core/tdebase/ksmserver-kdeinit.diff @@ -0,0 +1,67 @@ +--- ksmserver/server.h.sav 2009-07-23 11:44:55.000000000 +0200 ++++ ksmserver/server.h 2009-07-23 11:47:52.000000000 +0200 +@@ -145,7 +145,8 @@ private: + + KProcess* startApplication( QStringList command, + const QString& clientMachine = QString::null, +- const QString& userId = QString::null ); ++ const QString& userId = QString::null, ++ bool wm = false ); + void executeCommand( const QStringList& command ); + + bool isWM( const KSMClient* client ) const; +--- ksmserver/startup.cpp.sav 2009-07-23 11:44:54.000000000 +0200 ++++ ksmserver/startup.cpp 2009-07-23 11:45:49.000000000 +0200 +@@ -168,7 +168,7 @@ void KSMServer::launchWM( const QValueLi + // when we have a window manager, we start it first and give + // it some time before launching other processes. Results in a + // visually more appealing startup. +- wmProcess = startApplication( wmStartCommands[ 0 ] ); ++ wmProcess = startApplication( wmStartCommands[ 0 ], QString(), QString(), true ); + connect( wmProcess, SIGNAL( processExited( KProcess* )), SLOT( wmProcessChange())); + // there can be possibly more wm's (because of forking for multihead), + // but in such case care only about the process of the first one +--- ksmserver/server.cpp.sav 2009-07-23 11:51:33.000000000 +0200 ++++ ksmserver/server.cpp 2009-07-23 11:49:02.000000000 +0200 +@@ -101,7 +101,7 @@ KSMServer* KSMServer::self() + * to restart applications. + */ + KProcess* KSMServer::startApplication( QStringList command, const QString& clientMachine, +- const QString& userId ) ++ const QString& userId, bool wm ) + { + if ( command.isEmpty() ) + return NULL; +@@ -118,12 +118,26 @@ KProcess* KSMServer::startApplication( Q + command.prepend( clientMachine ); + command.prepend( xonCommand ); // "xon" by default + } +- KProcess* process = new KProcess( this ); +- *process << command; +- // make it auto-delete +- connect( process, SIGNAL( processExited( KProcess* )), process, SLOT( deleteLater())); +- process->start(); +- return process; ++// TODO this function actually should not use KProcess at all and use klauncher (kdeinit) instead. ++// Klauncher should also have support for tracking whether the launched process is still alive ++// or not, so this should be redone. For now, use KProcess for wm's, as they need to be tracked, ++// klauncher for the rest where ksmserver doesn't care. ++ if( wm ) { ++ KProcess* process = new KProcess( this ); ++ *process << command; ++ // make it auto-delete ++ connect( process, SIGNAL( processExited( KProcess* )), process, SLOT( deleteLater())); ++ process->start(); ++ return process; ++ } else { ++ int n = command.count(); ++ QCString app = command[0].latin1(); ++ QValueList argList; ++ for ( int i=1; i < n; i++) ++ argList.append( QCString(command[i].latin1())); ++ DCOPRef( launcher ).send( "exec_blind", app, DCOPArg( argList, "QValueList" ) ); ++ return NULL; ++ } + } + + /*! Utility function to execute a command on the local machine. Used diff --git a/opensuse/core/tdebase/ksmserver-suspend.diff b/opensuse/core/tdebase/ksmserver-suspend.diff new file mode 100644 index 000000000..ef7a88036 --- /dev/null +++ b/opensuse/core/tdebase/ksmserver-suspend.diff @@ -0,0 +1,233 @@ +Index: ksmserver/Makefile.am +=================================================================== +--- ksmserver/Makefile.am.orig ++++ ksmserver/Makefile.am +@@ -17,7 +17,7 @@ + + SUBDIRS = . + +-INCLUDES= -I$(top_srcdir)/kdmlib $(all_includes) ++INCLUDES= -I$(top_srcdir)/kdmlib $(all_includes) $(DBUS_INCS) + + bin_PROGRAMS = + lib_LTLIBRARIES = +@@ -31,7 +31,7 @@ ksmserver_la_SOURCES = main.cpp server.c + KSMServerInterface.skel server.skel + + ksmserver_la_LDFLAGS = $(all_libraries) -avoid-version -module +-ksmserver_la_LIBADD = ../kdmlib/libdmctl.la $(LIB_KDEUI) ++ksmserver_la_LIBADD = ../kdmlib/libdmctl.la $(LIB_KDEUI) -llazy $(DBUS_LIBS) + + picsdir = $(kde_datadir)/ksmserver/pics + pics_DATA = shutdownkonq.png +@@ -44,7 +44,7 @@ updatedir = $(kde_datadir)/kconf_update + EXTRA_PROGRAMS = testsh + testsh_SOURCES = test.cpp + testsh_LDFLAGS = $(all_libraries) $(KDE_RPATH) +-testsh_LDADD = $(LIB_KDEUI) shutdowndlg.lo ../kdmlib/libdmctl.la ++testsh_LDADD = $(LIB_KDEUI) shutdowndlg.lo ../kdmlib/libdmctl.la -llazy $(DBUS_LIBS) + + messages: + $(XGETTEXT) *.cpp -o $(podir)/ksmserver.pot +Index: ksmserver/shutdowndlg.cpp +=================================================================== +--- ksmserver/shutdowndlg.cpp.orig ++++ ksmserver/shutdowndlg.cpp +@@ -38,17 +38,23 @@ Copyright (C) 2000 Matthias Ettrich + #include + #include ++#include + + #include + #include + #include + #include + #include ++#include + + #include + + #include "shutdowndlg.moc" + ++#define DBUS_HAL_INTERFACE "org.freedesktop.Hal" ++#define DBUS_HAL_SYSTEM_POWER_INTERFACE "org.freedesktop.Hal.Device.SystemPowerManagement" ++#define HAL_UDI_COMPUTER "/org/freedesktop/Hal/devices/computer" ++ + static const int max_faded = 2300; + static const int slice = 20; + +@@ -215,8 +221,8 @@ KSMShutdownDlg::KSMShutdownDlg( QWidget* + connect(btnLogout, SIGNAL(clicked()), SLOT(slotLogout())); + + if (maysd) { +- +- // Shutdown ++ ++ // Shutdown + KPushButton* btnHalt = new KPushButton( KGuiItem( i18n("&Turn Off Computer"), "exit"), frame ); + QToolTip::add( btnHalt, i18n( "

    Turn Off Computer

    Log out of the current session and turn off the computer

    " ) ); + btnHalt->setFont( btnFont ); +@@ -251,13 +257,58 @@ KSMShutdownDlg::KSMShutdownDlg( QWidget* + else + targets->insertItem( label, index ); + } +- ++ + btnReboot->setPopup(targets); + connect( targets, SIGNAL(activated(int)), SLOT(slotReboot(int)) ); + } else + QToolTip::add( btnReboot, i18n( "

    Restart Computer

    Log out of the current session and restart the computer

    " ) ); +- } + ++ int supported = -1; ++ liblazy_hal_get_property_bool(HAL_UDI_COMPUTER, "power_management.can_suspend", &supported); ++ if (supported == 1) ++ suspend_ram = true; ++ else ++ suspend_ram = false; ++ liblazy_hal_get_property_bool(HAL_UDI_COMPUTER, "power_management.can_standby", &supported); ++ if (supported == 1) ++ standby = true; ++ else ++ standby = false; ++ liblazy_hal_get_property_bool(HAL_UDI_COMPUTER, "power_management.can_hibernate", &supported); ++ if (supported == 1) ++ suspend_disk = true; ++ else ++ suspend_disk = false; ++ ++ if (liblazy_hal_is_caller_privileged("org.freedesktop.hal.power-management.hibernate") != 1) ++ suspend_disk = false; ++ if (liblazy_hal_is_caller_privileged("org.freedesktop.hal.power-management.suspend") != 1) ++ suspend_ram = false; ++ if (liblazy_hal_is_caller_privileged("org.freedesktop.hal.power-management.standby") != 1) ++ standby = false; ++ ++ int sum = standby + suspend_ram + suspend_disk; ++ if ( sum ) { ++ QButton *btnSuspend; ++ if (sum > 1) { ++ btnSuspend = new KSMDelayedPushButton( KGuiItem( i18n("&Suspend Computer"), "player_pause"), frame ); ++ QPopupMenu *suspends = new QPopupMenu(frame); ++ if (suspend_disk) ++ suspends->insertItem(i18n("Suspend to Disk"), 1); ++ if (suspend_ram) ++ suspends->insertItem(i18n("Suspend to RAM"), 2); ++ if (standby) ++ suspends->insertItem(i18n("Standby"), 3); ++ connect(suspends, SIGNAL(activated(int)), SLOT(slotSuspend(int))); ++ static_cast(btnSuspend)->setPopup(suspends); ++ } else { ++ btnSuspend = new KPushButton( KGuiItem( i18n("&Suspend Computer"), "player_pause"), frame ); ++ } ++ btnSuspend->setFont( btnFont ); ++ buttonlay->addWidget( btnSuspend ); ++ connect(btnSuspend, SIGNAL(clicked()), SLOT(slotSuspend())); ++ } ++ } + buttonlay->addStretch( 1 ); + + // Separator +@@ -270,6 +321,80 @@ KSMShutdownDlg::KSMShutdownDlg( QWidget* + + } + ++void KSMShutdownDlg::slotSuspend() ++{ ++ int error = 0; ++ int wake = 0; ++ DBusMessage *reply; ++ ++ if (suspend_disk) ++ error = liblazy_dbus_system_send_method_call(DBUS_HAL_INTERFACE, ++ HAL_UDI_COMPUTER, ++ DBUS_HAL_SYSTEM_POWER_INTERFACE, ++ "Hibernate", ++ &reply, ++ DBUS_TYPE_INVALID); ++ else if (suspend_ram) ++ error = liblazy_dbus_system_send_method_call(DBUS_HAL_INTERFACE, ++ HAL_UDI_COMPUTER, ++ DBUS_HAL_SYSTEM_POWER_INTERFACE, ++ "Suspend", ++ &reply, ++ DBUS_TYPE_INT32, ++ &wake, ++ DBUS_TYPE_INVALID); ++ else ++ error = liblazy_dbus_system_send_method_call(DBUS_HAL_INTERFACE, ++ HAL_UDI_COMPUTER, ++ DBUS_HAL_SYSTEM_POWER_INTERFACE, ++ "Standby", ++ &reply, ++ DBUS_TYPE_INVALID); ++ ++ if (error) ++ KMessageBox::error(this, i18n("Suspend failed")); ++ ++ // possibly after resume :) ++ reject(); ++} ++ ++void KSMShutdownDlg::slotSuspend(int id) ++{ ++ int error = 0; ++ int wake = 0; ++ DBusMessage *reply; ++ ++ if (suspend_disk && id == 1) { ++ error = liblazy_dbus_system_send_method_call(DBUS_HAL_INTERFACE, ++ HAL_UDI_COMPUTER, ++ DBUS_HAL_SYSTEM_POWER_INTERFACE, ++ "Hibernate", ++ &reply, ++ DBUS_TYPE_INVALID); ++ } else if (suspend_ram && id == 2) ++ error = liblazy_dbus_system_send_method_call(DBUS_HAL_INTERFACE, ++ HAL_UDI_COMPUTER, ++ DBUS_HAL_SYSTEM_POWER_INTERFACE, ++ "Suspend", ++ &reply, ++ DBUS_TYPE_INT32, ++ &wake, ++ DBUS_TYPE_INVALID); ++ else if (standby && id == 3) ++ error = liblazy_dbus_system_send_method_call(DBUS_HAL_INTERFACE, ++ HAL_UDI_COMPUTER, ++ DBUS_HAL_SYSTEM_POWER_INTERFACE, ++ "Standby", ++ &reply, ++ DBUS_TYPE_INVALID); ++ else ++ return; ++ if (error) ++ KMessageBox::error(this, i18n("Suspend failed")); ++ ++ // possibly after resume :) ++ reject(); ++} + + void KSMShutdownDlg::slotLogout() + { +Index: ksmserver/shutdowndlg.h +=================================================================== +--- ksmserver/shutdowndlg.h.orig ++++ ksmserver/shutdowndlg.h +@@ -60,6 +60,8 @@ public slots: + void slotHalt(); + void slotReboot(); + void slotReboot(int); ++ void slotSuspend(); ++ void slotSuspend(int); + + protected: + ~KSMShutdownDlg() {}; +@@ -70,6 +72,7 @@ private: + QString m_bootOption; + QPopupMenu *targets; + QStringList rebootOptions; ++ bool suspend_disk, suspend_ram, standby; + }; + + class KSMDelayedPushButton : public KPushButton diff --git a/opensuse/core/tdebase/ksmserver-timed.diff b/opensuse/core/tdebase/ksmserver-timed.diff new file mode 100644 index 000000000..89f4a7004 --- /dev/null +++ b/opensuse/core/tdebase/ksmserver-timed.diff @@ -0,0 +1,700 @@ +Index: ksmserver/KSMServerInterface.h +=================================================================== +--- ksmserver/KSMServerInterface.h.orig ++++ ksmserver/KSMServerInterface.h +@@ -22,6 +22,8 @@ k_dcop: + + virtual void suspendStartup( QCString ) = 0; + virtual void resumeStartup( QCString ) = 0; ++ ++ virtual void logoutTimed( int, int, QString ) = 0; + }; + + #endif +Index: ksmserver/Makefile.am +=================================================================== +--- ksmserver/Makefile.am.orig ++++ ksmserver/Makefile.am +@@ -28,7 +28,7 @@ ksmserver_la_METASOURCES = AUTO + # Order is important for --enable-final! + ksmserver_la_SOURCES = main.cpp server.cpp shutdowndlg.cpp \ + legacy.cpp startup.cpp shutdown.cpp client.cpp \ +- KSMServerInterface.skel server.skel ++ KSMServerInterface.skel server.skel timed.ui + + ksmserver_la_LDFLAGS = $(all_libraries) -avoid-version -module + ksmserver_la_LIBADD = ../kdmlib/libdmctl.la $(LIB_KDEUI) -llazy $(DBUS_LIBS) +@@ -42,7 +42,7 @@ updatedir = $(kde_datadir)/kconf_update + + + EXTRA_PROGRAMS = testsh +-testsh_SOURCES = test.cpp ++testsh_SOURCES = test.cpp timed.ui + testsh_LDFLAGS = $(all_libraries) $(KDE_RPATH) + testsh_LDADD = $(LIB_KDEUI) shutdowndlg.lo ../kdmlib/libdmctl.la -llazy $(DBUS_LIBS) + +Index: ksmserver/server.h +=================================================================== +--- ksmserver/server.h.orig ++++ ksmserver/server.h +@@ -85,6 +85,7 @@ public: + // public API + void restoreSession( QString sessionName ); + void startDefaultSession(); ++ + void shutdown( KApplication::ShutdownConfirm confirm, + KApplication::ShutdownType sdtype, + KApplication::ShutdownMode sdmode ); +@@ -92,6 +93,11 @@ public: + virtual void suspendStartup( QCString app ); + virtual void resumeStartup( QCString app ); + ++ bool checkStatus( bool &logoutConfirmed, bool &maysd, ++ KApplication::ShutdownConfirm confirm, ++ KApplication::ShutdownType sdtype, ++ KApplication::ShutdownMode sdmode ); ++ + public slots: + void cleanUp(); + +@@ -142,6 +148,11 @@ private: + bool defaultSession() const; // empty session + void setupXIOErrorHandler(); + ++ void shutdownInternal( KApplication::ShutdownConfirm confirm, ++ KApplication::ShutdownType sdtype, ++ KApplication::ShutdownMode sdmode, ++ QString bootOption = QString::null ); ++ + void performLegacySessionSave(); + void storeLegacySession( KConfig* config ); + void restoreLegacySession( KConfig* config ); +@@ -157,6 +168,7 @@ private: + + // public dcop interface + void logout( int, int, int ); ++ virtual void logoutTimed( int, int, QString ); + QStringList sessionList(); + QString currentSession(); + void saveCurrentSession(); +Index: ksmserver/shutdown.cpp +=================================================================== +--- ksmserver/shutdown.cpp.orig ++++ ksmserver/shutdown.cpp +@@ -93,14 +93,16 @@ void KSMServer::logout( int confirm, int + (KApplication::ShutdownMode)sdmode ); + } + +-void KSMServer::shutdown( KApplication::ShutdownConfirm confirm, +- KApplication::ShutdownType sdtype, KApplication::ShutdownMode sdmode ) ++bool KSMServer::checkStatus( bool &logoutConfirmed, bool &maysd, ++ KApplication::ShutdownConfirm confirm, ++ KApplication::ShutdownType sdtype, ++ KApplication::ShutdownMode sdmode ) + { + pendingShutdown.stop(); + if( dialogActive ) +- return; ++ return false; + if( state >= Shutdown ) // already performing shutdown +- return; ++ return false; + if( state != Idle ) // performing startup + { + // perform shutdown as soon as startup is finished, in order to avoid saving partial session +@@ -111,25 +113,44 @@ void KSMServer::shutdown( KApplication:: + pendingShutdown_sdtype = sdtype; + pendingShutdown_sdmode = sdmode; + } +- return; ++ return false; + } + + KConfig *config = KGlobal::config(); + config->reparseConfiguration(); // config may have changed in the KControl module + + config->setGroup("General" ); +- bool logoutConfirmed = ++ logoutConfirmed = + (confirm == KApplication::ShutdownConfirmYes) ? false : +- (confirm == KApplication::ShutdownConfirmNo) ? true : +- !config->readBoolEntry( "confirmLogout", true ); +- bool maysd = false; ++ (confirm == KApplication::ShutdownConfirmNo) ? true : ++ !config->readBoolEntry( "confirmLogout", true ); ++ maysd = false; + if (config->readBoolEntry( "offerShutdown", true ) && DM().canShutdown()) + maysd = true; + if (!maysd) { + if (sdtype != KApplication::ShutdownTypeNone && + sdtype != KApplication::ShutdownTypeDefault && + logoutConfirmed) +- return; /* unsupported fast shutdown */ ++ return false; /* unsupported fast shutdown */ ++ } ++ ++ return true; ++} ++ ++void KSMServer::shutdownInternal( KApplication::ShutdownConfirm confirm, ++ KApplication::ShutdownType sdtype, ++ KApplication::ShutdownMode sdmode, ++ QString bopt ) ++{ ++ bool maysd = false; ++ bool logoutConfirmed = false; ++ if ( !checkStatus( logoutConfirmed, maysd, confirm, sdtype, sdmode ) ) ++ return; ++ ++ KConfig *config = KGlobal::config(); ++ ++ config->setGroup("General" ); ++ if (!maysd) { + sdtype = KApplication::ShutdownTypeNone; + } else if (sdtype == KApplication::ShutdownTypeDefault) + sdtype = (KApplication::ShutdownType) +@@ -138,7 +159,6 @@ void KSMServer::shutdown( KApplication:: + sdmode = KApplication::ShutdownModeInteractive; + + dialogActive = true; +- QString bopt; + if ( !logoutConfirmed ) { + KSMShutdownFeedback::start(); // make the screen gray + logoutConfirmed = +@@ -204,6 +224,42 @@ void KSMServer::shutdown( KApplication:: + dialogActive = false; + } + ++void KSMServer::shutdown( KApplication::ShutdownConfirm confirm, ++ KApplication::ShutdownType sdtype, KApplication::ShutdownMode sdmode ) ++{ ++ shutdownInternal( confirm, sdtype, sdmode ); ++} ++ ++#include ++ ++void KSMServer::logoutTimed( int sdtype, int sdmode, QString bootOption ) ++{ ++ int confirmDelay; ++ ++ KConfig* config = KGlobal::config(); ++ config->setGroup( "General" ); ++ ++ if ( sdtype == KApplication::ShutdownTypeHalt ) ++ confirmDelay = config->readNumEntry( "confirmShutdownDelay", 31 ); ++ else if ( sdtype == KApplication::ShutdownTypeReboot ) ++ confirmDelay = config->readNumEntry( "confirmRebootDelay", 31 ); ++ else ++ confirmDelay = config->readNumEntry( "confirmLogoutDelay", 31 ); ++ ++ bool result = true; ++ if (confirmDelay) { ++ KSMShutdownFeedback::start(); // make the screen gray ++ result = KSMDelayedMessageBox::showTicker( (KApplication::ShutdownType)sdtype, bootOption, confirmDelay ); ++ KSMShutdownFeedback::stop(); // make the screen become normal again ++ } ++ ++ if ( result ) ++ shutdownInternal( KApplication::ShutdownConfirmNo, ++ (KApplication::ShutdownType)sdtype, ++ (KApplication::ShutdownMode)sdmode, ++ bootOption ); ++} ++ + void KSMServer::pendingShutdownTimeout() + { + shutdown( pendingShutdown_confirm, pendingShutdown_sdtype, pendingShutdown_sdmode ); +Index: ksmserver/shutdowndlg.cpp +=================================================================== +--- ksmserver/shutdowndlg.cpp.orig ++++ ksmserver/shutdowndlg.cpp +@@ -25,6 +25,7 @@ Copyright (C) 2000 Matthias Ettrich + + #include ++#include + #include + #include + #include +@@ -488,3 +489,67 @@ void KSMDelayedPushButton::slotTimeout() + popt->stop(); + setDown(false); + } ++ ++KSMDelayedMessageBox::KSMDelayedMessageBox( KApplication::ShutdownType sdtype, const QString &bootOption, int confirmDelay ) ++ : TimedLogoutDlg( 0, 0, true, WType_Popup ), m_remaining(confirmDelay) ++{ ++ if ( sdtype == KApplication::ShutdownTypeHalt ) ++ { ++ m_title->setText( i18n( "Would you like to turn off your computer?" ) ); ++ m_template = i18n( "This computer will turn off automatically\n" ++ "after %1 seconds." ); ++ m_logo->setPixmap( BarIcon( "exit", 48 ) ); ++ } else if ( sdtype == KApplication::ShutdownTypeReboot ) ++ { ++ if (bootOption.isEmpty()) ++ m_title->setText( i18n( "Would you like to reboot your computer?" ) ); ++ else ++ m_title->setText( i18n( "Would you like to reboot to \"%1\"?" ).arg(bootOption) ); ++ m_template = i18n( "This computer will reboot automatically\n" ++ "after %1 seconds." ); ++ m_logo->setPixmap( BarIcon( "reload", 48 ) ); ++ } else { ++ m_title->setText( i18n( "Would you like to end your current session?" ) ); ++ m_template = i18n( "This session will end\n" ++ "after %1 seconds automatically." ); ++ m_logo->setPixmap( BarIcon( "previous", 48 ) ); ++ } ++ ++ updateText(); ++ adjustSize(); ++ if ( double( height() ) / width() < 0.25 ) ++ { ++ setFixedHeight( qRound( width() * 0.3 ) ); ++ adjustSize(); ++ } ++ QTimer *timer = new QTimer( this ); ++ timer->start( 1000 ); ++ connect( timer, SIGNAL( timeout() ), SLOT( updateText() ) ); ++ KDialog::centerOnScreen(this); ++} ++ ++void KSMDelayedMessageBox::updateText() ++{ ++ m_remaining--; ++ if ( m_remaining == 0 ) ++ { ++ accept(); ++ return; ++ } ++ m_text->setText( m_template.arg( m_remaining ) ); ++} ++ ++bool KSMDelayedMessageBox::showTicker( KApplication::ShutdownType sdtype, const QString &bootOption, int confirmDelay ) ++{ ++ kapp->enableStyles(); ++ KSMDelayedMessageBox msg( sdtype, bootOption, confirmDelay ); ++ QSize sh = msg.sizeHint(); ++ QRect rect = KGlobalSettings::desktopGeometry(QCursor::pos()); ++ ++ msg.move(rect.x() + (rect.width() - sh.width())/2, ++ rect.y() + (rect.height() - sh.height())/2); ++ bool result = msg.exec(); ++ ++ kapp->disableStyles(); ++ return result; ++} +Index: ksmserver/shutdowndlg.h +=================================================================== +--- ksmserver/shutdowndlg.h.orig ++++ ksmserver/shutdowndlg.h +@@ -17,6 +17,7 @@ class QVButtonGroup; + class QPopupMenu; + class QTimer; + ++#include "timed.h" + #include + + // The (singleton) widget that makes the desktop gray. +@@ -94,4 +95,22 @@ private: + QTimer *popt; + }; + ++class QLabel; ++ ++class KSMDelayedMessageBox : public TimedLogoutDlg ++{ ++ Q_OBJECT ++ ++public: ++ KSMDelayedMessageBox( KApplication::ShutdownType sdtype, const QString &bootOption, int confirmDelay ); ++ static bool showTicker( KApplication::ShutdownType sdtype, const QString &bootOption, int confirmDelay ); ++ ++protected slots: ++ void updateText(); ++ ++private: ++ QString m_template; ++ int m_remaining; ++}; ++ + #endif +Index: ksmserver/test.cpp +=================================================================== +--- ksmserver/test.cpp.orig ++++ ksmserver/test.cpp +@@ -14,11 +14,16 @@ main(int argc, char *argv[]) + a.iconLoader()->addAppDir("ksmserver"); + KSMShutdownFeedback::start(); + ++ // ShutdownTypeNone == Logout == 0 ++ // ShutdownTypeReboot == 1 ++ // ShutdownTypeHalt == 2 + KApplication::ShutdownType sdtype = KApplication::ShutdownTypeNone; + QString bopt; ++ KSMDelayedMessageBox::showTicker( sdtype ); ++ /* + (void)KSMShutdownDlg::confirmShutdown( true, + sdtype, +- bopt ); ++ bopt );*/ + /* (void)KSMShutdownDlg::confirmShutdown( false, + sdtype, + bopt ); */ +Index: ksmserver/timed.ui +=================================================================== +--- /dev/null ++++ ksmserver/timed.ui +@@ -0,0 +1,352 @@ ++ ++TimedLogoutDlg ++ ++ ++ TimedLogoutDlg ++ ++ ++ ++ 0 ++ 0 ++ 381 ++ 131 ++ ++ ++ ++ ++ 5 ++ 5 ++ 0 ++ 0 ++ ++ ++ ++ Confirmation ++ ++ ++ ++ unnamed ++ ++ ++ 0 ++ ++ ++ 0 ++ ++ ++ ++ frame3 ++ ++ ++ ++ 5 ++ 5 ++ 0 ++ 0 ++ ++ ++ ++ StyledPanel ++ ++ ++ Raised ++ ++ ++ 2 ++ ++ ++ 0 ++ ++ ++ 0 ++ ++ ++ ++ unnamed ++ ++ ++ ++ layout10 ++ ++ ++ ++ unnamed ++ ++ ++ 0 ++ ++ ++ 0 ++ ++ ++ ++ layout8 ++ ++ ++ ++ unnamed ++ ++ ++ ++ layout6 ++ ++ ++ ++ unnamed ++ ++ ++ 0 ++ ++ ++ 0 ++ ++ ++ ++ spacer3_2 ++ ++ ++ Vertical ++ ++ ++ MinimumExpanding ++ ++ ++ ++ 20 ++ 2 ++ ++ ++ ++ ++ ++ m_logo ++ ++ ++ ++ 1 ++ 1 ++ 0 ++ 0 ++ ++ ++ ++ ++ 48 ++ 48 ++ ++ ++ ++ true ++ ++ ++ ++ ++ spacer3 ++ ++ ++ Vertical ++ ++ ++ MinimumExpanding ++ ++ ++ ++ 20 ++ 2 ++ ++ ++ ++ ++ ++ ++ ++ layout7 ++ ++ ++ ++ unnamed ++ ++ ++ 7 ++ ++ ++ ++ m_title ++ ++ ++ ++ 7 ++ 0 ++ 0 ++ 0 ++ ++ ++ ++ ++ 1 ++ ++ ++ ++ Would you like to shutdown your computer? ++ ++ ++ PlainText ++ ++ ++ AlignVCenter|AlignLeft ++ ++ ++ ++ ++ m_text ++ ++ ++ ++ 7 ++ 5 ++ 0 ++ 0 ++ ++ ++ ++ If you do not act, your computer will shutdown ++after X automatically. ++ ++ ++ RichText ++ ++ ++ WordBreak|AlignVCenter ++ ++ ++ ++ ++ spacer4 ++ ++ ++ Vertical ++ ++ ++ Preferred ++ ++ ++ ++ 30 ++ 0 ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ layout9 ++ ++ ++ ++ unnamed ++ ++ ++ ++ spacer2 ++ ++ ++ Horizontal ++ ++ ++ Expanding ++ ++ ++ ++ 90 ++ 20 ++ ++ ++ ++ ++ ++ pushButton1 ++ ++ ++ Confirm ++ ++ ++ false ++ ++ ++ ++ ++ spacer2_2 ++ ++ ++ Horizontal ++ ++ ++ Expanding ++ ++ ++ ++ 90 ++ 20 ++ ++ ++ ++ ++ ++ pushButton2 ++ ++ ++ ++ 1 ++ 5 ++ 0 ++ 0 ++ ++ ++ ++ Cancel ++ ++ ++ ++ ++ spacer2_2_2 ++ ++ ++ Horizontal ++ ++ ++ Expanding ++ ++ ++ ++ 90 ++ 20 ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ pushButton1 ++ clicked() ++ TimedLogoutDlg ++ accept() ++ ++ ++ pushButton2 ++ clicked() ++ TimedLogoutDlg ++ reject() ++ ++ ++ ++ diff --git a/opensuse/core/tdebase/ksmserver-tooltips.diff b/opensuse/core/tdebase/ksmserver-tooltips.diff new file mode 100644 index 000000000..c847907af --- /dev/null +++ b/opensuse/core/tdebase/ksmserver-tooltips.diff @@ -0,0 +1,38 @@ +Index: ksmserver/shutdowndlg.cpp +=================================================================== +--- ksmserver/shutdowndlg.cpp.orig ++++ ksmserver/shutdowndlg.cpp +@@ -126,6 +126,7 @@ KSMShutdownDlg::KSMShutdownDlg( QWidget* + + // End session + KPushButton* btnLogout = new KPushButton( KGuiItem( i18n("&End Current Session"), "undo"), frame ); ++ QToolTip::add( btnLogout, i18n( "

    End Current Session

    Log out of the current session to login with a different user

    " ) ); + QFont btnFont = btnLogout->font(); + buttonlay->addWidget( btnLogout ); + connect(btnLogout, SIGNAL(clicked()), SLOT(slotLogout())); +@@ -134,6 +135,7 @@ KSMShutdownDlg::KSMShutdownDlg( QWidget* + + // Shutdown + KPushButton* btnHalt = new KPushButton( KGuiItem( i18n("&Turn Off Computer"), "exit"), frame ); ++ QToolTip::add( btnHalt, i18n( "

    Turn Off Computer

    Log out of the current session and turn off the computer

    " ) ); + btnHalt->setFont( btnFont ); + buttonlay->addWidget( btnHalt ); + connect(btnHalt, SIGNAL(clicked()), SLOT(slotHalt())); +@@ -142,6 +144,7 @@ KSMShutdownDlg::KSMShutdownDlg( QWidget* + + // Reboot + KSMDelayedPushButton* btnReboot = new KSMDelayedPushButton( KGuiItem( i18n("&Restart Computer"), "reload"), frame ); ++ QToolTip::add( btnReboot, i18n( "

    Restart Computer

    Log out of the current session and restart the computer

    Hold the mouse button or the space bar for a short while to get a list of options what to boot

    " ) ); + btnReboot->setFont( btnFont ); + buttonlay->addWidget( btnReboot ); + +@@ -168,7 +171,8 @@ KSMShutdownDlg::KSMShutdownDlg( QWidget* + + btnReboot->setPopup(targets); + connect( targets, SIGNAL(activated(int)), SLOT(slotReboot(int)) ); +- } ++ } else ++ QToolTip::add( btnReboot, i18n( "

    Restart Computer

    Log out of the current session and restart the computer

    " ) ); + } + + buttonlay->addStretch( 1 ); diff --git a/opensuse/core/tdebase/ksplashml.patch b/opensuse/core/tdebase/ksplashml.patch new file mode 100644 index 000000000..5d3ca0cf7 --- /dev/null +++ b/opensuse/core/tdebase/ksplashml.patch @@ -0,0 +1,19 @@ +Index: ksplashml/kcmksplash/installer.cpp +=================================================================== +--- ksplashml/kcmksplash/installer.cpp.orig ++++ ksplashml/kcmksplash/installer.cpp +@@ -474,6 +474,14 @@ void SplashInstaller::slotTest() + KMessageBox::error(this,i18n("Unable to start ksplashsimple.")); + return; + } ++ if( themeName.startsWith( "ksplashx-" )) ++ { ++ KProcess proc; ++ proc << "ksplashx" << themeName.mid( 9 ) << "--test"; ++ if (!proc.start(KProcess::Block)) ++ KMessageBox::error(this,i18n("Unable to start ksplashx.")); ++ return; ++ } + KProcess proc; + proc << "ksplash" << "--test" << "--theme" << themeName; + if (!proc.start(KProcess::Block)) diff --git a/opensuse/core/tdebase/ksysguard-slp-ratelimit.diff b/opensuse/core/tdebase/ksysguard-slp-ratelimit.diff new file mode 100644 index 000000000..7859ed096 --- /dev/null +++ b/opensuse/core/tdebase/ksysguard-slp-ratelimit.diff @@ -0,0 +1,15 @@ +--- ksysguard/gui/ksysguard.cc ++++ ksysguard/gui/ksysguard.cc +@@ -407,7 +407,11 @@ + } + + #if HAVE_SLP +- rescanSLP(); ++ static int rate; ++ if (++rate > 100) { ++ rate = 0; ++ rescanSLP(); ++ } + #endif + } + diff --git a/opensuse/core/tdebase/ksysguardd-openslp.diff b/opensuse/core/tdebase/ksysguardd-openslp.diff new file mode 100644 index 000000000..4cb0e3795 --- /dev/null +++ b/opensuse/core/tdebase/ksysguardd-openslp.diff @@ -0,0 +1,288 @@ +--- ksysguard/configure.in.in ++++ ksysguard/configure.in.in +@@ -45,5 +45,34 @@ + AC_SUBST(LIBHOSTS) + AC_SUBST(LIBSENSORS) + ++# check for SLP ++dnl define the configure option that disables slp ++AC_ARG_ENABLE(slp, [ --disable-slp don't require libslp (ksysguard do not find daemons) ], with_slp=$enableval, with_slp=yes) ++if test "$with_slp" = "yes"; then ++AC_MSG_CHECKING(for SLP support) ++save_slptest_LIBS="$LIBS" ++save_slptest_LDFLAGS="$LDFLAGS" ++save_slptest_CPPFLAGS="$CPPFLAGS" ++LDFLAGS="$all_libraries $LDFLAGS" ++CPPFLAGS="$CPPFLAGS $all_includes" ++LIBS="-lslp" ++AC_TRY_LINK( [ ++ #include ++ ],[ ++ SLPOpen(0, SLP_FALSE, (SLPHandle*) 0); ++ ],[ ++ AC_DEFINE(HAVE_SLP,1,[Define if SLP is available]) ++ LIB_SLP="-lslp" ++ AC_MSG_RESULT(yes) ++ ],[ ++ AC_MSG_RESULT(no) ++ LIB_SLP="" ++]) ++CPPFLAGS=$save_slptest_CPPFLAGS ++LDFLAGS=$save_slptest_LDFLAGS ++LIBS=$save_slptest_LIBS ++fi ++AC_SUBST(LIB_SLP) ++ + dnl Check for dell laptop support + AM_CONDITIONAL(supports_i8k, test -f /proc/i8k) +--- ksysguard/example/ksysguarddrc ++++ ksysguard/example/ksysguarddrc +@@ -1,5 +1,8 @@ + # /etc/ksysguardd.conf + ++# refresh SLP registration ++SLPrefresh=1800 ++ + # LogFiles: the list of all available logfiles + LogFiles=messages:/var/log/messages,kern:/var/log/kern.log,daemon:/var/log/daemon.log + +--- ksysguard/gui/Makefile.am ++++ ksysguard/gui/Makefile.am +@@ -31,7 +31,7 @@ + ksysguard_LDADD = \ + ksgrd/libksgrd.la \ + SensorDisplayLib/libsensordisplays.la \ +- $(LIB_KDEUI) $(LIB_KIO) $(LIB_KDNSSD) ++ $(LIB_KDEUI) $(LIB_KIO) $(LIB_KDNSSD) $(LIB_SLP) + ksysguard_LDFLAGS = $(all_libraries) $(KDE_RPATH) + + kpm_SOURCES = kpm.c +--- ksysguard/gui/ksysguard.cc ++++ ksysguard/gui/ksysguard.cc +@@ -34,6 +34,8 @@ + #include + #include + ++#include ++ + #include + #include + #include +@@ -280,6 +282,46 @@ + mSplitter->setSizes( sizes ); + } + ++#if HAVE_SLP ++ ++SLPBoolean MySLPSrvURLCallback( SLPHandle phslp, ++ const char* srvurl, ++ unsigned short lifetime, ++ SLPError errcode, ++ void* cookie ) ++{ ++ QRegExp r("^service:ksysguardd.kde://(\\w+):(.*)$"); ++ ++ if ( r.search(srvurl) >= 0 ){ ++ QString host( r.cap(1) ); ++ int port = r.cap(2).toInt() ; ++ ++ if ( !host.isEmpty() && port > 0 ) ++ KSGRD::SensorMgr->engage( host, "", "", port ); ++ }; ++ return SLP_TRUE; ++} ++ ++void TopLevel::rescanSLP( bool enableErrorPopup ) ++{ ++ SLPHandle phslp; ++ SLPError result; ++ result = SLPOpen( NULL, SLP_FALSE, &phslp); ++ if (result != SLP_OK) ++ qWarning( "SLPOpen failed" ); // TODO: KMessagebox ++ else { ++ result = SLPFindSrvs( phslp, ++ "service:ksysguardd.kde", ++ "", // TODO: Scope selector ++ "", // all services ++ MySLPSrvURLCallback, ++ this ); ++ if (result != SLP_OK) ++ qWarning( "unable to register SLP service" ); // TODO: KMessageBox ++ } ++} ++#endif ++ + void TopLevel::initStatusBar() + { + KSGRD::SensorMgr->engage( "localhost", "", "ksysguardd" ); +@@ -363,6 +405,10 @@ + KSGRD::SensorMgr->sendRequest( "localhost", "mem/swap/used", + (KSGRD::SensorClient*)this, 4 ); + } ++ ++#if HAVE_SLP ++ rescanSLP(); ++#endif + } + + bool TopLevel::queryClose() +--- ksysguard/gui/ksysguard.h ++++ ksysguard/gui/ksysguard.h +@@ -24,6 +24,8 @@ + #ifndef KSG_KSYSGUARD_H + #define KSG_KSYSGUARD_H + ++#include ++ + #include + + #include +@@ -34,6 +36,10 @@ + + #include + ++#if HAVE_SLP ++#include ++#endif ++ + class KRecentFilesAction; + class KToggleAction; + +@@ -77,6 +83,9 @@ + virtual void customEvent( QCustomEvent* ); + virtual void timerEvent( QTimerEvent* ); + virtual bool queryClose(); ++#if HAVE_SLP ++ virtual void rescanSLP( bool enableErrorPopup = FALSE ); ++#endif + + protected slots: + void connectHost(); +--- ksysguard/ksysguardd/Makefile.am ++++ ksysguard/ksysguardd/Makefile.am +@@ -31,5 +31,5 @@ + bin_PROGRAMS = ksysguardd + + ksysguardd_SOURCES = Command.c conf.c ksysguardd.c PWUIDCache.c +-ksysguardd_LDFLAGS = $(all_libraries) ++ksysguardd_LDFLAGS = $(all_libraries) $(LIB_SLP) + ksysguardd_LDADD = $(top_builddir)/ksysguard/ksysguardd/$(UNAME)/libksysguardd.a ../CContLib/libccont.a -lkdefakes_nonpic $(LIBHOSTS) $(LIB_DNSSD) $(LIB_KINFO) +--- ksysguard/ksysguardd/conf.c ++++ ksysguard/ksysguardd/conf.c +@@ -56,6 +56,7 @@ + char *begin, *token, *tmp; + ConfigLogFile *confLog; + ++ confSLPrefresh = 0; + LogFileList = new_ctnr(); + SensorList = new_ctnr(); + +@@ -93,6 +94,10 @@ + if ( line[ strlen( line ) - 1 ] == '\n' ) + line[ strlen( line ) - 1 ] = '\0'; + ++ if ( !strncmp( line, "SLPrefresh=", 11 ) ) { ++ confSLPrefresh = atoi( line + 11 ); ++ }; ++ + if ( !strncmp( line, "RegisterDomain",14) && (begin = strchr( line, '=' )) ) RegisterDomain=strdup(begin+1); + + if ( !strncmp( line, "LogFiles", 8 ) && (begin = strchr( line, '=' )) ) { +--- ksysguard/ksysguardd/conf.h ++++ ksysguard/ksysguardd/conf.h +@@ -30,6 +30,8 @@ + + extern char* RegisterDomain; + ++short confSLPrefresh; ++ + void parseConfigFile( const char *filename ); + void freeConfigFile(); + +--- ksysguard/ksysguardd/ksysguardd.c ++++ ksysguard/ksysguardd/ksysguardd.c +@@ -43,6 +43,10 @@ + #ifdef HAVE_DNSSD + #include + #endif ++#if HAVE_SLP ++#include ++#endif ++ + #include "modules.h" + + #include "ksysguardd.h" +@@ -348,6 +352,62 @@ + #endif + + ++#if HAVE_SLP ++void mySLPRegReport(SLPHandle hslp, SLPError errcode, void *cookie) ++{ ++ if (errcode) ++ log_error( "SLP (de)registration error" ); ++} ++ ++void register_slp(); ++ ++void refresh_slp() ++{ ++ register_slp(); ++} ++ ++void register_slp() ++{ ++ SLPHandle phslp; ++ SLPError result; ++ int slp_timeout = confSLPrefresh; ++ struct sigaction act, oact; ++ ++ if ( slp_timeout < 120 ) /* do not bomb the slp server with wrong config */ ++ slp_timeout = 120 ; ++ if ( slp_timeout > SLP_LIFETIME_MAXIMUM ) ++ slp_timeout = SLP_LIFETIME_MAXIMUM; ++ ++ result = SLPOpen( NULL, SLP_FALSE, &phslp); ++ if (result != SLP_OK) ++ log_error( "SLPOpen failed" ); ++ else { ++ char hostname[1024]; ++ char SLPServiceUrl[2048]; ++ gethostname( hostname, 1023 ); ++ snprintf( SLPServiceUrl, 1023, "service:ksysguardd.kde://%s:%i", hostname, SocketPort ); ++ ++ result = SLPReg( phslp, ++ SLPServiceUrl, ++ slp_timeout, ++ 0, ++ "", ++ SLP_TRUE, ++ mySLPRegReport, ++ 0 ); ++ ++ if (result != SLP_OK) ++ log_error( "unable to register SLP service" ); ++ SLPClose( phslp ); ++ ++ act.sa_handler = refresh_slp; ++ if (0 != sigaction(SIGALRM, &act, &oact)) ++ log_error("Error establishing signal handler for SLP"); ++ alarm(slp_timeout - 15); ++ } ++} ++#endif ++ + int createServerSocket() + { + int i = 1; +@@ -402,6 +462,10 @@ + ServiceSocket = DNSServiceRefSockFD(Ref); + #endif + ++#if HAVE_SLP ++ if ( BindToAllInterfaces ) ++ register_slp(); ++#endif + return newSocket; + } + diff --git a/opensuse/core/tdebase/ksysguardd.init b/opensuse/core/tdebase/ksysguardd.init new file mode 100644 index 000000000..3be2cba3b --- /dev/null +++ b/opensuse/core/tdebase/ksysguardd.init @@ -0,0 +1,80 @@ +#! /bin/sh +# Copyright (c) 1995-2001 SuSE GmbH Nuernberg, Germany. +# +# Author: adrian@suse.de +# +# /etc/init.d/ksysguardd +# and its symbolic link +# /usr/sbin/rcksysguardd +# +### BEGIN INIT INFO +# Provides: ksysguardd +# Required-Start: $time $named +# Should-Start: $syslog slpd +# Required-Stop: $null +# Default-Start: 3 5 +# Default-Stop: 0 1 2 4 6 +# Description: remote monitor daemon for ksysguard +# Short-Description: remote monitor daemon for ksysguard +### END INIT INFO + +. /etc/rc.status +test -e /etc/rc.config && source /etc/rc.config + +# Determine the base and follow a runlevel link name. +base=${0##*/} +link=${base#*[SK][0-9][0-9]} + +# Force execution if not called by a runlevel directory. +test -x /usr/bin/ksysguardd || exit 0 + +rc_reset +case "$1" in + start) + echo -n "Starting remote monitor daemon for ksysguard " + + /usr/bin/ksysguardd -d -i >/dev/null + rc_status -v + ;; + stop) + if [ -e /var/run/ksysguardd.pid ]; then + echo -n "Shutting down remote monitor daemon for ksysguard " + killproc -p /var/run/ksysguardd.pid -TERM /usr/bin/ksysguardd + rc_status -v + fi + ;; + try-restart|condrestart) + if test "$1" = "condrestart"; then + echo "${attn} Use try-restart ${done}(LSB)${attn} rather than condrestart ${warn}(RH)${norm}" + fi + $0 status + if test $? = 0; then + $0 restart + else + rc_reset # Not running is not a failure. + fi + # Remember status and be quiet + rc_status + ;; + restart|force-reload) + ## If first returns OK call the second, if first or + ## second command fails, set echo return value. + $0 stop; sleep 1 && $0 start + rc_status + ;; + reload) + $0 stop && $0 start + rc_status + ;; + status) + echo -n "Checking for remote monitor daemon for ksysguard " + + checkproc -p /var/run/ksysguardd.pid /usr/bin/ksysguardd + rc_status -v + ;; + *) + echo "Usage: $0 {start|stop|status|restart|reload|try-restart|force-reload}" + exit 1 + ;; +esac +rc_exit diff --git a/opensuse/core/tdebase/ksysguardd.reg b/opensuse/core/tdebase/ksysguardd.reg new file mode 100644 index 000000000..889cb252f --- /dev/null +++ b/opensuse/core/tdebase/ksysguardd.reg @@ -0,0 +1,12 @@ +############################################################################# +# +# OpenSLP registration file +# +# register ksysguard daemon +# +############################################################################# + +service:ksysguardd.kde://$HOSTNAME:3112,en,65535 +watch-port-udp=3112 +description=KDE ksysguard daemon + diff --git a/opensuse/core/tdebase/kwinbindings.diff b/opensuse/core/tdebase/kwinbindings.diff new file mode 100644 index 000000000..51069e5b3 --- /dev/null +++ b/opensuse/core/tdebase/kwinbindings.diff @@ -0,0 +1,43 @@ +Index: kwin/kwinbindings.cpp +=================================================================== +--- kwin/kwinbindings.cpp.orig ++++ kwin/kwinbindings.cpp +@@ -119,22 +119,22 @@ + DEF( I18N_NOOP("Switch to Desktop 2"), CTRL+Qt::Key_F2, WIN+Qt::Key_F2, slotSwitchToDesktop(int) ); + DEF( I18N_NOOP("Switch to Desktop 3"), CTRL+Qt::Key_F3, WIN+Qt::Key_F3, slotSwitchToDesktop(int) ); + DEF( I18N_NOOP("Switch to Desktop 4"), CTRL+Qt::Key_F4, WIN+Qt::Key_F4, slotSwitchToDesktop(int) ); +- DEF( I18N_NOOP("Switch to Desktop 5"), CTRL+Qt::Key_F5, WIN+Qt::Key_F5, slotSwitchToDesktop(int) ); +- DEF( I18N_NOOP("Switch to Desktop 6"), CTRL+Qt::Key_F6, WIN+Qt::Key_F6, slotSwitchToDesktop(int) ); +- DEF( I18N_NOOP("Switch to Desktop 7"), CTRL+Qt::Key_F7, WIN+Qt::Key_F7, slotSwitchToDesktop(int) ); +- DEF( I18N_NOOP("Switch to Desktop 8"), CTRL+Qt::Key_F8, WIN+Qt::Key_F8, slotSwitchToDesktop(int) ); +- DEF( I18N_NOOP("Switch to Desktop 9"), CTRL+Qt::Key_F9, WIN+Qt::Key_F9, slotSwitchToDesktop(int) ); +- DEF( I18N_NOOP("Switch to Desktop 10"), CTRL+Qt::Key_F10, WIN+Qt::Key_F10, slotSwitchToDesktop(int) ); +- DEF( I18N_NOOP("Switch to Desktop 11"), CTRL+Qt::Key_F11, 0, slotSwitchToDesktop(int) ); +- DEF( I18N_NOOP("Switch to Desktop 12"), CTRL+Qt::Key_F12, 0, slotSwitchToDesktop(int) ); +- DEF( I18N_NOOP("Switch to Desktop 13"), CTRL+SHIFT+Qt::Key_F1, 0, slotSwitchToDesktop(int) ); +- DEF( I18N_NOOP("Switch to Desktop 14"), CTRL+SHIFT+Qt::Key_F2, 0, slotSwitchToDesktop(int) ); +- DEF( I18N_NOOP("Switch to Desktop 15"), CTRL+SHIFT+Qt::Key_F3, 0, slotSwitchToDesktop(int) ); +- DEF( I18N_NOOP("Switch to Desktop 16"), CTRL+SHIFT+Qt::Key_F4, 0, slotSwitchToDesktop(int) ); +- DEF( I18N_NOOP("Switch to Desktop 17"), CTRL+SHIFT+Qt::Key_F5, 0, slotSwitchToDesktop(int) ); +- DEF( I18N_NOOP("Switch to Desktop 18"), CTRL+SHIFT+Qt::Key_F6, 0, slotSwitchToDesktop(int) ); +- DEF( I18N_NOOP("Switch to Desktop 19"), CTRL+SHIFT+Qt::Key_F7, 0, slotSwitchToDesktop(int) ); +- DEF( I18N_NOOP("Switch to Desktop 20"), CTRL+SHIFT+Qt::Key_F8, 0, slotSwitchToDesktop(int) ); ++ DEF( I18N_NOOP("Switch to Desktop 5"), 0, WIN+Qt::Key_F5, slotSwitchToDesktop(int) ); ++ DEF( I18N_NOOP("Switch to Desktop 6"), 0, WIN+Qt::Key_F6, slotSwitchToDesktop(int) ); ++ DEF( I18N_NOOP("Switch to Desktop 7"), 0, WIN+Qt::Key_F7, slotSwitchToDesktop(int) ); ++ DEF( I18N_NOOP("Switch to Desktop 8"), 0, WIN+Qt::Key_F8, slotSwitchToDesktop(int) ); ++ DEF( I18N_NOOP("Switch to Desktop 9"), 0, WIN+Qt::Key_F9, slotSwitchToDesktop(int) ); ++ DEF( I18N_NOOP("Switch to Desktop 10"), 0, WIN+Qt::Key_F10, slotSwitchToDesktop(int) ); ++ DEF( I18N_NOOP("Switch to Desktop 11"), 0, 0, slotSwitchToDesktop(int) ); ++ DEF( I18N_NOOP("Switch to Desktop 12"), 0, 0, slotSwitchToDesktop(int) ); ++ DEF( I18N_NOOP("Switch to Desktop 13"), 0, 0, slotSwitchToDesktop(int) ); ++ DEF( I18N_NOOP("Switch to Desktop 14"), 0, 0, slotSwitchToDesktop(int) ); ++ DEF( I18N_NOOP("Switch to Desktop 15"), 0, 0, slotSwitchToDesktop(int) ); ++ DEF( I18N_NOOP("Switch to Desktop 16"), 0, 0, slotSwitchToDesktop(int) ); ++ DEF( I18N_NOOP("Switch to Desktop 17"), 0, 0, slotSwitchToDesktop(int) ); ++ DEF( I18N_NOOP("Switch to Desktop 18"), 0, 0, slotSwitchToDesktop(int) ); ++ DEF( I18N_NOOP("Switch to Desktop 19"), 0, 0, slotSwitchToDesktop(int) ); ++ DEF( I18N_NOOP("Switch to Desktop 20"), 0, 0, slotSwitchToDesktop(int) ); + DEF( I18N_NOOP("Switch to Next Desktop"), 0, 0, slotSwitchDesktopNext() ); + DEF( I18N_NOOP("Switch to Previous Desktop"), 0, 0, slotSwitchDesktopPrevious() ); + DEF( I18N_NOOP("Switch One Desktop to the Right"), 0, 0, slotSwitchDesktopRight() ); diff --git a/opensuse/core/tdebase/kxkb-include-latin-layout.diff b/opensuse/core/tdebase/kxkb-include-latin-layout.diff new file mode 100644 index 000000000..a0b09a3c5 --- /dev/null +++ b/opensuse/core/tdebase/kxkb-include-latin-layout.diff @@ -0,0 +1,14 @@ +Index: kxkb/kcmlayout.cpp +=================================================================== +--- kxkb/kcmlayout.cpp.orig ++++ kxkb/kcmlayout.cpp +@@ -352,6 +352,9 @@ void LayoutConfig::add() + // Create a copy of the sel widget, as one might add the same layout more + // than one time, with different variants. + QListViewItem* toadd = copyLVI(sel, widget->listLayoutsDst); ++ ++ // Turn on "Include Latin layout" for new language by default (bnc:204402) ++ toadd->setText(LAYOUT_COLUMN_INCLUDE, "us"); + + widget->listLayoutsDst->insertItem(toadd); + if( widget->listLayoutsDst->childCount() > 1 ) diff --git a/opensuse/core/tdebase/less_verbal_kdesu.patch b/opensuse/core/tdebase/less_verbal_kdesu.patch new file mode 100644 index 000000000..fd5375836 --- /dev/null +++ b/opensuse/core/tdebase/less_verbal_kdesu.patch @@ -0,0 +1,26 @@ +Index: kdesu/kdesu/sudlg.cpp +=================================================================== +--- kdesu/kdesu/sudlg.cpp.orig ++++ kdesu/kdesu/sudlg.cpp +@@ -29,18 +29,10 @@ KDEsuDialog::KDEsuDialog(QCString user, + setCaption(i18n("Run as %1").arg(user)); + + QString prompt; +- if (superUserCommand == "sudo" && m_User == "root") { +- prompt = i18n("Please enter your password." ); ++ if (m_User == "root") { ++ prompt = i18n("Please enter the Administrator (root) password to continue."); + } else { +- if (m_User == "root") { +- prompt = i18n("The action you requested needs root privileges. " +- "Please enter root's password below or click " +- "Ignore to continue with your current privileges."); +- } else { +- prompt = i18n("The action you requested needs additional privileges. " +- "Please enter the password for \"%1\" below or click " +- "Ignore to continue with your current privileges.").arg(m_User); +- } ++ prompt = i18n("Please enter password for \"%1\" to continue.").arg(m_User); + } + setPrompt(prompt); + diff --git a/opensuse/core/tdebase/libkonq-kdemm.diff b/opensuse/core/tdebase/libkonq-kdemm.diff new file mode 100644 index 000000000..6eb45eab4 --- /dev/null +++ b/opensuse/core/tdebase/libkonq-kdemm.diff @@ -0,0 +1,117 @@ +Index: libkonq/Makefile.am +=================================================================== +--- libkonq/Makefile.am.orig ++++ libkonq/Makefile.am +@@ -53,14 +53,10 @@ include_HEADERS = konq_popupmenu.h knewm + konq_faviconmgr.h konq_xmlguiclient.h konqbookmarkmanager.h konq_filetip.h + + +-if include_ARTS +-ARTS_MODULE = konq_sound.la +-endif +- +-kde_module_LTLIBRARIES = $(ARTS_MODULE) ++kde_module_LTLIBRARIES = konq_sound.la + konq_sound_la_SOURCES = konq_sound.cc + konq_sound_la_LDFLAGS = $(all_libraries) -module $(KDE_PLUGIN) +-konq_sound_la_LIBADD = -lsoundserver_idl -lartskde ++konq_sound_la_LIBADD = -lkdemm + + noinst_HEADERS = konq_sound.h + +Index: libkonq/konq_sound.cc +=================================================================== +--- libkonq/konq_sound.cc.orig ++++ libkonq/konq_sound.cc +@@ -16,10 +16,9 @@ + Boston, MA 02110-1301, USA. + */ + +-#include + #include +-#include +-#include ++#include ++#include + + #include "konq_sound.h" + +@@ -39,71 +38,38 @@ public: + private: + QStringList m_mimeTypes; + +- KArtsDispatcher m_dispatcher; +- Arts::SoundServerV2 m_soundServer; +- KDE::PlayObjectFactory *m_factory; +- KDE::PlayObject *m_player; ++ KDE::Multimedia::SimplePlayer m_player; + }; + + KonqSoundPlayerImpl::KonqSoundPlayerImpl() +- : m_player(0) + { +- m_soundServer = Arts::Reference("global:Arts_SoundServerV2"); +- m_factory = new KDE::PlayObjectFactory(m_soundServer); + } + + KonqSoundPlayerImpl::~KonqSoundPlayerImpl() + { +- delete m_player; +- delete m_factory; + } + + const QStringList &KonqSoundPlayerImpl::mimeTypes() + { +- if (m_mimeTypes.isEmpty()) +- { +- Arts::TraderQuery query; +- vector *offers = query.query(); +- +- for (vector::iterator it = offers->begin(); +- it != offers->end(); ++it) +- { +- vector *prop = (*it).getProperty("MimeType"); +- for (vector::iterator mt = prop->begin(); +- mt != prop->end(); ++mt) +- if ((*mt).length()) // && (*mt).find("video/") == string::npos) +- m_mimeTypes << (*mt).c_str(); +- delete prop; +- } +- delete offers; +- } ++ if( m_mimeTypes.isEmpty() ) ++ m_mimeTypes = KDE::Multimedia::Factory::self()->playableMimeTypes(); ++ + return m_mimeTypes; + } + + void KonqSoundPlayerImpl::play(const QString &fileName) + { +- if (m_soundServer.isNull()) +- return; +- +- delete m_player; +- if ((m_player = m_factory->createPlayObject(fileName, true))) +- { +- if (m_player->isNull()) +- stop(); +- else +- m_player->play(); +- } ++ m_player.play( KURL( fileName ) ); + } + + void KonqSoundPlayerImpl::stop() + { +- delete m_player; +- m_player = 0; ++ m_player.stop(); + } + + bool KonqSoundPlayerImpl::isPlaying() + { +- return m_player ? (m_player->state() == Arts::posPlaying) : false; ++ return m_player.isPlaying(); + } + + class KonqSoundFactory : public KLibFactory diff --git a/opensuse/core/tdebase/locale-dont-show-flag.diff b/opensuse/core/tdebase/locale-dont-show-flag.diff new file mode 100644 index 000000000..2c0a57454 --- /dev/null +++ b/opensuse/core/tdebase/locale-dont-show-flag.diff @@ -0,0 +1,33 @@ +Index: kcontrol/locale/kcmlocale.cpp +=================================================================== +--- kcontrol/locale/kcmlocale.cpp.orig ++++ kcontrol/locale/kcmlocale.cpp +@@ -292,9 +292,13 @@ void KLocaleConfig::loadCountryList() + QString map( locate( "locale", + QString::fromLatin1( "l10n/%1.png" ) + .arg(tag) ) ); ++#if 0 + QIconSet icon; + if ( !map.isNull() ) + icon = KGlobal::iconLoader()->loadIconSet(map, KIcon::Small); ++#else ++ QIconSet icon; ++#endif + m_comboCountry->insertSubmenu( icon, name, tag, sub, -2 ); + } + +@@ -318,10 +322,14 @@ void KLocaleConfig::loadCountryList() + tag = tag.mid(index + 1); + int menu_index = submenu.isEmpty() ? -1 : -2; + ++#if 0 + QString flag( locate( "locale", + QString::fromLatin1( "l10n/%1/flag.png" ) + .arg(tag) ) ); + QIconSet icon( KGlobal::iconLoader()->loadIconSet(flag, KIcon::Small) ); ++#else ++ QIconSet icon; ++#endif + m_comboCountry->insertItem( icon, name, tag, submenu, menu_index ); + } + diff --git a/opensuse/core/tdebase/lock-xvkbd.diff b/opensuse/core/tdebase/lock-xvkbd.diff new file mode 100644 index 000000000..9b5faae8a --- /dev/null +++ b/opensuse/core/tdebase/lock-xvkbd.diff @@ -0,0 +1,380 @@ +Index: kdesktop/lock/lockprocess.cc +=================================================================== +--- kdesktop/lock/lockprocess.cc.orig ++++ kdesktop/lock/lockprocess.cc +@@ -36,6 +36,8 @@ + #include + #include + #include ++#include ++#include + + #include + #include +@@ -93,6 +95,8 @@ static Window gVRootData = 0; + static Atom gXA_VROOT; + static Atom gXA_SCREENSAVER_VERSION; + ++extern Atom qt_wm_state; ++ + //=========================================================================== + // + // Screen saver handling process. Handles screensaver window, +@@ -108,7 +112,9 @@ LockProcess::LockProcess(bool child, boo + mVisibility(false), + mRestoreXF86Lock(false), + mForbidden(false), +- mAutoLogout(false) ++ mAutoLogout(false), ++ mVkbdProcess(NULL), ++ mKWinModule(NULL) + { + setupSignals(); + +@@ -909,10 +915,14 @@ bool LockProcess::checkPass() + { + if (mAutoLogout) + killTimer(mAutoLogoutTimerId); ++ ++ showVkbd(); + + PasswordDlg passDlg( this, &greetPlugin); + + int ret = execDialog( &passDlg ); ++ ++ hideVkbd(); + + XWindowAttributes rootAttr; + XGetWindowAttributes(qt_xdisplay(), RootWindow(qt_xdisplay(), +@@ -992,9 +1002,13 @@ bool LockProcess::x11Event(XEvent *event + { + switch (event->type) + { +- case KeyPress: + case ButtonPress: + case MotionNotify: ++ case ButtonRelease: ++ if( forwardVkbdEvent( event )) ++ return true; // filter out ++ // fall through ++ case KeyPress: + if (mBusy || !mDialogs.isEmpty()) + break; + mBusy = true; +@@ -1031,11 +1045,30 @@ bool LockProcess::x11Event(XEvent *event + case ConfigureNotify: // from SubstructureNotifyMask on the root window + if(event->xconfigure.event == qt_xrootwin()) + stayOnTop(); ++ for( QValueList< VkbdWindow >::Iterator it = mVkbdWindows.begin(); ++ it != mVkbdWindows.end(); ++ ++it ) { ++ if( (*it).id == event->xconfigure.window ) { ++ (*it).rect = QRect( event->xconfigure.x, event->xconfigure.y, ++ event->xconfigure.width, event->xconfigure.height ); ++ break; ++ } ++ } + break; + case MapNotify: // from SubstructureNotifyMask on the root window ++ windowAdded( event->xmap.window, false ); + if( event->xmap.event == qt_xrootwin()) + stayOnTop(); + break; ++ case DestroyNotify: ++ for( QValueList< VkbdWindow >::Iterator it = mVkbdWindows.begin(); ++ it != mVkbdWindows.end(); ++ ++it ) ++ if( (*it).id == event->xdestroywindow.window ) { ++ mVkbdWindows.remove( it ); ++ break; ++ } ++ break; + } + + // We have grab with the grab window being the root window. +@@ -1060,17 +1093,24 @@ bool LockProcess::x11Event(XEvent *event + + void LockProcess::stayOnTop() + { +- if(!mDialogs.isEmpty()) ++ if(!mDialogs.isEmpty() || !mVkbdWindows.isEmpty()) + { + // this restacking is written in a way so that + // if the stacking positions actually don't change, + // all restacking operations will be no-op, + // and no ConfigureNotify will be generated, + // thus avoiding possible infinite loops +- XRaiseWindow( qt_xdisplay(), mDialogs.first()->winId()); // raise topmost ++ if( !mVkbdWindows.isEmpty()) ++ XRaiseWindow( qt_xdisplay(), mVkbdWindows.first().id ); ++ else ++ XRaiseWindow( qt_xdisplay(), mDialogs.first()->winId()); // raise topmost + // and stack others below it +- Window* stack = new Window[ mDialogs.count() + 1 ]; ++ Window* stack = new Window[ mDialogs.count() + mVkbdWindows.count() + 1 ]; + int count = 0; ++ for( QValueList< VkbdWindow >::ConstIterator it = mVkbdWindows.begin(); ++ it != mVkbdWindows.end(); ++ ++it ) ++ stack[ count++ ] = (*it).id; + for( QValueList< QWidget* >::ConstIterator it = mDialogs.begin(); + it != mDialogs.end(); + ++it ) +@@ -1169,4 +1209,200 @@ void LockProcess::msgBox( QMessageBox::I + execDialog( &box ); + } + ++static int run_vkbd = -1; ++void LockProcess::showVkbd() ++{ ++ if( run_vkbd == - 1 ) { ++ int status = system( "hal-find-by-property --key system.formfactor.subtype --string tabletpc" ); ++// status = 0; // enable for testing ++ run_vkbd = ( WIFEXITED( status ) && WEXITSTATUS( status ) == 0 ++ && !KStandardDirs::findExe( "xvkbd" ).isEmpty()) ? 1 : 0; ++ } ++ if( run_vkbd ) { ++ mVkbdWindows.clear(); ++ mVkbdLastEventWindow = None; ++ mKWinModule = new KWinModule( NULL, KWinModule::INFO_WINDOWS ); ++ connect( mKWinModule, SIGNAL( windowAdded( WId )), SLOT( windowAdded( WId ))); ++ mVkbdProcess = new KProcess; ++ *mVkbdProcess << "xvkbd" << "-compact" << "-geometry" << "-0-0" << "-xdm"; ++ mVkbdProcess->start(); ++ } ++} ++ ++void LockProcess::hideVkbd() ++{ ++ if( mVkbdProcess != NULL ) { ++ mVkbdProcess->kill(); ++ delete mVkbdProcess; ++ mVkbdProcess = NULL; ++ delete mKWinModule; ++ mKWinModule = NULL; ++ mVkbdWindows.clear(); ++ } ++} ++ ++void LockProcess::windowAdded( WId w ) ++{ ++ windowAdded( w, true ); ++} ++ ++void LockProcess::windowAdded( WId w, bool managed ) ++{ ++ KWin::WindowInfo info = KWin::windowInfo( w, 0, NET::WM2WindowClass ); ++ if( info.windowClassClass().lower() != "xvkbd" ) ++ return; ++ // Unmanaged windows (i.e. popups) don't currently work anyway, since they ++ // don't have WM_CLASS set anyway. I could perhaps try tricks with X id ++ // ranges if really needed. ++ if( managed ) { ++ // withdraw the window, wait for it to be withdrawn, reparent it directly ++ // to root at the right position ++ XWithdrawWindow( qt_xdisplay(), w, qt_xscreen()); ++ for(;;) { ++ Atom type; ++ int format; ++ unsigned long length, after; ++ unsigned char *data; ++ int r = XGetWindowProperty( qt_xdisplay(), w, qt_wm_state, 0, 2, ++ false, AnyPropertyType, &type, &format, ++ &length, &after, &data ); ++ bool withdrawn = true; ++ if ( r == Success && data && format == 32 ) { ++ Q_UINT32 *wstate = (Q_UINT32*)data; ++ withdrawn = (*wstate == WithdrawnState ); ++ XFree( (char *)data ); ++ } ++ if( withdrawn ) ++ break; ++ } ++ } ++ XSelectInput( qt_xdisplay(), w, StructureNotifyMask ); ++ XWindowAttributes attr_geom; ++ if( !XGetWindowAttributes( qt_xdisplay(), w, &attr_geom )) ++ return; ++ int x = XDisplayWidth( qt_xdisplay(), qt_xscreen()) - attr_geom.width; ++ int y = XDisplayHeight( qt_xdisplay(), qt_xscreen()) - attr_geom.height; ++ if( managed ) { ++ XSetWindowAttributes attr; ++ attr.override_redirect = True; ++ XChangeWindowAttributes( qt_xdisplay(), w, CWOverrideRedirect, &attr ); ++ XReparentWindow( qt_xdisplay(), w, qt_xrootwin(), x, y ); ++ XMapWindow( qt_xdisplay(), w ); ++ } ++ VkbdWindow data; ++ data.id = w; ++ data.rect = QRect( x, y, attr_geom.width, attr_geom.height ); ++ mVkbdWindows.prepend( data ); ++} ++ ++bool LockProcess::forwardVkbdEvent( XEvent* event ) ++{ ++ if( mVkbdProcess == NULL ) ++ return false; ++ QPoint pos; ++ Time time; ++ switch( event->type ) ++ { ++ case ButtonPress: ++ case ButtonRelease: ++ pos = QPoint( event->xbutton.x, event->xbutton.y ); ++ time = event->xbutton.time; ++ break; ++ case MotionNotify: ++ pos = QPoint( event->xmotion.x, event->xmotion.y ); ++ time = event->xmotion.time; ++ break; ++ default: ++ return false; ++ } ++ // vkbd windows are kept topmost, so just find the first one in the position ++ for( QValueList< VkbdWindow >::ConstIterator it = mVkbdWindows.begin(); ++ it != mVkbdWindows.end(); ++ ++it ) { ++ if( (*it).rect.contains( pos )) { ++ // Find the subwindow where the event should actually go. ++ // Not exactly cheap in the number of X roundtrips but oh well. ++ Window window = (*it).id; ++ Window root, child; ++ int root_x, root_y, x, y; ++ unsigned int mask; ++ for(;;) { ++ if( !XQueryPointer( qt_xdisplay(), window, &root, &child, &root_x, &root_y, &x, &y, &mask )) ++ return false; ++ if( child == None ) ++ break; ++ window = child; ++ } ++ switch( event->type ) ++ { ++ case ButtonPress: ++ case ButtonRelease: ++ event->xbutton.x = x; ++ event->xbutton.y = y; ++ event->xbutton.subwindow = None; ++ break; ++ case MotionNotify: ++ event->xmotion.x = x; ++ event->xmotion.y = y; ++ event->xmotion.subwindow = None; ++ break; ++ } ++ event->xany.window = window; ++ sendVkbdFocusInOut( window, time ); ++ XSendEvent( qt_xdisplay(), window, False, 0, event ); ++ return true; ++ } ++ } ++ sendVkbdFocusInOut( None, time ); ++ return false; ++} ++ ++// Fake EnterNotify/LeaveNotify events as the mouse moves. They're not sent by X ++// because of the grab and having them makes xvkbd highlight the buttons (but ++// not needed otherwise it seems). ++void LockProcess::sendVkbdFocusInOut( WId window, Time t ) ++{ ++ if( mVkbdLastEventWindow == window ) ++ return; ++ if( mVkbdLastEventWindow != None ) { ++ XEvent e; ++ e.xcrossing.type = LeaveNotify; ++ e.xcrossing.display = qt_xdisplay(); ++ e.xcrossing.window = mVkbdLastEventWindow; ++ e.xcrossing.root = qt_xrootwin(); ++ e.xcrossing.subwindow = None; ++ e.xcrossing.time = t; ++ e.xcrossing.x = 0; ++ e.xcrossing.y = 0; ++ e.xcrossing.x_root = -1; ++ e.xcrossing.y_root = -1; ++ e.xcrossing.mode = NotifyNormal; ++ e.xcrossing.detail = NotifyAncestor; ++ e.xcrossing.same_screen = True; ++ e.xcrossing.focus = False; ++ e.xcrossing.state = 0; ++ XSendEvent( qt_xdisplay(), mVkbdLastEventWindow, False, 0, &e ); ++ } ++ mVkbdLastEventWindow = window; ++ if( mVkbdLastEventWindow != None ) { ++ XEvent e; ++ e.xcrossing.type = EnterNotify; ++ e.xcrossing.display = qt_xdisplay(); ++ e.xcrossing.window = mVkbdLastEventWindow; ++ e.xcrossing.root = qt_xrootwin(); ++ e.xcrossing.subwindow = None; ++ e.xcrossing.time = t; ++ e.xcrossing.x = 0; ++ e.xcrossing.y = 0; ++ e.xcrossing.x_root = 0; ++ e.xcrossing.y_root = 0; ++ e.xcrossing.mode = NotifyNormal; ++ e.xcrossing.detail = NotifyAncestor; ++ e.xcrossing.same_screen = True; ++ e.xcrossing.focus = False; ++ e.xcrossing.state = 0; ++ XSendEvent( qt_xdisplay(), mVkbdLastEventWindow, False, 0, &e ); ++ } ++} ++ + #include "lockprocess.moc" +Index: kdesktop/lock/lockprocess.h +=================================================================== +--- kdesktop/lock/lockprocess.h.orig ++++ kdesktop/lock/lockprocess.h +@@ -23,6 +23,7 @@ + #include + + class KLibrary; ++class KWinModule; + + struct GreeterPluginHandle { + KLibrary *library; +@@ -53,7 +54,7 @@ public: + + void msgBox( QMessageBox::Icon type, const QString &txt ); + int execDialog( QDialog* dlg ); +- ++ + public slots: + void quitSaver(); + void preparePopup(); +@@ -70,6 +71,7 @@ private slots: + void suspend(); + void checkDPMSActive(); + void slotDeadTimePassed(); ++ void windowAdded( WId ); + + private: + void configure(); +@@ -93,6 +95,11 @@ private: + void stayOnTop(); + void lockXF86(); + void unlockXF86(); ++ void showVkbd(); ++ void hideVkbd(); ++ bool forwardVkbdEvent( XEvent* event ); ++ void sendVkbdFocusInOut( WId window, Time t ); ++ void windowAdded( WId window, bool managed ); + void resume( bool force ); + static QVariant getConf(void *ctx, const char *key, const QVariant &dflt); + +@@ -125,6 +132,15 @@ private: + int mAutoLogoutTimerId; + int mAutoLogoutTimeout; + bool mAutoLogout; ++ KProcess* mVkbdProcess; ++ KWinModule* mKWinModule; ++ struct VkbdWindow ++ { ++ WId id; ++ QRect rect; ++ }; ++ QValueList< VkbdWindow > mVkbdWindows; ++ WId mVkbdLastEventWindow; + }; + + #endif diff --git a/opensuse/core/tdebase/lowdiskspace.patch b/opensuse/core/tdebase/lowdiskspace.patch new file mode 100644 index 000000000..a2ee05f54 --- /dev/null +++ b/opensuse/core/tdebase/lowdiskspace.patch @@ -0,0 +1,413 @@ +Subject: Dialog notifying about running low on disk space +From: Lubos Lunak +Feature: bnc#199054 +Patch-upstream: no + +Index: kioslave/media/medianotifier/Makefile.am +=================================================================== +--- kioslave/media/medianotifier/Makefile.am.orig ++++ kioslave/media/medianotifier/Makefile.am +@@ -5,7 +5,8 @@ kded_medianotifier_la_LDFLAGS = -module + kded_medianotifier_la_LIBADD = ../libmediacommon/libmediacommon.la $(LIB_KDECORE) \ + $(LIB_KDEUI) $(LIB_KIO) + kded_medianotifier_la_SOURCES = medianotifier.cpp medianotifier.skel \ +- notificationdialog.cpp notificationdialogview.ui ++ notificationdialog.cpp notificationdialogview.ui \ ++ freespacenotifier.cpp freespacewidget.ui + + noinst_HEADERS = medianotifier.h notificationdialog.h + +Index: kioslave/media/medianotifier/medianotifier.h +=================================================================== +--- kioslave/media/medianotifier/medianotifier.h.orig ++++ kioslave/media/medianotifier/medianotifier.h +@@ -27,6 +27,8 @@ + #include + #include + ++class FreeSpaceNotifier; ++ + class MediaNotifier: public KDEDModule + { + Q_OBJECT +@@ -52,6 +54,8 @@ private: + const QString &autoopenFile ); + + QMap m_allowNotificationMap; ++ FreeSpaceNotifier* m_freeSpaceNotifier; + }; ++ + #endif + +Index: kioslave/media/medianotifier/medianotifier.cpp +=================================================================== +--- kioslave/media/medianotifier/medianotifier.cpp.orig ++++ kioslave/media/medianotifier/medianotifier.cpp +@@ -36,6 +36,7 @@ + #include "notifiersettings.h" + #include "notifieraction.h" + #include "mediamanagersettings.h" ++#include "freespacenotifier.h" + + MediaNotifier::MediaNotifier(const QCString &name) : KDEDModule(name) + { +@@ -44,6 +45,8 @@ MediaNotifier::MediaNotifier(const QCStr + + connectDCOPSignal( "kded", "mediamanager", "mediumChanged(QString, bool)", + "onMediumChange(QString, bool)", true ); ++ ++ m_freeSpaceNotifier = new FreeSpaceNotifier( this ); + } + + MediaNotifier::~MediaNotifier() +@@ -53,6 +56,7 @@ MediaNotifier::~MediaNotifier() + + disconnectDCOPSignal( "kded", "mediamanager", "mediumChanged(QString, bool)", + "onMediumChange(QString, bool)" ); ++ delete m_freeSpaceNotifier; + } + + void MediaNotifier::onMediumChange( const QString &name, bool allowNotification ) +Index: kioslave/media/medianotifier/freespacenotifier.cpp +=================================================================== +--- /dev/null ++++ kioslave/media/medianotifier/freespacenotifier.cpp +@@ -0,0 +1,159 @@ ++/* This file is part of the KDE Project ++ Copyright (c) 2006 Lukas Tinkl ++ Copyright (c) 2008 Lubos Lunak ++ ++ This program is free software; you can redistribute it and/or modify ++ it under the terms of the GNU General Public License as published by ++ the Free Software Foundation; either version 2 of the License, or ++ (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with this program. If not, see . ++*/ ++ ++#include "freespacenotifier.h" ++ ++#include ++#include ++ ++#include ++#include ++#include ++#include ++ ++#include ++#include ++#include ++#include ++ ++#include "freespacewidget.h" ++ ++ ++FreeSpaceNotifier::FreeSpaceNotifier( QObject* parent ) ++ : QObject( parent ) ++ , lastAvailTimer( NULL ) ++ , dialog( NULL ) ++ , lastAvail( -1 ) ++{ ++ connect( &timer, SIGNAL( timeout() ), SLOT( checkFreeDiskSpace() ) ); ++ KConfig cfg( "lowspacesuse", true ); // read only ++ KConfigGroup group( &cfg, "General" ); ++ limit = group.readNumEntry( "WarnMinimumFreeSpace", 200 ); // MiB ++ if( limit != 0 ) ++ timer.start( 1000 * 60 /* 1 minute */ ); ++} ++ ++FreeSpaceNotifier::~FreeSpaceNotifier() ++{ ++ delete dialog; ++} ++ ++void FreeSpaceNotifier::checkFreeDiskSpace() ++{ ++ if ( dialog ) ++ return; ++ struct statfs sfs; ++ if ( statfs( QFile::encodeName( QDir::homeDirPath() ), &sfs ) == 0 ) ++ { ++ long avail = ( getuid() ? sfs.f_bavail : sfs.f_bfree ); ++ ++ if (avail < 0 || sfs.f_blocks <= 0) ++ return; // we better do not say anything about it ++ ++ int availpct = int( 100 * avail / sfs.f_blocks ); ++ avail = ((long long)avail) * sfs.f_bsize / ( 1024 * 1024 ); // to MiB ++ bool warn = false; ++ if( avail < limit ) // avail disk space dropped under a limit ++ { ++ if( lastAvail < 0 ) // always warn the first time ++ { ++ lastAvail = avail; ++ warn = true; ++ } ++ else if( avail > lastAvail ) // the user freed some space ++ lastAvail = avail; // so warn if it goes low again ++ else if( avail < lastAvail * 0.5 ) // available dropped to a half of previous one, warn again ++ { ++ warn = true; ++ lastAvail = avail; ++ } ++ // do not change lastAvail otherwise, to handle free space slowly going down ++ } ++ if ( warn ) ++ { ++ dialog = new KDialogBase( ++ i18n( "Low Disk Space" ), ++ KDialogBase::Yes | KDialogBase::No | KDialogBase::Cancel, ++ KDialogBase::Yes, KDialogBase::No, ++ 0, "lowdiskspacedialog", false, true, ++ i18n( "Open File Manager" ), i18n( "Do Nothing" ), i18n( "Disable Warning" )); ++ widget = new FreeSpaceWidget( dialog ); ++ dialog->setMainWidget( widget ); ++ ++ QString text = i18n( "You are running low on disk space on your home partition (currently %2%, %1 MiB free)." ) ++ .arg( avail ).arg( availpct ); ++ widget->warningLabel->setText( text ); ++ widget->spinbox->setMinValue( 0 ); ++ widget->spinbox->setMaxValue( 100000 ); ++ widget->spinbox->setValue( limit ); ++ connect( dialog, SIGNAL( yesClicked() ), SLOT( slotYes() ) ); ++ connect( dialog, SIGNAL( noClicked() ), SLOT( slotNo() ) ); ++ connect( dialog, SIGNAL( cancelClicked() ), SLOT( slotCancel() ) ); ++ dialog->show(); ++ } ++ } ++} ++ ++void FreeSpaceNotifier::slotYes() ++{ ++ ( void ) new KRun( KURL::fromPathOrURL( QDir::homeDirPath() ) ); ++ cleanupDialog( widget->spinbox->value()); ++} ++ ++void FreeSpaceNotifier::slotNo() ++{ ++ cleanupDialog( widget->spinbox->value()); ++} ++ ++void FreeSpaceNotifier::slotCancel() ++{ ++ cleanupDialog( 0 ); // set limit to zero ++} ++ ++void FreeSpaceNotifier::cleanupDialog( long newLimit ) ++{ ++ dialog->deleteLater(); ++ dialog = NULL; ++ if( limit != newLimit ) ++ { ++ KConfig cfg( "lowspacesuse" ); ++ KConfigGroup group( &cfg, "General" ); ++ limit = newLimit; ++ group.writeEntry( "WarnMinimumFreeSpace", limit ); ++ if( limit == 0 ) ++ timer.stop(); ++ } ++ if( limit != 0 ) ++ { // warn again if constanly below limit for too long ++ if( lastAvailTimer == NULL ) ++ { ++ lastAvailTimer = new QTimer( this ); ++ connect( lastAvailTimer, SIGNAL( timeout()), SLOT( resetLastAvailable())); ++ } ++ lastAvailTimer->start( 1000 * 60 * 60 /* 1 hour*/ ); ++ } ++} ++ ++void FreeSpaceNotifier::resetLastAvailable() ++{ ++ lastAvail = -1; ++ lastAvailTimer->deleteLater(); ++ lastAvailTimer = NULL; ++} ++ ++#include "freespacenotifier.moc" +Index: kioslave/media/medianotifier/freespacenotifier.h +=================================================================== +--- /dev/null ++++ kioslave/media/medianotifier/freespacenotifier.h +@@ -0,0 +1,51 @@ ++/* This file is part of the KDE Project ++ Copyright (c) 2006 Lukas Tinkl ++ Copyright (c) 2008 Lubos Lunak ++ ++ This program is free software; you can redistribute it and/or modify ++ it under the terms of the GNU General Public License as published by ++ the Free Software Foundation; either version 2 of the License, or ++ (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with this program. If not, see . ++*/ ++ ++#ifndef _FREESPACENOTIFIER_H_ ++#define _FREESPACENOTIFIER_H_ ++ ++#include ++ ++#include ++ ++class FreeSpaceWidget; ++ ++class FreeSpaceNotifier ++: public QObject ++{ ++ Q_OBJECT ++ public: ++ FreeSpaceNotifier( QObject* parent = NULL ); ++ virtual ~FreeSpaceNotifier(); ++ private slots: ++ void checkFreeDiskSpace(); ++ void resetLastAvailable(); ++ void slotYes(); ++ void slotNo(); ++ void slotCancel(); ++ private: ++ void cleanupDialog( long newLimit ); ++ QTimer timer; ++ QTimer* lastAvailTimer; ++ KDialogBase* dialog; ++ FreeSpaceWidget* widget; ++ long limit; ++ long lastAvail; // used to supress repeated warnings when available space hasn't changed ++}; ++ ++#endif +Index: kioslave/media/medianotifier/freespacewidget.ui +=================================================================== +--- /dev/null ++++ kioslave/media/medianotifier/freespacewidget.ui +@@ -0,0 +1,118 @@ ++ ++FreeSpaceWidget ++ ++ ++ Form1 ++ ++ ++ ++ 0 ++ 0 ++ 489 ++ 108 ++ ++ ++ ++ Form1 ++ ++ ++ ++ unnamed ++ ++ ++ ++ warningLabel ++ ++ ++ ++ ++ ++ ++ ++ textLabel2 ++ ++ ++ Would you like to run a file manager to free some disk space and fix the problem? ++ ++ ++ ++ ++ spacer3 ++ ++ ++ Vertical ++ ++ ++ Expanding ++ ++ ++ ++ 20 ++ 40 ++ ++ ++ ++ ++ ++ layout3 ++ ++ ++ ++ unnamed ++ ++ ++ ++ textLabel3 ++ ++ ++ Warn again when the free space is below ++ ++ ++ ++ ++ spinbox ++ ++ ++ MiB ++ ++ ++ ++ ++ spacer1 ++ ++ ++ Horizontal ++ ++ ++ Expanding ++ ++ ++ ++ 30 ++ 20 ++ ++ ++ ++ ++ ++ ++ ++ spacer2 ++ ++ ++ Vertical ++ ++ ++ Expanding ++ ++ ++ ++ 20 ++ 16 ++ ++ ++ ++ ++ ++ ++ diff --git a/opensuse/core/tdebase/mach_blass.diff b/opensuse/core/tdebase/mach_blass.diff new file mode 100644 index 000000000..8ea798d13 --- /dev/null +++ b/opensuse/core/tdebase/mach_blass.diff @@ -0,0 +1,160 @@ +Index: ksmserver/shutdowndlg.cpp +=================================================================== +--- ksmserver/shutdowndlg.cpp.orig ++++ ksmserver/shutdowndlg.cpp +@@ -35,6 +35,7 @@ Copyright (C) 2000 Matthias Ettrich + #include + #include ++#include + #include + #include + +@@ -48,6 +49,9 @@ Copyright (C) 2000 Matthias Ettrich geometry() ); +- QTimer::singleShot( 10, this, SLOT( slotPaintEffect() ) ); +- m_root.resize( width(), height() ); +-} ++ if( QPixmap::defaultDepth() > 8 ) ++ { ++ grabbed.create( size(), 32 ); ++ QTimer::singleShot( 0, this, SLOT( slotGrab() ) ); ++ } ++ else ++ { ++ QTimer::singleShot( 10, this, SLOT( slotPaintEffectOld() ) ); ++ m_root.resize( width(), height() ); ++ } + + +-void KSMShutdownFeedback::slotPaintEffect() ++} ++ ++// the upstream KDE effect ++void KSMShutdownFeedback::slotPaintEffectOld() + { + if ( m_currentY >= height() ) { + if ( backgroundMode() == QWidget::NoBackground ) { +@@ -80,7 +94,76 @@ void KSMShutdownFeedback::slotPaintEffec + bitBlt( this, 0, m_currentY, &pixmap ); + bitBlt( &m_root, 0, m_currentY, &pixmap ); + m_currentY += 10; +- QTimer::singleShot( 1, this, SLOT( slotPaintEffect() ) ); ++ QTimer::singleShot( 1, this, SLOT( slotPaintEffectOld() ) ); ++} ++ ++// the SUSE effect ++void KSMShutdownFeedback::slotGrab() ++{ ++ // we start the passed early ++ if ( m_currentY * 4 >= height() * 3 && passed.isNull()) ++ passed.start(); ++ ++ if ( m_currentY >= height() ) { ++ slotPaintEffectNew(); ++ return; ++ } ++ ++ QImage img; ++ img = QPixmap::grabWindow( qt_xrootwin(), 0, ++ m_currentY, width(), ++ slice ); ++ bitBlt(&grabbed, 0, m_currentY, &img); ++ m_currentY += slice; ++ QTimer::singleShot(0, this, SLOT(slotGrab())); ++} ++ ++void KSMShutdownFeedback::slotPaintEffectNew() ++{ ++ const unsigned int shift_scale = 10; ++ const unsigned int scale = 1 << shift_scale; ++ ++ //kdDebug() << "passed before paint " << passed.elapsed() << endl; ++ unsigned int current_fade = QMIN(scale, passed.elapsed() * scale / max_faded); ++ QImage copy; ++ copy.create( grabbed.size(), grabbed.depth() ); ++ unsigned int pixels = grabbed.width()*grabbed.height(); ++ QRgb *orig = ( QRgb* )grabbed.bits(); ++ QRgb *dest = ( QRgb* )copy.bits(); ++ QColor clr; ++ ++ int r, g, b, tg; ++ ++ for ( unsigned int i = 0; i < pixels; ++i ) ++ { ++ r = qRed( orig[i] ); ++ g = qGreen( orig[i] ); ++ b = qBlue( orig[i] ); ++ ++ // qGray formla ++ tg = (r*11 + g*16 + b*5)/32; ++ // make it a bit darker than gray ++ tg = tg - tg / 5; ++ ++ r = ( ( r << shift_scale ) + current_fade * ( tg - r ) ) >> shift_scale; ++ g = ( ( g << shift_scale ) + current_fade * ( tg - g ) ) >> shift_scale; ++ b = ( ( b << shift_scale ) + current_fade * ( tg - b ) ) >> shift_scale; ++ ++ dest[i] = qRgb(r, g, b); ++ } ++ //kdDebug() << "passed before bitBlt " << passed.elapsed() << endl; ++ bitBlt( this, 0, 0, ©); ++ //kdDebug() << "passed after bitBlt " << passed.elapsed() << endl; ++ ++ if ( current_fade >= scale ) { ++ if ( backgroundMode() == QWidget::NoBackground ) { ++ setBackgroundMode( QWidget::NoBackground ); ++ setBackgroundPixmap( copy ); ++ } ++ return; ++ } ++ ++ QTimer::singleShot( 0, this, SLOT( slotPaintEffectNew() ) ); + } + + ////// +Index: ksmserver/shutdowndlg.h +=================================================================== +--- ksmserver/shutdowndlg.h.orig ++++ ksmserver/shutdowndlg.h +@@ -9,7 +9,9 @@ Copyright (C) 2000 Matthias Ettrich + #include ++#include + #include ++#include + class QPushButton; + class QVButtonGroup; + class QPopupMenu; +@@ -31,13 +33,17 @@ protected: + ~KSMShutdownFeedback() {} + + private slots: +- void slotPaintEffect(); ++ void slotPaintEffectOld(); ++ void slotPaintEffectNew(); ++ void slotGrab(); + + private: + static KSMShutdownFeedback * s_pSelf; + KSMShutdownFeedback(); + int m_currentY; + QPixmap m_root; ++ QTime passed; ++ QImage grabbed; + }; + + diff --git a/opensuse/core/tdebase/make-wallpapers-hideable.diff b/opensuse/core/tdebase/make-wallpapers-hideable.diff new file mode 100644 index 000000000..d59494940 --- /dev/null +++ b/opensuse/core/tdebase/make-wallpapers-hideable.diff @@ -0,0 +1,48 @@ +Index: kcontrol/background/bgdialog.cpp +=================================================================== +--- kcontrol/background/bgdialog.cpp.orig ++++ kcontrol/background/bgdialog.cpp +@@ -477,14 +477,23 @@ void BGDialog::loadWallpaperFilesList() + //search for .desktop files before searching for images without .desktop files + QStringList lst = m_pDirs->findAllResources("wallpaper", "*desktop", false, true); + QStringList files; ++ QStringList hiddenfiles; + for (QStringList::ConstIterator it = lst.begin(); it != lst.end(); ++it) + { + KSimpleConfig fileConfig(*it); + fileConfig.setGroup("Wallpaper"); + ++ int slash = (*it).findRev('/') + 1; ++ QString directory = (*it).left(slash); ++ + QString imageCaption = fileConfig.readEntry("Name"); + QString fileName = fileConfig.readEntry("File"); + ++ if (fileConfig.readBoolEntry("Hidden",false)) { ++ hiddenfiles.append(directory + fileName); ++ continue; ++ } ++ + if (imageCaption.isEmpty()) + { + imageCaption = fileName; +@@ -500,9 +509,8 @@ void BGDialog::loadWallpaperFilesList() + rs = imageCaption + " (" + QString::number(n) + ')'; + lrs = rs.lower(); + } +- int slash = (*it).findRev('/') + 1; +- QString directory = (*it).left(slash); + bool canLoadScaleable = false; ++ + #ifdef HAVE_LIBART + canLoadScaleable = true; + #endif +@@ -516,7 +524,7 @@ void BGDialog::loadWallpaperFilesList() + lst = m_pDirs->findAllResources("wallpaper", "*", false, true); + for (QStringList::ConstIterator it = lst.begin(); it != lst.end(); ++it) + { +- if ( !(*it).endsWith(".desktop") && files.grep(*it).empty() ) { ++ if ( !(*it).endsWith(".desktop") && files.grep(*it).empty() && hiddenfiles.grep(*it).empty() ) { + // First try to see if we have a comment describing the image. If we do + // just use the first line of said comment. + KFileMetaInfo metaInfo(*it); diff --git a/opensuse/core/tdebase/media-cryptosupport.diff b/opensuse/core/tdebase/media-cryptosupport.diff new file mode 100644 index 000000000..e9b4fb58d --- /dev/null +++ b/opensuse/core/tdebase/media-cryptosupport.diff @@ -0,0 +1,31 @@ +Index: kioslave/media/mediamanager/halbackend.cpp +=================================================================== +--- kioslave/media/mediamanager/halbackend.cpp.orig ++++ kioslave/media/mediamanager/halbackend.cpp +@@ -214,10 +214,26 @@ void HALBackend::AddDevice(const char *u + { + /* We only list volume that have a filesystem or volume that have an audio track*/ + if ( libhal_device_get_property_QString(m_halContext, udi, "volume.fsusage") != "filesystem" && ++ libhal_device_get_property_QString(m_halContext, udi, "volume.fsusage") != "crypto" && + !libhal_device_get_property_bool(m_halContext, udi, "volume.disc.has_audio", NULL) && + !libhal_device_get_property_bool(m_halContext, udi, "volume.disc.is_blank", NULL) ) + return; + ++ /* For crypto_LUKS devices check its dm-device, if it is already mounted*/ ++ if ( libhal_device_get_property_QString(m_halContext, udi, "volume.fstype") == "crypto_LUKS" && ++ !libhal_device_get_property_bool(m_halContext, udi, "volume.ignore", NULL) ) { ++ int num; ++ char **dm_uuid = libhal_manager_find_device_string_match(m_halContext, "volume.crypto_luks.clear.backing_volume",udi,&num,NULL); ++ /* if a dm device is found the volume is already decrypted */ ++ if (num == 0) { ++ // TODO: Check for kryptomedia binary. ++ KProcess proc; ++ proc << "kryptomedia" << udi; ++ proc.start(KProcess::DontCare); ++ return; ++ } ++ } ++ + /* Query drive udi */ + QString driveUdi = libhal_device_get_property_QString(m_halContext, udi, "block.storage_device"); + if ( driveUdi.isNull() ) // no storage - no fun diff --git a/opensuse/core/tdebase/media-iPod.diff b/opensuse/core/tdebase/media-iPod.diff new file mode 100644 index 000000000..c5f1f8a24 --- /dev/null +++ b/opensuse/core/tdebase/media-iPod.diff @@ -0,0 +1,26 @@ +Index: kioslave/media/mediamanager/halbackend.cpp +=================================================================== +--- kioslave/media/mediamanager/halbackend.cpp.orig ++++ kioslave/media/mediamanager/halbackend.cpp +@@ -33,6 +33,7 @@ + #include + #include + #include ++#include + + #define MOUNT_SUFFIX (libhal_volume_is_mounted(halVolume) ? QString("_mounted") : QString("_unmounted")) + #define MOUNT_ICON_SUFFIX (libhal_volume_is_mounted(halVolume) ? QString("_mount") : QString("_unmount")) +@@ -532,6 +533,13 @@ void HALBackend::setVolumeProperties(Med + case LIBHAL_DRIVE_TYPE_PORTABLE_AUDIO_PLAYER: + { + medium->setIconName("ipod" + MOUNT_ICON_SUFFIX); ++ ++ if (libhal_device_get_property_QString(m_halContext, driveUdi.latin1(), "info.product") == "iPod" && ++ KProtocolInfo::isKnownProtocol( QString("ipod") ) ) ++ { ++ medium->unmountableState( "ipod:/" ); ++ medium->mountableState( libhal_volume_is_mounted(halVolume) ); ++ } + break; + } + case LIBHAL_DRIVE_TYPE_CAMERA: diff --git a/opensuse/core/tdebase/media-teardown_crypto.diff b/opensuse/core/tdebase/media-teardown_crypto.diff new file mode 100644 index 000000000..f713cffc7 --- /dev/null +++ b/opensuse/core/tdebase/media-teardown_crypto.diff @@ -0,0 +1,175 @@ +Index: kioslave/media/mediamanager/halbackend.cpp +=================================================================== +--- kioslave/media/mediamanager/halbackend.cpp.orig 2011-05-31 13:41:55.000000000 +0200 ++++ kioslave/media/mediamanager/halbackend.cpp 2011-05-31 13:42:48.317334543 +0200 +@@ -1379,4 +1379,54 @@ QString HALBackend::unmount(const QStrin + return QString(); + } + ++bool HALBackend::teardown(const QString &_udi) ++{ ++ const char* dm_udi = _udi.latin1(); ++ const QString blockudi = libhal_device_get_property_QString(m_halContext, dm_udi, "volume.crypto_luks.clear.backing_volume"); ++ if (!blockudi.isEmpty()) { ++ const char* udi = blockudi.latin1(); ++ DBusMessage *dmesg, *reply; ++ DBusError error; ++ const char *options[2]; ++ ++ kdDebug() << "tearDown " << udi << "..." << endl; ++ ++ dbus_error_init(&error); ++ DBusConnection *dbus_connection = dbus_bus_get(DBUS_BUS_SYSTEM, &error); ++ if (dbus_error_is_set(&error)) ++ { ++ dbus_error_free(&error); ++ return false; ++ } ++ ++ if (!(dmesg = dbus_message_new_method_call ("org.freedesktop.Hal", udi, ++ "org.freedesktop.Hal.Device.Volume.Crypto", ++ "Teardown"))) { ++ kdDebug() << "teardown failed for " << udi << ": could not create dbus message\n"; ++ return false; ++ } ++ ++ dbus_error_init (&error); ++ if (!(reply = dbus_connection_send_with_reply_and_block (dbus_connection, dmesg, -1, &error))) ++ { ++ QString qerror; ++ ++ kdDebug() << "teardown failed for " << udi << ": " << error.name << " " << error.message << endl; ++ qerror = QString("teardown failed for %1 because: %2").arg(udi).arg(error.name); ++ dbus_message_unref (dmesg); ++ dbus_error_free (&error); ++ return false; ++ } ++ ++ kdDebug() << "teardown queued for " << udi << endl; ++ ++ dbus_message_unref (dmesg); ++ dbus_message_unref (reply); ++ return true; ++ } ++ ++ return false; ++} ++ ++ + #include "halbackend.moc" +Index: kioslave/media/mediamanager/halbackend.h +=================================================================== +--- kioslave/media/mediamanager/halbackend.h.orig 2011-05-31 13:39:05.000000000 +0200 ++++ kioslave/media/mediamanager/halbackend.h 2011-05-31 13:42:48.317334543 +0200 +@@ -85,6 +85,7 @@ public: + QString mount(const QString &id); + QString mount(const Medium *medium); + QString unmount(const QString &id); ++ bool teardown(const QString &_udi); + + static bool isHotplug( const QString & id ); + +Index: kioslave/media/mediamanager/mediamanager.cpp +=================================================================== +--- kioslave/media/mediamanager/mediamanager.cpp.orig 2011-05-31 13:39:05.000000000 +0200 ++++ kioslave/media/mediamanager/mediamanager.cpp 2011-05-31 13:43:07.916484054 +0200 +@@ -232,6 +232,17 @@ QString MediaManager::unmount(const QStr + #endif + } + ++bool MediaManager::teardown(const QString &name) ++{ ++#ifdef COMPILE_HALBACKEND ++ if (!m_halbackend) ++ return false; ++ return m_halbackend->teardown(name); ++#else ++ return false; ++#endif ++} ++ + QString MediaManager::nameForLabel(const QString &label) + { + const QPtrList media = m_mediaList.list(); +Index: kioslave/media/mediamanager/mediamanager.h +=================================================================== +--- kioslave/media/mediamanager/mediamanager.h.orig 2011-05-31 13:39:05.000000000 +0200 ++++ kioslave/media/mediamanager/mediamanager.h 2011-05-31 13:42:48.318334448 +0200 +@@ -47,6 +47,7 @@ k_dcop: + + QString mount(const QString &uid); + QString unmount(const QString &uid); ++ bool teardown(const QString &uid); + + QString nameForLabel(const QString &label); + ASYNC setUserLabel(const QString &name, const QString &label); +Index: kioslave/media/mounthelper/kio_media_mounthelper.h +=================================================================== +--- kioslave/media/mounthelper/kio_media_mounthelper.h.orig 2007-01-15 12:31:31.000000000 +0100 ++++ kioslave/media/mounthelper/kio_media_mounthelper.h 2011-05-31 13:42:48.318334448 +0200 +@@ -40,6 +40,8 @@ private: + QString m_errorStr; + QString m_device; + bool m_isCdrom; ++ bool isCryptMedia(QString); ++ bool teardown(QString); + + private slots: + void ejectFinished(KProcess* proc); +Index: kioslave/media/mounthelper/kio_media_mounthelper.cpp +=================================================================== +--- kioslave/media/mounthelper/kio_media_mounthelper.cpp.orig 2007-05-14 09:55:40.000000000 +0200 ++++ kioslave/media/mounthelper/kio_media_mounthelper.cpp 2011-05-31 13:42:48.319334353 +0200 +@@ -27,6 +27,7 @@ + #include + #include + #include ++#include + #include + #include + #include +@@ -117,14 +118,17 @@ MountHelper::MountHelper() : KApplicatio + DCOPRef mediamanager("kded", "mediamanager"); + DCOPReply reply = mediamanager.call( "unmount", medium.id()); + if (reply.isValid()) +- reply.get(m_errorStr); +- if (m_errorStr.isNull()) +- invokeEject(device, true); +- else +- error(); ++ reply.get(m_errorStr); ++ if (m_errorStr.isNull()) { ++ if (!teardown(medium.id())) ++ invokeEject(device, true); ++ } else ++ error(); + m_device = device; +- } else +- invokeEject(device, true); ++ } else { ++ if (!teardown(medium.id())) ++ invokeEject(device, true); ++ } + } + else + { +@@ -139,6 +143,19 @@ MountHelper::MountHelper() : KApplicatio + } + } + ++bool MountHelper::teardown(QString id) ++{ ++ DCOPRef mediamanager("kded", "mediamanager"); ++ DCOPReply reply = mediamanager.call( "teardown", id); ++ if (reply.isValid()) { ++ bool rep; ++ reply.get(rep); ++ kdDebug() << "reply from teardown: " << rep << endl; ++ return rep; ++ } ++ return false; ++} ++ + void MountHelper::invokeEject(const QString &device, bool quiet) + { + KProcess *proc = new KProcess(this); diff --git a/opensuse/core/tdebase/media_suse.diff b/opensuse/core/tdebase/media_suse.diff new file mode 100644 index 000000000..8583f03d2 --- /dev/null +++ b/opensuse/core/tdebase/media_suse.diff @@ -0,0 +1,49 @@ +Index: kioslave/media/mediamanager/halbackend.cpp +=================================================================== +--- kioslave/media/mediamanager/halbackend.cpp.orig ++++ kioslave/media/mediamanager/halbackend.cpp +@@ -248,14 +248,15 @@ void HALBackend::AddDevice(const char *u + return; + } + } ++ m_mediaList.addMedium(medium, allowNotification); ++ + QMap options = MediaManagerUtils::splitOptions(mountoptions(udi)); + kdDebug() << "automount " << options["automount"] << endl; +- if (options["automount"] == "true" && allowNotification ) { ++ if (options["automount"] == "true" ) { + QString error = mount(medium); + if (!error.isEmpty()) + kdDebug() << "error " << error << endl; + } +- m_mediaList.addMedium(medium, allowNotification); + + return; + } +@@ -292,6 +293,12 @@ void HALBackend::AddDevice(const char *u + m_mediaList.addMedium(medium, allowNotification); + return; + } ++ ++ if ( allowNotification ) { ++ KProcess proc; ++ proc << "suseplugger" << udi; ++ proc.start(KProcess::DontCare); ++ } + } + + void HALBackend::RemoveDevice(const char *udi) +@@ -816,8 +823,12 @@ QStringList HALBackend::mountoptions(con + removable = libhal_device_get_property_bool(m_halContext, drive_udi.latin1(), "storage.removable", NULL) + || libhal_device_get_property_bool(m_halContext, drive_udi.latin1(), "storage.hotpluggable", NULL); + ++ bool value = removable; ++ QString drive_type = libhal_device_get_property_QString( m_halContext, drive_udi.latin1(), "storage.drive_type" ); ++ value |= ( drive_type == "cdrom" ); ++ + config.setGroup(drive_udi); +- bool value = config.readBoolEntry("automount", false); ++ value = config.readBoolEntry("automount", value); + config.setGroup(name); + + if (libhal_device_get_property_bool(m_halContext, name.latin1(), "volume.disc.is_blank", NULL) diff --git a/opensuse/core/tdebase/mediamanager-mount-point-utf8.diff b/opensuse/core/tdebase/mediamanager-mount-point-utf8.diff new file mode 100644 index 000000000..87db2b9ef --- /dev/null +++ b/opensuse/core/tdebase/mediamanager-mount-point-utf8.diff @@ -0,0 +1,13 @@ +Index: kioslave/media/mediamanager/halbackend.cpp +=================================================================== +--- kioslave/media/mediamanager/halbackend.cpp.orig ++++ kioslave/media/mediamanager/halbackend.cpp +@@ -471,7 +471,7 @@ void HALBackend::setVolumeProperties(Med + + medium->mountableState( + libhal_volume_get_device_file(halVolume), /* Device node */ +- libhal_volume_get_mount_point(halVolume), /* Mount point */ ++ QString::fromUtf8(libhal_volume_get_mount_point(halVolume)), /* Mount point */ + libhal_volume_get_fstype(halVolume), /* Filesystem type */ + libhal_volume_is_mounted(halVolume) ); /* Mounted ? */ + diff --git a/opensuse/core/tdebase/minicli-combo-editor.diff b/opensuse/core/tdebase/minicli-combo-editor.diff new file mode 100644 index 000000000..698668ec1 --- /dev/null +++ b/opensuse/core/tdebase/minicli-combo-editor.diff @@ -0,0 +1,34 @@ +Index: kdesktop/minicli.h +=================================================================== +--- kdesktop/minicli.h.orig ++++ kdesktop/minicli.h +@@ -52,12 +52,14 @@ public: + + void setCommand(const QString& command); + void reset(); +- void saveConfig(); + void clearHistory(); + + virtual void show(); + virtual QSize sizeHint() const; + ++public slots: ++ void saveConfig(); ++ + protected slots: + virtual void accept(); + virtual void reject(); +Index: kdesktop/minicli.cpp +=================================================================== +--- kdesktop/minicli.cpp.orig ++++ kdesktop/minicli.cpp +@@ -133,6 +133,9 @@ Minicli::Minicli( QWidget *parent, const + connect( m_dlg->cbCommand, SIGNAL( returnPressed() ), + m_dlg->pbRun, SLOT( animateClick() ) ); + ++ m_dlg->cbCommand->setHistoryEditorEnabled( true ); ++ connect( m_dlg->cbCommand, SIGNAL(removed( const QString&) ), SLOT(saveConfig()) ); ++ + // Advanced group box... + connect(m_dlg->cbPriority, SIGNAL(toggled(bool)), SLOT(slotChangeScheduler(bool))); + connect(m_dlg->slPriority, SIGNAL(valueChanged(int)), SLOT(slotPriority(int))); diff --git a/opensuse/core/tdebase/mp3-info.tar.bz2 b/opensuse/core/tdebase/mp3-info.tar.bz2 new file mode 100644 index 000000000..f6cf95bcd Binary files /dev/null and b/opensuse/core/tdebase/mp3-info.tar.bz2 differ diff --git a/opensuse/core/tdebase/mtab-reenable.patch b/opensuse/core/tdebase/mtab-reenable.patch new file mode 100644 index 000000000..1593a560d --- /dev/null +++ b/opensuse/core/tdebase/mtab-reenable.patch @@ -0,0 +1,153 @@ +diff -wruN kdebase-3.5.10.orig/kioslave/media/mediamanager/fstabbackend.cpp kdebase-3.5.10/kioslave/media/mediamanager/fstabbackend.cpp +--- kdebase-3.5.10.orig/kioslave/media/mediamanager/fstabbackend.cpp 2006-10-01 21:31:54.000000000 +0400 ++++ kdebase-3.5.10/kioslave/media/mediamanager/fstabbackend.cpp 2011-08-17 14:51:34.697199962 +0400 +@@ -50,7 +50,7 @@ + #define MTAB "/etc/mnttab" + #else + #define FSTAB "/etc/fstab" +-#define MTAB "/etc/mtab" ++#define MTAB "/proc/self/mounts" + #endif + + +@@ -58,7 +58,7 @@ + FstabBackend::FstabBackend(MediaList &list, bool networkSharesOnly) + : QObject(), BackendBase(list), m_networkSharesOnly(networkSharesOnly) + { +- KDirWatch::self()->addFile(MTAB); ++ KDirWatch::self()->addDir("/media",0); + KDirWatch::self()->addFile(FSTAB); + + connect( KDirWatch::self(), SIGNAL( dirty(const QString&) ), +@@ -94,7 +94,7 @@ + m_mediaList.removeMedium(*it, false); + } + KDirWatch::self()->removeFile(FSTAB); +- KDirWatch::self()->removeFile(MTAB); ++ KDirWatch::self()->removeDir("/media"); + } + + QString FstabBackend::mount( const QString &_udi ) +@@ -119,8 +119,9 @@ + + void FstabBackend::slotDirty(const QString &path) + { +- if (path==MTAB) ++ if (path=="/media") + { ++ sleep(1); + handleMtabChange(); + } + else if (path==FSTAB) +@@ -136,18 +137,23 @@ + || mount->mountType() == "sysfs" + || mount->mountType() == "fdescfs" + || mount->mountType() == "kernfs" ++ || mount->mountType() == "devtmpfs" ++ || mount->mountType() == "rootfs" + || mount->mountType() == "usbfs" + || mount->mountType().contains( "proc" ) ++ || mount->mountType().contains( "gvfs" ) + || mount->mountType() == "unknown" + || mount->mountType() == "none" + || mount->mountType() == "sunrpc" + || mount->mountedFrom() == "none" + || mount->mountedFrom() == "tmpfs" + || mount->mountedFrom().find("shm") != -1 +- || mount->mountPoint() == "/dev/swap" ++ || !(mount->mountPoint() == "/" || mount->mountPoint().find("/media") == 0 ) ++/* || mount->mountPoint() == "/dev/swap" ++ || mount->mountPoint() == "/dev" + || mount->mountPoint() == "/dev/pts" + || mount->mountPoint().find("/proc") == 0 +- || mount->mountPoint().find("/sys") == 0 ++ || mount->mountPoint().find("/sys") == 0 */ + + // We might want to display only network shares + // since HAL doesn't handle them +@@ -187,10 +193,12 @@ + nothing has changed, do not stat the mount point. Avoids + hang if network shares are stalling */ + QString mtabEntry = dev + "*" + mp + "*" + fs; ++#if 0 + if(m_mtabEntries.contains(mtabEntry)) { + new_mtabIds += m_mtabEntries[mtabEntry]; + continue; + } ++#endif + + QString id = generateId(dev, mp); + new_mtabIds+=id; +@@ -203,7 +211,6 @@ + m_mediaList.changeMediumState(id, true, false, + mime, icon, label); + } +-#if 0 + else if ( !m_mtabIds.contains(id) ) + { + QString name = generateName(dev, fs); +@@ -219,9 +226,8 @@ + m->setIconName(icon); + m->setLabel(label); + +- m_mediaList.addMedium(m, notificationAllowed); ++ m_mediaList.addMedium(m, allowNotification); + } +-#endif + } + + QStringList::iterator it2 = m_mtabIds.begin(); +@@ -247,12 +253,10 @@ + m_mediaList.changeMediumState(*it2, false, false, + mime, icon, label); + } +-#if 0 + else if ( !new_mtabIds.contains(*it2) ) + { + m_mediaList.removeMedium(*it2, allowNotification); + } +-#endif + } + + m_mtabIds = new_mtabIds; +diff -wruN kdebase-3.5.10.orig/kioslave/media/mediamanager/removablebackend.cpp kdebase-3.5.10/kioslave/media/mediamanager/removablebackend.cpp +--- kdebase-3.5.10.orig/kioslave/media/mediamanager/removablebackend.cpp 2006-03-17 13:17:33.000000000 +0300 ++++ kdebase-3.5.10/kioslave/media/mediamanager/removablebackend.cpp 2011-08-17 14:51:51.854357476 +0400 +@@ -27,7 +27,7 @@ + #ifdef _OS_SOLARIS_ + #define MTAB "/etc/mnttab" + #else +-#define MTAB "/etc/mtab" ++#define MTAB "/proc/self/mounts" + #endif + + +@@ -35,7 +35,7 @@ + RemovableBackend::RemovableBackend(MediaList &list) + : QObject(), BackendBase(list) + { +- KDirWatch::self()->addFile(MTAB); ++ KDirWatch::self()->addDir("/media",0); + + connect( KDirWatch::self(), SIGNAL( dirty(const QString&) ), + this, SLOT( slotDirty(const QString&) ) ); +@@ -52,7 +52,7 @@ + m_mediaList.removeMedium(*it, false); + } + +- KDirWatch::self()->removeFile(MTAB); ++ KDirWatch::self()->removeDir("/media"); + } + + bool RemovableBackend::plug(const QString &devNode, const QString &label) +@@ -116,8 +116,9 @@ + + void RemovableBackend::slotDirty(const QString &path) + { +- if (path==MTAB) ++ if (path=="/media") + { ++ sleep(1); + handleMtabChange(); + } + } diff --git a/opensuse/core/tdebase/non-fast-malloc.diff b/opensuse/core/tdebase/non-fast-malloc.diff new file mode 100644 index 000000000..c3f36be87 --- /dev/null +++ b/opensuse/core/tdebase/non-fast-malloc.diff @@ -0,0 +1,15 @@ +--- konqueror/konq_mainwindow.cc ++++ konqueror/konq_mainwindow.cc 2003/05/30 13:19:04 +@@ -4550,9 +4550,9 @@ + int usage_sum = 0; + #if defined(KDE_MALLINFO_STDLIB) || defined(KDE_MALLINFO_MALLOC) + // ugly hack for kdecore/malloc +- extern int kde_malloc_is_used; +- free( calloc( 4, 4 )); // trigger setting kde_malloc_is_used +- if( kde_malloc_is_used ) ++// extern int kde_malloc_is_used; ++// free( calloc( 4, 4 )); // trigger setting kde_malloc_is_used ++ if( 0 ) + { + struct mallinfo m = mallinfo(); + usage_sum = m.hblkhd + m.uordblks; diff --git a/opensuse/core/tdebase/nsplugin-Preference.diff b/opensuse/core/tdebase/nsplugin-Preference.diff new file mode 100644 index 000000000..3e3bcca05 --- /dev/null +++ b/opensuse/core/tdebase/nsplugin-Preference.diff @@ -0,0 +1,13 @@ +Index: nsplugins/pluginscan.cpp +=================================================================== +--- nsplugins/pluginscan.cpp.orig ++++ nsplugins/pluginscan.cpp +@@ -463,7 +463,7 @@ void writeServicesFile( QStringList mime + ts << "Icon=netscape" << endl; + ts << "Comment=" << i18n("Netscape plugin viewer") << endl; + ts << "X-KDE-Library=libnsplugin" << endl; +- ts << "InitialPreference=0" << endl; ++ ts << "InitialPreference=7" << endl; + ts << "ServiceTypes=KParts/ReadOnlyPart,Browser/View" << endl; + ts << "X-KDE-BrowserView-PluginsInfo=nsplugins/pluginsinfo" << endl; + diff --git a/opensuse/core/tdebase/nsplugin-init-gtk.diff b/opensuse/core/tdebase/nsplugin-init-gtk.diff new file mode 100644 index 000000000..882c12443 --- /dev/null +++ b/opensuse/core/tdebase/nsplugin-init-gtk.diff @@ -0,0 +1,49 @@ +--- nsplugins/viewer/nsplugin.h~ 2008-02-13 10:40:38.000000000 +0100 ++++ nsplugins/viewer/nsplugin.h 2010-09-22 23:31:58.721961990 +0200 +@@ -315,6 +315,10 @@ private: + QPtrList _trash; + + QCString _app; ++ ++ // If plugins use gtk, we call the gtk_init function for them --- ++ // but only do it once. ++ static bool s_initedGTK; + }; + + +--- nsplugins/viewer/nsplugin.cpp~ 2008-02-13 10:40:38.000000000 +0100 ++++ nsplugins/viewer/nsplugin.cpp 2010-09-22 23:31:58.775909705 +0200 +@@ -1330,6 +1330,9 @@ DCOPRef NSPluginViewer::newClass( QStrin + + /****************************************************************************/ + ++bool NSPluginClass::s_initedGTK = false; ++ ++typedef void gtkInitFunc(int *argc, char ***argv); + + NSPluginClass::NSPluginClass( const QString &library, + QObject *parent, const char *name ) +@@ -1377,6 +1380,23 @@ NSPluginClass::NSPluginClass( const QStr + + // initialize plugin + kdDebug(1431) << "Plugin library " << library << " loaded!" << endl; ++ ++ // see if it uses gtk ++ if (!s_initedGTK) { ++ gtkInitFunc* gtkInit = (gtkInitFunc*)_handle->symbol("gtk_init"); ++ if (gtkInit) { ++ kdDebug(1431) << "Calling gtk_init for the plugin" << endl; ++ // Prevent gtk_init() from replacing the X error handlers, since the Gtk ++ // handlers abort when they receive an X error, thus killing the viewer. ++ int (*old_error_handler)(Display*,XErrorEvent*) = XSetErrorHandler(0); ++ int (*old_io_error_handler)(Display*) = XSetIOErrorHandler(0); ++ gtkInit(0, 0); ++ XSetErrorHandler(old_error_handler); ++ XSetIOErrorHandler(old_io_error_handler); ++ s_initedGTK = true; ++ } ++ } ++ + _constructed = true; + _error = initialize()!=NPERR_NO_ERROR; + } diff --git a/opensuse/core/tdebase/openssl1.patch b/opensuse/core/tdebase/openssl1.patch new file mode 100644 index 000000000..f1d250c44 --- /dev/null +++ b/opensuse/core/tdebase/openssl1.patch @@ -0,0 +1,40 @@ +--- kcontrol/crypto/crypto.cpp.orig 2006-10-02 06:31:49.000000000 +1300 ++++ kcontrol/crypto/crypto.cpp +@@ -2321,7 +2321,11 @@ bool KCryptoConfig::loadCiphers() { + unsigned int i; + SSL_CTX *ctx; + SSL *ssl; ++#if OPENSSL_VERSION_NUMBER < 0x00909000L + SSL_METHOD *meth; ++#else ++const SSL_METHOD *meth; ++#endif + + SSLv2Box->clear(); + SSLv3Box->clear(); +@@ -2337,8 +2341,10 @@ SSL_METHOD *meth; + CipherItem *item; + for (i=0; ; i++) { + int j, k; +- SSL_CIPHER *sc; +- sc = (meth->get_cipher)(i); ++#if defined(OPENSSL_VERSION_NUMBER) && OPENSSL_VERSION_NUMBER >= 0x10000000L ++ const ++#endif ++ SSL_CIPHER *sc = (meth->get_cipher)(i); + if (!sc) + break; + // Leak of sc*? +@@ -2365,8 +2371,10 @@ SSL_METHOD *meth; + + for (i=0; ; i++) { + int j, k; +- SSL_CIPHER *sc; +- sc = (meth->get_cipher)(i); ++#if defined(OPENSSL_VERSION_NUMBER) && OPENSSL_VERSION_NUMBER >= 0x10000000L ++ const ++#endif ++ SSL_CIPHER *sc = (meth->get_cipher)(i); + if (!sc) + break; + // Leak of sc*? diff --git a/opensuse/core/tdebase/optional-compmgr.diff b/opensuse/core/tdebase/optional-compmgr.diff new file mode 100644 index 000000000..d0affeed9 --- /dev/null +++ b/opensuse/core/tdebase/optional-compmgr.diff @@ -0,0 +1,32 @@ +Index: kwin/workspace.cpp +=================================================================== +--- kwin/workspace.cpp.orig ++++ kwin/workspace.cpp +@@ -59,6 +59,17 @@ KSelectionOwner* kompmgr_selection; + + bool allowKompmgrRestart = TRUE; + ++bool supportsCompMgr() ++{ ++ int i; ++ ++ bool damageExt = XQueryExtension(qt_xdisplay(), "DAMAGE", &i, &i, &i); ++ bool compositeExt = XQueryExtension(qt_xdisplay(), "Composite", &i, &i, &i); ++ bool xfixesExt = XQueryExtension(qt_xdisplay(), "XFIXES", &i, &i, &i); ++ ++ return damageExt && compositeExt && xfixesExt; ++} ++ + // Rikkus: This class is too complex. It needs splitting further. + // It's a nightmare to understand, especially with so few comments :( + +@@ -199,6 +210,9 @@ Workspace::Workspace( bool restore ) + connect( kapp->desktop(), SIGNAL( resized( int )), SLOT( desktopResized())); + #endif + ++ if (!supportsCompMgr()) ++ options->useTranslucency = false; ++ + // start kompmgr - i wanted to put this into main.cpp, but that would prevent dcop support, as long as Application was no dcop_object + if (options->useTranslucency) + { diff --git a/opensuse/core/tdebase/quick_browser_menu.diff b/opensuse/core/tdebase/quick_browser_menu.diff new file mode 100644 index 000000000..dd955115c --- /dev/null +++ b/opensuse/core/tdebase/quick_browser_menu.diff @@ -0,0 +1,30 @@ +Index: kicker/kicker/ui/browser_mnu.cpp +=================================================================== +--- kicker/kicker/ui/browser_mnu.cpp.orig ++++ kicker/kicker/ui/browser_mnu.cpp +@@ -31,6 +31,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE + #include + #include + #include ++#include + #include + #include + #include +@@ -148,12 +149,14 @@ void PanelBrowserMenu::initialize() + // only the first part menu got them + if(_startid == 0 && !_filesOnly) { + insertTitle(path()); ++ KConfig *c = KGlobal::config(); ++ c->setGroup("menus"); + insertItem(CICON("kfm"), i18n("Open in File Manager"), this, SLOT(slotOpenFileManager())); +- if (kapp->authorize("shell_access")) +- insertItem(CICON("terminal"), i18n("Open in Terminal"), this, SLOT(slotOpenTerminal())); ++ if (kapp->authorize("shell_access") && c->readBoolEntry("kickerOpenInTerminalIsVisible",false)) ++ insertItem(CICON("terminal"), i18n("Open in Terminal"), this, SLOT(slotOpenTerminal())); ++ insertSeparator(); + } + +- + bool first_entry = true; + bool dirfile_separator = false; + unsigned int item_count = 0; diff --git a/opensuse/core/tdebase/remove-beagle-stuff.diff b/opensuse/core/tdebase/remove-beagle-stuff.diff new file mode 100644 index 000000000..94b243d9d --- /dev/null +++ b/opensuse/core/tdebase/remove-beagle-stuff.diff @@ -0,0 +1,34 @@ +a "make it compile " patch from Stephan Binner + +--- kicker/kicker/plugins/beaglesearch.cpp ++++ kicker/kicker/plugins/beaglesearch.cpp +@@ -291,11 +291,11 @@ + beagle_query_set_max_hits (beagle_query, max_hits_per_source); // this is per source! + + kdDebug () << "Creating query from \"" << query_str << "\"" << endl; +- for ( QStringList::Iterator it = sources_menu.begin(); it != sources_menu.end(); ++it ) ++ /* for ( QStringList::Iterator it = sources_menu.begin(); it != sources_menu.end(); ++it ) + beagle_query_add_source (beagle_query, g_strdup ((*it).utf8 ())); + + for ( QStringList::Iterator it = types_menu.begin(); it != types_menu.end(); ++it ) +- beagle_query_add_hit_type (beagle_query, g_strdup ((*it).utf8 ())); ++ beagle_query_add_hit_type (beagle_query, g_strdup ((*it).utf8 ()));*/ + + QStringList query_terms; + QString start_date, end_date; +@@ -307,13 +307,13 @@ + else if (key_value_pair.count () == 2) { + QString key = key_value_pair [0].lower (); + QString value = key_value_pair [1]; +- if (key == "mime") ++ if /*(key == "mime") + beagle_query_add_mime_type (beagle_query, g_strdup (value.utf8 ())); + else if (key == "type") + beagle_query_add_hit_type (beagle_query, g_strdup (value.utf8 ())); + else if (key == "source") + beagle_query_add_source (beagle_query, g_strdup (value.utf8 ())); +- else if (key == "start") ++ else if */ (key == "start") + start_date = value; + else if (key == "end") + end_date = value; diff --git a/opensuse/core/tdebase/restore-description-parens.diff b/opensuse/core/tdebase/restore-description-parens.diff new file mode 100644 index 000000000..f575dbcb2 --- /dev/null +++ b/opensuse/core/tdebase/restore-description-parens.diff @@ -0,0 +1,13 @@ +Index: kicker/kicker/ui/service_mnu.cpp +=================================================================== +--- kicker/kicker/ui/service_mnu.cpp.orig ++++ kicker/kicker/ui/service_mnu.cpp +@@ -426,7 +426,7 @@ void PanelServiceMenu::insertMenuItem(KS + { + if (comment.find(serviceName, 0, true) == -1) + { +- serviceName = i18n("Entries in K-menu: %1 app name, %2 description", "%1 - %2").arg(serviceName, comment); ++ serviceName = i18n("Entries in K-menu: %1 app name, %2 description", "%1 (%2)").arg(serviceName, comment); + } + else + { diff --git a/opensuse/core/tdebase/rotate-wacom-pointers.diff b/opensuse/core/tdebase/rotate-wacom-pointers.diff new file mode 100644 index 000000000..a8d9c7f96 --- /dev/null +++ b/opensuse/core/tdebase/rotate-wacom-pointers.diff @@ -0,0 +1,291 @@ +--- kcontrol/randr/legacyrandrscreen.cpp ++++ kcontrol/randr/legacyrandrscreen.cpp +@@ -30,6 +30,8 @@ + #include + #include + #include ++#include ++#include + + #include "ktimerdialog.h" + #include "legacyrandrscreen.h" +@@ -103,12 +105,55 @@ bool LegacyRandRScreen::applyProposed() + m_currentSize = m_proposedSize; + m_currentRotation = m_proposedRotation; + m_currentRefreshRate = m_proposedRefreshRate; ++ ++ // search wacom utility and set orientation for available wacom pointers ++ QString xsetwacom = KStandardDirs::findExe("xsetwacom"); ++ if (!xsetwacom.isEmpty()) { ++ m_wacomPointers.clear(); ++ KProcess *proc = new KProcess; ++ connect(proc, SIGNAL(receivedStdout(KProcess *, char *, int)), SLOT(gotAvailablePointers(KProcess *, char *, int))); ++ *proc << "xsetwacom" << "list"; ++ if (!proc->start(KProcess::Block,KProcess::Stdout)) ++ kdError("Could not ask xsetwacom for available pointers."); ++ else { ++ for ( QStringList::Iterator it = m_wacomPointers.begin(); it != m_wacomPointers.end(); ++it ) { ++ KProcess *set = new KProcess; ++ *set << "xsetwacom" << "set" << (*it) << "Rotate"; ++ switch (m_currentRotation) { ++ case RR_Rotate_90: ++ *set << "CW"; ++ break; ++ case RR_Rotate_180: ++ *set << "HALF"; ++ break; ++ case RR_Rotate_270: ++ *set << "CCW"; ++ break; ++ default: ++ *set << "NONE"; ++ } ++ if (!set->start()) ++ kdError("Could not set orientation for wacom pointers."); ++ } ++ } ++ } ++ + return true; + } + + return false; + } + ++void LegacyRandRScreen::gotAvailablePointers(KProcess*, char *buffer, int len) ++{ ++ QString myBuf = QString::fromLatin1(buffer, len); ++ QStringList lines = QStringList::split('\n', myBuf); ++ for ( QStringList::Iterator it = lines.begin(); it != lines.end(); it++) { ++ QStringList split = QStringList::split(' ', (*it)); ++ m_wacomPointers+=split.first(); ++ } ++} ++ + bool LegacyRandRScreen::applyProposedAndConfirm() + { + if (proposedChanged()) { +--- kcontrol/randr/legacyrandrscreen.h ++++ kcontrol/randr/legacyrandrscreen.h +@@ -30,6 +30,7 @@ + #include "randr.h" + + class KTimerDialog; ++class KProcess; + + class LegacyRandRScreen : public QObject + { +@@ -135,6 +136,9 @@ public: + void load(KConfig& config); + void save(KConfig& config) const; + ++private slots: ++ void gotAvailablePointers(KProcess*, char *buffer, int len); ++ + private: + XRRScreenConfiguration* m_config; + +@@ -156,6 +160,8 @@ private: + int m_proposedSize; + int m_proposedRefreshRate; + ++ QStringList m_wacomPointers; ++ + KTimerDialog* m_shownDialog; + + }; +--- kcontrol/randr/randrscreen.cpp ++++ kcontrol/randr/randrscreen.cpp +@@ -18,6 +18,8 @@ + + #include + #include ++#include ++#include + #include "randrscreen.h" + #include "randrcrtc.h" + #include "randroutput.h" +@@ -429,6 +431,40 @@ bool RandRScreen::applyProposed(bool confirm) + if (succeed && confirm) + succeed = RandR::confirm(r); + ++ if (succeed) { ++ // search wacom utility and set orientation for available wacom pointers ++ QString xsetwacom = KStandardDirs::findExe("xsetwacom"); ++ if (!xsetwacom.isEmpty()) { ++ m_wacomPointers.clear(); ++ KProcess *proc = new KProcess; ++ connect(proc, SIGNAL(receivedStdout(KProcess *, char *, int)), SLOT(gotAvailablePointers(KProcess *, char *, int))); ++ *proc << "xsetwacom" << "list"; ++ if (!proc->start(KProcess::Block,KProcess::Stdout)) ++ kdError("Could not ask xsetwacom for available pointers."); ++ else { ++ for ( QStringList::Iterator it = m_wacomPointers.begin(); it != m_wacomPointers.end(); ++it ) { ++ KProcess *set = new KProcess; ++ *set << "xsetwacom" << "set" << (*it) << "Rotate"; ++ switch (m_unifiedRotation) { ++ case RR_Rotate_90: ++ *set << "CW"; ++ break; ++ case RR_Rotate_180: ++ *set << "HALF"; ++ break; ++ case RR_Rotate_270: ++ *set << "CCW"; ++ break; ++ default: ++ *set << "NONE"; ++ } ++ if (!set->start()) ++ kdError("Could not set orientation for wacom pointers."); ++ } ++ } ++ } ++ } ++ + // if we succeded applying and the user confirmer the changes, + // just return from here + if (succeed) +@@ -447,6 +483,16 @@ bool RandRScreen::applyProposed(bool confirm) + return false; + } + ++void RandRScreen::gotAvailablePointers(KProcess*, char *buffer, int len) ++{ ++ QString myBuf = QString::fromLatin1(buffer, len); ++ QStringList lines = QStringList::split('\n', myBuf); ++ for ( QStringList::Iterator it = lines.begin(); it != lines.end(); it++) { ++ QStringList split = QStringList::split(' ', (*it)); ++ m_wacomPointers+=split.first(); ++ } ++} ++ + void RandRScreen::unifyOutputs() + { + SizeList sizes = unifiedSizes(); +--- kcontrol/randr/randrscreen.h ++++ kcontrol/randr/randrscreen.h +@@ -29,6 +29,7 @@ + + class QAction; + class KConfig; ++class KProcess; + + class RandRScreen : public QObject + { +@@ -95,6 +96,9 @@ public slots: + void save(); + void load(); + ++private slots: ++ void gotAvailablePointers(KProcess*, char *buffer, int len); ++ + signals: + void configChanged(); + +@@ -119,7 +123,7 @@ private: + CrtcMap m_crtcs; + OutputMap m_outputs; + ModeMap m_modes; +- ++ QStringList m_wacomPointers; + }; + #endif + +--- kcontrol/randr/randrcrtc.cpp ++++ kcontrol/randr/randrcrtc.cpp +@@ -17,6 +17,8 @@ + */ + + #include ++#include ++#include + #include "randrcrtc.h" + #include "randrscreen.h" + #include "randroutput.h" +@@ -298,6 +300,38 @@ + m_currentRate = mode.refreshRate(); + emit crtcChanged(m_id, RandR::ChangeMode); + ret = true; ++ ++ // search wacom utility and set orientation for available wacom pointers ++ QString xsetwacom = KStandardDirs::findExe("xsetwacom"); ++ if (!xsetwacom.isEmpty()) { ++ m_wacomPointers.clear(); ++ KProcess *proc = new KProcess; ++ connect(proc, SIGNAL(receivedStdout(KProcess *, char *, int)), SLOT(gotAvailablePointers(KProcess *, char *, int))); ++ *proc << "xsetwacom" << "list"; ++ if (!proc->start(KProcess::Block,KProcess::Stdout)) ++ kdError("Could not ask xsetwacom for available pointers."); ++ else { ++ for ( QStringList::Iterator it = m_wacomPointers.begin(); it != m_wacomPointers.end(); ++it ) { ++ KProcess *set = new KProcess; ++ *set << "xsetwacom" << "set" << (*it) << "Rotate"; ++ switch (m_currentRotation) { ++ case RR_Rotate_90: ++ *set << "CW"; ++ break; ++ case RR_Rotate_180: ++ *set << "HALF"; ++ break; ++ case RR_Rotate_270: ++ *set << "CCW"; ++ break; ++ default: ++ *set << "NONE"; ++ } ++ if (!set->start()) ++ kdError("Could not set orientation for wacom pointers."); ++ } ++ } ++ } + } + else + { +@@ -309,6 +343,16 @@ + return ret; + } + ++void RandRCrtc::gotAvailablePointers(KProcess*, char *buffer, int len) ++{ ++ QString myBuf = QString::fromLatin1(buffer, len); ++ QStringList lines = QStringList::split('\n', myBuf); ++ for ( QStringList::Iterator it = lines.begin(); it != lines.end(); it++) { ++ QStringList split = QStringList::split(' ', (*it)); ++ m_wacomPointers+=split.first(); ++ } ++} ++ + bool RandRCrtc::proposeSize(QSize s) + { + m_proposedRect.setSize(s); +--- kcontrol/randr/randrcrtc.h ++++ kcontrol/randr/randrcrtc.h +@@ -26,6 +26,8 @@ + + #ifdef HAS_RANDR_1_2 + ++class KProcess; ++ + class RandRCrtc : public QObject + { + Q_OBJECT +@@ -62,6 +64,9 @@ + + ModeList modes() const; + ++private slots: ++ void gotAvailablePointers(KProcess*, char *buffer, int len); ++ + signals: + void crtcChanged(RRCrtc c, int changes); + +@@ -86,6 +91,8 @@ + float m_currentRate; + + RandRScreen *m_screen; ++ ++ QStringList m_wacomPointers; + }; + #endif + diff --git a/opensuse/core/tdebase/runupdater.patch b/opensuse/core/tdebase/runupdater.patch new file mode 100644 index 000000000..3dcc4c550 --- /dev/null +++ b/opensuse/core/tdebase/runupdater.patch @@ -0,0 +1,133 @@ +Index: runupdater/runupdater.desktop +=================================================================== +--- /dev/null ++++ runupdater/runupdater.desktop +@@ -0,0 +1,9 @@ ++[Desktop Entry] ++Type=Application ++Exec=runupdater ++Terminal=false ++Name=Run Updater Tool ++Icon=www ++ ++X-KDE-StartupNotify=false ++OnlyShowIn=KDE; +Index: runupdater/runupdater.cpp +=================================================================== +--- /dev/null ++++ runupdater/runupdater.cpp +@@ -0,0 +1,96 @@ ++/* ++ Run either opensuseupdater or zen-updater but not both. ++ For opensuseupdater its autostart condition is checked, for zen-updater ++ it's checked whether its autostart file is enabled. ++*/ ++ ++#include ++#include ++#include ++#include ++ ++static bool disabledOSU() ++ { ++ KConfig osu( "opensuseupdaterrc", true ); ++ osu.setGroup( "General" ); ++// fprintf( stderr, "OSU:%d\n", osu.readBoolEntry ("Autostart", true )); ++ return !osu.readBoolEntry( "Autostart", true ); ++ } ++ ++static bool availableOSU() ++ { ++ return !KStandardDirs::findExe( "opensuseupdater" ).isEmpty(); ++ } ++ ++static bool runOSU() ++ { ++ return KApplication::kdeinitExec( "opensuseupdater", QStringList(), NULL, NULL, "0" ) == 0; ++ } ++ ++static bool disabledZU() ++ { ++ KConfig zu( "zen-updater-auto.desktop", true, false, "xdgconf-autostart" ); ++ zu.setGroup( "Desktop Entry" ); ++// fprintf( stderr, "ZU %d\n", zu.readBoolEntry( "Hidden", false ) ); ++ return zu.readBoolEntry( "Hidden", false ); ++ } ++ ++static bool availableZU() ++ { ++ return !KStandardDirs::findExe( "zen-updater" ).isEmpty(); ++ } ++ ++static bool runZU() ++ { ++ return KApplication::kdeinitExec( "zen-updater", QStringList(), NULL, NULL, "0" ) == 0; ++ } ++ ++extern "C" ++int kdemain() ++ { ++ KInstance inst( "runupdater" ); ++ // KSimpleConfig should parse this one just fine, with entries in the default group ++ KSimpleConfig sysconfig( "/etc/sysconfig/sw_management", true ); ++ QString preferred = sysconfig.readEntry( "PREFERRED_SW_MANAGER_STACK" ); ++// fprintf( stderr, "SC1: %s\n", preferred.latin1()); ++ if( preferred.startsWith( "\"" ) && preferred.endsWith( "\"" )) // strip "" ++ preferred = preferred.mid( 1, preferred.length() - 2 ); ++// fprintf( stderr, "SC2: %s\n", preferred.latin1()); ++ if( preferred.lower() == "opensuse" ) ++ { ++ // opensuseupdater preferred - it's it's available, run it if it's enabled, ++ // try zen-updater only if opensuseupdater is not available at all ++ if( availableOSU()) ++ { ++ if( !disabledOSU()) ++ return runOSU(); ++ return 0; ++ } ++ else if( availableZU() && !disabledZU()) ++ return runZU(); ++ return 0; ++ } ++ else if( preferred.lower() == "zlm" ) ++ { ++ // similar like above, just the other way around ++ if( availableZU()) ++ { ++ if( !disabledZU()) ++ return runZU(); ++ return 0; ++ } ++ else if( availableOSU() && !disabledOSU()) ++ return runOSU(); ++ return 0; ++ } ++ else ++ { ++ // prefer opensuseupdater, but try to run zen-updater if opensuseupdater is not run ++ // the difference is that zen-updater is still run if opensuseupdater is disabled ++ if( availableOSU() && !disabledOSU() && runOSU()) ++ return 0; ++ if( availableZU() && !disabledZU() && runZU()) ++ return 0; ++ return 0; ++ } ++ } +Index: runupdater/Makefile.am +=================================================================== +--- /dev/null ++++ runupdater/Makefile.am +@@ -0,0 +1,13 @@ ++INCLUDES = $(all_includes) ++ ++bin_PROGRAMS = ++lib_LTLIBRARIES = ++kdeinit_LTLIBRARIES = runupdater.la ++ ++runupdater_la_LDFLAGS = $(all_libraries) -module $(KDE_PLUGIN) ++runupdater_la_LIBADD = $(LIB_KDECORE) ++ ++runupdater_la_SOURCES = runupdater.cpp ++ ++autostart_DATA = runupdater.desktop ++autostartdir = $(datadir)/autostart diff --git a/opensuse/core/tdebase/select-wm-gui.diff b/opensuse/core/tdebase/select-wm-gui.diff new file mode 100644 index 000000000..823262962 --- /dev/null +++ b/opensuse/core/tdebase/select-wm-gui.diff @@ -0,0 +1,635 @@ +Subject: GUI configuration for selecting WM +From: Lubos Lunak +Feature: bnc#332079 +Patch-upstream: no + +Index: ksmserver/startup.cpp +=================================================================== +--- ksmserver/startup.cpp.orig ++++ ksmserver/startup.cpp +@@ -103,38 +103,39 @@ void KSMServer::restoreSession( QString + config->setGroup( sessionGroup ); + int count = config->readNumEntry( "count" ); + appsToStart = count; +- +- QValueList wmCommands; +- if ( !wm.isEmpty() ) { +- for ( int i = 1; i <= count; i++ ) { +- QString n = QString::number(i); +- if ( wm == config->readEntry( QString("program")+n ) ) { +- wmCommands << config->readListEntry( QString("restartCommand")+n ); +- } +- } +- } +- if ( wmCommands.isEmpty() ) +- wmCommands << ( QStringList() << wm ); +- + publishProgress( appsToStart, true ); ++ upAndRunning( "ksmserver" ); + connectDCOPSignal( launcher, launcher, "autoStart0Done()", + "autoStart0Done()", true); + connectDCOPSignal( launcher, launcher, "autoStart1Done()", + "autoStart1Done()", true); + connectDCOPSignal( launcher, launcher, "autoStart2Done()", + "autoStart2Done()", true); +- upAndRunning( "ksmserver" ); + +- if ( !wmCommands.isEmpty() ) { +- // when we have a window manager, we start it first and give +- // it some time before launching other processes. Results in a +- // visually more appealing startup. +- for (uint i = 0; i < wmCommands.count(); i++) +- startApplication( wmCommands[i] ); +- QTimer::singleShot( 4000, this, SLOT( autoStart0() ) ); +- } else { +- autoStart0(); ++ // find all commands to launch the wm in the session ++ QValueList wmStartCommands; ++ if ( !wm.isEmpty() ) { ++ for ( int i = 1; i <= count; i++ ) { ++ QString n = QString::number(i); ++ // special hack for it, both kde3(=native) and kde4 kwin have the same program, ++ // but the command for kde4 kwin starts with the kde4 wrapper ++ if( config->readEntry( QString("program")+n ) == "kwin" ) { ++ QStringList command = config->readListEntry( QString("restartCommand")+n ); ++ if( wmCommands.count() > 1 && wmCommands[ 0 ].endsWith( "kde4" ) ++ && command.count() > 1 && command[ 0 ].endsWith( "kde4" )) { ++ wmStartCommands << command; // kde4 wanted, kde4 found ++ } else if(!( wmCommands.count() > 1 && wmCommands[ 0 ].endsWith( "kde4" )) ++ && !( command.count() > 1 && command[ 0 ].endsWith( "kde4" ))) { ++ wmStartCommands << command; // native wanted, native found ++ } ++ } else if ( wm == config->readEntry( QString("program")+n ) ) { ++ wmStartCommands << config->readListEntry( QString("restartCommand")+n ); ++ } ++ } + } ++ if( wmStartCommands.isEmpty()) // otherwise use the configured default ++ wmStartCommands << wmCommands; ++ launchWM( wmStartCommands ); + } + + /*! +@@ -157,17 +158,53 @@ void KSMServer::startDefaultSession() + "autoStart1Done()", true); + connectDCOPSignal( launcher, launcher, "autoStart2Done()", + "autoStart2Done()", true); +- startApplication( wm ); ++ launchWM( QValueList< QStringList >() << wmCommands ); ++} ++ ++void KSMServer::launchWM( const QValueList< QStringList >& wmStartCommands ) ++{ ++ assert( state == LaunchingWM ); ++ ++ // when we have a window manager, we start it first and give ++ // it some time before launching other processes. Results in a ++ // visually more appealing startup. ++ wmProcess = startApplication( wmStartCommands[ 0 ] ); ++ connect( wmProcess, SIGNAL( processExited( KProcess* )), SLOT( wmProcessChange())); ++ // there can be possibly more wm's (because of forking for multihead), ++ // but in such case care only about the process of the first one ++ for (unsigned int i = 1; i < wmStartCommands.count(); i++) ++ startApplication( wmStartCommands[i] ); + QTimer::singleShot( 4000, this, SLOT( autoStart0() ) ); + } + + + void KSMServer::clientSetProgram( KSMClient* client ) + { +- if ( !wm.isEmpty() && client->program() == wm ) ++ if ( client->program() == wm ) + autoStart0(); + } + ++void KSMServer::wmProcessChange() ++{ ++ if( state != LaunchingWM ) ++ { // don't care about the process when not in the wm-launching state anymore ++ wmProcess = NULL; ++ return; ++ } ++ if( !wmProcess->isRunning()) ++ { // wm failed to launch for some reason, go with kwin instead ++ kdWarning( 1218 ) << "Window manager '" << wm << "' failed to launch" << endl; ++ if( wm == "kwin" ) ++ return; // uhoh, kwin itself failed ++ kdDebug( 1218 ) << "Launching KWin" << endl; ++ wm = "kwin"; ++ wmCommands = ( QStringList() << "kwin" ); ++ // launch it ++ launchWM( QValueList< QStringList >() << wmCommands ); ++ return; ++ } ++} ++ + void KSMServer::autoStart0() + { + if( state != LaunchingWM ) +Index: ksmserver/server.h +=================================================================== +--- ksmserver/server.h.orig ++++ ksmserver/server.h +@@ -30,6 +30,8 @@ Copyright (C) 2000 Matthias Ettrich QCStringList; + class KSMListener; + class KSMConnection; +@@ -98,6 +100,8 @@ public: + KApplication::ShutdownType sdtype, + KApplication::ShutdownMode sdmode ); + ++ void launchWM( const QValueList< QStringList >& wmStartCommands ); ++ + public slots: + void cleanUp(); + +@@ -120,6 +124,7 @@ private slots: + void autoStart2(); + void tryRestoreNext(); + void startupSuspendTimeout(); ++ void wmProcessChange(); + + private: + void handlePendingInteractions(); +@@ -138,13 +143,14 @@ private: + void startProtection(); + void endProtection(); + +- void startApplication( QStringList command, ++ KProcess* startApplication( QStringList command, + const QString& clientMachine = QString::null, + const QString& userId = QString::null ); + void executeCommand( const QStringList& command ); + + bool isWM( const KSMClient* client ) const; + bool isWM( const QString& program ) const; ++ void selectWm( const QString& kdewm ); + bool defaultSession() const; // empty session + void setupXIOErrorHandler(); + +@@ -223,6 +229,8 @@ private: + int lastAppStarted; + QString lastIdStarted; + ++ QStringList wmCommands; ++ KProcess* wmProcess; + QStringList excludeApps; + + WindowMap legacyWindows; +Index: ksmserver/Makefile.am +=================================================================== +--- ksmserver/Makefile.am.orig ++++ ksmserver/Makefile.am +@@ -15,7 +15,7 @@ + # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + # CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +-SUBDIRS = . ++SUBDIRS = . windowmanagers + + INCLUDES= -I$(top_srcdir)/kdmlib $(all_includes) $(DBUS_INCS) + +Index: ksmserver/main.cpp +=================================================================== +--- ksmserver/main.cpp.orig ++++ ksmserver/main.cpp +@@ -203,8 +203,6 @@ extern "C" KDE_EXPORT int kdemain( int a + } + + QCString wm = args->getOption("windowmanager"); +- if ( wm.isEmpty() ) +- wm = "kwin"; + + bool only_local = args->isSet("local"); + #ifndef HAVE__ICETRANSNOLISTEN +Index: ksmserver/server.cpp +=================================================================== +--- ksmserver/server.cpp.orig ++++ ksmserver/server.cpp +@@ -77,6 +77,8 @@ CONNECTION WITH THE SOFTWARE OR THE USE + #include + #include + #include ++#include ++#include + + #include "server.h" + #include "global.h" +@@ -98,11 +100,11 @@ KSMServer* KSMServer::self() + /*! Utility function to execute a command on the local machine. Used + * to restart applications. + */ +-void KSMServer::startApplication( QStringList command, const QString& clientMachine, ++KProcess* KSMServer::startApplication( QStringList command, const QString& clientMachine, + const QString& userId ) + { + if ( command.isEmpty() ) +- return; ++ return NULL; + if ( !userId.isEmpty()) { + struct passwd* pw = getpwuid( getuid()); + if( pw != NULL && userId != QString::fromLocal8Bit( pw->pw_name )) { +@@ -116,12 +118,12 @@ void KSMServer::startApplication( QStrin + command.prepend( clientMachine ); + command.prepend( xonCommand ); // "xon" by default + } +- int n = command.count(); +- QCString app = command[0].latin1(); +- QValueList argList; +- for ( int i=1; i < n; i++) +- argList.append( QCString(command[i].latin1())); +- DCOPRef( launcher ).send( "exec_blind", app, DCOPArg( argList, "QValueList" ) ); ++ KProcess* process = new KProcess( this ); ++ *process << command; ++ // make it auto-delete ++ connect( process, SIGNAL( processExited( KProcess* )), process, SLOT( deleteLater())); ++ process->start(); ++ return process; + } + + /*! Utility function to execute a command on the local machine. Used +@@ -580,10 +582,10 @@ extern "C" int _IceTransNoListen(const c + + KSMServer::KSMServer( const QString& windowManager, bool _only_local ) + : DCOPObject("ksmserver"), sessionGroup( "" ) ++ , wmProcess( NULL ) + { + the_server = this; + clean = false; +- wm = windowManager; + + shutdownType = KApplication::ShutdownTypeNone; + +@@ -595,6 +597,9 @@ KSMServer::KSMServer( const QString& win + config->setGroup("General" ); + clientInteracting = 0; + xonCommand = config->readEntry( "xonCommand", "xon" ); ++ ++ KGlobal::dirs()->addResourceType( "windowmanagers", "share/apps/ksmserver/windowmanagers" ); ++ selectWm( windowManager ); + + connect( &knotifyTimeoutTimer, SIGNAL( timeout()), SLOT( knotifyTimeout())); + connect( &startupSuspendTimeoutTimer, SIGNAL( timeout()), SLOT( startupSuspendTimeout())); +@@ -851,14 +856,12 @@ void KSMServer::storeSession() + config->setGroup( sessionGroup ); + count = 0; + +- if ( !wm.isEmpty() ) { +- // put the wm first +- for ( KSMClient* c = clients.first(); c; c = clients.next() ) +- if ( c->program() == wm ) { +- clients.prepend( clients.take() ); +- break; +- } +- } ++ // put the wm first ++ for ( KSMClient* c = clients.first(); c; c = clients.next() ) ++ if ( c->program() == wm ) { ++ clients.prepend( clients.take() ); ++ break; ++ } + + for ( KSMClient* c = clients.first(); c; c = clients.next() ) { + int restartHint = c->restartStyleHint(); +@@ -909,14 +912,65 @@ bool KSMServer::isWM( const KSMClient* c + + bool KSMServer::isWM( const QString& program ) const + { +- // KWin relies on ksmserver's special treatment in phase1, +- // therefore make sure it's recognized even if ksmserver +- // was initially started with different WM, and kwin replaced +- // it later +- return program == wm || program == "kwin"; ++ return program == wm; + } + + bool KSMServer::defaultSession() const + { + return sessionGroup.isEmpty(); + } ++ ++static bool noDisplay( KDesktopFile& f ) ++{ ++ KConfigGroup gr( &f, "Desktop Entry" ); ++ if (gr.readBoolEntry("NoDisplay", false)) { ++ return true; ++ } ++ if (gr.hasKey("OnlyShowIn")) { ++ if (!gr.readListEntry("OnlyShowIn", ';').contains("KDE")) ++ return true; ++ } ++ if (gr.hasKey("NotShowIn")) { ++ if (gr.readListEntry("NotShowIn", ';').contains("KDE")) ++ return true; ++ } ++ return false; ++} ++ ++// selection logic: ++// - $KDEWM is set - use that ++// - a wm is selected using the kcm - use that ++// - if that fails, just use KWin ++void KSMServer::selectWm( const QString& kdewm ) ++{ ++ wm = "kwin"; // defaults ++ wmCommands = ( QStringList() << "kwin" ); ++ if( !kdewm.isEmpty()) ++ { ++ wmCommands = ( QStringList() << kdewm ); ++ wm = kdewm; ++ return; ++ } ++ KConfigGroup config(KGlobal::config(), "General"); ++ QString cfgwm = config.readEntry( "windowManager", "kwin" ); ++ KDesktopFile file( cfgwm + ".desktop", true, "windowmanagers" ); ++ if( noDisplay( file )) ++ return; ++ if( !file.tryExec()) ++ return; ++ file.setDesktopGroup(); ++ QString testexec = file.readEntry( "X-KDE-WindowManagerTestExec" ); ++ if( !testexec.isEmpty()) ++ { ++ int ret = system( QFile::encodeName( testexec )); ++ if( !WIFEXITED( ret ) || WEXITSTATUS( ret ) != 0 ) ++ return; ++ } ++ QStringList cfgWmCommands = KShell::splitArgs( file.readEntry( "Exec" )); ++ if( cfgWmCommands.isEmpty()) ++ return; ++ QString smname = file.readEntry( "X-KDE-WindowManagerId" ); ++ // ok ++ wm = smname.isEmpty() ? cfgwm : smname; ++ wmCommands = cfgWmCommands; ++} +Index: ksmserver/windowmanagers/openbox.desktop +=================================================================== +--- /dev/null ++++ ksmserver/windowmanagers/openbox.desktop +@@ -0,0 +1,5 @@ ++[Desktop Entry] ++Name=Openbox ++Exec=openbox ++TryExec=openbox ++ +Index: ksmserver/windowmanagers/Makefile.am +=================================================================== +--- /dev/null ++++ ksmserver/windowmanagers/Makefile.am +@@ -0,0 +1,2 @@ ++windowmanager_DATA = compiz-custom.desktop compiz.desktop kwin4.desktop metacity.desktop openbox.desktop ++windowmanagerdir = $(kde_datadir)/ksmserver/windowmanagers +Index: ksmserver/windowmanagers/compiz.desktop +=================================================================== +--- /dev/null ++++ ksmserver/windowmanagers/compiz.desktop +@@ -0,0 +1,4 @@ ++[Desktop Entry] ++Name=Compiz ++Exec=compiz ccp ++TryExec=compiz +Index: ksmserver/windowmanagers/compiz-custom.desktop +=================================================================== +--- /dev/null ++++ ksmserver/windowmanagers/compiz-custom.desktop +@@ -0,0 +1,5 @@ ++[Desktop Entry] ++Name=Compiz custom (create wrapper script 'compiz-kde-launcher' to launch it) ++Exec=compiz-kde-launcher ++TryExec=compiz ++X-KDE-WindowManagerId=compiz +Index: ksmserver/windowmanagers/kwin4.desktop +=================================================================== +--- /dev/null ++++ ksmserver/windowmanagers/kwin4.desktop +@@ -0,0 +1,6 @@ ++[Desktop Entry] ++Name=KWin (KDE4) ++Exec=kde4 /usr/bin/kwin ++TryExec=/usr/bin/kwin ++X-KDE-WindowManagerId=kwin ++ +Index: ksmserver/windowmanagers/metacity.desktop +=================================================================== +--- /dev/null ++++ ksmserver/windowmanagers/metacity.desktop +@@ -0,0 +1,4 @@ ++[Desktop Entry] ++Name=Metacity (GNOME) ++Exec=metacity ++TryExec=metacity +Index: kcontrol/smserver/smserverconfigdlg.ui +=================================================================== +--- kcontrol/smserver/smserverconfigdlg.ui.orig ++++ kcontrol/smserver/smserverconfigdlg.ui +@@ -1,4 +1,4 @@ +- ++ + SMServerConfigDlg + + +@@ -8,8 +8,8 @@ + + 0 + 0 +- 325 +- 366 ++ 334 ++ 476 + + + +@@ -148,6 +148,24 @@ + + + ++ ++ ++ windowManagerGroup ++ ++ ++ Window Manager ++ ++ ++ ++ unnamed ++ ++ ++ ++ windowManagerCombo ++ ++ ++ ++ + + + advancedGroup +@@ -236,6 +254,12 @@ + SMServerConfigDlg + configChanged() + ++ ++ windowManagerCombo ++ activated(int) ++ SMServerConfigDlg ++ configChanged() ++ + + + kdialog.h +Index: kcontrol/smserver/kcmsmserver.cpp +=================================================================== +--- kcontrol/smserver/kcmsmserver.cpp.orig ++++ kcontrol/smserver/kcmsmserver.cpp +@@ -22,6 +22,8 @@ + #include + #include + #include ++#include ++#include + + #include + +@@ -29,6 +31,12 @@ + #include + #include + #include ++#include ++#include ++#include ++#include ++#include ++#include + + #include "kcmsmserver.h" + #include "smserverconfigimpl.h" +@@ -52,6 +60,7 @@ SMServerConfig::SMServerConfig( QWidget + + dialog->show(); + topLayout->add(dialog); ++ KGlobal::dirs()->addResourceType( "windowmanagers", "share/apps/ksmserver/windowmanagers" ); + load(); + + } +@@ -90,6 +99,7 @@ void SMServerConfig::load(bool useDefaul + dialog->logoutRadio->setChecked(true); + break; + } ++ loadWMs(c->readEntry("windowManager", "kwin")); + dialog->excludeLineedit->setText( c->readEntry("excludeApps")); + + delete c; +@@ -116,6 +126,7 @@ void SMServerConfig::save() + dialog->rebootRadio->isChecked() ? + int(KApplication::ShutdownTypeReboot) : + int(KApplication::ShutdownTypeNone)); ++ c->writeEntry("windowManager", currentWM()); + c->writeEntry("excludeApps", dialog->excludeLineedit->text()); + c->sync(); + delete c; +@@ -123,6 +134,12 @@ void SMServerConfig::save() + // update the k menu if necessary + QByteArray data; + kapp->dcopClient()->send( "kicker", "kicker", "configure()", data ); ++ if( oldwm != currentWM()) ++ { // TODO switch it already in the session instead and tell ksmserver ++ KMessageBox::information( this, ++ i18n( "The new window manager will be used when KDE is started the next time." ), ++ i18n( "Window manager change" ), "windowmanagerchange" ); ++ } + } + + void SMServerConfig::defaults() +@@ -130,5 +147,72 @@ void SMServerConfig::defaults() + load( true ); + } + ++static bool noDisplay( KDesktopFile& f ) ++{ ++ KConfigGroup gr( &f, "Desktop Entry" ); ++ if (gr.readBoolEntry("NoDisplay", false)) { ++ return true; ++ } ++ if (gr.hasKey("OnlyShowIn")) { ++ if (!gr.readListEntry("OnlyShowIn", ';').contains("KDE")) ++ return true; ++ } ++ if (gr.hasKey("NotShowIn")) { ++ if (gr.readListEntry("NotShowIn", ';').contains("KDE")) ++ return true; ++ } ++ return false; ++} ++ ++void SMServerConfig::loadWMs( const QString& current ) ++{ ++ QString kwinname = i18n( "KWin (KDE default)" ); ++ dialog->windowManagerCombo->insertItem( kwinname ); ++ dialog->windowManagerCombo->setCurrentItem( 0 ); ++ wms[ kwinname ] = "kwin"; ++ oldwm = "kwin"; ++ QStringList list = KGlobal::dirs()->findAllResources( "windowmanagers", QString(), false, true ); ++ QRegExp reg( ".*/([^/\\.]*)\\.[^/\\.]*" ); ++ for( QStringList::ConstIterator it = list.begin(); ++ it != list.end(); ++ ++it ) ++ { ++ QString wmfile = *it; ++ KDesktopFile file( wmfile ); ++ if( noDisplay( file )) ++ continue; ++ if( !file.tryExec()) ++ continue; ++ file.setDesktopGroup(); ++ QString testexec = file.readEntry( "X-KDE-WindowManagerTestExec" ); ++ if( !testexec.isEmpty()) ++ { ++ int ret = system( QFile::encodeName( testexec )); ++ if( !WIFEXITED( ret ) || WEXITSTATUS( ret ) != 0 ) ++ continue; ++ } ++ QString name = file.readName(); ++ if( name.isEmpty()) ++ continue; ++ if( !reg.exactMatch( wmfile )) ++ continue; ++ QString wm = reg.cap( 1 ); ++ if( wms.values().contains( wm )) ++ continue; ++ wms[ name ] = wm; ++ dialog->windowManagerCombo->insertItem( name ); ++ if( wms[ name ] == current ) // make it selected ++ { ++ dialog->windowManagerCombo->setCurrentItem( dialog->windowManagerCombo->count() - 1 ); ++ oldwm = wm; ++ } ++ } ++} ++ ++QString SMServerConfig::currentWM() const ++{ ++ return wms[ dialog->windowManagerCombo->currentText() ]; ++} ++ + #include "kcmsmserver.moc" + +Index: kcontrol/smserver/kcmsmserver.h +=================================================================== +--- kcontrol/smserver/kcmsmserver.h.orig ++++ kcontrol/smserver/kcmsmserver.h +@@ -40,6 +40,10 @@ public: + + private: + SMServerConfigImpl* dialog; ++ void loadWMs( const QString& current ); ++ QString currentWM() const; ++ QMap< QString, QString > wms; // i18n text -> internal name ++ QString oldwm; // the original value + + }; + diff --git a/opensuse/core/tdebase/short-menus.diff b/opensuse/core/tdebase/short-menus.diff new file mode 100644 index 000000000..784c75ebb --- /dev/null +++ b/opensuse/core/tdebase/short-menus.diff @@ -0,0 +1,209 @@ +Index: kdesktop/Makefile.am +=================================================================== +--- kdesktop/Makefile.am.orig ++++ kdesktop/Makefile.am +@@ -6,6 +6,8 @@ kdesktop_la_LIBADD = libkdesktopsettin + + SUBDIRS = . lock pics patterns programs init kwebdesktop + ++KDE_OPTIONS = nofinal ++ + ####### Files + + bin_PROGRAMS = kcheckrunning +Index: kicker/kicker/ui/service_mnu.cpp +=================================================================== +--- kicker/kicker/ui/service_mnu.cpp.orig ++++ kicker/kicker/ui/service_mnu.cpp +@@ -111,6 +111,11 @@ void PanelServiceMenu::fillMenu(KService + QStringList suppressGenericNames = _root->suppressGenericNames(); + + KServiceGroup::List::ConstIterator it = _list.begin(); ++ KSortableValueList,QCString> slist; ++ KSortableValueList,QCString> glist; ++ QMap specialTitle; ++ QMap categoryIcon; ++ + bool separatorNeeded = false; + for (; it != _list.end(); ++it) + { +@@ -118,19 +123,108 @@ void PanelServiceMenu::fillMenu(KService + + if (e->isType(KST_KServiceGroup)) + { ++ KServiceGroup::Ptr g(static_cast(e)); ++ if ( KickerSettings::reduceMenuDepth() && g->SuSEshortMenu() ){ ++ KServiceGroup::List l = g->entries(true, excludeNoDisplay_ ); ++ if ( l.count() == 1 ) { ++ // the special case, we want to short the menu. ++ // TOFIX? : this works only for one level ++ KServiceGroup::List::ConstIterator _it=l.begin(); ++ KSycocaEntry *_e = *_it; ++ if (_e->isType(KST_KService)) { ++ KService::Ptr s(static_cast(_e)); ++ QString key; ++ if ( g->SuSEgeneralDescription() ) { ++ // we use the application name ++ key = s->name(); ++ if( !s->genericName().isEmpty()) { ++ if (KickerSettings::menuEntryFormat() == KickerSettings::NameAndDescription) ++ key = s->name() + " (" + s->genericName() + ")"; ++ else if (KickerSettings::menuEntryFormat() == KickerSettings::DescriptionAndName) ++ key = s->genericName() + " (" + s->name() + ")"; ++ else if (KickerSettings::menuEntryFormat() == KickerSettings::DescriptionOnly) ++ key = s->genericName(); ++ } ++ } ++ else { ++ // we use the normal menu description ++ key = s->name(); ++ if( !s->genericName().isEmpty()) { ++ if (KickerSettings::menuEntryFormat() == KickerSettings::NameAndDescription) ++ key = s->name() + " (" + g->caption() + ")"; ++ else if (KickerSettings::menuEntryFormat() == KickerSettings::DescriptionAndName) ++ key = g->caption() + " (" + s->name() + ")"; ++ else if (KickerSettings::menuEntryFormat() == KickerSettings::DescriptionOnly) ++ key = g->caption(); ++ } ++ } ++ specialTitle.insert( _e->name(), key ); ++ categoryIcon.insert( _e->name(), g->icon() ); ++ slist.insert( key.local8Bit(), _e ); ++ // and escape from here ++ continue; ++ } ++ } ++ } ++ glist.insert( g->caption().local8Bit(), e ); ++ }else if( e->isType(KST_KService)) { ++ KService::Ptr s(static_cast(e)); ++ QString name = s->name(); ++ if( !s->genericName().isEmpty()) { ++ if (KickerSettings::menuEntryFormat() == KickerSettings::NameAndDescription) ++ name = s->name() + " (" + s->genericName() + ")"; ++ else if (KickerSettings::menuEntryFormat() == KickerSettings::DescriptionAndName) ++ name = s->genericName() + " (" + s->name() + ")"; ++ else if (KickerSettings::menuEntryFormat() == KickerSettings::DescriptionOnly) ++ name = s->genericName(); ++ } ++ slist.insert( name.local8Bit(), e ); ++ } else ++ slist.insert( e->name().local8Bit(), e ); ++ } ++ ++ _list = _root->SuSEsortEntries( slist, glist, excludeNoDisplay_, true ); ++ it = _list.begin(); + ++ for (; it != _list.end(); ++it) { ++ ++ KSycocaEntry * e = *it; ++ ++ if (e->isType(KST_KServiceGroup)) { + KServiceGroup::Ptr g(static_cast(e)); ++ if ( KickerSettings::reduceMenuDepth() && g->SuSEshortMenu() ){ ++ KServiceGroup::List l = g->entries(true, excludeNoDisplay_ ); ++ if ( l.count() == 1 ) { ++ /* // the special case, we want to short the menu. ++ // TOFIX? : this works only for one level ++ KServiceGroup::List::ConstIterator _it=l.begin(); ++ KSycocaEntry *_e = *_it; ++ if (_e->isType(KST_KService)) { ++ KService::Ptr s(static_cast(_e)); ++ if ( g->SuSEgeneralDescription() ) ++ // we use the application name ++ insertMenuItem(s, id++, -1, 0, QString::null, QString::null, g->icon() ); ++ else ++ // we use the normal menu description ++ insertMenuItem(s, id++, -1, 0, QString::null, g->caption(), g->icon() ); ++ // and escape from here */ ++ continue; ++ // } ++ } ++ } ++ // standard sub menu ++ + QString groupCaption = g->caption(); +- ++ + // Avoid adding empty groups. + KServiceGroup::Ptr subMenuRoot = KServiceGroup::group(g->relPath()); +- ++ + int nbChildCount = subMenuRoot->childCount(); + if (nbChildCount == 0 && !g->showEmptyMenu()) +- { ++ { + continue; +- } +- ++ } ++ + QString inlineHeaderName = g->showInlineHeader() ? groupCaption : ""; + // Item names may contain ampersands. To avoid them being converted + // to accelerators, replace them with two ampersands. +@@ -214,7 +308,7 @@ void PanelServiceMenu::fillMenu(KService + } + + KService::Ptr s(static_cast(e)); +- insertMenuItem(s, id++, -1, &suppressGenericNames); ++ insertMenuItem(s, id++, -1, &suppressGenericNames, QString::null, specialTitle[s->name()], categoryIcon[s->name()] ); + } + else if (e->isType(KST_KServiceSeparator)) + { +@@ -296,7 +390,8 @@ void PanelServiceMenu::configChanged() + void PanelServiceMenu::insertMenuItem(KService::Ptr & s, int nId, + int nIndex/*= -1*/, + const QStringList *suppressGenericNames /* = 0 */, +- const QString & aliasname) ++ const QString & aliasname, const QString & label /*=QString::NULL*/, ++ const QString & categoryIcon /*=QString::null*/) + { + QString serviceName = (aliasname.isEmpty() ? s->name() : aliasname).simplifyWhiteSpace(); + QString comment = s->genericName().simplifyWhiteSpace(); +@@ -347,7 +442,15 @@ void PanelServiceMenu::insertMenuItem(KS + // to accelerators, replace them with two ampersands. + serviceName.replace("&", "&&"); + +- int newId = insertItem(KickerLib::menuIconSet(s->icon()), serviceName, nId, nIndex); ++ QString icon = s->icon(); ++ if (icon=="unknown") ++ icon = categoryIcon; ++ ++ int newId; ++ if ( label.isEmpty() ) ++ newId = insertItem(KickerLib::menuIconSet(s->icon()), serviceName, nId, nIndex); ++ else ++ newId = insertItem(KickerLib::menuIconSet(s->icon()), label, nId, nIndex); + entryMap_.insert(newId, static_cast(s)); + } + +Index: kicker/kicker/ui/service_mnu.h +=================================================================== +--- kicker/kicker/ui/service_mnu.h.orig ++++ kicker/kicker/ui/service_mnu.h +@@ -83,7 +83,8 @@ protected slots: + protected: + void insertMenuItem(KService::Ptr & s, int nId, int nIndex = -1, + const QStringList *suppressGenericNames=0, +- const QString &aliasname = QString::null); ++ const QString &aliasname = QString::null, ++ const QString &label = QString::null, const QString &categoryIcon = QString::null); + virtual PanelServiceMenu * newSubMenu(const QString & label, + const QString & relPath, + QWidget * parent, const char * name, +Index: kicker/libkicker/kickerSettings.kcfg +=================================================================== +--- kicker/libkicker/kickerSettings.kcfg.orig ++++ kicker/libkicker/kickerSettings.kcfg +@@ -126,6 +126,11 @@ + true + + ++ ++ ++ false ++ ++ + + + 0 diff --git a/opensuse/core/tdebase/show-konqueror-in-menu.diff b/opensuse/core/tdebase/show-konqueror-in-menu.diff new file mode 100644 index 000000000..a5f4b9ab3 --- /dev/null +++ b/opensuse/core/tdebase/show-konqueror-in-menu.diff @@ -0,0 +1,30 @@ +Index: konqueror/konqfilemgr.desktop +=================================================================== +--- konqueror/konqfilemgr.desktop.orig ++++ konqueror/konqfilemgr.desktop +@@ -4,7 +4,8 @@ Exec=kfmclient openProfile filemanagemen + Icon=kfm + DocPath=konqueror/index.html + +-Name=File Manager ++Name=Konqueror ++GenericName=File Manager + Name[af]=Lêer Bestuurder + Name[ar]=مدبّر الملÙات + Name[az]=Fayl Ä°darÉ™cisi +Index: konqueror/Makefile.am +=================================================================== +--- konqueror/Makefile.am.orig ++++ konqueror/Makefile.am +@@ -69,10 +69,7 @@ messages: rc.cpp + $(XGETTEXT) -kaliasLocal rc.cpp *.h *.cc *view/*h *view/*cc kedit*/*.h kedit*/*.cpp about/*.h about/*.cc remoteencodingplugin/*.cpp remoteencodingplugin/*.h shellcmdplugin/*.cpp -o `find sidebar -name "*.cpp"` `find sidebar -name "*.h"` -o $(podir)/konqueror.pot + + xdg_apps_DATA = kfmclient.desktop kfmclient_dir.desktop kfmclient_html.desktop \ +- kfmclient_war.desktop konqbrowser.desktop konquerorsu.desktop Home.desktop +- +-konq_data4_DATA = konqfilemgr.desktop +-konq_data4dir = $(kde_appsdir)/.hidden ++ kfmclient_war.desktop konqbrowser.desktop konquerorsu.desktop Home.desktop konqfilemgr.desktop + + kde_kcfg_DATA = konqueror.kcfg + diff --git a/opensuse/core/tdebase/simplify-randr-settings.diff b/opensuse/core/tdebase/simplify-randr-settings.diff new file mode 100644 index 000000000..93add22fd --- /dev/null +++ b/opensuse/core/tdebase/simplify-randr-settings.diff @@ -0,0 +1,91 @@ +--- kcontrol/randr/krandrmodule.cpp ++++ kcontrol/randr/krandrmodule.cpp +@@ -114,23 +114,15 @@ KRandRModule::KRandRModule(QWidget *parent, const char *name, const QStringList& + m_rotationGroup->setRadioButtonExclusive(true); + QWhatsThis::add(m_rotationGroup, i18n("The options in this section allow you to change the rotation of your screen.")); + +- m_applyOnStartup = new QCheckBox(i18n("Apply settings on KDE startup"), this); +- topLayout->addWidget(m_applyOnStartup); +- QWhatsThis::add(m_applyOnStartup, i18n("If this option is enabled the size and orientation settings will be used when KDE starts.")); +- connect(m_applyOnStartup, SIGNAL(clicked()), SLOT(setChanged())); +- +- QHBox* syncBox = new QHBox(this); +- syncBox->layout()->addItem(new QSpacerItem(20, 1, QSizePolicy::Maximum)); +- m_syncTrayApp = new QCheckBox(i18n("Allow tray application to change startup settings"), syncBox); +- topLayout->addWidget(syncBox); +- QWhatsThis::add(m_syncTrayApp, i18n("If this option is enabled, options set by the system tray applet will be saved and loaded when KDE starts instead of being temporary.")); +- connect(m_syncTrayApp, SIGNAL(clicked()), SLOT(setChanged())); ++ m_applyOnlySession = new QCheckBox(i18n("Change settings only for current session"), this); ++ topLayout->addWidget(m_applyOnlySession); ++ QWhatsThis::add(m_applyOnlySession, i18n("If this option is enabled the size and orientation settings will be only changed for the current session.")); ++ connect(m_applyOnlySession, SIGNAL(clicked()), SLOT(setChanged())); + + topLayout->addStretch(1); + + // just set the "apply settings on startup" box + load(); +- m_syncTrayApp->setEnabled(m_applyOnStartup->isChecked()); + + slotScreenChanged(QApplication::desktop()->primaryScreen()); + +@@ -272,8 +264,7 @@ void KRandRModule::load( bool useDefaults ) + m_oldApply = loadDisplay(config, false); + m_oldSyncTrayApp = syncTrayApp(config); + +- m_applyOnStartup->setChecked(m_oldApply); +- m_syncTrayApp->setChecked(m_oldSyncTrayApp); ++ m_applyOnlySession->setChecked(!m_oldApply); + + emit changed( useDefaults ); + } +@@ -291,8 +282,7 @@ void KRandRModule::save() + + apply(); + +- m_oldApply = m_applyOnStartup->isChecked(); +- m_oldSyncTrayApp = m_syncTrayApp->isChecked(); ++ m_oldApply = !m_applyOnlySession->isChecked(); + KConfig config("kcmrandrrc"); + saveDisplay(config, m_oldApply, m_oldSyncTrayApp); + +@@ -308,8 +298,7 @@ void KRandRModule::setChanged() + #endif + + +- bool isChanged = (m_oldApply != m_applyOnStartup->isChecked()) || (m_oldSyncTrayApp != m_syncTrayApp->isChecked()); +- m_syncTrayApp->setEnabled(m_applyOnStartup->isChecked()); ++ bool isChanged = (m_oldApply != !m_applyOnlySession->isChecked()); + + if (!isChanged) + for (int screenIndex = 0; screenIndex < numScreens(); screenIndex++) { +--- kcontrol/randr/krandrmodule.h ++++ kcontrol/randr/krandrmodule.h +@@ -79,8 +79,7 @@ protected: + KComboBox* m_sizeCombo; + QButtonGroup* m_rotationGroup; + KComboBox* m_refreshRates; +- QCheckBox* m_applyOnStartup; +- QCheckBox* m_syncTrayApp; ++ QCheckBox* m_applyOnlySession; + bool m_oldApply; + bool m_oldSyncTrayApp; + +--- kcontrol/randr/randrdisplay.cpp ++++ kcontrol/randr/randrdisplay.cpp +@@ -241,7 +241,7 @@ bool RandRDisplay::loadDisplay(KConfig& config, bool loadScreens) + bool RandRDisplay::applyOnStartup(KConfig& config) + { + config.setGroup("Display"); +- return config.readBoolEntry("ApplyOnStartup", false); ++ return config.readBoolEntry("ApplyOnStartup", true); + } + + bool RandRDisplay::syncTrayApp(KConfig& config) +@@ -254,7 +254,6 @@ void RandRDisplay::saveDisplay(KConfig& config, bool applyOnStartup, bool syncTr + { + config.setGroup("Display"); + config.writeEntry("ApplyOnStartup", applyOnStartup); +- config.writeEntry("SyncTrayApp", syncTrayApp); + + #ifdef HAS_RANDR_1_2 + if (RandR::has_1_2) diff --git a/opensuse/core/tdebase/sourceforge.desktop b/opensuse/core/tdebase/sourceforge.desktop new file mode 100644 index 000000000..4a218ad84 --- /dev/null +++ b/opensuse/core/tdebase/sourceforge.desktop @@ -0,0 +1,7 @@ +[Desktop Entry] +Encoding=UTF-8 +Type=Service +Name=SourceForge Tracker +ServiceTypes=SearchProvider +Keys=sft +Query=https://sourceforge.net/support/tracker.php?aid=\{@} diff --git a/opensuse/core/tdebase/spellcheck-default-utf8.diff b/opensuse/core/tdebase/spellcheck-default-utf8.diff new file mode 100644 index 000000000..57d49fab6 --- /dev/null +++ b/opensuse/core/tdebase/spellcheck-default-utf8.diff @@ -0,0 +1,13 @@ +Index: kcontrol/spellchecking/spellchecking.cpp +=================================================================== +--- kcontrol/spellchecking/spellchecking.cpp.orig ++++ kcontrol/spellchecking/spellchecking.cpp +@@ -67,7 +67,7 @@ void KSpellCheckingConfig::defaults() + spellConfig->setRunTogether(0); + spellConfig->setDictionary(""); + spellConfig->setDictFromList(FALSE); +- spellConfig->setEncoding (KS_E_ASCII); ++ spellConfig->setEncoding (KS_E_UTF8); + spellConfig->setClient (KS_CLIENT_ISPELL); + } + diff --git a/opensuse/core/tdebase/startkde.diff b/opensuse/core/tdebase/startkde.diff new file mode 100644 index 000000000..c7cd061ce --- /dev/null +++ b/opensuse/core/tdebase/startkde.diff @@ -0,0 +1,80 @@ +Index: startkde +=================================================================== +--- startkde.orig ++++ startkde +@@ -3,6 +3,9 @@ + # DEFAULT KDE STARTUP SCRIPT ( KDE-3.5.10 ) + # + ++PATH=/opt/kde3/bin:${PATH/:\/opt\/kde3\/bin} ++export PATH ++test -x /usr/bin/xrandr && /usr/bin/xrandr --auto + # When the X server dies we get a HUP signal from xinit. We must ignore it + # because we still need to do some cleanup. + trap 'echo GOT SIGHUP' HUP +@@ -19,7 +22,7 @@ fi + # people's heads. We use colours from the standard KDE palette for those with + # palettised displays. + if test -z "$XDM_MANAGED" || echo "$XDM_MANAGED" | grep ",auto" > /dev/null; then +- xsetroot -solid "#000000" ++ : # xsetroot -solid "#C0C0C0" + fi + + # we have to unset this for Darwin since it will screw up KDE's dynamic-loading +@@ -62,7 +65,7 @@ cat >$kdehome/share/config/startupconfig + kcminputrc Mouse cursorTheme '' + kcminputrc Mouse cursorSize '' + kpersonalizerrc General FirstLogin true +-ksplashrc KSplash Theme Default ++ksplashrc KSplash Theme ksplashx-suse + kcmrandrrc Display ApplyOnStartup false + kcmrandrrc [Screen0] + kcmrandrrc [Screen1] +@@ -160,6 +163,16 @@ Xft.dpi: 96 + EOF + fi + ++case "$ksplashrc_ksplash_theme" in ++ ksplashx-*) ++ if test -x /opt/kde3/bin/ksplashx; then ++ /opt/kde3/bin/ksplashx ${ksplashrc_ksplash_theme#ksplashx-} ++ else ++ ksplashrc_ksplash_theme=Default ++ fi ++ ;; ++esac ++ + # Source scripts found in /env/*.sh and /env/*.sh + # (where is $KDEHOME or ~/.kde, and is where KDE is installed) + # +@@ -286,7 +299,7 @@ dcopserver_shutdown + echo 'startkde: Starting up...' 1>&2 + + # run KPersonalizer before the session, if this is the first login +-if test "$kpersonalizerrc_general_firstlogin" = "true"; then ++if false && test "$kpersonalizerrc_general_firstlogin" = "true"; then + # start only dcopserver, don't start whole kdeinit (takes too long) + echo 'startkde: Running kpersonalizer...' 1>&2 + dcopserver +@@ -305,6 +318,8 @@ if test -z "$dl"; then + case "$ksplashrc_ksplash_theme" in + None) + ;; # nothing ++ ksplashx-*) ++ ;; # started earlier + Simple) + if test "$kpersonalizerrc_general_firstlogin" = "true"; then + ksplashsimple +@@ -384,9 +399,11 @@ done + echo 'startkde: Shutting down...' 1>&2 + + # Clean up ++if test -e /opt/kde3/bin/artsshell; then ++ artsshell -q terminate ++fi + kdeinit_shutdown + dcopserver_shutdown --wait +-artsshell -q terminate + # KDE4 support + kde4 kdeinit4_shutdown 2>/dev/null + diff --git a/opensuse/core/tdebase/startkde.suse.sh b/opensuse/core/tdebase/startkde.suse.sh new file mode 100644 index 000000000..28c200695 --- /dev/null +++ b/opensuse/core/tdebase/startkde.suse.sh @@ -0,0 +1,140 @@ + +# +# do we run in a prelinked system ? +# +if test -f /etc/sysconfig/prelink; then +. /etc/sysconfig/prelink + if test "$USE_PRELINK" = "yes" ; then + KDE_IS_PRELINKED=1 + export KDE_IS_PRELINKED + else + unset KDE_IS_PRELINKED + fi +fi + +# +# Do we have a special Gtk theming for our Qt widget theme ? +# +if [ ! -e $HOME/.no-qtrc-to-gtkrc-mapping ]; then + + SUSE_VERSION="`cat /etc/SuSE-release | sed -n 's/VERSION = //p'`" + + # Defaults for SuSE 9.0 + GTK2_SYSCONFDIR=/etc/opt/gnome + GTK2_DATADIR=/opt/gnome/share/themes/ + + # use general gtk-qt-engine + if [ -e "$GTK2_DATADIR/Qt/gtk-2.0/gtkrc" ] ; then + GTK2_THEME_RC="$GTK2_DATADIR/Qt/gtk-2.0/gtkrc" + fi + + # GTK2 + # NOTE: ~/.gtkrc-2.0-kde is added later (in latest KDE only) + if [ "$GTK2_RC_FILES" ]; then + export GTK2_RC_FILES="$GTK2_RC_FILES:$GTK2_THEME_RC:$HOME/.gtkrc-2.0-qtengine:$HOME/.gtkrc-2.0" + else + export GTK2_RC_FILES="$GTK2_SYSCONFDIR/gtk-2.0/gtkrc:$GTK2_THEME_RC:$HOME/.gtkrc-2.0-qtengine:$HOME/.gtkrc-2.0" + fi + +fi + +# +# use optimized libs, if your CPU has the needed support +# (kdemultimedia package has some SSE optimized libs) +[ -z "$LD_HWCAP_MASK" ] && export LD_HWCAP_MASK=0x20000000 + +if [ -r /etc/sysconfig/windowmanager ]; then + # Do the user want the SuSE theme ? + source /etc/sysconfig/windowmanager + + # Should we really enable FAM support for KDE ? + export USE_FAM="$KDE_USE_FAM" + + # Disable IPv6 ? + if [ "$KDE_USE_IPV6" = "no" ]; then + export KDE_NO_IPV6=1 + fi + # Disable IDN ? + if [ "$KDE_USE_IDN" = "no" ]; then + export KDE_NO_IDN=1 + fi + +else + if [ -r /etc/rc.config ]; then + # Do the user want the SuSE theme ? + INSTALL_DESKTOP_EXTENSIONS=`bash -c "source /etc/rc.config && echo \\$INSTALL_DESKTOP_EXTENSIONS"` + + # Should we really enable FAM support for KDE ? + USE_FAM=`bash -c "source /etc/rc.config && echo \\$KDE_USE_FAM"` + export USE_FAM + fi +fi + +# +# create SuSE defaults +# +if [ "$INSTALL_DESKTOP_EXTENSIONS" == "yes" ]; then + if [ -x /opt/kde3/bin/kde-open ]; then + export DESKTOP_LAUNCH=kde-open + fi + if [ "$USER" == "root" ]; then + if [ ! -e "$HOME/.skel/kdebase3" -a ! -e "$KDEHOME/share/config/kdeglobals" ]; then + if [ -e "/opt/kde3/bin/startkde.theme.unitedlinux" ]; then + . /opt/kde3/bin/startkde.theme.unitedlinux + copy_default_root_ul "$KDEHOME" + create_default_desktop_ul "$HOME/Desktop/" + fi + + if [ -e "/opt/kde3/bin/startkde.theme" ]; then + . /opt/kde3/bin/startkde.theme + fi + copy_default_root "$KDEHOME" + create_default_desktop "$HOME/Desktop/" + mkdir -p $HOME/.skel/ + touch $HOME/.skel/kdebase3 $HOME/.skel/kdebase3.91 + fi + else + if [ ! -e "$HOME/.skel/kdebase3" -a ! -e "$KDEHOME/share/config/kdeglobals" ]; then + if [ -e "/opt/kde3/bin/startkde.theme.unitedlinux" ]; then + . /opt/kde3/bin/startkde.theme.unitedlinux + copy_default_user_ul "$KDEHOME" + create_default_desktop_ul "$HOME/Desktop/" + fi + + if [ -e "/opt/kde3/bin/startkde.theme" ]; then + . /opt/kde3/bin/startkde.theme + fi + copy_default_user "$KDEHOME" + create_default_desktop "$HOME/Desktop/" + mkdir -p $HOME/.skel/ + touch $HOME/.skel/kdebase3 $HOME/.skel/kdebase3.91 + fi + fi + if [ -e /opt/kde3/bin/startkde.update93 -a ! -e "$HOME/.skel/kdebase3.93" ]; then + . /opt/kde3/bin/startkde.update93 + mkdir -p $HOME/.skel/ + touch $HOME/.skel/kdebase3.93 + fi + for i in /opt/kde3/share/UnitedLinux/addon-scripts/*; do + [ -r "$i" ] && \ + . "$i" + done +fi + +# check if any rpms have been (un)installed since ksycoca +# had been built, if yes, trigger ksycoca rebuild immediatelly +# instead of delayed + +kdehome=$HOME/.kde +test -n "$KDEHOME" && kdehome=`echo "$KDEHOME"|sed "s,^~/,$HOME/,"` +host=$HOSTNAME +test -n "$XAUTHLOCALHOSTNAME" && host=$XAUTHLOCALHOSTNAME +ksycoca="$kdehome/cache-$host/ksycoca" + +if test -f "$ksycoca"; then + if test -f /var/lib/rpm/Packages; then + if test /var/lib/rpm/Packages -nt "$ksycoca"; then + rm -f "$ksycoca" + fi + fi +fi diff --git a/opensuse/core/tdebase/stopkde.suse.sh b/opensuse/core/tdebase/stopkde.suse.sh new file mode 100644 index 000000000..54f7de3a3 --- /dev/null +++ b/opensuse/core/tdebase/stopkde.suse.sh @@ -0,0 +1,13 @@ +#! /bin/sh + +if test -n "$SSH_AGENT_PID"; then + ssh-agent -k +fi + +if test -n "$GPG_AGENT_INFO"; then + pid=`echo "$GPG_AGENT_INFO" | cut -d: -f2` + if test -n "$pid"; then + kill $pid + fi +fi + diff --git a/opensuse/core/tdebase/suse_default_move.diff b/opensuse/core/tdebase/suse_default_move.diff new file mode 100644 index 000000000..1eb938e20 --- /dev/null +++ b/opensuse/core/tdebase/suse_default_move.diff @@ -0,0 +1,83 @@ +Index: empty/Makefile.am +=================================================================== +--- /dev/null ++++ empty/Makefile.am +@@ -0,0 +1,17 @@ ++# set the include path for X, qt and KDE ++INCLUDES= $(all_includes) ++ ++# you can add here more. This one gets installed ++bin_PROGRAMS = default_desktop_aligning ++ ++# Which sources should be compiled ++default_desktop_aligning_SOURCES = moving.cpp KDesktopIface.stub ++ ++# the library search path. ++default_desktop_aligning_LDFLAGS = $(all_libraries) $(KDE_RPATH) ++ ++# the libraries to link against. Be aware of the order. First the libraries, ++# that depend on the following ones. ++default_desktop_aligning_LDADD = $(LIB_KDEUI) ++ ++KDesktopIface_DIR = $(srcdir)/../kdesktop +Index: empty/moving.cpp +=================================================================== +--- /dev/null ++++ empty/moving.cpp +@@ -0,0 +1,56 @@ ++#include ++#include ++#include ++#include "KDesktopIface_stub.h" ++#include ++#include ++#include ++#include ++#include ++#include ++ ++int main(int argc, char **argv) ++{ ++ KCmdLineArgs::init(argc, argv, "default_desktop_moving", ++ "move the icons on the correct place on initial boot", ++ "0.1"); ++ KApplication app; ++ QStringList icons = KGlobal::dirs()->findAllResources("data", "default_desktop/*.desktop"); ++ char buffer[PATH_MAX]; ++ strcpy(buffer, "/tmp/suse_desktop_XXXXXX"); ++ mkdtemp(buffer); ++ QString tname = QString::fromLatin1(buffer); ++ ++ icons.sort(); ++ ++ KDesktopIface_stub stub("kdesktop", "KDesktopIface"); ++ KConfig c( "kdesktoprc" ); ++ c.setGroup( "General" ); ++ ++ if ( c.readBoolEntry( "CopyDesktopLinks", true ) ) ++ for (QStringList::ConstIterator it = icons.begin(); it != icons.end(); ++it) ++ { ++ QString name = *it; ++ QPoint t; ++ bool col = (name.mid(name.findRev('/') + 1, 4) == "COL_"); ++ name = name.mid(name.findRev('/') + 5, name.length()); ++ int index = name.find('_'); ++ int num = name.left(index).toInt(); ++ ++ if (col) ++ t = stub.findPlaceForIcon(num, -1); ++ else ++ t = stub.findPlaceForIcon(-1, num); ++ QFileInfo f(*it); ++ ++ name = name.mid(name.find('_', index + 1) + 1, name.length()); ++ ++ if ( 0 == system(QString("mv '%1' '%1'").arg(*it).arg(tname + "/" + name).local8Bit()) ) ++ stub.addIcon( tname + "/" + name, t.x(), t.y()); ++ ++ sleep(2); // only need to make sure kdesktop goes back in event loop ++ } ++ stub.lineupIcons(); ++ system(QString("rm -f %1/moving_desktop.desktop").arg(KGlobalSettings::autostartPath()).latin1()); ++ system(QString("rm -rf '%1'").arg(tname).local8Bit()); ++} diff --git a/opensuse/core/tdebase/suspend-kpowersave.diff b/opensuse/core/tdebase/suspend-kpowersave.diff new file mode 100644 index 000000000..13aaa131c --- /dev/null +++ b/opensuse/core/tdebase/suspend-kpowersave.diff @@ -0,0 +1,178 @@ +Subject: Use KPowersave for suspend if available +From: Lubos Lunak +Bug: bnc#326848 +Patch-upstream: No + +--- kicker/kicker/ui/k_new_mnu.cpp.sav 2008-11-20 10:12:42.000000000 +0100 ++++ kicker/kicker/ui/k_new_mnu.cpp 2008-11-20 13:49:20.000000000 +0100 +@@ -3691,6 +3691,9 @@ int KMenu::max_items(int category) const + + #ifdef KDELIBS_SUSE + #include ++ ++#include ++#include + #endif + + void KMenu::insertSuspendOption( int &nId, int &index ) +@@ -3699,6 +3702,14 @@ void KMenu::insertSuspendOption( int &nI + int supported = -1; + bool suspend_ram, suspend_disk, standby; + ++ DCOPRef kpowersave( "kpowersave", "KPowersaveIface" ); ++ DCOPReply reply = kpowersave.call( "allowed_sleepingStates" ); ++ if( reply.isValid()) { ++ QStringList supported = reply; ++ suspend_ram = supported.contains( "suspendToRAM" ); ++ suspend_disk = supported.contains( "suspendToDisk" ); ++ standby = supported.contains( "standBy" ); ++ } else { + liblazy_hal_get_property_bool(HAL_UDI_COMPUTER, "power_management.can_suspend", &supported); + if (supported == 1) + suspend_ram = true; +@@ -3721,6 +3732,7 @@ void KMenu::insertSuspendOption( int &nI + suspend_ram = false; + if (liblazy_hal_is_caller_privileged("org.freedesktop.hal.power-management.standby") != 1) + standby = false; ++ } + + if ( ! ( standby + suspend_ram + suspend_disk ) ) + return; +@@ -3745,6 +3757,25 @@ void KMenu::slotSuspend(int id) + { + #ifdef KDELIBS_SUSE + int error = 0; ++ ++ DCOPRef kpowersave( "kpowersave", "KPowersaveIface" ); ++ DCOPReply reply = kpowersave.call( "allowed_sleepingStates" ); ++ if( reply.isValid()) { ++ bool ok; ++ extern Time qt_x_time; ++ XUngrabKeyboard( qt_xdisplay(), qt_x_time ); ++ XUngrabPointer( qt_xdisplay(), qt_x_time ); ++ XSync( qt_xdisplay(), False ); ++ if( id == 1 ) ++ ok = kpowersave.call( "do_suspendToDisk" ); ++ else if( id == 2 ) ++ ok = kpowersave.call( "do_suspendToRAM" ); ++ else if( id == 3 ) ++ ok = kpowersave.call( "do_standBy" ); ++ else ++ return; ++ error = ok ? 0 : 1; ++ } else { + int wake = 0; + DBusMessage *reply = 0; + +@@ -3773,6 +3804,8 @@ void KMenu::slotSuspend(int id) + DBUS_TYPE_INVALID); + else + return; ++ } ++ + if (error) + #endif + KMessageBox::error(this, i18n("Suspend failed")); +--- ksmserver/shutdowndlg.cpp.sav 2008-11-20 10:12:41.000000000 +0100 ++++ ksmserver/shutdowndlg.cpp 2008-11-20 13:34:19.000000000 +0100 +@@ -40,6 +40,7 @@ Copyright (C) 2000 Matthias Ettrich + #include + #include ++#include + + #include + #include +@@ -264,6 +265,14 @@ KSMShutdownDlg::KSMShutdownDlg( QWidget* + } else + QToolTip::add( btnReboot, i18n( "

    Restart Computer

    Log out of the current session and restart the computer

    " ) ); + ++ DCOPRef kpowersave( "kpowersave", "KPowersaveIface" ); ++ DCOPReply reply = kpowersave.call( "allowed_sleepingStates" ); ++ if( reply.isValid()) { ++ QStringList supported = reply; ++ suspend_ram = supported.contains( "suspendToRAM" ); ++ suspend_disk = supported.contains( "suspendToDisk" ); ++ standby = supported.contains( "standBy" ); ++ } else { + int supported = -1; + liblazy_hal_get_property_bool(HAL_UDI_COMPUTER, "power_management.can_suspend", &supported); + if (supported == 1) +@@ -287,6 +296,7 @@ KSMShutdownDlg::KSMShutdownDlg( QWidget* + suspend_ram = false; + if (liblazy_hal_is_caller_privileged("org.freedesktop.hal.power-management.standby") != 1) + standby = false; ++ } + + int sum = standby + suspend_ram + suspend_disk; + if ( sum ) { +@@ -325,6 +335,24 @@ KSMShutdownDlg::KSMShutdownDlg( QWidget* + void KSMShutdownDlg::slotSuspend() + { + int error = 0; ++ DCOPRef kpowersave( "kpowersave", "KPowersaveIface" ); ++ DCOPReply reply = kpowersave.call( "allowed_sleepingStates" ); ++ if( reply.isValid()) { ++ bool ok; ++ // so that screen locking can take place ++ extern Time qt_x_time; ++ XUngrabKeyboard( qt_xdisplay(), qt_x_time ); ++ XUngrabPointer( qt_xdisplay(), qt_x_time ); ++ XSync( qt_xdisplay(), False ); ++ if( suspend_disk ) ++ ok = kpowersave.call( "do_suspendToDisk" ); ++ else if( suspend_ram ) ++ ok = kpowersave.call( "do_suspendToRAM" ); ++ else ++ ok = kpowersave.call( "do_standBy" ); ++ error = ok ? 0 : 1; ++ } else { ++ + int wake = 0; + DBusMessage *reply; + +@@ -351,6 +379,7 @@ void KSMShutdownDlg::slotSuspend() + "Standby", + &reply, + DBUS_TYPE_INVALID); ++ } + + if (error) + KMessageBox::error(this, i18n("Suspend failed")); +@@ -362,6 +391,27 @@ void KSMShutdownDlg::slotSuspend() + void KSMShutdownDlg::slotSuspend(int id) + { + int error = 0; ++ ++ DCOPRef kpowersave( "kpowersave", "KPowersaveIface" ); ++ DCOPReply reply = kpowersave.call( "allowed_sleepingStates" ); ++ if( reply.isValid()) { ++ bool ok; ++ extern Time qt_x_time; ++ XUngrabKeyboard( qt_xdisplay(), qt_x_time ); ++ XUngrabPointer( qt_xdisplay(), qt_x_time ); ++ XSync( qt_xdisplay(), False ); ++ if( suspend_disk && id == 1 ) ++ ok = kpowersave.call( "do_suspendToDisk" ); ++ else if( suspend_ram && id == 2 ) ++ ok = kpowersave.call( "do_suspendToRAM" ); ++ else if( standby && id == 3 ) ++ ok = kpowersave.call( "do_standBy" ); ++ else ++ return; ++ error = ok ? 0 : 1; ++ } else { ++ ++ + int wake = 0; + DBusMessage *reply; + +@@ -390,6 +440,8 @@ void KSMShutdownDlg::slotSuspend(int id) + DBUS_TYPE_INVALID); + else + return; ++ } ++ + if (error) + KMessageBox::error(this, i18n("Suspend failed")); + diff --git a/opensuse/core/tdebase/suspend-unmount.diff b/opensuse/core/tdebase/suspend-unmount.diff new file mode 100644 index 000000000..dabdd1271 --- /dev/null +++ b/opensuse/core/tdebase/suspend-unmount.diff @@ -0,0 +1,179 @@ +Index: kioslave/media/libmediacommon/medium.cpp +=================================================================== +--- kioslave/media/libmediacommon/medium.cpp.orig ++++ kioslave/media/libmediacommon/medium.cpp +@@ -42,6 +42,7 @@ Medium::Medium(const QString &id, const + loadUserLabel(); + + m_halmounted = false; ++ m_isHotplug = false; + } + + Medium::Medium() +@@ -59,8 +60,9 @@ Medium::Medium() + m_properties+= QString::null; /* BASE_URL */ + m_properties+= QString::null; /* MIME_TYPE */ + m_properties+= QString::null; /* ICON_NAME */ +- ++ + m_halmounted = false; ++ m_isHotplug = false; + } + + const Medium Medium::create(const QStringList &properties) +Index: kioslave/media/libmediacommon/medium.h +=================================================================== +--- kioslave/media/libmediacommon/medium.h.orig ++++ kioslave/media/libmediacommon/medium.h +@@ -82,18 +82,22 @@ public: + void setHalMounted(bool flag) const { m_halmounted = flag; } + bool halMounted() const { return m_halmounted; } + ++ void setIsHotplug( bool state ) { m_isHotplug = state; } ++ bool isHotplug() const { return m_isHotplug; } ++ + private: + Medium(); + void loadUserLabel(); + + QStringList m_properties; + mutable bool m_halmounted; +- ++ bool m_isHotplug; ++ + friend class QValueListNode; + }; + + namespace MediaManagerUtils { +- static inline QMap splitOptions(const QStringList & options) ++ static inline QMap splitOptions(const QStringList & options) + { + QMap valids; + +Index: kioslave/media/mediamanager/mediamanager.cpp +=================================================================== +--- kioslave/media/mediamanager/mediamanager.cpp.orig ++++ kioslave/media/mediamanager/mediamanager.cpp +@@ -330,6 +330,54 @@ void MediaManager::slotMediumChanged(con + emit mediumChanged(name); + } + ++QString MediaManager::unmountAllSuspend() ++{ ++ QPtrList list = m_mediaList.list(); ++ ++ QPtrList::const_iterator it = list.begin(); ++ QPtrList::const_iterator end = list.end(); ++ ++ QString result; ++ ++ for (; it!=end; ++it) ++ { ++ if ( (*it)->isMounted() && (*it)->isHotplug() ) ++ { ++ QString tmp = unmount( (*it)->id() ); ++ if ( !tmp.isEmpty() ) // umount failed ++ result = tmp; ++ else ++ m_suspendResumeMountList.append( (*it)->id() ); ++ } ++ } ++ ++ // return last error ++ return result; ++} ++ ++QString MediaManager::remountAllResume() ++{ ++ QString result; ++ ++ for (QStringList::const_iterator it = m_suspendResumeMountList.begin(); ++ it != m_suspendResumeMountList.end(); ++ ++it) ++ { ++ const Medium *m = m_mediaList.findById(*it); ++ ++ if ( m && m->needMounting() ) ++ { ++ QString tmp = mount( *it ); ++ if ( !tmp.isEmpty() ) // mount failed ++ result = tmp; ++ } ++ } ++ ++ m_suspendResumeMountList.clear(); ++ ++ // return last error ++ return result; ++} + + extern "C" { + KDE_EXPORT KDEDModule *create_mediamanager(const QCString &obj) +Index: kioslave/media/mediamanager/mediamanager.h +=================================================================== +--- kioslave/media/mediamanager/mediamanager.h.orig ++++ kioslave/media/mediamanager/mediamanager.h +@@ -58,6 +58,20 @@ k_dcop: + bool removableUnplug(const QString &devNode); + bool removableCamera(const QString &devNode); + ++ /** ++ * Unmount manually all partitions when going to suspend ++ * ++ * @return last error if any ++ */ ++ QString unmountAllSuspend(); ++ ++ /** ++ * Remount previously unmounted partitions in unmountAllSuspend() ++ * ++ * @return last error if any ++ */ ++ QString remountAllResume(); ++ + k_dcop_signals: + void mediumAdded(const QString &name, bool allowNotification); + void mediumRemoved(const QString &name, bool allowNotification); +@@ -70,7 +84,7 @@ k_dcop_signals: + + private slots: + void loadBackends(); +- ++ + void slotMediumAdded(const QString &id, const QString &name, + bool allowNotification); + void slotMediumRemoved(const QString &id, const QString &name, +@@ -85,6 +99,7 @@ private: + HALBackend *m_halbackend; + MediaDirNotify m_dirNotify; + FstabBackend *m_fstabbackend; ++ QStringList m_suspendResumeMountList; + }; + + #endif +Index: kioslave/media/mediamanager/halbackend.cpp +=================================================================== +--- kioslave/media/mediamanager/halbackend.cpp.orig ++++ kioslave/media/mediamanager/halbackend.cpp +@@ -459,6 +459,8 @@ void HALBackend::setVolumeProperties(Med + libhal_volume_get_fstype(halVolume), /* Filesystem type */ + libhal_volume_is_mounted(halVolume) ); /* Mounted ? */ + ++ medium->setIsHotplug( libhal_drive_is_hotpluggable(halDrive) ); ++ + char* name = libhal_volume_policy_compute_display_name(halDrive, halVolume, m_halStoragePolicy); + QString volume_name = QString::fromUtf8(name); + QString media_name = volume_name; +Index: kioslave/media/mediamanager/halbackend.h +=================================================================== +--- kioslave/media/mediamanager/halbackend.h.orig ++++ kioslave/media/mediamanager/halbackend.h +@@ -86,6 +86,8 @@ public: + QString mount(const Medium *medium); + QString unmount(const QString &id); + ++ static bool isHotplug( const QString & id ); ++ + private: + /** + * Append a device in the media list. This function will check if the device diff --git a/opensuse/core/tdebase/system-folder_man.diff b/opensuse/core/tdebase/system-folder_man.diff new file mode 100644 index 000000000..98fd9e08f --- /dev/null +++ b/opensuse/core/tdebase/system-folder_man.diff @@ -0,0 +1,13 @@ +Index: kioslave/system/entries/documents.desktop +=================================================================== +--- kioslave/system/entries/documents.desktop.orig ++++ kioslave/system/entries/documents.desktop +@@ -1,7 +1,7 @@ + [Desktop Entry] + Type=Link + Path[$e]=$( kio_system_documenthelper ) +-Icon=folder_important ++Icon=folder_man + Name=Documents Folder + Name[af]=Dokument Gids + Name[ar]=مستنداتي diff --git a/opensuse/core/tdebase/systray_order.diff b/opensuse/core/tdebase/systray_order.diff new file mode 100644 index 000000000..b864afc8e --- /dev/null +++ b/opensuse/core/tdebase/systray_order.diff @@ -0,0 +1,162 @@ +Index: kicker/applets/systemtray/systemtrayapplet.cpp +=================================================================== +--- kicker/applets/systemtray/systemtrayapplet.cpp.orig ++++ kicker/applets/systemtray/systemtrayapplet.cpp +@@ -187,6 +187,7 @@ bool SystemTrayApplet::x11Event( XEvent + if( isWinManaged( (WId)e->xclient.data.l[2] ) ) // we already manage it + return true; + embedWindow( e->xclient.data.l[2], false ); ++ updateVisibleWins(); + layoutTray(); + return true; + } +@@ -213,13 +214,12 @@ void SystemTrayApplet::preferences() + connect(m_settingsDialog, SIGNAL(finished()), this, SLOT(settingsDialogFinished())); + + m_iconSelector = new KActionSelector(m_settingsDialog); +- m_iconSelector->setAvailableLabel(i18n("Visible icons:")); +- m_iconSelector->setSelectedLabel(i18n("Hidden icons:")); +- m_iconSelector->setShowUpDownButtons(false); ++ m_iconSelector->setAvailableLabel(i18n("Hidden icons:")); ++ m_iconSelector->setSelectedLabel(i18n("Visible icons:")); + m_settingsDialog->setMainWidget(m_iconSelector); + +- QListBox *shownListBox = m_iconSelector->availableListBox(); +- QListBox *hiddenListBox = m_iconSelector->selectedListBox(); ++ QListBox *hiddenListBox = m_iconSelector->availableListBox(); ++ QListBox *shownListBox = m_iconSelector->selectedListBox(); + + TrayEmbedList::const_iterator it = m_shownWins.begin(); + TrayEmbedList::const_iterator itEnd = m_shownWins.end(); +@@ -261,26 +261,48 @@ void SystemTrayApplet::applySettings() + } + + KConfig *conf = config(); +- conf->setGroup("HiddenTrayIcons"); +- QString name; + +- // use the following snippet of code someday to implement ordering +- // of icons +- /* +- m_visibleIconList.clear(); +- QListBoxItem* item = m_iconSelector->availableListBox()->firstItem(); +- for (; item; item = item->next()) ++ // Save the sort order and hidden status using the window class (WM_CLASS) rather ++ // than window name (caption) - window name is i18n-ed, so it's for example ++ // not possible to create default settings. ++ // For backwards compatibility, name is kept as it is, class is preceded by '!'. ++ QMap< QString, QString > windowNameToClass; ++ for( TrayEmbedList::ConstIterator it = m_shownWins.begin(); ++ it != m_shownWins.end(); ++ ++it ) { ++ KWin::WindowInfo info = KWin::windowInfo( (*it)->embeddedWinId(), NET::WMName, NET::WM2WindowClass); ++ windowNameToClass[ info.name() ] = '!' + info.windowClassClass(); ++ } ++ for( TrayEmbedList::ConstIterator it = m_hiddenWins.begin(); ++ it != m_hiddenWins.end(); ++ ++it ) { ++ KWin::WindowInfo info = KWin::windowInfo( (*it)->embeddedWinId(), NET::WMName, NET::WM2WindowClass); ++ windowNameToClass[ info.name() ] = '!' + info.windowClassClass(); ++ } ++ ++ conf->setGroup("SortedTrayIcons"); ++ m_sortOrderIconList.clear(); ++ for(QListBoxItem* item = m_iconSelector->selectedListBox()->firstItem(); ++ item; ++ item = item->next()) + { +- m_visibleIconList.append(item->text()); ++ if( windowNameToClass.contains(item->text())) ++ m_sortOrderIconList.append(windowNameToClass[item->text()]); ++ else ++ m_sortOrderIconList.append(item->text()); + } +- conf->writeEntry("Visible", m_visibleIconList); +- selection.clear();*/ ++ conf->writeEntry("SortOrder", m_sortOrderIconList); + ++ conf->setGroup("HiddenTrayIcons"); + m_hiddenIconList.clear(); +- QListBoxItem* item = m_iconSelector->selectedListBox()->firstItem(); +- for (; item; item = item->next()) ++ for(QListBoxItem* item = m_iconSelector->availableListBox()->firstItem(); ++ item; ++ item = item->next()) + { +- m_hiddenIconList.append(item->text()); ++ if( windowNameToClass.contains(item->text())) ++ m_hiddenIconList.append(windowNameToClass[item->text()]); ++ else ++ m_hiddenIconList.append(item->text()); + } + conf->writeEntry("Hidden", m_hiddenIconList); + conf->sync(); +@@ -416,6 +438,9 @@ void SystemTrayApplet::loadSettings() + conf->setGroup("HiddenTrayIcons"); + m_hiddenIconList = conf->readListEntry("Hidden"); + ++ conf->setGroup("SortedTrayIcons"); ++ m_sortOrderIconList = conf->readListEntry("SortOrder"); ++ + //Note This setting comes from kdeglobal. + conf->setGroup("System Tray"); + m_iconSize = conf->readNumEntry("systrayIconWidth", 22); +@@ -505,7 +530,9 @@ bool SystemTrayApplet::isWinManaged(WId + + bool SystemTrayApplet::shouldHide(WId w) + { +- return m_hiddenIconList.find(KWin::windowInfo(w).name()) != m_hiddenIconList.end(); ++ return m_hiddenIconList.find(KWin::windowInfo(w).name()) != m_hiddenIconList.end() ++ || m_hiddenIconList.find('!'+KWin::windowInfo(w,0,NET::WM2WindowClass).windowClassClass()) ++ != m_hiddenIconList.end(); + } + + void SystemTrayApplet::updateVisibleWins() +@@ -529,6 +556,35 @@ void SystemTrayApplet::updateVisibleWins + (*emb)->hide(); + } + } ++ ++ QMap< QXEmbed*, QString > names; // cache window names and classes ++ QMap< QXEmbed*, QString > classes; ++ for( TrayEmbedList::const_iterator it = m_shownWins.begin(); ++ it != m_shownWins.end(); ++ ++it ) { ++ KWin::WindowInfo info = KWin::windowInfo((*it)->embeddedWinId(),NET::WMName,NET::WM2WindowClass); ++ names[ *it ] = info.name(); ++ classes[ *it ] = '!'+info.windowClassClass(); ++ } ++ TrayEmbedList newList; ++ for( QStringList::const_iterator it1 = m_sortOrderIconList.begin(); ++ it1 != m_sortOrderIconList.end(); ++ ++it1 ) { ++ for( TrayEmbedList::iterator it2 = m_shownWins.begin(); ++ it2 != m_shownWins.end(); ++ ) { ++ if( (*it1).startsWith("!") ? classes[ *it2 ] == *it1 : names[ *it2 ] == *it1 ) { ++ newList.append( *it2 ); // don't bail out, there may be multiple ones ++ it2 = m_shownWins.erase( it2 ); ++ } else ++ ++it2; ++ } ++ } ++ for( TrayEmbedList::const_iterator it = m_shownWins.begin(); ++ it != m_shownWins.end(); ++ ++it ) ++ newList.append( *it ); // append unsorted items ++ m_shownWins = newList; + } + + void SystemTrayApplet::toggleExpanded() +Index: kicker/applets/systemtray/systemtrayapplet.h +=================================================================== +--- kicker/applets/systemtray/systemtrayapplet.h.orig ++++ kicker/applets/systemtray/systemtrayapplet.h +@@ -97,6 +97,7 @@ private: + TrayEmbedList m_shownWins; + TrayEmbedList m_hiddenWins; + QStringList m_hiddenIconList; ++ QStringList m_sortOrderIconList; + KWinModule *kwin_module; + Atom net_system_tray_selection; + Atom net_system_tray_opcode; diff --git a/opensuse/core/tdebase/taskbar.patch b/opensuse/core/tdebase/taskbar.patch new file mode 100644 index 000000000..f8e526e6d --- /dev/null +++ b/opensuse/core/tdebase/taskbar.patch @@ -0,0 +1,29 @@ +--- kicker/taskbar/taskcontainer.cpp.orig 2011-02-12 00:40:57.060389620 +0300 ++++ kicker/taskbar/taskcontainer.cpp 2011-02-12 02:03:08.345389684 +0300 +@@ -576,9 +576,9 @@ + // draw button background + if (drawButton) + { +- style().drawPrimitive(QStyle::PE_HeaderSection, p, +- QRect(0, 0, width(), height()), +- colors); ++ style().drawPrimitive(QStyle::PE_HeaderSection, p, ++ QRect(1, 1, width()-2, height()-2), ++ colors, sunken ? QStyle::Style_Down : QStyle::Style_Raised); + } + + // shift button label on sunken buttons +@@ -674,11 +674,11 @@ + } + else + { +- textPen = p->pen(); ++ textPen = QPen(colors.buttonText()); //textPen = p->pen(); + } + } + +- int availableWidth = width() - (br.x() * 2) - textPos; ++ int availableWidth = width() - (br.x() * 2) - textPos - 4; + if (m_filteredTasks.count() > 1) + { + availableWidth -= 8; diff --git a/opensuse/core/tdebase/tdebase.changes b/opensuse/core/tdebase/tdebase.changes new file mode 100644 index 000000000..5c3add7de --- /dev/null +++ b/opensuse/core/tdebase/tdebase.changes @@ -0,0 +1,5422 @@ +------------------------------------------------------------------- +Wed Aug 17 02:38:36 UTC 2011 - anixx@opensuse.org + +- reenable and repair MTAB watching in fstab plugin for media autodetection without HAL + +------------------------------------------------------------------- +Tue Jul 26 10:26:42 UTC 2011 - anixx@opensuse.org + +- add dependency on libusb-compat-devel to restore Logitech mouse support +- add a simlink to the screensavers directory to fix the issue of their sudden disappearance + +------------------------------------------------------------------- +Thu Jun 9 18:59:49 UTC 2011 - coolo@novell.com + +- do not require something we don't build in factory + +------------------------------------------------------------------- +Wed Jun 1 09:41:05 UTC 2011 - anixx@opensuse.org + +- make hal usage conditional on the project + +------------------------------------------------------------------- +Tue May 31 12:41:04 UTC 2011 - coolo@novell.com + +- remove hal support for 12.1 and some cleanup for long gone distributions + +------------------------------------------------------------------- +Thu Mar 10 08:49:11 UTC 2011 - neptunia@mail.ru + +- fix build + +------------------------------------------------------------------- +Thu Sep 23 00:15:01 CEST 2010 - hpj@urpla.net + +- attempt to fix flashplayer dysfunction + +------------------------------------------------------------------- +Fri Aug 13 17:03:58 UTC 2010 - neptunia@mail.ru + +- removing dependencies on KDE4, restoring ksysguardd but without strict dependency + +------------------------------------------------------------------- +Tue Aug 10 06:04:35 UTC 2010 - beineri@opensuse.org + +- Drop dependencies on Beagle for 11.4 + +------------------------------------------------------------------- +Mon Apr 19 18:51:14 UTC 2010 - tittiatcoke@gmail.com + +- Added patch to enable build with openssl 1.0 + +------------------------------------------------------------------- +Tue Mar 23 12:45:11 UTC 2010 - llunak@novell.com + +- CVE-2010-0436 (bnc#584223) + +------------------------------------------------------------------- +Fri Jan 1 20:09:49 CET 2010 - jengelh@medozas.de + +- package baselibs.conf +- enable full parallel build + +------------------------------------------------------------------- +Fri Nov 20 21:02:01 UTC 2009 - beineri@opensuse.org + +- update patches to apply without fuzz + +------------------------------------------------------------------- +Fri Oct 16 15:07:21 CEST 2009 - llunak@novell.com + +- add .1 to version to allow obsoleting 11.1 version (bnc#529955) + +------------------------------------------------------------------- +Sun Oct 4 06:06:45 UTC 2009 - beineri@opensuse.org + +- make kdebase3-session require kdebase3-workspace (bnc#544173) + +------------------------------------------------------------------- +Thu Jul 23 11:52:14 CEST 2009 - llunak@suse.cz + +- use kdeinit from ksmserver when possible (r967149) + +------------------------------------------------------------------- +Sun Jul 19 12:21:09 CEST 2009 - beineri@opensuse.org + +- fix kdebase3-devel dependencies + +------------------------------------------------------------------- +Sun Jul 12 16:35:28 CEST 2009 - beineri@opensuse.org + +- split off -apps and -workspace sub-packages +- remove some with kde4 packages conflicting man pages + +------------------------------------------------------------------- +Mon Jun 22 07:03:30 CEST 2009 - beineri@opensuse.org + +- remove ancient unversionized obsolete (kdialog) + +------------------------------------------------------------------- +Fri May 29 14:55:51 CEST 2009 - llunak@suse.cz + +- build with gcc 4.4 + +------------------------------------------------------------------- +Mon Apr 20 20:59:26 CEST 2009 - dmueller@suse.de + +- build for SLE_10 without fdupes run + +------------------------------------------------------------------- +Sat Apr 4 17:33:29 CEST 2009 - coolo@suse.de + +- refresh all patches to fix build + +------------------------------------------------------------------- +Thu Dec 11 15:12:11 CET 2008 - dmueller@suse.de + +- fix kdebase3 being pulled in for kde4 installs (bnc#458323) + +------------------------------------------------------------------- +Wed Dec 10 12:34:56 CET 2008 - olh@suse.de + +- use Obsoletes: -XXbit only for ppc64 to help solver during distupgrade + (bnc#437293) + +------------------------------------------------------------------- +Thu Dec 4 12:34:56 CET 2008 - olh@suse.de + +- obsolete old -XXbit packages (bnc#437293) + +------------------------------------------------------------------- +Tue Dec 2 15:07:17 CET 2008 - stbinner@suse.de + +- don't show KNetAttach menu entry on KDE4 desktop + +------------------------------------------------------------------- +Sun Nov 23 17:28:18 CET 2008 - stbinner@suse.de + +- fix build/patch apply on ppc + +------------------------------------------------------------------- +Thu Nov 20 13:59:52 CET 2008 - llunak@suse.cz + +- use KPowersave for suspend if available, so that the screen + is also locked (bnc#326848) + +------------------------------------------------------------------- +Mon Sep 29 10:13:39 CEST 2008 - stbinner@suse.de + +- Update 3_5_BRANCH.diff (bnc#430476) + +------------------------------------------------------------------- +Sun Sep 21 18:56:48 CEST 2008 - wstephenson@suse.de + +- Fix maximum port allowed in knetattach wizard (bnc#335794) + +------------------------------------------------------------------- +Wed Sep 10 00:45:48 CEST 2008 - dmueller@suse.de + +- remove resmgr references from kcheckpass (bnc#422616) + +------------------------------------------------------------------- +Wed Sep 3 00:46:39 CEST 2008 - dmueller@suse.de + +- build against libsensors4 + +------------------------------------------------------------------- +Tue Aug 26 09:46:37 CEST 2008 - llunak@suse.cz + +- fix wallpapers when the number of screens changes (bnc#329221) + +------------------------------------------------------------------- +Sun Aug 24 11:57:13 CEST 2008 - stbinner@suse.de + +- fix build breakage by previous submission +- fix file conflict with kde4-kdm (bnc#411239) + +------------------------------------------------------------------- +Wed Aug 20 18:53:58 CEST 2008 - coolo@suse.de + +- update to KDE 3.5.10 + * many kicker fixes + * translation updates + * desktop files validate + +------------------------------------------------------------------- +Mon Aug 4 13:45:49 CEST 2008 - dmueller@suse.de + +- fix build on 10.2 + +------------------------------------------------------------------- +Thu Jul 24 16:32:56 CEST 2008 - dmueller@suse.de + +- update rotate-wacom pointers patch to work on xrandr 1.2 displays + as well (bnc#385149) + +------------------------------------------------------------------- +Thu Jul 24 16:30:05 CEST 2008 - dmueller@suse.de + +- disable ksysguard openslp patch as it causes hangs + +------------------------------------------------------------------- +Mon Jul 14 00:27:15 CEST 2008 - dmueller@suse.de + +- fix suspend/hibernate buttons for 11.0 and newer (bnc#290917) + +------------------------------------------------------------------- +Wed Jun 11 16:08:14 CEST 2008 - dmueller@suse.de + +- remove kdebase3-nsplugins64 package and add nspluginwrapper + dependency + +------------------------------------------------------------------- +Tue May 20 18:00:46 CEST 2008 - llunak@suse.cz + +- do not always default to kdesu remembering password (bnc#386531) + +------------------------------------------------------------------- +Mon May 19 21:16:25 CEST 2008 - llunak@suse.cz + +- fix broken patch for bnc#332079 + +------------------------------------------------------------------- +Mon May 19 11:15:29 CEST 2008 - thoenig@suse.de + +- add fingerprint reader support: kpamgreeter.diff, + use-pam-before-classic.diff. Closes bnc#339331. + +------------------------------------------------------------------- +Fri May 16 19:25:52 CEST 2008 - dkukawka@suse.de + +- fixed rotate-wacom-pointers.diff to work with current xsetwacom + (bnc#391440) + +------------------------------------------------------------------- +Wed May 14 08:34:36 CEST 2008 - stbinner@suse.de + +- port/renable rotate-wacom-pointers.diff (bnc#385149) + +------------------------------------------------------------------- +Sat May 10 21:37:04 CEST 2008 - stbinner@suse.de + +- move some icons to -runtime because kdelibs3 references them + or they are used in default KDE3 applications on KDE4 desktop + +------------------------------------------------------------------- +Fri May 9 23:46:02 CEST 2008 - dmueller@suse.de + +- fix kdm shutdown being set to "no" during config conversion + +------------------------------------------------------------------- +Fri May 9 10:37:16 CEST 2008 - dmueller@suse.de + +- 3_5_BRANCH.diff update: + * new translations + +------------------------------------------------------------------- +Tue May 6 17:58:58 CEST 2008 - dmueller@suse.de + +- fix uninitialized return in krandrtray + +------------------------------------------------------------------- +Fri May 2 13:49:03 CEST 2008 - llunak@suse.cz + +- avoid kded crash on CD ejecting (bnc#359424) + +------------------------------------------------------------------- +Mon Apr 28 17:48:30 CEST 2008 - llunak@suse.cz + +- switch kdesu backend back to su (bnc#216796) + +------------------------------------------------------------------- +Mon Apr 28 11:15:30 CEST 2008 - dmueller@suse.de + +- add /usr/bin/startkde3 + +------------------------------------------------------------------- +Fri Apr 25 16:38:03 CEST 2008 - dmueller@suse.de + +- update 3_5_BRANCH.diff to include translations +- call xrandr --auto to xvideo issues on xrandr 1.2 setups + +------------------------------------------------------------------- +Thu Apr 17 11:35:35 CEST 2008 - stbinner@suse.de + +- don't build kdebase3-ksysguardd package for 11.0 but require/use + kdebase4-workspace-ksysguardd (bnc#379351) + +------------------------------------------------------------------- +Mon Apr 14 18:09:05 CEST 2008 - llunak@suse.cz + +- improve the low-disk-space dialog (bnc#199054) +- GUI for selecting the WM (bnc#332079) + +------------------------------------------------------------------- +Sun Apr 13 16:10:51 CEST 2008 - dmueller@suse.de + +- fix build against glibc 2.8 +- fix session restore of kde3 apps if kde 4.x is installed + as well + +------------------------------------------------------------------- +Sat Apr 12 08:16:18 CEST 2008 - stbinner@suse.de + +- rename session type from "KDE" to "KDE3" (bnc#379355) + +------------------------------------------------------------------- +Thu Apr 10 12:54:45 CEST 2008 - ro@suse.de + +- added baselibs.conf file to build xxbit packages + for multilib support + +------------------------------------------------------------------- +Thu Apr 3 20:20:28 CEST 2008 - stbinner@suse.de + +- split of misc-console-font subpackage (fate#302474) + +------------------------------------------------------------------- +Thu Apr 3 14:09:47 CEST 2008 - stbinner@suse.de + +- add web shortcut for SourceForge tracker (bnc#331663) + +------------------------------------------------------------------- +Tue Mar 18 19:26:59 CET 2008 - dmueller@suse.de + +- fix shutdown option being reset on each update (bnc#348546) + +------------------------------------------------------------------- +Thu Mar 13 20:29:49 CET 2008 - stbinner@suse.de + +- fix splitting + +------------------------------------------------------------------- +Wed Mar 12 15:29:01 CET 2008 - dmueller@suse.de + +- update 3_5_BRANCH.diff +- further improve kdebase3-runtime splitting + +------------------------------------------------------------------- +Mon Mar 3 11:18:07 CET 2008 - stbinner@suse.de + +- move kreadconfig to kdebase3-runtime + +------------------------------------------------------------------- +Tue Feb 26 14:19:56 CET 2008 - dmueller@suse.de + +- fix sensors support in ksysguardd + +------------------------------------------------------------------- +Mon Feb 18 13:42:36 CET 2008 - dmueller@suse.de + +- add missing split provides + +------------------------------------------------------------------- +Wed Feb 13 23:18:17 CET 2008 - dmueller@suse.de + +- update to 3.5.9 + * bugfixes, translation update + +------------------------------------------------------------------- +Sat Feb 9 06:18:39 CET 2008 - stbinner@suse.de + +- fix position of kdebase3-runtime requirement + +------------------------------------------------------------------- +Fri Feb 8 14:28:23 CET 2008 - stbinner@suse.de + +- split off few parts like KIO-slaves into kdebase3-runtime package + +------------------------------------------------------------------- +Mon Jan 28 12:04:32 CET 2008 - stbinner@suse.de + +- fix build against libbeagle 0.3 + +------------------------------------------------------------------- +Thu Jan 17 10:53:53 CET 2008 - stbinner@suse.de + +- update 3_5_BRANCH.diff for 64bit Flash fixes + +------------------------------------------------------------------- +Wed Jan 2 08:37:44 CET 2008 - stbinner@suse.de + +- add 3_5_BRANCH.diff to pick up nsplugin fixes for Flash + +------------------------------------------------------------------- +Wed Dec 5 12:05:45 CET 2007 - wstephenson@suse.de + +- Remove spurious openldap2, pcsc-lite and libsmbclient build + requirements. + +------------------------------------------------------------------- +Sat Nov 24 20:09:11 CET 2007 - coolo@suse.de + +- require liblazy-devel on 10.3+ + +------------------------------------------------------------------- +Wed Nov 21 14:15:29 CET 2007 - stbinner@suse.de + +- fix build for < 11.0 + +------------------------------------------------------------------- +Fri Nov 16 16:22:06 CET 2007 - tpatzig@suse.de + +- fix, no kryptomedia for already decrypted raid devices (#308196) + +------------------------------------------------------------------- +Fri Nov 16 13:12:13 CET 2007 - dmueller@suse.de + +- remove unneeded source file + +------------------------------------------------------------------- +Fri Nov 2 15:47:22 CET 2007 - jdelvare@suse.de + +- libsensors is in a separate package now. + +------------------------------------------------------------------- +Tue Oct 23 11:42:05 CEST 2007 - stbinner@suse.de + +- fix build with gcc 4.3 +- fix Konqueror not generating previews of b/w photos (#334965) + +------------------------------------------------------------------- +Sat Oct 20 15:24:18 CEST 2007 - schwab@suse.de + +- Remove invalid delete in ~NSPluginStreamBase. + +------------------------------------------------------------------- +Tue Oct 9 11:31:40 CEST 2007 - stbinner@suse.de + +- fix Kickoff layout for Xinerama (#254215) +- update to KDE 3.5.8: bugfixes in pop3 and smtp kio slaves, Kate, + kcontrol, kdesktop, kdm, kwin, Konsole and Konqueror + +------------------------------------------------------------------- +Fri Sep 21 16:19:20 CEST 2007 - stbinner@suse.de + +- fix parameter handling in input field of Kickoff (#325633) + +------------------------------------------------------------------- +Fri Sep 21 15:58:29 CEST 2007 - dmueller@suse.de + +- fix kded crashes on resume when kpowersave is installed (#326488) +- fix Window domain listing in kdm (#292084) + +------------------------------------------------------------------- +Thu Sep 20 19:25:35 CEST 2007 - tpatzig@suse.de + +- update for already mounted crypto_LUKS patch (#308196) + +------------------------------------------------------------------- +Wed Sep 19 22:35:54 CEST 2007 - dmueller@suse.de + +- fix arts being started twice/running after logout (#178930) + +------------------------------------------------------------------- +Wed Sep 19 22:17:03 CEST 2007 - tpatzig@suse.de + +- fix to safely remove (teardown) crypted volumes (#306641) + +------------------------------------------------------------------- +Wed Sep 19 15:56:04 CEST 2007 - dmueller@suse.de + +- fix kdm autologin vulnerability (#307372, CVE-2007-4569) + +------------------------------------------------------------------- +Wed Sep 19 10:50:37 CEST 2007 - stbinner@suse.de + +- fix Kickoff problems with secondary screen (#232446) +- replace khc_beagle-*.py with Perl versions for one CD install + +------------------------------------------------------------------- +Fri Sep 14 15:01:18 CEST 2007 - tpatzig@suse.de + +- let mediamamanger check if crypto_LUKS vol is already mounted + before running kryptomedia-dialog (#308196) + +------------------------------------------------------------------- +Tue Sep 11 13:07:23 CEST 2007 - stbinner@suse.de + +- show folder_man icon in system:/ slave for Documents (#304656) + +------------------------------------------------------------------- +Tue Sep 11 12:12:23 CEST 2007 - dmueller@suse.de + +- reorder patches to apply properly even without uncommitted patches + +------------------------------------------------------------------- +Fri Sep 7 17:47:55 CEST 2007 - dmueller@suse.de + +- fix kdm crash on vnc login (#301374) +- fix DISPLAYMANAGER_SHUTDOWN to work like documented (#308257) + +------------------------------------------------------------------- +Thu Aug 30 16:37:13 CEST 2007 - llunak@suse.cz + +- avoid excessive X errors from kicker (#299594) + +------------------------------------------------------------------- +Tue Aug 28 15:29:19 CEST 2007 - stbinner@suse.de + +- change Kickoff's "Home Folder" and "My Document" icons (#304656) +- check if netscape plugins have changed (eg by YOU) (#296425) + +------------------------------------------------------------------- +Sat Aug 25 11:41:45 CEST 2007 - stbinner@suse.de + +- reorder default Kickoff favorites: Firefox first, Help not last + +------------------------------------------------------------------- +Wed Aug 22 15:42:31 CEST 2007 - stbinner@suse.de + +- don't try to overwrite desktop icons during setup (#278109) +- Lock/Logout applet defaults to wrong button order (#302179) +- don't check for khelpcenter index at application start + +------------------------------------------------------------------- +Sun Aug 19 09:38:47 CEST 2007 - stbinner@suse.de + +- fix build on older distributions +- don't show progress indicator when creating initial desktop icons + +------------------------------------------------------------------- +Thu Aug 16 12:12:05 CEST 2007 - hmacht@suse.de + +- adjust to new liblazy API due to new PolicyKit (>=0.4) (#299733) + +------------------------------------------------------------------- +Tue Aug 14 09:17:54 CEST 2007 - stbinner@suse.de + +- don't package obsolete (x)emacs icons (#299941) +- align kdm user list labels (#294421) +- kxkb: "Include Latin layout" by default for new layouts (#204402) +- fix opening of media with non UTF name (#297886) + +------------------------------------------------------------------- +Fri Aug 10 17:47:36 CEST 2007 - dmueller@suse.de + +- actually enable the consolekit patch (d'oh) + +------------------------------------------------------------------- +Wed Aug 8 18:03:11 CEST 2007 - stbinner@suse.de + +- show "Install Software" menu item within Kickoff "Computer" tab +- don't show "missing icon" icon when an entry icon cannot be found + +------------------------------------------------------------------- +Mon Aug 6 18:43:51 CEST 2007 - dmueller@suse.de + +- add krandr 0.5.2.1 (part of fate 300481) + +------------------------------------------------------------------- +Sat Aug 4 18:49:16 CEST 2007 - stbinner@suse.de + +- update 3_5_BRANCH.diff a last time before freeze + +------------------------------------------------------------------- +Fri Aug 3 15:47:22 CEST 2007 - dmueller@suse.de + +- notify consolekit of logged in users + +------------------------------------------------------------------- +Fri Jul 27 13:56:11 CEST 2007 - stbinner@suse.de + +- add color scheme support to kdm greeter themes (#294421) + +------------------------------------------------------------------- +Mon Jul 16 13:52:32 CEST 2007 - stbinner@suse.de + +- ensure that correct kcmshell is called (#277292) + +------------------------------------------------------------------- +Mon Jul 16 11:39:13 CEST 2007 - dmueller@suse.de + +- update from 3.5 branch to include bugfixes (#287193) + +------------------------------------------------------------------- +Fri Jul 13 11:45:20 CEST 2007 - stbinner@suse.de + +- activate text completion editor in mini-CLI and Konqueror URL bar + +------------------------------------------------------------------- +Thu Jul 12 11:40:17 CEST 2007 - stbinner@suse.de + +- fix ugly scaled remote:/ image in kickoff (#258462) + +------------------------------------------------------------------- +Tue Jul 10 07:07:57 CEST 2007 - stbinner@suse.de + +- fix build on SUSE_Linux_10.0 + +------------------------------------------------------------------- +Thu Jun 21 18:20:58 CEST 2007 - stbinner@suse.de + +- fix invalid .desktop files + +------------------------------------------------------------------- +Wed Jun 20 11:58:22 CEST 2007 - stbinner@suse.de + +- remove kappfinder data (#285831) +- fix build on older distributions + +------------------------------------------------------------------- +Wed Jun 20 11:25:27 CEST 2007 - coolo@suse.de + +- don't install earlykdm anymore and rely on preload to provide + an early start + +------------------------------------------------------------------- +Tue Jun 19 18:12:42 CEST 2007 - dmueller@suse.de + +- 3_5_BRANCH update (#282305) + +------------------------------------------------------------------- +Sat Jun 16 17:23:30 CEST 2007 - coolo@suse.de + +- don't require kbd to run + +------------------------------------------------------------------- +Wed Jun 13 18:42:31 CEST 2007 - dmueller@suse.de + +- fix duplicate files in package +- don't install config files as executable +- fix untranslated wallpaper desktop files +- add missing ldconfig call to %postun +- add missing %stop_on_removal to kdm + +------------------------------------------------------------------- +Thu Jun 7 05:37:53 CEST 2007 - stbinner@suse.de + +- move konqueror.desktop back to old position (#281572) + +------------------------------------------------------------------- +Wed Jun 6 15:15:06 CEST 2007 - dmueller@suse.de + +- fix syslog autodetection in init.earlykdm script + +------------------------------------------------------------------- +Mon Jun 4 14:32:55 CEST 2007 - stbinner@suse.de + +- move kde_post_install + +------------------------------------------------------------------- +Fri Jun 1 17:57:46 CEST 2007 - dmueller@suse.de + +- update 3_5_BRANCH.diff + * build fix + +------------------------------------------------------------------- +Thu May 24 21:32:01 CEST 2007 - wstephenson@suse.de + +- Revised offline mode infrastructure (#237274) + +------------------------------------------------------------------- +Wed May 23 22:59:23 CEST 2007 - stbinner@suse.de + +- fix build requires + +------------------------------------------------------------------- +Mon May 16 22:38:26 CEST 2007 - stbinner@suse.de + +- update to 3.5.7: + * kicker: Added option to change font color used by taskbar applet + * kwin: Option to turn off alt+tab outline. + * several bugfixes in all applications +- update xinerama.patch: fix handling of SeparateScreenFocus option +- update kickoff.diff from SVN +- only default shortcuts to switch to first 10 desktops (#275705) + +------------------------------------------------------------------- +Tue May 15 14:06:01 CEST 2007 - dmueller@suse.de + +- drop python requirement +- only install kdebase3-beagle when both kdebase3 and beagle + are selected + +------------------------------------------------------------------- +Thu May 10 14:20:13 CEST 2007 - stbinner@suse.de + +- add audit log support to kdm (#263180) + +------------------------------------------------------------------- +Thu Apr 26 23:23:31 CEST 2007 - dmueller@suse.de + +- fix build for 10.3 + +------------------------------------------------------------------- +Wed Apr 25 16:29:22 CEST 2007 - stbinner@suse.de + +- fix build for < 10.2 + +------------------------------------------------------------------- +Wed Apr 18 21:31:30 CEST 2007 - dmueller@suse.de + +- reapply konsole font color update + +------------------------------------------------------------------- +Mon Apr 16 13:32:51 CEST 2007 - dmueller@suse.de + +- build kfontinst against libfontenc again + +------------------------------------------------------------------- +Thu Apr 12 13:20:52 CEST 2007 - stbinner@suse.de + +- don't include kdm/sessions/enlightenment.desktop (#259717) +- default to UTF-8 encoding for spellchecking (#261217) + +------------------------------------------------------------------- +Thu Apr 5 15:22:27 CEST 2007 - stbinner@suse.de + +- simplify resize and rotate settings dialog (#104926) + +------------------------------------------------------------------- +Tue Apr 3 18:25:30 CEST 2007 - stbinner@suse.de + +- update 3_5_BRANCH.diff +- update kickoff.diff from SVN: + * prefer user over system media label (#257007) + * implement listening to Beagle KAddressbook hits and do not + search addressbooks via kabc by default (#249287) + * make drawing of Geeko eye an option with default off + +------------------------------------------------------------------- +Fri Mar 30 20:06:41 CEST 2007 - wstephenson@suse.de + +- Add fix for dbus error message after resume (#223775) + +------------------------------------------------------------------- +Sun Mar 25 09:28:48 CEST 2007 - aj@suse.de + +- Add libbz2-devel to BuildRequires for 10.3 and newer. + +------------------------------------------------------------------- +Fri Mar 16 16:18:08 CET 2007 - stbinner@suse.de + +- update Kickoff from SVN: + * don't allow "Switch/Reboot to foo" items as Favorites + * distinct icons for suspend to ram and disk (#229966) +- fix "cannot login with KDM after wrong password" (#229245) +- fix kcmkdm not defaulting to Grub (#230715) + +------------------------------------------------------------------- +Thu Mar 9 17:23:58 CET 2007 - stbinner@suse.de + +- fix build (new icon location check) +- don't duplicate /opt/kde3/bin in PATH (#251358) +- solve #216489 problem in a more generic, path independent way + +------------------------------------------------------------------- +Wed Mar 7 15:48:00 CET 2007 - dmueller@suse.de + +- adjust patsh for gnome help integration (#251117) + +------------------------------------------------------------------- +Mon Mar 5 13:11:44 CET 2007 - stbinner@suse.de + +- /usr/share/xsessions is now already part of filesystem RPM + +------------------------------------------------------------------- +Tue Feb 20 15:21:07 CET 2007 - stbinner@suse.de + +- add "PATH=/opt/kde3/bin:$PATH" to startkde script + +------------------------------------------------------------------- +Fri Feb 9 17:53:24 CET 2007 - stbinner@suse.de + +- new Kickoff option: "KickoffSearchAddressBook=false" disables kabc + search for people who are annoyed by KMail being started by the menu + +------------------------------------------------------------------- +Wed Feb 7 15:05:39 CET 2007 - dmueller@suse.de + +- fix build + +------------------------------------------------------------------- +Mon Feb 5 19:30:47 CET 2007 - dmueller@suse.de + +- fix kde-window-decorator detection +- re-apply 3.5 branch diff + +------------------------------------------------------------------- +Fri Feb 2 14:19:16 CET 2007 - dmueller@suse.de + +- update 3_5_BRANCH diff +- fix low diskspace patch (#226766) + +------------------------------------------------------------------- +Tue Jan 30 14:40:12 CET 2007 - stbinner@suse.de + +- show konqfilemgr.desktop in the menu + +------------------------------------------------------------------- +Fri Jan 26 10:58:09 CET 2007 - coolo@suse.de + +- making kdmrc noreplace as genkdmconf will update the config + anyway (#224505) + +------------------------------------------------------------------- +Mon Jan 22 11:37:44 CET 2007 - stbinner@suse.de + +- update to 3.5.6 release: + * kicker: more support for compiz, fix systray flicker + * kwin: claim _NET_WM_CM_Sn when compositing, bug fixes + * kate: added session chooser panel applet and KMenu extension + * kcontrol: Fonts settings module by default does not affect + system-wide font rendering settings. + * several bugfixes within kdesktop, konqueror, konsole, fish:/, + kfind and ksysguard + +------------------------------------------------------------------- +Thu Jan 18 11:06:28 CET 2007 - dgollub@suse.de + +- fixed typo in crypto support for media manager + +------------------------------------------------------------------- +Tue Jan 16 13:40:48 CET 2007 - dmueller@suse.de + +- add crypto media handling (fate #253) +- konsole color scheme update (experimental) +- start kde-window-decorator for compiz startup + +------------------------------------------------------------------- +Tue Jan 16 02:58:56 CET 2007 - ltinkl@suse.cz + +- update patch to fix #215262 + +------------------------------------------------------------------- +Sat Jan 13 20:22:24 CET 2007 - stbinner@suse.de + +- context menu entry in lock/lockout applet to switch button order + +------------------------------------------------------------------- +Thu Jan 11 19:21:26 CET 2007 - stbinner@suse.de + +- make krandrtray also rotate wacom-input devices (Fate #300713) + +------------------------------------------------------------------- +Tue Jan 9 11:36:30 CET 2007 - stbinner@suse.de + +- fix fish:// does not support files larger than 2 Gb (#230941) +- update of kickoff.diff from SVN: + * fix keyboard navigation in app browser (#227891) + * option to not switch tabs on hover (KickoffSwitchTabsOnHover) + +------------------------------------------------------------------- +Thu Jan 4 22:42:16 CET 2007 - stbinner@suse.de + +- update of kickoff.diff and kickoff-data.tar.bz2 from SVN: + * always show most recently used items, never frequently (#227829) + * fix order of appplication history and reboot options (#227826) + * don't require restart to show/hide "Save Session" (#228829) + * re-add lost "click on tab switches to flip top level" feature + * switch back to top level when changing to exit view via accell + * darker (instead of lighter) resize stripes for better visibility + * added non-GUI options (require restart): kickerrc, [General] + "KickoffFontPointSizeOffset=3" increases, negative decreases + "KickoffTabBarFormat={LabelAndIcon,LabelOnly,IconOnly}" + +------------------------------------------------------------------- +Thu Jan 4 14:41:52 CET 2007 - stbinner@suse.de + +- allow to configure/disable session confirmations in ksmserverrc: + [General] + confirmLogoutDelay=0 + confirmRebootDelay=11 + confirmShutdownDelay=11 + +------------------------------------------------------------------- +Mon Dec 18 18:44:45 CET 2006 - llunak@suse.cz + +- handle custom browser specified as .desktop file (#224897) + +------------------------------------------------------------------- +Mon Dec 11 15:09:30 CET 2006 - stbinner@suse.de + +- unbreak mach_blass_legacy.diff (revert brain damage) + +------------------------------------------------------------------- +Wed Dec 6 11:46:50 CET 2006 - stbinner@suse.de + +- make KDE protocol information use enhanced_browsing icon (#186707) +- use upstream logout effect for 8-bit displays (#214543) + +------------------------------------------------------------------- +Mon Dec 4 11:25:43 CET 2006 - stbinner@suse.de + +- remove UnitedLinux cruft from spec file +- ksmserver: escape "&" properly in grub partition label +- fix more the build for < 10.1 + +------------------------------------------------------------------- +Fri Dec 1 10:09:23 CET 2006 - stbinner@suse.de + +- fix build for < 10.1 + +------------------------------------------------------------------- +Fri Dec 1 04:20:22 CET 2006 - dmueller@suse.de + +- fix drag&drop of favourites on tab regression in kickoff +- fix tooltips sometimes disappearing (#221616) + +------------------------------------------------------------------- +Mon Nov 27 22:14:12 CET 2006 - dmueller@suse.de + +- refresh ksmserver-timed.diff to apply properly + +------------------------------------------------------------------- +Mon Nov 27 17:53:03 CET 2006 - dmueller@suse.de + +- fix translation issue in kickoff Leave tab (#221299) +- fix kickoff tab labels not being drawn centered +- add (hidden) option to disable flip animation + +------------------------------------------------------------------- +Mon Nov 27 17:24:17 CET 2006 - stbinner@suse.de + +- set all logout/shutdown/restart delays to 30 seconds + +------------------------------------------------------------------- +Sat Nov 25 13:32:52 CET 2006 - coolo@suse.de + +- correctly handle media mounted on startup (#223413) + +------------------------------------------------------------------- +Fri Nov 24 10:43:42 CET 2006 - coolo@suse.de + +- correctly follow font sizes in the logout dialog (#222496) + +------------------------------------------------------------------- +Fri Nov 24 08:55:19 CET 2006 - stbinner@suse.de + +- add direct "Requires: Beagle" for kdebase3-beagle package + +------------------------------------------------------------------- +Thu Nov 23 18:59:07 CET 2006 - coolo@suse.de + +- fix highly visible X after dpms kicks out again (#222623 also + reported by ro and various others) + +------------------------------------------------------------------- +Thu Nov 23 16:43:03 CET 2006 - dmueller@suse.de + +- fix kickoff sloppy region also in alternative layout +- use system language in kdm (#223445) +- revert change from 3.5 branch to show media icons (#223413) + +------------------------------------------------------------------- +Wed Nov 22 04:50:20 CET 2006 - ltinkl@suse.cz + +- implement two requested DCOp functions for +#215262 - Suspend to disk with attached usb storage not working + +------------------------------------------------------------------- +Tue Nov 21 13:53:58 CET 2006 - dmueller@suse.de + +- fix another typo (#222686) + +------------------------------------------------------------------- +Tue Nov 21 13:18:31 CET 2006 - dmueller@suse.de + +- fix typo in i18n string (#222686) +- trigger the kmenu when the greeter closes to avoid focus handling + locks + +------------------------------------------------------------------- +Mon Nov 20 22:16:43 CET 2006 - llunak@suse.cz + +- update the updater autostart utility (#219390) + +------------------------------------------------------------------- +Mon Nov 20 17:12:05 CET 2006 - dmueller@suse.de + +- improve application scoring (#221252) +- fix kickoff button flicker (#221287) +- fix kickoff button not flipped in top position (#221209) +- fix some RTL issues with kickoff (#219415) +- hide dpms module if kpowersave is messing with DPMS (#167919) + +------------------------------------------------------------------- +Mon Nov 20 16:01:38 CET 2006 - ltinkl@suse.cz + +- fix #218243 - insserv: Service earlykbd has to be enabled for + service earlykdm + +------------------------------------------------------------------- +Thu Nov 16 18:18:02 CET 2006 - llunak@suse.cz + +- add autostart utility to launch the right updater tool (#219390) +- fix 3_5_BRANCH_kde_128648.diff to avoid KDE#137119 +- fix systray_order.diff to also immediately place properly + zen-updater or other XDG systray apps +- require root password for shutdown by default (#220268) +- fix shell insertion vulnerability in khelpcenter (#218764) + +------------------------------------------------------------------- +Wed Nov 15 21:14:08 CET 2006 - dmueller@suse.de + +- permissions %post for fileshareset (#221129) + +------------------------------------------------------------------- +Tue Nov 14 11:39:06 CET 2006 - dmueller@suse.de + +- update to current optional-kwin.diff (#219020) +- fix more minipager issues with compiz +- fix more shell insertion issues with khelpcenter + +------------------------------------------------------------------- +Tue Nov 14 10:43:27 CET 2006 - ltinkl@suse.cz + +- fixed #218764 - shell insertion vulnerability in khelpcenter + +------------------------------------------------------------------- +Mon Nov 13 23:50:32 CET 2006 - dmueller@suse.de + +- update optional kwin diff to add custom start script support + (#219020) + +------------------------------------------------------------------- +Mon Nov 13 17:41:17 CET 2006 - dmueller@suse.de + +- update kickoff diff to include button-hover fix + +------------------------------------------------------------------- +Mon Nov 13 13:50:44 CET 2006 - dmueller@suse.de + +- update kickoff diff to include latest fixes (#219709) + +------------------------------------------------------------------- +Fri Nov 10 18:56:21 CET 2006 - llunak@suse.cz + +- fix kompmgr leaks (#197990) + +------------------------------------------------------------------- +Fri Nov 10 15:40:30 CET 2006 - llunak@suse.cz + +- make kompmgr read default settings from /etc/opt/kde3/... . +- fix clickraise with compositing (KDE#128648) +- fix possible infinite loop in kompmgr +- composite manager selection in kompmgr +- fix focus chain when opening links in background + +------------------------------------------------------------------- +Thu Nov 9 14:59:02 CET 2006 - stbinner@suse.de + +- fix Kicker default behavior: don't turn on right hide button +- restore parens for NameAndDescription format in Kicker (#213450) +- remove historic "Provides:"/"Obsoletes:" (#218798) + +------------------------------------------------------------------- +Tue Nov 7 16:28:21 CET 2006 - coolo@suse.de + +- only show "you're running out of disk space" dialog once (#218185) + +------------------------------------------------------------------- +Tue Nov 7 14:22:18 CET 2006 - coolo@suse.de + +- mount USB devices again to find out if they are cameras (#217731) +- mount devices on startup too (#179427) + +------------------------------------------------------------------- +Mon Nov 6 12:06:47 CET 2006 - dmueller@suse.de + +- switch kickoff to style based theming +- improve error message upon media:/ errors (#218179) +- fix kerberos refresh problem in kcheckpass (#203570) + +------------------------------------------------------------------- +Sat Nov 4 19:30:12 CET 2006 - stbinner@suse.de + +- fix build for < 10.2 +- fix drag & drop print with utf-8 name (#194400) +- fix systray flicker (#216669) + +------------------------------------------------------------------- +Fri Nov 3 16:09:00 CET 2006 - dmueller@suse.de + +- readd kickoff kcontrol module + +------------------------------------------------------------------- +Thu Nov 2 15:38:25 CET 2006 - stbinner@suse.de + +- show complete wallpaper name in desktop configuration (#103202) +- let lockout applet call again kdm dialog on left click (#215058) + +------------------------------------------------------------------- +Thu Nov 2 15:22:48 CET 2006 - coolo@suse.de + +- don't crash on 8bit displays (#210209) +- don't pollute log/messages with debug (#217035) +- update kdm config patch to fix root login (#208279) +- update ksmserver patch to fix the layout of the logout confirmation + +------------------------------------------------------------------- +Tue Oct 31 14:55:21 CET 2006 - dmueller@suse.de + +- fix kdesu prompt again (#216563) + +------------------------------------------------------------------- +Tue Oct 31 12:49:22 CET 2006 - coolo@suse.de + +- update 3.5 branch and kickoff diff to fix restart (#216092) + +------------------------------------------------------------------- +Mon Oct 30 16:28:05 CET 2006 - coolo@suse.de + +- don't install your own xdm-xp (#192400) + +------------------------------------------------------------------- +Mon Oct 30 11:05:35 CET 2006 - coolo@suse.de + +- update kdm patch to make it quilt ready +- update kickoff.diff for suspend (#215065) +- update 3.5 branch diff to fix + - "set as wallpaper" does not work (#215286) + +------------------------------------------------------------------- +Sun Oct 29 07:48:47 CET 2006 - aj@suse.de + +- Fix kdm-sysconfig-values.diff patch to fix build. + +------------------------------------------------------------------- +Fri Oct 27 10:30:11 CEST 2006 - dmueller@suse.de + +- update 3_5_BRANCH to fix accessibility beeping +- fix Home not showing up in kickoff favourites +- disable accessibility without kdeaccessibility3 (#213622) +- resort some patches +- KDM provides suspend to disk/RAM (fate #300629) +- umount partitions from USB when suspending (fate #300647) +- beagle support in khelpcenter (fate #301208) + +------------------------------------------------------------------- +Tue Oct 24 18:20:56 CEST 2006 - dmueller@suse.de + +- update WM configuration patch +------------------------------------------------------------------- +Tue Oct 24 10:09:57 CEST 2006 - coolo@suse.de + +- update kdm config patch + +------------------------------------------------------------------- +Mon Oct 23 18:16:14 CEST 2006 - dmueller@suse.de + +- add patch for kdm config update problem (#211874) +- add patch for WM configuration in session (FATE 301137) + +------------------------------------------------------------------- +Mon Oct 23 17:25:49 CEST 2006 - dmueller@suse.de + +- adding more default actions for khotkeys to support laptop + extra keys by default (#210875) + +------------------------------------------------------------------- +Mon Oct 23 10:43:34 CEST 2006 - stbinner@suse.de + +- fix file globbing build +- fix build for SUSE < 10.1 + +------------------------------------------------------------------- +Sun Oct 22 23:42:59 CEST 2006 - llunak@suse.cz + +- remove patches disable-kcm-modules.diff and close-use-yast2.diff + that made clock applet use yast timezone module +- patch KDE clock configuration to integrate better with SUSE + (#213897) +- update 3_5_branch diff to include clock fix for picking up + timzone changes (#213897) +- add patch for desktop lock to use xvkbd on tablet pc's (#213677) + +------------------------------------------------------------------- +Fri Oct 20 19:18:44 CEST 2006 - stbinner@suse.de + +- add reboot option parameter to ksm-server-timed.diff dcop call +- update kickoff.diff from SVN: + * if all hits are in same category show double amount of entries + * open Kerry showing only results of selected category link + * add categories for (k)notes and videos + * change logout/shutdown/restart to confirmation with timer + * implement switch user and reboot to other partition + +------------------------------------------------------------------- +Fri Oct 20 12:53:03 CEST 2006 - stbinner@suse.de + +- let logout applet call timed logout in ksmserver + +------------------------------------------------------------------- +Tue Oct 17 17:22:33 CEST 2006 - llunak@suse.cz + +- updates to the systray ordering patch + +------------------------------------------------------------------- +Mon Oct 16 12:49:25 CEST 2006 - stbinner@suse.de + +- update kickoff.diff from SVN and break it into parts + +------------------------------------------------------------------- +Fri Oct 13 18:50:18 CEST 2006 - llunak@suse.cz + +- add patch for KDE#135250 to 3_5 branch diff +- systray ordering (fate #301154) + +------------------------------------------------------------------- +Thu Oct 12 15:36:32 CEST 2006 - stbinner@suse.de + +- change Home.desktop type to URL (#158487) + +------------------------------------------------------------------- +Tue Oct 10 15:36:15 CEST 2006 - coolo@suse.de + +- add patch to provide a timed logout mode to ksmserver + +------------------------------------------------------------------- +Mon Oct 9 11:53:13 CEST 2006 - coolo@suse.de + +- update 3_5 branch diff to include + - show all user mountable devices in fstab (#204376) + +------------------------------------------------------------------- +Sat Oct 7 20:06:06 CEST 2006 - stbinner@suse.de + +- update to next 3.5.5 release tarball + - changes to Kicker tip showing/switching and systemtray + - give focus to OK button in media notifier + +------------------------------------------------------------------- +Fri Oct 6 14:22:36 CEST 2006 - coolo@suse.de + +- update to next 3.5.5 release tarball + - kdesu fixes + - kicker pager fix +- fix kdm config reader to only reset changes in kdmrc once + +------------------------------------------------------------------- +Wed Oct 4 15:15:35 CEST 2006 - hmacht@suse.de + +- new ksmserver-suspend.diff: + - query HAL for suspend capabilities and trigger sleep via HAL + - dependency to liblazy instead of powersave-devel for > 10.1 +- renname existing ksmserver-suspend.diff to + ksmserver-suspend_legacy-10.1.diff for 10.1 + +------------------------------------------------------------------- +Wed Oct 4 14:43:08 CEST 2006 - coolo@suse.de + +- let kdm start Xgl if configured so + +------------------------------------------------------------------- +Wed Oct 4 11:49:47 CEST 2006 - dmueller@suse.de + +- update 3_5_BRANCH.diff to include kicker minipager fixlets + +------------------------------------------------------------------- +Tue Oct 3 10:14:26 CEST 2006 - stbinner@suse.de + +- update to 3.5.5 release tarball + +------------------------------------------------------------------- +Sun Oct 1 17:48:20 CEST 2006 - stbinner@suse.de + +- update 3_5_BRANCH.diff (random bug fixes) +- update kickoff.diff + +------------------------------------------------------------------- +Wed Sep 27 16:34:49 CEST 2006 - stbinner@suse.de + +- add recommendation to kdebase3-beagle for kdebase3 package + +------------------------------------------------------------------- +Thu Sep 21 19:02:39 CEST 2006 - dmueller@suse.de + +- preliminary viewport pager support +- update compmgr patch to remove opacity slider when no extension + is applicable + +------------------------------------------------------------------- +Thu Sep 21 09:53:40 CEST 2006 - stbinner@suse.de + +- fix build +- kcheckpass-pam, kdm-pam-np: remove pam_devperm.so (Bug #206963) + +------------------------------------------------------------------- +Tue Sep 19 22:58:28 CEST 2006 - dmueller@suse.de + +- use sudo for kdesu + +------------------------------------------------------------------- +Tue Sep 19 09:56:02 CEST 2006 - coolo@suse.de + +- disable low disk space warning for < 10.1 + +------------------------------------------------------------------- +Tue Sep 19 00:40:04 CEST 2006 - dmueller@suse.de + +- update kickoff patch to include numerous bugfixes + +------------------------------------------------------------------- +Mon Sep 18 13:56:22 CEST 2006 - ltinkl@suse.cz + +- fixing low disk space warning dialog (the don't-show-again case) + +------------------------------------------------------------------- +Thu Sep 14 21:31:44 CEST 2006 - coolo@suse.de + +- fixing low disk space calculation for huge volumes (without having + one to test either) + +------------------------------------------------------------------- +Thu Sep 14 09:16:23 CEST 2006 - coolo@suse.de + +- actually check the auth in kcheckpass + +------------------------------------------------------------------- +Tue Sep 12 20:59:30 CEST 2006 - dmueller@suse.de + +- update 3_5_BRANCH to fix kicker hang (#204728) + +------------------------------------------------------------------- +Tue Sep 12 15:28:07 CEST 2006 - stbinner@suse.de + +- update kickoff patch and package plugin to kdebase3-beagle +- add "bnc" web shortcut for Novell Bugzilla (#204724) + +------------------------------------------------------------------- +Tue Sep 12 15:13:17 CEST 2006 - ltinkl@suse.cz + +- implement #199054 - Add low disk space real time monitor + +------------------------------------------------------------------- +Thu Sep 7 16:52:33 CEST 2006 - dmueller@suse.de + +- make kompmr optional + +------------------------------------------------------------------- +Thu Sep 7 12:03:49 CEST 2006 - coolo@suse.de + +- split pam config between xdm and kcheckpass (#133347) + +------------------------------------------------------------------- +Thu Sep 7 09:24:18 CEST 2006 - coolo@suse.de + +- recommend gdb +- update kickoff patch to have larger back button +- update 3_5_BRANCH.diff (random bug fixes) +- back out the konsole bold font change for now (kde #131770) + +------------------------------------------------------------------- +Tue Sep 5 10:00:14 CEST 2006 - stbinner@suse.de + +- correcting kdm patches for older distributions + +------------------------------------------------------------------- +Mon Sep 4 14:48:46 CEST 2006 - llunak@suse.cz + +- Add patches with Xinerama improvements + +------------------------------------------------------------------- +Sun Sep 3 08:59:45 CEST 2006 - stbinner@suse.de + +- fix build on older distributions + +------------------------------------------------------------------- +Fri Sep 1 14:52:22 CEST 2006 - coolo@suse.de + +- fixed layout of the back button +- updated to 3_5_BRANCH to fix kwin alt-tab ugliness +- move kdmrc out of /etc/opt/kde3 if found an old one in /opt/kde3 + +------------------------------------------------------------------- +Fri Sep 1 07:29:42 CEST 2006 - coolo@suse.de + +- adding SUSE menu + +------------------------------------------------------------------- +Thu Aug 31 13:56:43 CEST 2006 - stbinner@suse.de + +- add man pages for fileshareset and kcheckpass (#187356) + +------------------------------------------------------------------- +Mon Aug 28 13:30:59 CEST 2006 - stbinner@suse.de + +- switch lock and logout order in Kicker lock/logout applet + +------------------------------------------------------------------- +Fri Aug 25 21:34:59 CEST 2006 - coolo@suse.de + +- fixing the order where it matters + +------------------------------------------------------------------- +Fri Aug 25 14:36:30 CEST 2006 - coolo@suse.de + +- fix more default values for kdmrc + +------------------------------------------------------------------- +Wed Aug 23 17:46:14 CEST 2006 - coolo@suse.de + +- rework the way kdmrc is handled (rather experimental): + - the KDE defaults are changed right in the build where the value + is static (kdm-fix-default-kdmrc.diff) + - the KDE kdmrc is the one used by kdm and kcontrol + - the default values are overwritten by values in + (/var/adm/kdm/kdmrc.syscnfig generated by kdm_config) + - Fixes #163954 + - drops a SuSEconfig + +------------------------------------------------------------------- +Wed Aug 23 11:01:33 CEST 2006 - stbinner@suse.de + +- update 3_5_BRANCH.diff (mostly Konqueror, Kicker and Kwin fixes) + +------------------------------------------------------------------- +Thu Aug 17 14:31:25 CEST 2006 - dmueller@suse.de + +- add SuSEconfig.kdm3 script from the theme flavour package + (#181572) + +------------------------------------------------------------------- +Thu Aug 3 17:45:35 CEST 2006 - stbinner@suse.de + +- adapt to new X.org paths + +------------------------------------------------------------------- +Sun Jul 23 21:49:02 CEST 2006 - coolo@suse.de + +- update to KDE 3.5.4: + * support X-KDE-Protocols in konqi RMB menu + * several Kate fixes + * Konsole: miscellanous speedups and bug fixes + * media manager: several fixes and HAL support merged upstream + * security: add various missing return value checks + +------------------------------------------------------------------- +Sun Jul 9 20:50:29 CEST 2006 - stbinner@suse.de + +- fix "kdeeject --help" (#190836) + +------------------------------------------------------------------- +Sat Jun 24 21:44:58 CEST 2006 - schwab@suse.de + +- Use long long for parsing net stats to support more than 4G. + +------------------------------------------------------------------- +Wed Jun 21 18:44:29 CEST 2006 - stbinner@suse.de + +- update branch diff and media-iPod.diff to fix iPod support + +------------------------------------------------------------------- +Mon Jun 19 21:24:08 CEST 2006 - stbinner@suse.de + +- fix build + +------------------------------------------------------------------- +Mon Jun 19 15:34:16 CEST 2006 - coolo@suse.de + +- update 3_5_BRANCH.diff again for several bug fixes (KDE bug reports + 47242 128754 117623 116209 55795) + +------------------------------------------------------------------- +Mon Jun 19 08:21:22 CEST 2006 - coolo@suse.de + +- don't translate hidden uninstall.desktop files + +------------------------------------------------------------------- +Fri Jun 16 12:41:47 CEST 2006 - coolo@suse.de + +- use sax.mo for translating xkb options (#183672) + +------------------------------------------------------------------- +Wed Jun 14 16:56:43 CEST 2006 - coolo@suse.de + +- update 3_5_BRANCH.diff and media_suse.diff to follow the upstream + merge of our media:/ changes + +------------------------------------------------------------------- +Mon Jun 12 17:11:03 CEST 2006 - dmueller@suse.de + +- fix ~/.dmrc symlink attack (#180704, CVE-2006-2449) + +------------------------------------------------------------------- +Mon Jun 12 15:19:14 CEST 2006 - stbinner@suse.de + +- update 3_5_BRANCH.diff to fix build (OpenEXR configure check) +- obey chosen k menu item format when collapsing menus (#183244) + +------------------------------------------------------------------- +Tue Jun 6 22:03:45 CEST 2006 - stbinner@suse.de + +- add 3_5_BRANCH.diff to fix screensaver not starting (#181122) + +------------------------------------------------------------------- +Tue May 30 17:06:14 CEST 2006 - stbinner@suse.de + +- don't enforce sorting of menu entries (#160259) + +------------------------------------------------------------------- +Fri May 26 17:18:32 CEST 2006 - stbinner@suse.de + +- new KDE 3.5.3 tarball (fix systram-tray related Kicker crashes) + +------------------------------------------------------------------- +Wed May 24 09:56:43 CEST 2006 - stbinner@suse.de + +- update to KDE 3.5.3 + * KDE startup reordered in order to improve startup time + * several fixes to Kicker, Konsole, Kate, Konqueror and kwin + +------------------------------------------------------------------- +Tue May 23 17:14:56 CEST 2006 - adrian@suse.de + +- fix build for the openSUSE build service + +------------------------------------------------------------------- +Fri May 19 10:15:30 CEST 2006 - stbinner@suse.de + +- fix supplementary build + +------------------------------------------------------------------- +Mon May 15 17:14:14 CEST 2006 - stbinner@suse.de + +- update to KDE 3.5.2 and 3_5_BRANCH.diff + * Klipper + - Handle URLs as URLs and not as Text (bug #121114) + - Prevent crashes caused by corrupted history (bug #109161) + - XFixes support (especially helps with broken clipboard + implementations of some non-KDE applications) (bug #101087) + - Images are ignored by default, add 'IgnoreImages=false' to + '[General]' in klipperrc (bug #109032) + - Avoid repeated action popup with the same URL with some + non-KDE applications with broken clipboard implementations + * Konsole + - Correct issue where history size is unlimited when dealing + with History options in profiles (bug #120046) + - Correctly set Tab bar when set to Dynamic Hide after + session restore (bug #121688) + * Country settings + - Fix short date format for Switzerland (bug #122574) + - Fix address format (especially P.O. Box) for Switzerland + * KSysGuard + - Show the sensors with values of more than two digits + correctly in the applet + * Kicker + - Connect the applications to systray correctly on startup + - Panels properly reserve space at screen edges even for + differently sized Xinerama screens (bug #94470) + * Konqueror + - Resolve symlinks only on the desktop (bug #63014) + * KWin + - Added new window-specific rules for OpenOffice.org, XV and + Mozilla family applications for turning off focus stealing + prevention, as these applications don't work well with it + - Reverted a workaround that as a side-effect had broken + systray docking of some applications (bug #100177) + - Each virtual desktop has a separate focus chain (bug #33701) + * KDesktop + - Fixed stacking of some dialogs (bug #89951,bug #113556) +------------------------------------------------------------------- +Wed May 10 16:19:01 CEST 2006 - coolo@suse.de + +- line break if the message is too long for the screen (#157237) + +------------------------------------------------------------------- +Tue Apr 25 19:22:06 CEST 2006 - wstephenson@suse.de + +- Use a user writable directory for user indexing (#165308) + +------------------------------------------------------------------- +Mon Apr 24 13:24:18 CEST 2006 - stbinner@suse.de + +- pull libXt into plugin scan to find all NS plugins (#140485) + +------------------------------------------------------------------- +Fri Apr 21 17:04:13 CEST 2006 - stbinner@suse.de + +- don't show errors in kcm_kio without kdenetwork3-lan (#165318) + +------------------------------------------------------------------- +Mon Apr 17 18:07:32 CEST 2006 - ltinkl@suse.cz + +- fix "KDE Information Center fails to provide log info for samba" + (#98763) + +------------------------------------------------------------------- +Tue Apr 11 10:48:45 CEST 2006 - coolo@suse.de + +- update media_hal.diff to make mounting floppies work (#164488) + +------------------------------------------------------------------- +Mon Apr 10 13:22:01 CEST 2006 - wstephenson@suse.de + +- Fix failure to open Sound kcmodule (#164768) + +------------------------------------------------------------------- +Sat Apr 8 21:25:25 CEST 2006 - schwab@suse.de + +- Fix misplaced %endif [#58820]. + +------------------------------------------------------------------- +Wed Apr 5 12:19:14 CEST 2006 - dmueller@suse.de + +- update hinting default to full (#157441) + +------------------------------------------------------------------- +Mon Apr 3 19:00:25 CEST 2006 - stbinner@suse.de + +- fix possible Konsole crash on session saving/logout (#147286) + +------------------------------------------------------------------- +Mon Apr 3 14:34:35 CEST 2006 - stbinner@suse.de + +- don't remove obsolete from list of known kdesu options (#162790) +- fix panel configuration to not always ask to save (#157821) +- add missing kdm Provides: for transition from NLD9 (#162511) + +------------------------------------------------------------------- +Fri Mar 31 17:24:26 CEST 2006 - stbinner@suse.de + +- update media_hal.diff to make it possible that applications like + k3b can stop automounting (#160654) + +------------------------------------------------------------------- +Tue Mar 28 17:46:23 CEST 2006 - coolo@suse.de + +- update media_hal.diff to handle fstab entries more correctly + +------------------------------------------------------------------- +Thu Mar 23 10:34:38 CET 2006 - stbinner@suse.de + +- add patch to fix jumpy taskbar size (#156621) +- update media_hal.diff to fix setting of mount properties for a + removable device (#160002) and respect hal lockdown (#153241) +- fix kded application launch hang due to NFS (#160292) + +------------------------------------------------------------------- +Tue Mar 21 11:14:57 CET 2006 - stbinner@suse.de + +- make kdeeject work again (#159310) + +------------------------------------------------------------------- +Mon Mar 20 10:52:45 CET 2006 - stbinner@suse.de + +- remove "Keep password" checkbox from kdesu (#159224) + +------------------------------------------------------------------- +Sat Mar 18 22:26:30 CET 2006 - coolo@suse.de + +- update kicker to more changes to fix crashes on logout + (#155339) + +------------------------------------------------------------------- +Thu Mar 16 18:01:05 CET 2006 - dmueller@suse.de + +- fix klipper actions listing firefox twice +- fix klipper not linking against Xfixes +- fix klipper handling urls as plain text (KDE #121114) +- fix Xfixes detection + +------------------------------------------------------------------- +Mon Mar 13 19:00:07 CET 2006 - wstephenson@suse.de + +- make offline mode for accessible for konqueror + +------------------------------------------------------------------- +Mon Mar 13 15:13:11 CET 2006 - stbinner@suse.de + +- allow to hide wallpapers from configuration (#156170) +- install startkde.suse.sh only for older distributions + +------------------------------------------------------------------- +Sat Mar 11 14:36:23 CET 2006 - coolo@suse.de + +- hide kjobviewer startup info on quit (#156821) + +------------------------------------------------------------------- +Thu Mar 9 13:02:33 CET 2006 - coolo@suse.de + +- update kicker to latest changes to fix crashes on logout (#155339, + http://bugs.kde.org/121430) + +------------------------------------------------------------------- +Wed Mar 8 08:39:40 CET 2006 - dmueller@suse.de + +- fix permissions of README (#155946) +- make KDM_SHUTDOWN sysconfig migration complete + +------------------------------------------------------------------- +Tue Mar 7 10:59:00 CET 2006 - stbinner@suse.de + +- update media_hal.diff to fix mounting (#154652) +- give mini cli dialog parent to fix #155355 +- add %post for 10.1 to migrate KDM_SHUTDOWN (#148468) +- don't try to grep non-existing file in kdm %post (#154302) +- don't try to run artsshell on shutdown if not installed +- let kdm ignore unresolvable hosts in Xaccess (#135714) + +------------------------------------------------------------------- +Mon Mar 6 16:17:13 CET 2006 - dmueller@suse.de + +- Add XV to focus-stealing-prevention blacklist (#155250) + +------------------------------------------------------------------- +Mon Mar 6 08:23:40 CET 2006 - hpj@suse.de + +- Use susehelp to show docs. This enables preprocessing that + allows khelpcenter to show GNOME documentation. + +------------------------------------------------------------------- +Wed Mar 1 19:32:30 CET 2006 - stbinner@suse.de + +- unbreak Kicker menus when user-arranged (#151492) + +------------------------------------------------------------------- +Tue Feb 28 10:38:04 CET 2006 - stbinner@suse.de + +- no "Recommends:" for older distributions + +------------------------------------------------------------------- +Mon Feb 27 16:05:35 CET 2006 - coolo@suse.de + +- more files to translate (#144788) + +------------------------------------------------------------------- +Mon Feb 27 10:51:56 CET 2006 - coolo@suse.de + +- only use preload if it's the 10.1 version (#153543) + +------------------------------------------------------------------- +Fri Feb 24 21:36:02 CET 2006 - ltinkl@suse.cz + +- fix keyboard navigation in Theme Manager (#148299) + +------------------------------------------------------------------- +Tue Feb 21 16:17:23 CET 2006 - dmueller@suse.de + +- downgrade kdelibs3_doc require to recommends (#152504) + +------------------------------------------------------------------- +Mon Feb 20 19:14:40 CET 2006 - dmueller@suse.de + +- fix ksysguard killing hidden processes (#151804) + +------------------------------------------------------------------- +Fri Feb 17 14:25:10 CET 2006 - dmueller@suse.de + +- remove spec file sections for SL < 9.2 + +------------------------------------------------------------------- +Fri Feb 17 11:11:30 CET 2006 - coolo@suse.de + +- fix crash in HAL backend on stick removal (#151742) + +------------------------------------------------------------------- +Thu Feb 16 10:14:26 CET 2006 - dmueller@suse.de + +- add $HOME/.gtkrc-2.0 to GTK2_RC_FILES (#151344) + +------------------------------------------------------------------- +Wed Feb 15 16:57:42 CET 2006 - coolo@suse.de + +- update media_hal.diff to fix unmount (#149472) + +------------------------------------------------------------------- +Wed Feb 15 09:06:39 CET 2006 - stbinner@suse.de + +- fix %suse_update_desktop_file parameter order +- add intermediate kdebase3-khotkeys package to provides/obsoletes + +------------------------------------------------------------------- +Tue Feb 14 15:17:10 CET 2006 - llunak@suse.cz + +- discard old ksycoca during startup if rpm database has changed +- fix showing menu entries in short-menus.diff +- khelpcenter indexing fixes (#146618) + +------------------------------------------------------------------- +Fri Feb 10 11:45:40 CET 2006 - stbinner@suse.de + +- disable kwin focus stealing prevention for Mozilla family apps + and OpenOffice.org by default (#115417) + +------------------------------------------------------------------- +Thu Feb 9 11:55:34 CET 2006 - coolo@suse.de + +- adapt to new way of preload (#147673) + +------------------------------------------------------------------- +Wed Feb 8 15:53:05 CET 2006 - coolo@suse.de + +- reinit pam sessions as the pam handle stores user specific data + (#144804) + +------------------------------------------------------------------- +Tue Feb 7 13:46:57 CET 2006 - stbinner@suse.de + +- add "most common nsplugin crash" fix (KDE #121501) +- fix Konsole history saving being incomplete (KDE #116351) + +------------------------------------------------------------------- +Mon Feb 6 12:01:33 CET 2006 - dmueller@suse.de + +- move khotkeys-arts to kdebase3-extra +- rediff media_hal.diff to fix crash on logout + +------------------------------------------------------------------- +Mon Feb 6 01:35:13 CET 2006 - ro@suse.de + +- fix build for < 10.1 + +------------------------------------------------------------------- +Fri Feb 3 16:16:50 CET 2006 - coolo@suse.de + +- fix kicker menu extension (#147941) + +------------------------------------------------------------------- +Fri Feb 3 12:14:37 CET 2006 - coolo@suse.de + +- add patches to KDE SVN done by SUSE engineers +- add patch to fix severe problem with keyboard chooser (KDE #121087) + +------------------------------------------------------------------- +Fri Feb 3 12:08:33 CET 2006 - coolo@suse.de + +- Fix #74524 and merge kicker-fix-alphabetical into short-menus + (by Lubos) + +------------------------------------------------------------------- +Thu Feb 2 19:19:29 CET 2006 - coolo@suse.de + +- updating media patch as we fixed problems + +------------------------------------------------------------------- +Thu Feb 2 14:58:35 CET 2006 - coolo@suse.de + +- remove logrotate script (#144544) + +------------------------------------------------------------------- +Wed Feb 1 16:50:16 CET 2006 - dmueller@suse.de + +- fix kicker crashes caused by kicker-fix-alphabetical.diff +- add xfixes support to klipper + +------------------------------------------------------------------- +Wed Feb 1 16:15:19 CET 2006 - coolo@suse.de + +- fix wallpapers path + +------------------------------------------------------------------- +Mon Jan 30 18:22:25 CET 2006 - coolo@suse.de + +- make xdm pam service future proof (suggestion by kukuk) + +------------------------------------------------------------------- +Mon Jan 30 14:27:19 CET 2006 - stbinner@suse.de + +- update media_hal.diff +- drop workaround-xterm-size-bug.diff + +------------------------------------------------------------------- +Mon Jan 30 11:44:06 CET 2006 - stbinner@suse.de + +- update to 3.5 branch + +------------------------------------------------------------------- +Sun Jan 29 22:19:40 CET 2006 - coolo@suse.de + +- fix build + +------------------------------------------------------------------- +Sun Jan 29 15:21:26 CET 2006 - aj@suse.de + +- Require dbus-1-qt3-devel for build. + +------------------------------------------------------------------- +Sat Jan 28 16:08:11 CET 2006 - coolo@suse.de + +- fix kdm colors + +------------------------------------------------------------------- +Sat Jan 28 15:17:06 CET 2006 - coolo@suse.de + +- move wallpapers to /usr/share/wallpapers + +------------------------------------------------------------------- +Fri Jan 27 18:09:47 CET 2006 - coolo@suse.de + +- fix two media handling bugs + +------------------------------------------------------------------- +Fri Jan 27 11:33:35 CET 2006 - coolo@suse.de + +- samba maintainers changed their mind + +------------------------------------------------------------------- +Wed Jan 25 22:00:05 CET 2006 - coolo@suse.de + +- update to 3.5 branch for smb integration fix +- add Lubos' splash screen improvment patch +- update media handling patch +- add patch to support old plugger features + +------------------------------------------------------------------- +Wed Jan 25 21:33:03 CET 2006 - mls@suse.de + +- converted neededforbuild to BuildRequires + +------------------------------------------------------------------- +Mon Jan 23 22:36:31 CET 2006 - coolo@suse.de + +- wrote mount plugin for subfs replacement + +------------------------------------------------------------------- +Mon Jan 23 18:15:28 CET 2006 - stbinner@suse.de + +- fix alphabetic sorting of start menu entries (#143351) + +------------------------------------------------------------------- +Mon Jan 23 16:08:22 CET 2006 - coolo@suse.de + +- translate some more files + +------------------------------------------------------------------- +Sun Jan 22 13:34:23 CET 2006 - stbinner@suse.de + +- fix Bug 117636 - No printer entry in the control center + +------------------------------------------------------------------- +Sat Jan 21 20:25:30 CET 2006 - coolo@suse.de + +- update to KDE 3.5.1 +- use HAL in media:/ instead of subfs + +------------------------------------------------------------------- +Mon Jan 16 17:28:44 CET 2006 - wstephenson@suse.de + +- Add KHelpCenter rellinks support +- Don't prompt the user to create indices, now automatic. + +------------------------------------------------------------------- +Thu Jan 12 16:16:47 CET 2006 - stbinner@suse.de + +- Rename "Control Center" to "Personal Settings" +- Have "My System" and "Recent Documents" by default in kmenu + +------------------------------------------------------------------- +Tue Jan 10 09:08:57 CET 2006 - coolo@suse.de + +- adding a domain-label to kdm themes + +------------------------------------------------------------------- +Mon Jan 9 12:26:27 CET 2006 - stbinner@suse.de + +- update to 3_5_BRANCH +- disable kxkb_variants_3_5.diff (same functionality upstream) +- remove khotkeys.patch (committed upstream) + +------------------------------------------------------------------- +Sat Jan 7 22:55:24 CET 2006 - stbinner@suse.de + +- update to 3_5_BRANCH.diff before the first Beta + +------------------------------------------------------------------- +Thu Jan 5 15:17:51 CET 2006 - llunak@suse.cz + +- update performance patch, use same names like in kdebase-SuSE +- less verbal kdesu prompt (feature #4135) + +------------------------------------------------------------------- +Mon Jan 2 13:56:48 CET 2006 - ltinkl@suse.cz + +- fix KDE screen lock missing language switcher (#133244) + +------------------------------------------------------------------- +Fri Dec 23 11:41:01 CET 2005 - stbinner@suse.de + +- updated 3_5_BRANCH.diff (kdm winbind greeter etc.) +- updated kdm-make_it_cool.diff + +------------------------------------------------------------------- +Wed Dec 21 13:18:25 CET 2005 - stbinner@suse.de + +- fix build for released distributions + +------------------------------------------------------------------- +Mon Dec 19 11:58:53 CET 2005 - dmueller@suse.de + +- use dbus-1-qt3 + +------------------------------------------------------------------- +Wed Dec 14 14:04:32 CET 2005 - lmuelle@suse.de + +- Package fileshareset and filesharelist as a separate package named fileshare + for post 10.0 products and use %_bindir as install location. + +------------------------------------------------------------------- +Sun Dec 4 23:53:06 CET 2005 - lmuelle@suse.de + +- Revert libsmbclient renameing. + +------------------------------------------------------------------- +Fri Dec 2 11:38:19 CET 2005 - coolo@suse.de + +- update to 3.5 branch and adapt the patches accordingly +- add two more patches of Lubos + +------------------------------------------------------------------- +Tue Nov 29 14:17:40 CET 2005 - coolo@suse.de + +- uncommenting kxkb patch +- remove support for outdated suse versions +- remove the khotkeys package for now + +------------------------------------------------------------------- +Mon Nov 28 13:26:02 CET 2005 - ltinkl@suse.cz + +- update kxkb to fix KDE bug #116619 + +------------------------------------------------------------------- +Sun Nov 27 18:09:08 CET 2005 - coolo@suse.de + +- fix patch conflict + +------------------------------------------------------------------- +Sat Nov 26 10:09:51 CET 2005 - coolo@suse.de + +- update to version 3.5 + +------------------------------------------------------------------- +Fri Nov 25 11:47:09 CET 2005 - stbinner@suse.de + +- fix initial kmenu pos and last/most used section losing icons + +------------------------------------------------------------------- +Wed Nov 23 20:37:54 CET 2005 - coolo@suse.de + +- fix repainting + +------------------------------------------------------------------- +Tue Nov 22 21:52:24 CET 2005 - coolo@suse.de + +- add tooltips to the buttons as suggested by Eva + +------------------------------------------------------------------- +Mon Nov 21 15:25:27 CET 2005 - stbinner@suse.de + +- update to version 3.5 RC 2 + +------------------------------------------------------------------- +Mon Nov 21 11:12:28 CET 2005 - dmueller@suse.de + +- remove xorg-x11 dependency for SL < 9.2 + +------------------------------------------------------------------- +Fri Nov 18 08:45:51 CET 2005 - stbinner@suse.de + +- fix build after last patch on older distributions + +------------------------------------------------------------------- +Thu Nov 17 16:24:55 CET 2005 - stbinner@suse.de + +- fix kmenu search freezing computer for some seconds (#133593) + +------------------------------------------------------------------- +Mon Nov 14 22:41:14 CET 2005 - lmuelle@suse.de + +- Use samba-libs instead of libsmbclient. + +------------------------------------------------------------------- +Thu Nov 10 12:03:25 CET 2005 - stbinner@suse.de + +- update to version 3.5 RC 1 + +------------------------------------------------------------------- +Sat Nov 5 00:33:54 CET 2005 - coolo@suse.de + +- add patches to improve startup performance + +------------------------------------------------------------------- +Thu Nov 3 10:54:17 CET 2005 - coolo@suse.de + +- fix suseplugger integration to not create fork bombs + +------------------------------------------------------------------- +Mon Oct 31 11:50:24 CET 2005 - coolo@suse.de + +- update kdm patches + +------------------------------------------------------------------- +Mon Oct 31 09:43:52 CET 2005 - coolo@suse.de + +- update to 3.5 branch +- call suseplugger for unhandled UDIs + +------------------------------------------------------------------- +Thu Oct 20 13:43:18 CEST 2005 - ltinkl@suse.cz + +- update kstartupconfig for KDE 3.5 (from Seli) +- fixed window decorations messed up with maximized windows (#120027) +- implemented support for configuring multiple keyboard variants in kxkb (#120395) + +------------------------------------------------------------------- +Wed Oct 19 13:48:43 CEST 2005 - stbinner@suse.de + +- readd still needed parts of improve-panelservicemenu-geticonset.diff + +------------------------------------------------------------------- +Thu Oct 13 16:41:08 CEST 2005 - dmueller@suse.de + +- fix build +- disable accessibility feature if kdeaccessibility is not installed + +------------------------------------------------------------------- +Wed Oct 12 13:34:12 CEST 2005 - stbinner@suse.de + +- update to version 3.4.92 (3.5 Beta 2) + +------------------------------------------------------------------- +Tue Oct 11 21:11:14 CEST 2005 - stbinner@suse.de + +- add patch to teach mini-CLI the "lock" command + +------------------------------------------------------------------- +Fri Oct 7 17:56:00 CEST 2005 - coolo@suse.de + +- update to 3.5 branch to get some testing for media:/ changes + +------------------------------------------------------------------- +Sun Oct 2 10:22:57 CEST 2005 - stbinner@suse.de + +- in collapsed k menu group use category icon if entry has none + +------------------------------------------------------------------- +Fri Sep 30 17:45:12 CEST 2005 - stbinner@suse.de + +- fix wrongly upgraded patch (short-menus.diff) + +------------------------------------------------------------------- +Thu Sep 29 11:06:07 CEST 2005 - stbinner@suse.de + +- remove gdm support from kdmlib for 9.3-x86_64 to fix compilation + +------------------------------------------------------------------- +Wed Sep 28 18:36:49 CEST 2005 - stbinner@suse.de + +- never show broken looking icons in kicker start menu +- show nice disabled icons for smaller kicker menu icon sizes + +------------------------------------------------------------------- +Mon Sep 26 14:12:46 CEST 2005 - stbinner@suse.de + +- fix compilation on 9.2-x86_64, don't use Xfixes + +------------------------------------------------------------------- +Mon Sep 26 13:03:24 CEST 2005 - dmueller@suse.de + +- add 3_5_BRANCH.diff and try to fix fileconflicts + +------------------------------------------------------------------- +Mon Sep 26 09:32:45 CEST 2005 - coolo@suse.de + +- updating info about lame as given by legal + +------------------------------------------------------------------- +Sat Sep 24 16:08:27 CEST 2005 - stbinner@suse.de + +- fix dependencies of khotkeys package for <10.0 + +------------------------------------------------------------------- +Tue Sep 20 18:29:49 CEST 2005 - stbinner@suse.de + +- update to version 3.4.91 (3.5 Beta) + +------------------------------------------------------------------- +Wed Sep 14 22:54:52 CEST 2005 - dmueller@suse.de + +- fix kicker crashing on logout (#117100) + +------------------------------------------------------------------- +Wed Sep 14 08:46:39 CEST 2005 - dmueller@suse.de + +- drop kdelibs3-devel-doc dependendy + +------------------------------------------------------------------- +Fri Sep 9 10:46:20 CEST 2005 - coolo@suse.de + +- fix grubonce support (#106037) + +------------------------------------------------------------------- +Thu Sep 8 13:47:18 CEST 2005 - dmueller@suse.de + +- fix for theme-resetting from Lubos (#114951) + +------------------------------------------------------------------- +Wed Sep 7 20:05:46 CEST 2005 - dmueller@suse.de + +- fix deletion of folders via media:/ (#113583) + +------------------------------------------------------------------- +Tue Sep 6 21:58:30 CEST 2005 - dmueller@suse.de + +- add patch to smb:// to support kerberos authentication (#115245) + +------------------------------------------------------------------- +Tue Sep 6 21:37:46 CEST 2005 - coolo@suse.de + +- let the other init scripts do some IO too, so they don't run + into timeouts + +------------------------------------------------------------------- +Tue Sep 6 15:43:24 CEST 2005 - stbinner@suse.de + +- Fix quick launcher duplicating moved items (#113879) + +------------------------------------------------------------------- +Tue Sep 6 13:31:23 CEST 2005 - coolo@suse.de + +- be a bit more careful with disabling unmount for media (#80313) + +------------------------------------------------------------------- +Mon Sep 5 10:20:37 CEST 2005 - dmueller@suse.de + +- apply fixes for kcheckpass (CAN-2005-2494, #66218) + +------------------------------------------------------------------- +Mon Aug 29 16:03:09 CEST 2005 - coolo@suse.de + +- work around the xterm sizing bug again as we did on 9.2 (#61153) + +------------------------------------------------------------------- +Thu Aug 25 18:11:47 CEST 2005 - coolo@suse.de + +- fixing the screensaver picking + +------------------------------------------------------------------- +Tue Aug 23 17:52:58 CEST 2005 - coolo@suse.de + +- use better defaults for random screensaver +- use the new preload + +------------------------------------------------------------------- +Mon Aug 22 17:24:30 CEST 2005 - llunak@suse.cz + +- Use --embed-proxy instead of --embed for kcmshell with kcmyast, + so that there are no kcmshell buttons with embedded yast. + +------------------------------------------------------------------- +Mon Aug 22 16:16:04 CEST 2005 - llunak@suse.cz + +- Don't start kaccess unconditionally. + +------------------------------------------------------------------- +Mon Aug 22 15:24:42 CEST 2005 - ro@suse.de + +- fixed file list + +------------------------------------------------------------------- +Mon Aug 22 11:25:34 CEST 2005 - coolo@suse.de + +- fix file conflict + +------------------------------------------------------------------- +Sun Aug 21 16:22:30 CEST 2005 - coolo@suse.de + +- fix the kdm change for incomplete themes + +------------------------------------------------------------------- +Sat Aug 20 18:21:45 CEST 2005 - coolo@suse.de + +- trying to please Rudi's impatience (again saving + share holder value) +- some icons massage + +------------------------------------------------------------------- +Fri Aug 19 21:03:12 CEST 2005 - coolo@suse.de + +- update to 3.4 branch +- trying to fix floppy support + +------------------------------------------------------------------- +Thu Aug 18 14:03:25 CEST 2005 - coolo@suse.de + +- kdm sets config variable for xauth (#98627) + +------------------------------------------------------------------- +Tue Aug 16 10:28:44 CEST 2005 - coolo@suse.de + +- let kdm search in the global path even without SUSE theming + +------------------------------------------------------------------- +Mon Aug 15 10:36:49 CEST 2005 - coolo@suse.de + +- update for kdm's not themed user list (#95862) + +------------------------------------------------------------------- +Fri Aug 12 18:34:57 CEST 2005 - dmueller@suse.de + +- add dependency on xorg-x11 (bug #81848) + +------------------------------------------------------------------- +Thu Aug 11 16:39:47 CEST 2005 - llunak@suse.cz + +- Fix the k-menu search patch. + +------------------------------------------------------------------- +Thu Aug 11 12:26:51 CEST 2005 - werner@suse.de + +- Add /home to the nfs check of earlykdm (bug #104052) + +------------------------------------------------------------------- +Wed Aug 10 21:06:50 CEST 2005 - coolo@suse.de + +- update for the media slave (#102564) + +------------------------------------------------------------------- +Tue Aug 9 16:12:27 CEST 2005 - llunak@suse.cz + +- Don't show flags only in the language control module, + otherwise enable them again. + +------------------------------------------------------------------- +Fri Aug 5 11:44:44 CEST 2005 - coolo@suse.de + +- fix kdm to follow the aspect ratio of logos and dots +- some proofreadings + +------------------------------------------------------------------- +Wed Jul 27 11:09:50 CEST 2005 - coolo@suse.de + +- redone kdm patches + +------------------------------------------------------------------- +Tue Jul 26 13:13:09 CEST 2005 - coolo@suse.de + +- new patch for new powersave API + +------------------------------------------------------------------- +Fri Jul 22 14:24:23 CEST 2005 - coolo@suse.de + +- update to version 3.4.2 + +------------------------------------------------------------------- +Tue Jul 19 17:28:14 CEST 2005 - coolo@suse.de + +- Use double-buffered visual also for the screensaver kcm module + (#96605) + +------------------------------------------------------------------- +Sat Jul 16 13:55:53 CEST 2005 - dmueller@suse.de + +- fix typo in -fpie patch + +------------------------------------------------------------------- +Fri Jul 15 14:12:39 CEST 2005 - dmueller@suse.de + +- compile kcheckpass with -fPIE/pie for SL > 9.3 +- compile kdesud with -fpie/pie as well. + +------------------------------------------------------------------- +Wed Jul 6 02:50:35 CEST 2005 - dmueller@suse.de + +- add buffer overflow fix for genkdmconf + +------------------------------------------------------------------- +Fri Jun 24 16:22:46 CEST 2005 - coolo@suse.de + +- fix GL xscreensavers + +------------------------------------------------------------------- +Tue Jun 14 09:38:38 CEST 2005 - coolo@suse.de + +- fix build + +------------------------------------------------------------------- +Mon Jun 13 16:40:15 CEST 2005 - coolo@suse.de + +- another update for kdm + +------------------------------------------------------------------- +Tue Jun 7 14:42:12 CEST 2005 - coolo@suse.de + +- update to 3.4 branch, kdm to 3.5 branch +- add my chances to kdm for more advanced user list + +------------------------------------------------------------------- +Mon Jun 6 10:51:03 CEST 2005 - schwab@suse.de + +- Fix completely stupid and embarrassing CD polling code. + +------------------------------------------------------------------- +Thu Jun 2 11:18:34 CEST 2005 - adrian@suse.de + +- apply k-menu search patch from Fred Schaettgen for post 9.3 + +------------------------------------------------------------------- +Tue May 24 14:09:29 CEST 2005 - adrian@suse.de + +- update to version 3.4.1 + +------------------------------------------------------------------- +Mon May 23 11:22:11 CEST 2005 - adrian@suse.de + +- remove flag images for political reasons (#72452) + +------------------------------------------------------------------- +Tue May 17 11:39:40 CEST 2005 - adrian@suse.de + +- remove dummy TESTME enviroment variable + +------------------------------------------------------------------- +Thu Apr 21 14:30:37 CEST 2005 - adrian@suse.de + +- apply patch with experimental HAL 0.5 support from cvs HEAD + +------------------------------------------------------------------- +Thu Apr 14 17:17:06 CEST 2005 - sbrabec@suse.cz + +- Added audiofile-devel to neededforbuild. + +------------------------------------------------------------------- +Wed Apr 13 12:55:17 CEST 2005 - adrian@suse.de + +- update to current 3_4_BRANCH + * contains konqueror crash fix, when compiled with gcc 4 + +------------------------------------------------------------------- +Mon Apr 4 14:05:15 CEST 2005 - adrian@suse.de + +- do not reload kdm in logrotate (#75700) + +------------------------------------------------------------------- +Mon Apr 4 13:58:12 CEST 2005 - adrian@suse.de + +- fix build with gcc 4 + +------------------------------------------------------------------- +Fri Apr 1 15:14:47 CEST 2005 - adrian@suse.de + +- let libkonq use kdemm framework instead of arts for post 9.3 + +------------------------------------------------------------------- +Sun Mar 27 00:51:17 CET 2005 - schwab@suse.de + +- Fix crash in kwin. + +------------------------------------------------------------------- +Wed Mar 23 15:08:59 CET 2005 - coolo@suse.de + +- fix typo (#74357) + +------------------------------------------------------------------- +Tue Mar 22 18:40:00 CET 2005 - adrian@suse.de + +- avoid double entries from non-visible services in konqueror menu + +------------------------------------------------------------------- +Tue Mar 22 17:22:31 CET 2005 - adrian@suse.de + +- fix kicker layout, after adding items (#71831, by Waldo) + +------------------------------------------------------------------- +Tue Mar 22 15:18:13 CET 2005 - adrian@suse.de + +- create .kde and .kde/share with 0700 permissions again +- hide umount option in media slave for subfs systems + +------------------------------------------------------------------- +Mon Mar 21 17:19:42 CET 2005 - adrian@suse.de + +- move old kdmrc configurations away to avoid problems on + login time (#74072) + +------------------------------------------------------------------- +Sat Mar 19 13:52:49 CET 2005 - adrian@suse.de + +- hide menu entries below gnome, since gnome does require KDE + installed currently (#73539) +- move kthememgr icon to main package (#67133) + +------------------------------------------------------------------- +Fri Mar 18 15:09:02 CET 2005 - adrian@suse.de + +- make ksplashx configurable (by Lubos) + +------------------------------------------------------------------- +Wed Mar 16 21:19:42 CET 2005 - adrian@suse.de + +- fix redirection to kio_ipod + +------------------------------------------------------------------- +Wed Mar 16 08:53:11 CET 2005 - adrian@suse.de + +- fix OnlyShowIn typo in kcontrol.desktop (#72029) +- nsplugin fixes from BRANCH +- check for remote autologin users in earlykdm + +------------------------------------------------------------------- +Tue Mar 15 13:32:14 CET 2005 - coolo@suse.de + +- installing dummy flag for tw to apply to china's import + restrictions (#72503 #72452) + +------------------------------------------------------------------- +Mon Mar 14 09:56:27 CET 2005 - adrian@suse.de + +- let klipper ignore selections in firefox (#72352, by Lubos) +- 3_4_BRANCH update + * sftp protocol fix for non latin1 chars +- change earlykdm check for kbd startup (by jw) +- show kcontrol only within KDE +- disable gestures by default, they get enabled again when + kdeaccessibility3 get installed +- earlykdm does wait for resmgr + +------------------------------------------------------------------- +Thu Mar 10 20:38:41 CET 2005 - coolo@suse.de + +- handle ksplashx in kcontrol + +------------------------------------------------------------------- +Wed Mar 9 10:21:51 CET 2005 - adrian@suse.de + +- fix khelpcenter search (#66466 by Cornelius) +- disable firewire kcm module +- use current BRANCH for kwin + +------------------------------------------------------------------- +Tue Mar 8 14:29:41 CET 2005 - adrian@suse.de + +- fix gimp 2.0 icon pixmap name +- fix kcmfontinst issue (waldo, #66858) +- point the user to a possible configured firewall, if kio_smb + does fail + +------------------------------------------------------------------- +Tue Mar 8 10:16:52 CET 2005 - adrian@suse.de + +- add warning about firewall, if no smb shares got found. + +------------------------------------------------------------------- +Mon Mar 7 10:22:21 CET 2005 - coolo@suse.de + +- fix kdm auth (3_4_BRANCH) +- some kdm accessibility fixes +- shutdown ssh-agent and gpg-agent on logout + +------------------------------------------------------------------- +Fri Mar 4 17:29:55 CET 2005 - adrian@suse.de + +- update to version 3.4 final +- fix kio_smb for password protected shares + +------------------------------------------------------------------- +Wed Mar 2 16:37:02 CET 2005 - adrian@suse.de + +- move Requires: kdelibs3_doc from kdelibs3 to kdebase3 + +------------------------------------------------------------------- +Tue Mar 1 10:37:07 CET 2005 - adrian@suse.de + +- change default style from kicker clock, as requested by Ken + +------------------------------------------------------------------- +Mon Feb 28 17:17:57 CET 2005 - coolo@suse.de + +- porting the admin patch to themed greeter +- fix ksysguardd + +------------------------------------------------------------------- +Mon Feb 28 14:13:37 CET 2005 - coolo@suse.de + +- fix the shutdown entry + +------------------------------------------------------------------- +Mon Feb 28 08:01:25 CET 2005 - adrian@suse.de + +- apply fixes from 3_4_BRANCH + * acroread netscape plugin resize fixes + * enable mdns kcontrol module + +------------------------------------------------------------------- +Sat Feb 26 12:18:23 CET 2005 - adrian@suse.de + +- update to 3.4.0 RC 1 + +------------------------------------------------------------------- +Wed Feb 23 15:03:20 CET 2005 - adrian@suse.de + +- move permissions to aaa_base for 9.3 (#66312) +- remove /usr/X11R6/bin/setXF86Config from permissions + +------------------------------------------------------------------- +Wed Feb 23 09:23:02 CET 2005 - adrian@suse.de + +- hide .hidden/.directory in Gnome + +------------------------------------------------------------------- +Tue Feb 22 09:47:57 CET 2005 - adrian@suse.de + +- add Firefox entry to klipper + +------------------------------------------------------------------- +Mon Feb 21 14:56:10 CET 2005 - adrian@suse.de + +- call update93 script, if needed/possible + +------------------------------------------------------------------- +Fri Feb 18 11:54:18 CET 2005 - adrian@suse.de + +- no System icon on the desktop by default anymore + +------------------------------------------------------------------- +Fri Feb 18 10:54:02 CET 2005 - adrian@suse.de + +- update to current cvs + +------------------------------------------------------------------- +Thu Feb 17 15:38:10 CET 2005 - coolo@suse.de + +- reconfigure the clock afer kdesu yast finished + +------------------------------------------------------------------- +Wed Feb 16 21:49:58 CET 2005 - schwab@suse.de + +- Fix splash configuration in startkde. + +------------------------------------------------------------------- +Wed Feb 16 18:40:24 CET 2005 - adrian@suse.de + +- use ipod:/ slave for /media/iPod in kio_media, if this slave + does exist + +------------------------------------------------------------------- +Wed Feb 16 15:46:23 CET 2005 - coolo@suse.de + +- fixing konsole fonts + +------------------------------------------------------------------- +Wed Feb 16 14:33:02 CET 2005 - adrian@suse.de + +- fix menu shorting + +------------------------------------------------------------------- +Mon Feb 14 17:47:37 CET 2005 - adrian@suse.de + +- update from CVS + +------------------------------------------------------------------- +Fri Feb 11 16:18:16 CET 2005 - adrian@suse.de + +- add split provides for session sub package + +------------------------------------------------------------------- +Fri Feb 11 12:54:37 CET 2005 - coolo@suse.de + +- split kde startup link into an extra package to asure people do + not log into incomplete KDE setups because of dependencies + +------------------------------------------------------------------- +Fri Feb 11 10:31:49 CET 2005 - adrian@suse.de + +- update from CVS + +------------------------------------------------------------------- +Thu Feb 10 18:19:08 CET 2005 - adrian@suse.de + +- konsole-use-xft-font patch got obsoleted + +------------------------------------------------------------------- +Thu Feb 10 11:11:08 CET 2005 - adrian@suse.de + +- do not package a static kdmrc anymore, but generate it with genkdmconf + +------------------------------------------------------------------- +Mon Feb 7 11:37:49 CET 2005 - adrian@suse.de + +- update to beta 2 + +------------------------------------------------------------------- +Mon Jan 31 15:24:11 CET 2005 - coolo@suse.de + +- removed tip that is not true on SUSE (#45352) + +------------------------------------------------------------------- +Sat Jan 29 10:36:45 CET 2005 - coolo@suse.de + +- updated the mach_blass patch to do some really fancy stuff + +------------------------------------------------------------------- +Fri Jan 28 15:49:58 CET 2005 - adrian@suse.de + +- update to current snapshot +- add option in kdm/logout dialog to call suspend (coolo) + +------------------------------------------------------------------- +Tue Jan 25 16:47:15 CET 2005 - adrian@suse.de + +- fix export of GTK2_RC_FILES + +------------------------------------------------------------------- +Mon Jan 24 17:22:31 CET 2005 - coolo@suse.de + +- update to current snapshot (new kdm) + +------------------------------------------------------------------- +Fri Jan 21 10:42:16 CET 2005 - adrian@suse.de + +- update to current snapshot +- enable HAL in media slave +- remove update dialog + +------------------------------------------------------------------- +Thu Jan 20 19:22:23 CET 2005 - coolo@suse.de + +- activate earlykdm per default + +------------------------------------------------------------------- +Sat Jan 15 20:54:11 CET 2005 - schwab@suse.de + +- Use : in permissions file. + +------------------------------------------------------------------- +Thu Jan 13 09:50:09 CET 2005 - coolo@suse.de + +- updated to HEAD +- patched startkde to prefer ksplashx + +------------------------------------------------------------------- +Wed Jan 12 13:34:39 CET 2005 - coolo@suse.de + +- fix order in startkde.suse + +------------------------------------------------------------------- +Mon Jan 10 18:49:24 CET 2005 - coolo@suse.de + +- fix earlykdm init script to use correct return values +- make use of earlysyslog + +------------------------------------------------------------------- +Sun Jan 9 10:01:53 CET 2005 - adrian@suse.de + +- final 3.4 beta 1 + +------------------------------------------------------------------- +Tue Jan 4 16:36:40 CET 2005 - coolo@suse.de + +- update to 3.4 beta 1 (snapshot) +- some work on kdm + +------------------------------------------------------------------- +Fri Dec 17 13:52:19 CET 2004 - coolo@suse.de + +- fixing exec call + +------------------------------------------------------------------- +Wed Dec 15 16:28:14 CET 2004 - coolo@suse.de + +- simplifying script + +------------------------------------------------------------------- +Tue Dec 14 11:46:45 CET 2004 - coolo@suse.de + +- convert fileshareset to automake syntax +- adding early kdm boot script + +------------------------------------------------------------------- +Mon Dec 13 17:32:25 CET 2004 - coolo@suse.de + +- get rid of own copy of startkde and split into suse specific + startup resource and default changing diff + +------------------------------------------------------------------- +Wed Dec 8 13:26:42 CET 2004 - adrian@suse.de + +- update to official 3.4 alpha 1 + +------------------------------------------------------------------- +Fri Dec 3 15:34:28 CET 2004 - adrian@suse.de + +- apply 3_3_BRANCH patch to fix konsole crash + +------------------------------------------------------------------- +Tue Nov 30 09:55:55 CET 2004 - adrian@suse.de + +- run krootimage in background on startup + +------------------------------------------------------------------- +Mon Nov 29 22:52:54 CET 2004 - adrian@suse.de + +- update to version 3.3.2 + +------------------------------------------------------------------- +Tue Nov 23 16:14:32 CET 2004 - adrian@suse.de + +- fix build for older distributions +- clean up startkde script a bit (removing themeing of GTK1 applications) + +------------------------------------------------------------------- +Thu Nov 18 15:46:19 CET 2004 - adrian@suse.de + +- add missing %suse_update_desktop_file calls + +------------------------------------------------------------------- +Thu Nov 18 15:37:21 CET 2004 - ro@suse.de + +- use kerberos-devel-packages + +------------------------------------------------------------------- +Thu Nov 11 22:22:07 CET 2004 - adrian@suse.de + +- add $prefix/env support from KDE startkde script + +------------------------------------------------------------------- +Mon Oct 25 18:33:09 CEST 2004 - adrian@suse.de + +- fix file sharing visibility (#43056) + +------------------------------------------------------------------- +Wed Oct 20 11:26:20 CEST 2004 - uli@suse.de + +- fixed KDM on 64-bit BE systems (bug #47202) + +------------------------------------------------------------------- +Thu Oct 14 17:43:40 CEST 2004 - adrian@suse.de + +- remove kdm-codec patch, it is not needed with the new xdm + script anymore and has a bad effect for chinese people + +------------------------------------------------------------------- +Tue Oct 12 13:11:34 CEST 2004 - adrian@suse.de + +- update to version 3.3.1 + +------------------------------------------------------------------- +Thu Oct 7 13:28:57 CEST 2004 - adrian@suse.de + +- fix file conflict between kdebase3 and kdebase3-extra + +------------------------------------------------------------------- +Tue Oct 5 17:21:05 CEST 2004 - adrian@suse.de + +- update to complete polish translations + +------------------------------------------------------------------- +Tue Oct 5 16:49:00 CEST 2004 - coolo@suse.de + +- updated translations + +------------------------------------------------------------------- +Tue Oct 5 13:31:36 CEST 2004 - adrian@suse.de + +- avoid error message on adding a desktop icon on first login. + (#46713) + +------------------------------------------------------------------- +Mon Oct 4 18:16:31 CEST 2004 - adrian@suse.de + +- fix for view gnome help pages with khelpcenter via help:$application + (by clahey, #45480) + +------------------------------------------------------------------- +Mon Oct 4 14:58:59 CEST 2004 - coolo@suse.de + +- don't show a trans slider by default (#46492) + +------------------------------------------------------------------- +Thu Sep 30 15:06:44 CEST 2004 - adrian@suse.de + +- workaround for a xterm size bug (by Lubos, #46153) +- workaround a problem with acrobat reader plugin on 64bit system + (by coolo, #45375) +- fix kstart behavior (by Lubos, #45919) + +------------------------------------------------------------------- +Wed Sep 29 10:18:10 CEST 2004 - adrian@suse.de + +- hide second entry for printer management + +------------------------------------------------------------------- +Wed Sep 29 09:58:37 CEST 2004 - coolo@suse.de + +- hiding the clean button again + +------------------------------------------------------------------- +Tue Sep 28 17:58:40 CEST 2004 - adrian@suse.de + +- disable XInitThread() call again., it has to moved a little bit + deeper ... + +------------------------------------------------------------------- +Mon Sep 27 17:27:59 CEST 2004 - coolo@suse.de + +- merged kdm patches for KDE 3.3 + +------------------------------------------------------------------- +Sun Sep 26 13:32:31 CEST 2004 - adrian@suse.de + +- use current 3_3_BRANCH + * fixes a possible crash of konsole +- disable the composite extension of konsole again, it cause a hang (#46098) +- update kwin composite patch +- fix hanging kparts using threads (like kaffeine/xine) again + +------------------------------------------------------------------- +Wed Sep 22 10:22:48 CEST 2004 - adrian@suse.de + +- create desktop icons also for root user + +------------------------------------------------------------------- +Mon Sep 20 23:41:08 CEST 2004 - adrian@suse.de + +- update to current 3_3_BRANCH + * various kio_fish fixes + +------------------------------------------------------------------- +Mon Sep 20 17:56:56 CEST 2004 - adrian@suse.de + +- update to current 3_3_BRANCH + * includes fix for desktop icon positions with panel on the left + (#45437) + +------------------------------------------------------------------- +Wed Sep 15 15:14:40 CEST 2004 - adrian@suse.de + +- add hook to startkde to disable IPv6 depending on + /etc/sysconfig/windowmanager + +------------------------------------------------------------------- +Tue Sep 14 14:44:16 CEST 2004 - adrian@suse.de + +- update to current BRANCH +- enable composite support in konsole (patch from Lubos) + +------------------------------------------------------------------- +Sat Sep 11 16:40:09 CEST 2004 - adrian@suse.de + +- update to current 3_3_BRANCH +- remove mad from nfb + +------------------------------------------------------------------- +Sat Sep 4 10:56:25 CEST 2004 - coolo@suse.de + +- replaced 3_2_BRANCH with 3_3_BRANCH (including fix for parallel build) +- going for unsermake (parallel build + no bugs with installing icons) + +------------------------------------------------------------------- +Sat Aug 21 20:54:16 CEST 2004 - adrian@suse.de + +- remove shadow patch +- some menu item fixes +- khelpcenter gnome support by clahey + +------------------------------------------------------------------- +Mon Aug 16 15:32:44 CEST 2004 - adrian@suse.de + +- update to version 3.3.0 final + +------------------------------------------------------------------- +Sat Aug 14 19:21:49 CEST 2004 - schwab@suse.de + +- ksysguard: rate limit SLP rescan [#43820]. + +------------------------------------------------------------------- +Fri Aug 13 11:39:02 CEST 2004 - adrian@suse.de + +- package libkfontinst for 8.2 + +------------------------------------------------------------------- +Tue Aug 10 08:58:24 CEST 2004 - adrian@suse.de + +- update to version 3.3.0 RC2 + +------------------------------------------------------------------- +Tue Aug 3 08:06:21 CEST 2004 - adrian@suse.de + +- use kde-open, if it exists + +------------------------------------------------------------------- +Mon Jul 26 21:08:06 CEST 2004 - adrian@suse.de + +- run ksysguardd as daemon (#38861) + +------------------------------------------------------------------- +Tue Jul 20 15:22:47 CEST 2004 - adrian@suse.de + +- update to KDE 3.2.92 (3.3 beta 2) + +------------------------------------------------------------------- +Tue Jun 29 09:48:30 CEST 2004 - adrian@suse.de + +- fix some aliasing warnings + +------------------------------------------------------------------- +Mon Jun 28 11:18:47 CEST 2004 - adrian@suse.de + +- update to version 3.3 beta 1 + +------------------------------------------------------------------- +Wed Jun 9 11:41:26 CEST 2004 - adrian@suse.de + +- fix ksysguardd sig11 due to slp implementation + (using a reg file now) + +------------------------------------------------------------------- +Wed Jun 2 09:58:36 CEST 2004 - adrian@suse.de + +- fix double entries in kicker quick browser. + (found by Joerg Seymer) +- fix double packaging of some icons + +------------------------------------------------------------------- +Tue Jun 1 08:33:58 CEST 2004 - adrian@suse.de + +- update to version 3.2.3 + +------------------------------------------------------------------- +Fri Apr 16 15:49:17 CEST 2004 - adrian@suse.de + +- fix compile on 8.1 + +------------------------------------------------------------------- +Fri Apr 16 12:04:19 CEST 2004 - adrian@suse.de + +- fix build for 9.0-x86_64 + +------------------------------------------------------------------- +Thu Apr 15 08:50:02 CEST 2004 - adrian@suse.de + +- fix build for < 9.1 distributions + +------------------------------------------------------------------- +Wed Apr 14 11:16:13 CEST 2004 - adrian@suse.de + +- update to version 3.2.2 + +------------------------------------------------------------------- +Tue Apr 6 18:21:30 CEST 2004 - adrian@suse.de + +- do also export locale enviroment with kdesu (#38527) + +------------------------------------------------------------------- +Tue Apr 6 08:10:02 CEST 2004 - adrian@suse.de + +- remove debug infobox on drive eject (#38294) +- fix wrong highlighted colors in gtk applications (#36935) + +------------------------------------------------------------------- +Mon Apr 5 18:16:59 CEST 2004 - adrian@suse.de + +- get KCMYAST2_CALL through kdesu +- fix yast module loading also when kcontrol already runs as root + +------------------------------------------------------------------- +Mon Apr 5 08:54:30 CEST 2004 - adrian@suse.de + +- remove second devices button in sidebar +- do use drives:/ on > 9.0 in the main devices button in the sidebar +- fix broken icon entry for sidebar services button +- kdm starts WindowMaker with "windowmaker" #38319 + +------------------------------------------------------------------- +Sun Apr 4 21:23:36 CEST 2004 - coolo@suse.de + +- update to kicker CVS for critical bug fix (replacing two other + former patches) + +------------------------------------------------------------------- +Sat Apr 3 08:52:35 CEST 2004 - coolo@suse.de + +- remove pointer to lan:/ in sidebar (#38174) +- fixing yet another place where the wrong string was used + +------------------------------------------------------------------- +Thu Apr 1 17:58:13 CEST 2004 - adrian@suse.de + +- apply fix for non-editable menu entries in kmenuedit (Waldo) + +------------------------------------------------------------------- +Thu Apr 1 15:06:58 CEST 2004 - coolo@suse.de + +- adding fix for kicker to not increase menu size because of newer + Qt (KDE #78556) + +------------------------------------------------------------------- +Thu Apr 1 09:20:05 CEST 2004 - adrian@suse.de + +- better icon for fish:/ +- don't show "mount" menu items for > 9.0 (we have subfs) + +------------------------------------------------------------------- +Wed Mar 31 17:10:35 CEST 2004 - coolo@suse.de + +- adding switchuser translations +- don't give the warning in kdesktop_lock +- add an icon to the kdm menu so that it doesn't look ugly in + thinkeramik + +------------------------------------------------------------------- +Tue Mar 30 16:35:30 CEST 2004 - adrian@suse.de + +- remove random user list file +- remove help menu entry in kdesktop to not existing help pages +- Honour global defaults & kiosk restrictions in kcmstyle (Waldo) +- ksysguardd runlevel fixes (#37614) +- fix klipperrc patch +- don't wait for arts shutdown + +------------------------------------------------------------------- +Sun Mar 28 18:39:40 CEST 2004 - adrian@suse.de + +- fix eject via kio_drives (#37156) + +------------------------------------------------------------------- +Sat Mar 27 09:23:54 CET 2004 - adrian@suse.de + +- apply fix for kicker crash by Lubos (#36360) +- use current BRANCH for kdesktop/ + * kiosk, minicli fixes and translation updates +- fixes a problem with focus stealing prevention with klipper (Lubos) +- use current BRANCH from kwin/ + * fixes pop-up windows below main window (#36682) +- fix several icons in kcontrol + +------------------------------------------------------------------- +Fri Mar 26 13:36:08 CET 2004 - coolo@suse.de + +- fixing kdm layout on personal theme +- default to shutdown when auto logined (#36856) + +------------------------------------------------------------------- +Wed Mar 24 16:12:26 CET 2004 - coolo@suse.de + +- fixing konsole pasting (#34892) +- fixing window shadow + +------------------------------------------------------------------- +Wed Mar 24 15:30:21 CET 2004 - adrian@suse.de + +- export $KDESU_USER with kdesu session + +------------------------------------------------------------------- +Mon Mar 22 09:22:59 CET 2004 - adrian@suse.de + +- update to current 3_2_BRANCH + * kcminit fixes, qt apps are using the default KDE widget style now + * Alt F2 dialog layout fixes +- call 9.1 update script +- apply default-fonts.diff again + +------------------------------------------------------------------- +Sun Mar 21 16:54:58 CET 2004 - adrian@suse.de + +- fix kcontrol yast integration + +------------------------------------------------------------------- +Wed Mar 17 23:51:12 CET 2004 - adrian@suse.de + +- move krandrtray menu entry +- move some .desktop files to correct sub package + +------------------------------------------------------------------- +Wed Mar 17 20:49:31 CET 2004 - coolo@suse.de + +- fixing NFS URLs (#36032, #36275) + +------------------------------------------------------------------- +Tue Mar 16 14:37:38 CET 2004 - coolo@suse.de + +- increasing rudi's screen space for higher stock holder value + (#36065) + +------------------------------------------------------------------- +Mon Mar 15 16:02:26 CET 2004 - coolo@suse.de + +- updating branch diff for konsole fixes (mutt, vim, irssi) + +------------------------------------------------------------------- +Fri Mar 12 17:38:58 CET 2004 - coolo@suse.de + +- fixing file test + +------------------------------------------------------------------- +Thu Mar 11 22:08:45 CET 2004 - coolo@suse.de + +- fixing user switching + +------------------------------------------------------------------- +Thu Mar 11 10:25:26 CET 2004 - coolo@suse.de + +- replace Xservers with a symlink to the real file from XFree86 +- fixing kdm layout +- fixing konsole font + +------------------------------------------------------------------- +Wed Mar 10 16:43:58 CET 2004 - coolo@suse.de + +- adding switchuser for kdm user switch support +- removing untranslated shadow from popup +- artwork.diff update for services + +------------------------------------------------------------------- +Tue Mar 9 13:34:12 CET 2004 - coolo@suse.de + +- reworked admin mode patch +- adding patch by Lubos to enhance xcursor support +- updating to latest 3_2_BRANCH (including at least 3 #s) +- adding patch by Matz to reintroduce window shadows +- adding support for HideMenu=true in kdm (#35209) + +------------------------------------------------------------------- +Mon Mar 8 11:27:23 CET 2004 - adrian@suse.de + +- use original Home folder icon again + +------------------------------------------------------------------- +Sat Mar 6 22:17:57 CET 2004 - coolo@suse.de + +- fix build with gcc 2.95 + +------------------------------------------------------------------- +Sat Mar 6 15:08:02 CET 2004 - coolo@suse.de + +- huge cleanup in the patches +- update 3_2_BRANCH diff + +------------------------------------------------------------------- +Thu Mar 4 09:55:52 CET 2004 - adrian@suse.de + +- use gtk-qt-engine only as fallback +- fix gnome startup call for kdm + +------------------------------------------------------------------- +Wed Mar 3 19:16:35 CET 2004 - coolo@suse.de + +- give us back the kdm user pictures + +------------------------------------------------------------------- +Mon Mar 1 10:34:30 CET 2004 - coolo@suse.de + +- update to version 3.2.1 + +------------------------------------------------------------------- +Fri Feb 27 19:34:12 CET 2004 - coolo@suse.de + +- adding font overwrites (again) to startkde (#30760) + +------------------------------------------------------------------- +Fri Feb 27 10:05:20 CET 2004 - coolo@suse.de + +- updated 3_2_BRANCH for kdesktop wallpaper fix (taking out + experimental patches do no longer apply because of this) +- install xdm-np pam service to fix autologin (#34674) +- fixing warnings build dislikes + +------------------------------------------------------------------- +Thu Feb 26 20:25:39 CET 2004 - adrian@suse.de + +- add kwin shadow patch again (prepared by Matz) + +------------------------------------------------------------------- +Tue Feb 24 17:51:26 CET 2004 - coolo@suse.de + +- removing kdm-xconsole - went upstream +- adding mach_blass for getting feedback +- adding kiosk patch by Waldo +- adding user switch patch for kdm + +------------------------------------------------------------------- +Sat Feb 21 17:02:14 CET 2004 - adrian@suse.de + +- one KControl menu entry is enough + +------------------------------------------------------------------- +Wed Feb 18 10:25:06 CET 2004 - coolo@suse.de + +- updating two patches +- updating mp3-info (#33151) +- removed ssh protocol +- disable kwin shadow patch again (too broken atm) + +------------------------------------------------------------------- +Tue Feb 17 15:15:54 CET 2004 - coolo@suse.de + +- fixing kdesktop icon aligning again + +------------------------------------------------------------------- +Mon Feb 16 17:46:23 CET 2004 - adrian@suse.de + +- update to current 3_2_BRANCH + * includes the kicker clock flickering fix + +------------------------------------------------------------------- +Wed Feb 11 12:03:20 CET 2004 - adrian@suse.de + +- update to current 3_2_BRANCH +- justify kcm modules in kdesktop configure dialog +- use gtk-qt-engine by default for Gtk2 apps, if installed + +------------------------------------------------------------------- +Tue Feb 10 10:13:12 CET 2004 - adrian@suse.de + +- update to current 3_2_BRANCH +- enable firewire support +- build kdm backend and pam code with -fno-strict-aliasing + +------------------------------------------------------------------- +Sun Feb 8 21:30:49 CET 2004 - adrian@suse.de + +- update to current 3_2_BRANCH +- add current kwin shadow patch + +------------------------------------------------------------------- +Mon Feb 2 10:00:36 CET 2004 - adrian@suse.de + +- fix build for older distributions +- add kickerrc config for < 9.1, because deinstallation of + kdebase3-SuSE will mess up the kicker otherwise + +------------------------------------------------------------------- +Wed Jan 28 13:48:10 CET 2004 - adrian@suse.de + +- fish can also used view ssh:/ now + +------------------------------------------------------------------- +Wed Jan 28 11:03:41 CET 2004 - adrian@suse.de + +- fix file list + +------------------------------------------------------------------- +Tue Jan 27 21:42:10 CET 2004 - adrian@suse.de + +- update to version 3.2.0 final +- cleanup and fix some more patches from 3.1 + +------------------------------------------------------------------- +Mon Jan 19 10:43:08 CET 2004 - adrian@suse.de + +- add logrotate config for kdm + +------------------------------------------------------------------- +Sun Jan 18 21:43:52 CET 2004 - adrian@suse.de + +- update to version 3.1.95 ( KDE 3.2 RC1 ) + +------------------------------------------------------------------- +Fri Jan 16 17:12:13 CET 2004 - adrian@suse.de + +- implement short menus again +- make icon size of KDE menu configurable + +------------------------------------------------------------------- +Fri Jan 16 12:56:42 CET 2004 - kukuk@suse.de + +- Add pam-devel to neededforbuild + +------------------------------------------------------------------- +Tue Jan 13 13:40:32 CET 2004 - adrian@suse.de + +- update to snapshot 2004011309 +- rename kdebase3-nsplugin to kdebase3-nsplugin64 for 64bit archs + +------------------------------------------------------------------- +Tue Dec 30 15:08:10 CET 2003 - adrian@suse.de + +- update to snapshot 2003123011 + +------------------------------------------------------------------- +Wed Dec 17 17:54:02 CET 2003 - adrian@suse.de + +- update to snapshot 2003121718 +- fix kdesktop sig11 due to extensions + +------------------------------------------------------------------- +Mon Dec 15 15:33:18 CET 2003 - adrian@suse.de + +- update to snapshot 2003121511 +- apply needed kdesktop extensions again + +------------------------------------------------------------------- +Tue Dec 2 11:38:53 CET 2003 - adrian@suse.de + +- use 3.1.94, second try tar ball + +------------------------------------------------------------------- +Mon Dec 1 22:00:31 CET 2003 - adrian@suse.de + +- update to 3.1.94 ( KDE 3.2 beta 2 ) + +------------------------------------------------------------------- +Thu Nov 13 23:14:30 CET 2003 - adrian@suse.de + +- update to new snapshot from 2003102409 +- fix kwin startup +- add SLP support for ksysguard + +------------------------------------------------------------------- +Wed Oct 29 09:59:01 CET 2003 - adrian@suse.de + +- update to KDE 3.2 beta1 + +------------------------------------------------------------------- +Tue Oct 21 09:34:51 CEST 2003 - adrian@suse.de + +- update to snapshot 2003102008 + +------------------------------------------------------------------- +Sun Oct 5 14:31:09 CEST 2003 - adrian@suse.de + +- update to snapshot 2003100510 + +------------------------------------------------------------------- +Mon Sep 29 15:59:09 CEST 2003 - adrian@suse.de + +- update to version 1.1.92 (KDE 3.2 alpha 2) + +------------------------------------------------------------------- +Sat Sep 20 16:29:17 CEST 2003 - adrian@suse.de + +- fix from Waldo, to update kicker menu, when sycoca has changed + +------------------------------------------------------------------- +Fri Sep 19 12:37:43 CEST 2003 - adrian@suse.de + +- Add Screensaver Categories, needed for Gnome (#31282) + +------------------------------------------------------------------- +Fri Sep 19 09:37:42 CEST 2003 - adrian@suse.de + +- redo nsplugin silence patch, the output is needed for the GUI + progress bar + +------------------------------------------------------------------- +Thu Sep 18 17:52:36 CEST 2003 - adrian@suse.de + +- fix a handling of shortet menu names, broken encoding for + non-latin1 (#31248) + +------------------------------------------------------------------- +Thu Sep 18 10:56:56 CEST 2003 - adrian@suse.de + +- update konsole_compose fix from Waldo (fixes issues with screen) +- silence during nspluginscan + +------------------------------------------------------------------- +Wed Sep 17 09:18:01 CEST 2003 - adrian@suse.de + +- disable kthemegr completely. It can mess up the complete setup + (#30727) +- fix touch of update90 file + +------------------------------------------------------------------- +Tue Sep 16 17:16:08 CEST 2003 - adrian@suse.de + +- apply fix from Lubos for the Double Focus problem (#29467) + +------------------------------------------------------------------- +Tue Sep 16 10:34:13 CEST 2003 - adrian@suse.de + +- higher nsplugin service priority + (pdf's are shown in embedded acroread) +- use correct background setup during autologin + +------------------------------------------------------------------- +Mon Sep 15 21:48:32 CEST 2003 - coolo@suse.de + +- providing function for the suseplugger + +------------------------------------------------------------------- +Mon Sep 15 17:30:13 CEST 2003 - coolo@suse.de + +- have pkgconfig in the neededforbuilds to get fontconfig + support (that you get if you don't calculate build dependencies + automatically) + +------------------------------------------------------------------- +Mon Sep 15 14:38:37 CEST 2003 - adrian@suse.de + +- fix typo in startkde + +------------------------------------------------------------------- +Mon Sep 15 11:33:03 CEST 2003 - adrian@suse.de + +- apply patch from coolo to fix mouse cursor settings from kcontrol + (#30760) +- clean up obsolete/double patch +- apply fix from Waldo for the kicker update script (#30767) + +------------------------------------------------------------------- +Sun Sep 14 23:33:54 CEST 2003 - coolo@suse.de + +- fixes for suseplugger placement + +------------------------------------------------------------------- +Sat Sep 13 13:56:31 CEST 2003 - adrian@suse.de + +- apply fix from Waldo for editing icon entries in kicker (#30606) +- fix Unimportant entries finaly. +- update suse_default_move.diff patch to new verions from coolo + * fixes icon placement finally, hopefully +- implement second level menu sorting + +------------------------------------------------------------------- +Fri Sep 12 15:55:00 CEST 2003 - coolo@suse.de + +- fixing the aligning of the default icons + +------------------------------------------------------------------- +Fri Sep 12 11:33:14 CEST 2003 - coolo@suse.de + +- set background even on autologin users + +------------------------------------------------------------------- +Thu Sep 11 08:33:28 CEST 2003 - adrian@suse.de + +- redone 3.1.4 tar ball, whith kdesu enviroment fix +- apply branch patch with kdesktop rename fix +- add new console font from mfabian with an EUR char +- fix copy quoting of kdesktop addIcon +- export $STYLE to get a matching look in xmms +- new version for krdb-gtk2 patch from coolo +- fix from Waldo to show UTF-8 in konsole correct (#25146) +- prepare startkde script to call the 9.0 update script + +------------------------------------------------------------------- +Wed Sep 10 13:23:15 CEST 2003 - coolo@suse.de + +- check a specific dcop interface (kdesktop). that's less likely to + stay stale (#30148) + +------------------------------------------------------------------- +Tue Sep 9 15:58:30 CEST 2003 - coolo@suse.de + +- remove unused patch7 +- add patch to force xft2 usage on qt3 in konsole (#29164) + +------------------------------------------------------------------- +Tue Sep 9 01:17:23 CEST 2003 - adrian@suse.de + +- do even apply coolos patch +- further kcontrol yast patch. we need only one line in the + desktop file now and can keep a usual Exec line + +------------------------------------------------------------------- +Tue Sep 9 00:13:49 CEST 2003 - adrian@suse.de + +- update to version 3.1.4 +- some missing bits, to be able to load YaST embedded into kcontrol + again + +------------------------------------------------------------------- +Mon Sep 8 20:23:34 CEST 2003 - coolo@suse.de + +- update smb code in CVS to include more detailed error message +- add debug code as found a problem in our windows network which + might hit more users + +------------------------------------------------------------------- +Mon Sep 8 15:22:33 CEST 2003 - coolo@suse.de + +- fixing kdesktop to read .directory on new files +- updating short-menus diff from adrian + +------------------------------------------------------------------- +Fri Sep 5 13:52:05 CEST 2003 - adrian@suse.de + +- honor also X-SuSE-Unimportant entries during menu shorting +- new kmenuedit from Waldo, fixing creation of new entries +- add gtk2-set-enviroment patch from Lubos to fix encoding problems +- handle special flags for folder (no shorting and name usage) +- new handling of GTK theme, made by Stanislav Brabec +- kfontinst: reload instead of restart the xfs +- kfontinst: call also SuSEconfig --module fonts +- make KControl visible in main menu + +------------------------------------------------------------------- +Thu Sep 4 16:42:43 CEST 2003 - adrian@suse.de + +- remove clock kcm module. it breaks the system and we have a + YaST modul for this purpose. +- new patch from Waldo to fix kcontrol yast module menu +- stop/restart ksysguardd on update/remove + +------------------------------------------------------------------- +Thu Sep 4 14:12:19 CEST 2003 - adrian@suse.de + +- some desktop Categories tuning + +------------------------------------------------------------------- +Tue Sep 2 13:16:53 CEST 2003 - adrian@suse.de + +- kwrite becomes unimportant + +------------------------------------------------------------------- +Mon Sep 1 14:48:24 CEST 2003 - adrian@suse.de + +- update to current 3_1_BRANCH + * contains kwin resize fix for xmms from Lubos +- implement X-SuSE-Unimportant support +- apply crash fix for khelpcenter from Cornelius +- coolo: add check in startkde for already running kde + +------------------------------------------------------------------- +Sun Aug 31 16:58:23 CEST 2003 - adrian@suse.de + +- implement menu auto shorting in kicker + +------------------------------------------------------------------- +Sat Aug 30 21:20:22 CEST 2003 - adrian@suse.de + +- fix kdm startup error +- disable password field for no-password-for-all-users mode + +------------------------------------------------------------------- +Sat Aug 30 14:33:43 CEST 2003 - adrian@suse.de + +- update xdg patch to new version from Waldo. + +------------------------------------------------------------------- +Fri Aug 29 17:26:55 CEST 2003 - adrian@suse.de + +- update to current 3_1_BRANCH for kdm security fixes + +------------------------------------------------------------------- +Wed Aug 27 08:20:45 CEST 2003 - adrian@suse.de + +- fixing smb:/ protocol by using libsmbclient from samba 3 +- hide "Open In Terminal" entries in kicker by default + +------------------------------------------------------------------- +Tue Aug 26 13:58:02 CEST 2003 - adrian@suse.de + +- implement the kdm admin mode + +------------------------------------------------------------------- +Tue Aug 26 08:19:20 CEST 2003 - adrian@suse.de + +- apply fix from Lubos for maximised windows of GTK apps + +------------------------------------------------------------------- +Sun Aug 24 19:44:55 CEST 2003 - adrian@suse.de + +- let kthumbnailcreator use ksvgiconengine + +------------------------------------------------------------------- +Sat Aug 23 22:35:16 CEST 2003 - adrian@suse.de + +- update to 3_1_BRANCH + +------------------------------------------------------------------- +Wed Aug 20 18:30:27 CEST 2003 - adrian@suse.de + +- apply fix from Lubos for khotkey support with XDG + +------------------------------------------------------------------- +Sat Aug 16 20:23:35 CEST 2003 - adrian@suse.de + +- rpm -V fixes + +------------------------------------------------------------------- +Fri Aug 15 10:25:34 CEST 2003 - adrian@suse.de + +- set Categories for KControl via patch + +------------------------------------------------------------------- +Thu Aug 14 16:17:44 CEST 2003 - adrian@suse.de + +- add %ghost /var/run/xdmctl + +------------------------------------------------------------------- +Wed Aug 13 15:40:04 CEST 2003 - adrian@suse.de + +- use new places of gtkrc-$STYLE files +- use current 3_1_BRANCH + +------------------------------------------------------------------- +Tue Aug 12 13:18:38 CEST 2003 - adrian@suse.de + +- justify Categories +- new XDG patch from Waldo + +------------------------------------------------------------------- +Thu Aug 7 17:09:02 CEST 2003 - adrian@suse.de + +- update XDG patch + +------------------------------------------------------------------- +Thu Aug 7 14:43:29 CEST 2003 - adrian@suse.de + +- new code from Waldo: kmenuedit can handle XDG now +- require smbclnt, if samba 3 is not used + +------------------------------------------------------------------- +Sun Aug 3 15:11:32 CEST 2003 - adrian@suse.de + +- fix build for 8.2 + +------------------------------------------------------------------- +Fri Aug 1 19:49:47 CEST 2003 - adrian@suse.de + +- disable shadow text at all +- add patch to support kwin shadow windows instead + +------------------------------------------------------------------- +Tue Jul 29 15:59:21 CEST 2003 - adrian@suse.de + +- disable shadow text for 8.2 +- fix build for 8.2 (now it really works everywhere for sure, I hope) + +------------------------------------------------------------------- +Tue Jul 29 10:36:18 CEST 2003 - adrian@suse.de + +- fix build for < 8.0 + +------------------------------------------------------------------- +Mon Jul 28 14:06:58 CEST 2003 - cschum@suse.de + +- Updated KHelpcenter tarball. Fixes bug #24374. + +------------------------------------------------------------------- +Fri Jul 25 11:36:34 CEST 2003 - cschum@suse.de + +- Added KHelpcenter from CVS HEAD. + +------------------------------------------------------------------- +Fri Jul 25 09:24:51 CEST 2003 - adrian@suse.de + +- fix build for < 8.1 +- add Categories + +------------------------------------------------------------------- +Sat Jul 19 22:29:07 CEST 2003 - adrian@suse.de + +- add XDG patch from Waldo +- add backported patch from 3.2 for shadow text on icons. + kcontrol changes are not included for i18n compliance + (written by Laur Ivan ) + +------------------------------------------------------------------- +Wed Jul 16 15:07:55 CEST 2003 - adrian@suse.de + +- update to version 3.1.3 + +------------------------------------------------------------------- +Wed Jun 25 09:13:07 CEST 2003 - coolo@suse.de + +- updating 3_1_BRANCH diff (heading 3.1.3) + +------------------------------------------------------------------- +Mon Jun 23 16:22:33 CEST 2003 - schwab@suse.de + +- Remove trailing spaces from Xpdf.ad. + +------------------------------------------------------------------- +Fri Jun 13 11:01:30 CEST 2003 - coolo@suse.de + +- package directories + +------------------------------------------------------------------- +Fri May 30 15:20:18 CEST 2003 - adrian@suse.de + +- fix build on non-fast-malloc architectures + +------------------------------------------------------------------- +Mon May 26 15:45:14 CEST 2003 - adrian@suse.de + +- use $INSTALL_TARGET +- all config files are %config(noreplace) now +- startkde.lib is obsolete in future + +------------------------------------------------------------------- +Mon May 26 11:14:12 CEST 2003 - adrian@suse.de + +- do not save original startkde (fix build for rpm4) + +------------------------------------------------------------------- +Wed May 21 14:01:41 CEST 2003 - adrian@suse.de + +- add fix from Lubos to start preloaded Konq on correct screen +- drop patch which ignores global malloc + +------------------------------------------------------------------- +Thu May 15 07:49:15 CEST 2003 - adrian@suse.de + +- 3.1.2, take four + +------------------------------------------------------------------- +Mon May 12 18:08:54 CEST 2003 - adrian@suse.de + +- update to 3.1.2, take three +- use $HOME/.fonts path also via XLFD + +------------------------------------------------------------------- +Thu May 8 16:43:08 CEST 2003 - ro@suse.de + +- fileshareset2: include errno in fssConfigNfs.cpp + +------------------------------------------------------------------- +Thu May 8 09:33:32 CEST 2003 - adrian@suse.de + +- update to 3.1.2 + * cleanup patches + +------------------------------------------------------------------- +Fri Apr 18 16:26:25 CEST 2003 - adrian@suse.de + +- merge 8.2 and 8.3 stream + +------------------------------------------------------------------- +Wed Apr 9 17:34:22 CEST 2003 - adrian@suse.de + +- security fix, call ghostscript in safe mode. +- replace fileshareset utility with a working one + (written by Uwe Gansert, reviewed by security-team) + Only samba exports for now, nfs is disabled for security reasons +- add global gtkrc to enviroment variable to fix used encoding +- fix kdm behaviour after wrong password (#25727) + +------------------------------------------------------------------- +Sun Mar 16 19:22:16 CET 2003 - adrian@suse.de + +- fix console font size also in konsole code +- workaround a qt bug to find a fixed font (#25430) + (do not recalculate the pixelSize via dpi) + +------------------------------------------------------------------- +Sat Mar 15 18:58:45 CET 2003 - adrian@suse.de + +- xmms can't handle .m3u files in a stream +- ensure that $kdehome is set during startkde run +- remove xset font calls in startkde + (reduces warnings during KDE startup and is not needed with fontconfig) + +------------------------------------------------------------------- +Fri Mar 14 10:00:16 CET 2003 - adrian@suse.de + +- fix from Lubos to disable kdesu parameters, when running in + kcmshell already (first part to fix #25230) +- remove senseless permissions file (we don't have a suid perl) + +------------------------------------------------------------------- +Wed Mar 12 18:00:19 CET 2003 - adrian@suse.de + +- fix the last place of hardcoded kdmrc path +- fix build for < 8.2 + +------------------------------------------------------------------- +Wed Mar 12 17:08:09 CET 2003 - adrian@suse.de + +- add sensors support to ksysguard again +- apply fix from Lubos for kdm mouse cursor + +------------------------------------------------------------------- +Wed Mar 12 14:25:58 CET 2003 - adrian@suse.de + +- fix kxkb extension for XFree 4.3 +- fix nsplugin scan init + +------------------------------------------------------------------- +Tue Mar 11 11:26:06 CET 2003 - adrian@suse.de + +- fix kdm layout/position +- disable unneeded Menu and Erase button +- use standard button ordering in kdm +- fix encoding usage for user names +- add fix from Lubos for Konqueror session management +- add fix from Coolo for pam-error-message handling in kdm +- add PreReq: aaa_base in kdebase3-ksysguardd to be able to update + from 7.3 +- add fix from Cornelius to let khelpcenter use the correct language +- fallback gtkrc style is keramik/geramik + +------------------------------------------------------------------- +Sun Mar 9 00:30:15 CET 2003 - adrian@suse.de + +- apply kdm patches again for console +- use better icon for "new session" +- use console8x16 font from HEAD to fix freetype2 issues +- check only for lowercase gtkrc-$STYLE's +- fix remote .pls file handling with xmms +- run update script, if present + +------------------------------------------------------------------- +Tue Mar 4 18:33:10 CET 2003 - adrian@suse.de + +- add missing Provides/Obsoletes kdialog +- use a better icon for Home directory items + +------------------------------------------------------------------- +Sat Mar 1 23:23:42 CET 2003 - adrian@suse.de + +- update to version 3.1.1 + * kwin fixes: don't show toplevel menus for non-active windows. + * konq fixes: don't repost data on reload, if url changes + sidebar crash fix + * nsplugin viewer: fixes and NPN_PostURL* support. +- update kcmrandr and patches from Lubos + * restoring resolution by kcminit works now +- Konqueror preloading fixes from Lubos + * creating KonqMainWindow on --preload +- disable klipper actions of not installed apps +- add /usr/lib{,64}/browser-plugins/ path to scan list +- fix build on non-ia32/x86_64 +- drop obsoletes patches + +------------------------------------------------------------------- +Fri Feb 28 00:31:38 CET 2003 - adrian@suse.de + +- update 3_1_BRANCH patch +- update preloaded konq patch from Lubos +- drop Obsoletes kdebase again +- fix quickbrowser patch to show entries only once + +------------------------------------------------------------------- +Wed Feb 26 12:14:15 CET 2003 - adrian@suse.de + +- update 3_1_BRANCH patch +- follow susewatcher directory change +- Obsoletes kdebase + +------------------------------------------------------------------- +Mon Feb 24 11:27:16 CET 2003 - adrian@suse.de + +- update 3_1_BRANCH patch +- fix kdmrc path in kcm_kdm +- use yast for setting the clock in kicker/applet/clock + +------------------------------------------------------------------- +Sat Feb 22 14:37:31 CET 2003 - kukuk@suse.de + +- If we provide kdebase, we should also obsolete the old one. + +------------------------------------------------------------------- +Thu Feb 20 11:49:36 CET 2003 - cschum@suse.de + +- Fixed check, if khelpcenter index builder needs root permissions. + +------------------------------------------------------------------- +Wed Feb 19 13:19:57 CET 2003 - adrian@suse.de + +- fix typo in Provides for kdm, fixes update from kde 2 + +------------------------------------------------------------------- +Tue Feb 18 14:05:31 CET 2003 - adrian@suse.de + +- fix build for < 8.2 + +------------------------------------------------------------------- +Tue Feb 18 11:58:45 CET 2003 - adrian@suse.de + +- add Provides kdebase3-konqueror + +------------------------------------------------------------------- +Mon Feb 17 14:16:08 CET 2003 - adrian@suse.de + +- use gtk[2]rc-$STYLE to be more flexible + +------------------------------------------------------------------- +Mon Feb 17 10:03:02 CET 2003 - adrian@suse.de + +- set enviroment to use special kde themings for gtk apps + +------------------------------------------------------------------- +Sun Feb 16 16:56:13 CET 2003 - adrian@suse.de + +- install kappfinder_install, fixes susewm build +- disable obsolete quick browser patch + +------------------------------------------------------------------- +Sun Feb 16 01:35:35 CET 2003 - adrian@suse.de + +- create susewatcher Desktop icon on the fly +- remove unneeded requires + +------------------------------------------------------------------- +Sat Feb 15 16:58:59 CET 2003 - adrian@suse.de + +- update 3_1_BRANCH patch +- fix qt/xrandr signal usage +- add konqueror preload patches from Lubos +- extend kdesktop addIcon api +- add additional Desktop path for kdesktop for susewatcher icons +- let kicker accept $HOME pathes + +------------------------------------------------------------------- +Tue Feb 11 01:30:10 CET 2003 - adrian@suse.de + +- let kdesktop use susewatcher directory +- add RandR tools + +------------------------------------------------------------------- +Fri Feb 7 13:28:53 CET 2003 - cschum@suse.de + +- new search index generation for khelpcenter which doesn't + necessarily need root permissions + +------------------------------------------------------------------- +Fri Jan 24 18:06:29 CET 2003 - adrian@suse.de + +- apply patches from Lubos to use XrandR +- add check for prelinked systems in startkde + +------------------------------------------------------------------- +Wed Jan 22 09:01:39 CET 2003 - adrian@suse.de + +- fix file list +- disable xsetroot in startkde + +------------------------------------------------------------------- +Fri Jan 17 14:50:13 CET 2003 - adrian@suse.de + +- use RC7-try2 tar ball + +------------------------------------------------------------------- +Thu Jan 16 16:29:09 CET 2003 - adrian@suse.de + +- update to RC7 +- merge kdebase3-konqueror into kdebase3 again +- do not link kdesysguardd against libkdefakes + +------------------------------------------------------------------- +Mon Jan 13 10:50:14 CET 2003 - adrian@suse.de + +- clean up #neededforbuild + +------------------------------------------------------------------- +Fri Jan 10 09:47:53 CET 2003 - coolo@suse.de + +- adding metadata to fillup +- use KDE_FAST_MALLOC only for distribution versions + < 8.2 (without metadata for them) + +------------------------------------------------------------------- +Wed Jan 8 17:16:41 CET 2003 - coolo@suse.de + +- using the real euro symbol instead of the subscript + (#21779) + +------------------------------------------------------------------- +Wed Jan 8 16:34:45 CET 2003 - coolo@suse.de + +- making cursor changes in kcontrol work (#21777) + +------------------------------------------------------------------- +Tue Jan 7 15:08:32 CET 2003 - adrian@suse.de + +- update to RC6 + +------------------------------------------------------------------- +Thu Dec 5 12:09:05 CET 2002 - adrian@suse.de + +- fix build + +------------------------------------------------------------------- +Tue Dec 3 16:45:23 CET 2002 - adrian@suse.de + +- apply kdesktop icon placement patches again. + +------------------------------------------------------------------- +Mon Dec 2 15:48:56 CET 2002 - adrian@suse.de + +- update startkde script to 3.1 + * fixes session handling + +------------------------------------------------------------------- +Sat Nov 30 21:49:13 CET 2002 - adrian@suse.de + +- new try of RC5 tar ball. BRANCH fixes are disabled again. + +------------------------------------------------------------------- +Fri Nov 29 14:45:59 CET 2002 - adrian@suse.de + +- revert kicker changes (compile failed with 2.95) + +------------------------------------------------------------------- +Thu Nov 28 16:07:58 CET 2002 - adrian@suse.de + +- use current 3_1_BRANCH fixes + +------------------------------------------------------------------- +Mon Nov 25 20:26:17 CET 2002 - adrian@suse.de + +- update to RC5 + +------------------------------------------------------------------- +Sun Nov 24 00:29:31 CET 2002 - adrian@suse.de + +- move kcm samba module into samba subpackage +- move thememgr into extra package + +------------------------------------------------------------------- +Sat Nov 23 17:59:54 CET 2002 - adrian@suse.de + +- fix build for < SuSE 7.3 + +------------------------------------------------------------------- +Wed Nov 20 12:09:05 CET 2002 - adrian@suse.de + +- remove obsolete kdm-xconsole patch + +------------------------------------------------------------------- +Wed Nov 20 11:24:05 CET 2002 - adrian@suse.de + +- update to version 3.1-RC4 (final ?) + +------------------------------------------------------------------- +Wed Nov 20 11:15:22 CET 2002 - adrian@suse.de + +- update to version 3.1-RC4 (final ?) + +------------------------------------------------------------------- +Fri Nov 15 10:46:41 CET 2002 - coolo@suse.de + +- removed one more patch that isn't needed with + the later CVS snapshot + +------------------------------------------------------------------- +Tue Nov 12 14:12:45 CET 2002 - coolo@suse.de + +- sorted patches out +- update snapshot to include a last minute fix for + new kdelibs + +------------------------------------------------------------------- +Wed Nov 6 17:36:07 CET 2002 - adrian@suse.de + +- update to snapshot 3.0.8.20021106 + +------------------------------------------------------------------- +Tue Nov 5 14:26:38 CET 2002 - adrian@suse.de + +- update to snapshot 20021030 + ( fixes file conflicts with kdelibs ) + +------------------------------------------------------------------- +Sun Nov 3 13:16:21 CET 2002 - adrian@suse.de + +- update to version 3.0.9.20021030 ~= RC1 + +------------------------------------------------------------------- +Tue Oct 8 21:23:32 CEST 2002 - adrian@suse.de + +- update to version 3.0.4 + +------------------------------------------------------------------- +Thu Sep 26 16:28:19 CEST 2002 - adrian@suse.de + +- limit kconsole log lines to 100 (fixes the memory "leak") +- kate encoding fix from HEAD (#20139) + +------------------------------------------------------------------- +Tue Sep 17 17:53:44 CEST 2002 - adrian@suse.de + +- fix kdesktop lock behaviour with "focus under mouse" settings + (credit for finding it goes to Lubos) + +------------------------------------------------------------------- +Fri Sep 13 14:19:07 CEST 2002 - coolo@suse.de + +- fixing the fix for nspluginscan + +------------------------------------------------------------------- +Wed Sep 11 01:00:30 CEST 2002 - adrian@suse.de + +- disable Console Login option in kdm menu + +------------------------------------------------------------------- +Mon Sep 9 17:54:53 CEST 2002 - adrian@suse.de + +- add fix from ossi to suppress "new session" buttons, when not + started via kdm +- use launch icon for "new session" entries +- fix acroread default colors + +------------------------------------------------------------------- +Mon Sep 9 13:49:55 CEST 2002 - coolo@suse.de + +- fixing #19212 in showing all printers if there is no + printer defined to be used + +------------------------------------------------------------------- +Mon Sep 9 02:31:07 CEST 2002 - adrian@suse.de + +- fix compile + +------------------------------------------------------------------- +Mon Sep 9 01:21:35 CEST 2002 - adrian@suse.de + +- fix focus handling with locking screensavers +- make kdm quiet + +------------------------------------------------------------------- +Sun Sep 8 13:50:27 CEST 2002 - adrian@suse.de + +- fixes from Ossi for chooser. I disable it anyway by default to + get sure. +- disable auto-new-session on lock +- use own Xsetup script (fix the double root window setup) +- fix kcontrol/kdm to write the right (superior) kdmrc file +- update the fallback kdmrc to fix values from kdebase3-SuSE +- move krootimage to kdm package +- add split alias for -kdm and -konqueror package + +------------------------------------------------------------------- +Fri Sep 6 01:08:50 CEST 2002 - adrian@suse.de + +- apply last bits from Ossi + * adds "create new session" feature +- remove chooser from menu button in kdm, since it does not work atm +- we still use kdmrc for kdm desktop settings, so kdm must some settings + (we do not need to replace the kcm module) +- disable the nohang patch, we are fast enough to live without now :) + +------------------------------------------------------------------- +Thu Sep 5 14:42:53 CEST 2002 - coolo@suse.de + +- found work around for nsplugin and real player plugin + (major PR 18083) + +------------------------------------------------------------------- +Wed Sep 4 10:44:22 MEST 2002 - coolo@suse.de + +- applying fix for PR18629 (suse tour broken) +- fixing rcksysguardd +- don't line up icons on font change + +------------------------------------------------------------------- +Wed Sep 4 01:11:43 CEST 2002 - adrian@suse.de + +- update to latest kdm version from ossi + * fixes possible seg fault / support user defined log file + * adds chooser + * GUI cleanup +- set background color after installing theme + +------------------------------------------------------------------- +Mon Sep 2 11:54:50 CEST 2002 - coolo@suse.de + +- don't crash kicker on switching desktops while renaming + +------------------------------------------------------------------- +Fri Aug 30 07:48:49 CEST 2002 - adrian@suse.de + +- fix for kfindpart crash ( it does since memory leak fix) +- install root theme also when kdesu has been used from a user + account before +- move kpersonalizer pictures to main package, the greeter is using it + +------------------------------------------------------------------- +Fri Aug 23 08:17:54 CEST 2002 - adrian@suse.de + +- we do not need kdm_position patch anymore (xconsole will go away :) +- add patch to check for kdmrc in /etc and /opt +- install and package kappfinder_install (used by susewm) +- do not create a sub menu for Terminal and Konq in kicker/quickbrowser +- disable tracing of kdesud via prctl() instead of set gid bit (hint from okir) +- hot fix for kdm xconsole + +------------------------------------------------------------------- +Wed Aug 21 00:19:34 CEST 2002 - adrian@suse.de + +- apply kdm xconsole patch from ossi with some changes +- let konqueror->Go->Applications go to {/etc/,}opt/kde3/share/applnk +- set explicit kcheckpass permissions in %files section +- use default kdmrc in /opt only and make /etc free for theme package +- add extra hooks for additional UL calls +- coolo: fix kicker_default patch +- coolo: fix khelpcenter startup + +------------------------------------------------------------------- +Tue Aug 20 10:49:57 CEST 2002 - coolo@suse.de + +- fixing kicker default for smaller resolutions + +------------------------------------------------------------------- +Mon Aug 19 21:27:19 CEST 2002 - adrian@suse.de + +- unset also QTDIR in startkde +- update khelpcenter to current HEAD snapshot + +------------------------------------------------------------------- +Mon Aug 19 15:07:15 CEST 2002 - coolo@suse.de + +- changed ShowUsers from All to NotHidden + +------------------------------------------------------------------- +Mon Aug 19 14:27:29 CEST 2002 - coolo@suse.de + +- use Nimbus Sans l when installed instead of helvetica + +------------------------------------------------------------------- +Sun Aug 18 12:19:18 CEST 2002 - adrian@suse.de + +- fix PreRequires + +------------------------------------------------------------------- +Wed Aug 14 14:52:46 CEST 2002 - coolo@suse.de + +- 400 is too few on 800x600 - 480 is minimum (6 buttons remaining) + +------------------------------------------------------------------- +Tue Aug 13 10:59:19 CEST 2002 - coolo@suse.de + +- changed kcheckpass to suid root again as discussed with kukuk + (needed for nisplus+ldap) + +------------------------------------------------------------------- +Mon Aug 12 15:09:54 CEST 2002 - coolo@suse.de + +- don't name the default_desktop stuff suse_ +- let the scripts specify the row/col +- fix the name of the resulting icons +- remove the file from auto start after having done the work +- keep 100 pixels more for the taskbar + +------------------------------------------------------------------- +Sun Aug 11 12:55:30 CEST 2002 - coolo@suse.de + +- splitting the kdesktop moving patch from the suse_default patch + and fixing both + +------------------------------------------------------------------- +Sat Aug 10 22:30:42 CEST 2002 - coolo@suse.de + +- changed the way kicker sets the default config + +------------------------------------------------------------------- +Sat Aug 10 20:46:47 CEST 2002 - adrian@suse.de + +- disable kdesktop patch for now + +------------------------------------------------------------------- +Sat Aug 10 18:58:21 CEST 2002 - adrian@suse.de + +- second try of gcc 3 fix for suse_move_default_desktop + (yes, again untested ;) + +------------------------------------------------------------------- +Sat Aug 10 18:40:15 CEST 2002 - adrian@suse.de + +- fix build for 7.3 and older + +------------------------------------------------------------------- +Sat Aug 10 11:28:23 CEST 2002 - adrian@suse.de + +- fix build of suse_move_default_desktop for gcc 3 + +------------------------------------------------------------------- +Fri Aug 9 17:38:38 CEST 2002 - adrian@suse.de + +- add workaround for plugins when compiled with gcc 3.x (from malte) + +------------------------------------------------------------------- +Fri Aug 9 15:41:09 CEST 2002 - coolo@suse.de + +- adding suse_move_default_desktop - to be used through + kdebase-SuSE (the name of the tool isn't visible to the + user, so other UL parties can use it too :) + +------------------------------------------------------------------- +Fri Aug 9 12:05:37 CEST 2002 - adrian@suse.de + +- fix build for older distributions + +------------------------------------------------------------------- +Thu Aug 8 17:43:07 CEST 2002 - adrian@suse.de + +- fix stupid typo in spec file + +------------------------------------------------------------------- +Thu Aug 8 02:55:20 CEST 2002 - adrian@suse.de + +- update to version 3.0.3 +- update khelpcenter from current HEAD + +------------------------------------------------------------------- +Wed Aug 7 09:52:22 CEST 2002 - coolo@suse.de + +- show the default printer's jobs by default + +------------------------------------------------------------------- +Tue Aug 6 15:37:14 CEST 2002 - coolo@suse.de + +- fixing the fix + +------------------------------------------------------------------- +Tue Aug 6 12:49:11 CEST 2002 - coolo@suse.de + +- extending konsole fix + +------------------------------------------------------------------- +Tue Aug 6 11:27:33 CEST 2002 - coolo@suse.de + +- fixing konsole on PPC + +------------------------------------------------------------------- +Fri Aug 2 14:05:08 CEST 2002 - coolo@suse.de + +- don't use lilo reboot option by default + +------------------------------------------------------------------- +Thu Aug 1 11:00:20 CEST 2002 - adrian@suse.de + +- fix PreRequires +- set default kdmrc greeting string to "United Linux 1.0" +- fix %post / %pre scripts + +------------------------------------------------------------------- +Wed Jul 24 20:20:44 CEST 2002 - adrian@suse.de + +- fix #neededforbuild + +------------------------------------------------------------------- +Mon Jul 22 10:55:34 CEST 2002 - coolo@suse.de + +- fixing scope of the lib64 patch + +------------------------------------------------------------------- +Fri Jul 19 15:03:18 CEST 2002 - adrian@suse.de + +- do not export KDE_MALLOC anymore + +------------------------------------------------------------------- +Thu Jul 18 23:34:11 CEST 2002 - adrian@suse.de + +- fix file list + +------------------------------------------------------------------- +Wed Jul 17 16:26:26 CEST 2002 - adrian@suse.de + +- split samba dependend libs into -samba subpackage +- use updated lib64 patches from coolo +- fix build for several changes in base system + +------------------------------------------------------------------- +Tue Jul 16 16:51:22 CEST 2002 - coolo@suse.de + +- fixing location for ldap on lib64 architectures +- fixing cddb entries for Schwab's CD + +------------------------------------------------------------------- +Sun Jul 14 19:18:36 CEST 2002 - adrian@suse.de + +- split sub-packages for kdm, konqueror and unneeded extra stuff. +- do not start kinternet for 8.1 and higher by startkde +- apply fix for smb kio from coolo +- apply fix for kpager from coolo +- apply fix to fix time stamps when handle with konqueror from coolo +- fix USE_FAM variable in startscript + +------------------------------------------------------------------- +Mon Jul 1 14:03:40 CEST 2002 - adrian@suse.de + +- fix default settings for klipper to start Netscape and Mozilla + +------------------------------------------------------------------- +Mon Jun 24 21:00:55 CEST 2002 - adrian@suse.de + +- update to version 3.0.2 + +------------------------------------------------------------------- +Wed Jun 12 14:24:38 CEST 2002 - coolo@suse.de + +- cleanup around $configkde + +------------------------------------------------------------------- +Mon Jun 10 20:11:45 CEST 2002 - adrian@suse.de + +- fix memory leak in kfind (partitial, but the bigger one ;) + +------------------------------------------------------------------- +Mon Jun 10 14:11:37 CEST 2002 - coolo@suse.de + +- adding fix for cddb computation + +------------------------------------------------------------------- +Mon Jun 10 00:56:03 CEST 2002 - adrian@suse.de + +- fix build on lib64 (audiocd slave) + +------------------------------------------------------------------- +Wed May 29 11:17:41 CEST 2002 - adrian@suse.de + +- use update_admin +- add extra optional script directory /opt/kde3/share/addon-scripts/ +- check for tmp-$HOST symlinks in startscript + +------------------------------------------------------------------- +Tue May 14 12:55:35 CEST 2002 - adrian@suse.de + +- update to 3.0.1, second try +- memory leak fixes for kicker + +------------------------------------------------------------------- +Fri May 10 13:43:31 CEST 2002 - adrian@suse.de + +- update to 3.0.1 + +------------------------------------------------------------------- +Tue May 7 15:28:30 CEST 2002 - meissner@suse.de + +- generic KDE Libdir fixes, fixed updatedialog compilation. + +------------------------------------------------------------------- +Wed Apr 17 14:04:55 CEST 2002 - adrian@suse.de + +- do not overwrite root-user settings + +------------------------------------------------------------------- +Mon Apr 15 13:12:58 CEST 2002 - adrian@suse.de + +- add pre install script to check for a /opt/kde3/share/config/kdm + directory. +- rename ksysguardd3 back to ksysguardd + +------------------------------------------------------------------- +Wed Mar 27 18:01:22 CET 2002 - adrian@suse.de + +- do not start kpersonilzer (fix it really) + +------------------------------------------------------------------- +Wed Mar 27 12:08:09 CET 2002 - adrian@suse.de + +- remove wrong double quotes around the Desktop copy routine +- disable kpersonalizer on autostart + (it mess up some systems during update) + +------------------------------------------------------------------- +Wed Mar 27 12:07:04 CET 2002 - kukuk@suse.de + +- Remove last konsole patch + +------------------------------------------------------------------- +Tue Mar 26 15:16:37 CET 2002 - adrian@suse.de + +- crash fix for konqueror, when browsing not readable directorys + (made by Andreas Schwab) + +------------------------------------------------------------------- +Mon Mar 25 20:33:10 CET 2002 - adrian@suse.de + +- update tar ball to 3.0 final, second try +- add window raise fix for ktaskbar in kicker + +------------------------------------------------------------------- +Mon Mar 25 11:25:49 CET 2002 - adrian@suse.de + +- update to 3.0 final (everything is wonderfull release) +- unset $KDEDIRS instead of exporting, we have /etc/kde3rc now + +------------------------------------------------------------------- +Thu Mar 21 17:43:25 CET 2002 - adrian@suse.de + +- update to 3.0rc3 +- change to new SuSE background, if the user is still using the + old version + +------------------------------------------------------------------- +Mon Mar 18 09:04:00 CET 2002 - adrian@suse.de + +- fix ~/.kde2->~/.kde copy routine + +------------------------------------------------------------------- +Fri Mar 15 00:33:20 CET 2002 - ro@suse.de + +- changed neededforbuild to + +------------------------------------------------------------------- +Sun Mar 10 23:07:19 CET 2002 - adrian@suse.de + +- fix %pre install script + +------------------------------------------------------------------- +Sun Mar 10 17:05:52 CET 2002 - adrian@suse.de + +- update to 3.0rc2 + +------------------------------------------------------------------- +Tue Mar 5 09:14:54 CET 2002 - ro@suse.de + +- fixed pre-install + +------------------------------------------------------------------- +Mon Mar 4 17:38:37 CET 2002 - adrian@suse.de + +- update to 3.0rc1 + +------------------------------------------------------------------- +Tue Feb 26 15:49:14 CET 2002 - adrian@suse.de + +- fix startscript (use changed sysconfig variables) + +------------------------------------------------------------------- +Tue Feb 26 14:41:14 CET 2002 - adrian@suse.de + +- fix updatedialog install + +------------------------------------------------------------------- +Tue Feb 26 13:03:32 CET 2002 - adrian@suse.de + +- update to snapshot 2.92.2002022519 + +------------------------------------------------------------------- +Thu Feb 14 01:11:30 CET 2002 - adrian@suse.de + +- update to snapshot 2.92.2002021421 +- move Doug Lea's malloc to kdelibs3 + (can be configured via kdebase3-SuSE) +- fix samba support +- add KDE 2 -> 3 update tool + +------------------------------------------------------------------- +Tue Feb 12 02:39:22 CET 2002 - adrian@suse.de + +- add optional Doug Lea's fast malloc implementation +- fix ownership of files + +------------------------------------------------------------------- +Mon Feb 11 15:14:13 CET 2002 - adrian@suse.de + +- update to snapshot 2.92.2002021111 +- add rckdm symlink +- kdm follows qtrc + +------------------------------------------------------------------- +Wed Feb 6 21:57:56 CET 2002 - adrian@suse.de + +- update to version 2.92 (KDE 3.0 beta 2) +- use common_compile_flags + +------------------------------------------------------------------- +Tue Jan 29 12:56:23 CET 2002 - adrian@suse.de + +- fix startkde script to call startkde.theme early enough + +------------------------------------------------------------------- +Mon Jan 28 16:52:04 CET 2002 - adrian@suse.de + +- fix $KDEDIRS + +------------------------------------------------------------------- +Mon Jan 28 15:21:04 CET 2002 - adrian@suse.de + +- update to snapshot 2.91.2002012811 + +------------------------------------------------------------------- +Sun Jan 27 16:47:04 CET 2002 - schwab@suse.de + +- Remove invalid use of PAGE_SHIFT. + +------------------------------------------------------------------- +Wed Jan 23 00:46:05 CET 2002 - adrian@suse.de + +- update to snapshot 2.91.2002012221 +- move all distribution version depending configure stuff + to kdebase3-SuSE + +------------------------------------------------------------------- +Wed Jan 16 14:39:09 CET 2002 - adrian@suse.de + +- really fix the kde start link + +------------------------------------------------------------------- +Tue Jan 15 18:29:37 CET 2002 - adrian@suse.de + +- update to snapshot 2.91.2002011511 +- fix kde start link for 7.3.99 development version + +------------------------------------------------------------------- +Tue Jan 8 17:34:22 CET 2002 - adrian@suse.de + +- use current CVS snapshot +- disable rpath linking depending on kdelibs + +------------------------------------------------------------------- +Tue Dec 18 01:01:14 CET 2001 - adrian@suse.de + +- update to version 2.91 (3.0 beta1) + +------------------------------------------------------------------- +Tue Dec 4 20:14:18 CET 2001 - adrian@suse.de + +- use current cvs snapshot + +------------------------------------------------------------------- +Fri Nov 2 12:32:18 CET 2001 - adrian@suse.de + +- using cvs snapshot from 01 Nov. 2001 + ( compiles again with qt 3 final ) + +------------------------------------------------------------------- +Tue Sep 25 19:08:50 CEST 2001 - adrian@suse.de + +- remove a part of setuid-kdm patch, which caused hanging and + killing a bit too much processes +- added diff to avoid killing arbitrary processes + +------------------------------------------------------------------- +Mon Sep 24 10:50:04 CEST 2001 - adrian@suse.de + +- add setuid-kdm patch (SECURITY FIX) +- remove export $LANGUAGE from startkde +- remove testing patch from kdm +- fix KOffice icon really +- add fixes for IconDialog in kmenuedit and kicker + (all icons are back) + +------------------------------------------------------------------- +Fri Sep 21 17:17:30 CEST 2001 - adrian@suse.de + +- fix icon positions again +- change ktip picture +- add dcopserver_shutdown also before a new session is started + (no more login problems;) +- kdm greeter will do not cover xconsole anymore +- fix kcmkdm to use the right kdmrc file (and not to remove the link) +- fix SuSEconfig.kdm2 for security non-easy mode ("NoStars"->"NoEcho") +- fix Home/End keys in konsole _really_ +- fix SegFault in audiocd+lame after first title +- add some last fixes for kdm (thanks a lot, ossi) +- fix ksysguardd start script (kill only, if pid file present) +- change koffice icon from unkown->xedit + +------------------------------------------------------------------- +Thu Sep 20 23:00:34 CEST 2001 - adrian@suse.de + +- add dcopserver_shutdown from HEAD branch and call it in startkde + +------------------------------------------------------------------- +Thu Sep 20 18:41:33 CEST 2001 - adrian@suse.de + +- add fix for wrong ownership of $HOME/.wmrc + +------------------------------------------------------------------- +Thu Sep 20 12:37:43 CEST 2001 - adrian@suse.de + +- change icon for kwintv template + +------------------------------------------------------------------- +Wed Sep 19 00:18:35 CEST 2001 - mfabian@suse.de + +- fix for bug #10464: + make Japanese input possible even when UNIX-style application + shortcuts are selected (Japanese input becomes impossible + when the keyboard shortcut for "SelectAll" is empty. This + workaround sets it to "Alt+Ctrl+Shift+A" instead). +- patch for kpersonalizer to handle encoding as well + +------------------------------------------------------------------- +Tue Sep 18 15:24:30 CEST 2001 - adrian@suse.de + +- add signal handler fix for smbro: +- revert patch for konsole, which breaks the Home/End keys +- minor theme improvements +- add fixes kcontrol: + * size for YaST2 + * broken about page for Menus with sub folders + * rename Modify button to root button + +------------------------------------------------------------------- +Wed Sep 12 13:47:54 CEST 2001 - adrian@suse.de + +- apply cvs branch fix (fix icon desktop handling) +- improve startkde.devices script for better icon positioning + +------------------------------------------------------------------- +Tue Sep 11 20:03:15 CEST 2001 - adrian@suse.de + +- update to second try of kdebase 2.2.1 tar ball + +------------------------------------------------------------------- +Sat Sep 8 21:00:27 CEST 2001 - adrian@suse.de + +- update to 2.2.1 +- fix sane check for kooka icon +- make the Euro char working again in konsole +- fix CD-R icon on desktop + +------------------------------------------------------------------- +Wed Sep 5 17:01:07 CEST 2001 - adrian@suse.de + +- add kwintv and kooka to start scripts +- fix file conflicts +- apply patch from kukuk: do not show lilo menu on non i386 architectures + +------------------------------------------------------------------- +Tue Sep 4 16:55:46 CEST 2001 - adrian@suse.de + +- update to current KDE_2_2_BRANCH ( 04.09.2001 ) + * konsole fixes again + * translation updates + * audiocd fix for Xing tag writing + * charset define fix in kcontrol title +- fix startkde & SuSEconfig scripts + +------------------------------------------------------------------- +Sun Sep 2 10:46:05 CEST 2001 - adrian@suse.de + +- update to current KDE_2_2_BRANCH ( 02.09.2001 ) + * ksmserver checks disk-space in error handling + * removed startup notification for kpager + * fix x screen savers + * kate fixes + * konsole fixes +- add fallbackAppliation lines to templates +- fix startkde scripts for new theme + +------------------------------------------------------------------- +Wed Aug 29 08:22:56 CEST 2001 - adrian@suse.de + +- fix logo patch + +------------------------------------------------------------------- +Tue Aug 28 12:01:34 CEST 2001 - adrian@suse.de + +- update to current KDE_2_2_BRANCH ( 28.08.2001 ) + * better gui in kcontrol file handling + * konsole fixes + * crash fix for konqueror about:blank + * translation updates +- kdm pam support fix + +------------------------------------------------------------------- +Tue Aug 28 02:24:23 CEST 2001 - adrian@suse.de + +- fix startkde scripts for new theme + +------------------------------------------------------------------- +Mon Aug 27 00:51:40 CEST 2001 - ro@suse.de + +- fix typo in specfile (build-root dir was missing in one place) + +------------------------------------------------------------------- +Sat Aug 25 10:30:24 CEST 2001 - adrian@suse.de + +- update to current KDE_2_2_BRANCH + * several fixes for konsole +- split and cleanup SuSE startkde script +- do not apply kcm modules twice on KDE start + +------------------------------------------------------------------- +Tue Aug 21 18:01:42 CEST 2001 - adrian@suse.de + +- update to current KDE_2_2_BRANCH + * fixes for icon handling on desktop + * konsole fixes and enhencements + * kpersonalizer fixes + * icon cleaning + * several kicker fixes +- dlopen libmp3lame if present +- add README and spec file to compile lame +- obsolete kdebase-i686 until objprelink does work better +- move ksysguardd to /usr/bin/ + +------------------------------------------------------------------- +Mon Aug 6 12:47:43 CEST 2001 - adrian@suse.de + +- update to final 2.2 +- add optimized -i686 package for i386 architecture +- add start scripts for ksysguardd +- add SuSE menu kicker patch + +------------------------------------------------------------------- +Wed Aug 1 16:46:21 CEST 2001 - adrian@suse.de + +- update to 2.2rc1 + +------------------------------------------------------------------- +Fri Jun 29 15:39:23 CEST 2001 - adrian@suse.de + +- 2.2beta1 + +------------------------------------------------------------------- +Mon May 28 10:39:45 CEST 2001 - adrian@suse.de + +- 2.2alpha2 + +------------------------------------------------------------------- +Tue May 22 12:59:22 CEST 2001 - adrian@suse.de + +- switch greeting font in kdm to helvetica +- write correct codec numbers for ja,ko,zh +- fix anti_xsnow_pro_netscape fix + +------------------------------------------------------------------- +Tue May 15 19:16:32 CEST 2001 - adrian@suse.de + +- fix kdialog dialog + +------------------------------------------------------------------- +Tue May 15 18:03:03 CEST 2001 - adrian@suse.de + +- add hack to workaround a segfault from Flash6 plugin +- fix root warning in startkde + +------------------------------------------------------------------- +Mon May 14 19:01:28 CEST 2001 - adrian@suse.de + +- my last try to get the top icons in line + (startkde script changes) + +------------------------------------------------------------------- +Sat May 12 08:18:59 CEST 2001 - adrian@suse.de + +- set rc.config variable back to auto + (the users get a asterix in passwd field by default) +- set konsole keytab to XFree86 3 by default, F-Keys are working now +- change picture in ktip + +------------------------------------------------------------------- +Fri May 11 13:18:15 CEST 2001 - adrian@suse.de + +- fix SuSEconfig.kdm2 for LANG=C +- improve icon positions on desktop + +------------------------------------------------------------------- +Thu May 10 14:26:34 CEST 2001 - adrian@suse.de + +- fix lock up if $LANG is not set +- fix not translated Floppy +- add bookmarks to menu +- add SuSE icon to desktop + +------------------------------------------------------------------- +Mon May 7 22:06:49 CEST 2001 - adrian@suse.de + +- fix permissions in kdebase-conf.tar.bz2 +- big icons on panel only for >1280x1024 +- revert coolo's xsnow hack + (it is summer, netscape is more important and it reduces the load) + (BTW: dpms was also broken by this hack ...) +- check for broken SM entry for kicker in kwin:* +- change KDM_SHUTDOWN default to local + +------------------------------------------------------------------- +Sun May 6 14:11:52 CEST 2001 - adrian@suse.de + +- reorganize startkde script to use old and new mountpoints and + translate application icons on desktop +- update to current KDE_2_1_BRANCH +- fix kdm to use Language from kdmrc and not configuration from root +- fix SuSEconfig.kdm2 to write language depended GreetString +- make kcontrol widther by default for YaST2 +- ignore LastLogin in kdmrc for md5sum +- add own kickerrc for resolution 1024 and more +- fix wmlist handling +- drop libkicker_internal.la to fix crashes as suggested by Waldo +- add public_html link to konqueror tree +- add drives folder to konqueror tree +- fix broken line in proxy.desktop + +------------------------------------------------------------------- +Tue May 1 17:41:08 CEST 2001 - adrian@suse.de + +- kcmshell reposition for YaST2 modules +- use iso-8895-15 to support the EUR + +------------------------------------------------------------------- +Wed Apr 25 00:18:14 CEST 2001 - adrian@suse.de + +- drop sensors support (do it really destroy thinkpads ?, not my ;-) +- add konsole patch from mls for latin9 + +------------------------------------------------------------------- +Mon Apr 23 21:41:12 CEST 2001 - adrian@suse.de + +- use SuSEwizard for setup +- strip leading /media/ for device icons +- cleanup startkde + +------------------------------------------------------------------- +Wed Apr 18 14:34:25 CEST 2001 - adrian@suse.de + +- switch off --enable-final for axp + +------------------------------------------------------------------- +Fri Apr 13 11:23:57 CEST 2001 - adrian@suse.de + +- show currency symbol/Euro() in kcontrol font dialog + +------------------------------------------------------------------- +Wed Apr 11 17:21:08 CEST 2001 - adrian@suse.de + +- fix SuSEconfig.kdm2 +- fix conflicts in sub packages + +------------------------------------------------------------------- +Mon Apr 9 17:30:32 CEST 2001 - adrian@suse.de + +- added dialog box while root login. Hopefully no more magazines + will write about our ugly red standard desktop. + But I do not believe it. +- disable alsa for 7.0-ppc + +------------------------------------------------------------------- +Fri Apr 6 13:21:43 CEST 2001 - adrian@suse.de + +- -O2 for axp + apply NOnostdlib patch (resolve hopefully ppc link problems) + +------------------------------------------------------------------- +Fri Mar 30 01:52:53 CEST 2001 - ro@suse.de + +- neededforbuild fix + +------------------------------------------------------------------- +Thu Mar 29 00:56:47 CEST 2001 - mfabian@suse.de + +- I didn't apply the patch for my last changelog entry correctly. + fixed. + +------------------------------------------------------------------- +Tue Mar 27 21:48:17 CEST 2001 - mfabian@suse.de + +- use correct charset for Japanese, Korean, and Chinese in + "startkde" +- use "default" as the font for Japanese, Korean, and Chinese + in /sbin/conf.d/SuSEconfig.kdm2 +- add "GreetString[ja]" to /opt/kde2/share/config/SuSE/config/kdmrc +- add "windowmanager" to "Provides:" + +------------------------------------------------------------------- +Tue Mar 27 12:08:52 CEST 2001 - ro@suse.de + +- changed neededforbuild to + +------------------------------------------------------------------- +Sat Mar 24 11:52:42 CET 2001 - adrian@suse.de + +- go back to -O0 for ppc + disable cdparanoia support for 6.3 + +------------------------------------------------------------------- +Wed Mar 21 20:55:31 CET 2001 - adrian@suse.de + +- remove QT_XFT=yes from startkde to reduce problems with + NVidia Vanta cards + +------------------------------------------------------------------- +Tue Mar 20 21:57:33 CET 2001 - adrian@suse.de + +- enable -O2 for ppc + +------------------------------------------------------------------- +Tue Mar 20 18:53:25 CET 2001 - adrian@suse.de + +- update to 2.1.1 (official tar ball) + +------------------------------------------------------------------- +Tue Mar 20 14:53:56 CET 2001 - adrian@suse.de + +- add feature to kicker (SuSE menu as main menu now possible) + +------------------------------------------------------------------- +Mon Mar 19 22:12:11 CET 2001 - adrian@suse.de + +- fix patches again :-( + +------------------------------------------------------------------- +Sun Mar 18 18:43:10 CET 2001 - adrian@suse.de + +- fix patches + +------------------------------------------------------------------- +Sat Mar 17 14:22:54 CET 2001 - adrian@suse.de + +- update to current 2_1_BRANCH + +------------------------------------------------------------------- +Thu Mar 15 18:23:12 CET 2001 - ro@suse.de + +- changed neededforbuild to +- changed neededforbuild to + +------------------------------------------------------------------- +Thu Mar 15 01:08:35 CET 2001 - ro@suse.de + +- fixed neededforbuild for openldap + +------------------------------------------------------------------- +Tue Mar 13 10:06:50 CET 2001 - ro@suse.de + +- removed second occurence of docbk30 from neededforbuild + +------------------------------------------------------------------- +Tue Mar 13 01:12:28 CET 2001 - ro@suse.de + +- changed neededforbuild to + +------------------------------------------------------------------- +Wed Mar 7 16:58:40 CET 2001 - ro@suse.de + +- changed neededforbuild to + +------------------------------------------------------------------- +Wed Feb 28 17:38:47 CET 2001 - schwab@suse.de + +- kcontrol: Use getpagesize() to determine page size. + +------------------------------------------------------------------- +Tue Feb 27 11:20:53 CET 2001 - ro@suse.de + +- changed neededforbuild to + +------------------------------------------------------------------- +Wed Feb 21 18:15:39 CET 2001 - adrian@suse.de + +- update to final 2.1.0 + +------------------------------------------------------------------- +Mon Feb 19 14:38:11 CET 2001 - adrian@suse.de + +- update to 2.1 post beta 2 + +------------------------------------------------------------------- +Wed Jan 24 15:18:37 CET 2001 - adrian@suse.de + +- fix konsole for non iso8859-1 + add Mozilla to desktop, if Netscape is not installed + make SuSEconfig.kdm2 output nicer + a little bit heigher welcome screen + +------------------------------------------------------------------- +Mon Jan 22 18:13:46 CET 2001 - adrian@suse.de + +- fix maximize button in SuSE decoration + +------------------------------------------------------------------- +Mon Jan 22 15:45:55 CET 2001 - adrian@suse.de + +- set nr of mixer in kcontrol to 1 bye default, this fix the + error lines in xconsole +- fix not translated icons on desktop + +------------------------------------------------------------------- +Wed Jan 17 17:40:28 CET 2001 - adrian@suse.de + +- changed kcheckpass to setgroudid shadow instead of setuserid root + add kinternet call to startkde + fixed web font sizes + fixed kde menu icons + fixed non iso-8859-1 language support + +------------------------------------------------------------------- +Wed Jan 17 11:13:54 CET 2001 - adrian@suse.de + +- fix locolor config for standard user and root user settings + +------------------------------------------------------------------- +Mon Jan 15 19:07:42 CET 2001 - adrian@suse.de + +- fix info service + +------------------------------------------------------------------- +Mon Jan 15 13:31:24 CET 2001 - adrian@suse.de + +- fix welcome page size for resolutions>1152 + switch to small desktop font, which looks better + fix czech trash bin name on desktop + update logo on desktop + +------------------------------------------------------------------- +Sun Jan 14 17:12:46 CET 2001 - adrian@suse.de + +- fix hang in SuSEconfig.kdm2, when REAL_LANG is empty + +------------------------------------------------------------------- +Sat Jan 13 18:52:49 CET 2001 - adrian@suse.de + +- fix fallback icon for applications in kicker + fix welcome page start (does not start anymore in second login) + fix SuSE decoration close function from menu + +------------------------------------------------------------------- +Fri Jan 12 11:31:41 CET 2001 - adrian@suse.de + +- new tar ball from KDE_2_0_BRANCH (fix ksysguard bug) + change kcontrol root button label + a little work on the logo + fix rc.config template + fix $LANG problem in welcome page startup + +------------------------------------------------------------------- +Thu Jan 11 23:16:43 CET 2001 - adrian@suse.de + +- changed logo + changed inactive text color in window header + +------------------------------------------------------------------- +Thu Jan 11 10:11:55 CET 2001 - adrian@suse.de + +- delete debug lines in SuSEconfig.kdm2 (cause a hang) + +------------------------------------------------------------------- +Wed Jan 10 17:11:15 CET 2001 - adrian@suse.de + +- fix SuSEconfig.kdm2 for czech people + workaround KDE bug in charset selection via script + fix startkde function for suppress double desktop icons + +------------------------------------------------------------------- +Tue Jan 9 21:21:53 CET 2001 - adrian@suse.de + +- fix welcome page start + fix bg colors. 220,220,220 again. + added security fix for kdesud from Waldo + +------------------------------------------------------------------- +Sun Jan 7 16:44:24 CET 2001 - adrian@suse.de + +- fix update problems due to changed icon handling + +------------------------------------------------------------------- +Sun Jan 7 14:55:50 CET 2001 - adrian@suse.de + +- change icon handling + +------------------------------------------------------------------- +Thu Jan 4 15:58:53 CET 2001 - adrian@suse.de + +- changes in SuSE theme + workaround slow mouse acceleration from XFree 4 + added fix for stolen focus in kdm (Thanks Waldo) + fix ktip start on every KDE start + do not set $LANG new anymore, since kdelibs are fixed + new tar ball with Kernel 2.4 fix in ksysguard (Thanks Chris) + +------------------------------------------------------------------- +Tue Jan 2 21:54:08 CET 2001 - adrian@suse.de + +- font handling fix for AA (thanks Kurt) + +------------------------------------------------------------------- +Mon Jan 1 19:59:35 CET 2001 - adrian@suse.de + +- add kdm resize patch for little resolutions + fix SuSEconfig.kdm2 for languages with no defined charsets + set $LANG for KDE 2 in startkde (for a desktop with native language) + +------------------------------------------------------------------- +Sat Dec 30 20:05:15 CET 2000 - adrian@suse.de + +- fixed two .desktop files for kcontrol + minor fix in startkde + new version of SuSE decoration + +------------------------------------------------------------------- +Fri Dec 22 11:19:45 CET 2000 - adrian@suse.de + +- switch off the X11 resource manager by default + set TERM=kvt for konsole (several Keys like Pos1 are working now) + minor fix in startkde + +------------------------------------------------------------------- +Wed Dec 20 18:38:54 CET 2000 - adrian@suse.de + +- fix SuSEconfig.kdm2 for non iso-8859-1 + added option to disable SuSE theme + added --SuSE function to ksplash + added kdm sec patch from waldo + +------------------------------------------------------------------- +Mon Dec 18 16:13:24 CET 2000 - adrian@suse.de + +- make symbol labels nicer + do not show double icons + added rc.config entrys for kdm + +------------------------------------------------------------------- +Sun Dec 10 23:15:40 CET 2000 - adrian@suse.de + +- extend startkde for dvd and cdrecorder + added logo background mode + changed kicker configuration + fixed line up function for icons on root window + enabled Mesa support again + +------------------------------------------------------------------- +Sat Dec 9 12:49:12 CET 2000 - adrian@suse.de + +- fixing startkde and working on the SuSE theme + +------------------------------------------------------------------- +Wed Dec 6 12:48:53 MET 2000 - adrian@suse.de + +- fixed kde link + +------------------------------------------------------------------- +Wed Nov 29 23:03:42 CET 2000 - adrian@suse.de + +- update to 2.0.1 + +------------------------------------------------------------------- +Tue Nov 21 09:20:25 CET 2000 - ro@suse.de + +- switch to openmotif + +------------------------------------------------------------------- +Tue Nov 21 00:10:43 CET 2000 - adrian@suse.de + +- moved non kde icon support to kdelibs + added drive icon creation to startkde + +------------------------------------------------------------------- +Fri Nov 17 15:15:26 CET 2000 - adrian@suse.de + +- fixed kdm + +------------------------------------------------------------------- +Fri Nov 17 14:57:54 CET 2000 - ro@suse.de + +- fixed neededforbuild: += libmng-devel + +------------------------------------------------------------------- +Thu Nov 16 15:51:08 CET 2000 - adrian@suse.de + +- update to newer snapshot from KDE_2_0_BRANCH + +------------------------------------------------------------------- +Fri Nov 3 08:54:32 CET 2000 - adrian@suse.de + +- fixed needed for build + +------------------------------------------------------------------- +Thu Nov 2 20:40:00 CET 2000 - adrian@suse.de + +- fixed file list + +------------------------------------------------------------------- +Tue Oct 17 05:36:10 CEST 2000 - adrian@suse.de + +- update to 2.0.0 +- added SuSE decoration +- splitted package into + * kdebase + * kdebase-devel + +------------------------------------------------------------------- +Tue Sep 12 08:58:16 CEST 2000 - adrian@suse.de + +- update to RC 1 + +------------------------------------------------------------------- +Mon Aug 21 16:49:08 CEST 2000 - adrian@suse.de + +- update to beta 4 / 1.93 + +------------------------------------------------------------------- +Mon Jul 31 17:10:27 CEST 2000 - adrian@suse.de + +- added workaround for localized startup + (KDE2 can not handle aliases) + +------------------------------------------------------------------- +Mon Jul 24 18:00:53 CEST 2000 - adrian@suse.de + +- update to second try of beta 3 + +------------------------------------------------------------------- +Fri Jul 21 22:54:34 CEST 2000 - adrian@suse.de + +- update to beta 3 + +------------------------------------------------------------------- +Mon Jul 17 19:27:38 CEST 2000 - adrian@suse.de + +- update to snapshot from 17.07.2000 + +------------------------------------------------------------------- +Thu Jul 13 22:58:33 CEST 2000 - adrian@suse.de + +- fixed really the filelist + +------------------------------------------------------------------- +Wed Jul 12 11:37:22 CEST 2000 - adrian@suse.de + +- fixed filelist and fix for older distris + +------------------------------------------------------------------- +Mon Jul 10 17:30:49 CEST 2000 - adrian@suse.de + +- fix start script + +------------------------------------------------------------------- +Mon Jul 10 08:05:46 CEST 2000 - adrian@suse.de + +- update to snapshot from 06.07.2000 + +------------------------------------------------------------------- +Sun Jun 11 12:23:21 CEST 2000 - adrian@suse.de + +- added netscape plugin support + +------------------------------------------------------------------- +Fri Jun 9 17:16:56 CEST 2000 - adrian@suse.de + +- added workarounds in startkde + +------------------------------------------------------------------- +Fri Jun 9 08:03:53 CEST 2000 - adrian@suse.de + +- update to 1.91; beta 2 + +------------------------------------------------------------------- +Sun May 28 09:24:03 CEST 2000 - adrian@suse.de + +- snapshot from 28.05.2000 + new type of spec file + +------------------------------------------------------------------- +Fri May 12 18:09:02 CEST 2000 - adrian@suse.de + +- update to 1.90 + +------------------------------------------------------------------- +Thu Apr 27 18:25:40 CEST 2000 - adrian@suse.de + +- snapshot from 25.04.2000 + +------------------------------------------------------------------- +Wed Apr 19 17:19:28 CEST 2000 - adrian@suse.de + +- snapshot from 17.04.2000 + +------------------------------------------------------------------- +Fri Mar 31 17:05:43 CEST 2000 - adrian@suse.de + +- the first KDE 2 snapshot. still PRE 1.90 + diff --git a/opensuse/core/tdebase/tdebase.fillup b/opensuse/core/tdebase/tdebase.fillup new file mode 100644 index 000000000..d2e2beeb8 --- /dev/null +++ b/opensuse/core/tdebase/tdebase.fillup @@ -0,0 +1,25 @@ +## Type: yesno +## Default: no +## Path: Desktop/KDE +## Description: KDE uses fam support +# +# KDE use the fam daemon +# (makes only sense on NFS mounted directorys) +# +KDE_USE_FAM="no" + +## Type: string +## Default: +# +# space separated list of users for which icons should be shown in KDM +# if empty, then take system defaults +# +KDM_USERS="" + +## Type: string +## Default: +# +# Special greeting words in kdm +# +KDM_GREETSTRING="" + diff --git a/opensuse/core/tdebase/tdebase.spec b/opensuse/core/tdebase/tdebase.spec new file mode 100644 index 000000000..52d6c3c81 --- /dev/null +++ b/opensuse/core/tdebase/tdebase.spec @@ -0,0 +1,1851 @@ +# +# spec file for package kdebase3 +# +# Copyright (c) 2011 SUSE LINUX Products GmbH, Nuernberg, Germany. +# +# All modifications and additions to the file contributed by third parties +# remain the property of their copyright owners, unless otherwise agreed +# upon. The license for this file, and modifications and additions to the +# file, is the same license as for the pristine package itself (unless the +# license for the pristine package is not an Open Source License, in which +# case the license is the MIT License). An "Open Source License" is a +# license that conforms to the Open Source Definition (Version 1.9) +# published by the Open Source Initiative. + +# Please submit bugfixes or comments via http://bugs.opensuse.org/ +# + +# norootforbuild + +%if %suse_version < 1210 || 0%{?is_kde_kde3} > 0 +%define with_hal 1 +%else +%define with_hal 0 +%endif + +Name: kdebase3 +BuildRequires: OpenEXR-devel cups-devel db-devel doxygen graphviz kdelibs3-devel krb5-devel libsmbclient-devel mDNSResponder-devel openldap2 openldap2-devel openmotif openmotif-devel openslp-devel openssh pam-devel pcsc-lite-devel qt3-devel-doc samba-client utempter xorg-x11 +BuildRequires: unsermake xorg-x11-libfontenc-devel +BuildRequires: liblazy-devel +%if %suse_version >= 1130 +BuildRequires: libusb-compat-devel +%endif +%if 0%{?with_hal} > 0 +BuildRequires: hal-devel +Provides: kdebase3-with-hal-enabled +%endif +BuildRequires: fdupes libbz2-devel +%ifnarch s390 s390x +BuildRequires: libsensors4-devel +%endif +%define qt_path /usr/lib/qt3 +%define kde_path /opt/kde3 +Provides: windowmanager kfontinst kdebase3-konqueror kdebase3-khotkeys +Obsoletes: kfontinst kdebase3-konqueror kdebase3-khotkeys +# bug437293 +%ifarch ppc64 +Obsoletes: kdebase3-64bit +%endif +# +Requires: kdelibs3 >= %( echo `rpm -q --queryformat '%{VERSION}' kdelibs3`) +Requires: xorg-x11 misc-console-font +Recommends: kdelibs3_doc +Recommends: gdb +PreReq: fileshareset +%define fileshare_prefix %{_prefix} +Conflicts: kdebase3-SuSE <= 9.0 +PreReq: /bin/sh fileutils permissions +%if %suse_version < 1120 +Requires: kdebase3-apps kdebase3-workspace +%endif +%if %suse_version > 1130 +Provides: kdebase3-beagle = 3.5.10 +Obsoletes: kdebase3-beagle <= 3.5.10 +%endif +License: GPLv2+ +Group: System/GUI/KDE +Summary: The KDE Core Components +BuildRoot: %{_tmppath}/%{name}-%{version}-build +Url: http://www.kde.org/ +Version: 3.5.10.1 +Release: 17 +%define kde_version 3.5.10 +Requires: kdebase3-runtime == %{version} +Source0: kdebase-%{kde_version}.tar.bz2 +Source1: baselibs.conf +Source3: startkde.suse.sh +Source4: kdebase3.fillup +Source6: ksysguardd.init +# we append this file for older dist verions +Source8: mp3-info.tar.bz2 +Source9: wizard_small.png +# kicker gets messed up, if it got deinstalled +Source11: kickerrc +# from HEAD/3.2: +Source12: console8x16.pcf.gz +Source13: fileshareset2.tar.bz2 +Source914: kdm-pam-np-legacy +Source15: ksysguardd.reg +Source16: stopkde.suse.sh +Source17: zh_TW.flag.png +Source18: fileshareset.8.gz +Source19: kcheckpass.8.gz +Source20: kickoff-data.tar.bz2 +Source21: kcheckpass-pam-11.1 +Source921: kcheckpass-pam-11.0 +Source9921: kcheckpass-pam-legacy +Source22: bnc.desktop +Source23: sourceforge.desktop +Source24: devmon-automounter.sh +Patch0: 3_5_BRANCH.diff +Patch3: startkde.diff +Patch5: media-iPod.diff +Patch6: ksysguardd-openslp.diff +Patch7: fix-kio-smb-auth.diff +Patch8: konsole_keytab.diff +Patch10: kdesud-security.diff +Patch11: clock-applet-style.diff +Patch12: dont-always-start-kaccess.diff +Patch14: autorun.patch +Patch15: artwork.diff +# TODO +Patch16: kfontinst.diff +Patch17: nsplugin-Preference.diff +Patch20: ksplashml.patch +Patch21: media_suse.diff +Patch22: libkonq-kdemm.diff +Patch39: kdesktop_icons.diff +Patch40: suse_default_move.diff +Patch44: clock-suse-integrate.diff +Patch45: klipperrc.diff +Patch46: lock-xvkbd.diff +Patch51: kcontrol.diff +Patch60: short-menus.diff +# from http://fred.hexbox.de/kde_patches/kmenu-search-fs20050503.diff +Patch61: kmenu-search-fs20050503-fixed.diff +Patch62: fix-kcontrol-yast.diff +Patch63: quick_browser_menu.diff +Patch64: default_fonts.diff +#kdm +Patch69: kdm-cope-with-new-grub.diff +Patch70: kdm-aliasing.diff +Patch71: kdm-mark_autologin.diff +Patch72: kdm-all-users-nopass.diff +Patch74: kdm-sysconfig-values.diff +# svn diff $BASE/branches/KDE/3.5/kdebase/kdm@599257 $BASE/branches/work/coolos_kdm | sed -e "s,^+++ ,+++ kdm/," +Patch75: kdm-make_it_cool.diff +Patch76: kdm-admin-mode.diff +Patch77: kdm-suspend-hal.diff +Patch78: kdm-relaxed-auth.diff +Patch79: kdm-wordbreak.diff +Patch80: non-fast-malloc.diff +Patch81: ksmserver-defaulttohalt.diff +Patch82: fix-lockup-from-gnome-apps.diff +Patch83: ksmserver-suspend.diff +Patch84: default-kdeprintfax.diff +Patch85: ksmserver-tooltips.diff +Patch88: hide-only-showin-entries.diff +Patch92: kcminit-ignore-arts.diff +Patch94: mach_blass.diff +Patch96: khelpcenter-gnome-support.patch +Patch996: khelpcenter-gnome-support-legacy.patch +Patch98: workaround-pdf-on64bit-nsplugin-bug.diff +Patch99: xcursor.diff +Patch100: ksysguard-slp-ratelimit.diff +Patch104: locale-dont-show-flag.diff +Patch105: kscreensaver-random-NG.diff +Patch111: fix_default_theme_reset.diff +Patch114: improve-panelservicemenu-geticonset.diff +Patch116: teach-minicli-lock.diff +Patch117: access.diff +Patch120: kmenu-search-slowdown-fix.diff +Patch123: less_verbal_kdesu.patch +Patch125: kicker-defaults.diff +Patch126: kdebase_khc_rellinks.diff +Patch127: khelpcenter-use-suseconfig-indexer.diff +Patch131: background_default.diff +Patch141: khelpcenter-use-susehelp.diff +Patch144: make-wallpapers-hideable.diff +Patch145: kdebase_networkstatus_branch.diff +Patch149: kdeeject.diff +Patch155: use-full-hinting-by-default.diff +Patch156: kcmshell_use_kde-sound.diff +Patch157: kcmsamba_log.diff +Patch160: khelpcenter-localindices.patch +Patch161: applet-lock-logout.diff +# svn diff $BASE/branches/KDE/3.5/kdebase/kicker@849788 $BASE/branches/work/suse_kickoff_qstyle/kicker | clean_patch +Patch162: kickoff.diff +Patch1629: kickoff-beagle.diff +# svn diff $BASE/branches/KDE/3.5/kdebase/kcontrol/kicker@755866 $BASE/branches/work/suse_kickoff_qstyle/kcontrol/kicker +Patch158: kickoff-kcm.diff +# svn diff -r 551296:HEAD khelpcenter +Patch159: khelpcenter-beagle.diff +Patch163: xinerama.patch +Patch165: optional-compmgr.diff +Patch166: lowdiskspace.patch +Patch167: ksmserver-timed.diff +Patch169: systray_order.diff +Patch170: khotkeys-multimedia-action.diff +Patch171: khotkeys-multimedia-action2.diff +Patch172: select-wm-gui.diff +Patch173: suspend-unmount.diff +Patch174: ksmserver-kdeinit.diff +Patch177: kio-media-errorhandling.diff +Patch179: restore-description-parens.diff +Patch180: kompmgr_use_defaults.diff +Patch189: runupdater.patch +Patch190: kcontrol-energy.diff +Patch195: ioslaveinfo-icon.diff +Patch197: rotate-wacom-pointers.diff +Patch198: konsole-schema-update.diff +Patch199: media-cryptosupport.diff +Patch200: kdm-use-rpmoptflags.diff +Patch203: show-konqueror-in-menu.diff +Patch204: fix-desktop-icons.diff +Patch205: kcmkdm-default-grub.diff +Patch206: simplify-randr-settings.diff +Patch207: spellcheck-default-utf8.diff +Patch208: kdm-audit-log.diff +Patch209: kwinbindings.diff +Patch211: konq-combo-editor.diff +Patch212: minicli-combo-editor.diff +Patch214: kdm-color-scheme.diff +Patch215: kdm-consolekit.diff +Patch216: krandr-0.5.2.1.diff.bz2 +Patch217: kickoff-install-software.diff +Patch218: kdm-align-userlist-labels.diff +Patch219: kxkb-include-latin-layout.diff +Patch220: mediamanager-mount-point-utf8.diff +Patch222: khelpcenter-delayed-indexcheck.cpp +Patch225: system-folder_man.diff +Patch227: arts-start-on-demand.diff +Patch228: media-teardown_crypto.diff +Patch229: beagle-0.3.diff +Patch230: remove-beagle-stuff.diff +Patch231: kde3-session.diff +Patch232: kde3-session-restore.diff +Patch233: uninit.diff +Patch234: kpamgreeter.diff +Patch235: use-pam-before-classic.diff +Patch236: kdesu-remember-keep-password.diff +Patch237: suspend-kpowersave.diff +Patch238: knetattach-show.diff +Patch239: gcc44.diff +Patch240: bnc584223.diff +Patch241: openssl1.patch +Patch242: nsplugin-init-gtk.diff +Patch243: taskbar.patch +Patch244: mtab-reenable.patch + +%description +This package contains kdebase, one of the basic packages of the K +Desktop Environment. It contains, among others, kwin (the KDE window +manager), Konqueror (the KDE Web browser), and KControl (the +configuration program) + +This package is needed if you want to use the KDE Desktop. It is not +needed if you only want to start some KDE applications. + + + +Authors: +-------- + The KDE Team + +%package -n misc-console-font +License: GPLv2+ +Group: System/GUI/KDE +Summary: A font for terminal usage + +%description -n misc-console-font +This package contains the Misc Console font as shipped with KDE. + + + +Authors: +-------- + The KDE Team + +%package runtime +License: GPLv2+ +Summary: Runtime Dependencies of KDE3 Applications +Group: System/GUI/KDE +Provides: kio_fish +Obsoletes: kio_fish +Provides: kdebase3:/opt/kde3/%_lib/libkonq.so.4 + +%description runtime +This package contains runtime dependencies of KDE3 applications like +KIO-slaves. + + + +Authors: +-------- + The KDE Team + +%package workspace +License: GPLv2+ +Summary: Workspace Components of KDE3 Desktop +Group: System/GUI/KDE +Requires: kdebase3 == %{version} +Provides: kdebase3:/opt/kde3/bin/kicker +Recommends: kdebase3-ksysguardd == %{version} +%if 0%{?with_hal} > 0 +Recommends: kdebase3-with-hal-enabled +%endif + +%description workspace +This package contains the wrkspace components of kdebase3 like +kdesktop, kicker and kwin. + + +Authors: +-------- + The KDE Team + +%package apps +License: GPLv2+ +Summary: Major Applications KDE3 Desktop +Group: System/GUI/KDE +Requires: kdebase3 == %{version} +Provides: kdebase3:/opt/kde3/bin/konsole + +%description apps +This package contains the major applications kdebase3 like +Kate, Konqueror and KWrite. + + +Authors: +-------- + The KDE Team + +%package devel +License: GPLv2+ +Requires: kdelibs3-devel kdebase3 = %version kdebase3-apps = %version kdebase3-runtime = %version kdebase3-workspace = %version +Summary: KDE Base Package: Base, Build Environment +Group: System/GUI/KDE + +%description devel +This package contains KDEbase, one of the basic packages of the K +Desktop Environment. It contains, among other things, KWIN, the KDE +window manager; Konqueror, the KDE web and file browser; and KControl, +the KDE configuration program. + +This package is not needed if you do not want to compile high level KDE +applications. + + + +Authors: +-------- + The KDE Team + +%package kdm +License: GPLv2+ +# usesubdirs kdm +Summary: The KDE login and display manager +Provides: kdebase3:/opt/kde3/bin/kdm +Provides: kdebase:/opt/kde2/bin/kdm +Provides: kdebase3-kdm-SLD:/opt/kde3/bin/kdm +Requires: xorg-x11 +Requires: kdebase3-runtime >= %version +Group: System/GUI/KDE +PreReq: %fillup_prereq /bin/grep + +%description kdm +This package contains kdm, the login and session manager for KDE. + + + +Authors: +-------- + The KDE Team + +%package samba +License: GPLv2+ +# usesubdirs kioslave/smb kcontrol/samba +Summary: KDE Base package: Windows Connection Module +Group: System/GUI/KDE + +%description samba +This package provides the "smb://" protocol, to connect to and from +Windows and Samba shares. + + + +Authors: +-------- + The KDE Team + +%package extra +License: GPLv2+ +# usesubdirs kpersonalizer kcontrol/thememgr +Summary: KDE Base package: Extra Applications +Group: System/GUI/KDE + +%description extra +This package contains applications which are usually not needed on +SUSE. + +- kpersonalizer - sets different settings + +- khotkeys aRts support - for voice triggered shortcuts + + + +Authors: +-------- + The KDE Team + +%package nsplugin +License: GPLv2+ +%ifarch x86_64 ppc64 s390x ia64 +Requires: nspluginwrapper +%endif +Supplements: kdebase3 >= %version +Requires: kdebase3 = %version +Summary: Netscape plugin support for KDE +Group: System/GUI/KDE + +%description nsplugin +This package contains support for Netscape plug-ins in konqueror. You +have to enable JavaScript for this. + + + +Authors: +-------- + The KDE Team + + +%package ksysguardd +License: GPLv2+ +PreReq: %insserv_prereq %fillup_prereq aaa_base +Summary: KDE base package: ksysguard daemon +Group: System/GUI/KDE +Provides: kdebase4-workspace-ksysguardd + +%description ksysguardd +This package contains the ksysguard daemon. It is needed for ksysguard. + +This package can be installed on servers without any other KDE packages +to guard the system from remote computers. + + + +Authors: +-------- + The KDE Team + + +%package session +License: GPLv2+ +Summary: The KDE Session +Group: System/GUI/KDE +Provides: kdebase3:/usr/bin/kde +Requires: kdebase3-workspace + +%description session +This package contains the startup scripts necessary to start a KDE +session from kdm. + + + +Authors: +-------- + The KDE Team + +%if %suse_version < 1140 + +%package beagle +License: GPLv2+ +Summary: Beagle dependent plugins for KDE desktop +Group: System/GUI/KDE +Requires: beagle >= 0.3.0 +Requires: kdebase3-workspace = %version +Supplements: packageand(kdebase3-session:beagle) +BuildRequires: libbeagle-devel + +%description beagle +This package contains kdebase plugins which provide additional search +functionality via Beagle. + + + +Authors: +-------- + The KDE Team + +%endif + +%package -n fileshareset +License: GPLv2+ +Summary: Set and list fileshares +Group: System/Management +Version: 2.0 +Release: 578 + +%description -n fileshareset +This package contains the the fileshareset utility to allow users to +add or remove file shares. It's also possible to list currently shared +locations. /etc/security/fileshare.conf is the main configuration file. + + + +Authors: +-------- + Uwe Gansert + +%define sysconfdir /etc + +%prep +%setup -q -b 8 -b 13 -n kdebase-%{kde_version} +%patch0 +%patch3 +%patch5 +# causes hangs (bnc#158239) +#%patch6 +#%patch100 +%patch7 +%patch8 +%patch10 +%patch11 +%patch12 +%patch14 +# do we really still need it ? +#%patch16 +%patch15 +%patch17 +%patch20 +%patch21 +%patch85 +%patch39 +%patch40 +%patch44 +%patch45 +%patch46 +%patch51 +%patch63 +%patch60 +%patch64 +%patch94 +%patch98 +# all the kdm changes +%patch75 +%patch70 +%patch71 +%patch72 +%patch74 +%patch76 +%patch78 +%patch79 +# default-to-halt +%patch81 +%patch82 +%if %suse_version > 1010 +%patch83 +%patch77 +%endif +%patch200 +%patch215 +%patch84 +%patch61 +%patch120 +%patch22 +%patch92 +%patch88 +%if %suse_version > 1020 +%patch96 +%else +%patch996 +%endif +# xcursor +%patch99 +%ifnarch %ix86 x86_64 +%patch80 +%endif +%patch62 +%patch69 +%patch104 +%patch105 +%patch111 +%patch114 +%patch116 +%patch117 +%patch123 +%patch126 +%patch131 +%patch141 -p1 +%patch127 +%patch144 +%patch145 +%patch149 +%patch155 +%patch156 +%patch157 +%patch160 +%if %suse_version > 1010 +%patch161 +pushd kicker +%patch162 +pushd ../kcontrol/kicker +%patch158 +popd +popd +%if %suse_version > 1010 +%if %suse_version < 1140 +%patch159 +%endif +%endif +%patch165 +%patch166 +%patch167 +tar xvfj %SOURCE20 +%endif +%patch163 +%patch125 +%patch169 +%patch170 +%patch171 +%patch172 +%patch173 +%patch174 +%patch177 +%patch179 +%patch180 +%if %suse_version > 1010 +%patch189 +%endif +%patch190 +%patch195 +%if %suse_version > 1020 +%patch198 +%patch199 +%endif +%patch203 +%patch204 +%patch205 +%patch207 +%patch208 +%patch209 +%patch211 +%patch212 +%patch214 +pushd kcontrol +%patch216 +popd +%patch217 +%patch218 +%patch219 +%patch220 +%patch222 +%patch225 +%patch197 +%patch206 +%patch227 +%patch228 +%if %suse_version > 1030 +%if %suse_version < 1140 +pushd kicker +%patch1629 +popd +%patch229 +%patch230 +%endif +%endif +%patch231 +%patch232 +%patch233 +%patch234 +%patch235 +%patch236 +%if %suse_version > 1010 +%patch237 +%endif +%patch238 +%patch239 +%patch240 -p1 +%patch241 -p0 +%patch242 -p0 +%patch243 +%patch244 -p1 + +rm -rf kappfinder +rm pics/crystalsvg/cr??-*emacs.png +cp %SOURCE17 l10n/tw/flag.png +. /etc/opt/kde3/common_options +cd ../fileshareset2 +aclocal +autoconf +automake -a -c +cd ../kdebase-%{kde_version} +update_admin + +%build +. /etc/opt/kde3/common_options +DEBUG="--disable-debug" +FINAL="--enable-final" +PARANOIA="" +%ifnarch s390 +PARANOIA="--with-cdparanoia" +%endif + LDAP="--with-ldap" +%if %suse_version > 1010 + MOTIF_INCLUDE="/usr/include" +X_SERVER=/usr/bin/X RUN_KAPPFINDER=no \ +%else + MOTIF_INCLUDE="/usr/X11R6/include" +X_SERVER=/usr/X11R6/bin/X RUN_KAPPFINDER=no \ +%endif +./configure \ + $configkde \ + $PARANOIA \ + $LDAP \ + $FLAGS \ + $XINERAMA \ +%if %suse_version > 1010 + --with-motif-libraries=/usr/%{_lib}/ \ +%else + --with-motif-libraries=/usr/X11R6/%{_lib}/ \ +%endif + --with-motif-includes=$MOTIF_INCLUDE \ + --with-samba-libs \ + --with-pam=xdm \ + --with-kdm-xconsole \ + --with-kdm-pam=xdm \ + --with-kcp-pam=kcheckpass \ + --with-kss-pam=kcheckpass + do_make %{?_smp_mflags} +cd ../fileshareset2 + ./configure --prefix=%{fileshare_prefix} + make %{?_smp_mflags} + +%install +. /etc/opt/kde3/common_options +# relabel smb icon +grep -v ^Icon= kioslave/smb/smb-network.desktop | grep -v ^Name > w +mv w kioslave/smb/smb-network.desktop +echo "Icon=samba" >> kioslave/smb/smb-network.desktop +echo "Name=SMB Shares" >> kioslave/smb/smb-network.desktop +# install +do_make DESTDIR=$RPM_BUILD_ROOT $INSTALL_TARGET +rm $RPM_BUILD_ROOT/opt/kde3/share/applnk/System/kmenuedit.desktop +rm $RPM_BUILD_ROOT/opt/kde3/share/applnk/System/kpersonalizer.desktop +rm $RPM_BUILD_ROOT/opt/kde3/share/applnk/Utilities/kpager.desktop +rm $RPM_BUILD_ROOT/opt/kde3/share/applnk/Internet/keditbookmarks.desktop +rm $RPM_BUILD_ROOT/opt/kde3/share/applnk/Toys/ktip.desktop +install -m 0644 %SOURCE12 $RPM_BUILD_ROOT/opt/kde3/share/fonts/ +%if %suse_version > 1100 +install -D -m 0644 %SOURCE21 $RPM_BUILD_ROOT/etc/pam.d/kcheckpass +%else +%if %suse_version > 1010 +install -D -m 0644 %SOURCE921 $RPM_BUILD_ROOT/etc/pam.d/kcheckpass +%else +install -D -m 0644 %SOURCE914 $RPM_BUILD_ROOT/etc/pam.d/xdm-np +install -D -m 0644 %SOURCE9921 $RPM_BUILD_ROOT/etc/pam.d/kcheckpass +%endif +%endif +install -m 0644 %SOURCE22 $RPM_BUILD_ROOT/opt/kde3/share/services/searchproviders/ +install -m 0644 %SOURCE23 $RPM_BUILD_ROOT/opt/kde3/share/services/searchproviders/ +%if %suse_version < 1011 +mkdir -p $RPM_BUILD_ROOT/usr/X11R6/bin +%endif +mkdir -p ${RPM_BUILD_ROOT}/usr/bin \ + ${RPM_BUILD_ROOT}/usr/sbin \ + ${RPM_BUILD_ROOT}/var/run/xdmctl +%if %suse_version > 1010 + ln -fs /opt/kde3/bin/startkde $RPM_BUILD_ROOT/usr/bin/kde + ln -fs /opt/kde3/bin/startkde $RPM_BUILD_ROOT/usr/bin/startkde3 +%else + ln -fs /opt/kde3/bin/startkde $RPM_BUILD_ROOT/usr/X11R6/bin/kde +%endif +ln -sf rcxdm ${RPM_BUILD_ROOT}/usr/sbin/rckdm +#%if %suse_version > 1020 +#rm ${RPM_BUILD_ROOT}/opt/kde3/bin/ksysguardd +#rm ${RPM_BUILD_ROOT}/etc/ksysguarddrc +#%else +mv ${RPM_BUILD_ROOT}/opt/kde3/bin/ksysguardd ${RPM_BUILD_ROOT}/usr/bin/ksysguardd +ln -sf /usr/bin/ksysguardd ${RPM_BUILD_ROOT}/opt/kde3/bin/ksysguardd +#%endif +install -d ${RPM_BUILD_ROOT}/opt/kde3/env +%if %suse_version < 1001 +install -m 0755 %SOURCE3 ${RPM_BUILD_ROOT}/opt/kde3/env +%endif +install -D -m 0755 %SOURCE16 ${RPM_BUILD_ROOT}/opt/kde3/shutdown/stopkde.suse.sh +mkdir -p "${RPM_BUILD_ROOT}"/etc/security/ +echo "RESTRICT=yes" > "${RPM_BUILD_ROOT}"/etc/security/fileshare.conf +# +# install pixmaps and configuration +# +mkdir -p $RPM_BUILD_ROOT/var/adm/fillup-templates +mkdir -p $RPM_BUILD_ROOT/etc/init.d/ +install -m 0644 %SOURCE9 ${RPM_BUILD_ROOT}/opt/kde3/share/apps/kdewizard/pics/wizard_small.png +#%if %suse_version < 1031 +install -m 0744 %SOURCE6 $RPM_BUILD_ROOT/etc/init.d/ksysguardd +#%endif +mkdir -p $RPM_BUILD_ROOT/opt/kde3/share/apps/kdm/faces/ +ln -s ../pics/users/root1.png $RPM_BUILD_ROOT/opt/kde3/share/apps/kdm/faces/root.face.icon +ln -s ../pics/users/default2.png $RPM_BUILD_ROOT/opt/kde3/share/apps/kdm/faces/.default.face.icon +#%if %suse_version < 1031 +ln -sf /etc/init.d/ksysguardd $RPM_BUILD_ROOT/usr/sbin/rcksysguardd +install -D -m 644 %SOURCE15 $RPM_BUILD_ROOT/etc/slp.reg.d/ksysguardd.reg +#%endif +# even if we use smbro +install -D -m 644 kioslave/smb/smb-network.desktop $RPM_BUILD_ROOT/opt/kde3/share/apps/konqueror/dirtree/remote/smb-network.desktop +# +# install kde session file +# +install -m 0755 -d $RPM_BUILD_ROOT/usr/share/xsessions/ +mv $RPM_BUILD_ROOT/opt/kde3/share/apps/kdm/sessions/kde.desktop $RPM_BUILD_ROOT/usr/share/xsessions/ +# for those we have a package for remove the backup and rely on the package +for wm in gnome xfce4 xfce wmaker blackbox fvwm95 fvwm icewm enlightenment; do + rm -f $RPM_BUILD_ROOT/opt/kde3/share/apps/kdm/sessions/$wm.desktop +done +%suse_update_desktop_file $RPM_BUILD_ROOT/usr/share/xsessions/kde.desktop +# +# delete unwanted/double files +# +rm $RPM_BUILD_ROOT/opt/kde3/share/apps/kdesktop/DesktopLinks/Home.desktop +rm $RPM_BUILD_ROOT/opt/kde3/share/apps/kdesktop/DesktopLinks/System.desktop +rm $RPM_BUILD_ROOT/opt/kde3/share/icons/*/*/apps/kvirc.* +mkdir -p $RPM_BUILD_ROOT/usr/share +mv $RPM_BUILD_ROOT/opt/kde3/share/wallpapers $RPM_BUILD_ROOT/usr/share +cd ../fileshareset2/src +rm -f $RPM_BUILD_ROOT/opt/kde3/bin/fileshare{set,list} +make DESTDIR=$RPM_BUILD_ROOT install +chmod 0755 $RPM_BUILD_ROOT/%{fileshare_prefix}/bin/fileshareset +cd .. +FILLUP_DIR=$RPM_BUILD_ROOT/var/adm/fillup-templates +install -m 644 -D %SOURCE4 $FILLUP_DIR/sysconfig.windowmanager-kdebase3 +mkdir -p $RPM_BUILD_ROOT/opt/kde3/share/icons/hicolor/{16x16,22x22,32x32,48x48,64x64,128x128}/apps/ +for i in {16,32,48,64,128}; do cp $BUILD_ROOT/opt/kde3/share/icons/crystalsvg/"$i"x"$i"/mimetypes/misc.png $RPM_BUILD_ROOT/opt/kde3/share/icons/hicolor/"$i"x"$i"/apps/kcmcomponentchooser.png;done +for i in {16,22,32,48,128}; do cp $BUILD_ROOT/opt/kde3/share/icons/crystalsvg/"$i"x"$i"/actions/launch.png $RPM_BUILD_ROOT/opt/kde3/share/icons/hicolor/"$i"x"$i"/apps/kcmperformance.png;done +cp $BUILD_ROOT/opt/kde3/share/icons/crystalsvg/16x16/actions/services.png $RPM_BUILD_ROOT/opt/kde3/share/icons/hicolor/16x16/apps/kcmkded.png +for i in {16,22,32,48}; do cp $BUILD_ROOT/opt/kde3/share/icons/crystalsvg/"$i"x"$i"/actions/exit.png $RPM_BUILD_ROOT/opt/kde3/share/icons/hicolor/"$i"x"$i"/apps/kcmsmserver.png;done +for i in {16,22,32}; do cp $BUILD_ROOT/opt/kde3/share/icons/crystalsvg/"$i"x"$i"/actions/spellcheck.png $RPM_BUILD_ROOT/opt/kde3/share/icons/hicolor/"$i"x"$i"/apps/kcmspellchecking.png;done +for i in {16,22,32,48,64,128}; do cp $BUILD_ROOT/opt/kde3/share/icons/crystalsvg/"$i"x"$i"/filesystems/desktop.png $RPM_BUILD_ROOT/opt/kde3/share/icons/hicolor/"$i"x"$i"/apps/kcmdesktopbehavior.png;done +for i in {16,22,32,48,64,128}; do cp $BUILD_ROOT/opt/kde3/share/icons/crystalsvg/"$i"x"$i"/filesystems/desktop.png $RPM_BUILD_ROOT/opt/kde3/share/icons/hicolor/"$i"x"$i"/apps/kcmdesktop.png;done +for i in {16,22,32,48,64,128}; do cp $BUILD_ROOT/opt/kde3/share/icons/crystalsvg/"$i"x"$i"/apps/kmenu.png $RPM_BUILD_ROOT/opt/kde3/share/icons/hicolor/"$i"x"$i"/apps/kcmtaskbar.png;done +for i in {16,22,32,48,64,128}; do cp $BUILD_ROOT/opt/kde3/share/icons/crystalsvg/"$i"x"$i"/mimetypes/colorscm.png $RPM_BUILD_ROOT/opt/kde3/share/icons/hicolor/"$i"x"$i"/apps/kcmcolors.png;done +for i in {16,22,32,48,128}; do cp $BUILD_ROOT/opt/kde3/share/icons/crystalsvg/"$i"x"$i"/actions/launch.png $RPM_BUILD_ROOT/opt/kde3/share/icons/hicolor/"$i"x"$i"/apps/kcmlaunch.png;done +for i in {16,22,32}; do cp $BUILD_ROOT/opt/kde3/share/icons/crystalsvg/"$i"x"$i"/actions/filter.png $RPM_BUILD_ROOT/opt/kde3/share/icons/hicolor/"$i"x"$i"/apps/kcmkhtml_filter.png;done +for i in {16,22,32}; do cp $BUILD_ROOT/opt/kde3/share/icons/crystalsvg/"$i"x"$i"/actions/run.png $RPM_BUILD_ROOT/opt/kde3/share/icons/hicolor/"$i"x"$i"/apps/kcmcgi.png;done +for i in {16,22}; do cp $BUILD_ROOT/opt/kde3/share/icons/crystalsvg/"$i"x"$i"/actions/history.png $RPM_BUILD_ROOT/opt/kde3/share/icons/hicolor/"$i"x"$i"/apps/kcmhistory.png;done +for i in {16,22,32,48,64,128}; do cp $BUILD_ROOT/opt/kde3/share/icons/crystalsvg/"$i"x"$i"/filesystems/network.png $RPM_BUILD_ROOT/opt/kde3/share/icons/hicolor/"$i"x"$i"/apps/kcmnetpref.png;done +for i in {16,32,48,64,128}; do cp $BUILD_ROOT/opt/kde3/share/icons/crystalsvg/"$i"x"$i"/devices/blockdevice.png $RPM_BUILD_ROOT/opt/kde3/share/icons/hicolor/"$i"x"$i"/apps/kcmkdnssd.png;done +for i in {16,22,32,48,64}; do cp $BUILD_ROOT/opt/kde3/share/icons/crystalsvg/"$i"x"$i"/devices/joystick.png $RPM_BUILD_ROOT/opt/kde3/share/icons/hicolor/"$i"x"$i"/apps/kcmjoystick.png;done +for i in {16,32,48,64,128}; do cp $BUILD_ROOT/opt/kde3/share/icons/crystalsvg/"$i"x"$i"/devices/mouse.png $RPM_BUILD_ROOT/opt/kde3/share/icons/hicolor/"$i"x"$i"/apps/kcmmouse.png;done +for i in {16,22,32,48,64,128}; do cp $BUILD_ROOT/opt/kde3/share/icons/crystalsvg/"$i"x"$i"/devices/system.png $RPM_BUILD_ROOT/opt/kde3/share/icons/hicolor/"$i"x"$i"/apps/kcmmedia.png;done +for i in {16,22,32}; do cp $BUILD_ROOT/opt/kde3/share/icons/crystalsvg/"$i"x"$i"/actions/encrypted.png $RPM_BUILD_ROOT/opt/kde3/share/icons/hicolor/"$i"x"$i"/apps/kcmcrypto.png;done +for i in {16,22,32,48,64,128}; do cp $BUILD_ROOT/opt/kde3/share/icons/crystalsvg/"$i"x"$i"/filesystems/trashcan_empty.png $RPM_BUILD_ROOT/opt/kde3/share/icons/hicolor/"$i"x"$i"/apps/kcmprivacy.png;done +for i in {16,22,32,48,64,128}; do cp $BUILD_ROOT/opt/kde3/share/icons/crystalsvg/"$i"x"$i"/filesystems/network.png $RPM_BUILD_ROOT/opt/kde3/share/icons/hicolor/"$i"x"$i"/apps/kcmnic.png;done +# +# solve file conflicts with theme packages ... +# +mv $RPM_BUILD_ROOT/opt/kde3/share/apps/ksplash/pics $RPM_BUILD_ROOT/opt/kde3/share/apps/ksplash/pics-default +ln -s pics-default $RPM_BUILD_ROOT/opt/kde3/share/apps/ksplash/pics +chmod 0755 $RPM_BUILD_ROOT/%{fileshare_prefix}/bin/fileshareset +%suse_update_desktop_file kate TextEditor +%suse_update_desktop_file kwrite TextEditor +%suse_update_desktop_file Help Documentation Viewer +%suse_update_desktop_file Home System FileManager core +%suse_update_desktop_file KControl X-SuSE-core +%suse_update_desktop_file konqbrowser WebBrowser +%suse_update_desktop_file Kfind System Filesystem core +%suse_update_desktop_file kinfocenter System Monitor +%suse_update_desktop_file kmenuedit Core-Configuration +%suse_update_desktop_file konsole TerminalEmulator +%suse_update_desktop_file konsolesu TerminalEmulator +%suse_update_desktop_file ksysguard System Monitor +%suse_update_desktop_file -r klipper System TrayIcon +%suse_update_desktop_file kpager Utility DesktopUtility +%suse_update_desktop_file -u ktip System Utility +%suse_update_desktop_file konqfilemgr System FileManager +%suse_update_desktop_file konquerorsu System FileManager +%suse_update_desktop_file kdeprintfax PrintingUtility +%suse_update_desktop_file kjobviewer PrintingUtility +%suse_update_desktop_file kpersonalizer DesktopUtility +%suse_update_desktop_file kcmkicker X-KDE-settings-desktop +%suse_update_desktop_file knetattach System Network +%suse_update_desktop_file -r kfontview Graphics Viewer +%suse_update_desktop_file -r krandrtray Applet X-KDE-settings-desktop +%suse_update_desktop_file $RPM_BUILD_ROOT/opt/kde3/share/apps/remoteview/smb-network.desktop +for i in $RPM_BUILD_ROOT/opt/kde3/share/applnk/System/ScreenSavers/*.desktop ; do + sed -e '/^\[Desktop Entry\]/a\ +Categories=Screensaver;' $i > ${i}_ + mv ${i}_ $i + %suse_update_desktop_file "$i" +done +install -d $RPM_BUILD_ROOT/opt/kde3/share/applnk/apps +ln -sf /opt/kde3/share/applnk/System/ScreenSavers $RPM_BUILD_ROOT/opt/kde3/share/applnk/apps/ScreenSavers + +for i in $RPM_BUILD_ROOT/opt/kde3/share/applications/kde/*.desktop \ + $RPM_BUILD_ROOT/opt/kde3/share/apps/konqueror/servicemenus/*.desktop \ + $RPM_BUILD_ROOT/opt/kde3/share/apps/kicker/*/*.desktop \ + $RPM_BUILD_ROOT/opt/kde3/share/apps/kicker/*/*/*.desktop \ + $RPM_BUILD_ROOT/opt/kde3/share/apps/kicker/*/*/*.desktop \ + $RPM_BUILD_ROOT/usr/share/wallpapers/*.desktop \ + $RPM_BUILD_ROOT/opt/kde3/share/apps/konqsidebartng/virtual_folders/services/*.desktop; do + [ "`sed -n '/^\[Desktop Entry\]/,/^\[/ s,NoDisplay=\(.*\),\1,p' "$i"`" = "true" ] && continue + [ "`sed -n '/^\[Desktop Entry\]/,/^\[/ s,Hidden=\(.*\),\1,p' "$i"`" = "true" ] && continue + grep -q X-SuSE-translate "$i" && continue + %suse_update_desktop_file "$i" +done +rm -f $RPM_BUILD_ROOT/opt/kde3/share/config/kdm/README +rm -f $RPM_BUILD_ROOT/opt/kde3/share/apps/kdm/sessions/icewm.desktop +# +# gimp 2.0 does have a different named icon +# +for i in $RPM_BUILD_ROOT//opt/kde3/share/icons/*/*/apps/gimp.png; do + ln "$i" "${i%/*}/wilber-icon.png" +done +mkdir -p -m 755 $RPM_BUILD_ROOT/%_mandir/man8 +cp %SOURCE18 $RPM_BUILD_ROOT/%_mandir/man8 +cp %SOURCE19 $RPM_BUILD_ROOT/%_mandir/man8 +# don't conflict with man pages from KDE4 packages +rm $RPM_BUILD_ROOT/%_mandir/man1/kate.* +rm $RPM_BUILD_ROOT/%_mandir/man1/kdesu.* +rm $RPM_BUILD_ROOT/%_mandir/man1/kbookmarkmerger.* +rm $RPM_BUILD_ROOT/%_mandir/man1/kfind.* +kde_post_install +%if %suse_version > 1020 +%fdupes $RPM_BUILD_ROOT/opt/kde3/share +%endif +# move konqueror.desktop back to old position (#281572) +mv $RPM_BUILD_ROOT/opt/kde3/share/applications/kde/konqueror.desktop $RPM_BUILD_ROOT/opt/kde3/share/applnk/konqueror.desktop + +%if 0%{?with_hal} == 0 +cp -f %{SOURCE24} $RPM_BUILD_ROOT/opt/kde3/bin +chmod +x $RPM_BUILD_ROOT/opt/kde3/bin/devmon-automounter.sh +sed -i 5i\ '/opt/kde3/bin/devmon-automounter.sh &' $RPM_BUILD_ROOT/opt/kde3/bin/startkde +%endif + +%pre +# we have this as link +if test -e opt/kde3/share/apps/ksplash/pics -a ! -L opt/kde3/share/apps/ksplash/pics ; + then + if test -e opt/kde3/share/apps/ksplash/pics-default; then + rm -rf opt/kde3/share/apps/ksplash/pics + else + mv opt/kde3/share/apps/ksplash/pics opt/kde3/share/apps/ksplash/pics-default + fi +fi +kdmrc=/opt/kde3/share/config/kdm/kdmrc +# if the /opt/kde3 one is obviously wrong and we have one in /etc we move that one over to +# avoid confusion on update what's the right kdmrc +if test -f $kdmrc && grep -q "Session=/opt/kde3/share/config/kdm/Xsession" $kdmrc && test -f /etc$kdmrc; then + mv /etc$kdmrc $kdmrc +fi + +%post +/sbin/ldconfig +%run_permissions + +%post kdm +%{fillup_only -an windowmanager-kdebase3} +/opt/kde3/bin/genkdmconf +if test -f /etc/sysconfig/displaymanager ; then + . /etc/sysconfig/displaymanager +fi +%{fillup_only -n displaymanager -s kdebase3-SuSE} +%{remove_and_set -n displaymanager KDM_SHUTDOWN} +if test -n "$KDM_SHUTDOWN" -a "$KDM_SHUTDOWN" != "no"; then + if test "$KDM_SHUTDOWN" = "local" ; then + KDM_SHUTDOWN=all + fi + case "$KDM_SHUTDOWN" in + "auto" | "none" | "root") + sed -i -e "s/^DISPLAYMANAGER_SHUTDOWN=.*/DISPLAYMANAGER_SHUTDOWN=\"$KDM_SHUTDOWN\"/" /etc/sysconfig/displaymanager + ;; + esac +fi + +%post -n fileshareset +%run_permissions + +%postun kdm +%insserv_cleanup + +%postun +%insserv_cleanup +/sbin/ldconfig +%if %suse_version < 1031 + +%post ksysguardd +%{fillup_and_insserv -sn kdebase3-ksysguardd ksysguardd RUN_KSYSGUARDD} +%verifyscript +%verify_permissions -e /opt/kde3/bin/kcheckpass +%verify_permissions -e /opt/kde3/bin/kdesud +%verify_permissions -e /opt/kde3/bin/khc_indexbuilder + +%postun ksysguardd +%restart_on_update ksysguardd +%insserv_cleanup + +%preun ksysguardd +%stop_on_removal ksysguardd +%endif + +%post runtime -p /sbin/ldconfig + +%postun runtime -p /sbin/ldconfig + +%post workspace -p /sbin/ldconfig +%if %suse_version > 1110 && 0%{?with_hal} > 0 +chkconfig haldaemon on +%endif + +%postun workspace -p /sbin/ldconfig + +%post apps -p /sbin/ldconfig + +%postun apps -p /sbin/ldconfig + +%clean +rm -rf $RPM_BUILD_ROOT + +%files -n misc-console-font +%defattr(-,root,root) +%doc COPYING +/opt/kde3/share/fonts/console8x16.pcf.gz + +%files +%defattr(-,root,root) +%doc AUTHORS COPYING README README.pam ../lame.spec ../README.mp3 +%exclude /opt/kde3/share/fonts/console8x16.pcf.gz +%dir /opt/kde3/share/icons/hicolor/* +%dir /opt/kde3/%_lib/kconf_update_bin +%dir /opt/kde3/share/apps/plugin +%dir /opt/kde3/share/applnk/ +%dir /opt/kde3/share/applnk/Settings +%dir /opt/kde3/share/applnk/Settings/WebBrowsing +%dir /opt/kde3/share/applnk/System/ScreenSavers +%dir /opt/kde3/share/applnk/apps +/opt/kde3/share/applnk/apps/ScreenSavers +/etc/xdg/menus/*.menu +/etc/xdg/menus/applications-merged +%verify(not mode) %attr(2755,root,nogroup) /opt/kde3/bin/kdesud +%verify(not mode) %attr(0755,root,man) /opt/kde3/bin/khc_indexbuilder +/opt/kde3/env +/opt/kde3/bin/arts-start +/opt/kde3/bin/drkonqi +/opt/kde3/bin/kaccess +/opt/kde3/bin/kblankscrn.kss +/opt/kde3/bin/kbookmarkmerger +/opt/kde3/bin/kcminit +/opt/kde3/bin/kcminit_startup +/opt/kde3/%_lib/kde3/kcminit_startup.* +/opt/kde3/bin/kcontrol* +/opt/kde3/bin/kdeinstallktheme +/opt/kde3/bin/kdepasswd +/opt/kde3/bin/kdcop +/opt/kde3/bin/kdebugdialog +/opt/kde3/bin/kdeeject +/opt/kde3/bin/kdeprintfax +/opt/kde3/bin/keditfiletype +/opt/kde3/bin/khelpcenter +/opt/kde3/bin/kjobviewer +/opt/kde3/bin/kcheckrunning +/opt/kde3/bin/kpm +/opt/kde3/bin/krandom.kss +/opt/kde3/bin/krdb +/opt/kde3/bin/kxkb +/opt/kde3/bin/kdialog +/opt/kde3/bin/klocaldomainurifilterhelper +/opt/kde3/bin/kio_media_mounthelper +/opt/kde3/bin/knetattach +/opt/kde3/bin/ktrash +/opt/kde3/bin/khc_docbookdig.pl +/opt/kde3/bin/khc_mansearch.pl +/opt/kde3/bin/khc_htdig.pl +/opt/kde3/bin/khc_htsearch.pl +/opt/kde3/bin/kapplymousetheme +/opt/kde3/bin/kio_system_documenthelper +%if %suse_version > 1010 +/opt/kde3/bin/runupdater +%endif +/opt/kde3/bin/kstart +/opt/kde3/bin/ksystraycmd +/opt/kde3/%_lib/kde3/cursorthumbnail.* +/opt/kde3/%_lib/kde3/htmlthumbnail.* +/opt/kde3/%_lib/kde3/imagethumbnail.* +/opt/kde3/%_lib/kde3/kcm_a* +/opt/kde3/%_lib/kde3/kcm_bell* +/opt/kde3/%_lib/kde3/kcm_keyboard* +/opt/kde3/%_lib/kde3/kcm_c* +/opt/kde3/%_lib/kde3/kcm_d* +/opt/kde3/%_lib/kde3/kcm_e* +/opt/kde3/%_lib/kde3/kcm_f* +/opt/kde3/%_lib/kde3/kcm_h* +/opt/kde3/%_lib/kde3/kcm_i* +/opt/kde3/%_lib/kde3/kcm_l* +/opt/kde3/%_lib/kde3/kcm_nic.* +/opt/kde3/%_lib/kde3/kcm_p* +/opt/kde3/%_lib/kde3/kcm_smserver.* +/opt/kde3/%_lib/kde3/kcm_spellchecking.* +/opt/kde3/%_lib/kde3/kcm_style.* +/opt/kde3/%_lib/kde3/kcm_usb.* +/opt/kde3/%_lib/kde3/khelpcenter.* +/opt/kde3/%_lib/kde3/kcm_xinerama.* +/opt/kde3/%_lib/kde3/kxkb.* +/opt/kde3/%_lib/kde3/djvuthumbnail.* +/opt/kde3/%_lib/kde3/kaccess.* +/opt/kde3/%_lib/kde3/kcminit.* +/opt/kde3/%_lib/kde3/kcm_nsplugins.* +/opt/kde3/%_lib/kde3/kcontrol.* +/opt/kde3/%_lib/kde3/keditbookmarks.* +/opt/kde3/%_lib/kde3/kfmclient.* +/opt/kde3/%_lib/kde3/kjobviewer.* +/opt/kde3/%_lib/kde3/kprinter.* +/opt/kde3/%_lib/kde3/libkdeprint_part.* +/opt/kde3/%_lib/kde3/libkshorturifilter.* +/opt/kde3/%_lib/kde3/libkuri* +/opt/kde3/%_lib/kde3/libkonsolepart.* +/opt/kde3/%_lib/kde3/textthumbnail.* +/opt/kde3/%_lib/kde3/kcm_joystick.* +/opt/kde3/%_lib/kde3/kcm_useraccount.* +/opt/kde3/%_lib/kde3/kcontroledit.* +/opt/kde3/%_lib/kde3/kded_kwrited.* +/opt/kde3/%_lib/kde3/kstyle_keramik_config.* +/opt/kde3/%_lib/kde3/libkmanpart.* +/opt/kde3/%_lib/kde3/liblocaldomainurifilter.* +%if %suse_version > 1010 +/opt/kde3/%_lib/kde3/runupdater.* +/opt/kde3/%_lib/libkdeinit_runupdater.so +%endif +/opt/kde3/%_lib/libkdeinit_kaccess.so +/opt/kde3/%_lib/libkdeinit_kcminit.so +/opt/kde3/%_lib/libkdeinit_kcminit_startup.so +/opt/kde3/%_lib/libkdeinit_kcontrol.so +/opt/kde3/%_lib/libkdeinit_kcontroledit.so +/opt/kde3/%_lib/libkdeinit_keditbookmarks.so +/opt/kde3/%_lib/libkdeinit_kfmclient.so +/opt/kde3/%_lib/libkdeinit_khelpcenter.so +/opt/kde3/%_lib/libkdeinit_kjobviewer.so +/opt/kde3/%_lib/libkdeinit_kxkb.so +/opt/kde3/%_lib/kde3/libnsplugin.* +/opt/kde3/%_lib/kde3/kded_remotedirnotify.* +/opt/kde3/%_lib/kde3/kded_systemdirnotify.* +/opt/kde3/%_lib/kde3/libkhtmlkttsdplugin.* +/opt/kde3/%_lib/kde3/kcm_media.la +/opt/kde3/%_lib/kde3/kcm_media.so +/opt/kde3/%_lib/kde3/kded_homedirnotify.la +/opt/kde3/%_lib/kde3/kded_homedirnotify.so +/opt/kde3/%_lib/kde3/kded_medianotifier.la +/opt/kde3/%_lib/kde3/kded_medianotifier.so +%if 0%{?with_hal} > 0 +/opt/kde3/%_lib/kde3/media_propsdlgplugin.* +%endif +/opt/kde3/%_lib/kde3/kcm_kded.* +/opt/kde3/%_lib/kde3/kcm_kdnssd.* +/opt/kde3/%_lib/kde3/kcm_keyboard.* +/opt/kde3/%_lib/kde3/kcm_keys.* +/opt/kde3/%_lib/kde3/kcm_kio.* +/opt/kde3/%_lib/kde3/kcm_knotify.* +/opt/kde3/%_lib/kde3/kcm_konq.* +/opt/kde3/%_lib/kde3/kcm_konqhtml.* +/opt/kde3/%_lib/kde3/kcm_kthememanager.* +/opt/kde3/%_lib/kde3/kcm_kurifilt.* +/opt/kde3/share/applications/kde/khtml_filter.desktop +/opt/kde3/share/applications/kde/media.desktop +/opt/kde3/share/applications/kde/joystick.desktop +/opt/kde3/share/applications/kde/kcm_useraccount.desktop +/opt/kde3/share/applications/kde/kdepasswd.desktop +/opt/kde3/share/applications/kde/kthememanager.desktop +/opt/kde3/share/applications/kde/Help.desktop +/opt/kde3/share/applications/kde/KControl.desktop +/opt/kde3/share/applications/kde/arts.desktop +/opt/kde3/share/applications/kde/bell.desktop +/opt/kde3/share/applications/kde/cache.desktop +/opt/kde3/share/applications/kde/colors.desktop +/opt/kde3/share/applications/kde/componentchooser.desktop +/opt/kde3/share/applications/kde/cookies.desktop +/opt/kde3/share/applications/kde/crypto.desktop +/opt/kde3/share/applications/kde/display.desktop +/opt/kde3/share/applications/kde/dma.desktop +/opt/kde3/share/applications/kde/ebrowsing.desktop +/opt/kde3/share/applications/kde/filebrowser.desktop +/opt/kde3/share/applications/kde/filetypes.desktop +/opt/kde3/share/applications/kde/fonts.desktop +/opt/kde3/share/applications/kde/clock.desktop +/opt/kde3/share/applications/kde/icons.desktop +/opt/kde3/share/applications/kde/interrupts.desktop +/opt/kde3/share/applications/kde/installktheme.desktop +/opt/kde3/share/applications/kde/ioports.desktop +/opt/kde3/share/applications/kde/ioslaveinfo.desktop +/opt/kde3/share/applications/kde/kcmaccess.desktop +/opt/kde3/share/applications/kde/kcmcgi.desktop +/opt/kde3/share/applications/kde/kcmcss.desktop +/opt/kde3/share/applications/kde/kcmhistory.desktop +/opt/kde3/share/applications/kde/kcmkded.desktop +/opt/kde3/share/applications/kde/kcmlaunch.desktop +/opt/kde3/share/applications/kde/kcm_kdnssd.desktop +/opt/kde3/share/applications/kde/kcmnotify.desktop +/opt/kde3/share/applications/kde/kcmperformance.desktop +/opt/kde3/share/applications/kde/kcmusb.desktop +/opt/kde3/share/applications/kde/kdeprintfax.desktop +/opt/kde3/share/applications/kde/keyboard.desktop +/opt/kde3/share/applications/kde/keyboard_layout.desktop +/opt/kde3/share/applications/kde/keys.desktop +/opt/kde3/share/applications/kde/kfmclient.desktop +/opt/kde3/share/applications/kde/kfmclient_dir.desktop +/opt/kde3/share/applications/kde/kfmclient_html.desktop +/opt/kde3/share/applications/kde/kfmclient_war.desktop +/opt/kde3/share/applications/kde/khtml_behavior.desktop +/opt/kde3/share/applications/kde/khtml_fonts.desktop +/opt/kde3/share/applications/kde/khtml_java_js.desktop +/opt/kde3/share/applications/kde/khtml_plugins.desktop +/opt/kde3/share/applications/kde/kjobviewer.desktop +/opt/kde3/share/applications/kde/lanbrowser.desktop +/opt/kde3/share/applications/kde/language.desktop +/opt/kde3/share/applications/kde/memory.desktop +/opt/kde3/share/applications/kde/mouse.desktop +/opt/kde3/share/applications/kde/netpref.desktop +/opt/kde3/share/applications/kde/nic.desktop +/opt/kde3/share/applications/kde/partitions.desktop +/opt/kde3/share/applications/kde/pci.desktop +/opt/kde3/share/applications/kde/printers.desktop +/opt/kde3/share/applications/kde/privacy.desktop +/opt/kde3/share/applications/kde/processor.desktop +/opt/kde3/share/applications/kde/proxy.desktop +/opt/kde3/share/applications/kde/scsi.desktop +/opt/kde3/share/applications/kde/smbstatus.desktop +/opt/kde3/share/applications/kde/sound.desktop +/opt/kde3/share/applications/kde/spellchecking.desktop +/opt/kde3/share/applications/kde/style.desktop +/opt/kde3/share/applications/kde/useragent.desktop +/opt/kde3/share/applications/kde/xserver.desktop +/opt/kde3/share/applications/kde/cdinfo.desktop +/opt/kde3/share/applnk/.hidden +/opt/kde3/share/applnk/Settings/Information +/opt/kde3/share/applnk/Settings/LookNFeel +/opt/kde3/share/applnk/Settings/WebBrowsing/khtml_appearance.desktop +/opt/kde3/share/applnk/Settings/WebBrowsing/smb.desktop +/opt/kde3/share/apps/drkonqi +/opt/kde3/share/apps/kc* +/opt/kde3/share/apps/kdcop +/opt/kde3/share/apps/kdeprint* +/opt/kde3/share/apps/kdewizard +/opt/kde3/share/apps/kdisplay +/opt/kde3/share/apps/khelpcenter/searchhandlers/docbook.desktop +/opt/kde3/share/apps/khelpcenter +/opt/kde3/share/apps/kio* +/opt/kde3/share/apps/kjobviewer +/opt/kde3/share/apps/konsole +/opt/kde3/share/apps/khtml/kpartplugins +/opt/kde3/share/apps/kthememanager +/opt/kde3/share/apps/remoteview +/opt/kde3/share/apps/systemview +/opt/kde3/share/apps/kaccess +/opt/kde3/share/config.kcfg/klaunch.kcfg +/opt/kde3/share/config.kcfg/khelpcenter.kcfg +/opt/kde3/share/config.kcfg/keditbookmarks.kcfg +/opt/kde3/share/config.kcfg/launcherapplet.kcfg +/opt/kde3/share/config.kcfg/mediamanagersettings.kcfg +/opt/kde3/share/mimelnk/inode/system_directory.desktop +/opt/kde3/share/services/kded/remotedirnotify.desktop +/opt/kde3/share/services/kded/systemdirnotify.desktop +%if 0%{?with_hal} > 0 +/opt/kde3/share/services/media_propsdlgplugin.desktop + +%endif +%config(noreplace) /opt/kde3/share/config/kshorturifilterrc +%config(noreplace) /opt/kde3/share/config/kxkb_groups +/opt/kde3/share/desktop-directories +%exclude /opt/kde3/share/doc/HTML/en/kioslave +%dir /opt/kde3/share/fonts +%dir /opt/kde3/share/fonts/override +%verify(not md5 size mtime) /opt/kde3/share/fonts/override/fonts.dir +%dir /opt/kde3/share/icons/*/*/* +/opt/kde3/share/config.kcfg/kcm_useraccount.kcfg +/opt/kde3/share/config.kcfg/kcm_useraccount_pass.kcfg +%exclude /opt/kde3/share/icons/*/*/*/style.* +%exclude /opt/kde3/share/icons/*/*/*/looknfeel.* +%exclude /opt/kde3/share/icons/*/*/*/energy.* +%exclude /opt/kde3/share/icons/*/*/*/date.* +%exclude /opt/kde3/share/icons/*/*/*/filetypes.* +%exclude /opt/kde3/share/icons/*/*/*/personal.* +/opt/kde3/share/icons/*/*/*/a*.* +/opt/kde3/share/icons/*/*/*/b*.* +/opt/kde3/share/icons/*/*/*/c*.* +/opt/kde3/share/icons/*/*/*/d*.* +/opt/kde3/share/icons/*/*/*/f*.* +/opt/kde3/share/icons/*/*/*/g*.* +/opt/kde3/share/icons/*/*/*/help_index.* +/opt/kde3/share/icons/*/*/*/icons.* +/opt/kde3/share/icons/*/*/*/input_devices_settings.* +/opt/kde3/share/icons/*/*/*/kcmx.* +/opt/kde3/share/icons/*/*/*/kcmdf.* +/opt/kde3/share/icons/*/*/*/kbinaryclock.* +/opt/kde3/share/icons/*/*/apps/kcmcgi.* +/opt/kde3/share/icons/*/*/apps/kcmcolors.* +/opt/kde3/share/icons/*/*/apps/kcmcomponentchooser.* +/opt/kde3/share/icons/*/*/apps/kcmcrypto.* +/opt/kde3/share/icons/*/*/apps/kcmhistory.* +/opt/kde3/share/icons/*/*/apps/kcmjoystick.* +/opt/kde3/share/icons/*/*/apps/kcmkded.* +/opt/kde3/share/icons/*/*/apps/kcmkdnssd.* +/opt/kde3/share/icons/*/*/apps/kcmkhtml_filter.* +/opt/kde3/share/icons/*/*/apps/kcmlaunch.* +/opt/kde3/share/icons/*/*/apps/kcmmedia.* +/opt/kde3/share/icons/*/*/apps/kcmmouse.* +/opt/kde3/share/icons/*/*/apps/kcmnetpref.* +/opt/kde3/share/icons/*/*/apps/kcmnic.* +/opt/kde3/share/icons/*/*/apps/kcmperformance.* +/opt/kde3/share/icons/*/*/apps/kcmprivacy.* +/opt/kde3/share/icons/*/*/apps/kcmspellchecking.* +/opt/kde3/share/icons/*/*/*/ieee1394.* +/opt/kde3/share/icons/*/*/*/kdeprintfax.* +/opt/kde3/share/icons/*/*/*/kdisknav.* +/opt/kde3/share/icons/*/*/*/knetattach.* +/opt/kde3/share/icons/*/*/*/key_bindings.* +/opt/kde3/share/icons/*/*/*/keyboard_layout.* +/opt/kde3/share/icons/*/*/*/kfm_home.* +/opt/kde3/share/icons/*/*/*/khelpcenter.* +/opt/kde3/share/icons/*/*/*/kjobviewer.* +/opt/kde3/share/icons/*/*/*/konsole.* +/opt/kde3/share/icons/*/*/*/l*.* +/opt/kde3/share/icons/*/*/*/m*.* +/opt/kde3/share/icons/*/*/*/ne*.* +/opt/kde3/share/icons/*/*/*/opera.* +/opt/kde3/share/icons/*/*/*/r*.* +/opt/kde3/share/icons/*/*/*/s*.* +/opt/kde3/share/icons/*/*/*/usb.* +/opt/kde3/share/icons/*/*/*/vnc.* +/opt/kde3/share/icons/*/*/*/w*.* +/opt/kde3/share/icons/*/*/*/e*.* +/opt/kde3/share/icons/*/*/*/kcmdevices.* +/opt/kde3/share/icons/*/*/*/kcmdrkonqi.* +/opt/kde3/share/icons/*/*/*/kcmmemory.* +/opt/kde3/share/icons/*/*/*/kcmmidi.* +/opt/kde3/share/icons/*/*/*/kcmpartitions.* +/opt/kde3/share/icons/*/*/*/kcmpci.* +/opt/kde3/share/icons/*/*/*/kcmprocessor.* +/opt/kde3/share/icons/*/*/*/kcmscsi.* +/opt/kde3/share/icons/*/*/*/kthememgr.* +/opt/kde3/share/icons/*/*/*/kcontrol.* +/opt/kde3/share/icons/*/*/*/kxkb.* +/opt/kde3/share/icons/*/*/*/p*.* +/opt/kde3/share/icons/*/*/*/t*.* +/opt/kde3/share/icons/*/*/*/qtella.* +/opt/kde3/share/icons/*/*/*/x*.* +# these have no PNG +/opt/kde3/share/icons/*/scalable/apps/hardware.svgz +/opt/kde3/share/icons/*/scalable/apps/kate2.svgz +/opt/kde3/share/icons/*/scalable/apps/kwrite2.svgz +/opt/kde3/share/icons/*/scalable/apps/openoffice.svgz +/opt/kde3/share/icons/*/scalable/apps/quicktime.svgz +/opt/kde3/share/locale +/opt/kde3/share/mimelnk/application/x-konsole.desktop +/opt/kde3/share/mimelnk/application/x-ktheme.desktop +/opt/kde3/share/mimelnk/application/x-smb-server.desktop +/opt/kde3/share/mimelnk/print +/opt/kde3/share/services/textthumbnail.desktop +/opt/kde3/share/services/htmlthumbnail.desktop +/opt/kde3/share/services/ka*.desktop +/opt/kde3/share/services/kdeprint_part.desktop +/opt/kde3/share/services/konsolepart.desktop +/opt/kde3/share/services/konsole-script.desktop +/opt/kde3/share/services/kshorturifilter.desktop +/opt/kde3/share/services/ku*.desktop +/opt/kde3/share/services/searchproviders +/opt/kde3/share/services/useragentstrings +/opt/kde3/share/services/imagethumbnail.desktop +/opt/kde3/share/services/kxkb.desktop +/opt/kde3/share/services/kmanpart.desktop +/opt/kde3/share/services/localdomainurifilter.desktop +/opt/kde3/share/services/kwrited.desktop +/opt/kde3/share/services/djvuthumbnail.desktop +/opt/kde3/share/services/kded/kwrited.desktop +/opt/kde3/share/servicetypes/terminalemulator.desktop +/opt/kde3/share/servicetypes/kateplugin.desktop +/opt/kde3/share/servicetypes/findpart.desktop +/opt/kde3/share/servicetypes/searchprovider.desktop +/opt/kde3/share/servicetypes/thumbcreator.desktop +/opt/kde3/share/servicetypes/uasprovider.desktop +%exclude /opt/kde3/share/sounds/KDE_Close_Window* +%exclude /opt/kde3/share/sounds/KDE_Dialog* +%exclude /opt/kde3/share/sounds/KDE_Desktop* +%exclude /opt/kde3/share/sounds/KDE_Logout* +%exclude /opt/kde3/share/sounds/KDE_Startup* +%exclude /opt/kde3/share/sounds/KDE_Window* +/opt/kde3/share/sounds +/opt/kde3/share/templates +/opt/kde3/share/services/khelpcenter.desktop +/opt/kde3/bin/keditbookmarks +/opt/kde3/bin/kfm* +/opt/kde3/share/apps/kbookmark +/opt/kde3/share/apps/keditbookmarks +/opt/kde3/share/icons/*/*/*/keditbookmarks.* +/opt/kde3/share/icons/*/*/*/kfm.* +/opt/kde3/share/icons/*/*/*/konqueror.* +/opt/kde3/share/services/konq* +/opt/kde3/share/servicetypes/konq* +/opt/kde3/share/services/cursorthumbnail.desktop +/opt/kde3/%_lib/kde3/kcm_randr.* +/opt/kde3/bin/krandrtray +/opt/kde3/share/applications/kde/krandrtray.desktop +/opt/kde3/%_lib/kde3/kded_mediamanager.* +/opt/kde3/%_lib/kde3/kfile_media.* +/opt/kde3/%_lib/kde3/kfile_trash.* +/opt/kde3/share/applications/kde/devices.desktop +/opt/kde3/share/applications/kde/knetattach.desktop +/opt/kde3/share/applications/kde/opengl.desktop +/opt/kde3/share/icons/*/*/*/kcmopengl.* +/opt/kde3/share/mimelnk/media +/opt/kde3/share/services/kded/mediamanager.desktop +/opt/kde3/share/services/kded/homedirnotify.desktop +/opt/kde3/share/services/kded/medianotifier.desktop +/opt/kde3/share/services/kfile_media.desktop +/opt/kde3/share/services/kfile_trash.desktop +/opt/kde3/share/services/kfile_trash_system.desktop +/opt/kde3/share/mimelnk/fonts/package.desktop +/opt/kde3/%_lib/kde3/exrthumbnail.* +/opt/kde3/share/services/exrthumbnail.desktop +%dir /opt/kde3/share/mimelnk/fonts +/opt/kde3/bin/kfontinst +/opt/kde3/%_lib/kde3/fontthumbnail.* +/opt/kde3/%_lib/kde3/kfile_font.* +/opt/kde3/%_lib/kde3/libkfontviewpart.* +%dir /opt/kde3/share/apps/kfontview +/opt/kde3/share/apps/kfontview/kfontviewpart.rc +/opt/kde3/share/applications/kde/kcmfontinst.desktop +/opt/kde3/share/mimelnk/fonts/folder.desktop +/opt/kde3/share/mimelnk/fonts/system-folder.desktop +/opt/kde3/share/services/fontthumbnail.desktop +/opt/kde3/share/services/kfile_font.desktop +/opt/kde3/share/services/kfontviewpart.desktop +%_mandir/man1/* +%if %suse_version < 1001 +%config(noreplace) /etc/security/fileshare.conf +/opt/kde3/bin/filesharelist +%verify(not mode) /opt/kde3/bin/fileshareset +%endif +%{_mandir}/man8/kcheckpass.8.gz +%doc %lang(en) /opt/kde3/share/doc/HTML/en/kcontrol +%doc %lang(en) /opt/kde3/share/doc/HTML/en/kdcop +%doc %lang(en) /opt/kde3/share/doc/HTML/en/kdebugdialog +%doc %lang(en) /opt/kde3/share/doc/HTML/en/kdeprint +%doc %lang(en) /opt/kde3/share/doc/HTML/en/kdesu +%exclude /opt/kde3/share/doc/HTML/en/khelpcenter/userguide +%exclude /opt/kde3/share/doc/HTML/en/khelpcenter/visualdict +%doc %lang(en) /opt/kde3/share/doc/HTML/en/khelpcenter +%doc %lang(en) /opt/kde3/share/doc/HTML/en/knetattach +/opt/kde3/share/applications/kde/desktoppath.desktop + +%files samba +%defattr(-,root,root) +/opt/kde3/%_lib/kde3/kcm_samba.* +/opt/kde3/%_lib/kde3/kio_smb.* +/opt/kde3/share/services/smb.protocol +%dir /opt/kde3/share/apps/konqueror/dirtree +%dir /opt/kde3/share/apps/konqueror/dirtree/remote +/opt/kde3/share/apps/konqueror/dirtree/remote/smb-network.desktop +/opt/kde3/share/mimelnk/application/x-smb-workgroup.desktop + +%files kdm +%defattr(-,root,root) +%dir /opt/kde3/share/doc/kdm +/opt/kde3/bin/genkdmconf +/opt/kde3/bin/kdm* +/opt/kde3/bin/krootimage +/opt/kde3/share/apps/kdm +/opt/kde3/%_lib/kde3/kgreet_pam.* +%doc /opt/kde3/share/doc/kdm/README +%if %suse_version < 1020 +%config /etc/pam.d/xdm-np +%endif +%dir /opt/kde3/share/config/kdm +%config(noreplace) /opt/kde3/share/config/kdm/kdmrc +%config(noreplace) /opt/kde3/share/config/kdm/backgroundrc +%if %suse_version < 1010 +%config /opt/kde3/share/config/kdm/Xaccess +%config /opt/kde3/share/config/kdm/Xreset +%config /opt/kde3/share/config/kdm/Xresources +%config /opt/kde3/share/config/kdm/Xsession +%config /opt/kde3/share/config/kdm/Xsetup +%config /opt/kde3/share/config/kdm/Xstartup +%config /opt/kde3/share/config/kdm/Xwilling +%endif +%ghost /var/run/xdmctl +/usr/sbin/rckdm +/opt/kde3/share/applications/kde/kdm.desktop +/opt/kde3/share/icons/*/*/*/kdmconfig.* +/opt/kde3/%_lib/kde3/kcm_kdm.* +%doc %lang(en) /opt/kde3/share/doc/HTML/en/kdm + +%files session +%defattr(-,root,root) +%if %suse_version > 1010 +/usr/bin/kde +/usr/bin/startkde3 +%else +/usr/X11R6/bin/kde +%endif +%if %suse_version < 1030 +%dir /usr/share/xsessions +%endif +/usr/share/xsessions/kde.desktop + +%files extra +%defattr(-,root,root) +/opt/kde3/bin/kpersonalizer +/opt/kde3/share/applications/kde/kpersonalizer.desktop +/opt/kde3/share/apps/kpersonalizer +/opt/kde3/share/icons/*/*/*/kpersonalizer.* +/opt/kde3/bin/kfontview +/opt/kde3/share/applications/kde/kfontview.desktop +/opt/kde3/share/apps/kfontview/kfontviewui.rc +/opt/kde3/%_lib/kde3/khotkeys_arts.* + +%files nsplugin +%defattr(-,root,root) +/opt/kde3/bin/nsplugin* +/opt/kde3/share/apps/plugin/nspluginpart.rc +%dir /opt/kde3/share/applnk/Settings/WebBrowsing +/opt/kde3/share/applnk/Settings/WebBrowsing/nsplugin.desktop + +%files devel +%defattr(-,root,root) +/opt/kde3/include/* +/opt/kde3/%_lib/libkonq.so +/opt/kde3/%_lib/libkdecorations.so +/opt/kde3/%_lib/libkonqsidebarplugin.so +/opt/kde3/%_lib/libkickermain.so +/opt/kde3/%_lib/libtask*.so +/opt/kde3/%_lib/libksgrd.so +%if %suse_version > 1010 +/opt/kde3/%_lib/libkickoffsearch_interfaces.so +/opt/kde3/%_lib/libkickoffsearch_interfaces.la +%endif +/opt/kde3/%_lib/libksplashthemes.so +/opt/kde3/%_lib/libkateinterfaces.so +/opt/kde3/%_lib/libkateutils.so +/opt/kde3/%_lib/libkhotkeys_shared.so +/opt/kde3/%_lib/libkateinterfaces.la +/opt/kde3/%_lib/libkateutils.la +/opt/kde3/%_lib/libkdecorations.la +/opt/kde3/%_lib/libkfontinst.la +/opt/kde3/%_lib/libkfontinst.so +/opt/kde3/%_lib/libkhotkeys_shared.la +/opt/kde3/%_lib/libkickermain.la +/opt/kde3/%_lib/libkonq.la +/opt/kde3/%_lib/libkonqsidebarplugin.la +/opt/kde3/%_lib/libksgrd.la +/opt/kde3/%_lib/libksplashthemes.la +/opt/kde3/%_lib/libtaskbar.la +/opt/kde3/%_lib/libtaskmanager.la +/opt/kde3/%_lib/libkasbar.so +/opt/kde3/%_lib/libkasbar.la + +%files ksysguardd +%defattr(-,root,root) +%dir /etc/slp.reg.d +#%if %suse_version < 1020 +/usr/bin/ksysguardd +/opt/kde3/bin/ksysguardd +%config(noreplace) /etc/ksysguarddrc +#%endif +#%if %suse_version > 1030 +#/usr/bin/ksysguardd +#%config(noreplace) /etc/ksysguarddrc +#%endif +/etc/init.d/ksysguardd +/usr/sbin/rcksysguardd +%config(noreplace) /etc/slp.reg.d/* + +%if %suse_version > 1010 +%if %suse_version < 1140 + +%files beagle +%defattr(-,root,root) +/opt/kde3/bin/khc_beagle_search.pl +/opt/kde3/bin/khc_beagle_index.pl +/opt/kde3/share/apps/khelpcenter/searchhandlers/docbook.desktop +/opt/kde3/%_lib/kde3/kickoffsearch_beagle.* +/opt/kde3/share/services/kickoffsearch_beagle.desktop +%endif +%endif + +%files -n fileshareset +%defattr(-,root,root) +%config(noreplace) /etc/security/fileshare.conf +%{_bindir}/filesharelist +%verify(not mode) %{_bindir}/fileshareset +%{_mandir}/man8/fileshareset.8.gz + +%files apps +%defattr(-,root,root) +/opt/kde3/bin/konsole* +/opt/kde3/%_lib/kde3/konsole.* +/opt/kde3/%_lib/kde3/kcm_konsole.* +/opt/kde3/%_lib/libkdeinit_konsole.so +/opt/kde3/share/applications/kde/konsole.desktop +/opt/kde3/share/applications/kde/konsolesu.desktop +%doc %lang(en) /opt/kde3/share/doc/HTML/en/konsole +/opt/kde3/share/applications/kde/Home.desktop +/opt/kde3/%_lib/libkdeinit_konqueror.so +/opt/kde3/share/apps/konqueror/konq-simplebrowser.rc +/opt/kde3/share/applications/kde/konquerorsu.desktop +/opt/kde3/share/applnk/konqueror.desktop +%doc %lang(en) /opt/kde3/share/doc/HTML/en/konqueror +/opt/kde3/share/config.kcfg/konqueror.kcfg +/opt/kde3/bin/konqueror +/opt/kde3/%_lib/kde3/konq*.so +/opt/kde3/%_lib/kde3/konq*.la +%dir /opt/kde3/share/apps/konqueror +/opt/kde3/share/apps/konqueror/tiles +/opt/kde3/share/apps/konqueror/about +/opt/kde3/share/apps/konqueror/icons +/opt/kde3/share/apps/konqueror/konqueror.rc +/opt/kde3/share/apps/konqueror/p* +/opt/kde3/share/apps/konqueror/servicemenus +/opt/kde3/%_lib/kde3/konqueror.* +/opt/kde3/share/apps/konqiconview +/opt/kde3/share/apps/konqlistview +/opt/kde3/share/apps/konqsidebartng +/opt/kde3/%_lib/kde3/kded_konqy_preloader.* +/opt/kde3/share/services/kded/konqy_preloader.desktop +/opt/kde3/share/applications/kde/konqbrowser.desktop +/opt/kde3/share/applications/kde/konqfilemgr.desktop +/opt/kde3/share/config.kcfg/konq_listview.kcfg +%config(noreplace) /opt/kde3/share/config/konqsidebartng.rc +/opt/kde3/bin/kfind +/opt/kde3/%_lib/kde3/libkfindpart.* +/opt/kde3/share/applications/kde/Kfind.desktop +/opt/kde3/share/apps/kfindpart +/opt/kde3/share/icons/*/*/*/kfind.* +/opt/kde3/share/services/kfindpart.desktop +%doc %lang(en) /opt/kde3/share/doc/HTML/en/kfind +/opt/kde3/bin/kwrite +/opt/kde3/%_lib/kde3/kwrite.* +/opt/kde3/%_lib/libkdeinit_kwrite.so +/opt/kde3/share/applications/kde/kwrite.desktop +/opt/kde3/share/apps/kwrite +/opt/kde3/share/icons/*/*/*/kwrite.* +%doc %lang(en) /opt/kde3/share/doc/HTML/en/kwrite +/opt/kde3/bin/kate +/opt/kde3/%_lib/kde3/kate.* +/opt/kde3/%_lib/libkateinterfaces.so.* +/opt/kde3/%_lib/libkateutils.so.* +/opt/kde3/%_lib/libkdeinit_kate.so +/opt/kde3/share/applications/kde/kate.desktop +/opt/kde3/share/apps/kate +/opt/kde3/share/config/katerc +/opt/kde3/share/icons/*/*/*/kate.* +%doc %lang(en) /opt/kde3/share/doc/HTML/en/kate + +%files workspace +%defattr(-,root,root) +%exclude /usr/share/wallpapers/default_blue.* +%doc %lang(en) /opt/kde3/share/doc/HTML/en/kicker +/usr/share/wallpapers +/opt/kde3/bin/startkde +/opt/kde3/bin/kdesktop +/opt/kde3/bin/kdesktop_lock +/opt/kde3/bin/ksmserver +/opt/kde3/%_lib/libkdeinit_ksmserver.so +/opt/kde3/bin/ksplash +/opt/kde3/bin/ksplashsimple +/opt/kde3/%_lib/kde3/kdesktop.* +/opt/kde3/share/apps/kdesktop +/opt/kde3/share/config.kcfg/kdesktop.kcfg +%config(noreplace) /opt/kde3/share/config/kdesktop_custom_menu* +/opt/kde3/bin/kicker +/opt/kde3/%_lib/kde3/kicker* +/opt/kde3/%_lib/kde3/kcm_kicker* +/opt/kde3/%_lib/libkickermain.so.* +/opt/kde3/share/applications/kde/kcmkicker.desktop +/opt/kde3/share/apps/kicker +/opt/kde3/share/config.kcfg/kickerSettings.kcfg +/opt/kde3/share/icons/*/*/*/kcmkicker.* +/opt/kde3/share/icons/*/*/*/kicker.* +/opt/kde3/%_lib/kconf_update_bin/kicker-3.4-reverseLayout +/opt/kde3/bin/kwin +/opt/kde3/bin/kwin_killer_helper +/opt/kde3/bin/kwin_rules_dialog +/opt/kde3/%_lib/kde3/kwin_* +/opt/kde3/share/apps/kwin +/opt/kde3/%_lib/kde3/kwin.* +/opt/kde3/%_lib/kde3/kwin3_* +/opt/kde3/%_lib/kconf_update_bin/kwin_update_default_rules +/opt/kde3/%_lib/kconf_update_bin/kwin_update_window_settings +/opt/kde3/share/applications/kde/kwinrules.desktop +/opt/kde3/share/applications/kde/kwindecoration.desktop +/opt/kde3/share/applications/kde/kwinoptions.desktop +/opt/kde3/share/config.kcfg/kwin.kcfg +/opt/kde3/share/icons/*/*/*/kwin.* +/var/adm/fillup-templates/sysconfig.windowmanager-kdebase3 +/opt/kde3/share/apps/ksplash +/opt/kde3/share/services/ksplash.desktop +/opt/kde3/share/services/ksplashdefault.desktop +/opt/kde3/share/services/ksplashredmond.desktop +/opt/kde3/share/services/ksplashstandard.desktop +/opt/kde3/share/servicetypes/ksplashplugins.desktop +/opt/kde3/share/icons/*/*/*/ksplash.* +/opt/kde3/%_lib/kde3/ksplash* +/opt/kde3/%_lib/libksplashthemes.so.* +/opt/kde3/share/icons/*/*/apps/kcmsmserver.* +/opt/kde3/share/applications/kde/kcmsmserver.desktop +/opt/kde3/%_lib/kde3/ksmserver.* +/opt/kde3/share/apps/ksmserver +/opt/kde3/%_lib/kde3/clock_panelapplet.* +/opt/kde3/%_lib/kde3/dockbar_panelextension.* +/opt/kde3/%_lib/kde3/kasbar_panelextension.* +/opt/kde3/%_lib/kde3/menu_panelapplet.* +/opt/kde3/%_lib/kde3/klipper_panelapplet.* +/opt/kde3/%_lib/kde3/launcher_panelapplet.* +/opt/kde3/%_lib/kde3/lockout_panelapplet.* +/opt/kde3/%_lib/kde3/minipager_panelapplet.* +/opt/kde3/%_lib/kde3/naughty_panelapplet.* +/opt/kde3/%_lib/kde3/run_panelapplet.* +/opt/kde3/%_lib/kde3/sidebar_panelextension.* +/opt/kde3/share/applications/kde/panel.desktop +/opt/kde3/share/applications/kde/panel_appearance.desktop +/opt/kde3/%_lib/kde3/media_panelapplet.* +/opt/kde3/%_lib/kde3/kcm_taskbar.* +/opt/kde3/share/applications/kde/kcmtaskbar.desktop +/opt/kde3/share/config.kcfg/taskbar.kcfg +/opt/kde3/share/icons/*/*/apps/kcmtaskbar.* +/opt/kde3/%_lib/kde3/kcm_screensaver.* +/opt/kde3/share/applications/kde/screensaver.desktop +/opt/kde3/share/applnk/System/ScreenSavers/KBlankscreen.desktop +/opt/kde3/share/applnk/System/ScreenSavers/KRandom.desktop +/opt/kde3/bin/kwebdesktop +/opt/kde3/share/config.kcfg/kwebdesktop.kcfg +/opt/kde3/share/applications/kde/background.desktop +/opt/kde3/%_lib/kde3/kcm_background* +/opt/kde3/bin/default_desktop_aligning +/opt/kde3/share/applications/kde/desktop.desktop +/opt/kde3/share/applications/kde/desktopbehavior.desktop +/opt/kde3/share/applications/kde/ksplashthememgr.desktop +/opt/kde3/share/icons/*/*/apps/kcmdesktop.* +/opt/kde3/share/icons/*/*/apps/kcmdesktopbehavior.* +/opt/kde3/%_lib/kde3/kcm_ksplashthemes.* +/opt/kde3/%_lib/kde3/kcm_kwindecoration.* +/opt/kde3/%_lib/kde3/kcm_kwinoptions.* +/opt/kde3/%_lib/kde3/kcm_kwinrules.* +%doc %lang(en) /opt/kde3/share/doc/HTML/en/ksplashml +/opt/kde3/shutdown +%if %suse_version > 1010 +/opt/kde3/%_lib/libkickoffsearch_interfaces.so.* +/opt/kde3/share/servicetypes/kickoffsearchplugin.desktop +%endif +/opt/kde3/share/autostart/* +/opt/kde3/share/apps/naughtyapplet +/opt/kde3/%_lib/libtask*.so.* +/opt/kde3/bin/extensionproxy +/opt/kde3/bin/appletproxy +/opt/kde3/%_lib/kde3/appletproxy.* +/opt/kde3/%_lib/kde3/extensionproxy.* +/opt/kde3/%_lib/kde3/taskbar* +/opt/kde3/%_lib/kde3/trash_panelapplet* +/opt/kde3/%_lib/kde3/sys* +/opt/kde3/share/apps/clockapplet +/opt/kde3/bin/kasbar +/opt/kde3/%_lib/libkasbar.so.* +/opt/kde3/%_lib/libkdeinit_kicker.so +/opt/kde3/%_lib/libkdeinit_appletproxy.so +/opt/kde3/%_lib/libkdeinit_extensionproxy.so +/opt/kde3/%_lib/libkdeinit_kdesktop.so +/opt/kde3/%_lib/libkdeinit_kwin.so +/opt/kde3/%_lib/libkdeinit_kwin_rules_dialog.so +/opt/kde3/bin/ktip +/opt/kde3/share/appl*/*/ktip.desktop +/opt/kde3/share/icons/*/*/*/ktip.* +/opt/kde3/bin/kpager +/opt/kde3/share/appl*/*/kpager.desktop +/opt/kde3/share/icons/*/*/*/kpager.* +%doc %lang(en) /opt/kde3/share/doc/HTML/en/kpager +/opt/kde3/bin/klipper +/opt/kde3/%_lib/kde3/klipper.* +/opt/kde3/%_lib/libkdeinit_klipper.so +/opt/kde3/share/applications/kde/klipper.desktop +%config(noreplace) /opt/kde3/share/config/klipperrc +/opt/kde3/share/icons/*/*/*/klipper.* +%doc %lang(en) /opt/kde3/share/doc/HTML/en/klipper +/opt/kde3/share/applications/kde/kmenuedit.desktop +/opt/kde3/share/apps/kmenuedit +/opt/kde3/share/icons/*/*/*/kmenuedit.* +%doc %lang(en) /opt/kde3/share/doc/HTML/en/kmenuedit +/opt/kde3/bin/kmenuedit +/opt/kde3/%_lib/kde3/kmenuedit.* +/opt/kde3/%_lib/libkdeinit_kmenuedit.so +/opt/kde3/bin/kinfocenter +/opt/kde3/share/applications/kde/kinfocenter.desktop +/opt/kde3/share/apps/kinfocenter +%doc %lang(en) /opt/kde3/share/doc/HTML/en/kinfocenter +%doc %lang(en) /opt/kde3/share/doc/HTML/en/khelpcenter/userguide +%doc %lang(en) /opt/kde3/share/doc/HTML/en/khelpcenter/visualdict +/opt/kde3/share/sounds/KDE_Close_Window* +/opt/kde3/share/sounds/KDE_Dialog* +/opt/kde3/share/sounds/KDE_Desktop* +/opt/kde3/share/sounds/KDE_Logout* +/opt/kde3/share/sounds/KDE_Startup* +/opt/kde3/share/sounds/KDE_Window* +/opt/kde3/%_lib/libkdeinit_khotkeys.so +/opt/kde3/%_lib/kde3/kcm_khotkeys.* +/opt/kde3/%_lib/kde3/kcm_khotkeys_init.* +/opt/kde3/share/icons/*/*/*/khotkeys.* +/opt/kde3/bin/khotkeys +/opt/kde3/%_lib/kconf_update_bin/khotkeys_update +/opt/kde3/%_lib/kde3/khotkeys.* +/opt/kde3/%_lib/kde3/kded_khotkeys.* +/opt/kde3/%_lib/libkhotkeys_shared.so.* +/opt/kde3/share/applications/kde/khotkeys.desktop +/opt/kde3/share/apps/khotkeys +/opt/kde3/share/services/kded/khotkeys.desktop +/opt/kde3/bin/ksysguard +/opt/kde3/share/applications/kde/ksysguard.desktop +/opt/kde3/share/apps/ksysguard +/opt/kde3/share/icons/*/*/*/ksysguard.* +/opt/kde3/share/mimelnk/application/x-ksysguard.desktop +%doc %lang(en) /opt/kde3/share/doc/HTML/en/ksysguard +%doc %lang(en) /opt/kde3/share/doc/HTML/en/kxkb +/opt/kde3/%_lib/libksgrd.so.* +/opt/kde3/bin/kompmgr +%doc %lang(en) /opt/kde3/share/doc/HTML/en/kompmgr +%if 0%{?with_hal} == 0 +/opt/kde3/bin/devmon-automounter.sh +%endif + +%files runtime +%defattr(-,root,root) +%doc %lang(en) /opt/kde3/share/doc/HTML/en/kioslave +%exclude /opt/kde3/%_lib/kde3/kio_smb.* +%exclude /opt/kde3/share/services/smb.protocol +/opt/kde3/bin/kde3 +/opt/kde3/bin/kreadconfig +/opt/kde3/bin/kwriteconfig +/opt/kde3/bin/kprinter +/opt/kde3/%_lib/libkdeinit_kprinter.so +/opt/kde3/bin/kdesu +/opt/kde3/%_lib/kde3/kio_* +/opt/kde3/%_lib/libkfontinst.so.* +/opt/kde3/share/services/*.protocol +/opt/kde3/%_lib/libkonq.so.* +/opt/kde3/%_lib/libkonqsidebarplugin.so.* +/opt/kde3/%_lib/kde3/kded_favicons.* +/opt/kde3/share/services/kded/favicons.desktop +/opt/kde3/%_lib/libkdecorations.so.* +/opt/kde3/%_lib/kde3/kgreet_winbind.* +/opt/kde3/%_lib/kde3/kgreet_classic.* +%config /etc/pam.d/kcheckpass +%verify(not mode) %attr(4755,root,shadow) /opt/kde3/bin/kcheckpass +/opt/kde3/share/icons/*/*/*/knotify.* +/opt/kde3/share/icons/*/*/*/kscreensaver.* +/opt/kde3/share/icons/*/*/*/style.* +/opt/kde3/share/icons/*/*/*/looknfeel.* +/opt/kde3/share/icons/*/*/*/iconthemes.* +/opt/kde3/share/icons/*/*/*/keyboard.* +/opt/kde3/share/icons/*/*/*/kcmsound.* +/opt/kde3/share/icons/*/*/*/energy.* +/opt/kde3/share/icons/*/*/*/kcmkwm.* +/opt/kde3/share/icons/*/*/*/hwinfo.* +/opt/kde3/share/icons/*/*/*/date.* +/opt/kde3/share/icons/*/*/*/filetypes.* +/opt/kde3/share/icons/*/*/*/kcmsystem.* +/opt/kde3/share/icons/*/*/*/personal.* + +%changelog diff --git a/opensuse/core/tdebase/teach-minicli-lock.diff b/opensuse/core/tdebase/teach-minicli-lock.diff new file mode 100644 index 000000000..73bd7da1e --- /dev/null +++ b/opensuse/core/tdebase/teach-minicli-lock.diff @@ -0,0 +1,30 @@ +Index: kdesktop/minicli.cpp +=================================================================== +--- kdesktop/minicli.cpp.orig ++++ kdesktop/minicli.cpp +@@ -265,7 +265,9 @@ void Minicli::accept() + } + + bool logout = (cmd == "logout"); +- if( !logout && runCommand() == 1 ) ++ bool lock = (cmd == "lock"); ++ ++ if( !logout && !lock && runCommand() == 1 ) + return; + + m_dlg->cbCommand->addToHistory( m_dlg->cbCommand->currentText().stripWhiteSpace() ); +@@ -278,6 +280,14 @@ void Minicli::accept() + kapp->propagateSessionManager(); + kapp->requestShutDown(); + } ++ if ( lock ) ++ { ++ QCString appname( "kdesktop" ); ++ int kicker_screen_number = qt_xscreen(); ++ if ( kicker_screen_number ) ++ appname.sprintf("kdesktop-screen-%d", kicker_screen_number); ++ kapp->dcopClient()->send(appname, "KScreensaverIface", "lock()", ""); ++ } + } + + void Minicli::reject() diff --git a/opensuse/core/tdebase/uninit.diff b/opensuse/core/tdebase/uninit.diff new file mode 100644 index 000000000..92dd544ab --- /dev/null +++ b/opensuse/core/tdebase/uninit.diff @@ -0,0 +1,10 @@ +--- kcontrol/randr/randroutput.cpp ++++ kcontrol/randr/randroutput.cpp +@@ -383,6 +383,7 @@ RandRCrtc *RandROutput::findEmptyCrtc() + if (crtc->connectedOutputs().count() == 0) + return crtc; + } ++ return crtc; + } + + bool RandROutput::tryCrtc(RandRCrtc *crtc, int changes) diff --git a/opensuse/core/tdebase/use-full-hinting-by-default.diff b/opensuse/core/tdebase/use-full-hinting-by-default.diff new file mode 100644 index 000000000..3375f0943 --- /dev/null +++ b/opensuse/core/tdebase/use-full-hinting-by-default.diff @@ -0,0 +1,35 @@ +Index: kcontrol/fonts/fonts.cpp +=================================================================== +--- kcontrol/fonts/fonts.cpp.orig ++++ kcontrol/fonts/fonts.cpp +@@ -332,7 +332,7 @@ bool FontAASettings::load( bool useDefau + kglobals.setReadDefaults( useDefaults ); + + kglobals.setGroup("General"); +- hStyle=KXftConfig::Hint::Medium; ++ hStyle=KXftConfig::Hint::Full; + xft.setHintStyle(hStyle); + xft.apply(); // Save this setting + kglobals.writeEntry("XftHintStyle", KXftConfig::toStr(hStyle)); +@@ -450,7 +450,7 @@ KXftConfig::Hint::Style FontAASettings:: + if(hintingStyle->currentText()==KXftConfig::description((KXftConfig::Hint::Style)s)) + return (KXftConfig::Hint::Style)s; + +- return KXftConfig::Hint::Medium; ++ return KXftConfig::Hint::Full; + } + #endif + +Index: kcontrol/krdb/krdb.cpp +=================================================================== +--- kcontrol/krdb/krdb.cpp.orig ++++ kcontrol/krdb/krdb.cpp +@@ -524,7 +524,7 @@ void runRdb( uint flags ) + + if (kglobals.hasKey("XftHintStyle")) + { +- QString hintStyle = kglobals.readEntry("XftHintStyle", "hintmedium"); ++ QString hintStyle = kglobals.readEntry("XftHintStyle", "hintfull"); + contents += "Xft.hinting: "; + if(hintStyle.isEmpty()) + contents += "-1\n"; diff --git a/opensuse/core/tdebase/use-pam-before-classic.diff b/opensuse/core/tdebase/use-pam-before-classic.diff new file mode 100644 index 000000000..4f2a00008 --- /dev/null +++ b/opensuse/core/tdebase/use-pam-before-classic.diff @@ -0,0 +1,17 @@ +Index: kdesktop/lock/lockprocess.cc +=================================================================== +--- kdesktop/lock/lockprocess.cc.orig ++++ kdesktop/lock/lockprocess.cc +@@ -364,8 +364,10 @@ void LockProcess::configure() + readSaver(); + + mPlugins = KDesktopSettings::pluginsUnlock(); +- if (mPlugins.isEmpty()) +- mPlugins = QStringList("classic"); ++ if (mMethod == "pam") ++ mPlugins << mMethod; ++ if (mMethod == "pam" || mPlugins.isEmpty()) ++ mPlugins << "classic"; + mPluginOptions = KDesktopSettings::pluginOptions(); + } + diff --git a/opensuse/core/tdebase/wizard_small.png b/opensuse/core/tdebase/wizard_small.png new file mode 100644 index 000000000..52233e341 Binary files /dev/null and b/opensuse/core/tdebase/wizard_small.png differ diff --git a/opensuse/core/tdebase/workaround-pdf-on64bit-nsplugin-bug.diff b/opensuse/core/tdebase/workaround-pdf-on64bit-nsplugin-bug.diff new file mode 100644 index 000000000..b5681e0a3 --- /dev/null +++ b/opensuse/core/tdebase/workaround-pdf-on64bit-nsplugin-bug.diff @@ -0,0 +1,44 @@ +Index: nsplugins/nspluginloader.cpp +=================================================================== +--- nsplugins/nspluginloader.cpp.orig ++++ nsplugins/nspluginloader.cpp +@@ -322,7 +322,7 @@ QString NSPluginLoader::lookup(const QSt + } + + +-bool NSPluginLoader::loadViewer() ++bool NSPluginLoader::loadViewer(const QString &mimeType) + { + kdDebug() << "NSPluginLoader::loadViewer" << endl; + +@@ -346,7 +346,7 @@ bool NSPluginLoader::loadViewer() + } + + // find the external artsdsp process +- if( _useArtsdsp ) { ++ if( _useArtsdsp && mimeType != "application/pdf" ) { + kdDebug() << "trying to use artsdsp" << endl; + QString artsdsp = KGlobal::dirs()->findExe("artsdsp"); + if (!artsdsp) +@@ -460,7 +460,7 @@ NSPluginInstance *NSPluginLoader::newIns + if ( !_viewer ) + { + // load plugin viewer process +- loadViewer(); ++ loadViewer(mimeType); + + if ( !_viewer ) + { +Index: nsplugins/nspluginloader.h +=================================================================== +--- nsplugins/nspluginloader.h.orig ++++ nsplugins/nspluginloader.h +@@ -100,7 +100,7 @@ protected: + QString lookup(const QString &mimeType); + QString lookupMimeType(const QString &url); + +- bool loadViewer(); ++ bool loadViewer(const QString &mimeType); + void unloadViewer(); + + protected slots: diff --git a/opensuse/core/tdebase/xcursor.diff b/opensuse/core/tdebase/xcursor.diff new file mode 100644 index 000000000..8c4010915 --- /dev/null +++ b/opensuse/core/tdebase/xcursor.diff @@ -0,0 +1,36 @@ +Index: kcontrol/input/xcursor/themepage.cpp +=================================================================== +--- kcontrol/input/xcursor/themepage.cpp.orig ++++ kcontrol/input/xcursor/themepage.cpp +@@ -73,6 +73,13 @@ struct ThemeInfo { + }; + + ++static QString defaultThemeDescription( const QString& theme ) ++{ ++ if( theme == "redglass" || theme == "whiteglass" || theme == "pseudocore" || theme == "handhelds" ) ++ return i18n( "XFree theme %1 - incomplete for KDE" ).arg( theme ); ++ return i18n( "No description available" );; ++} ++ + ThemePage::ThemePage( QWidget* parent, const char* name ) + : QWidget( parent, name ), selectedTheme( NULL ), currentTheme( NULL ) + { +@@ -333,7 +340,7 @@ void ThemePage::insertTheme( const QStri + + // Defaults in case there's no name or comment field. + QString name = dirName; +- QString desc = i18n( "No description available" ); ++ QString desc = defaultThemeDescription( name ); + QString sample = "left_ptr"; + + KSimpleConfig c( path + "/index.theme", true ); // Open read-only +@@ -480,7 +487,7 @@ void ThemePage::insertThemes() + // Defaults in case there's no index.theme file or it lacks + // a name and a comment field. + QString name = *it; +- QString desc = i18n( "No description available" ); ++ QString desc = defaultThemeDescription( name ); + QString sample = "left_ptr"; + + // Parse the index.theme file if the theme has one. diff --git a/opensuse/core/tdebase/xinerama.patch b/opensuse/core/tdebase/xinerama.patch new file mode 100644 index 000000000..41aedbcba --- /dev/null +++ b/opensuse/core/tdebase/xinerama.patch @@ -0,0 +1,951 @@ +Index: kdesktop/minicli.cpp +=================================================================== +--- kdesktop/minicli.cpp.orig ++++ kdesktop/minicli.cpp +@@ -379,6 +379,17 @@ int Minicli::runCommand() + cmd = uri.path(); + else + cmd = uri.url(); ++ ++ QCString asn; ++ if( qApp->desktop()->isVirtualDesktop()) ++ { ++ asn = KStartupInfo::createNewStartupId(); ++ KStartupInfoId id; ++ id.initId( asn ); ++ KStartupInfoData data; ++ data.setXinerama( qApp->desktop()->screenNumber( this )); ++ KStartupInfo::sendChange( id, data ); ++ } + + // Determine whether the application should be run through + // the command line (terminal) interface... +@@ -514,7 +525,7 @@ int Minicli::runCommand() + case KURIFilterData::HELP: + { + // No need for kfmclient, KRun does it all (David) +- (void) new KRun( m_filterData->uri(), parentWidget()); ++ (void) new KRun( m_filterData->uri(), parentWidget(), asn ); + return 0; + } + case KURIFilterData::EXECUTABLE: +@@ -526,7 +537,7 @@ int Minicli::runCommand() + if (service && service->isValid() && service->type() == "Application") + { + notifyServiceStarted(service); +- KRun::run(*service, KURL::List()); ++ KRun::run(*service, KURL::List(), parentWidget(), asn ); + return 0; + } + } +@@ -561,7 +572,7 @@ int Minicli::runCommand() + if (service && service->isValid() && service->type() == "Application") + { + notifyServiceStarted(service); +- KRun::run(*service, KURL::List(), this); ++ KRun::run(*service, KURL::List(), parentWidget(), asn ); + return 0; + } + +@@ -569,7 +580,7 @@ int Minicli::runCommand() + if (service && service->isValid() && service->type() == "Application") + { + notifyServiceStarted(service); +- KRun::run(*service, KURL::List(), this); ++ KRun::run(*service, KURL::List(), parentWidget(), asn ); + return 0; + } + +@@ -581,7 +592,7 @@ int Minicli::runCommand() + } + } + +- if ( KRun::runCommand( cmd, exec, m_iconName ) ) ++ if ( KRun::runCommand( cmd, exec, m_iconName, parentWidget(), asn ) ) + return 0; + else + { +Index: kdesktop/desktop.cc +=================================================================== +--- kdesktop/desktop.cc.orig ++++ kdesktop/desktop.cc +@@ -520,9 +520,12 @@ void KDesktop::popupExecuteCommand(const + if ( m_miniCli->isVisible() ) { + KWin::forceActiveWindow( m_miniCli->winId() ); + } else { +- QRect rect = KGlobalSettings::desktopGeometry(QCursor::pos()); +- m_miniCli->move(rect.x() + (rect.width() - m_miniCli->width())/2, +- rect.y() + (rect.height() - m_miniCli->height())/2); ++ NETRootInfo i( qt_xdisplay(), NET::Supported ); ++ if( !i.isSupported( NET::WM2FullPlacement )) { ++ QRect rect = KGlobalSettings::desktopGeometry(QCursor::pos()); ++ m_miniCli->move(rect.x() + (rect.width() - m_miniCli->width())/2, ++ rect.y() + (rect.height() - m_miniCli->height())/2); ++ } + m_miniCli->show(); // non-modal + } + } +Index: kwin/useractions.cpp +=================================================================== +--- kwin/useractions.cpp.orig ++++ kwin/useractions.cpp +@@ -482,27 +482,33 @@ bool Client::performMouseCommand( Option + case Options::MouseActivateAndRaise: + replay = isActive(); // for clickraise mode + workspace()->takeActivity( this, ActivityFocus | ActivityRaise, handled && replay ); ++ workspace()->setActiveScreenMouse( globalPos ); + break; + case Options::MouseActivateAndLower: + workspace()->requestFocus( this ); + workspace()->lowerClient( this ); ++ workspace()->setActiveScreenMouse( globalPos ); + break; + case Options::MouseActivate: + replay = isActive(); // for clickraise mode + workspace()->takeActivity( this, ActivityFocus, handled && replay ); ++ workspace()->setActiveScreenMouse( globalPos ); + break; + case Options::MouseActivateRaiseAndPassClick: + workspace()->takeActivity( this, ActivityFocus | ActivityRaise, handled ); ++ workspace()->setActiveScreenMouse( globalPos ); + replay = TRUE; + break; + case Options::MouseActivateAndPassClick: + workspace()->takeActivity( this, ActivityFocus, handled ); ++ workspace()->setActiveScreenMouse( globalPos ); + replay = TRUE; + break; + case Options::MouseActivateRaiseAndMove: + case Options::MouseActivateRaiseAndUnrestrictedMove: + workspace()->raiseClient( this ); + workspace()->requestFocus( this ); ++ workspace()->setActiveScreenMouse( globalPos ); + if( options->moveMode == Options::Transparent && isMovable()) + move_faked_activity = workspace()->fakeRequestedActivity( this ); + // fallthrough +@@ -709,6 +715,40 @@ void Workspace::slotWindowToDesktop( int + sendClientToDesktop( c, i, true ); + } + ++void Workspace::slotSwitchToScreen( int i ) ++ { ++ setCurrentScreen( i ); ++ } ++ ++void Workspace::slotSwitchToNextScreen() ++ { ++ slotSwitchToScreen(( activeScreen() + 1 ) % numScreens()); ++ } ++ ++void Workspace::slotWindowToScreen( int i ) ++ { ++ Client* c = active_popup_client ? active_popup_client : active_client; ++ if( i >= 0 && i <= numScreens() && c ++ && !c->isDesktop() ++ && !c->isDock() ++ && !c->isTopMenu()) ++ { ++ sendClientToScreen( c, i ); ++ } ++ } ++ ++void Workspace::slotWindowToNextScreen() ++ { ++ Client* c = active_popup_client ? active_popup_client : active_client; ++ if( c ++ && !c->isDesktop() ++ && !c->isDock() ++ && !c->isTopMenu()) ++ { ++ sendClientToScreen( c, ( c->screen() + 1 ) % numScreens()); ++ } ++ } ++ + /*! + Maximizes the popup client + */ +Index: kwin/options.h +=================================================================== +--- kwin/options.h.orig ++++ kwin/options.h +@@ -124,6 +124,11 @@ class Options : public KDecorationOption + */ + enum AltTabStyle { KDE, CDE }; + AltTabStyle altTabStyle; ++ ++ // whether to see Xinerama screens separately for focus (in Alt+Tab, when activating next client) ++ bool separateScreenFocus; ++ // whether active Xinerama screen is the one with mouse (or with the active window) ++ bool activeMouseScreen; + + /** + * Xinerama options +@@ -133,6 +138,9 @@ class Options : public KDecorationOption + bool xineramaMovementEnabled; + bool xineramaMaximizeEnabled; + bool xineramaFullscreenEnabled; ++ ++ // number, or -1 = active screen (Workspace::activeScreen()) ++ int xineramaPlacementScreen; + + /** + MoveResizeMode, either Tranparent or Opaque. +Index: kwin/workspace.h +=================================================================== +--- kwin/workspace.h.orig ++++ kwin/workspace.h +@@ -91,6 +91,7 @@ class Workspace : public QObject, public + + QRect clientArea( clientAreaOption, const QPoint& p, int desktop ) const; + QRect clientArea( clientAreaOption, const Client* c ) const; ++ QRect clientArea( clientAreaOption, int screen, int desktop ) const; + + /** + * @internal +@@ -161,6 +162,13 @@ class Workspace : public QObject, public + */ + int numberOfDesktops() const; + void setNumberOfDesktops( int n ); ++ ++ int activeScreen() const; ++ int numScreens() const; ++ void checkActiveScreen( const Client* c ); ++ void setActiveScreenMouse( QPoint mousepos ); ++ QRect screenGeometry( int screen ) const; ++ int screenNumber( QPoint pos ) const; + + QWidget* desktopWidget(); + +@@ -186,6 +194,7 @@ class Workspace : public QObject, public + void sendClientToDesktop( Client* c, int desktop, bool dont_activate ); + void windowToPreviousDesktop( Client* c ); + void windowToNextDesktop( Client* c ); ++ void sendClientToScreen( Client* c, int screen ); + + // KDE4 remove me - and it's also in the DCOP interface :( + void showWindowMenuAt( unsigned long id, int x, int y ); +@@ -224,6 +233,7 @@ class Workspace : public QObject, public + void nextDesktop(); + void previousDesktop(); + void circulateDesktopApplications(); ++ void setCurrentScreen( int new_screen ); + + QString desktopName( int desk ) const; + virtual void setDesktopLayout(int , int , int ); +@@ -301,6 +311,10 @@ class Workspace : public QObject, public + //void slotSwitchToWindow( int ); + void slotWindowToDesktop( int ); + //void slotWindowToListPosition( int ); ++ void slotSwitchToScreen( int ); ++ void slotWindowToScreen( int ); ++ void slotSwitchToNextScreen(); ++ void slotWindowToNextScreen(); + + void slotWindowMaximize(); + void slotWindowMaximizeVertical(); +@@ -481,6 +495,7 @@ class Workspace : public QObject, public + int current_desktop; + int number_of_desktops; + QMemArray desktop_focus_chain; ++ int active_screen; + + QWidget* active_popup; + Client* active_popup_client; +Index: kwin/tabbox.cpp +=================================================================== +--- kwin/tabbox.cpp.orig ++++ kwin/tabbox.cpp +@@ -23,7 +23,6 @@ License. See the file "COPYING" for the + #include + #include + #include +-#include + #include + #include + #include +@@ -110,26 +109,36 @@ void TabBox::createClientList(ClientList + + while ( c ) + { ++ Client* add = NULL; + if ( ((desktop == -1) || c->isOnDesktop(desktop)) + && c->wantsTabFocus() ) ++ { // don't add windows that have modal dialogs ++ Client* modal = c->findModal(); ++ if( modal == NULL || modal == c ) ++ add = c; ++ else if( !list.contains( modal )) ++ add = modal; ++ else ++ { ++ // nothing ++ } ++ } ++ ++ if( options->separateScreenFocus && options->xineramaEnabled ) + { +- if ( start == c ) ++ if( c->screen() != workspace()->activeScreen()) ++ add = NULL; ++ } ++ ++ if( add != NULL ) ++ { ++ if ( start == add ) + { +- list.remove( c ); +- list.prepend( c ); ++ list.remove( add ); ++ list.prepend( add ); + } + else +- { // don't add windows that have modal dialogs +- Client* modal = c->findModal(); +- if( modal == NULL || modal == c ) +- list += c; +- else if( !list.contains( modal )) +- list += modal; +- else +- { +- // nothing +- } +- } ++ list += add; + } + + if ( chain ) +@@ -156,7 +165,7 @@ void TabBox::reset() + { + int w, h, cw = 0, wmax = 0; + +- QRect r = KGlobalSettings::desktopGeometry(QCursor::pos()); ++ QRect r = workspace()->screenGeometry( workspace()->activeScreen()); + + // calculate height of 1 line + // fontheight + 1 pixel above + 1 pixel below, or 32x32 icon + 2 pixel above + below +Index: kwin/kcmkwin/kwinoptions/windows.h +=================================================================== +--- kwin/kcmkwin/kwinoptions/windows.h.orig ++++ kwin/kcmkwin/kwinoptions/windows.h +@@ -86,6 +86,7 @@ private slots: + void delayFocusOnTog(bool); + void clickRaiseOnTog(bool); + void updateAltTabMode(); ++ void updateActiveMouseScreen(); + void changed() { emit KCModule::changed(true); } + + +@@ -101,6 +102,8 @@ private: + void setDelayFocusInterval(int); + void setDelayFocus(bool); + void setClickRaise(bool); ++ void setSeparateScreenFocus(bool); ++ void setActiveMouseScreen(bool); + void setAltTabMode(bool); + void setTraverseAll(bool); + void setRollOverDesktops(bool); +@@ -113,6 +116,8 @@ private: + QCheckBox *clickRaiseOn; + KIntNumInput *autoRaise; + KIntNumInput *delayFocus; ++ QCheckBox *separateScreenFocus; ++ QCheckBox *activeMouseScreen; + + QButtonGroup *kbdBox; + QCheckBox *altTabPopup; +Index: kwin/kcmkwin/kwinoptions/windows.cpp +=================================================================== +--- kwin/kcmkwin/kwinoptions/windows.cpp.orig ++++ kwin/kcmkwin/kwinoptions/windows.cpp +@@ -76,6 +76,8 @@ + #define KWIN_SHADEHOVER_INTERVAL "ShadeHoverInterval" + #define KWIN_FOCUS_STEALING "FocusStealingPreventionLevel" + #define KWIN_HIDE_UTILITY "HideUtilityWindowsForInactive" ++#define KWIN_SEPARATE_SCREEN_FOCUS "SeparateScreenFocus" ++#define KWIN_ACTIVE_MOUSE_SCREEN "ActiveMouseScreen" + + // kwm config keywords + #define KWM_ELECTRIC_BORDER "ElectricBorders" +@@ -209,6 +211,27 @@ KFocusConfig::KFocusConfig (bool _standA + QWhatsThis::add( delayFocus, i18n("This is the delay after which the window the mouse pointer is over" + " will automatically receive focus.") ); + ++ separateScreenFocus = new QCheckBox( i18n( "S&eparate screen focus" ), fcsBox ); ++ fLay->addWidget( separateScreenFocus ); ++ wtstr = i18n( "When this option is enabled, focus operations are limited only to the active Xinerama screen" ); ++ QWhatsThis::add( separateScreenFocus, wtstr ); ++ ++ activeMouseScreen = new QCheckBox( i18n( "Active &mouse screen" ), fcsBox ); ++ fLay->addWidget( activeMouseScreen ); ++ wtstr = i18n( "When this option is enabled, active Xinerama screen (where for example new windows appear)" ++ " is the screen with the mouse pointer. When disabled, the active Xinerama screen is the screen" ++ " with the focused window. This option is by default disabled for Click to focus and" ++ " enabled for other focus policies." ); ++ QWhatsThis::add( activeMouseScreen, wtstr ); ++ connect(focusCombo, SIGNAL(activated(int)), this, SLOT(updateActiveMouseScreen())); ++ ++ if (!QApplication::desktop()->isVirtualDesktop() || ++ QApplication::desktop()->numScreens() == 1) // No Ximerama ++ { ++ separateScreenFocus->hide(); ++ activeMouseScreen->hide(); ++ } ++ + lay->addWidget(fcsBox); + + kbdBox = new QButtonGroup(i18n("Navigation"), this); +@@ -260,6 +283,8 @@ KFocusConfig::KFocusConfig (bool _standA + connect(fcsBox, SIGNAL(clicked(int)), SLOT(changed())); + connect(autoRaise, SIGNAL(valueChanged(int)), SLOT(changed())); + connect(delayFocus, SIGNAL(valueChanged(int)), SLOT(changed())); ++ connect(separateScreenFocus, SIGNAL(clicked()), SLOT(changed())); ++ connect(activeMouseScreen, SIGNAL(clicked()), SLOT(changed())); + connect(altTabPopup, SIGNAL(clicked()), SLOT(changed())); + connect(traverseAll, SIGNAL(clicked()), SLOT(changed())); + connect(rollOverDesktops, SIGNAL(clicked()), SLOT(changed())); +@@ -366,6 +391,22 @@ void KFocusConfig::delayFocusOnTog(bool + void KFocusConfig::clickRaiseOnTog(bool ) { + } + ++void KFocusConfig::setSeparateScreenFocus(bool s) { ++ separateScreenFocus->setChecked(s); ++} ++ ++void KFocusConfig::setActiveMouseScreen(bool a) { ++ activeMouseScreen->setChecked(a); ++} ++ ++void KFocusConfig::updateActiveMouseScreen() ++{ ++ // on by default for non click to focus policies ++ KConfigGroup cfg( config, "Windows" ); ++ if( !cfg.hasKey( KWIN_ACTIVE_MOUSE_SCREEN )) ++ setActiveMouseScreen( focusCombo->currentItem() != 0 ); ++} ++ + void KFocusConfig::setAltTabMode(bool a) { + altTabPopup->setChecked(a); + } +@@ -412,6 +453,10 @@ void KFocusConfig::load( void ) + setClickRaise(key != "off"); + setAutoRaiseEnabled(); // this will disable/hide the auto raise delay widget if focus==click + setDelayFocusEnabled(); ++ ++ setSeparateScreenFocus( config->readBoolEntry(KWIN_SEPARATE_SCREEN_FOCUS, false)); ++ // on by default for non click to focus policies ++ setActiveMouseScreen( config->readBoolEntry(KWIN_ACTIVE_MOUSE_SCREEN, focusCombo->currentItem() != 0 )); + + key = config->readEntry(KWIN_ALTTABMODE, "KDE"); + setAltTabMode(key == "KDE"); +@@ -467,6 +512,9 @@ void KFocusConfig::save( void ) + else + config->writeEntry(KWIN_CLICKRAISE, "off"); + ++ config->writeEntry(KWIN_SEPARATE_SCREEN_FOCUS, separateScreenFocus->isChecked()); ++ config->writeEntry(KWIN_ACTIVE_MOUSE_SCREEN, activeMouseScreen->isChecked()); ++ + if (altTabPopup->isChecked()) + config->writeEntry(KWIN_ALTTABMODE, "KDE"); + else +@@ -500,6 +548,9 @@ void KFocusConfig::defaults() + setAutoRaise(false); + setDelayFocus(false); + setClickRaise(true); ++ setSeparateScreenFocus( false ); ++ // on by default for non click to focus policies ++ setActiveMouseScreen( focusCombo->currentItem() != 0 ); + setAltTabMode(true); + setTraverseAll( false ); + setRollOverDesktops(true); +Index: kwin/popupinfo.h +=================================================================== +--- kwin/popupinfo.h.orig ++++ kwin/popupinfo.h +@@ -24,7 +24,7 @@ class PopupInfo : public QWidget + { + Q_OBJECT + public: +- PopupInfo( const char *name=0 ); ++ PopupInfo( Workspace* ws, const char *name=0 ); + ~PopupInfo(); + + void reset(); +@@ -43,6 +43,7 @@ class PopupInfo : public QWidget + bool m_show; + bool m_shown; + QString m_infoString; ++ Workspace* workspace; + }; + + } // namespace +Index: kwin/options.cpp +=================================================================== +--- kwin/options.cpp.orig ++++ kwin/options.cpp +@@ -71,6 +71,9 @@ unsigned long Options::updateSettings() + altTabStyle = KDE; // what a default :-) + if ( val == "CDE" ) + altTabStyle = CDE; ++ ++ separateScreenFocus = config->readBoolEntry( "SeparateScreenFocus", false ); ++ activeMouseScreen = config->readBoolEntry( "ActiveMouseScreen", focusPolicy != ClickToFocus ); + + rollOverDesktops = config->readBoolEntry("RollOverDesktops", TRUE); + +@@ -91,9 +94,10 @@ unsigned long Options::updateSettings() + delete gc; + + placement = Placement::policyFromString( config->readEntry("Placement"), true ); ++ xineramaPlacementScreen = KCLAMP( config->readNumEntry( "XineramaPlacementScreen", -1 ), ++ -1, qApp->desktop()->numScreens() - 1 ); + + animateShade = config->readBoolEntry("AnimateShade", TRUE ); +- + animateMinimize = config->readBoolEntry("AnimateMinimize", TRUE ); + animateMinimizeSpeed = config->readNumEntry("AnimateMinimizeSpeed", 5 ); + +Index: kwin/placement.cpp +=================================================================== +--- kwin/placement.cpp.orig ++++ kwin/placement.cpp +@@ -473,7 +473,7 @@ void Placement::placeOnMainWindow(Client + it != mainwindows.end(); + ++it ) + { +- if( (*it)->isSpecialWindow()) ++ if( mainwindows.count() > 1 && (*it)->isSpecialWindow()) + continue; // don't consider toolbars etc when placing + ++mains_count; + place_on2 = *it; +@@ -502,6 +502,11 @@ void Placement::placeOnMainWindow(Client + } + place_on = place_on2; // use the only window filtered together with 'mains_count' + } ++ if( place_on->isDesktop()) ++ { ++ place( c, area, Centered ); ++ return; ++ } + QRect geom = c->geometry(); + geom.moveCenter( place_on->geometry().center()); + c->move( geom.topLeft()); +Index: kwin/client.cpp +=================================================================== +--- kwin/client.cpp.orig ++++ kwin/client.cpp +@@ -1255,6 +1255,20 @@ bool Client::isOnCurrentDesktop() const + return isOnDesktop( workspace()->currentDesktop()); + } + ++int Client::screen() const ++ { ++ if( !options->xineramaEnabled ) ++ return 0; ++ return workspace()->screenNumber( geometry().center()); ++ } ++ ++bool Client::isOnScreen( int screen ) const ++ { ++ if( !options->xineramaEnabled ) ++ return screen == 0; ++ return workspace()->screenGeometry( screen ).intersects( geometry()); ++ } ++ + // performs activation and/or raising of the window + void Client::takeActivity( int flags, bool handled, allowed_t ) + { +Index: kwin/popupinfo.cpp +=================================================================== +--- kwin/popupinfo.cpp.orig ++++ kwin/popupinfo.cpp +@@ -25,7 +25,6 @@ License. See the file "COPYING" for the + #include + #include + #include +-#include + #include + #include + +@@ -34,8 +33,8 @@ License. See the file "COPYING" for the + namespace KWinInternal + { + +-PopupInfo::PopupInfo( const char *name ) +- : QWidget( 0, name ) ++PopupInfo::PopupInfo( Workspace* ws, const char *name ) ++ : QWidget( 0, name ), workspace( ws ) + { + m_infoString = ""; + m_shown = false; +@@ -60,7 +59,7 @@ PopupInfo::~PopupInfo() + */ + void PopupInfo::reset() + { +- QRect r = KGlobalSettings::desktopGeometry(QCursor::pos()); ++ QRect r = workspace->screenGeometry( workspace->activeScreen()); + + int w = fontMetrics().width( m_infoString ) + 30; + +Index: kwin/geometry.cpp +=================================================================== +--- kwin/geometry.cpp.orig ++++ kwin/geometry.cpp +@@ -211,14 +211,11 @@ void Workspace::updateClientArea() + + \sa geometry() + */ +-QRect Workspace::clientArea( clientAreaOption opt, const QPoint& p, int desktop ) const ++QRect Workspace::clientArea( clientAreaOption opt, int screen, int desktop ) const + { + if( desktop == NETWinInfo::OnAllDesktops || desktop == 0 ) + desktop = currentDesktop(); + QDesktopWidget *desktopwidget = KApplication::desktop(); +- int screen = desktopwidget->isVirtualDesktop() ? desktopwidget->screenNumber( p ) : desktopwidget->primaryScreen(); +- if( screen < 0 ) +- screen = desktopwidget->primaryScreen(); + QRect sarea = screenarea // may be NULL during KWin initialization + ? screenarea[ desktop ][ screen ] + : desktopwidget->screenGeometry( screen ); +@@ -263,11 +260,21 @@ QRect Workspace::clientArea( clientAreaO + return QRect(); + } + ++QRect Workspace::clientArea( clientAreaOption opt, const QPoint& p, int desktop ) const ++ { ++ QDesktopWidget *desktopwidget = KApplication::desktop(); ++ int screen = desktopwidget->screenNumber( p ); ++ if( screen < 0 ) ++ screen = desktopwidget->primaryScreen(); ++ return clientArea( opt, screen, desktop ); ++ } ++ + QRect Workspace::clientArea( clientAreaOption opt, const Client* c ) const + { + return clientArea( opt, c->geometry().center(), c->desktop()); + } + ++ + /*! + Client \a c is moved around to position \a pos. This gives the + workspace the opportunity to interveniate and to implement +@@ -896,10 +903,6 @@ void Client::checkWorkspacePosition() + setGeometry( area ); + return; + } +- if( maximizeMode() != MaximizeRestore ) +- // TODO update geom_restore? +- changeMaximize( false, false, true ); // adjust size +- + if( isFullScreen()) + { + QRect area = workspace()->clientArea( FullScreenArea, this ); +@@ -926,6 +929,10 @@ void Client::checkWorkspacePosition() + return; + } + ++ if( maximizeMode() != MaximizeRestore ) ++ // TODO update geom_restore? ++ changeMaximize( false, false, true ); // adjust size ++ + if( !isShade()) // TODO + { + int old_diff_x = workarea_diff_x; +@@ -1722,6 +1729,7 @@ void Client::setGeometry( int x, int y, + sendSyntheticConfigureNotify(); + updateWindowRules(); + checkMaximizeGeometry(); ++ workspace()->checkActiveScreen( this ); + } + + void Client::plainResize( int w, int h, ForceGeometry_t force ) +@@ -1775,6 +1783,7 @@ void Client::plainResize( int w, int h, + sendSyntheticConfigureNotify(); + updateWindowRules(); + checkMaximizeGeometry(); ++ workspace()->checkActiveScreen( this ); + } + + /*! +@@ -1795,6 +1804,7 @@ void Client::move( int x, int y, ForceGe + sendSyntheticConfigureNotify(); + updateWindowRules(); + checkMaximizeGeometry(); ++ workspace()->checkActiveScreen( this ); + } + + +Index: kwin/kwin.kcfg +=================================================================== +--- kwin/kwin.kcfg.orig ++++ kwin/kwin.kcfg +@@ -60,6 +60,9 @@ + + + ++ ++ ++ + + + +Index: kwin/client.h +=================================================================== +--- kwin/client.h.orig ++++ kwin/client.h +@@ -118,6 +118,9 @@ class Client : public QObject, public KD + bool isOnCurrentDesktop() const; + bool isOnAllDesktops() const; + void setOnAllDesktops( bool set ); ++ ++ bool isOnScreen( int screen ) const; // true if it's at least partially there ++ int screen() const; // the screen where the center is + + // !isMinimized() && not hidden, i.e. normally visible on some virtual desktop + bool isShown( bool shaded_is_shown ) const; +Index: kwin/manage.cpp +=================================================================== +--- kwin/manage.cpp.orig ++++ kwin/manage.cpp +@@ -166,7 +166,7 @@ bool Client::manage( Window w, bool isMa + it != mainclients.end(); + ++it ) + { +- if( (*it)->isSpecialWindow()) ++ if( mainclients.count() > 1 && (*it)->isSpecialWindow()) + continue; // don't consider toolbars etc when placing + maincl = *it; + if( (*it)->isOnCurrentDesktop()) +@@ -202,9 +202,14 @@ bool Client::manage( Window w, bool isMa + if( isMapped || session ) + area = workspace()->clientArea( FullArea, geom.center(), desktop()); + else if( options->xineramaPlacementEnabled ) +- area = workspace()->clientArea( PlacementArea, QCursor::pos(), desktop()); ++ { ++ int screen = options->xineramaPlacementScreen; ++ if( screen == -1 ) // active screen ++ screen = asn_data.xinerama() == -1 ? workspace()->activeScreen() : asn_data.xinerama(); ++ area = workspace()->clientArea( PlacementArea, workspace()->screenGeometry( screen ).center(), desktop()); ++ } + else +- area = workspace()->clientArea( PlacementArea, geom.center(), desktop()); ++ area = workspace()->clientArea( PlacementArea, QCursor::pos(), desktop()); + + if( int type = checkFullScreenHack( geom )) + { +Index: kwin/workspace.cpp +=================================================================== +--- kwin/workspace.cpp.orig ++++ kwin/workspace.cpp +@@ -82,6 +82,7 @@ Workspace::Workspace( bool restore ) + QObject (0, "workspace"), + current_desktop (0), + number_of_desktops(0), ++ active_screen (0), + active_popup( NULL ), + active_popup_client( NULL ), + desktop_widget (0), +@@ -202,7 +203,7 @@ Workspace::Workspace( bool restore ) + client_keys = new KGlobalAccel( this ); + initShortcuts(); + tab_box = new TabBox( this ); +- popupinfo = new PopupInfo( ); ++ popupinfo = new PopupInfo( this ); + + init(); + +@@ -304,6 +305,7 @@ void Workspace::init() + NET::WM2ExtendedStrut | + NET::WM2KDETemporaryRules | + NET::WM2ShowingDesktop | ++ NET::WM2FullPlacement | + NET::WM2DesktopLayout | + 0 + , +@@ -1541,6 +1543,83 @@ void Workspace::setDesktopLayout( int, i + { // DCOP-only, unused + } + ++int Workspace::numScreens() const ++ { ++ if( !options->xineramaEnabled ) ++ return 0; ++ return qApp->desktop()->numScreens(); ++ } ++ ++int Workspace::activeScreen() const ++ { ++ if( !options->xineramaEnabled ) ++ return 0; ++ if( !options->activeMouseScreen ) ++ { ++ if( activeClient() != NULL && !activeClient()->isOnScreen( active_screen )) ++ return qApp->desktop()->screenNumber( activeClient()->geometry().center()); ++ return active_screen; ++ } ++ return qApp->desktop()->screenNumber( QCursor::pos()); ++ } ++ ++// check whether a client moved completely out of what's considered the active screen, ++// if yes, set a new active screen ++void Workspace::checkActiveScreen( const Client* c ) ++ { ++ if( !options->xineramaEnabled ) ++ return; ++ if( !c->isActive()) ++ return; ++ if( !c->isOnScreen( active_screen )) ++ active_screen = c->screen(); ++ } ++ ++// called e.g. when a user clicks on a window, set active screen to be the screen ++// where the click occured ++void Workspace::setActiveScreenMouse( QPoint mousepos ) ++ { ++ if( !options->xineramaEnabled ) ++ return; ++ active_screen = qApp->desktop()->screenNumber( mousepos ); ++ } ++ ++QRect Workspace::screenGeometry( int screen ) const ++ { ++ if( !options->xineramaEnabled ) ++ return qApp->desktop()->geometry(); ++ return qApp->desktop()->screenGeometry( screen ); ++ } ++ ++int Workspace::screenNumber( QPoint pos ) const ++ { ++ if( !options->xineramaEnabled ) ++ return 0; ++ return qApp->desktop()->screenNumber( pos ); ++ } ++ ++ ++void Workspace::sendClientToScreen( Client* c, int screen ) ++ { ++ if( c->screen() == screen ) // don't use isOnScreen(), that's true even when only parti ++ // ally ++ return; ++ GeometryUpdatesPostponer blocker( c ); ++ QRect old_sarea = clientArea( MaximizeArea, c ); ++ QRect sarea = clientArea( MaximizeArea, screen, c->desktop()); ++ c->setGeometry( sarea.x() - old_sarea.x() + c->x(), sarea.y() - old_sarea.y() + c->y(), ++ c->size().width(), c->size().height()); ++ c->checkWorkspacePosition(); ++ ClientList transients_stacking_order = ensureStackingOrder( c->transients()); ++ for( ClientList::ConstIterator it = transients_stacking_order.begin(); ++ it != transients_stacking_order.end(); ++ ++it ) ++ sendClientToScreen( *it, screen ); ++ if( c->isActive()) ++ active_screen = screen; ++ } ++ ++ + void Workspace::updateDesktopLayout() + { + // rootInfo->desktopLayoutCorner(); // I don't find this worth bothering, feel free to +Index: kwin/activation.cpp +=================================================================== +--- kwin/activation.cpp.orig ++++ kwin/activation.cpp +@@ -360,6 +360,8 @@ void Workspace::takeActivity( Client* c, + return; + } + c->takeActivity( flags, handled, Allowed ); ++ if( !c->isOnScreen( active_screen )) ++ active_screen = c->screen(); + } + + void Workspace::handleTakeActivity( Client* c, Time /*timestamp*/, int flags ) +@@ -413,6 +415,13 @@ bool Workspace::activateNextClient( Clie + { + if( !(*it)->isShown( false ) || !(*it)->isOnCurrentDesktop()) + continue; ++ if( options->separateScreenFocus ) ++ { ++ if( c != NULL && !(*it)->isOnScreen( c->screen())) ++ continue; ++ if( c == NULL && !(*it)->isOnScreen( activeScreen())) ++ continue; ++ } + if( mainwindows.contains( *it )) + { + get_focus = *it; +@@ -438,6 +447,31 @@ bool Workspace::activateNextClient( Clie + return true; + } + ++void Workspace::setCurrentScreen( int new_screen ) ++ { ++ if (new_screen < 0 || new_screen > numScreens()) ++ return; ++ if ( !options->focusPolicyIsReasonable()) ++ return; ++ closeActivePopup(); ++ Client* get_focus = NULL; ++ for( ClientList::ConstIterator it = focus_chain[currentDesktop()].fromLast(); ++ it != focus_chain[currentDesktop()].end(); ++ --it ) ++ { ++ if( !(*it)->isShown( false ) || !(*it)->isOnCurrentDesktop()) ++ continue; ++ if( !(*it)->screen() == new_screen ) ++ continue; ++ get_focus = *it; ++ break; ++ } ++ if( get_focus == NULL ) ++ get_focus = findDesktop( true, currentDesktop()); ++ if( get_focus != NULL && get_focus != mostRecentlyActivatedClient()) ++ requestFocus( get_focus ); ++ active_screen = new_screen; ++ } + + void Workspace::gotFocusIn( const Client* c ) + { +@@ -860,6 +894,8 @@ void Client::startupIdChanged() + desktop = asn_data.desktop(); + if( !isOnAllDesktops()) + workspace()->sendClientToDesktop( this, desktop, true ); ++ if( asn_data.xinerama() != -1 ) ++ workspace()->sendClientToScreen( this, asn_data.xinerama()); + Time timestamp = asn_id.timestamp(); + if( timestamp == 0 && asn_data.timestamp() != -1U ) + timestamp = asn_data.timestamp(); +Index: kwin/kwinbindings.cpp +=================================================================== +--- kwin/kwinbindings.cpp.orig ++++ kwin/kwinbindings.cpp +@@ -104,6 +104,15 @@ + DEF( I18N_NOOP("Window One Desktop to the Left"), 0, 0, slotWindowToDesktopLeft() ); + DEF( I18N_NOOP("Window One Desktop Up"), 0, 0, slotWindowToDesktopUp() ); + DEF( I18N_NOOP("Window One Desktop Down"), 0, 0, slotWindowToDesktopDown() ); ++ DEF( I18N_NOOP("Window to Screen 0"), 0, 0, slotWindowToScreen(int) ); ++ DEF( I18N_NOOP("Window to Screen 1"), 0, 0, slotWindowToScreen(int) ); ++ DEF( I18N_NOOP("Window to Screen 2"), 0, 0, slotWindowToScreen(int) ); ++ DEF( I18N_NOOP("Window to Screen 3"), 0, 0, slotWindowToScreen(int) ); ++ DEF( I18N_NOOP("Window to Screen 4"), 0, 0, slotWindowToScreen(int) ); ++ DEF( I18N_NOOP("Window to Screen 5"), 0, 0, slotWindowToScreen(int) ); ++ DEF( I18N_NOOP("Window to Screen 6"), 0, 0, slotWindowToScreen(int) ); ++ DEF( I18N_NOOP("Window to Screen 7"), 0, 0, slotWindowToScreen(int) ); ++ DEF( I18N_NOOP("Window to Next Screen"), 0, 0, slotWindowToNextScreen() ); + + keys->insert( "Group:Desktop Switching", i18n("Desktop Switching") ); + DEF( I18N_NOOP("Switch to Desktop 1"), CTRL+Qt::Key_F1, WIN+Qt::Key_F1, slotSwitchToDesktop(int) ); +@@ -132,6 +141,15 @@ + DEF( I18N_NOOP("Switch One Desktop to the Left"), 0, 0, slotSwitchDesktopLeft() ); + DEF( I18N_NOOP("Switch One Desktop Up"), 0, 0, slotSwitchDesktopUp() ); + DEF( I18N_NOOP("Switch One Desktop Down"), 0, 0, slotSwitchDesktopDown() ); ++ DEF( I18N_NOOP("Switch to Screen 0"), 0, 0, slotSwitchToScreen(int) ); ++ DEF( I18N_NOOP("Switch to Screen 1"), 0, 0, slotSwitchToScreen(int) ); ++ DEF( I18N_NOOP("Switch to Screen 2"), 0, 0, slotSwitchToScreen(int) ); ++ DEF( I18N_NOOP("Switch to Screen 3"), 0, 0, slotSwitchToScreen(int) ); ++ DEF( I18N_NOOP("Switch to Screen 4"), 0, 0, slotSwitchToScreen(int) ); ++ DEF( I18N_NOOP("Switch to Screen 5"), 0, 0, slotSwitchToScreen(int) ); ++ DEF( I18N_NOOP("Switch to Screen 6"), 0, 0, slotSwitchToScreen(int) ); ++ DEF( I18N_NOOP("Switch to Screen 7"), 0, 0, slotSwitchToScreen(int) ); ++ DEF( I18N_NOOP("Switch to Next Screen"), 0, 0, slotSwitchToNextScreen() ); + + keys->insert( "Group:Miscellaneous", i18n("Miscellaneous") ); + DEF( I18N_NOOP("Mouse Emulation"), ALT+Qt::Key_F12, 0, slotMouseEmulation() ); diff --git a/opensuse/core/tdebase/zh_TW.flag.png b/opensuse/core/tdebase/zh_TW.flag.png new file mode 100644 index 000000000..472e3376a Binary files /dev/null and b/opensuse/core/tdebase/zh_TW.flag.png differ diff --git a/opensuse/core/tdebindings/.project b/opensuse/core/tdebindings/.project new file mode 100644 index 000000000..e7f6353f1 --- /dev/null +++ b/opensuse/core/tdebindings/.project @@ -0,0 +1,12 @@ + + + tdebindings + + + + + + + org.eclipse.linuxtools.rpm.core.rpmnature + + diff --git a/opensuse/core/tdedevelop/.project b/opensuse/core/tdedevelop/.project new file mode 100644 index 000000000..de90952c5 --- /dev/null +++ b/opensuse/core/tdedevelop/.project @@ -0,0 +1,12 @@ + + + tdedevelop + + + + + + + org.eclipse.linuxtools.rpm.core.rpmnature + + diff --git a/opensuse/core/tdeedu/.project b/opensuse/core/tdeedu/.project new file mode 100644 index 000000000..7923dc27c --- /dev/null +++ b/opensuse/core/tdeedu/.project @@ -0,0 +1,12 @@ + + + tdeedu + + + + + + + org.eclipse.linuxtools.rpm.core.rpmnature + + diff --git a/opensuse/core/tdegames/.project b/opensuse/core/tdegames/.project new file mode 100644 index 000000000..b9d427140 --- /dev/null +++ b/opensuse/core/tdegames/.project @@ -0,0 +1,12 @@ + + + tdegames + + + + + + + org.eclipse.linuxtools.rpm.core.rpmnature + + diff --git a/opensuse/core/tdegraphics/.project b/opensuse/core/tdegraphics/.project new file mode 100644 index 000000000..81a52c6d2 --- /dev/null +++ b/opensuse/core/tdegraphics/.project @@ -0,0 +1,12 @@ + + + tdegraphics + + + + + + + org.eclipse.linuxtools.rpm.core.rpmnature + + diff --git a/opensuse/core/tdelibs/.project b/opensuse/core/tdelibs/.project new file mode 100644 index 000000000..de1dea1f3 --- /dev/null +++ b/opensuse/core/tdelibs/.project @@ -0,0 +1,12 @@ + + + tdelibs + + + + + + + org.eclipse.linuxtools.rpm.core.rpmnature + + diff --git a/opensuse/core/tdelibs/10888-bt.tar.gz b/opensuse/core/tdelibs/10888-bt.tar.gz new file mode 100644 index 000000000..8c94be571 Binary files /dev/null and b/opensuse/core/tdelibs/10888-bt.tar.gz differ diff --git a/opensuse/core/tdelibs/3_5_BRANCH.diff b/opensuse/core/tdelibs/3_5_BRANCH.diff new file mode 100644 index 000000000..6809b8aea --- /dev/null +++ b/opensuse/core/tdelibs/3_5_BRANCH.diff @@ -0,0 +1,126 @@ +package: kdelibs-3.5.10.tar.bz2 +kdemod: kdelibs +Index: BRANCH_STATUS +=================================================================== +--- /dev/null ++++ BRANCH_STATUS +@@ -0,0 +1,2 @@ ++current HEAD: 859452 ++svn di between //tags/KDE/3.5.10/kdelibs and //branches/KDE/3.5/kdelibs +Index: kinit/start_kdeinit.c +=================================================================== +--- kinit/start_kdeinit.c.orig ++++ kinit/start_kdeinit.c +@@ -44,7 +44,7 @@ static int set_protection( pid_t pid, in + { + char buf[ 1024 ]; + int procfile; +- sprintf( buf, "/proc/%d/oom_adj", pid ); ++ sprintf( buf, "/proc/%d/stat", pid ); + if( !enable ) { + /* Be paranoid and check that the pid we got from the pipe + belongs to this user. */ +@@ -52,6 +52,7 @@ static int set_protection( pid_t pid, in + if( lstat( buf, &st ) < 0 || st.st_uid != getuid()) + return 0; + } ++ sprintf( buf, "/proc/%d/oom_adj", pid ); + procfile = open( buf, O_WRONLY ); + if( procfile >= 0 ) { + if( enable ) +Index: kio/kio/configure.in.in +=================================================================== +--- kio/kio/configure.in.in.orig ++++ kio/kio/configure.in.in +@@ -139,8 +139,30 @@ if test "x$kde_enable_inotify" = "xyes"; + AC_LANG_RESTORE + ]) + +- if test "$kde_cv_have_inotify" = "yes" ; then ++ AC_CACHE_VAL(kde_cv_have_sys_inotify, ++ [ ++ kde_cv_have_sys_inotify=no ++ AC_LANG_SAVE ++ AC_LANG_C ++ ++ AC_TRY_COMPILE( ++ [ ++#include ++ ], ++ [ ++#ifndef IN_ALL_EVENTS ++#error no inotify notification ++#endif ++ ],kde_cv_have_sys_inotify=yes,kde_cv_have_sys_inotify=no) ++ ++ AC_LANG_RESTORE ++ ]) ++ ++ if test "$kde_cv_have_inotify" = "yes" -o "$kde_cv_have_sys_inotify" = "yes"; then + AC_DEFINE_UNQUOTED(HAVE_INOTIFY, 1, [Define if your system has Linux Inode Notification]) ++ if test "$kde_cv_have_sys_inotify" = "yes"; then ++ AC_DEFINE_UNQUOTED(HAVE_SYS_INOTIFY, 1, [Define if your system has glibc support for inotify]) ++ fi + AC_MSG_RESULT(yes) + else + AC_MSG_RESULT(no) +Index: kio/kio/kdirwatch.cpp +=================================================================== +--- kio/kio/kdirwatch.cpp.orig ++++ kio/kio/kdirwatch.cpp +@@ -64,11 +64,13 @@ + // debug + #include + +-#ifdef HAVE_INOTIFY ++#ifdef HAVE_SYS_INOTIFY ++#include ++#include ++#elif HAVE_INOTIFY + #include + #include + #include +-#include + // Linux kernel headers are documented to not compile + #define _S390_BITOPS_H + #include +@@ -87,7 +89,9 @@ static inline int inotify_rm_watch (int + { + return syscall (__NR_inotify_rm_watch, fd, wd); + } ++#endif + ++#ifdef HAVE_INOTIFY + #ifndef IN_ONLYDIR + #define IN_ONLYDIR 0x01000000 + #endif +@@ -99,7 +103,6 @@ static inline int inotify_rm_watch (int + #ifndef IN_MOVE_SELF + #define IN_MOVE_SELF 0x00000800 + #endif +- + #endif + + #include +Index: kdoctools/customization/pt-BR/user.entities +=================================================================== +--- kdoctools/customization/pt-BR/user.entities.orig ++++ kdoctools/customization/pt-BR/user.entities +@@ -17,7 +17,7 @@ + Esc"> + etc"> + por exemplo"> +-FAQ)"> ++FAQ)"> + HTML'> + + Centro de Informações"> +@@ -34,7 +34,7 @@ + esquerdo do mouse"> + meio do mouse"> + Sistema Operacional"> +-direto do mouse"> ++direito do mouse"> + Shift"> + bandeja do sistema"> + Tab"> diff --git a/opensuse/core/tdelibs/CATALOG.kdelibs3.diff b/opensuse/core/tdelibs/CATALOG.kdelibs3.diff new file mode 100644 index 000000000..5fac7cf92 --- /dev/null +++ b/opensuse/core/tdelibs/CATALOG.kdelibs3.diff @@ -0,0 +1,139 @@ +Index: kdelibs-3.5.10/CATALOG.kdelibs3 +=================================================================== +--- /dev/null ++++ kdelibs-3.5.10/CATALOG.kdelibs3 +@@ -0,0 +1,134 @@ ++-- ++Catalogue for KDE DocBook XML ++ ++Copyright (C) 2001,2002 Frederik Fouvry ++ ++This program is free software; you can redistribute it and/or ++modify it under the terms of the GNU General Public License ++as published by the Free Software Foundation; either version 2 ++of the License, or (at your option) any later version. ++ ++This program is distributed in the hope that it will be useful, ++but WITHOUT ANY WARRANTY; without even the implied warranty of ++MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++GNU General Public License for more details. ++ ++You should have received a copy of the GNU General Public License ++along with this program; if not, write to the Free Software ++Foundation, Inc., 51 Franklin Steet, Fifth Floor, Boston, MA 02110-1301, USA. ++ ++Send suggestions, comments, etc. to the KDE DocBook mailing list ++. ++-- ++ ++OVERRIDE YES ++-- SGMLDECL "xml.dcl" -- ++DTDDECL "-//KDE//DTD DocBook XML V4.2-Based Variant V1.1//EN" /usr/share/sgml/opensp/xml.dcl ++DTDDECL "-//KDE//ELEMENTS DocBook XML Hierarchy Redeclarations 2 V1.0//EN" /usr/share/sgml/opensp/xml.dcl ++DTDDECL "-//KDE//ELEMENTS DocBook XML Pool Redeclarations V1.1//EN" /usr/share/sgml/opensp/xml.dcl ++DTDDECL "-//KDE//ELEMENTS DocBook XML Modifications (Restrictions) V1.1//EN" /usr/share/sgml/opensp/xml.dcl ++DTDDECL "-//KDE//ENTITIES DocBook XML General Entity Declarations V1.2//EN" /usr/share/sgml/opensp/xml.dcl ++DTDDECL "-//KDE//ENTITIES DocBook XML General Entity Declarations (Persons) V1.0//EN" /usr/share/sgml/opensp/xml.dcl ++DTDDECL "-//KDE//ENTITIES DocBook XML Localisation Entity Declarations V1.0//EN" /usr/share/sgml/opensp/xml.dcl ++ ++ -- DocBook -- ++ ++-- DocBook 4.2 KDE Variant V1.1 -- ++ ++PUBLIC "-//KDE//DTD DocBook XML V4.2-Based Variant V1.1//EN" ++ "dtd/kdex.dtd" ++PUBLIC "-//KDE//ELEMENTS DocBook XML Hierarchy Redeclarations 2 V1.0//EN" ++ "dtd/rdbhier2.elements" ++PUBLIC "-//KDE//ELEMENTS DocBook XML Pool Redeclarations V1.1//EN" ++ "dtd/rdbpool.elements" ++PUBLIC "-//KDE//ELEMENTS DocBook XML Modifications (Restrictions) V1.1//EN" ++ "dtd/modifications.elements" ++ ++PUBLIC "-//KDE//ENTITIES DocBook XML General Entity Declarations V1.2//EN" ++ "entities/general.entities" ++PUBLIC "-//KDE//ENTITIES DocBook XML General Entity Declarations (Persons) V1.0//EN" ++ "entities/contributor.entities" ++ ++ -- General KDE Entities -- ++ ++PUBLIC "-//KDE//ENTITIES DocBook XML Localisation Entity Declarations V1.0//EN" ++ "entities/l10n.entities" ++ ++ -- Various external files -- ++ ++-- only DocBook XML files are in entities, the others are in ++ kdelibs/doc/common or in kdelibs/licenses -- ++ ++PUBLIC "-//GNU//DOCUMENT GNU General Public License V2//EN" ++ "entities/gpl-license" ++PUBLIC "-//GNU//DOCUMENT GNU Lesser General Public License V2.1//EN" ++ "entities/lgpl-license" ++PUBLIC "-//GNU//DOCUMENT GNU Free Documentation License V1.1//EN" ++ "entities/fdl-license" ++PUBLIC "-//KDE//DOCUMENT X11 License//EN" ++ "entities/x11-license" ++PUBLIC "-//KDE//DOCUMENT BSD License//EN" ++ "entities/bsd-license" ++PUBLIC "-//KDE//DOCUMENT Artistic License//EN" ++ "entities/artistic-license" ++ ++CATALOG af/catalog ++CATALOG bg/catalog ++CATALOG ca/catalog ++CATALOG cs/catalog ++CATALOG da/catalog ++CATALOG de/catalog ++CATALOG el/catalog ++CATALOG en/catalog ++CATALOG en-GB/catalog ++CATALOG es/catalog ++CATALOG et/catalog ++CATALOG fi/catalog ++CATALOG fo/catalog ++CATALOG fr/catalog ++CATALOG he/catalog ++CATALOG hu/catalog ++CATALOG id/catalog ++CATALOG it/catalog ++CATALOG ja/catalog ++CATALOG ko/catalog ++CATALOG lt/catalog ++CATALOG nl/catalog ++CATALOG no/catalog -- considered to be the same as nb -- ++CATALOG nn/catalog -- incorrectly known as no_NY -- ++CATALOG pl/catalog ++CATALOG pt-BR/catalog ++CATALOG pt/catalog ++CATALOG ro/catalog ++CATALOG ru/catalog ++CATALOG sk/catalog ++CATALOG sl/catalog ++CATALOG sr/catalog ++CATALOG sv/catalog ++CATALOG tr/catalog ++CATALOG uk/catalog ++CATALOG wa/catalog ++CATALOG xh/catalog ++CATALOG zh-CN/catalog ++CATALOG zh-TW/catalog ++ ++-- DocBook 4.1.2 KDE Variant V1.1 -- ++ ++PUBLIC "-//KDE//DTD DocBook XML V4.1.2-Based Variant V1.1//EN" ++ "obsolete/kdex.dtd" ++PUBLIC "-//KDE//ENTITIES DocBook XML General Entity Declarations V1.1//EN" ++ "obsolete/general.entities" ++PUBLIC "-//KDE//ELEMENTS DocBook XML Pool Redeclarations V1.0//EN" ++ "obsolete/rdbpool.elements" ++PUBLIC "-//KDE//ELEMENTS DocBook XML Modifications V1.0//EN" ++ "obsolete/modifications.elements" ++ ++-- DocBook 4.1.2 KDE Variant V1.0 -- ++ ++PUBLIC "-//KDE//DTD DocBook XML V4.1.2-Based Variant V1.0//EN" ++ "obsolete/kdex-412-10.dtd" ++ ++-- DocBook 4.1 KDE Variant V1.0 -- ++ ++PUBLIC "-//KDE//DTD DocBook XML V4.1-Based Variant V1.0//EN" ++ "obsolete/kdex-412-10.dtd" diff --git a/opensuse/core/tdelibs/add-suse-translations.diff b/opensuse/core/tdelibs/add-suse-translations.diff new file mode 100644 index 000000000..2cb8ce8cb --- /dev/null +++ b/opensuse/core/tdelibs/add-suse-translations.diff @@ -0,0 +1,14 @@ +Index: kdecore/klocale.cpp +=================================================================== +--- kdecore/klocale.cpp.orig ++++ kdecore/klocale.cpp +@@ -131,6 +131,9 @@ void KLocale::initMainCatalogues(const Q + d->catalogNames.append( mainCatalogue ); // application catalog + d->catalogNames.append( SYSTEM_MESSAGES ); // always include kdelibs.mo + d->catalogNames.append( "kio" ); // always include kio.mo ++ KGlobal::dirs()->addResourceDir("locale", "/usr/share/locale"); ++ d->catalogNames.append( "desktop_translations" ); ++ d->catalogNames.append( "susetranslations" ); + updateCatalogues(); // evaluate this for all languages + } + } diff --git a/opensuse/core/tdelibs/admin.diff b/opensuse/core/tdelibs/admin.diff new file mode 100644 index 000000000..8abac2426 --- /dev/null +++ b/opensuse/core/tdelibs/admin.diff @@ -0,0 +1,55 @@ +Index: admin/acinclude.m4.in +=================================================================== +--- admin/acinclude.m4.in.orig ++++ admin/acinclude.m4.in +@@ -4988,6 +4988,7 @@ AC_DEFUN([KDE_SET_PREFIX_CORE], + fi + # And delete superfluous '/' to make compares easier + prefix=`echo "$prefix" | sed 's,//*,/,g' | sed -e 's,/$,,'` ++ kde_libs_htmldir=$prefix/share/doc/HTML/ + exec_prefix=`echo "$exec_prefix" | sed 's,//*,/,g' | sed -e 's,/$,,'` + + kde_libs_prefix='$(prefix)' +Index: admin/detect-autoconf.pl +=================================================================== +--- admin/detect-autoconf.pl.orig ++++ admin/detect-autoconf.pl +@@ -216,7 +216,7 @@ $unsermake = ""; + # backward compatible: if $UNSERMAKE points to a path, use it + $unsermake = findProgram('unsermake') if (defined($ENV{'UNSERMAKE'}) and $ENV{'UNSERMAKE'} =~ /\//); + # new compatible: if it says 'yes', use the one from path +-$unsermake = which('unsermake') if ($ENV{'UNSERMAKE'} ne 'no'); ++$unsermake = which('unsermake') if ($ENV{'UNSERMAKE'} eq 'yes'); + + ($automake_suffix) = $automake =~ /.*automake(.*)$/; + + +--- admin/cvs.sh ++++ admin/cvs.sh +@@ -32,7 +32,7 @@ check_autotool_versions() + required_autoconf_version="2.53 or newer" + AUTOCONF_VERSION=`$AUTOCONF --version | head -n 1` + case $AUTOCONF_VERSION in +- Autoconf*2.5* | autoconf*2.5* | autoconf*2.6* ) : ;; ++ autoconf* ) : ;; + "" ) + echo "*** AUTOCONF NOT FOUND!." + echo "*** KDE requires autoconf $required_autoconf_version" +@@ -47,7 +47,7 @@ esac + + AUTOHEADER_VERSION=`$AUTOHEADER --version | head -n 1` + case $AUTOHEADER_VERSION in +- Autoconf*2.5* | autoheader*2.5* | autoheader*2.6* ) : ;; ++ autoheader* ) : ;; + "" ) + echo "*** AUTOHEADER NOT FOUND!." + echo "*** KDE requires autoheader $required_autoconf_version" +@@ -68,7 +68,7 @@ case $AUTOMAKE_STRING in + echo "*** KDE requires automake $required_automake_version" + exit 1 + ;; +- automake*1.6.* | automake*1.7* | automake*1.8* | automake*1.9* | automake*1.10*) ++ automake*) + echo "*** $AUTOMAKE_STRING found." + UNSERMAKE=no + ;; diff --git a/opensuse/core/tdelibs/admin.tar.bz2 b/opensuse/core/tdelibs/admin.tar.bz2 new file mode 100644 index 000000000..7a2e55a1e Binary files /dev/null and b/opensuse/core/tdelibs/admin.tar.bz2 differ diff --git a/opensuse/core/tdelibs/allow-man-setgid.diff b/opensuse/core/tdelibs/allow-man-setgid.diff new file mode 100644 index 000000000..51a47d720 --- /dev/null +++ b/opensuse/core/tdelibs/allow-man-setgid.diff @@ -0,0 +1,32 @@ +Index: kdecore/kapplication.cpp +=================================================================== +--- kdecore/kapplication.cpp.orig ++++ kdecore/kapplication.cpp +@@ -87,6 +87,8 @@ + #include + #endif + #include ++#include ++#include + + #ifndef Q_WS_WIN + #include "kwin.h" +@@ -776,10 +778,15 @@ void KApplication::init(bool GUIenabled) + { + d->guiEnabled = GUIenabled; + if ((getuid() != geteuid()) || +- (getgid() != getegid())) ++ (getgid() != getegid()) ) + { +- fprintf(stderr, "The KDE libraries are not designed to run with suid privileges.\n"); +- ::exit(127); ++ // man permissions are not exploitable and better than ++ // world writable directories ++ struct group *man = getgrnam("man"); ++ if ( !man || man->gr_gid != getegid() ){ ++ fprintf(stderr, "The KDE libraries are not designed to run with suid privileges.\n"); ++ ::exit(127); ++ } + } + + KProcessController::ref(); diff --git a/opensuse/core/tdelibs/api_docu_description b/opensuse/core/tdelibs/api_docu_description new file mode 100644 index 000000000..8c26424dd --- /dev/null +++ b/opensuse/core/tdelibs/api_docu_description @@ -0,0 +1,36 @@ +arts:KDE bindings for arts including knotify +dcop:The DCOP communications library +interfaces:Defines interfaces for common components so that new implementations can be dropped in +kabc:Access to the KDE address book +kate:Interfaces for the standard text editor KPart +kdecore: Core KDE classes that are not related to the user interface +kded:The KDE daemon interface, to observe your file system +kdejava:The KDE Java enviroment +kdeprint:High level printer control functionality +kdeui:KDE User interface classes such as widgets +kfile:High level access to the KDE network aware file abstraction +khtml:The KDE HTML component +kio:Low level access to network files. Also provides access to facilities such as KDirWatcher which monitors directories for changes +kjs:Javascript (aka. ECMAScript and JScript) support +kparts:Support for re-usable, embeddable, extendable applications +kspell:Easy access to the spell checker +kspell2:Easy access to the spell checker +kdefx:A library with pixmap effects +kssl:KDE secure socket layer interface +kutils:High-level utils, like search/replace support +kmdi:MultiDocument Interface library +kresources:The KDE resources system +kwallet:KDE password manager classes +kdeprint:High level printer control functionality +libkmid:Midi library +knewstuff:Upload and download of application data +dnssd:mDNS support library to request and register network services +kdemm:KDE Multimedia Framework +kcmshell:KControl module shell +kdesu:Change user helper framework +kdoctools:Documentation support +kimgio:Image Handlers +kinit:KDEinit support +kioslave:Basic IO slaves +kunittest:Support for unit tests +libkscreensaver:KDE screensavers diff --git a/opensuse/core/tdelibs/applications.menu-fallback.diff b/opensuse/core/tdelibs/applications.menu-fallback.diff new file mode 100644 index 000000000..69450dad8 --- /dev/null +++ b/opensuse/core/tdelibs/applications.menu-fallback.diff @@ -0,0 +1,19 @@ +Index: kded/kbuildsycoca.cpp +=================================================================== +--- kded/kbuildsycoca.cpp.orig ++++ kded/kbuildsycoca.cpp +@@ -378,8 +378,12 @@ bool KBuildSycoca::build() + + connect(g_vfolder, SIGNAL(newService(const QString &, KService **)), + this, SLOT(slotCreateEntry(const QString &, KService **))); +- +- VFolderMenu::SubMenu *kdeMenu = g_vfolder->parseMenu("applications.menu", true); ++ ++ VFolderMenu::SubMenu *kdeMenu; ++ if ( QFile::exists( "/etc/xdg/menus/applications.menu" ) ) ++ kdeMenu = g_vfolder->parseMenu("applications.menu", true); ++ else ++ kdeMenu = g_vfolder->parseMenu("applications.menu.kde", true); + + KServiceGroup *entry = g_bsgf->addNew("/", kdeMenu->directoryFile, 0, false); + entry->setLayoutInfo(kdeMenu->layoutList); diff --git a/opensuse/core/tdelibs/arts-acinclude.patch b/opensuse/core/tdelibs/arts-acinclude.patch new file mode 100644 index 000000000..0610d6df5 --- /dev/null +++ b/opensuse/core/tdelibs/arts-acinclude.patch @@ -0,0 +1,66 @@ +2009-12-10 Stepan Kasal + +The change of implementation of AC_REQUIRE in 2.64 caused a regression +in the arts project. +This can be fixed by shuffling some macro calls. + +I suppose that most of this patch will not be needed with a future +release of Autoconf. +But the last chunk of this patch is a real bug in this source and +should go upstream. + +--- arts-1.5.10/admin/acinclude.m4.in 2008-08-20 18:07:05.000000000 +0200 ++++ arts-1.5.10/admin/acinclude.m4.in 2009-12-09 17:30:57.000000000 +0100 +@@ -3081,8 +3081,18 @@ + fi + ]) + ++AC_DEFUN([AC_CHECK_COMPILERS_CC], ++[ ++ dnl this prevents stupid AC_PROG_CC to add "-g" to the default CFLAGS ++ CFLAGS=" $CFLAGS" ++ AC_PROG_CC ++ CXXFLAGS=" $CXXFLAGS" ++ AC_PROG_CXX ++]) ++ + AC_DEFUN([AC_CHECK_COMPILERS], + [ ++ AC_REQUIRE([AC_CHECK_COMPILERS_CC]) + AC_ARG_ENABLE(debug, + AC_HELP_STRING([--enable-debug=ARG],[enables debug symbols (yes|no|full) [default=no]]), + [ +@@ -3141,11 +3151,6 @@ + [kde_use_profiling="no"] + ) + +- dnl this prevents stupid AC_PROG_CC to add "-g" to the default CFLAGS +- CFLAGS=" $CFLAGS" +- +- AC_PROG_CC +- + AC_PROG_CPP + + if test "$GCC" = "yes"; then +@@ -3174,10 +3179,6 @@ + LDFLAGS="" + fi + +- CXXFLAGS=" $CXXFLAGS" +- +- AC_PROG_CXX +- + KDE_CHECK_FOR_BAD_COMPILER + + if test "$GXX" = "yes" || test "$CXX" = "KCC"; then +@@ -3503,8 +3504,8 @@ + AC_REQUIRE([AC_LIBTOOL_DLOPEN]) + AC_REQUIRE([KDE_CHECK_LIB64]) + +-AC_OBJEXT +-AC_EXEEXT ++AC_REQUIRE([AC_OBJEXT]) ++AC_REQUIRE([AC_EXEEXT]) + + AM_PROG_LIBTOOL + AC_LIBTOOL_CXX diff --git a/opensuse/core/tdelibs/artwork.diff b/opensuse/core/tdelibs/artwork.diff new file mode 100644 index 000000000..0c6742d22 --- /dev/null +++ b/opensuse/core/tdelibs/artwork.diff @@ -0,0 +1,46 @@ +Index: kdecore/eventsrc +=================================================================== +--- kdecore/eventsrc.orig ++++ kdecore/eventsrc +@@ -2572,7 +2572,7 @@ Comment[wa]=On messaedje critike est hÃ¥ + Comment[zh_CN]=æ­£åœ¨æ˜¾ç¤ºå…³é”®æ¶ˆæ¯ + Comment[zh_HK]=顯示嚴é‡è­¦å‘Šè¨Šæ¯ + Comment[zh_TW]=åš´é‡çš„警告訊æ¯å·²é¡¯ç¤º +-default_sound=KDE_Glass_Break.ogg ++default_sound=KDE_Error_1.ogg + default_presentation=65 + nopresentation=18 + level=4 +Index: mimetypes/application/x-bittorrent.desktop +=================================================================== +--- mimetypes/application/x-bittorrent.desktop.orig ++++ mimetypes/application/x-bittorrent.desktop +@@ -1,4 +1,5 @@ + [Desktop Entry] ++Icon=torrent + Comment=BitTorrent Download + Comment[af]=BitTorrent Aflaai + Comment[ar]=مل٠تنزيل BitTorrent +Index: mimetypes/application/x-msdos-program.desktop +=================================================================== +--- mimetypes/application/x-msdos-program.desktop.orig ++++ mimetypes/application/x-msdos-program.desktop +@@ -85,5 +85,5 @@ MimeType=application/x-msdos-program + X-KDE-IsAlso=application/x-executable + [Property::X-KDE-NativeExtension] + Type=QString +-Value=.exe ++Value=.exe;.EXE; + +Index: kresources/kresources.desktop +=================================================================== +--- kresources/kresources.desktop.orig ++++ kresources/kresources.desktop +@@ -1,6 +1,6 @@ + [Desktop Entry] + Exec=kcmshell kresources +-Icon=date ++Icon=about_kde + Type=Application + Terminal=false + diff --git a/opensuse/core/tdelibs/autostart-spec.diff b/opensuse/core/tdelibs/autostart-spec.diff new file mode 100644 index 000000000..a67a8e487 --- /dev/null +++ b/opensuse/core/tdelibs/autostart-spec.diff @@ -0,0 +1,55 @@ +Index: kdecore/kstandarddirs.cpp +=================================================================== +--- kdecore/kstandarddirs.cpp.orig ++++ kdecore/kstandarddirs.cpp +@@ -100,7 +100,7 @@ static const char* const types[] = {"htm + "wallpaper", "lib", "pixmap", "templates", + "module", "qtplugins", + "xdgdata-apps", "xdgdata-dirs", "xdgconf-menu", +- "xdgdata-icon", "xdgdata-pixmap", ++ "xdgdata-icon", "xdgdata-pixmap", "xdgconf-autostart", + "kcfg", "emoticons", 0 }; + + static int tokenize( QStringList& token, const QString& str, +@@ -1067,6 +1067,8 @@ QString KStandardDirs::kde_default(const + return "desktop-directories/"; + if (!strcmp(type, "xdgconf-menu")) + return "menus/"; ++ if (!strcmp(type, "xdgconf-autostart")) ++ return "autostart/"; + if (!strcmp(type, "kcfg")) + return "share/config.kcfg"; + if (!strcmp(type, "emoticons")) +Index: kinit/autostart.cpp +=================================================================== +--- kinit/autostart.cpp.orig ++++ kinit/autostart.cpp +@@ -104,7 +104,9 @@ static bool startCondition(const QString + void + AutoStart::loadAutoStartList() + { +- QStringList files = KGlobal::dirs()->findAllResources("autostart", "*.desktop", false, true); ++ QStringList files = KGlobal::dirs()->findAllResources("xdgconf-autostart", "*.desktop", false, true); ++ QStringList kdefiles = KGlobal::dirs()->findAllResources("autostart", "*.desktop", false, true); ++ files += kdefiles; + + for(QStringList::ConstIterator it = files.begin(); + it != files.end(); +@@ -129,6 +131,17 @@ AutoStart::loadAutoStartList() + continue; + } + ++ if (config.hasKey("OnlyShowIn")) ++ { ++ if (!config.readListEntry("OnlyShowIn", ';').contains("KDE")) ++ continue; ++ } ++ if (config.hasKey("NotShowIn")) ++ { ++ if (config.readListEntry("NotShowIn", ';').contains("KDE")) ++ continue; ++ } ++ + AutoStartItem *item = new AutoStartItem; + item->name = extractName(*it); + item->service = *it; diff --git a/opensuse/core/tdelibs/avahi-pidfile.diff b/opensuse/core/tdelibs/avahi-pidfile.diff new file mode 100644 index 000000000..62cd3d8da --- /dev/null +++ b/opensuse/core/tdelibs/avahi-pidfile.diff @@ -0,0 +1,13 @@ +Index: dnssd/servicebrowser.cpp +=================================================================== +--- dnssd/servicebrowser.cpp.orig ++++ dnssd/servicebrowser.cpp +@@ -30,7 +30,7 @@ + #include + #endif + +-#define MDNSD_PID "/var/run/mdnsd.pid" ++#define MDNSD_PID "/var/run/avahi-daemon/pid" + + namespace DNSSD + { diff --git a/opensuse/core/tdelibs/baselibs.conf b/opensuse/core/tdelibs/baselibs.conf new file mode 100644 index 000000000..903729278 --- /dev/null +++ b/opensuse/core/tdelibs/baselibs.conf @@ -0,0 +1,3 @@ +tdelibs +tdelibs-arts +tdelibs-default-style diff --git a/opensuse/core/tdelibs/bnc557126.diff b/opensuse/core/tdelibs/bnc557126.diff new file mode 100644 index 000000000..0782537b9 --- /dev/null +++ b/opensuse/core/tdelibs/bnc557126.diff @@ -0,0 +1,21 @@ +------------------------------------------------------------------------ +r1052100 | mueller | 2009-11-20 19:35:00 +0000 (Fri, 20 Nov 2009) | 2 lines +Changed paths: + M /branches/KDE/4.3/kdelibs/kjs/dtoa.cpp + +fix array overrun (CVE-2009-0689) + +------------------------------------------------------------------------ +Index: dtoa.cpp +=================================================================== +--- kjs/dtoa.cpp (revision 1052099) ++++ kjs/dtoa.cpp (revision 1052100) +@@ -457,7 +457,7 @@ + #define FREE_DTOA_LOCK(n) /*nothing*/ + #endif + +-#define Kmax 15 ++#define Kmax (sizeof(size_t) << 3) + + struct + Bigint { diff --git a/opensuse/core/tdelibs/bug-382959_kabc_fix_vcardparser.patch b/opensuse/core/tdelibs/bug-382959_kabc_fix_vcardparser.patch new file mode 100644 index 000000000..f7c3ee78d --- /dev/null +++ b/opensuse/core/tdelibs/bug-382959_kabc_fix_vcardparser.patch @@ -0,0 +1,562 @@ +Index: kabc/vcardconverter.cpp +=================================================================== +--- kabc/vcardconverter.cpp.orig ++++ kabc/vcardconverter.cpp +@@ -51,6 +51,14 @@ QString VCardConverter::createVCard( con + return createVCards( list, version ); + } + ++QCString VCardConverter::createVCardRaw( const Addressee &addr, Version version ) ++{ ++ Addressee::List list; ++ list.append( addr ); ++ ++ return createVCardsRaw( list, version ); ++} ++ + QString VCardConverter::createVCards( Addressee::List list, Version version ) + { + VCardTool tool; +@@ -58,6 +66,13 @@ QString VCardConverter::createVCards( Ad + return tool.createVCards( list, ( version == v3_0 ? VCard::v3_0 : VCard::v2_1 ) ); + } + ++QCString VCardConverter::createVCardsRaw( Addressee::List list, Version version ) ++{ ++ VCardTool tool; ++ ++ return tool.createVCardsRaw( list, ( version == v3_0 ? VCard::v3_0 : VCard::v2_1 ) ); ++} ++ + Addressee VCardConverter::parseVCard( const QString& vcard ) + { + Addressee::List list = parseVCards( vcard ); +@@ -65,6 +80,13 @@ Addressee VCardConverter::parseVCard( co + return list[ 0 ]; + } + ++Addressee VCardConverter::parseVCardRaw( const QCString& vcard ) ++{ ++ Addressee::List list = parseVCardsRaw( vcard ); ++ ++ return list[ 0 ]; ++} ++ + Addressee::List VCardConverter::parseVCards( const QString& vcard ) + { + VCardTool tool; +@@ -72,6 +94,13 @@ Addressee::List VCardConverter::parseVCa + return tool.parseVCards( vcard ); + } + ++Addressee::List VCardConverter::parseVCardsRaw( const QCString& vcard ) ++{ ++ VCardTool tool; ++ ++ return tool.parseVCardsRaw( vcard ); ++} ++ + // ---------------------------- deprecated stuff ---------------------------- // + + bool VCardConverter::vCardToAddressee( const QString &str, Addressee &addr, Version version ) +Index: kabc/vcardconverter.h +=================================================================== +--- kabc/vcardconverter.h.orig ++++ kabc/vcardconverter.h +@@ -82,6 +82,7 @@ class KABC_EXPORT VCardConverter + @param version The version of the generated vCard format + */ + QString createVCard( const Addressee &addr, Version version = v3_0 ); ++ QCString createVCardRaw( const Addressee &addr, Version version = v3_0 ); + + /** + Creates a string in vCard format which contains the given +@@ -92,6 +93,7 @@ class KABC_EXPORT VCardConverter + */ + // FIXME: Add error handling + QString createVCards( Addressee::List list, Version version = v3_0 ); ++ QCString createVCardsRaw( Addressee::List list, Version version = v3_0 ); + + // FIXME: Add "createVCards( AddressBook * )" + +@@ -99,12 +101,14 @@ class KABC_EXPORT VCardConverter + Parses a string in vCard format and returns the first contact. + */ + Addressee parseVCard( const QString& vcard ); ++ Addressee parseVCardRaw( const QCString& vcard ); + + /** + Parses a string in vCard format and returns a list of contact objects. + */ + // FIXME: Add error handling + Addressee::List parseVCards( const QString& vcard ); ++ Addressee::List parseVCardsRaw( const QCString& vcard ); + + // FIXME: Add "bool parseVCards( AddressBook *, const QString &vcard )" + +Index: kabc/vcardformatplugin.cpp +=================================================================== +--- kabc/vcardformatplugin.cpp.orig ++++ kabc/vcardformatplugin.cpp +@@ -38,14 +38,11 @@ VCardFormatPlugin::~VCardFormatPlugin() + + bool VCardFormatPlugin::load( Addressee &addressee, QFile *file ) + { +- QString data; +- +- QTextStream t( file ); +- t.setEncoding( QTextStream::Latin1 ); +- data = t.read(); ++ const QByteArray rawData = file->readAll(); ++ const QCString data( rawData.data(), rawData.size() ); + + VCardConverter converter; +- Addressee::List l = converter.parseVCards( data ); ++ Addressee::List l = converter.parseVCardsRaw( data ); + + if ( ! l.first().isEmpty() ) { + addressee = l.first(); +@@ -57,15 +54,11 @@ bool VCardFormatPlugin::load( Addressee + + bool VCardFormatPlugin::loadAll( AddressBook*, Resource *resource, QFile *file ) + { +- QString data; +- +- QTextStream t( file ); +- t.setEncoding( QTextStream::Latin1 ); +- data = t.read(); ++ const QByteArray rawData = file->readAll(); ++ const QCString data( rawData.data(), rawData.size() ); + + VCardConverter converter; +- +- Addressee::List l = converter.parseVCards( data ); ++ Addressee::List l = converter.parseVCardsRaw( data ); + + Addressee::List::iterator itr; + for ( itr = l.begin(); itr != l.end(); ++itr) { +@@ -86,9 +79,8 @@ void VCardFormatPlugin::save( const Addr + + vcardlist.append( addressee ); + +- QTextStream t( file ); +- t.setEncoding( QTextStream::UnicodeUTF8 ); +- t << converter.createVCards( vcardlist ); ++ const QCString data = converter.createVCardsRaw( vcardlist ); ++ file->writeBlock( data, data.length() ); + } + + void VCardFormatPlugin::saveAll( AddressBook*, Resource *resource, QFile *file ) +@@ -102,9 +94,8 @@ void VCardFormatPlugin::saveAll( Address + vcardlist.append( *it ); + } + +- QTextStream t( file ); +- t.setEncoding( QTextStream::UnicodeUTF8 ); +- t << converter.createVCards( vcardlist ); ++ const QCString data = converter.createVCardsRaw( vcardlist ); ++ file->writeBlock( data, data.length() ); + } + + bool VCardFormatPlugin::checkFormat( QFile *file ) const +Index: kabc/vcardparser/vcardparser.cpp +=================================================================== +--- kabc/vcardparser/vcardparser.cpp.orig ++++ kabc/vcardparser/vcardparser.cpp +@@ -18,10 +18,13 @@ + Boston, MA 02110-1301, USA. + */ + ++#include + #include + #include ++#include + + #include ++#include + + #include "vcardparser.h" + +@@ -29,25 +32,60 @@ + + using namespace KABC; + +-static QString backslash( "\\\\" ); +-static QString comma( "\\," ); +-static QString newline( "\\n" ); +-static QString cr( "\\r" ); ++typedef QValueList QCStringList; + +-static void addEscapes( QString &str ) ++QValueList splitCString( const QCString &str, char sep ) + { +- str.replace( '\\', backslash ); +- str.replace( ',', comma ); +- str.replace( '\r', cr ); +- str.replace( '\n', newline ); ++ QValueList list; ++ int start = 0; ++ int end; ++ while ((end = str.find(sep, start)) != -1) { ++ list.append(str.mid(start, end - start)); ++ start = end + 1; ++ } ++ list.append(str.mid(start)); ++ ++ return list; ++} ++ ++QValueList splitCString( const QCString &str, const QRegExp &exp ) ++{ ++ QValueList list; ++ int start = 0; ++ int end; ++ while ((end = str.find(exp, start)) != -1) { ++ list.append(str.mid(start, end - start)); ++ start = end + 1; ++ } ++ list.append(str.mid(start)); ++ ++ return list; ++} ++ ++bool cStringStartsWith( const QCString &str, const QCString &pattern ) ++{ ++ const int length = pattern.length(); ++ if ( length == 0 ) ++ return true; ++ ++ const QCString part = str.left( length ); ++ return (pattern == part); + } + +-static void removeEscapes( QString &str ) ++static void addEscapes( QCString &str ) + { +- str.replace( cr, "\\r" ); +- str.replace( newline, "\n" ); +- str.replace( comma, "," ); +- str.replace( backslash, "\\" ); ++ str.replace( '\\', "\\\\" ); ++ str.replace( ',', "\\," ); ++ str.replace( '\r', "\\r" ); ++ str.replace( '\n', "\\n" ); ++} ++ ++static void removeEscapes( QCString &str ) ++{ ++ str.replace( "\\r", "\r" ); ++ str.replace( "\\n", "\n" ); ++ str.replace( "\\,", "," ); ++ str.replace( "\\\\", "\\" ); + } + + VCardParser::VCardParser() +@@ -60,24 +98,29 @@ VCardParser::~VCardParser() + + VCard::List VCardParser::parseVCards( const QString& text ) + { ++ return parseVCardsRaw( text.utf8() ); ++} ++ ++VCard::List VCardParser::parseVCardsRaw( const QCString& text ) ++{ + static QRegExp sep( "[\x0d\x0a]" ); + + VCard currentVCard; + VCard::List vCardList; +- QString currentLine; ++ QCString currentLine; + +- const QStringList lines = QStringList::split( sep, text ); +- QStringList::ConstIterator it; ++ const QCStringList lines = splitCString( text, sep ); ++ QCStringList::ConstIterator it; + + bool inVCard = false; +- QStringList::ConstIterator linesEnd( lines.end() ); ++ QCStringList::ConstIterator linesEnd( lines.end() ); + for ( it = lines.begin(); it != linesEnd; ++it ) { + + if ( (*it).isEmpty() ) // empty line + continue; + + if ( (*it)[ 0 ] == ' ' || (*it)[ 0 ] == '\t' ) { // folded line => append to previous +- currentLine += QString( *it ).remove( 0, 1 ); ++ currentLine.append( (*it).mid( 1 ) ); + continue; + } else { + if ( inVCard && !currentLine.isEmpty() ) { // now parse the line +@@ -88,23 +131,23 @@ VCard::List VCardParser::parseVCards( co + } + + VCardLine vCardLine; +- const QString key = currentLine.left( colon ).stripWhiteSpace(); +- QString value = currentLine.mid( colon + 1 ); ++ const QCString key = currentLine.left( colon ).stripWhiteSpace(); ++ QCString value = currentLine.mid( colon + 1 ); + +- QStringList params = QStringList::split( ';', key ); ++ QCStringList params = splitCString( key, ';' ); + + // check for group + if ( params[0].find( '.' ) != -1 ) { +- const QStringList groupList = QStringList::split( '.', params[0] ); +- vCardLine.setGroup( groupList[0] ); +- vCardLine.setIdentifier( groupList[1] ); ++ const QCStringList groupList = splitCString( params[0], '.' ); ++ vCardLine.setGroup( QString::fromLatin1( groupList[0] ) ); ++ vCardLine.setIdentifier( QString::fromLatin1( groupList[1] ) ); + } else +- vCardLine.setIdentifier( params[0] ); ++ vCardLine.setIdentifier( QString::fromLatin1( params[0] ) ); + + if ( params.count() > 1 ) { // find all parameters +- QStringList::ConstIterator paramIt = params.begin(); ++ QCStringList::ConstIterator paramIt = params.begin(); + for ( ++paramIt; paramIt != params.end(); ++paramIt ) { +- QStringList pair = QStringList::split( '=', *paramIt ); ++ QCStringList pair = splitCString( *paramIt, '=' ); + if ( pair.size() == 1 ) { + // correct the fucking 2.1 'standard' + if ( pair[0].lower() == "quoted-printable" ) { +@@ -119,12 +162,12 @@ VCard::List VCardParser::parseVCards( co + } + // This is pretty much a faster pair[1].contains( ',' )... + if ( pair[1].find( ',' ) != -1 ) { // parameter in type=x,y,z format +- const QStringList args = QStringList::split( ',', pair[ 1 ] ); +- QStringList::ConstIterator argIt; ++ const QCStringList args = splitCString( pair[ 1 ], ',' ); ++ QCStringList::ConstIterator argIt; + for ( argIt = args.begin(); argIt != args.end(); ++argIt ) +- vCardLine.addParameter( pair[0].lower(), *argIt ); ++ vCardLine.addParameter( QString::fromLatin1( pair[0].lower() ), QString::fromLatin1( *argIt ) ); + } else +- vCardLine.addParameter( pair[0].lower(), pair[1] ); ++ vCardLine.addParameter( QString::fromLatin1( pair[0].lower() ), QString::fromLatin1( pair[1] ) ); + } + } + +@@ -133,10 +176,8 @@ VCard::List VCardParser::parseVCards( co + QByteArray output; + bool wasBase64Encoded = false; + +- params = vCardLine.parameterList(); +- if ( params.findIndex( "encoding" ) != -1 ) { // have to decode the data +- QByteArray input; +- input = QCString(value.latin1()); ++ if ( vCardLine.parameterList().findIndex( "encoding" ) != -1 ) { // have to decode the data ++ QByteArray input = value; + if ( vCardLine.parameter( "encoding" ).lower() == "b" || + vCardLine.parameter( "encoding" ).lower() == "base64" ) { + KCodecs::base64Decode( input, output ); +@@ -148,14 +189,14 @@ VCard::List VCardParser::parseVCards( co + value = value.remove( value.length() - 1, 1 ) + (*it); + ++it; + } +- input = QCString(value.latin1()); ++ input = value; + KCodecs::quotedPrintableDecode( input, output ); + } + } else { +- output = QCString(value.latin1()); ++ output = value; + } + +- if ( params.findIndex( "charset" ) != -1 ) { // have to convert the data ++ if ( vCardLine.parameterList().findIndex( "charset" ) != -1 ) { // have to convert the data + QTextCodec *codec = + QTextCodec::codecForName( vCardLine.parameter( "charset" ).latin1() ); + if ( codec ) { +@@ -173,17 +214,17 @@ VCard::List VCardParser::parseVCards( co + } + + // we do not save the start and end tag as vcardline +- if ( (*it).lower().startsWith( "begin:vcard" ) ) { ++ if ( cStringStartsWith( (*it).lower(), QCString( "begin:vcard" ) ) ) { + inVCard = true; +- currentLine.setLength( 0 ); ++ currentLine = QCString(); + currentVCard.clear(); // flush vcard + continue; + } + +- if ( (*it).lower().startsWith( "end:vcard" ) ) { ++ if ( cStringStartsWith( (*it).lower(), QCString( "end:vcard" ) ) ) { + inVCard = false; + vCardList.append( currentVCard ); +- currentLine.setLength( 0 ); ++ currentLine = QCString(); + currentVCard.clear(); // flush vcard + continue; + } +@@ -197,8 +238,13 @@ VCard::List VCardParser::parseVCards( co + + QString VCardParser::createVCards( const VCard::List& list ) + { +- QString text; +- QString textLine; ++ return QString::fromUtf8( createVCardsRaw( list ) ); ++} ++ ++QCString VCardParser::createVCardsRaw( const VCard::List& list ) ++{ ++ QCString text; ++ QCString textLine; + QString encodingType; + QStringList idents; + QStringList params; +@@ -213,7 +259,7 @@ QString VCardParser::createVCards( const + + bool hasEncoding; + +- text.reserve( list.size() * 300 ); // reserve memory to be more efficient ++// text.reserve( list.size() * 300 ); // reserve memory to be more efficient + + // iterate over the cards + VCard::List::ConstIterator listEnd( list.end() ); +@@ -228,9 +274,9 @@ QString VCardParser::createVCards( const + for ( lineIt = lines.constBegin(); lineIt != lines.constEnd(); ++lineIt ) { + if ( !(*lineIt).value().asString().isEmpty() ) { + if ( (*lineIt).hasGroup() ) +- textLine = (*lineIt).group() + "." + (*lineIt).identifier(); ++ textLine = (*lineIt).group().latin1() + QCString( "." ) + (*lineIt).identifier().latin1(); + else +- textLine = (*lineIt).identifier(); ++ textLine = (*lineIt).identifier().latin1(); + + params = (*lineIt).parameterList(); + hasEncoding = false; +@@ -243,9 +289,9 @@ QString VCardParser::createVCards( const + + values = (*lineIt).parameters( *paramIt ); + for ( valueIt = values.constBegin(); valueIt != values.constEnd(); ++valueIt ) { +- textLine.append( ";" + (*paramIt).upper() ); ++ textLine.append( QCString( ";" ) + (*paramIt).upper().latin1() ); + if ( !(*valueIt).isEmpty() ) +- textLine.append( "=" + (*valueIt) ); ++ textLine.append( QCString( "=" ) + (*valueIt).latin1() ); + } + } + } +@@ -261,11 +307,11 @@ QString VCardParser::createVCards( const + KCodecs::quotedPrintableEncode( input, output, false ); + } + +- QString value( output ); ++ QCString value( output ); + addEscapes( value ); + textLine.append( ":" + value ); + } else { +- QString value( (*lineIt).value().asString() ); ++ QCString value( (*lineIt).value().toString().utf8() ); + addEscapes( value ); + textLine.append( ":" + value ); + } +Index: kabc/vcardparser/vcardparser.h +=================================================================== +--- kabc/vcardparser/vcardparser.h.orig ++++ kabc/vcardparser/vcardparser.h +@@ -34,6 +34,9 @@ class VCardParser + static VCard::List parseVCards( const QString& text ); + static QString createVCards( const VCard::List& list ); + ++ static VCard::List parseVCardsRaw( const QCString& text ); ++ static QCString createVCardsRaw( const VCard::List& list ); ++ + private: + class VCardParserPrivate; + VCardParserPrivate *d; +Index: kabc/vcardtool.cpp +=================================================================== +--- kabc/vcardtool.cpp.orig ++++ kabc/vcardtool.cpp +@@ -74,15 +74,28 @@ VCardTool::~VCardTool() + { + } + +-// TODO: make list a const& ++QCString VCardTool::createVCardsRaw( Addressee::List list, VCard::Version version ) ++{ ++ const VCard::List vCardList = createVCardsInternal( list, version ); ++ ++ return VCardParser::createVCardsRaw( vCardList ); ++} ++ + QString VCardTool::createVCards( Addressee::List list, VCard::Version version ) + { +- VCard::List vCardList; ++ const VCard::List vCardList = createVCardsInternal( list, version ); ++ ++ return VCardParser::createVCards( vCardList ); ++} ++ ++KABC::VCard::List VCardTool::createVCardsInternal( Addressee::List list, KABC::VCard::Version version ) ++{ ++ KABC::VCard::List vCardList; + + Addressee::List::ConstIterator addrIt; + Addressee::List::ConstIterator listEnd( list.constEnd() ); + for ( addrIt = list.constBegin(); addrIt != listEnd; ++addrIt ) { +- VCard card; ++ KABC::VCard card; + QStringList::ConstIterator strIt; + + // ADR + LABEL +@@ -348,17 +361,30 @@ QString VCardTool::createVCards( Address + vCardList.append( card ); + } + +- return VCardParser::createVCards( vCardList ); ++ return vCardList; ++} ++ ++Addressee::List VCardTool::parseVCardsRaw( const QCString& vcard ) ++{ ++ const VCard::List vCardList = VCardParser::parseVCardsRaw( vcard ); ++ ++ return parseVCardsInternal( vCardList ); + } + + Addressee::List VCardTool::parseVCards( const QString& vcard ) + { ++ const VCard::List vCardList = VCardParser::parseVCards( vcard ); ++ ++ return parseVCardsInternal( vCardList ); ++} ++ ++Addressee::List VCardTool::parseVCardsInternal( const VCard::List &vCardList ) ++{ + static const QChar semicolonSep( ';' ); + static const QChar commaSep( ',' ); + QString identifier; + + Addressee::List addrList; +- const VCard::List vCardList = VCardParser::parseVCards( vcard ); + + VCard::List::ConstIterator cardIt; + VCard::List::ConstIterator listEnd( vCardList.end() ); +Index: kabc/vcardtool.h +=================================================================== +--- kabc/vcardtool.h.orig ++++ kabc/vcardtool.h +@@ -46,12 +46,19 @@ class KABC_EXPORT VCardTool + */ + QString createVCards( Addressee::List list, VCard::Version version = VCard::v3_0 ); + ++ QCString createVCardsRaw( Addressee::List list, VCard::Version version = VCard::v3_0 ); ++ + /** + Parses the string and returns a list of addressee objects. + */ + Addressee::List parseVCards( const QString& vcard ); + ++ Addressee::List parseVCardsRaw( const QCString& vcard ); ++ + private: ++ VCard::List createVCardsInternal( Addressee::List list, VCard::Version version ); ++ Addressee::List parseVCardsInternal( const VCard::List &vCardList ); ++ + /** + Split a string and replaces escaped separators on the fly with + unescaped ones. diff --git a/opensuse/core/tdelibs/bug-399296_ftphandling-fix.diff b/opensuse/core/tdelibs/bug-399296_ftphandling-fix.diff new file mode 100644 index 000000000..a8719ab92 --- /dev/null +++ b/opensuse/core/tdelibs/bug-399296_ftphandling-fix.diff @@ -0,0 +1,57 @@ +Index: kioslave/ftp/ftp.cc +=================================================================== +--- kioslave/ftp/ftp.cc.orig ++++ kioslave/ftp/ftp.cc +@@ -1275,6 +1275,16 @@ bool Ftp::ftpRename( const QString & src + return false; + } + ++ // Must check if dst already exists, RNFR+RNTO overwrites by default (#127793). ++ if (ftpFileExists(dst)) { ++ error(ERR_FILE_ALREADY_EXIST, dst); ++ return false; ++ } ++ if (ftpFolder(dst, false)) { ++ error(ERR_DIR_ALREADY_EXIST, dst); ++ return false; ++ } ++ + int pos = src.findRev("/"); + if( !ftpFolder(src.left(pos+1), false) ) + return false; +@@ -2406,6 +2416,19 @@ bool Ftp::ftpSize( const QString & path, + return true; + } + ++bool Ftp::ftpFileExists(const QString& path) ++{ ++ QCString buf; ++ buf = "SIZE "; ++ buf += remoteEncoding()->encode(path); ++ if( !ftpSendCmd( buf ) || (m_iRespType != 2) ) ++ return false; ++ ++ // skip leading "213 " (response code) ++ const char* psz = ftpResponse(4); ++ return psz != 0; ++} ++ + // Today the differences between ASCII and BINARY are limited to + // CR or CR/LF line terminators. Many servers ignore ASCII (like + // win2003 -or- vsftp with default config). In the early days of +Index: kioslave/ftp/ftp.h +=================================================================== +--- kioslave/ftp/ftp.h.orig ++++ kioslave/ftp/ftp.h +@@ -350,6 +350,11 @@ private: + /** + * Set the current working directory, but only if not yet current + */ ++ bool ftpFileExists(const QString& path); ++ ++ /** ++ * Set the current working directory, but only if not yet current ++ */ + bool ftpFolder(const QString& path, bool bReportError); + + /** diff --git a/opensuse/core/tdelibs/bundle-locale-help.diff b/opensuse/core/tdelibs/bundle-locale-help.diff new file mode 100644 index 000000000..8305fad3a --- /dev/null +++ b/opensuse/core/tdelibs/bundle-locale-help.diff @@ -0,0 +1,107 @@ +Index: kdecore/kstandarddirs.cpp +=================================================================== +--- kdecore/kstandarddirs.cpp.orig ++++ kdecore/kstandarddirs.cpp +@@ -94,8 +94,8 @@ KStandardDirsSingleton* KStandardDirsSin + return s_self; + } + +-static const char* const types[] = {"html", "icon", "apps", "sound", +- "data", "locale", "services", "mime", ++static const char* const types[] = {"html", "html-bundle", "icon", "apps", "sound", ++ "data", "locale", "locale-bundle", "services", "mime", + "servicetypes", "config", "exe", + "wallpaper", "lib", "pixmap", "templates", + "module", "qtplugins", +@@ -1023,6 +1023,8 @@ static int tokenize( QStringList& tokens + QString KStandardDirs::kde_default(const char *type) { + if (!strcmp(type, "data")) + return "share/apps/"; ++ if (!strcmp(type, "html-bundle")) ++ return "share/doc-bundle/HTML/"; + if (!strcmp(type, "html")) + return "share/doc/HTML/"; + if (!strcmp(type, "icon")) +@@ -1035,6 +1037,8 @@ QString KStandardDirs::kde_default(const + return "share/applnk/"; + if (!strcmp(type, "sound")) + return "share/sounds/"; ++ if (!strcmp(type, "locale-bundle")) ++ return "share/locale-bundle/"; + if (!strcmp(type, "locale")) + return "share/locale/"; + if (!strcmp(type, "services")) +Index: kdecore/kcatalogue.cpp +=================================================================== +--- kdecore/kcatalogue.cpp.orig ++++ kdecore/kcatalogue.cpp +@@ -66,7 +66,11 @@ KCatalogue::KCatalogue(const QString & n + .arg( d->language ) + .arg( d->name ); + +- setFileName( locate( "locale", path ) ); ++ QString fileName = locate( "locale", path ); ++ if (fileName.isEmpty()) ++ fileName = locate( "locale-bundle", path ); ++ ++ setFileName( fileName ); + + } + +Index: kdecore/klocale.cpp +=================================================================== +--- kdecore/klocale.cpp.orig ++++ kdecore/klocale.cpp +@@ -402,7 +402,11 @@ QString KLocale::catalogueFileName(const + .arg( language ) + .arg( catalog.name() ); + +- return locate( "locale", path ); ++ QString fileName = locate( "locale", path ); ++ if (fileName.isEmpty()) ++ fileName = locate( "locale-bundle", path ); ++ ++ return fileName; + } + + bool KLocale::setLanguage(const QString & language) +@@ -501,6 +505,9 @@ bool KLocale::isApplicationTranslatedInt + // kdDebug() << "isApplicationTranslatedInto: filename " << sFileName << endl; + + QString sAbsFileName = locate( "locale", sFileName ); ++ if (sAbsFileName.isEmpty()) ++ sAbsFileName = locate( "locale-bundle", sFileName ); ++ + // kdDebug() << "isApplicationTranslatedInto: absname " << sAbsFileName << endl; + return ! sAbsFileName.isEmpty(); + } +Index: kdoctools/kio_help.cpp +=================================================================== +--- kdoctools/kio_help.cpp.orig ++++ kdoctools/kio_help.cpp +@@ -42,7 +42,7 @@ QString HelpProtocol::langLookup(const Q + QStringList search; + + // assemble the local search paths +- const QStringList localDoc = KGlobal::dirs()->resourceDirs("html"); ++ const QStringList localDoc = KGlobal::dirs()->resourceDirs("html") + KGlobal::dirs()->resourceDirs("html-bundle"); + + kdDebug( 7119 ) << "Looking up help for: " << fname << endl; + QString _fname = fname; +@@ -60,10 +60,14 @@ QString HelpProtocol::langLookup(const Q + QStringList langs = KGlobal::locale()->languageList(); + QStringList::ConstIterator lang; + for (lang = langs.begin(); lang != langs.end(); ++lang) +- if ((*lang).left(2) == "en") ++ if ((*lang).left(2) == "en") { + search.append(QString("/usr/share/gnome/help/%1/C%2").arg(path).arg(_fname)); +- else ++ search.append(QString("/usr/share/gnome/help-bundle/%1/C%2").arg(path).arg(_fname)); ++ } ++ else { + search.append(QString("/usr/share/gnome/help/%1/%2%3").arg(path).arg(*lang).arg(_fname)); ++ search.append(QString("/usr/share/gnome/help-bundle/%1/%2%3").arg(path).arg(*lang).arg(_fname)); ++ } + + langs.append( "en" ); + langs.remove( "C" ); diff --git a/opensuse/core/tdelibs/clever-menu.diff b/opensuse/core/tdelibs/clever-menu.diff new file mode 100644 index 000000000..e2ae876c5 --- /dev/null +++ b/opensuse/core/tdelibs/clever-menu.diff @@ -0,0 +1,221 @@ +Index: kio/kio/kservice.cpp +=================================================================== +--- kio/kio/kservice.cpp.orig ++++ kio/kio/kservice.cpp +@@ -725,6 +725,20 @@ QString KService::untranslatedGenericNam + return v.isValid() ? v.toString() : QString::null; + } + ++bool KService::SuSEunimportant() const { ++ QMap::ConstIterator it = m_mapProps.find( "X-SuSE-Unimportant" ); ++ if ( (it == m_mapProps.end()) || (!it.data().isValid())) ++ { ++ return false; ++ } ++ ++ QString aValue = it.data().toString(); ++ if (aValue == "true" || aValue == "on" || aValue == "yes") ++ return true; ++ else ++ return false; ++} ++ + QString KService::parentApp() const { + QMap::ConstIterator it = m_mapProps.find( "X-KDE-ParentApp" ); + if ( (it == m_mapProps.end()) || (!it.data().isValid())) +Index: kio/kio/kservice.h +=================================================================== +--- kio/kio/kservice.h.orig ++++ kio/kio/kservice.h +@@ -327,6 +327,10 @@ public: + * @return true to suppress this service + */ + bool noDisplay() const; ++ /** ++ * check if the application entry is important ++ */ ++ bool SuSEunimportant() const; + + /** + * Name of the application this service belongs to. +Index: kio/kio/kservicegroup.cpp +=================================================================== +--- kio/kio/kservicegroup.cpp.orig ++++ kio/kio/kservicegroup.cpp +@@ -31,8 +31,10 @@ + class KServiceGroup::Private + { + public: +- Private() { m_bNoDisplay = false; m_bShowEmptyMenu = false;m_bShowInlineHeader=false;m_bInlineAlias=false; m_bAllowInline = false;m_inlineValue = 4;} ++ Private() { m_bNoDisplay = false; m_bShowEmptyMenu = false;m_bShowInlineHeader=false;m_bInlineAlias=false; m_bAllowInline = false; m_inlineValue = 4; m_bShortMenu = false; m_bGeneralDescription = false;} + bool m_bNoDisplay; ++ bool m_bShortMenu; ++ bool m_bGeneralDescription; + bool m_bShowEmptyMenu; + bool m_bShowInlineHeader; + bool m_bInlineAlias; +@@ -73,6 +75,11 @@ KServiceGroup::KServiceGroup( const QStr + m_strComment = config.readEntry( "Comment" ); + m_bDeleted = config.readBoolEntry( "Hidden", false ); + d->m_bNoDisplay = config.readBoolEntry( "NoDisplay", false ); ++ if (d->directoryEntryPath.startsWith(QDir::homeDirPath())) ++ d->m_bShortMenu = false; ++ else ++ d->m_bShortMenu = config.readBoolEntry( "X-SuSE-AutoShortMenu", true ); ++ d->m_bGeneralDescription = config.readBoolEntry( "X-SuSE-GeneralDescription", false ); + QStringList tmpList; + if (config.hasKey("OnlyShowIn")) + { +@@ -120,6 +127,10 @@ int KServiceGroup::childCount() + { + if (m_childCount == -1) + { ++ KConfig global("kdeglobals"); ++ global.setGroup("KDE"); ++ bool showUnimportant = global.readBoolEntry("showUnimportant", false); ++ + m_childCount = 0; + + for( List::ConstIterator it = m_serviceList.begin(); +@@ -130,7 +141,8 @@ int KServiceGroup::childCount() + { + KService *service = static_cast(p); + if (!service->noDisplay()) +- m_childCount++; ++ if ( showUnimportant || !service->SuSEunimportant() ) ++ m_childCount++; + } + else if (p->isType(KST_KServiceGroup)) + { +@@ -203,6 +215,16 @@ QStringList KServiceGroup::suppressGener + return d->suppressGenericNames; + } + ++bool KServiceGroup::SuSEgeneralDescription() const ++{ ++ return d->m_bGeneralDescription; ++} ++ ++bool KServiceGroup::SuSEshortMenu() const ++{ ++ return d->m_bShortMenu; ++} ++ + void KServiceGroup::load( QDataStream& s ) + { + QStringList groupList; +@@ -214,7 +236,8 @@ void KServiceGroup::load( QDataStream& s + s >> m_strCaption >> m_strIcon >> + m_strComment >> groupList >> m_strBaseGroupName >> m_childCount >> + noDisplay >> d->suppressGenericNames >> d->directoryEntryPath >> +- d->sortOrder >> _showEmptyMenu >> inlineHeader >> _inlineAlias >> _allowInline; ++ d->sortOrder >> _showEmptyMenu >> inlineHeader >> _inlineAlias >> ++ _allowInline >> d->m_bShortMenu >> d->m_bGeneralDescription; + + d->m_bNoDisplay = (noDisplay != 0); + d->m_bShowEmptyMenu = ( _showEmptyMenu != 0 ); +@@ -286,7 +309,8 @@ void KServiceGroup::save( QDataStream& s + s << m_strCaption << m_strIcon << + m_strComment << groupList << m_strBaseGroupName << m_childCount << + noDisplay << d->suppressGenericNames << d->directoryEntryPath << +- d->sortOrder <<_showEmptyMenu <sortOrder <<_showEmptyMenu <m_bShortMenu << d->m_bGeneralDescription; + } + + KServiceGroup::List +@@ -312,6 +336,12 @@ static void addItem(KServiceGroup::List + KServiceGroup::List + KServiceGroup::entries(bool sort, bool excludeNoDisplay, bool allowSeparators, bool sortByGenericName) + { ++ return SuSEentries(sort, excludeNoDisplay, allowSeparators, sortByGenericName); ++} ++ ++KServiceGroup::List ++KServiceGroup::SuSEentries(bool sort, bool excludeNoDisplay, bool allowSeparators, bool sortByGenericName, bool excludeSuSEunimportant) ++{ + KServiceGroup *group = this; + + // If the entries haven't been loaded yet, we have to reload ourselves +@@ -338,11 +368,18 @@ KServiceGroup::entries(bool sort, bool e + for (List::ConstIterator it(group->m_serviceList.begin()); it != group->m_serviceList.end(); ++it) + { + KSycocaEntry *p = (*it); ++ if( !p->isType(KST_KServiceGroup) && !p->isType(KST_KService)) ++ continue; + bool noDisplay = p->isType(KST_KServiceGroup) ? + static_cast(p)->noDisplay() : + static_cast(p)->noDisplay(); + if (excludeNoDisplay && noDisplay) + continue; ++ bool SuSEunimportant = p->isType(KST_KService) && ++ static_cast(p)->SuSEunimportant(); ++ if (excludeSuSEunimportant && SuSEunimportant) ++ continue; ++ + // Choose the right list + KSortableValueList & list = p->isType(KST_KServiceGroup) ? glist : slist; + QString name; +@@ -374,6 +411,15 @@ KServiceGroup::entries(bool sort, bool e + } + list.insert(key,SPtr(*it)); + } ++ ++ return group->SuSEsortEntries( slist, glist, excludeNoDisplay, allowSeparators ); ++} ++ ++KServiceGroup::List ++KServiceGroup::SuSEsortEntries( KSortableValueList slist, KSortableValueList glist, bool excludeNoDisplay, bool allowSeparators ) ++{ ++ KServiceGroup *group = this; ++ + // Now sort + slist.sort(); + glist.sort(); +@@ -415,6 +461,8 @@ KServiceGroup::entries(bool sort, bool e + // TODO: This prevents duplicates + for(KSortableValueList::Iterator it2 = slist.begin(); it2 != slist.end(); ++it2) + { ++ if (!(*it2).value()->isType(KST_KService)) ++ continue; + KService *service = (KService *)((KSycocaEntry *)((*it2).value())); + if (service->menuId() == item) + { +Index: kio/kio/kservicegroup.h +=================================================================== +--- kio/kio/kservicegroup.h.orig ++++ kio/kio/kservicegroup.h +@@ -26,6 +26,7 @@ + #include + + #include ++#include + + #include "ksycocaentry.h" + #include "ksycocatype.h" +@@ -201,6 +202,12 @@ public: + void setLayoutInfo(const QStringList &layout); + + /** ++ * SuSE special, not part of KDE API ++ */ ++ bool SuSEshortMenu() const; ++ bool SuSEgeneralDescription() const; ++ ++ /** + * @internal + * Returns information related to the layout of services in this group. + */ +@@ -238,6 +245,12 @@ public: + */ + virtual List entries(bool sorted = false); + ++ /* ++ * UNOFFICIAL SuSE special ++ */ ++ virtual List SuSEentries(bool sort, bool excludeNoDisplay, bool allowSeparators, bool sortByGenericName, bool excludeSuSEunimportant = true); ++ virtual List SuSEsortEntries( KSortableValueList slist, KSortableValueList glist, bool excludeNoDisplay, bool allowSeparators ); ++ + /** + * Returns a non-empty string if the group is a special base group. + * By default, "Settings/" is the kcontrol base group ("settings") diff --git a/opensuse/core/tdelibs/common_options b/opensuse/core/tdelibs/common_options new file mode 100644 index 000000000..b1883c282 --- /dev/null +++ b/opensuse/core/tdelibs/common_options @@ -0,0 +1,156 @@ +export prefix="/opt/kde3" +export includedir="$prefix/include" + +export kde_prefix="$prefix" +export kde_confdir="$prefix/share/config" + +export kde_bindir="$kde_prefix/bin" +export kde_libdir="$kde_prefix/@_lib@" +export kde_includes="$kde_prefix/include" +export kde_includedir="$kde_prefix/include" + +export kde_htmldir="$kde_prefix/share/doc/HTML" +export kde_icondir="$kde_prefix/share/icons" +export kde_sounddir="$kde_prefix/share/sounds" +export kde_datadir="$kde_prefix/share/apps" +export kde_locale="$kde_prefix/share/locale" +export kde_mimedir="$kde_prefix/share/mimelnk" +export kde_wallpaperdir="$kde_prefix/share/wallpapers" + +export kde_appsdir="$kde_prefix/share/applnk" +export kde_servicesdir="$kde_prefix/share/services" +export kde_servicetypesdir="$kde_prefix/share/servicetypes" + +export kde_styledir="$kde_libdir/kde3/plugins/styles" +export kde_widgetdir="$kde_libdir/kde3/plugins/designer" + +export PATH=$PWD/admin/:$PATH +if test -x $PWD/admin/do_make; then +alias make=do_make +else +alias make=/opt/kde3/share/apps/kdelibs/admin/do_make +fi + +export configkde="@configkde@" + +unset KDEDIR || : +unset KDEDIRS || : +unset QTDIR || : + +#export INSTALL_TARGET=install-strip +export INSTALL_TARGET=install + +Debug=0 +if test "$Debug" = 1; then + export configkde="$configkde --enable-debug=full" + export NO_BRP_STRIP_DEBUG=true +else + export configkde="$configkde --disable-debug" +fi + +CFLAGS="$CFLAGS $RPM_OPT_FLAGS" +CXXFLAGS="$CXXFLAGS $RPM_OPT_FLAGS" +LDFLAGS= +if ld -Bsymbolic-functions -v &> /dev/null; then + LDFLAGS="$LDFLAGS -Wl,-Bsymbolic-functions" +fi +export CFLAGS CXXFLAGS LDFLAGS + +update_admin() +{ + set +x + if [ ! -d /opt/kde3/share/apps/kdelibs/admin ]; then + echo "ERROR: kde2-compat-devel isn't installed." + exit 1 + fi + if [ ! -d admin ]; then + echo "WARNING: there is no admin directory." + fi + rm -rf admin autom4te.cache + cp -a /opt/kde3/share/apps/kdelibs/admin . + arg=$1 +# if [ "$arg" != "--no-unsermake" ] && \ +# [ -f /.buildenv ] && grep -q BUILD_BASENAME=beta- /.buildenv; then +# arg="--unsermake" +# fi + if [ "$arg" = "--no-unsermake" ]; then + touch $RPM_BUILD_DIR/.no_unsermake + else + export UNSERMAKE=yes + fi + + make -f admin/Makefile.common cvs + + test -f /.buildenv && . /.buildenv + + find . -name \*.ui | while read i; do + for j in ${i%.ui}.cpp ${i%.ui}.h ${i%.ui}.moc;do + if [ -e "$j" ] && grep -q "by: The User Interface Compiler" "$j"; then + echo WARNING: pregenerated files from $i exist, deleting ... + rm -f "$j" + fi + done + if [ "${BUILD_BASENAME:0:4}" != "beta" ]; then + if grep -q "" "$i"; then + echo WARNING: removing include hints from $i + sed -i -e 's,.*,,' "$i" + fi + fi + done +} + +kde_post_install() +{ + # remove not needed development files + rm -f $RPM_BUILD_ROOT/opt/kde3/@_lib@/libkdeinit_*.la + + # not worth the hassle + rm -rf $RPM_BUILD_ROOT/opt/kde3/share/icons/locolor + + # move icons in one theme - prefering hicolor + d="$RPM_BUILD_ROOT/opt/kde3/share/icons/crystalsvg" + if [ -d "$d" -a ! -e "$d/index.theme" ]; then + find "$d" -type f | while read src; do + dest="${src/\/crystalsvg\///hicolor/}" + dir="${dest%/*}" + mkdir -p "$dir" + mv "$src" "$dest" + done + fi + # we do this 3 times as there is a 3 fold hierarchy + if [ -d $RPM_BUILD_ROOT/opt/kde3/share/icons ]; then + for i in `seq 1 3`; do + find $RPM_BUILD_ROOT/opt/kde3/share/icons -type d -exec rmdir -v --ignore-fail-on-non-empty -- {} \; || true + done + fi + + if [ -d $RPM_BUILD_ROOT/opt/kde3/share/locale/sr@Latn ]; then + mv $RPM_BUILD_ROOT/opt/kde3/share/locale/sr@Latn $RPM_BUILD_ROOT/opt/kde3/share/locale/sr@latin + fi + + if test -e /usr/lib/rpm/suse_update_desktop_file.sh; then + distribution='' + if test -f $HOME/.rpmmacros && test -d /usr/src/packages/SRPMS; then + distribution=`grep ^%distribution $HOME/.rpmmacros | cut '-d ' -f2` + fi + + find $RPM_BUILD_ROOT/opt/kde3/share \ + -name '*.desktop' 2> /dev/null | while read file; do + test -r "$file" || continue + grep -q "^X-SuSE-translate=" "$file" && continue + case "$file" in + */.hidden/*) + /usr/lib/rpm/suse_update_desktop_file.sh -n "$file" + ;; + *) + if test -n "$distribution"; then + /usr/lib/rpm/suse_update_desktop_file.sh --project "$distribution" --basedir /usr/src/packages/SRPMS "$file" + else + /usr/lib/rpm/suse_update_desktop_file.sh "$file" + fi + ;; + esac + done + fi +} + diff --git a/opensuse/core/tdelibs/cr16-filesys-file_broken.png b/opensuse/core/tdelibs/cr16-filesys-file_broken.png new file mode 100644 index 000000000..fbbb60a0b Binary files /dev/null and b/opensuse/core/tdelibs/cr16-filesys-file_broken.png differ diff --git a/opensuse/core/tdelibs/create-kdeapi b/opensuse/core/tdelibs/create-kdeapi new file mode 100644 index 000000000..6a11907eb --- /dev/null +++ b/opensuse/core/tdelibs/create-kdeapi @@ -0,0 +1,107 @@ +#! /bin/sh +# Copyright (c) 2001 SuSE GmbH Nuernberg, Germany. All rights reserved. +# +# Author: Adrian Schroeter +# +# This module generates a index.html page for all KDE main api index.html pages +# SuSEhelp will use this index.html page as start point + +r=`pwd` +while test ! -x usr/share/doc/TDE-API/ && test "$r" != "/"; do + r=`dirname $root` + cd .. +done + +kdeapi=/usr/share/doc/TDE-API/ + +if test ! -w $r/${kdeapi} ; then + echo "The KDE API directory $kdeapi is not writeable. Exit..." + exit 1 +fi + +# +# write html header +# +cat > $r/${kdeapi}/index.html < + + + + + + KDE API Reference + + + +

    KDE 3.x API Reference

    + +EOF + +# +# list all the api start pages +# + +cat >> $r/${kdeapi}/index.html < + + Descriptionfrom package + +Qt all Qt classes qt +EOF + +dark=1 +mods= +list=`ls -1 $r/${kdeapi}/*/index.html 2> /dev/null` +for page in $list; do + mainapi=`echo $page | sed -n -e "s@$r/$kdeapi/\([^/]*\)/index.html@\1@p"` + mods="$mods $mainapi" + eval "page_$mainapi=$page" + eval "path_$mainapi=/$kdeapi/$mainapi" +done + +list=`ls -1 $r/opt/tde/share/doc/HTML/en/*-apidocs/*/html/index.html 2> /dev/null` +for page in $list; do + mainapi=`echo $page | sed -n -e "s@$r/opt/tde/share/doc/HTML/en/.*-apidocs/\([^/]*\)/html/index.html@\1@p"` + mods="$mods $mainapi" + path=`echo $page | sed -e "s,$r/opt,/opt,"` + eval "page_$mainapi=$path" + path=`echo $page | sed -n -e "s@$r\(/opt/tde/share/doc/HTML/en/.*-apidocs/[^/]*\)/html/index.html@\1@p"` + eval "path_$mainapi=$path" +done + +mods=`(for i in $mods; do echo $i; done ) | sort` + +for mod in $mods; do + eval "apipath=$""page_$mod" + eval "basepath=$""path_$mod" + description="`cat $r/$basepath/description.SuSE`" + package="`cat $r/$basepath/package.SuSE`" + + if [ "$dark" == "1" ]; then + dark=0 + echo "" >> $r/${kdeapi}/index.html + else + dark=1 + echo "" >> $r/${kdeapi}/index.html + fi + + echo " ${mod} " >> $r/${kdeapi}/index.html + echo "${description}" >> $r/${kdeapi}/index.html + echo "${package}" >> $r/${kdeapi}/index.html + echo "" >> $r/${kdeapi}/index.html + +done + +# +# finish it ... +# +cat >> $r/${kdeapi}/index.html < +
    + + +
    generated by create-kdeapi on `date`
    + + + +EOF diff --git a/opensuse/core/tdelibs/default-useragent.diff b/opensuse/core/tdelibs/default-useragent.diff new file mode 100644 index 000000000..76b92aef8 --- /dev/null +++ b/opensuse/core/tdelibs/default-useragent.diff @@ -0,0 +1,13 @@ +Index: kio/kio/kprotocolmanager.cpp +=================================================================== +--- kio/kio/kprotocolmanager.cpp.orig ++++ kio/kio/kprotocolmanager.cpp +@@ -72,7 +72,7 @@ KProtocolManagerPrivate::~KProtocolManag + + // DEFAULT USERAGENT STRING + #define CFG_DEFAULT_UAGENT(X) \ +-QString("Mozilla/5.0 (compatible; Konqueror/%1.%2%3) KHTML/%4.%5.%6 (like Gecko)") \ ++QString("Mozilla/5.0 (compatible; Konqueror/%1.%2%3) KHTML/%4.%5.%6 (like Gecko) SUSE") \ + .arg(KDE_VERSION_MAJOR).arg(KDE_VERSION_MINOR).arg(X).arg(KDE_VERSION_MAJOR).arg(KDE_VERSION_MINOR).arg(KDE_VERSION_RELEASE) + + void KProtocolManager::reparseConfiguration() diff --git a/opensuse/core/tdelibs/desktop-translations.diff b/opensuse/core/tdelibs/desktop-translations.diff new file mode 100644 index 000000000..6bf878469 --- /dev/null +++ b/opensuse/core/tdelibs/desktop-translations.diff @@ -0,0 +1,209 @@ +Index: kdecore/kconfigbase.h +=================================================================== +--- kdecore/kconfigbase.h.orig ++++ kdecore/kconfigbase.h +@@ -1985,6 +1985,7 @@ public: + + protected: + QCString readEntryUtf8( const char *pKey) const; ++ bool hasTranslatedKey( const char *pKey ) const; + + /** + * The currently selected group. */ +Index: kdecore/kconfigbase.cpp +=================================================================== +--- kdecore/kconfigbase.cpp.orig ++++ kdecore/kconfigbase.cpp +@@ -131,6 +131,24 @@ bool KConfigBase::hasKey(const char *pKe + return !entry.mValue.isNull(); + } + ++bool KConfigBase::hasTranslatedKey(const char* pKey) const ++{ ++ KEntryKey aEntryKey(mGroup, 0); ++ aEntryKey.c_key = pKey; ++ aEntryKey.bDefault = readDefaults(); ++ ++ if (!locale().isNull()) { ++ // try the localized key first ++ aEntryKey.bLocal = true; ++ KEntry entry = lookupData(aEntryKey); ++ if (!entry.mValue.isNull()) ++ return true; ++ aEntryKey.bLocal = false; ++ } ++ ++ return false; ++} ++ + bool KConfigBase::hasGroup(const QString &group) const + { + return internalHasGroup( group.utf8()); +Index: kdecore/kdesktopfile.h +=================================================================== +--- kdecore/kdesktopfile.h.orig ++++ kdecore/kdesktopfile.h +@@ -236,6 +236,8 @@ private: + + private: + ++ QString translatedEntry(const char*) const; ++ + // copy-construction and assignment are not allowed + KDesktopFile( const KDesktopFile& ); + KDesktopFile& operator= ( const KDesktopFile& ); +Index: kdecore/kdesktopfile.cpp +=================================================================== +--- kdecore/kdesktopfile.cpp.orig ++++ kdecore/kdesktopfile.cpp +@@ -34,6 +34,8 @@ + #include "kapplication.h" + #include "kstandarddirs.h" + #include "kmountpoint.h" ++#include "kcatalogue.h" ++#include "klocale.h" + + #include "kdesktopfile.h" + #include "kdesktopfile.moc" +@@ -145,6 +147,27 @@ bool KDesktopFile::isAuthorizedDesktopFi + return false; + } + ++QString KDesktopFile::translatedEntry(const char* key) const ++{ ++ if (hasTranslatedKey(key)) ++ return readEntry(key); ++ ++ if (hasKey(key)) { ++ QString value = readEntryUntranslated(key); ++ QString fName = fileName(); ++ fName = fName.mid(fName.findRev('/')+1); ++ QString po_lookup_key = QString::fromLatin1(key) + "(" + fName + "): " + value; ++ QString po_value = KGlobal::locale()->translate(po_lookup_key.utf8().data()); ++ ++ if (po_value == po_lookup_key) ++ return value; ++ ++ return po_value; ++ } ++ ++ return QString::null; ++} ++ + QString KDesktopFile::readType() const + { + return readEntry("Type"); +@@ -157,17 +180,17 @@ QString KDesktopFile::readIcon() const + + QString KDesktopFile::readName() const + { +- return readEntry("Name"); ++ return translatedEntry("Name"); + } + + QString KDesktopFile::readComment() const + { +- return readEntry("Comment"); ++ return translatedEntry("Comment"); + } + + QString KDesktopFile::readGenericName() const + { +- return readEntry("GenericName"); ++ return translatedEntry("GenericName"); + } + + QString KDesktopFile::readPath() const +@@ -342,5 +365,3 @@ KDesktopFile* KDesktopFile::copyTo(const + config->setDesktopGroup(); + return config; + } +- +- +Index: kio/kio/kservice.cpp +=================================================================== +--- kio/kio/kservice.cpp.orig ++++ kio/kio/kservice.cpp +@@ -114,7 +114,7 @@ KService::init( KDesktopFile *config ) + return; + } + +- m_strName = config->readEntry( "Name" ); ++ m_strName = config->readName(); + entryMap.remove("Name"); + if ( m_strName.isEmpty() ) + { +@@ -134,7 +134,7 @@ KService::init( KDesktopFile *config ) + m_strName = m_strName.left(i); + } + +- m_strType = config->readEntry( "Type" ); ++ m_strType = config->readType(); + entryMap.remove("Type"); + if ( m_strType.isEmpty() ) + { +@@ -204,11 +204,11 @@ KService::init( KDesktopFile *config ) + entryMap.remove("Terminal"); + m_strTerminalOptions = config->readEntry( "TerminalOptions" ); // should be a property IMHO + entryMap.remove("TerminalOptions"); +- m_strPath = config->readPathEntry( "Path" ); ++ m_strPath = config->readPath(); + entryMap.remove("Path"); +- m_strComment = config->readEntry( "Comment" ); ++ m_strComment = config->readComment(); + entryMap.remove("Comment"); +- m_strGenName = config->readEntry( "GenericName" ); ++ m_strGenName = config->readGenericName(); + entryMap.remove("GenericName"); + QString untranslatedGenericName = config->readEntryUntranslated( "GenericName" ); + if (!untranslatedGenericName.isEmpty()) +Index: kio/kio/kservicegroup.cpp +=================================================================== +--- kio/kio/kservicegroup.cpp.orig ++++ kio/kio/kservicegroup.cpp +@@ -66,13 +66,11 @@ KServiceGroup::KServiceGroup( const QStr + + d->directoryEntryPath = cfg; + +- KConfig config( cfg, true, false, "apps" ); ++ KDesktopFile config( cfg, true, "apps" ); + +- config.setDesktopGroup(); +- +- m_strCaption = config.readEntry( "Name" ); +- m_strIcon = config.readEntry( "Icon" ); +- m_strComment = config.readEntry( "Comment" ); ++ m_strCaption = config.readName(); ++ m_strIcon = config.readIcon(); ++ m_strComment = config.readComment(); + m_bDeleted = config.readBoolEntry( "Hidden", false ); + d->m_bNoDisplay = config.readBoolEntry( "NoDisplay", false ); + if (d->directoryEntryPath.startsWith(QDir::homeDirPath())) +Index: kio/kio/kmimetype.cpp +=================================================================== +--- kio/kio/kmimetype.cpp.orig ++++ kio/kio/kmimetype.cpp +@@ -677,9 +677,8 @@ QString KFolderType::comment( const KURL + KURL u( _url ); + u.addPath( ".directory" ); + +- KSimpleConfig cfg( u.path(), true ); +- cfg.setDesktopGroup(); +- QString comment = cfg.readEntry( "Comment" ); ++ KDesktopFile cfg( u.path(), true ); ++ QString comment = cfg.readComment(); + if ( comment.isEmpty() ) + return KMimeType::comment( _url, _is_local ); + +@@ -772,9 +771,8 @@ QString KDEDesktopMimeType::comment( con + if ( !_is_local ) + return KMimeType::comment( _url, _is_local ); + +- KSimpleConfig cfg( _url.path(), true ); +- cfg.setDesktopGroup(); +- QString comment = cfg.readEntry( "Comment" ); ++ KDesktopFile cfg( _url.path(), true ); ++ QString comment = cfg.readComment(); + if ( comment.isEmpty() ) + return KMimeType::comment( _url, _is_local ); + diff --git a/opensuse/core/tdelibs/disable-idn-support.diff b/opensuse/core/tdelibs/disable-idn-support.diff new file mode 100644 index 000000000..37c59bc91 --- /dev/null +++ b/opensuse/core/tdelibs/disable-idn-support.diff @@ -0,0 +1,34 @@ +Index: kdecore/network/kresolver.cpp +=================================================================== +--- kdecore/network/kresolver.cpp.orig ++++ kdecore/network/kresolver.cpp +@@ -50,6 +50,7 @@ + + // IDN + #ifdef HAVE_IDNA_H ++# include + # include + #endif + +@@ -1084,6 +1085,10 @@ static QStringList splitLabels(const QSt + static QCString ToASCII(const QString& label) + { + #ifdef HAVE_IDNA_H ++ // We do disable it by default for security reasons for now. ++ if ( getenv("KDE_NO_IPV6") && strcmp( getenv("KDE_NO_IPV6"), "no" ) ) ++ return label.latin1(); ++ + // We have idna.h, so we can use the idna_to_ascii + // function :) + +@@ -1118,6 +1123,10 @@ static QCString ToASCII(const QString& l + static QString ToUnicode(const QString& label) + { + #ifdef HAVE_IDNA_H ++ // We do disable it by default for security reasons for now. ++ if ( getenv("KDE_NO_IPV6") && strcmp( getenv("KDE_NO_IPV6"), "no" ) ) ++ return label; ++ + // We have idna.h, so we can use the idna_to_unicode + // function :) + diff --git a/opensuse/core/tdelibs/disable-samba-dialog-without-smb.diff b/opensuse/core/tdelibs/disable-samba-dialog-without-smb.diff new file mode 100644 index 000000000..cd0c29927 --- /dev/null +++ b/opensuse/core/tdelibs/disable-samba-dialog-without-smb.diff @@ -0,0 +1,66 @@ +Index: kio/kio/kfileshare.cpp +=================================================================== +--- kio/kio/kfileshare.cpp.orig ++++ kio/kio/kfileshare.cpp +@@ -291,4 +291,24 @@ bool KFileShare::setShared( const QStrin + return ok; + } + ++bool KFileShare::sambaActive() ++{ ++ // rcsmb is not executable by users, try ourselves ++ int status = system( "/sbin/checkproc -p /var/run/samba/smbd.pid /usr/sbin/smbd" ); ++ return status != -1 && WIFEXITED( status ) && WEXITSTATUS( status ) == 0; ++} ++ ++bool KFileShare::nfsActive() ++{ ++ // rcnfsserver is not executable by users, try ourselves ++ int status = system( "/sbin/checkproc /usr/sbin/rpc.mountd" ); ++ if( status != -1 && WIFEXITED( status ) && WEXITSTATUS( status ) == 0 ) ++ { ++ status = system( "/sbin/checkproc -n nfsd" ); ++ if( status != -1 && WIFEXITED( status ) && WEXITSTATUS( status ) == 0 ) ++ return true; ++ } ++ return false; ++} ++ + #include "kfileshare.moc" +Index: kio/kio/kfileshare.h +=================================================================== +--- kio/kio/kfileshare.h.orig ++++ kio/kio/kfileshare.h +@@ -131,6 +131,18 @@ public: + * Returns whether NFS is enabled + */ + static bool nfsEnabled(); ++ ++ /** ++ * Returns whether Samba is active (service is running) ++ * @internal ++ */ ++ static bool sambaActive(); ++ ++ /** ++ * Returns whether NFS is active (service is running) ++ * @internal ++ */ ++ static bool nfsActive(); + + private: + static Authorization s_authorization; +Index: kio/kfile/kfilesharedlg.cpp +=================================================================== +--- kio/kfile/kfilesharedlg.cpp.orig ++++ kio/kfile/kfilesharedlg.cpp +@@ -167,6 +167,9 @@ void KFileSharePropsPlugin::init() + vbox->addWidget( m_pbConfig, 0, Qt::AlignHCenter ); + + vbox->addStretch( 10 ); ++ ++ if( !KFileShare::sambaActive() && !KFileShare::nfsActive()) ++ m_widget->setEnabled( false ); + } + } + break; diff --git a/opensuse/core/tdelibs/do_make b/opensuse/core/tdelibs/do_make new file mode 100644 index 000000000..b317494db --- /dev/null +++ b/opensuse/core/tdelibs/do_make @@ -0,0 +1,96 @@ +#!/bin/bash + +# this is a script around make which basicly checks +# if it's in srcdir or in builddir and changes to +# the right directory for calling /usr/bin/make +# (C) Stephan Kulow + +# You may need to set OBJ_REPLACEMENT variable to get it to work. +# In the variable use the sed syntax to switch directories, for example +# export OBJ_REPLACEMENT="s:/home/zack/cvs/kde:/home/zack/build:" +# will assure that the builds are performed under /home/zack/build +# directory, when the cvs is held under /home/zack/cvs/kde. + +file=Makefile +dir=. +args=() +jobs= + +while test $# -gt 0 ; do + case "${1}" in + -f) + shift + file="${1}" + shift + args=("${args[@]}" -f $file) + ;; + -C) + shift + dir="${1}" + shift ;; + -j) + shift + jobs="${1}" + shift ;; + -j*) + jobs="${1/-j/}" + shift ;; + *) + args=("${args[@]}" "$1") + shift + ;; + esac +done + +if test ! -f $dir/$file; then + if test -n "$OBJ_SUBDIR"; then + dir=$PWD + subdir=. + while test ! -f $dir/$OBJ_SUBDIR/$file; do + subdir=`basename $dir`"/$subdir" + dir=`dirname $dir` + if test "$dir" = "/"; then + # the case that someone puts the compile dir in / + # is very unlikely, so we better skip here ;) + echo "can't find $OBJ_SUBDIR above current dir" + exit 1 + fi + done + cd $dir/$OBJ_SUBDIR/$subdir + else + if test -n "$OBJ_REPLACEMENT"; then + pwd=`echo $PWD | sed -e "$OBJ_REPLACEMENT"` + if test ! -f $pwd/$dir/$file; then + echo "no objdir found. Tried $pwd" + exit 1 + fi + cd $pwd/$dir + fi + fi +else + cd $dir +fi + +echo "makeobj[0]: Entering directory \`$PWD'" +if test -z "$MAKE"; then + if head -n 1 $file | grep unsermake >/dev/null; then + MAKE=`type -p unsermake` + if test ! -x "$MAKE"; then + echo 'Makefile was created with unsermake, but there' + echo 'is no unsermake in $PATH' + exit 1 + fi + MAKE="$MAKE --no-real-compare VERBOSE=1" + if test -n "$jobs"; then args=("${args[@]}" --compile-jobs=$jobs); fi + else + MAKE=/usr/bin/make + if test -n "$jobs"; then args=("${args[@]}" -j $jobs); fi + fi +fi + +echo "Calling $MAKE ${args[@]}" +LANGUAGE=C $MAKE "${args[@]}" +retval=$? +echo "makeobj[0]: Leaving directory \`$PWD'" +exit $retval + diff --git a/opensuse/core/tdelibs/fileshare.diff b/opensuse/core/tdelibs/fileshare.diff new file mode 100644 index 000000000..86f7d0941 --- /dev/null +++ b/opensuse/core/tdelibs/fileshare.diff @@ -0,0 +1,296 @@ +--- kio/kfile/kfilesharedlg.cpp ++++ kio/kfile/kfilesharedlg.cpp 2004/08/06 08:38:31 +@@ -24,6 +24,7 @@ + #include + #include + #include ++#include + #include + #include + #include +@@ -93,8 +94,10 @@ + delete m_widget; + m_rbShare = 0L; + m_rbUnShare = 0L; ++ m_rbSharerw = 0L; + m_widget = new QWidget( d->m_vBox ); + QVBoxLayout * vbox = new QVBoxLayout( m_widget ); ++ //QHBoxLayout * hbox = new QHBoxLayout( vbox ); + + switch ( KFileShare::authorization() ) { + case KFileShare::Authorized: +@@ -105,18 +108,31 @@ + home += '/'; + bool ok = true; + KFileItemList items = properties->items(); +- // We have 3 possibilities: all shared, all unshared, or mixed. ++ // We have some possibilities: all shared, all unshared (ro,rw), or mixed. + bool allShared = true; + bool allUnshared = true; ++ bool allreadonly = true; + KFileItemListIterator it( items ); + for ( ; it.current() && ok; ++it ) { + QString path = (*it)->url().path(); ++ ++ // 0 => not shared ++ // 1 => shared read only ++ // 3 => shared writeable ++ int dirStatus = KFileShare::isDirectoryShared( path ); + if ( !path.startsWith( home ) ) + ok = false; +- if ( KFileShare::isDirectoryShared( path ) ) ++ if ( dirStatus == 1 ) { + allUnshared = false; +- else ++ } ++ else if ( dirStatus == 3 ) { ++ allUnshared = false; ++ allreadonly = false; ++ } ++ else { + allShared = false; ++ allreadonly = false; ++ } + } + if ( !ok ) + { +@@ -136,16 +152,31 @@ + vbox->addWidget( m_rbUnShare, 0 ); + rbGroup->insert( m_rbUnShare ); + +- m_rbShare = new QRadioButton( i18n("Shared"), m_widget ); ++ m_rbShare = new QRadioButton( i18n("Shared - read only for others"), m_widget ); + connect( m_rbShare, SIGNAL( toggled(bool) ), SIGNAL( changed() ) ); + vbox->addWidget( m_rbShare, 0 ); + rbGroup->insert( m_rbShare ); + ++ m_rbSharerw = new QRadioButton( i18n("Shared - writeable for others"), m_widget ); ++ connect( m_rbSharerw, SIGNAL( toggled(bool) ), SIGNAL( changed() ) ); ++ vbox->addWidget( m_rbSharerw, 0 ); ++ rbGroup->insert( m_rbSharerw ); ++ ++ //QLabel *testlabel1 = new QLabel(i18n("Enter Samba Share Name here"),m_widget); ++ //m_leSmbShareName = new QLineEdit(m_widget); ++ //m_leSmbShareName->setMaxLength(12); ++ ++ //hbox->addWidget( testlabel1, 0 ); ++ //hbox->addWidget( m_leSmbShareName ); ++ //vbox->addLayout( hbox ); ++ + // Activate depending on status + if ( allShared ) +- m_rbShare->setChecked(true); ++ m_rbSharerw->setChecked(true); + if ( allUnshared ) + m_rbUnShare->setChecked(true); ++ if ( allreadonly ) ++ m_rbShare->setChecked(true); + + // Some help text + QLabel *label = new QLabel( i18n("Sharing this folder makes it available under Linux/UNIX (NFS) and Windows (Samba).") , m_widget ); +@@ -204,7 +235,7 @@ + void KFileSharePropsPlugin::applyChanges() + { + kdDebug() << "KFileSharePropsPlugin::applyChanges" << endl; +- if ( m_rbShare && m_rbUnShare ) ++ if ( m_rbShare && m_rbUnShare && m_rbSharerw ) + { + bool share = m_rbShare->isChecked(); + KFileItemList items = properties->items(); +@@ -212,7 +243,7 @@ + bool ok = true; + for ( ; it.current() && ok; ++it ) { + QString path = (*it)->url().path(); +- ok = setShared( path, share ); ++ ok = SuSEsetShared( path, share, m_rbSharerw->isChecked() ); + if (!ok) { + if (share) + KMessageBox::detailedError(properties, +@@ -239,8 +270,14 @@ + + bool KFileSharePropsPlugin::setShared( const QString& path, bool shared ) + { +- kdDebug() << "KFileSharePropsPlugin::setShared " << path << "," << shared << endl; +- return KFileShare::setShared( path, shared ); ++ return SuSEsetShared( path, shared, true ); ++} ++ ++bool KFileSharePropsPlugin::SuSEsetShared( const QString& path, bool shared, bool readonly ) ++{ ++ kdDebug() << "KFileSharePropsPlugin::setShared " << path << "," ++ << shared << readonly << endl; ++ return KFileShare::SuSEsetShared( path, shared, readonly ); + } + + QWidget* KFileSharePropsPlugin::page() const +--- kio/kfile/kfilesharedlg.h ++++ kio/kfile/kfilesharedlg.h 2004/08/06 08:38:31 +@@ -54,10 +54,13 @@ + private: + void init(); + bool setShared( const QString&path, bool shared ); ++ bool SuSEsetShared( const QString&path, bool shared, bool readonly ); + + QWidget *m_widget; + QRadioButton *m_rbShare; ++ QRadioButton *m_rbSharerw; + QRadioButton *m_rbUnShare; ++ //QLineEdit *m_leSmbShareName; + QPushButton *m_pbConfig; + class Private; + Private *d; +--- kio/kio/kfileshare.cpp ++++ kio/kio/kfileshare.cpp 2004/08/06 08:38:51 +@@ -20,6 +20,7 @@ + #include "kfileshare.h" + #include + #include ++#include + #include + #include + #include +@@ -35,8 +36,10 @@ + #include + + KFileShare::Authorization KFileShare::s_authorization = NotInitialized; +-QStringList* KFileShare::s_shareList = 0L; +-static KStaticDeleter sdShareList; ++//QStringList* KFileShare::s_shareList = 0L; ++//static KStaticDeleter sdShareList; ++QMap* KFileShare::s_shareMap = 0L; ++static KStaticDeleter > sdShareMap; + + KFileShare::ShareMode KFileShare::s_shareMode; + bool KFileShare::s_sambaEnabled; +@@ -164,10 +167,10 @@ + void KFileShare::readShareList() + { + KFileSharePrivate::self(); +- if ( !s_shareList ) +- sdShareList.setObject( s_shareList, new QStringList ); ++ if ( !s_shareMap ) ++ sdShareMap.setObject( s_shareMap, new QMap ); + else +- s_shareList->clear(); ++ s_shareMap->clear(); + + // /usr/sbin on Mandrake, $PATH allows flexibility for other distributions + QString exe = findExe( "filesharelist" ); +@@ -185,29 +188,45 @@ + + // Reading code shamelessly stolen from khostname.cpp ;) + QString line; ++ QString options; ++ QString path; + int length; ++ QRegExp rx_line("([^\\s]+)\\s+(.*)"); + do { + length = proc.readln(line, true); + if ( length > 0 ) + { + if ( line[length-1] != '/' ) + line += '/'; +- s_shareList->append(line); ++ if( rx_line.search( line ) != -1 ) { ++ options = rx_line.cap(1); ++ path = rx_line.cap(2); ++ (*s_shareMap)[path] = options; ++ } + kdDebug(7000) << "Shared dir:" << line << endl; + } + } while (length > -1); + } + + +-bool KFileShare::isDirectoryShared( const QString& _path ) ++int KFileShare::isDirectoryShared( const QString& _path ) + { +- if ( ! s_shareList ) ++ int ret(0); ++ ++ if ( ! s_shareMap ) + readShareList(); + + QString path( _path ); + if ( path[path.length()-1] != '/' ) + path += '/'; +- return s_shareList && s_shareList->contains( path ); ++ //return s_shareList && s_shareList->contains( path ); ++ if( (*s_shareMap).contains(path) && !((*s_shareMap)[path].isEmpty()) ) { ++ ret+=1; ++ if( (*s_shareMap)[path].find("readwrite") != -1 ) ++ ret+=2; ++ } ++ ++ return ret; + } + + KFileShare::Authorization KFileShare::authorization() +@@ -230,17 +249,30 @@ + + bool KFileShare::setShared( const QString& path, bool shared ) + { ++ return SuSEsetShared( path, shared, false ); ++} ++ ++bool KFileShare::SuSEsetShared( const QString& path, bool shared, bool rw ) ++{ + if (! KFileShare::sharingEnabled() || + KFileShare::shareMode() == Advanced) + return false; + +- kdDebug(7000) << "KFileShare::setShared " << path << "," << shared << endl; + QString exe = KFileShare::findExe( "fileshareset" ); + if (exe.isEmpty()) + return false; +- ++ ++ // we want to share, so we kick it first - just to be sure + KProcess proc; + proc << exe; ++ proc << "--remove"; ++ proc << path; ++ proc.start( KProcess::Block ); ++ proc.clearArguments(); ++ ++ proc << exe; ++ if( rw ) ++ proc << "--rw"; + if ( shared ) + proc << "--add"; + else +--- kio/kio/kfileshare.h ++++ kio/kio/kfileshare.h 2004/08/06 08:38:31 +@@ -65,7 +65,7 @@ + /** + * Call this to know if a directory is currently shared + */ +- static bool isDirectoryShared( const QString& path ); ++ static int isDirectoryShared( const QString& path ); + + enum Authorization { NotInitialized, ErrorNotFound, Authorized, UserNotAllowed }; + /** +@@ -83,7 +83,12 @@ + * @returns wether the perl script was successful + */ + static bool setShared( const QString& path, bool shared ); +- ++ ++ /* ++ * SuSE only enhancement for now ++ */ ++ static bool SuSEsetShared( const QString& path, bool shared, bool ro ); ++ + /** + * The used share mode. + * Simple means that the simple sharing dialog is used and +@@ -132,7 +137,8 @@ + + private: + static Authorization s_authorization; +- static QStringList* s_shareList; ++// static QStringList* s_shareList; ++ static QMap* s_shareMap; + static ShareMode s_shareMode; + static bool s_sambaEnabled; + static bool s_nfsEnabled; diff --git a/opensuse/core/tdelibs/fix-dcopidlng-within-kdelibs-build.diff b/opensuse/core/tdelibs/fix-dcopidlng-within-kdelibs-build.diff new file mode 100644 index 000000000..bac35d2b4 --- /dev/null +++ b/opensuse/core/tdelibs/fix-dcopidlng-within-kdelibs-build.diff @@ -0,0 +1,16 @@ +Index: dcop/dcopidlng/dcopidlng +=================================================================== +--- dcop/dcopidlng/dcopidlng.orig ++++ dcop/dcopidlng/dcopidlng +@@ -5,7 +5,11 @@ trap "rm -f dcopidlng.stderr.$$" 0 1 2 1 + if test -z "$KDECONFIG"; then + KDECONFIG=kde-config + fi ++if type kde-config > /dev/null; then + LIBDIR="`$KDECONFIG --install data --expandvars`/dcopidlng" ++else ++LIBDIR="${0%/*}" ++fi + perl -I"$LIBDIR" "$LIBDIR/kalyptus" --allow_k_dcop_accessors -f dcopidl $1 2> dcopidlng.stderr.$$ + RET=$? + if [ $RET -ne 0 ] diff --git a/opensuse/core/tdelibs/fix-gnome-help-support.diff b/opensuse/core/tdelibs/fix-gnome-help-support.diff new file mode 100644 index 000000000..c9778f9bf --- /dev/null +++ b/opensuse/core/tdelibs/fix-gnome-help-support.diff @@ -0,0 +1,130 @@ +Index: kdoctools/kio_help.cpp +=================================================================== +--- kdoctools/kio_help.cpp.orig ++++ kdoctools/kio_help.cpp +@@ -44,7 +44,27 @@ QString HelpProtocol::langLookup(const Q + // assemble the local search paths + const QStringList localDoc = KGlobal::dirs()->resourceDirs("html"); + ++ kdDebug( 7119 ) << "Looking up help for: " << fname << endl; ++ QString _fname = fname; ++ ++ QString path; ++ int slash = _fname.findRev ('/'); ++ if (slash == -1 || slash == 0) { ++ path = _fname; ++ _fname = ""; ++ } else { ++ path = _fname.left (slash); ++ _fname = _fname.right (_fname.length() - slash); ++ } ++ + QStringList langs = KGlobal::locale()->languageList(); ++ QStringList::ConstIterator lang; ++ for (lang = langs.begin(); lang != langs.end(); ++lang) ++ if ((*lang).left(2) == "en") ++ search.append(QString("/usr/share/gnome/help/%1/C%2").arg(path).arg(_fname)); ++ else ++ search.append(QString("/usr/share/gnome/help/%1/%2%3").arg(path).arg(*lang).arg(_fname)); ++ + langs.append( "en" ); + langs.remove( "C" ); + +@@ -60,7 +80,7 @@ QString HelpProtocol::langLookup(const Q + { + QStringList::ConstIterator lang; + for (lang = langs.begin(); lang != langs.end(); ++lang) +- search.append(QString("%1%2/%3").arg(localDoc[id], *lang, fname)); ++ search.append(QString("%1%2/%3").arg(localDoc[id], *lang, path + _fname)); + } + + // try to locate the file +@@ -81,6 +101,15 @@ QString HelpProtocol::langLookup(const Q + if (info.exists() && info.isFile() && info.isReadable()) + return *it; + } ++ ++ if ( ( *it ).right( 5 ) == ".html" ) ++ { ++ QString file = (*it).left((*it).findRev('/')) + "/" + path + ".xml"; ++ kdDebug( 7119 ) << "Looking for help in: " << file << endl; ++ info.setFile(file); ++ if (info.exists() && info.isFile() && info.isReadable()) ++ return *it; ++ } + } + + +@@ -100,7 +129,7 @@ QString HelpProtocol::lookupFile(const Q + result = langLookup(path); + if (result.isEmpty()) + { +- result = langLookup(path+"/index.html"); ++ result = langLookup(path + "/index.html"); + if (!result.isEmpty()) + { + KURL red( "help:/" ); +@@ -190,12 +219,26 @@ void HelpProtocol::get( const KURL& url + } + } else { + QString docbook_file = file.left(file.findRev('/')) + "/index.docbook"; ++ int last_slash = file.findRev('/'); ++ if (last_slash != -1 && last_slash != 0) { ++ int slash2 = file.findRev('/', last_slash -1); ++ if (slash2 != -1 && slash2 != 0) { ++ int slash3 = file.findRev('/', slash2 - 1); ++ if (slash3 != -1) { ++ QString xml_file = file.left(file.findRev('/')) + "/" + file.mid(slash3 + 1, slash2 - (slash3 + 1)) + ".xml"; ++ kdDebug( 7119 ) << "xml_file " << xml_file << endl; ++ QFileInfo fi(xml_file); ++ if (fi.exists()) ++ docbook_file = xml_file; ++ } ++ } ++ } + if (!KStandardDirs::exists(file)) { + file = docbook_file; + } else { + QFileInfo fi(file); + if (fi.isDir()) { +- file = file + "/index.docbook"; ++ file = docbook_file; + } else { + if ( file.right( 5 ) != ".html" || !compareTimeStamps( file, docbook_file ) ) { + get_file( target ); +@@ -238,7 +281,11 @@ void HelpProtocol::get( const KURL& url + mParsed = transform(file, locate("dtd", "customization/kde-chunk.xsl")); + if ( !mParsed.isEmpty() ) { + infoMessage( i18n( "Saving to cache" ) ); +- QString cache = file.left( file.length() - 7 ); ++ QString cache; ++ if (file.endsWith(".xml")) ++ cache = file.left( file.length() - strlen ("xml") ); ++ else ++ cache = file.left( file.length() - strlen ("docbook") ); + saveToCache( mParsed, locateLocal( "cache", + "kio_help" + cache + + "cache.bz2" ) ); +Index: kdoctools/xslt.cpp +=================================================================== +--- kdoctools/xslt.cpp.orig ++++ kdoctools/xslt.cpp +@@ -278,10 +278,16 @@ static bool readCache( const QString &fi + QString lookForCache( const QString &filename ) + { + kdDebug() << "lookForCache " << filename << endl; +- assert( filename.endsWith( ".docbook" ) ); ++ assert( filename.endsWith( ".docbook" ) || filename.endsWith( ".xml" ) ); + assert( filename.at( 0 ) == '/' ); + +- QString cache = filename.left( filename.length() - 7 ); ++ QString cache; ++ ++ if (filename.endsWith( ".xml" )) ++ cache = filename.left( filename.length() - strlen ("xml") ); ++ else ++ cache = filename.left( filename.length() - strlen ("docbook") ); ++ + QString output; + if ( readCache( filename, cache + "cache.bz2", output) ) + return output; diff --git a/opensuse/core/tdelibs/fix-gnome-help-support_legacy.diff b/opensuse/core/tdelibs/fix-gnome-help-support_legacy.diff new file mode 100644 index 000000000..0e2922e41 --- /dev/null +++ b/opensuse/core/tdelibs/fix-gnome-help-support_legacy.diff @@ -0,0 +1,126 @@ +--- kdoctools/kio_help.cpp ++++ kdoctools/kio_help.cpp +@@ -44,7 +44,27 @@ + // assemble the local search paths + const QStringList localDoc = KGlobal::dirs()->resourceDirs("html"); + ++ kdDebug( 7119 ) << "Looking up help for: " << fname << endl; ++ QString _fname = fname; ++ ++ QString path; ++ int slash = _fname.findRev ('/'); ++ if (slash == -1 || slash == 0) { ++ path = _fname; ++ _fname = ""; ++ } else { ++ path = _fname.left (slash); ++ _fname = _fname.right (_fname.length() - slash); ++ } ++ + QStringList langs = KGlobal::locale()->languageList(); ++ QStringList::ConstIterator lang; ++ for (lang = langs.begin(); lang != langs.end(); ++lang) ++ if ((*lang).left(2) == "en") ++ search.append(QString("/opt/gnome/share/gnome/help/%1/C%2").arg(path).arg(_fname)); ++ else ++ search.append(QString("/opt/gnome/share/gnome/help/%1/%2%3").arg(path).arg(*lang).arg(_fname)); ++ + langs.append( "en" ); + langs.remove( "C" ); + +@@ -60,7 +80,7 @@ + { + QStringList::ConstIterator lang; + for (lang = langs.begin(); lang != langs.end(); ++lang) +- search.append(QString("%1%2/%3").arg(localDoc[id], *lang, fname)); ++ search.append(QString("%1%2/%3").arg(localDoc[id], *lang, path + _fname)); + } + + // try to locate the file +@@ -81,6 +101,15 @@ + if (info.exists() && info.isFile() && info.isReadable()) + return *it; + } ++ ++ if ( ( *it ).right( 5 ) == ".html" ) ++ { ++ QString file = (*it).left((*it).findRev('/')) + "/" + path + ".xml"; ++ kdDebug( 7119 ) << "Looking for help in: " << file << endl; ++ info.setFile(file); ++ if (info.exists() && info.isFile() && info.isReadable()) ++ return *it; ++ } + } + + +@@ -100,7 +129,7 @@ + result = langLookup(path); + if (result.isEmpty()) + { +- result = langLookup(path+"/index.html"); ++ result = langLookup(path + "/index.html"); + if (!result.isEmpty()) + { + KURL red( "help:/" ); +@@ -190,12 +219,26 @@ + } + } else { + QString docbook_file = file.left(file.findRev('/')) + "/index.docbook"; ++ int last_slash = file.findRev('/'); ++ if (last_slash != -1 && last_slash != 0) { ++ int slash2 = file.findRev('/', last_slash -1); ++ if (slash2 != -1 && slash2 != 0) { ++ int slash3 = file.findRev('/', slash2 - 1); ++ if (slash3 != -1) { ++ QString xml_file = file.left(file.findRev('/')) + "/" + file.mid(slash3 + 1, slash2 - (slash3 + 1)) + ".xml"; ++ kdDebug( 7119 ) << "xml_file " << xml_file << endl; ++ QFileInfo fi(xml_file); ++ if (fi.exists()) ++ docbook_file = xml_file; ++ } ++ } ++ } + if (!KStandardDirs::exists(file)) { + file = docbook_file; + } else { + QFileInfo fi(file); + if (fi.isDir()) { +- file = file + "/index.docbook"; ++ file = docbook_file; + } else { + if ( file.right( 5 ) != ".html" || !compareTimeStamps( file, docbook_file ) ) { + get_file( target ); +@@ -238,7 +281,11 @@ + mParsed = transform(file, locate("dtd", "customization/kde-chunk.xsl")); + if ( !mParsed.isEmpty() ) { + infoMessage( i18n( "Saving to cache" ) ); +- QString cache = file.left( file.length() - 7 ); ++ QString cache; ++ if (file.endsWith(".xml")) ++ cache = file.left( file.length() - strlen ("xml") ); ++ else ++ cache = file.left( file.length() - strlen ("docbook") ); + saveToCache( mParsed, locateLocal( "cache", + "kio_help" + cache + + "cache.bz2" ) ); +--- kdoctools/xslt.cpp ++++ kdoctools/xslt.cpp +@@ -274,10 +274,16 @@ + QString lookForCache( const QString &filename ) + { + kdDebug() << "lookForCache " << filename << endl; +- assert( filename.endsWith( ".docbook" ) ); ++ assert( filename.endsWith( ".docbook" ) || filename.endsWith( ".xml" ) ); + assert( filename.at( 0 ) == '/' ); + +- QString cache = filename.left( filename.length() - 7 ); ++ QString cache; ++ ++ if (filename.endsWith( ".xml" )) ++ cache = filename.left( filename.length() - strlen ("xml") ); ++ else ++ cache = filename.left( filename.length() - strlen ("docbook") ); ++ + QString output; + if ( readCache( filename, cache + "cache.bz2", output) ) + return output; diff --git a/opensuse/core/tdelibs/fix-kdemm-build.diff b/opensuse/core/tdelibs/fix-kdemm-build.diff new file mode 100644 index 000000000..befe5e324 --- /dev/null +++ b/opensuse/core/tdelibs/fix-kdemm-build.diff @@ -0,0 +1,88 @@ +Index: kdemm/backend.h +=================================================================== +--- kdemm/backend.h.orig ++++ kdemm/backend.h +@@ -41,7 +41,7 @@ namespace Multimedia + * \author Matthias Kretz + * \since 4.0 + */ +- class Backend : public QObject ++ class KDE_EXPORT Backend : public QObject + { + Q_OBJECT + public: +Index: kdemm/channel.h +=================================================================== +--- kdemm/channel.h.orig ++++ kdemm/channel.h +@@ -34,7 +34,7 @@ namespace Multimedia + * \author Matthias Kretz + * \since 4.0 + */ +- class Channel : public QObject, virtual public MixerIface ++ class KDE_EXPORT Channel : public QObject, virtual public MixerIface + { + Q_OBJECT + public: +Index: kdemm/factory.h +=================================================================== +--- kdemm/factory.h.orig ++++ kdemm/factory.h +@@ -64,7 +64,7 @@ class VideoPlayer; + * \author Matthias Kretz + * \since 4.0 + */ +-class Factory : public QObject, public DCOPObject ++class KDE_EXPORT Factory : public QObject, public DCOPObject + { + Q_OBJECT + public: +Index: kdemm/player.h +=================================================================== +--- kdemm/player.h.orig ++++ kdemm/player.h +@@ -20,6 +20,7 @@ + #ifndef PLAYOBJECT_H + #define PLAYOBJECT_H + ++#include + #include + + class KURL; +@@ -35,7 +36,7 @@ namespace Multimedia + * \author Matthias Kretz + * \since 4.0 + */ +- class Player : public QObject ++ class KDE_EXPORT Player : public QObject + { + Q_OBJECT + public: +Index: kdemm/simpleplayer.h +=================================================================== +--- kdemm/simpleplayer.h.orig ++++ kdemm/simpleplayer.h +@@ -32,7 +32,7 @@ namespace KDE + namespace Multimedia + { + +-class SimplePlayer : public QObject ++class KDE_EXPORT SimplePlayer : public QObject + { + Q_OBJECT + public: +Index: kdemm/mixeriface.h +=================================================================== +--- kdemm/mixeriface.h.orig ++++ kdemm/mixeriface.h +@@ -21,8 +21,9 @@ + #define MIXERIFACE_H + + #include ++#include + +-class MixerIface : public DCOPObject ++class KDE_EXPORT MixerIface : public DCOPObject + { + K_DCOP + k_dcop: diff --git a/opensuse/core/tdelibs/fix-kerberos-printing.diff b/opensuse/core/tdelibs/fix-kerberos-printing.diff new file mode 100644 index 000000000..0276cdd06 --- /dev/null +++ b/opensuse/core/tdelibs/fix-kerberos-printing.diff @@ -0,0 +1,37 @@ +Index: kdeprint/management/smbview.cpp +=================================================================== +--- kdeprint/management/smbview.cpp.orig ++++ kdeprint/management/smbview.cpp +@@ -187,13 +187,26 @@ void SmbView::setOpen(QListViewItem *ite + } + else if (item->depth() == 1) + { // opening server ++ char *krb5ccname = getenv ("KRB5CCNAME"); + m_current = item; +- *m_proc << "smbclient -N -L "; +- *m_proc << KProcess::quote(item->text(0)); +- *m_proc << " -W "; +- *m_proc << KProcess::quote(item->parent()->text(0)); +- *m_proc << " -A "; +- *m_proc << KProcess::quote(m_passwdFile->name()); ++ if (krb5ccname) ++ { ++ *m_proc << "smbclient -k -N -L "; ++ } ++ else ++ { ++ *m_proc << "smbclient -N -L "; ++ } ++ *m_proc << KProcess::quote (item->text (0)); ++ *m_proc << " -W "; ++ *m_proc << KProcess::quote (item->parent ()-> ++ text (0)); ++ if (!krb5ccname) ++ { ++ *m_proc << " -A "; ++ *m_proc << KProcess:: ++ quote (m_passwdFile->name ()); ++ } + startProcess(ShareListing); + } + } diff --git a/opensuse/core/tdelibs/fix-macmenu.patch b/opensuse/core/tdelibs/fix-macmenu.patch new file mode 100644 index 000000000..4b8f6b1cf --- /dev/null +++ b/opensuse/core/tdelibs/fix-macmenu.patch @@ -0,0 +1,11 @@ +--- kdeui/kmenubar.cpp.sav 2008-03-08 17:32:38.000000000 +0100 ++++ kdeui/kmenubar.cpp 2009-08-30 09:27:29.000000000 +0200 +@@ -308,7 +308,7 @@ void KMenuBar::updateFallbackSize() + if( d->fallback_mode ) + { + d->fallback_mode = false; +-// KWin::setStrut( winId(), 0, 0, 0, 0 ); KWin will set strut as it will see fit ++ KWin::setStrut( winId(), 0, 0, 0, 0 ); + setMinimumSize( 0, 0 ); + setMaximumSize( QWIDGETSIZE_MAX, QWIDGETSIZE_MAX ); + updateMenuBarSize(); diff --git a/opensuse/core/tdelibs/fix-qxembed.diff b/opensuse/core/tdelibs/fix-qxembed.diff new file mode 100644 index 000000000..8ea18d69d --- /dev/null +++ b/opensuse/core/tdelibs/fix-qxembed.diff @@ -0,0 +1,80 @@ +Index: kdeui/qxembed.h +=================================================================== +--- kdeui/qxembed.h.orig ++++ kdeui/qxembed.h +@@ -191,6 +191,11 @@ public: + void enterWhatsThisMode(); // temporary, fix in Qt (Matthias, Mon Jul 17 15:20:55 CEST 2000 ) + virtual void reparent( QWidget * parent, WFlags f, const QPoint & p, bool showIt = false ); + ++ /** ++ * @internal ++ */ ++ void updateEmbeddedFocus( bool hasfocus ); ++ + signals: + /** + * This signal is emitted when the embedded window has been lost (destroyed or reparented away) +Index: kdeui/qxembed.cpp +=================================================================== +--- kdeui/qxembed.cpp.orig ++++ kdeui/qxembed.cpp +@@ -314,8 +314,8 @@ bool QXEmbedAppFilter::eventFilter( QObj + if ( qApp->focusWidget() == o && + ((QPublicWidget*)qApp->focusWidget()->topLevelWidget())->topData()->embedded ) { + QFocusEvent* fe = (QFocusEvent*) e; +- if ( obeyFocus || fe->reason() == QFocusEvent::Mouse || +- fe->reason() == QFocusEvent::Shortcut ) { ++ if ( obeyFocus || fe->reason() != QFocusEvent::ActiveWindow /*|| fe->reason() == QFocusEvent::Mouse || ++ fe->reason() == QFocusEvent::Shortcut*/ ) { + // L0614: A widget in the embedded client was just given the Qt focus. + // Variable `obeyFocus' suggests that this is the result of mouse + // activity in the client. The XEMBED_REQUEST_FOCUS message causes +@@ -478,8 +478,11 @@ static int qxembed_x11_event_filter( XEv + switch ( detail ) { + case XEMBED_FOCUS_CURRENT: + // L0683: Set focus on saved focus widget +- if ( focusCurrent ) ++ if ( focusCurrent ) { + focusCurrent->setFocus(); ++ if( QXEmbed* emb = dynamic_cast< QXEmbed* >( focusCurrent )) ++ emb->updateEmbeddedFocus( true ); ++ } + else if ( !w->topLevelWidget()->focusWidget() ) + w->topLevelWidget()->setFocus(); + break; +@@ -511,6 +514,8 @@ static int qxembed_x11_event_filter( XEv + // We first record what the focus widget was + // and clear the Qt focus. + if ( w->topLevelWidget()->focusWidget() ) { ++ if( QXEmbed* emb = dynamic_cast< QXEmbed* >( w->topLevelWidget()->focusWidget())) ++ emb->updateEmbeddedFocus( false ); + focusMap->insert( w->topLevelWidget(), + new QGuardedPtr(w->topLevelWidget()->focusWidget() ) ); + w->topLevelWidget()->focusWidget()->clearFocus(); +@@ -919,6 +924,17 @@ void QXEmbed::focusOutEvent( QFocusEvent + } + + ++// When QXEmbed has Qt focus and gets/loses X focus, make sure the client knows ++// about the state of the focus. ++void QXEmbed::updateEmbeddedFocus( bool hasfocus ){ ++ if (!window || d->xplain) ++ return; ++ if( hasfocus ) ++ sendXEmbedMessage( window, XEMBED_FOCUS_IN, XEMBED_FOCUS_CURRENT); ++ else ++ sendXEmbedMessage( window, XEMBED_FOCUS_OUT); ++} ++ + // L1600: Helper for QXEmbed::embed() + // Check whether a window is in withdrawn state. + static bool wstate_withdrawn( WId winid ) +@@ -1161,6 +1177,8 @@ bool QXEmbed::x11Event( XEvent* e) + // L2085: The client asks for the focus. + case XEMBED_REQUEST_FOCUS: + if( ((QPublicWidget*)topLevelWidget())->topData()->embedded ) { ++ focusMap->remove( topLevelWidget() ); ++ focusMap->insert( topLevelWidget(), new QGuardedPtr( this )); + WId window = ((QPublicWidget*)topLevelWidget())->topData()->parentWinId; + sendXEmbedMessage( window, XEMBED_REQUEST_FOCUS ); + } else { diff --git a/opensuse/core/tdelibs/flash-player-non-oss.diff b/opensuse/core/tdelibs/flash-player-non-oss.diff new file mode 100644 index 000000000..e3bcdc3e4 --- /dev/null +++ b/opensuse/core/tdelibs/flash-player-non-oss.diff @@ -0,0 +1,44 @@ +Index: khtml/rendering/render_frames.cpp +=================================================================== +--- khtml/rendering/render_frames.cpp.orig ++++ khtml/rendering/render_frames.cpp +@@ -940,14 +940,33 @@ void RenderPartObject::slotPartLoadingEr + // Prepare the URL to show in the question (host only if http, to make it short) + KURL pluginPageURL( embed->pluginPage ); + QString shortURL = pluginPageURL.protocol() == "http" ? pluginPageURL.host() : pluginPageURL.prettyURL(); +- int res = KMessageBox::questionYesNo( m_view, +- i18n("No plugin found for '%1'.\nDo you want to download one from %2?").arg(mimeName).arg(shortURL), ++ ++ int res; ++ if (mimeName.startsWith("Shockwave Flash",false)) ++ { ++ res = KMessageBox::questionYesNo( m_view, ++ i18n("No plugin found for '%1'.\nDo you want to download one from %2?").arg(mimeName).arg("openSUSE"), + i18n("Missing Plugin"), i18n("Download"), i18n("Do Not Download"), QString("plugin-")+serviceType); +- if ( res == KMessageBox::Yes ) ++ ++ if ( res == KMessageBox::Yes ) ++ { ++ // Open YMP file ++ KURL ymp_flash ("http://download.opensuse.org/YaST/flash-player.ymp"); ++ ext->openURLRequest( ymp_flash ); ++ return; ++ } ++ } ++ else + { +- // Display vendor download page +- ext->createNewWindow( pluginPageURL ); +- return; ++ res = KMessageBox::questionYesNo( m_view, ++ i18n("No plugin found for '%1'.\nDo you want to download one from %2?").arg(mimeName).arg(shortURL), ++ i18n("Missing Plugin"), i18n("Download"), i18n("Do Not Download"), QString("plugin-")+serviceType); ++ if ( res == KMessageBox::Yes ) ++ { ++ // Display vendor download page ++ ext->createNewWindow( pluginPageURL ); ++ return; ++ } + } + } + } diff --git a/opensuse/core/tdelibs/fontconfig-reverse-lookup.diff b/opensuse/core/tdelibs/fontconfig-reverse-lookup.diff new file mode 100644 index 000000000..af32e5600 --- /dev/null +++ b/opensuse/core/tdelibs/fontconfig-reverse-lookup.diff @@ -0,0 +1,137 @@ +Index: kdeui/Makefile.am +=================================================================== +--- kdeui/Makefile.am.orig ++++ kdeui/Makefile.am +@@ -20,7 +20,7 @@ + + SUBDIRS = . kdetrayproxy tests about + +-INCLUDES= -I$(top_srcdir)/kdefx -I$(top_srcdir)/interfaces $(all_includes) ++INCLUDES= -I/usr/include/freetype2/ -I$(top_srcdir)/kdefx -I$(top_srcdir)/interfaces $(all_includes) + + # For the future: examine if condensing the tons of *_LDFLAGS variables + # into $(all_libraries) isn't better +Index: kdeui/kaction.cpp +=================================================================== +--- kdeui/kaction.cpp.orig ++++ kdeui/kaction.cpp +@@ -42,6 +42,17 @@ + #include + #include + ++#include ++#include FT_FREETYPE_H ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++ + /** + * How it works. + * KActionCollection is an organizing container for KActions. +Index: kdeui/kactionclasses.cpp +=================================================================== +--- kdeui/kactionclasses.cpp.orig ++++ kdeui/kactionclasses.cpp +@@ -27,6 +27,9 @@ + #include "kactionclasses.h" + + #include ++#include ++#include FT_FREETYPE_H ++#include + + #include + #include +@@ -35,6 +38,7 @@ + #include + #include + #include ++#include + + #include + #include +@@ -1498,7 +1502,24 @@ void KFontAction::setFont( const QString + return; + } + } +- kdDebug(129) << "Font not found " << family.lower() << endl; ++ ++ // nothing matched yet, try a fontconfig reverse lookup and ++ // check again to solve an alias ++ FcPattern *pattern = NULL; ++ FcConfig *config = NULL; ++ QString realFamily; ++ QRegExp regExp("[-:]"); ++ pattern = FcNameParse( (unsigned char*) family.ascii() ); ++ FcDefaultSubstitute(pattern); ++ FcConfigSubstitute (config, pattern, FcMatchPattern); ++ pattern = FcFontMatch(NULL, pattern, NULL); ++ realFamily = (char*)FcNameUnparse(pattern); ++ realFamily.remove(realFamily.find(regExp), realFamily.length()); ++ ++ if ( !realFamily.isEmpty() && realFamily != family ) ++ setFont( realFamily ); ++ else ++ kdDebug(129) << "Font not found " << family.lower() << endl; + } + + int KFontAction::plug( QWidget *w, int index ) +Index: kdeui/kfontcombo.cpp +=================================================================== +--- kdeui/kfontcombo.cpp.orig ++++ kdeui/kfontcombo.cpp +@@ -20,6 +20,7 @@ + #include + #include + #include ++#include + + #include + #include +@@ -29,6 +30,18 @@ + #include "kfontcombo.h" + #include "kfontcombo.moc" + ++#include ++#include FT_FREETYPE_H ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++ ++ + struct KFontComboPrivate + { + KFontComboPrivate() +@@ -227,6 +240,22 @@ void KFontCombo::setCurrentFont(const QS + return; + } + } ++ ++ // nothing matched yet, try a fontconfig reverse lookup and ++ // check again to solve an alias ++ FcPattern *pattern = NULL; ++ FcConfig *config = NULL; ++ QString realFamily; ++ QRegExp regExp("[-:]"); ++ pattern = FcNameParse( (unsigned char*) family.ascii() ); ++ FcDefaultSubstitute(pattern); ++ FcConfigSubstitute (config, pattern, FcMatchPattern); ++ pattern = FcFontMatch(NULL, pattern, NULL); ++ realFamily = (char*)FcNameUnparse(pattern); ++ realFamily.remove(realFamily.find(regExp), realFamily.length()); ++ ++ if ( !realFamily.isEmpty() && realFamily != family ) ++ setCurrentFont( realFamily ); + } + + void KFontCombo::slotModified( int ) diff --git a/opensuse/core/tdelibs/gcc44.diff b/opensuse/core/tdelibs/gcc44.diff new file mode 100644 index 000000000..f191e1202 --- /dev/null +++ b/opensuse/core/tdelibs/gcc44.diff @@ -0,0 +1,20 @@ +--- kioslave/ftp/ftp.cc.sav 2009-05-29 13:38:11.000000000 +0200 ++++ kioslave/ftp/ftp.cc 2009-05-29 13:38:38.000000000 +0200 +@@ -876,7 +876,7 @@ int Ftp::ftpOpenPASVDataConnection() + // The usual answer is '227 Entering Passive Mode. (160,39,200,55,6,245)' + // but anonftpd gives '227 =160,39,200,55,6,245' + int i[6]; +- char *start = strchr(ftpResponse(3), '('); ++ const char *start = strchr(ftpResponse(3), '('); + if ( !start ) + start = strchr(ftpResponse(3), '='); + if ( !start || +@@ -931,7 +931,7 @@ int Ftp::ftpOpenEPSVDataConnection() + return ERR_INTERNAL; + } + +- char *start = strchr(ftpResponse(3), '|'); ++ const char *start = strchr(ftpResponse(3), '|'); + if ( !start || sscanf(start, "|||%d|", &portnum) != 1) + return ERR_INTERNAL; + diff --git a/opensuse/core/tdelibs/gcc45.diff b/opensuse/core/tdelibs/gcc45.diff new file mode 100644 index 000000000..a4b8679bf --- /dev/null +++ b/opensuse/core/tdelibs/gcc45.diff @@ -0,0 +1,31 @@ +------------------------------------------------------------------------ +r1074156 | mueller | 2010-01-13 16:02:53 +0100 (Mi, 13. Jan 2010) | 2 Zeilen + +fix build with gcc 4.5 + +------------------------------------------------------------------------ +Index: kate/part/katehighlight.cpp +=================================================================== +--- kate/part/katehighlight.cpp (Revision 1074155) ++++ kate/part/katehighlight.cpp (Revision 1074156) +@@ -3225,7 +3225,7 @@ void KateHlManager::getDefaults(uint sch + list.append(charAttribute); + + KateAttribute* string = new KateAttribute(); +- string->setTextColor(QColor::QColor("#D00")); ++ string->setTextColor(QColor("#D00")); + string->setSelectedTextColor(Qt::red); + list.append(string); + +@@ -3242,9 +3242,9 @@ void KateHlManager::getDefaults(uint sch + + KateAttribute* alert = new KateAttribute(); + alert->setTextColor(Qt::black); +- alert->setSelectedTextColor( QColor::QColor("#FCC") ); ++ alert->setSelectedTextColor( QColor("#FCC") ); + alert->setBold(true); +- alert->setBGColor( QColor::QColor("#FCC") ); ++ alert->setBGColor( QColor("#FCC") ); + list.append(alert); + + KateAttribute* functionAttribute = new KateAttribute(); diff --git a/opensuse/core/tdelibs/google-mail.diff b/opensuse/core/tdelibs/google-mail.diff new file mode 100644 index 000000000..59b132529 --- /dev/null +++ b/opensuse/core/tdelibs/google-mail.diff @@ -0,0 +1,18 @@ +Index: khtml/html/html_elementimpl.cpp +=================================================================== +--- khtml/html/html_elementimpl.cpp.orig ++++ khtml/html/html_elementimpl.cpp +@@ -565,6 +565,13 @@ DocumentFragment HTMLElementImpl::create + + void HTMLElementImpl::setInnerHTML( const DOMString &html, int &exceptioncode ) + { ++ // Works line innerText in Gecko ++ // ### test if needed for ID_SCRIPT as well. ++ if ( id() == ID_STYLE ) { ++ setInnerText(html, exceptioncode); ++ return; ++ } ++ + DocumentFragment fragment = createContextualFragment( html ); + if ( fragment.isNull() ) { + exceptioncode = DOMException::NO_MODIFICATION_ALLOWED_ERR; diff --git a/opensuse/core/tdelibs/ignore-inline-menu.diff b/opensuse/core/tdelibs/ignore-inline-menu.diff new file mode 100644 index 000000000..106bc5284 --- /dev/null +++ b/opensuse/core/tdelibs/ignore-inline-menu.diff @@ -0,0 +1,18 @@ +--- kded/vfolder_menu.cpp 2009/11/07 07:01:12 1.1 ++++ kded/vfolder_menu.cpp 2009/11/07 07:01:42 +@@ -1496,6 +1496,7 @@ + else + kdDebug()<<" Error in parsing show_empty attribute :"<hidden = cfg.readBoolEntry("Hidden", false); + d->example = cfg.readPathEntry("Example"); diff --git a/opensuse/core/tdelibs/integrate-global-pixmaps-new.diff b/opensuse/core/tdelibs/integrate-global-pixmaps-new.diff new file mode 100644 index 000000000..2d3a831b7 --- /dev/null +++ b/opensuse/core/tdelibs/integrate-global-pixmaps-new.diff @@ -0,0 +1,13 @@ +Index: kdecore/kicontheme.cpp +=================================================================== +--- kdecore/kicontheme.cpp.orig ++++ kdecore/kicontheme.cpp +@@ -150,6 +150,8 @@ KIconTheme::KIconTheme(const QString& na + if ( name != "crystalsvg" ) + for ( QStringList::Iterator it = mInherits.begin(); it != mInherits.end(); ++it ) + if ( *it == "default" || *it == "hicolor" ) *it="crystalsvg"; ++ if ( name == "hicolor" ) ++ mInherits = "crystalsuse"; + + d->hidden = cfg.readBoolEntry("Hidden", false); + d->example = cfg.readPathEntry("Example"); diff --git a/opensuse/core/tdelibs/kcontrol_crash_patch.diff b/opensuse/core/tdelibs/kcontrol_crash_patch.diff new file mode 100644 index 000000000..22b3749f6 --- /dev/null +++ b/opensuse/core/tdelibs/kcontrol_crash_patch.diff @@ -0,0 +1,11 @@ +--- kdecore/svgicons/ksvgiconengine.cpp.orig 2011-03-15 01:29:21.172970849 +0300 ++++ kdecore/svgicons/ksvgiconengine.cpp 2011-03-15 01:42:09.904779795 +0300 +@@ -538,6 +538,8 @@ + + bool KSVGIconEngine::load(int width, int height, const QString &path) + { ++ if(path.isNull()) return false; ++ + QDomDocument svgDocument("svg"); + QFile file(path); + diff --git a/opensuse/core/tdelibs/kde3rc.dif b/opensuse/core/tdelibs/kde3rc.dif new file mode 100644 index 000000000..72465757e --- /dev/null +++ b/opensuse/core/tdelibs/kde3rc.dif @@ -0,0 +1,17 @@ +Index: kdecore/kconfigbackend.cpp +=================================================================== +--- kdecore/kconfigbackend.cpp.orig ++++ kdecore/kconfigbackend.cpp +@@ -352,7 +352,11 @@ bool KConfigINIBackEnd::parseConfigFiles + #ifdef Q_WS_WIN + QString etc_kderc = QFile::decodeName( QCString(getenv("WINDIR")) + "\\kderc" ); + #else +- QString etc_kderc = QString::fromLatin1("/etc/kderc"); ++ QString etc_kderc; ++ if (checkAccess(QString::fromLatin1("/etc/tderc"), R_OK)) ++ etc_kderc = QString::fromLatin1("/etc/tderc"); ++ else ++ etc_kderc = QString::fromLatin1("/etc/kde3rc"); + #endif + + if (checkAccess(etc_kderc, R_OK)) diff --git a/opensuse/core/tdelibs/kde4-applications.diff b/opensuse/core/tdelibs/kde4-applications.diff new file mode 100644 index 000000000..78f223d46 --- /dev/null +++ b/opensuse/core/tdelibs/kde4-applications.diff @@ -0,0 +1,70 @@ +Index: kio/kio/kservice.cpp +=================================================================== +--- kio/kio/kservice.cpp.orig ++++ kio/kio/kservice.cpp +@@ -97,6 +97,7 @@ KService::init( KDesktopFile *config ) + m_bValid = true; + + bool absPath = !QDir::isRelativePath(entryPath()); ++ bool kde4application = config->fileName().startsWith("/usr/share/applications/kde4/"); + + config->setDesktopGroup(); + +@@ -133,6 +134,8 @@ KService::init( KDesktopFile *config ) + if (i != -1) + m_strName = m_strName.left(i); + } ++ if (kde4application) ++ m_strName += "/KDE4"; + + m_strType = config->readType(); + entryMap.remove("Type"); +@@ -196,6 +199,18 @@ KService::init( KDesktopFile *config ) + name = name.left(pos); + + m_strExec = config->readPathEntry( "Exec" ); ++ if (kde4application && !m_strExec.startsWith("/")) ++ m_strExec = "/usr/bin/"+m_strExec; ++ else if (config->readBoolEntry("X-KDE-SubstituteUID")) { ++ int space = m_strExec.find(" "); ++ if (space==-1) ++ m_strExec = KStandardDirs::findExe(m_strExec); ++ else { ++ const QString command = m_strExec.left(space); ++ m_strExec.replace(command,KStandardDirs::findExe(command)); ++ } ++ } ++ + entryMap.remove("Exec"); + + m_strIcon = config->readEntry( "Icon", "unknown" ); +@@ -245,6 +260,8 @@ KService::init( KDesktopFile *config ) + m_DCOPServiceType = DCOP_None; + + m_strDesktopEntryName = name.lower(); ++ if (kde4application) ++ m_strDesktopEntryName = "kde4-" + m_strDesktopEntryName; + + m_bAllowAsDefault = config->readBoolEntry( "AllowDefault", true ); + entryMap.remove("AllowDefault"); +@@ -254,6 +271,8 @@ KService::init( KDesktopFile *config ) + if ( m_initialPreference == 1 ) + m_initialPreference = config->readNumEntry( "InitialPreference", 1 ); + entryMap.remove("InitialPreference"); ++ if (kde4application) ++ m_initialPreference = 1; + + // Store all additional entries in the property map. + // A QMap would be easier for this but we can't +@@ -263,7 +282,10 @@ KService::init( KDesktopFile *config ) + for( ; it != entryMap.end();++it) + { + //qDebug(" Key = %s Data = %s", it.key().latin1(), it.data().latin1()); +- m_mapProps.insert( it.key(), QVariant( it.data())); ++ QString key = it.key(); ++ if (kde4application && key=="OnlyShowIn" && it.data()=="KDE;") ++ key = "NotShowIn"; ++ m_mapProps.insert( key, QVariant( it.data())); + } + } + diff --git a/opensuse/core/tdelibs/kdecode_fakes_include.diff b/opensuse/core/tdelibs/kdecode_fakes_include.diff new file mode 100644 index 000000000..a00585286 --- /dev/null +++ b/opensuse/core/tdelibs/kdecode_fakes_include.diff @@ -0,0 +1,18 @@ +--- kdecore/fakes.c ++++ kdecore/fakes.c 2010/01/10 14:00:22 +@@ -323,6 +323,7 @@ + #endif + + #ifndef HAVE_STRLCPY ++#include + KDECORE_EXPORT unsigned long strlcpy(char* d, const char* s, unsigned long bufsize) + { + unsigned long len, ret = strlen(s); +@@ -341,6 +342,7 @@ + #endif + + #ifndef HAVE_STRLCAT ++#include + KDECORE_EXPORT unsigned long strlcat(char* d, const char* s, unsigned long bufsize) + { + char *cp; diff --git a/opensuse/core/tdelibs/kdelibs-3.5.10-CVE-2009-2702.patch b/opensuse/core/tdelibs/kdelibs-3.5.10-CVE-2009-2702.patch new file mode 100644 index 000000000..e6f06a779 --- /dev/null +++ b/opensuse/core/tdelibs/kdelibs-3.5.10-CVE-2009-2702.patch @@ -0,0 +1,62 @@ +diff -pruN kdelibs-3.5.4.orig/kio/kssl/kopenssl.cc kdelibs-3.5.4/kio/kssl/kopenssl.cc +--- kdelibs-3.5.4.orig/kio/kssl/kopenssl.cc 2009-08-31 20:50:12.000000000 +0200 ++++ kdelibs-3.5.4/kio/kssl/kopenssl.cc 2009-08-31 21:46:47.000000000 +0200 +@@ -196,6 +196,7 @@ static int (*K_X509_NAME_add_entry_by_tx + static X509_NAME *(*K_X509_NAME_new)() = 0L; + static int (*K_X509_REQ_set_subject_name)(X509_REQ*,X509_NAME*) = 0L; + static unsigned char *(*K_ASN1_STRING_data)(ASN1_STRING*) = 0L; ++static int (*K_ASN1_STRING_length)(ASN1_STRING*) = 0L; + static STACK_OF(SSL_CIPHER) *(*K_SSL_get_ciphers)(const SSL *ssl) = 0L; + + #endif +@@ -498,6 +499,7 @@ KConfig *cfg; + K_X509_NAME_new = (X509_NAME *(*)()) _cryptoLib->symbol("X509_NAME_new"); + K_X509_REQ_set_subject_name = (int (*)(X509_REQ*,X509_NAME*)) _cryptoLib->symbol("X509_REQ_set_subject_name"); + K_ASN1_STRING_data = (unsigned char *(*)(ASN1_STRING*)) _cryptoLib->symbol("ASN1_STRING_data"); ++ K_ASN1_STRING_length = (int (*)(ASN1_STRING*)) _cryptoLib->symbol("ASN1_STRING_length"); + #endif + } + +@@ -1549,6 +1551,13 @@ unsigned char *KOpenSSLProxy::ASN1_STRIN + return 0L; + } + ++ ++int KOpenSSLProxy::ASN1_STRING_length(ASN1_STRING *x) { ++ if (K_ASN1_STRING_length) return (K_ASN1_STRING_length)(x); ++ return 0L; ++} ++ ++ + STACK_OF(SSL_CIPHER) *KOpenSSLProxy::SSL_get_ciphers(const SSL* ssl) { + if (K_SSL_get_ciphers) return (K_SSL_get_ciphers)(ssl); + return 0L; +diff -pruN kdelibs-3.5.4.orig/kio/kssl/kopenssl.h kdelibs-3.5.4/kio/kssl/kopenssl.h +--- kdelibs-3.5.4.orig/kio/kssl/kopenssl.h 2006-07-22 10:16:39.000000000 +0200 ++++ kdelibs-3.5.4/kio/kssl/kopenssl.h 2009-08-31 21:46:47.000000000 +0200 +@@ -622,6 +622,11 @@ public: + unsigned char *ASN1_STRING_data(ASN1_STRING *x); + + /* ++ * ASN1_STRING_length ++ */ ++ int ASN1_STRING_length(ASN1_STRING *x); ++ ++ /* + * + */ + int OBJ_obj2nid(ASN1_OBJECT *o); +diff -pruN kdelibs-3.5.4.orig/kio/kssl/ksslcertificate.cc kdelibs-3.5.4/kio/kssl/ksslcertificate.cc +--- kdelibs-3.5.4.orig/kio/kssl/ksslcertificate.cc 2006-01-19 18:06:12.000000000 +0100 ++++ kdelibs-3.5.4/kio/kssl/ksslcertificate.cc 2009-08-31 21:54:38.000000000 +0200 +@@ -1099,7 +1099,9 @@ QStringList KSSLCertificate::subjAltName + } + + QString s = (const char *)d->kossl->ASN1_STRING_data(val->d.ia5); +- if (!s.isEmpty()) { ++ if (!s.isEmpty() && ++ /* skip subjectAltNames with embedded NULs */ ++ s.length() == d->kossl->ASN1_STRING_length(val->d.ia5)) { + rc += s; + } + } diff --git a/opensuse/core/tdelibs/kdelibs-3.5.10-cve-2009-1698.patch b/opensuse/core/tdelibs/kdelibs-3.5.10-cve-2009-1698.patch new file mode 100644 index 000000000..ab9fea5c2 --- /dev/null +++ b/opensuse/core/tdelibs/kdelibs-3.5.10-cve-2009-1698.patch @@ -0,0 +1,42 @@ +diff -ur kdelibs-3.5.10/khtml/css/cssparser.cpp kdelibs-3.5.10-cve-2009-1698/khtml/css/cssparser.cpp +--- kdelibs-3.5.10/khtml/css/cssparser.cpp 2007-01-15 12:34:04.000000000 +0100 ++++ kdelibs-3.5.10-cve-2009-1698/khtml/css/cssparser.cpp 2009-07-26 05:46:39.000000000 +0200 +@@ -1344,6 +1344,14 @@ + if ( args->size() != 1) + return false; + Value *a = args->current(); ++ if (a->unit != CSSPrimitiveValue::CSS_IDENT) { ++ isValid=false; ++ break; ++ } ++ if (qString(a->string)[0] == '-') { ++ isValid=false; ++ break; ++ } + parsedValue = new CSSPrimitiveValueImpl(domString(a->string), CSSPrimitiveValue::CSS_ATTR); + } + else +@@ -1396,7 +1404,8 @@ + + CounterImpl *counter = new CounterImpl; + Value *i = args->current(); +-// if (i->unit != CSSPrimitiveValue::CSS_IDENT) goto invalid; ++ if (i->unit != CSSPrimitiveValue::CSS_IDENT) goto invalid; ++ if (qString(i->string)[0] == '-') goto invalid; + counter->m_identifier = domString(i->string); + if (counters) { + i = args->next(); +diff -ur kdelibs-3.5.10/khtml/css/css_valueimpl.cpp kdelibs-3.5.10-cve-2009-1698/khtml/css/css_valueimpl.cpp +--- kdelibs-3.5.10/khtml/css/css_valueimpl.cpp 2006-07-22 10:16:49.000000000 +0200 ++++ kdelibs-3.5.10-cve-2009-1698/khtml/css/css_valueimpl.cpp 2009-07-26 05:45:36.000000000 +0200 +@@ -736,7 +736,9 @@ + text = getValueName(m_value.ident); + break; + case CSSPrimitiveValue::CSS_ATTR: +- // ### ++ text = "attr("; ++ text += DOMString( m_value.string ); ++ text += ")"; + break; + case CSSPrimitiveValue::CSS_COUNTER: + text = "counter("; diff --git a/opensuse/core/tdelibs/kdelibs-3.5.10-cve-2009-1725.patch b/opensuse/core/tdelibs/kdelibs-3.5.10-cve-2009-1725.patch new file mode 100644 index 000000000..ee8fdbc3f --- /dev/null +++ b/opensuse/core/tdelibs/kdelibs-3.5.10-cve-2009-1725.patch @@ -0,0 +1,13 @@ +Index: khtml/html/htmltokenizer.cpp +=================================================================== +--- khtml/html/htmltokenizer.cpp (revision 1002163) ++++ khtml/html/htmltokenizer.cpp (revision 1002164) +@@ -736,7 +736,7 @@ + #ifdef TOKEN_DEBUG + kdDebug( 6036 ) << "unknown entity!" << endl; + #endif +- checkBuffer(10); ++ checkBuffer(11); + // ignore the sequence, add it to the buffer as plaintext + *dest++ = '&'; + for(unsigned int i = 0; i < cBufferPos; i++) diff --git a/opensuse/core/tdelibs/kdelibs-3.5.10-cve-2009-2537-select-length.patch b/opensuse/core/tdelibs/kdelibs-3.5.10-cve-2009-2537-select-length.patch new file mode 100644 index 000000000..5972b0a38 --- /dev/null +++ b/opensuse/core/tdelibs/kdelibs-3.5.10-cve-2009-2537-select-length.patch @@ -0,0 +1,30 @@ +diff -ur kdelibs-3.5.10/khtml/ecma/kjs_html.cpp kdelibs-3.5.10-cve-2009-2537-select-length/khtml/ecma/kjs_html.cpp +--- kdelibs-3.5.10/khtml/ecma/kjs_html.cpp 2008-02-13 10:41:09.000000000 +0100 ++++ kdelibs-3.5.10-cve-2009-2537-select-length/khtml/ecma/kjs_html.cpp 2009-07-26 04:54:52.000000000 +0200 +@@ -62,6 +62,9 @@ + + #include + ++// CVE-2009-2537 (vendors agreed on max 10000 elements) ++#define MAX_SELECT_LENGTH 10000 ++ + namespace KJS { + + KJS_DEFINE_PROTOTYPE_WITH_PROTOTYPE(HTMLDocumentProto, DOMDocumentProto) +@@ -2550,8 +2553,14 @@ + case SelectValue: { select.setValue(str); return; } + case SelectLength: { // read-only according to the NS spec, but webpages need it writeable + Object coll = Object::dynamicCast( getSelectHTMLCollection(exec, select.options(), select) ); +- if ( coll.isValid() ) +- coll.put(exec,"length",value); ++ ++ if ( coll.isValid() ) { ++ if (value.toInteger(exec) >= MAX_SELECT_LENGTH) { ++ Object err = Error::create(exec, RangeError); ++ exec->setException(err); ++ } else ++ coll.put(exec, "length", value); ++ } + return; + } + // read-only: form diff --git a/opensuse/core/tdelibs/kdelibs-3.5.10-kio.patch b/opensuse/core/tdelibs/kdelibs-3.5.10-kio.patch new file mode 100644 index 000000000..9fb299d4a --- /dev/null +++ b/opensuse/core/tdelibs/kdelibs-3.5.10-kio.patch @@ -0,0 +1,47 @@ +--- kdelibs-3.5.10/kio/kio/kzip.cpp.orig 2009-12-09 18:42:47.000000000 +0100 ++++ kdelibs-3.5.10/kio/kio/kzip.cpp 2009-12-09 18:45:43.000000000 +0100 +@@ -1051,6 +1051,20 @@ + return true; + } + ++bool KZip::writeDir(const QString& name, const QString& user, const QString& group) ++{ ++ // Zip files have no explicit directories, they are implicitly created during extraction time ++ // when file entries have paths in them. ++ // However, to support empty directories, we must create a dummy file entry which ends with '/'. ++ QString dirName = name; ++ if (!name.endsWith("/")) ++ dirName = dirName.append('/'); ++ ++ mode_t perm = 040755; ++ time_t the_time = time(0); ++ return writeFile(dirName, user, group, 0, perm, the_time, the_time, the_time, 0); ++} ++ + // Doesn't need to be reimplemented anymore. Remove for KDE-4.0 + bool KZip::writeFile( const QString& name, const QString& user, const QString& group, uint size, const char* data ) + { +@@ -1114,7 +1128,7 @@ + } + + // delete entries in the filelist with the same filename as the one we want +- // to save, so that we don´t have duplicate file entries when viewing the zip ++ // to save, so that we don�t have duplicate file entries when viewing the zip + // with konqi... + // CAUTION: the old file itself is still in the zip and won't be removed !!! + QPtrListIterator it( d->m_fileList ); +diff -up kdelibs-3.5.10/kio/kio/kzip.h.orig kdelibs-3.5.10/kio/kio/kzip.h +--- kdelibs-3.5.10/kio/kio/kzip.h.orig 2009-12-09 19:35:42.000000000 +0100 ++++ kdelibs-3.5.10/kio/kio/kzip.h 2009-12-09 19:35:48.000000000 +0100 +@@ -191,10 +191,7 @@ protected: + /// Closes the archive + virtual bool closeArchive(); + +- /** +- * @internal Not needed for zip +- */ +- virtual bool writeDir( const QString& name, const QString& user, const QString& group) { Q_UNUSED(name); Q_UNUSED(user); Q_UNUSED(group); return true; } ++ virtual bool writeDir(const QString& name, const QString& user, const QString& group); + // TODO(BIC) uncomment and make virtual for KDE 4. + // bool writeDir( const QString& name, const QString& user, const QString& group, + // mode_t perm, time_t atime, time_t mtime, time_t ctime ); diff --git a/opensuse/core/tdelibs/kdelibs-3.5.10-latex-syntax-kile-2.0.3.patch b/opensuse/core/tdelibs/kdelibs-3.5.10-latex-syntax-kile-2.0.3.patch new file mode 100644 index 000000000..450dd1fe8 --- /dev/null +++ b/opensuse/core/tdelibs/kdelibs-3.5.10-latex-syntax-kile-2.0.3.patch @@ -0,0 +1,143 @@ +diff -ur kdelibs-3.5.10/kate/data/latex.xml kdelibs-3.5.10-latex-syntax-kile-2.0.3/kate/data/latex.xml +--- kdelibs-3.5.10/kate/data/latex.xml 2007-05-14 09:52:27.000000000 +0200 ++++ kdelibs-3.5.10-latex-syntax-kile-2.0.3/kate/data/latex.xml 2008-12-05 14:08:28.000000000 +0100 +@@ -1,16 +1,18 @@ + + +- ++ + + + + + + +- ++ + ++ + + ++ + + + +@@ -22,6 +24,11 @@ + + + ++ ++ ++ ++ ++ + + + +@@ -59,9 +66,46 @@ + + + ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + + +- ++ + + + +@@ -137,8 +181,9 @@ + + + +- + ++ ++ + + + +@@ -228,6 +273,28 @@ + + + ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ + + + +@@ -315,11 +382,18 @@ + + + ++ ++ + + + + + ++ ++ ++ ++ ++ + + + diff --git a/opensuse/core/tdelibs/kdelibs-3.5.10-ossl-1.x.patch b/opensuse/core/tdelibs/kdelibs-3.5.10-ossl-1.x.patch new file mode 100644 index 000000000..a948b884a --- /dev/null +++ b/opensuse/core/tdelibs/kdelibs-3.5.10-ossl-1.x.patch @@ -0,0 +1,180 @@ +diff -up kdelibs-3.5.10/kio/kssl/kopenssl.cc.ossl-1.x kdelibs-3.5.10/kio/kssl/kopenssl.cc +--- kdelibs-3.5.10/kio/kssl/kopenssl.cc.ossl-1.x 2009-09-04 23:10:53.000000000 +0200 ++++ kdelibs-3.5.10/kio/kssl/kopenssl.cc 2009-09-04 23:10:53.000000000 +0200 +@@ -96,9 +96,14 @@ static int (*K_BIO_write) (BIO *b, cons + static int (*K_PEM_ASN1_write_bio) (int (*)(),const char *,BIO *,char *, + const EVP_CIPHER *,unsigned char *,int , + pem_password_cb *, void *) = 0L; ++#if OPENSSL_VERSION_NUMBER >= 0x10000000L ++static int (*K_ASN1_item_i2d_fp)(ASN1_ITEM *,FILE *,unsigned char *) = 0L; ++static ASN1_ITEM *K_NETSCAPE_X509_it = 0L; ++#else + static ASN1_METHOD* (*K_X509_asn1_meth) (void) = 0L; + static int (*K_ASN1_i2d_fp)(int (*)(),FILE *,unsigned char *) = 0L; + static int (*K_i2d_ASN1_HEADER)(ASN1_HEADER *, unsigned char **) = 0L; ++#endif + static int (*K_X509_print_fp) (FILE *, X509*) = 0L; + static int (*K_i2d_PKCS12) (PKCS12*, unsigned char**) = 0L; + static int (*K_i2d_PKCS12_fp) (FILE *, PKCS12*) = 0L; +@@ -430,9 +435,14 @@ KConfig *cfg; + K_BIO_ctrl = (long (*) (BIO *,int,long,void *)) _cryptoLib->symbol("BIO_ctrl"); + K_BIO_write = (int (*) (BIO *b, const void *data, int len)) _cryptoLib->symbol("BIO_write"); + K_PEM_ASN1_write_bio = (int (*)(int (*)(), const char *,BIO*, char*, const EVP_CIPHER *, unsigned char *, int, pem_password_cb *, void *)) _cryptoLib->symbol("PEM_ASN1_write_bio"); ++#if OPENSSL_VERSION_NUMBER >= 0x10000000L ++ K_ASN1_item_i2d_fp = (int (*)(ASN1_ITEM *, FILE*, unsigned char *)) _cryptoLib->symbol("ASN1_item_i2d_fp"); ++ K_NETSCAPE_X509_it = (ASN1_ITEM *) _cryptoLib->symbol("NETSCAPE_X509_it"); ++#else + K_X509_asn1_meth = (ASN1_METHOD* (*)(void)) _cryptoLib->symbol("X509_asn1_meth"); + K_ASN1_i2d_fp = (int (*)(int (*)(), FILE*, unsigned char *)) _cryptoLib->symbol("ASN1_i2d_fp"); + K_i2d_ASN1_HEADER = (int (*)(ASN1_HEADER *, unsigned char **)) _cryptoLib->symbol("i2d_ASN1_HEADER"); ++#endif + K_X509_print_fp = (int (*)(FILE*, X509*)) _cryptoLib->symbol("X509_print_fp"); + K_i2d_PKCS12 = (int (*)(PKCS12*, unsigned char**)) _cryptoLib->symbol("i2d_PKCS12"); + K_i2d_PKCS12_fp = (int (*)(FILE *, PKCS12*)) _cryptoLib->symbol("i2d_PKCS12_fp"); +@@ -594,7 +604,7 @@ KConfig *cfg; + K_SSL_set_session = (int (*)(SSL*,SSL_SESSION*)) _sslLib->symbol("SSL_set_session"); + K_d2i_SSL_SESSION = (SSL_SESSION* (*)(SSL_SESSION**,unsigned char**, long)) _sslLib->symbol("d2i_SSL_SESSION"); + K_i2d_SSL_SESSION = (int (*)(SSL_SESSION*,unsigned char**)) _sslLib->symbol("i2d_SSL_SESSION"); +- K_SSL_get_ciphers = (STACK *(*)(const SSL*)) _sslLib->symbol("SSL_get_ciphers"); ++ K_SSL_get_ciphers = (STACK_OF(SSL_CIPHER) *(*)(const SSL*)) _sslLib->symbol("SSL_get_ciphers"); + #endif + + +@@ -982,7 +992,13 @@ int KOpenSSLProxy::PEM_write_bio_X509(BI + else return -1; + } + +- ++#if OPENSSL_VERSION_NUMBER >= 0x10000000L ++int KOpenSSLProxy::ASN1_i2d_fp(FILE *out,unsigned char *x) { ++ if (K_ASN1_item_i2d_fp && K_NETSCAPE_X509_it) ++ return (K_ASN1_item_i2d_fp)(K_NETSCAPE_X509_it, out, x); ++ else return -1; ++} ++#else + ASN1_METHOD *KOpenSSLProxy::X509_asn1_meth(void) { + if (K_X509_asn1_meth) return (K_X509_asn1_meth)(); + else return 0L; +@@ -994,7 +1010,7 @@ int KOpenSSLProxy::ASN1_i2d_fp(FILE *out + return (K_ASN1_i2d_fp)((int (*)())K_i2d_ASN1_HEADER, out, x); + else return -1; + } +- ++#endif + + int KOpenSSLProxy::X509_print(FILE *fp, X509 *x) { + if (K_X509_print_fp) return (K_X509_print_fp)(fp, x); +diff -up kdelibs-3.5.10/kio/kssl/kopenssl.h.ossl-1.x kdelibs-3.5.10/kio/kssl/kopenssl.h +--- kdelibs-3.5.10/kio/kssl/kopenssl.h.ossl-1.x 2006-07-22 10:16:39.000000000 +0200 ++++ kdelibs-3.5.10/kio/kssl/kopenssl.h 2009-09-04 23:10:53.000000000 +0200 +@@ -48,6 +48,9 @@ class KOpenSSLProxyPrivate; + #include + #include + #undef crypt ++#if OPENSSL_VERSION_NUMBER >= 0x10000000L ++#define STACK _STACK ++#endif + #endif + + #include +@@ -446,12 +449,12 @@ public: + */ + int PEM_write_bio_X509(BIO *bp, X509 *x); + +- ++#if OPENSSL_VERSION_NUMBER < 0x10000000L + /* + * X509_asn1_meth - used for netscape output + */ + ASN1_METHOD *X509_asn1_meth(); +- ++#endif + + /* + * ASN1_i2d_fp - used for netscape output +@@ -531,6 +534,9 @@ public: + */ + void sk_free(STACK *s); + ++#if OPENSSL_VERSION_NUMBER >= 0x10000000L ++ void sk_free(void *s) { return sk_free(reinterpret_cast(s)); } ++#endif + + /* + * Number of elements in the stack +@@ -543,6 +549,9 @@ public: + */ + char *sk_value(STACK *s, int n); + ++#if OPENSSL_VERSION_NUMBER >= 0x10000000L ++ char *sk_value(void *s, int n) { return sk_value(reinterpret_cast(s), n); } ++#endif + + /* + * Create a new stack +@@ -555,6 +564,9 @@ public: + */ + int sk_push(STACK *s, char *d); + ++#if OPENSSL_VERSION_NUMBER >= 0x10000000L ++ int sk_push(void *s, void *d) { return sk_push(reinterpret_cast(s), reinterpret_cast(d)); } ++#endif + + /* + * Duplicate the stack +diff -up kdelibs-3.5.10/kio/kssl/ksmimecrypto.cc.ossl-1.x kdelibs-3.5.10/kio/kssl/ksmimecrypto.cc +--- kdelibs-3.5.10/kio/kssl/ksmimecrypto.cc.ossl-1.x 2005-10-10 17:05:44.000000000 +0200 ++++ kdelibs-3.5.10/kio/kssl/ksmimecrypto.cc 2009-09-04 23:10:53.000000000 +0200 +@@ -87,7 +87,7 @@ KSMIMECryptoPrivate::KSMIMECryptoPrivate + + + STACK_OF(X509) *KSMIMECryptoPrivate::certsToX509(QPtrList &certs) { +- STACK_OF(X509) *x509 = sk_new(NULL); ++ STACK_OF(X509) *x509 = reinterpret_cast(sk_new(NULL)); + KSSLCertificate *cert = certs.first(); + while(cert) { + sk_X509_push(x509, cert->getCert()); +diff -up kdelibs-3.5.10/kio/kssl/ksslcertificate.cc.ossl-1.x kdelibs-3.5.10/kio/kssl/ksslcertificate.cc +--- kdelibs-3.5.10/kio/kssl/ksslcertificate.cc.ossl-1.x 2006-01-19 18:06:12.000000000 +0100 ++++ kdelibs-3.5.10/kio/kssl/ksslcertificate.cc 2009-09-04 23:10:53.000000000 +0200 +@@ -1003,17 +1003,31 @@ return qba; + QByteArray KSSLCertificate::toNetscape() { + QByteArray qba; + #ifdef KSSL_HAVE_SSL +-ASN1_HEADER ah; +-ASN1_OCTET_STRING os; +-KTempFile ktf; ++#if OPENSSL_VERSION_NUMBER >= 0x10000000L ++ NETSCAPE_X509 nx; ++ ASN1_OCTET_STRING hdr; ++#else ++ ASN1_HEADER ah; ++ ASN1_OCTET_STRING os; ++#endif ++ KTempFile ktf; + +- os.data = (unsigned char *)NETSCAPE_CERT_HDR; +- os.length = strlen(NETSCAPE_CERT_HDR); +- ah.header = &os; +- ah.data = (char *)getCert(); +- ah.meth = d->kossl->X509_asn1_meth(); ++#if OPENSSL_VERSION_NUMBER >= 0x10000000L ++ hdr.data = (unsigned char *)NETSCAPE_CERT_HDR; ++ hdr.length = strlen(NETSCAPE_CERT_HDR); ++ nx.header = &hdr; ++ nx.cert = getCert(); ++ ++ d->kossl->ASN1_i2d_fp(ktf.fstream(),(unsigned char *)&nx); ++#else ++ os.data = (unsigned char *)NETSCAPE_CERT_HDR; ++ os.length = strlen(NETSCAPE_CERT_HDR); ++ ah.header = &os; ++ ah.data = (char *)getCert(); ++ ah.meth = d->kossl->X509_asn1_meth(); + +- d->kossl->ASN1_i2d_fp(ktf.fstream(),(unsigned char *)&ah); ++ d->kossl->ASN1_i2d_fp(ktf.fstream(),(unsigned char *)&ah); ++#endif + + ktf.close(); + diff --git a/opensuse/core/tdelibs/kdelibs-3.5.10.tar.bz2 b/opensuse/core/tdelibs/kdelibs-3.5.10.tar.bz2 new file mode 100644 index 000000000..914cfc6a4 Binary files /dev/null and b/opensuse/core/tdelibs/kdelibs-3.5.10.tar.bz2 differ diff --git a/opensuse/core/tdelibs/kdelibs-3.5.12.99.tar.bz2 b/opensuse/core/tdelibs/kdelibs-3.5.12.99.tar.bz2 new file mode 100644 index 000000000..9d4c96c44 Binary files /dev/null and b/opensuse/core/tdelibs/kdelibs-3.5.12.99.tar.bz2 differ diff --git a/opensuse/core/tdelibs/kdelibs-3.5.4-CVE-2009-1690.patch b/opensuse/core/tdelibs/kdelibs-3.5.4-CVE-2009-1690.patch new file mode 100644 index 000000000..2972d0ebf --- /dev/null +++ b/opensuse/core/tdelibs/kdelibs-3.5.4-CVE-2009-1690.patch @@ -0,0 +1,545 @@ +--- kdelibs-3.5.4/khtml/html/RefPtr.h.CVE-2009-1690 2009-06-17 14:19:00.000000000 +0200 ++++ kdelibs-3.5.4/khtml/html/RefPtr.h 2009-06-17 14:19:00.000000000 +0200 +@@ -0,0 +1,202 @@ ++// -*- mode: c++; c-basic-offset: 4 -*- ++/* ++ * Copyright (C) 2005, 2006, 2007, 2008 Apple Inc. All rights reserved. ++ * ++ * This library is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Library General Public ++ * License as published by the Free Software Foundation; either ++ * version 2 of the License, or (at your option) any later version. ++ * ++ * This library is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ * Library General Public License for more details. ++ * ++ * You should have received a copy of the GNU Library General Public License ++ * along with this library; see the file COPYING.LIB. If not, write to ++ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ++ * Boston, MA 02110-1301, USA. ++ * ++ */ ++ ++#ifndef WTF_RefPtr_h ++#define WTF_RefPtr_h ++ ++#include ++#include "AlwaysInline.h" ++ ++namespace WTF { ++ ++ enum PlacementNewAdoptType { PlacementNewAdopt }; ++ ++ template class PassRefPtr; ++ ++ enum HashTableDeletedValueType { HashTableDeletedValue }; ++ ++ template class RefPtr { ++ public: ++ RefPtr() : m_ptr(0) { } ++ RefPtr(T* ptr) : m_ptr(ptr) { if (ptr) ptr->ref(); } ++ RefPtr(const RefPtr& o) : m_ptr(o.m_ptr) { if (T* ptr = m_ptr) ptr->ref(); } ++ // see comment in PassRefPtr.h for why this takes const reference ++ template RefPtr(const PassRefPtr&); ++ ++ // Special constructor for cases where we overwrite an object in place. ++ RefPtr(PlacementNewAdoptType) { } ++ ++ // Hash table deleted values, which are only constructed and never copied or destroyed. ++ RefPtr(HashTableDeletedValueType) : m_ptr(hashTableDeletedValue()) { } ++ bool isHashTableDeletedValue() const { return m_ptr == hashTableDeletedValue(); } ++ ++ ~RefPtr() { if (T* ptr = m_ptr) ptr->deref(); } ++ ++ template RefPtr(const RefPtr& o) : m_ptr(o.get()) { if (T* ptr = m_ptr) ptr->ref(); } ++ ++ T* get() const { return m_ptr; } ++ ++ void clear() { if (T* ptr = m_ptr) ptr->deref(); m_ptr = 0; } ++ PassRefPtr release() { PassRefPtr tmp = adoptRef(m_ptr); m_ptr = 0; return tmp; } ++ ++ T& operator*() const { return *m_ptr; } ++ ALWAYS_INLINE T* operator->() const { return m_ptr; } ++ ++ bool operator!() const { return !m_ptr; } ++ ++ // This conversion operator allows implicit conversion to bool but not to other integer types. ++ typedef T* RefPtr::*UnspecifiedBoolType; ++ operator UnspecifiedBoolType() const { return m_ptr ? &RefPtr::m_ptr : 0; } ++ ++ RefPtr& operator=(const RefPtr&); ++ RefPtr& operator=(T*); ++ RefPtr& operator=(const PassRefPtr&); ++ template RefPtr& operator=(const RefPtr&); ++ template RefPtr& operator=(const PassRefPtr&); ++ ++ void swap(RefPtr&); ++ ++ private: ++ static T* hashTableDeletedValue() { return reinterpret_cast(-1); } ++ ++ T* m_ptr; ++ }; ++ ++ template template inline RefPtr::RefPtr(const PassRefPtr& o) ++ : m_ptr(o.releaseRef()) ++ { ++ } ++ ++ template inline RefPtr& RefPtr::operator=(const RefPtr& o) ++ { ++ T* optr = o.get(); ++ if (optr) ++ optr->ref(); ++ T* ptr = m_ptr; ++ m_ptr = optr; ++ if (ptr) ++ ptr->deref(); ++ return *this; ++ } ++ ++ template template inline RefPtr& RefPtr::operator=(const RefPtr& o) ++ { ++ T* optr = o.get(); ++ if (optr) ++ optr->ref(); ++ T* ptr = m_ptr; ++ m_ptr = optr; ++ if (ptr) ++ ptr->deref(); ++ return *this; ++ } ++ ++ template inline RefPtr& RefPtr::operator=(T* optr) ++ { ++ if (optr) ++ optr->ref(); ++ T* ptr = m_ptr; ++ m_ptr = optr; ++ if (ptr) ++ ptr->deref(); ++ return *this; ++ } ++ ++ template inline RefPtr& RefPtr::operator=(const PassRefPtr& o) ++ { ++ T* ptr = m_ptr; ++ m_ptr = o.releaseRef(); ++ if (ptr) ++ ptr->deref(); ++ return *this; ++ } ++ ++ template template inline RefPtr& RefPtr::operator=(const PassRefPtr& o) ++ { ++ T* ptr = m_ptr; ++ m_ptr = o.releaseRef(); ++ if (ptr) ++ ptr->deref(); ++ return *this; ++ } ++ ++ template inline void RefPtr::swap(RefPtr& o) ++ { ++ std::swap(m_ptr, o.m_ptr); ++ } ++ ++ template inline void swap(RefPtr& a, RefPtr& b) ++ { ++ a.swap(b); ++ } ++ ++ template inline bool operator==(const RefPtr& a, const RefPtr& b) ++ { ++ return a.get() == b.get(); ++ } ++ ++ template inline bool operator==(const RefPtr& a, U* b) ++ { ++ return a.get() == b; ++ } ++ ++ template inline bool operator==(T* a, const RefPtr& b) ++ { ++ return a == b.get(); ++ } ++ ++ template inline bool operator!=(const RefPtr& a, const RefPtr& b) ++ { ++ return a.get() != b.get(); ++ } ++ ++ template inline bool operator!=(const RefPtr& a, U* b) ++ { ++ return a.get() != b; ++ } ++ ++ template inline bool operator!=(T* a, const RefPtr& b) ++ { ++ return a != b.get(); ++ } ++ ++ template inline RefPtr static_pointer_cast(const RefPtr& p) ++ { ++ return RefPtr(static_cast(p.get())); ++ } ++ ++ template inline RefPtr const_pointer_cast(const RefPtr& p) ++ { ++ return RefPtr(const_cast(p.get())); ++ } ++ ++ template inline T* getPtr(const RefPtr& p) ++ { ++ return p.get(); ++ } ++ ++} // namespace WTF ++ ++using WTF::RefPtr; ++using WTF::static_pointer_cast; ++using WTF::const_pointer_cast; ++ ++#endif // WTF_RefPtr_h +--- kdelibs-3.5.4/khtml/html/htmlparser.cpp.CVE-2009-1690 2006-07-22 10:16:43.000000000 +0200 ++++ kdelibs-3.5.4/khtml/html/htmlparser.cpp 2009-06-17 11:51:15.000000000 +0200 +@@ -199,7 +199,6 @@ + + form = 0; + map = 0; +- head = 0; + end = false; + isindex = 0; + +@@ -616,8 +615,7 @@ + case ID_BASE: + if(!head) { + head = new HTMLHeadElementImpl(document); +- e = head; +- insertNode(e); ++ insertNode(head.get()); + handled = true; + } + break; +@@ -839,7 +837,7 @@ + case ID_HEAD: + if(!head && current->id() == ID_HTML) { + head = new HTMLHeadElementImpl(document); +- n = head; ++ n = head.get(); + } + break; + case ID_BODY: +@@ -1679,12 +1677,12 @@ + head = new HTMLHeadElementImpl(document); + HTMLElementImpl *body = doc()->body(); + int exceptioncode = 0; +- doc()->firstChild()->insertBefore(head, body, exceptioncode); ++ doc()->firstChild()->insertBefore(head.get(), body, exceptioncode); + if ( exceptioncode ) { + #ifdef PARSER_DEBUG + kdDebug( 6035 ) << "creation of head failed!!!!" << endl; + #endif +- delete head; ++ delete head.get(); + head = 0; + } + } +--- kdelibs-3.5.4/khtml/html/Platform.h.CVE-2009-1690 2009-06-17 14:19:07.000000000 +0200 ++++ kdelibs-3.5.4/khtml/html/Platform.h 2009-06-17 14:19:07.000000000 +0200 +@@ -0,0 +1,218 @@ ++/* -*- mode: c++; c-basic-offset: 4 -*- */ ++/* ++ * Copyright (C) 2006 Apple Computer, Inc. All rights reserved. ++ * ++ * Redistribution and use in source and binary forms, with or without ++ * modification, are permitted provided that the following conditions ++ * are met: ++ * 1. Redistributions of source code must retain the above copyright ++ * notice, this list of conditions and the following disclaimer. ++ * 2. Redistributions in binary form must reproduce the above copyright ++ * notice, this list of conditions and the following disclaimer in the ++ * documentation and/or other materials provided with the distribution. ++ * ++ * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY ++ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE ++ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR ++ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR ++ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, ++ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, ++ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR ++ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY ++ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ++ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ++ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ++ */ ++ ++#ifndef WTF_Platform_h ++#define WTF_Platform_h ++ ++/* Force KDE build here in our tree... */ ++#ifndef BUILDING_KDE__ ++#define BUILDING_KDE__ 1 ++#endif ++ ++/* PLATFORM handles OS, operating environment, graphics API, and CPU */ ++#define PLATFORM(WTF_FEATURE) (defined( WTF_PLATFORM_##WTF_FEATURE ) && WTF_PLATFORM_##WTF_FEATURE) ++#define COMPILER(WTF_FEATURE) (defined( WTF_COMPILER_##WTF_FEATURE ) && WTF_COMPILER_##WTF_FEATURE) ++#define HAVE(WTF_FEATURE) (defined( HAVE_##WTF_FEATURE ) && HAVE_##WTF_FEATURE) ++#define USE(WTF_FEATURE) (defined( WTF_USE_##WTF_FEATURE ) && WTF_USE_##WTF_FEATURE) ++#define ENABLE(WTF_FEATURE) (defined( ENABLE_##WTF_FEATURE ) && ENABLE_##WTF_FEATURE) ++ ++/* Operating systems - low-level dependencies */ ++ ++/* PLATFORM(DARWIN) */ ++/* Operating system level dependencies for Mac OS X / Darwin that should */ ++/* be used regardless of operating environment */ ++#ifdef __APPLE__ ++#define WTF_PLATFORM_DARWIN 1 ++#endif ++ ++/* PLATFORM(WIN_OS) */ ++/* Operating system level dependencies for Windows that should be used */ ++/* regardless of operating environment */ ++#if defined(WIN32) || defined(_WIN32) ++#define WTF_PLATFORM_WIN_OS 1 ++#endif ++ ++/* PLATFORM(UNIX) */ ++/* Operating system level dependencies for Unix-like systems that */ ++/* should be used regardless of operating environment */ ++/* (includes PLATFORM(DARWIN)) */ ++#if defined(__APPLE__) \ ++ || defined(unix) \ ++ || defined(__unix) \ ++ || defined(__unix__) \ ++ || defined (__NetBSD__) \ ++ || defined(_AIX) ++#define WTF_PLATFORM_UNIX 1 ++#endif ++ ++/* PLATFORM(SOLARIS_OS) */ ++/* Operating system level dependencies for Sun (Open)Solaris 10. */ ++/* Studio 12 on Solaris defines __SunOS; gcc defines __sun__; */ ++/* Both compilers define __sun and sun. */ ++#if defined(__sun) || defined(sun) ++#define WTF_PLATFORM_SOLARIS_OS 1 ++#endif ++ ++/* Operating environments */ ++ ++/* I made the BUILDING_KDE__ macro up for the KDE build system to define */ ++ ++/* PLATFORM(KDE) */ ++/* PLATFORM(MAC) */ ++/* PLATFORM(WIN) */ ++#if BUILDING_KDE__ ++#define WTF_PLATFORM_KDE 1 ++#elif PLATFORM(DARWIN) ++#define WTF_PLATFORM_MAC 1 ++#elif PLATFORM(WIN_OS) ++#define WTF_PLATFORM_WIN 1 ++#endif ++#if defined(BUILDING_GDK__) ++#define WTF_PLATFORM_GDK 1 ++#endif ++ ++ ++/* CPU */ ++ ++/* PLATFORM(PPC) */ ++#if defined(__ppc__) \ ++ || defined(__PPC__) \ ++ || defined(__powerpc__) \ ++ || defined(__powerpc) \ ++ || defined(__POWERPC__) \ ++ || defined(_M_PPC) \ ++ || defined(__PPC) ++#define WTF_PLATFORM_PPC 1 ++#define WTF_PLATFORM_BIG_ENDIAN 1 ++#endif ++ ++/* PLATFORM(PPC64) */ ++#if defined(__ppc64__) \ ++ || defined(__PPC64__) ++#define WTF_PLATFORM_PPC64 1 ++#define WTF_PLATFORM_BIG_ENDIAN 1 ++#endif ++ ++#if defined(arm) ++#define WTF_PLATFORM_ARM 1 ++#if defined(__ARMEB__) ++#define WTF_PLATFORM_BIG_ENDIAN 1 ++#elif !defined(__ARM_EABI__) && !defined(__ARMEB__) ++#define WTF_PLATFORM_MIDDLE_ENDIAN 1 ++#endif ++#if !defined(__ARM_EABI__) ++#define WTF_PLATFORM_FORCE_PACK 1 ++#endif ++#endif ++ ++/* PLATFORM(X86) */ ++#if defined(__i386__) \ ++ || defined(i386) \ ++ || defined(_M_IX86) \ ++ || defined(_X86_) \ ++ || defined(__THW_INTEL) ++#define WTF_PLATFORM_X86 1 ++#endif ++ ++/* PLATFORM(X86_64) */ ++#if defined(__x86_64__) \ ++ || defined(__ia64__) ++#define WTF_PLATFORM_X86_64 1 ++#endif ++ ++/* PLATFORM(SPARC) */ ++#if defined(sparc) ++#define WTF_PLATFORM_SPARC 1 ++#endif ++ ++/* Compiler */ ++ ++/* COMPILER(CWP) */ ++#if defined(__MWERKS__) ++#define WTF_COMPILER_CWP 1 ++#endif ++ ++/* COMPILER(MSVC) */ ++#if defined(_MSC_VER) ++#define WTF_COMPILER_MSVC 1 ++#endif ++ ++/* COMPILER(GCC) */ ++#if defined(__GNUC__) ++#define WTF_COMPILER_GCC 1 ++#endif ++ ++/* COMPILER(SUNPRO) */ ++#if defined(__SUNPRO_CC) ++#define WTF_COMPILER_SUNPRO 1 ++#endif ++ ++/* COMPILER(BORLAND) */ ++/* not really fully supported - is this relevant any more? */ ++#if defined(__BORLANDC__) ++#define WTF_COMPILER_BORLAND 1 ++#endif ++ ++/* COMPILER(CYGWIN) */ ++/* not really fully supported - is this relevant any more? */ ++#if defined(__CYGWIN__) ++#define WTF_COMPILER_CYGWIN 1 ++#endif ++ ++/* multiple threads only supported on Mac for now */ ++#if PLATFORM(MAC) ++#ifndef WTF_USE_MULTIPLE_THREADS ++#define WTF_USE_MULTIPLE_THREADS 1 ++#endif ++#ifndef WTF_USE_BINDINGS ++#define WTF_USE_BINDINGS 1 ++#endif ++#endif ++ ++/* for Unicode, KDE uses Qt, everything else uses ICU */ ++#if PLATFORM(KDE) || PLATFORM(QT) ++#define WTF_USE_QT4_UNICODE 1 ++#elif PLATFORM(SYMBIAN) ++#define WTF_USE_SYMBIAN_UNICODE 1 ++#else ++#define WTF_USE_ICU_UNICODE 1 ++#endif ++ ++#if PLATFORM(MAC) ++#define WTF_PLATFORM_CF 1 ++#endif ++ ++#if PLATFORM(WIN) ++#define WTF_USE_WININET 1 ++#endif ++ ++#if PLATFORM(GDK) ++#define WTF_USE_CURL 1 ++#endif ++ ++/* ENABLE macro defaults */ ++ ++#endif /* WTF_Platform_h */ +--- kdelibs-3.5.4/khtml/html/AlwaysInline.h.CVE-2009-1690 2009-06-17 14:18:52.000000000 +0200 ++++ kdelibs-3.5.4/khtml/html/AlwaysInline.h 2009-06-17 13:56:36.000000000 +0200 +@@ -0,0 +1,49 @@ ++/* ++ * Copyright (C) 2005, 2007 Apple Inc. All rights reserved. ++ * ++ * This library is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Library General Public ++ * License as published by the Free Software Foundation; either ++ * version 2 of the License, or (at your option) any later version. ++ * ++ * This library is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ * Library General Public License for more details. ++ * ++ * You should have received a copy of the GNU Library General Public License ++ * along with this library; see the file COPYING.LIB. If not, write to ++ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, ++ * Boston, MA 02110-1301, USA. ++ * ++ */ ++ ++#include "html/Platform.h" ++ ++ ++#ifndef ALWAYS_INLINE ++#if COMPILER(GCC) && defined(NDEBUG) && __GNUC__ > 3 ++#define ALWAYS_INLINE inline __attribute__ ((__always_inline__)) ++#elif COMPILER(MSVC) && defined(NDEBUG) ++#define ALWAYS_INLINE __forceinline ++#else ++#define ALWAYS_INLINE inline ++#endif ++#endif ++ ++#ifndef ALWAYS_INLINE_INTO ++#if COMPILER(GCC) && defined(NDEBUG) && ((__GNUC__ == 4 && __GNUC_MINOR__ >= 1) || __GNUC__ > 4) ++#define ALWAYS_INLINE_INTO __attribute__ ((__flatten__)) ++#else ++#define ALWAYS_INLINE_INTO ++#endif ++#endif ++ ++ ++#ifndef NEVER_INLINE ++#if COMPILER(GCC) && __GNUC__ > 3 ++#define NEVER_INLINE __attribute__ ((__noinline__)) ++#else ++#define NEVER_INLINE ++#endif ++#endif +--- kdelibs-3.5.4/khtml/html/htmlparser.h.CVE-2009-1690 2005-10-10 17:06:04.000000000 +0200 ++++ kdelibs-3.5.4/khtml/html/htmlparser.h 2009-06-17 14:42:27.000000000 +0200 +@@ -38,10 +38,10 @@ + #include + #endif + +- + #include "dom/dom_string.h" + #include "xml/dom_nodeimpl.h" + #include "html/html_documentimpl.h" ++#include "html/RefPtr.h" + + class KHTMLView; + class HTMLStackElem; +@@ -148,7 +148,7 @@ + /* + * the head element. Needed for crappy html which defines after + */ +- DOM::HTMLHeadElementImpl *head; ++ RefPtr head; + + /* + * a possible element in the head. Compatibility hack for diff --git a/opensuse/core/tdelibs/kdelibs3-gcc-4.1-miscompile.diff b/opensuse/core/tdelibs/kdelibs3-gcc-4.1-miscompile.diff new file mode 100644 index 000000000..cad4ceedd --- /dev/null +++ b/opensuse/core/tdelibs/kdelibs3-gcc-4.1-miscompile.diff @@ -0,0 +1,15 @@ +Index: kdecore/kwinmodule.cpp +=================================================================== +--- kdecore/kwinmodule.cpp.orig ++++ kdecore/kwinmodule.cpp +@@ -436,7 +436,9 @@ QRect KWinModule::workArea( const QValue + if ( strut.bottom > 0 ) + r.setBottom( r.bottom() - (int) strut.bottom ); + +- a = a.intersect(r); ++ QRect tmp; ++ tmp = a.intersect(r); ++ a = tmp; + } + return a; + } diff --git a/opensuse/core/tdelibs/kdelibs3-hicolor-scalable-sizes.patch b/opensuse/core/tdelibs/kdelibs3-hicolor-scalable-sizes.patch new file mode 100644 index 000000000..9f06adc93 --- /dev/null +++ b/opensuse/core/tdelibs/kdelibs3-hicolor-scalable-sizes.patch @@ -0,0 +1,50 @@ +diff -uNr kdelibs-3.5.1.old/pics/hicolor/index.theme kdelibs-3.5.1/pics/hicolor/index.theme +--- kdelibs-3.5.1.old/pics/hicolor/index.theme 2006-01-20 07:53:04.000000000 +0100 ++++ kdelibs-3.5.1/pics/hicolor/index.theme 2006-04-12 20:18:31.907163700 +0200 +@@ -314,36 +314,36 @@ + Type=Threshold + + [scalable/actions] +-MinSize=1 +-Size=128 ++MinSize=32 ++Size=48 + MaxSize=256 + Context=Actions + Type=Scalable + + [scalable/apps] +-MinSize=1 +-Size=128 ++MinSize=32 ++Size=48 + MaxSize=256 + Context=Applications + Type=Scalable + + [scalable/devices] +-MinSize=1 +-Size=128 ++MinSize=32 ++Size=48 + MaxSize=256 + Context=Devices + Type=Scalable + + [scalable/filesystems] +-MinSize=1 +-Size=128 ++MinSize=32 ++Size=48 + MaxSize=256 + Context=FileSystems + Type=Scalable + + [scalable/mimetypes] +-MinSize=1 +-Size=128 ++MinSize=32 ++Size=48 + MaxSize=256 + Context=MimeTypes + Type=Scalable diff --git a/opensuse/core/tdelibs/kdelibs_networkstatus_branch2.diff b/opensuse/core/tdelibs/kdelibs_networkstatus_branch2.diff new file mode 100644 index 000000000..069dffbea --- /dev/null +++ b/opensuse/core/tdelibs/kdelibs_networkstatus_branch2.diff @@ -0,0 +1,69 @@ +Index: kioslave/http/http.cc +=================================================================== +--- kioslave/http/http.cc.orig ++++ kioslave/http/http.cc +@@ -1804,9 +1804,11 @@ bool HTTPProtocol::isOffline(const KURL + QByteArray reply; + + QDataStream stream(params, IO_WriteOnly); +- stream << url.url(); + +- if ( dcopClient()->call( "kded", "networkstatus", "status(QString)", ++ if ( url.host() == QString::fromLatin1("localhost") || url.host() == QString::fromLatin1("127.0.0.1") || url.host() == QString::fromLatin1("::") ) { ++ return false; ++ } ++ if ( dcopClient()->call( "kded", "networkstatus", "status()", + params, replyType, reply ) && (replyType == "int") ) + { + int result; +@@ -2210,6 +2212,11 @@ bool HTTPProtocol::httpOpen() + // Conditional cache hit. (Validate) + } + ++ if (bCacheOnly && bOffline) ++ { ++ error( ERR_OFFLINE_MODE, m_request.url.url() ); ++ return false; ++ } + if (bCacheOnly) + { + error( ERR_DOES_NOT_EXIST, m_request.url.url() ); +@@ -2217,7 +2224,7 @@ bool HTTPProtocol::httpOpen() + } + if (bOffline) + { +- error( ERR_COULD_NOT_CONNECT, m_request.url.url() ); ++ error( ERR_OFFLINE_MODE, m_request.url.url() ); + return false; + } + } +Index: kio/kio/global.cpp +=================================================================== +--- kio/kio/global.cpp.orig ++++ kio/kio/global.cpp +@@ -408,6 +408,9 @@ KIO_EXPORT QString KIO::buildErrorString + case KIO::ERR_POST_DENIED: + result = i18n( "Access to restricted port in POST denied."); + break; ++ case KIO::ERR_OFFLINE_MODE: ++ result = i18n( "Could not access %1.\nOffline mode active.").arg( errorText ); ++ break; + default: + result = i18n( "Unknown error code %1\n%2\nPlease send a full bug report at http://bugs.kde.org." ).arg( errorCode ).arg( errorText ); + break; +Index: kio/kio/global.h +=================================================================== +--- kio/kio/global.h.orig ++++ kio/kio/global.h +@@ -244,8 +244,10 @@ namespace KIO + ERR_UPGRADE_REQUIRED = 64, // A transport upgrade is required to access this + // object. For instance, TLS is demanded by + // the server in order to continue. +- ERR_POST_DENIED = 65 // Issued when trying to POST data to a certain Ports ++ ERR_POST_DENIED = 65, // Issued when trying to POST data to a certain Ports + // see job.cpp ++ ERR_OFFLINE_MODE = 66 // Used when an app is in offline mode and a ++ // requested document is unavailable. + }; + + /** diff --git a/opensuse/core/tdelibs/kdemm-20050330.tar.bz2 b/opensuse/core/tdelibs/kdemm-20050330.tar.bz2 new file mode 100644 index 000000000..e71e379e4 Binary files /dev/null and b/opensuse/core/tdelibs/kdemm-20050330.tar.bz2 differ diff --git a/opensuse/core/tdelibs/kdemm-filepreview.diff b/opensuse/core/tdelibs/kdemm-filepreview.diff new file mode 100644 index 000000000..227dc39ec --- /dev/null +++ b/opensuse/core/tdelibs/kdemm-filepreview.diff @@ -0,0 +1,40 @@ +Index: interfaces/kmediaplayer/kfileaudiopreview/Makefile.am +=================================================================== +--- interfaces/kmediaplayer/kfileaudiopreview/Makefile.am.orig ++++ interfaces/kmediaplayer/kfileaudiopreview/Makefile.am +@@ -1,11 +1,11 @@ +-INCLUDES = -I$(top_srcdir)/interfaces/ -I$(top_srcdir)/arts/kde -I$(includedir)/arts $(all_includes) ++INCLUDES = -I$(top_srcdir)/interfaces/ $(all_includes) + METASOURCES = AUTO + + kde_module_LTLIBRARIES = kfileaudiopreview.la + + kfileaudiopreview_la_SOURCES = kfileaudiopreview.cpp + kfileaudiopreview_la_LDFLAGS = $(all_libraries) $(KDE_RPATH) -module -avoid-version -no-undefined +-kfileaudiopreview_la_LIBADD = $(top_builddir)/interfaces/kmediaplayer/libkmediaplayer.la $(top_builddir)/arts/kde/libartskde.la $(LIB_KIO) ++kfileaudiopreview_la_LIBADD = $(top_builddir)/interfaces/kmediaplayer/libkmediaplayer.la $(top_builddir)/kdemm/libkdemm.la $(LIB_KIO) + + noinst_HEADERS = kfileaudiopreview.h + +Index: interfaces/kmediaplayer/kfileaudiopreview/kfileaudiopreview.cpp +=================================================================== +--- interfaces/kmediaplayer/kfileaudiopreview/kfileaudiopreview.cpp.orig ++++ interfaces/kmediaplayer/kfileaudiopreview/kfileaudiopreview.cpp +@@ -13,7 +13,7 @@ + #include + #include + +-#include ++#include + + #include + +@@ -58,7 +58,7 @@ KFileAudioPreview::KFileAudioPreview( QW + { + KGlobal::locale()->insertCatalogue("kfileaudiopreview"); + +- QStringList formats = KDE::PlayObjectFactory::mimeTypes(); ++ QStringList formats = KDE::Multimedia::Factory::self()->playableMimeTypes(); + // ### + QStringList::ConstIterator it = formats.begin(); + for ( ; it != formats.end(); ++it ) diff --git a/opensuse/core/tdelibs/kdemm.diff b/opensuse/core/tdelibs/kdemm.diff new file mode 100644 index 000000000..3d1e3d925 --- /dev/null +++ b/opensuse/core/tdelibs/kdemm.diff @@ -0,0 +1,669 @@ +Index: arts/knotify/knotify.cpp +=================================================================== +--- arts/knotify/knotify.cpp.orig ++++ arts/knotify/knotify.cpp +@@ -5,6 +5,7 @@ + 2000 Matthias Ettrich (ettrich@kde.org) + 2000 Waldo Bastian + 2000-2003 Carsten Pfeiffer ++ 2004 Allan Sandfeld Jensen + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by +@@ -26,21 +27,12 @@ + #include + #include + +-#include +-#ifndef WITHOUT_ARTS +-// aRts headers +-#include +-#include +-#include +-#include +-#include +-#endif +- + // QT headers + #include + #include + #include + #include ++#include + + // KDE headers + #include +@@ -80,15 +72,11 @@ public: + QString externalPlayer; + KProcess *externalPlayerProc; + +-#ifndef WITHOUT_ARTS +- QPtrList playObjects; +- QMap playObjectEventMap; +- KAudioManagerPlay *audioManager; +-#endif ++ QMap playObjectEventMap; + int externalPlayerEventId; + + bool useExternal; +- bool useArts; ++ bool useKDEMM; + int volume; + QTimer *playTimer; + bool inStartup; +@@ -106,12 +94,13 @@ extern "C"{ + KDE_EXPORT int kdemain(int argc, char **argv) + { + KAboutData aboutdata("knotify", I18N_NOOP("KNotify"), +- "3.0", I18N_NOOP("KDE Notification Server"), ++ "4.0", I18N_NOOP("KDE Notification Server"), + KAboutData::License_GPL, "(C) 1997-2003, KDE Developers"); + aboutdata.addAuthor("Carsten Pfeiffer",I18N_NOOP("Current Maintainer"),"pfeiffer@kde.org"); + aboutdata.addAuthor("Christian Esken",0,"esken@kde.org"); + aboutdata.addAuthor("Stefan Westerfeld",I18N_NOOP("Sound support"),"stefan@space.twc.de"); + aboutdata.addAuthor("Charles Samuels",I18N_NOOP("Previous Maintainer"),"charles@kde.org"); ++ aboutdata.addAuthor("Allan Sandfeld Jensen",I18N_NOOP("Conversion to KDEMM"),"kde@carewolf.com"); + + KCmdLineArgs::init( argc, argv, &aboutdata ); + KUniqueApplication::addCmdLineOptions(); +@@ -126,145 +115,36 @@ KDE_EXPORT int kdemain(int argc, char ** + KUniqueApplication app; + app.disableSessionManagement(); + +- // KNotify is started on KDE startup and on demand (using +- // KNotifClient::startDaemon()) whenever a KNotify event occurs. Especially +- // KWin may fire many events (e.g. when a window pops up). When we have +- // problems with aRts or the installation, we might get an infinite loop +- // of knotify crashing, popping up the crashhandler window and kwin firing +- // another event, starting knotify again... +- // We try to prevent this by tracking our startup and offer options to +- // abort this. +- +-#ifndef WITHOUT_ARTS +- KConfigGroup config( KGlobal::config(), "StartProgress" ); +- KConfig artsKCMConfig( "kcmartsrc" ); +- artsKCMConfig.setGroup( "Arts" ); +- bool useArts = artsKCMConfig.readBoolEntry( "StartServer", true ); +- if (useArts) +- useArts = config.readBoolEntry( "Use Arts", useArts ); +- bool ok = config.readBoolEntry( "Arts Init", true ); +- +- if ( useArts && !ok ) +- { +- if ( KMessageBox::questionYesNo( +- 0L, +- i18n("During the previous startup, KNotify crashed while creating " +- "Arts::Dispatcher. Do you want to try again or disable " +- "aRts sound output?\n\n" +- "If you choose to disable aRts output now, you can re-enable " +- "it later or select an alternate sound player " +- "in the System Notifications control panel."), +- i18n("KNotify Problem"), +- i18n("&Try Again"), +- i18n("D&isable aRts Output"), +- "KNotifyStartProgress", +- 0 /* don't call KNotify :) */ +- ) +- == KMessageBox::No ) +- { +- useArts = false; +- } +- } +- +- // when ArtsDispatcher crashes, we know it the next start. +- config.writeEntry( "Arts Init", false ); +- config.writeEntry( "Use Arts", useArts ); +- config.sync(); +- +- KArtsDispatcher *dispatcher = 0; +- if ( useArts ) +- { +- dispatcher = new KArtsDispatcher; +- soundServer = new KArtsServer; +- } +- +- // ok, seemed to work. +- config.writeEntry("Arts Init", useArts ); +- config.sync(); +- +- ok = config.readBoolEntry( "KNotify Init", true ); +- if ( useArts && !ok ) +- { +- if ( KMessageBox::questionYesNo( +- 0L, +- i18n("During the previous startup, KNotify crashed while instantiating " +- "KNotify. Do you want to try again or disable " +- "aRts sound output?\n\n" +- "If you choose to disable aRts output now, you can re-enable " +- "it later or select an alternate sound player " +- "in the System Notifications control panel."), +- i18n("KNotify Problem"), +- i18n("&Try Again"), +- i18n("D&isable aRts Output"), +- "KNotifyStartProgress", +- 0 /* don't call KNotify :) */ +- ) +- == KMessageBox::No ) +- { +- useArts = false; +- delete soundServer; +- soundServer = 0L; +- delete dispatcher; +- dispatcher = 0L; +- } +- } +- +- // when KNotify instantiation crashes, we know it the next start. +- config.writeEntry( "KNotify Init", false ); +- config.writeEntry( "Use Arts", useArts ); +- config.sync(); +- + // start notify service +- KNotify *notify = new KNotify( useArts ); +- +- config.writeEntry( "KNotify Init", true ); +- config.sync(); +- +-#else +- +- // start notify service, without aRts +- KNotify *notify = new KNotify( false ); +- +-#endif ++ KNotify notify( true ); + + app.dcopClient()->setDefaultObject( "Notify" ); + app.dcopClient()->setDaemonMode( true ); + // kdDebug() << "knotify starting" << endl; + + int ret = app.exec(); +- delete notify; +-#ifndef WITHOUT_ARTS +- delete soundServer; +- delete dispatcher; +-#endif + return ret; + } + }// end extern "C" + +-KNotify::KNotify( bool useArts ) ++KNotify::KNotify( bool useKDEMM ) + : QObject(), DCOPObject("Notify") + { + d = new KNotifyPrivate; + d->globalEvents = new KConfig("knotify/eventsrc", true, false, "data"); + d->globalConfig = new KConfig("knotify.eventsrc", true, false); + d->externalPlayerProc = 0; +- d->useArts = useArts; +- d->inStartup = true; +-#ifndef WITHOUT_ARTS +- d->playObjects.setAutoDelete(true); +- d->audioManager = 0; +- if( useArts ) +- { +- connect( soundServer, SIGNAL( restartedServer() ), this, SLOT( restartedArtsd() ) ); +- restartedArtsd(); //started allready need to initialize d->audioManager +- } +-#endif ++ d->useKDEMM = useKDEMM; + +- d->volume = 100; ++ d->inStartup = 0; ++ d->volume = 100; + + d->playTimer = 0; + + loadConfig(); ++ ++ connect ( this, SIGNAL(deletePlayObject(KDE::Multimedia::SimplePlayer*)), ++ SLOT(objectDeleter(KDE::Multimedia::SimplePlayer*)) ); + } + + KNotify::~KNotify() +@@ -272,12 +152,9 @@ KNotify::~KNotify() + reconfigure(); + + #ifndef WITHOUT_ARTS +- d->playObjects.clear(); +- + delete d->globalEvents; + delete d->globalConfig; + delete d->externalPlayerProc; +- delete d->audioManager; + #endif + delete d; + } +@@ -293,7 +170,7 @@ void KNotify::loadConfig() { + // try to locate a suitable player if none is configured + if ( d->externalPlayer.isEmpty() ) { + QStringList players; +- players << "wavplay" << "aplay" << "auplay"; ++ players << "wavplay" << "aplay" << "auplay" << "artsplay" << "akodeplay"; + QStringList::Iterator it = players.begin(); + while ( d->externalPlayer.isEmpty() && it != players.end() ) { + d->externalPlayer = KStandardDirs::findExe( *it ); +@@ -456,9 +333,9 @@ bool KNotify::notifyBySound( const QStri + if ( soundFile.isEmpty() ) + soundFile = locate( "sound", sound ); + } +- if ( soundFile.isEmpty() || isPlaying( soundFile ) ) ++ if ( soundFile.isEmpty() ) + { +- soundFinished( eventId, soundFile.isEmpty() ? NoSoundFile : FileAlreadyPlaying ); ++ soundFinished( eventId, NoSoundFile ); + return false; + } + +@@ -466,64 +343,18 @@ bool KNotify::notifyBySound( const QStri + // kdDebug() << "KNotify::notifyBySound - trying to play file " << soundFile << endl; + + if (!external) { +- //If we disabled using aRts, just return, +- //(If we don't, we'll blow up accessing the null soundServer) +- if (!d->useArts) ++ //If we disabled audio, just return, ++ if (!d->useKDEMM) + { + soundFinished( eventId, NoSoundSupport ); + return false; + } + +-#ifndef WITHOUT_ARTS +- // play sound finally +- while( d->playObjects.count()>5 ) +- abortFirstPlayObject(); +- +- KDE::PlayObjectFactory factory(soundServer->server()); +- if( d->audioManager ) +- factory.setAudioManagerPlay( d->audioManager ); + KURL soundURL; + soundURL.setPath(soundFile); +- KDE::PlayObject *playObject = factory.createPlayObject(soundURL, false); +- +- if (playObject->isNull()) +- { +- soundFinished( eventId, NoSoundSupport ); +- delete playObject; +- return false; +- } +- +- if ( d->volume != 100 ) +- { +- // It works to access the playObject immediately because we don't allow +- // non-file URLs for sounds. +- Arts::StereoVolumeControl volumeControl = Arts::DynamicCast(soundServer->server().createObject("Arts::StereoVolumeControl")); +- Arts::PlayObject player = playObject->object(); +- Arts::Synth_AMAN_PLAY ap = d->audioManager->amanPlay(); +- if( ! volumeControl.isNull() && ! player.isNull() && ! ap.isNull() ) +- { +- volumeControl.scaleFactor( d->volume/100.0 ); +- +- ap.stop(); +- Arts::disconnect( player, "left", ap, "left" ); +- Arts::disconnect( player, "right", ap, "right" ); +- +- ap.start(); +- volumeControl.start(); +- +- Arts::connect(player,"left",volumeControl,"inleft"); +- Arts::connect(player,"right",volumeControl,"inright"); +- +- Arts::connect(volumeControl,"outleft",ap,"left"); +- Arts::connect(volumeControl,"outright",ap,"right"); +- +- player._addChild( volumeControl, "volume" ); +- } +- } +- +- playObject->play(); +- d->playObjects.append( playObject ); ++ KDE::Multimedia::SimplePlayer* playObject = new KDE::Multimedia::SimplePlayer( this ); + d->playObjectEventMap.insert( playObject, eventId ); ++ playObject->play( soundURL ); + + if ( !d->playTimer ) + { +@@ -532,8 +363,7 @@ bool KNotify::notifyBySound( const QStri + } + if ( !d->playTimer->isActive() ) + d->playTimer->start( 1000 ); +-#endif +- return true; ++ return playObject->isPlaying(); + + } else if(!d->externalPlayer.isEmpty()) { + // use an external player to play the sound +@@ -686,58 +516,39 @@ void KNotify::setVolume( int volume ) + d->volume = volume; + } + ++void KNotify::slotPlayerProcessExited( KProcess *proc ) ++{ ++ soundFinished( d->externalPlayerEventId, ++ (proc->normalExit() && proc->exitStatus() == 0) ? PlayedOK : Unknown ); ++} ++ ++ + void KNotify::playTimeout() + { +-#ifndef WITHOUT_ARTS +- for ( QPtrListIterator< KDE::PlayObject > it(d->playObjects); *it;) ++qDebug("KNotify::playTimeout"); ++ for( QMap< KDE::Multimedia::SimplePlayer*, int >::Iterator it = d->playObjectEventMap.begin(); ++ it != d->playObjectEventMap.end(); ++ ) + { +- QPtrListIterator< KDE::PlayObject > current = it; ++ QMap< KDE::Multimedia::SimplePlayer*, int >::Iterator current = it; + ++it; +- if ( (*current)->state() != Arts::posPlaying ) ++ KDE::Multimedia::SimplePlayer* playObject = current.key(); ++ if ( !playObject->isPlaying() || playObject->totalTime() <= 0 ) // may be "playing" even if there's an error + { +- QMap::Iterator eit = d->playObjectEventMap.find( *current ); +- if ( eit != d->playObjectEventMap.end() ) +- { +- soundFinished( *eit, PlayedOK ); +- d->playObjectEventMap.remove( eit ); +- } +- d->playObjects.remove( current ); ++ soundFinished( *current, PlayedOK ); ++ d->playObjectEventMap.remove( current ); ++ disconnect( playObject, SIGNAL( finished() ) ); ++ playObject->stop(); ++ emit deletePlayObject(playObject); + } + } +- if ( !d->playObjects.count() ) ++ if ( !d->playObjectEventMap.count() ) + d->playTimer->stop(); +-#endif + } + +-bool KNotify::isPlaying( const QString& soundFile ) const ++void KNotify::objectDeleter( KDE::Multimedia::SimplePlayer *playObject ) + { +-#ifndef WITHOUT_ARTS +- for ( QPtrListIterator< KDE::PlayObject > it(d->playObjects); *it; ++it) +- { +- if ( (*it)->mediaName() == soundFile ) +- return true; +- } +-#endif +- return false; +-} +- +-void KNotify::slotPlayerProcessExited( KProcess *proc ) +-{ +- soundFinished( d->externalPlayerEventId, +- (proc->normalExit() && proc->exitStatus() == 0) ? PlayedOK : Unknown ); +-} +- +-void KNotify::abortFirstPlayObject() +-{ +-#ifndef WITHOUT_ARTS +- QMap::Iterator it = d->playObjectEventMap.find( d->playObjects.getFirst() ); +- if ( it != d->playObjectEventMap.end() ) +- { +- soundFinished( it.data(), Aborted ); +- d->playObjectEventMap.remove( it ); +- } +- d->playObjects.removeFirst(); +-#endif ++ delete playObject; + } + + void KNotify::soundFinished( int eventId, PlayingFinishedStatus reason ) +@@ -780,16 +591,6 @@ WId KNotify::checkWinId( const QString & + return senderWinId; + } + +-void KNotify::restartedArtsd() +-{ +-#ifndef WITHOUT_ARTS +- delete d->audioManager; +- d->audioManager = new KAudioManagerPlay( soundServer ); +- d->audioManager->setTitle( i18n( "KDE System Notifications" ) ); +- d->audioManager->setAutoRestoreID( "KNotify Aman Play" ); +-#endif +-} +- + void KNotify::sessionReady() + { + if( d->inStartup && !d->startupEvents.isEmpty()) +Index: arts/knotify/knotify.h +=================================================================== +--- arts/knotify/knotify.h.orig ++++ arts/knotify/knotify.h +@@ -24,9 +24,10 @@ + #include + #include + ++#include ++ + class KNotifyPrivate; + class KProcess; +-class KConfig; + + class KNotify : public QObject, public DCOPObject + { +@@ -76,19 +77,16 @@ private: + bool notifyByStderr(const QString &text); + bool notifyByPassivePopup(const QString &text, const QString &appName, + KConfig* eventsFile, WId winId ); +- bool notifyByExecute(const QString &command, +- const QString& event, +- const QString& fromApp, ++ bool notifyByExecute(const QString &command, ++ const QString& event, ++ const QString& fromApp, + const QString& text, + int winId, + int eventId ); +- bool notifyByTaskbar( WId winId ); +- +- bool isPlaying( const QString& soundFile ) const; +- +- void soundFinished( int eventId, PlayingFinishedStatus reason ); +- void abortFirstPlayObject(); +- ++ bool notifyByTaskbar( WId winId ); ++ ++ void soundFinished( int eventId, PlayingFinishedStatus reason ); ++ + WId checkWinId( const QString& appName, WId senderWinId ); + + /** +@@ -97,9 +95,13 @@ private: + bool isGlobal(const QString &eventname); + + private slots: +- void playTimeout(); +- void slotPlayerProcessExited( KProcess *proc ); +- void restartedArtsd(); ++ void playTimeout(); ++ void slotPlayerProcessExited( KProcess *proc ); ++ void objectDeleter( KDE::Multimedia::SimplePlayer* ); ++ ++signals: ++ void deletePlayObject( KDE::Multimedia::SimplePlayer* ); ++ + + private: + KNotifyPrivate* d; +Index: arts/knotify/Makefile.am +=================================================================== +--- arts/knotify/Makefile.am.orig ++++ arts/knotify/Makefile.am +@@ -3,12 +3,13 @@ INCLUDES= -I$(top_srcdir)/arts/kde -I$(i + + ####### Files + +-kde_module_LTLIBRARIES = knotify.la ++#kde_module_LTLIBRARIES = knotify.la ++bin_PROGRAMS = ++lib_LTLIBRARIES = ++kdeinit_LTLIBRARIES = knotify.la + + knotify_la_SOURCES = knotify.cpp knotify.skel +-if include_ARTS +-knotify_la_LIBADD = -lsoundserver_idl -lqtmcop $(LIB_KDEUI) $(top_builddir)/arts/kde/libartskde.la +-endif ++knotify_la_LIBADD = $(LIB_KDEUI) $(top_builddir)/kdemm/libkdemm.la + knotify_la_LDFLAGS = $(all_libraries) -module -avoid-version + knotify_la_METASOURCES = AUTO + +Index: kdemm/channel.h +=================================================================== +--- kdemm/channel.h.orig ++++ kdemm/channel.h +@@ -83,7 +83,7 @@ namespace Multimedia + * You can not instantiate channels yourself, use the Factory to + * create them. + */ +- Channel( const QString & name, const QString & type, Direction direction, ++ Channel( const QString & channelName, const QString & type, Direction direction, + QObject * parent = 0, const char * name = 0 ); + + private: +Index: kdemm/factory.cpp +=================================================================== +--- kdemm/factory.cpp.orig ++++ kdemm/factory.cpp +@@ -80,6 +80,7 @@ class Factory::Private + ":\n" << e << endl; + } + } ++#if 0 + if( 0 == backend ) + { + if( offers.size() == 0 ) +@@ -100,6 +101,7 @@ class Factory::Private + i18n( "Unable to use any of the available Multimedia Backends" ), details ); + } + } ++#endif + } + + Backend * backend; +Index: kdemm/simpleplayer.cpp +=================================================================== +--- kdemm/simpleplayer.cpp.orig ++++ kdemm/simpleplayer.cpp +@@ -50,10 +50,12 @@ SimplePlayer::SimplePlayer( QObject * pa + connect( Factory::self(), SIGNAL( recreateObjects() ), SLOT( recreateObjects() ) ); + d->channel = Factory::self()->createChannel( KGlobal::instance()->aboutData()->programName() ); + d->player = Factory::self()->createPlayer(); +- d->player->setOutputChannel( d->channel ); +- connect( d->player, SIGNAL( stateChanged( KDE::Multimedia::Player::State, KDE::Multimedia::Player::State ) ), ++ if ( d->player ) { ++ d->player->setOutputChannel( d->channel ); ++ connect( d->player, SIGNAL( stateChanged( KDE::Multimedia::Player::State, KDE::Multimedia::Player::State ) ), + SLOT( stateChanged( KDE::Multimedia::Player::State, KDE::Multimedia::Player::State ) ) ); +- connect( d->player, SIGNAL( finished() ), SIGNAL( finished() ) ); ++ connect( d->player, SIGNAL( finished() ), SIGNAL( finished() ) ); ++ }; + } + + SimplePlayer::~SimplePlayer() +@@ -64,6 +66,8 @@ SimplePlayer::~SimplePlayer() + + void SimplePlayer::play( const KURL & url ) + { ++ if( ! d->player ) ++ return; + if( isPaused() && url == d->url ) + { + d->player->play(); +@@ -78,51 +82,71 @@ void SimplePlayer::play( const KURL & ur + + void SimplePlayer::pause() + { ++ if( ! d->player ) ++ return; + d->player->pause(); + } + + void SimplePlayer::stop() + { ++ if( ! d->player ) ++ return; + d->player->stop(); + } + + long SimplePlayer::totalTime() const + { ++ if( ! d->player ) ++ return 0; + return d->player->totalTime(); + } + + long SimplePlayer::currentTime() const + { ++ if( ! d->player ) ++ return 0; + return d->player->currentTime(); + } + + void SimplePlayer::seek( long ms ) + { ++ if( ! d->player ) ++ return; + d->player->seek( ms ); + } + + float SimplePlayer::volume() const + { ++ if( ! d->player ) ++ return 0; + return d->channel->volume(); + } + + void SimplePlayer::setVolume( float v ) + { ++ if( ! d->player ) ++ return; + d->channel->setVolume( v ); + } + + bool SimplePlayer::isPlaying() const + { ++ if( ! d->player ) ++ return false; + return ( d->player->state() == Player::Playing ); + } + + bool SimplePlayer::isPaused() const + { ++ if( ! d->player ) ++ return false; + return ( d->player->state() == Player::Paused ); + } + + void SimplePlayer::stateChanged( Player::State ns, Player::State os ) + { ++ if( ! d->player ) ++ return; + if( os == Player::Loading && ns == Player::Stopped ) + d->player->play(); + } +@@ -135,7 +159,8 @@ void SimplePlayer::deleteYourObjects() + d->title = d->channel->channelName(); + d->type = d->channel->channelType(); + +- d->player->stop(); ++ if( d->player ) ++ d->player->stop(); + + delete d->player; + delete d->channel; +@@ -149,6 +174,9 @@ void SimplePlayer::recreateObjects() + d->channel->setVolume( d->channelvolume ); + + d->player = Factory::self()->createPlayer(); ++ if( ! d->player ) ++ return; ++ + d->player->setOutputChannel( d->channel ); + + if( d->state != Player::NoMedia ) diff --git a/opensuse/core/tdelibs/kdeprint-restart-cupsd.diff b/opensuse/core/tdelibs/kdeprint-restart-cupsd.diff new file mode 100644 index 000000000..d464098eb --- /dev/null +++ b/opensuse/core/tdelibs/kdeprint-restart-cupsd.diff @@ -0,0 +1,32 @@ +Index: kdeprint/cups/cupsdconf2/cupsddialog.cpp +=================================================================== +--- kdeprint/cups/cupsdconf2/cupsddialog.cpp.orig ++++ kdeprint/cups/cupsdconf2/cupsddialog.cpp +@@ -45,6 +45,7 @@ + #include + #include + ++#include + #include + #include + +@@ -205,15 +206,13 @@ bool CupsdDialog::restartServer(QString& + } + else + { ++ KProcess proc; + bool success = false; + if (getuid() == 0 ) +- success = (::kill(serverPid, SIGHUP) == 0); ++ proc << "rccups" << "force-reload"; + else +- { +- KProcess proc; +- proc << "kdesu" << "-c" << "kill -SIGHUP " + QString::number( serverPid ); +- success = proc.start( KProcess::Block ) && proc.normalExit(); +- } ++ proc << "kdesu" << "-c" << "rccups" << "force-reload"; ++ success = proc.start( KProcess::Block ) && proc.normalExit(); + if( !success ) + msg = i18n("Unable to restart CUPS server (pid = %1)").arg(serverPid); + } diff --git a/opensuse/core/tdelibs/kdeprint-utf8.diff b/opensuse/core/tdelibs/kdeprint-utf8.diff new file mode 100644 index 000000000..ed2ad79da --- /dev/null +++ b/opensuse/core/tdelibs/kdeprint-utf8.diff @@ -0,0 +1,13 @@ +Index: kdeprint/cups/kmcupsmanager.cpp +=================================================================== +--- kdeprint/cups/kmcupsmanager.cpp.orig ++++ kdeprint/cups/kmcupsmanager.cpp +@@ -85,7 +85,7 @@ static int trials = 5; + // change LANG variable so that CUPS is always using + // english language: translation may only come from the PPD + // itself, or from KDE. +- setenv("LANG", "en", 1); ++ setenv("LANG", "en_US.UTF-8", 1); + } + + KMCupsManager::~KMCupsManager() diff --git a/opensuse/core/tdelibs/kdesu-settings.diff b/opensuse/core/tdelibs/kdesu-settings.diff new file mode 100644 index 000000000..fc24c09b6 --- /dev/null +++ b/opensuse/core/tdelibs/kdesu-settings.diff @@ -0,0 +1,50 @@ +Subject: Change kdesu settings +From: Lubos Lunak +Bug: 216796 +Relates: kdelibs4/kdesu-settings.diff +Patch-upstream: never + +Change kdesu(d) password keeping timeout only to 5 minutes and enable +it by default (to match kdesu using sudo in 10.3 behaviour). +KDE3 needs a hack in KPasswordDialog for enabling it by default. + +Update: Change the timeout back to 2 hours (bnc#404521). + +Index: kdesu/defaults.h +=================================================================== +--- kdesu/defaults.h.orig ++++ kdesu/defaults.h +@@ -13,8 +13,9 @@ + #ifndef __Defaults_h_included__ + #define __Defaults_h_included__ + ++/*const int defTimeout = 120*60;*/ + const int defTimeout = 120*60; + const int defEchoMode = 0; +-const int defKeep = false; ++const int defKeep = true; + + #endif +Index: kdeui/kpassdlg.cpp +=================================================================== +--- kdeui/kpassdlg.cpp.orig ++++ kdeui/kpassdlg.cpp +@@ -49,6 +49,8 @@ + + #include "kpassdlg.h" + ++#include "../kdesu/defaults.h" ++ + /* + * Password line editor. + */ +@@ -337,7 +339,8 @@ void KPasswordDialog::init() + + KConfig* const cfg = KGlobal::config(); + const KConfigGroupSaver saver(cfg, "Passwords"); +- if (m_Keep && cfg->readBoolEntry("Keep", false)) ++ bool def = ( qstrcmp( qAppName(), "kdesu" ) == 0 ? defKeep : false ); ++ if (m_Keep && cfg->readBoolEntry("Keep", def)) + ++m_Keep; + + m_pMain = new QWidget(this); diff --git a/opensuse/core/tdelibs/kdeversion.diff b/opensuse/core/tdelibs/kdeversion.diff new file mode 100644 index 000000000..f9b4cc1c2 --- /dev/null +++ b/opensuse/core/tdelibs/kdeversion.diff @@ -0,0 +1,13 @@ +Index: kdecore/kdeversion.h +=================================================================== +--- kdecore/kdeversion.h.orig ++++ kdecore/kdeversion.h +@@ -33,6 +33,8 @@ + + #define KDE_IS_VERSION(a,b,c) ( KDE_VERSION >= KDE_MAKE_VERSION(a,b,c) ) + ++#define KDELIBS_SUSE ++ + /** + * Namespace for general KDE functions. + */ diff --git a/opensuse/core/tdelibs/kfile-beagle.diff b/opensuse/core/tdelibs/kfile-beagle.diff new file mode 100644 index 000000000..467e68ed4 --- /dev/null +++ b/opensuse/core/tdelibs/kfile-beagle.diff @@ -0,0 +1,42 @@ +Index: kio/kfile/kurlbar.cpp +=================================================================== +--- kio/kfile/kurlbar.cpp.orig ++++ kio/kfile/kurlbar.cpp +@@ -605,8 +605,19 @@ void KURLBar::readItem( int i, KConfig * + if ( !url.isValid() || !KProtocolInfo::isKnownProtocol( url )) + return; // nothing we could do. + ++ QString description = config->readEntry( QString("Description_") + number ); ++ ++ if (description.isEmpty() && url.protocol()=="beagle") { ++ KIO::UDSEntry uds; ++ const KURL kurl("beagle:?beagled-status"); ++ if (!KIO::NetAccess::stat(kurl, uds)) ++ return; ++ ++ description = i18n("Desktop Search"); ++ } ++ + insertItem( url, +- config->readEntry( QString("Description_") + number ), ++ description, + applicationLocal, + config->readEntry( QString("Icon_") + number ), + static_cast( +Index: kio/kfile/kfiledialog.cpp +=================================================================== +--- kio/kfile/kfiledialog.cpp.orig ++++ kio/kfile/kfiledialog.cpp +@@ -1165,6 +1165,12 @@ void KFileDialog::urlEntered(const KURL& + d->pathCombo->setURL( url ); + } + ++ if (url.protocol()=="beagle" && url.path()=="/") { ++ d->pathCombo->setEditText("beagle:/<"+i18n("search term")+">"); ++ d->pathCombo->lineEdit()->setSelection(8,255); ++ d->pathCombo->setFocus(); ++ } ++ + locationEdit->blockSignals( true ); + locationEdit->setCurrentItem( 0 ); + if ( d->keepLocation ) diff --git a/opensuse/core/tdelibs/kickoff-drop-shadow.diff b/opensuse/core/tdelibs/kickoff-drop-shadow.diff new file mode 100644 index 000000000..e4c7befc2 --- /dev/null +++ b/opensuse/core/tdelibs/kickoff-drop-shadow.diff @@ -0,0 +1,177 @@ +Index: kdefx/kstyle.cpp +=================================================================== +--- kdefx/kstyle.cpp.orig ++++ kdefx/kstyle.cpp +@@ -31,6 +31,7 @@ + + #include + #include ++#include + #include + #include + #include +@@ -79,7 +80,7 @@ namespace + QWidget* w1; + QWidget* w2; + }; +- typedef QMap ShadowMap; ++ typedef QMap ShadowMap; + static ShadowMap *_shadowMap = 0; + QSingleCleanupHandler cleanupShadowMap; + ShadowMap &shadowMap() { +@@ -113,8 +114,13 @@ namespace + + const double shadow_strip[4] = + { 0.565, 0.675, 0.835, 0.945 }; +-} + ++ static bool useDropShadow(QWidget* w) ++ { ++ return w && w->metaObject() && ++ w->metaObject()->findProperty("KStyleMenuDropShadow") != -1; ++ } ++} + + namespace + { +@@ -128,12 +134,12 @@ class TransparencyHandler : public QObje + + protected: + void blendToColor(const QColor &col); +- void blendToPixmap(const QColorGroup &cg, const QPopupMenu* p); ++ void blendToPixmap(const QColorGroup &cg, const QWidget* p); + #ifdef HAVE_XRENDER +- void XRenderBlendToPixmap(const QPopupMenu* p); ++ void XRenderBlendToPixmap(const QWidget* p); + #endif +- void createShadowWindows(const QPopupMenu* p); +- void removeShadowWindows(const QPopupMenu* p); ++ void createShadowWindows(const QWidget* p); ++ void removeShadowWindows(const QWidget* p); + void rightShadow(QImage& dst); + void bottomShadow(QImage& dst); + private: +@@ -256,8 +262,16 @@ void KStyle::polish( QWidget* widget ) + widget->installEventFilter(this); + } + } +-} ++ if (widget->isTopLevel()) ++ { ++ if (!d->menuHandler && useDropShadow(widget)) ++ d->menuHandler = new TransparencyHandler(this, Disabled, 1.0, false); + ++ if (d->menuHandler && useDropShadow(widget)) ++ widget->installEventFilter(d->menuHandler); ++ } ++} ++ + + void KStyle::unPolish( QWidget* widget ) + { +@@ -267,8 +281,10 @@ void KStyle::unPolish( QWidget* widget ) + QFrame::Shape shape = frame->frameShape(); + if (shape == QFrame::ToolBarPanel || shape == QFrame::MenuBarPanel) + widget->removeEventFilter(this); +- } ++ } + } ++ if (widget->isTopLevel() && d->menuHandler && useDropShadow(widget)) ++ widget->removeEventFilter(d->menuHandler); + } + + +@@ -1997,7 +2013,7 @@ void TransparencyHandler::bottomShadow(Q + } + + // Create a shadow of thickness 4. +-void TransparencyHandler::createShadowWindows(const QPopupMenu* p) ++void TransparencyHandler::createShadowWindows(const QWidget* p) + { + #ifdef Q_WS_X11 + int x2 = p->x()+p->width(); +@@ -2044,7 +2060,7 @@ void TransparencyHandler::createShadowWi + #endif + } + +-void TransparencyHandler::removeShadowWindows(const QPopupMenu* p) ++void TransparencyHandler::removeShadowWindows(const QWidget* p) + { + #ifdef Q_WS_X11 + ShadowMap::iterator it = shadowMap().find(p); +@@ -2070,7 +2086,7 @@ bool TransparencyHandler::eventFilter( Q + // Copyright (C) 2000 Daniel M. Duley + + // Added 'fake' menu shadows <04-Jul-2002> -- Karol +- QPopupMenu* p = (QPopupMenu*)object; ++ QWidget* p = (QWidget*)object; + QEvent::Type et = event->type(); + + if (et == QEvent::Show) +@@ -2109,13 +2125,23 @@ bool TransparencyHandler::eventFilter( Q + // * shadows after duplicate show events. + // * TODO : determine real cause for duplicate events + // * till 20021005 +- if (dropShadow && p->width() > 16 && p->height() > 16 && !shadowMap().contains( p )) ++ if ((dropShadow || useDropShadow(p)) ++ && p->width() > 16 && p->height() > 16 && !shadowMap().contains( p )) + createShadowWindows(p); + } ++ else if (et == QEvent::Resize && p->isShown() && p->isTopLevel()) ++ { ++ // Handle drop shadow ++ if (dropShadow || useDropShadow(p)) ++ { ++ removeShadowWindows(p); ++ createShadowWindows(p); ++ } ++ } + else if (et == QEvent::Hide) + { + // Handle drop shadow +- if (dropShadow) ++ if (dropShadow || useDropShadow(p)) + removeShadowWindows(p); + + // Handle translucency +@@ -2140,7 +2166,7 @@ void TransparencyHandler::blendToColor(c + } + + +-void TransparencyHandler::blendToPixmap(const QColorGroup &cg, const QPopupMenu* p) ++void TransparencyHandler::blendToPixmap(const QColorGroup &cg, const QWidget* p) + { + if (opacity < 0.0 || opacity > 1.0) + return; +@@ -2153,7 +2179,10 @@ void TransparencyHandler::blendToPixmap( + return; + + // Allow styles to define the blend pixmap - allows for some interesting effects. +- kstyle->renderMenuBlendPixmap( blendPix, cg, p ); ++ if (::qt_cast(p)) ++ kstyle->renderMenuBlendPixmap( blendPix, cg, ::qt_cast(p) ); ++ else ++ blendPix.fill(cg.button()); // Just tint as the default behavior + + QImage blendImg = blendPix.convertToImage(); + QImage backImg = pix.convertToImage(); +@@ -2166,13 +2195,17 @@ void TransparencyHandler::blendToPixmap( + // Here we go, use XRender in all its glory. + // NOTE: This is actually a bit slower than the above routines + // on non-accelerated displays. -- Karol. +-void TransparencyHandler::XRenderBlendToPixmap(const QPopupMenu* p) ++void TransparencyHandler::XRenderBlendToPixmap(const QWidget* p) + { + KPixmap renderPix; + renderPix.resize( pix.width(), pix.height() ); + + // Allow styles to define the blend pixmap - allows for some interesting effects. +- kstyle->renderMenuBlendPixmap( renderPix, p->colorGroup(), p ); ++ if (::qt_cast(p)) ++ kstyle->renderMenuBlendPixmap( renderPix, p->colorGroup(), ++ ::qt_cast(p) ); ++ else ++ renderPix.fill(p->colorGroup().button()); // Just tint as the default behavior + + Display* dpy = qt_xdisplay(); + Pixmap alphaPixmap; diff --git a/opensuse/core/tdelibs/kimproxy-warning.diff b/opensuse/core/tdelibs/kimproxy-warning.diff new file mode 100644 index 000000000..0731ebf4b --- /dev/null +++ b/opensuse/core/tdelibs/kimproxy-warning.diff @@ -0,0 +1,13 @@ +Index: interfaces/kimproxy/library/kimproxy.cpp +=================================================================== +--- interfaces/kimproxy/library/kimproxy.cpp.orig ++++ interfaces/kimproxy/library/kimproxy.cpp +@@ -204,7 +204,7 @@ KIMProxy::KIMProxy( DCOPClient* dc ) : D + + // FIXME: make this work when the sender object id is set to KIMIFace + if ( !connectDCOPSignal( 0, 0, method, method, false ) ) +- KMessageBox::information( 0, QString( "Couldn't connect DCOP signal.\nWon't receive any status notifications!" ) ); ++ kdWarning() << "Couldn't connect DCOP signal. Won't receive any status notifications!" << endl; + } + + KIMProxy::~KIMProxy( ) diff --git a/opensuse/core/tdelibs/kmimelist.diff b/opensuse/core/tdelibs/kmimelist.diff new file mode 100644 index 000000000..484523f25 --- /dev/null +++ b/opensuse/core/tdelibs/kmimelist.diff @@ -0,0 +1,81 @@ +Index: kded/Makefile.am +=================================================================== +--- kded/Makefile.am.orig ++++ kded/Makefile.am +@@ -36,12 +36,16 @@ kbuildsycoca_la_SOURCES = kbuildsycoca.c + kctimefactory.cpp \ + vfolder_menu.cpp + +-bin_PROGRAMS = kdontchangethehostname kde-menu ++bin_PROGRAMS = kdontchangethehostname kde-menu kmimelist + + kdontchangethehostname_LDFLAGS = $(all_libraries) $(KDE_RPATH) + kdontchangethehostname_LDADD = $(LIB_KDECORE) + kdontchangethehostname_SOURCES = khostname.cpp + ++kmimelist_LDFLAGS = $(all_libraries) $(KDE_RPATH) ++kmimelist_LDADD = ../kio/libkio.la ++kmimelist_SOURCES = kmimelist.cpp ++ + kde_menu_LDFLAGS = $(all_libraries) $(KDE_RPATH) + kde_menu_LDADD = $(LIB_KIO) + kde_menu_SOURCES = kde-menu.cpp +Index: kded/kmimelist.cpp +=================================================================== +--- /dev/null ++++ kded/kmimelist.cpp +@@ -0,0 +1,54 @@ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++ ++#include ++ ++int main(int argc, char *argv[]) ++{ ++ KApplication k(argc,argv,"blurb",false); ++ ++ KMimeType::List mtl = KMimeType::allMimeTypes( ); ++ assert( mtl.count() ); ++ qDebug( "Found %d mime types.", mtl.count() ); ++ QValueListIterator it(mtl.begin()); ++ KServiceTypeProfile::OfferList ol; ++ ++ for (; it != mtl.end(); ++it) ++ { ++ { ++ // Application ++ printf( "APP:%s:", (*it)->name().latin1() ); ++ ol = KServiceTypeProfile::offers((*it)->name(), "Application"); ++ QValueListIterator it2(ol.begin()); ++ for (; it2 != ol.end(); ++it2) { ++ if ((*it2).allowAsDefault()) ++ printf( " %s", (*it2).service()->desktopEntryPath().ascii() ); ++ ++ } ++ printf( "\n" ); ++ } ++ ++ { ++ // Embedded ++ printf( "PART:%s:", (*it)->name().latin1() ); ++ ol = KServiceTypeProfile::offers((*it)->name(), "KParts/ReadOnlyPart"); ++ QValueListIterator it2(ol.begin()); ++ for (; it2 != ol.end(); ++it2) { ++ if ((*it2).allowAsDefault()) ++ printf( " %s", (*it2).service()->desktopEntryPath().ascii() ); ++ ++ } ++ printf( "\n" ); ++ } ++ } ++} ++ diff --git a/opensuse/core/tdelibs/kremoteencoding-utf8.diff b/opensuse/core/tdelibs/kremoteencoding-utf8.diff new file mode 100644 index 000000000..74600a0f4 --- /dev/null +++ b/opensuse/core/tdelibs/kremoteencoding-utf8.diff @@ -0,0 +1,28 @@ +Index: kio/kio/kremoteencoding.cpp +=================================================================== +--- kio/kio/kremoteencoding.cpp.orig ++++ kio/kio/kremoteencoding.cpp +@@ -53,7 +53,7 @@ QCString KRemoteEncoding::encode(const Q + QCString result = codec->fromUnicode(name); + if (codec->toUnicode(result) != name) + return name.latin1(); +- ++ + return result; + } + +@@ -80,11 +80,13 @@ void KRemoteEncoding::setEncoding(const + + if (name) + codec = QTextCodec::codecForName(name); ++ else ++ codec = QTextCodec::codecForMib( 106 ); // fallback to UTF-8 + + if (codec == 0L) + codec = QTextCodec::codecForMib(1); + +- kdDebug() << k_funcinfo << "setting encoding " << codec->name() ++ kdDebug() << k_funcinfo << "setting encoding " << codec->name() + << " for name=" << name << endl; + } + diff --git a/opensuse/core/tdelibs/ktip-icon-hack.diff b/opensuse/core/tdelibs/ktip-icon-hack.diff new file mode 100644 index 000000000..4812646d1 --- /dev/null +++ b/opensuse/core/tdelibs/ktip-icon-hack.diff @@ -0,0 +1,56 @@ +Index: kdeui/ktip.cpp +=================================================================== +--- kdeui/ktip.cpp.orig ++++ kdeui/ktip.cpp +@@ -367,24 +367,47 @@ void KTipDialog::showMultiTip(QWidget *p + mInstance->raise(); + } + ++static QString fixTip(QString tip) ++{ ++ QRegExp iconRegExp(""); ++ iconRegExp.setMinimal(true); ++ if (iconRegExp.search(tip)>-1) { ++ QString iconName = iconRegExp.cap(1); ++ if (!iconName.isEmpty()) ++ if (KGlobal::dirs()->findResource("icon", iconName).isEmpty()) ++ tip.replace("crystalsvg","hicolor"); ++ } ++ ++ return tip; ++} ++ + void KTipDialog::prevTip() + { + mDatabase->prevTip(); +- mTipText->setText(QString::fromLatin1( ++ QString currentTip = QString::fromLatin1( + "%3") + .arg(mTextColor.name()) + .arg(mBaseColor.name()) +- .arg(i18n(mDatabase->tip().utf8()))); ++ .arg(i18n(mDatabase->tip().utf8())); ++ ++ ++ currentTip = fixTip(currentTip); ++ mTipText->setText(currentTip); + mTipText->setContentsPos(0, 0); + } + + void KTipDialog::nextTip() + { + mDatabase->nextTip(); +- mTipText->setText(QString::fromLatin1("%3") ++ QString currentTip = QString::fromLatin1( ++ "%3") + .arg(mTextColor.name()) + .arg(mBaseColor.name()) +- .arg(i18n(mDatabase->tip().utf8()))); ++ .arg(i18n(mDatabase->tip().utf8())); ++ ++ ++ currentTip = fixTip(currentTip); ++ mTipText->setText(currentTip); + mTipText->setContentsPos(0, 0); + } + diff --git a/opensuse/core/tdelibs/kwalletd-try-open.diff b/opensuse/core/tdelibs/kwalletd-try-open.diff new file mode 100644 index 000000000..547f8192d --- /dev/null +++ b/opensuse/core/tdelibs/kwalletd-try-open.diff @@ -0,0 +1,81 @@ +Index: kio/misc/kwalletd/kwalletd.cpp +=================================================================== +--- kio/misc/kwalletd/kwalletd.cpp.orig ++++ kio/misc/kwalletd/kwalletd.cpp +@@ -355,6 +355,44 @@ int KWalletD::doTransactionOpen(const QC + return rc; + } + ++int KWalletD::tryOpen(const QString& wallet, const QCString& password) ++{ ++ if (isOpen(wallet)) ++ return 0; ++ ++ if (_tryOpenBlocked.isActive()) { ++ kdDebug() << "tryOpen is active.." << endl; ++ return -1; ++ } ++ ++ if (!KWallet::Backend::exists(wallet)) ++ return -2; ++ ++ KWallet::Backend *b = new KWallet::Backend(wallet, false /*isPath*/); ++ int rc = b->open(QByteArray().duplicate(password, strlen(password))); ++ if (rc == 0) { ++ _wallets.insert(rc = generateHandle(), b); ++ _passwords[wallet] = password; ++ b->ref(); ++ _tryOpenBlocked.stop(); ++ QByteArray data; ++ QDataStream ds(data, IO_WriteOnly); ++ ds << wallet; ++ emitDCOPSignal("walletOpened(QString)", data); ++ } ++ else { ++ delete b; ++ // make sure that we're not bombed with a dictionary attack ++ _tryOpenBlocked.start (30 * 1000, true /*single shot*/); ++ if (++_failed > 5) { ++ _failed = 0; ++ QTimer::singleShot(0, this, SLOT(notifyFailures())); ++ } ++ ++ rc = -1; ++ } ++ return rc; ++} + + int KWalletD::internalOpen(const QCString& appid, const QString& wallet, bool isPath, WId w, bool modal) { + int rc = -1; +Index: kio/misc/kwalletd/kwalletd.h +=================================================================== +--- kio/misc/kwalletd/kwalletd.h.orig ++++ kio/misc/kwalletd/kwalletd.h +@@ -26,6 +26,7 @@ + #include + #include + #include ++#include + #include + #include "kwalletbackend.h" + +@@ -51,8 +52,10 @@ class KWalletD : public KDEDModule { + + // Open and unlock the wallet + virtual int open(const QString& wallet, uint wId); +- ++ // Open and unlock the wallet ++ virtual int tryOpen(const QString& wallet, const QCString& passwd); + // Open and unlock the wallet with this path ++ + virtual int openPath(const QString& path, uint wId); + + // Asynchronous open - must give the object to return the handle +@@ -186,6 +189,7 @@ class KWalletD : public KDEDModule { + int _idleTime; + QMap _implicitAllowMap, _implicitDenyMap; + KTimeout *_timeouts; ++ QTimer _tryOpenBlocked; + + QPtrList _transactions; + QGuardedPtr< QWidget > activeDialog; diff --git a/opensuse/core/tdelibs/light_v_2_scrollbar_patch.patch b/opensuse/core/tdelibs/light_v_2_scrollbar_patch.patch new file mode 100644 index 000000000..e4ad1dd81 --- /dev/null +++ b/opensuse/core/tdelibs/light_v_2_scrollbar_patch.patch @@ -0,0 +1,34 @@ +diff -ur kdelibs-3.5.10.orig/kstyles/light/lightstyle-v2.cpp kdelibs-3.5.10/kstyles/light/lightstyle-v2.cpp +--- kdelibs-3.5.10.orig/kstyles/light/lightstyle-v2.cpp 2006-03-17 13:19:10.000000000 +0300 ++++ kdelibs-3.5.10/kstyles/light/lightstyle-v2.cpp 2011-05-07 23:30:18.000000000 +0400 +@@ -501,12 +501,14 @@ + p->drawLine(r.topLeft(), r.topRight()); + p->setPen(cg.background()); + p->drawLine(r.left(), r.top() + 1, r.right(), r.top() + 1); +- fr.addCoords(0, 2, 0, 0); ++ p->drawLine(r.left(), r.bottom(), r.right(), r.bottom()); ++ fr.addCoords(0, 2, 0, -1); + } else { + p->drawLine(r.topLeft(), r.bottomLeft()); + p->setPen(cg.background()); + p->drawLine(r.left() + 1, r.top(), r.left() + 1, r.bottom()); +- fr.addCoords(2, 0, 0, 0); ++ p->drawLine(r.right(), r.top(), r.right(), r.bottom()); ++ fr.addCoords(2, 0, -1, 0); + } + + p->fillRect(fr, cg.brush((flags & Style_Down) ? +@@ -523,11 +525,13 @@ + if (flags & Style_Horizontal) { + p->drawLine(r.topLeft(), r.topRight()); + p->setPen(cg.background()); ++ p->drawLine(r.left(), r.bottom(), r.right(), r.bottom()); + p->drawLine(r.left(), r.top() + 1, r.right(), r.top() + 1); + fr.addCoords(0, 2, 0, -1); + } else { + p->drawLine(r.topLeft(), r.bottomLeft()); + p->setPen(cg.background()); ++ p->drawLine(r.right(), r.top(), r.right(), r.bottom()); + p->drawLine(r.left() + 1, r.top(), r.left() + 1, r.bottom()); + fr.addCoords(2, 0, -1, 0); + } diff --git a/opensuse/core/tdelibs/limit-max-image-size.diff b/opensuse/core/tdelibs/limit-max-image-size.diff new file mode 100644 index 000000000..6a01bf063 --- /dev/null +++ b/opensuse/core/tdelibs/limit-max-image-size.diff @@ -0,0 +1,28 @@ +Index: kapplication.cpp +=================================================================== +RCS file: /home/kde/kdelibs/kdecore/kapplication.cpp,v +retrieving revision 1.670 +diff -u -p -r1.670 kapplication.cpp +--- kdecore/kapplication.cpp 22 Jul 2004 16:50:04 -0000 1.670 ++++ kdecore/kapplication.cpp 16 Aug 2004 20:31:02 -0000 +@@ -43,6 +43,7 @@ + #include + #include + #include ++#include + #ifndef QT_NO_SQL + #include + #endif +@@ -1975,6 +1976,12 @@ void KApplication::propagateSettings(Set + KConfigBase* config = KGlobal::config(); + KConfigGroupSaver saver( config, "KDE" ); + ++#ifdef QT_HAVE_MAX_IMAGE_SIZE ++ QSize maxImageSize(4096, 4096); ++ maxImageSize = config->readSizeEntry("MaxImageSize", &maxImageSize); ++ QImage::setMaxImageSize(maxImageSize); ++#endif ++ + int num = config->readNumEntry("CursorBlinkRate", QApplication::cursorFlashTime()); + if ((num != 0) && (num < 200)) + num = 200; diff --git a/opensuse/core/tdelibs/lpoptions-cups-1.2.diff b/opensuse/core/tdelibs/lpoptions-cups-1.2.diff new file mode 100644 index 000000000..aa3f5d5b6 --- /dev/null +++ b/opensuse/core/tdelibs/lpoptions-cups-1.2.diff @@ -0,0 +1,28 @@ +Index: kdeprint/kmvirtualmanager.cpp +=================================================================== +--- kdeprint/kmvirtualmanager.cpp.orig ++++ kdeprint/kmvirtualmanager.cpp +@@ -179,7 +179,7 @@ void KMVirtualManager::setAsDefault(KMPr + + void KMVirtualManager::refresh() + { +- QFileInfo fi(QDir::homeDirPath() + QFile::decodeName("/.lpoptions")); ++ QFileInfo fi(QDir::homeDirPath() + QFile::decodeName("/.cups/lpoptions")); + QFileInfo fi2(QFile::decodeName("/etc/cups/lpoptions")); + + // if root, then only use global file: trick -> use twice the same file +@@ -301,7 +301,13 @@ void KMVirtualManager::triggerSave() + filename = QFile::decodeName("/etc/cups/lpoptions"); + } + else +- filename = QDir::homeDirPath() + QFile::decodeName("/.lpoptions"); ++ { ++ QDir cupsDir(QDir::home().absPath()+"/.cups"); ++ if (!cupsDir.exists()) ++ cupsDir.mkdir(QDir::home().absPath()+"/.cups"); ++ filename = QDir::homeDirPath() + QFile::decodeName("/.cups/lpoptions"); ++ } ++ + if (!filename.isEmpty()) + { + saveFile(filename); diff --git a/opensuse/core/tdelibs/mimetype-changes.diff b/opensuse/core/tdelibs/mimetype-changes.diff new file mode 100644 index 000000000..ea47629b8 --- /dev/null +++ b/opensuse/core/tdelibs/mimetype-changes.diff @@ -0,0 +1,36 @@ +Index: mimetypes/application/x-rpm.desktop +=================================================================== +--- mimetypes/application/x-rpm.desktop.orig ++++ mimetypes/application/x-rpm.desktop +@@ -1,4 +1,5 @@ + [Desktop Entry] ++X-KDE-AutoEmbed=true + Type=MimeType + MimeType=application/x-rpm + Icon=rpm +Index: mimetypes/application/x-ogg.desktop +=================================================================== +--- mimetypes/application/x-ogg.desktop.orig ++++ mimetypes/application/x-ogg.desktop +@@ -4,7 +4,7 @@ + # application/ogg "inherits" from it, so that apps associated with x-ogg can open ogg files. + Type=MimeType + MimeType=application/x-ogg +-Icon=multimedia ++Icon=sound + Comment=Ogg Multimedia + Comment[ar]=وسائط Ogg متعددة + Comment[az]=Ogg Multimediya +Index: mimetypes/application/ogg.desktop +=================================================================== +--- mimetypes/application/ogg.desktop.orig ++++ mimetypes/application/ogg.desktop +@@ -1,7 +1,7 @@ + [Desktop Entry] + Type=MimeType + MimeType=application/ogg +-Icon=multimedia ++Icon=sound + Patterns=*.ogg;*.OGG; + # Previous name of this mimetype + X-KDE-IsAlso=application/x-ogg diff --git a/opensuse/core/tdelibs/mimetype-icons.tar.bz2 b/opensuse/core/tdelibs/mimetype-icons.tar.bz2 new file mode 100644 index 000000000..b37a35baa Binary files /dev/null and b/opensuse/core/tdelibs/mimetype-icons.tar.bz2 differ diff --git a/opensuse/core/tdelibs/mozilla-sliders.patch b/opensuse/core/tdelibs/mozilla-sliders.patch new file mode 100644 index 000000000..004b0fd36 --- /dev/null +++ b/opensuse/core/tdelibs/mozilla-sliders.patch @@ -0,0 +1,19 @@ +Index: kdefx/kstyle.cpp +=================================================================== +--- kdefx/kstyle.cpp.orig ++++ kdefx/kstyle.cpp +@@ -2210,6 +2210,14 @@ void TransparencyHandler::XRenderBlendTo + void KStyle::virtual_hook( int, void* ) + { /*BASE::virtual_hook( id, data );*/ } + ++// HACK for gtk-qt-engine ++ ++KDE_EXPORT extern "C" ++void kde_kstyle_set_scrollbar_type_windows( void* style ) ++{ ++ ((KStyle*)style)->setScrollBarType( KStyle::WindowsStyleScrollBar ); ++} ++ + // vim: set noet ts=4 sw=4: + // kate: indent-width 4; replace-tabs off; tab-width 4; space-indent off; + diff --git a/opensuse/core/tdelibs/networkstatus.diff b/opensuse/core/tdelibs/networkstatus.diff new file mode 100644 index 000000000..d7b4e8c89 --- /dev/null +++ b/opensuse/core/tdelibs/networkstatus.diff @@ -0,0 +1,6006 @@ +Index: networkstatus/connectionmanager.cpp +=================================================================== +--- /dev/null ++++ networkstatus/connectionmanager.cpp +@@ -0,0 +1,171 @@ ++/* This file is part of kdepim. ++ Copyright (C) 2005,2007 Will Stephenson ++ ++ This library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Library General Public ++ License version 2 as published by the Free Software Foundation. ++ ++ This library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Library General Public License for more details. ++ ++ You should have received a copy of the GNU Library General Public License ++ along with this library. If not, write to the Free Software ++ Foundation, Inc., 51 Franklin Street, Fifth Floor, ++ Boston, MA 02110-1301, USA. ++ ++ As a special exception, permission is given to link this library ++ with any edition of Qt, and distribute the resulting executable, ++ without including the source code for Qt in the source distribution. ++*/ ++ ++#include ++#include ++#include ++ ++#include "connectionmanager.h" ++#include "connectionmanager_p.h" ++ ++// Connection manager itself ++ConnectionManager::ConnectionManager( QObject * parent, const char * name ) : DCOPObject( "ConnectionManager" ), QObject( parent, name ), d( new ConnectionManagerPrivate( this ) ) ++{ ++ d->service = new NetworkStatusIface_stub( kapp->dcopClient(), "kded", "networkstatus" ); ++ ++ connectDCOPSignal( "kded", "networkstatus", "statusChange(int)", "slotStatusChanged(int)", false ); ++ ++ initialise(); ++} ++ ++ConnectionManager::~ConnectionManager() ++{ ++ delete d; ++} ++ ++ConnectionManager *ConnectionManager::s_self = 0L; ++ ++ConnectionManager *ConnectionManager::self() ++{ ++ static KStaticDeleter deleter; ++ if(!s_self) ++ deleter.setObject( s_self, new ConnectionManager( 0, "connection_manager" ) ); ++ return s_self; ++} ++ ++void ConnectionManager::initialise() ++{ ++ // determine initial state and set the state object accordingly. ++ d->status = ( NetworkStatus::Status )d->service->status(); ++} ++ ++NetworkStatus::Status ConnectionManager::status() ++{ ++ return d->status; ++} ++ ++void ConnectionManager::slotStatusChanged( int status ) ++{ ++ d->status = ( NetworkStatus::Status )status; ++ switch ( status ) { ++ case NetworkStatus::NoNetworks: ++ break; ++ case NetworkStatus::Unreachable: ++ break; ++ case NetworkStatus::OfflineDisconnected: ++ case NetworkStatus::OfflineFailed: ++ case NetworkStatus::ShuttingDown: ++ case NetworkStatus::Offline: ++ case NetworkStatus::Establishing: ++ if ( d->disconnectPolicy == Managed ) { ++ emit d->disconnected(); ++ } else if ( d->disconnectPolicy == OnNextChange ) { ++ setDisconnectPolicy( Manual ); ++ emit d->disconnected(); ++ } ++ break; ++ case NetworkStatus::Online: ++ if ( d->disconnectPolicy == Managed ) { ++ emit d->connected(); ++ } else if ( d->disconnectPolicy == OnNextChange ) { ++ setConnectPolicy( Manual ); ++ emit d->connected(); ++ } ++ break; ++ default: ++ kdDebug() << k_funcinfo << "Unrecognised status code!" << endl; ++ } ++ emit statusChanged( d->status ); ++} ++ ++ConnectionManager::ConnectionPolicy ConnectionManager::connectPolicy() const ++{ ++ return d->connectPolicy; ++} ++ ++void ConnectionManager::setConnectPolicy( ConnectionManager::ConnectionPolicy policy ) ++{ ++ d->connectPolicy = policy; ++} ++ ++ConnectionManager::ConnectionPolicy ConnectionManager::disconnectPolicy() const ++{ ++ return d->disconnectPolicy; ++} ++ ++void ConnectionManager::setDisconnectPolicy( ConnectionManager::ConnectionPolicy policy ) ++{ ++ d->disconnectPolicy = policy; ++} ++ ++void ConnectionManager::setManualConnectionPolicies() ++{ ++ d->connectPolicy = ConnectionManager::Manual; ++ d->disconnectPolicy = ConnectionManager::Manual; ++} ++ ++void ConnectionManager::setManagedConnectionPolicies() ++{ ++ d->connectPolicy = ConnectionManager::Managed; ++ d->disconnectPolicy = ConnectionManager::Managed; ++} ++ ++void ConnectionManager::registerConnectSlot( QObject * receiver, const char * member ) ++{ ++ d->connectReceiver = receiver; ++ d->connectSlot = member; ++ connect( d, SIGNAL( connected() ), receiver, member ); ++} ++ ++void ConnectionManager::forgetConnectSlot() ++{ ++ disconnect( d, SIGNAL( connected() ), d->connectReceiver, d->connectSlot ); ++ d->connectReceiver = 0; ++ d->connectSlot = 0; ++} ++ ++bool ConnectionManager::isConnectSlotRegistered() const ++{ ++ return ( d->connectSlot != 0 ); ++} ++ ++void ConnectionManager::registerDisconnectSlot( QObject * receiver, const char * member ) ++{ ++ d->disconnectReceiver = receiver; ++ d->disconnectSlot = member; ++ connect( d, SIGNAL( disconnected() ), receiver, member ); ++} ++ ++void ConnectionManager::forgetDisconnectSlot() ++{ ++ disconnect( d, SIGNAL( disconnected() ), d->disconnectReceiver, d->disconnectSlot ); ++ d->disconnectReceiver = 0; ++ d->disconnectSlot = 0; ++} ++ ++bool ConnectionManager::isDisconnectSlotRegistered() const ++{ ++ return ( d->disconnectSlot != 0 ); ++} ++ ++#include "connectionmanager.moc" ++ +Index: networkstatus/connectionmanager.h +=================================================================== +--- /dev/null ++++ networkstatus/connectionmanager.h +@@ -0,0 +1,167 @@ ++/* This file is part of kdepim. ++ Copyright (C) 2005,2007 Will Stephenson ++ ++ This library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Library General Public ++ License version 2 as published by the Free Software Foundation. ++ ++ This library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Library General Public License for more details. ++ ++ You should have received a copy of the GNU Library General Public License ++ along with this library. If not, write to the Free Software ++ Foundation, Inc., 51 Franklin Street, Fifth Floor, ++ Boston, MA 02110-1301, USA. ++ ++ As a special exception, permission is given to link this library ++ with any edition of Qt, and distribute the resulting executable, ++ without including the source code for Qt in the source distribution. ++*/ ++ ++#ifndef KDE_CONNECTION_MANAGER_H ++#define KDE_CONNECTION_MANAGER_H ++ ++#include ++#include ++ ++#include ++ ++class ConnectionManagerPrivate; ++ ++class KDE_EXPORT ConnectionManager : public QObject, virtual public DCOPObject ++{ ++Q_OBJECT ++K_DCOP ++k_dcop: ++ void slotStatusChanged( int status ); ++public: ++ /** ++ * This defines application policy in response to networking connect/disconnect events ++ * Manual - the app only disconnects when the user does so ++ * OnNextChange - the app should connect or disconnect the next time the network changes state, thereafter ++ * Manual ++ * Managed - the app should disconnect when the ConnectionManager thinks the system is ++ * offline ++ */ ++ enum ConnectionPolicy { Manual, OnNextChange, Managed }; ++ /** ++ * Set a policy to manage the application's connect behaviour ++ */ ++ void setConnectPolicy( ConnectionPolicy ); ++ /** ++ * Retrieve a policy managing the application's connect behaviour ++ */ ++ ConnectionPolicy connectPolicy() const; ++ ++ /** ++ * Set a policy to manage the application's disconnect behaviour ++ */ ++ void setDisconnectPolicy( ConnectionPolicy ); ++ ++ /** ++ * Retrieve a policy managing the application's disconnect behaviour ++ */ ++ ConnectionPolicy disconnectPolicy() const; ++ ++ /* ++ * We'll get logic of the form ++ * onStatusChange() { ++ * if ( ConnectionManager::self()->policy( ConnectionManager::ConnectBehaviour ) == ConnectionManager::OnNextChange || ++ * ConnectionManager::self()->policy( ConnectionManager::ConnectBehaviour ) == ConnectionManager::Managed ) ++ * { ++ * // do connect ++ * ++ * // reset the policy ++ * if ( ConnectionManager::self()->policy( ConnectionManager::ConnectBehaviour ) == ConnectionManager::OnNextChange ) ++ * ConnectionManager::self()->setPolicy( ConnectionManager::ConnectionManager, ++ * ConnectionManager::Manual ); ++ * } ++ * ++ * Do we just use the CM for policy storage, or do we try to factor the logic to implement the ++ * policy into the CM too? ++ * ++ * could signal doConnect(), then reset the policy ++ * or could register a connect slot ++ * registerConnectMethod( QObject * receiver, const char * member ); ++ * unregisterConnectMethod(); ++ * etc. ++ * ++ * The problem with automatically controlled behaviour, where policy may change as a result of a ++ * connect, is that if it is also manually altered, the CM needs to be updated. But the CM needs to ++ * be updated in any case. ++ * CM need ++ */ ++ /** ++ * Lazy-method to set Manual on both policies ++ */ ++ void setManualConnectionPolicies(); ++ /** ++ * Lazy-method to set Managed on both policies ++ */ ++ void setManagedConnectionPolicies(); ++ ++ /** ++ * Record a slot to call on a given receiving QObject when ++ * 1) the network connection is online, ++ * 2) the policy mandates that the app connect ++ * ++ * Only one slot may be registered at any one time. If a second slot is ++ * registered, the first slot is forgotten ++ * @param receiver the QObject where the slot is located ++ * @param member the slot to call. Set up member using the SLOT() macro. ++ */ ++ void registerConnectSlot( QObject * receiver, const char * member ); ++ ++ /** ++ * Forget any connect slot previously registered ++ */ ++ void forgetConnectSlot(); ++ ++ /** ++ * Has any slot been registered to be called on connect? ++ */ ++ bool isConnectSlotRegistered() const; ++ ++ /** ++ * Record a slot to call on a given receiving QObject when ++ * 1) the network connection goes offline (in any way ), ++ * 2) the policy mandates that the app disconnect ++ * ++ * Only one slot may be registered at any one time. If a second slot is ++ * registered, the first slot is forgotten ++ * @param receiver the QObject where the slot is located ++ * @param member the slot to call. Set up member using the SLOT() macro. ++ */ ++ void registerDisconnectSlot( QObject * receiver, const char * member ); ++ ++ /** ++ * Forget any disconnect slot previously registered ++ */ ++ void forgetDisconnectSlot(); ++ ++ /** ++ * Has any slot been registered to be called on disconnect? ++ */ ++ bool isDisconnectSlotRegistered() const; ++ ++ /// existing API ++ ++ static ConnectionManager* self(); ++ virtual ~ConnectionManager(); ++ NetworkStatus::Status status(); ++signals: ++ // signal that the network for a hostname is up/down ++ void statusChanged( NetworkStatus::Status status ); ++private: ++ // sets up internal state ++ void initialise(); ++ // reread the desktop status from the daemon and update internal state ++ ConnectionManager( QObject *parent, const char * name ); ++ ConnectionManagerPrivate * d; ++ static ConnectionManager * s_self; ++}; ++ ++#endif ++ +Index: networkstatus/connectionmanager_p.cpp +=================================================================== +--- /dev/null ++++ networkstatus/connectionmanager_p.cpp +@@ -0,0 +1,13 @@ ++#include "connectionmanager_p.h" ++ ++ConnectionManagerPrivate::ConnectionManagerPrivate(QObject * parent, const char * name ) : QObject( parent, name ), service( 0 ), connectPolicy( ConnectionManager::Managed ), ++ disconnectPolicy( ConnectionManager::Managed ), connectReceiver( 0 ), connectSlot( 0 ), ++ disconnectReceiver( 0 ), disconnectSlot( 0 ) ++{ ++} ++ ++ConnectionManagerPrivate::~ConnectionManagerPrivate() ++{ ++} ++ ++#include "connectionmanager_p.moc" +Index: networkstatus/connectionmanager_p.h +=================================================================== +--- /dev/null ++++ networkstatus/connectionmanager_p.h +@@ -0,0 +1,55 @@ ++/* This file is part of the KDE project ++ Copyright (C) 2007 Will Stephenson ++ ++ This library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Library General Public ++ License version 2 as published by the Free Software Foundation. ++ ++ This library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Library General Public License for more details. ++ ++ You should have received a copy of the GNU Library General Public License ++ along with this library. If not, write to the Free Software ++ Foundation, Inc., 51 Franklin Street, Fifth Floor, ++ Boston, MA 02110-1301, USA. ++ ++ As a special exception, permission is given to link this library ++ with any edition of Qt, and distribute the resulting executable, ++ without including the source code for Qt in the source distribution. ++*/ ++ ++#ifndef CONNECTIONMANAGERPRIVATE_H ++#define CONNECTIONMANAGERPRIVATE_H ++ ++#include ++ ++#include "connectionmanager.h" ++#include "networkstatuscommon.h" ++#include "networkstatusiface_stub.h" ++ ++ ++// ConnectionManager's private parts ++class ConnectionManagerPrivate : public QObject ++{ ++Q_OBJECT ++ friend class ConnectionManager; ++public: ++ ConnectionManagerPrivate( QObject * parent = 0, const char * name = 0); ++ ~ConnectionManagerPrivate(); ++ // this holds the currently active state ++ NetworkStatus::Status status; ++ NetworkStatusIface_stub * service; ++ ConnectionManager::ConnectionPolicy connectPolicy; ++ ConnectionManager::ConnectionPolicy disconnectPolicy; ++ QObject * connectReceiver; ++ const char * connectSlot; ++ QObject * disconnectReceiver; ++ const char * disconnectSlot; ++signals: ++ void connected(); ++ void disconnected(); ++}; ++ ++#endif +Index: networkstatus/Makefile.am +=================================================================== +--- /dev/null ++++ networkstatus/Makefile.am +@@ -0,0 +1,45 @@ ++#SUBDIRS = networkstatustray ++ ++METASOURCES = AUTO ++ ++INCLUDES = -I$(top_srcdir)/kded -I$(top_srcdir) $(all_includes) ++ ++kde_module_LTLIBRARIES = kded_networkstatus.la ++ ++kded_networkstatus_la_SOURCES = networkstatus.cpp networkstatus.skel \ ++ network.cpp ++kded_networkstatus_la_LIBADD = $(LIB_KDECORE) $(LIB_KIO) ./libnetworkstatus.la ++kded_networkstatus_la_LDFLAGS = $(all_libraries) -module -avoid-version ++ ++servicesdir = $(kde_servicesdir)/kded ++ ++services_DATA = networkstatus.desktop ++ ++lib_LTLIBRARIES = libnetworkstatus.la libconnectionmanager.la ++ ++libnetworkstatus_la_LIBADD = $(LIB_KDECORE) ++libnetworkstatus_la_LDFLAGS = $(all_libraries) ++libnetworkstatus_la_SOURCES = networkstatuscommon.cpp ++ ++libconnectionmanager_la_LIBADD = $(LIB_KDECORE) libnetworkstatus.la ++libconnectionmanager_la_LDFLAGS = $(all_libraries) ++libconnectionmanager_la_SOURCES = connectionmanager.cpp connectionmanager_p.cpp networkstatusindicator.cpp connectionmanager.skel networkstatusiface.stub ++ ++noinst_PROGRAMS = networkstatustestservice networkstatustestclient managedconnectiontestclient ++ ++networkstatustestservice_LDFLAGS = $(all_libraries) ++networkstatustestservice_LDADD = $(LIB_KFILE) libnetworkstatus.la ++networkstatustestservice_SOURCES = testservice.cpp testserviceview.ui networkstatusiface.stub ++ ++networkstatustestclient_LDFLAGS = $(all_libraries) ++networkstatustestclient_LDADD = $(LIB_KFILE) libnetworkstatus.la libconnectionmanager.la ++networkstatustestclient_SOURCES = testclient.cpp testclientview.ui ++ ++managedconnectiontestclient_LDFLAGS = $(all_libraries) ++managedconnectiontestclient_LDADD = $(LIB_KFILE) libnetworkstatus.la libconnectionmanager.la ++managedconnectiontestclient_SOURCES = testclient2.cpp testclientview.ui ++ ++noinst_HEADERS = network.h testservice.h testclient.h ++ ++include_HEADERS = networkstatuscommon.h connectionmanager.h networkstatusindicator.h \ ++ networkstatusiface.h +Index: networkstatus/network.cpp +=================================================================== +--- /dev/null ++++ networkstatus/network.cpp +@@ -0,0 +1,62 @@ ++/* This file is part of kdepim. ++ Copyright (C) 2005,2007 Will Stephenson ++ ++ This library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Library General Public ++ License version 2 as published by the Free Software Foundation. ++ ++ This library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Library General Public License for more details. ++ ++ You should have received a copy of the GNU Library General Public License ++ along with this library. If not, write to the Free Software ++ Foundation, Inc., 51 Franklin Street, Fifth Floor, ++ Boston, MA 02110-1301, USA. ++ ++ As a special exception, permission is given to link this library ++ with any edition of Qt, and distribute the resulting executable, ++ without including the source code for Qt in the source distribution. ++*/ ++ ++#include ++ ++#include "network.h" ++ ++Network::Network( NetworkStatus::Properties properties ) ++ : m_name( properties.name ), m_status( properties.status ), m_service( properties.service ) ++{ ++} ++ ++void Network::setStatus( NetworkStatus::Status status ) ++{ ++ m_status = status; ++} ++ ++NetworkStatus::Status Network::status() ++{ ++ return m_status; ++} ++ ++void Network::setName( const QString& name ) ++{ ++ m_name = name; ++} ++ ++QString Network::name() ++{ ++ return m_name; ++} ++ ++QString Network::service() ++{ ++ return m_service; ++} ++ ++void Network::setService( const QString& service ) ++{ ++ m_service = service; ++} ++ ++// vim: sw=4 ts=4 +Index: networkstatus/network.h +=================================================================== +--- /dev/null ++++ networkstatus/network.h +@@ -0,0 +1,60 @@ ++/* This file is part of kdepim. ++ Copyright (C) 2005,2007 Will Stephenson ++ ++ This library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Library General Public ++ License version 2 as published by the Free Software Foundation. ++ ++ This library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Library General Public License for more details. ++ ++ You should have received a copy of the GNU Library General Public License ++ along with this library. If not, write to the Free Software ++ Foundation, Inc., 51 Franklin Street, Fifth Floor, ++ Boston, MA 02110-1301, USA. ++ ++ As a special exception, permission is given to link this library ++ with any edition of Qt, and distribute the resulting executable, ++ without including the source code for Qt in the source distribution. ++*/ ++ ++#ifndef NETWORKSTATUS_NETWORK_H ++#define NETWORKSTATUS_NETWORK_H ++ ++#include "networkstatuscommon.h" ++ ++class Network ++{ ++public: ++ Network( const QString name ); ++ Network( NetworkStatus::Properties properties ); ++ /** ++ * Update the status of this network ++ */ ++ void setStatus( NetworkStatus::Status status ); ++ /** ++ * The connection status of this network ++ */ ++ NetworkStatus::Status status(); ++ /** ++ * The name of this network ++ */ ++ QString name(); ++ void setName( const QString& name ); ++ /** ++ * Returns the service owning this network ++ */ ++ QString service(); ++ void setService( const QString& service ); ++ ++private: ++ Network( const Network & ); ++ QString m_name; ++ NetworkStatus::Status m_status; ++ QString m_service; ++}; ++ ++#endif ++// vim: sw=4 ts=4 +Index: networkstatus/networkstatuscommon.cpp +=================================================================== +--- /dev/null ++++ networkstatus/networkstatuscommon.cpp +@@ -0,0 +1,76 @@ ++/* This file is part of kdepim. ++ Copyright (C) 2005,2007 Will Stephenson ++ ++ This library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Library General Public ++ License version 2 as published by the Free Software Foundation. ++ ++ This library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Library General Public License for more details. ++ ++ You should have received a copy of the GNU Library General Public License ++ along with this library. If not, write to the Free Software ++ Foundation, Inc., 51 Franklin Street, Fifth Floor, ++ Boston, MA 02110-1301, USA. ++ ++ As a special exception, permission is given to link this library ++ with any edition of Qt, and distribute the resulting executable, ++ without including the source code for Qt in the source distribution. ++*/ ++ ++#include "networkstatuscommon.h" ++ ++QDataStream & operator<< ( QDataStream & s, const NetworkStatus::Properties p ) ++{ ++ s << p.name; ++ s << (int)p.status; ++ s << p.service; ++ return s; ++} ++ ++QDataStream & operator>> ( QDataStream & s, NetworkStatus::Properties &p ) ++{ ++ int status; ++ s >> p.name; ++ s >> status; ++ p.status = (NetworkStatus::Status)status; ++ s >> p.service; ++ return s; ++} ++ ++namespace NetworkStatus ++{ ++ QString toString( NetworkStatus::Status st ) ++ { ++ QString str; ++ switch ( st ) { ++ case NetworkStatus::NoNetworks: ++ str = "NoNetworks"; ++ break; ++ case NetworkStatus::Unreachable: ++ str = "Unreachable"; ++ break; ++ case NetworkStatus::OfflineDisconnected: ++ str = "OfflineDisconnected"; ++ break; ++ case NetworkStatus::OfflineFailed: ++ str = "OfflineFailed"; ++ break; ++ case NetworkStatus::ShuttingDown: ++ str = "ShuttingDown"; ++ break; ++ case NetworkStatus::Offline: ++ str = "Offline"; ++ break; ++ case NetworkStatus::Establishing: ++ str = "Establishing"; ++ break; ++ case NetworkStatus::Online: ++ str = "Online"; ++ break; ++ } ++ return str; ++ } ++} // namespace NetworkStatus +Index: networkstatus/networkstatuscommon.h +=================================================================== +--- /dev/null ++++ networkstatus/networkstatuscommon.h +@@ -0,0 +1,52 @@ ++/* This file is part of kdepim ++ Copyright (C) 2005,2007 Will Stephenson ++ ++ This library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Library General Public ++ License version 2 as published by the Free Software Foundation. ++ ++ This library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Library General Public License for more details. ++ ++ You should have received a copy of the GNU Library General Public License ++ along with this library. If not, write to the Free Software ++ Foundation, Inc., 51 Franklin Street, Fifth Floor, ++ Boston, MA 02110-1301, USA. ++ ++ As a special exception, permission is given to link this library ++ with any edition of Qt, and distribute the resulting executable, ++ without including the source code for Qt in the source distribution. ++*/ ++ ++#ifndef NETWORKSTATUS_COMMON_H ++#define NETWORKSTATUS_COMMON_H ++ ++#include ++ ++namespace NetworkStatus ++{ ++ enum Status { NoNetworks = 1, Unreachable, OfflineDisconnected, OfflineFailed, ShuttingDown, Offline, Establishing, Online }; ++ enum RequestResult { RequestAccepted = 1, Connected, UserRefused, Unavailable }; ++ enum UnusedDemandPolicy { All, User, None, Permanent }; ++ ++ // BINARY COMPATIBILITY ALERT BEGIN !!!! ++ struct Properties ++ { ++ QString name; ++ Status status; ++ UnusedDemandPolicy unused1; ++ QCString service; ++ bool unused3; ++ QStringList unused4; ++ }; ++ // BINARY COMPATIBILITY ALERT END !!!! ++ ++ QString toString( Status st ); ++} ++ ++QDataStream & operator>> ( QDataStream & s, NetworkStatus::Properties &p ); ++QDataStream & operator<< ( QDataStream & s, const NetworkStatus::Properties p ); ++ ++#endif +Index: networkstatus/networkstatus.cpp +=================================================================== +--- /dev/null ++++ networkstatus/networkstatus.cpp +@@ -0,0 +1,163 @@ ++/* This file is part of kdepim ++ Copyright (C) 2005,2007 Will Stephenson ++ ++ This library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Library General Public ++ License version 2 as published by the Free Software Foundation. ++ ++ This library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Library General Public License for more details. ++ ++ You should have received a copy of the GNU Library General Public License ++ along with this library. If not, write to the Free Software ++ Foundation, Inc., 51 Franklin Street, Fifth Floor, ++ Boston, MA 02110-1301, USA. ++ ++ As a special exception, permission is given to link this library ++ with any edition of Qt, and distribute the resulting executable, ++ without including the source code for Qt in the source distribution. ++*/ ++ ++#include "networkstatus.h" ++ ++#include ++ ++#include ++#include ++#include ++ ++#include "network.h" ++#include ++ ++extern "C" { ++ KDE_EXPORT KDEDModule* create_networkstatus( const QCString& obj ) ++ { ++ return new NetworkStatusModule( obj ); ++ } ++} ++ ++// INTERNALLY USED STRUCTS AND TYPEDEFS ++ ++typedef QMap< QString, Network * > NetworkMap; ++ ++class NetworkStatusModule::Private ++{ ++public: ++ NetworkMap networks; ++ NetworkStatus::Status status; ++}; ++ ++// CTORS/DTORS ++ ++NetworkStatusModule::NetworkStatusModule( const QCString & obj ) : KDEDModule( obj ), d( new Private ) ++{ ++ d->status = NetworkStatus::NoNetworks; ++ connect( kapp->dcopClient(), SIGNAL( applicationRemoved( const QCString& ) ) , this, SLOT( unregisteredFromDCOP( const QCString& ) ) ); ++ // connect( kapp->dcopClient(), SIGNAL( applicationRegistered( const QCString& ) ) , this, SLOT( registeredToDCOP( const QCString& ) ) ); ++} ++ ++NetworkStatusModule::~NetworkStatusModule() ++{ ++ NetworkMap::ConstIterator it; ++ const NetworkMap::ConstIterator end = d->networks.end(); ++ ++ for ( it = d->networks.begin(); it != end; ++it ) { ++ delete ( *it ); ++ } ++ ++ delete d; ++} ++ ++// CLIENT INTERFACE ++ ++QStringList NetworkStatusModule::networks() ++{ ++ kdDebug() << k_funcinfo << " contains " << d->networks.count() << " networks" << endl; ++ return d->networks.keys(); ++} ++ ++int NetworkStatusModule::status() ++{ ++ kdDebug() << k_funcinfo << " status: " << (int)d->status << endl; ++ return (int)d->status; ++} ++ ++//protected: ++ ++void NetworkStatusModule::updateStatus() ++{ ++ NetworkStatus::Status bestStatus = NetworkStatus::NoNetworks; ++ const NetworkStatus::Status oldStatus = d->status; ++ ++ NetworkMap::ConstIterator it; ++ const NetworkMap::ConstIterator end = d->networks.end(); ++ for ( it = d->networks.begin(); it != end; ++it ) { ++ if ( ( *it )->status() > bestStatus ) ++ bestStatus = ( *it )->status(); ++ } ++ d->status = bestStatus; ++ ++ if ( oldStatus != d->status ) { ++ statusChange( (int)d->status ); ++ } ++} ++ ++void NetworkStatusModule::unregisteredFromDCOP( const QCString & appId ) ++{ ++ // unregister and delete any networks owned by a service that has just unregistered ++ NetworkMap::Iterator it = d->networks.begin(); ++ const NetworkMap::Iterator end = d->networks.end(); ++ while (it != d->networks.end()) ++ { ++ if ( ( *it )->service() == QString( appId ) ) ++ { ++ NetworkMap::Iterator toRemove = it++; ++ delete *toRemove; ++ d->networks.remove( toRemove ); ++ updateStatus(); ++ continue; ++ } ++ ++it; ++ } ++} ++ ++// SERVICE INTERFACE // ++void NetworkStatusModule::setNetworkStatus( const QString & networkName, int st ) ++{ ++ kdDebug() << k_funcinfo << networkName << ", " << st << endl; ++ NetworkStatus::Status changedStatus = (NetworkStatus::Status)st; ++ Network * net = 0; ++ NetworkMap::Iterator it = d->networks.find( networkName ); ++ if ( it != d->networks.end() ) { ++ net = (*it); ++ net->setStatus( changedStatus ); ++ updateStatus(); ++ } ++ else ++ kdDebug() << " No network named '" << networkName << "' found." << endl; ++} ++ ++void NetworkStatusModule::registerNetwork( const NetworkStatus::Properties properties ) ++{ ++ kdDebug() << k_funcinfo << properties.name << ", with status " << properties.status << endl; ++ ++ d->networks.insert( properties.name, new Network( properties ) ); ++ updateStatus(); ++} ++ ++void NetworkStatusModule::unregisterNetwork( const QString & networkName ) ++{ ++ kdDebug() << k_funcinfo << networkName << endl; ++ ++ NetworkMap::Iterator it = d->networks.find( networkName ); ++ if ( it != d->networks.end() ) { ++ delete *it; ++ d->networks.remove( it ); ++ } ++ updateStatus(); ++} ++ ++#include "networkstatus.moc" ++// vim: set noet sw=4 ts=4: +Index: networkstatus/networkstatus.desktop +=================================================================== +--- /dev/null ++++ networkstatus/networkstatus.desktop +@@ -0,0 +1,98 @@ ++[Desktop Entry] ++Encoding=UTF-8 ++Name=Network Status Daemon ++Name[af]=Netwerk status bediener ++Name[ar]=مراقب القرص Ùˆ التنÙيذ لحالة الشبكة ++Name[bg]=Демон за ÑÑŠÑтоÑние на мрежата ++Name[ca]=Dimoni de l'estat de la xarxa ++Name[cs]=Démon stavu sítÄ› ++Name[da]=Netværkstatusdæmon ++Name[de]=Ãœberwachung des Netzwerkstatus ++Name[el]=Δαίμονας κατάστασης δικτÏου ++Name[es]=Daemon de estado de la red ++Name[et]=Võrguoleku deemon ++Name[eu]=Sarearen egoera deabrua ++Name[fa]=شبح وضعیت شبکه ++Name[fi]=Verkkotilan tarkkailija ++Name[fr]=Suivi de l'état du réseau ++Name[fy]=Netwurktastândaemon ++Name[gl]=Daemon do Estado da Rede ++Name[hu]=Hálózati állapotjelzÅ‘ szolgáltatás ++Name[is]=Netstöðupúki ++Name[it]=Demone dello stato della rete ++Name[ja]=ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹ãƒ‡ãƒ¼ãƒ¢ãƒ³ ++Name[kk]=Желі күйінің қызметі ++Name[km]=ដáŸáž˜áž·áž“​ស្ážáž¶áž“ភាព​បណ្ដាញ ++Name[lt]=Tinklo statuso tarnyba ++Name[mk]=Даемон за мрежен ÑÑ‚Ð°Ñ‚ÑƒÑ ++Name[ms]=Daemon Berstatus Rangkaian ++Name[nb]=Statusnisse for nettverket ++Name[nds]=Nettwarkstatus-Dämoon ++Name[ne]=सञà¥à¤œà¤¾à¤² सà¥à¤¥à¤¿à¤¤à¤¿ डेइमन ++Name[nl]=Netwerkstatusdaemon ++Name[nn]=Statusnisse for nettverket ++Name[pl]=UsÅ‚uga stanu sieci ++Name[pt]=Servidor de Estado de Rede ++Name[pt_BR]=Daemon de Status da Rede ++Name[ru]=Служба ÑоÑтоÑÐ½Ð¸Ñ Ñети ++Name[sk]=Daemon stavu siete ++Name[sl]=Demon za omrežno stanje ++Name[sr]=Демон за ÑÑ‚Ð°Ñ‚ÑƒÑ Ð¼Ñ€ÐµÐ¶Ðµ ++Name[sr@Latn]=Demon za status mreže ++Name[sv]=Nätverksstatusdemon ++Name[ta]=வலைபà¯à®ªà®¿à®©à¯à®©à®²à¯ நிலை டெமான௠++Name[tr]=AÄŸ Durum Ä°zleyici ++Name[uk]=Демон Ñтану мережі ++Name[zh_CN]=网络状æ€å®ˆæŠ¤ç¨‹åº ++Name[zh_TW]=ç¶²è·¯ç‹€æ…‹å®ˆè­·ç¨‹å¼ ++Comment=Tracks status of network interfaces and provides notification to applications using the network. ++Comment[af]=Hou tred van die status van netwerk intervlakke en verskaf kennisgewings na programme wat die netwerk gebruik. ++Comment[bg]=Следене на ÑÑŠÑтоÑнието на мрежата и предаване на информациÑта на програмите, които имат нужда ++Comment[ca]=Controla l'estat de les interfícies de xarxa i proporciona notificacions a les aplicacions que usen la xarxa. ++Comment[cs]=ZjiÅ¡'tuje stav síťových rozhraní a upozorňuje v případÄ› přístupu aplikací k síti. ++Comment[da]=Sporer status af netværksgrænseflade og sørger for meddelelser til programmer der bruger netværket. ++Comment[de]=Ãœberprüft den Netzwerk-Status und benachrichtigt anfragende Anwendungen ++Comment[el]=ΠαÏακολουθεί την κατάσταση του δικτÏου και παÏέχει ειδοποιήσεις σε εφαÏμογές που χÏησιμοποιοÏν το δίκτυο. ++Comment[es]=Sigue la pista de las interfaces de red y proporciona notificaciones a las aplicaciones que están usando la red. ++Comment[et]=Jälgib võrguliideste olekut ja annab sellest võrgu vahendusel rakendustele teada. ++Comment[eu]=Sare interfazeen egoera jarraitzen du eta sarea darabilten aplikazioei jakinarazten die. ++Comment[fa]=وضعیت واسطهای شبکه را شیار داده Ùˆ با استÙاده از شبکه، برای کاربردها اخطار Ùراهم می‌کند. ++Comment[fi]=Tarkkailee verkkoliitäntöjen tilaa ja varoittaa verkkoa käyttäviä sovelluksia. ++Comment[fr]=Surveille l'état des interfaces réseaux et fournit des notifications aux applications qui utilisent le réseau ++Comment[fy]=Hâldt de tastân by fan de Netwurkynterfaces en hâldt dêr de tapassings fan op de hichte. ++Comment[gl]=Monitoriza o estado das interfaces de rede e fornece notificacións ás aplicacións que usen a rede. ++Comment[hu]=Figyeli a hálózati csatolók állapotát és értesítési lehetÅ‘séget biztosít hálózati alkalmazások számára. ++Comment[is]=Fylgist með stöðu netkorta og sendir tilkynningar til forrita sem nota netið. ++Comment[it]=Controlla lo stato delle interfacce di rete e fornisce notifiche alle applicazioni che usano al rete. ++Comment[ja]=ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ãƒ¼ã‚¹ã®çŠ¶æ…‹ã‚’追跡ã—ã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚’用ã„るアプリケーションã«é€šçŸ¥ã—ã¾ã™ ++Comment[kk]=Желі интерфейÑтерінің күйін бақылап, желіні қолданатын бағдарламаларын құлақтандыру қызметі. ++Comment[km]=ážáž¶áž˜ážŠáž¶áž“​ស្ážáž¶áž“ភាព​របស់​ចំណុច​ប្រទាក់​បណ្ដាញ ព្រម​ទាំង​ផ្ដល់​នូវ​ការ​ជូនដំណឹង​ទៅ​កម្មវិធី ដែល​ប្រើ​បណ្ដាញ ។ ++Comment[lt]=Seka tinklo sÄ…sajų bÅ«senÄ… ir informuoja apie jas programas, naudojanÄias tinklÄ… ++Comment[mk]=Го Ñледи ÑтатуÑот на мрежните интерфејÑи и дава извеÑтувања на апликациите што ја кориÑтат мрежата. ++Comment[ms]=Menjejak status antara muka rangkaian dan memberitahu aplikasi yang menggunakan rangkaian tersebut. ++Comment[nb]=OvervÃ¥ker status for nettverksgrensesnitt og varsler programmer som bruker nettverket. ++Comment[nds]=Överwacht den Tostand vun Nettwark-Koppelsteden un sendt Narichten na Programmen, de dat Nettwark bruukt. ++Comment[ne]=सञà¥à¤œà¤¾à¤² इनà¥à¤Ÿà¤°à¤«à¥‡à¤¸à¤•à¥‹ सà¥à¤¥à¤¿à¤¤à¤¿ टà¥à¤°à¥à¤¯à¤¾à¤• गरà¥à¤¦à¤› र सञà¥à¤œà¤¾à¤² पà¥à¤°à¤¯à¥‹à¤— गरेर अनà¥à¤ªà¥à¤°à¤¯à¥‹à¤—मा जानकारी उपलबà¥à¤§ गराउछ । ++Comment[nl]=Houdt de status bij van de netwerkinterfaces en houdt daar de toepassingen van op de hoogte. ++Comment[nn]=Overvakar status for nettverksgrensesnitt og varslar program som brukar nettverket. ++Comment[pl]=Åšledzi stan interfejsów sieciowych i powiadamia programy używajÄ…ce sieci. ++Comment[pt]=Vigia o estado das interfaces de rede e avisa as aplicações que utilizam a rede. ++Comment[pt_BR]=Controla o status das interfaces de rede e fornece notificações para aplicativos utilizando a rede. ++Comment[ru]=Служба отÑÐ»ÐµÐ¶Ð¸Ð²Ð°Ð½Ð¸Ñ ÑоÑтоÑÐ½Ð¸Ñ Ñетевых интерфейÑов и Ð¾Ð±Ñ€Ð°Ñ‰ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ð¹ к Ñети. ++Comment[sk]=Sleduje stav sieÅ¥ových rozhraní a poskytuje upozornenia aplikáciám používajúcim sieÅ¥. ++Comment[sl]=Sledi stanju omrežnim vmesnikom in omogoÄa obvestila programom, ki uporabljajo omrežje ++Comment[sr]=Прати ÑÑ‚Ð°Ñ‚ÑƒÑ Ð¼Ñ€ÐµÐ¶Ð½Ð¸Ñ… интерфејÑа и пружа обавештења програмима који кориÑте мрежу. ++Comment[sr@Latn]=Prati status mrežnih interfejsa i pruža obaveÅ¡tenja programima koji koriste mrežu. ++Comment[sv]=Bevakar status för nätverksgränssnitt och tillhandahÃ¥ller underrättelser till program som använder nätverket. ++Comment[ta]=வலைபà¯à®ªà®¿à®©à¯à®©à®²à¯ˆà®ªà¯ பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à®¿ வலைபà¯à®ªà®¿à®©à¯à®©à®²à¯ இடைமà¯à®•à®™à¯à®•à®³à®¿à®©à¯ நிலையை கணà¯à®•à®¾à®£à®¿à®•à¯à®•à®¿à®±à®¤à¯ மறà¯à®±à¯à®®à¯ பயனà¯à®ªà®¾à®Ÿà¯à®•à®³à¯à®•à¯à®•à¯ அறிவிபà¯à®ªà¯ˆ வழஙà¯à®•à¯à®•à®¿à®±à®¤à¯. ++Comment[uk]=Слідкує за Ñтаном інтерфейÑів мережі Ñ– Ñповіщає програми, Ñкі кориÑтуютьÑÑ Ð¼ÐµÑ€ÐµÐ¶ÐµÑŽ. ++Comment[zh_CN]=跟踪网å¡çš„状æ€å¹¶ä¸ºåº”用程åºæ供使用网络的通知。 ++Comment[zh_TW]=追蹤網路介é¢çš„狀態,並æ供使用網路的應用程å¼çš„通知。 ++Type=Service ++ServiceTypes=KDEDModule ++X-KDE-ModuleType=Library ++X-KDE-Library=networkstatus ++X-KDE-FactoryName=networkstatus ++X-KDE-Kded-autoload=true ++X-KDE-Kded-load-on-demand=true ++ +Index: networkstatus/networkstatus.h +=================================================================== +--- /dev/null ++++ networkstatus/networkstatus.h +@@ -0,0 +1,66 @@ ++/* This file is part of kdepim ++ Copyright (C) 2005,2007 Will Stephenson ++ ++ This library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Library General Public ++ License version 2 as published by the Free Software Foundation. ++ ++ This library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Library General Public License for more details. ++ ++ You should have received a copy of the GNU Library General Public License ++ along with this library. If not, write to the Free Software ++ Foundation, Inc., 51 Franklin Street, Fifth Floor, ++ Boston, MA 02110-1301, USA. ++ ++ As a special exception, permission is given to link this library ++ with any edition of Qt, and distribute the resulting executable, ++ without including the source code for Qt in the source distribution. ++*/ ++ ++#ifndef KDED_NETWORKSTATUS_H ++#define KDED_NETWORKSTATUS_H ++ ++#include ++ ++#include "networkstatuscommon.h" ++#include "network.h" ++ ++class NetworkStatusModule : virtual public KDEDModule ++{ ++Q_OBJECT ++K_DCOP ++public: ++ NetworkStatusModule( const QCString& obj ); ++ ~NetworkStatusModule(); ++k_dcop: ++ // Client interface ++ QStringList networks(); ++ int status(); ++ // Service interface ++ void setNetworkStatus( const QString & networkName, int status ); ++ void registerNetwork( NetworkStatus::Properties properties ); ++ void unregisterNetwork( const QString & networkName ); ++k_dcop_signals: ++ /** ++ * A status change occurred affecting the overall connectivity ++ * @param status The new status ++ */ ++ void statusChange( int status ); ++protected slots: ++ //void registeredToDCOP( const QCString& appId ); ++ void unregisteredFromDCOP( const QCString& appId ); ++ ++protected: ++ // recalculate cached status ++ void updateStatus(); ++ ++private: ++ class Private; ++ Private *d; ++}; ++ ++#endif ++// vim: sw=4 ts=4 +Index: networkstatus/networkstatusiface.h +=================================================================== +--- /dev/null ++++ networkstatus/networkstatusiface.h +@@ -0,0 +1,50 @@ ++/* This file is part of kdepim. ++ Copyright (C) 2005,2007 Will Stephenson ++ ++ This library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Library General Public ++ License version 2 as published by the Free Software Foundation. ++ ++ This library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Library General Public License for more details. ++ ++ You should have received a copy of the GNU Library General Public License ++ along with this library. If not, write to the Free Software ++ Foundation, Inc., 51 Franklin Street, Fifth Floor, ++ Boston, MA 02110-1301, USA. ++ ++ As a special exception, permission is given to link this library ++ with any edition of Qt, and distribute the resulting executable, ++ without including the source code for Qt in the source distribution. ++*/ ++ ++#ifndef KDED_NETWORKSTATUSIFACE_H ++#define KDED_NETWORKSTATUSIFACE_H ++ ++#include ++#include ++ ++#include "networkstatuscommon.h" ++ ++class NetworkStatusIface : virtual public DCOPObject ++{ ++K_DCOP ++k_dcop: ++ // Client interface ++ virtual QStringList networks() = 0; ++ virtual int status() = 0; ++ // Service interface ++ virtual void setNetworkStatus( const QString & networkName, int status ) = 0; ++ virtual void registerNetwork( NetworkStatus::Properties properties ) = 0; ++ virtual void unregisterNetwork( const QString & networkName ) = 0 ; ++k_dcop_signals: ++ /** ++ * A status change occurred affecting the overall connectivity ++ * @param status The new status ++ */ ++ virtual void statusChange( int status ) = 0; ++}; ++#endif ++// vim: sw=4 ts=4 +Index: networkstatus/networkstatusindicator.cpp +=================================================================== +--- /dev/null ++++ networkstatus/networkstatusindicator.cpp +@@ -0,0 +1,64 @@ ++/* This file is part of the KDE project ++ Copyright (C) 2007 Will Stephenson ++ ++ This library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Library General Public ++ License version 2 as published by the Free Software Foundation. ++ ++ This library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Library General Public License for more details. ++ ++ You should have received a copy of the GNU Library General Public License ++ along with this library. If not, write to the Free Software ++ Foundation, Inc., 51 Franklin Street, Fifth Floor, ++ Boston, MA 02110-1301, USA. ++ ++ As a special exception, permission is given to link this library ++ with any edition of Qt, and distribute the resulting executable, ++ without including the source code for Qt in the source distribution. ++*/ ++ ++#include ++#include ++#include ++#include ++ ++#include "connectionmanager.h" ++ ++#include "networkstatusindicator.h" ++ ++StatusBarNetworkStatusIndicator::StatusBarNetworkStatusIndicator( ++ QWidget * parent, const char * name ) : QHBox( parent, name )/*, d( new StatusBarNetworkStatusIndicatorPrivate )*/ ++{ ++ setMargin( 2 ); ++ setSpacing( 1 ); ++ QLabel * label = new QLabel( this, "offlinemodelabel" ); ++ label->setPixmap( SmallIcon("connect_no") ); ++ QToolTip::add( label, i18n( "The desktop is offline" ) ); ++ ++ connect( ConnectionManager::self(), SIGNAL( statusChanged( NetworkStatus::Status ) ), ++ SLOT( networkStatusChanged( NetworkStatus::Status) ) ); ++ ++} ++ ++void StatusBarNetworkStatusIndicator::init() ++{ ++ networkStatusChanged( ConnectionManager::self()->status()); ++} ++ ++StatusBarNetworkStatusIndicator::~StatusBarNetworkStatusIndicator() ++{ ++} ++ ++void StatusBarNetworkStatusIndicator::networkStatusChanged( NetworkStatus::Status status ) ++{ ++ if ( status == NetworkStatus::Online || status == NetworkStatus::NoNetworks ) { ++ hide(); ++ } else { ++ show(); ++ } ++} ++ ++#include "networkstatusindicator.moc" +Index: networkstatus/networkstatusindicator.h +=================================================================== +--- /dev/null ++++ networkstatus/networkstatusindicator.h +@@ -0,0 +1,42 @@ ++/* This file is part of the KDE project ++ Copyright (C) 2007 Will Stephenson ++ ++ This library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Library General Public ++ License version 2 as published by the Free Software Foundation. ++ ++ This library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Library General Public License for more details. ++ ++ You should have received a copy of the GNU Library General Public License ++ along with this library. If not, write to the Free Software ++ Foundation, Inc., 51 Franklin Street, Fifth Floor, ++ Boston, MA 02110-1301, USA. ++ ++ As a special exception, permission is given to link this library ++ with any edition of Qt, and distribute the resulting executable, ++ without including the source code for Qt in the source distribution. ++*/ ++ ++#ifndef KDE_NETWORKSTATUS_INDICATOR_H ++#define KDE_NETWORKSTATUS_INDICATOR_H ++ ++#include ++#include ++#include ++ ++class StatusBarNetworkStatusIndicator : public QHBox ++{ ++Q_OBJECT ++public: ++ StatusBarNetworkStatusIndicator( QWidget * parent, const char * name ); ++ virtual ~StatusBarNetworkStatusIndicator(); ++ void init(); ++protected slots: ++ void networkStatusChanged( NetworkStatus::Status status ); ++}; ++ ++#endif ++ +Index: networkstatus/networkstatus.kdevelop +=================================================================== +--- /dev/null ++++ networkstatus/networkstatus.kdevelop +@@ -0,0 +1,108 @@ ++ ++ ++ ++ Will Stephenson ++ wstephenson@suse.de ++ $VERSION$ ++ KDevKDEAutoProject ++ C++ ++ ++ Qt ++ KDE ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ false ++ false ++ ++ ++ *.o,*.lo,CVS ++ false ++ ++ ++ ++ ++ ada ++ ada_bugs_gcc ++ bash ++ bash_bugs ++ clanlib ++ fortran_bugs_gcc ++ gnome1 ++ gnustep ++ gtk ++ gtk_bugs ++ haskell ++ haskell_bugs_ghc ++ java_bugs_gcc ++ java_bugs_sun ++ opengl ++ pascal_bugs_fp ++ php ++ php_bugs ++ perl ++ perl_bugs ++ python ++ python_bugs ++ ruby ++ ruby_bugs ++ sdl ++ stl ++ sw ++ w3c-dom-level2-html ++ w3c-svg ++ w3c-uaag10 ++ wxwidgets_bugs ++ ++ ++ qmake User Guide ++ ++ ++ ++ ++ libtool ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ executable ++ ++ ++ kded_networkstatus.la ++ ++ ++ ++ ++ ++ true ++ true ++ true ++ false ++ true ++ true ++ true ++ 250 ++ 400 ++ 250 ++ ++ ++ +Index: networkstatus/README.statetransition +=================================================================== +--- /dev/null ++++ networkstatus/README.statetransition +@@ -0,0 +1,29 @@ ++This table defines the actions to be taken on state transition. ++ ++TODO: potentially add extra states OnlineReading and OnlineWriting ++ ++ NEW ++ |Offline | Online | ++---+---+----------------+---------------+ ++ | | |N|set online | ++ | | |L|reload | ++ | O | |C|resources | ++ | F | +---------------+ ++ | F | |L|set online | ++O | | |C|reload res. | ++L | | | |write res. | ++D +---+----------------+---------------+ ++ | |N|set offline | | ++ | |C| | | ++ | | | | | ++ | O +---------------+| | ++ | N |U|set offline | | ++ | |W|write locally | | ++ | |C|(subject to | | ++ | | | save policy)| | ++---+---+----------------+---------------+ ++LC = Local changes exist ++NLC = No local changes exist ++UWC = Unsaved changes exist ++NC = no changes exist ++ +Index: networkstatus/.svn/dir-prop-base +=================================================================== +--- /dev/null ++++ networkstatus/.svn/dir-prop-base +@@ -0,0 +1,11 @@ ++K 10 ++svn:ignore ++V 83 ++Makefile ++Makefile.in ++Makefile.calls.in ++Makefile.rules.in ++*_skel.cpp ++*.kidl ++Doxyfile ++END +Index: networkstatus/.svn/entries +=================================================================== +--- /dev/null ++++ networkstatus/.svn/entries +@@ -0,0 +1,342 @@ ++8 ++ ++dir ++712059 ++svn+ssh://mueller@svn.kde.org/home/kde/branches/work/~wstephens/kdelibs/networkstatus ++svn+ssh://mueller@svn.kde.org/home/kde ++ ++ ++ ++2007-08-06T09:06:39.201606Z ++696919 ++wstephens ++has-props ++ ++svn:special svn:externals svn:needs-lock ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++283d02a7-25f6-0310-bc7c-ecb5cbfe19da ++ ++network.h ++file ++ ++ ++ ++ ++2007-09-13T13:09:10.000000Z ++034300313451d5b6a95bff1022861227 ++2007-08-06T09:06:39.201606Z ++696919 ++wstephens ++has-props ++ ++networkstatusindicator.h ++file ++ ++ ++ ++ ++2007-09-13T13:09:10.000000Z ++bbc7c6ea3b8da983d477d53556e39dd0 ++2007-08-06T09:06:39.201606Z ++696919 ++wstephens ++ ++connectionmanager.h ++file ++ ++ ++ ++ ++2007-09-13T13:09:10.000000Z ++7992e623b84fd99f9ff17c613a7269a3 ++2007-08-06T09:06:39.201606Z ++696919 ++wstephens ++has-props ++ ++testservice.cpp ++file ++ ++ ++ ++ ++2007-09-13T13:09:10.000000Z ++527dc95a7ae39d565bd29d5fe59de31a ++2007-08-06T09:06:39.201606Z ++696919 ++wstephens ++has-props ++ ++testclient2.cpp ++file ++ ++ ++ ++ ++2007-09-13T13:09:10.000000Z ++c426585cf5d9e3f4b06adcaff0a3ef32 ++2007-08-06T09:06:39.201606Z ++696919 ++wstephens ++ ++networkstatus.h ++file ++ ++ ++ ++ ++2007-09-13T13:09:10.000000Z ++8ca1d871b31d5840e2e3d24da4693f1d ++2007-08-06T09:06:39.201606Z ++696919 ++wstephens ++has-props ++ ++testclientview.ui ++file ++ ++ ++ ++ ++2007-09-13T13:09:10.000000Z ++8f63eb3db978c53143417ad33d45076b ++2007-08-06T09:06:39.201606Z ++696919 ++wstephens ++ ++testservice.h ++file ++ ++ ++ ++ ++2007-09-13T13:09:10.000000Z ++2b5693b2e174ebf96e460a52cfcf9739 ++2007-08-06T09:06:39.201606Z ++696919 ++wstephens ++has-props ++ ++testclient2.h ++file ++ ++ ++ ++ ++2007-09-13T13:09:10.000000Z ++3b9f645e56a92014b7a6547c5bc88527 ++2007-08-06T09:06:39.201606Z ++696919 ++wstephens ++ ++README.statetransition ++file ++ ++ ++ ++ ++2007-09-13T13:09:10.000000Z ++0091b6bdce4abe1e1260bf2a4cce984f ++2005-02-11T15:15:30.000000Z ++388364 ++wstephens ++has-props ++ ++networkstatuscommon.cpp ++file ++ ++ ++ ++ ++2007-09-13T13:09:10.000000Z ++1516e99224ce850fb6d134346fd9d074 ++2007-08-06T09:06:39.201606Z ++696919 ++wstephens ++has-props ++ ++connectionmanager_p.cpp ++file ++ ++ ++ ++ ++2007-09-13T13:09:10.000000Z ++07e9643c6cdb39d28abc9c8992bcab23 ++2007-08-06T09:06:39.201606Z ++696919 ++wstephens ++ ++networkstatuscommon.h ++file ++712062 ++ ++ ++ ++2007-09-13T13:10:21.000000Z ++a4f22eecd7d0a0fdcc78c9c31d5f14fd ++2007-09-13T13:12:05.866586Z ++712062 ++mueller ++has-props ++ ++testclient.cpp ++file ++ ++ ++ ++ ++2007-09-13T13:09:10.000000Z ++d932143bab5c7985bc48e64e2bf0c227 ++2007-08-06T09:06:39.201606Z ++696919 ++wstephens ++ ++connectionmanager_p.h ++file ++ ++ ++ ++ ++2007-09-13T13:09:10.000000Z ++34ed7e34d50ae4b36342a6cc250ad386 ++2007-08-06T09:06:39.201606Z ++696919 ++wstephens ++ ++testclient.h ++file ++ ++ ++ ++ ++2007-09-13T13:09:10.000000Z ++67d3671e5fbeb51a333550f52ec34294 ++2007-08-06T09:06:39.201606Z ++696919 ++wstephens ++ ++networkstatus.kdevelop ++file ++ ++ ++ ++ ++2007-09-13T13:09:10.000000Z ++64e6cd906f82dad6a3c70a8dd7e69c3c ++2005-01-24T08:48:57.000000Z ++381869 ++wstephens ++has-props ++ ++networkstatus.desktop ++file ++ ++ ++ ++ ++2007-09-13T13:09:10.000000Z ++1bc32c39d8c6ed9c63e6fdc1b3d34aba ++2007-08-06T09:06:39.201606Z ++696919 ++wstephens ++has-props ++ ++testserviceview.ui ++file ++ ++ ++ ++ ++2007-09-13T13:09:10.000000Z ++f8883c2425f16054c8cfd99a6c288000 ++2007-08-06T09:06:39.201606Z ++696919 ++wstephens ++ ++Makefile.am ++file ++712061 ++ ++ ++ ++2007-09-13T13:10:11.000000Z ++70d1b224f8edc970fbdf2f4af63282f0 ++2007-09-13T13:11:26.289844Z ++712061 ++mueller ++has-props ++ ++network.cpp ++file ++ ++ ++ ++ ++2007-09-13T13:09:10.000000Z ++1f481f54f0161b8a65d00753d6397904 ++2007-08-06T09:06:39.201606Z ++696919 ++wstephens ++has-props ++ ++networkstatusindicator.cpp ++file ++ ++ ++ ++ ++2007-09-13T13:09:10.000000Z ++243176eca79394c0e2a763b1e56a0690 ++2007-08-06T09:06:39.201606Z ++696919 ++wstephens ++ ++networkstatusiface.h ++file ++ ++ ++ ++ ++2007-09-13T13:09:10.000000Z ++285a14008068eb0cd26e3af2bb8fbb92 ++2007-08-06T09:06:39.201606Z ++696919 ++wstephens ++ ++connectionmanager.cpp ++file ++ ++ ++ ++ ++2007-09-13T13:09:10.000000Z ++922d360b2e43b6b35f56c0d97ab1afa9 ++2007-08-06T09:06:39.201606Z ++696919 ++wstephens ++has-props ++ ++networkstatus.cpp ++file ++ ++ ++ ++ ++2007-09-13T13:09:10.000000Z ++433313b5f03259de305b6d722c0251e5 ++2007-08-06T09:06:39.201606Z ++696919 ++wstephens ++has-props ++ +Index: networkstatus/.svn/format +=================================================================== +--- /dev/null ++++ networkstatus/.svn/format +@@ -0,0 +1 @@ ++8 +Index: networkstatus/.svn/prop-base/connectionmanager.cpp.svn-base +=================================================================== +--- /dev/null ++++ networkstatus/.svn/prop-base/connectionmanager.cpp.svn-base +@@ -0,0 +1,13 @@ ++K 13 ++svn:eol-style ++V 6 ++native ++K 12 ++svn:keywords ++V 23 ++Author Date Id Revision ++K 13 ++svn:mime-type ++V 13 ++text/x-c++src ++END +Index: networkstatus/.svn/prop-base/connectionmanager.h.svn-base +=================================================================== +--- /dev/null ++++ networkstatus/.svn/prop-base/connectionmanager.h.svn-base +@@ -0,0 +1,13 @@ ++K 13 ++svn:eol-style ++V 6 ++native ++K 12 ++svn:keywords ++V 23 ++Author Date Id Revision ++K 13 ++svn:mime-type ++V 11 ++text/x-chdr ++END +Index: networkstatus/.svn/prop-base/Makefile.am.svn-base +=================================================================== +--- /dev/null ++++ networkstatus/.svn/prop-base/Makefile.am.svn-base +@@ -0,0 +1,13 @@ ++K 13 ++svn:eol-style ++V 6 ++native ++K 12 ++svn:keywords ++V 23 ++Author Date Id Revision ++K 13 ++svn:mime-type ++V 9 ++text/x-am ++END +Index: networkstatus/.svn/prop-base/network.cpp.svn-base +=================================================================== +--- /dev/null ++++ networkstatus/.svn/prop-base/network.cpp.svn-base +@@ -0,0 +1,13 @@ ++K 13 ++svn:eol-style ++V 6 ++native ++K 12 ++svn:keywords ++V 23 ++Author Date Id Revision ++K 13 ++svn:mime-type ++V 13 ++text/x-c++src ++END +Index: networkstatus/.svn/prop-base/network.h.svn-base +=================================================================== +--- /dev/null ++++ networkstatus/.svn/prop-base/network.h.svn-base +@@ -0,0 +1,13 @@ ++K 13 ++svn:eol-style ++V 6 ++native ++K 12 ++svn:keywords ++V 23 ++Author Date Id Revision ++K 13 ++svn:mime-type ++V 11 ++text/x-chdr ++END +Index: networkstatus/.svn/prop-base/networkstatuscommon.cpp.svn-base +=================================================================== +--- /dev/null ++++ networkstatus/.svn/prop-base/networkstatuscommon.cpp.svn-base +@@ -0,0 +1,13 @@ ++K 13 ++svn:eol-style ++V 6 ++native ++K 12 ++svn:keywords ++V 23 ++Author Date Id Revision ++K 13 ++svn:mime-type ++V 13 ++text/x-c++src ++END +Index: networkstatus/.svn/prop-base/networkstatuscommon.h.svn-base +=================================================================== +--- /dev/null ++++ networkstatus/.svn/prop-base/networkstatuscommon.h.svn-base +@@ -0,0 +1,13 @@ ++K 13 ++svn:eol-style ++V 6 ++native ++K 12 ++svn:keywords ++V 23 ++Author Date Id Revision ++K 13 ++svn:mime-type ++V 11 ++text/x-chdr ++END +Index: networkstatus/.svn/prop-base/networkstatus.cpp.svn-base +=================================================================== +--- /dev/null ++++ networkstatus/.svn/prop-base/networkstatus.cpp.svn-base +@@ -0,0 +1,13 @@ ++K 13 ++svn:eol-style ++V 6 ++native ++K 12 ++svn:keywords ++V 23 ++Author Date Id Revision ++K 13 ++svn:mime-type ++V 13 ++text/x-c++src ++END +Index: networkstatus/.svn/prop-base/networkstatus.desktop.svn-base +=================================================================== +--- /dev/null ++++ networkstatus/.svn/prop-base/networkstatus.desktop.svn-base +@@ -0,0 +1,13 @@ ++K 13 ++svn:eol-style ++V 6 ++native ++K 12 ++svn:keywords ++V 23 ++Author Date Id Revision ++K 13 ++svn:mime-type ++V 14 ++text/x-desktop ++END +Index: networkstatus/.svn/prop-base/networkstatus.h.svn-base +=================================================================== +--- /dev/null ++++ networkstatus/.svn/prop-base/networkstatus.h.svn-base +@@ -0,0 +1,13 @@ ++K 13 ++svn:eol-style ++V 6 ++native ++K 12 ++svn:keywords ++V 23 ++Author Date Id Revision ++K 13 ++svn:mime-type ++V 11 ++text/x-chdr ++END +Index: networkstatus/.svn/prop-base/networkstatus.kdevelop.svn-base +=================================================================== +--- /dev/null ++++ networkstatus/.svn/prop-base/networkstatus.kdevelop.svn-base +@@ -0,0 +1,5 @@ ++K 12 ++svn:keywords ++V 23 ++Author Date Id Revision ++END +Index: networkstatus/.svn/prop-base/README.statetransition.svn-base +=================================================================== +--- /dev/null ++++ networkstatus/.svn/prop-base/README.statetransition.svn-base +@@ -0,0 +1,5 @@ ++K 12 ++svn:keywords ++V 23 ++Author Date Id Revision ++END +Index: networkstatus/.svn/prop-base/testservice.cpp.svn-base +=================================================================== +--- /dev/null ++++ networkstatus/.svn/prop-base/testservice.cpp.svn-base +@@ -0,0 +1,13 @@ ++K 13 ++svn:eol-style ++V 6 ++native ++K 12 ++svn:keywords ++V 23 ++Author Date Id Revision ++K 13 ++svn:mime-type ++V 13 ++text/x-c++src ++END +Index: networkstatus/.svn/prop-base/testservice.h.svn-base +=================================================================== +--- /dev/null ++++ networkstatus/.svn/prop-base/testservice.h.svn-base +@@ -0,0 +1,13 @@ ++K 13 ++svn:eol-style ++V 6 ++native ++K 12 ++svn:keywords ++V 23 ++Author Date Id Revision ++K 13 ++svn:mime-type ++V 11 ++text/x-chdr ++END +Index: networkstatus/.svn/text-base/connectionmanager.cpp.svn-base +=================================================================== +--- /dev/null ++++ networkstatus/.svn/text-base/connectionmanager.cpp.svn-base +@@ -0,0 +1,171 @@ ++/* This file is part of kdepim. ++ Copyright (C) 2005,2007 Will Stephenson ++ ++ This library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Library General Public ++ License version 2 as published by the Free Software Foundation. ++ ++ This library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Library General Public License for more details. ++ ++ You should have received a copy of the GNU Library General Public License ++ along with this library. If not, write to the Free Software ++ Foundation, Inc., 51 Franklin Street, Fifth Floor, ++ Boston, MA 02110-1301, USA. ++ ++ As a special exception, permission is given to link this library ++ with any edition of Qt, and distribute the resulting executable, ++ without including the source code for Qt in the source distribution. ++*/ ++ ++#include ++#include ++#include ++ ++#include "connectionmanager.h" ++#include "connectionmanager_p.h" ++ ++// Connection manager itself ++ConnectionManager::ConnectionManager( QObject * parent, const char * name ) : DCOPObject( "ConnectionManager" ), QObject( parent, name ), d( new ConnectionManagerPrivate( this ) ) ++{ ++ d->service = new NetworkStatusIface_stub( kapp->dcopClient(), "kded", "networkstatus" ); ++ ++ connectDCOPSignal( "kded", "networkstatus", "statusChange(int)", "slotStatusChanged(int)", false ); ++ ++ initialise(); ++} ++ ++ConnectionManager::~ConnectionManager() ++{ ++ delete d; ++} ++ ++ConnectionManager *ConnectionManager::s_self = 0L; ++ ++ConnectionManager *ConnectionManager::self() ++{ ++ static KStaticDeleter deleter; ++ if(!s_self) ++ deleter.setObject( s_self, new ConnectionManager( 0, "connection_manager" ) ); ++ return s_self; ++} ++ ++void ConnectionManager::initialise() ++{ ++ // determine initial state and set the state object accordingly. ++ d->status = ( NetworkStatus::Status )d->service->status(); ++} ++ ++NetworkStatus::Status ConnectionManager::status() ++{ ++ return d->status; ++} ++ ++void ConnectionManager::slotStatusChanged( int status ) ++{ ++ d->status = ( NetworkStatus::Status )status; ++ switch ( status ) { ++ case NetworkStatus::NoNetworks: ++ break; ++ case NetworkStatus::Unreachable: ++ break; ++ case NetworkStatus::OfflineDisconnected: ++ case NetworkStatus::OfflineFailed: ++ case NetworkStatus::ShuttingDown: ++ case NetworkStatus::Offline: ++ case NetworkStatus::Establishing: ++ if ( d->disconnectPolicy == Managed ) { ++ emit d->disconnected(); ++ } else if ( d->disconnectPolicy == OnNextChange ) { ++ setDisconnectPolicy( Manual ); ++ emit d->disconnected(); ++ } ++ break; ++ case NetworkStatus::Online: ++ if ( d->disconnectPolicy == Managed ) { ++ emit d->connected(); ++ } else if ( d->disconnectPolicy == OnNextChange ) { ++ setConnectPolicy( Manual ); ++ emit d->connected(); ++ } ++ break; ++ default: ++ kdDebug() << k_funcinfo << "Unrecognised status code!" << endl; ++ } ++ emit statusChanged( d->status ); ++} ++ ++ConnectionManager::ConnectionPolicy ConnectionManager::connectPolicy() const ++{ ++ return d->connectPolicy; ++} ++ ++void ConnectionManager::setConnectPolicy( ConnectionManager::ConnectionPolicy policy ) ++{ ++ d->connectPolicy = policy; ++} ++ ++ConnectionManager::ConnectionPolicy ConnectionManager::disconnectPolicy() const ++{ ++ return d->disconnectPolicy; ++} ++ ++void ConnectionManager::setDisconnectPolicy( ConnectionManager::ConnectionPolicy policy ) ++{ ++ d->disconnectPolicy = policy; ++} ++ ++void ConnectionManager::setManualConnectionPolicies() ++{ ++ d->connectPolicy = ConnectionManager::Manual; ++ d->disconnectPolicy = ConnectionManager::Manual; ++} ++ ++void ConnectionManager::setManagedConnectionPolicies() ++{ ++ d->connectPolicy = ConnectionManager::Managed; ++ d->disconnectPolicy = ConnectionManager::Managed; ++} ++ ++void ConnectionManager::registerConnectSlot( QObject * receiver, const char * member ) ++{ ++ d->connectReceiver = receiver; ++ d->connectSlot = member; ++ connect( d, SIGNAL( connected() ), receiver, member ); ++} ++ ++void ConnectionManager::forgetConnectSlot() ++{ ++ disconnect( d, SIGNAL( connected() ), d->connectReceiver, d->connectSlot ); ++ d->connectReceiver = 0; ++ d->connectSlot = 0; ++} ++ ++bool ConnectionManager::isConnectSlotRegistered() const ++{ ++ return ( d->connectSlot != 0 ); ++} ++ ++void ConnectionManager::registerDisconnectSlot( QObject * receiver, const char * member ) ++{ ++ d->disconnectReceiver = receiver; ++ d->disconnectSlot = member; ++ connect( d, SIGNAL( disconnected() ), receiver, member ); ++} ++ ++void ConnectionManager::forgetDisconnectSlot() ++{ ++ disconnect( d, SIGNAL( disconnected() ), d->disconnectReceiver, d->disconnectSlot ); ++ d->disconnectReceiver = 0; ++ d->disconnectSlot = 0; ++} ++ ++bool ConnectionManager::isDisconnectSlotRegistered() const ++{ ++ return ( d->disconnectSlot != 0 ); ++} ++ ++#include "connectionmanager.moc" ++ +Index: networkstatus/.svn/text-base/connectionmanager.h.svn-base +=================================================================== +--- /dev/null ++++ networkstatus/.svn/text-base/connectionmanager.h.svn-base +@@ -0,0 +1,167 @@ ++/* This file is part of kdepim. ++ Copyright (C) 2005,2007 Will Stephenson ++ ++ This library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Library General Public ++ License version 2 as published by the Free Software Foundation. ++ ++ This library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Library General Public License for more details. ++ ++ You should have received a copy of the GNU Library General Public License ++ along with this library. If not, write to the Free Software ++ Foundation, Inc., 51 Franklin Street, Fifth Floor, ++ Boston, MA 02110-1301, USA. ++ ++ As a special exception, permission is given to link this library ++ with any edition of Qt, and distribute the resulting executable, ++ without including the source code for Qt in the source distribution. ++*/ ++ ++#ifndef KDE_CONNECTION_MANAGER_H ++#define KDE_CONNECTION_MANAGER_H ++ ++#include ++#include ++ ++#include ++ ++class ConnectionManagerPrivate; ++ ++class KDE_EXPORT ConnectionManager : public QObject, virtual public DCOPObject ++{ ++Q_OBJECT ++K_DCOP ++k_dcop: ++ void slotStatusChanged( int status ); ++public: ++ /** ++ * This defines application policy in response to networking connect/disconnect events ++ * Manual - the app only disconnects when the user does so ++ * OnNextChange - the app should connect or disconnect the next time the network changes state, thereafter ++ * Manual ++ * Managed - the app should disconnect when the ConnectionManager thinks the system is ++ * offline ++ */ ++ enum ConnectionPolicy { Manual, OnNextChange, Managed }; ++ /** ++ * Set a policy to manage the application's connect behaviour ++ */ ++ void setConnectPolicy( ConnectionPolicy ); ++ /** ++ * Retrieve a policy managing the application's connect behaviour ++ */ ++ ConnectionPolicy connectPolicy() const; ++ ++ /** ++ * Set a policy to manage the application's disconnect behaviour ++ */ ++ void setDisconnectPolicy( ConnectionPolicy ); ++ ++ /** ++ * Retrieve a policy managing the application's disconnect behaviour ++ */ ++ ConnectionPolicy disconnectPolicy() const; ++ ++ /* ++ * We'll get logic of the form ++ * onStatusChange() { ++ * if ( ConnectionManager::self()->policy( ConnectionManager::ConnectBehaviour ) == ConnectionManager::OnNextChange || ++ * ConnectionManager::self()->policy( ConnectionManager::ConnectBehaviour ) == ConnectionManager::Managed ) ++ * { ++ * // do connect ++ * ++ * // reset the policy ++ * if ( ConnectionManager::self()->policy( ConnectionManager::ConnectBehaviour ) == ConnectionManager::OnNextChange ) ++ * ConnectionManager::self()->setPolicy( ConnectionManager::ConnectionManager, ++ * ConnectionManager::Manual ); ++ * } ++ * ++ * Do we just use the CM for policy storage, or do we try to factor the logic to implement the ++ * policy into the CM too? ++ * ++ * could signal doConnect(), then reset the policy ++ * or could register a connect slot ++ * registerConnectMethod( QObject * receiver, const char * member ); ++ * unregisterConnectMethod(); ++ * etc. ++ * ++ * The problem with automatically controlled behaviour, where policy may change as a result of a ++ * connect, is that if it is also manually altered, the CM needs to be updated. But the CM needs to ++ * be updated in any case. ++ * CM need ++ */ ++ /** ++ * Lazy-method to set Manual on both policies ++ */ ++ void setManualConnectionPolicies(); ++ /** ++ * Lazy-method to set Managed on both policies ++ */ ++ void setManagedConnectionPolicies(); ++ ++ /** ++ * Record a slot to call on a given receiving QObject when ++ * 1) the network connection is online, ++ * 2) the policy mandates that the app connect ++ * ++ * Only one slot may be registered at any one time. If a second slot is ++ * registered, the first slot is forgotten ++ * @param receiver the QObject where the slot is located ++ * @param member the slot to call. Set up member using the SLOT() macro. ++ */ ++ void registerConnectSlot( QObject * receiver, const char * member ); ++ ++ /** ++ * Forget any connect slot previously registered ++ */ ++ void forgetConnectSlot(); ++ ++ /** ++ * Has any slot been registered to be called on connect? ++ */ ++ bool isConnectSlotRegistered() const; ++ ++ /** ++ * Record a slot to call on a given receiving QObject when ++ * 1) the network connection goes offline (in any way ), ++ * 2) the policy mandates that the app disconnect ++ * ++ * Only one slot may be registered at any one time. If a second slot is ++ * registered, the first slot is forgotten ++ * @param receiver the QObject where the slot is located ++ * @param member the slot to call. Set up member using the SLOT() macro. ++ */ ++ void registerDisconnectSlot( QObject * receiver, const char * member ); ++ ++ /** ++ * Forget any disconnect slot previously registered ++ */ ++ void forgetDisconnectSlot(); ++ ++ /** ++ * Has any slot been registered to be called on disconnect? ++ */ ++ bool isDisconnectSlotRegistered() const; ++ ++ /// existing API ++ ++ static ConnectionManager* self(); ++ virtual ~ConnectionManager(); ++ NetworkStatus::Status status(); ++signals: ++ // signal that the network for a hostname is up/down ++ void statusChanged( NetworkStatus::Status status ); ++private: ++ // sets up internal state ++ void initialise(); ++ // reread the desktop status from the daemon and update internal state ++ ConnectionManager( QObject *parent, const char * name ); ++ ConnectionManagerPrivate * d; ++ static ConnectionManager * s_self; ++}; ++ ++#endif ++ +Index: networkstatus/.svn/text-base/connectionmanager_p.cpp.svn-base +=================================================================== +--- /dev/null ++++ networkstatus/.svn/text-base/connectionmanager_p.cpp.svn-base +@@ -0,0 +1,13 @@ ++#include "connectionmanager_p.h" ++ ++ConnectionManagerPrivate::ConnectionManagerPrivate(QObject * parent, const char * name ) : QObject( parent, name ), service( 0 ), connectPolicy( ConnectionManager::Managed ), ++ disconnectPolicy( ConnectionManager::Managed ), connectReceiver( 0 ), connectSlot( 0 ), ++ disconnectReceiver( 0 ), disconnectSlot( 0 ) ++{ ++} ++ ++ConnectionManagerPrivate::~ConnectionManagerPrivate() ++{ ++} ++ ++#include "connectionmanager_p.moc" +Index: networkstatus/.svn/text-base/connectionmanager_p.h.svn-base +=================================================================== +--- /dev/null ++++ networkstatus/.svn/text-base/connectionmanager_p.h.svn-base +@@ -0,0 +1,55 @@ ++/* This file is part of the KDE project ++ Copyright (C) 2007 Will Stephenson ++ ++ This library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Library General Public ++ License version 2 as published by the Free Software Foundation. ++ ++ This library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Library General Public License for more details. ++ ++ You should have received a copy of the GNU Library General Public License ++ along with this library. If not, write to the Free Software ++ Foundation, Inc., 51 Franklin Street, Fifth Floor, ++ Boston, MA 02110-1301, USA. ++ ++ As a special exception, permission is given to link this library ++ with any edition of Qt, and distribute the resulting executable, ++ without including the source code for Qt in the source distribution. ++*/ ++ ++#ifndef CONNECTIONMANAGERPRIVATE_H ++#define CONNECTIONMANAGERPRIVATE_H ++ ++#include ++ ++#include "connectionmanager.h" ++#include "networkstatuscommon.h" ++#include "networkstatusiface_stub.h" ++ ++ ++// ConnectionManager's private parts ++class ConnectionManagerPrivate : public QObject ++{ ++Q_OBJECT ++ friend class ConnectionManager; ++public: ++ ConnectionManagerPrivate( QObject * parent = 0, const char * name = 0); ++ ~ConnectionManagerPrivate(); ++ // this holds the currently active state ++ NetworkStatus::Status status; ++ NetworkStatusIface_stub * service; ++ ConnectionManager::ConnectionPolicy connectPolicy; ++ ConnectionManager::ConnectionPolicy disconnectPolicy; ++ QObject * connectReceiver; ++ const char * connectSlot; ++ QObject * disconnectReceiver; ++ const char * disconnectSlot; ++signals: ++ void connected(); ++ void disconnected(); ++}; ++ ++#endif +Index: networkstatus/.svn/text-base/Makefile.am.svn-base +=================================================================== +--- /dev/null ++++ networkstatus/.svn/text-base/Makefile.am.svn-base +@@ -0,0 +1,45 @@ ++#SUBDIRS = networkstatustray ++ ++METASOURCES = AUTO ++ ++INCLUDES = -I$(top_srcdir)/kded -I$(top_srcdir) $(all_includes) ++ ++kde_module_LTLIBRARIES = kded_networkstatus.la ++ ++kded_networkstatus_la_SOURCES = networkstatus.cpp networkstatus.skel \ ++ network.cpp ++kded_networkstatus_la_LIBADD = $(LIB_KDECORE) $(LIB_KIO) ./libnetworkstatus.la ++kded_networkstatus_la_LDFLAGS = $(all_libraries) -module -avoid-version ++ ++servicesdir = $(kde_servicesdir)/kded ++ ++services_DATA = networkstatus.desktop ++ ++lib_LTLIBRARIES = libnetworkstatus.la libconnectionmanager.la ++ ++libnetworkstatus_la_LIBADD = $(LIB_KDECORE) ++libnetworkstatus_la_LDFLAGS = $(all_libraries) ++libnetworkstatus_la_SOURCES = networkstatuscommon.cpp ++ ++libconnectionmanager_la_LIBADD = $(LIB_KDECORE) libnetworkstatus.la ++libconnectionmanager_la_LDFLAGS = $(all_libraries) ++libconnectionmanager_la_SOURCES = connectionmanager.cpp connectionmanager_p.cpp networkstatusindicator.cpp connectionmanager.skel networkstatusiface.stub ++ ++noinst_PROGRAMS = networkstatustestservice networkstatustestclient managedconnectiontestclient ++ ++networkstatustestservice_LDFLAGS = $(all_libraries) ++networkstatustestservice_LDADD = $(LIB_KFILE) libnetworkstatus.la ++networkstatustestservice_SOURCES = testservice.cpp testserviceview.ui networkstatusiface.stub ++ ++networkstatustestclient_LDFLAGS = $(all_libraries) ++networkstatustestclient_LDADD = $(LIB_KFILE) libnetworkstatus.la libconnectionmanager.la ++networkstatustestclient_SOURCES = testclient.cpp testclientview.ui ++ ++managedconnectiontestclient_LDFLAGS = $(all_libraries) ++managedconnectiontestclient_LDADD = $(LIB_KFILE) libnetworkstatus.la libconnectionmanager.la ++managedconnectiontestclient_SOURCES = testclient2.cpp testclientview.ui ++ ++noinst_HEADERS = network.h testservice.h testclient.h ++ ++include_HEADERS = networkstatuscommon.h connectionmanager.h networkstatusindicator.h \ ++ networkstatusiface.h +Index: networkstatus/.svn/text-base/network.cpp.svn-base +=================================================================== +--- /dev/null ++++ networkstatus/.svn/text-base/network.cpp.svn-base +@@ -0,0 +1,62 @@ ++/* This file is part of kdepim. ++ Copyright (C) 2005,2007 Will Stephenson ++ ++ This library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Library General Public ++ License version 2 as published by the Free Software Foundation. ++ ++ This library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Library General Public License for more details. ++ ++ You should have received a copy of the GNU Library General Public License ++ along with this library. If not, write to the Free Software ++ Foundation, Inc., 51 Franklin Street, Fifth Floor, ++ Boston, MA 02110-1301, USA. ++ ++ As a special exception, permission is given to link this library ++ with any edition of Qt, and distribute the resulting executable, ++ without including the source code for Qt in the source distribution. ++*/ ++ ++#include ++ ++#include "network.h" ++ ++Network::Network( NetworkStatus::Properties properties ) ++ : m_name( properties.name ), m_status( properties.status ), m_service( properties.service ) ++{ ++} ++ ++void Network::setStatus( NetworkStatus::Status status ) ++{ ++ m_status = status; ++} ++ ++NetworkStatus::Status Network::status() ++{ ++ return m_status; ++} ++ ++void Network::setName( const QString& name ) ++{ ++ m_name = name; ++} ++ ++QString Network::name() ++{ ++ return m_name; ++} ++ ++QString Network::service() ++{ ++ return m_service; ++} ++ ++void Network::setService( const QString& service ) ++{ ++ m_service = service; ++} ++ ++// vim: sw=4 ts=4 +Index: networkstatus/.svn/text-base/network.h.svn-base +=================================================================== +--- /dev/null ++++ networkstatus/.svn/text-base/network.h.svn-base +@@ -0,0 +1,60 @@ ++/* This file is part of kdepim. ++ Copyright (C) 2005,2007 Will Stephenson ++ ++ This library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Library General Public ++ License version 2 as published by the Free Software Foundation. ++ ++ This library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Library General Public License for more details. ++ ++ You should have received a copy of the GNU Library General Public License ++ along with this library. If not, write to the Free Software ++ Foundation, Inc., 51 Franklin Street, Fifth Floor, ++ Boston, MA 02110-1301, USA. ++ ++ As a special exception, permission is given to link this library ++ with any edition of Qt, and distribute the resulting executable, ++ without including the source code for Qt in the source distribution. ++*/ ++ ++#ifndef NETWORKSTATUS_NETWORK_H ++#define NETWORKSTATUS_NETWORK_H ++ ++#include "networkstatuscommon.h" ++ ++class Network ++{ ++public: ++ Network( const QString name ); ++ Network( NetworkStatus::Properties properties ); ++ /** ++ * Update the status of this network ++ */ ++ void setStatus( NetworkStatus::Status status ); ++ /** ++ * The connection status of this network ++ */ ++ NetworkStatus::Status status(); ++ /** ++ * The name of this network ++ */ ++ QString name(); ++ void setName( const QString& name ); ++ /** ++ * Returns the service owning this network ++ */ ++ QString service(); ++ void setService( const QString& service ); ++ ++private: ++ Network( const Network & ); ++ QString m_name; ++ NetworkStatus::Status m_status; ++ QString m_service; ++}; ++ ++#endif ++// vim: sw=4 ts=4 +Index: networkstatus/.svn/text-base/networkstatuscommon.cpp.svn-base +=================================================================== +--- /dev/null ++++ networkstatus/.svn/text-base/networkstatuscommon.cpp.svn-base +@@ -0,0 +1,76 @@ ++/* This file is part of kdepim. ++ Copyright (C) 2005,2007 Will Stephenson ++ ++ This library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Library General Public ++ License version 2 as published by the Free Software Foundation. ++ ++ This library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Library General Public License for more details. ++ ++ You should have received a copy of the GNU Library General Public License ++ along with this library. If not, write to the Free Software ++ Foundation, Inc., 51 Franklin Street, Fifth Floor, ++ Boston, MA 02110-1301, USA. ++ ++ As a special exception, permission is given to link this library ++ with any edition of Qt, and distribute the resulting executable, ++ without including the source code for Qt in the source distribution. ++*/ ++ ++#include "networkstatuscommon.h" ++ ++QDataStream & operator<< ( QDataStream & s, const NetworkStatus::Properties p ) ++{ ++ s << p.name; ++ s << (int)p.status; ++ s << p.service; ++ return s; ++} ++ ++QDataStream & operator>> ( QDataStream & s, NetworkStatus::Properties &p ) ++{ ++ int status; ++ s >> p.name; ++ s >> status; ++ p.status = (NetworkStatus::Status)status; ++ s >> p.service; ++ return s; ++} ++ ++namespace NetworkStatus ++{ ++ QString toString( NetworkStatus::Status st ) ++ { ++ QString str; ++ switch ( st ) { ++ case NetworkStatus::NoNetworks: ++ str = "NoNetworks"; ++ break; ++ case NetworkStatus::Unreachable: ++ str = "Unreachable"; ++ break; ++ case NetworkStatus::OfflineDisconnected: ++ str = "OfflineDisconnected"; ++ break; ++ case NetworkStatus::OfflineFailed: ++ str = "OfflineFailed"; ++ break; ++ case NetworkStatus::ShuttingDown: ++ str = "ShuttingDown"; ++ break; ++ case NetworkStatus::Offline: ++ str = "Offline"; ++ break; ++ case NetworkStatus::Establishing: ++ str = "Establishing"; ++ break; ++ case NetworkStatus::Online: ++ str = "Online"; ++ break; ++ } ++ return str; ++ } ++} // namespace NetworkStatus +Index: networkstatus/.svn/text-base/networkstatuscommon.h.svn-base +=================================================================== +--- /dev/null ++++ networkstatus/.svn/text-base/networkstatuscommon.h.svn-base +@@ -0,0 +1,52 @@ ++/* This file is part of kdepim ++ Copyright (C) 2005,2007 Will Stephenson ++ ++ This library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Library General Public ++ License version 2 as published by the Free Software Foundation. ++ ++ This library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Library General Public License for more details. ++ ++ You should have received a copy of the GNU Library General Public License ++ along with this library. If not, write to the Free Software ++ Foundation, Inc., 51 Franklin Street, Fifth Floor, ++ Boston, MA 02110-1301, USA. ++ ++ As a special exception, permission is given to link this library ++ with any edition of Qt, and distribute the resulting executable, ++ without including the source code for Qt in the source distribution. ++*/ ++ ++#ifndef NETWORKSTATUS_COMMON_H ++#define NETWORKSTATUS_COMMON_H ++ ++#include ++ ++namespace NetworkStatus ++{ ++ enum Status { NoNetworks = 1, Unreachable, OfflineDisconnected, OfflineFailed, ShuttingDown, Offline, Establishing, Online }; ++ enum RequestResult { RequestAccepted = 1, Connected, UserRefused, Unavailable }; ++ enum UnusedDemandPolicy { All, User, None, Permanent }; ++ ++ // BINARY COMPATIBILITY ALERT BEGIN !!!! ++ struct Properties ++ { ++ QString name; ++ Status status; ++ UnusedDemandPolicy unused1; ++ QCString service; ++ bool unused3; ++ QStringList unused4; ++ }; ++ // BINARY COMPATIBILITY ALERT END !!!! ++ ++ QString toString( Status st ); ++} ++ ++QDataStream & operator>> ( QDataStream & s, NetworkStatus::Properties &p ); ++QDataStream & operator<< ( QDataStream & s, const NetworkStatus::Properties p ); ++ ++#endif +Index: networkstatus/.svn/text-base/networkstatus.cpp.svn-base +=================================================================== +--- /dev/null ++++ networkstatus/.svn/text-base/networkstatus.cpp.svn-base +@@ -0,0 +1,162 @@ ++/* This file is part of kdepim ++ Copyright (C) 2005,2007 Will Stephenson ++ ++ This library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Library General Public ++ License version 2 as published by the Free Software Foundation. ++ ++ This library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Library General Public License for more details. ++ ++ You should have received a copy of the GNU Library General Public License ++ along with this library. If not, write to the Free Software ++ Foundation, Inc., 51 Franklin Street, Fifth Floor, ++ Boston, MA 02110-1301, USA. ++ ++ As a special exception, permission is given to link this library ++ with any edition of Qt, and distribute the resulting executable, ++ without including the source code for Qt in the source distribution. ++*/ ++ ++#include "networkstatus.h" ++ ++#include ++ ++#include ++#include ++#include ++ ++#include "network.h" ++#include ++ ++extern "C" { ++ KDE_EXPORT KDEDModule* create_networkstatus( const QCString& obj ) ++ { ++ return new NetworkStatusModule( obj ); ++ } ++} ++ ++// INTERNALLY USED STRUCTS AND TYPEDEFS ++ ++typedef QMap< QString, Network * > NetworkMap; ++ ++class NetworkStatusModule::Private ++{ ++public: ++ NetworkMap networks; ++ NetworkStatus::Status status; ++}; ++ ++// CTORS/DTORS ++ ++NetworkStatusModule::NetworkStatusModule( const QCString & obj ) : KDEDModule( obj ), d( new Private ) ++{ ++ d->status = NetworkStatus::NoNetworks; ++ connect( kapp->dcopClient(), SIGNAL( applicationRemoved( const QCString& ) ) , this, SLOT( unregisteredFromDCOP( const QCString& ) ) ); ++ // connect( kapp->dcopClient(), SIGNAL( applicationRegistered( const QCString& ) ) , this, SLOT( registeredToDCOP( const QCString& ) ) ); ++} ++ ++NetworkStatusModule::~NetworkStatusModule() ++{ ++ NetworkMap::ConstIterator it; ++ const NetworkMap::ConstIterator end = d->networks.end(); ++ ++ for ( it = d->networks.begin(); it != end; ++it ) { ++ delete ( *it ); ++ } ++ ++ delete d; ++} ++ ++// CLIENT INTERFACE ++ ++QStringList NetworkStatusModule::networks() ++{ ++ kdDebug() << k_funcinfo << " contains " << d->networks.count() << " networks" << endl; ++ return d->networks.keys(); ++} ++ ++int NetworkStatusModule::status() ++{ ++ kdDebug() << k_funcinfo << " status: " << (int)d->status << endl; ++ return (int)d->status; ++} ++ ++//protected: ++ ++void NetworkStatusModule::updateStatus() ++{ ++ NetworkStatus::Status bestStatus = NetworkStatus::NoNetworks; ++ const NetworkStatus::Status oldStatus = d->status; ++ ++ NetworkMap::ConstIterator it; ++ const NetworkMap::ConstIterator end = d->networks.end(); ++ for ( it = d->networks.begin(); it != end; ++it ) { ++ if ( ( *it )->status() > bestStatus ) ++ bestStatus = ( *it )->status(); ++ } ++ d->status = bestStatus; ++ ++ if ( oldStatus != d->status ) { ++ statusChange( (int)d->status ); ++ } ++} ++ ++void NetworkStatusModule::unregisteredFromDCOP( const QCString & appId ) ++{ ++ // unregister and delete any networks owned by a service that has just unregistered ++ NetworkMap::Iterator it; ++ const NetworkMap::Iterator end = d->networks.end(); ++ for ( it = d->networks.begin(); it != end; ++it ) ++ { ++ if ( ( *it )->service() == QString( appId ) ) ++ { ++ NetworkMap::Iterator toRemove = it; ++ Network * removedNet = *toRemove; ++ d->networks.remove( toRemove ); ++ updateStatus(); ++ delete removedNet; ++ } ++ } ++} ++ ++// SERVICE INTERFACE // ++void NetworkStatusModule::setNetworkStatus( const QString & networkName, int st ) ++{ ++ kdDebug() << k_funcinfo << networkName << ", " << st << endl; ++ NetworkStatus::Status changedStatus = (NetworkStatus::Status)st; ++ Network * net = 0; ++ NetworkMap::Iterator it = d->networks.find( networkName ); ++ if ( it != d->networks.end() ) { ++ net = (*it); ++ net->setStatus( changedStatus ); ++ updateStatus(); ++ } ++ else ++ kdDebug() << " No network named '" << networkName << "' found." << endl; ++} ++ ++void NetworkStatusModule::registerNetwork( const NetworkStatus::Properties properties ) ++{ ++ kdDebug() << k_funcinfo << properties.name << ", with status " << properties.status << endl; ++ ++ d->networks.insert( properties.name, new Network( properties ) ); ++ updateStatus(); ++} ++ ++void NetworkStatusModule::unregisterNetwork( const QString & networkName ) ++{ ++ kdDebug() << k_funcinfo << networkName << endl; ++ ++ NetworkMap::Iterator it = d->networks.find( networkName ); ++ if ( it != d->networks.end() ) { ++ delete *it; ++ d->networks.remove( it ); ++ } ++ updateStatus(); ++} ++ ++#include "networkstatus.moc" ++// vim: set noet sw=4 ts=4: +Index: networkstatus/.svn/text-base/networkstatus.desktop.svn-base +=================================================================== +--- /dev/null ++++ networkstatus/.svn/text-base/networkstatus.desktop.svn-base +@@ -0,0 +1,98 @@ ++[Desktop Entry] ++Encoding=UTF-8 ++Name=Network Status Daemon ++Name[af]=Netwerk status bediener ++Name[ar]=مراقب القرص Ùˆ التنÙيذ لحالة الشبكة ++Name[bg]=Демон за ÑÑŠÑтоÑние на мрежата ++Name[ca]=Dimoni de l'estat de la xarxa ++Name[cs]=Démon stavu sítÄ› ++Name[da]=Netværkstatusdæmon ++Name[de]=Ãœberwachung des Netzwerkstatus ++Name[el]=Δαίμονας κατάστασης δικτÏου ++Name[es]=Daemon de estado de la red ++Name[et]=Võrguoleku deemon ++Name[eu]=Sarearen egoera deabrua ++Name[fa]=شبح وضعیت شبکه ++Name[fi]=Verkkotilan tarkkailija ++Name[fr]=Suivi de l'état du réseau ++Name[fy]=Netwurktastândaemon ++Name[gl]=Daemon do Estado da Rede ++Name[hu]=Hálózati állapotjelzÅ‘ szolgáltatás ++Name[is]=Netstöðupúki ++Name[it]=Demone dello stato della rete ++Name[ja]=ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹ãƒ‡ãƒ¼ãƒ¢ãƒ³ ++Name[kk]=Желі күйінің қызметі ++Name[km]=ដáŸáž˜áž·áž“​ស្ážáž¶áž“ភាព​បណ្ដាញ ++Name[lt]=Tinklo statuso tarnyba ++Name[mk]=Даемон за мрежен ÑÑ‚Ð°Ñ‚ÑƒÑ ++Name[ms]=Daemon Berstatus Rangkaian ++Name[nb]=Statusnisse for nettverket ++Name[nds]=Nettwarkstatus-Dämoon ++Name[ne]=सञà¥à¤œà¤¾à¤² सà¥à¤¥à¤¿à¤¤à¤¿ डेइमन ++Name[nl]=Netwerkstatusdaemon ++Name[nn]=Statusnisse for nettverket ++Name[pl]=UsÅ‚uga stanu sieci ++Name[pt]=Servidor de Estado de Rede ++Name[pt_BR]=Daemon de Status da Rede ++Name[ru]=Служба ÑоÑтоÑÐ½Ð¸Ñ Ñети ++Name[sk]=Daemon stavu siete ++Name[sl]=Demon za omrežno stanje ++Name[sr]=Демон за ÑÑ‚Ð°Ñ‚ÑƒÑ Ð¼Ñ€ÐµÐ¶Ðµ ++Name[sr@Latn]=Demon za status mreže ++Name[sv]=Nätverksstatusdemon ++Name[ta]=வலைபà¯à®ªà®¿à®©à¯à®©à®²à¯ நிலை டெமான௠++Name[tr]=AÄŸ Durum Ä°zleyici ++Name[uk]=Демон Ñтану мережі ++Name[zh_CN]=网络状æ€å®ˆæŠ¤ç¨‹åº ++Name[zh_TW]=ç¶²è·¯ç‹€æ…‹å®ˆè­·ç¨‹å¼ ++Comment=Tracks status of network interfaces and provides notification to applications using the network. ++Comment[af]=Hou tred van die status van netwerk intervlakke en verskaf kennisgewings na programme wat die netwerk gebruik. ++Comment[bg]=Следене на ÑÑŠÑтоÑнието на мрежата и предаване на информациÑта на програмите, които имат нужда ++Comment[ca]=Controla l'estat de les interfícies de xarxa i proporciona notificacions a les aplicacions que usen la xarxa. ++Comment[cs]=ZjiÅ¡'tuje stav síťových rozhraní a upozorňuje v případÄ› přístupu aplikací k síti. ++Comment[da]=Sporer status af netværksgrænseflade og sørger for meddelelser til programmer der bruger netværket. ++Comment[de]=Ãœberprüft den Netzwerk-Status und benachrichtigt anfragende Anwendungen ++Comment[el]=ΠαÏακολουθεί την κατάσταση του δικτÏου και παÏέχει ειδοποιήσεις σε εφαÏμογές που χÏησιμοποιοÏν το δίκτυο. ++Comment[es]=Sigue la pista de las interfaces de red y proporciona notificaciones a las aplicaciones que están usando la red. ++Comment[et]=Jälgib võrguliideste olekut ja annab sellest võrgu vahendusel rakendustele teada. ++Comment[eu]=Sare interfazeen egoera jarraitzen du eta sarea darabilten aplikazioei jakinarazten die. ++Comment[fa]=وضعیت واسطهای شبکه را شیار داده Ùˆ با استÙاده از شبکه، برای کاربردها اخطار Ùراهم می‌کند. ++Comment[fi]=Tarkkailee verkkoliitäntöjen tilaa ja varoittaa verkkoa käyttäviä sovelluksia. ++Comment[fr]=Surveille l'état des interfaces réseaux et fournit des notifications aux applications qui utilisent le réseau ++Comment[fy]=Hâldt de tastân by fan de Netwurkynterfaces en hâldt dêr de tapassings fan op de hichte. ++Comment[gl]=Monitoriza o estado das interfaces de rede e fornece notificacións ás aplicacións que usen a rede. ++Comment[hu]=Figyeli a hálózati csatolók állapotát és értesítési lehetÅ‘séget biztosít hálózati alkalmazások számára. ++Comment[is]=Fylgist með stöðu netkorta og sendir tilkynningar til forrita sem nota netið. ++Comment[it]=Controlla lo stato delle interfacce di rete e fornisce notifiche alle applicazioni che usano al rete. ++Comment[ja]=ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ãƒ¼ã‚¹ã®çŠ¶æ…‹ã‚’追跡ã—ã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚’用ã„るアプリケーションã«é€šçŸ¥ã—ã¾ã™ ++Comment[kk]=Желі интерфейÑтерінің күйін бақылап, желіні қолданатын бағдарламаларын құлақтандыру қызметі. ++Comment[km]=ážáž¶áž˜ážŠáž¶áž“​ស្ážáž¶áž“ភាព​របស់​ចំណុច​ប្រទាក់​បណ្ដាញ ព្រម​ទាំង​ផ្ដល់​នូវ​ការ​ជូនដំណឹង​ទៅ​កម្មវិធី ដែល​ប្រើ​បណ្ដាញ ។ ++Comment[lt]=Seka tinklo sÄ…sajų bÅ«senÄ… ir informuoja apie jas programas, naudojanÄias tinklÄ… ++Comment[mk]=Го Ñледи ÑтатуÑот на мрежните интерфејÑи и дава извеÑтувања на апликациите што ја кориÑтат мрежата. ++Comment[ms]=Menjejak status antara muka rangkaian dan memberitahu aplikasi yang menggunakan rangkaian tersebut. ++Comment[nb]=OvervÃ¥ker status for nettverksgrensesnitt og varsler programmer som bruker nettverket. ++Comment[nds]=Överwacht den Tostand vun Nettwark-Koppelsteden un sendt Narichten na Programmen, de dat Nettwark bruukt. ++Comment[ne]=सञà¥à¤œà¤¾à¤² इनà¥à¤Ÿà¤°à¤«à¥‡à¤¸à¤•à¥‹ सà¥à¤¥à¤¿à¤¤à¤¿ टà¥à¤°à¥à¤¯à¤¾à¤• गरà¥à¤¦à¤› र सञà¥à¤œà¤¾à¤² पà¥à¤°à¤¯à¥‹à¤— गरेर अनà¥à¤ªà¥à¤°à¤¯à¥‹à¤—मा जानकारी उपलबà¥à¤§ गराउछ । ++Comment[nl]=Houdt de status bij van de netwerkinterfaces en houdt daar de toepassingen van op de hoogte. ++Comment[nn]=Overvakar status for nettverksgrensesnitt og varslar program som brukar nettverket. ++Comment[pl]=Åšledzi stan interfejsów sieciowych i powiadamia programy używajÄ…ce sieci. ++Comment[pt]=Vigia o estado das interfaces de rede e avisa as aplicações que utilizam a rede. ++Comment[pt_BR]=Controla o status das interfaces de rede e fornece notificações para aplicativos utilizando a rede. ++Comment[ru]=Служба отÑÐ»ÐµÐ¶Ð¸Ð²Ð°Ð½Ð¸Ñ ÑоÑтоÑÐ½Ð¸Ñ Ñетевых интерфейÑов и Ð¾Ð±Ñ€Ð°Ñ‰ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ð¹ к Ñети. ++Comment[sk]=Sleduje stav sieÅ¥ových rozhraní a poskytuje upozornenia aplikáciám používajúcim sieÅ¥. ++Comment[sl]=Sledi stanju omrežnim vmesnikom in omogoÄa obvestila programom, ki uporabljajo omrežje ++Comment[sr]=Прати ÑÑ‚Ð°Ñ‚ÑƒÑ Ð¼Ñ€ÐµÐ¶Ð½Ð¸Ñ… интерфејÑа и пружа обавештења програмима који кориÑте мрежу. ++Comment[sr@Latn]=Prati status mrežnih interfejsa i pruža obaveÅ¡tenja programima koji koriste mrežu. ++Comment[sv]=Bevakar status för nätverksgränssnitt och tillhandahÃ¥ller underrättelser till program som använder nätverket. ++Comment[ta]=வலைபà¯à®ªà®¿à®©à¯à®©à®²à¯ˆà®ªà¯ பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à®¿ வலைபà¯à®ªà®¿à®©à¯à®©à®²à¯ இடைமà¯à®•à®™à¯à®•à®³à®¿à®©à¯ நிலையை கணà¯à®•à®¾à®£à®¿à®•à¯à®•à®¿à®±à®¤à¯ மறà¯à®±à¯à®®à¯ பயனà¯à®ªà®¾à®Ÿà¯à®•à®³à¯à®•à¯à®•à¯ அறிவிபà¯à®ªà¯ˆ வழஙà¯à®•à¯à®•à®¿à®±à®¤à¯. ++Comment[uk]=Слідкує за Ñтаном інтерфейÑів мережі Ñ– Ñповіщає програми, Ñкі кориÑтуютьÑÑ Ð¼ÐµÑ€ÐµÐ¶ÐµÑŽ. ++Comment[zh_CN]=跟踪网å¡çš„状æ€å¹¶ä¸ºåº”用程åºæ供使用网络的通知。 ++Comment[zh_TW]=追蹤網路介é¢çš„狀態,並æ供使用網路的應用程å¼çš„通知。 ++Type=Service ++ServiceTypes=KDEDModule ++X-KDE-ModuleType=Library ++X-KDE-Library=networkstatus ++X-KDE-FactoryName=networkstatus ++X-KDE-Kded-autoload=true ++X-KDE-Kded-load-on-demand=true ++ +Index: networkstatus/.svn/text-base/networkstatus.h.svn-base +=================================================================== +--- /dev/null ++++ networkstatus/.svn/text-base/networkstatus.h.svn-base +@@ -0,0 +1,66 @@ ++/* This file is part of kdepim ++ Copyright (C) 2005,2007 Will Stephenson ++ ++ This library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Library General Public ++ License version 2 as published by the Free Software Foundation. ++ ++ This library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Library General Public License for more details. ++ ++ You should have received a copy of the GNU Library General Public License ++ along with this library. If not, write to the Free Software ++ Foundation, Inc., 51 Franklin Street, Fifth Floor, ++ Boston, MA 02110-1301, USA. ++ ++ As a special exception, permission is given to link this library ++ with any edition of Qt, and distribute the resulting executable, ++ without including the source code for Qt in the source distribution. ++*/ ++ ++#ifndef KDED_NETWORKSTATUS_H ++#define KDED_NETWORKSTATUS_H ++ ++#include ++ ++#include "networkstatuscommon.h" ++#include "network.h" ++ ++class NetworkStatusModule : virtual public KDEDModule ++{ ++Q_OBJECT ++K_DCOP ++public: ++ NetworkStatusModule( const QCString& obj ); ++ ~NetworkStatusModule(); ++k_dcop: ++ // Client interface ++ QStringList networks(); ++ int status(); ++ // Service interface ++ void setNetworkStatus( const QString & networkName, int status ); ++ void registerNetwork( NetworkStatus::Properties properties ); ++ void unregisterNetwork( const QString & networkName ); ++k_dcop_signals: ++ /** ++ * A status change occurred affecting the overall connectivity ++ * @param status The new status ++ */ ++ void statusChange( int status ); ++protected slots: ++ //void registeredToDCOP( const QCString& appId ); ++ void unregisteredFromDCOP( const QCString& appId ); ++ ++protected: ++ // recalculate cached status ++ void updateStatus(); ++ ++private: ++ class Private; ++ Private *d; ++}; ++ ++#endif ++// vim: sw=4 ts=4 +Index: networkstatus/.svn/text-base/networkstatusiface.h.svn-base +=================================================================== +--- /dev/null ++++ networkstatus/.svn/text-base/networkstatusiface.h.svn-base +@@ -0,0 +1,50 @@ ++/* This file is part of kdepim. ++ Copyright (C) 2005,2007 Will Stephenson ++ ++ This library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Library General Public ++ License version 2 as published by the Free Software Foundation. ++ ++ This library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Library General Public License for more details. ++ ++ You should have received a copy of the GNU Library General Public License ++ along with this library. If not, write to the Free Software ++ Foundation, Inc., 51 Franklin Street, Fifth Floor, ++ Boston, MA 02110-1301, USA. ++ ++ As a special exception, permission is given to link this library ++ with any edition of Qt, and distribute the resulting executable, ++ without including the source code for Qt in the source distribution. ++*/ ++ ++#ifndef KDED_NETWORKSTATUSIFACE_H ++#define KDED_NETWORKSTATUSIFACE_H ++ ++#include ++#include ++ ++#include "networkstatuscommon.h" ++ ++class NetworkStatusIface : virtual public DCOPObject ++{ ++K_DCOP ++k_dcop: ++ // Client interface ++ virtual QStringList networks() = 0; ++ virtual int status() = 0; ++ // Service interface ++ virtual void setNetworkStatus( const QString & networkName, int status ) = 0; ++ virtual void registerNetwork( NetworkStatus::Properties properties ) = 0; ++ virtual void unregisterNetwork( const QString & networkName ) = 0 ; ++k_dcop_signals: ++ /** ++ * A status change occurred affecting the overall connectivity ++ * @param status The new status ++ */ ++ virtual void statusChange( int status ) = 0; ++}; ++#endif ++// vim: sw=4 ts=4 +Index: networkstatus/.svn/text-base/networkstatusindicator.cpp.svn-base +=================================================================== +--- /dev/null ++++ networkstatus/.svn/text-base/networkstatusindicator.cpp.svn-base +@@ -0,0 +1,64 @@ ++/* This file is part of the KDE project ++ Copyright (C) 2007 Will Stephenson ++ ++ This library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Library General Public ++ License version 2 as published by the Free Software Foundation. ++ ++ This library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Library General Public License for more details. ++ ++ You should have received a copy of the GNU Library General Public License ++ along with this library. If not, write to the Free Software ++ Foundation, Inc., 51 Franklin Street, Fifth Floor, ++ Boston, MA 02110-1301, USA. ++ ++ As a special exception, permission is given to link this library ++ with any edition of Qt, and distribute the resulting executable, ++ without including the source code for Qt in the source distribution. ++*/ ++ ++#include ++#include ++#include ++#include ++ ++#include "connectionmanager.h" ++ ++#include "networkstatusindicator.h" ++ ++StatusBarNetworkStatusIndicator::StatusBarNetworkStatusIndicator( ++ QWidget * parent, const char * name ) : QHBox( parent, name )/*, d( new StatusBarNetworkStatusIndicatorPrivate )*/ ++{ ++ setMargin( 2 ); ++ setSpacing( 1 ); ++ QLabel * label = new QLabel( this, "offlinemodelabel" ); ++ label->setPixmap( SmallIcon("connect_no") ); ++ QToolTip::add( label, i18n( "The desktop is offline" ) ); ++ ++ connect( ConnectionManager::self(), SIGNAL( statusChanged( NetworkStatus::Status ) ), ++ SLOT( networkStatusChanged( NetworkStatus::Status) ) ); ++ ++} ++ ++void StatusBarNetworkStatusIndicator::init() ++{ ++ networkStatusChanged( ConnectionManager::self()->status()); ++} ++ ++StatusBarNetworkStatusIndicator::~StatusBarNetworkStatusIndicator() ++{ ++} ++ ++void StatusBarNetworkStatusIndicator::networkStatusChanged( NetworkStatus::Status status ) ++{ ++ if ( status == NetworkStatus::Online || status == NetworkStatus::NoNetworks ) { ++ hide(); ++ } else { ++ show(); ++ } ++} ++ ++#include "networkstatusindicator.moc" +Index: networkstatus/.svn/text-base/networkstatusindicator.h.svn-base +=================================================================== +--- /dev/null ++++ networkstatus/.svn/text-base/networkstatusindicator.h.svn-base +@@ -0,0 +1,42 @@ ++/* This file is part of the KDE project ++ Copyright (C) 2007 Will Stephenson ++ ++ This library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Library General Public ++ License version 2 as published by the Free Software Foundation. ++ ++ This library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Library General Public License for more details. ++ ++ You should have received a copy of the GNU Library General Public License ++ along with this library. If not, write to the Free Software ++ Foundation, Inc., 51 Franklin Street, Fifth Floor, ++ Boston, MA 02110-1301, USA. ++ ++ As a special exception, permission is given to link this library ++ with any edition of Qt, and distribute the resulting executable, ++ without including the source code for Qt in the source distribution. ++*/ ++ ++#ifndef KDE_NETWORKSTATUS_INDICATOR_H ++#define KDE_NETWORKSTATUS_INDICATOR_H ++ ++#include ++#include ++#include ++ ++class StatusBarNetworkStatusIndicator : public QHBox ++{ ++Q_OBJECT ++public: ++ StatusBarNetworkStatusIndicator( QWidget * parent, const char * name ); ++ virtual ~StatusBarNetworkStatusIndicator(); ++ void init(); ++protected slots: ++ void networkStatusChanged( NetworkStatus::Status status ); ++}; ++ ++#endif ++ +Index: networkstatus/.svn/text-base/networkstatus.kdevelop.svn-base +=================================================================== +--- /dev/null ++++ networkstatus/.svn/text-base/networkstatus.kdevelop.svn-base +@@ -0,0 +1,108 @@ ++ ++ ++ ++ Will Stephenson ++ wstephenson@suse.de ++ $VERSION$ ++ KDevKDEAutoProject ++ C++ ++ ++ Qt ++ KDE ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ false ++ false ++ ++ ++ *.o,*.lo,CVS ++ false ++ ++ ++ ++ ++ ada ++ ada_bugs_gcc ++ bash ++ bash_bugs ++ clanlib ++ fortran_bugs_gcc ++ gnome1 ++ gnustep ++ gtk ++ gtk_bugs ++ haskell ++ haskell_bugs_ghc ++ java_bugs_gcc ++ java_bugs_sun ++ opengl ++ pascal_bugs_fp ++ php ++ php_bugs ++ perl ++ perl_bugs ++ python ++ python_bugs ++ ruby ++ ruby_bugs ++ sdl ++ stl ++ sw ++ w3c-dom-level2-html ++ w3c-svg ++ w3c-uaag10 ++ wxwidgets_bugs ++ ++ ++ qmake User Guide ++ ++ ++ ++ ++ libtool ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ executable ++ ++ ++ kded_networkstatus.la ++ ++ ++ ++ ++ ++ true ++ true ++ true ++ false ++ true ++ true ++ true ++ 250 ++ 400 ++ 250 ++ ++ ++ +Index: networkstatus/.svn/text-base/README.statetransition.svn-base +=================================================================== +--- /dev/null ++++ networkstatus/.svn/text-base/README.statetransition.svn-base +@@ -0,0 +1,29 @@ ++This table defines the actions to be taken on state transition. ++ ++TODO: potentially add extra states OnlineReading and OnlineWriting ++ ++ NEW ++ |Offline | Online | ++---+---+----------------+---------------+ ++ | | |N|set online | ++ | | |L|reload | ++ | O | |C|resources | ++ | F | +---------------+ ++ | F | |L|set online | ++O | | |C|reload res. | ++L | | | |write res. | ++D +---+----------------+---------------+ ++ | |N|set offline | | ++ | |C| | | ++ | | | | | ++ | O +---------------+| | ++ | N |U|set offline | | ++ | |W|write locally | | ++ | |C|(subject to | | ++ | | | save policy)| | ++---+---+----------------+---------------+ ++LC = Local changes exist ++NLC = No local changes exist ++UWC = Unsaved changes exist ++NC = no changes exist ++ +Index: networkstatus/.svn/text-base/testclient2.cpp.svn-base +=================================================================== +--- /dev/null ++++ networkstatus/.svn/text-base/testclient2.cpp.svn-base +@@ -0,0 +1,222 @@ ++/* This file is part of kdepim. ++ Copyright (C) 2007 Will Stephenson ++ ++ This program is free software; you can redistribute it and/or modify ++ it under the terms of the GNU General Public License version 2 ++ as published by the Free Software Foundation. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with this program; if not, write to the Free Software ++ Foundation, Inc., 51 Franklin Street, Fifth Floor, ++ Boston, MA 02110-1301, USA. ++ ++ As a special exception, permission is given to link this program ++ with any edition of Qt, and distribute the resulting executable, ++ without including the source code for Qt in the source distribution. ++*/ ++ ++#include ++#include ++#include ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include ++ ++#include "testclientview.h" ++#include "testclient2.h" ++ ++TestClient::TestClient() ++ : KMainWindow( 0, "ktestnetworkstatus" ), ++ m_layout( new QVBox( 0, "layout" ) ), ++ m_status( AppDisconnected ) ++{ ++ m_view = new TestClientView( this ); ++ new StatusBarNetworkStatusIndicator( m_view, "statusindicator" ); ++ // tell the KMainWindow that this is indeed the main widget ++ setCentralWidget(m_view); ++ ++ networkStatusChanged( ConnectionManager::self()->status() ); ++ appDisconnected(); ++ ++ connect( ConnectionManager::self(), SIGNAL( statusChanged( NetworkStatus::Status ) ), SLOT( networkStatusChanged( NetworkStatus::Status ) ) ); ++ ConnectionManager::self()->registerConnectSlot( this, SLOT( doConnect() ) ); ++ ConnectionManager::self()->registerDisconnectSlot( this, SLOT( doDisconnect() ) ); ++ ++ connect( m_view->connectButton, SIGNAL( clicked() ), SLOT( connectButtonClicked() ) ); ++} ++ ++TestClient::~TestClient() ++{ ++} ++ ++void TestClient::networkStatusChanged( NetworkStatus::Status status ) ++{ ++ kdDebug() << k_funcinfo << endl; ++ kdDebug() << "Networking is now: " << NetworkStatus::toString( status ) << " (" << status << ")" << endl; ++ m_view->netStatusLabel->setText( NetworkStatus::toString( status ) ); ++ m_view->netStatusLabel->setPaletteBackgroundColor( toQColor( status ) ); ++} ++ ++void TestClient::doConnect() ++{ ++ Q_ASSERT( ConnectionManager::self()->status() == NetworkStatus::Online ); ++ if ( m_status != AppConnected ) { ++ appIsConnected(); ++ } ++} ++ ++void TestClient::doDisconnect() ++{ ++ Q_ASSERT( ConnectionManager::self()->status() != NetworkStatus::Online ); ++ if ( m_status == AppConnected ) { ++ appDisconnected(); ++ } ++} ++ ++void TestClient::connectButtonClicked() ++{ ++ kdDebug() << k_funcinfo << endl; ++ if ( m_status == AppDisconnected ) { ++ switch ( ConnectionManager::self()->status() ) ++ { ++ case NetworkStatus::NoNetworks: ++ case NetworkStatus::Online: ++ appIsConnected(); ++ break; ++ default: ++ appWaiting(); ++ break; ++ } ++ } ++ else if ( m_status == AppConnected || m_status == AppWaitingForConnect ) { ++ appDisconnected(); ++ } ++} ++ ++void TestClient::appWaiting() ++{ ++ kdDebug() << k_funcinfo << endl; ++ //m_status = AppWaitingForConnect; ++ m_view->appStatusLabel->setText( "Waiting" ); ++} ++ ++void TestClient::appIsConnected() ++{ ++ kdDebug() << k_funcinfo << endl; ++ m_view->connectButton->setEnabled( true ); ++ m_view->connectButton->setText( "Disconnect" ); ++ m_view->appStatusLabel->setText( "Connected" ); ++ m_status = AppConnected; ++} ++ ++void TestClient::appEstablishing() ++{ ++ kdDebug() << k_funcinfo << endl; ++ m_view->netStatusLabel->setText( "Establishing" ); ++ m_view->connectButton->setEnabled( false ); ++} ++ ++void TestClient::appDisestablishing( ) ++{ ++ kdDebug() << k_funcinfo << endl; ++ m_view->connectButton->setEnabled( false ); ++ m_view->appStatusLabel->setText( "Disconnected" ); ++} ++ ++void TestClient::appDisconnected( ) ++{ ++ kdDebug() << k_funcinfo << endl; ++ m_view->connectButton->setEnabled( true ); ++ m_view->connectButton->setText( "Start Connect" ); ++ m_view->appStatusLabel->setText( "Disconnected" ); ++ m_status = AppDisconnected; ++} ++ ++QColor TestClient::toQColor( NetworkStatus::Status st ) ++{ ++ QColor col; ++ switch ( st ) { ++ case NetworkStatus::NoNetworks: ++ col = Qt::darkGray; ++ break; ++ case NetworkStatus::Unreachable: ++ col = Qt::darkMagenta; ++ break; ++ case NetworkStatus::OfflineDisconnected: ++ col = Qt::blue; ++ break; ++ case NetworkStatus::OfflineFailed: ++ col = Qt::darkRed; ++ break; ++ case NetworkStatus::ShuttingDown: ++ col = Qt::darkYellow; ++ break; ++ case NetworkStatus::Offline: ++ col = Qt::blue; ++ break; ++ case NetworkStatus::Establishing: ++ col = Qt::yellow; ++ break; ++ case NetworkStatus::Online: ++ col = Qt::green; ++ break; ++ } ++ return col; ++} ++//main ++static const char description[] = ++ I18N_NOOP("Test Client for Network Status kded module"); ++ ++static const char version[] = "v0.1"; ++ ++static KCmdLineOptions options[] = ++{ ++ KCmdLineLastOption ++}; ++ ++int main(int argc, char **argv) ++{ ++ KAboutData about("KNetworkStatusTestClient", I18N_NOOP("knetworkstatustestclient"), version, description, KAboutData::License_GPL, "(C) 2007 Will Stephenson", 0, 0, "wstephenson@kde.org"); ++ about.addAuthor( "Will Stephenson", 0, "wstephenson@kde.org" ); ++ KCmdLineArgs::init(argc, argv, &about); ++ KCmdLineArgs::addCmdLineOptions(options); ++ KApplication app; ++ ++ // register ourselves as a dcop client ++ app.dcopClient()->registerAs(app.name(), false); ++ ++ KCmdLineArgs *args = KCmdLineArgs::parsedArgs(); ++ if (args->count() == 0) ++ { ++ TestClient *widget = new TestClient; ++ widget->show(); ++ } ++ else ++ { ++ int i = 0; ++ for (; i < args->count(); i++) ++ { ++ TestClient *widget = new TestClient; ++ widget->show(); ++ } ++ } ++ args->clear(); ++ ++ return app.exec(); ++} ++ ++#include "testclient2.moc" ++ +Index: networkstatus/.svn/text-base/testclient2.h.svn-base +=================================================================== +--- /dev/null ++++ networkstatus/.svn/text-base/testclient2.h.svn-base +@@ -0,0 +1,82 @@ ++/* This file is part of kdepim. ++ ++ Copyright (C) 2007 Will Stephenson ++ ++ This program is free software; you can redistribute it and/or modify ++ it under the terms of the GNU General Public License as published by ++ the Free Software Foundation; either version 2 of the License, or ++ (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with this program; if not, write to the Free Software ++ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ++ ++ As a special exception, permission is given to link this program ++ with any edition of Qt, and distribute the resulting executable, ++ without including the source code for Qt in the source distribution. ++*/ ++ ++#ifndef KTESTNETWORKSTATUS_H ++#define KTESTNETWORKSTATUS_H ++ ++#ifdef HAVE_CONFIG_H ++#include ++#endif ++ ++#include ++#include ++#include ++#include ++ ++#include "networkstatusiface_stub.h" ++ ++class TestClientView; ++ ++/** ++ * Test client that uses a ConnectionManager to change its state ++ * ++ * @short Main window class ++ * @author Will Stephenson ++ * @version 0.1 ++ */ ++class TestClient : public KMainWindow ++{ ++Q_OBJECT ++public: ++ enum AppStatus{ AppDisconnected, AppWaitingForConnect, AppConnected }; ++ /** ++ * Default Constructor ++ */ ++ TestClient(); ++ ++ /** ++ * Default Destructor ++ */ ++ virtual ~TestClient(); ++ ++private slots: ++ void networkStatusChanged( NetworkStatus::Status status ); ++ void connectButtonClicked(); ++ void doConnect(); ++ void doDisconnect(); ++private: ++ void appWaiting(); ++ void appEstablishing(); ++ void appIsConnected(); ++ void appDisestablishing(); ++ void appDisconnected(); ++ static QColor toQColor( NetworkStatus::Status ); ++private: ++ QHBox * m_layout; ++ NetworkStatusIface_stub *m_service; ++ TestClientView *m_view; ++ AppStatus m_status; // this represents the app's status not the network's status ++}; ++ ++#endif // KTESTNETWORKSTATUS_H ++ +Index: networkstatus/.svn/text-base/testclient.cpp.svn-base +=================================================================== +--- /dev/null ++++ networkstatus/.svn/text-base/testclient.cpp.svn-base +@@ -0,0 +1,234 @@ ++/* This file is part of kdepim. ++ Copyright (C) 2007 Will Stephenson ++ ++ This program is free software; you can redistribute it and/or modify ++ it under the terms of the GNU General Public License version 2 ++ as published by the Free Software Foundation. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with this program; if not, write to the Free Software ++ Foundation, Inc., 51 Franklin Street, Fifth Floor, ++ Boston, MA 02110-1301, USA. ++ ++ As a special exception, permission is given to link this program ++ with any edition of Qt, and distribute the resulting executable, ++ without including the source code for Qt in the source distribution. ++*/ ++ ++#include ++#include ++ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include "connectionmanager.h" ++#include "testclientview.h" ++#include "testclient.h" ++ ++TestClient::TestClient() ++ : KMainWindow( 0, "ktestnetworkstatus" ), ++ m_view(new TestClientView(this)), ++ m_status( AppDisconnected ) ++{ ++ // tell the KMainWindow that this is indeed the main widget ++ setCentralWidget(m_view); ++ ++ networkStatusChanged( ConnectionManager::self()->status() ); ++ appDisconnected(); ++ ++ connect( ConnectionManager::self(), SIGNAL( statusChanged( NetworkStatus::Status ) ), SLOT( networkStatusChanged( NetworkStatus::Status ) ) ); ++ ++ connect( m_view->connectButton, SIGNAL( toggled( bool ) ), SLOT( connectButtonToggled( bool ) ) ); ++} ++ ++TestClient::~TestClient() ++{ ++} ++ ++void TestClient::networkStatusChanged( NetworkStatus::Status status ) ++{ ++ kdDebug() << k_funcinfo << endl; ++//enum EnumStatus { NoNetworks = 1, Unreachable, OfflineDisconnected, OfflineFailed, ShuttingDown ++// , Offline, Establishing, Online }; ++ kdDebug() << "Networking is now: " << NetworkStatus::toString( status ) << " (" << status << ")" << endl; ++ m_view->netStatusLabel->setText( NetworkStatus::toString( status ) ); ++ m_view->netStatusLabel->setPaletteBackgroundColor( toQColor( status ) ); ++ switch ( status ) { ++ case NetworkStatus::NoNetworks: ++ break; ++ case NetworkStatus::Unreachable: ++ break; ++ case NetworkStatus::OfflineDisconnected: ++ break; ++ case NetworkStatus::OfflineFailed: ++ break; ++ case NetworkStatus::ShuttingDown: ++ if ( m_status == AppConnected ) { ++ appDisestablishing(); ++ } ++ break; ++ case NetworkStatus::Offline: ++ if ( m_status == AppConnected ) { ++ appDisconnected(); ++ } ++ break; ++ case NetworkStatus::Establishing: ++ if ( m_status == AppWaitingForConnect ) ++ appEstablishing(); ++ else if ( m_status == AppConnected ) ++ appDisconnected(); ++ break; ++ case NetworkStatus::Online: ++ if ( m_status == AppWaitingForConnect ) ++ appIsConnected(); ++ break; ++ default: ++ m_view->netStatusLabel->setText( "Unrecognised status code!" ); ++ } ++} ++ ++void TestClient::connectButtonToggled( bool on ) ++{ ++ kdDebug() << k_funcinfo << endl; ++ if ( on && m_status == AppDisconnected ) { ++ switch ( ConnectionManager::self()->status() ) ++ { ++ case NetworkStatus::NoNetworks: ++ case NetworkStatus::Online: ++ appIsConnected(); ++ break; ++ default: ++ appWaiting(); ++ break; ++ } ++ } ++ else if ( !on && m_status == AppConnected ) { ++ appDisconnected(); ++ } ++} ++ ++void TestClient::appWaiting() ++{ ++ kdDebug() << k_funcinfo << endl; ++ m_status = AppWaitingForConnect; ++ m_view->appStatusLabel->setText( "Waiting" ); ++} ++ ++void TestClient::appIsConnected() ++{ ++ kdDebug() << k_funcinfo << endl; ++ m_view->connectButton->setEnabled( true ); ++ m_view->connectButton->setText( "Disconnect" ); ++ m_view->appStatusLabel->setText( "Connected" ); ++ m_status = AppConnected; ++} ++ ++void TestClient::appEstablishing() ++{ ++ kdDebug() << k_funcinfo << endl; ++ m_view->netStatusLabel->setText( "Establishing" ); ++ m_view->connectButton->setEnabled( false ); ++} ++ ++void TestClient::appDisestablishing( ) ++{ ++ kdDebug() << k_funcinfo << endl; ++ m_view->connectButton->setEnabled( false ); ++ m_view->appStatusLabel->setText( "Disconnected" ); ++} ++ ++void TestClient::appDisconnected( ) ++{ ++ kdDebug() << k_funcinfo << endl; ++ m_view->connectButton->setEnabled( true ); ++ m_view->connectButton->setText( "Start Connect" ); ++ m_view->appStatusLabel->setText( "Disconnected" ); ++ m_status = AppDisconnected; ++} ++ ++QColor TestClient::toQColor( NetworkStatus::Status st ) ++{ ++ QColor col; ++ switch ( st ) { ++ case NetworkStatus::NoNetworks: ++ col = Qt::darkGray; ++ break; ++ case NetworkStatus::Unreachable: ++ col = Qt::darkMagenta; ++ break; ++ case NetworkStatus::OfflineDisconnected: ++ col = Qt::blue; ++ break; ++ case NetworkStatus::OfflineFailed: ++ col = Qt::darkRed; ++ break; ++ case NetworkStatus::ShuttingDown: ++ col = Qt::darkYellow; ++ break; ++ case NetworkStatus::Offline: ++ col = Qt::blue; ++ break; ++ case NetworkStatus::Establishing: ++ col = Qt::yellow; ++ break; ++ case NetworkStatus::Online: ++ col = Qt::green; ++ break; ++ } ++ return col; ++} ++//main ++static const char description[] = ++ I18N_NOOP("Test Client for Network Status kded module"); ++ ++static const char version[] = "v0.1"; ++ ++static KCmdLineOptions options[] = ++{ ++ KCmdLineLastOption ++}; ++ ++int main(int argc, char **argv) ++{ ++ KAboutData about("KNetworkStatusTestClient", I18N_NOOP("knetworkstatustestclient"), version, description, KAboutData::License_GPL, "(C) 2007 Will Stephenson", 0, 0, "wstephenson@kde.org"); ++ about.addAuthor( "Will Stephenson", 0, "wstephenson@kde.org" ); ++ KCmdLineArgs::init(argc, argv, &about); ++ KCmdLineArgs::addCmdLineOptions(options); ++ KApplication app; ++ ++ // register ourselves as a dcop client ++ app.dcopClient()->registerAs(app.name(), false); ++ ++ KCmdLineArgs *args = KCmdLineArgs::parsedArgs(); ++ if (args->count() == 0) ++ { ++ TestClient *widget = new TestClient; ++ widget->show(); ++ } ++ else ++ { ++ int i = 0; ++ for (; i < args->count(); i++) ++ { ++ TestClient *widget = new TestClient; ++ widget->show(); ++ } ++ } ++ args->clear(); ++ ++ return app.exec(); ++} ++ ++#include "testclient.moc" ++ +Index: networkstatus/.svn/text-base/testclient.h.svn-base +=================================================================== +--- /dev/null ++++ networkstatus/.svn/text-base/testclient.h.svn-base +@@ -0,0 +1,80 @@ ++/* This file is part of kdepim. ++ ++ Copyright (C) 2007 Will Stephenson ++ ++ This program is free software; you can redistribute it and/or modify ++ it under the terms of the GNU General Public License as published by ++ the Free Software Foundation; either version 2 of the License, or ++ (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with this program; if not, write to the Free Software ++ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ++ ++ As a special exception, permission is given to link this program ++ with any edition of Qt, and distribute the resulting executable, ++ without including the source code for Qt in the source distribution. ++*/ ++ ++#ifndef KTESTNETWORKSTATUS_H ++#define KTESTNETWORKSTATUS_H ++ ++#ifdef HAVE_CONFIG_H ++#include ++#endif ++ ++#include ++#include ++#include ++#include ++ ++#include "networkstatusiface_stub.h" ++ ++class TestClientView; ++ ++/** ++ * This class serves as the main window for ktestnetworkstatus. It handles the ++ * menus, toolbars, and status bars. ++ * ++ * @short Main window class ++ * @author Will Stephenson ++ * @version 0.1 ++ */ ++class TestClient : public KMainWindow ++{ ++Q_OBJECT ++public: ++ enum AppStatus{ AppDisconnected, AppWaitingForConnect, AppConnected }; ++ /** ++ * Default Constructor ++ */ ++ TestClient(); ++ ++ /** ++ * Default Destructor ++ */ ++ virtual ~TestClient(); ++ ++private slots: ++ void networkStatusChanged( NetworkStatus::Status status ); ++ void connectButtonToggled( bool on ); ++private: ++ void appWaiting(); ++ void appEstablishing(); ++ void appIsConnected(); ++ void appDisestablishing(); ++ void appDisconnected(); ++ static QColor toQColor( NetworkStatus::Status ); ++private: ++ NetworkStatusIface_stub *m_service; ++ TestClientView *m_view; ++ AppStatus m_status; // this represents the app's status not the network's status ++}; ++ ++#endif // KTESTNETWORKSTATUS_H ++ +Index: networkstatus/.svn/text-base/testclientview.ui.svn-base +=================================================================== +--- /dev/null ++++ networkstatus/.svn/text-base/testclientview.ui.svn-base +@@ -0,0 +1,177 @@ ++ ++TestClientView ++ ++ ++ TestClientView ++ ++ ++ ++ 0 ++ 0 ++ 356 ++ 127 ++ ++ ++ ++ Form1 ++ ++ ++ ++ unnamed ++ ++ ++ ++ textLabel4 ++ ++ ++ ++ 5 ++ 5 ++ 0 ++ 0 ++ ++ ++ ++ <font size="+2"><b>Client for KDE 3 Offline Mode</b></font> ++ ++ ++ AlignVCenter ++ ++ ++ ++ ++ layout1 ++ ++ ++ ++ unnamed ++ ++ ++ ++ textLabel1 ++ ++ ++ Network status: ++ ++ ++ ++ ++ netStatusLabel ++ ++ ++ ++ 0 ++ 255 ++ 0 ++ ++ ++ ++ Panel ++ ++ ++ STATUS ++ ++ ++ AlignCenter ++ ++ ++ ++ ++ ++ ++ layout1_2 ++ ++ ++ ++ unnamed ++ ++ ++ ++ textLabel1_2 ++ ++ ++ App status: ++ ++ ++ ++ ++ appStatusLabel ++ ++ ++ ++ 0 ++ 255 ++ 0 ++ ++ ++ ++ Panel ++ ++ ++ STATUS ++ ++ ++ AlignCenter ++ ++ ++ ++ ++ ++ ++ layout2 ++ ++ ++ ++ unnamed ++ ++ ++ ++ spacer1 ++ ++ ++ Horizontal ++ ++ ++ Expanding ++ ++ ++ ++ 31 ++ 20 ++ ++ ++ ++ ++ ++ connectButton ++ ++ ++ Start Connect ++ ++ ++ false ++ ++ ++ ++ ++ spacer2 ++ ++ ++ Horizontal ++ ++ ++ Expanding ++ ++ ++ ++ 61 ++ 20 ++ ++ ++ ++ ++ ++ ++ ++ ++ +Index: networkstatus/.svn/text-base/testservice.cpp.svn-base +=================================================================== +--- /dev/null ++++ networkstatus/.svn/text-base/testservice.cpp.svn-base +@@ -0,0 +1,219 @@ ++/* This file is part of kdepim. ++ Copyright (C) 2005,2007 Will Stephenson ++ ++ This program is free software; you can redistribute it and/or modify ++ it under the terms of the GNU General Public License version 2 ++ as published by the Free Software Foundation. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with this program; if not, write to the Free Software ++ Foundation, Inc., 51 Franklin Street, Fifth Floor, ++ Boston, MA 02110-1301, USA. ++ ++ As a special exception, permission is given to link this program ++ with any edition of Qt, and distribute the resulting executable, ++ without including the source code for Qt in the source distribution. ++*/ ++ ++#include ++#include ++#include ++#include ++ ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include "testservice.h" ++#include "testserviceview.h" ++#include "networkstatusiface_stub.h" ++ ++TestService::TestService() : KMainWindow( 0, "testservice" ), ++ m_service( new NetworkStatusIface_stub( "kded", "networkstatus" ) ), ++ m_status ( NetworkStatus::Offline ), ++ m_nextStatus( NetworkStatus::OfflineDisconnected ), ++ m_view( new TestServiceView( this ) ) ++{ ++ setCentralWidget( m_view ); ++ kapp->dcopClient()->registerAs("testservice" ); ++ ++ connect( m_view->changeCombo, SIGNAL( activated( int ) ), SLOT( changeComboActivated( int ) ) ); ++ connect( m_view->changeButton, SIGNAL( clicked() ), SLOT( changeButtonClicked() ) ); ++ ++ connect( kapp->dcopClient(), SIGNAL( applicationRegistered( const QCString& ) ), this, SLOT( registeredToDCOP( const QCString& ) ) ); ++ kapp->dcopClient()->setNotifications( true ); ++ ++ m_view->statusLabel->setText( NetworkStatus::toString( m_status ) ); ++ m_view->statusLabel->setPaletteBackgroundColor( toQColor( m_status ) ); ++ setCaption( NetworkStatus::toString( m_status ) ); ++ ++ registerService(); ++} ++ ++TestService::~TestService() ++{ ++ delete m_service; ++ delete m_view; ++} ++ ++void TestService::registerService() ++{ ++ NetworkStatus::Properties nsp; ++ nsp.name = "test_net"; ++ nsp.service = kapp->dcopClient()->appId(); ++ nsp.status = m_status; ++ m_service->registerNetwork( nsp ); ++} ++ ++void TestService::registeredToDCOP( const QCString & appId ) ++{ ++ if ( appId == "kded" ) ++ registerService(); ++} ++ ++int TestService::status( const QString & network ) ++{ ++ Q_UNUSED( network ); ++ return (int)m_status; ++} ++ ++void TestService::changeComboActivated( int index ) ++{ ++ switch ( index ) { ++ case 0 /*NetworkStatus::OfflineDisconnected*/: ++ m_nextStatus = NetworkStatus::OfflineDisconnected; ++ break; ++ case 1 /*NetworkStatus::OfflineFailed*/: ++ m_nextStatus = NetworkStatus::OfflineFailed; ++ break; ++ case 2 /*NetworkStatus::ShuttingDown*/: ++ m_nextStatus = NetworkStatus::ShuttingDown; ++ break; ++ case 3 /*NetworkStatus::Offline*/: ++ m_nextStatus = NetworkStatus::Offline; ++ break; ++ case 4 /*NetworkStatus::Establishing*/: ++ m_nextStatus = NetworkStatus::Establishing; ++ break; ++ case 5 /*NetworkStatus::Online*/: ++ m_nextStatus = NetworkStatus::Online; ++ break; ++ default: ++ kdDebug() << "Unrecognised status!" << endl; ++ Q_ASSERT( false ); ++ } ++ m_view->changeButton->setEnabled( true ); ++} ++ ++void TestService::changeButtonClicked() ++{ ++ m_view->changeButton->setEnabled( false ); ++ m_status = m_nextStatus; ++ m_service->setNetworkStatus( "test_net", ( int )m_status ); ++ m_view->statusLabel->setText( NetworkStatus::toString( m_status ) ); ++ m_view->statusLabel->setPaletteBackgroundColor( toQColor( m_status ) ); ++ setCaption( NetworkStatus::toString( m_status ) ); ++} ++ ++int TestService::establish( const QString & network ) ++{ ++ Q_UNUSED( network ); ++ m_status = NetworkStatus::Establishing; ++ m_service->setNetworkStatus( "test_net", (int)m_status ); ++ m_nextStatus = NetworkStatus::Online; ++ QTimer::singleShot( 5000, this, SLOT( slotStatusChange() ) ); ++ return (int)NetworkStatus::RequestAccepted; ++} ++ ++int TestService::shutdown( const QString & network ) ++{ ++ Q_UNUSED( network ); ++ m_status = NetworkStatus::ShuttingDown; ++ m_service->setNetworkStatus( "test_net", (int)m_status ); ++ m_nextStatus = NetworkStatus::Offline; ++ QTimer::singleShot( 5000, this, SLOT( slotStatusChange() ) ); ++ return (int)NetworkStatus::RequestAccepted; ++} ++ ++void TestService::simulateFailure() ++{ ++ m_status = NetworkStatus::OfflineFailed; ++ m_service->setNetworkStatus( "test_net", (int)m_status ); ++} ++ ++void TestService::simulateDisconnect() ++{ ++ m_status = NetworkStatus::OfflineDisconnected; ++ m_service->setNetworkStatus( "test_net", (int)m_status ); ++} ++ ++void TestService::slotStatusChange() ++{ ++ m_status = m_nextStatus; ++ m_service->setNetworkStatus( "test_net", (int)m_status ); ++} ++ ++QColor TestService::toQColor( NetworkStatus::Status st ) ++{ ++ QColor col; ++ switch ( st ) { ++ case NetworkStatus::NoNetworks: ++ col = Qt::darkGray; ++ break; ++ case NetworkStatus::Unreachable: ++ col = Qt::darkMagenta; ++ break; ++ case NetworkStatus::OfflineDisconnected: ++ col = Qt::blue; ++ break; ++ case NetworkStatus::OfflineFailed: ++ col = Qt::darkRed; ++ break; ++ case NetworkStatus::ShuttingDown: ++ col = Qt::darkYellow; ++ break; ++ case NetworkStatus::Offline: ++ col = Qt::blue; ++ break; ++ case NetworkStatus::Establishing: ++ col = Qt::yellow; ++ break; ++ case NetworkStatus::Online: ++ col = Qt::green; ++ break; ++ } ++ return col; ++} ++ ++static const char description[] = ++ I18N_NOOP("Test Service for Network Status kded module"); ++ ++static const char version[] = "v0.1"; ++ ++static KCmdLineOptions options[] = ++{ ++ KCmdLineLastOption ++}; ++ ++int main( int argc, char** argv ) ++{ ++ KAboutData about("KNetworkStatusTestService", I18N_NOOP("knetworkstatustestservice"), version, description, KAboutData::License_GPL, "(C) 2007 Will Stephenson", 0, 0, "wstephenson@kde.org"); ++ about.addAuthor( "Will Stephenson", 0, "wstephenson@kde.org" ); ++ KCmdLineArgs::init(argc, argv, &about); ++ KCmdLineArgs::addCmdLineOptions(options); ++ KApplication app; ++ ++ TestService * test = new TestService; ++ test->show(); ++ return app.exec(); ++} ++ ++#include "testservice.moc" +Index: networkstatus/.svn/text-base/testservice.h.svn-base +=================================================================== +--- /dev/null ++++ networkstatus/.svn/text-base/testservice.h.svn-base +@@ -0,0 +1,60 @@ ++/* This file is part of kdepim. ++ ++ Copyright (C) 2005,2007 Will Stephenson ++ ++ This program is free software; you can redistribute it and/or modify ++ it under the terms of the GNU General Public License as published by ++ the Free Software Foundation; either version 2 of the License, or ++ (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with this program; if not, write to the Free Software ++ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ++ ++ As a special exception, permission is given to link this program ++ with any edition of Qt, and distribute the resulting executable, ++ without including the source code for Qt in the source distribution. ++*/ ++ ++#ifndef _TEST_NETWORKSTATUS_SERVICE_H ++#define _TEST_NETWORKSTATUS_SERVICE_H ++ ++#include ++ ++#include "networkstatuscommon.h" ++ ++class NetworkStatusIface_stub; ++class TestServiceView; ++ ++class TestService : public KMainWindow { ++Q_OBJECT ++public: ++ TestService(); ++ virtual ~TestService(); ++ int status( const QString & network ); ++ int establish( const QString & network ); ++ int shutdown( const QString & network ); ++ void simulateFailure(); ++ void simulateDisconnect(); ++protected slots: ++ void changeComboActivated( int index ); ++ void registeredToDCOP( const QCString& appId ); ++ ++ void changeButtonClicked(); ++ ++ void slotStatusChange(); ++private: ++ void registerService(); ++ static QColor toQColor( NetworkStatus::Status ); ++ NetworkStatusIface_stub * m_service; ++ NetworkStatus::Status m_status; ++ NetworkStatus::Status m_nextStatus; ++ TestServiceView * m_view; ++}; ++ ++#endif +Index: networkstatus/.svn/text-base/testserviceview.ui.svn-base +=================================================================== +--- /dev/null ++++ networkstatus/.svn/text-base/testserviceview.ui.svn-base +@@ -0,0 +1,181 @@ ++ ++TestServiceView ++ ++ ++ TestServiceView ++ ++ ++ ++ 0 ++ 0 ++ 367 ++ 132 ++ ++ ++ ++ Form1 ++ ++ ++ ++ unnamed ++ ++ ++ ++ textLabel4 ++ ++ ++ <font size="+2"><b>Service for KDE 3 Offline Mode</b></font> ++ ++ ++ AlignVCenter ++ ++ ++ ++ ++ layout2 ++ ++ ++ ++ unnamed ++ ++ ++ ++ textLabel1 ++ ++ ++ Status: ++ ++ ++ ++ ++ statusLabel ++ ++ ++ ++ 0 ++ 255 ++ 0 ++ ++ ++ ++ StyledPanel ++ ++ ++ STATUS ++ ++ ++ AlignCenter ++ ++ ++ ++ ++ ++ ++ layout3 ++ ++ ++ ++ unnamed ++ ++ ++ ++ textLabel3 ++ ++ ++ Change to: ++ ++ ++ ++ ++ ++ Offline Disconnected ++ ++ ++ ++ ++ Offline Failed ++ ++ ++ ++ ++ Shutting Down ++ ++ ++ ++ ++ Offline ++ ++ ++ ++ ++ Establishing ++ ++ ++ ++ ++ Online ++ ++ ++ ++ changeCombo ++ ++ ++ ++ ++ ++ ++ layout1 ++ ++ ++ ++ unnamed ++ ++ ++ ++ spacer1 ++ ++ ++ Horizontal ++ ++ ++ Expanding ++ ++ ++ ++ 51 ++ 20 ++ ++ ++ ++ ++ ++ changeButton ++ ++ ++ Do change ++ ++ ++ ++ ++ spacer2 ++ ++ ++ Horizontal ++ ++ ++ Expanding ++ ++ ++ ++ 41 ++ 20 ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ +Index: networkstatus/testclient2.cpp +=================================================================== +--- /dev/null ++++ networkstatus/testclient2.cpp +@@ -0,0 +1,222 @@ ++/* This file is part of kdepim. ++ Copyright (C) 2007 Will Stephenson ++ ++ This program is free software; you can redistribute it and/or modify ++ it under the terms of the GNU General Public License version 2 ++ as published by the Free Software Foundation. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with this program; if not, write to the Free Software ++ Foundation, Inc., 51 Franklin Street, Fifth Floor, ++ Boston, MA 02110-1301, USA. ++ ++ As a special exception, permission is given to link this program ++ with any edition of Qt, and distribute the resulting executable, ++ without including the source code for Qt in the source distribution. ++*/ ++ ++#include ++#include ++#include ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include ++ ++#include "testclientview.h" ++#include "testclient2.h" ++ ++TestClient::TestClient() ++ : KMainWindow( 0, "ktestnetworkstatus" ), ++ m_layout( new QVBox( 0, "layout" ) ), ++ m_status( AppDisconnected ) ++{ ++ m_view = new TestClientView( this ); ++ new StatusBarNetworkStatusIndicator( m_view, "statusindicator" ); ++ // tell the KMainWindow that this is indeed the main widget ++ setCentralWidget(m_view); ++ ++ networkStatusChanged( ConnectionManager::self()->status() ); ++ appDisconnected(); ++ ++ connect( ConnectionManager::self(), SIGNAL( statusChanged( NetworkStatus::Status ) ), SLOT( networkStatusChanged( NetworkStatus::Status ) ) ); ++ ConnectionManager::self()->registerConnectSlot( this, SLOT( doConnect() ) ); ++ ConnectionManager::self()->registerDisconnectSlot( this, SLOT( doDisconnect() ) ); ++ ++ connect( m_view->connectButton, SIGNAL( clicked() ), SLOT( connectButtonClicked() ) ); ++} ++ ++TestClient::~TestClient() ++{ ++} ++ ++void TestClient::networkStatusChanged( NetworkStatus::Status status ) ++{ ++ kdDebug() << k_funcinfo << endl; ++ kdDebug() << "Networking is now: " << NetworkStatus::toString( status ) << " (" << status << ")" << endl; ++ m_view->netStatusLabel->setText( NetworkStatus::toString( status ) ); ++ m_view->netStatusLabel->setPaletteBackgroundColor( toQColor( status ) ); ++} ++ ++void TestClient::doConnect() ++{ ++ Q_ASSERT( ConnectionManager::self()->status() == NetworkStatus::Online ); ++ if ( m_status != AppConnected ) { ++ appIsConnected(); ++ } ++} ++ ++void TestClient::doDisconnect() ++{ ++ Q_ASSERT( ConnectionManager::self()->status() != NetworkStatus::Online ); ++ if ( m_status == AppConnected ) { ++ appDisconnected(); ++ } ++} ++ ++void TestClient::connectButtonClicked() ++{ ++ kdDebug() << k_funcinfo << endl; ++ if ( m_status == AppDisconnected ) { ++ switch ( ConnectionManager::self()->status() ) ++ { ++ case NetworkStatus::NoNetworks: ++ case NetworkStatus::Online: ++ appIsConnected(); ++ break; ++ default: ++ appWaiting(); ++ break; ++ } ++ } ++ else if ( m_status == AppConnected || m_status == AppWaitingForConnect ) { ++ appDisconnected(); ++ } ++} ++ ++void TestClient::appWaiting() ++{ ++ kdDebug() << k_funcinfo << endl; ++ //m_status = AppWaitingForConnect; ++ m_view->appStatusLabel->setText( "Waiting" ); ++} ++ ++void TestClient::appIsConnected() ++{ ++ kdDebug() << k_funcinfo << endl; ++ m_view->connectButton->setEnabled( true ); ++ m_view->connectButton->setText( "Disconnect" ); ++ m_view->appStatusLabel->setText( "Connected" ); ++ m_status = AppConnected; ++} ++ ++void TestClient::appEstablishing() ++{ ++ kdDebug() << k_funcinfo << endl; ++ m_view->netStatusLabel->setText( "Establishing" ); ++ m_view->connectButton->setEnabled( false ); ++} ++ ++void TestClient::appDisestablishing( ) ++{ ++ kdDebug() << k_funcinfo << endl; ++ m_view->connectButton->setEnabled( false ); ++ m_view->appStatusLabel->setText( "Disconnected" ); ++} ++ ++void TestClient::appDisconnected( ) ++{ ++ kdDebug() << k_funcinfo << endl; ++ m_view->connectButton->setEnabled( true ); ++ m_view->connectButton->setText( "Start Connect" ); ++ m_view->appStatusLabel->setText( "Disconnected" ); ++ m_status = AppDisconnected; ++} ++ ++QColor TestClient::toQColor( NetworkStatus::Status st ) ++{ ++ QColor col; ++ switch ( st ) { ++ case NetworkStatus::NoNetworks: ++ col = Qt::darkGray; ++ break; ++ case NetworkStatus::Unreachable: ++ col = Qt::darkMagenta; ++ break; ++ case NetworkStatus::OfflineDisconnected: ++ col = Qt::blue; ++ break; ++ case NetworkStatus::OfflineFailed: ++ col = Qt::darkRed; ++ break; ++ case NetworkStatus::ShuttingDown: ++ col = Qt::darkYellow; ++ break; ++ case NetworkStatus::Offline: ++ col = Qt::blue; ++ break; ++ case NetworkStatus::Establishing: ++ col = Qt::yellow; ++ break; ++ case NetworkStatus::Online: ++ col = Qt::green; ++ break; ++ } ++ return col; ++} ++//main ++static const char description[] = ++ I18N_NOOP("Test Client for Network Status kded module"); ++ ++static const char version[] = "v0.1"; ++ ++static KCmdLineOptions options[] = ++{ ++ KCmdLineLastOption ++}; ++ ++int main(int argc, char **argv) ++{ ++ KAboutData about("KNetworkStatusTestClient", I18N_NOOP("knetworkstatustestclient"), version, description, KAboutData::License_GPL, "(C) 2007 Will Stephenson", 0, 0, "wstephenson@kde.org"); ++ about.addAuthor( "Will Stephenson", 0, "wstephenson@kde.org" ); ++ KCmdLineArgs::init(argc, argv, &about); ++ KCmdLineArgs::addCmdLineOptions(options); ++ KApplication app; ++ ++ // register ourselves as a dcop client ++ app.dcopClient()->registerAs(app.name(), false); ++ ++ KCmdLineArgs *args = KCmdLineArgs::parsedArgs(); ++ if (args->count() == 0) ++ { ++ TestClient *widget = new TestClient; ++ widget->show(); ++ } ++ else ++ { ++ int i = 0; ++ for (; i < args->count(); i++) ++ { ++ TestClient *widget = new TestClient; ++ widget->show(); ++ } ++ } ++ args->clear(); ++ ++ return app.exec(); ++} ++ ++#include "testclient2.moc" ++ +Index: networkstatus/testclient2.h +=================================================================== +--- /dev/null ++++ networkstatus/testclient2.h +@@ -0,0 +1,82 @@ ++/* This file is part of kdepim. ++ ++ Copyright (C) 2007 Will Stephenson ++ ++ This program is free software; you can redistribute it and/or modify ++ it under the terms of the GNU General Public License as published by ++ the Free Software Foundation; either version 2 of the License, or ++ (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with this program; if not, write to the Free Software ++ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ++ ++ As a special exception, permission is given to link this program ++ with any edition of Qt, and distribute the resulting executable, ++ without including the source code for Qt in the source distribution. ++*/ ++ ++#ifndef KTESTNETWORKSTATUS_H ++#define KTESTNETWORKSTATUS_H ++ ++#ifdef HAVE_CONFIG_H ++#include ++#endif ++ ++#include ++#include ++#include ++#include ++ ++#include "networkstatusiface_stub.h" ++ ++class TestClientView; ++ ++/** ++ * Test client that uses a ConnectionManager to change its state ++ * ++ * @short Main window class ++ * @author Will Stephenson ++ * @version 0.1 ++ */ ++class TestClient : public KMainWindow ++{ ++Q_OBJECT ++public: ++ enum AppStatus{ AppDisconnected, AppWaitingForConnect, AppConnected }; ++ /** ++ * Default Constructor ++ */ ++ TestClient(); ++ ++ /** ++ * Default Destructor ++ */ ++ virtual ~TestClient(); ++ ++private slots: ++ void networkStatusChanged( NetworkStatus::Status status ); ++ void connectButtonClicked(); ++ void doConnect(); ++ void doDisconnect(); ++private: ++ void appWaiting(); ++ void appEstablishing(); ++ void appIsConnected(); ++ void appDisestablishing(); ++ void appDisconnected(); ++ static QColor toQColor( NetworkStatus::Status ); ++private: ++ QHBox * m_layout; ++ NetworkStatusIface_stub *m_service; ++ TestClientView *m_view; ++ AppStatus m_status; // this represents the app's status not the network's status ++}; ++ ++#endif // KTESTNETWORKSTATUS_H ++ +Index: networkstatus/testclient.cpp +=================================================================== +--- /dev/null ++++ networkstatus/testclient.cpp +@@ -0,0 +1,234 @@ ++/* This file is part of kdepim. ++ Copyright (C) 2007 Will Stephenson ++ ++ This program is free software; you can redistribute it and/or modify ++ it under the terms of the GNU General Public License version 2 ++ as published by the Free Software Foundation. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with this program; if not, write to the Free Software ++ Foundation, Inc., 51 Franklin Street, Fifth Floor, ++ Boston, MA 02110-1301, USA. ++ ++ As a special exception, permission is given to link this program ++ with any edition of Qt, and distribute the resulting executable, ++ without including the source code for Qt in the source distribution. ++*/ ++ ++#include ++#include ++ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include "connectionmanager.h" ++#include "testclientview.h" ++#include "testclient.h" ++ ++TestClient::TestClient() ++ : KMainWindow( 0, "ktestnetworkstatus" ), ++ m_view(new TestClientView(this)), ++ m_status( AppDisconnected ) ++{ ++ // tell the KMainWindow that this is indeed the main widget ++ setCentralWidget(m_view); ++ ++ networkStatusChanged( ConnectionManager::self()->status() ); ++ appDisconnected(); ++ ++ connect( ConnectionManager::self(), SIGNAL( statusChanged( NetworkStatus::Status ) ), SLOT( networkStatusChanged( NetworkStatus::Status ) ) ); ++ ++ connect( m_view->connectButton, SIGNAL( toggled( bool ) ), SLOT( connectButtonToggled( bool ) ) ); ++} ++ ++TestClient::~TestClient() ++{ ++} ++ ++void TestClient::networkStatusChanged( NetworkStatus::Status status ) ++{ ++ kdDebug() << k_funcinfo << endl; ++//enum EnumStatus { NoNetworks = 1, Unreachable, OfflineDisconnected, OfflineFailed, ShuttingDown ++// , Offline, Establishing, Online }; ++ kdDebug() << "Networking is now: " << NetworkStatus::toString( status ) << " (" << status << ")" << endl; ++ m_view->netStatusLabel->setText( NetworkStatus::toString( status ) ); ++ m_view->netStatusLabel->setPaletteBackgroundColor( toQColor( status ) ); ++ switch ( status ) { ++ case NetworkStatus::NoNetworks: ++ break; ++ case NetworkStatus::Unreachable: ++ break; ++ case NetworkStatus::OfflineDisconnected: ++ break; ++ case NetworkStatus::OfflineFailed: ++ break; ++ case NetworkStatus::ShuttingDown: ++ if ( m_status == AppConnected ) { ++ appDisestablishing(); ++ } ++ break; ++ case NetworkStatus::Offline: ++ if ( m_status == AppConnected ) { ++ appDisconnected(); ++ } ++ break; ++ case NetworkStatus::Establishing: ++ if ( m_status == AppWaitingForConnect ) ++ appEstablishing(); ++ else if ( m_status == AppConnected ) ++ appDisconnected(); ++ break; ++ case NetworkStatus::Online: ++ if ( m_status == AppWaitingForConnect ) ++ appIsConnected(); ++ break; ++ default: ++ m_view->netStatusLabel->setText( "Unrecognised status code!" ); ++ } ++} ++ ++void TestClient::connectButtonToggled( bool on ) ++{ ++ kdDebug() << k_funcinfo << endl; ++ if ( on && m_status == AppDisconnected ) { ++ switch ( ConnectionManager::self()->status() ) ++ { ++ case NetworkStatus::NoNetworks: ++ case NetworkStatus::Online: ++ appIsConnected(); ++ break; ++ default: ++ appWaiting(); ++ break; ++ } ++ } ++ else if ( !on && m_status == AppConnected ) { ++ appDisconnected(); ++ } ++} ++ ++void TestClient::appWaiting() ++{ ++ kdDebug() << k_funcinfo << endl; ++ m_status = AppWaitingForConnect; ++ m_view->appStatusLabel->setText( "Waiting" ); ++} ++ ++void TestClient::appIsConnected() ++{ ++ kdDebug() << k_funcinfo << endl; ++ m_view->connectButton->setEnabled( true ); ++ m_view->connectButton->setText( "Disconnect" ); ++ m_view->appStatusLabel->setText( "Connected" ); ++ m_status = AppConnected; ++} ++ ++void TestClient::appEstablishing() ++{ ++ kdDebug() << k_funcinfo << endl; ++ m_view->netStatusLabel->setText( "Establishing" ); ++ m_view->connectButton->setEnabled( false ); ++} ++ ++void TestClient::appDisestablishing( ) ++{ ++ kdDebug() << k_funcinfo << endl; ++ m_view->connectButton->setEnabled( false ); ++ m_view->appStatusLabel->setText( "Disconnected" ); ++} ++ ++void TestClient::appDisconnected( ) ++{ ++ kdDebug() << k_funcinfo << endl; ++ m_view->connectButton->setEnabled( true ); ++ m_view->connectButton->setText( "Start Connect" ); ++ m_view->appStatusLabel->setText( "Disconnected" ); ++ m_status = AppDisconnected; ++} ++ ++QColor TestClient::toQColor( NetworkStatus::Status st ) ++{ ++ QColor col; ++ switch ( st ) { ++ case NetworkStatus::NoNetworks: ++ col = Qt::darkGray; ++ break; ++ case NetworkStatus::Unreachable: ++ col = Qt::darkMagenta; ++ break; ++ case NetworkStatus::OfflineDisconnected: ++ col = Qt::blue; ++ break; ++ case NetworkStatus::OfflineFailed: ++ col = Qt::darkRed; ++ break; ++ case NetworkStatus::ShuttingDown: ++ col = Qt::darkYellow; ++ break; ++ case NetworkStatus::Offline: ++ col = Qt::blue; ++ break; ++ case NetworkStatus::Establishing: ++ col = Qt::yellow; ++ break; ++ case NetworkStatus::Online: ++ col = Qt::green; ++ break; ++ } ++ return col; ++} ++//main ++static const char description[] = ++ I18N_NOOP("Test Client for Network Status kded module"); ++ ++static const char version[] = "v0.1"; ++ ++static KCmdLineOptions options[] = ++{ ++ KCmdLineLastOption ++}; ++ ++int main(int argc, char **argv) ++{ ++ KAboutData about("KNetworkStatusTestClient", I18N_NOOP("knetworkstatustestclient"), version, description, KAboutData::License_GPL, "(C) 2007 Will Stephenson", 0, 0, "wstephenson@kde.org"); ++ about.addAuthor( "Will Stephenson", 0, "wstephenson@kde.org" ); ++ KCmdLineArgs::init(argc, argv, &about); ++ KCmdLineArgs::addCmdLineOptions(options); ++ KApplication app; ++ ++ // register ourselves as a dcop client ++ app.dcopClient()->registerAs(app.name(), false); ++ ++ KCmdLineArgs *args = KCmdLineArgs::parsedArgs(); ++ if (args->count() == 0) ++ { ++ TestClient *widget = new TestClient; ++ widget->show(); ++ } ++ else ++ { ++ int i = 0; ++ for (; i < args->count(); i++) ++ { ++ TestClient *widget = new TestClient; ++ widget->show(); ++ } ++ } ++ args->clear(); ++ ++ return app.exec(); ++} ++ ++#include "testclient.moc" ++ +Index: networkstatus/testclient.h +=================================================================== +--- /dev/null ++++ networkstatus/testclient.h +@@ -0,0 +1,80 @@ ++/* This file is part of kdepim. ++ ++ Copyright (C) 2007 Will Stephenson ++ ++ This program is free software; you can redistribute it and/or modify ++ it under the terms of the GNU General Public License as published by ++ the Free Software Foundation; either version 2 of the License, or ++ (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with this program; if not, write to the Free Software ++ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ++ ++ As a special exception, permission is given to link this program ++ with any edition of Qt, and distribute the resulting executable, ++ without including the source code for Qt in the source distribution. ++*/ ++ ++#ifndef KTESTNETWORKSTATUS_H ++#define KTESTNETWORKSTATUS_H ++ ++#ifdef HAVE_CONFIG_H ++#include ++#endif ++ ++#include ++#include ++#include ++#include ++ ++#include "networkstatusiface_stub.h" ++ ++class TestClientView; ++ ++/** ++ * This class serves as the main window for ktestnetworkstatus. It handles the ++ * menus, toolbars, and status bars. ++ * ++ * @short Main window class ++ * @author Will Stephenson ++ * @version 0.1 ++ */ ++class TestClient : public KMainWindow ++{ ++Q_OBJECT ++public: ++ enum AppStatus{ AppDisconnected, AppWaitingForConnect, AppConnected }; ++ /** ++ * Default Constructor ++ */ ++ TestClient(); ++ ++ /** ++ * Default Destructor ++ */ ++ virtual ~TestClient(); ++ ++private slots: ++ void networkStatusChanged( NetworkStatus::Status status ); ++ void connectButtonToggled( bool on ); ++private: ++ void appWaiting(); ++ void appEstablishing(); ++ void appIsConnected(); ++ void appDisestablishing(); ++ void appDisconnected(); ++ static QColor toQColor( NetworkStatus::Status ); ++private: ++ NetworkStatusIface_stub *m_service; ++ TestClientView *m_view; ++ AppStatus m_status; // this represents the app's status not the network's status ++}; ++ ++#endif // KTESTNETWORKSTATUS_H ++ +Index: networkstatus/testclientview.ui +=================================================================== +--- /dev/null ++++ networkstatus/testclientview.ui +@@ -0,0 +1,177 @@ ++ ++TestClientView ++ ++ ++ TestClientView ++ ++ ++ ++ 0 ++ 0 ++ 356 ++ 127 ++ ++ ++ ++ Form1 ++ ++ ++ ++ unnamed ++ ++ ++ ++ textLabel4 ++ ++ ++ ++ 5 ++ 5 ++ 0 ++ 0 ++ ++ ++ ++ <font size="+2"><b>Client for KDE 3 Offline Mode</b></font> ++ ++ ++ AlignVCenter ++ ++ ++ ++ ++ layout1 ++ ++ ++ ++ unnamed ++ ++ ++ ++ textLabel1 ++ ++ ++ Network status: ++ ++ ++ ++ ++ netStatusLabel ++ ++ ++ ++ 0 ++ 255 ++ 0 ++ ++ ++ ++ Panel ++ ++ ++ STATUS ++ ++ ++ AlignCenter ++ ++ ++ ++ ++ ++ ++ layout1_2 ++ ++ ++ ++ unnamed ++ ++ ++ ++ textLabel1_2 ++ ++ ++ App status: ++ ++ ++ ++ ++ appStatusLabel ++ ++ ++ ++ 0 ++ 255 ++ 0 ++ ++ ++ ++ Panel ++ ++ ++ STATUS ++ ++ ++ AlignCenter ++ ++ ++ ++ ++ ++ ++ layout2 ++ ++ ++ ++ unnamed ++ ++ ++ ++ spacer1 ++ ++ ++ Horizontal ++ ++ ++ Expanding ++ ++ ++ ++ 31 ++ 20 ++ ++ ++ ++ ++ ++ connectButton ++ ++ ++ Start Connect ++ ++ ++ false ++ ++ ++ ++ ++ spacer2 ++ ++ ++ Horizontal ++ ++ ++ Expanding ++ ++ ++ ++ 61 ++ 20 ++ ++ ++ ++ ++ ++ ++ ++ ++ +Index: networkstatus/testservice.cpp +=================================================================== +--- /dev/null ++++ networkstatus/testservice.cpp +@@ -0,0 +1,219 @@ ++/* This file is part of kdepim. ++ Copyright (C) 2005,2007 Will Stephenson ++ ++ This program is free software; you can redistribute it and/or modify ++ it under the terms of the GNU General Public License version 2 ++ as published by the Free Software Foundation. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with this program; if not, write to the Free Software ++ Foundation, Inc., 51 Franklin Street, Fifth Floor, ++ Boston, MA 02110-1301, USA. ++ ++ As a special exception, permission is given to link this program ++ with any edition of Qt, and distribute the resulting executable, ++ without including the source code for Qt in the source distribution. ++*/ ++ ++#include ++#include ++#include ++#include ++ ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include "testservice.h" ++#include "testserviceview.h" ++#include "networkstatusiface_stub.h" ++ ++TestService::TestService() : KMainWindow( 0, "testservice" ), ++ m_service( new NetworkStatusIface_stub( "kded", "networkstatus" ) ), ++ m_status ( NetworkStatus::Offline ), ++ m_nextStatus( NetworkStatus::OfflineDisconnected ), ++ m_view( new TestServiceView( this ) ) ++{ ++ setCentralWidget( m_view ); ++ kapp->dcopClient()->registerAs("testservice" ); ++ ++ connect( m_view->changeCombo, SIGNAL( activated( int ) ), SLOT( changeComboActivated( int ) ) ); ++ connect( m_view->changeButton, SIGNAL( clicked() ), SLOT( changeButtonClicked() ) ); ++ ++ connect( kapp->dcopClient(), SIGNAL( applicationRegistered( const QCString& ) ), this, SLOT( registeredToDCOP( const QCString& ) ) ); ++ kapp->dcopClient()->setNotifications( true ); ++ ++ m_view->statusLabel->setText( NetworkStatus::toString( m_status ) ); ++ m_view->statusLabel->setPaletteBackgroundColor( toQColor( m_status ) ); ++ setCaption( NetworkStatus::toString( m_status ) ); ++ ++ registerService(); ++} ++ ++TestService::~TestService() ++{ ++ delete m_service; ++ delete m_view; ++} ++ ++void TestService::registerService() ++{ ++ NetworkStatus::Properties nsp; ++ nsp.name = "test_net"; ++ nsp.service = kapp->dcopClient()->appId(); ++ nsp.status = m_status; ++ m_service->registerNetwork( nsp ); ++} ++ ++void TestService::registeredToDCOP( const QCString & appId ) ++{ ++ if ( appId == "kded" ) ++ registerService(); ++} ++ ++int TestService::status( const QString & network ) ++{ ++ Q_UNUSED( network ); ++ return (int)m_status; ++} ++ ++void TestService::changeComboActivated( int index ) ++{ ++ switch ( index ) { ++ case 0 /*NetworkStatus::OfflineDisconnected*/: ++ m_nextStatus = NetworkStatus::OfflineDisconnected; ++ break; ++ case 1 /*NetworkStatus::OfflineFailed*/: ++ m_nextStatus = NetworkStatus::OfflineFailed; ++ break; ++ case 2 /*NetworkStatus::ShuttingDown*/: ++ m_nextStatus = NetworkStatus::ShuttingDown; ++ break; ++ case 3 /*NetworkStatus::Offline*/: ++ m_nextStatus = NetworkStatus::Offline; ++ break; ++ case 4 /*NetworkStatus::Establishing*/: ++ m_nextStatus = NetworkStatus::Establishing; ++ break; ++ case 5 /*NetworkStatus::Online*/: ++ m_nextStatus = NetworkStatus::Online; ++ break; ++ default: ++ kdDebug() << "Unrecognised status!" << endl; ++ Q_ASSERT( false ); ++ } ++ m_view->changeButton->setEnabled( true ); ++} ++ ++void TestService::changeButtonClicked() ++{ ++ m_view->changeButton->setEnabled( false ); ++ m_status = m_nextStatus; ++ m_service->setNetworkStatus( "test_net", ( int )m_status ); ++ m_view->statusLabel->setText( NetworkStatus::toString( m_status ) ); ++ m_view->statusLabel->setPaletteBackgroundColor( toQColor( m_status ) ); ++ setCaption( NetworkStatus::toString( m_status ) ); ++} ++ ++int TestService::establish( const QString & network ) ++{ ++ Q_UNUSED( network ); ++ m_status = NetworkStatus::Establishing; ++ m_service->setNetworkStatus( "test_net", (int)m_status ); ++ m_nextStatus = NetworkStatus::Online; ++ QTimer::singleShot( 5000, this, SLOT( slotStatusChange() ) ); ++ return (int)NetworkStatus::RequestAccepted; ++} ++ ++int TestService::shutdown( const QString & network ) ++{ ++ Q_UNUSED( network ); ++ m_status = NetworkStatus::ShuttingDown; ++ m_service->setNetworkStatus( "test_net", (int)m_status ); ++ m_nextStatus = NetworkStatus::Offline; ++ QTimer::singleShot( 5000, this, SLOT( slotStatusChange() ) ); ++ return (int)NetworkStatus::RequestAccepted; ++} ++ ++void TestService::simulateFailure() ++{ ++ m_status = NetworkStatus::OfflineFailed; ++ m_service->setNetworkStatus( "test_net", (int)m_status ); ++} ++ ++void TestService::simulateDisconnect() ++{ ++ m_status = NetworkStatus::OfflineDisconnected; ++ m_service->setNetworkStatus( "test_net", (int)m_status ); ++} ++ ++void TestService::slotStatusChange() ++{ ++ m_status = m_nextStatus; ++ m_service->setNetworkStatus( "test_net", (int)m_status ); ++} ++ ++QColor TestService::toQColor( NetworkStatus::Status st ) ++{ ++ QColor col; ++ switch ( st ) { ++ case NetworkStatus::NoNetworks: ++ col = Qt::darkGray; ++ break; ++ case NetworkStatus::Unreachable: ++ col = Qt::darkMagenta; ++ break; ++ case NetworkStatus::OfflineDisconnected: ++ col = Qt::blue; ++ break; ++ case NetworkStatus::OfflineFailed: ++ col = Qt::darkRed; ++ break; ++ case NetworkStatus::ShuttingDown: ++ col = Qt::darkYellow; ++ break; ++ case NetworkStatus::Offline: ++ col = Qt::blue; ++ break; ++ case NetworkStatus::Establishing: ++ col = Qt::yellow; ++ break; ++ case NetworkStatus::Online: ++ col = Qt::green; ++ break; ++ } ++ return col; ++} ++ ++static const char description[] = ++ I18N_NOOP("Test Service for Network Status kded module"); ++ ++static const char version[] = "v0.1"; ++ ++static KCmdLineOptions options[] = ++{ ++ KCmdLineLastOption ++}; ++ ++int main( int argc, char** argv ) ++{ ++ KAboutData about("KNetworkStatusTestService", I18N_NOOP("knetworkstatustestservice"), version, description, KAboutData::License_GPL, "(C) 2007 Will Stephenson", 0, 0, "wstephenson@kde.org"); ++ about.addAuthor( "Will Stephenson", 0, "wstephenson@kde.org" ); ++ KCmdLineArgs::init(argc, argv, &about); ++ KCmdLineArgs::addCmdLineOptions(options); ++ KApplication app; ++ ++ TestService * test = new TestService; ++ test->show(); ++ return app.exec(); ++} ++ ++#include "testservice.moc" +Index: networkstatus/testservice.h +=================================================================== +--- /dev/null ++++ networkstatus/testservice.h +@@ -0,0 +1,60 @@ ++/* This file is part of kdepim. ++ ++ Copyright (C) 2005,2007 Will Stephenson ++ ++ This program is free software; you can redistribute it and/or modify ++ it under the terms of the GNU General Public License as published by ++ the Free Software Foundation; either version 2 of the License, or ++ (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with this program; if not, write to the Free Software ++ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. ++ ++ As a special exception, permission is given to link this program ++ with any edition of Qt, and distribute the resulting executable, ++ without including the source code for Qt in the source distribution. ++*/ ++ ++#ifndef _TEST_NETWORKSTATUS_SERVICE_H ++#define _TEST_NETWORKSTATUS_SERVICE_H ++ ++#include ++ ++#include "networkstatuscommon.h" ++ ++class NetworkStatusIface_stub; ++class TestServiceView; ++ ++class TestService : public KMainWindow { ++Q_OBJECT ++public: ++ TestService(); ++ virtual ~TestService(); ++ int status( const QString & network ); ++ int establish( const QString & network ); ++ int shutdown( const QString & network ); ++ void simulateFailure(); ++ void simulateDisconnect(); ++protected slots: ++ void changeComboActivated( int index ); ++ void registeredToDCOP( const QCString& appId ); ++ ++ void changeButtonClicked(); ++ ++ void slotStatusChange(); ++private: ++ void registerService(); ++ static QColor toQColor( NetworkStatus::Status ); ++ NetworkStatusIface_stub * m_service; ++ NetworkStatus::Status m_status; ++ NetworkStatus::Status m_nextStatus; ++ TestServiceView * m_view; ++}; ++ ++#endif +Index: networkstatus/testserviceview.ui +=================================================================== +--- /dev/null ++++ networkstatus/testserviceview.ui +@@ -0,0 +1,181 @@ ++ ++TestServiceView ++ ++ ++ TestServiceView ++ ++ ++ ++ 0 ++ 0 ++ 367 ++ 132 ++ ++ ++ ++ Form1 ++ ++ ++ ++ unnamed ++ ++ ++ ++ textLabel4 ++ ++ ++ <font size="+2"><b>Service for KDE 3 Offline Mode</b></font> ++ ++ ++ AlignVCenter ++ ++ ++ ++ ++ layout2 ++ ++ ++ ++ unnamed ++ ++ ++ ++ textLabel1 ++ ++ ++ Status: ++ ++ ++ ++ ++ statusLabel ++ ++ ++ ++ 0 ++ 255 ++ 0 ++ ++ ++ ++ StyledPanel ++ ++ ++ STATUS ++ ++ ++ AlignCenter ++ ++ ++ ++ ++ ++ ++ layout3 ++ ++ ++ ++ unnamed ++ ++ ++ ++ textLabel3 ++ ++ ++ Change to: ++ ++ ++ ++ ++ ++ Offline Disconnected ++ ++ ++ ++ ++ Offline Failed ++ ++ ++ ++ ++ Shutting Down ++ ++ ++ ++ ++ Offline ++ ++ ++ ++ ++ Establishing ++ ++ ++ ++ ++ Online ++ ++ ++ ++ changeCombo ++ ++ ++ ++ ++ ++ ++ layout1 ++ ++ ++ ++ unnamed ++ ++ ++ ++ spacer1 ++ ++ ++ Horizontal ++ ++ ++ Expanding ++ ++ ++ ++ 51 ++ 20 ++ ++ ++ ++ ++ ++ changeButton ++ ++ ++ Do change ++ ++ ++ ++ ++ spacer2 ++ ++ ++ Horizontal ++ ++ ++ Expanding ++ ++ ++ ++ 41 ++ 20 ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ diff --git a/opensuse/core/tdelibs/no-debug-by-default.diff b/opensuse/core/tdelibs/no-debug-by-default.diff new file mode 100644 index 000000000..5b1440970 --- /dev/null +++ b/opensuse/core/tdelibs/no-debug-by-default.diff @@ -0,0 +1,158 @@ +Index: kdecore/kdebug.cpp +=================================================================== +--- kdecore/kdebug.cpp.orig ++++ kdecore/kdebug.cpp +@@ -170,7 +170,7 @@ static KStaticDeleter pcd + static KStaticDeleter dcopsd; + static KDebugDCOPIface* kDebugDCOPIface = 0; + +-static void kDebugBackend( unsigned short nLevel, unsigned int nArea, const char *data) ++static void kDebugInitBackend(unsigned int nArea) + { + if ( !kDebug_data ) + { +@@ -205,40 +205,46 @@ static void kDebugBackend( unsigned shor + if ( KGlobal::_instance ) + kDebug_data->aAreaName = KGlobal::instance()->instanceName(); + } ++} + +- int nPriority = 0; +- QString aCaption; +- +- /* Determine output */ ++static short kDebugAreaOutput(unsigned short nLevel, unsigned int nArea) ++{ ++ kDebugInitBackend (nArea); + ++ /* Determine output */ + QString key; + switch( nLevel ) + { + case KDEBUG_INFO: + key = "InfoOutput"; +- aCaption = "Info"; +- nPriority = LOG_INFO; + break; + case KDEBUG_WARN: + key = "WarnOutput"; +- aCaption = "Warning"; +- nPriority = LOG_WARNING; + break; + case KDEBUG_FATAL: + key = "FatalOutput"; +- aCaption = "Fatal Error"; +- nPriority = LOG_CRIT; + break; + case KDEBUG_ERROR: + default: + /* Programmer error, use "Error" as default */ + key = "ErrorOutput"; +- aCaption = "Error"; +- nPriority = LOG_ERR; + break; + } + +- short nOutput = kDebug_data->config ? kDebug_data->config->readNumEntry(key, 2) : 2; ++ return kDebug_data->config ? kDebug_data->config->readNumEntry(key, 4) : 4; ++} ++ ++ ++bool kDebugAreaEnabled(unsigned short nLevel, unsigned int nArea) ++{ ++ return kDebugAreaOutput(nLevel, nArea) != 4; ++} ++ ++static void kDebugBackend( unsigned short nLevel, unsigned int nArea, const char *data) ++{ ++ kDebugInitBackend (nArea); ++ ++ short nOutput = kDebugAreaOutput(nLevel, nArea); + + // If the application doesn't have a QApplication object it can't use + // a messagebox. +@@ -247,6 +253,32 @@ static void kDebugBackend( unsigned shor + else if ( nOutput == 4 && nLevel != KDEBUG_FATAL ) + return; + ++ int nPriority = 0; ++ QString aCaption; ++ switch( nLevel ) ++ { ++ case KDEBUG_INFO: ++ aCaption = "Info"; ++ nPriority = LOG_INFO; ++ break; ++ case KDEBUG_WARN: ++ aCaption = "Warning"; ++ nPriority = LOG_WARNING; ++ break; ++ case KDEBUG_FATAL: ++ aCaption = "Fatal Error"; ++ nPriority = LOG_CRIT; ++ break; ++ case KDEBUG_ERROR: ++ default: ++ /* Programmer error, use "Error" as default */ ++ aCaption = "Error"; ++ nPriority = LOG_ERR; ++ break; ++ } ++ ++ ++ + const int BUFSIZE = 4096; + char buf[BUFSIZE]; + if ( !kDebug_data->aAreaName.isEmpty() ) { +@@ -314,13 +346,25 @@ static void kDebugBackend( unsigned shor + } + + kdbgstream &perror( kdbgstream &s) { return s << QString::fromLocal8Bit(strerror(errno)); } +-kdbgstream kdDebug(int area) { return kdbgstream(area, KDEBUG_INFO); } +-kdbgstream kdDebug(bool cond, int area) { if (cond) return kdbgstream(area, KDEBUG_INFO); else return kdbgstream(0, 0, false); } ++kdbgstream kdDebug(int area) { return kdbgstream(area, KDEBUG_INFO, kDebugAreaEnabled(KDEBUG_INFO, area)); } ++kdbgstream kdDebug(bool cond, int area) { if (cond) return kdbgstream(area, KDEBUG_INFO, kDebugAreaEnabled(KDEBUG_INFO, area)); else return kdbgstream(0, 0, false); } + + kdbgstream kdError(int area) { return kdbgstream("ERROR: ", area, KDEBUG_ERROR); } + kdbgstream kdError(bool cond, int area) { if (cond) return kdbgstream("ERROR: ", area, KDEBUG_ERROR); else return kdbgstream(0,0,false); } +-kdbgstream kdWarning(int area) { return kdbgstream("WARNING: ", area, KDEBUG_WARN); } +-kdbgstream kdWarning(bool cond, int area) { if (cond) return kdbgstream("WARNING: ", area, KDEBUG_WARN); else return kdbgstream(0,0,false); } ++ ++kdbgstream kdWarning(int area) ++{ ++ return kdbgstream("WARNING: ", area, KDEBUG_WARN, kDebugAreaEnabled(KDEBUG_WARN, area)); ++} ++ ++kdbgstream kdWarning(bool cond, int area) ++{ ++ if (cond) ++ return kdbgstream("WARNING: ", area, KDEBUG_WARN, kDebugAreaEnabled(KDEBUG_WARN, area)); ++ else ++ return kdbgstream(0,0,false); ++} ++ + kdbgstream kdFatal(int area) { return kdbgstream("FATAL: ", area, KDEBUG_FATAL); } + kdbgstream kdFatal(bool cond, int area) { if (cond) return kdbgstream("FATAL: ", area, KDEBUG_FATAL); else return kdbgstream(0,0,false); } + +@@ -331,9 +375,10 @@ kdbgstream::kdbgstream(kdbgstream &str) + } + + void kdbgstream::flush() { +- if (output.isEmpty() || !print) ++ if (output.isEmpty()) + return; +- kDebugBackend( level, area, output.local8Bit().data() ); ++ if (print) ++ kDebugBackend( level, area, output.local8Bit().data() ); + output = QString::null; + } + +@@ -349,7 +394,7 @@ kdbgstream &kdbgstream::form(const char + } + + kdbgstream::~kdbgstream() { +- if (!output.isEmpty()) { ++ if (print && !output.isEmpty()) { + fprintf(stderr, "ASSERT: debug output not ended with \\n\n"); + fprintf(stderr, "%s", kdBacktrace().latin1()); + *this << "\n"; diff --git a/opensuse/core/tdelibs/no-progress-for-beagle-status-query.diff b/opensuse/core/tdelibs/no-progress-for-beagle-status-query.diff new file mode 100644 index 000000000..4d9ae1a84 --- /dev/null +++ b/opensuse/core/tdelibs/no-progress-for-beagle-status-query.diff @@ -0,0 +1,13 @@ +Index: kio/kio/netaccess.cpp +=================================================================== +--- kio/kio/netaccess.cpp.orig ++++ kio/kio/netaccess.cpp +@@ -337,7 +337,7 @@ bool NetAccess::statInternal( const KURL + QWidget* window ) + { + bJobOK = true; // success unless further error occurs +- KIO::StatJob * job = KIO::stat( url, !url.isLocalFile() ); ++ KIO::StatJob * job = KIO::stat( url, !url.isLocalFile() && !url.url().startsWith("beagle:?") ); + job->setWindow (window); + job->setDetails( details ); + job->setSide( source ); diff --git a/opensuse/core/tdelibs/noauto-package.diff b/opensuse/core/tdelibs/noauto-package.diff new file mode 100644 index 000000000..9eec14ab3 --- /dev/null +++ b/opensuse/core/tdelibs/noauto-package.diff @@ -0,0 +1,13 @@ +Index: configure.in.in +=================================================================== +--- configure.in.in.orig ++++ configure.in.in +@@ -17,7 +17,7 @@ AC_CANONICAL_SYSTEM + AC_ARG_PROGRAM + + dnl Automake doc recommends to do this only here. (Janos) +-AM_INIT_AUTOMAKE(@MODULENAME@, @VERSION@) dnl searches for some needed programs ++AM_INIT_AUTOMAKE("kdelibs", @VERSION@) dnl searches for some needed programs + + AC_PROG_INSTALL + diff --git a/opensuse/core/tdelibs/oom_score_adj.patch b/opensuse/core/tdelibs/oom_score_adj.patch new file mode 100644 index 000000000..f7a929f3f --- /dev/null +++ b/opensuse/core/tdelibs/oom_score_adj.patch @@ -0,0 +1,36 @@ +Index: kdelibs-3.5.10/kinit/start_kdeinit.c +=================================================================== +--- kdelibs-3.5.10.orig/kinit/start_kdeinit.c ++++ kdelibs-3.5.10/kinit/start_kdeinit.c +@@ -44,11 +44,30 @@ static int set_protection( pid_t pid, in + { + char buf[ 1024 ]; + int procfile; ++ struct stat st; ++ ++ /* Newer kernels (noticed in 2.6.36) */ ++ sprintf( buf, "/proc/%d/oom_score_adj", pid ); ++ if ( lstat (buf, &st) == 0) { ++ if( !enable ) { ++ /* Be paranoid and check that the pid we got from the pipe ++ belongs to this user. */ ++ if( st.st_uid != getuid()) ++ return 0; ++ } ++ procfile = open(buf, O_WRONLY); ++ if( enable ) ++ write( procfile, "-300", sizeof( "-300" )); ++ else ++ write( procfile, "0", sizeof( "0" )); ++ close( procfile ); ++ return 1; ++ } ++ + sprintf( buf, "/proc/%d/stat", pid ); + if( !enable ) { + /* Be paranoid and check that the pid we got from the pipe + belongs to this user. */ +- struct stat st; + if( lstat( buf, &st ) < 0 || st.st_uid != getuid()) + return 0; + } diff --git a/opensuse/core/tdelibs/patch-mimetype-iconnames.diff b/opensuse/core/tdelibs/patch-mimetype-iconnames.diff new file mode 100644 index 000000000..6874162ae --- /dev/null +++ b/opensuse/core/tdelibs/patch-mimetype-iconnames.diff @@ -0,0 +1,39 @@ +Index: mimetypes/application/vnd.oasis.opendocument.formula.desktop +=================================================================== +--- mimetypes/application/vnd.oasis.opendocument.formula.desktop.orig ++++ mimetypes/application/vnd.oasis.opendocument.formula.desktop +@@ -2,7 +2,7 @@ + Type=MimeType + MimeType=application/vnd.oasis.opendocument.formula + Patterns=*.odf;*.ODF +-Icon=formula ++Icon=kformula_kfo + Comment=OASIS OpenDocument Formula + Comment[af]=OASIS Oop Dokument formule + Comment[be]=Формула OASIS OpenDocument +Index: mimetypes/application/vnd.sun.xml.base.desktop +=================================================================== +--- mimetypes/application/vnd.sun.xml.base.desktop.orig ++++ mimetypes/application/vnd.sun.xml.base.desktop +@@ -67,7 +67,7 @@ Comment[vi]=CÆ¡ sở dữ liệu OpenOff + Comment[zh_CN]=OpenOffice.org æ•°æ®åº“ + Comment[zh_HK]=OpenOffice.org 資料庫 + Comment[zh_TW]=OpenOffice.org 資料庫 +-Icon=spreadsheet ++Icon=database + Type=MimeType + Patterns=*.odb;*.ODB; + MimeType=application/vnd.sun.xml.base +Index: mimetypes/text/rtf.desktop +=================================================================== +--- mimetypes/text/rtf.desktop.orig ++++ mimetypes/text/rtf.desktop +@@ -77,7 +77,7 @@ Comment[wa]=Documint RTF + Comment[zh_CN]=RTF 文档 + Comment[zh_HK]=RTF 文件 + Comment[zh_TW]=RTF 文件 +-Icon=wordprocessing ++Icon=rtf + Type=MimeType + Patterns=*.rtf;*.RTF; + [Property::X-KDE-text] diff --git a/opensuse/core/tdelibs/prefer_distribution_settings.dif b/opensuse/core/tdelibs/prefer_distribution_settings.dif new file mode 100644 index 000000000..655788807 --- /dev/null +++ b/opensuse/core/tdelibs/prefer_distribution_settings.dif @@ -0,0 +1,13 @@ +Index: kdecore/kstandarddirs.cpp +=================================================================== +--- kdecore/kstandarddirs.cpp.orig ++++ kdecore/kstandarddirs.cpp +@@ -1290,6 +1290,8 @@ void KStandardDirs::addKDEDefaults() + } + } + ++ kdedirList.append("/etc/opt/kde3"); ++ + #ifndef Q_OS_WIN //no default KDEDIR on win32 defined + kdedirList.append(KDEDIR); + #endif diff --git a/opensuse/core/tdelibs/printpreview.patch b/opensuse/core/tdelibs/printpreview.patch new file mode 100644 index 000000000..ef3de21a4 --- /dev/null +++ b/opensuse/core/tdelibs/printpreview.patch @@ -0,0 +1,14 @@ +Index: kdeprint/kprintpreview.cpp +=================================================================== +--- kdeprint/kprintpreview.cpp.orig ++++ kdeprint/kprintpreview.cpp +@@ -108,6 +108,9 @@ static KLibFactory* componentFactory() + { + kdDebug(500) << "kdeprint: querying trader for 'application/postscript' service" << endl; + KLibFactory *factory(0); ++ factory = KLibLoader::self()->factory("libkghostviewpart"); ++ if( factory ) ++ return factory; + KTrader::OfferList offers = KTrader::self()->query(QString::fromLatin1("application/postscript"), QString::fromLatin1("KParts/ReadOnlyPart"), QString::null, QString::null); + for (KTrader::OfferList::ConstIterator it = offers.begin(); it != offers.end(); ++it) + { diff --git a/opensuse/core/tdelibs/r874968-ebay-crash.diff b/opensuse/core/tdelibs/r874968-ebay-crash.diff new file mode 100644 index 000000000..44dfb6eb4 --- /dev/null +++ b/opensuse/core/tdelibs/r874968-ebay-crash.diff @@ -0,0 +1,24 @@ +Index: khtml/rendering/table_layout.cpp +=================================================================== +--- khtml/rendering/table_layout.cpp.orig ++++ khtml/rendering/table_layout.cpp +@@ -297,7 +297,8 @@ void FixedTableLayout::layout() + #endif + for ( int i = 0; available > 0 && i < nEffCols; i++ ) { + if ( width[i].isPercent() ) { +- int w = base * width[i].value() / totalPercent; ++ // totalPercent may be 0 below if all %-width specifed are 0%. (#172557) ++ int w = totalPercent ? base * width[i].value() / totalPercent : 0; + available -= w; + calcWidth[i] = w; + } +@@ -313,7 +314,8 @@ void FixedTableLayout::layout() + + for ( int i = 0; available > 0 && i < nEffCols; i++ ) { + if ( width[i].isVariable() ) { +- int w = available / totalVariable; ++ // totalVariable may be 0 below if all the variable widths specified are 0. ++ int w = totalVariable ? available / totalVariable : 0; + available -= w; + calcWidth[i] = w; + totalVariable--; diff --git a/opensuse/core/tdelibs/rubberband-selection.diff b/opensuse/core/tdelibs/rubberband-selection.diff new file mode 100644 index 000000000..d2b75f17c --- /dev/null +++ b/opensuse/core/tdelibs/rubberband-selection.diff @@ -0,0 +1,380 @@ +Index: kdefx/kstyle.cpp +=================================================================== +--- kdefx/kstyle.cpp.orig ++++ kdefx/kstyle.cpp +@@ -154,6 +154,7 @@ struct KStylePrivate + bool menuAltKeyNavigation : 1; + bool menuDropShadow : 1; + bool sloppySubMenus : 1; ++ bool semiTransparentRubberband : 1; + int popupMenuDelay; + float menuOpacity; + +@@ -187,6 +188,7 @@ KStyle::KStyle( KStyleFlags flags, KStyl + d->menuAltKeyNavigation = settings.readBoolEntry("/KStyle/Settings/MenuAltKeyNavigation", true); + d->scrollablePopupmenus = settings.readBoolEntry("/KStyle/Settings/ScrollablePopupMenus", false); + d->menuDropShadow = settings.readBoolEntry("/KStyle/Settings/MenuDropShadow", false); ++ d->semiTransparentRubberband = settings.readBoolEntry("/KStyle/Settings/SemiTransparentRubberband", false); + d->menuHandler = NULL; + + if (useMenuTransparency) { +@@ -553,7 +555,57 @@ void KStyle::drawPrimitive( PrimitiveEle + else + // General handle, probably a kicker applet handle. + drawKStylePrimitive( KPE_GeneralHandle, p, widget, r, cg, flags, opt ); +- ++#if QT_VERSION >= 0x030300 ++#ifdef HAVE_XRENDER ++ } else if ( d->semiTransparentRubberband && pe == QStyle::PE_RubberBand ) { ++ QRect rect = r.normalize(); ++ QPoint point; ++ point = p->xForm( point ); ++ ++ static XRenderColor clr = { 0, 0, 0, 0 }; ++ static unsigned long fillColor = 0; ++ if ( fillColor != cg.highlight().rgb() ) { ++ fillColor = cg.highlight().rgb(); ++ ++ unsigned long color = fillColor << 8 | 0x40; ++ ++ int red = (color >> 24) & 0xff; ++ int green = (color >> 16) & 0xff; ++ int blue = (color >> 8) & 0xff; ++ int alpha = (color >> 0) & 0xff; ++ ++ red = red * alpha / 255; ++ green = green * alpha / 255; ++ blue = blue * alpha / 255; ++ ++ clr.red = (red << 8) + red; ++ clr.green = (green << 8) + green; ++ clr.blue = (blue << 8) + blue; ++ clr.alpha = (alpha << 8) + alpha; ++ } ++ ++ XRenderFillRectangle( ++ p->device()->x11Display(), ++ PictOpOver, ++ p->device()->x11RenderHandle(), ++ &clr, ++ rect.x() + point.x(), ++ rect.y() + point.y(), ++ rect.width(), ++ rect.height() ); ++ ++ p->save(); ++ p->setRasterOp( Qt::CopyROP ); ++ p->setPen( QPen( cg.highlight().dark( 160 ), 1 ) ); ++ p->setBrush( NoBrush ); ++ p->drawRect( ++ rect.x() + point.x(), ++ rect.y() + point.y(), ++ rect.width(), ++ rect.height() ); ++ p->restore(); ++#endif ++#endif + } else + QCommonStyle::drawPrimitive( pe, p, r, cg, flags, opt ); + } +Index: kdeui/kiconview.cpp +=================================================================== +--- kdeui/kiconview.cpp.orig ++++ kdeui/kiconview.cpp +@@ -548,7 +548,7 @@ void KIconViewItem::calcRect( const QStr + r = m_wordWrap->boundingRect(); + + int realWidth = QMAX( QMIN( r.width() + 4, tw ), fm->width( "X" ) ); +- itemTextRect.setWidth( realWidth ); ++ itemTextRect.setWidth( realWidth + 4 ); + itemTextRect.setHeight( r.height() ); + + int w = 0; int h = 0; int y = 0; +@@ -699,11 +699,13 @@ void KIconViewItem::paintPixmap( QPainte + + void KIconViewItem::paintText( QPainter *p, const QColorGroup &cg ) + { +- int textX = textRect( false ).x() + 2; ++ int textX = textRect( false ).x() + 4; + int textY = textRect( false ).y(); + + if ( isSelected() ) { +- p->fillRect( textRect( false ), cg.highlight() ); ++ p->setBrush(QBrush(cg.highlight())); ++ p->setPen(QPen(cg.highlight())); ++ p->drawRoundRect( textRect( false ) ,1000/textRect(false).width(),1000/textRect(false).height() ); + p->setPen( QPen( cg.highlightedText() ) ); + } else { + if ( iconView()->itemTextBackground() != NoBrush ) +Index: kdeui/kjanuswidget.cpp +=================================================================== +--- kdeui/kjanuswidget.cpp.orig ++++ kdeui/kjanuswidget.cpp +@@ -49,16 +49,19 @@ class KJanusWidget::IconListItem : publi + { + public: + IconListItem( QListBox *listbox, const QPixmap &pixmap, +- const QString &text ); ++ const QString &text ); + virtual int height( const QListBox *lb ) const; + virtual int width( const QListBox *lb ) const; + int expandMinimumWidth( int width ); ++ void highlight( bool erase ); + + protected: + const QPixmap &defaultPixmap(); + void paint( QPainter *painter ); +- ++ + private: ++ void paintContents( QPainter *painter ); ++ + QPixmap mPixmap; + int mMinimumWidth; + }; +@@ -141,6 +144,8 @@ KJanusWidget::KJanusWidget( QWidget *par + + mIconList->verticalScrollBar()->installEventFilter( this ); + connect( mIconList, SIGNAL(selectionChanged()), SLOT(slotShowPage())); ++ connect( mIconList, SIGNAL(onItem(QListBoxItem *)), SLOT(slotOnItem(QListBoxItem *))); ++ + hbox->addSpacing( KDialog::marginHint() ); + page = new QFrame( this ); + hbox->addWidget( page, 10 ); +@@ -259,7 +264,7 @@ void KJanusWidget::slotReopen( QListView + } + + QFrame *KJanusWidget::addPage( const QString &itemName, const QString &header, +- const QPixmap &pixmap ) ++ const QPixmap &pixmap ) + { + QStringList items; + items << itemName; +@@ -269,8 +274,8 @@ QFrame *KJanusWidget::addPage( const QSt + + + QVBox *KJanusWidget::addVBoxPage( const QStringList &items, +- const QString &header, +- const QPixmap &pixmap ) ++ const QString &header, ++ const QPixmap &pixmap ) + { + if( !mValid ) + { +@@ -721,6 +726,12 @@ void KJanusWidget::slotItemClicked(QList + it->setOpen(!it->isOpen()); + } + ++// hack because qt does not support Q_OBJECT in nested classes ++void KJanusWidget::slotOnItem(QListBoxItem *qitem) ++{ ++ mIconList->slotOnItem( qitem ); ++} ++ + void KJanusWidget::setFocus() + { + if( !mValid ) { return; } +@@ -929,11 +940,11 @@ bool KJanusWidget::eventFilter( QObject + KJanusWidget::IconListBox::IconListBox( QWidget *parent, const char *name, + WFlags f ) + :KListBox( parent, name, f ), mShowAll(false), mHeightValid(false), +- mWidthValid(false) ++ mWidthValid(false), ++ mOldItem(0) + { + } + +- + void KJanusWidget::IconListBox::updateMinimumHeight() + { + if( mShowAll && !mHeightValid ) +@@ -995,6 +1006,45 @@ void KJanusWidget::IconListBox::setShowA + } + + ++void KJanusWidget::IconListBox::leaveEvent( QEvent *ev ) ++{ ++ KListBox::leaveEvent( ev ); ++ ++ if ( mOldItem && !mOldItem->isSelected() ) ++ { ++ ((KJanusWidget::IconListItem *) mOldItem)->highlight( true ); ++ mOldItem = 0; ++ } ++} ++ ++// hack because qt does not support Q_OBJECT in nested classes ++void KJanusWidget::IconListBox::slotOnItem(QListBoxItem *qitem) ++{ ++ KListBox::slotOnItem( qitem ); ++ ++ if ( qitem == mOldItem ) ++ { ++ return; ++ } ++ ++ if ( mOldItem && !mOldItem->isSelected() ) ++ { ++ ((KJanusWidget::IconListItem *) mOldItem)->highlight( true ); ++ } ++ ++ KJanusWidget::IconListItem *item = dynamic_cast< KJanusWidget::IconListItem * >( qitem ); ++ if ( item && !item->isSelected() ) ++ { ++ item->highlight( false ); ++ mOldItem = item; ++ } ++ else ++ { ++ mOldItem = 0; ++ } ++} ++ ++ + + KJanusWidget::IconListItem::IconListItem( QListBox *listbox, const QPixmap &pixmap, + const QString &text ) +@@ -1006,6 +1056,7 @@ KJanusWidget::IconListItem::IconListItem + mPixmap = defaultPixmap(); + } + setText( text ); ++ setCustomHighlighting( true ); + mMinimumWidth = 0; + } + +@@ -1017,6 +1068,36 @@ int KJanusWidget::IconListItem::expandMi + } + + ++void KJanusWidget::IconListItem::highlight( bool erase ) ++{ ++ QRect r = listBox()->itemRect( this ); ++ r.addCoords( 1, 1, -1, -1 ); ++ ++ QPainter p( listBox()->viewport() ); ++ p.setClipRegion( r ); ++ ++ const QColorGroup &cg = listBox()->colorGroup(); ++ if ( erase ) ++ { ++ p.setPen( cg.base() ); ++ p.setBrush( cg.base() ); ++ p.drawRect( r ); ++ } ++ else ++ { ++ p.setBrush( cg.highlight().light( 120 ) ); ++ p.drawRect( r ); ++ ++ p.setPen( cg.highlight().dark( 140 ) ); ++ p.drawRect( r ); ++ } ++ ++ p.setPen( cg.foreground() ); ++ p.translate( r.x() - 1, r.y() - 1 ); ++ paintContents( &p ); ++} ++ ++ + const QPixmap &KJanusWidget::IconListItem::defaultPixmap() + { + static QPixmap *pix=0; +@@ -1044,15 +1125,34 @@ const QPixmap &KJanusWidget::IconListIte + + void KJanusWidget::IconListItem::paint( QPainter *painter ) + { ++ QRect itemPaintRegion( listBox()->itemRect( this ) ); ++ QRect r( 1, 1, itemPaintRegion.width() - 2, itemPaintRegion.height() - 2); ++ ++ if ( isSelected() ) ++ { ++ painter->eraseRect( r ); ++ ++ painter->save(); ++ painter->setPen( listBox()->colorGroup().highlight().dark( 160 ) ); ++ painter->drawRect( r ); ++ painter->restore(); ++ } ++ ++ paintContents( painter ); ++} ++ ++ ++void KJanusWidget::IconListItem::paintContents( QPainter *painter ) ++{ + QFontMetrics fm = painter->fontMetrics(); + int ht = fm.boundingRect( 0, 0, 0, 0, Qt::AlignCenter, text() ).height(); + int wp = mPixmap.width(); + int hp = mPixmap.height(); ++ painter->drawPixmap( (mMinimumWidth - wp) / 2, 5, mPixmap ); + +- painter->drawPixmap( (mMinimumWidth-wp)/2, 5, mPixmap ); + if( !text().isEmpty() ) + { +- painter->drawText( 0, hp+7, mMinimumWidth, ht, Qt::AlignCenter, text() ); ++ painter->drawText( 1, hp + 7, mMinimumWidth - 2, ht, Qt::AlignCenter, text() ); + } + } + +@@ -1082,6 +1182,7 @@ int KJanusWidget::IconListItem::width( c + void KJanusWidget::virtual_hook( int, void* ) + { /*BASE::virtual_hook( id, data );*/ } + ++ + // TODO: In TreeList, if the last child of a node is removed, and there is no corrsponding widget for that node, allow the caller to + // delete the node. + void KJanusWidget::removePage( QWidget *page ) +@@ -1129,6 +1230,7 @@ void KJanusWidget::removePage( QWidget * + } + } + ++ + QString KJanusWidget::pageTitle(int index) const + { + if (!d || !d->mIntToTitle.contains(index)) +@@ -1137,6 +1239,7 @@ QString KJanusWidget::pageTitle(int inde + return d->mIntToTitle[index]; + } + ++ + QWidget *KJanusWidget::pageWidget(int index) const + { + if (!d || !d->mIntToPage.contains(index)) +Index: kdeui/kjanuswidget.h +=================================================================== +--- kdeui/kjanuswidget.h.orig ++++ kdeui/kjanuswidget.h +@@ -71,6 +71,8 @@ class KDEUI_EXPORT KJanusWidget : public + private: + class IconListBox : public KListBox + { ++ friend class KJanusWidget; ++ + public: + IconListBox( QWidget *parent=0, const char *name=0, WFlags f=0 ); + void updateMinimumHeight(); +@@ -79,10 +81,15 @@ class KDEUI_EXPORT KJanusWidget : public + void invalidateWidth(); + void setShowAll( bool showAll ); + ++ protected: ++ void slotOnItem( QListBoxItem *item ); ++ virtual void leaveEvent( QEvent * ); ++ + private: + bool mShowAll; + bool mHeightValid; + bool mWidthValid; ++ QListBoxItem *mOldItem; + }; + + public: +@@ -558,6 +565,8 @@ class KDEUI_EXPORT KJanusWidget : public + private slots: + bool slotShowPage(); + void slotFontChanged(); ++ ++ void slotOnItem(QListBoxItem *item); + void slotItemClicked(QListViewItem *it); + void pageGone(QObject *obj); // signal from the added page's "destroyed" signal + void slotReopen(QListViewItem *item); diff --git a/opensuse/core/tdelibs/show-distribution.diff b/opensuse/core/tdelibs/show-distribution.diff new file mode 100644 index 000000000..6906ed0a4 --- /dev/null +++ b/opensuse/core/tdelibs/show-distribution.diff @@ -0,0 +1,21 @@ +Index: kdeui/kaboutdialog.cpp +=================================================================== +--- kdeui/kaboutdialog.cpp.orig ++++ kdeui/kaboutdialog.cpp +@@ -40,6 +40,7 @@ + #include + #include + #include ++#include + + //MOC_SKIP_BEGIN + template class QPtrList; +@@ -702,7 +703,7 @@ void KAboutContainerBase::setProduct( co + kdDebug(291) << "no kapp" << endl; + + const QString msg1 = i18n("%1 %2 (Using KDE %3)").arg(appName).arg(version). +- arg(QString::fromLatin1(KDE_VERSION_STRING)); ++ arg(QString::fromLatin1(KDE_VERSION_STRING) + " " + QString::fromLatin1(KDE_DISTRIBUTION_TEXT)); + const QString msg2 = !year.isEmpty() ? i18n("%1 %2, %3").arg('©').arg(year). + arg(author) : QString::fromLatin1(""); + diff --git a/opensuse/core/tdelibs/silence.diff b/opensuse/core/tdelibs/silence.diff new file mode 100644 index 000000000..7dbbbb997 --- /dev/null +++ b/opensuse/core/tdelibs/silence.diff @@ -0,0 +1,13 @@ +Index: kded/kbuildservicefactory.cpp +=================================================================== +--- kded/kbuildservicefactory.cpp.orig ++++ kded/kbuildservicefactory.cpp +@@ -158,7 +158,7 @@ KBuildServiceFactory::saveOfferList(QDat + KServiceType::Ptr serviceType = KServiceType::serviceType(*it); + if (!serviceType) + { +- kdWarning() << "'"<< service->desktopEntryPath() << "' specifies undefined mimetype/servicetype '"<< (*it) << "'" << endl; ++ kdDebug() << "'"<< service->desktopEntryPath() << "' specifies undefined mimetype/servicetype '"<< (*it) << "'" << endl; + continue; + } + serviceTypes.append(serviceType); diff --git a/opensuse/core/tdelibs/smooth-scrolling.diff b/opensuse/core/tdelibs/smooth-scrolling.diff new file mode 100644 index 000000000..b369a6146 --- /dev/null +++ b/opensuse/core/tdelibs/smooth-scrolling.diff @@ -0,0 +1,267 @@ +Index: khtml/khtmlview.cpp +=================================================================== +--- khtml/khtmlview.cpp.orig ++++ khtml/khtmlview.cpp +@@ -151,6 +151,9 @@ public: + + KHTMLViewPrivate() + : underMouse( 0 ), underMouseNonShared( 0 ), visibleWidgets( 107 ) ++#ifndef NO_SMOOTH_SCROLL_HACK ++ , dx(0), dy(0), ddx(0), ddy(0), rdx(0), rdy(0), scrolling(false) ++#endif + { + #ifndef KHTML_NO_CARET + m_caretViewContext = 0; +@@ -396,6 +399,17 @@ public: + short m_mouseScroll_byY; + QTimer *m_mouseScrollTimer; + QWidget *m_mouseScrollIndicator; ++#ifndef NO_SMOOTH_SCROLL_HACK ++ QTimer timer2; ++ int dx; ++ int dy; ++ // Step size * 16 and residual to avoid huge difference between 1px/step and 2px/step ++ int ddx; ++ int ddy; ++ int rdx; ++ int rdy; ++ bool scrolling; ++#endif + }; + + #ifndef QT_NO_TOOLTIP +@@ -504,6 +518,11 @@ KHTMLView::KHTMLView( KHTMLPart *part, Q + init(); + + viewport()->show(); ++#ifndef NO_SMOOTH_SCROLL_HACK ++#define timer timer2 ++ connect(&d->timer, SIGNAL(timeout()), this, SLOT(scrollTick())); ++#undef timer ++#endif + } + + KHTMLView::~KHTMLView() +@@ -1544,7 +1563,7 @@ void KHTMLView::keyPressEvent( QKeyEvent + case Key_Down: + case Key_J: + if (!d->scrollTimerId || d->scrollSuspended) +- scrollBy( 0, 10 ); ++ scrollBy( 0, 10 * _ke->count() ); + if (d->scrollTimerId) + d->newScrollTimer(this, 0); + break; +@@ -1559,7 +1578,7 @@ void KHTMLView::keyPressEvent( QKeyEvent + case Key_Up: + case Key_K: + if (!d->scrollTimerId || d->scrollSuspended) +- scrollBy( 0, -10 ); ++ scrollBy( 0, -10 * _ke->count()); + if (d->scrollTimerId) + d->newScrollTimer(this, 0); + break; +@@ -1572,14 +1591,14 @@ void KHTMLView::keyPressEvent( QKeyEvent + case Key_Right: + case Key_L: + if (!d->scrollTimerId || d->scrollSuspended) +- scrollBy( 10, 0 ); ++ scrollBy( 10 * _ke->count(), 0 ); + if (d->scrollTimerId) + d->newScrollTimer(this, 0); + break; + case Key_Left: + case Key_H: + if (!d->scrollTimerId || d->scrollSuspended) +- scrollBy( -10, 0 ); ++ scrollBy( -10 * _ke->count(), 0 ); + if (d->scrollTimerId) + d->newScrollTimer(this, 0); + break; +@@ -1712,8 +1731,16 @@ void KHTMLView::keyReleaseEvent(QKeyEven + d->scrollSuspendPreActivate = false; + if( _ke->key() == Key_Shift && d->scrollSuspendPreActivate && _ke->state() == Qt::ShiftButton + && !(KApplication::keyboardMouseState() & Qt::ShiftButton)) ++ { + if (d->scrollTimerId) +- d->scrollSuspended = !d->scrollSuspended; ++ { ++ d->scrollSuspended = !d->scrollSuspended; ++#ifndef NO_SMOOTH_SCROLL_HACK ++ if( d->scrollSuspended ) ++ stopScrolling(); ++#endif ++ } ++ } + + if (d->accessKeysEnabled) + { +@@ -3259,7 +3286,11 @@ void KHTMLView::viewportWheelEvent(QWhee + else + { + d->scrollBarMoved = true; ++#ifndef NO_SMOOTH_SCROLL_HACK ++ scrollViewWheelEvent( e ); ++#else + QScrollView::viewportWheelEvent( e ); ++#endif + + QMouseEvent *tempEvent = new QMouseEvent( QEvent::MouseMove, QPoint(-1,-1), QPoint(-1,-1), Qt::NoButton, e->state() ); + emit viewportMouseMoveEvent ( tempEvent ); +@@ -4462,4 +4493,117 @@ void KHTMLView::moveCaretToLineEnd() + + #endif // KHTML_NO_CARET + ++#ifndef NO_SMOOTH_SCROLL_HACK ++#define timer timer2 ++ ++// All scrolls must be completed within 240ms of last keypress ++static const int SCROLL_TIME = 240; ++// Each step is 20 ms == 50 frames/second ++static const int SCROLL_TICK = 20; ++ ++void KHTMLView::scrollBy(int dx, int dy) ++{ ++ KConfigGroup cfg( KGlobal::config(), "KDE" ); ++ if( !cfg.readBoolEntry( "SmoothScrolling", true )) { ++ QScrollView::scrollBy( dx, dy ); ++ return; ++ } ++ // scrolling destination ++ int full_dx = d->dx + dx; ++ int full_dy = d->dy + dy; ++ ++ // scrolling speed ++ int ddx = 0; ++ int ddy = 0; ++ ++ int steps = SCROLL_TIME/SCROLL_TICK; ++ ++ ddx = (full_dx*16)/steps; ++ ddy = (full_dy*16)/steps; ++ ++ // don't go under 1px/step ++ if (ddx > 0 && ddx < 16) ddx = 16; ++ if (ddy > 0 && ddy < 16) ddy = 16; ++ if (ddx < 0 && ddx > -16) ddx = -16; ++ if (ddy < 0 && ddy > -16) ddy = -16; ++ ++ d->dx = full_dx; ++ d->dy = full_dy; ++ d->ddx = ddx; ++ d->ddy = ddy; ++ ++ if (!d->scrolling) { ++ scrollTick(); ++ startScrolling(); ++ } ++} ++ ++void KHTMLView::scrollTick() { ++ if (d->dx == 0 && d->dy == 0) { ++ stopScrolling(); ++ return; ++ } ++ ++ int tddx = d->ddx + d->rdx; ++ int tddy = d->ddy + d->rdy; ++ ++ int ddx = tddx / 16; ++ int ddy = tddy / 16; ++ d->rdx = tddx % 16; ++ d->rdy = tddy % 16; ++ ++ if (d->dx > 0 && ddx > d->dx) ddx = d->dx; ++ else ++ if (d->dx < 0 && ddx < d->dx) ddx = d->dx; ++ ++ if (d->dy > 0 && ddy > d->dy) ddy = d->dy; ++ else ++ if (d->dy < 0 && ddy < d->dy) ddy = d->dy; ++ ++ d->dx -= ddx; ++ d->dy -= ddy; ++ ++// QScrollView::setContentsPos( contentsX() + ddx, contentsY() + ddy); ++ kapp->syncX(); ++ QScrollView::scrollBy(ddx, ddy); ++// Unaccelerated X can get seriously overloaded by scrolling and for some reason ++// will send KeyPress events only infrequently. This should help to reduce ++// the load. ++ kapp->syncX(); ++} ++ ++void KHTMLView::startScrolling() ++{ ++ d->scrolling = true; ++ d->timer.start(SCROLL_TICK, false); ++} ++ ++void KHTMLView::stopScrolling() ++{ ++ d->timer.stop(); ++ d->dx = d->dy = 0; ++ d->scrolling = false; ++} ++ ++// Overloaded from QScrollView and QScrollBar ++void KHTMLView::scrollViewWheelEvent( QWheelEvent *e ) ++{ ++ int pageStep = verticalScrollBar()->pageStep(); ++ int lineStep = verticalScrollBar()->lineStep(); ++ int step = QMIN( QApplication::wheelScrollLines()*lineStep, pageStep ); ++ if ( ( e->state() & ControlButton ) || ( e->state() & ShiftButton ) ) ++ step = pageStep; ++ ++ if(e->orientation() == Horizontal) ++ scrollBy(-((e->delta()*step)/120), 0); ++ else if(e->orientation() == Vertical) ++ scrollBy(0,-((e->delta()*step)/120)); ++ ++ e->accept(); ++} ++ ++#undef timer ++ ++#endif // NO_SMOOTH_SCROLL_HACK ++ + #undef DEBUG_CARETMODE +Index: khtml/khtmlview.h +=================================================================== +--- khtml/khtmlview.h.orig ++++ khtml/khtmlview.h +@@ -181,6 +181,11 @@ signals: + void hideAccessKeys(); + void repaintAccessKeys(); + void findAheadActive( bool ); ++//#define NO_SMOOTH_SCROLL_HACK ++#ifndef NO_SMOOTH_SCROLL_HACK ++public slots: ++ void scrollBy(int dx, int dy); ++#endif + + protected: + void clear(); +@@ -211,9 +216,23 @@ protected: + void contentsContextMenuEvent ( QContextMenuEvent *_ce ); + void doAutoScroll(); + void timerEvent ( QTimerEvent * ); ++ ++#ifndef NO_SMOOTH_SCROLL_HACK ++ void startScrolling(); ++ void stopScrolling(); ++#ifndef QT_NO_WHEELEVENT ++ void scrollViewWheelEvent( QWheelEvent* e ); ++#endif ++#endif ++ + protected slots: + void slotPaletteChanged(); + void slotScrollBarMoved(); ++#ifndef NO_SMOOTH_SCROLL_HACK ++ void scrollTick(); ++#else ++ void scrollTick() {}; // moc cannot handle #if ++#endif + + private slots: + void tripleClickTimeout(); diff --git a/opensuse/core/tdelibs/spellcheck-default-utf8.diff b/opensuse/core/tdelibs/spellcheck-default-utf8.diff new file mode 100644 index 000000000..e663bdc69 --- /dev/null +++ b/opensuse/core/tdelibs/spellcheck-default-utf8.diff @@ -0,0 +1,26 @@ +Index: kdeui/ksconfig.cpp +=================================================================== +--- kdeui/ksconfig.cpp.orig ++++ kdeui/ksconfig.cpp +@@ -187,7 +187,7 @@ KSpellConfig::readGlobalSettings() + setRunTogether ( kc->readNumEntry("KSpell_RunTogether", 0) ); + setDictionary ( kc->readEntry("KSpell_Dictionary") ); + setDictFromList ( kc->readNumEntry("KSpell_DictFromList", false) ); +- setEncoding ( kc->readNumEntry ("KSpell_Encoding", KS_E_ASCII) ); ++ setEncoding ( kc->readNumEntry ("KSpell_Encoding", KS_E_UTF8) ); + setClient ( kc->readNumEntry ("KSpell_Client", KS_CLIENT_ISPELL) ); + + return true; +Index: kdeui/ksyntaxhighlighter.cpp +=================================================================== +--- kdeui/ksyntaxhighlighter.cpp.orig ++++ kdeui/ksyntaxhighlighter.cpp +@@ -551,7 +551,7 @@ QString KDictSpellingHighlighter::spellK + key += '/'; + key += QString::number( config->readNumEntry( "KSpell_DictFromList", false )); + key += '/'; +- key += QString::number( config->readNumEntry( "KSpell_Encoding", KS_E_ASCII )); ++ key += QString::number( config->readNumEntry( "KSpell_Encoding", KS_E_UTF8 )); + key += '/'; + key += QString::number( config->readNumEntry( "KSpell_Client", KS_CLIENT_ISPELL )); + return key; diff --git a/opensuse/core/tdelibs/stat-on-media.diff b/opensuse/core/tdelibs/stat-on-media.diff new file mode 100644 index 000000000..c8f25a9c8 --- /dev/null +++ b/opensuse/core/tdelibs/stat-on-media.diff @@ -0,0 +1,14 @@ +Index: kio/kio/kdirwatch.cpp +=================================================================== +--- kio/kio/kdirwatch.cpp.orig ++++ kio/kio/kdirwatch.cpp +@@ -743,7 +743,8 @@ bool KDirWatchPrivate::useINotify( Entry + + bool KDirWatchPrivate::useStat(Entry* e) + { +- if (KIO::probably_slow_mounted(e->path)) ++ if ( e->path.startsWith("/media/") || (e->path == "/media") ++ || (KIO::probably_slow_mounted(e->path)) ) + useFreq(e, m_nfsPollInterval); + else + useFreq(e, m_PollInterval); diff --git a/opensuse/core/tdelibs/tdelibs-devel-doc.changes b/opensuse/core/tdelibs/tdelibs-devel-doc.changes new file mode 100644 index 000000000..91e32f703 --- /dev/null +++ b/opensuse/core/tdelibs/tdelibs-devel-doc.changes @@ -0,0 +1,2956 @@ +------------------------------------------------------------------- +Wed Aug 20 18:43:12 CEST 2008 - coolo@suse.de + +- update to KDE 3.5.10 + * translation updates + * bugfixes + * desktop files validate + +------------------------------------------------------------------- +Mon Nov 5 14:46:16 CET 2007 - dmueller@suse.de + +- remove nosource tag + +------------------------------------------------------------------- +Tue Oct 9 10:53:20 CEST 2007 - stbinner@suse.de + +- update to KDE 3.5.8 + +------------------------------------------------------------------- +Wed May 23 13:54:36 CEST 2007 - stbinner@suse.de + +- use %fdupes + +------------------------------------------------------------------- +Mon May 14 22:13:16 CEST 2007 - stbinner@suse.de + +- update to KDE 3.5.7 + +------------------------------------------------------------------- +Tue Oct 3 10:23:35 CEST 2006 - stbinner@suse.de + +- update to KDE 3.5.5 + +------------------------------------------------------------------- +Sun Jul 23 21:32:19 CEST 2006 - coolo@suse.de + +- update to KDE 3.5.4 + +------------------------------------------------------------------- +Mon May 29 09:39:14 CEST 2006 - stbinner@suse.de + +- fix build of kdelibs3-devel-doc + +------------------------------------------------------------------- +Wed May 24 09:53:23 CEST 2006 - stbinner@suse.de + +- update to KDE 3.5.3 + +------------------------------------------------------------------- +Mon Mar 20 13:31:55 CET 2006 - stbinner@suse.de + +- update to KDE 3.5.2 + +------------------------------------------------------------------- +Tue Mar 7 12:21:56 CET 2006 - coolo@suse.de + +- require qt3-devel-doc + +------------------------------------------------------------------- +Wed Mar 1 09:52:03 CET 2006 - coolo@suse.de + +- point apidox.sh to the right Qt location (#135850) + +------------------------------------------------------------------- +Fri Jan 27 01:55:42 CET 2006 - mls@suse.de + +- converted neededforbuild to BuildRequires + +------------------------------------------------------------------- +Sat Jan 21 20:23:19 CET 2006 - coolo@suse.de + +- update to KDE 3.5.1 + +------------------------------------------------------------------- +Wed Dec 21 14:57:44 CET 2005 - dmueller@suse.de + +- merge with kdelibs3 source dir + +------------------------------------------------------------------- +Mon Dec 19 16:49:10 CET 2005 - dmueller@suse.de + +- fix file list + +------------------------------------------------------------------- +Mon Nov 28 14:18:52 CET 2005 - dmueller@suse.de + +- update to 3.5.0 + +------------------------------------------------------------------- +Mon Nov 21 15:14:45 CET 2005 - stbinner@suse.de + +- update to 3.5 RC 2 + +------------------------------------------------------------------- +Tue Nov 15 11:17:33 CET 2005 - dmueller@suse.de + +- hack to avoid a kdelibs3 update today + +------------------------------------------------------------------- +Mon Nov 14 11:23:56 CET 2005 - dmueller@suse.de + +- update to 3.5.0 + +------------------------------------------------------------------- +Fri Oct 14 18:59:10 CEST 2005 - dmueller@suse.de + +- update to 3.4.92 + +------------------------------------------------------------------- +Thu Sep 29 16:54:50 CEST 2005 - coolo@suse.de + +- simplifying build a lot + +------------------------------------------------------------------- +Wed Sep 28 13:36:53 CEST 2005 - dmueller@suse.de + +- fix build + +------------------------------------------------------------------- +Tue Sep 27 15:20:28 CEST 2005 - dmueller@suse.de + +- fix build on 64 bit platforms + +------------------------------------------------------------------- +Tue Sep 27 13:42:22 CEST 2005 - dmueller@suse.de + +- and again.. + +------------------------------------------------------------------- +Tue Sep 27 02:49:09 CEST 2005 - ro@suse.de + +- fix build again + +------------------------------------------------------------------- +Sat Sep 24 12:31:03 CEST 2005 - dmueller@suse.de + +- build.. + +------------------------------------------------------------------- +Fri Sep 23 19:27:46 CEST 2005 - dmuelle@suse.de + +- fixed typo in specfile + +------------------------------------------------------------------- +Fri Sep 23 15:17:49 CEST 2005 - dmueller@suse.de + +- update to 3.4.91 + +------------------------------------------------------------------- +Mon Sep 12 13:24:55 CEST 2005 - dmueller@suse.de + +- Fix /opt/kde3/share/doc/HTML/en/common/* conflicts + +------------------------------------------------------------------- +Sat Sep 10 18:25:34 CEST 2005 - aj@suse.de + +- Remove wrong requires/provides/obsoletes. + +------------------------------------------------------------------- +Sat Sep 10 10:52:48 CEST 2005 - aj@suse.de + +- Fix package build. + +------------------------------------------------------------------- +Fri Sep 9 16:45:30 CEST 2005 - dmueller@suse.de + +- split kdelibs3 into a noarch subpackage devel-docs + +------------------------------------------------------------------- +Thu Sep 8 13:05:04 CEST 2005 - bg@suse.de + +- disable --as-needed for hppa (does not build with that option) + +------------------------------------------------------------------- +Thu Sep 8 08:04:42 CEST 2005 - coolo@suse.de + +- let the icon loader find the suse specials independent on the theme + (#115139 and others) + +------------------------------------------------------------------- +Wed Sep 7 21:37:08 CEST 2005 - dmueller@suse.de + +- fix kwallet wizard being 3000px in size (#114954) + +------------------------------------------------------------------- +Wed Sep 7 19:52:20 CEST 2005 - dmueller@suse.de + +- fix kpdf embedding crashes (#114724) +- add forgotten patch for mozilla/dragonegg integration + +------------------------------------------------------------------- +Wed Sep 7 16:05:58 CEST 2005 - dmueller@suse.de + +- improve TIFF detection (#114319) + +------------------------------------------------------------------- +Tue Sep 6 19:53:03 CEST 2005 - dmueller@suse.de + +- fix JPEG2000 support in KImgio (#115324) + +------------------------------------------------------------------- +Tue Aug 23 15:35:24 CEST 2005 - coolo@suse.de + +- add mimetype for OOo base (#72285) + +------------------------------------------------------------------- +Tue Aug 23 13:26:36 CEST 2005 - coolo@suse.de + +- don't play around with xauth when the host name changes + (#98627) + +------------------------------------------------------------------- +Tue Aug 23 03:54:04 CEST 2005 - dmueller@suse.de + +- fix novell.com language selector (#106008) + +------------------------------------------------------------------- +Mon Aug 22 14:20:42 CEST 2005 - coolo@suse.de + +- don't put libkdeinit_*.so in -devel + +------------------------------------------------------------------- +Sun Aug 21 11:42:34 CEST 2005 - coolo@suse.de + +- update from 3.4 branch to fix endless kio_http loop +- fix DPMS check in admin (broke with --enable-new-ldflags) + +------------------------------------------------------------------- +Sat Aug 20 16:06:01 CEST 2005 - coolo@suse.de + +- update from 3.4 branch +- pleasing the libtool check + +------------------------------------------------------------------- +Fri Aug 19 14:12:41 CEST 2005 - adrian@suse.de + +- fix endless loop, if no KDEMM backend can get found (#105772) + +------------------------------------------------------------------- +Fri Aug 19 10:22:14 CEST 2005 - llunak@suse.cz + +- Fix QXEmbed to have focus working properly in yast+kcontrol + (#46495). + +------------------------------------------------------------------- +Thu Aug 18 17:15:40 CEST 2005 - adrian@suse.de + +- do not use KLIRRRRR sound on popular request ... + +------------------------------------------------------------------- +Thu Aug 18 10:18:54 CEST 2005 - coolo@suse.de + +- extend kde_post_install of common_options + +------------------------------------------------------------------- +Wed Aug 17 16:20:44 CEST 2005 - adrian@suse.de + +- move arts dependency to -arts package +- clean up really all SimplePlayers in knotify, might cause a crash + which needs to be debugged + +------------------------------------------------------------------- +Mon Aug 15 04:25:38 CEST 2005 - dmueller@suse.de + +- fix horizontal scrolling in KHTML broken by the smooth scrolling + patch (#76565). + +------------------------------------------------------------------- +Sat Aug 13 16:03:17 CEST 2005 - adrian@suse.de + +- fix memory/handle leak in knotify while playing sound via kdemm + knotify can still hang, if all alsa channels are used. (#97588) +- install icons for BitTorrent MimeType + +------------------------------------------------------------------- +Thu Aug 11 15:58:43 CEST 2005 - coolo@suse.de + +- removing all of the extraicons patch, it doesn't work at all anymore + so we need a new solution (also #85839 I guess) +- updated 3.4 branch to get a fix for a crashing dcopserver and + hanging mounts (#102564) + +------------------------------------------------------------------- +Thu Aug 4 13:33:12 CEST 2005 - sbrabec@suse.cz + +- Removed share/pixmaps links from crystalsvg (#85839). + +------------------------------------------------------------------- +Mon Aug 1 18:37:53 CEST 2005 - coolo@suse.de + +- 3.4 update replacing custom patches + +------------------------------------------------------------------- +Fri Jul 29 17:31:21 CEST 2005 - dmueller@suse.de + +- Update admin tarball to include -Wno-non-virtual-dtor flag +- Fix PIE detection (#98889) +- Fix visibility support + +------------------------------------------------------------------- +Tue Jul 26 11:45:19 CEST 2005 - llunak@suse.cz + +- Fix #96594 (knotify logout timeout) + +------------------------------------------------------------------- +Fri Jul 22 10:51:28 CEST 2005 - coolo@suse.de + +- update to version 3.4.2 + +------------------------------------------------------------------- +Mon May 30 16:19:20 CEST 2005 - adrian@suse.de + +- fix build for released distributions + +------------------------------------------------------------------- +Tue May 24 11:54:02 CEST 2005 - adrian@suse.de + +- update to version 3.4.1 +- set level back to "a" + +------------------------------------------------------------------- +Fri May 13 21:49:46 CEST 2005 - coolo@suse.de + +- init variable + +------------------------------------------------------------------- +Tue Apr 19 10:21:55 CEST 2005 - coolo@suse.de + +- update admin for gcc4 + +------------------------------------------------------------------- +Thu Apr 14 17:17:06 CEST 2005 - sbrabec@suse.cz + +- Added audiofile-devel to neededforbuild. + +------------------------------------------------------------------- +Thu Apr 14 12:07:18 CEST 2005 - adrian@suse.de + +- update to current 3_4_BRANCH + * parallel build order fix +- do not export kdemm video player api, it will not get any + implementation in this way + +------------------------------------------------------------------- +Wed Apr 13 11:34:45 CEST 2005 - adrian@suse.de + +- update to current 3_4_BRANCH +- increase patch Level to "c" +- export kdemm mixer interface + +------------------------------------------------------------------- +Fri Apr 8 11:46:38 CEST 2005 - adrian@suse.de + +- port kfilepreview to kdemm +- extra arts subpackages, aRts is optional now ! +- add DNS resolver fix from 3_4_BRANCH + +------------------------------------------------------------------- +Mon Apr 4 14:42:49 CEST 2005 - adrian@suse.de + +- add missing #include to fix compile of kdemm players + +------------------------------------------------------------------- +Mon Apr 4 11:01:08 CEST 2005 - coolo@suse.de + +- enable features for new ld + +------------------------------------------------------------------- +Fri Apr 1 11:54:56 CEST 2005 - adrian@suse.de + +- fix build with gcc 4, exporting kdemm classes + +------------------------------------------------------------------- +Thu Mar 31 13:46:09 CEST 2005 - adrian@suse.de + +- first steps to make arts optional: + * add experimental kdemm support for post 9.3 + * use kdemm instead of arts in knotify + * TODO: port kfileaudiopreview to kdemm +- do not overrule CFLAGS from spec files + +------------------------------------------------------------------- +Wed Mar 30 16:10:39 CEST 2005 - coolo@suse.de + +- disable visibility when compiled with debug (for testkhtml) + +------------------------------------------------------------------- +Mon Mar 28 18:46:22 CEST 2005 - schwab@suse.de + +- common_options: also set CFLAGS. + +------------------------------------------------------------------- +Sat Mar 19 14:54:24 CET 2005 - aj@suse.de + +- Integrate patch from Waldo Bastian for #71888 to fix + accessing of Netscape bookmarks in konqueror. + +------------------------------------------------------------------- +Fri Mar 18 13:40:41 CET 2005 - adrian@suse.de + +- fix aspell support +- fixes from 3_4_BRANCH + * toolbar configuration fix (#73662) + * IPv6 blacklist io-slave fix + * a khtml crash fix with innerweb + * redirection fix to uppercase written top level domains + +------------------------------------------------------------------- +Tue Mar 15 13:30:48 CET 2005 - adrian@suse.de + +- fix kspell recursion, visible in kbabel (#72773 by Waldo) + +------------------------------------------------------------------- +Mon Mar 14 15:32:48 CET 2005 - coolo@suse.de + +- take susetranslations.mo into account for translations + +------------------------------------------------------------------- +Mon Mar 14 14:01:15 CET 2005 - coolo@suse.de + +- fix smoothscrolling patch (Lubos) +- adding some more kate fixes from branch + +------------------------------------------------------------------- +Fri Mar 11 14:55:14 CET 2005 - coolo@suse.de + +- some more fixes from 3_4_BRANCH + +------------------------------------------------------------------- +Tue Mar 8 13:47:31 CET 2005 - adrian@suse.de + +- various updates from cvs + * missing kate initialising (Lubos) + * kcmmodule crash fixed (Waldo) + * khtml fixes + +------------------------------------------------------------------- +Mon Mar 7 16:55:17 CET 2005 - adrian@suse.de + +- fix progress bar (from KDE cvs) + +------------------------------------------------------------------- +Mon Mar 7 14:32:27 CET 2005 - coolo@suse.de + +- add fix for broken webdav URLs (#59203) + +------------------------------------------------------------------- +Sat Mar 5 10:19:48 CET 2005 - adrian@suse.de + +- fixes from KDE cvs: + * support Netware based ftp servers in kio_ftp + * fix proxy socks support + +------------------------------------------------------------------- +Sat Mar 5 09:22:49 CET 2005 - adrian@suse.de + +- update to version 3.4 final (not final try) + +------------------------------------------------------------------- +Wed Mar 2 10:01:46 CET 2005 - adrian@suse.de + +- update scrollview patch to BC version +- move Requires: kdelibs3_doc to kdebase3 + +------------------------------------------------------------------- +Sat Feb 26 10:34:21 CET 2005 - adrian@suse.de + +- update to 3.4.0 RC1 + +------------------------------------------------------------------- +Thu Feb 24 13:16:10 CET 2005 - adrian@suse.de + +- update to version 3.4.0 RC1 try 1 + +------------------------------------------------------------------- +Tue Feb 22 16:51:01 CET 2005 - adrian@suse.de + +- update to current CVS +- add soft scrolling patch from Allan Sandfeld + +------------------------------------------------------------------- +Tue Feb 22 10:47:34 CET 2005 - adrian@suse.de + +- remove secure ICE patch again, it is part of CVS now + +------------------------------------------------------------------- +Mon Feb 21 11:26:34 CET 2005 - adrian@suse.de + +- update to current CVS + +------------------------------------------------------------------- +Fri Feb 18 11:18:03 CET 2005 - adrian@suse.de + +- update to current CVS + +------------------------------------------------------------------- +Wed Feb 16 17:53:31 CET 2005 - adrian@suse.de + +- remove floppy:/ from file dialog again, media:/ is enough + +------------------------------------------------------------------- +Mon Feb 14 14:41:13 CET 2005 - adrian@suse.de + +- update from CVS +- add rubberband patch from Andre Moreira Magalhaes, disabled by + default + +------------------------------------------------------------------- +Mon Feb 14 11:49:33 CET 2005 - adrian@suse.de + +- make it possible to disable IDN support via KDE_NO_IDN enviroment + variable + +------------------------------------------------------------------- +Sun Feb 13 10:26:22 CET 2005 - coolo@suse.de + +- fix do_make -j15 + +------------------------------------------------------------------- +Fri Feb 11 10:29:44 CET 2005 - adrian@suse.de + +- update from CVS + +------------------------------------------------------------------- +Wed Feb 9 15:57:01 CET 2005 - adrian@suse.de + +- apply patch from Waldo to set ICE sockets to 0700 permissions + +------------------------------------------------------------------- +Mon Feb 7 11:28:36 CET 2005 - adrian@suse.de + +- update to beta 2 + +------------------------------------------------------------------- +Sat Jan 29 10:59:09 CET 2005 - coolo@suse.de + +- fix --no-unsermake + +------------------------------------------------------------------- +Fri Jan 28 16:53:21 CET 2005 - meissner@suse.de + +- removed setuid root binary kgrantpty which is not needed + since 8.1... + +------------------------------------------------------------------- +Fri Jan 28 15:11:47 CET 2005 - adrian@suse.de + +- update to current snapshot +- use external unsermake now + +------------------------------------------------------------------- +Tue Jan 25 15:41:07 CET 2005 - adrian@suse.de + +- adapt file dialog for media slave and remove floppy icon + +------------------------------------------------------------------- +Mon Jan 24 21:05:47 CET 2005 - coolo@suse.de + +- update to current snapshot (for testkhtml) + +------------------------------------------------------------------- +Thu Jan 20 16:53:31 CET 2005 - adrian@suse.de + +- update to current snapshot + +------------------------------------------------------------------- +Sat Jan 15 21:05:52 CET 2005 - schwab@suse.de + +- Use : in permissions file. + +------------------------------------------------------------------- +Fri Jan 14 14:58:39 CET 2005 - adrian@suse.de + +- update to current HEAD +- disable limit-image-size patch, since it got also disabled in qt + +------------------------------------------------------------------- +Thu Jan 13 15:05:49 CET 2005 - coolo@suse.de + +- update to HEAD to get kdebase HEAD compiled + +------------------------------------------------------------------- +Mon Jan 10 11:56:08 CET 2005 - adrian@suse.de + +- fix kprinter.h header, this fixes the build of kdebindings + +------------------------------------------------------------------- +Mon Jan 10 09:37:17 CET 2005 - coolo@suse.de + +- fix permissions of do_make + +------------------------------------------------------------------- +Sun Jan 9 10:01:53 CET 2005 - adrian@suse.de + +- final 3.4 beta 1 + +------------------------------------------------------------------- +Tue Jan 4 11:49:56 CET 2005 - coolo@suse.de + +- update to 3.4 beta 1 (first snapshot) + +------------------------------------------------------------------- +Fri Dec 17 09:24:58 CET 2004 - coolo@suse.de + +- let -Wl, pass in $LDFLAGS +- fix quoting in make wrapper + +------------------------------------------------------------------- +Thu Dec 16 21:32:19 CET 2004 - hvogel@suse.de + +- change icon to about_kde. go comes from another package and + we dont want kdelibs require kdebase + +------------------------------------------------------------------- +Wed Dec 15 12:44:48 CET 2004 - coolo@suse.de + +- make the unsermake/automake switch more clever + +------------------------------------------------------------------- +Tue Dec 14 11:11:05 CET 2004 - coolo@suse.de + +- fix unsermake $PATH for packages that build several sources + +------------------------------------------------------------------- +Mon Dec 13 14:56:19 CET 2004 - coolo@suse.de + +- remove debug flag from configure +- replaced unsermake with latest greatest + +------------------------------------------------------------------- +Wed Dec 8 13:25:36 CET 2004 - adrian@suse.de + +- update to official 3.4 alpha 1 + +------------------------------------------------------------------- +Mon Dec 6 15:17:54 CET 2004 - adrian@suse.de + +- update to KDE head snapshot + +------------------------------------------------------------------- +Fri Dec 3 15:19:22 CET 2004 - adrian@suse.de + +- update to the final tar bal of 3.3.2 + +------------------------------------------------------------------- +Mon Nov 29 20:29:55 CET 2004 - adrian@suse.de + +- update to version 3.3.2 + +------------------------------------------------------------------- +Fri Nov 26 15:57:47 CET 2004 - adrian@suse.de + +- extend KDE_VERSION_STRING with extra Level information to tell + information about applied patches +- extend distribution string with distribution version +- show distribution version in about dialog + +------------------------------------------------------------------- +Thu Nov 25 11:44:39 CET 2004 - adrian@suse.de + +- correct gnome icon path to hicolor + +------------------------------------------------------------------- +Wed Nov 24 13:49:09 CET 2004 - adrian@suse.de + +- accept also Python 2.4 in configure checks + +------------------------------------------------------------------- +Thu Nov 18 15:38:38 CET 2004 - ro@suse.de + +- use kerberos-devel-packages + +------------------------------------------------------------------- +Mon Nov 15 15:37:37 CET 2004 - adrian@suse.de + +- include /opt/kde3/share/icons/crystalsvg/22x22/apps path + +------------------------------------------------------------------- +Wed Nov 10 12:52:20 CET 2004 - ro@suse.de + +- permission handling fixes + +------------------------------------------------------------------- +Wed Nov 10 11:14:50 CET 2004 - coolo@suse.de + +- moving khtml 3.3 diff in a seperate diff (now that the 3.3 branch + contains a lot of updates for it) + +------------------------------------------------------------------- +Mon Nov 8 16:33:07 CET 2004 - coolo@suse.de + +- renable patch to limit image size (#43841) + +------------------------------------------------------------------- +Wed Nov 3 15:19:43 CET 2004 - coolo@suse.de + +- updated khtml again to fix compilation problem with gcc 4 + +------------------------------------------------------------------- +Wed Nov 3 11:12:57 CET 2004 - coolo@suse.de + +- use HTML rendering engine from CVS head (preparing backport for + 3.3.2) + +------------------------------------------------------------------- +Tue Oct 12 11:25:02 CEST 2004 - adrian@suse.de + +- update to version 3.3.1 + +------------------------------------------------------------------- +Wed Oct 6 14:30:24 CEST 2004 - adrian@suse.de + +- fix crash in libkabc, when importing an ldif file (#46882) + +------------------------------------------------------------------- +Tue Oct 5 10:17:05 CEST 2004 - adrian@suse.de + +- do also find gnome pages when using "en_*" locale, instead of + "C" or "en" (#45480) + +------------------------------------------------------------------- +Sat Oct 2 08:40:00 CEST 2004 - adrian@suse.de + +- try to avoid klauncher registration with a wrong dcop name. + this can happen, if two KDE application gets started at the + same time, without having running kdeinit before. + patch by Waldo and solves problems in Gnome hopefully (#46355) +- khtml rendering fix for nvidia.com + +------------------------------------------------------------------- +Fri Oct 1 16:58:11 CEST 2004 - adrian@suse.de + +- fix html frame parent problem, fixes www.map24.de (#44156) + +------------------------------------------------------------------- +Thu Sep 30 09:09:07 CEST 2004 - adrian@suse.de + +- fix nasty error startup messages +- fix two minor javascript bugs +- fix Netscape bookmarks wrapping (by Waldo, #45917) + +------------------------------------------------------------------- +Sun Sep 26 18:04:31 CEST 2004 - adrian@suse.de + +- update to current 3_3_BRANCH + * translation updates + * kpart handling fixes + +------------------------------------------------------------------- +Mon Sep 20 10:07:28 CEST 2004 - adrian@suse.de + +- update to current 3_3_BRANCH +- add fix for KDE file dialog on 64bit + (crash when called by 32bit application, by Waldo #44995) + +------------------------------------------------------------------- +Thu Sep 16 17:11:22 CEST 2004 - adrian@suse.de + +- use kwallet fix from Arvin + (update external hash keys immediatly #43973) + +------------------------------------------------------------------- +Wed Sep 15 17:18:45 CEST 2004 - adrian@suse.de + +- disable kwallet fix, it is known to create a memory leak + +------------------------------------------------------------------- +Tue Sep 14 15:23:11 CEST 2004 - adrian@suse.de + +- update to current branch + * khtml fixes + +------------------------------------------------------------------- +Fri Sep 10 13:47:48 CEST 2004 - adrian@suse.de + +- update to current branch +- apply fix for kwallet from HEAD, needed for kinternet + +------------------------------------------------------------------- +Tue Sep 7 11:28:30 CEST 2004 - adrian@suse.de + +- update to current BRANCH +- more silence during kbuildsycoca run +- disable default unsermake in beta +- remove mad from nfb + +------------------------------------------------------------------- +Fri Sep 3 17:29:22 CEST 2004 - coolo@suse.de + +- fixing the fix ;( + +------------------------------------------------------------------- +Fri Sep 3 14:20:15 CEST 2004 - coolo@suse.de + +- unsermake: do not remove the .deps file before regenerating it to + avoid make races + +------------------------------------------------------------------- +Mon Aug 30 08:36:57 CEST 2004 - adrian@suse.de + +- compile with explicit --disable-debug to get rid off asserts + +------------------------------------------------------------------- +Sat Aug 28 08:22:23 CEST 2004 - adrian@suse.de + +- update to current BRANCH +- add gnome help page support for khelpcenter(by clahey, #44061) + +------------------------------------------------------------------- +Mon Aug 23 16:31:13 CEST 2004 - adrian@suse.de + +- disable patch to limit image sizes in khtml, it causes crashes + atm + +------------------------------------------------------------------- +Fri Aug 20 13:02:26 CEST 2004 - adrian@suse.de + +- update to current 3_3_BRANCH +- add patch from clahey to support gnome help pages better in khelpcenter + +------------------------------------------------------------------- +Wed Aug 18 12:15:58 CEST 2004 - adrian@suse.de + +- move debug mode switch to common_options + +------------------------------------------------------------------- +Tue Aug 17 08:12:49 CEST 2004 - adrian@suse.de + +- add patch from Waldo to make it possible to limit the max image + size within QImage. (#43841) + +------------------------------------------------------------------- +Mon Aug 16 15:32:44 CEST 2004 - adrian@suse.de + +- update to version 3.3.0 final + +------------------------------------------------------------------- +Mon Aug 16 15:32:44 CEST 2004 - adrian@suse.de + +- update to version 3.3.0 final +- use "make compile" + +------------------------------------------------------------------- +Fri Aug 13 10:37:43 CEST 2004 - coolo@suse.de + +- removed 3_2_BRANCH.diff +- build with unsermake + +------------------------------------------------------------------- +Tue Aug 10 08:58:24 CEST 2004 - adrian@suse.de + +- update to version 3.3.0 RC2 +- split doc tools into subpackage to make it possible to use + a different theming for special products + +------------------------------------------------------------------- +Mon Aug 2 09:21:16 CEST 2004 - adrian@suse.de + +- accept automake 1.9 + +------------------------------------------------------------------- +Mon Jul 19 10:35:33 CEST 2004 - adrian@suse.de + +- update to version 3.2.92 (KDE 3.3 beta 2) + +------------------------------------------------------------------- +Tue Jun 29 12:01:28 CEST 2004 - adrian@suse.de + +- do not remove .cpp/.h files, if they are not really generated + by uic + +------------------------------------------------------------------- +Mon Jun 28 22:32:49 CEST 2004 - adrian@suse.de + +- enable OpenEXR support + +------------------------------------------------------------------- +Mon Jun 28 09:30:57 CEST 2004 - adrian@suse.de + +- update to version 3.3 beta 1 + * usual patch cleanup + +------------------------------------------------------------------- +Mon May 31 20:29:40 CEST 2004 - adrian@suse.de + +- update to version 3.2.3 + * remove obsolete patches + +------------------------------------------------------------------- +Wed May 12 09:21:00 CEST 2004 - adrian@suse.de + +- update user_profile patch +- add 3.3 button layout patch + +------------------------------------------------------------------- +Thu Apr 29 08:59:13 CEST 2004 - coolo@suse.de + +- let unsermake rewrite install rules with $DESTDIR +- use unsermake for kdelibs and parallel build + +------------------------------------------------------------------- +Sat Apr 24 18:17:07 CEST 2004 - sndirsch@suse.de + +- use xorg-x11 packages + +------------------------------------------------------------------- +Tue Apr 20 14:12:35 CEST 2004 - adrian@suse.de + +- use admin tar ball from HEAD +- extend kde-config to export library suffix and check for it in + configure +- add user profiles patch from Waldo + +------------------------------------------------------------------- +Sun Apr 18 14:56:17 CEST 2004 - coolo@suse.de + +- updated unsermake + +------------------------------------------------------------------- +Wed Apr 14 11:16:33 CEST 2004 - adrian@suse.de + +- update to version 3.2.2 + +------------------------------------------------------------------- +Tue Apr 13 17:16:34 CEST 2004 - adrian@suse.de + +- adding utempter to neededforbuild. (#38833) + (this does not lead into a new runtime requirement) + +------------------------------------------------------------------- +Sun Apr 4 21:08:43 CEST 2004 - adrian@suse.de + +- do only show important items in file dialog (#38269) + +------------------------------------------------------------------- +Thu Apr 1 10:39:59 CEST 2004 - coolo@suse.de + +- replacing brute force shut up with a real log file in kconf_update + (Waldo) + +------------------------------------------------------------------- +Wed Mar 31 16:40:14 CEST 2004 - adrian@suse.de + +- fix 3_2_BRANCH patch + +------------------------------------------------------------------- +Tue Mar 30 17:43:16 CEST 2004 - adrian@suse.de + +- enable incremental sycoca creation again + +------------------------------------------------------------------- +Tue Mar 30 10:45:07 CEST 2004 - coolo@suse.de + +- fix desktop icon renaming (Waldo) +- fixing kconf_update for kwin (Waldo,#36682) + +------------------------------------------------------------------- +Mon Mar 29 10:19:55 CEST 2004 - coolo@suse.de + +- handle cups printers that insist on being different (#37011) + +------------------------------------------------------------------- +Sat Mar 27 09:53:52 CET 2004 - adrian@suse.de + +- fix regression in khtml parser with latest update (by coolo) + +------------------------------------------------------------------- +Fri Mar 26 16:47:48 CET 2004 - adrian@suse.de + +- more silence (Waldo, Dirk and Adrian) +- apply fix for possible hanging library unloading (Lubos) +- fix regression in khtml parser with latest update (coolo) +- fix for hidden cookie windows below main windows (Lubos) +- fix icons in kcontrol + +------------------------------------------------------------------- +Tue Mar 23 08:06:52 CET 2004 - adrian@suse.de + +- update to current 3_2_BRANCH + * khtml fixes + o recursion protection + o official patch for kio urls + o crash fix (happened with Quanta) + o urls with trailing / are handled as directories + o fix for some flash enabled sites (#36656) +- fix fileshare.diff, make us compatible to KDE again +- call %run_permissions +- apply fix for utf8 localisation problem in kdehelp (coolo, #36681) +- adjust yast icon path to the new location +- fix missing include in fontconfig-reverse-lookup patch +- remove special settings for s390 and alpha + (leaded into new problems like implicit declarations of functions) + +------------------------------------------------------------------- +Mon Mar 22 13:22:57 CET 2004 - adrian@suse.de + +- update to current 3_2_BRANCH + * fixes security leak in kdeprint (#36663) +- add patch from Waldo to disallow kio urls in khtml + +------------------------------------------------------------------- +Sun Mar 21 21:32:47 CET 2004 - adrian@suse.de + +- do not trigger mount with konq view of /media/ (by Lubos) + +------------------------------------------------------------------- +Sun Mar 21 11:08:11 CET 2004 - adrian@suse.de + +- update to current 3_2_BRANCH + * fixed linebreak patch +- fix deactivated patches and remove obsolete ones +- suppress sycoca warnings about missing mimetypes + +------------------------------------------------------------------- +Mon Mar 15 16:46:24 CET 2004 - coolo@suse.de + +- another update to 3_2_BRANCH (kdeprint layout fixes and kate repaint problems) + +------------------------------------------------------------------- +Sat Mar 13 12:50:59 CET 2004 - coolo@suse.de + +- adding patch to force line breaks in translation of desktop files + (Arbeits-\nplatz) + +------------------------------------------------------------------- +Wed Mar 10 23:28:21 CET 2004 - coolo@suse.de + +- kill dcopserver explicitly + +------------------------------------------------------------------- +Wed Mar 10 10:39:42 CET 2004 - coolo@suse.de + +- use current 3_2_BRANCH (#35070) + +------------------------------------------------------------------- +Mon Mar 8 11:20:24 CET 2004 - adrian@suse.de + +- use current 3_2_BRANCH +- disable debug mode +- find YaST icons + +------------------------------------------------------------------- +Sun Mar 7 13:06:48 CET 2004 - coolo@suse.de + +- fixing pnome -> gnome typo +- adding libidn-devel as requirement for devel subpackage + +------------------------------------------------------------------- +Sat Mar 6 12:46:33 CET 2004 - coolo@suse.de + +- older distributions have different layouts for gnome. Avoid + dangling symlinks + +------------------------------------------------------------------- +Fri Mar 5 16:35:39 CET 2004 - coolo@suse.de + +- fixing build + +------------------------------------------------------------------- +Fri Mar 5 14:53:16 CET 2004 - coolo@suse.de + +- restart cups through rcscripts instead of kill magic (#32787) +- final update for 3.2.1 + +------------------------------------------------------------------- +Thu Mar 4 14:45:52 CET 2004 - coolo@suse.de + +- require libidn hard to avoid problems e.g. on lib64 + +------------------------------------------------------------------- +Wed Mar 3 18:26:46 CET 2004 - adrian@suse.de + +- removed gnome packages from neededforbuild + +------------------------------------------------------------------- +Tue Mar 2 10:25:48 CET 2004 - coolo@suse.de + +- update tarball again for khtml regression fixes + +------------------------------------------------------------------- +Tue Mar 2 10:23:33 CET 2004 - coolo@suse.de + +- fix build + +------------------------------------------------------------------- +Mon Mar 1 10:34:30 CET 2004 - coolo@suse.de + +- update to version 3.2.1 + +------------------------------------------------------------------- +Mon Mar 1 10:34:30 CET 2004 - coolo@suse.de + +- update to version 3.2.1 +- reworked build process + +------------------------------------------------------------------- +Wed Feb 25 22:01:46 CET 2004 - adrian@suse.de + +- update to current 3_2_BRANCH +- add -g as compiler option for beta test + +------------------------------------------------------------------- +Wed Feb 25 20:42:15 CET 2004 - adrian@suse.de + +- do not build on slow architectures + +------------------------------------------------------------------- +Mon Feb 23 15:40:21 CET 2004 - adrian@suse.de + +- do not use DNotify or FAM on /media +- long poll intervall for /media +- include GnomeCrystal icons and general pixmaps path + +------------------------------------------------------------------- +Mon Feb 23 08:05:47 CET 2004 - coolo@suse.de + +- initial package + +------------------------------------------------------------------- +Mon Feb 23 08:05:26 CET 2004 - coolo@suse.de + +- update 3_2_BRANCH +- update HEAD khtml +- adding testkhtml.spec + +------------------------------------------------------------------- +Sat Feb 21 18:35:28 CET 2004 - adrian@suse.de + +- add gnome and default icon pathes +- fix ssh.protcol installation +- fix syntax error in common_options + +------------------------------------------------------------------- +Fri Feb 20 09:29:56 CET 2004 - coolo@suse.de + +- use khtml from HEAD (to be backported) +- update admin tar ball +- take out testing khtml from the main page + +------------------------------------------------------------------- +Wed Feb 18 17:40:33 CET 2004 - adrian@suse.de + +- update to current 3_2_BRANCH + * ssh support to ktelnetservice +- remove pcsc-lite from neededforbuild +- disable test_regression for now + +------------------------------------------------------------------- +Wed Feb 11 08:50:03 CET 2004 - coolo@suse.de + +- fixing build on s390 + +------------------------------------------------------------------- +Wed Feb 11 08:06:07 CET 2004 - adrian@suse.de + +- update to current 3_2_BRANCH + +------------------------------------------------------------------- +Thu Jan 29 14:06:43 CET 2004 - adrian@suse.de + +- apply fix for printing with QT 3.3 + +------------------------------------------------------------------- +Mon Jan 26 23:25:56 CET 2004 - adrian@suse.de + +- update to version 3.2.0 final + +------------------------------------------------------------------- +Fri Jan 23 18:44:08 CET 2004 - adrian@suse.de + +- update to current 3_2_BRANCH + +------------------------------------------------------------------- +Wed Jan 21 17:28:14 CET 2004 - adrian@suse.de + +- disable sse and mmx usage on 9.0 (compiler bug) +- remove autom4te.cache during update_admin + (automake 2.8 can run into error with <2.8 cache data) + +------------------------------------------------------------------- +Wed Jan 21 12:14:49 CET 2004 - adrian@suse.de + +- update to current BRANCH to get various khtml fixes + +------------------------------------------------------------------- +Sun Jan 18 21:43:52 CET 2004 - adrian@suse.de + +- update to version 3.1.95 ( KDE 3.2 RC1 ) + +------------------------------------------------------------------- +Fri Jan 16 17:10:30 CET 2004 - adrian@suse.de + +- implement short menus again + +------------------------------------------------------------------- +Tue Jan 13 13:32:16 CET 2004 - adrian@suse.de + +- update to snapshot 2004011309 +- disable debug + +------------------------------------------------------------------- +Tue Jan 6 19:20:55 CET 2004 - adrian@suse.de + +- update to snapshot 2004010618 +- add kde_post_install function to common_options +- remove pregenerated files from uic during update_admin + +------------------------------------------------------------------- +Thu Dec 18 14:12:16 CET 2003 - adrian@suse.de + +- update to snapshot 2003121718 + +------------------------------------------------------------------- +Mon Dec 15 14:18:36 CET 2003 - adrian@suse.de + +- update to snapshot 2003121511 +- accept automake 1.8 + +------------------------------------------------------------------- +Wed Dec 10 14:30:45 CET 2003 - adrian@suse.de + +- update to snapshot 2003121013 + +------------------------------------------------------------------- +Tue Dec 9 13:40:37 CET 2003 - adrian@suse.de + +- package test_regression for testing in khtmltest package + +------------------------------------------------------------------- +Tue Dec 2 11:10:27 CET 2003 - adrian@suse.de + +- use beta2, take two tar ball + +------------------------------------------------------------------- +Mon Dec 1 22:00:31 CET 2003 - adrian@suse.de + +- update to 3.1.94 ( KDE 3.2 beta 2 ) + +------------------------------------------------------------------- +Sun Nov 23 20:44:24 CET 2003 - adrian@suse.de + +- update to snapshot 2003112315 + * build again with alsa 1.0 + +------------------------------------------------------------------- +Thu Nov 13 23:14:30 CET 2003 - adrian@suse.de + +- update to new snapshot from 2003102409 +- add jasper (JPEG2000) support + +------------------------------------------------------------------- +Wed Oct 29 09:59:01 CET 2003 - adrian@suse.de + +- update to KDE 3.2 beta1 + +------------------------------------------------------------------- +Tue Oct 21 09:34:51 CEST 2003 - adrian@suse.de + +- update to snapshot 2003102008 + +------------------------------------------------------------------- +Sun Oct 5 14:31:09 CEST 2003 - adrian@suse.de + +- update to snapshot 2003100510 + +------------------------------------------------------------------- +Wed Oct 1 09:59:21 CEST 2003 - adrian@suse.de + +- update to snapshot 3.1.92_2003093021 + * should fix building of KDE 2.2 documents in other packages + +------------------------------------------------------------------- +Mon Sep 29 15:59:09 CEST 2003 - adrian@suse.de + +- update to version 1.1.92 (KDE 3.2 alpha 2) + +------------------------------------------------------------------- +Tue Sep 23 09:42:45 CEST 2003 - adrian@suse.de + +- apply crash fix (happens in kdesktop) from Marcus Meissner + happened with a (most likely broken) Windows Driver CD (#31568) + +------------------------------------------------------------------- +Tue Sep 16 11:40:25 CEST 2003 - adrian@suse.de + +- fix application/x-ogg icon + +------------------------------------------------------------------- +Sat Sep 13 10:37:36 CEST 2003 - adrian@suse.de + +- fix Unimportant routines really finaly +- Require pcre-devel only for > 8.2 +- make menu sorting a routine which can be called from kicker +- hide Documents folder entry in kfiledialog for > 8.2 + +------------------------------------------------------------------- +Fri Sep 12 13:51:12 CEST 2003 - coolo@suse.de + +- add requirement on pcre-devel as libkhtml.la contains a reference + to /usr/lib/libpcreposix.la + +------------------------------------------------------------------- +Thu Sep 11 15:50:09 CEST 2003 - coolo@suse.de + +- give a more correct error message (as good as we can get it out + of cups) for forbidden actions (#29225) + +------------------------------------------------------------------- +Thu Sep 11 09:20:07 CEST 2003 - adrian@suse.de + +- use updated 3.1.4 tar ball + * certifcate dialog will reappear after typing wrong password +- add BRANCH patch to fix kdesktop icon name renaming and a crash fix +- honor caching in KServiceGroup::SuSEchildCount() + +------------------------------------------------------------------- +Tue Sep 9 02:59:23 CEST 2003 - adrian@suse.de + +- add YaST icon path + +------------------------------------------------------------------- +Tue Sep 9 00:14:46 CEST 2003 - adrian@suse.de + +- update to version 3.1.4 + +------------------------------------------------------------------- +Mon Sep 8 15:27:08 CEST 2003 - adrian@suse.de + +- implement KServiceGroup::SuSEchildCount() to ignore + X-SuSE-Unimportant entries + +------------------------------------------------------------------- +Fri Sep 5 12:10:12 CEST 2003 - adrian@suse.de + +- add check for SuSE-Unimportant also in kservicegroup class +- add support for X-SuSE-GeneralDescription and ShortMenu +- update 3_1_BRANCH +- add kmimelist application for debugging +- add optioninal X-KDE-InitialPreference Tag, if we want + different settings in Gnome + +------------------------------------------------------------------- +Wed Sep 3 17:44:28 CEST 2003 - adrian@suse.de + +- update xdg patch from Waldo to get compatible with 3.2 again +- update 3_1_BRANCH to get klistview fixes + +------------------------------------------------------------------- +Tue Sep 2 12:52:02 CEST 2003 - adrian@suse.de + +- include default pixmaps path +- drop broken styles, which will also disappear in KDE 3.2 +- add shut up patch from coolo + +------------------------------------------------------------------- +Mon Sep 1 14:38:52 CEST 2003 - adrian@suse.de + +- update to current 3_1_BRANCH +- implement X-SuSE-Unimportant support + +------------------------------------------------------------------- +Fri Aug 29 17:24:16 CEST 2003 - adrian@suse.de + +- update to current 3_1_BRANCH for qt 3.2.1 fixes + +------------------------------------------------------------------- +Tue Aug 26 08:16:04 CEST 2003 - adrian@suse.de + +- apply fix from Lubos for maximised windows of GTK apps + +------------------------------------------------------------------- +Sun Aug 24 23:06:19 CEST 2003 - adrian@suse.de + +- redo last fix in a more often working way. + but maybe we try to fix support for broken svg's atm ... + +------------------------------------------------------------------- +Sun Aug 24 12:14:29 CEST 2003 - adrian@suse.de + +- fix svgicon engine to render karbon svg's. +- install ksvgiconengine with header(internal) to get used by + svg thumbnail generator + +------------------------------------------------------------------- +Sat Aug 23 22:34:40 CEST 2003 - adrian@suse.de + +- update to 3_1_BRANCH + +------------------------------------------------------------------- +Wed Aug 20 17:19:57 CEST 2003 - schwab@suse.de + +- Fix weird character in common_options script. + +------------------------------------------------------------------- +Wed Aug 20 15:56:59 CEST 2003 - adrian@suse.de + +- small bugfix from Waldo for XDG + +------------------------------------------------------------------- +Tue Aug 19 12:15:18 CEST 2003 - adrian@suse.de + +- fix compile with gcc 3.3.1 + +------------------------------------------------------------------- +Wed Aug 13 11:34:11 CEST 2003 - adrian@suse.de + +- fix lib64 plugin support +- use current 3_1_BRANCH +- clean up spec file +- package /opt/kde3/include in main package + +------------------------------------------------------------------- +Tue Aug 12 13:25:32 CEST 2003 - adrian@suse.de + +- update XDG patch (yep, popup's are still disabled ;) + +------------------------------------------------------------------- +Fri Aug 8 21:58:06 CEST 2003 - adrian@suse.de + +- disable popup in kbuildsycoca run again + +------------------------------------------------------------------- +Thu Aug 7 15:25:02 CEST 2003 - adrian@suse.de + +- new XDG code from Waldo to support kmenuedit + +------------------------------------------------------------------- +Tue Aug 5 08:25:26 CEST 2003 - adrian@suse.de + +- disable popup in kbuildsycoca run + +------------------------------------------------------------------- +Fri Aug 1 16:54:16 CEST 2003 - adrian@suse.de + +- disable shadow patch at all again +- update 3_1_BRANCH diff + * first fixes for Qt 3.2 +- update kdelibs-menus stuff + * Waldo: Less buggy, with prefix support and with a working + + +------------------------------------------------------------------- +Wed Jul 30 17:52:37 CEST 2003 - adrian@suse.de + +- update kdelibs-menus-kded tar ball to new version from Waldo, + to get the kbuildsycoca --menutest function +- merge kdelibs3-cups back to kdelibs3 + +------------------------------------------------------------------- +Mon Jul 28 15:11:15 CEST 2003 - adrian@suse.de + +- update to current 3_1_BRANCH + +------------------------------------------------------------------- +Wed Jul 23 08:55:42 CEST 2003 - adrian@suse.de + +- use another new 3.1.3 tar ball with further security fix + (cookie handling) +- add needed files for XDG support + +------------------------------------------------------------------- +Tue Jul 22 13:12:02 CEST 2003 - coolo@suse.de + +- remove CVS conflict files from admin +- make common_options a %config (for consistency) + +------------------------------------------------------------------- +Mon Jul 21 12:00:42 CEST 2003 - adrian@suse.de + +- fix build for 7.x distributions + +------------------------------------------------------------------- +Fri Jul 18 17:02:43 CEST 2003 - adrian@suse.de + +- third version of 3.1.3 tar ball + (security fix for cookie handling) +- add backported patch from 3.2 for shadow text on icons. + (written by Laur Ivan ) +- accept Qt 3.2 also, when "#MIN_CONFIG(3)" is used +- fix build for lib64 + +------------------------------------------------------------------- +Fri Jul 18 10:01:44 CEST 2003 - adrian@suse.de + +- fix owner ship of files +- add XDG support from Waldo from KDE 3.2 + +------------------------------------------------------------------- +Wed Jul 16 12:14:55 CEST 2003 - adrian@suse.de + +- use new 3.1.3 tar ball + +------------------------------------------------------------------- +Wed Jul 16 01:11:51 CEST 2003 - adrian@suse.de + +- update to 3.1.3 + +------------------------------------------------------------------- +Tue Jun 24 10:52:19 CEST 2003 - coolo@suse.de + +- update 3.1 branch (heading 3.1.3) + +------------------------------------------------------------------- +Wed Jun 11 11:54:55 CEST 2003 - kukuk@suse.de + +- Add missing directories to filelist + +------------------------------------------------------------------- +Sat Jun 7 22:10:12 CEST 2003 - coolo@suse.de + +- remove libtool update code completly +- don't create stale symlinks for < 820 +- create the gnome icons symlink only for < 829 + (moved to gnome packages, where they can't dangle) + +------------------------------------------------------------------- +Fri May 30 14:55:49 CEST 2003 - adrian@suse.de + +- fix file conflict and disable libtool update again + +------------------------------------------------------------------- +Thu May 29 10:51:54 CEST 2003 - adrian@suse.de + +- tune some minor bits of coolo's changes + (a minor side effect is that we are able to build KDE packages again) + +------------------------------------------------------------------- +Wed May 28 15:05:30 CEST 2003 - coolo@suse.de + +- put the configure work around in update_admin too + +------------------------------------------------------------------- +Tue May 27 14:08:45 CEST 2003 - coolo@suse.de + +- updating 3_1_BRANCH.diff (to get it working without --enable-final) +- build --enable-final in beta too +- update libtool files from system (experimental) + +------------------------------------------------------------------- +Mon May 26 15:03:34 CEST 2003 - adrian@suse.de + +- define and use $INSTALL_TARGET in common_options +- set to "install" (not "install-strip") for now + +------------------------------------------------------------------- +Mon May 19 09:41:44 CEST 2003 - adrian@suse.de + +- apply 3_1_BRANCH.diff (fix build for Qt 3.2b1) + +------------------------------------------------------------------- +Fri May 16 13:34:52 CEST 2003 - coolo@suse.de + +- remove the right CVS subdir + +------------------------------------------------------------------- +Fri May 16 07:54:36 CEST 2003 - coolo@suse.de + +- remove CVS subdir + +------------------------------------------------------------------- +Thu May 8 09:05:49 CEST 2003 - adrian@suse.de + +- new 3.1.2 tar ball (try2) + +------------------------------------------------------------------- +Wed May 7 08:58:28 CEST 2003 - adrian@suse.de + +- update to version 3.1.2 +- cleanup/drop patches +- update admin tar ball and apply changes via a patch +- require correct arts version (1.1 at least) + +------------------------------------------------------------------- +Fri Apr 18 15:02:41 CEST 2003 - adrian@suse.de + +- merge 8.2 changes with 8.3 +- remove libaps from neededforbuild + +------------------------------------------------------------------- +Mon Apr 7 15:49:35 CEST 2003 - adrian@suse.de + +- security fix from 3.0.5b + * run ghostscript in safe mode +- add patch from Uwe Gansert to support the new fileshare tool +- add crash fix from 3_1_BRANCH for khtml on www.w3.org/QA/ +- do reverse font lookup in kfontcombobox and kaction for + fontconfig based distributions (#25725) + +------------------------------------------------------------------- +Thu Apr 3 18:26:13 CEST 2003 - adrian@suse.de + +- fix possible crash in kprinter on cups server misbehaviour +- add gnome help pages support for khelpcenter. + +------------------------------------------------------------------- +Fri Mar 21 12:56:36 CET 2003 - adrian@suse.de + +- apply fix https over proxy + +------------------------------------------------------------------- +Sat Mar 15 21:40:57 CET 2003 - adrian@suse.de + +- fix kmid crash in libkmid (#24820) +- .exe files have a correct icon now +- remove unused mimelnk tar ball + +------------------------------------------------------------------- +Wed Mar 12 09:49:01 CET 2003 - adrian@suse.de + +- disable kbuildsycoca speed up patch from last check-in again + +------------------------------------------------------------------- +Tue Mar 11 11:47:19 CET 2003 - adrian@suse.de + +- update to 3.1.1 tar ball, second try + * memory leak in dcopclient + * kate crash and syntax highlighting fixes + * do not let two running kbuildsycoca conflict + * keramik pixmapCache conflict fix + * some session management fixes +- add patch from Lubos to fix further session management problems + with preloaded konq +- fix api documentation +- remove SuSEconfig.susewm-kbuildsycoca again + (initial created by susewm now) + +------------------------------------------------------------------- +Thu Mar 6 10:34:33 CET 2003 - coolo@suse.de + +- updating the admin tar ball to 3.1.1 too + +------------------------------------------------------------------- +Mon Mar 3 11:36:11 CET 2003 - adrian@suse.de + +- update to version 3.1.1 + * fixed alphablended background images in khtml + * crash fix after destructed documents + * additional syntax highlight descriptions for kate +- xrandr fixes from Lubos to initialize the display correct on login + +------------------------------------------------------------------- +Thu Feb 27 23:50:42 CET 2003 - adrian@suse.de + +- update 3_1_BRANCH +- remove wrong Obsoletes again +- drop preload.desktop in autostart and use improved patch from + Lubos instead +- comment out some noise in .xsession-errors + +------------------------------------------------------------------- +Wed Feb 26 21:49:06 CET 2003 - adrian@suse.de + +- fixing kded startup with DNOTIFY enabled and lots of files + +------------------------------------------------------------------- +Wed Feb 26 10:35:49 CET 2003 - adrian@suse.de + +- update 3_1_BRANCH +- add ksycoca-global patch from Waldo +- add SuSEconfig.susewm-kbuildsycoca +- add Obsolete and Conflict tags with kde2 packages + +------------------------------------------------------------------- +Mon Feb 24 18:42:15 CET 2003 - adrian@suse.de + +- update 3_1_BRANCH +- enable-dnotify + +------------------------------------------------------------------- +Mon Feb 24 09:10:42 CET 2003 - coolo@suse.de + +- fixing kups (#24084) + +------------------------------------------------------------------- +Fri Feb 14 12:04:25 CET 2003 - adrian@suse.de + +- update 3_1_BRANCH +- allow setgid for man +- add gnome icon path + +------------------------------------------------------------------- +Wed Feb 12 22:46:37 CET 2003 - adrian@suse.de + +- update 3_1_BRANCH +- add preloaded konq patches from Lubos +- move kde-config back to main package + +------------------------------------------------------------------- +Wed Feb 5 02:26:15 CET 2003 - adrian@suse.de + +- update 3_1_BRANCH again for more aliasing fixes from Dirk +- remove fallback patch and implement a real media detection instead + of that + +------------------------------------------------------------------- +Tue Feb 4 10:06:14 CET 2003 - coolo@suse.de + +- updating to newer 3_1_BRANCH that is gcc 3.3 compliant + +------------------------------------------------------------------- +Mon Feb 3 16:57:38 CET 2003 - adrian@suse.de + +- add -fno-cse-follow-jumps -fno-cse-skip-blocks to work around + compiler bug + +------------------------------------------------------------------- +Mon Feb 3 11:52:53 CET 2003 - adrian@suse.de + +- update 3_1_BRANCH patch +- use --enable-final again + +------------------------------------------------------------------- +Sat Feb 1 16:38:48 CET 2003 - adrian@suse.de + +- remove ppc64 special compile options + +------------------------------------------------------------------- +Tue Jan 28 17:46:03 CET 2003 - adrian@suse.de + +- follow changed QDesktopWidget::resized API + +------------------------------------------------------------------- +Tue Jan 28 00:31:12 CET 2003 - adrian@suse.de + +- add BRANCH patches +- add libart_lgpl-devel to Requires from -devel package + +------------------------------------------------------------------- +Fri Jan 24 12:16:47 CET 2003 - adrian@suse.de + +- apply fix for resized desktop for menubar from Seli + +------------------------------------------------------------------- +Thu Jan 23 09:58:07 CET 2003 - adrian@suse.de + +- ha ! RC7-try5, security relevant again + +------------------------------------------------------------------- +Wed Jan 22 07:17:29 CET 2003 - adrian@suse.de + +- RC7-try4. last one ? + +------------------------------------------------------------------- +Tue Jan 21 12:59:35 CET 2003 - adrian@suse.de + +- RC7-try3. last one. + +------------------------------------------------------------------- +Fri Jan 17 14:36:40 CET 2003 - adrian@suse.de + +- use RC7-try2 tar balls + +------------------------------------------------------------------- +Wed Jan 15 16:10:17 CET 2003 - adrian@suse.de + +- use cyrus-sasl2 + +------------------------------------------------------------------- +Tue Jan 14 17:26:02 CET 2003 - adrian@suse.de + +- update to version RC7. +- kdelibs3-devel requires now fam-devel on > 8.1 + +------------------------------------------------------------------- +Wed Jan 8 12:50:01 CET 2003 - adrian@suse.de + +- add fam-devel to neededforbuild + +------------------------------------------------------------------- +Wed Jan 8 11:12:50 CET 2003 - adrian@suse.de + +- fix build with new alsa. works hopefully also with old versions + +------------------------------------------------------------------- +Tue Jan 7 15:08:32 CET 2003 - adrian@suse.de + +- update to RC6 (newer than the last 3.1 final try ;) + +------------------------------------------------------------------- +Wed Dec 18 11:39:30 CET 2002 - coolo@suse.de + +- updating the admin tar ball to find out about possible problems + +------------------------------------------------------------------- +Mon Dec 16 14:28:39 CET 2002 - coolo@suse.de + +- updating to latest branch. + +------------------------------------------------------------------- +Tue Dec 10 14:55:41 CET 2002 - coolo@suse.de + +- adding a check to kdeinit that checks for KDE_IS_PRELINKED and + is not using dlopen then + +------------------------------------------------------------------- +Tue Dec 3 09:57:31 CET 2002 - coolo@suse.de + +- trying to fix SSL check for lib64 + +------------------------------------------------------------------- +Sat Nov 30 21:48:04 CET 2002 - adrian@suse.de + +- next try of RC5 tar ball. BRANCH fixes are again disabled + +------------------------------------------------------------------- +Thu Nov 28 13:01:54 CET 2002 - adrian@suse.de + +- apply 3_1_BRANCH fixes +- fix build for lib64 + +------------------------------------------------------------------- +Mon Nov 25 10:46:04 CET 2002 - adrian@suse.de + +- update to RC5. +- do not use --enable-final on beta (gcc 3.3) + +------------------------------------------------------------------- +Mon Nov 25 01:03:39 CET 2002 - ro@suse.de + +- added openldap2-client to neededforbuild + +------------------------------------------------------------------- +Sat Nov 23 16:24:50 CET 2002 - adrian@suse.de + +- enable openldap support +- clean up #neededforbuild + +------------------------------------------------------------------- +Wed Nov 20 15:02:54 CET 2002 - coolo@suse.de + +- adding fix for admin dir which should unbreak packages having problems + with autoconf 2.56 + +------------------------------------------------------------------- +Wed Nov 20 13:00:30 CET 2002 - adrian@suse.de + +- disable hotfix again (it is inside the new tar ball) + +------------------------------------------------------------------- +Wed Nov 20 11:13:49 CET 2002 - adrian@suse.de + +- update to version 3.1-RC4 (final ?) + +------------------------------------------------------------------- +Tue Nov 12 17:00:38 CET 2002 - coolo@suse.de + +- another snapshot with even more last minute fixes ;( + +------------------------------------------------------------------- +Tue Nov 12 09:14:09 CET 2002 - coolo@suse.de + +- apply the lib64 patch correctly (in updating to a source without + the patch pre-applied) + +------------------------------------------------------------------- +Mon Nov 11 16:14:44 CET 2002 - coolo@suse.de + +- update to newer snapshot and sort out patches + +------------------------------------------------------------------- +Wed Nov 6 17:35:47 CET 2002 - adrian@suse.de + +- update to snapshot 3.0.8.20021106 (fix file conflicts) + +------------------------------------------------------------------- +Sun Nov 3 13:16:21 CET 2002 - adrian@suse.de + +- update to version 1.1.0.20021030 ~= RC1 + +------------------------------------------------------------------- +Tue Oct 8 21:19:44 CEST 2002 - adrian@suse.de + +- update to version 3.0.4 +- disable topMenu patch again + +------------------------------------------------------------------- +Tue Sep 24 09:05:13 CEST 2002 - froh@suse.de + +- %-ifarch'ed Requires: alsa-devel for all but s390 and s390x (#18647) + +------------------------------------------------------------------- +Sun Sep 8 19:48:06 CEST 2002 - adrian@suse.de + +- cross side scripting check fix from Dirk Mueller + +------------------------------------------------------------------- +Sun Sep 8 15:53:37 CEST 2002 - adrian@suse.de + +- .exe files are handled now as files for wine and not direct executable + +------------------------------------------------------------------- +Thu Sep 5 14:11:22 CEST 2002 - adrian@suse.de + +- add fix from mana for libkmid, to get alsa sequenzer working again + +------------------------------------------------------------------- +Wed Sep 4 13:16:24 MEST 2002 - coolo@suse.de + +- fix the PNM mimetypes, so that digital cameras work + +------------------------------------------------------------------- +Sat Aug 31 23:49:25 CEST 2002 - adrian@suse.de + +- default to lib64 pathes in admin/* on lib64 systems. + (fix link error, when lib32 enviroment is installed) + +------------------------------------------------------------------- +Fri Aug 30 12:07:35 CEST 2002 - adrian@suse.de + +- use most current 3_0_BRANCH patches + * fix for crash in khtml with enabled java from Seli + * layout fix in kcombobox from gis + * kcombobox fix from dfaure for oversized box in koffice + * kjs date fixes from dfaure + * ksycoca, illegal object fix from Waldo + * kcompletion box fix for Xinerama setup, reviewed by gis + * do not loop on unexpected EOF in kio_khtml from Waldo + * newline handling fix in khtml from dirk + * disable tiff write support, since it is not implemented (coolo) + * translations + +------------------------------------------------------------------- +Mon Aug 26 14:55:32 CEST 2002 - adrian@suse.de + +- install plugins on lib64 into /opt/kde3/lib. so we do not need + different plugin path definitions +- add missing dependencies to -devel packages +- add some selected fix from 3_0_BRANCH + +------------------------------------------------------------------- +Tue Aug 20 10:28:25 CEST 2002 - adrian@suse.de + +- fix build for lib64 really :( + +------------------------------------------------------------------- +Tue Aug 20 08:51:21 CEST 2002 - adrian@suse.de + +- fix build for lib64 +- move designer plugins into -devel package + +------------------------------------------------------------------- +Tue Aug 20 00:41:40 CEST 2002 - adrian@suse.de + +- follow change qt plugin path patch (using implicit subdir on lib64) + +------------------------------------------------------------------- +Fri Aug 16 12:12:54 CEST 2002 - adrian@suse.de + +- update to current 3_0_BRANCH + * include dirk's khtml glitch fix + +------------------------------------------------------------------- +Wed Aug 14 16:08:17 CEST 2002 - coolo@suse.de + +- don't strip on debug-i386 +- fixing lib64 path for plugins + +------------------------------------------------------------------- +Tue Aug 13 15:29:12 CEST 2002 - coolo@suse.de + +- prefer settings in /etc/opt/kde3 over /opt/kde, so that UL + settings can overwrite standard KDE settings + +------------------------------------------------------------------- +Tue Aug 13 12:42:46 CEST 2002 - adrian@suse.de + +- update to 3.0.3 tar ball, second try + (includes security fix for KSSL) + +------------------------------------------------------------------- +Tue Aug 13 10:30:30 CEST 2002 - coolo@suse.de + +- alsadev -> alsa-devel + +------------------------------------------------------------------- +Mon Aug 12 17:08:37 CEST 2002 - coolo@suse.de + +- the x86_64 bug is fixed now + +------------------------------------------------------------------- +Sun Aug 11 12:54:06 CEST 2002 - coolo@suse.de + +- changing admin.tar.bz2 to work around automake crap not beeing + able to get kdemultimedia compiled +- update 3.0 branch patch again + +------------------------------------------------------------------- +Thu Aug 8 00:44:30 CEST 2002 - adrian@suse.de + +- update to 3.0.3 +- add 3_0_BRANCH fix for ksycoca recreation by Waldo + +------------------------------------------------------------------- +Mon Aug 5 10:43:16 CEST 2002 - adrian@suse.de + +- update 3_0_BRANCH.dif +- add some mimetypes +- apply patch to support a fallback on mounting devices +- fix PreRequires +- update admin.tar + +------------------------------------------------------------------- +Sun Aug 4 22:35:24 CEST 2002 - adrian@suse.de + +- finaly fix build for hammer + (yes, even tested this time) + +------------------------------------------------------------------- +Sun Aug 4 11:33:29 CEST 2002 - adrian@suse.de + +- fix the second typo in one line :( + +------------------------------------------------------------------- +Fri Aug 2 15:56:03 CEST 2002 - coolo@suse.de + +- adding a patch that hopefully fixes the very large tip of the konsole + window + +------------------------------------------------------------------- +Thu Aug 1 15:58:11 CEST 2002 - adrian@suse.de + +- and fix the typo in last patch + +------------------------------------------------------------------- +Thu Aug 1 15:47:00 CEST 2002 - adrian@suse.de + +- add workaround for x86_64 compiler bug + +------------------------------------------------------------------- +Thu Aug 1 09:24:45 CEST 2002 - coolo@suse.de + +- updating the branch patch for a possible fix to kukuk's + bugzilla crash :) + +------------------------------------------------------------------- +Wed Jul 31 15:58:12 CEST 2002 - adrian@suse.de + +- add missing directorys applnk/* + +------------------------------------------------------------------- +Tue Jul 30 12:00:25 CEST 2002 - coolo@suse.de + +- don't use SuSEconfig for the KDE api, but a dedicated script + in %post +- don't install a susehelp config file anymore, but let susehelp + handle it itself +- handle the new location for api docu + +------------------------------------------------------------------- +Fri Jul 26 20:37:03 CEST 2002 - adrian@suse.de + +- fix neededforbuild + +------------------------------------------------------------------- +Fri Jul 26 19:44:39 CEST 2002 - adrian@suse.de + +- disable fast-malloc, since it is in qt now + +------------------------------------------------------------------- +Tue Jul 23 16:02:01 CEST 2002 - coolo@suse.de + +- also install the qt.tag file +- remove configure option removed long ago + +------------------------------------------------------------------- +Tue Jul 23 09:05:40 CEST 2002 - coolo@suse.de + +- don't let the Makefile guess the package name. it will guess the + wrong thing + +------------------------------------------------------------------- +Fri Jul 19 10:57:12 CEST 2002 - adrian@suse.de + +- use the kpart for rpm mimetype (if installed) + +------------------------------------------------------------------- +Thu Jul 18 16:53:37 CEST 2002 - coolo@suse.de + +- use doxygen for docu +- backport admin fixes from HEAD branch +- removed neededforbuilds that look like stuff not needed for build + (since KDE 2.1) +- moved API docu (back) into /opt/kde3 +- updated 3.0 branch diff + +------------------------------------------------------------------- +Fri Jul 12 17:12:27 CEST 2002 - adrian@suse.de + +- add topMenu definition + +------------------------------------------------------------------- +Fri Jul 12 14:21:11 CEST 2002 - adrian@suse.de + +- use current 3_0_BRANCH + * includes the fix for the famous CSS/JS segfault in konqueror + +------------------------------------------------------------------- +Thu Jul 11 13:10:17 CEST 2002 - adrian@suse.de + +- fix build for lib64 +- use patch from coolo to disable g3 file support (libtiff is broken) + +------------------------------------------------------------------- +Mon Jul 8 13:04:10 CEST 2002 - adrian@suse.de + +- fix file list + +------------------------------------------------------------------- +Fri Jul 5 14:00:14 CEST 2002 - adrian@suse.de + +- add missing icon directorys +- split cups support into own package for 8.1 +- s,i386,%ix86, + +------------------------------------------------------------------- +Thu Jun 27 21:57:40 CEST 2002 - adrian@suse.de + +- add %run_ldconfig in %post +- use --disable-final on ppc64 +- disable more debug messages + +------------------------------------------------------------------- +Wed Jun 26 10:55:26 CEST 2002 - adrian@suse.de + +- update to the second try of 3.0.2 tar ball + +------------------------------------------------------------------- +Mon Jun 24 22:29:07 CEST 2002 - adrian@suse.de + +- udpate to version 3.0.2 + +------------------------------------------------------------------- +Wed Jun 19 18:12:46 CEST 2002 - uli@suse.de + +- disable-final on ARM + +------------------------------------------------------------------- +Wed Jun 12 10:44:09 CEST 2002 - adrian@suse.de + +- update to current 3_0_BRANCH (large kjs updates) +- clean #neededforbuild +- do only warn on missing admin directory in update_admin +- remove old common_compile_options file + +------------------------------------------------------------------- +Fri Jun 7 13:55:25 CEST 2002 - adrian@suse.de + +- using fixed libtool for -m32/-m64 in admin (fixed by matz) +- replace admin with the content from admin.tar.bz2 + +------------------------------------------------------------------- +Thu Jun 6 15:45:24 CEST 2002 - adrian@suse.de + +- export kde_styledir and kde_widgetdir to follow the plugins* + directory name from Qt. + +------------------------------------------------------------------- +Wed Jun 5 15:59:29 CEST 2002 - adrian@suse.de + +- go back to 1.316 for am_edit + (no unsermake support, but generates moc files with --enable-final) + +------------------------------------------------------------------- +Tue Jun 4 10:39:02 CEST 2002 - coolo@suse.de + +- adding /sbin:/usr/sbin to the PATH if kdesu is used to become root. + Work around for flaws in setup tools (#11362) + +------------------------------------------------------------------- +Mon Jun 3 15:03:11 CEST 2002 - coolo@suse.de + +- removing test programs that cause problems with automake 1.6.1 + +------------------------------------------------------------------- +Mon Jun 3 12:34:41 CEST 2002 - adrian@suse.de + +- update to inofficial version 3.0.1a + * include bug/security fix for file uploads +- fix for broken png's in khtml in some cases + +------------------------------------------------------------------- +Mon May 27 12:02:26 CEST 2002 - adrian@suse.de + +- fix for 7.0 distribution + +------------------------------------------------------------------- +Thu May 23 18:35:17 CEST 2002 - ro@suse.de + +- fix admin extraction + +------------------------------------------------------------------- +Thu May 23 16:43:13 CEST 2002 - adrian@suse.de + +- Obsolete/provide kups and add start script + +------------------------------------------------------------------- +Thu May 23 14:48:35 CEST 2002 - coolo@suse.de + +- adding a update_admin snippet here too, so we can fix kde 3 + apps the same way as kde 2 apps + +------------------------------------------------------------------- +Wed May 22 01:18:18 CEST 2002 - adrian@suse.de + +- use coolo's famous common_options config file format + old common_compile_options file is not disabled for now +- use explicit --enable-debug=full if RPM_OPT_FLAGS~=-g + +------------------------------------------------------------------- +Tue May 21 16:28:23 CEST 2002 - adrian@suse.de + +- use Dirk's official post-3.0.1 patch and disable our former ones + * includes a security fix for khtml, known as "Opera exploit" + * fix "arts not starting realtime" problem (typo in reading config +variable). + * fix crashing kbuildsycoca when it hits an unreadable directory + * fix a text selection problem for KMail. + * fix a problem where (i)frame's accidently were not resized correctly. + * fix mime-detection of koffice post v1.1 documents + * urgent fixes in kfiledialog + +------------------------------------------------------------------- +Fri May 17 15:09:31 CEST 2002 - adrian@suse.de + +- fix dieing kio slave on https connections + +------------------------------------------------------------------- +Fri May 17 14:09:44 CEST 2002 - adrian@suse.de + +- reduce noise on stdout from khtml (extend shut_up.dif) + +------------------------------------------------------------------- +Tue May 14 11:42:25 CEST 2002 - adrian@suse.de + +- use updated 3.0.1 tar ball include crash fixes (esp. for kmail) + +------------------------------------------------------------------- +Mon May 13 14:46:46 CEST 2002 - adrian@suse.de + +- set requirement back to qt-3.0.3 version + +------------------------------------------------------------------- +Fri May 10 16:11:58 CEST 2002 - adrian@suse.de + +- workaround rpm parse bug for old distributions + +------------------------------------------------------------------- +Fri May 10 13:29:58 CEST 2002 - adrian@suse.de + +- update to version 3.0.1 and remove obsolete patches + +------------------------------------------------------------------- +Tue May 7 12:49:37 CEST 2002 - meissner@suse.de + +- %_lib fixes inside the .cpp files (should now find SSL libraries) + +------------------------------------------------------------------- +Mon May 6 16:33:47 CEST 2002 - meissner@suse.de + +- %_lib fixes + +------------------------------------------------------------------- +Tue Apr 16 14:58:17 CEST 2002 - adrian@suse.de + +- Require spell (either ispell or aspell) > 8.0 only +- use --disable-final and -O0 on mips + +------------------------------------------------------------------- +Fri Apr 12 15:53:49 MEST 2002 - adrian@suse.de + +- set --enable-mt. Not needed for kdelibs3, but it should be + in the common compiler flags for some other applications with + older admin folder + +------------------------------------------------------------------- +Tue Apr 9 14:12:43 CEST 2002 - adrian@suse.de + +- fix kde api generation for 7.1, 7.2 and 7.3 based distributions + +------------------------------------------------------------------- +Tue Mar 26 00:14:11 CET 2002 - adrian@suse.de + +- update to new 3.0 final version. the last one. sure. +- comment out last harmless warning message from kdelibs + +------------------------------------------------------------------- +Mon Mar 25 20:31:47 CET 2002 - adrian@suse.de + +- update 3.0 final tar ball +- 2 urgent fixes ( kdirlister ) + +------------------------------------------------------------------- +Mon Mar 25 10:45:55 CET 2002 - adrian@suse.de + +- update to 3.0 final (everything is wonderfull version) +- switch from /etc/X11/kde3 to /etc/opt/kde3 to be FHS compliant +- add /etc/kde3rc with prefix, so we do not need $KDEDIRS anymore + +------------------------------------------------------------------- +Thu Mar 21 19:05:29 CET 2002 - adrian@suse.de + +- use kdoc to generate api-documentation again + (makes the class browser of kdevelop happy) + +------------------------------------------------------------------- +Thu Mar 21 16:55:43 CET 2002 - adrian@suse.de + +- update to 3.0rc3 + +------------------------------------------------------------------- +Sun Mar 10 17:03:38 CET 2002 - adrian@suse.de + +- update to 3.0rc2 + +------------------------------------------------------------------- +Mon Mar 4 17:31:55 CET 2002 - adrian@suse.de + +- update to 3.0rc1 + +------------------------------------------------------------------- +Mon Feb 25 19:09:57 CET 2002 - adrian@suse.de + +- update to snapshot 2.92.2002022512 + +------------------------------------------------------------------- +Mon Feb 18 20:55:08 CET 2002 - adrian@suse.de + +- update to snapshot 2.92.2002021810 + +------------------------------------------------------------------- +Thu Feb 14 23:26:36 CET 2002 - adrian@suse.de + +- update to snapshot 2.92.2002021421 +- split kdelibs3-artsd package into arts and arts-devel +- add Doug Lea's fast threaded malloc function from glibc 2.3 + * prepared by Lubos Lunak + * integrated into libkdecore + * add dummy library to make it configurable via libKmalloc.so link + * disabled by default + +------------------------------------------------------------------- +Mon Feb 11 15:07:20 CET 2002 - adrian@suse.de + +- update to snapshot 2.92.2002021111 + +------------------------------------------------------------------- +Mon Feb 4 23:51:35 CET 2002 - adrian@suse.de + +- update to 2.92 (KDE 3.0 beta 2) +- create common_compile_flags file + +------------------------------------------------------------------- +Fri Feb 1 00:26:05 CET 2002 - ro@suse.de + +- changed neededforbuild to + +------------------------------------------------------------------- +Mon Jan 28 14:49:00 CET 2002 - adrian@suse.de + +- update to snapshot from 2.91.2002012811 + +------------------------------------------------------------------- +Wed Jan 23 01:50:51 CET 2002 - adrian@suse.de + +- add missing header files + +------------------------------------------------------------------- +Wed Jan 23 00:31:21 CET 2002 - adrian@suse.de + +- update to snapshot 2.91.2002012221 + +------------------------------------------------------------------- +Tue Jan 15 18:24:51 CET 2002 - adrian@suse.de + +- update to snapshot 2.91.2002011511 + +------------------------------------------------------------------- +Sat Jan 5 18:28:06 CET 2002 - adrian@suse.de + +- update to recent/todays snapshot +- disable rpath for SuSE > 7.3 + (/opt/kde3/lib is in ld.so.conf) +- add Requires: line for at least Qt 3.0.1 + +------------------------------------------------------------------- +Mon Dec 17 15:58:49 CET 2001 - adrian@suse.de + +- fix compile on s390 +- add fix for khtml seg fault +- do not build documentation for <7.3 distributions until kdoc + is fixed + +------------------------------------------------------------------- +Wed Dec 12 17:02:34 CET 2001 - adrian@suse.de + +- update to KDE 3.0 Beta 1 + +------------------------------------------------------------------- +Tue Dec 4 20:13:20 CET 2001 - adrian@suse.de + +- use current CVS snapshot + +------------------------------------------------------------------- +Fri Nov 2 12:30:45 CET 2001 - adrian@suse.de + +- using cvs snapshot from 01 Nov 2001 + +------------------------------------------------------------------- +Sat Oct 20 17:57:21 CEST 2001 - adrian@suse.de + +- using newer cvs-snapshot + (compiles again with qt 3 final) + +------------------------------------------------------------------- +Tue Oct 9 11:55:41 CEST 2001 - adrian@suse.de + +- branch to first kdelibs 3 (alpha 1) + +------------------------------------------------------------------- +Mon Sep 24 01:40:05 CEST 2001 - adrian@suse.de + +- add security fix for peer-ssl from Dirk +- add fix to make it possible to allow JS from local pages + +------------------------------------------------------------------- +Fri Sep 21 22:51:53 CEST 2001 - adrian@suse.de + +- add fix for kbuildsycoca --incremental from Waldo + (changed files (due to updated packages or a SuSEconfig run for + example) do not lead anymore to an incorrect ksycoca database. + +------------------------------------------------------------------- +Tue Sep 18 08:55:26 CEST 2001 - adrian@suse.de + +- add symbolic link to /opt/kde2/doc/HTML/en/kdeapi +- #neededforbuild cups -> cups-libs + +------------------------------------------------------------------- +Sat Sep 15 19:13:06 CEST 2001 - adrian@suse.de + +- add klineedit fix +- add warning that kdDebug function is disabled (except for ppc) +- fix kdelibs-2.2.1.dif (do not apply patch for ppc-only global) + +------------------------------------------------------------------- +Thu Sep 13 09:36:06 CEST 2001 - adrian@suse.de + +- add fix for kjs (octal parsing) +- add fix icondialog (custom icon directorys) +- fix ia64 patch + +------------------------------------------------------------------- +Tue Sep 11 10:54:21 CEST 2001 - adrian@suse.de + +- add security fixes for kssl (do not save keys on disk) +- add Qt API to the API index page + +------------------------------------------------------------------- +Mon Sep 10 14:41:23 CEST 2001 - adrian@suse.de + +- update to to second try of kdelibs 2.2.1 tar ball + * JavaScript fixes +- fix ia64 workarounds to build on older distris + +------------------------------------------------------------------- +Sun Sep 9 17:57:01 CEST 2001 - schwab@suse.de + +- Fix specfile for ia64 workarounds. + +------------------------------------------------------------------- +Sat Sep 8 20:40:27 CEST 2001 - adrian@suse.de + +- updating to final 2.2.1 tar ball + +------------------------------------------------------------------- +Sun Sep 2 09:59:21 CEST 2001 - adrian@suse.de + +- update to KDE_2_2_BRANCH from 02.09.2001 + * compile fixes + * KFile crash fix + * KDockWidget crash fix, caused crash in quanta + * fix login with chars in password >127 + * load charsets file on demand + * kxmlgui fixed to read really the complete xml file. +- drop -cups package, the cups libs are now splitted from the cups + package. +- add kmimetype hack to get a fallback application for device icons +- make KDE quiet by default (kdDebug default value is 4 now) + +------------------------------------------------------------------- +Tue Aug 28 15:53:23 CEST 2001 - adrian@suse.de + +- update to KDE_2_2_BRANCH from 28.08.2001 + * fix kspell for iso 13 languages + * fix $PATH for kdesu + * check the preview action in setPreviewWidget() + * check for aborted save + * official patch for kbuildsycoca + * kfile fixes + * crash fixes in userstylesheets + * large file system support fix + * crash fix in kbugreport +- removed patches for kbuildsycoca and large file support + +------------------------------------------------------------------- +Sat Aug 25 09:49:21 CEST 2001 - adrian@suse.de + +- update to KDE_2_2_BRANCH from 25.08.2001 + * khtml supports + * kded updates + * translation updates +- kbuildsycoca speed optimisation + (original patch from Lubos Lunak, reworked to be BC) + +------------------------------------------------------------------- +Tue Aug 21 12:25:49 CEST 2001 - adrian@suse.de + +- using KDE_2_2_BRANCH from 21.08.2001 + * html parser fixes + * artsd fixes + * ... +- disable FAM by default, it can be enabled with + export USE_FAM=1 +- disable and obsolete -i686 package, until the number of problems + are solved + +------------------------------------------------------------------- +Mon Aug 6 23:55:17 CEST 2001 - adrian@suse.de + +- add assert into khtml/misc/loader.cpp as recomended by Dirk +- switch on SSE support in i386 architecture + (arts has a runtime checking) +- clean up file list +- ia64 workarounds + +------------------------------------------------------------------- +Mon Aug 6 10:59:49 CEST 2001 - adrian@suse.de + +- update to final 2.2 + +------------------------------------------------------------------- +Wed Aug 1 15:57:30 CEST 2001 - adrian@suse.de + +- update to 2.2rc1 + +------------------------------------------------------------------- +Fri Jul 6 11:53:42 CEST 2001 - adrian@suse.de + +- generate API documentation + (no need to install kdevelop for api docu anymore) + +------------------------------------------------------------------- +Fri Jun 29 15:39:12 CEST 2001 - adrian@suse.de + +- 2.2beta1 + +------------------------------------------------------------------- +Mon May 28 10:39:18 CEST 2001 - adrian@suse.de + +- 2.2alpha2 + +------------------------------------------------------------------- +Mon Apr 16 22:02:33 CEST 2001 - adrian@suse.de + +- 2.2alpha1 + +------------------------------------------------------------------- +Fri Apr 13 12:54:18 CEST 2001 - adrian@suse.de + +- add currency symbol to KFontDialog preview for testing purposes + +------------------------------------------------------------------- +Tue Apr 10 20:49:07 CEST 2001 - adrian@suse.de + +- revert also kdeinit changes (compile fix) +- add fixes for javascript from CVS +- add fixes for font name mapping from CVS +- add kdeinit_shutdown patch from Waldo + +------------------------------------------------------------------- +Tue Apr 10 01:01:16 MEST 2001 - adrian@suse.de + +- minor fix, but hopefully fix linker problems on all P-II systems + +------------------------------------------------------------------- +Mon Apr 9 11:24:07 CEST 2001 - adrian@suse.de + +- disable alsa for 7.0-ppc + +------------------------------------------------------------------- +Fri Apr 6 11:01:59 CEST 2001 - adrian@suse.de + +- drop the -nostdlib flag during linking. this causes problems + (since not all need libs are used) on some architectures +- -O2 for axp + +------------------------------------------------------------------- +Thu Apr 5 08:56:33 CEST 2001 - adrian@suse.de + +- update to 2_1_BRANCH. + this fixes the proxy server authentication problem + +------------------------------------------------------------------- +Wed Mar 28 18:28:29 CEST 2001 - adrian@suse.de + +- disable ssl support for 7.0-ppc + (problems with the compiler and linker, which can not be fixed + without to loss the BC) + +------------------------------------------------------------------- +Tue Mar 27 12:08:53 CEST 2001 - ro@suse.de + +- changed neededforbuild to + +------------------------------------------------------------------- +Tue Mar 20 21:58:31 CET 2001 - adrian@suse.de + +- enable -O2 for ppc + using inline gcc bug workaround for ia64 + +------------------------------------------------------------------- +Tue Mar 20 18:53:42 CET 2001 - adrian@suse.de + +- update to 2.1.1 (official tar ball) + +------------------------------------------------------------------- +Mon Mar 19 22:03:49 CET 2001 - adrian@suse.de + +- update to current 2_1_BRANCH + we have kde-config as executable binary back + (lots of configure scripts test this) + +------------------------------------------------------------------- +Mon Mar 19 15:39:26 CET 2001 - adrian@suse.de + +- add cyrus-sassl to #neededforbuild + +------------------------------------------------------------------- +Sat Mar 17 21:38:50 CET 2001 - adrian@suse.de + +- added missing packages in #neededforbuild + +------------------------------------------------------------------- +Sat Mar 17 13:32:29 CET 2001 - adrian@suse.de + +- fix CATALOG for distributions <7.2 + update to current 2_1_0_TAG + +------------------------------------------------------------------- +Tue Mar 13 14:29:16 CET 2001 - ro@suse.de + +- added CATALOG for docbook_3 + +------------------------------------------------------------------- +Tue Mar 13 01:12:30 CET 2001 - ro@suse.de + +- changed neededforbuild to + +------------------------------------------------------------------- +Thu Feb 22 19:22:17 CET 2001 - adrian@suse.de + +- the final final 2.1.0 tar ball ... + +------------------------------------------------------------------- +Wed Feb 21 22:42:47 CET 2001 - adrian@suse.de + +- use the right KDE BRANCH (not my fault ;-) + +------------------------------------------------------------------- +Wed Feb 21 17:16:51 CET 2001 - adrian@suse.de + +- update to final 2.1.0 + +------------------------------------------------------------------- +Wed Feb 14 17:04:08 CET 2001 - adrian@suse.de + +- update to 2.1 post beta 2 + +------------------------------------------------------------------- +Mon Jan 22 14:44:41 CET 2001 - stepan@suse.de + +- alpha axp compile fixes for gcc 2.95.2 + +------------------------------------------------------------------- +Tue Jan 16 12:05:26 CET 2001 - adrian@suse.de + +- add a check of return value in kprocess. + Hopefully no crashes anymore. + +------------------------------------------------------------------- +Mon Jan 15 22:13:16 CET 2001 - adrian@suse.de + +- disable --enable-final until the glibc/compiler problem in + kprocess is fixed + +------------------------------------------------------------------- +Mon Jan 15 14:01:38 CET 2001 - adrian@suse.de + +- fix index.desktop for distris <7.1 + +------------------------------------------------------------------- +Sat Jan 13 18:49:40 CET 2001 - adrian@suse.de + +- fix local support in kicker. native language again in menus + this fix does not work for chinese people + fix index.desktop in highcolor, 22x22 actions icons can be loaded + again + +------------------------------------------------------------------- +Fri Jan 12 00:02:33 CET 2001 - adrian@suse.de + +- create some links to see the konqueror gear again + fix hicolor index file + +------------------------------------------------------------------- +Tue Jan 9 22:07:19 CET 2001 - adrian@suse.de + +- added security fix for kdesu from Waldo + +------------------------------------------------------------------- +Mon Jan 8 15:43:09 CET 2001 - adrian@suse.de + +- fix SuSE icon description + +------------------------------------------------------------------- +Sun Jan 7 15:56:58 CET 2001 - adrian@suse.de + +- use additional pathes, to not conflict with older pathes + +------------------------------------------------------------------- +Sun Jan 7 14:24:01 CET 2001 - adrian@suse.de + +- new icon handling. much more clean now and the + dependencie to icons is not needed anymore + +------------------------------------------------------------------- +Sat Jan 6 17:15:51 CET 2001 - adrian@suse.de + +- fix locale support. + LANG=de_DE or LANG=de_DE.utf-8 is working now. + +------------------------------------------------------------------- +Tue Jan 2 21:51:19 CET 2001 - adrian@suse.de + +- added a fix for font handling, if antialising is used + (Thanks Kurt) + +------------------------------------------------------------------- +Mon Jan 1 22:16:48 CET 2001 - adrian@suse.de + +- remove charset for german. this confuses the font handling + added fix for stalled, but broken connections; thanks waldo + +------------------------------------------------------------------- +Sat Dec 30 21:22:21 CET 2000 - adrian@suse.de + +- extend rpm mimelnk for *.spm files + disabled threading + +------------------------------------------------------------------- +Wed Dec 27 18:33:15 CET 2000 - adrian@suse.de + +- drop message in kdeinit, which produce a lot of invalid bugzilla entrys + +------------------------------------------------------------------- +Wed Dec 20 10:38:25 CET 2000 - adrian@suse.de + +- added openssl-devel for #neededforbuild + +------------------------------------------------------------------- +Sun Dec 17 15:55:15 CET 2000 - adrian@suse.de + +- moved icon links back to kdelibs :-( + +------------------------------------------------------------------- +Sun Dec 17 12:54:19 CET 2000 - adrian@suse.de + +- moved icon links from this package to kdebase + +------------------------------------------------------------------- +Fri Dec 15 14:35:38 CET 2000 - adrian@suse.de + +- brown paper bag fix ... I spend Rudi a beer ... + +------------------------------------------------------------------- +Fri Dec 15 12:02:02 CET 2000 - adrian@suse.de + +- added icon packages to #neededforbuild + +------------------------------------------------------------------- +Thu Dec 14 12:38:23 CET 2000 - adrian@suse.de + +- fixed specfile + +------------------------------------------------------------------- +Wed Dec 13 19:22:39 CET 2000 - adrian@suse.de + +- fixed icon links + +------------------------------------------------------------------- +Wed Dec 13 16:52:23 CET 2000 - adrian@suse.de + +- update to current 2_0_BRANCH + +------------------------------------------------------------------- +Wed Nov 29 14:25:31 CET 2000 - adrian@suse.de + +- update to 2.0.1 + +------------------------------------------------------------------- +Wed Nov 22 02:01:26 CET 2000 - ro@suse.de + +- remove penguin.png (in kdebase) + +------------------------------------------------------------------- +Tue Nov 21 15:07:15 CET 2000 - adrian@suse.de + +- fixed /etc/kderc + +------------------------------------------------------------------- +Tue Nov 21 00:08:08 CET 2000 - adrian@suse.de + +- added icon support for non kde icons + added /etc/kderc + ~/Desktop -> ~/KDesktop + +------------------------------------------------------------------- +Thu Nov 16 15:46:49 CET 2000 - adrian@suse.de + +- update to newer snapshot from KDE_2_0_BRANCH + fixed sgml catalog file for our sgml enviroment + +------------------------------------------------------------------- +Fri Nov 3 08:45:45 CET 2000 - adrian@suse.de + +- fixed needed for build + +------------------------------------------------------------------- +Thu Nov 2 20:35:30 CET 2000 - adrian@suse.de + +- fixed file list + +------------------------------------------------------------------- +Tue Oct 17 04:52:05 CEST 2000 - adrian@suse.de + +- update to 2.0.0 +- changed default for ~/.kde to ~/.kde2 +- dropped klibs2i and klibs2cr again +- splitted package in + * kdelibs + * kdelibs-devel + +------------------------------------------------------------------- +Wed Sep 20 11:29:35 CEST 2000 - adrian@suse.de + +- the last fix :-( + +------------------------------------------------------------------- +Sun Sep 17 00:27:08 CEST 2000 - adrian@suse.de + +- splited klibs2 into klibs2, klibs2i (international version + without crypt support) and klibs2cr (crypt version) + +------------------------------------------------------------------- +Sat Sep 16 15:17:06 CEST 2000 - adrian@suse.de + +- removed ssl/ssh support + added big endian fix in KPixmap + +------------------------------------------------------------------- +Tue Sep 12 11:49:35 MEST 2000 - adrian@suse.de + +- changed to -O0 for ppc and alpha + +------------------------------------------------------------------- +Tue Sep 12 08:56:11 CEST 2000 - adrian@suse.de + +- update to RC 1 + +------------------------------------------------------------------- +Mon Aug 21 14:04:31 CEST 2000 - adrian@suse.de + +- update to beta 4 + +------------------------------------------------------------------- +Mon Jul 24 17:46:04 CEST 2000 - adrian@suse.de + +- update to second version of beta 3 + +------------------------------------------------------------------- +Fri Jul 21 22:39:53 CEST 2000 - adrian@suse.de + +- update to beta 3 + +------------------------------------------------------------------- +Mon Jul 17 19:24:01 CEST 2000 - adrian@suse.de + +- update to snapshot from 17.07.2000 + +------------------------------------------------------------------- +Thu Jul 6 19:48:47 CEST 2000 - adrian@suse.de + +- Spec file created from kdelibs-1.91.20000706.tar.gz by autospec + + +------------------------------------------------------------------- +Fri Jun 9 17:15:52 CEST 2000 - adrian@suse.de + +- correct neededforbuild and updated khtml + +------------------------------------------------------------------- +Fri Jun 9 02:35:16 CEST 2000 - adrian@suse.de + +- update to 1.91; beta 2 + +------------------------------------------------------------------- +Tue Jun 6 01:29:47 CEST 2000 - adrian@suse.de + +- snapshot from 06.06.2000 + +------------------------------------------------------------------- +Sun May 28 09:22:23 CEST 2000 - adrian@suse.de + +- snapshot from 28.05.2000 + new type of spec file + +------------------------------------------------------------------- +Fri May 12 13:29:41 CEST 2000 - adrian@suse.de + +- update to KDE 1.90 + +------------------------------------------------------------------- +Thu Apr 27 17:45:45 CEST 2000 - adrian@suse.de + +- snapshot from 25.04.2000 + +------------------------------------------------------------------- +Thu Apr 20 14:27:28 CEST 2000 - adrian@suse.de + +- fixed file list + +------------------------------------------------------------------- +Wed Apr 19 17:17:42 CEST 2000 - adrian@suse.de + +- snapshot from 17.04.2000 + +------------------------------------------------------------------- +Thu Apr 6 19:21:15 CEST 2000 - adrian@suse.de + +- snapshot from 06.04.2000 + +------------------------------------------------------------------- +Thu Mar 30 18:44:11 CEST 2000 - adrian@suse.de + +- first KDE libs 2 package. PRE 1.90 Version + diff --git a/opensuse/core/tdelibs/tdelibs-devel-doc.spec b/opensuse/core/tdelibs/tdelibs-devel-doc.spec new file mode 100644 index 000000000..cf74b334f --- /dev/null +++ b/opensuse/core/tdelibs/tdelibs-devel-doc.spec @@ -0,0 +1,115 @@ +# +# spec file for package tdelibs-devel-doc +# +# Copyright (c) 2011 the Trinity Project (opensuse). +# +# All modifications and additions to the file contributed by third parties +# remain the property of their copyright owners, unless otherwise agreed +# upon. The license for this file, and modifications and additions to the +# file, is the same license as for the pristine package itself (unless the +# license for the pristine package is not an Open Source License, in which +# case the license is the MIT License). An "Open Source License" is a +# license that conforms to the Open Source Definition (Version 1.9) +# published by the Open Source Initiative. + +# Please submit bugfixes or comments via http://bugs.trinitydesktop.org/ +# + +# norootforbuild + + +Name: tdelibs-devel-doc +BuildRequires: OpenEXR-devel aspell-devel cups-devel db-devel doxygen graphviz tdelibs-devel krb5-devel libjasper libsndfile openldap2-devel qt3-devel-doc libtqt4-devel tde-filesystem utempter xorg-x11-fonts-100dpi xorg-x11-fonts-75dpi xorg-x11-fonts-scalable +BuildRequires: avahi-compat-mDNSResponder-devel fdupes +URL: http://www.trinitydesktop.org +License: GPLv2+ +Group: Documentation/HTML +BuildRoot: %{_tmppath}/%{name}-%{version}-build +Summary: Additional Package Documentation +Version: 3.5.12.99 +Release: 1 +%define tdelibs_patch_level b +BuildArch: noarch +Requires: tdelibs qt3-devel-doc +Source0: kdelibs-%{version}.tar.bz2 +Source1: create-kdeapi +Source4: api_docu_description + +%description +This package contains a generated API documentation for all library +classes provided by tdelibs. The index page for all TDE API functions +is: + +file:/usr/share/doc/TDE-API/index.html + + + +Authors: +-------- + The KDE Team + +%prep + echo %suse_version +%setup -q -n kdelibs-%{version} + +%build +%if %is_plus + # supplementary package + DISTRI="openSUSE $BUILD_DISTRIBUTION_VERSION UNSUPPORTED" +%else + # official build on released and maintained products + DISTRI="openSUSE $BUILD_DISTRIBUTION_VERSION" +%endif +export QTDOCDIR=/usr/share/doc/packages/qt3/html +%cmake_tde -d build -- -DKDE_DISTRIBUTION="$DISTRI" +%make_tde -d build -- apidox + +%install + list=`find . -name Makefile.am | xargs grep Doxy | sed -e "s,/Makefile.am.*,," | sort -u ` + for i in $list; do %makeinstall_tde -d build -- -C $i DESTDIR=$RPM_BUILD_ROOT install-apidox || true; done + # The modern way, with kdevelop-incompatible api documentation :/ + mkdir -p $RPM_BUILD_ROOT/usr/share/doc/TDE-API/ + # *** everytime you edit the following line, you made a mistake. Update macros.tde + # *** version instead + KDEDOCDIR=%{_tde_htmldir}/en/kdelibs-apidocs + # this is forgotten, but kdevelop needs it + mkdir -p $RPM_BUILD_ROOT/$KDEDOCDIR + if test -d apidocs/qt; then + cp -a apidocs/qt $RPM_BUILD_ROOT/$KDEDOCDIR + fi + set +x + exitc=0 + for i in `ls -1 $RPM_BUILD_ROOT/$KDEDOCDIR/*/html/index.html`; do + lib=`echo $i | sed -e 's,/html/index.html,,; s,.*/\([^/]*\)$,\1,'` + if ! egrep "^$lib:" %SOURCE4 ; then + echo "ERROR: no description for library $lib" + exitc=1 + fi + sed -n -e 's@'"${lib}"':\(.*\)@\1@p' %SOURCE4 > ${RPM_BUILD_ROOT}/${KDEDOCDIR}/${lib}/description.SuSE + echo "kdelibs" > ${RPM_BUILD_ROOT}/${KDEDOCDIR}/${lib}/package.SuSE + done + if test "$exitc" != 0; then + exit $exitc + fi + ln -s $KDEDOCDIR/index.html $RPM_BUILD_ROOT/usr/share/doc/TDE-API/index.html + rm -rf ${RPM_BUILD_ROOT}/%{_tde_datadir} + mkdir -p $RPM_BUILD_ROOT/%{_tde_datadir}/tdelibs + install -m 0755 %SOURCE1 $RPM_BUILD_ROOT/%{_tde_datadir}/tdelibs/ + %fdupes -s $RPM_BUILD_ROOT + +%post +%{_tde_datadir}/tdelibs/create-kdeapi + +%clean + rm -rf ${RPM_BUILD_ROOT} + +%files +%defattr(-,root,root) +%dir %{_tde_sharedir} +%dir %{_tde_datadir} +%dir %{_tde_datadir}/tdelibs +/usr/share/doc/TDE-API +%{_tde_datadir}/tdelibs/create-kdeapi +%{_tde_docdir} + +%changelog diff --git a/opensuse/core/tdelibs/tdelibs.changes b/opensuse/core/tdelibs/tdelibs.changes new file mode 100644 index 000000000..ac5164f07 --- /dev/null +++ b/opensuse/core/tdelibs/tdelibs.changes @@ -0,0 +1,4301 @@ +------------------------------------------------------------------- +Sat Aug 13 21:19:53 UTC 2011 - rxu@lincomlinux.org + +- initial conversion to Trinity + +------------------------------------------------------------------- +Fri Jun 17 09:55:54 UTC 2011 - aj@suse.de + +- Add /etc/ld.so.conf.d/kdelibs3.conf (bnc#671725). + +------------------------------------------------------------------- +Sat May 7 19:49:45 UTC 2011 - anixx@opensuse.org + +- added patch for scrollbars in light style v2 to prevent appearance of garbage + +------------------------------------------------------------------- +Mon Feb 21 10:37:20 UTC 2011 - aj@suse.de + +- Use /proc//oom_score_adj if available as new interface. + +------------------------------------------------------------------- +Mon Apr 19 18:49:44 UTC 2010 - tittiatcoke@gmail.com + +- apply patch to enable build with openssl 1.0 + +------------------------------------------------------------------- +Sun Feb 21 09:50:18 UTC 2010 - coolo@novell.com + +- apply patch from fedora to support autoconf >= 2.64 + +------------------------------------------------------------------- +Wed Jan 13 16:04:24 CET 2010 - dmueller@suse.de + +- fix build against gcc 4.5 + +------------------------------------------------------------------- +Sun Jan 10 14:50:34 CET 2010 - ro@suse.de + +- include cstring in fakes.c to fix build + +------------------------------------------------------------------- +Thu Dec 24 12:58:07 UTC 2009 - aj@suse.de + +- Only remove file from catalog if it disappeared. + +- Do not use release numbers for catalog, they're not needed anymore. + +------------------------------------------------------------------- +Fri Dec 18 22:59:57 CET 2009 - jengelh@medozas.de + +- add baselibs.conf as a source + +------------------------------------------------------------------- +Fri Dec 11 15:32:20 UTC 2009 - llunak@novell.com + +- fix XMLHttpRequest vulnerability (bnc#550618) + +------------------------------------------------------------------- +Mon Nov 23 15:51:20 CET 2009 - llunak@novell.com + +- fix array overrun (CVE-2009-0689) (bnc#557126) + +------------------------------------------------------------------- +Sat Nov 7 07:03:01 UTC 2009 - beineri@opensuse.org + +- ignore inline attribute in applications.menu (bnc#529057) + +------------------------------------------------------------------- +Fri Nov 6 14:43:13 CET 2009 - dmueller@suse.de + +- fix buildrequires + +------------------------------------------------------------------- +Sun Aug 30 09:28:35 CEST 2009 - llunak@novell.com + +- fix macmenu + +------------------------------------------------------------------- +Thu Aug 20 10:55:42 CEST 2009 - beineri@opensuse.org + +- own files previously ghosted by desktop-file-utils (bnc#531122) + +------------------------------------------------------------------- +Mon Jun 15 10:23:45 CEST 2009 - coolo@novell.com + +- do take all autotool versions + +------------------------------------------------------------------- +Fri May 29 13:18:23 CEST 2009 - llunak@suse.cz + +- build with gcc 4.4 + +------------------------------------------------------------------- +Sat Apr 4 17:28:09 CEST 2009 - coolo@suse.de + +- refresh all patches to fix build + +------------------------------------------------------------------- +Fri Feb 13 18:33:23 CET 2009 - coolo@suse.de + +- move sr@Latn away in kde_post_install + +------------------------------------------------------------------- +Mon Feb 9 14:57:47 CET 2009 - coolo@suse.de + +- only take the first part of the release into kdeversion + +------------------------------------------------------------------- +Sat Feb 7 20:39:18 CET 2009 - coolo@suse.de + +- skip the build counter in the kdeversion.h + +------------------------------------------------------------------- +Wed Dec 10 12:34:56 CET 2008 - olh@suse.de + +- use Obsoletes: -XXbit only for ppc64 to help solver during distupgrade + (bnc#437293) + +------------------------------------------------------------------- +Thu Dec 4 12:34:56 CET 2008 - olh@suse.de + +- obsolete old -XXbit packages (bnc#437293) + +------------------------------------------------------------------- +Mon Nov 17 10:28:56 CET 2008 - stbinner@suse.de + +- Fix crash when fixed-layout tables specify all % width as 0 + (affects new ebay myebay version) (bnc#437318) + +------------------------------------------------------------------- +Thu Nov 6 21:22:53 CET 2008 - dmueller@suse.de + +- fix desktop translations after update-translations changes + +------------------------------------------------------------------- +Sun Nov 2 19:05:31 CET 2008 - coolo@suse.de + +- pass a --project to suse_desktop_files (quite a hack as we can't + use rpm macros in here) + +------------------------------------------------------------------- +Fri Oct 17 12:56:14 CEST 2008 - stbinner@suse.de + +- make a png non-executable (bnc#433749) + +------------------------------------------------------------------- +Wed Sep 24 20:45:39 CEST 2008 - wstephenson@suse.de + +- Fix vcard encoding issue (bnc#382959) + +------------------------------------------------------------------- +Wed Sep 10 13:02:23 CEST 2008 - dmueller@suse.de + +- fix m4 macro nesting +- fix build of inotify stuff for SLE10 + +------------------------------------------------------------------- +Tue Sep 9 11:52:53 CEST 2008 - dmueller@suse.de + +- update admin tarball for python 2.6 support + +------------------------------------------------------------------- +Mon Sep 8 22:34:30 CEST 2008 - dmueller@suse.de + +- fix inotify support with 2.6.27 (fixes build) + +------------------------------------------------------------------- +Wed Aug 20 18:43:12 CEST 2008 - coolo@suse.de + +- update to KDE 3.5.10 + * translation updates + * bugfixes + * desktop files validate + * removed patches upstreamed + +------------------------------------------------------------------- +Mon Jul 28 17:20:28 CEST 2008 - llunak@suse.cz + +- return kdesu password timeout back to 2 hours (bnc#404521) + +------------------------------------------------------------------- +Thu Jul 3 07:14:37 CEST 2008 - dmueller@suse.de + +- fix ftp protocol overwriting existing files during rename (bnc#399296) + +------------------------------------------------------------------- +Tue Jun 3 14:46:25 CEST 2008 - stbinner@suse.de + +- fix Desktop and Network icons missing in kcontrol (bnc#396153) + +------------------------------------------------------------------- +Tue May 27 10:42:55 CEST 2008 - llunak@suse.cz + +- fix kdesu not defaulting to sudo anymore (bnc#216796) + +------------------------------------------------------------------- +Tue May 20 18:00:29 CEST 2008 - llunak@suse.cz + +- do not always default to kdesu remembering password (bnc#386531) + +------------------------------------------------------------------- +Mon May 19 21:21:40 CEST 2008 - llunak@suse.cz + +- fix useless and potentionally even harmful usage of kde3 wrapper + +------------------------------------------------------------------- +Fri May 9 10:35:21 CEST 2008 - dmueller@suse.de + +- 3_5_BRANCH.diff update: + * translation fixes + * fix kdesu -t splitting lines (bnc#335507) + +------------------------------------------------------------------- +Sat Apr 26 02:07:41 CEST 2008 - dmueller@suse.de + +- fix start_kdeinit vulnerability (CVE-2008-1671, bnc#382618) + +------------------------------------------------------------------- +Fri Apr 25 18:00:19 CEST 2008 - llunak@suse.cz + +- change kdesu defaults to keeping a password for 5min (bnc#216796) + +------------------------------------------------------------------- +Wed Apr 23 13:40:22 CEST 2008 - llunak@suse.cz + +- 3_5_BRANCH.diff update to remove fsync() causing bad I/O + performance + +------------------------------------------------------------------- +Thu Apr 10 16:22:10 CEST 2008 - stbinner@suse.de + +- don't dump mime types of KDE4 apps but give it only low priority + +------------------------------------------------------------------- +Thu Apr 10 12:54:45 CEST 2008 - ro@suse.de + +- added baselibs.conf file to build xxbit packages + for multilib support + +------------------------------------------------------------------- +Mon Apr 7 14:24:56 CEST 2008 - dmueller@suse.de + +- remove ispell_dictionary as it breaks locale selection (bnc#204734) + +------------------------------------------------------------------- +Wed Mar 12 15:07:19 CET 2008 - dmueller@suse.de + +- 3_5_BRANCH.diff update to fix media manager autostart in KDE4 + +------------------------------------------------------------------- +Wed Feb 13 19:52:59 CET 2008 - dmueller@suse.de + +- update to 3.5.9: + * 9th bugfix release of KDE 3.5 + * remove patches that are already upstream + +------------------------------------------------------------------- +Fri Feb 8 22:18:23 CET 2008 - stbinner@suse.de + +- prevent autostarted application crashes under KDE4 (bnc#359800) + +------------------------------------------------------------------- +Thu Jan 10 14:11:25 CET 2008 - dmueller@suse.de + +- branch update (#334277, #348088) + +------------------------------------------------------------------- +Wed Jan 2 08:32:09 CET 2008 - stbinner@suse.de + +- update 3_5_BRANCH.diff to pick up some qxembed fixes + +------------------------------------------------------------------- +Wed Nov 14 13:08:53 CET 2007 - dmueller@suse.de + +- add 3_5_BRANCH.diff to fix the latest gcc 4.3 build + problem of the day + +------------------------------------------------------------------- +Mon Nov 5 15:50:12 CET 2007 - dmueller@suse.de + +- remove nosource tag from kdelib3-devel-doc + +------------------------------------------------------------------- +Tue Oct 9 10:53:35 CEST 2007 - stbinner@suse.de + +- update to KDE 3.5.8: + * small performance improvements in core libs + * bugfixes in core libs, http ioslave, khtml and kjs +- fix problem with focus when mailing link from Konqueror (#333386) +- fix non-KDE X-KDE-SubstituteUID apps not starting (#325633) +- fix WINE menu entries not being shown in the menu (#331598) + +------------------------------------------------------------------- +Mon Oct 1 14:00:49 CEST 2007 - stbinner@suse.de + +- SVN commit 717341: Revert r707381 which broke http-headers, and + add a bit more buffer to handle long http-headers like X-JSON + +------------------------------------------------------------------- +Thu Sep 27 15:31:48 CEST 2007 - dmueller@suse.de + +- drop -Bdirect + +------------------------------------------------------------------- +Mon Sep 17 13:59:30 CEST 2007 - stbinner@suse.de + +- fix build for < 10.3 +- fix bug 301648: Cannot select "remote charset" in Konqueror + +------------------------------------------------------------------- +Fri Sep 14 16:48:24 CEST 2007 - dmueller@suse.de + +- fix crash in kded on shutdown (#304640) +- fix addressbook ressource saving refcount bug +- fix konqueror slowdown on Qt API documentation +- fix cross domain cookie injection (kde bug #134421) +- http kioslave fixes to make it work with big and chunked + http response headers +- fix addressbar spoofing (#298707, #298736, CVE-2007-4224, + CVE-2007-4225, CVE-2007-3820) + +------------------------------------------------------------------- +Tue Sep 11 18:31:27 CEST 2007 - stbinner@suse.de + +- add mime-type definitions for Open XML docx, pptx & xlsx (#307159) + +------------------------------------------------------------------- +Tue Sep 11 14:59:41 CEST 2007 - stbinner@suse.de + +- fix kde4 application may get started instead of user substituded + kde3 application (#309044) + +------------------------------------------------------------------- +Tue Sep 11 13:45:02 CEST 2007 - tpatzig@suse.de + +- fix kded destructor to delete all loaded modules (#228865) + +------------------------------------------------------------------- +Tue Sep 11 10:51:13 CEST 2007 - stbinner@suse.de + +- only check for mime type starting with ""Shockwave Flash" (#304999) + +------------------------------------------------------------------- +Mon Sep 10 14:14:18 CEST 2007 - dmueller@suse.de + +- apply susetranslations in kbuildsycoca (#196855) + +------------------------------------------------------------------- +Mon Sep 3 15:08:18 CEST 2007 - stbinner@suse.de + +- search for locale and help also in /opt/kde3/share/locale-bundle, + /opt/kde3/share/doc-bundle & /usr/share/gnome/help-bundle (#302270) + +------------------------------------------------------------------- +Thu Aug 30 17:36:31 CEST 2007 - dmueller@suse.de + +- fix kdebug assertions on suppressed output + +------------------------------------------------------------------- +Wed Aug 29 14:27:01 CEST 2007 - stbinner@suse.de + +- get a missing Flash plugin not from Adobe but non-oss (#304999) + +------------------------------------------------------------------- +Fri Aug 24 18:28:42 CEST 2007 - dmueller@suse.de + +- disable kdDebug by default (#304173) + +------------------------------------------------------------------- +Fri Aug 10 18:56:56 CEST 2007 - dmueller@suse.de + +- add workaround for kernel garbling environ in kdeinit (#298943) + +------------------------------------------------------------------- +Sat Aug 4 18:38:32 CEST 2007 - stbinner@suse.de + +- update 3_5_BRANCH.diff: + * make KAcceleratorManager automanage popups + * fix kiconloader to scale if possible rather than return unknown + +------------------------------------------------------------------- +Fri Aug 3 13:16:55 CEST 2007 - stbinner@suse.de + +- split off libkdefx and Plastik into default-style sub-package + +------------------------------------------------------------------- +Sun Jul 22 07:27:46 CEST 2007 - coolo@suse.de + +- remove patch that conflicts with the 3.5 update because + it went upstream too + +------------------------------------------------------------------- +Fri Jul 20 14:57:35 CEST 2007 - llunak@suse.cz + +- update 3_5_BRANCH.diff to include bugfixes (#293424) + +------------------------------------------------------------------- +Mon Jul 16 13:46:19 CEST 2007 - stbinner@suse.de + +- ensure that correct kcmshell is called (#277292) + +------------------------------------------------------------------- +Fri Jul 13 11:41:55 CEST 2007 - stbinner@suse.de + +- add text completion editor to khtml forms and KHistoryCombo + +------------------------------------------------------------------- +Mon Jul 9 13:29:02 CEST 2007 - dmueller@suse.de + +- add patch for being able to open kwallet via DCOP + +------------------------------------------------------------------- +Thu Jun 28 15:03:28 CEST 2007 - wstephenson@suse.de + +- allow http to contact localhost when in offline mode + +------------------------------------------------------------------- +Tue Jun 19 23:58:03 CEST 2007 - dmueller@suse.de + +- update 3_5_BRANCH.diff to fix various 3.5.7 regressions + +------------------------------------------------------------------- +Sun Jun 10 13:38:14 CEST 2007 - stbinner@suse.de + +- brand default user agent like done in Firefox + +------------------------------------------------------------------- +Fri Jun 8 12:05:40 CEST 2007 - dmueller@suse.de + +- fix quoting in desktop-translations hook + +------------------------------------------------------------------- +Tue Jun 5 09:28:56 CEST 2007 - stbinner@suse.de + +- add Provides: kdepim3-networkstatus +- restore binary compatibility in network status patch (#279884) +- update common_options_legacy from common_options + +------------------------------------------------------------------- +Fri Jun 1 17:33:17 CEST 2007 - dmueller@suse.de + +- update to current 3_5_BRANCH: + * removes patches that went upstream + * adds kinit wrapper for OOM protection + +------------------------------------------------------------------- +Wed May 30 18:45:10 CEST 2007 - wstephenson@suse.de + +- Update Obsoletes: as networkstatus was moved into libs + +------------------------------------------------------------------- +Tue May 29 19:44:47 CEST 2007 - dmueller@suse.de + +- fix kde_post_install to also find desktop files in + other subdirectories under /opt/kde3/share +- use kde_post_install +- drop obsolete patch + +------------------------------------------------------------------- +Thu May 24 21:26:16 CEST 2007 - wstephenson@suse.de + +- Revised offline mode infrastructure (#237274) + +------------------------------------------------------------------- +Wed May 23 13:55:04 CEST 2007 - stbinner@suse.de + +- use %fdupes +- add missing ldconfig calls + +------------------------------------------------------------------- +Mon May 14 22:10:06 CEST 2007 - stbinner@suse.de + +- update to 3.5.7 + * several bugfixes in khtml, kjs and katepart +- add khtml patch to fix Google Mail + +------------------------------------------------------------------- +Mon May 7 15:36:45 CEST 2007 - stbinner@suse.de + +- X-KDE-AutoEmbed=false for Java applications (#210967) + +------------------------------------------------------------------- +Thu Apr 26 14:55:36 CEST 2007 - dmueller@suse.de + +- fix avahi daemon detection (#264233) + +------------------------------------------------------------------- +Mon Apr 23 16:45:29 CEST 2007 - stbinner@suse.de + +- don't start randomly KDE4 when a KDE3 app exists via mini-cli +- interpret OnlyShowIn=KDE of KDE4 applications as NotShowIn + +------------------------------------------------------------------- +Fri Apr 20 16:43:44 CEST 2007 - stbinner@suse.de + +- ignore mime types of kde4 applications and mark them in menus + +------------------------------------------------------------------- +Fri Apr 20 10:14:20 CEST 2007 - nadvornik@suse.cz + +- adjusted BuildRequires for libjasper-devel + +------------------------------------------------------------------- +Mon Apr 16 17:59:08 CEST 2007 - dmueller@suse.de + +- add unzip to buildrequires for the java checker + +------------------------------------------------------------------- +Thu Apr 12 13:37:13 CEST 2007 - stbinner@suse.de + +- default to UTF-8 encoding for spellchecking (#261217) + +------------------------------------------------------------------- +Tue Apr 3 22:56:10 CEST 2007 - stbinner@suse.de + +- update 3_5_BRANCH diff to fix build of kde3-i18n +- fix compiler options for gcc on < 10.3 + +------------------------------------------------------------------- +Mon Apr 2 18:13:42 CEST 2007 - dmueller@suse.de + +- update 3_5_BRANCH diff to include fix for + * possible utf8 overlong decoding issue in kjs (#259187) + * crash during ftp PASV scanning (#257045) + * possible XSS in title tags (#238377) + +------------------------------------------------------------------- +Mon Mar 26 22:31:33 CEST 2007 - dmueller@suse.de + +- add libbz2-devel build requires + +------------------------------------------------------------------- +Thu Mar 22 19:36:19 CET 2007 - stbinner@suse.de + +- adapt lpoptions config file position for CUPS 1.2 (#252947) + +------------------------------------------------------------------- +Tue Mar 20 18:26:03 CET 2007 - dmueller@suse.de + +- fix typo in xauth localhostname patch which inverts the logic + +------------------------------------------------------------------- +Mon Mar 19 13:35:16 CET 2007 - dmueller@suse.de + +- update 3_5_BRANCH.diff (#255753) + +------------------------------------------------------------------- +Mon Mar 12 11:04:05 CET 2007 - stbinner@suse.de + +- update 3_5_BRANCH.diff to fix katepart selection problems + +------------------------------------------------------------------- +Fri Mar 9 16:30:35 CET 2007 - dmueller@suse.de + +- apply 3_5_BRANCH.diff to fix build with Qt 3.3.8 + +------------------------------------------------------------------- +Fri Mar 9 14:19:43 CET 2007 - stbinner@suse.de + +- install kttds icon to hicolor/apps/ instead of crystalsvg/apps/ + +------------------------------------------------------------------- +Thu Mar 8 11:45:07 CET 2007 - stbinner@suse.de + +- adapt fix-gnome-help-support.diff to GNOME prefix move (#247434) + +------------------------------------------------------------------- +Thu Feb 22 13:38:59 CET 2007 - stbinner@suse.de + +- make previous changes block only active for > 10.2 + +------------------------------------------------------------------- +Wed Feb 21 16:57:10 CET 2007 - dobey@suse.de + +- Remove hicolor scalable sizes patch + Remove the kdelibs installed hicolor index.theme + Require hicolor-icon-theme + Fixes https://bugzilla.novell.com/show_bug.cgi?id=247278 + +------------------------------------------------------------------- +Tue Feb 6 17:49:52 CET 2007 - dmueller@suse.de + +- update 3_5_BRANCH to include latest fixes + +------------------------------------------------------------------- +Fri Feb 2 17:59:42 CET 2007 - stbinner@suse.de + +- fix changes file not incremental + +------------------------------------------------------------------- +Wed Jan 24 11:45:53 CET 2007 - stbinner@suse.de + +- update to fixed 3.5.6 tarball (bubble notification problem) + +------------------------------------------------------------------- +Mon Jan 22 10:57:54 CET 2007 - stbinner@suse.de + +- update to 3.5.6 release: + * khtml: + - implement CSS3 extension text-overflow: ellipsis. + - implement overflow-x/y as many websites use it now. + - several incorrect painting and crash bug fixes + * katepart: + - add actionscript highlighting. + - add some pseudo-elements that khtml supports, but FireFox doesn't. + * kdefx: change asterisks on passwords to bullets. + * several bugfixes within kdeprint, kio and kjs + +------------------------------------------------------------------- +Sun Jan 21 19:48:03 CET 2007 - dmueller@suse.de + +- fix build + +------------------------------------------------------------------- +Sat Jan 20 09:13:18 CET 2007 - aj@suse.de + +- Use avahi. + +------------------------------------------------------------------- +Wed Jan 3 19:51:47 CET 2007 - stbinner@suse.de + +- fix kickoff-drop-shadow.diff to not show drop shadows for all + widgets of application after the first where it really should + +------------------------------------------------------------------- +Mon Dec 11 16:19:56 CET 2006 - dmueller@suse.de + +- fix print dialog size in nondefault configuration (#227465) + +------------------------------------------------------------------- +Fri Nov 24 11:39:22 CET 2006 - dmueller@suse.de + +- fix ktip icon hack breaking translations (#221177) + +------------------------------------------------------------------- +Thu Nov 23 16:01:43 CET 2006 - dmueller@suse.de + +- fix cups only accepting localhost as ipp:// hostname (#222938) +- fix samba sharing dialog accessible even though samba not running + (#159223) + +------------------------------------------------------------------- +Wed Nov 22 20:53:12 CET 2006 - stbinner@suse.de + +- fix kdesu resets locale (#222728) + +------------------------------------------------------------------- +Mon Nov 20 17:18:52 CET 2006 - dmueller@suse.de + +- workaround gdb issue with backtraces in drkonqi (#211982) + +------------------------------------------------------------------- +Sat Nov 18 18:35:12 CET 2006 - stbinner@suse.de + +- fix branch kjs crash regression (kde #137518 & #137358), r602712 + +------------------------------------------------------------------- +Wed Nov 15 23:03:23 CET 2006 - dmueller@suse.de + +- run permissions in %post (#221138) + +------------------------------------------------------------------- +Wed Nov 8 16:47:11 CET 2006 - stbinner@suse.de + +- remove historic "Provides:" (#218798) + +------------------------------------------------------------------- +Mon Nov 6 20:53:48 CET 2006 - dmueller@suse.de + +- add patch for drop shadows in kickoff + +------------------------------------------------------------------- +Sun Nov 5 01:22:15 CET 2006 - stbinner@suse.de + +- fix dnd-utf8-fix.diff + +------------------------------------------------------------------- +Sat Nov 4 19:26:38 CET 2006 - stbinner@suse.de + +- fix drag & drop print with utf-8 name (#194400) + +------------------------------------------------------------------- +Fri Nov 3 15:32:59 CET 2006 - stbinner@suse.de + +- also search $XDG_DATA_DIRS/pixmaps for icons for now (#209385) + +------------------------------------------------------------------- +Tue Oct 31 16:52:52 CET 2006 - coolo@suse.de + +- update 3_5_BRANCH.diff + - even more KHTML fixes + +------------------------------------------------------------------- +Fri Oct 27 09:24:47 CEST 2006 - coolo@suse.de + +- update 3_5_BRANCH diff: + * fix severe kde bug 127662, which made working with KDE so much + less fun + +------------------------------------------------------------------- +Fri Oct 20 14:05:57 CEST 2006 - stbinner@suse.de + +- don't show progress when stating kio_beagle for beagle status + +------------------------------------------------------------------- +Thu Oct 19 12:20:58 CEST 2006 - dmueller@suse.de + +- update admin tarball + +------------------------------------------------------------------- +Tue Oct 17 11:05:20 CEST 2006 - dmueller@suse.de + +- update to 3_5_BRANCH.diff to add workaround + for gdb being unable to produce a valid backtrace + +------------------------------------------------------------------- +Mon Oct 16 00:55:23 CEST 2006 - schwab@suse.de + +- Make sure config.rpath is present. +- Update automake version test. + +------------------------------------------------------------------- +Wed Oct 11 22:47:10 CEST 2006 - stbinner@suse.de + +- update 3_5_BRANCH diff: + * fix crash when scheduling job for an invalid URL (#211541) + * fix cstyle indenter regression in Kate + +------------------------------------------------------------------- +Tue Oct 10 14:42:44 CEST 2006 - dmueller@suse.de + +- update 3_5_BRANCH to fix cups connect timeout (#210260) + +------------------------------------------------------------------- +Sat Oct 7 19:48:38 CEST 2006 - stbinner@suse.de + +- update to the next 3.5.5 release tarball + - fixes a crash in Kate when selecting or undoing + - some safe khtml crash fixes + +------------------------------------------------------------------- +Fri Oct 6 14:17:49 CEST 2006 - coolo@suse.de + +- update to the next 3.5.5 release tarball + - fixes for the kdesu show stopper bug + +------------------------------------------------------------------- +Tue Oct 3 21:03:03 CEST 2006 - dmueller@suse.de + +- update admin tarball (fixes kdelibs3-devel-doc) +- fix rejects in testkhtml (fixes testkhtml build) +- update 3_5_BRANCH to include kdesu fixes (#208272) + +------------------------------------------------------------------- +Tue Oct 3 10:08:35 CEST 2006 - stbinner@suse.de + +- update to 3.5.5 release tarball (no crypto changes) + +------------------------------------------------------------------- +Sun Oct 1 18:38:22 CEST 2006 - stbinner@suse.de + +- update 3.5 branch diff: + fixes in knewstuff, khtml and kjs (date object), kio, kate, + kdecore (iconloader, viewport) and kdeprint (cups) + +------------------------------------------------------------------- +Wed Sep 27 12:41:40 CEST 2006 - dmueller@suse.de + +- move ktradertest to kdelibs3 subpackage + +------------------------------------------------------------------- +Tue Sep 26 13:04:08 CEST 2006 - dmueller@suse.de + +- require sudo for 10.2 (#207884) + +------------------------------------------------------------------- +Wed Sep 20 19:23:05 CEST 2006 - dmueller@suse.de + +- add patch for CUPS 1.2.x support (#204453) +- add Viewport support to KWinModule + +------------------------------------------------------------------- +Tue Sep 19 22:53:21 CEST 2006 - dmueller@suse.de + +- add workaround for Xvfb bug in Xorg 7.1 in testkhtml +- fix kdelibs3-devel-doc build +- use sudo for kdesu authentication + +------------------------------------------------------------------- +Thu Sep 14 14:03:31 CEST 2006 - coolo@suse.de + +- update admin tar ball for python 2.5 +- update 3.5 branch diff: + - khtml, kjs fixes + - QXIMInputContext crash workaround + - cups 1.2: also support unix sockets and IPv6 + - protect urls in kdeprint interface + +------------------------------------------------------------------- +Wed Sep 13 11:29:09 CEST 2006 - stbinner@suse.de + +- fix build for < 10.1 + +------------------------------------------------------------------- +Mon Sep 11 16:28:48 CEST 2006 - ltinkl@suse.cz + +- fix #187601 - Swedish characters doesn't display right using fish in Konqueror + to access another computer over the network +- fix #204734 - recommend ispell, ispell_dictionary and enscript in kdelibs3 + +------------------------------------------------------------------- +Thu Sep 7 18:23:20 CEST 2006 - coolo@suse.de + +- update to 3_5_BRANCH to get latest API additions +- remove meaningless "level a" from the version to report and + use the kdelibs3 release number + +------------------------------------------------------------------- +Sun Sep 3 08:49:51 CEST 2006 - stbinner@suse.de + +- fix build + +------------------------------------------------------------------- +Fri Sep 1 17:24:04 CEST 2006 - llunak@suse.cz + +- Add patches with Xinerama improvements +- show Beagle kfile sidebar entry only if daemon is running + +------------------------------------------------------------------- +Fri Sep 1 14:12:38 CEST 2006 - coolo@suse.de + +- dropped unused patch (which required a suseconfig script anyway) +- updated 3_5_BRANCH to pickup random fixes (kate, khtml) + +------------------------------------------------------------------- +Fri Aug 25 00:40:12 CEST 2006 - dmueller@suse.de + +- build + +------------------------------------------------------------------- +Thu Aug 24 17:40:51 CEST 2006 - llunak@suse.cz + +- Search also $XDG_DATA_DIRS for icons (#192460). + +------------------------------------------------------------------- +Wed Aug 23 10:48:23 CEST 2006 - stbinner@suse.de + +- update 3_5_BRANCH (kate, khtml and translation improvements) + +------------------------------------------------------------------- +Mon Aug 14 11:12:09 CEST 2006 - coolo@suse.de + +- update 3_5_BRANCH.diff to fix "kcmshell background" if both GNOME + and KDE are installed + +------------------------------------------------------------------- +Fri Aug 11 15:54:40 CEST 2006 - dmueller@suse.de + +- update 3_5_BRANCH.diff to include fix for SSL issues + +------------------------------------------------------------------- +Mon Aug 7 16:34:42 CEST 2006 - coolo@suse.de + +- update 3_5_BRANCH.diff to include favicon drawing fix + +------------------------------------------------------------------- +Fri Aug 4 15:19:31 CEST 2006 - stbinner@suse.de + +- #define KDELIBS_SUSE in kdeversion.h +- patch kfile for better beagle:/ support +- fix new X.org font paths for testkhtml + +------------------------------------------------------------------- +Sun Jul 23 21:31:55 CEST 2006 - coolo@suse.de + +- update to KDE 3.5.4: + * several katepart, khtml and kjs fixes + * increased usability of KIO KSSL dialog + * allow KLineEdit show a hint message when empy and not focussed + * update the whitelist of IDNs: add gr, is and org + * kprocess/kcrash: add safety checks for set*uid return values + * kdirwatch: fix crashes caused by inotify code + +------------------------------------------------------------------- +Mon Jul 10 08:45:00 CEST 2006 - stbinner@suse.de + +- fix kdelibs3-devel-doc build + +------------------------------------------------------------------- +Sun Jul 9 21:29:14 CEST 2006 - stbinner@suse.de + +- fix duplicate parameter name in kdemm (#189860) + +------------------------------------------------------------------- +Fri Jun 30 11:32:36 CEST 2006 - dmueller@suse.de + +- update 3_5_BRANCH.diff to include KSSL changes for testing + +------------------------------------------------------------------- +Wed Jun 28 21:38:15 CEST 2006 - dmueller@suse.de + +- update admin tarball for autoconf 2.60 support + +------------------------------------------------------------------- +Tue Jun 27 11:29:39 CEST 2006 - stbinner@suse.de + +- update 3_5_BRANCH.diff for KDirWatch fixes (#188527) + +------------------------------------------------------------------- +Mon Jun 19 11:32:35 CEST 2006 - stbinner@suse.de + +- update 3_5_BRANCH.diff for KLineEdit::setClickMessage(QString) + +------------------------------------------------------------------- +Mon Jun 19 07:57:13 CEST 2006 - coolo@suse.de + +- fix 3.5.3 regression: show football news on spiegel.de + again (KDE #128944) + +------------------------------------------------------------------- +Fri Jun 16 09:02:59 CEST 2006 - coolo@suse.de + +- fix requires for older distributions (#185403) + +------------------------------------------------------------------- +Mon Jun 12 15:39:14 CEST 2006 - stbinner@suse.de + +- Add 3_5_BRANCH.diff update to fix openEXR configure check + +------------------------------------------------------------------- +Mon Jun 12 11:06:33 CEST 2006 - dmueller@suse.de + +- Update admin tarball from SVN + +------------------------------------------------------------------- +Fri Jun 9 17:03:58 CEST 2006 - dmueller@suse.de + +- reenable -Wl,as-needed + +------------------------------------------------------------------- +Fri Jun 2 03:45:05 CEST 2006 - dmueller@suse.de + +- disable -Wl,as-needed as long as binutils are not fixed + +------------------------------------------------------------------- +Mon May 29 09:38:58 CEST 2006 - stbinner@suse.de + +- fix build of kdelibs3-devel-doc + +------------------------------------------------------------------- +Wed May 24 09:50:37 CEST 2006 - stbinner@suse.de + +- update to KDE 3.5.3 + * several fixes to khtml, kio, kdeprint, kdeui and io-slaves + +------------------------------------------------------------------- +Tue May 23 14:51:11 CEST 2006 - ltinkl@suse.cz + +- integrate print preview patch (#133246) + +------------------------------------------------------------------- +Sat May 20 15:11:26 CEST 2006 - adrian@suse.de + +- do not require libdrm-devel for < 10.1 + +------------------------------------------------------------------- +Fri May 19 10:57:01 CEST 2006 - stbinner@suse.de + +- make khtml smooth scrolling acceptable (#175741) + +------------------------------------------------------------------- +Wed May 17 17:31:40 CEST 2006 - dmueller@suse.de + +- fix kerberos handling in kprinter (#154334) + +------------------------------------------------------------------- +Mon May 15 16:49:14 CEST 2006 - stbinner@suse.de + +- update to KDE 3.5.2 and 3_5_BRANCH.diff + * fixes to Kate + * khtml: fixes and performance improvements + * kjs: fixes and performance improvements + +------------------------------------------------------------------- +Mon May 15 11:17:39 CEST 2006 - stbinner@suse.de + +- complete OpenDocument mime type icons (#166917) + +------------------------------------------------------------------- +Tue May 2 10:19:34 CEST 2006 - coolo@suse.de + +- only show kresources in KDE (#170681) + +------------------------------------------------------------------- +Thu Apr 13 16:09:03 CEST 2006 - dmueller@suse.de + +- add dbus-1-qt3-devel to kdelibs3-devel dependencies + +------------------------------------------------------------------- +Thu Apr 13 14:35:49 CEST 2006 - dmueller@suse.de + +- implement mediamanager/hal-unmount support in KIO (#160654) + +------------------------------------------------------------------- +Wed Apr 12 20:42:37 CEST 2006 - dobey@suse.de + +- Add patch to improve default svg sizes in hicolor index.theme + Partial fix of https://bugzilla.novell.com/show_bug.cgi?id=162222 + If kdelibs3 is installed as well and the user uses gnome, this is + needed to prevent breaking the sizes in upstream hicolor which is + included in the gnome-icon-theme package + +------------------------------------------------------------------- +Fri Apr 7 14:57:03 CEST 2006 - dmueller@suse.de + +- fix media:/ urls in kfiledialog +- fix kdirwatch inducted memory corruption, often seen + as kate crashing during save. + +------------------------------------------------------------------- +Mon Apr 3 12:10:17 CEST 2006 - dmueller@suse.de + +- don't package xx locale + +------------------------------------------------------------------- +Tue Mar 28 16:49:08 CEST 2006 - dmueller@suse.de + +- fix xauth being garbled during hostname changes (#147691) +- fix tar extraction error for certain archives (#161312) + +------------------------------------------------------------------- +Tue Mar 28 16:44:52 CEST 2006 - ro@suse.de + +- kdelibs3-devel req: replace mDNSResponder by mDNSResponder-devel + +------------------------------------------------------------------- +Tue Mar 28 10:30:43 CEST 2006 - stbinner@suse.de + +- fix kdesu maybe not working with non-C locale (#152077) + +------------------------------------------------------------------- +Tue Mar 28 01:19:28 CEST 2006 - ro@suse.de + +- fix last patch to apply + +------------------------------------------------------------------- +Mon Mar 27 19:13:24 CEST 2006 - dmueller@suse.de + +- don't rely on KApplication still being there for KMessagebox (#160396) + +------------------------------------------------------------------- +Mon Mar 27 15:34:43 CEST 2006 - coolo@suse.de + +- only assume all KIO protocols if the desktop file specifies KDE + category (#160777) + +------------------------------------------------------------------- +Fri Mar 24 13:38:24 CET 2006 - dmueller@suse.de + +- reduce BuildRequires +- fix pasting of files with name collissions (#160581) + +------------------------------------------------------------------- +Tue Mar 21 17:05:55 CET 2006 - stbinner@suse.de + +- add support for login part of fdo autostart spec draft (#159395) + +------------------------------------------------------------------- +Tue Mar 21 14:49:14 CET 2006 - dmueller@suse.de + +- fix window titles in non-utf8 locale (#131287) +- drop gcc 4.1 miscompile workaround patch + +------------------------------------------------------------------- +Tue Mar 21 11:18:27 CET 2006 - dmueller@suse.de + +- fix pixmap leak in khtml + +------------------------------------------------------------------- +Mon Mar 13 18:59:51 CET 2006 - wstephenson@suse.de + +- add offline mode for http + +------------------------------------------------------------------- +Mon Mar 13 13:01:33 CET 2006 - dmueller@suse.de + +- reduce KDirWatch noiselevel (#157523) + +------------------------------------------------------------------- +Sun Mar 12 13:54:52 CET 2006 - coolo@suse.de + +- fix execution of desktop files without urls (#157130) + +------------------------------------------------------------------- +Tue Mar 7 11:43:24 CET 2006 - wstephenson@suse.de + +- Make sure that if a filesystem is not mounted with acl support, but the + acl support is compiled in, the metadata for acl setting is not set, + thus preventing and error on save, and as a result of that failure to + set permissions for all but the first file (in the multiple files case). + +------------------------------------------------------------------- +Tue Mar 7 09:40:50 CET 2006 - coolo@suse.de + +- pass windows in KRun (#155355) + +------------------------------------------------------------------- +Sat Mar 4 21:04:29 CET 2006 - coolo@suse.de + +- fix application themed icons (k3b toolbar) + +------------------------------------------------------------------- +Wed Mar 1 09:01:33 CET 2006 - coolo@suse.de + +- let kdelibs3-arts recommend kdemultimedia3-arts as it avoids crashes + (#115245) + +------------------------------------------------------------------- +Tue Feb 28 16:59:40 CET 2006 - coolo@suse.de + +- let crystalsvg inherit suseadds, so that we take the gnome and yast + icons in account (#154062) + +------------------------------------------------------------------- +Tue Feb 28 11:52:28 CET 2006 - stbinner@suse.de + +- degrade (untranslatable) kimproxy messagebox to warning + +------------------------------------------------------------------- +Tue Feb 21 12:11:49 CET 2006 - dmueller@suse.de + +- -fPIE is needed for s390x + +------------------------------------------------------------------- +Fri Feb 17 11:53:43 CET 2006 - coolo@suse.de + +- avoid breaking translations (show-distribution.diff) + +------------------------------------------------------------------- +Thu Feb 16 20:06:27 CET 2006 - coolo@suse.de + +- fix encoding problems with kprinter (mangled UTF-8) + +------------------------------------------------------------------- +Wed Feb 15 16:33:37 CET 2006 - ltinkl@suse.cz + +- fix #148215 - kde colorchooser won't save user defined colors +- fix #143263 - [gtk-qt] GTK+ scrollbars have several rendering issues + +------------------------------------------------------------------- +Tue Feb 7 16:02:33 CET 2006 - stbinner@suse.de + +- use XAUTHLOCALHOSTNAME as host name, patch by Lubos (#147691) + +------------------------------------------------------------------- +Mon Feb 6 22:43:23 CET 2006 - dmueller@suse.de + +- lookup desktop translations in desktop_translations catalogue + +------------------------------------------------------------------- +Mon Feb 6 13:27:32 CET 2006 - stbinner@suse.de + +- don't require libdrm-devel for older than SUSE Linux 10.1 + +------------------------------------------------------------------- +Fri Feb 3 13:57:49 CET 2006 - coolo@suse.de + +- add patch to fix KLocale warnings (#146525) + +------------------------------------------------------------------- +Fri Feb 3 12:05:20 CET 2006 - coolo@suse.de + +- update clever menu patch to fix #74524 (by Lubos) + +------------------------------------------------------------------- +Fri Feb 3 12:03:17 CET 2006 - coolo@suse.de + +- replace our own kdontchangethehostname with upstream fix +- debug output corrections + +------------------------------------------------------------------- +Thu Feb 2 09:37:18 CET 2006 - coolo@suse.de + +- fix requires for older distributions +- remove %ifs for < 920 + +------------------------------------------------------------------- +Wed Feb 1 16:36:38 CET 2006 - coolo@suse.de + +- translate servicemenus as they are used now for the medianotifier + (most of them will already have upstream translations) + +------------------------------------------------------------------- +Wed Feb 1 15:10:57 CET 2006 - stbinner@suse.de + +- fix tiny clickable areas of status icons in Konqueror (#146500) + +------------------------------------------------------------------- +Mon Jan 30 11:35:14 CET 2006 - stbinner@suse.de + +- update to 3.5 branch (changes to kprocess, khtml and kate) + +------------------------------------------------------------------- +Sat Jan 28 15:24:20 CET 2006 - coolo@suse.de + +- look for wallpapers into /usr/share/wallpapers + +------------------------------------------------------------------- +Fri Jan 27 20:23:49 CET 2006 - dmueller@suse.de + +- workaround gcc 4.1 miscompile + +------------------------------------------------------------------- +Fri Jan 27 09:29:19 CET 2006 - coolo@suse.de + +- fix patch conflict + +------------------------------------------------------------------- +Fri Jan 27 01:55:42 CET 2006 - mls@suse.de + +- converted neededforbuild to BuildRequires + +------------------------------------------------------------------- +Tue Jan 24 08:23:55 CET 2006 - coolo@suse.de + +- update to 3.5 branch for inotify fixes +- fix the kde_post_install translations + +------------------------------------------------------------------- +Mon Jan 23 16:10:12 CET 2006 - coolo@suse.de + +- translate more files in kde_post_install +- some khtml fixes for 3.5 branch +- disable preview for media:/ content + +------------------------------------------------------------------- +Sat Jan 21 20:23:19 CET 2006 - coolo@suse.de + +- update to KDE 3.5.1 + +------------------------------------------------------------------- +Thu Jan 19 17:35:48 CET 2006 - dmueller@suse.de + +- disable dnotify, we want inotify + +------------------------------------------------------------------- +Wed Jan 11 22:55:02 CET 2006 - stbinner@suse.de + +- update to 3_5_BRANCH (kdirwatch and kio_thumbnail fixes) + +------------------------------------------------------------------- +Mon Jan 9 15:45:42 CET 2006 - mls@suse.de + +- add kde3-devel-packages to devel package, obsoletes macro + +------------------------------------------------------------------- +Sun Jan 8 21:26:58 CET 2006 - stbinner@suse.de + +- update to 3_5_BRANCH (disable inotify on old broken kernels) + +------------------------------------------------------------------- +Thu Jan 5 15:16:40 CET 2006 - llunak@suse.cz + +- update performance patches, use same names like in kdebase-SuSE + +------------------------------------------------------------------- +Tue Dec 20 13:57:48 CET 2005 - dmueller@suse.de + +- add doc/HTML/* to filelist + +------------------------------------------------------------------- +Mon Dec 19 18:34:10 CET 2005 - dmueller@suse.de + +- add locale directories to the file list + +------------------------------------------------------------------- +Mon Dec 19 12:11:20 CET 2005 - coolo@suse.de + +- fix file list + +------------------------------------------------------------------- +Thu Dec 15 11:54:41 CET 2005 - coolo@suse.de + +- update to 3_5_BRANCH for strict aliasing fixes + +------------------------------------------------------------------- +Sun Dec 11 17:11:01 CET 2005 - stbinner@suse.de + +- update to 3_5_BRANCH (KDE #116156 and others) + +------------------------------------------------------------------- +Thu Dec 8 13:05:18 CET 2005 - coolo@suse.de + +- remove work around as binutils were fixed + +------------------------------------------------------------------- +Mon Dec 5 21:59:29 CET 2005 - coolo@suse.de + +- update to 3.5 branch +- add work around for better -Bdirect support + +------------------------------------------------------------------- +Sat Dec 3 15:07:43 CET 2005 - coolo@suse.de + +- build with -Bdirect if available + +------------------------------------------------------------------- +Fri Dec 2 15:00:57 CET 2005 - dmueller@suse.de + +- remove inotify patch, upstream now + +------------------------------------------------------------------- +Fri Dec 2 11:08:51 CET 2005 - dmueller@suse.de + +- create locolor icon dirs as well + +------------------------------------------------------------------- +Thu Dec 1 10:33:17 CET 2005 - dmueller@suse.de + +- create hicolor icon dirs and add them to the file list + +------------------------------------------------------------------- +Wed Nov 30 12:20:10 CET 2005 - coolo@suse.de + +- update to 3.5 branch +- update startup improvement patches +- remove the -O1 LDFLAGS for now + +------------------------------------------------------------------- +Sat Nov 26 10:10:03 CET 2005 - coolo@suse.de + +- update to 3.5.0 + +------------------------------------------------------------------- +Wed Nov 23 18:37:07 CET 2005 - coolo@suse.de + +- update to 3.5 branch + +------------------------------------------------------------------- +Tue Nov 22 08:46:49 CET 2005 - stbinner@suse.de + +- fix testkhtml build + +------------------------------------------------------------------- +Mon Nov 21 15:04:22 CET 2005 - stbinner@suse.de + +- update to 3.5 RC 2 + +------------------------------------------------------------------- +Wed Nov 16 17:41:03 CET 2005 - stbinner@suse.de + +- fix iconloader to not load icons from wrong inherited icon set + +------------------------------------------------------------------- +Wed Nov 16 11:49:43 CET 2005 - uli@suse.de + +- fixed to build on ARM (don't understand why it didn't fail + on other archs, though) + +------------------------------------------------------------------- +Sat Nov 12 11:45:13 CET 2005 - stbinner@suse.de + +- updated admin.tar.bz2 +- no dependency on kdelibs3-arts on older distributions + +------------------------------------------------------------------- +Sat Nov 12 01:33:22 CET 2005 - dmueller@suse.de + +- link with -O1 + +------------------------------------------------------------------- +Thu Nov 10 11:50:37 CET 2005 - stbinner@suse.de + +- update to 3.5 RC 1 + +------------------------------------------------------------------- +Thu Nov 10 00:22:48 CET 2005 - dmueller@suse.de + +- update inotify patch to current branch + +------------------------------------------------------------------- +Fri Nov 4 16:43:20 CET 2005 - coolo@suse.de + +- adding patch to rework autostart handling + +------------------------------------------------------------------- +Tue Oct 18 13:12:42 CEST 2005 - dmueller@suse.de + +- don't filter include hints for BETA +- update 3_5_BRANCH + +------------------------------------------------------------------- +Mon Oct 17 18:08:08 CEST 2005 - dmueller@suse.de + +- reduce debug output in kdelibs-inotify patch + +------------------------------------------------------------------- +Mon Oct 17 14:29:39 CEST 2005 - ke@suse.de + +- Fix xml encoding in contributor entities. + +------------------------------------------------------------------- +Mon Oct 17 11:06:42 CEST 2005 - dmueller@suse.de + +- update admin tarball to fix version number of packages + +------------------------------------------------------------------- +Fri Oct 14 19:06:23 CEST 2005 - dmueller@suse.de + +- add inotify support patch (experimental) + +------------------------------------------------------------------- +Wed Oct 12 11:07:53 CEST 2005 - stbinner@suse.de + +- update to version 3.4.92 (3.5 Beta 2) + +------------------------------------------------------------------- +Mon Oct 10 11:31:20 CEST 2005 - dmueller@suse.de + +- remove includehints from .ui files to fix Qt 3.3.5-caused build + failures + +------------------------------------------------------------------- +Thu Oct 6 12:38:46 CEST 2005 - stbinner@suse.de + +- added flac and flac-devel to neededforbuild (required by the new + libsndfile) + +------------------------------------------------------------------- +Wed Oct 5 18:31:30 CEST 2005 - stbinner@suse.de + +- adapt patches after update to 3.5 branch + +------------------------------------------------------------------- +Wed Oct 5 10:44:54 CEST 2005 - coolo@suse.de + +- update to 3.5 branch for various fixes +- adding inotify support to kdirwatch (kde4 backport) + +------------------------------------------------------------------- +Sat Oct 1 16:43:36 CEST 2005 - coolo@suse.de + +- fix VERBOSE=1 + +------------------------------------------------------------------- +Fri Sep 30 16:08:08 CEST 2005 - coolo@suse.de + +- fix start without sycoca + +------------------------------------------------------------------- +Thu Sep 29 09:01:45 CEST 2005 - dmueller@suse.de + +- ACL support only if > 10.0 + +------------------------------------------------------------------- +Thu Sep 29 01:41:21 CEST 2005 - dmueller@suse.de + +- fix kde_post_install to be robust against errors + +------------------------------------------------------------------- +Wed Sep 28 22:55:46 CEST 2005 - dmueller@suse.de + +- build with ACL support +- use unsermake with VERBOSE=1 to have useful logs + +------------------------------------------------------------------- +Tue Sep 27 16:22:13 CEST 2005 - stbinner@suse.de + +- add patch to allow and use no icon fallback if an icon is missing +- add upstream patch fixing common khtml crash (KDE #112905) + +------------------------------------------------------------------- +Tue Sep 27 14:50:08 CEST 2005 - dmueller@suse.de + +- fix kde_post_install to not abort when no icon is there + +------------------------------------------------------------------- +Tue Sep 27 09:10:19 CEST 2005 - adrian@suse.de + +- do not require mDNSResponder for 9.2 and before + +------------------------------------------------------------------- +Thu Sep 22 14:18:50 CEST 2005 - dmueller@suse.de + +- fix autobuild + +------------------------------------------------------------------- +Wed Sep 21 23:01:32 CEST 2005 - ke@suse.de + +- Add KDE docbook customizations to the SGML resp. XML catalog system [# + 113080]. + +------------------------------------------------------------------- +Wed Sep 21 09:37:16 CEST 2005 - coolo@suse.de + +- fix file file +- fix --no-unsermake support + +------------------------------------------------------------------- +Mon Sep 19 16:38:53 CEST 2005 - stbinner@suse.de + +- update to version 3.4.91 (3.5 Beta) + +------------------------------------------------------------------- +Mon Sep 12 11:01:52 CEST 2005 - stbinner@suse.de + +- fix missing images in ktip (#115954) + +------------------------------------------------------------------- +Fri Sep 9 16:36:53 CEST 2005 - dmueller@suse.de + +- split -devel-docs into a separate noarch package + +------------------------------------------------------------------- +Thu Sep 8 13:05:04 CEST 2005 - bg@suse.de + +- disable --as-needed for hppa (does not build with that option) + +------------------------------------------------------------------- +Thu Sep 8 08:04:42 CEST 2005 - coolo@suse.de + +- let the icon loader find the suse specials independent on the theme + (#115139 and others) + +------------------------------------------------------------------- +Wed Sep 7 21:37:08 CEST 2005 - dmueller@suse.de + +- fix kwallet wizard being 3000px in size (#114954) + +------------------------------------------------------------------- +Wed Sep 7 19:52:20 CEST 2005 - dmueller@suse.de + +- fix kpdf embedding crashes (#114724) +- add forgotten patch for mozilla/dragonegg integration + +------------------------------------------------------------------- +Wed Sep 7 16:05:58 CEST 2005 - dmueller@suse.de + +- improve TIFF detection (#114319) + +------------------------------------------------------------------- +Tue Sep 6 19:53:03 CEST 2005 - dmueller@suse.de + +- fix JPEG2000 support in KImgio (#115324) + +------------------------------------------------------------------- +Tue Aug 23 15:35:24 CEST 2005 - coolo@suse.de + +- add mimetype for OOo base (#72285) + +------------------------------------------------------------------- +Tue Aug 23 13:26:36 CEST 2005 - coolo@suse.de + +- don't play around with xauth when the host name changes + (#98627) + +------------------------------------------------------------------- +Tue Aug 23 03:54:04 CEST 2005 - dmueller@suse.de + +- fix novell.com language selector (#106008) + +------------------------------------------------------------------- +Mon Aug 22 14:20:42 CEST 2005 - coolo@suse.de + +- don't put libkdeinit_*.so in -devel + +------------------------------------------------------------------- +Sun Aug 21 11:42:34 CEST 2005 - coolo@suse.de + +- update from 3.4 branch to fix endless kio_http loop +- fix DPMS check in admin (broke with --enable-new-ldflags) + +------------------------------------------------------------------- +Sat Aug 20 16:06:01 CEST 2005 - coolo@suse.de + +- update from 3.4 branch +- pleasing the libtool check + +------------------------------------------------------------------- +Fri Aug 19 14:12:41 CEST 2005 - adrian@suse.de + +- fix endless loop, if no KDEMM backend can get found (#105772) + +------------------------------------------------------------------- +Fri Aug 19 10:22:14 CEST 2005 - llunak@suse.cz + +- Fix QXEmbed to have focus working properly in yast+kcontrol + (#46495). + +------------------------------------------------------------------- +Thu Aug 18 17:15:40 CEST 2005 - adrian@suse.de + +- do not use KLIRRRRR sound on popular request ... + +------------------------------------------------------------------- +Thu Aug 18 10:18:54 CEST 2005 - coolo@suse.de + +- extend kde_post_install of common_options + +------------------------------------------------------------------- +Wed Aug 17 16:20:44 CEST 2005 - adrian@suse.de + +- move arts dependency to -arts package +- clean up really all SimplePlayers in knotify, might cause a crash + which needs to be debugged + +------------------------------------------------------------------- +Mon Aug 15 04:25:38 CEST 2005 - dmueller@suse.de + +- fix horizontal scrolling in KHTML broken by the smooth scrolling + patch (#76565). + +------------------------------------------------------------------- +Sat Aug 13 16:03:17 CEST 2005 - adrian@suse.de + +- fix memory/handle leak in knotify while playing sound via kdemm + knotify can still hang, if all alsa channels are used. (#97588) +- install icons for BitTorrent MimeType + +------------------------------------------------------------------- +Thu Aug 11 15:58:43 CEST 2005 - coolo@suse.de + +- removing all of the extraicons patch, it doesn't work at all anymore + so we need a new solution (also #85839 I guess) +- updated 3.4 branch to get a fix for a crashing dcopserver and + hanging mounts (#102564) + +------------------------------------------------------------------- +Thu Aug 4 13:33:12 CEST 2005 - sbrabec@suse.cz + +- Removed share/pixmaps links from crystalsvg (#85839). + +------------------------------------------------------------------- +Mon Aug 1 18:37:53 CEST 2005 - coolo@suse.de + +- 3.4 update replacing custom patches + +------------------------------------------------------------------- +Fri Jul 29 17:31:21 CEST 2005 - dmueller@suse.de + +- Update admin tarball to include -Wno-non-virtual-dtor flag +- Fix PIE detection (#98889) +- Fix visibility support + +------------------------------------------------------------------- +Tue Jul 26 11:45:19 CEST 2005 - llunak@suse.cz + +- Fix #96594 (knotify logout timeout) + +------------------------------------------------------------------- +Fri Jul 22 10:51:28 CEST 2005 - coolo@suse.de + +- update to version 3.4.2 + +------------------------------------------------------------------- +Mon May 30 16:19:20 CEST 2005 - adrian@suse.de + +- fix build for released distributions + +------------------------------------------------------------------- +Tue May 24 11:54:02 CEST 2005 - adrian@suse.de + +- update to version 3.4.1 +- set level back to "a" + +------------------------------------------------------------------- +Fri May 13 21:49:46 CEST 2005 - coolo@suse.de + +- init variable + +------------------------------------------------------------------- +Tue Apr 19 10:21:55 CEST 2005 - coolo@suse.de + +- update admin for gcc4 + +------------------------------------------------------------------- +Thu Apr 14 17:17:06 CEST 2005 - sbrabec@suse.cz + +- Added audiofile-devel to neededforbuild. + +------------------------------------------------------------------- +Thu Apr 14 12:07:18 CEST 2005 - adrian@suse.de + +- update to current 3_4_BRANCH + * parallel build order fix +- do not export kdemm video player api, it will not get any + implementation in this way + +------------------------------------------------------------------- +Wed Apr 13 11:34:45 CEST 2005 - adrian@suse.de + +- update to current 3_4_BRANCH +- increase patch Level to "c" +- export kdemm mixer interface + +------------------------------------------------------------------- +Fri Apr 8 11:46:38 CEST 2005 - adrian@suse.de + +- port kfilepreview to kdemm +- extra arts subpackages, aRts is optional now ! +- add DNS resolver fix from 3_4_BRANCH + +------------------------------------------------------------------- +Mon Apr 4 14:42:49 CEST 2005 - adrian@suse.de + +- add missing #include to fix compile of kdemm players + +------------------------------------------------------------------- +Mon Apr 4 11:01:08 CEST 2005 - coolo@suse.de + +- enable features for new ld + +------------------------------------------------------------------- +Fri Apr 1 11:54:56 CEST 2005 - adrian@suse.de + +- fix build with gcc 4, exporting kdemm classes + +------------------------------------------------------------------- +Thu Mar 31 13:46:09 CEST 2005 - adrian@suse.de + +- first steps to make arts optional: + * add experimental kdemm support for post 9.3 + * use kdemm instead of arts in knotify + * TODO: port kfileaudiopreview to kdemm +- do not overrule CFLAGS from spec files + +------------------------------------------------------------------- +Wed Mar 30 16:10:39 CEST 2005 - coolo@suse.de + +- disable visibility when compiled with debug (for testkhtml) + +------------------------------------------------------------------- +Mon Mar 28 18:46:22 CEST 2005 - schwab@suse.de + +- common_options: also set CFLAGS. + +------------------------------------------------------------------- +Sat Mar 19 14:54:24 CET 2005 - aj@suse.de + +- Integrate patch from Waldo Bastian for #71888 to fix + accessing of Netscape bookmarks in konqueror. + +------------------------------------------------------------------- +Fri Mar 18 13:40:41 CET 2005 - adrian@suse.de + +- fix aspell support +- fixes from 3_4_BRANCH + * toolbar configuration fix (#73662) + * IPv6 blacklist io-slave fix + * a khtml crash fix with innerweb + * redirection fix to uppercase written top level domains + +------------------------------------------------------------------- +Tue Mar 15 13:30:48 CET 2005 - adrian@suse.de + +- fix kspell recursion, visible in kbabel (#72773 by Waldo) + +------------------------------------------------------------------- +Mon Mar 14 15:32:48 CET 2005 - coolo@suse.de + +- take susetranslations.mo into account for translations + +------------------------------------------------------------------- +Mon Mar 14 14:01:15 CET 2005 - coolo@suse.de + +- fix smoothscrolling patch (Lubos) +- adding some more kate fixes from branch + +------------------------------------------------------------------- +Fri Mar 11 14:55:14 CET 2005 - coolo@suse.de + +- some more fixes from 3_4_BRANCH + +------------------------------------------------------------------- +Tue Mar 8 13:47:31 CET 2005 - adrian@suse.de + +- various updates from cvs + * missing kate initialising (Lubos) + * kcmmodule crash fixed (Waldo) + * khtml fixes + +------------------------------------------------------------------- +Mon Mar 7 16:55:17 CET 2005 - adrian@suse.de + +- fix progress bar (from KDE cvs) + +------------------------------------------------------------------- +Mon Mar 7 14:32:27 CET 2005 - coolo@suse.de + +- add fix for broken webdav URLs (#59203) + +------------------------------------------------------------------- +Sat Mar 5 10:19:48 CET 2005 - adrian@suse.de + +- fixes from KDE cvs: + * support Netware based ftp servers in kio_ftp + * fix proxy socks support + +------------------------------------------------------------------- +Sat Mar 5 09:22:49 CET 2005 - adrian@suse.de + +- update to version 3.4 final (not final try) + +------------------------------------------------------------------- +Wed Mar 2 10:01:46 CET 2005 - adrian@suse.de + +- update scrollview patch to BC version +- move Requires: kdelibs3_doc to kdebase3 + +------------------------------------------------------------------- +Sat Feb 26 10:34:21 CET 2005 - adrian@suse.de + +- update to 3.4.0 RC1 + +------------------------------------------------------------------- +Thu Feb 24 13:16:10 CET 2005 - adrian@suse.de + +- update to version 3.4.0 RC1 try 1 + +------------------------------------------------------------------- +Tue Feb 22 16:51:01 CET 2005 - adrian@suse.de + +- update to current CVS +- add soft scrolling patch from Allan Sandfeld + +------------------------------------------------------------------- +Tue Feb 22 10:47:34 CET 2005 - adrian@suse.de + +- remove secure ICE patch again, it is part of CVS now + +------------------------------------------------------------------- +Mon Feb 21 11:26:34 CET 2005 - adrian@suse.de + +- update to current CVS + +------------------------------------------------------------------- +Fri Feb 18 11:18:03 CET 2005 - adrian@suse.de + +- update to current CVS + +------------------------------------------------------------------- +Wed Feb 16 17:53:31 CET 2005 - adrian@suse.de + +- remove floppy:/ from file dialog again, media:/ is enough + +------------------------------------------------------------------- +Mon Feb 14 14:41:13 CET 2005 - adrian@suse.de + +- update from CVS +- add rubberband patch from Andre Moreira Magalhaes, disabled by + default + +------------------------------------------------------------------- +Mon Feb 14 11:49:33 CET 2005 - adrian@suse.de + +- make it possible to disable IDN support via KDE_NO_IDN enviroment + variable + +------------------------------------------------------------------- +Sun Feb 13 10:26:22 CET 2005 - coolo@suse.de + +- fix do_make -j15 + +------------------------------------------------------------------- +Fri Feb 11 10:29:44 CET 2005 - adrian@suse.de + +- update from CVS + +------------------------------------------------------------------- +Wed Feb 9 15:57:01 CET 2005 - adrian@suse.de + +- apply patch from Waldo to set ICE sockets to 0700 permissions + +------------------------------------------------------------------- +Mon Feb 7 11:28:36 CET 2005 - adrian@suse.de + +- update to beta 2 + +------------------------------------------------------------------- +Sat Jan 29 10:59:09 CET 2005 - coolo@suse.de + +- fix --no-unsermake + +------------------------------------------------------------------- +Fri Jan 28 16:53:21 CET 2005 - meissner@suse.de + +- removed setuid root binary kgrantpty which is not needed + since 8.1... + +------------------------------------------------------------------- +Fri Jan 28 15:11:47 CET 2005 - adrian@suse.de + +- update to current snapshot +- use external unsermake now + +------------------------------------------------------------------- +Tue Jan 25 15:41:07 CET 2005 - adrian@suse.de + +- adapt file dialog for media slave and remove floppy icon + +------------------------------------------------------------------- +Mon Jan 24 21:05:47 CET 2005 - coolo@suse.de + +- update to current snapshot (for testkhtml) + +------------------------------------------------------------------- +Thu Jan 20 16:53:31 CET 2005 - adrian@suse.de + +- update to current snapshot + +------------------------------------------------------------------- +Sat Jan 15 21:05:52 CET 2005 - schwab@suse.de + +- Use : in permissions file. + +------------------------------------------------------------------- +Fri Jan 14 14:58:39 CET 2005 - adrian@suse.de + +- update to current HEAD +- disable limit-image-size patch, since it got also disabled in qt + +------------------------------------------------------------------- +Thu Jan 13 15:05:49 CET 2005 - coolo@suse.de + +- update to HEAD to get kdebase HEAD compiled + +------------------------------------------------------------------- +Mon Jan 10 11:56:08 CET 2005 - adrian@suse.de + +- fix kprinter.h header, this fixes the build of kdebindings + +------------------------------------------------------------------- +Mon Jan 10 09:37:17 CET 2005 - coolo@suse.de + +- fix permissions of do_make + +------------------------------------------------------------------- +Sun Jan 9 10:01:53 CET 2005 - adrian@suse.de + +- final 3.4 beta 1 + +------------------------------------------------------------------- +Tue Jan 4 11:49:56 CET 2005 - coolo@suse.de + +- update to 3.4 beta 1 (first snapshot) + +------------------------------------------------------------------- +Fri Dec 17 09:24:58 CET 2004 - coolo@suse.de + +- let -Wl, pass in $LDFLAGS +- fix quoting in make wrapper + +------------------------------------------------------------------- +Thu Dec 16 21:32:19 CET 2004 - hvogel@suse.de + +- change icon to about_kde. go comes from another package and + we dont want kdelibs require kdebase + +------------------------------------------------------------------- +Wed Dec 15 12:44:48 CET 2004 - coolo@suse.de + +- make the unsermake/automake switch more clever + +------------------------------------------------------------------- +Tue Dec 14 11:11:05 CET 2004 - coolo@suse.de + +- fix unsermake $PATH for packages that build several sources + +------------------------------------------------------------------- +Mon Dec 13 14:56:19 CET 2004 - coolo@suse.de + +- remove debug flag from configure +- replaced unsermake with latest greatest + +------------------------------------------------------------------- +Wed Dec 8 13:25:36 CET 2004 - adrian@suse.de + +- update to official 3.4 alpha 1 + +------------------------------------------------------------------- +Mon Dec 6 15:17:54 CET 2004 - adrian@suse.de + +- update to KDE head snapshot + +------------------------------------------------------------------- +Fri Dec 3 15:19:22 CET 2004 - adrian@suse.de + +- update to the final tar bal of 3.3.2 + +------------------------------------------------------------------- +Mon Nov 29 20:29:55 CET 2004 - adrian@suse.de + +- update to version 3.3.2 + +------------------------------------------------------------------- +Fri Nov 26 15:57:47 CET 2004 - adrian@suse.de + +- extend KDE_VERSION_STRING with extra Level information to tell + information about applied patches +- extend distribution string with distribution version +- show distribution version in about dialog + +------------------------------------------------------------------- +Thu Nov 25 11:44:39 CET 2004 - adrian@suse.de + +- correct gnome icon path to hicolor + +------------------------------------------------------------------- +Wed Nov 24 13:49:09 CET 2004 - adrian@suse.de + +- accept also Python 2.4 in configure checks + +------------------------------------------------------------------- +Thu Nov 18 15:38:38 CET 2004 - ro@suse.de + +- use kerberos-devel-packages + +------------------------------------------------------------------- +Mon Nov 15 15:37:37 CET 2004 - adrian@suse.de + +- include /opt/kde3/share/icons/crystalsvg/22x22/apps path + +------------------------------------------------------------------- +Wed Nov 10 12:52:20 CET 2004 - ro@suse.de + +- permission handling fixes + +------------------------------------------------------------------- +Wed Nov 10 11:14:50 CET 2004 - coolo@suse.de + +- moving khtml 3.3 diff in a seperate diff (now that the 3.3 branch + contains a lot of updates for it) + +------------------------------------------------------------------- +Mon Nov 8 16:33:07 CET 2004 - coolo@suse.de + +- renable patch to limit image size (#43841) + +------------------------------------------------------------------- +Wed Nov 3 15:19:43 CET 2004 - coolo@suse.de + +- updated khtml again to fix compilation problem with gcc 4 + +------------------------------------------------------------------- +Wed Nov 3 11:12:57 CET 2004 - coolo@suse.de + +- use HTML rendering engine from CVS head (preparing backport for + 3.3.2) + +------------------------------------------------------------------- +Tue Oct 12 11:25:02 CEST 2004 - adrian@suse.de + +- update to version 3.3.1 + +------------------------------------------------------------------- +Wed Oct 6 14:30:24 CEST 2004 - adrian@suse.de + +- fix crash in libkabc, when importing an ldif file (#46882) + +------------------------------------------------------------------- +Tue Oct 5 10:17:05 CEST 2004 - adrian@suse.de + +- do also find gnome pages when using "en_*" locale, instead of + "C" or "en" (#45480) + +------------------------------------------------------------------- +Sat Oct 2 08:40:00 CEST 2004 - adrian@suse.de + +- try to avoid klauncher registration with a wrong dcop name. + this can happen, if two KDE application gets started at the + same time, without having running kdeinit before. + patch by Waldo and solves problems in Gnome hopefully (#46355) +- khtml rendering fix for nvidia.com + +------------------------------------------------------------------- +Fri Oct 1 16:58:11 CEST 2004 - adrian@suse.de + +- fix html frame parent problem, fixes www.map24.de (#44156) + +------------------------------------------------------------------- +Thu Sep 30 09:09:07 CEST 2004 - adrian@suse.de + +- fix nasty error startup messages +- fix two minor javascript bugs +- fix Netscape bookmarks wrapping (by Waldo, #45917) + +------------------------------------------------------------------- +Sun Sep 26 18:04:31 CEST 2004 - adrian@suse.de + +- update to current 3_3_BRANCH + * translation updates + * kpart handling fixes + +------------------------------------------------------------------- +Mon Sep 20 10:07:28 CEST 2004 - adrian@suse.de + +- update to current 3_3_BRANCH +- add fix for KDE file dialog on 64bit + (crash when called by 32bit application, by Waldo #44995) + +------------------------------------------------------------------- +Thu Sep 16 17:11:22 CEST 2004 - adrian@suse.de + +- use kwallet fix from Arvin + (update external hash keys immediatly #43973) + +------------------------------------------------------------------- +Wed Sep 15 17:18:45 CEST 2004 - adrian@suse.de + +- disable kwallet fix, it is known to create a memory leak + +------------------------------------------------------------------- +Tue Sep 14 15:23:11 CEST 2004 - adrian@suse.de + +- update to current branch + * khtml fixes + +------------------------------------------------------------------- +Fri Sep 10 13:47:48 CEST 2004 - adrian@suse.de + +- update to current branch +- apply fix for kwallet from HEAD, needed for kinternet + +------------------------------------------------------------------- +Tue Sep 7 11:28:30 CEST 2004 - adrian@suse.de + +- update to current BRANCH +- more silence during kbuildsycoca run +- disable default unsermake in beta +- remove mad from nfb + +------------------------------------------------------------------- +Fri Sep 3 17:29:22 CEST 2004 - coolo@suse.de + +- fixing the fix ;( + +------------------------------------------------------------------- +Fri Sep 3 14:20:15 CEST 2004 - coolo@suse.de + +- unsermake: do not remove the .deps file before regenerating it to + avoid make races + +------------------------------------------------------------------- +Mon Aug 30 08:36:57 CEST 2004 - adrian@suse.de + +- compile with explicit --disable-debug to get rid off asserts + +------------------------------------------------------------------- +Sat Aug 28 08:22:23 CEST 2004 - adrian@suse.de + +- update to current BRANCH +- add gnome help page support for khelpcenter(by clahey, #44061) + +------------------------------------------------------------------- +Mon Aug 23 16:31:13 CEST 2004 - adrian@suse.de + +- disable patch to limit image sizes in khtml, it causes crashes + atm + +------------------------------------------------------------------- +Fri Aug 20 13:02:26 CEST 2004 - adrian@suse.de + +- update to current 3_3_BRANCH +- add patch from clahey to support gnome help pages better in khelpcenter + +------------------------------------------------------------------- +Wed Aug 18 12:15:58 CEST 2004 - adrian@suse.de + +- move debug mode switch to common_options + +------------------------------------------------------------------- +Tue Aug 17 08:12:49 CEST 2004 - adrian@suse.de + +- add patch from Waldo to make it possible to limit the max image + size within QImage. (#43841) + +------------------------------------------------------------------- +Mon Aug 16 15:32:44 CEST 2004 - adrian@suse.de + +- update to version 3.3.0 final + +------------------------------------------------------------------- +Mon Aug 16 15:32:44 CEST 2004 - adrian@suse.de + +- update to version 3.3.0 final +- use "make compile" + +------------------------------------------------------------------- +Fri Aug 13 10:37:43 CEST 2004 - coolo@suse.de + +- removed 3_2_BRANCH.diff +- build with unsermake + +------------------------------------------------------------------- +Tue Aug 10 08:58:24 CEST 2004 - adrian@suse.de + +- update to version 3.3.0 RC2 +- split doc tools into subpackage to make it possible to use + a different theming for special products + +------------------------------------------------------------------- +Mon Aug 2 09:21:16 CEST 2004 - adrian@suse.de + +- accept automake 1.9 + +------------------------------------------------------------------- +Mon Jul 19 10:35:33 CEST 2004 - adrian@suse.de + +- update to version 3.2.92 (KDE 3.3 beta 2) + +------------------------------------------------------------------- +Tue Jun 29 12:01:28 CEST 2004 - adrian@suse.de + +- do not remove .cpp/.h files, if they are not really generated + by uic + +------------------------------------------------------------------- +Mon Jun 28 22:32:49 CEST 2004 - adrian@suse.de + +- enable OpenEXR support + +------------------------------------------------------------------- +Mon Jun 28 09:30:57 CEST 2004 - adrian@suse.de + +- update to version 3.3 beta 1 + * usual patch cleanup + +------------------------------------------------------------------- +Mon May 31 20:29:40 CEST 2004 - adrian@suse.de + +- update to version 3.2.3 + * remove obsolete patches + +------------------------------------------------------------------- +Wed May 12 09:21:00 CEST 2004 - adrian@suse.de + +- update user_profile patch +- add 3.3 button layout patch + +------------------------------------------------------------------- +Thu Apr 29 08:59:13 CEST 2004 - coolo@suse.de + +- let unsermake rewrite install rules with $DESTDIR +- use unsermake for kdelibs and parallel build + +------------------------------------------------------------------- +Sat Apr 24 18:17:07 CEST 2004 - sndirsch@suse.de + +- use xorg-x11 packages + +------------------------------------------------------------------- +Tue Apr 20 14:12:35 CEST 2004 - adrian@suse.de + +- use admin tar ball from HEAD +- extend kde-config to export library suffix and check for it in + configure +- add user profiles patch from Waldo + +------------------------------------------------------------------- +Sun Apr 18 14:56:17 CEST 2004 - coolo@suse.de + +- updated unsermake + +------------------------------------------------------------------- +Wed Apr 14 11:16:33 CEST 2004 - adrian@suse.de + +- update to version 3.2.2 + +------------------------------------------------------------------- +Tue Apr 13 17:16:34 CEST 2004 - adrian@suse.de + +- adding utempter to neededforbuild. (#38833) + (this does not lead into a new runtime requirement) + +------------------------------------------------------------------- +Sun Apr 4 21:08:43 CEST 2004 - adrian@suse.de + +- do only show important items in file dialog (#38269) + +------------------------------------------------------------------- +Thu Apr 1 10:39:59 CEST 2004 - coolo@suse.de + +- replacing brute force shut up with a real log file in kconf_update + (Waldo) + +------------------------------------------------------------------- +Wed Mar 31 16:40:14 CEST 2004 - adrian@suse.de + +- fix 3_2_BRANCH patch + +------------------------------------------------------------------- +Tue Mar 30 17:43:16 CEST 2004 - adrian@suse.de + +- enable incremental sycoca creation again + +------------------------------------------------------------------- +Tue Mar 30 10:45:07 CEST 2004 - coolo@suse.de + +- fix desktop icon renaming (Waldo) +- fixing kconf_update for kwin (Waldo,#36682) + +------------------------------------------------------------------- +Mon Mar 29 10:19:55 CEST 2004 - coolo@suse.de + +- handle cups printers that insist on being different (#37011) + +------------------------------------------------------------------- +Sat Mar 27 09:53:52 CET 2004 - adrian@suse.de + +- fix regression in khtml parser with latest update (by coolo) + +------------------------------------------------------------------- +Fri Mar 26 16:47:48 CET 2004 - adrian@suse.de + +- more silence (Waldo, Dirk and Adrian) +- apply fix for possible hanging library unloading (Lubos) +- fix regression in khtml parser with latest update (coolo) +- fix for hidden cookie windows below main windows (Lubos) +- fix icons in kcontrol + +------------------------------------------------------------------- +Tue Mar 23 08:06:52 CET 2004 - adrian@suse.de + +- update to current 3_2_BRANCH + * khtml fixes + o recursion protection + o official patch for kio urls + o crash fix (happened with Quanta) + o urls with trailing / are handled as directories + o fix for some flash enabled sites (#36656) +- fix fileshare.diff, make us compatible to KDE again +- call %run_permissions +- apply fix for utf8 localisation problem in kdehelp (coolo, #36681) +- adjust yast icon path to the new location +- fix missing include in fontconfig-reverse-lookup patch +- remove special settings for s390 and alpha + (leaded into new problems like implicit declarations of functions) + +------------------------------------------------------------------- +Mon Mar 22 13:22:57 CET 2004 - adrian@suse.de + +- update to current 3_2_BRANCH + * fixes security leak in kdeprint (#36663) +- add patch from Waldo to disallow kio urls in khtml + +------------------------------------------------------------------- +Sun Mar 21 21:32:47 CET 2004 - adrian@suse.de + +- do not trigger mount with konq view of /media/ (by Lubos) + +------------------------------------------------------------------- +Sun Mar 21 11:08:11 CET 2004 - adrian@suse.de + +- update to current 3_2_BRANCH + * fixed linebreak patch +- fix deactivated patches and remove obsolete ones +- suppress sycoca warnings about missing mimetypes + +------------------------------------------------------------------- +Mon Mar 15 16:46:24 CET 2004 - coolo@suse.de + +- another update to 3_2_BRANCH (kdeprint layout fixes and kate repaint problems) + +------------------------------------------------------------------- +Sat Mar 13 12:50:59 CET 2004 - coolo@suse.de + +- adding patch to force line breaks in translation of desktop files + (Arbeits-\nplatz) + +------------------------------------------------------------------- +Wed Mar 10 23:28:21 CET 2004 - coolo@suse.de + +- kill dcopserver explicitly + +------------------------------------------------------------------- +Wed Mar 10 10:39:42 CET 2004 - coolo@suse.de + +- use current 3_2_BRANCH (#35070) + +------------------------------------------------------------------- +Mon Mar 8 11:20:24 CET 2004 - adrian@suse.de + +- use current 3_2_BRANCH +- disable debug mode +- find YaST icons + +------------------------------------------------------------------- +Sun Mar 7 13:06:48 CET 2004 - coolo@suse.de + +- fixing pnome -> gnome typo +- adding libidn-devel as requirement for devel subpackage + +------------------------------------------------------------------- +Sat Mar 6 12:46:33 CET 2004 - coolo@suse.de + +- older distributions have different layouts for gnome. Avoid + dangling symlinks + +------------------------------------------------------------------- +Fri Mar 5 16:35:39 CET 2004 - coolo@suse.de + +- fixing build + +------------------------------------------------------------------- +Fri Mar 5 14:53:16 CET 2004 - coolo@suse.de + +- restart cups through rcscripts instead of kill magic (#32787) +- final update for 3.2.1 + +------------------------------------------------------------------- +Thu Mar 4 14:45:52 CET 2004 - coolo@suse.de + +- require libidn hard to avoid problems e.g. on lib64 + +------------------------------------------------------------------- +Wed Mar 3 18:26:46 CET 2004 - adrian@suse.de + +- removed gnome packages from neededforbuild + +------------------------------------------------------------------- +Tue Mar 2 10:25:48 CET 2004 - coolo@suse.de + +- update tarball again for khtml regression fixes + +------------------------------------------------------------------- +Tue Mar 2 10:23:33 CET 2004 - coolo@suse.de + +- fix build + +------------------------------------------------------------------- +Mon Mar 1 10:34:30 CET 2004 - coolo@suse.de + +- update to version 3.2.1 +- reworked build process + +------------------------------------------------------------------- +Mon Mar 1 10:34:30 CET 2004 - coolo@suse.de + +- update to version 3.2.1 + +------------------------------------------------------------------- +Wed Feb 25 22:01:46 CET 2004 - adrian@suse.de + +- update to current 3_2_BRANCH +- add -g as compiler option for beta test + +------------------------------------------------------------------- +Wed Feb 25 20:42:15 CET 2004 - adrian@suse.de + +- do not build on slow architectures + +------------------------------------------------------------------- +Mon Feb 23 15:40:21 CET 2004 - adrian@suse.de + +- do not use DNotify or FAM on /media +- long poll intervall for /media +- include GnomeCrystal icons and general pixmaps path + +------------------------------------------------------------------- +Mon Feb 23 08:05:47 CET 2004 - coolo@suse.de + +- initial package + +------------------------------------------------------------------- +Mon Feb 23 08:05:26 CET 2004 - coolo@suse.de + +- update 3_2_BRANCH +- update HEAD khtml +- adding testkhtml.spec + +------------------------------------------------------------------- +Sat Feb 21 18:35:28 CET 2004 - adrian@suse.de + +- add gnome and default icon pathes +- fix ssh.protcol installation +- fix syntax error in common_options + +------------------------------------------------------------------- +Fri Feb 20 09:29:56 CET 2004 - coolo@suse.de + +- use khtml from HEAD (to be backported) +- update admin tar ball +- take out testing khtml from the main page + +------------------------------------------------------------------- +Wed Feb 18 17:40:33 CET 2004 - adrian@suse.de + +- update to current 3_2_BRANCH + * ssh support to ktelnetservice +- remove pcsc-lite from neededforbuild +- disable test_regression for now + +------------------------------------------------------------------- +Wed Feb 11 08:50:03 CET 2004 - coolo@suse.de + +- fixing build on s390 + +------------------------------------------------------------------- +Wed Feb 11 08:06:07 CET 2004 - adrian@suse.de + +- update to current 3_2_BRANCH + +------------------------------------------------------------------- +Thu Jan 29 14:06:43 CET 2004 - adrian@suse.de + +- apply fix for printing with QT 3.3 + +------------------------------------------------------------------- +Mon Jan 26 23:25:56 CET 2004 - adrian@suse.de + +- update to version 3.2.0 final + +------------------------------------------------------------------- +Fri Jan 23 18:44:08 CET 2004 - adrian@suse.de + +- update to current 3_2_BRANCH + +------------------------------------------------------------------- +Wed Jan 21 17:28:14 CET 2004 - adrian@suse.de + +- disable sse and mmx usage on 9.0 (compiler bug) +- remove autom4te.cache during update_admin + (automake 2.8 can run into error with <2.8 cache data) + +------------------------------------------------------------------- +Wed Jan 21 12:14:49 CET 2004 - adrian@suse.de + +- update to current BRANCH to get various khtml fixes + +------------------------------------------------------------------- +Sun Jan 18 21:43:52 CET 2004 - adrian@suse.de + +- update to version 3.1.95 ( KDE 3.2 RC1 ) + +------------------------------------------------------------------- +Fri Jan 16 17:10:30 CET 2004 - adrian@suse.de + +- implement short menus again + +------------------------------------------------------------------- +Tue Jan 13 13:32:16 CET 2004 - adrian@suse.de + +- update to snapshot 2004011309 +- disable debug + +------------------------------------------------------------------- +Tue Jan 6 19:20:55 CET 2004 - adrian@suse.de + +- update to snapshot 2004010618 +- add kde_post_install function to common_options +- remove pregenerated files from uic during update_admin + +------------------------------------------------------------------- +Thu Dec 18 14:12:16 CET 2003 - adrian@suse.de + +- update to snapshot 2003121718 + +------------------------------------------------------------------- +Mon Dec 15 14:18:36 CET 2003 - adrian@suse.de + +- update to snapshot 2003121511 +- accept automake 1.8 + +------------------------------------------------------------------- +Wed Dec 10 14:30:45 CET 2003 - adrian@suse.de + +- update to snapshot 2003121013 + +------------------------------------------------------------------- +Tue Dec 9 13:40:37 CET 2003 - adrian@suse.de + +- package test_regression for testing in khtmltest package + +------------------------------------------------------------------- +Tue Dec 2 11:10:27 CET 2003 - adrian@suse.de + +- use beta2, take two tar ball + +------------------------------------------------------------------- +Mon Dec 1 22:00:31 CET 2003 - adrian@suse.de + +- update to 3.1.94 ( KDE 3.2 beta 2 ) + +------------------------------------------------------------------- +Sun Nov 23 20:44:24 CET 2003 - adrian@suse.de + +- update to snapshot 2003112315 + * build again with alsa 1.0 + +------------------------------------------------------------------- +Thu Nov 13 23:14:30 CET 2003 - adrian@suse.de + +- update to new snapshot from 2003102409 +- add jasper (JPEG2000) support + +------------------------------------------------------------------- +Wed Oct 29 09:59:01 CET 2003 - adrian@suse.de + +- update to KDE 3.2 beta1 + +------------------------------------------------------------------- +Tue Oct 21 09:34:51 CEST 2003 - adrian@suse.de + +- update to snapshot 2003102008 + +------------------------------------------------------------------- +Sun Oct 5 14:31:09 CEST 2003 - adrian@suse.de + +- update to snapshot 2003100510 + +------------------------------------------------------------------- +Wed Oct 1 09:59:21 CEST 2003 - adrian@suse.de + +- update to snapshot 3.1.92_2003093021 + * should fix building of KDE 2.2 documents in other packages + +------------------------------------------------------------------- +Mon Sep 29 15:59:09 CEST 2003 - adrian@suse.de + +- update to version 1.1.92 (KDE 3.2 alpha 2) + +------------------------------------------------------------------- +Tue Sep 23 09:42:45 CEST 2003 - adrian@suse.de + +- apply crash fix (happens in kdesktop) from Marcus Meissner + happened with a (most likely broken) Windows Driver CD (#31568) + +------------------------------------------------------------------- +Tue Sep 16 11:40:25 CEST 2003 - adrian@suse.de + +- fix application/x-ogg icon + +------------------------------------------------------------------- +Sat Sep 13 10:37:36 CEST 2003 - adrian@suse.de + +- fix Unimportant routines really finaly +- Require pcre-devel only for > 8.2 +- make menu sorting a routine which can be called from kicker +- hide Documents folder entry in kfiledialog for > 8.2 + +------------------------------------------------------------------- +Fri Sep 12 13:51:12 CEST 2003 - coolo@suse.de + +- add requirement on pcre-devel as libkhtml.la contains a reference + to /usr/lib/libpcreposix.la + +------------------------------------------------------------------- +Thu Sep 11 15:50:09 CEST 2003 - coolo@suse.de + +- give a more correct error message (as good as we can get it out + of cups) for forbidden actions (#29225) + +------------------------------------------------------------------- +Thu Sep 11 09:20:07 CEST 2003 - adrian@suse.de + +- use updated 3.1.4 tar ball + * certifcate dialog will reappear after typing wrong password +- add BRANCH patch to fix kdesktop icon name renaming and a crash fix +- honor caching in KServiceGroup::SuSEchildCount() + +------------------------------------------------------------------- +Tue Sep 9 02:59:23 CEST 2003 - adrian@suse.de + +- add YaST icon path + +------------------------------------------------------------------- +Tue Sep 9 00:14:46 CEST 2003 - adrian@suse.de + +- update to version 3.1.4 + +------------------------------------------------------------------- +Mon Sep 8 15:27:08 CEST 2003 - adrian@suse.de + +- implement KServiceGroup::SuSEchildCount() to ignore + X-SuSE-Unimportant entries + +------------------------------------------------------------------- +Fri Sep 5 12:10:12 CEST 2003 - adrian@suse.de + +- add check for SuSE-Unimportant also in kservicegroup class +- add support for X-SuSE-GeneralDescription and ShortMenu +- update 3_1_BRANCH +- add kmimelist application for debugging +- add optioninal X-KDE-InitialPreference Tag, if we want + different settings in Gnome + +------------------------------------------------------------------- +Wed Sep 3 17:44:28 CEST 2003 - adrian@suse.de + +- update xdg patch from Waldo to get compatible with 3.2 again +- update 3_1_BRANCH to get klistview fixes + +------------------------------------------------------------------- +Tue Sep 2 12:52:02 CEST 2003 - adrian@suse.de + +- include default pixmaps path +- drop broken styles, which will also disappear in KDE 3.2 +- add shut up patch from coolo + +------------------------------------------------------------------- +Mon Sep 1 14:38:52 CEST 2003 - adrian@suse.de + +- update to current 3_1_BRANCH +- implement X-SuSE-Unimportant support + +------------------------------------------------------------------- +Fri Aug 29 17:24:16 CEST 2003 - adrian@suse.de + +- update to current 3_1_BRANCH for qt 3.2.1 fixes + +------------------------------------------------------------------- +Tue Aug 26 08:16:04 CEST 2003 - adrian@suse.de + +- apply fix from Lubos for maximised windows of GTK apps + +------------------------------------------------------------------- +Sun Aug 24 23:06:19 CEST 2003 - adrian@suse.de + +- redo last fix in a more often working way. + but maybe we try to fix support for broken svg's atm ... + +------------------------------------------------------------------- +Sun Aug 24 12:14:29 CEST 2003 - adrian@suse.de + +- fix svgicon engine to render karbon svg's. +- install ksvgiconengine with header(internal) to get used by + svg thumbnail generator + +------------------------------------------------------------------- +Sat Aug 23 22:34:40 CEST 2003 - adrian@suse.de + +- update to 3_1_BRANCH + +------------------------------------------------------------------- +Wed Aug 20 17:19:57 CEST 2003 - schwab@suse.de + +- Fix weird character in common_options script. + +------------------------------------------------------------------- +Wed Aug 20 15:56:59 CEST 2003 - adrian@suse.de + +- small bugfix from Waldo for XDG + +------------------------------------------------------------------- +Tue Aug 19 12:15:18 CEST 2003 - adrian@suse.de + +- fix compile with gcc 3.3.1 + +------------------------------------------------------------------- +Wed Aug 13 11:34:11 CEST 2003 - adrian@suse.de + +- fix lib64 plugin support +- use current 3_1_BRANCH +- clean up spec file +- package /opt/kde3/include in main package + +------------------------------------------------------------------- +Tue Aug 12 13:25:32 CEST 2003 - adrian@suse.de + +- update XDG patch (yep, popup's are still disabled ;) + +------------------------------------------------------------------- +Fri Aug 8 21:58:06 CEST 2003 - adrian@suse.de + +- disable popup in kbuildsycoca run again + +------------------------------------------------------------------- +Thu Aug 7 15:25:02 CEST 2003 - adrian@suse.de + +- new XDG code from Waldo to support kmenuedit + +------------------------------------------------------------------- +Tue Aug 5 08:25:26 CEST 2003 - adrian@suse.de + +- disable popup in kbuildsycoca run + +------------------------------------------------------------------- +Fri Aug 1 16:54:16 CEST 2003 - adrian@suse.de + +- disable shadow patch at all again +- update 3_1_BRANCH diff + * first fixes for Qt 3.2 +- update kdelibs-menus stuff + * Waldo: Less buggy, with prefix support and with a working + + +------------------------------------------------------------------- +Wed Jul 30 17:52:37 CEST 2003 - adrian@suse.de + +- update kdelibs-menus-kded tar ball to new version from Waldo, + to get the kbuildsycoca --menutest function +- merge kdelibs3-cups back to kdelibs3 + +------------------------------------------------------------------- +Mon Jul 28 15:11:15 CEST 2003 - adrian@suse.de + +- update to current 3_1_BRANCH + +------------------------------------------------------------------- +Wed Jul 23 08:55:42 CEST 2003 - adrian@suse.de + +- use another new 3.1.3 tar ball with further security fix + (cookie handling) +- add needed files for XDG support + +------------------------------------------------------------------- +Tue Jul 22 13:12:02 CEST 2003 - coolo@suse.de + +- remove CVS conflict files from admin +- make common_options a %config (for consistency) + +------------------------------------------------------------------- +Mon Jul 21 12:00:42 CEST 2003 - adrian@suse.de + +- fix build for 7.x distributions + +------------------------------------------------------------------- +Fri Jul 18 17:02:43 CEST 2003 - adrian@suse.de + +- third version of 3.1.3 tar ball + (security fix for cookie handling) +- add backported patch from 3.2 for shadow text on icons. + (written by Laur Ivan ) +- accept Qt 3.2 also, when "#MIN_CONFIG(3)" is used +- fix build for lib64 + +------------------------------------------------------------------- +Fri Jul 18 10:01:44 CEST 2003 - adrian@suse.de + +- fix owner ship of files +- add XDG support from Waldo from KDE 3.2 + +------------------------------------------------------------------- +Wed Jul 16 12:14:55 CEST 2003 - adrian@suse.de + +- use new 3.1.3 tar ball + +------------------------------------------------------------------- +Wed Jul 16 01:11:51 CEST 2003 - adrian@suse.de + +- update to 3.1.3 + +------------------------------------------------------------------- +Tue Jun 24 10:52:19 CEST 2003 - coolo@suse.de + +- update 3.1 branch (heading 3.1.3) + +------------------------------------------------------------------- +Wed Jun 11 11:54:55 CEST 2003 - kukuk@suse.de + +- Add missing directories to filelist + +------------------------------------------------------------------- +Sat Jun 7 22:10:12 CEST 2003 - coolo@suse.de + +- remove libtool update code completly +- don't create stale symlinks for < 820 +- create the gnome icons symlink only for < 829 + (moved to gnome packages, where they can't dangle) + +------------------------------------------------------------------- +Fri May 30 14:55:49 CEST 2003 - adrian@suse.de + +- fix file conflict and disable libtool update again + +------------------------------------------------------------------- +Thu May 29 10:51:54 CEST 2003 - adrian@suse.de + +- tune some minor bits of coolo's changes + (a minor side effect is that we are able to build KDE packages again) + +------------------------------------------------------------------- +Wed May 28 15:05:30 CEST 2003 - coolo@suse.de + +- put the configure work around in update_admin too + +------------------------------------------------------------------- +Tue May 27 14:08:45 CEST 2003 - coolo@suse.de + +- updating 3_1_BRANCH.diff (to get it working without --enable-final) +- build --enable-final in beta too +- update libtool files from system (experimental) + +------------------------------------------------------------------- +Mon May 26 15:03:34 CEST 2003 - adrian@suse.de + +- define and use $INSTALL_TARGET in common_options +- set to "install" (not "install-strip") for now + +------------------------------------------------------------------- +Mon May 19 09:41:44 CEST 2003 - adrian@suse.de + +- apply 3_1_BRANCH.diff (fix build for Qt 3.2b1) + +------------------------------------------------------------------- +Fri May 16 13:34:52 CEST 2003 - coolo@suse.de + +- remove the right CVS subdir + +------------------------------------------------------------------- +Fri May 16 07:54:36 CEST 2003 - coolo@suse.de + +- remove CVS subdir + +------------------------------------------------------------------- +Thu May 8 09:05:49 CEST 2003 - adrian@suse.de + +- new 3.1.2 tar ball (try2) + +------------------------------------------------------------------- +Wed May 7 08:58:28 CEST 2003 - adrian@suse.de + +- update to version 3.1.2 +- cleanup/drop patches +- update admin tar ball and apply changes via a patch +- require correct arts version (1.1 at least) + +------------------------------------------------------------------- +Fri Apr 18 15:02:41 CEST 2003 - adrian@suse.de + +- merge 8.2 changes with 8.3 +- remove libaps from neededforbuild + +------------------------------------------------------------------- +Mon Apr 7 15:49:35 CEST 2003 - adrian@suse.de + +- security fix from 3.0.5b + * run ghostscript in safe mode +- add patch from Uwe Gansert to support the new fileshare tool +- add crash fix from 3_1_BRANCH for khtml on www.w3.org/QA/ +- do reverse font lookup in kfontcombobox and kaction for + fontconfig based distributions (#25725) + +------------------------------------------------------------------- +Thu Apr 3 18:26:13 CEST 2003 - adrian@suse.de + +- fix possible crash in kprinter on cups server misbehaviour +- add gnome help pages support for khelpcenter. + +------------------------------------------------------------------- +Fri Mar 21 12:56:36 CET 2003 - adrian@suse.de + +- apply fix https over proxy + +------------------------------------------------------------------- +Sat Mar 15 21:40:57 CET 2003 - adrian@suse.de + +- fix kmid crash in libkmid (#24820) +- .exe files have a correct icon now +- remove unused mimelnk tar ball + +------------------------------------------------------------------- +Wed Mar 12 09:49:01 CET 2003 - adrian@suse.de + +- disable kbuildsycoca speed up patch from last check-in again + +------------------------------------------------------------------- +Tue Mar 11 11:47:19 CET 2003 - adrian@suse.de + +- update to 3.1.1 tar ball, second try + * memory leak in dcopclient + * kate crash and syntax highlighting fixes + * do not let two running kbuildsycoca conflict + * keramik pixmapCache conflict fix + * some session management fixes +- add patch from Lubos to fix further session management problems + with preloaded konq +- fix api documentation +- remove SuSEconfig.susewm-kbuildsycoca again + (initial created by susewm now) + +------------------------------------------------------------------- +Thu Mar 6 10:34:33 CET 2003 - coolo@suse.de + +- updating the admin tar ball to 3.1.1 too + +------------------------------------------------------------------- +Mon Mar 3 11:36:11 CET 2003 - adrian@suse.de + +- update to version 3.1.1 + * fixed alphablended background images in khtml + * crash fix after destructed documents + * additional syntax highlight descriptions for kate +- xrandr fixes from Lubos to initialize the display correct on login + +------------------------------------------------------------------- +Thu Feb 27 23:50:42 CET 2003 - adrian@suse.de + +- update 3_1_BRANCH +- remove wrong Obsoletes again +- drop preload.desktop in autostart and use improved patch from + Lubos instead +- comment out some noise in .xsession-errors + +------------------------------------------------------------------- +Wed Feb 26 21:49:06 CET 2003 - adrian@suse.de + +- fixing kded startup with DNOTIFY enabled and lots of files + +------------------------------------------------------------------- +Wed Feb 26 10:35:49 CET 2003 - adrian@suse.de + +- update 3_1_BRANCH +- add ksycoca-global patch from Waldo +- add SuSEconfig.susewm-kbuildsycoca +- add Obsolete and Conflict tags with kde2 packages + +------------------------------------------------------------------- +Mon Feb 24 18:42:15 CET 2003 - adrian@suse.de + +- update 3_1_BRANCH +- enable-dnotify + +------------------------------------------------------------------- +Mon Feb 24 09:10:42 CET 2003 - coolo@suse.de + +- fixing kups (#24084) + +------------------------------------------------------------------- +Fri Feb 14 12:04:25 CET 2003 - adrian@suse.de + +- update 3_1_BRANCH +- allow setgid for man +- add gnome icon path + +------------------------------------------------------------------- +Wed Feb 12 22:46:37 CET 2003 - adrian@suse.de + +- update 3_1_BRANCH +- add preloaded konq patches from Lubos +- move kde-config back to main package + +------------------------------------------------------------------- +Wed Feb 5 02:26:15 CET 2003 - adrian@suse.de + +- update 3_1_BRANCH again for more aliasing fixes from Dirk +- remove fallback patch and implement a real media detection instead + of that + +------------------------------------------------------------------- +Tue Feb 4 10:06:14 CET 2003 - coolo@suse.de + +- updating to newer 3_1_BRANCH that is gcc 3.3 compliant + +------------------------------------------------------------------- +Mon Feb 3 16:57:38 CET 2003 - adrian@suse.de + +- add -fno-cse-follow-jumps -fno-cse-skip-blocks to work around + compiler bug + +------------------------------------------------------------------- +Mon Feb 3 11:52:53 CET 2003 - adrian@suse.de + +- update 3_1_BRANCH patch +- use --enable-final again + +------------------------------------------------------------------- +Sat Feb 1 16:38:48 CET 2003 - adrian@suse.de + +- remove ppc64 special compile options + +------------------------------------------------------------------- +Tue Jan 28 17:46:03 CET 2003 - adrian@suse.de + +- follow changed QDesktopWidget::resized API + +------------------------------------------------------------------- +Tue Jan 28 00:31:12 CET 2003 - adrian@suse.de + +- add BRANCH patches +- add libart_lgpl-devel to Requires from -devel package + +------------------------------------------------------------------- +Fri Jan 24 12:16:47 CET 2003 - adrian@suse.de + +- apply fix for resized desktop for menubar from Seli + +------------------------------------------------------------------- +Thu Jan 23 09:58:07 CET 2003 - adrian@suse.de + +- ha ! RC7-try5, security relevant again + +------------------------------------------------------------------- +Wed Jan 22 07:17:29 CET 2003 - adrian@suse.de + +- RC7-try4. last one ? + +------------------------------------------------------------------- +Tue Jan 21 12:59:35 CET 2003 - adrian@suse.de + +- RC7-try3. last one. + +------------------------------------------------------------------- +Fri Jan 17 14:36:40 CET 2003 - adrian@suse.de + +- use RC7-try2 tar balls + +------------------------------------------------------------------- +Wed Jan 15 16:10:17 CET 2003 - adrian@suse.de + +- use cyrus-sasl2 + +------------------------------------------------------------------- +Tue Jan 14 17:26:02 CET 2003 - adrian@suse.de + +- update to version RC7. +- kdelibs3-devel requires now fam-devel on > 8.1 + +------------------------------------------------------------------- +Wed Jan 8 12:50:01 CET 2003 - adrian@suse.de + +- add fam-devel to neededforbuild + +------------------------------------------------------------------- +Wed Jan 8 11:12:50 CET 2003 - adrian@suse.de + +- fix build with new alsa. works hopefully also with old versions + +------------------------------------------------------------------- +Tue Jan 7 15:08:32 CET 2003 - adrian@suse.de + +- update to RC6 (newer than the last 3.1 final try ;) + +------------------------------------------------------------------- +Wed Dec 18 11:39:30 CET 2002 - coolo@suse.de + +- updating the admin tar ball to find out about possible problems + +------------------------------------------------------------------- +Mon Dec 16 14:28:39 CET 2002 - coolo@suse.de + +- updating to latest branch. + +------------------------------------------------------------------- +Tue Dec 10 14:55:41 CET 2002 - coolo@suse.de + +- adding a check to kdeinit that checks for KDE_IS_PRELINKED and + is not using dlopen then + +------------------------------------------------------------------- +Tue Dec 3 09:57:31 CET 2002 - coolo@suse.de + +- trying to fix SSL check for lib64 + +------------------------------------------------------------------- +Sat Nov 30 21:48:04 CET 2002 - adrian@suse.de + +- next try of RC5 tar ball. BRANCH fixes are again disabled + +------------------------------------------------------------------- +Thu Nov 28 13:01:54 CET 2002 - adrian@suse.de + +- apply 3_1_BRANCH fixes +- fix build for lib64 + +------------------------------------------------------------------- +Mon Nov 25 10:46:04 CET 2002 - adrian@suse.de + +- update to RC5. +- do not use --enable-final on beta (gcc 3.3) + +------------------------------------------------------------------- +Mon Nov 25 01:03:39 CET 2002 - ro@suse.de + +- added openldap2-client to neededforbuild + +------------------------------------------------------------------- +Sat Nov 23 16:24:50 CET 2002 - adrian@suse.de + +- enable openldap support +- clean up #neededforbuild + +------------------------------------------------------------------- +Wed Nov 20 15:02:54 CET 2002 - coolo@suse.de + +- adding fix for admin dir which should unbreak packages having problems + with autoconf 2.56 + +------------------------------------------------------------------- +Wed Nov 20 13:00:30 CET 2002 - adrian@suse.de + +- disable hotfix again (it is inside the new tar ball) + +------------------------------------------------------------------- +Wed Nov 20 11:13:49 CET 2002 - adrian@suse.de + +- update to version 3.1-RC4 (final ?) + +------------------------------------------------------------------- +Tue Nov 12 17:00:38 CET 2002 - coolo@suse.de + +- another snapshot with even more last minute fixes ;( + +------------------------------------------------------------------- +Tue Nov 12 09:14:09 CET 2002 - coolo@suse.de + +- apply the lib64 patch correctly (in updating to a source without + the patch pre-applied) + +------------------------------------------------------------------- +Mon Nov 11 16:14:44 CET 2002 - coolo@suse.de + +- update to newer snapshot and sort out patches + +------------------------------------------------------------------- +Wed Nov 6 17:35:47 CET 2002 - adrian@suse.de + +- update to snapshot 3.0.8.20021106 (fix file conflicts) + +------------------------------------------------------------------- +Sun Nov 3 13:16:21 CET 2002 - adrian@suse.de + +- update to version 1.1.0.20021030 ~= RC1 + +------------------------------------------------------------------- +Tue Oct 8 21:19:44 CEST 2002 - adrian@suse.de + +- update to version 3.0.4 +- disable topMenu patch again + +------------------------------------------------------------------- +Tue Sep 24 09:05:13 CEST 2002 - froh@suse.de + +- %-ifarch'ed Requires: alsa-devel for all but s390 and s390x (#18647) + +------------------------------------------------------------------- +Sun Sep 8 19:48:06 CEST 2002 - adrian@suse.de + +- cross side scripting check fix from Dirk Mueller + +------------------------------------------------------------------- +Sun Sep 8 15:53:37 CEST 2002 - adrian@suse.de + +- .exe files are handled now as files for wine and not direct executable + +------------------------------------------------------------------- +Thu Sep 5 14:11:22 CEST 2002 - adrian@suse.de + +- add fix from mana for libkmid, to get alsa sequenzer working again + +------------------------------------------------------------------- +Wed Sep 4 13:16:24 MEST 2002 - coolo@suse.de + +- fix the PNM mimetypes, so that digital cameras work + +------------------------------------------------------------------- +Sat Aug 31 23:49:25 CEST 2002 - adrian@suse.de + +- default to lib64 pathes in admin/* on lib64 systems. + (fix link error, when lib32 enviroment is installed) + +------------------------------------------------------------------- +Fri Aug 30 12:07:35 CEST 2002 - adrian@suse.de + +- use most current 3_0_BRANCH patches + * fix for crash in khtml with enabled java from Seli + * layout fix in kcombobox from gis + * kcombobox fix from dfaure for oversized box in koffice + * kjs date fixes from dfaure + * ksycoca, illegal object fix from Waldo + * kcompletion box fix for Xinerama setup, reviewed by gis + * do not loop on unexpected EOF in kio_khtml from Waldo + * newline handling fix in khtml from dirk + * disable tiff write support, since it is not implemented (coolo) + * translations + +------------------------------------------------------------------- +Mon Aug 26 14:55:32 CEST 2002 - adrian@suse.de + +- install plugins on lib64 into /opt/kde3/lib. so we do not need + different plugin path definitions +- add missing dependencies to -devel packages +- add some selected fix from 3_0_BRANCH + +------------------------------------------------------------------- +Tue Aug 20 10:28:25 CEST 2002 - adrian@suse.de + +- fix build for lib64 really :( + +------------------------------------------------------------------- +Tue Aug 20 08:51:21 CEST 2002 - adrian@suse.de + +- fix build for lib64 +- move designer plugins into -devel package + +------------------------------------------------------------------- +Tue Aug 20 00:41:40 CEST 2002 - adrian@suse.de + +- follow change qt plugin path patch (using implicit subdir on lib64) + +------------------------------------------------------------------- +Fri Aug 16 12:12:54 CEST 2002 - adrian@suse.de + +- update to current 3_0_BRANCH + * include dirk's khtml glitch fix + +------------------------------------------------------------------- +Wed Aug 14 16:08:17 CEST 2002 - coolo@suse.de + +- don't strip on debug-i386 +- fixing lib64 path for plugins + +------------------------------------------------------------------- +Tue Aug 13 15:29:12 CEST 2002 - coolo@suse.de + +- prefer settings in /etc/opt/kde3 over /opt/kde, so that UL + settings can overwrite standard KDE settings + +------------------------------------------------------------------- +Tue Aug 13 12:42:46 CEST 2002 - adrian@suse.de + +- update to 3.0.3 tar ball, second try + (includes security fix for KSSL) + +------------------------------------------------------------------- +Tue Aug 13 10:30:30 CEST 2002 - coolo@suse.de + +- alsadev -> alsa-devel + +------------------------------------------------------------------- +Mon Aug 12 17:08:37 CEST 2002 - coolo@suse.de + +- the x86_64 bug is fixed now + +------------------------------------------------------------------- +Sun Aug 11 12:54:06 CEST 2002 - coolo@suse.de + +- changing admin.tar.bz2 to work around automake crap not beeing + able to get kdemultimedia compiled +- update 3.0 branch patch again + +------------------------------------------------------------------- +Thu Aug 8 00:44:30 CEST 2002 - adrian@suse.de + +- update to 3.0.3 +- add 3_0_BRANCH fix for ksycoca recreation by Waldo + +------------------------------------------------------------------- +Mon Aug 5 10:43:16 CEST 2002 - adrian@suse.de + +- update 3_0_BRANCH.dif +- add some mimetypes +- apply patch to support a fallback on mounting devices +- fix PreRequires +- update admin.tar + +------------------------------------------------------------------- +Sun Aug 4 22:35:24 CEST 2002 - adrian@suse.de + +- finaly fix build for hammer + (yes, even tested this time) + +------------------------------------------------------------------- +Sun Aug 4 11:33:29 CEST 2002 - adrian@suse.de + +- fix the second typo in one line :( + +------------------------------------------------------------------- +Fri Aug 2 15:56:03 CEST 2002 - coolo@suse.de + +- adding a patch that hopefully fixes the very large tip of the konsole + window + +------------------------------------------------------------------- +Thu Aug 1 15:58:11 CEST 2002 - adrian@suse.de + +- and fix the typo in last patch + +------------------------------------------------------------------- +Thu Aug 1 15:47:00 CEST 2002 - adrian@suse.de + +- add workaround for x86_64 compiler bug + +------------------------------------------------------------------- +Thu Aug 1 09:24:45 CEST 2002 - coolo@suse.de + +- updating the branch patch for a possible fix to kukuk's + bugzilla crash :) + +------------------------------------------------------------------- +Wed Jul 31 15:58:12 CEST 2002 - adrian@suse.de + +- add missing directorys applnk/* + +------------------------------------------------------------------- +Tue Jul 30 12:00:25 CEST 2002 - coolo@suse.de + +- don't use SuSEconfig for the KDE api, but a dedicated script + in %post +- don't install a susehelp config file anymore, but let susehelp + handle it itself +- handle the new location for api docu + +------------------------------------------------------------------- +Fri Jul 26 20:37:03 CEST 2002 - adrian@suse.de + +- fix neededforbuild + +------------------------------------------------------------------- +Fri Jul 26 19:44:39 CEST 2002 - adrian@suse.de + +- disable fast-malloc, since it is in qt now + +------------------------------------------------------------------- +Tue Jul 23 16:02:01 CEST 2002 - coolo@suse.de + +- also install the qt.tag file +- remove configure option removed long ago + +------------------------------------------------------------------- +Tue Jul 23 09:05:40 CEST 2002 - coolo@suse.de + +- don't let the Makefile guess the package name. it will guess the + wrong thing + +------------------------------------------------------------------- +Fri Jul 19 10:57:12 CEST 2002 - adrian@suse.de + +- use the kpart for rpm mimetype (if installed) + +------------------------------------------------------------------- +Thu Jul 18 16:53:37 CEST 2002 - coolo@suse.de + +- use doxygen for docu +- backport admin fixes from HEAD branch +- removed neededforbuilds that look like stuff not needed for build + (since KDE 2.1) +- moved API docu (back) into /opt/kde3 +- updated 3.0 branch diff + +------------------------------------------------------------------- +Fri Jul 12 17:12:27 CEST 2002 - adrian@suse.de + +- add topMenu definition + +------------------------------------------------------------------- +Fri Jul 12 14:21:11 CEST 2002 - adrian@suse.de + +- use current 3_0_BRANCH + * includes the fix for the famous CSS/JS segfault in konqueror + +------------------------------------------------------------------- +Thu Jul 11 13:10:17 CEST 2002 - adrian@suse.de + +- fix build for lib64 +- use patch from coolo to disable g3 file support (libtiff is broken) + +------------------------------------------------------------------- +Mon Jul 8 13:04:10 CEST 2002 - adrian@suse.de + +- fix file list + +------------------------------------------------------------------- +Fri Jul 5 14:00:14 CEST 2002 - adrian@suse.de + +- add missing icon directorys +- split cups support into own package for 8.1 +- s,i386,%ix86, + +------------------------------------------------------------------- +Thu Jun 27 21:57:40 CEST 2002 - adrian@suse.de + +- add %run_ldconfig in %post +- use --disable-final on ppc64 +- disable more debug messages + +------------------------------------------------------------------- +Wed Jun 26 10:55:26 CEST 2002 - adrian@suse.de + +- update to the second try of 3.0.2 tar ball + +------------------------------------------------------------------- +Mon Jun 24 22:29:07 CEST 2002 - adrian@suse.de + +- udpate to version 3.0.2 + +------------------------------------------------------------------- +Wed Jun 19 18:12:46 CEST 2002 - uli@suse.de + +- disable-final on ARM + +------------------------------------------------------------------- +Wed Jun 12 10:44:09 CEST 2002 - adrian@suse.de + +- update to current 3_0_BRANCH (large kjs updates) +- clean #neededforbuild +- do only warn on missing admin directory in update_admin +- remove old common_compile_options file + +------------------------------------------------------------------- +Fri Jun 7 13:55:25 CEST 2002 - adrian@suse.de + +- using fixed libtool for -m32/-m64 in admin (fixed by matz) +- replace admin with the content from admin.tar.bz2 + +------------------------------------------------------------------- +Thu Jun 6 15:45:24 CEST 2002 - adrian@suse.de + +- export kde_styledir and kde_widgetdir to follow the plugins* + directory name from Qt. + +------------------------------------------------------------------- +Wed Jun 5 15:59:29 CEST 2002 - adrian@suse.de + +- go back to 1.316 for am_edit + (no unsermake support, but generates moc files with --enable-final) + +------------------------------------------------------------------- +Tue Jun 4 10:39:02 CEST 2002 - coolo@suse.de + +- adding /sbin:/usr/sbin to the PATH if kdesu is used to become root. + Work around for flaws in setup tools (#11362) + +------------------------------------------------------------------- +Mon Jun 3 15:03:11 CEST 2002 - coolo@suse.de + +- removing test programs that cause problems with automake 1.6.1 + +------------------------------------------------------------------- +Mon Jun 3 12:34:41 CEST 2002 - adrian@suse.de + +- update to inofficial version 3.0.1a + * include bug/security fix for file uploads +- fix for broken png's in khtml in some cases + +------------------------------------------------------------------- +Mon May 27 12:02:26 CEST 2002 - adrian@suse.de + +- fix for 7.0 distribution + +------------------------------------------------------------------- +Thu May 23 18:35:17 CEST 2002 - ro@suse.de + +- fix admin extraction + +------------------------------------------------------------------- +Thu May 23 16:43:13 CEST 2002 - adrian@suse.de + +- Obsolete/provide kups and add start script + +------------------------------------------------------------------- +Thu May 23 14:48:35 CEST 2002 - coolo@suse.de + +- adding a update_admin snippet here too, so we can fix kde 3 + apps the same way as kde 2 apps + +------------------------------------------------------------------- +Wed May 22 01:18:18 CEST 2002 - adrian@suse.de + +- use coolo's famous common_options config file format + old common_compile_options file is not disabled for now +- use explicit --enable-debug=full if RPM_OPT_FLAGS~=-g + +------------------------------------------------------------------- +Tue May 21 16:28:23 CEST 2002 - adrian@suse.de + +- use Dirk's official post-3.0.1 patch and disable our former ones + * includes a security fix for khtml, known as "Opera exploit" + * fix "arts not starting realtime" problem (typo in reading config +variable). + * fix crashing kbuildsycoca when it hits an unreadable directory + * fix a text selection problem for KMail. + * fix a problem where (i)frame's accidently were not resized correctly. + * fix mime-detection of koffice post v1.1 documents + * urgent fixes in kfiledialog + +------------------------------------------------------------------- +Fri May 17 15:09:31 CEST 2002 - adrian@suse.de + +- fix dieing kio slave on https connections + +------------------------------------------------------------------- +Fri May 17 14:09:44 CEST 2002 - adrian@suse.de + +- reduce noise on stdout from khtml (extend shut_up.dif) + +------------------------------------------------------------------- +Tue May 14 11:42:25 CEST 2002 - adrian@suse.de + +- use updated 3.0.1 tar ball include crash fixes (esp. for kmail) + +------------------------------------------------------------------- +Mon May 13 14:46:46 CEST 2002 - adrian@suse.de + +- set requirement back to qt-3.0.3 version + +------------------------------------------------------------------- +Fri May 10 16:11:58 CEST 2002 - adrian@suse.de + +- workaround rpm parse bug for old distributions + +------------------------------------------------------------------- +Fri May 10 13:29:58 CEST 2002 - adrian@suse.de + +- update to version 3.0.1 and remove obsolete patches + +------------------------------------------------------------------- +Tue May 7 12:49:37 CEST 2002 - meissner@suse.de + +- %_lib fixes inside the .cpp files (should now find SSL libraries) + +------------------------------------------------------------------- +Mon May 6 16:33:47 CEST 2002 - meissner@suse.de + +- %_lib fixes + +------------------------------------------------------------------- +Tue Apr 16 14:58:17 CEST 2002 - adrian@suse.de + +- Require spell (either ispell or aspell) > 8.0 only +- use --disable-final and -O0 on mips + +------------------------------------------------------------------- +Fri Apr 12 15:53:49 MEST 2002 - adrian@suse.de + +- set --enable-mt. Not needed for kdelibs3, but it should be + in the common compiler flags for some other applications with + older admin folder + +------------------------------------------------------------------- +Tue Apr 9 14:12:43 CEST 2002 - adrian@suse.de + +- fix kde api generation for 7.1, 7.2 and 7.3 based distributions + +------------------------------------------------------------------- +Tue Mar 26 00:14:11 CET 2002 - adrian@suse.de + +- update to new 3.0 final version. the last one. sure. +- comment out last harmless warning message from kdelibs + +------------------------------------------------------------------- +Mon Mar 25 20:31:47 CET 2002 - adrian@suse.de + +- update 3.0 final tar ball +- 2 urgent fixes ( kdirlister ) + +------------------------------------------------------------------- +Mon Mar 25 10:45:55 CET 2002 - adrian@suse.de + +- update to 3.0 final (everything is wonderfull version) +- switch from /etc/X11/kde3 to /etc/opt/kde3 to be FHS compliant +- add /etc/kde3rc with prefix, so we do not need $KDEDIRS anymore + +------------------------------------------------------------------- +Thu Mar 21 19:05:29 CET 2002 - adrian@suse.de + +- use kdoc to generate api-documentation again + (makes the class browser of kdevelop happy) + +------------------------------------------------------------------- +Thu Mar 21 16:55:43 CET 2002 - adrian@suse.de + +- update to 3.0rc3 + +------------------------------------------------------------------- +Sun Mar 10 17:03:38 CET 2002 - adrian@suse.de + +- update to 3.0rc2 + +------------------------------------------------------------------- +Mon Mar 4 17:31:55 CET 2002 - adrian@suse.de + +- update to 3.0rc1 + +------------------------------------------------------------------- +Mon Feb 25 19:09:57 CET 2002 - adrian@suse.de + +- update to snapshot 2.92.2002022512 + +------------------------------------------------------------------- +Mon Feb 18 20:55:08 CET 2002 - adrian@suse.de + +- update to snapshot 2.92.2002021810 + +------------------------------------------------------------------- +Thu Feb 14 23:26:36 CET 2002 - adrian@suse.de + +- update to snapshot 2.92.2002021421 +- split kdelibs3-artsd package into arts and arts-devel +- add Doug Lea's fast threaded malloc function from glibc 2.3 + * prepared by Lubos Lunak + * integrated into libkdecore + * add dummy library to make it configurable via libKmalloc.so link + * disabled by default + +------------------------------------------------------------------- +Mon Feb 11 15:07:20 CET 2002 - adrian@suse.de + +- update to snapshot 2.92.2002021111 + +------------------------------------------------------------------- +Mon Feb 4 23:51:35 CET 2002 - adrian@suse.de + +- update to 2.92 (KDE 3.0 beta 2) +- create common_compile_flags file + +------------------------------------------------------------------- +Fri Feb 1 00:26:05 CET 2002 - ro@suse.de + +- changed neededforbuild to + +------------------------------------------------------------------- +Mon Jan 28 14:49:00 CET 2002 - adrian@suse.de + +- update to snapshot from 2.91.2002012811 + +------------------------------------------------------------------- +Wed Jan 23 01:50:51 CET 2002 - adrian@suse.de + +- add missing header files + +------------------------------------------------------------------- +Wed Jan 23 00:31:21 CET 2002 - adrian@suse.de + +- update to snapshot 2.91.2002012221 + +------------------------------------------------------------------- +Tue Jan 15 18:24:51 CET 2002 - adrian@suse.de + +- update to snapshot 2.91.2002011511 + +------------------------------------------------------------------- +Sat Jan 5 18:28:06 CET 2002 - adrian@suse.de + +- update to recent/todays snapshot +- disable rpath for SuSE > 7.3 + (/opt/kde3/lib is in ld.so.conf) +- add Requires: line for at least Qt 3.0.1 + +------------------------------------------------------------------- +Mon Dec 17 15:58:49 CET 2001 - adrian@suse.de + +- fix compile on s390 +- add fix for khtml seg fault +- do not build documentation for <7.3 distributions until kdoc + is fixed + +------------------------------------------------------------------- +Wed Dec 12 17:02:34 CET 2001 - adrian@suse.de + +- update to KDE 3.0 Beta 1 + +------------------------------------------------------------------- +Tue Dec 4 20:13:20 CET 2001 - adrian@suse.de + +- use current CVS snapshot + +------------------------------------------------------------------- +Fri Nov 2 12:30:45 CET 2001 - adrian@suse.de + +- using cvs snapshot from 01 Nov 2001 + +------------------------------------------------------------------- +Sat Oct 20 17:57:21 CEST 2001 - adrian@suse.de + +- using newer cvs-snapshot + (compiles again with qt 3 final) + +------------------------------------------------------------------- +Tue Oct 9 11:55:41 CEST 2001 - adrian@suse.de + +- branch to first kdelibs 3 (alpha 1) + +------------------------------------------------------------------- +Mon Sep 24 01:40:05 CEST 2001 - adrian@suse.de + +- add security fix for peer-ssl from Dirk +- add fix to make it possible to allow JS from local pages + +------------------------------------------------------------------- +Fri Sep 21 22:51:53 CEST 2001 - adrian@suse.de + +- add fix for kbuildsycoca --incremental from Waldo + (changed files (due to updated packages or a SuSEconfig run for + example) do not lead anymore to an incorrect ksycoca database. + +------------------------------------------------------------------- +Tue Sep 18 08:55:26 CEST 2001 - adrian@suse.de + +- add symbolic link to /opt/kde2/doc/HTML/en/kdeapi +- #neededforbuild cups -> cups-libs + +------------------------------------------------------------------- +Sat Sep 15 19:13:06 CEST 2001 - adrian@suse.de + +- add klineedit fix +- add warning that kdDebug function is disabled (except for ppc) +- fix kdelibs-2.2.1.dif (do not apply patch for ppc-only global) + +------------------------------------------------------------------- +Thu Sep 13 09:36:06 CEST 2001 - adrian@suse.de + +- add fix for kjs (octal parsing) +- add fix icondialog (custom icon directorys) +- fix ia64 patch + +------------------------------------------------------------------- +Tue Sep 11 10:54:21 CEST 2001 - adrian@suse.de + +- add security fixes for kssl (do not save keys on disk) +- add Qt API to the API index page + +------------------------------------------------------------------- +Mon Sep 10 14:41:23 CEST 2001 - adrian@suse.de + +- update to to second try of kdelibs 2.2.1 tar ball + * JavaScript fixes +- fix ia64 workarounds to build on older distris + +------------------------------------------------------------------- +Sun Sep 9 17:57:01 CEST 2001 - schwab@suse.de + +- Fix specfile for ia64 workarounds. + +------------------------------------------------------------------- +Sat Sep 8 20:40:27 CEST 2001 - adrian@suse.de + +- updating to final 2.2.1 tar ball + +------------------------------------------------------------------- +Sun Sep 2 09:59:21 CEST 2001 - adrian@suse.de + +- update to KDE_2_2_BRANCH from 02.09.2001 + * compile fixes + * KFile crash fix + * KDockWidget crash fix, caused crash in quanta + * fix login with chars in password >127 + * load charsets file on demand + * kxmlgui fixed to read really the complete xml file. +- drop -cups package, the cups libs are now splitted from the cups + package. +- add kmimetype hack to get a fallback application for device icons +- make KDE quiet by default (kdDebug default value is 4 now) + +------------------------------------------------------------------- +Tue Aug 28 15:53:23 CEST 2001 - adrian@suse.de + +- update to KDE_2_2_BRANCH from 28.08.2001 + * fix kspell for iso 13 languages + * fix $PATH for kdesu + * check the preview action in setPreviewWidget() + * check for aborted save + * official patch for kbuildsycoca + * kfile fixes + * crash fixes in userstylesheets + * large file system support fix + * crash fix in kbugreport +- removed patches for kbuildsycoca and large file support + +------------------------------------------------------------------- +Sat Aug 25 09:49:21 CEST 2001 - adrian@suse.de + +- update to KDE_2_2_BRANCH from 25.08.2001 + * khtml supports + * kded updates + * translation updates +- kbuildsycoca speed optimisation + (original patch from Lubos Lunak, reworked to be BC) + +------------------------------------------------------------------- +Tue Aug 21 12:25:49 CEST 2001 - adrian@suse.de + +- using KDE_2_2_BRANCH from 21.08.2001 + * html parser fixes + * artsd fixes + * ... +- disable FAM by default, it can be enabled with + export USE_FAM=1 +- disable and obsolete -i686 package, until the number of problems + are solved + +------------------------------------------------------------------- +Mon Aug 6 23:55:17 CEST 2001 - adrian@suse.de + +- add assert into khtml/misc/loader.cpp as recomended by Dirk +- switch on SSE support in i386 architecture + (arts has a runtime checking) +- clean up file list +- ia64 workarounds + +------------------------------------------------------------------- +Mon Aug 6 10:59:49 CEST 2001 - adrian@suse.de + +- update to final 2.2 + +------------------------------------------------------------------- +Wed Aug 1 15:57:30 CEST 2001 - adrian@suse.de + +- update to 2.2rc1 + +------------------------------------------------------------------- +Fri Jul 6 11:53:42 CEST 2001 - adrian@suse.de + +- generate API documentation + (no need to install kdevelop for api docu anymore) + +------------------------------------------------------------------- +Fri Jun 29 15:39:12 CEST 2001 - adrian@suse.de + +- 2.2beta1 + +------------------------------------------------------------------- +Mon May 28 10:39:18 CEST 2001 - adrian@suse.de + +- 2.2alpha2 + +------------------------------------------------------------------- +Mon Apr 16 22:02:33 CEST 2001 - adrian@suse.de + +- 2.2alpha1 + +------------------------------------------------------------------- +Fri Apr 13 12:54:18 CEST 2001 - adrian@suse.de + +- add currency symbol to KFontDialog preview for testing purposes + +------------------------------------------------------------------- +Tue Apr 10 20:49:07 CEST 2001 - adrian@suse.de + +- revert also kdeinit changes (compile fix) +- add fixes for javascript from CVS +- add fixes for font name mapping from CVS +- add kdeinit_shutdown patch from Waldo + +------------------------------------------------------------------- +Tue Apr 10 01:01:16 MEST 2001 - adrian@suse.de + +- minor fix, but hopefully fix linker problems on all P-II systems + +------------------------------------------------------------------- +Mon Apr 9 11:24:07 CEST 2001 - adrian@suse.de + +- disable alsa for 7.0-ppc + +------------------------------------------------------------------- +Fri Apr 6 11:01:59 CEST 2001 - adrian@suse.de + +- drop the -nostdlib flag during linking. this causes problems + (since not all need libs are used) on some architectures +- -O2 for axp + +------------------------------------------------------------------- +Thu Apr 5 08:56:33 CEST 2001 - adrian@suse.de + +- update to 2_1_BRANCH. + this fixes the proxy server authentication problem + +------------------------------------------------------------------- +Wed Mar 28 18:28:29 CEST 2001 - adrian@suse.de + +- disable ssl support for 7.0-ppc + (problems with the compiler and linker, which can not be fixed + without to loss the BC) + +------------------------------------------------------------------- +Tue Mar 27 12:08:53 CEST 2001 - ro@suse.de + +- changed neededforbuild to + +------------------------------------------------------------------- +Tue Mar 20 21:58:31 CET 2001 - adrian@suse.de + +- enable -O2 for ppc + using inline gcc bug workaround for ia64 + +------------------------------------------------------------------- +Tue Mar 20 18:53:42 CET 2001 - adrian@suse.de + +- update to 2.1.1 (official tar ball) + +------------------------------------------------------------------- +Mon Mar 19 22:03:49 CET 2001 - adrian@suse.de + +- update to current 2_1_BRANCH + we have kde-config as executable binary back + (lots of configure scripts test this) + +------------------------------------------------------------------- +Mon Mar 19 15:39:26 CET 2001 - adrian@suse.de + +- add cyrus-sassl to #neededforbuild + +------------------------------------------------------------------- +Sat Mar 17 21:38:50 CET 2001 - adrian@suse.de + +- added missing packages in #neededforbuild + +------------------------------------------------------------------- +Sat Mar 17 13:32:29 CET 2001 - adrian@suse.de + +- fix CATALOG for distributions <7.2 + update to current 2_1_0_TAG + +------------------------------------------------------------------- +Tue Mar 13 14:29:16 CET 2001 - ro@suse.de + +- added CATALOG for docbook_3 + +------------------------------------------------------------------- +Tue Mar 13 01:12:30 CET 2001 - ro@suse.de + +- changed neededforbuild to + +------------------------------------------------------------------- +Thu Feb 22 19:22:17 CET 2001 - adrian@suse.de + +- the final final 2.1.0 tar ball ... + +------------------------------------------------------------------- +Wed Feb 21 22:42:47 CET 2001 - adrian@suse.de + +- use the right KDE BRANCH (not my fault ;-) + +------------------------------------------------------------------- +Wed Feb 21 17:16:51 CET 2001 - adrian@suse.de + +- update to final 2.1.0 + +------------------------------------------------------------------- +Wed Feb 14 17:04:08 CET 2001 - adrian@suse.de + +- update to 2.1 post beta 2 + +------------------------------------------------------------------- +Mon Jan 22 14:44:41 CET 2001 - stepan@suse.de + +- alpha axp compile fixes for gcc 2.95.2 + +------------------------------------------------------------------- +Tue Jan 16 12:05:26 CET 2001 - adrian@suse.de + +- add a check of return value in kprocess. + Hopefully no crashes anymore. + +------------------------------------------------------------------- +Mon Jan 15 22:13:16 CET 2001 - adrian@suse.de + +- disable --enable-final until the glibc/compiler problem in + kprocess is fixed + +------------------------------------------------------------------- +Mon Jan 15 14:01:38 CET 2001 - adrian@suse.de + +- fix index.desktop for distris <7.1 + +------------------------------------------------------------------- +Sat Jan 13 18:49:40 CET 2001 - adrian@suse.de + +- fix local support in kicker. native language again in menus + this fix does not work for chinese people + fix index.desktop in highcolor, 22x22 actions icons can be loaded + again + +------------------------------------------------------------------- +Fri Jan 12 00:02:33 CET 2001 - adrian@suse.de + +- create some links to see the konqueror gear again + fix hicolor index file + +------------------------------------------------------------------- +Tue Jan 9 22:07:19 CET 2001 - adrian@suse.de + +- added security fix for kdesu from Waldo + +------------------------------------------------------------------- +Mon Jan 8 15:43:09 CET 2001 - adrian@suse.de + +- fix SuSE icon description + +------------------------------------------------------------------- +Sun Jan 7 15:56:58 CET 2001 - adrian@suse.de + +- use additional pathes, to not conflict with older pathes + +------------------------------------------------------------------- +Sun Jan 7 14:24:01 CET 2001 - adrian@suse.de + +- new icon handling. much more clean now and the + dependencie to icons is not needed anymore + +------------------------------------------------------------------- +Sat Jan 6 17:15:51 CET 2001 - adrian@suse.de + +- fix locale support. + LANG=de_DE or LANG=de_DE.utf-8 is working now. + +------------------------------------------------------------------- +Tue Jan 2 21:51:19 CET 2001 - adrian@suse.de + +- added a fix for font handling, if antialising is used + (Thanks Kurt) + +------------------------------------------------------------------- +Mon Jan 1 22:16:48 CET 2001 - adrian@suse.de + +- remove charset for german. this confuses the font handling + added fix for stalled, but broken connections; thanks waldo + +------------------------------------------------------------------- +Sat Dec 30 21:22:21 CET 2000 - adrian@suse.de + +- extend rpm mimelnk for *.spm files + disabled threading + +------------------------------------------------------------------- +Wed Dec 27 18:33:15 CET 2000 - adrian@suse.de + +- drop message in kdeinit, which produce a lot of invalid bugzilla entrys + +------------------------------------------------------------------- +Wed Dec 20 10:38:25 CET 2000 - adrian@suse.de + +- added openssl-devel for #neededforbuild + +------------------------------------------------------------------- +Sun Dec 17 15:55:15 CET 2000 - adrian@suse.de + +- moved icon links back to kdelibs :-( + +------------------------------------------------------------------- +Sun Dec 17 12:54:19 CET 2000 - adrian@suse.de + +- moved icon links from this package to kdebase + +------------------------------------------------------------------- +Fri Dec 15 14:35:38 CET 2000 - adrian@suse.de + +- brown paper bag fix ... I spend Rudi a beer ... + +------------------------------------------------------------------- +Fri Dec 15 12:02:02 CET 2000 - adrian@suse.de + +- added icon packages to #neededforbuild + +------------------------------------------------------------------- +Thu Dec 14 12:38:23 CET 2000 - adrian@suse.de + +- fixed specfile + +------------------------------------------------------------------- +Wed Dec 13 19:22:39 CET 2000 - adrian@suse.de + +- fixed icon links + +------------------------------------------------------------------- +Wed Dec 13 16:52:23 CET 2000 - adrian@suse.de + +- update to current 2_0_BRANCH + +------------------------------------------------------------------- +Wed Nov 29 14:25:31 CET 2000 - adrian@suse.de + +- update to 2.0.1 + +------------------------------------------------------------------- +Wed Nov 22 02:01:26 CET 2000 - ro@suse.de + +- remove penguin.png (in kdebase) + +------------------------------------------------------------------- +Tue Nov 21 15:07:15 CET 2000 - adrian@suse.de + +- fixed /etc/kderc + +------------------------------------------------------------------- +Tue Nov 21 00:08:08 CET 2000 - adrian@suse.de + +- added icon support for non kde icons + added /etc/kderc + ~/Desktop -> ~/KDesktop + +------------------------------------------------------------------- +Thu Nov 16 15:46:49 CET 2000 - adrian@suse.de + +- update to newer snapshot from KDE_2_0_BRANCH + fixed sgml catalog file for our sgml enviroment + +------------------------------------------------------------------- +Fri Nov 3 08:45:45 CET 2000 - adrian@suse.de + +- fixed needed for build + +------------------------------------------------------------------- +Thu Nov 2 20:35:30 CET 2000 - adrian@suse.de + +- fixed file list + +------------------------------------------------------------------- +Tue Oct 17 04:52:05 CEST 2000 - adrian@suse.de + +- update to 2.0.0 +- changed default for ~/.kde to ~/.kde2 +- dropped klibs2i and klibs2cr again +- splitted package in + * kdelibs + * kdelibs-devel + +------------------------------------------------------------------- +Wed Sep 20 11:29:35 CEST 2000 - adrian@suse.de + +- the last fix :-( + +------------------------------------------------------------------- +Sun Sep 17 00:27:08 CEST 2000 - adrian@suse.de + +- splited klibs2 into klibs2, klibs2i (international version + without crypt support) and klibs2cr (crypt version) + +------------------------------------------------------------------- +Sat Sep 16 15:17:06 CEST 2000 - adrian@suse.de + +- removed ssl/ssh support + added big endian fix in KPixmap + +------------------------------------------------------------------- +Tue Sep 12 11:49:35 MEST 2000 - adrian@suse.de + +- changed to -O0 for ppc and alpha + +------------------------------------------------------------------- +Tue Sep 12 08:56:11 CEST 2000 - adrian@suse.de + +- update to RC 1 + +------------------------------------------------------------------- +Mon Aug 21 14:04:31 CEST 2000 - adrian@suse.de + +- update to beta 4 + +------------------------------------------------------------------- +Mon Jul 24 17:46:04 CEST 2000 - adrian@suse.de + +- update to second version of beta 3 + +------------------------------------------------------------------- +Fri Jul 21 22:39:53 CEST 2000 - adrian@suse.de + +- update to beta 3 + +------------------------------------------------------------------- +Mon Jul 17 19:24:01 CEST 2000 - adrian@suse.de + +- update to snapshot from 17.07.2000 + +------------------------------------------------------------------- +Thu Jul 6 19:48:47 CEST 2000 - adrian@suse.de + +- Spec file created from kdelibs-1.91.20000706.tar.gz by autospec + + +------------------------------------------------------------------- +Fri Jun 9 17:15:52 CEST 2000 - adrian@suse.de + +- correct neededforbuild and updated khtml + +------------------------------------------------------------------- +Fri Jun 9 02:35:16 CEST 2000 - adrian@suse.de + +- update to 1.91; beta 2 + +------------------------------------------------------------------- +Tue Jun 6 01:29:47 CEST 2000 - adrian@suse.de + +- snapshot from 06.06.2000 + +------------------------------------------------------------------- +Sun May 28 09:22:23 CEST 2000 - adrian@suse.de + +- snapshot from 28.05.2000 + new type of spec file + +------------------------------------------------------------------- +Fri May 12 13:29:41 CEST 2000 - adrian@suse.de + +- update to KDE 1.90 + +------------------------------------------------------------------- +Thu Apr 27 17:45:45 CEST 2000 - adrian@suse.de + +- snapshot from 25.04.2000 + +------------------------------------------------------------------- +Thu Apr 20 14:27:28 CEST 2000 - adrian@suse.de + +- fixed file list + +------------------------------------------------------------------- +Wed Apr 19 17:17:42 CEST 2000 - adrian@suse.de + +- snapshot from 17.04.2000 + +------------------------------------------------------------------- +Thu Apr 6 19:21:15 CEST 2000 - adrian@suse.de + +- snapshot from 06.04.2000 + +------------------------------------------------------------------- +Thu Mar 30 18:44:11 CEST 2000 - adrian@suse.de + +- first KDE libs 2 package. PRE 1.90 Version + diff --git a/opensuse/core/tdelibs/tdelibs.spec b/opensuse/core/tdelibs/tdelibs.spec new file mode 100644 index 000000000..4e238d06f --- /dev/null +++ b/opensuse/core/tdelibs/tdelibs.spec @@ -0,0 +1,825 @@ +# +# spec file for package tdelibs +# +# Copyright (c) 2011 the Trinity Project (opensuse). +# +# All modifications and additions to the file contributed by third parties +# remain the property of their copyright owners, unless otherwise agreed +# upon. The license for this file, and modifications and additions to the +# file, is the same license as for the pristine package itself (unless the +# license for the pristine package is not an Open Source License, in which +# case the license is the MIT License). An "Open Source License" is a +# license that conforms to the Open Source Definition (Version 1.9) +# published by the Open Source Initiative. + +# Please submit bugfixes or comments via http://bugs.trinitydesktop.org/ +# + +# norootforbuild + + +Name: tdelibs +BuildRequires: OpenEXR-devel arts-devel aspell-devel cups-devel fam-devel flac-devel krb5-devel +BuildRequires: libart_lgpl-devel libidn-devel libsndfile libtiff-devel +BuildRequires: libxslt-devel openldap2-devel pcre-devel libtqt4-devel sgml-skel +BuildRequires: db-devel libacl-devel libattr-devel unsermake update-desktop-files utempter +BuildRequires: unzip +BuildRequires: avahi-compat-mDNSResponder-devel fdupes libbz2-devel libjasper-devel +BuildRequires: libdrm-devel tde-filesystem cmake +URL: http://www.trinitydesktop.org +License: BSD3c(or similar) ; GPLv2+ ; LGPLv2.1+ +Group: System/GUI/TDE +BuildRoot: %{_tmppath}/%{name}-%{version}-build +Summary: Trinity Base Libraries +Version: 3.5.12.99 +Release: 1 +Provides: kups keramik tdelibs-cups tdelibs-33addons tdepim-networkstatus +Provides: kdelibs3_base = 3.3 +Requires: libtqt4 >= %( echo `rpm -q --queryformat '%{VERSION}' libtqt4`) +Requires: openssl tdelibs-default-style +Requires: hicolor-icon-theme +Recommends: ispell enscript +Requires: sudo +Source0: kdelibs-%{version}.tar.bz2 +Source3: baselibs.conf +Source4: api_docu_description +Source6: tderc +# svn export svn://anonsvn.kde.org/home/kde/branches/KDE/3.5/kde-common/admin +Source8: admin.tar.bz2 +Source9: cr16-filesys-file_broken.png +Source10: kdemm-20050330.tar.bz2 +Source11: 10888-bt.tar.gz +Source12: mimetype-icons.tar.bz2 +Source14: vnd.openxmlformats-officedocument.wordprocessingml.document.desktop +Source15: vnd.openxmlformats-officedocument.presentationml.presentation.desktop +Source16: vnd.openxmlformats-officedocument.spreadsheetml.sheet.desktop +Patch0: 3_5_BRANCH.diff +Patch1: kdeversion.diff +Patch2: admin.diff +Patch3: show-distribution.diff +Patch5: applications.menu-fallback.diff +Patch7: stat-on-media.diff +Patch8: kmimelist.diff +Patch9: x-kde-InitialPreference.diff +Patch10: disable-idn-support.diff +Patch11: silence.diff +Patch12: smooth-scrolling.diff +Patch13: rubberband-selection.diff +Patch15: add-suse-translations.diff +Patch16: kde3rc.dif +Patch17: artwork.diff +Patch26: mimetype-changes.diff +Patch27: noauto-package.diff +Patch29: prefer_distribution_settings.dif +Patch34: allow-man-setgid.diff +Patch40: clever-menu.diff +Patch43: fileshare.diff +Patch44: fontconfig-reverse-lookup.diff +Patch45: limit-max-image-size.diff +Patch50: fix-gnome-help-support.diff +Patch950: fix-gnome-help-support_legacy.diff +Patch52: kdeprint-restart-cupsd.diff +Patch54: kdemm.diff +Patch55: fix-kdemm-build.diff +Patch56: fix-dcopidlng-within-kdelibs-build.diff +Patch57: kdemm-filepreview.diff +Patch60: fix-qxembed.diff +Patch65: integrate-global-pixmaps-new.diff +Patch66: integrate-global-pixmaps-10.1.diff +Patch70: ktip-icon-hack.diff +Patch80: CATALOG.kdelibs3.diff +Patch81: xml-catalog.diff +Patch83: kdelibs3-gcc-4.1-miscompile.diff +Patch85: desktop-translations.diff +Patch86: use-xauthlocalhostname.diff +Patch88: mozilla-sliders.patch +Patch89: kdeprint-utf8.diff +Patch90: kimproxy-warning.diff +Patch95: kdelibs_networkstatus_branch2.diff +Patch97: autostart-spec.diff +Patch105: kdelibs3-hicolor-scalable-sizes.patch +Patch106: use-mediamanager.diff +Patch108: patch-mimetype-iconnames.diff +Patch109: fix-kerberos-printing.diff +Patch110: printpreview.patch +Patch111: kfile-beagle.diff +Patch112: xinerama.patch +Patch113: kremoteencoding-utf8.diff +Patch114: no-progress-for-beagle-status-query.diff +Patch117: kickoff-drop-shadow.diff +Patch122: disable-samba-dialog-without-smb.diff +Patch123: lpoptions-cups-1.2.diff +Patch124: spellcheck-default-utf8.diff +Patch125: kde4-applications.diff +Patch126: avahi-pidfile.diff +Patch127: x-jar-desktop.diff +Patch128: google-mail.diff +Patch129: default-useragent.diff +Patch130: kwalletd-try-open.diff +Patch131: textcompletion-editor.diff +Patch132: no-debug-by-default.diff +Patch133: flash-player-non-oss.diff +Patch134: bundle-locale-help.diff +Patch149: networkstatus.diff +Patch150: kdesu-settings.diff +Patch152: bug-399296_ftphandling-fix.diff +Patch153: bug-382959_kabc_fix_vcardparser.patch +Patch154: r874968-ebay-crash.diff +Patch155: gcc44.diff +Patch156: fix-macmenu.patch +Patch157: ignore-inline-menu.diff +Patch158: bnc557126.diff +Patch159: xmlhttprequest_3.x.diff +Patch160: kdecode_fakes_include.diff +Patch161: gcc45.diff +Patch162: arts-acinclude.patch +Patch163: kdelibs-3.5.10-ossl-1.x.patch +Patch164: light_v_2_scrollbar_patch.patch + +Patch201: kdelibs-3.5.4-CVE-2009-1690.patch +Patch203: kdelibs-3.5.10-latex-syntax-kile-2.0.3.patch +Patch204: kdelibs-3.5.10-CVE-2009-2702.patch +Patch205: kdelibs-3.5.10-cve-2009-2537-select-length.patch +Patch206: kdelibs-3.5.10-cve-2009-1725.patch +Patch207: kdelibs-3.5.10-cve-2009-1698.patch + +Patch210: kdelibs-3.5.10-kio.patch +Patch211: oom_score_adj.patch +Patch212: kcontrol_crash_patch.diff + +%description +This package contains tdelibs, one of the basic packages of the Trinity +Desktop Environment. It contains the necessary libraries for the Trinity +desktop. + +This package is absolutely necessary for using TDE. + +%package arts +License: BSD3c(or similar) ; GPLv2+ ; LGPLv2.1+ +Summary: TDE aRts support +Group: System/GUI/TDE +Provides: tdelibs:/opt/tde/bin/artsmessage +Requires: arts >= %( echo `rpm -q --queryformat '%{VERSION}' arts`) +Recommends: tdemultimedia-arts + +%description arts +This package contains bindings and gui elements for using aRts sound +daemon. + +%package default-style +License: BSD3c(or similar) ; GPLv2+ ; LGPLv2.1+ +Summary: The default TDE style +Group: System/GUI/TDE +Provides: tdelibs:/opt/tde/%_lib/libkdefx.so.4 + +%description default-style +This package contains the Plastik widget style and libkdefx. It only +depends on TQt, not the KDE libraries. + +%package doc +License: BSD3c(or similar) ; GPLv2+ ; LGPLv2.1+ +Summary: Documentation for TDE Base Libraries +Group: System/GUI/TDE +Provides: tdelibs:/opt/tde/share/apps/ksgmltools2 +Provides: tdelibs_doc +Requires: sgml-skel libxml2 +%define regcat /usr/bin/sgml-register-catalog +PreReq: %{regcat} /usr/bin/xmlcatalog /usr/bin/edit-xml-catalog +PreReq: sed grep awk + +%description doc +This package contains the core environment and templates for the Trinity +help system. + +%package devel +License: BSD3c(or similar) ; GPLv2+ ; LGPLv2.1+ +# usefiles /opt/tde/bin/dcopidl /opt/tde/bin/dcopidl2cpp /opt/tde/bin/kdb2html /opt/tde/bin/preparetips +Requires: libtqt4-devel libvorbis-devel tdelibs = %version autoconf automake libxslt-devel libxml2-devel libart_lgpl-devel libjpeg-devel tde-filesystem +# next line from tde-devel-packages macro +Requires: tdelibs-doc libtiff-devel openssl-devel update-desktop-files +Requires: libdrm-devel dbus-1-tqt-devel +Requires: libattr-devel libacl-devel +Requires: tdelibs-arts +Summary: Trinity Base Package: Build Environment +Group: System/GUI/TDE +Requires: fam-devel pcre-devel libidn-devel arts-devel + +%description devel +This package contains all necessary include files and libraries needed +to develop applications that require these. + +%prep + echo %suse_version +%setup -q -n kdelibs-%{version} +%patch0 +%patch1 +%patch3 +%patch5 +%patch7 +%patch10 +%patch11 +%patch12 +%patch13 +%patch15 +%patch16 +%patch17 +%patch26 +%patch27 +%patch29 +#%patch43 +#disable it because of BIC +#%patch45 +%if %suse_version > 1020 +%patch50 +%else +%patch950 +%endif +%patch52 +%patch34 +%patch44 +%patch40 +%patch8 +%patch9 +tar xfvj %SOURCE10 +# TODO! +%patch54 +%patch55 +%patch56 +%patch57 +%patch60 +# 10.2 goes back to the version without suseadds +%if %suse_version > 1010 +%patch65 +%else +%if %suse_version > 1000 +%patch66 +%else +%patch65 +%endif +%endif +%patch70 +rm -rf admin +bunzip2 -cd %{SOURCE8} | tar xfv - --exclude=.cvsignore --exclude=CVS +install -m 755 %{SOURCE2} admin +%patch2 +%patch80 -p 1 +%patch81 +%if %suse_version > 1000 +%patch83 +%endif +%patch85 +%patch86 +%patch88 +%patch89 +%patch90 +%patch95 +%patch97 +%if %suse_version < 1030 +%patch105 -p 1 +%endif +%patch106 +%patch108 +%patch109 +%patch110 +%patch111 +%patch112 +%patch113 +%patch114 +%patch117 +%patch122 +%if %suse_version > 1010 +%patch123 +%endif +%patch124 +%patch125 +%patch126 +%patch127 +%patch128 +%patch129 +%patch130 +%patch131 +%patch132 +%if %suse_version > 1020 +%patch133 +%patch134 +%endif +%patch149 +%patch150 +%patch152 +%patch153 +%patch154 +%patch155 +%patch156 +%if %suse_version > 1110 +%patch157 +%endif +%patch158 +%patch159 +%patch160 +%patch161 +%patch162 -p1 +%patch163 -p1 +%patch164 -p1 +%patch201 -p1 +%patch203 -p1 +%patch204 -p1 +%patch205 -p1 +%patch206 +%patch207 -p1 +%patch210 -p1 +%patch211 -p1 +%patch212 + +tar xfvj %SOURCE12 +# +# define KDE version exactly +# +myrelease=$(echo %release | cut -d. -f-1) +sed 's,#define KDE_VERSION_STRING "\(.*\)",#define KDE_VERSION_STRING "\1 \\"release '$myrelease'\\"",' kdecore/kdeversion.h > kdecore/kdeversion.h_ && mv kdecore/kdeversion.h_ kdecore/kdeversion.h +# +# create build enviroment +# +#UNSERMAKE=yes make -f admin/Makefile.common cvs + +%build +export PATH=$PWD/admin/:$PATH +FINAL="--enable-final" +CFLAGS="$CFLAGS -fno-strict-aliasing" +CXXFLAGS="$CXXFLAGS -fno-strict-aliasing" + +# common_options and do_make have been obsoleted by tde-filesystem + + export path_sudo=/usr/bin/sudo + # + # define the distribution exactly + # + test -e /.buildenv && . /.buildenv +%if %is_plus + # supplementary package + DISTRI="openSUSE $BUILD_DISTRIBUTION_VERSION UNSUPPORTED" +%else + # official build on released and maintained products + DISTRI="openSUSE $BUILD_DISTRIBUTION_VERSION" +%endif + sed 's,#define KDE_VERSION_STRING "\(.*\)",#define KDE_VERSION_STRING "\1 '"$ADD_VERSION"'",' kdecore/kdeversion.h > kdecore/kdeversion.h_ && mv kdecore/kdeversion.h_ kdecore/kdeversion.h + # find MIT kerberos + export PATH=/usr/lib/mit/bin:$PATH + # fast-malloc is not needed anymore + +%cmake_tde -d build \ + -DKDE_MALLOC_FULL=OFF \ + -DKDE_MALLOC=OFF \ + -DKDE_DISTRIBUTION="$DISTRI" \ + -DSSL_INSTALL_DIR=/usr/ssl \ + -DPCSC_INSTALL_DIR=/usr \ + %if %is_plus + -DENABLE_DNOFIFY=ON \ + %endif + +%make_tde -d build + +# +xmlcatbin=/usr/bin/xmlcatalog +# CATALOG=docbook-simple.xml +# $xmlcatbin --noout --create $CATALOG +# $xmlcatbin --noout --add "public" \ +# "-//OASIS//DTD Simplified DocBook XML V1.0//EN" \ +# "file://%{xml_mod_dtd_dir}/sdocbook.dtd" $CATALOG +# $xmlcatbin --noout --add "system" \ +# "http://www.oasis-open.org/docbook/xml/simple/1.0/sdocbook.dtd" \ +# "file://%{xml_mod_dtd_dir}/sdocbook.dtd" $CATALOG +%define FOR_ROOT_CAT for-catalog-%{name}-%{version}.xml +CATALOG=%{_tde_prefix}/share/apps/ksgmltools2/customization/catalog.xml +rm -f %{FOR_ROOT_CAT}.tmp +$xmlcatbin --noout --create %{FOR_ROOT_CAT}.tmp +# $xmlcatbin --noout --add "delegateSystem" \ +# "http://www.oasis-open.org/docbook/xml/simple/" \ +# "file:///$CATALOG" %{FOR_ROOT_CAT}.tmp +$xmlcatbin --noout --add "delegatePublic" \ + "-//KDE//DTD DocBook XML V4.2" \ + "file://$CATALOG" %{FOR_ROOT_CAT}.tmp +$xmlcatbin --noout --add "delegatePublic" \ + "-//KDE//ELEMENTS" \ + "file://$CATALOG" %{FOR_ROOT_CAT}.tmp +$xmlcatbin --noout --add "delegatePublic" \ + "-//KDE//ENTITIES" \ + "file://$CATALOG" %{FOR_ROOT_CAT}.tmp +# Create tag +sed '/ +/<\/catalog/i\ + ' \ + %{FOR_ROOT_CAT}.tmp > %{FOR_ROOT_CAT} + +%install + %makeinstall_tde -d build + mkdir -p $RPM_BUILD_ROOT/%{_tde_configkcfgdir} + install -D %SOURCE9 $RPM_BUILD_ROOT/%{_tde_icondir}/crystalsvg/16x16/filesystems/file_broken.png + mv $RPM_BUILD_ROOT/etc/xdg/menus/applications.menu \ + $RPM_BUILD_ROOT/etc/xdg/menus/applications.menu.kde + # + # lib64 compatibility symlink + # +%ifarch x86_64 ppc64 s390x mips64 sparc64 + mkdir -p $RPM_BUILD_ROOT/%{_tde_prefix}/lib/kde3/ + ln -sf ../../lib64/kde3/plugins \ + $RPM_BUILD_ROOT/%{_tde_prefix}/lib/kde3/plugins-lib64 +%endif + # + # add missing directories + # + for i in Applications Development Editors Edutainment Games Graphics Internet Multimedia Office Settings System Toys Utilities WordProcessing; do + install -d -m 0755 $RPM_BUILD_ROOT/%{_tde_appsdir}/$i + done + rm -f locale.list + for i in $(find /usr/share/locale -mindepth 1 -maxdepth 1 -type d | sed 's:/usr/share/locale/::'); do + install -d -m 755 $RPM_BUILD_ROOT/%{_tde_locale}/$i + install -d -m 755 $RPM_BUILD_ROOT/%{_tde_locale}/$i/LC_MESSAGES + install -d -m 755 $RPM_BUILD_ROOT/%{_tde_htmldir}/$i + echo "%lang($i) %doc %{_tde_locale}/$i" >> locale.list + done + %suse_update_desktop_file kresources X-KDE-settings-desktop + # unlike with other modules, tde_post_install shouldn't + # be put at the end of %install + %tde_post_install + # now create a filesystem layer + for theme in hicolor locolor; do + for j in actions apps filesystems mimetypes; do + for i in 16 22 32 48 64 128; do + install -d -m 0755 $RPM_BUILD_ROOT/%{_tde_icondir}/${theme}/${i}x${i}/${j} + done + install -d -m 0755 $RPM_BUILD_ROOT/%{_tde_icondir}/${theme}/scalable/${j} + done + done + install -d -m 0755 $RPM_BUILD_ROOT/etc/%{_tde_libdir} + install -d -m 0755 $RPM_BUILD_ROOT/etc/%{_tde_configdir} + install -d -m 0755 $RPM_BUILD_ROOT/%{_tde_datadir}/kdelibs/ + install -m 0644 %SOURCE6 $RPM_BUILD_ROOT/etc/ + rm -f $RPM_BUILD_ROOT/%{_tde_libdir}/libkdeinit_*.la + # + # add additional icon path (not needed anymore? we use cmake) + # + #mkdir -p ${RPM_BUILD_ROOT}/%{_tde_datadir}/kdelibs + #rm -f admin/*.orig + #cp -a admin ${RPM_BUILD_ROOT}/%{_tde_datadir}/kdelibs/ + # This is not needed on SUSE Linux! - Marcus Meissner + rm $RPM_BUILD_ROOT/%{_tde_bindir}/kgrantpty + # + # our version is in kdebase3 + # + rm -f $RPM_BUILD_ROOT/%{_tde_bindir}/fileshare* + # + # no sources for man pages + # + rm -f $RPM_BUILD_ROOT/%{_tde_htmldir}/en/kdelibs/man-* + # + # install BitTorrent icons + # + tar xfvz %SOURCE11 + for i in 16x16 22x22 32x32 48x48 64x64 128x128 ; do + install -m 0644 bt/$i/mimetypes/bt.png \ + $RPM_BUILD_ROOT/%{_tde_icondir}/crystalsvg/$i/mimetypes/torrent.png + done + cp CATALOG.%{name} catalog.xml ${RPM_BUILD_ROOT}/%{_tde_datadir}/ksgmltools2/customization/ + mkdir -p ${RPM_BUILD_ROOT}%{_sysconfdir}/xml + cp %{FOR_ROOT_CAT} ${RPM_BUILD_ROOT}%{_sysconfdir}/xml +# rm -f $RPM_BUILD_ROOT/%{_tde_libdir}/libkdefakes.la +# rm -f $RPM_BUILD_ROOT/%{_tde_libdir}/libkjava.la +rm -f $RPM_BUILD_ROOT/%{_tde_icondir}/hicolor/index.theme + # .desktop files in kdeaccessibility3 require the kttsd icon + for i in {16x16,22x22,32x32,48x48,64x64,128x128,scalable}; do mv $RPM_BUILD_ROOT/%{_tde_icondir}/crystalsvg/$i/apps/kttsd.* $RPM_BUILD_ROOT/%{_tde_icondir}/hicolor/$i/apps/;done + install -m 0644 %SOURCE14 $RPM_BUILD_ROOT/%{_tde_mimedir}/application/ + install -m 0644 %SOURCE15 $RPM_BUILD_ROOT/%{_tde_mimedir}/application/ + install -m 0644 %SOURCE16 $RPM_BUILD_ROOT/%{_tde_mimedir}/application/ + # fix bnc#396153 + for i in 16x16 22x22 32x32 48x48 64x64 128x128; do + ln -s %{_tde_icondir}/crystalsvg/$i/filesystems/network.png $RPM_BUILD_ROOT/%{_tde_icondir}/crystalsvg/$i/filesystems/preferences-system-network.png + ln -s %{_tde_icondir}/crystalsvg/$i/filesystems/desktop.png $RPM_BUILD_ROOT/%{_tde_icondir}/crystalsvg/$i/filesystems/preferences-desktop.png + done + chmod a-x $RPM_BUILD_ROOT/%{_tde_icondir}/crystalsvg/16x16/filesystems/file_broken.png + %fdupes -s $RPM_BUILD_ROOT + mkdir -p $RPM_BUILD_ROOT/etc/%{_tde_applicationsdir} + touch $RPM_BUILD_ROOT/etc/%{_tde_applicationsdir}/mimeinfo.cache + mkdir -p $RPM_BUILD_ROOT/%{_tde_applicationsdir} + touch $RPM_BUILD_ROOT/%{_tde_applicationsdir}/mimeinfo.cache +# Create /etc/ld.so.conf.d/kdelibs3.conf +mkdir -p $RPM_BUILD_ROOT/etc/ld.so.conf.d +cat > $RPM_BUILD_ROOT/etc/ld.so.conf.d/tdelibs.conf </dev/null 2>&1 + fi + if [ -x /usr/bin/edit-xml-catalog ]; then + edit-xml-catalog --group --catalog /etc/xml/suse-catalog.xml \ + --add /etc/xml/%{FOR_ROOT_CAT} + fi + +%postun doc + if [ "$1" = "0" -a -x %{regcat} ]; then + %{regcat} -r %{_tde_datadir}/ksgmltools2/customization/CATALOG.%{name} >/dev/null 2>&1 + fi + # remove entries only on removal of file + if [ ! -f %{xml_sysconf_dir}/%{FOR_ROOT_CAT} -a -x /usr/bin/edit-xml-catalog ] ; then + edit-xml-catalog --group --catalog /etc/xml/suse-catalog.xml \ + --del %{name}-%{version} + fi + exit 0 + +%clean + rm -rf ${RPM_BUILD_ROOT} + +%files default-style +%defattr(-,root,root) +%doc AUTHORS COPYING COPYING.BSD COPYING.LIB NAMING README +%{_tde_libdir}/libkdefx.so.* +%{_tde_libdir}/kde3/plugins/styles/plastik.* + +%files +%defattr(-,root,root) +%doc AUTHORS COPYING COPYING.BSD COPYING.LIB NAMING README +/etc/ld.so.conf.d/tdelibs.conf +%dir /etc/%{_tde_prefix} +%dir %{_tde_prefix} +%dir %{_tde_bindir} +%dir %{_tde_includedir} +%dir %{_tde_sharedir} +%dir %{_tde_configkcfgdir} +%_mandir/man*/* +%{_tde_bindir}/checkXML +%{_tde_bindir}/dcop +%{_tde_bindir}/dcopclient +%{_tde_bindir}/dcopfind +%{_tde_bindir}/dcopobject +%{_tde_bindir}/dcopref +%{_tde_bindir}/dcops* +%{_tde_bindir}/dcopquit +%{_tde_bindir}/imagetops +%{_tde_bindir}/ka* +%{_tde_bindir}/kbuildsycoca +%{_tde_bindir}/kco* +%{_tde_bindir}/kcmshell +%{_tde_bindir}/kded +%{_tde_bindir}/kdeinit* +%{_tde_bindir}/start_kdeinit +%{_tde_bindir}/start_kdeinit_wrapper +%{_tde_bindir}/kde-config +%{_tde_bindir}/kde-menu +%{_tde_bindir}/kdesu_stub +%{_tde_bindir}/kdontchangethehostname +%{_tde_bindir}/kfile +%{_tde_bindir}/ki* +%{_tde_bindir}/kfmexec +%{_tde_bindir}/klauncher +%{_tde_bindir}/kmailservice +%{_tde_bindir}/ktradertest +%{_tde_bindir}/knotify +%{_tde_bindir}/kstartupconfig +%{_tde_bindir}/kdostartupconfig +%verify(not mode) %{_tde_bindir}/kpac_dhcp_helper +%{_tde_bindir}/ksendbugmail +%{_tde_bindir}/kshell +%{_tde_bindir}/ktelnetservice +%{_tde_bindir}/kwrapper +%{_tde_bindir}/lnusertemp +%{_tde_bindir}/make_driver_db_lpr +%{_tde_bindir}/khotnewstuff +%{_tde_bindir}/makekdewidgets +%dir %{_tde_libdir} +%dir %{_tde_libdir}/kde3 +%{_tde_libdir}/kde3/dcopserver.* +%{_tde_libdir}/kde3/kaddprinterwizard.* +%{_tde_libdir}/kde3/kbuildsycoca.* +%{_tde_libdir}/kde3/kcmshell.* +%{_tde_libdir}/kde3/kcm_kresources.* +%{_tde_libdir}/kde3/kconf_update.* +%{_tde_libdir}/kde3/kcookiejar.* +%{_tde_libdir}/kde3/kded.* +%{_tde_libdir}/kde3/kded_proxyscout.* +%{_tde_libdir}/kde3/kfileaudiopreview.* +%{_tde_libdir}/kde3/klauncher.* +%{_tde_libdir}/kde3/knotify.* +%{_tde_libdir}/kde3/kabc* +%{_tde_libdir}/kde3/kbzip2filter.* +%{_tde_libdir}/kde3/kded_k* +%{_tde_libdir}/kde3/kdeprint_ext.* +%{_tde_libdir}/kde3/kdeprint_lp* +%{_tde_libdir}/kde3/kdeprint_rlpr.* +%{_tde_libdir}/kde3/kdeprint_tool_escputil.* +%{_tde_libdir}/kde3/kgzipfilter.* +%{_tde_libdir}/kde3/khtmlimagepart.* +%{_tde_libdir}/kde3/ki* +%{_tde_libdir}/kde3/kjavaappletviewer.* +%{_tde_libdir}/kde3/ktexteditor_* +%{_tde_libdir}/kde3/libk* +%{_tde_libdir}/kde3/kspell_* +%{_tde_libdir}/kde3/kstyle_plastik_config.* +%{_tde_libdir}/kde3/kstyle_highcontrast_config.* +%{_tde_libdir}/kde3/libshellscript.* +%exclude %{_tde_libdir}/kde3/plugins/styles/plastik.* +%{_tde_libdir}/kde3/plugins +%{_tde_libdir}/libDCOP.so.* +%exclude %{_tde_libdir}/libkdefx.so.* +%{_tde_libdir}/libk*.so.* +%{_tde_libdir}/libvcard.so.* +%{_tde_libdir}/libkdeinit*.so +%{_tde_libdir}/libnetworkstatus.so.* +%{_tde_libdir}/libconnectionmanager.so.* +%{_tde_libdir}/kde3/kded_networkstatus.* +%{_tde_appsdir} +%dir %{_tde_datadir} +%{_tde_datadir}/LICENSES +%{_tde_datadir}/ka* +%{_tde_datadir}/kc* +%dir %{_tde_datadir}/kdeprint +%{_tde_datadir}/kdeprint/apsdriver* +%{_tde_datadir}/kdeprint/filters +%{_tde_datadir}/kdeprint/icons +%{_tde_datadir}/kdeprint/lprngtooldriver1 +%{_tde_datadir}/kdeprint/pics +%dir %{_tde_datadir}/kdeprint/plugins +%{_tde_datadir}/kdeprint/plugins/ext.print +%{_tde_datadir}/kdeprint/plugins/lp*.print +%{_tde_datadir}/kdeprint/plugins/rlpr.print +%{_tde_datadir}/kdeprint/s* +%{_tde_datadir}/kdeprint/t* +%{_tde_datadir}/kdeui +%{_tde_datadir}/kdewidgets +%{_tde_datadir}/khtml +%{_tde_datadir}/kio_uiserver +%{_tde_datadir}/kjava +%{_tde_datadir}/knotify +%{_tde_datadir}/kssl +%{_tde_datadir}/kstyle +%{_tde_datadir}/ktexteditor_* +%{_tde_datadir}/proxyscout +%{_tde_datadir}/knewstuff +%{_tde_sharedir}/autostart +%{_tde_configdir} +%{_tde_sharedir}/emoticons +%{_tde_icondir}/icons +%{_tde_locale}/locale +%{_tde_mimedir}/mimelnk +%{_tde_sharedir}/service* +%config /etc/tderc +%{_tde_applicationsdir} +%{_tde_bindir}/cupsd* +%{_tde_bindir}/make_driver_db_cups +%{_tde_libdir}/kde3/kdeprint_cups.* +%{_tde_libdir}/kde3/cupsdconf.* +%{_tde_datadir}/kdeprint/cups* +%{_tde_datadir}/kdeprint/kde_logo.png +%{_tde_datadir}/kdeprint/plugins/cups.print +%{_tde_datadir}/kdeprint/preview* +%ifarch x86_64 ppc64 s390x mips64 sparc64 +%dir %{_tde_prefix}/lib +%dir %{_tde_prefix}/lib/kde3 +%{_tde_prefix}/lib/kde3/plugins-lib64 +%endif +/etc/xdg/menus +%dir /etc/%{_tde_prefix} +%dir /etc/%{_tde_sharedir} +%dir /etc/%{_tde_applicationsdir} +%ghost /etc/%{_tde_applicationsdir}/mimeinfo.cache +%dir %{_tde_prefix} +%dir %{_tde_sharedir} +%dir %{_tde_applicationsdir} +%ghost %{_tde_applicationsdir}/mimeinfo.cache + + +%files arts +%defattr(-,root,root) +%{_tde_bindir}/artsmessage +%{_tde_libdir}/libartskde.so.* + +%files doc +%defattr(-,root,root) +%doc %{_tde_docdir} +%{_tde_bindir}/meinproc +%{_tde_datadir}/ksgmltools2 +%config %{_sysconfdir}/xml/%{FOR_ROOT_CAT} + +%files devel +%defattr(-,root,root) +%dir %{_tde_datadir}/kdelibs +%{_tde_bindir}/dcopidl* +%{_tde_bindir}/kmimelist +%{_tde_bindir}/preparetips +%{_tde_bindir}/ksvgtopng +%{_tde_bindir}/kunittestmodrunner +#%{_tde_bindir}/MISC +%{_tde_includedir}/* +%{_tde_datadir}/dcopidlng +%{_tde_datadir}/kdelibs/admin +%{_tde_libdir}/libartskde.la +%{_tde_libdir}/libkunittest.la +%{_tde_libdir}/libkunittest.so +%{_tde_libdir}/libartskde.so +%{_tde_libdir}/libDCOP.so +%{_tde_libdir}/libvcard.so +%{_tde_libdir}/libvcard.la +%{_tde_libdir}/libDCOP.la +%{_tde_libdir}/lib*.a +%{_tde_libdir}/libkabc_dir.la +%{_tde_libdir}/libkabc_dir.so +%{_tde_libdir}/libkabc_file.la +%{_tde_libdir}/libkabc_file.so +%{_tde_libdir}/libkabc.la +%{_tde_libdir}/libkabc_ldapkio.la +%{_tde_libdir}/libkabc_ldapkio.so +%{_tde_libdir}/libkabc.so +%{_tde_libdir}/libkatepartinterfaces.la +%{_tde_libdir}/libkatepartinterfaces.so +%{_tde_libdir}/libkdecore.la +%{_tde_libdir}/libkdecore.so +%{_tde_libdir}/libkdefakes.la +%{_tde_libdir}/libkdefakes.so +%{_tde_libdir}/libkdefx.la +%{_tde_libdir}/libkdefx.so +%{_tde_libdir}/libkdemm.la +%{_tde_libdir}/libkdemm.so +%{_tde_libdir}/libkdeprint.la +%{_tde_libdir}/libkdeprint_management.la +%{_tde_libdir}/libkdeprint_management.so +%{_tde_libdir}/libkdeprint.so +%{_tde_libdir}/libkdesasl.la +%{_tde_libdir}/libkdesasl.so +%{_tde_libdir}/libkdesu.la +%{_tde_libdir}/libkdesu.so +%{_tde_libdir}/libkdeui.la +%{_tde_libdir}/libkdeui.so +%{_tde_libdir}/libkdnssd.la +%{_tde_libdir}/libkdnssd.so +%{_tde_libdir}/libkhtml.la +%{_tde_libdir}/libkhtml.so +%{_tde_libdir}/libkimproxy.la +%{_tde_libdir}/libkimproxy.so +%{_tde_libdir}/libkio.la +%{_tde_libdir}/libkio.so +%{_tde_libdir}/libkjava.la +%{_tde_libdir}/libkjava.so +%{_tde_libdir}/libkjs.la +%{_tde_libdir}/libkjs.so +%{_tde_libdir}/libkmdi2.la +%{_tde_libdir}/libkmdi2.so +%{_tde_libdir}/libkmdi.la +%{_tde_libdir}/libkmdi.so +%{_tde_libdir}/libkmediaplayer.la +%{_tde_libdir}/libkmediaplayer.so +%{_tde_libdir}/libkmid.la +%{_tde_libdir}/libkmid.so +%{_tde_libdir}/libknewstuff.la +%{_tde_libdir}/libknewstuff.so +%{_tde_libdir}/libkntlm.la +%{_tde_libdir}/libkntlm.so +%{_tde_libdir}/libkparts.la +%{_tde_libdir}/libkparts.so +%{_tde_libdir}/libkresources.la +%{_tde_libdir}/libkresources.so +%{_tde_libdir}/libkscreensaver.la +%{_tde_libdir}/libkscreensaver.so +%{_tde_libdir}/libkscript.la +%{_tde_libdir}/libkscript.so +%{_tde_libdir}/libkspell2.la +%{_tde_libdir}/libkspell2.so +%{_tde_libdir}/libkspell.la +%{_tde_libdir}/libkspell.so +%{_tde_libdir}/libktexteditor.la +%{_tde_libdir}/libktexteditor.so +%{_tde_libdir}/libkutils.la +%{_tde_libdir}/libkutils.so +%{_tde_libdir}/libkwalletbackend.la +%{_tde_libdir}/libkwalletbackend.so +%{_tde_libdir}/libkwalletclient.la +%{_tde_libdir}/libkwalletclient.so +%{_tde_libdir}/libnetworkstatus.la +%{_tde_libdir}/libnetworkstatus.so +%{_tde_libdir}/libconnectionmanager.la +%{_tde_libdir}/libconnectionmanager.so + +%changelog diff --git a/opensuse/core/tdelibs/tderc b/opensuse/core/tdelibs/tderc new file mode 100644 index 000000000..c98cc4144 --- /dev/null +++ b/opensuse/core/tdelibs/tderc @@ -0,0 +1,11 @@ +[Directories] +prefixes=/etc/opt/tde/ +userProfileMapFile=/etc/kde-user-profile +profileDirsPrefix=/var/lib/kde-profiles/ +dir_wallpaper=/usr/share/wallpapers + +[Directories-default] +ProfileDescription=Default Profile +ProfileInstallUser=root +prefixes=/var/lib/kde-profiles/default/ + diff --git a/opensuse/core/tdelibs/textcompletion-editor.diff b/opensuse/core/tdelibs/textcompletion-editor.diff new file mode 100644 index 000000000..d14776149 --- /dev/null +++ b/opensuse/core/tdelibs/textcompletion-editor.diff @@ -0,0 +1,344 @@ +Index: khtml/khtmlview.h +=================================================================== +--- khtml/khtmlview.h.orig ++++ khtml/khtmlview.h +@@ -314,6 +314,7 @@ private: + QStringList formCompletionItems(const QString &name) const; + void clearCompletionHistory(const QString& name); + void addFormCompletionItem(const QString &name, const QString &value); ++ void removeFormCompletionItem(const QString &name, const QString &value); + + void addNonPasswordStorableSite( const QString& host ); + bool nonPasswordStorableSite( const QString& host ) const; +Index: khtml/khtmlview.cpp +=================================================================== +--- khtml/khtmlview.cpp.orig ++++ khtml/khtmlview.cpp +@@ -3088,6 +3088,16 @@ void KHTMLView::addFormCompletionItem(co + d->formCompletions->writeEntry(name, items); + } + ++void KHTMLView::removeFormCompletionItem(const QString &name, const QString &value) ++{ ++ if (!m_part->settings()->isFormCompletionEnabled()) ++ return; ++ ++ QStringList items = formCompletionItems(name); ++ if (items.remove(value)) ++ d->formCompletions->writeEntry(name, items); ++} ++ + void KHTMLView::addNonPasswordStorableSite(const QString& host) + { + if (!d->formCompletions) { +Index: khtml/rendering/render_form.h +=================================================================== +--- khtml/rendering/render_form.h.orig ++++ khtml/rendering/render_form.h +@@ -272,10 +272,12 @@ private slots: + void spellCheckerMisspelling( const QString &text, const QStringList &, unsigned int pos); + void spellCheckerCorrected( const QString &, const QString &, unsigned int ); + void spellCheckerFinished(); ++ void slotRemoveFromHistory( const QString & ); + + private: + enum LineEditMenuID { +- ClearHistory ++ ClearHistory, ++ EditHistory + }; + DOM::HTMLInputElementImpl* m_input; + KHTMLView* m_view; +Index: khtml/rendering/render_form.cpp +=================================================================== +--- khtml/rendering/render_form.cpp.orig ++++ khtml/rendering/render_form.cpp +@@ -385,7 +385,9 @@ QPopupMenu *LineEditWidget::createPopupM + + if (m_input->autoComplete()) { + popup->insertSeparator(); +- int id = popup->insertItem( SmallIconSet("history_clear"), i18n("Clear &History"), ClearHistory ); ++ int id = popup->insertItem( SmallIconSet("edit"), i18n("&Edit History..."), EditHistory ); ++ popup->setItemEnabled( id, (compObj() && !compObj()->isEmpty()) ); ++ id = popup->insertItem( SmallIconSet("history_clear"), i18n("Clear &History"), ClearHistory ); + popup->setItemEnabled( id, (compObj() && !compObj()->isEmpty()) ); + } + +@@ -409,11 +411,25 @@ void LineEditWidget::extendedMenuActivat + m_view->clearCompletionHistory(m_input->name().string()); + if (compObj()) + compObj()->clear(); ++ case EditHistory: ++ { ++ KHistoryComboEditor dlg( compObj() ? compObj()->items() : QStringList(), this ); ++ connect( &dlg, SIGNAL( removeFromHistory(const QString&) ), SLOT( slotRemoveFromHistory(const QString&)) ); ++ dlg.exec(); ++ } + default: + break; + } + } + ++void LineEditWidget::slotRemoveFromHistory(const QString &entry) ++{ ++ m_view->removeFormCompletionItem(m_input->name().string(), entry); ++ if (compObj()) ++ compObj()->removeItem(entry); ++} ++ ++ + bool LineEditWidget::event( QEvent *e ) + { + if (KLineEdit::event(e)) +Index: kdeui/kcombobox.h +=================================================================== +--- kdeui/kcombobox.h.orig ++++ kdeui/kcombobox.h +@@ -24,8 +24,15 @@ + + #include + #include ++#include ++#include ++#include ++#include ++#include + + #include ++#include ++#include + + class QListBoxItem; + class QPopupMenu; +@@ -669,6 +676,12 @@ public: + */ + void reset() { slotReset(); } + ++ /** ++ * When enabling it you have to connect to "removed" signal and save changes ++ */ ++ void setHistoryEditorEnabled( bool enable ); ++ bool isHistoryEditorEnabled() const; ++ + public slots: + /** + * Adds an item to the end of the history list and to the completion list. +@@ -702,6 +715,8 @@ signals: + */ + void cleared(); + ++ void removed( const QString& item ); ++ + protected: + /** + * Handling key-events, the shortcuts to rotate the items. +@@ -741,10 +756,17 @@ private slots: + void slotClear(); + + /** ++ * Called from the popupmenu, ++ */ ++ void slotEdit(); ++ ++ /** + * Appends our own context menu entry. + */ + void addContextMenuItems( QPopupMenu* ); + ++ void slotRemoveFromHistory( const QString & ); ++ + private: + void init( bool useCompletion ); + void rotateUp(); +@@ -774,6 +796,30 @@ private: + KHistoryComboPrivate* const d; + }; + ++class KDEUI_EXPORT KHistoryComboEditor : public KDialogBase ++{ ++ Q_OBJECT ++ ++public: ++ KHistoryComboEditor( const QStringList& entries, QWidget *parent = 0L ); ++ ~KHistoryComboEditor(); ++ ++signals: ++ void removeFromHistory( const QString& ); ++ ++protected slots: ++ virtual void slotUser1(); // User1 is "Delete Entry" button ++ void slotSelectionChanged( QListViewItem * item ); ++ ++protected: ++ virtual void virtual_hook( int id, void* data ); ++ ++private: ++ KListView *m_pListView; ++ ++ class KHistoryComboEditorPrivate; ++ KHistoryComboEditorPrivate* const d; ++}; + + #endif + +Index: kdeui/kcombobox.cpp +=================================================================== +--- kdeui/kcombobox.cpp.orig ++++ kdeui/kcombobox.cpp +@@ -29,6 +29,7 @@ + #include + #include + #include ++#include + #include + #include + #include +@@ -343,10 +344,22 @@ void KComboBox::lineEditDeleted() + // ********************************************************************* + // ********************************************************************* + ++class KHistoryCombo::KHistoryComboPrivate ++{ ++public: ++ KHistoryComboPrivate() : bHistoryEditorEnabled(false) ++ { ++ } ++ ~KHistoryComboPrivate() ++ { ++ } ++ ++ bool bHistoryEditorEnabled; ++}; + + // we are always read-write + KHistoryCombo::KHistoryCombo( QWidget *parent, const char *name ) +- : KComboBox( true, parent, name ), d(0) ++ : KComboBox( true, parent, name ), d(new KHistoryComboPrivate) + { + init( true ); // using completion + } +@@ -354,7 +367,7 @@ KHistoryCombo::KHistoryCombo( QWidget *p + // we are always read-write + KHistoryCombo::KHistoryCombo( bool useCompletion, + QWidget *parent, const char *name ) +- : KComboBox( true, parent, name ), d(0) ++ : KComboBox( true, parent, name ), d(new KHistoryComboPrivate) + { + init( useCompletion ); + } +@@ -441,6 +454,10 @@ void KHistoryCombo::addContextMenuItems( + if ( menu ) + { + menu->insertSeparator(); ++ if (d->bHistoryEditorEnabled) { ++ int idedit = menu->insertItem( SmallIconSet("edit"), i18n("&Edit History..."), this, SLOT( slotEdit()) ); ++ menu->setItemEnabled(idedit, count()); ++ } + int id = menu->insertItem( SmallIconSet("history_clear"), i18n("Clear &History"), this, SLOT( slotClear())); + if (!count()) + menu->setItemEnabled(id, false); +@@ -677,10 +694,104 @@ void KHistoryCombo::slotClear() + emit cleared(); + } + ++void KHistoryCombo::slotEdit() ++{ ++ KHistoryComboEditor dlg( historyItems(), this ); ++ connect( &dlg, SIGNAL( removeFromHistory(const QString&) ), SLOT( slotRemoveFromHistory(const QString&)) ); ++ dlg.exec(); ++} ++ ++void KHistoryCombo::slotRemoveFromHistory(const QString &entry) ++{ ++ removeFromHistory(entry); ++ emit removed(entry); ++} ++ ++void KHistoryCombo::setHistoryEditorEnabled( bool enable ) ++{ ++ d->bHistoryEditorEnabled = enable; ++} ++ ++bool KHistoryCombo::isHistoryEditorEnabled() const ++{ ++ return d->bHistoryEditorEnabled; ++} ++ + void KComboBox::virtual_hook( int id, void* data ) + { KCompletionBase::virtual_hook( id, data ); } + + void KHistoryCombo::virtual_hook( int id, void* data ) + { KComboBox::virtual_hook( id, data ); } + ++void KHistoryComboEditor::virtual_hook( int id, void* data ) ++{ KDialogBase::virtual_hook( id, data ); } ++ ++KHistoryComboEditor::KHistoryComboEditor( const QStringList& entries, QWidget *parent ) ++: KDialogBase( parent, "khistorycomboeditor", true, i18n( "History Editor" ), ++ KDialogBase::Close | KDialogBase::User1, KDialogBase::User1, true, ++ KGuiItem( i18n( "&Delete Entry" ), "editdelete") ), d(0) ++{ ++ QVBox* box = new QVBox( this ); ++ box->setSpacing( KDialog::spacingHint() ); ++ setMainWidget( box ); ++ ++ new QLabel( i18n( "This dialog allows you to delete unwanted history items." ), box ); ++ ++ // Add searchline ++ QHBox* searchbox = new QHBox( box ); ++ searchbox->setSpacing( KDialog::spacingHint() ); ++ ++ QToolButton *clearSearch = new QToolButton(searchbox); ++ clearSearch->setTextLabel(i18n("Clear Search"), true); ++ clearSearch->setIconSet(SmallIconSet(QApplication::reverseLayout() ? "clear_left" : "locationbar_erase")); ++ QLabel* slbl = new QLabel(i18n("&Search:"), searchbox); ++ KListViewSearchLine* listViewSearch = new KListViewSearchLine(searchbox); ++ slbl->setBuddy(listViewSearch); ++ connect(clearSearch, SIGNAL(pressed()), listViewSearch, SLOT(clear())); ++ ++ // Add ListView ++ m_pListView = new KListView( box ); ++ listViewSearch->setListView(m_pListView); ++ m_pListView->setAllColumnsShowFocus(true); ++ m_pListView->header()->hide(); ++ m_pListView->addColumn(""); ++ m_pListView->setRenameable( 0 ); ++ ++ box->setStretchFactor( m_pListView, 1 ); ++ ++ QStringList newlist = entries; ++ for ( QStringList::Iterator it = newlist.begin(); it != newlist.end(); ++it ) { ++ new QListViewItem( m_pListView, *it ); ++ } ++ ++ m_pListView->setMinimumSize( m_pListView->sizeHint() ); ++ ++ connect( m_pListView, SIGNAL( selectionChanged( QListViewItem * ) ), ++ this, SLOT( slotSelectionChanged( QListViewItem * ) ) ); ++ ++ enableButton( KDialogBase::User1, false ); ++ ++ resize( sizeHint() ); ++} ++ ++KHistoryComboEditor::~KHistoryComboEditor() ++{ ++} ++ ++void KHistoryComboEditor::slotUser1() // Delete button ++{ ++ QListViewItem *item = m_pListView->selectedItem(); ++ ++ if ( item ) { ++ emit removeFromHistory( item->text(0) ); ++ m_pListView->takeItem( item ); ++ enableButton( KDialogBase::User1, false ); ++ } ++} ++ ++void KHistoryComboEditor::slotSelectionChanged( QListViewItem * item ) ++{ ++ enableButton( KDialogBase::User1, item ); ++} ++ + #include "kcombobox.moc" diff --git a/opensuse/core/tdelibs/use-mediamanager.diff b/opensuse/core/tdelibs/use-mediamanager.diff new file mode 100644 index 000000000..007c40bd0 --- /dev/null +++ b/opensuse/core/tdelibs/use-mediamanager.diff @@ -0,0 +1,44 @@ +Index: kioslave/file/file.cc +=================================================================== +--- kioslave/file/file.cc.orig ++++ kioslave/file/file.cc +@@ -69,6 +69,7 @@ + #include + #include + ++#include + #include + #include + #include +@@ -1609,6 +1610,31 @@ void FileProtocol::unmount( const QStrin + #endif /* HAVE_VOLMGT */ + + err = testLogFile( tmp ); ++ ++ if (err.contains("fstab") || err.contains("root")) { ++ QString olderr; ++ err = QString::null; ++ ++ DCOPRef d("kded", "mediamanager"); ++ d.setDCOPClient ( dcopClient() ); ++ DCOPReply reply = d.call("properties", _point); ++ QString udi; ++ ++ if ( reply.isValid() ) { ++ QStringList list = reply; ++ if (list.size()) ++ udi = list[0]; ++ } ++ ++ if (!udi.isEmpty()) ++ reply = d.call("unmount", udi); ++ ++ if (udi.isEmpty() || !reply.isValid()) ++ err = olderr; ++ else if (reply.isValid()) ++ reply.get(err); ++ } ++ + if ( err.isEmpty() ) + finished(); + else diff --git a/opensuse/core/tdelibs/use-xauthlocalhostname.diff b/opensuse/core/tdelibs/use-xauthlocalhostname.diff new file mode 100644 index 000000000..42ef39b9c --- /dev/null +++ b/opensuse/core/tdelibs/use-xauthlocalhostname.diff @@ -0,0 +1,240 @@ +Index: kinit/wrapper.c +=================================================================== +--- kinit/wrapper.c.orig ++++ kinit/wrapper.c +@@ -164,7 +164,9 @@ static int openSocket() + sock_file[strlen(sock_file)-1] = 0; + + strncat(sock_file, "/socket-", MAX_SOCK_FILE - strlen(sock_file)); +- if (gethostname(sock_file+strlen(sock_file), MAX_SOCK_FILE - strlen(sock_file) - 1) != 0) ++ if( getenv("XAUTHLOCALHOSTNAME")) ++ strncat(sock_file, getenv("XAUTHLOCALHOSTNAME"), MAX_SOCK_FILE - strlen(sock_file) - 1); ++ else if (gethostname(sock_file+strlen(sock_file), MAX_SOCK_FILE - strlen(sock_file) - 1) != 0) + { + perror("Warning: Could not determine hostname: "); + return -1; +Index: kinit/lnusertemp.c +=================================================================== +--- kinit/lnusertemp.c.orig ++++ kinit/lnusertemp.c +@@ -39,7 +39,7 @@ + + int check_tmp_dir(const char *tmp_dir); + int create_link(const char *file, const char *tmp_dir); +-int build_link(const char *tmp_prefix, const char *kde_prefix); ++int build_link(const char *tmp_prefix, const char *kde_prefix, int kdehostname); + + int check_tmp_dir(const char *tmp_dir) + { +@@ -89,7 +89,7 @@ int create_link(const char *file, const + } + + +-int build_link(const char *tmp_prefix, const char *kde_prefix) ++int build_link(const char *tmp_prefix, const char *kde_prefix, int kdehostname) + { + struct passwd *pw_ent; + char kde_tmp_dir[PATH_MAX+1]; +@@ -157,10 +157,21 @@ int build_link(const char *tmp_prefix, c + } + + strncat(kde_tmp_dir, kde_prefix, PATH_MAX - strlen(kde_tmp_dir)); +- if (gethostname(kde_tmp_dir+strlen(kde_tmp_dir), PATH_MAX - strlen(kde_tmp_dir) - 1) != 0) ++ ++ if( kdehostname ) ++ { ++ if( getenv("XAUTHLOCALHOSTNAME")) ++ strncat(kde_tmp_dir+strlen(kde_tmp_dir), getenv("XAUTHLOCALHOSTNAME"), PATH_MAX - strlen(kde_tmp_dir) - 1); ++ else ++ return 0; ++ } ++ else + { +- perror("Aborting. Could not determine hostname: "); +- exit(255); ++ if (gethostname(kde_tmp_dir+strlen(kde_tmp_dir), PATH_MAX - strlen(kde_tmp_dir) - 1) != 0) ++ { ++ perror("Could not determine hostname: "); ++ return 1; ++ } + } + kde_tmp_dir[sizeof(kde_tmp_dir)-1] = '\0'; + +@@ -266,7 +277,9 @@ int main(int argc, char **argv) + kde_prefix = "/cache-"; + } + +- res = build_link(tmp_prefix, kde_prefix); ++ res = build_link(tmp_prefix, kde_prefix, 1); ++ if( build_link(tmp_prefix, kde_prefix, 0)) ++ res = 1; + + free(tmp_prefix); + +Index: kdecore/kstandarddirs.cpp +=================================================================== +--- kdecore/kstandarddirs.cpp.orig ++++ kdecore/kstandarddirs.cpp +@@ -719,7 +719,10 @@ void KStandardDirs::createSpecialResourc + { + char hostname[256]; + hostname[0] = 0; +- gethostname(hostname, 255); ++ if( getenv("XAUTHLOCALHOSTNAME")) ++ strlcpy(hostname, getenv("XAUTHLOCALHOSTNAME"), 255 ); ++ else ++ gethostname(hostname, 255); + QString dir = QString("%1%2-%3").arg(localkdedir()).arg(type).arg(hostname); + char link[1024]; + link[1023] = 0; +Index: kdecore/kcrash.cpp +=================================================================== +--- kdecore/kcrash.cpp.orig ++++ kdecore/kcrash.cpp +@@ -466,7 +466,9 @@ static int openSocket() + sock_file[strlen(sock_file)-1] = 0; + + strncat(sock_file, "/socket-", MAX_SOCK_FILE - strlen(sock_file)); +- if (gethostname(sock_file+strlen(sock_file), MAX_SOCK_FILE - strlen(sock_file) - 1) != 0) ++ if( getenv("XAUTHLOCALHOSTNAME")) ++ strncat(sock_file, getenv("XAUTHLOCALHOSTNAME"), MAX_SOCK_FILE - strlen(sock_file) - 1); ++ else if (gethostname(sock_file+strlen(sock_file), MAX_SOCK_FILE - strlen(sock_file) - 1) != 0) + { + perror("Warning: Could not determine hostname: "); + return -1; +Index: dcop/dcopserver_shutdown.c +=================================================================== +--- dcop/dcopserver_shutdown.c.orig ++++ dcop/dcopserver_shutdown.c +@@ -95,7 +95,9 @@ static void getDCOPFile(char *dcop_file, + strncat(dcop_file, "/.DCOPserver_", n); + n -= strlen("/.DCOPserver_"); + +- if (gethostname(dcop_file+strlen(dcop_file), n) != 0) ++ if (getenv("XAUTHLOCALHOSTNAME")) ++ strncat(dcop_file+strlen(dcop_file), getenv("XAUTHLOCALHOSTNAME"), n); ++ else if (gethostname(dcop_file+strlen(dcop_file), n) != 0) + { + perror("Error. Could not determine hostname: "); + dcop_file[0] = '\0'; +Index: dcop/dcopc.c +=================================================================== +--- dcop/dcopc.c.orig ++++ dcop/dcopc.c +@@ -684,7 +684,9 @@ dcop_connect() + } + + hostName[0] = '\0'; +- if (gethostname(hostName, sizeof(hostName))) ++ if (getenv("XAUTHLOCALHOSTNAME")) ++ strlcpy(hostName, getenv("XAUTHLOCALHOSTNAME"),sizeof(hostName)-1); ++ else if (gethostname(hostName, sizeof(hostName))) + strcpy(hostName, "localhost"); + else + hostName[sizeof(hostName)-1] = '\0'; +Index: dcop/dcopclient.cpp +=================================================================== +--- dcop/dcopclient.cpp.orig ++++ dcop/dcopclient.cpp +@@ -277,7 +277,9 @@ static QCString dcopServerFile(const QCS + { + char hostName[256]; + hostName[0] = '\0'; +- if (gethostname(hostName, sizeof(hostName))) ++ if (getenv("XAUTHLOCALHOSTNAME")) ++ fName += getenv("XAUTHLOCALHOSTNAME"); ++ else if (gethostname(hostName, sizeof(hostName))) + { + fName += "localhost"; + } +Index: dcop/KDE-ICE/Xtranssock.c +=================================================================== +--- dcop/KDE-ICE/Xtranssock.c.orig ++++ dcop/KDE-ICE/Xtranssock.c +@@ -1444,6 +1444,7 @@ UnixHostReallyLocal (char *host) + + { + char hostnamebuf[256]; ++ char* xauthlocalname = getenv("XAUTHLOCALHOSTNAME"); + + TRANS(GetHostname) (hostnamebuf, sizeof (hostnamebuf)); + +@@ -1451,6 +1452,10 @@ UnixHostReallyLocal (char *host) + { + return (1); + } ++ else if(xauthlocalname && strcmp (xauthlocalname, host) == 0) ++ { ++ return (1); ++ } + else + { + /* +Index: kded/khostname.cpp +=================================================================== +--- kded/khostname.cpp.orig ++++ kded/khostname.cpp +@@ -111,7 +111,8 @@ static QCStringList split(const QCString + + void KHostName::changeX() + { +- QString cmd = "xauth list"; ++ const char* xauthlocalhostname = getenv("XAUTHLOCALHOSTNAME"); ++ QString cmd = "xauth -n list"; + FILE *xFile = popen(QFile::encodeName(cmd), "r"); + if (!xFile) + { +@@ -123,6 +124,7 @@ void KHostName::changeX() + char buf[1024+1]; + while (!feof(xFile)) + { ++ buf[1024]='\0'; + QCString line = fgets(buf, 1024, xFile); + if (line.length()) + line.truncate(line.length()-1); // Strip LF. +@@ -157,12 +159,17 @@ void KHostName::changeX() + QCString newNetId = newName+netId.mid(i); + QCString oldNetId = netId.left(i); + +- if(oldNetId != oldName) +- continue; ++ if(oldNetId != oldName ++ && (!xauthlocalhostname || strcmp(xauthlocalhostname, oldNetId.data()) != 0)) ++ continue; + +- cmd = "xauth remove "+KProcess::quote(netId); +- system(QFile::encodeName(cmd)); +- cmd = "xauth add "; ++ // don't nuke the xauth when XAUTHLOCALHOSTNAME points to it ++ if (!xauthlocalhostname || oldNetId != xauthlocalhostname) ++ { ++ cmd = "xauth -n remove "+KProcess::quote(netId); ++ system(QFile::encodeName(cmd)); ++ } ++ cmd = "xauth -n add "; + cmd += KProcess::quote(newNetId); + cmd += " "; + cmd += KProcess::quote(authName); +@@ -276,7 +283,10 @@ void KHostName::changeDcop() + } + } + +- // Remove old entries ++ // Remove old entries, but only if XAUTHLOCALHOSTNAME doesn't point ++ // to it ++ char* xauthlocalhostname = getenv("XAUTHLOCALHOSTNAME"); ++ if (!xauthlocalhostname || !oldNetId.contains(xauthlocalhostname)) + { + QString cmd = "iceauth remove "+KProcess::quote("netid="+oldNetId); + system(QFile::encodeName(cmd)); +@@ -368,9 +378,7 @@ int main(int argc, char **argv) + + KHostName hn; + +- if(!getenv("XAUTHLOCALHOSTNAME")) +- hn.changeX(); +- ++ hn.changeX(); + hn.changeDcop(); + hn.changeStdDirs("socket"); + hn.changeStdDirs("tmp"); diff --git a/opensuse/core/tdelibs/vnd.openxmlformats-officedocument.presentationml.presentation.desktop b/opensuse/core/tdelibs/vnd.openxmlformats-officedocument.presentationml.presentation.desktop new file mode 100644 index 000000000..80856ff95 --- /dev/null +++ b/opensuse/core/tdelibs/vnd.openxmlformats-officedocument.presentationml.presentation.desktop @@ -0,0 +1,10 @@ +[Desktop Entry] +Encoding=UTF-8 +Type=MimeType +MimeType=application/vnd.openxmlformats-officedocument.presentationml.presentation +Patterns=*.pptx;*.PPTX +Icon=presentation +Comment=Open XML Presentation Document +[Property::X-KDE-NativeExtension] +Type=QString +Value=.pptx diff --git a/opensuse/core/tdelibs/vnd.openxmlformats-officedocument.spreadsheetml.sheet.desktop b/opensuse/core/tdelibs/vnd.openxmlformats-officedocument.spreadsheetml.sheet.desktop new file mode 100644 index 000000000..e138deae4 --- /dev/null +++ b/opensuse/core/tdelibs/vnd.openxmlformats-officedocument.spreadsheetml.sheet.desktop @@ -0,0 +1,10 @@ +[Desktop Entry] +Encoding=UTF-8 +Type=MimeType +MimeType=application/vnd.openxmlformats-officedocument.spreadsheetml.sheet +Patterns=*.xlsx;*.XLSX +Icon=spreadsheet +Comment=Open XML Spreadsheet Document +[Property::X-KDE-NativeExtension] +Type=QString +Value=.xlsx diff --git a/opensuse/core/tdelibs/vnd.openxmlformats-officedocument.wordprocessingml.document.desktop b/opensuse/core/tdelibs/vnd.openxmlformats-officedocument.wordprocessingml.document.desktop new file mode 100644 index 000000000..cf0e677b2 --- /dev/null +++ b/opensuse/core/tdelibs/vnd.openxmlformats-officedocument.wordprocessingml.document.desktop @@ -0,0 +1,10 @@ +[Desktop Entry] +Encoding=UTF-8 +Type=MimeType +MimeType=application/vnd.openxmlformats-officedocument.wordprocessingml.document +Patterns=*.docx;*.DOCX +Icon=wordprocessing +Comment=Open XML Word Processing Document +[Property::X-KDE-NativeExtension] +Type=QString +Value=.docx diff --git a/opensuse/core/tdelibs/x-jar-desktop.diff b/opensuse/core/tdelibs/x-jar-desktop.diff new file mode 100644 index 000000000..1e68b1af4 --- /dev/null +++ b/opensuse/core/tdelibs/x-jar-desktop.diff @@ -0,0 +1,10 @@ +Index: mimetypes/application/x-jar.desktop +=================================================================== +--- mimetypes/application/x-jar.desktop.orig ++++ mimetypes/application/x-jar.desktop +@@ -87,4 +87,4 @@ Comment[zh_CN]=Java å½’æ¡£ + Comment[zh_HK]=Java 壓縮檔 + Comment[zh_TW]=Java 壓縮檔案 + Comment[zu]=Umqulu we-Java +-X-KDE-AutoEmbed=true ++X-KDE-AutoEmbed=false diff --git a/opensuse/core/tdelibs/x-kde-InitialPreference.diff b/opensuse/core/tdelibs/x-kde-InitialPreference.diff new file mode 100644 index 000000000..d95df7a2c --- /dev/null +++ b/opensuse/core/tdelibs/x-kde-InitialPreference.diff @@ -0,0 +1,16 @@ +Index: kio/kio/kservice.cpp +=================================================================== +--- kio/kio/kservice.cpp.orig ++++ kio/kio/kservice.cpp +@@ -249,7 +249,10 @@ KService::init( KDesktopFile *config ) + m_bAllowAsDefault = config->readBoolEntry( "AllowDefault", true ); + entryMap.remove("AllowDefault"); + +- m_initialPreference = config->readNumEntry( "InitialPreference", 1 ); ++ m_initialPreference = config->readNumEntry( "X-KDE-InitialPreference", 1 ); ++ entryMap.remove("X-KDE-InitialPreference"); ++ if ( m_initialPreference == 1 ) ++ m_initialPreference = config->readNumEntry( "InitialPreference", 1 ); + entryMap.remove("InitialPreference"); + + // Store all additional entries in the property map. diff --git a/opensuse/core/tdelibs/xinerama.patch b/opensuse/core/tdelibs/xinerama.patch new file mode 100644 index 000000000..dec878b40 --- /dev/null +++ b/opensuse/core/tdelibs/xinerama.patch @@ -0,0 +1,543 @@ +Index: kio/kio/krun.h +=================================================================== +--- kio/kio/krun.h.orig ++++ kio/kio/krun.h +@@ -111,6 +111,8 @@ public: + */ + KRun( const KURL& url, QWidget* window, mode_t mode = 0, + bool isLocalFile = false, bool showProgressInfo = true ); ++ KRun( const KURL& url, QWidget* window, const QCString& asn, mode_t mode = 0, ++ bool isLocalFile = false, bool showProgressInfo = true ); + + /** + * Destructor. Don't call it yourself, since a KRun object auto-deletes +@@ -210,6 +212,8 @@ public: + * @since 3.5.2 + */ + static pid_t run( const KService& _service, const KURL::List& _urls, QWidget* window, bool tempFiles = false ); ++ static pid_t run( const KService& _service, const KURL::List& _urls, QWidget* window, ++ const QCString& asn, bool tempFiles = false ); + /** + * Open a list of URLs with a certain service (application). + * +@@ -226,6 +230,8 @@ public: + /// @since 3.5.3 + /// @internal + static pid_t run( const KService& _service, const KURL::List& _urls, QWidget* window, bool tempFiles, const QString& suggestedFileName ); ++ static pid_t run( const KService& _service, const KURL::List& _urls, QWidget* window, ++ const QCString& asn, bool tempFiles, const QString& suggestedFileName ); + + /** + * Open a list of URLs with. +@@ -269,6 +275,7 @@ public: + static pid_t runURL( const KURL& _url, const QString& _mimetype ); + /// @since 3.5.3 + /// @internal ++ static pid_t runURL( const KURL& _url, const QString& _mimetype, QWidget* window, const QCString& asn, bool tempFile, bool runExecutables, const QString& suggestedFileName ); + static pid_t runURL( const KURL& _url, const QString& _mimetype, bool tempFile, bool runExecutables, const QString& suggestedFileName ); + + /** +@@ -299,6 +306,8 @@ public: + * of running command) if command was unsafe for map notification. + */ + static pid_t runCommand( const QString& cmd, const QString & execName, const QString & icon ); ++ static pid_t runCommand( const QString& cmd, const QString & execName, const QString & icon, ++ QWidget* window, const QCString& asn ); + + /** + * Display the Open-With dialog for those URLs, and run the chosen application. +@@ -438,7 +447,7 @@ protected: + virtual void virtual_hook( int id, void* data ); + + private: +- void init (const KURL& url, QWidget* window, mode_t mode, ++ void init (const KURL& url, QWidget* window, const QCString& asn, mode_t mode, + bool isLocalFile, bool showProgressInfo); + private: + class KRunPrivate; +Index: kio/kio/krun.cpp +=================================================================== +--- kio/kio/krun.cpp.orig ++++ kio/kio/krun.cpp +@@ -77,6 +77,7 @@ public: + QString m_localPath; + QString m_suggestedFileName; + QGuardedPtr m_window; ++ QCString m_asn; + }; + + pid_t KRun::runURL( const KURL& u, const QString& _mimetype ) +@@ -109,14 +110,20 @@ bool KRun::isExecutableFile( const KURL& + return false; + } + +-// This is called by foundMimeType, since it knows the mimetype of the URL + pid_t KRun::runURL( const KURL& u, const QString& _mimetype, bool tempFile, bool runExecutables, const QString& suggestedFileName ) + { ++ return runURL( u, _mimetype, NULL, "", tempFile, runExecutables, suggestedFileName ); ++} ++ ++// This is called by foundMimeType, since it knows the mimetype of the URL ++pid_t KRun::runURL( const KURL& u, const QString& _mimetype, QWidget* window, const QCString& asn, ++ bool tempFile, bool runExecutables, const QString& suggestedFileName ) ++{ + bool noRun = false; + bool noAuth = false; + if ( _mimetype == "inode/directory-locked" ) + { +- KMessageBoxWrapper::error( 0L, ++ KMessageBoxWrapper::error( window, + i18n("Unable to enter %1.\nYou do not have access rights to this location.").arg(u.htmlURL()) ); + return 0; + } +@@ -133,7 +140,7 @@ pid_t KRun::runURL( const KURL& u, const + { + QString path = u.path(); + shellQuote( path ); +- return (KRun::runCommand(path)); // just execute the url as a command ++ return (KRun::runCommand(path, QString::null, QString::null, window, asn)); // just execute the url as a command + // ## TODO implement deleting the file if tempFile==true + } + else +@@ -155,14 +162,14 @@ pid_t KRun::runURL( const KURL& u, const + + if ( noRun ) + { +- KMessageBox::sorry( 0L, ++ KMessageBox::sorry( window, + i18n("The file %1 is an executable program. " + "For safety it will not be started.").arg(u.htmlURL())); + return 0; + } + if ( noAuth ) + { +- KMessageBoxWrapper::error( 0L, ++ KMessageBoxWrapper::error( window, + i18n("You do not have permission to run %1.").arg(u.htmlURL()) ); + return 0; + } +@@ -182,7 +189,7 @@ pid_t KRun::runURL( const KURL& u, const + return displayOpenWithDialog( lst, tempFile, suggestedFileName ); + } + +- return KRun::run( *offer, lst, 0 /*window*/, tempFile, suggestedFileName ); ++ return KRun::run( *offer, lst, window, asn, tempFile, suggestedFileName ); + } + + bool KRun::displayOpenWithDialog( const KURL::List& lst ) +@@ -536,13 +543,13 @@ QString KRun::binaryName( const QString + } + + static pid_t runCommandInternal( KProcess* proc, const KService* service, const QString& binName, +- const QString &execName, const QString & iconName ) ++ const QString &execName, const QString & iconName, QWidget* window, QCString asn ) + { + if (service && !service->desktopEntryPath().isEmpty() + && !KDesktopFile::isAuthorizedDesktopFile( service->desktopEntryPath() )) + { + kdWarning() << "No authorization to execute " << service->desktopEntryPath() << endl; +- KMessageBox::sorry(0, i18n("You are not authorized to execute this file.")); ++ KMessageBox::sorry(window, i18n("You are not authorized to execute this file.")); + return 0; + } + QString bin = KRun::binaryName( binName, true ); +@@ -550,10 +557,10 @@ static pid_t runCommandInternal( KProces + bool silent; + QCString wmclass; + KStartupInfoId id; +- bool startup_notify = KRun::checkStartupNotify( binName, service, &silent, &wmclass ); ++ bool startup_notify = ( asn != "0" && KRun::checkStartupNotify( binName, service, &silent, &wmclass )); + if( startup_notify ) + { +- id.initId(); ++ id.initId( asn ); + id.setupStartupEnv(); + KStartupInfoData data; + data.setHostname(); +@@ -572,6 +579,8 @@ static pid_t runCommandInternal( KProces + if( silent ) + data.setSilent( KStartupInfoData::Yes ); + data.setDesktop( KWin::currentDesktop()); ++ if( window ) ++ data.setLaunchedBy( window->winId()); + KStartupInfo::sendStartup( id, data ); + } + pid_t pid = KProcessRunner::run( proc, binName, id ); +@@ -635,7 +644,8 @@ bool KRun::checkStartupNotify( const QSt + return true; + } + +-static pid_t runTempService( const KService& _service, const KURL::List& _urls, bool tempFiles, const QString& suggestedFileName ) ++static pid_t runTempService( const KService& _service, const KURL::List& _urls, QWidget* window, ++ const QCString& asn, bool tempFiles, const QString& suggestedFileName ) + { + if (!_urls.isEmpty()) { + kdDebug(7010) << "runTempService: first url " << _urls.first().url() << endl; +@@ -654,7 +664,7 @@ static pid_t runTempService( const KServ + { + KURL::List singleUrl; + singleUrl.append(*it); +- runTempService( _service, singleUrl, tempFiles, suggestedFileName ); ++ runTempService( _service, singleUrl, window, "", tempFiles, suggestedFileName ); + } + KURL::List singleUrl; + singleUrl.append(_urls.first()); +@@ -673,7 +683,7 @@ static pid_t runTempService( const KServ + proc->setWorkingDirectory(_service.path()); + + return runCommandInternal( proc, &_service, KRun::binaryName( _service.exec(), false ), +- _service.name(), _service.icon() ); ++ _service.name(), _service.icon(), window, asn ); + } + + // WARNING: don't call this from processDesktopExec, since klauncher uses that too... +@@ -734,11 +744,22 @@ pid_t KRun::run( const KService& _servic + + pid_t KRun::run( const KService& _service, const KURL::List& _urls, QWidget* window, bool tempFiles ) + { +- return run( _service, _urls, window, tempFiles, QString::null ); ++ return run( _service, _urls, window, "", tempFiles, QString::null ); ++} ++ ++pid_t KRun::run( const KService& _service, const KURL::List& _urls, QWidget* window, const QCString& asn, bool tempFiles ) ++{ ++ return run( _service, _urls, window, asn, tempFiles, QString::null ); + } + + pid_t KRun::run( const KService& _service, const KURL::List& _urls, QWidget* window, bool tempFiles, const QString& suggestedFileName ) + { ++ return run( _service, _urls, window, "", tempFiles, suggestedFileName ); ++} ++ ++pid_t KRun::run( const KService& _service, const KURL::List& _urls, QWidget* window, const QCString& asn, ++ bool tempFiles, const QString& suggestedFileName ) ++{ + if (!_service.desktopEntryPath().isEmpty() && + !KDesktopFile::isAuthorizedDesktopFile( _service.desktopEntryPath())) + { +@@ -759,7 +780,7 @@ pid_t KRun::run( const KService& _servic + + if ( tempFiles || _service.desktopEntryPath().isEmpty() || !suggestedFileName.isEmpty() ) + { +- return runTempService(_service, _urls, tempFiles, suggestedFileName); ++ return runTempService(_service, _urls, window, asn, tempFiles, suggestedFileName); + } + + kdDebug(7010) << "KRun::run " << _service.desktopEntryPath() << endl; +@@ -773,9 +794,25 @@ pid_t KRun::run( const KService& _servic + + QString error; + int pid = 0; +- ++ ++ QCString myasn = asn; ++ // startServiceByDesktopPath() doesn't take QWidget*, add it to the startup info now ++ if( window != NULL ) ++ { ++ if( myasn.isEmpty()) ++ myasn = KStartupInfo::createNewStartupId(); ++ if( myasn != "0" ) ++ { ++ KStartupInfoId id; ++ id.initId( myasn ); ++ KStartupInfoData data; ++ data.setLaunchedBy( window->winId()); ++ KStartupInfo::sendChange( id, data ); ++ } ++ } ++ + int i = KApplication::startServiceByDesktopPath( +- _service.desktopEntryPath(), urls.toStringList(), &error, 0L, &pid ++ _service.desktopEntryPath(), urls.toStringList(), &error, 0L, &pid, myasn + ); + + if (i != 0) +@@ -800,33 +837,47 @@ pid_t KRun::run( const QString& _exec, c + + pid_t KRun::runCommand( QString cmd ) + { +- return KRun::runCommand( cmd, QString::null, QString::null ); ++ return KRun::runCommand( cmd, QString::null, QString::null, NULL, "" ); + } + + pid_t KRun::runCommand( const QString& cmd, const QString &execName, const QString & iconName ) + { ++ return KRun::runCommand( cmd, execName, iconName, NULL, "" ); ++} ++ ++pid_t KRun::runCommand( const QString& cmd, const QString &execName, const QString & iconName, ++ QWidget* window, const QCString& asn ) ++{ + kdDebug(7010) << "runCommand " << cmd << "," << execName << endl; + KProcess * proc = new KProcess; + proc->setUseShell(true); + *proc << cmd; + KService::Ptr service = KService::serviceByDesktopName( binaryName( execName, true ) ); +- return runCommandInternal( proc, service.data(), binaryName( execName, false ), execName, iconName ); ++ return runCommandInternal( proc, service.data(), binaryName( execName, false ), execName, iconName, ++ window, asn ); + } + + KRun::KRun( const KURL& url, mode_t mode, bool isLocalFile, bool showProgressInfo ) + :m_timer(0,"KRun::timer") + { +- init (url, 0, mode, isLocalFile, showProgressInfo); ++ init (url, 0, "", mode, isLocalFile, showProgressInfo); + } + + KRun::KRun( const KURL& url, QWidget* window, mode_t mode, bool isLocalFile, + bool showProgressInfo ) + :m_timer(0,"KRun::timer") + { +- init (url, window, mode, isLocalFile, showProgressInfo); ++ init (url, window, "", mode, isLocalFile, showProgressInfo); ++} ++ ++KRun::KRun( const KURL& url, QWidget* window, const QCString& asn, mode_t mode, bool isLocalFile, ++ bool showProgressInfo ) ++ :m_timer(0,"KRun::timer") ++{ ++ init (url, window, asn, mode, isLocalFile, showProgressInfo); + } + +-void KRun::init ( const KURL& url, QWidget* window, mode_t mode, bool isLocalFile, ++void KRun::init ( const KURL& url, QWidget* window, const QCString& asn, mode_t mode, bool isLocalFile, + bool showProgressInfo ) + { + m_bFault = false; +@@ -842,6 +893,7 @@ void KRun::init ( const KURL& url, QWidg + d = new KRunPrivate; + d->m_runExecutables = true; + d->m_window = window; ++ d->m_asn = asn; + setEnableExternalBrowser(true); + + // Start the timer. This means we will return to the event +@@ -942,7 +994,7 @@ void KRun::init() + KService::Ptr service = KService::serviceByStorageId( exec ); + if (service) + { +- run( *service, urls ); ++ run( *service, urls, d->m_window, d->m_asn ); + ok = true; + } + } +@@ -1235,7 +1287,7 @@ void KRun::foundMimeType( const QString& + { + KURL::List lst; + lst.append( m_strURL ); +- m_bFinished = KRun::run( *serv, lst ); ++ m_bFinished = KRun::run( *serv, lst, d->m_window, d->m_asn ); + /// Note: the line above means that if that service failed, we'll + /// go to runURL to maybe find another service, even though a dialog + /// box was displayed. That's good if runURL tries another service, +@@ -1250,7 +1302,7 @@ void KRun::foundMimeType( const QString& + m_strURL.setPath( d->m_localPath ); + } + +- if (!m_bFinished && KRun::runURL( m_strURL, type, false, d->m_runExecutables, d->m_suggestedFileName )){ ++ if (!m_bFinished && KRun::runURL( m_strURL, type, d->m_window, d->m_asn, false, d->m_runExecutables, d->m_suggestedFileName )){ + m_bFinished = true; + } + else{ +Index: kdecore/kstartupinfo.cpp +=================================================================== +--- kdecore/kstartupinfo.cpp.orig ++++ kdecore/kstartupinfo.cpp +@@ -1109,7 +1109,7 @@ unsigned long KStartupInfoId::timestamp( + struct KStartupInfoDataPrivate + { + KStartupInfoDataPrivate() : desktop( 0 ), wmclass( "" ), hostname( "" ), +- silent( KStartupInfoData::Unknown ), timestamp( -1U ), screen( -1 ) {} ++ silent( KStartupInfoData::Unknown ), timestamp( -1U ), screen( -1 ), xinerama( -1 ), launched_by( 0 ) {} + QString bin; + QString name; + QString description; +@@ -1121,6 +1121,8 @@ struct KStartupInfoDataPrivate + KStartupInfoData::TriState silent; + unsigned long timestamp; + int screen; ++ int xinerama; ++ WId launched_by; + }; + + QString KStartupInfoData::to_text() const +@@ -1151,6 +1153,10 @@ QString KStartupInfoData::to_text() cons + ret += QString::fromLatin1( " TIMESTAMP=%1" ).arg( d->timestamp ); + if( d->screen != -1 ) + ret += QString::fromLatin1( " SCREEN=%1" ).arg( d->screen ); ++ if( d->xinerama != -1 ) ++ ret += QString::fromLatin1( " XINERAMA=%1" ).arg( d->xinerama ); ++ if( d->launched_by != 0 ) ++ ret += QString::fromLatin1( " LAUNCHED_BY=%1" ).arg( d->launched_by ); + return ret; + } + +@@ -1169,6 +1175,8 @@ KStartupInfoData::KStartupInfoData( cons + const QString silent_str = QString::fromLatin1( "SILENT=" ); + const QString timestamp_str = QString::fromLatin1( "TIMESTAMP=" ); + const QString screen_str = QString::fromLatin1( "SCREEN=" ); ++ const QString xinerama_str = QString::fromLatin1( "XINERAMA=" ); ++ const QString launched_by_str = QString::fromLatin1( "LAUNCHED_BY=" ); + for( QStringList::Iterator it = items.begin(); + it != items.end(); + ++it ) +@@ -1199,6 +1207,10 @@ KStartupInfoData::KStartupInfoData( cons + d->timestamp = get_unum( *it ); + else if( ( *it ).startsWith( screen_str )) + d->screen = get_num( *it ); ++ else if( ( *it ).startsWith( xinerama_str )) ++ d->xinerama = get_num( *it ); ++ else if( ( *it ).startsWith( launched_by_str )) ++ d->launched_by = get_num( *it ); + } + } + +@@ -1242,6 +1254,10 @@ void KStartupInfoData::update( const KSt + d->timestamp = data_P.timestamp(); + if( data_P.screen() != -1 ) + d->screen = data_P.screen(); ++ if( data_P.xinerama() != -1 && xinerama() != -1 ) // don't overwrite ++ d->xinerama = data_P.xinerama(); ++ if( data_P.launchedBy() != 0 && launchedBy() != 0 ) // don't overwrite ++ d->launched_by = data_P.launchedBy(); + } + + KStartupInfoData::KStartupInfoData() +@@ -1412,6 +1428,26 @@ int KStartupInfoData::screen() const + return d->screen; + } + ++void KStartupInfoData::setXinerama( int xinerama ) ++ { ++ d->xinerama = xinerama; ++ } ++ ++int KStartupInfoData::xinerama() const ++ { ++ return d->xinerama; ++ } ++ ++void KStartupInfoData::setLaunchedBy( WId window ) ++ { ++ d->launched_by = window; ++ } ++ ++WId KStartupInfoData::launchedBy() const ++ { ++ return d->launched_by; ++ } ++ + static + long get_num( const QString& item_P ) + { +Index: kdecore/netwm_def.h +=================================================================== +--- kdecore/netwm_def.h.orig ++++ kdecore/netwm_def.h +@@ -610,6 +610,7 @@ public: + WM2WindowRole = 1<<11, ///< @since 3.3 + WM2ClientMachine = 1<<12, ///< @since 3.3 + WM2ShowingDesktop = 1<<13, ///< @since 3.5 ++ WM2FullPlacement = 1<<14, + WM2DesktopLayout = 1<<15 ///< @since 3.5.8 + }; + +Index: kdecore/netwm.cpp +=================================================================== +--- kdecore/netwm.cpp.orig ++++ kdecore/netwm.cpp +@@ -145,6 +145,9 @@ static Atom net_wm_state_stays_on_top = + // used to determine whether application window is managed or not + static Atom xa_wm_state = 0; + ++// ability flags ++static Atom net_wm_full_placement = 0; ++ + static Bool netwm_atoms_created = False; + const unsigned long netwm_sendevent_mask = (SubstructureRedirectMask| + SubstructureNotifyMask); +@@ -236,7 +239,7 @@ static int wcmp(const void *a, const voi + } + + +-static const int netAtomCount = 84; ++static const int netAtomCount = 85; + static void create_atoms(Display *d) { + static const char * const names[netAtomCount] = + { +@@ -330,7 +333,9 @@ static void create_atoms(Display *d) { + "_KDE_NET_WM_TEMPORARY_RULES", + + "WM_STATE", +- "WM_PROTOCOLS" ++ "WM_PROTOCOLS", ++ ++ "_NET_WM_FULL_PLACEMENT" + }; + + Atom atoms[netAtomCount], *atomsp[netAtomCount] = +@@ -425,7 +430,9 @@ static void create_atoms(Display *d) { + &kde_net_wm_temporary_rules, + + &xa_wm_state, +- &wm_protocols ++ &wm_protocols, ++ ++ &net_wm_full_placement + }; + + assert( !netwm_atoms_created ); +@@ -1355,6 +1362,8 @@ void NETRootInfo::setSupported() { + + if (p->properties[ PROTOCOLS2 ] & WM2KDETemporaryRules) + atoms[pnum++] = kde_net_wm_temporary_rules; ++ if (p->properties[ PROTOCOLS2 ] & WM2FullPlacement) ++ atoms[pnum++] = net_wm_full_placement; + + XChangeProperty(p->display, p->root, net_supported, XA_ATOM, 32, + PropModeReplace, (unsigned char *) atoms, pnum); +@@ -1587,6 +1596,8 @@ void NETRootInfo::updateSupportedPropert + + else if( atom == kde_net_wm_temporary_rules ) + p->properties[ PROTOCOLS2 ] |= WM2KDETemporaryRules; ++ else if( atom == net_wm_full_placement ) ++ p->properties[ PROTOCOLS2 ] |= WM2FullPlacement; + } + + extern Time qt_x_user_time; +Index: kdecore/kstartupinfo.h +=================================================================== +--- kdecore/kstartupinfo.h.orig ++++ kdecore/kstartupinfo.h +@@ -635,6 +635,30 @@ class KDECORE_EXPORT KStartupInfoData + * This is usually not necessary to set, as it's set by default to qt_xscreen(). + */ + void setScreen( int screen ); ++ ++ /** ++ * The Xinerama screen for the startup notification, -1 if unknown. ++ */ ++ int xinerama() const; ++ ++ /** ++ * Sets the Xinerama screen for the startup notification ( i.e. the screeen on which ++ * the starting application should appear ). ++ * @param xinerama the Xinerama screen for the startup notification ++ */ ++ void setXinerama( int xinerama ); ++ ++ /** ++ * The toplevel window of the application that caused this startup notification, ++ * 0 if unknown. ++ */ ++ WId launchedBy() const; ++ ++ /** ++ * Sets the toplevel window of the application that caused this startup notification. ++ * @param window window ID of the toplevel window that is responsible for this startup ++ */ ++ void setLaunchedBy( WId window ); + + /** + * Updates the notification data from the given data. Some data, such as the desktop diff --git a/opensuse/core/tdelibs/xml-catalog.diff b/opensuse/core/tdelibs/xml-catalog.diff new file mode 100644 index 000000000..0abaefec2 --- /dev/null +++ b/opensuse/core/tdelibs/xml-catalog.diff @@ -0,0 +1,44 @@ +Index: catalog.xml +=================================================================== +--- /dev/null ++++ catalog.xml +@@ -0,0 +1,39 @@ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ diff --git a/opensuse/core/tdelibs/xmlhttprequest_3.x.diff b/opensuse/core/tdelibs/xmlhttprequest_3.x.diff new file mode 100644 index 000000000..822a8870b --- /dev/null +++ b/opensuse/core/tdelibs/xmlhttprequest_3.x.diff @@ -0,0 +1,47 @@ +http://www.kde.org/info/security/advisory-20091027-1.txt + +Index: xmlhttprequest.cpp +=================================================================== +--- khtml/ecma/xmlhttprequest.cpp (revision 954808) ++++ khtml/ecma/xmlhttprequest.cpp (working copy) +@@ -342,17 +342,17 @@ + { + aborted = false; + ++ const QString protocol = url.protocol().lower(); ++ // Abandon the request when the protocol is other than "http", ++ // instead of blindly doing a KIO::get on other protocols like file:/. ++ if (!protocol.startsWith("http") && !protocol.startsWith("webdav")) ++ { ++ abort(); ++ return; ++ } ++ + if (method == "post") { +- QString protocol = url.protocol().lower(); + +- // Abondon the request when the protocol is other than "http", +- // instead of blindly changing it to a "get" request. +- if (!protocol.startsWith("http") && !protocol.startsWith("webdav")) +- { +- abort(); +- return; +- } +- + // FIXME: determine post encoding correctly by looking in headers + // for charset. + QByteArray buf; +@@ -763,11 +763,11 @@ + if (obj.isValid() && obj.inherits(&DOMDocument::info)) { + DOM::Node docNode = static_cast(obj.imp())->toNode(); + DOM::DocumentImpl *doc = static_cast(docNode.handle()); +- ++ + try { + body = doc->toString().string(); + // FIXME: also need to set content type, including encoding! +- ++ + } catch(DOM::DOMException& e) { + Object err = Error::create(exec, GeneralError, "Exception serializing document"); + exec->setException(err); diff --git a/opensuse/core/tdemultimedia/.project b/opensuse/core/tdemultimedia/.project new file mode 100644 index 000000000..a390dc024 --- /dev/null +++ b/opensuse/core/tdemultimedia/.project @@ -0,0 +1,12 @@ + + + tdemultimedia + + + + + + + org.eclipse.linuxtools.rpm.core.rpmnature + + diff --git a/opensuse/core/tdenetwork/.project b/opensuse/core/tdenetwork/.project new file mode 100644 index 000000000..7a886a87e --- /dev/null +++ b/opensuse/core/tdenetwork/.project @@ -0,0 +1,12 @@ + + + tdenetwork + + + + + + + org.eclipse.linuxtools.rpm.core.rpmnature + + diff --git a/opensuse/core/tdepim/.project b/opensuse/core/tdepim/.project new file mode 100644 index 000000000..b20953438 --- /dev/null +++ b/opensuse/core/tdepim/.project @@ -0,0 +1,12 @@ + + + tdepim + + + + + + + org.eclipse.linuxtools.rpm.core.rpmnature + + diff --git a/opensuse/core/tdesdk/.project b/opensuse/core/tdesdk/.project new file mode 100644 index 000000000..d02a1176a --- /dev/null +++ b/opensuse/core/tdesdk/.project @@ -0,0 +1,12 @@ + + + tdesdk + + + + + + + org.eclipse.linuxtools.rpm.core.rpmnature + + diff --git a/opensuse/core/tdetoys/.project b/opensuse/core/tdetoys/.project new file mode 100644 index 000000000..0324d3b72 --- /dev/null +++ b/opensuse/core/tdetoys/.project @@ -0,0 +1,12 @@ + + + tdetoys + + + + + + + org.eclipse.linuxtools.rpm.core.rpmnature + + diff --git a/opensuse/core/tdeutils/.project b/opensuse/core/tdeutils/.project new file mode 100644 index 000000000..02d28a5dd --- /dev/null +++ b/opensuse/core/tdeutils/.project @@ -0,0 +1,12 @@ + + + tdeutils + + + + + + + org.eclipse.linuxtools.rpm.core.rpmnature + + diff --git a/opensuse/core/tdewebdev/.project b/opensuse/core/tdewebdev/.project new file mode 100644 index 000000000..ae61c2097 --- /dev/null +++ b/opensuse/core/tdewebdev/.project @@ -0,0 +1,12 @@ + + + tdewebdev + + + + + + + org.eclipse.linuxtools.rpm.core.rpmnature + + diff --git a/opensuse/libdbus-1-tqt-0/README.VERSION b/opensuse/libdbus-1-tqt-0/README.VERSION deleted file mode 100644 index b8b49c0d6..000000000 --- a/opensuse/libdbus-1-tqt-0/README.VERSION +++ /dev/null @@ -1 +0,0 @@ -In the TRINITY tree this is dependencies/dbus-1-tqt. diff --git a/opensuse/libdbus-1-tqt-0/fix_circular_destructor.patch b/opensuse/libdbus-1-tqt-0/fix_circular_destructor.patch deleted file mode 100644 index cadd26ca0..000000000 --- a/opensuse/libdbus-1-tqt-0/fix_circular_destructor.patch +++ /dev/null @@ -1,14 +0,0 @@ -Index: tools/dbusxml2qt3/methodgen.cpp -=================================================================== ---- tools/dbusxml2qt3/methodgen.cpp (Revision 805416) -+++ tools/dbusxml2qt3/methodgen.cpp (Arbeitskopie) -@@ -1740,7 +1740,8 @@ - stream << " for (; it != endIt; ++it)" << endl; - stream << " {" << endl; - stream << " QDBusObjectBase* interface = it.data();" << endl; -- stream << " delete interface;" << endl; -+ stream << " if (interface != this)" << endl; -+ stream << " delete interface;" << endl; - stream << " }" << endl; - stream << " interfaces.clear();" << endl; - stream << "}" << endl; diff --git a/opensuse/libdbus-1-tqt-0/fix_ifdef.patch b/opensuse/libdbus-1-tqt-0/fix_ifdef.patch deleted file mode 100644 index 99da35290..000000000 --- a/opensuse/libdbus-1-tqt-0/fix_ifdef.patch +++ /dev/null @@ -1,18 +0,0 @@ ---- dbus/qdbusobjectpath.h -+++ dbus/qdbusobjectpath.h -@@ -21,6 +21,9 @@ - * - */ - -+#ifndef QDBUSOBJECTPATH_H -+#define QDBUSOBJECTPATH_H -+ - #include - - /** -@@ -111,3 +114,5 @@ - */ - static int validate(const QCString& path); - }; -+ -+#endif diff --git a/opensuse/libdbus-1-tqt-0/libdbus-1-tqt-0.changes b/opensuse/libdbus-1-tqt-0/libdbus-1-tqt-0.changes deleted file mode 100644 index f5e01f9af..000000000 --- a/opensuse/libdbus-1-tqt-0/libdbus-1-tqt-0.changes +++ /dev/null @@ -1,58 +0,0 @@ -------------------------------------------------------------------- -Sat Aug 13 15:57:46 UTC 2011 - rxu@lincomlinux.org - -- upgrade to TQt version and adjust accordingly - -------------------------------------------------------------------- -Fri Mar 6 15:38:51 CET 2009 - crrodriguez@suse.de - -- remove static libraries and "la" files - -------------------------------------------------------------------- -Thu May 8 17:15:13 CEST 2008 - hschaa@suse.de - -- Add fix_circular_destructor.patch which fixes a crash in the - generated objects - -------------------------------------------------------------------- -Wed Apr 9 17:45:53 CEST 2008 - hschaa@suse.de - -- Update to SVN revision 795238 which fixes some issues with KNM - -------------------------------------------------------------------- -Thu Mar 13 10:32:01 CET 2008 - hschaa@suse.de - -- Update to 0.8.1 + SVN revision 785103 -- Remove BRANCH_UPDATE.diff -- Add r785103.patch - -------------------------------------------------------------------- -Fri Feb 8 01:03:49 CET 2008 - dmueller@suse.de - -- also allow building on s390/s390x - -------------------------------------------------------------------- -Fri Jan 11 12:14:10 CET 2008 - hschaa@suse.de - -- add ifdefs to qdbusobjectpath.h (fix_ifdef.patch) - -------------------------------------------------------------------- -Wed Jan 9 19:01:49 CET 2008 - dmueller@suse.de - -- fix generation of nm introspection (branch update) - -------------------------------------------------------------------- -Mon Dec 17 16:43:44 CET 2007 - dmueller@suse.de - -- include bugfixes from SVN - -------------------------------------------------------------------- -Wed Dec 12 14:03:53 CET 2007 - hschaa@suse.de - -- Added packages to PDB - -------------------------------------------------------------------- -Fri Nov 30 13:30:33 CET 2007 - hschaa@suse.de - -- Initial checkin - diff --git a/opensuse/libdbus-1-tqt-0/libdbus-1-tqt-0.spec b/opensuse/libdbus-1-tqt-0/libdbus-1-tqt-0.spec deleted file mode 100644 index 06368c32d..000000000 --- a/opensuse/libdbus-1-tqt-0/libdbus-1-tqt-0.spec +++ /dev/null @@ -1,135 +0,0 @@ -# -# spec file for package libdbus-1-tqt-0 -# -# Copyright (c) 2011 the Trinity Project (opensuse). -# -# All modifications and additions to the file contributed by third parties -# remain the property of their copyright owners, unless otherwise agreed -# upon. The license for this file, and modifications and additions to the -# file, is the same license as for the pristine package itself (unless the -# license for the pristine package is not an Open Source License, in which -# case the license is the MIT License). An "Open Source License" is a -# license that conforms to the Open Source Definition (Version 1.9) -# published by the Open Source Initiative. - -# Please submit bugfixes or comments via http://bugs.trinitydesktop.org/ -# - -# norootforbuild - - -Name: libdbus-1-tqt-0 -Url: http://www.freedesktop.org/wiki/Software/DBusBindings -%define appname libdbus-1-tqt -BuildRequires: dbus-1-devel libtqt4-devel cmake -License: GPL v2 or later -Group: Development/Libraries/C and C++ -AutoReqProv: on -Version: 0.8.1 -Release: 1 -Summary: TQt DBus Bindings -BuildRoot: %{_tmppath}/%{name}-%{version}-build -Source0: %{appname}-%{version}.tar.bz2 -Patch1: fix_ifdef.patch -Patch2: r785103.patch -Patch3: r795238.patch -Patch4: fix_circular_destructor.patch - -%description -This library provides TQt-classes for accessing the DBus - - - -Authors: --------- - Kevin Krammer - -%package devel -License: GPL v2 or later -Summary: Development files for libdbus-1-tqt -Group: Development/Libraries/C and C++ -Requires: %{name} = %{version}-%{release} -Requires: dbus-1-devel libtqt4-devel - -%description devel -This library provides TQt-classes for accessing the DBus. - -This package holds the development files for libdbus-1-tqt. - - - -Authors: --------- - Kevin Krammer - -%package -n dbusxml2tqt -License: GPL v2 or later -Summary: Generate TQt-classes from DBus-introspection data -Group: Development/Libraries/C and C++ -Requires: %{name} = %{version}-%{release} - -%description -n dbusxml2tqt -dbusxml2tqt allows to generate TQt-classes from DBus-introspection data - - - -Authors: --------- - Kevin Krammer - -%prep -%setup -n %{appname}-%{version} -q -%patch1 -%patch2 -p1 -%patch3 -p0 -%patch4 -p0 - -%build -mkdir build -cd build -cmake ../ -%{__make} %{?jobs:-j%jobs} - -%install -make install DESTDIR=$RPM_BUILD_ROOT -#install -D -m 0755 ./tools/dbusxml2qt3/dbusxml2qt3 $RPM_BUILD_ROOT%{_bindir}/dbusxml2tqt -%{__rm} -f %{buildroot}%{_libdir}/*.la - -%post -p /sbin/ldconfig - -%postun -p /sbin/ldconfig - -%clean -rm -rf $RPM_BUILD_ROOT - -%files -%defattr(-,root,root) -%doc README AUTHORS ChangeLog COPYING INSTALL -%{_libdir}/libdbus-1-tqt.so.0 -%{_libdir}/libdbus-1-tqt.so.0.8.1 - -%files devel -%defattr(-,root,root) -%{_libdir}/libdbus-1-tqt.so -%dir %{_includedir}/dbus-1.0/tqt -%dir %{_includedir}/dbus-1.0/tqt/dbus -%{_includedir}/dbus-1.0/tqt/dbus/tqdbusconnection.h -%{_includedir}/dbus-1.0/tqt/dbus/tqdbusdata.h -%{_includedir}/dbus-1.0/tqt/dbus/tqdbusdataconverter.h -%{_includedir}/dbus-1.0/tqt/dbus/tqdbusdatalist.h -%{_includedir}/dbus-1.0/tqt/dbus/tqdbusdatamap.h -%{_includedir}/dbus-1.0/tqt/dbus/tqdbuserror.h -%{_includedir}/dbus-1.0/tqt/dbus/tqdbusmacros.h -%{_includedir}/dbus-1.0/tqt/dbus/tqdbusmessage.h -%{_includedir}/dbus-1.0/tqt/dbus/tqdbusobject.h -%{_includedir}/dbus-1.0/tqt/dbus/tqdbusobjectpath.h -%{_includedir}/dbus-1.0/tqt/dbus/tqdbusproxy.h -%{_includedir}/dbus-1.0/tqt/dbus/tqdbusvariant.h -%{_libdir}/pkgconfig/dbus-1-tqt.pc - -%files -n dbusxml2tqt -%defattr(-,root,root) -%{_bindir}/dbusxml2tqt - -%changelog - diff --git a/opensuse/libdbus-1-tqt-0/r785103.patch b/opensuse/libdbus-1-tqt-0/r785103.patch deleted file mode 100644 index d07b87180..000000000 --- a/opensuse/libdbus-1-tqt-0/r785103.patch +++ /dev/null @@ -1,996 +0,0 @@ -diff -ur libdbus-1-qt3-0.8.1/qdbusintegrator.cpp ../dbus-qt4-qt3backport/qdbusintegrator.cpp ---- libdbus-1-qt3-0.8.1/qdbusintegrator.cpp 2007-12-17 12:34:08.000000000 +0100 -+++ ../dbus-qt4-qt3backport/qdbusintegrator.cpp 2008-03-13 10:28:54.000000000 +0100 -@@ -121,7 +121,7 @@ - QDBusConnectionPrivate *d = static_cast(data); - - int flags = dbus_watch_get_flags(watch); -- int fd = dbus_watch_get_fd(watch); -+ int fd = dbus_watch_get_unix_fd(watch); - - QDBusConnectionPrivate::Watcher watcher; - if (flags & DBUS_WATCH_READABLE) { -@@ -163,7 +163,7 @@ - //qDebug("remove watch"); - - QDBusConnectionPrivate *d = static_cast(data); -- int fd = dbus_watch_get_fd(watch); -+ int fd = dbus_watch_get_unix_fd(watch); - - QDBusConnectionPrivate::WatcherHash::iterator it = d->watchers.find(fd); - if (it != d->watchers.end()) -@@ -205,7 +205,7 @@ - //qDebug("toggle watch"); - - QDBusConnectionPrivate *d = static_cast(data); -- int fd = dbus_watch_get_fd(watch); -+ int fd = dbus_watch_get_unix_fd(watch); - - QDBusConnectionPrivate::WatcherHash::iterator it = d->watchers.find(fd); - if (it != d->watchers.end()) { -@@ -218,7 +218,7 @@ - int flags = dbus_watch_get_flags(watch); - - // qDebug("toggle watch %d to %d (write: %d, read: %d)", --// dbus_watch_get_fd(watch), enabled, -+// dbus_watch_get_unix_fd(watch), enabled, - // flags & DBUS_WATCH_WRITABLE, flags & DBUS_WATCH_READABLE); - - if (flags & DBUS_WATCH_READABLE && (*wit).read) -diff -ur libdbus-1-qt3-0.8.1/tools/dbusxml2qt3/classgen.cpp ../dbus-qt4-qt3backport/tools/dbusxml2qt3/classgen.cpp ---- libdbus-1-qt3-0.8.1/tools/dbusxml2qt3/classgen.cpp 2007-12-17 12:34:08.000000000 +0100 -+++ ../dbus-qt4-qt3backport/tools/dbusxml2qt3/classgen.cpp 2008-03-13 10:28:54.000000000 +0100 -@@ -38,6 +38,11 @@ - insert(key, true); - } - -+ void removeString(const QString& key) -+ { -+ erase(key); -+ } -+ - void insertStringList(const QStringList& list) - { - QStringList::const_iterator it = list.begin(); -@@ -194,6 +199,14 @@ - forwards.insertString("class QDomElement"); - if (!classData.signals.isEmpty()) - forwards.insertString("class QString"); -+ if (!classData.asyncMethods.isEmpty()) -+ { -+ includes["Qt"].insertString(""); -+ forwards.erase("template class QMap"); -+ -+ includes["qdbus"].insertString(""); -+ forwards.erase("class QDBusMessage"); -+ } - break; - - case Class::Proxy: -@@ -205,6 +218,11 @@ - forwards.insertString("class QString"); - if (!classData.properties.isEmpty()) - forwards.insertString("class QDBusVariant"); -+ if (!classData.asyncMethods.isEmpty()) -+ { -+ includes["Qt"].insertString(""); -+ forwards.erase("template class QMap"); -+ } - break; - - case Class::Node: -@@ -345,7 +363,7 @@ - stream << "#include \"" << (*it).name.lower() << ".h\"" << endl; - } - -- stream << "#include \"introspectable.h\"" << endl; -+ stream << "#include \"introspectableinterface.h\"" << endl; - - stream << endl; - } -@@ -442,7 +460,30 @@ - static void writeMethodDeclarations(const Class& classData, Class::Role role, - QTextStream& stream) - { -- if (!classData.methods.isEmpty()) -+ if (role == Class::Interface && !classData.asyncReplyMethods.isEmpty()) -+ { -+ stream << "public:" << endl; -+ -+ QValueList::const_iterator it = -+ classData.asyncReplyMethods.begin(); -+ QValueList::const_iterator endIt = -+ classData.asyncReplyMethods.end(); -+ for (; it != endIt; ++it) -+ { -+ Method method = *it; -+ method.name += "AsyncReply"; -+ -+ stream << " virtual void "; -+ MethodGenerator::writeMethodDeclaration(method, false, false, stream); -+ -+ stream << " virtual void " << (*it).name -+ << "AsyncError(int asyncCallId, const QDBusError& error);" -+ << endl; -+ stream << endl; -+ } -+ } -+ -+ if (!classData.methods.isEmpty() || !classData.asyncMethods.isEmpty()) - { - bool pureVirtual = true; - switch (role) -@@ -465,9 +506,35 @@ - QValueList::const_iterator endIt = classData.methods.end(); - for (; it != endIt; ++it) - { -+ if ((*it).async) continue; -+ - stream << " virtual bool "; - MethodGenerator::writeMethodDeclaration(*it, pureVirtual, true, stream); - } -+ -+ it = classData.asyncMethods.begin(); -+ endIt = classData.asyncMethods.end(); -+ for (; it != endIt; ++it) -+ { -+ Method method = *it; -+ method.name += "Async"; -+ -+ switch (role) -+ { -+ case Class::Interface: -+ stream << " virtual void "; -+ MethodGenerator::writeMethodDeclaration(method, pureVirtual, false, stream); -+ break; -+ -+ case Class::Proxy: -+ stream << " virtual bool "; -+ MethodGenerator::writeMethodDeclaration(method, pureVirtual, true, stream); -+ break; -+ -+ case Class::Node: // no async methods -+ break; -+ } -+ } - } - - if (!classData.properties.isEmpty()) -@@ -511,7 +578,7 @@ - switch (role) - { - case Class::Interface: -- if (!classData.methods.isEmpty()) -+ if (!classData.methods.isEmpty() || !classData.asyncMethods.isEmpty()) - { - stream << "protected: // implement sending replies" << endl; - stream << " virtual void handleMethodReply(const QDBusMessage& reply) = 0;" << endl; -@@ -527,15 +594,35 @@ - break; - - case Class::Proxy: -+ { - if (!classData.signals.isEmpty()) - { - stream << "protected slots: // usually no need to reimplement" << endl; - stream << " virtual void slotHandleDBusSignal(const QDBusMessage& message);" << endl; - stream << endl; - } -+ -+ if (!classData.asyncReplySignals.isEmpty()) -+ { -+ if (classData.signals.isEmpty()) -+ { -+ stream << "protected slots: // usually no need to reimplement" << endl; -+ } -+ stream << " virtual void slotHandleAsyncReply(int id, const QDBusMessage& message);" << endl; -+ stream << endl; -+ } -+ - stream << "protected:" << endl; - stream << " QDBusProxy* m_baseProxy;" << endl; -+ -+ if (!classData.asyncMethods.isEmpty()) -+ { -+ stream << endl; -+ stream << " QMap m_asyncCalls;" << endl; -+ } -+ - break; -+ } - - case Class::Node: // not variable methods - break; -@@ -547,7 +634,8 @@ - static void writeSignalDeclarations(const Class& classData, Class::Role role, - QTextStream& stream) - { -- if (classData.signals.isEmpty()) return; -+ if (classData.signals.isEmpty() && classData.asyncReplySignals.isEmpty()) -+ return; - - QString prefix; - switch (role) -@@ -578,6 +666,18 @@ - MethodGenerator::writeMethodDeclaration(*it, false, false, stream); - } - -+ it = classData.asyncReplySignals.begin(); -+ endIt = classData.asyncReplySignals.end(); -+ for (; it != endIt; ++it) -+ { -+ stream << prefix; -+ -+ Method signal = *it; -+ signal.name += "AsyncReply"; -+ -+ MethodGenerator::writeMethodDeclaration(signal, false, false, stream); -+ } -+ - stream << endl; - } - -@@ -598,8 +698,6 @@ - static void writeMethodCallDeclarations(const Class& classData, - QTextStream& stream) - { -- if (classData.methods.isEmpty()) return; -- - QValueList::const_iterator it = classData.methods.begin(); - QValueList::const_iterator endIt = classData.methods.end(); - for (; it != endIt; ++it) -@@ -607,6 +705,26 @@ - stream << " "; - MethodGenerator::writeMethodCallDeclaration(*it, stream); - } -+ -+ if (!classData.asyncReplyMethods.isEmpty()) -+ { -+ stream << "protected:" << endl; -+ stream << " QMap m_asyncCalls;" << endl; -+ stream << endl; -+ } -+} -+ -+static void writeInterfaceAsyncReplyHandlers(const Class& classData, -+ QTextStream& stream) -+{ -+ if (classData.asyncReplyMethods.isEmpty()) return; -+ -+ QValueList::const_iterator it = classData.asyncReplyMethods.begin(); -+ QValueList::const_iterator endIt = classData.asyncReplyMethods.end(); -+ for (; it != endIt; ++it) -+ { -+ MethodGenerator::writeInterfaceAsyncReplyHandler(classData, *it, stream); -+ } - } - - static void writeMethodCalls(const Class& classData, QTextStream& stream) -@@ -615,6 +733,15 @@ - QValueList::const_iterator endIt = classData.methods.end(); - for (; it != endIt; ++it) - { -+ if ((*it).async) continue; -+ -+ MethodGenerator::writeMethodCall(classData, *it, stream); -+ } -+ -+ it = classData.asyncMethods.begin(); -+ endIt = classData.asyncMethods.end(); -+ for (; it != endIt; ++it) -+ { - MethodGenerator::writeMethodCall(classData, *it, stream); - } - } -@@ -625,6 +752,15 @@ - QValueList::const_iterator endIt = classData.methods.end(); - for (; it != endIt; ++it) - { -+ if ((*it).async) continue; -+ -+ MethodGenerator::writeProxyMethod(classData.name, *it, stream); -+ } -+ -+ it = classData.asyncMethods.begin(); -+ endIt = classData.asyncMethods.end(); -+ for (; it != endIt; ++it) -+ { - MethodGenerator::writeProxyMethod(classData.name, *it, stream); - } - } -@@ -643,6 +779,121 @@ - } - } - -+static void splitAsyncProxyMethods(Class& classData) -+{ -+ // create the async identifier -+ Argument idArgMethod; -+ idArgMethod.name = "asyncCallId"; -+ idArgMethod.signature = "int"; -+ idArgMethod.isPrimitive = true; -+ idArgMethod.direction = Argument::Out; -+ -+ Argument idArgSignal = idArgMethod; -+ idArgSignal.direction = Argument::In; -+ -+ QValueList::iterator it = classData.methods.begin(); -+ QValueList::iterator endIt = classData.methods.end(); -+ for (; it != endIt; ++it) -+ { -+ if (!(*it).async) continue; -+ -+ Method method = *it; -+ -+ QValueList methodArgs; -+ QValueList signalArgs; -+ -+ // add id argument -+ methodArgs << idArgMethod; -+ signalArgs << idArgSignal; -+ -+ // split in/out arguments: "in" belong to the method, "out" to the new signal -+ QValueList::const_iterator argIt = method.arguments.begin(); -+ QValueList::const_iterator argEndIt = method.arguments.end(); -+ for (; argIt != argEndIt; ++argIt) -+ { -+ if ((*argIt).direction == Argument::Out) -+ { -+ // signal parameters are "out" but have "in" signature, -+ // e.g. "const T&" -+ Argument arg = *argIt; -+ arg.direction = Argument::In; -+ -+ signalArgs << arg; -+ } -+ else -+ methodArgs << *argIt; -+ } -+ -+ // change method -+ method.arguments = methodArgs; -+ -+ classData.asyncMethods << method; -+ -+ // create "callback" signal -+ Method signal = method; -+ signal.arguments = signalArgs; -+ -+ classData.asyncReplySignals << signal; -+ } -+} -+ -+static void splitAsyncInterfaceMethods(Class& classData) -+{ -+ // create the async identifier -+ Argument idArgMethod; -+ idArgMethod.name = "asyncCallId"; -+ idArgMethod.signature = "int"; -+ idArgMethod.isPrimitive = true; -+ idArgMethod.direction = Argument::In; -+ -+ Argument idArgReply = idArgMethod; -+ -+ QValueList::iterator it = classData.methods.begin(); -+ QValueList::iterator endIt = classData.methods.end(); -+ for (; it != endIt; ++it) -+ { -+ if (!(*it).async) continue; -+ -+ Method method = *it; -+ -+ QValueList methodArgs; -+ QValueList replyArgs; -+ -+ // add id argument -+ methodArgs << idArgMethod; -+ replyArgs << idArgReply; -+ -+ // split in/out arguments: "in" belong to the call, "out" to the reply -+ QValueList::const_iterator argIt = method.arguments.begin(); -+ QValueList::const_iterator argEndIt = method.arguments.end(); -+ for (; argIt != argEndIt; ++argIt) -+ { -+ if ((*argIt).direction == Argument::Out) -+ { -+ // reply parameters are "out" for the service but "in" for -+ // the reply handler -+ Argument arg = *argIt; -+ arg.direction = Argument::In; -+ -+ replyArgs << arg; -+ } -+ else -+ methodArgs << *argIt; -+ } -+ -+ // change method -+ method.arguments = methodArgs; -+ -+ classData.asyncMethods << method; -+ -+ // create reply handler -+ Method reply = method; -+ reply.arguments = replyArgs; -+ -+ classData.asyncReplyMethods << reply; -+ } -+} -+ - bool ClassGenerator::initStreams(const QString& baseName, - QTextStream& headerStream, - QTextStream& sourceStream) -@@ -680,7 +931,6 @@ - { - closeIncludeGuard(baseName, headerStream); - writeFileFooter(headerStream); -- - writeFileFooter(sourceStream); - - QIODevice* device = headerStream.device(); -@@ -717,33 +967,36 @@ - QTextStream& headerStream, - QTextStream& sourceStream) - { -+ Class classDataCopy = classData; -+ splitAsyncInterfaceMethods(classDataCopy); -+ - // create header -- writeHeaderIncludes(classData, Class::Interface, headerStream); -+ writeHeaderIncludes(classDataCopy, Class::Interface, headerStream); - -- openNamespaces(classData.namespaces, headerStream); -- openClassDeclaration(classData, Class::Interface, headerStream); -+ openNamespaces(classDataCopy.namespaces, headerStream); -+ openClassDeclaration(classDataCopy, Class::Interface, headerStream); - -- writeSignalDeclarations(classData, Class::Interface, headerStream); -- writeMethodDeclarations(classData, Class::Interface, headerStream); -- writeMethodCallDeclarations(classData, headerStream); -+ writeSignalDeclarations(classDataCopy, Class::Interface, headerStream); -+ writeMethodDeclarations(classDataCopy, Class::Interface, headerStream); -+ writeMethodCallDeclarations(classDataCopy, headerStream); - -- closeClassDeclaration(classData, Class::Interface, headerStream); -- closeNamespaces(classData.namespaces, headerStream); -+ closeClassDeclaration(classDataCopy, Class::Interface, headerStream); -+ closeNamespaces(classDataCopy.namespaces, headerStream); - - // create source -- writeSourceIncludes(classData, Class::Interface, sourceStream); -- -- openNamespaces(classData.namespaces, sourceStream); -+ writeSourceIncludes(classDataCopy, Class::Interface, sourceStream); - -- MethodGenerator::writeIntrospectionDataMethod(classData, sourceStream); -+ openNamespaces(classDataCopy.namespaces, sourceStream); - -- writeSignalEmitters(classData, sourceStream); -+ MethodGenerator::writeIntrospectionDataMethod(classDataCopy, sourceStream); - -- writeMethodCalls(classData, sourceStream); -+ writeSignalEmitters(classDataCopy, sourceStream); -+ writeInterfaceAsyncReplyHandlers(classDataCopy, sourceStream); -+ writeMethodCalls(classDataCopy, sourceStream); - -- MethodGenerator::writeInterfaceMainMethod(classData, sourceStream); -+ MethodGenerator::writeInterfaceMainMethod(classDataCopy, sourceStream); - -- closeNamespaces(classData.namespaces, sourceStream); -+ closeNamespaces(classDataCopy.namespaces, sourceStream); - - return true; - } -@@ -752,33 +1005,39 @@ - QTextStream& headerStream, - QTextStream& sourceStream) - { -+ Class classDataCopy = classData; -+ splitAsyncProxyMethods(classDataCopy); -+ - // create header -- writeHeaderIncludes(classData, Class::Proxy, headerStream); -+ writeHeaderIncludes(classDataCopy, Class::Proxy, headerStream); - -- openNamespaces(classData.namespaces, headerStream); -- openClassDeclaration(classData, Class::Proxy, headerStream); -+ openNamespaces(classDataCopy.namespaces, headerStream); -+ openClassDeclaration(classDataCopy, Class::Proxy, headerStream); - -- writeSignalDeclarations(classData, Class::Proxy, headerStream); -- writeMethodDeclarations(classData, Class::Proxy, headerStream); -+ writeSignalDeclarations(classDataCopy, Class::Proxy, headerStream); -+ writeMethodDeclarations(classDataCopy, Class::Proxy, headerStream); - -- closeClassDeclaration(classData, Class::Proxy, headerStream); -- closeNamespaces(classData.namespaces, headerStream); -+ closeClassDeclaration(classDataCopy, Class::Proxy, headerStream); -+ closeNamespaces(classDataCopy.namespaces, headerStream); - - // create source -- writeSourceIncludes(classData, Class::Proxy, sourceStream); -+ writeSourceIncludes(classDataCopy, Class::Proxy, sourceStream); - -- openNamespaces(classData.namespaces, sourceStream); -+ openNamespaces(classDataCopy.namespaces, sourceStream); - -- MethodGenerator::writeProxyBegin(classData, sourceStream); -+ MethodGenerator::writeProxyBegin(classDataCopy, sourceStream); - -- writeProxyMethods(classData, sourceStream); -+ writeProxyMethods(classDataCopy, sourceStream); - -- writeProxyProperties(classData, sourceStream); -+ writeProxyProperties(classDataCopy, sourceStream); - -- if (!classData.signals.isEmpty()) -- MethodGenerator::writeSignalHandler(classData, sourceStream); -+ if (!classDataCopy.signals.isEmpty()) -+ MethodGenerator::writeSignalHandler(classDataCopy, sourceStream); - -- closeNamespaces(classData.namespaces, sourceStream); -+ if (!classDataCopy.asyncReplySignals.isEmpty()) -+ MethodGenerator::writeProxyAsyncReplyHandler(classDataCopy, sourceStream); -+ -+ closeNamespaces(classDataCopy.namespaces, sourceStream); - - return true; - } -@@ -796,7 +1055,6 @@ - - closeClassDeclaration(classData, Class::Node, headerStream); - closeNamespaces(classData.namespaces, headerStream); -- closeIncludeGuard(classData.name, headerStream); - - // create source - writeSourceIncludes(classData, Class::Node, sourceStream); -diff -ur libdbus-1-qt3-0.8.1/tools/dbusxml2qt3/main.cpp ../dbus-qt4-qt3backport/tools/dbusxml2qt3/main.cpp ---- libdbus-1-qt3-0.8.1/tools/dbusxml2qt3/main.cpp 2007-12-17 12:34:08.000000000 +0100 -+++ ../dbus-qt4-qt3backport/tools/dbusxml2qt3/main.cpp 2008-03-13 10:28:54.000000000 +0100 -@@ -153,12 +153,16 @@ - exit(3); - } - -- QStringList nameParts = QStringList::split("::", options["classname"]); -+ // class name for node is handled differently later on -+ if (!generateNode) -+ { -+ QStringList nameParts = QStringList::split("::", options["classname"]); - -- interfaces[0].name = nameParts.back(); -+ interfaces[0].name = nameParts.back(); - -- nameParts.pop_back(); -- interfaces[0].namespaces = nameParts; -+ nameParts.pop_back(); -+ interfaces[0].namespaces = nameParts; -+ } - } - - if (checkForOption(options, "namespace")) -@@ -284,6 +288,7 @@ - Method method; - method.name = "Introspect"; - method.noReply = false; -+ method.async = false; - - Argument argument; - argument.name = "data"; -diff -ur libdbus-1-qt3-0.8.1/tools/dbusxml2qt3/methodgen.cpp ../dbus-qt4-qt3backport/tools/dbusxml2qt3/methodgen.cpp ---- libdbus-1-qt3-0.8.1/tools/dbusxml2qt3/methodgen.cpp 2007-12-17 12:34:08.000000000 +0100 -+++ ../dbus-qt4-qt3backport/tools/dbusxml2qt3/methodgen.cpp 2008-03-13 10:28:54.000000000 +0100 -@@ -279,6 +279,24 @@ - return annotations; - } - -+static bool hasAnnotation(const QDomElement& element, const QString& annotation, QString* value = 0) -+{ -+ for (QDomNode node = element.firstChild(); !node.isNull(); -+ node = node.nextSibling()) -+ { -+ if (!node.isElement()) continue; -+ -+ QDomElement childElement = node.toElement(); -+ if (childElement.tagName() != "annotation") continue; -+ if (childElement.attribute("name") != annotation) continue; -+ -+ if (value != 0) *value = childElement.attribute("value"); -+ return true; -+ } -+ -+ return false; -+} -+ - static QValueList extractArguments(const QDomElement& methodElement, - Class& classData) - { -@@ -568,9 +586,13 @@ - method.name = element.attribute("name"); - method.arguments = extractArguments(element, classData); - method.noReply = false; -+ method.async = false; - - if (element.tagName() == "method") -+ { -+ method.async = hasAnnotation(element, "org.freedesktop.DBus.GLib.Async"); - classData.methods.append(method); -+ } - else - classData.signals.append(method); - } -@@ -689,36 +711,85 @@ - void MethodGenerator::writeMethodCallDeclaration(const Method& method, - QTextStream& stream) - { -- stream << "QDBusMessage call" << method.name -- << "(const QDBusMessage& mesage);" << endl; -+ if (method.async) -+ stream << "void call" << method.name << "Async"; -+ else -+ stream << "QDBusMessage call" << method.name; -+ -+ stream << "(const QDBusMessage& message);" << endl; - stream << endl; - } - - void MethodGenerator::writeMethodCall(const Class& classData, - const Method& method, QTextStream& stream) - { -- stream << "QDBusMessage " << classData.name << "::call" << method.name -- << "(const QDBusMessage& message)" << endl;; -+ if (method.async) -+ stream << "void " << classData.name << "::call" << method.name << "Async"; -+ else -+ stream << "QDBusMessage " << classData.name << "::call" << method.name; -+ -+ stream << "(const QDBusMessage& message)" << endl; - - stream << "{" << endl; -- stream << " QDBusError error;" << endl; -- stream << " QDBusMessage reply;" << endl; -- stream << endl; - -- writeVariables(" ", method, stream); -+ if (method.async) -+ { -+ // FIXME: using writeVariables by removing asyncCallId argument -+ Method reducedMethod = method; -+ reducedMethod.arguments.pop_front(); -+ -+ writeVariables(" ", reducedMethod, stream); -+ } -+ else -+ { -+ stream << " QDBusError error;" << endl; -+ stream << " QDBusMessage reply;" << endl; -+ stream << endl; -+ -+ writeVariables(" ", method, stream); -+ } - - stream << endl; -- stream << " if (" << method.name << "("; -+ -+ if (method.async) -+ { -+ stream << " int _asyncCallId = 0;" << endl; -+ stream << " while (m_asyncCalls.find(_asyncCallId) != m_asyncCalls.end())" -+ << endl; -+ stream << " {" << endl; -+ stream << " ++_asyncCallId;" << endl; -+ stream << " }" << endl; -+ stream << " m_asyncCalls.insert(_asyncCallId, message);" << endl; -+ stream << endl; -+ -+ stream << " " << method.name << "Async("; -+ } -+ else -+ stream << " if (" << method.name << "("; - - QValueList::const_iterator it = method.arguments.begin(); - QValueList::const_iterator endIt = method.arguments.end(); -- for (; it != endIt; ++it) -+ while (it != endIt) - { -- stream << "_" << (*it).name << ", "; -+ stream << "_" << (*it).name; -+ -+ ++it; -+ if (it != endIt) stream << ", "; - } - -- stream << "error))" << endl; -+ if (method.async) -+ { -+ stream << ");" << endl; -+ stream << endl; -+ -+ stream << " return;" << endl; -+ stream << "}" << endl; -+ stream << endl; -+ return; -+ } - -+ if (method.arguments.count() > 0) stream << ", "; -+ stream << "error))" << endl; - - stream << " {" << endl; - stream << " reply = QDBusMessage::methodReply(message);" << endl; -@@ -878,6 +949,102 @@ - stream << endl; - } - -+ -+void MethodGenerator::writeInterfaceAsyncReplyHandler(const Class& classData, -+ const Method& method, QTextStream& stream) -+{ -+ stream << "void " << classData.name << "::" << method.name -+ << "AsyncReply("; -+ -+ QValueList::const_iterator it = method.arguments.begin(); -+ QValueList::const_iterator endIt = method.arguments.end(); -+ while (it != endIt) -+ { -+ if (!(*it).isPrimitive && (*it).direction == Argument::In) -+ stream << "const "; -+ -+ stream << (*it).signature; -+ -+ if (!(*it).isPrimitive || (*it).direction == Argument::Out) stream << "&"; -+ -+ stream << " " << (*it).name; -+ -+ ++it; -+ if (it != endIt) stream << ", "; -+ } -+ stream << ")" << endl; -+ stream << endl; -+ stream << "{" << endl; -+ -+ stream << " QMap::iterator findIt = m_asyncCalls.find(asyncCallId);" << endl; -+ stream << " if (findIt == m_asyncCalls.end()) return;" << endl; -+ stream << endl; -+ -+ stream << " QDBusMessage call = findIt.data();" << endl; -+ stream << " m_asyncCalls.erase(findIt);" << endl; -+ stream << endl; -+ -+ stream << " QDBusMessage reply = QDBusMessage::methodReply(call);" -+ << endl; -+ -+ it = method.arguments.begin(); -+ for (++it; it != endIt; ++it) // skip asyncCallId at beginning -+ { -+ if (!(*it).annotatedType.isEmpty()) -+ { -+ stream << " QDBusData " << (*it).name << "Data;" << endl; -+ -+ // TODO error handling -+ stream << " if (QDBusDataConverter::convertToQDBusData<" -+ << (*it).annotatedType << ">(" << (*it).name << ", " -+ << (*it).name << "Data" -+ << ") != QDBusDataConverter::Success) return false;" -+ << endl; -+ stream << " reply << " << (*it).name << "Data;" << endl; -+ } -+ else if (!(*it).accessor.isEmpty()) -+ { -+ stream << " reply << QDBusData::from" << (*it).accessor << "("; -+ -+ if ((*it).subAccessor.isEmpty()) -+ stream << (*it).name; -+ else -+ stream << (*it).containerClass << "(" << (*it).name << ")"; -+ -+ stream << ");" << endl; -+ } -+ else -+ stream << " reply << " << (*it).name << ";" << endl; -+ } -+ stream << endl; -+ -+ stream << " handleMethodReply(reply);" << endl; -+ -+ stream << "}" << endl; -+ stream << endl; -+ -+ stream << "void " << classData.name << "::" << method.name -+ << "AsyncError(int asyncCallId, const QDBusError& error)"; -+ stream << endl; -+ -+ stream << "{" << endl; -+ -+ stream << " QMap::iterator findIt = m_asyncCalls.find(asyncCallId);" << endl; -+ stream << " if (findIt == m_asyncCalls.end()) return;" << endl; -+ stream << endl; -+ -+ stream << " QDBusMessage call = findIt.data();" << endl; -+ stream << " m_asyncCalls.erase(findIt);" << endl; -+ stream << endl; -+ -+ stream << " QDBusMessage reply = QDBusMessage::methodError(call, error);" -+ << endl; -+ stream << " handleMethodReply(reply);" << endl; -+ -+ stream << "}" << endl; -+ stream << endl; -+} -+ - void MethodGenerator::writeInterfaceMainMethod(const Class& classData, - QTextStream& stream) - { -@@ -897,10 +1064,19 @@ - { - stream << " if (message.member() == \"" << (*it).name << "\")" << endl; - stream << " {" << endl; -- stream << " QDBusMessage reply = call" << (*it).name << "(message);" -- << endl; -- stream << " handleMethodReply(reply);" << endl; -- stream << endl; -+ -+ if ((*it).async) -+ { -+ stream << " call" << (*it).name << "Async(message);" << endl; -+ stream << endl; -+ } -+ else -+ { -+ stream << " QDBusMessage reply = call" << (*it).name -+ << "(message);" << endl; -+ stream << " handleMethodReply(reply);" << endl; -+ stream << endl; -+ } - stream << " return true;" << endl; - stream << " }" << endl; - stream << endl; -@@ -967,6 +1143,15 @@ - << endl; - } - -+ if (!classData.asyncReplySignals.isEmpty()) -+ { -+ stream << " QObject::connect(m_baseProxy, " -+ << "SIGNAL(asyncReply(int, const QDBusMessage&))," << endl; -+ stream << " this, " -+ << " SLOT(slotHandleAsyncReply(int, const QDBusMessage&)));" -+ << endl; -+ } -+ - stream << "}" << endl; - - stream << endl; -@@ -988,7 +1173,8 @@ - void MethodGenerator::writeProxyMethod(const QString& className, - const Method& method, QTextStream& stream) - { -- stream << "bool " << className << "::" << method.name << "("; -+ stream << "bool " << className << "::" << method.name -+ << (method.async ? "Async(" : "("); - - QValueList::const_iterator it = method.arguments.begin(); - QValueList::const_iterator endIt = method.arguments.end(); -@@ -1064,6 +1250,22 @@ - return; - } - -+ if (method.async) -+ { -+ stream << " asyncCallId = m_baseProxy->sendWithAsyncReply(\""; -+ stream << method.name << "\", parameters);" << endl; -+ stream << endl; -+ -+ stream << " if (asyncCallId != 0) m_asyncCalls[asyncCallId] = \"" -+ << method.name << "\";" << endl; -+ stream << endl; -+ -+ stream << " return (asyncCallId != 0);" << endl; -+ stream << "}" << endl; -+ stream << endl; -+ return; -+ } -+ - stream << " QDBusMessage reply = m_baseProxy->sendWithReply(\""; - stream << method.name << "\", parameters, &error);" << endl; - stream << endl; -@@ -1335,6 +1537,58 @@ - } - } - -+void MethodGenerator::writeProxyAsyncReplyHandler(const Class& classData, -+ QTextStream& stream) -+{ -+ stream << "void " << classData.name -+ << "::slotHandleAsyncReply(int asyncCallId, const QDBusMessage& message)" << endl; -+ stream << "{" << endl; -+ -+ stream << " QMap::iterator findIt = " -+ << "m_asyncCalls.find(asyncCallId);" << endl; -+ stream << " if (findIt == m_asyncCalls.end()) return;" << endl; -+ stream << endl; -+ stream << " const QString signalName = findIt.data();" << endl; -+ stream << " m_asyncCalls.erase(findIt);" << endl; -+ stream << endl; -+ -+ QValueList::const_iterator it = classData.asyncReplySignals.begin(); -+ QValueList::const_iterator endIt = classData.asyncReplySignals.end(); -+ bool first = true; -+ for (; it != endIt; ++it) -+ { -+ stream << " "; -+ -+ if (!first) -+ stream << "else "; -+ else -+ first = false; -+ -+ stream << "if (signalName == \"" << (*it).name << "\")" << endl; -+ stream << " {" << endl; -+ -+ // FIXME tricking writeVariables and writeSignalEmit into writing -+ // the reply emit code by manipulating arguments and name -+ stream << " int _asyncCallId = asyncCallId;" << endl; -+ -+ Method signal = *it; -+ signal.arguments.pop_front(); -+ -+ writeVariables(" ", signal, stream); -+ stream << endl; -+ -+ signal = *it; -+ signal.name += "AsyncReply"; -+ -+ writeSignalEmit(signal, stream); -+ -+ stream << " }" << endl; -+ } -+ -+ stream << "}" << endl; -+ stream << endl; -+} -+ - void MethodGenerator::writeIntrospectionDataMethod(const Class& classData, - QTextStream& stream) - { -diff -ur libdbus-1-qt3-0.8.1/tools/dbusxml2qt3/methodgen.h ../dbus-qt4-qt3backport/tools/dbusxml2qt3/methodgen.h ---- libdbus-1-qt3-0.8.1/tools/dbusxml2qt3/methodgen.h 2007-12-17 12:34:08.000000000 +0100 -+++ ../dbus-qt4-qt3backport/tools/dbusxml2qt3/methodgen.h 2008-03-13 10:28:55.000000000 +0100 -@@ -61,6 +61,7 @@ - QString name; - QValueList arguments; - bool noReply; -+ bool async; - }; - - class Property : public Argument -@@ -86,6 +87,10 @@ - QValueList methods; - QValueList signals; - QValueList properties; -+ -+ QValueList asyncMethods; -+ QValueList asyncReplySignals; -+ QValueList asyncReplyMethods; - }; - - class MethodGenerator -@@ -109,6 +114,10 @@ - static void writeSignalEmitter(const Class& classData, const Method& method, - QTextStream& stream); - -+ static void writeInterfaceAsyncReplyHandler(const Class& classData, -+ const Method& method, -+ QTextStream& stream); -+ - static void writeInterfaceMainMethod(const Class& classData, - QTextStream& stream); - -@@ -125,6 +134,9 @@ - static void writeProxyProperty(const Class& classData, const Property& property, - QTextStream& stream); - -+ static void writeProxyAsyncReplyHandler(const Class& classData, -+ QTextStream& stream); -+ - static void writeIntrospectionDataMethod(const Class& classData, - QTextStream& stream); - diff --git a/opensuse/libdbus-1-tqt-0/r795238.patch b/opensuse/libdbus-1-tqt-0/r795238.patch deleted file mode 100644 index 3213c823d..000000000 --- a/opensuse/libdbus-1-tqt-0/r795238.patch +++ /dev/null @@ -1,60 +0,0 @@ -Index: dbus/qdbusdatamap.h -=================================================================== ---- dbus/qdbusdatamap.h (Revision 785103) -+++ dbus/qdbusdatamap.h (Revision 795238) -@@ -173,7 +173,7 @@ - } - else if (hasContainerValueType()) - { -- if (it.data()->buildSignature() != containerSignature) -+ if (it.data().buildDBusSignature() != containerSignature) - { - m_valueType = QDBusData::Invalid; - m_containerValueType = QDBusData(); -Index: dbus/qdbuserror.h -=================================================================== ---- dbus/qdbuserror.h (Revision 785103) -+++ dbus/qdbuserror.h (Revision 795238) -@@ -119,7 +119,7 @@ - * Returned by QDBusConnection's addConnection if the specified address - * isn't a valid D-Bus bus address. - * -- * @see QDBusConnection:::addConnection(const QString&,const QString&); -+ * @see QDBusConnection::addConnection(const QString&,const QString&); - */ - BadAddress, - -Index: tools/dbusxml2qt3/classgen.cpp -=================================================================== ---- tools/dbusxml2qt3/classgen.cpp (Revision 785103) -+++ tools/dbusxml2qt3/classgen.cpp (Revision 795238) -@@ -168,6 +168,17 @@ - extractForwardDeclarations(*it, forwards); - } - -+ it = classData.signals.begin(); -+ endIt = classData.signals.end(); -+ for (; it != endIt; ++it) -+ { -+ if ((*it).arguments.isEmpty()) continue; -+ -+ extractHeaderIncludes(*it, includes); -+ extractForwardDeclarations(*it, forwards); -+ } -+ -+ - QValueList::const_iterator propertyIt = classData.properties.begin(); - QValueList::const_iterator propertyEndIt = classData.properties.end(); - for (; propertyIt != propertyEndIt; ++propertyIt) -Index: dbus-1-qt3.pc.in -=================================================================== ---- dbus-1-qt3.pc.in (Revision 785103) -+++ dbus-1-qt3.pc.in (Revision 795238) -@@ -1,6 +1,6 @@ - prefix=@prefix@ - exec_prefix=@exec_prefix@ --libdir=${prefix}/lib -+libdir=@libdir@ - includedir=${prefix}/include/dbus-1.0/qt3 - - Name: dbus-1-qt3 diff --git a/opensuse/libdbus-tqt-1-0/README.VERSION b/opensuse/libdbus-tqt-1-0/README.VERSION deleted file mode 100644 index 3167a4836..000000000 --- a/opensuse/libdbus-tqt-1-0/README.VERSION +++ /dev/null @@ -1 +0,0 @@ -In the TRINITY tree this is dependencies/dbus-tqt. diff --git a/opensuse/libdbus-tqt-1-0/baselibs.conf b/opensuse/libdbus-tqt-1-0/baselibs.conf deleted file mode 100644 index 245517231..000000000 --- a/opensuse/libdbus-tqt-1-0/baselibs.conf +++ /dev/null @@ -1 +0,0 @@ -libdbus-tqt-1-0 diff --git a/opensuse/libdbus-tqt-1-0/dbus-qt3-compile-fix-thoenig-01.patch b/opensuse/libdbus-tqt-1-0/dbus-qt3-compile-fix-thoenig-01.patch deleted file mode 100644 index 00b8b6026..000000000 --- a/opensuse/libdbus-tqt-1-0/dbus-qt3-compile-fix-thoenig-01.patch +++ /dev/null @@ -1,85 +0,0 @@ ---- dbus-qt3/connection.cpp 2005-04-18 05:19:17.000000000 -0600 -+++ dbus-qt3/connection.cpp 2005-04-19 14:35:07.000000000 -0600 -@@ -154,6 +154,7 @@ - - void* Connection::virtual_hook( int, void* ) - { -+ return (void *)NULL; - } - - void Connection::dbus_connection_setup_with_qt_main (DBusConnection *connection) ---- dbus-qt3/message.cpp 2005-04-18 05:19:17.000000000 -0600 -+++ dbus-qt3/message.cpp 2005-04-19 14:55:32.000000000 -0600 -@@ -359,6 +359,7 @@ - Message Message::operator=( const Message& other ) - { - //FIXME: ref the other.d->msg instead of copying it? -+ return (Message &)(d->msg); - } - /** - * Destructs message. -@@ -508,42 +509,49 @@ - const dbus_bool_t right_size_bool = b; - dbus_message_append_args( d->msg, DBUS_TYPE_BOOLEAN, &right_size_bool, - DBUS_TYPE_INVALID ); -+ return (Message &)(d->msg); - } - - Message& Message::operator<<( Q_INT8 byte ) - { - dbus_message_append_args( d->msg, DBUS_TYPE_BYTE, &byte, - DBUS_TYPE_INVALID ); -+ return (Message &)(d->msg); - } - - Message& Message::operator<<( Q_INT32 num ) - { - dbus_message_append_args( d->msg, DBUS_TYPE_INT32, &num, - DBUS_TYPE_INVALID ); -+ return (Message &)(d->msg); - } - - Message& Message::operator<<( Q_UINT32 num ) - { - dbus_message_append_args( d->msg, DBUS_TYPE_UINT32, &num, - DBUS_TYPE_INVALID ); -+ return (Message &)(d->msg); - } - - Message& Message::operator<<( Q_INT64 num ) - { - dbus_message_append_args( d->msg, DBUS_TYPE_INT64, &num, - DBUS_TYPE_INVALID ); -+ return (Message &)(d->msg); - } - - Message& Message::operator<<( Q_UINT64 num ) - { - dbus_message_append_args( d->msg, DBUS_TYPE_UINT64, &num, - DBUS_TYPE_INVALID ); -+ return (Message &)(d->msg); - } - - Message& Message::operator<<( double num ) - { - dbus_message_append_args( d->msg, DBUS_TYPE_DOUBLE, &num, - DBUS_TYPE_INVALID ); -+ return (Message &)(d->msg); - } - - Message& Message::operator<<( const QString& str ) -@@ -551,11 +559,13 @@ - const char *u = str.utf8(); - dbus_message_append_args( d->msg, DBUS_TYPE_STRING, &u, - DBUS_TYPE_INVALID ); -+ return (Message &)(d->msg); - } - - Message& Message::operator<<( const QVariant& custom ) - { - //FIXME: imeplement -+ return (Message &)(d->msg); - } - - } - diff --git a/opensuse/libdbus-tqt-1-0/dbus-qt3-do-not-close-shared-connection-thoenig-01.patch b/opensuse/libdbus-tqt-1-0/dbus-qt3-do-not-close-shared-connection-thoenig-01.patch deleted file mode 100644 index 3cc726de1..000000000 --- a/opensuse/libdbus-tqt-1-0/dbus-qt3-do-not-close-shared-connection-thoenig-01.patch +++ /dev/null @@ -1,12 +0,0 @@ ---- dbus-qt3/connection.cpp 2006-10-20 16:33:29.000000000 +0200 -+++ dbus-qt3/connection.cpp 2006-10-20 16:33:10.000000000 +0200 -@@ -106,7 +106,7 @@ - - void Connection::close() - { -- dbus_connection_close ( d->connection ); -+ dbus_connection_unref ( d->connection ); - } - - void Connection::flush() - diff --git a/opensuse/libdbus-tqt-1-0/dbus-tqt-0.62.tar.bz2 b/opensuse/libdbus-tqt-1-0/dbus-tqt-0.62.tar.bz2 deleted file mode 100644 index b56ca56e6..000000000 Binary files a/opensuse/libdbus-tqt-1-0/dbus-tqt-0.62.tar.bz2 and /dev/null differ diff --git a/opensuse/libdbus-tqt-1-0/libdbus-tqt-1-0.changes b/opensuse/libdbus-tqt-1-0/libdbus-tqt-1-0.changes deleted file mode 100644 index c3d66974d..000000000 --- a/opensuse/libdbus-tqt-1-0/libdbus-tqt-1-0.changes +++ /dev/null @@ -1,61 +0,0 @@ -------------------------------------------------------------------- -Wed Aug 24 19:36:38 UTC 2011 - rxu@lincomlinux.org - -- fix naming error: libdbus-tqt-1-0 - -------------------------------------------------------------------- -Sat Aug 13 16:49:42 UTC 2011 - rxu@lincomlinux.org - -- upgrade to trinity dbus-tqt and adjust accordingly - -------------------------------------------------------------------- -Sat Dec 19 00:39:25 CET 2009 - jengelh@medozas.de - -- add baselibs.conf as a source - -------------------------------------------------------------------- -Wed Dec 10 12:34:56 CET 2008 - olh@suse.de - -- use Obsoletes: -XXbit only for ppc64 to help solver during distupgrade - (bnc#437293) - -------------------------------------------------------------------- -Thu Oct 30 12:34:56 CET 2008 - olh@suse.de - -- obsolete old -XXbit packages (bnc#437293) - -------------------------------------------------------------------- -Thu Apr 10 12:54:45 CEST 2008 - ro@suse.de - -- added baselibs.conf file to build xxbit packages - for multilib support - -------------------------------------------------------------------- -Mon Nov 6 15:53:15 CET 2006 - thoenig@suse.de - -- loosen dependency to D-Bus - -------------------------------------------------------------------- -Fri Oct 20 16:42:06 CEST 2006 - thoenig@suse.de - -- add dbus-qt3-do-not-close-shared-connection-thoenig-01.patch: - Do not close shared connection -- F=dbus-qt3-compile-fix-thoenig-01; mv $.diff $F.patch - -------------------------------------------------------------------- -Mon Aug 21 12:49:44 CEST 2006 - thoenig@suse.de - -- remove hack for 64bit architectures -- use bz2 for tar ball - -------------------------------------------------------------------- -Thu Aug 17 18:22:08 CEST 2006 - dmueller@suse.de - -- really enable -fstack-protector -- fix build on x86_64 - -------------------------------------------------------------------- -Tue Aug 1 23:03:23 CEST 2006 - thoenig@suse.de - -- split out binings to sparate spec files - diff --git a/opensuse/libdbus-tqt-1-0/libdbus-tqt-1-0.spec b/opensuse/libdbus-tqt-1-0/libdbus-tqt-1-0.spec deleted file mode 100644 index 85cfb9d28..000000000 --- a/opensuse/libdbus-tqt-1-0/libdbus-tqt-1-0.spec +++ /dev/null @@ -1,147 +0,0 @@ -# -# spec file for package dbus-1-tqt -# -# Copyright (c) 2011 the Trinity Project (opensuse). -# -# All modifications and additions to the file contributed by third parties -# remain the property of their copyright owners, unless otherwise agreed -# upon. The license for this file, and modifications and additions to the -# file, is the same license as for the pristine package itself (unless the -# license for the pristine package is not an Open Source License, in which -# case the license is the MIT License). An "Open Source License" is a -# license that conforms to the Open Source Definition (Version 1.9) -# published by the Open Source Initiative. - -# Please submit bugfixes or comments via http://bugs.trinitydesktop.org/ -# - -# norootforbuild - - -Name: libdbus-tqt-1-0 -BuildRequires: dbus-1 dbus-1-devel libtqt4-devel cmake -URL: http://dbus.freedesktop.org/ -License: GPLv2+ -Group: Development/Libraries/TDE -Version: 0.62 -Release: 1 -AutoReqProv: on -Summary: TQt/KDE bindings for D-Bus -Source0: dbus-tqt-%{version}.tar.bz2 -Source1: baselibs.conf -Patch0: dbus-qt3-compile-fix-thoenig-01.patch -Patch1: dbus-qt3-do-not-close-shared-connection-thoenig-01.patch -BuildRoot: %{_tmppath}/%{name}-%{version}-build -Requires: dbus-1 >= %( echo `rpm -q --queryformat '%{VERSION}-%{RELEASE}' dbus-1`) -Provides: dbus-1-tqt - -%package devel -License: Other uncritical OpenSource License -Summary: Developer package for TQt/KDE bindings for D-Bus -Requires: dbus-1 >= %( echo `rpm -q --queryformat '%{VERSION}-%{RELEASE}' dbus-1`) -Requires: dbus-1-devel >= %( echo `rpm -q --queryformat '%{VERSION}-%{RELEASE}' dbus-1-devel`) -Requires: %{name} = %{version} -Provides: dbus-1-tqt-devel -AutoReqProv: on -Group: Development/Libraries/TDE - -%description -TQt/KDE bindings for D-Bus. - - - -Authors: --------- - Olivier Andrieu - Philip Blundell - Anders Carlsson - Kristian Hogsberg - Alex Larsson - Michael Meeks - Seth Nickell - Havoc Pennington - Harri Porten - Matthew Rickard - Zack Rusin - Joe Shaw - Colin Walters - David Zeuthen - -%description devel -Developer package for TQt/KDE bindings for D-Bus. - - - -Authors: --------- - Olivier Andrieu - Philip Blundell - Anders Carlsson - Kristian Hogsberg - Alex Larsson - Michael Meeks - Seth Nickell - Havoc Pennington - Harri Porten - Matthew Rickard - Zack Rusin - Joe Shaw - Colin Walters - David Zeuthen - -%prep -%setup -n dbus-tqt-%{version} -q -#%patch0 -p0 -#%patch1 -p0 - -%build -RPM_OPT_FLAGS="${RPM_OPT_FLAGS} -fstack-protector -fno-strict-aliasing -fPIC" -export CFLAGS="${RPM_OPT_FLAGS}" -export CXXFLAGS="${RPM_OPT_FLAGS}" -mkdir build -cd build - cmake -DCMAKE_SKIP_RPATH=ON \\\ - -DCMAKE_INSTALL_PREFIX=%{_prefix} \\\ - -DCMAKE_INSTALL_LIBDIR:PATH=%{_libdir} \\\ -      -DINCLUDE_INSTALL_DIR:PATH=%{_includedir} \\\ - -DLIB_INSTALL_DIR:PATH=%{_libdir} \\\ - -DLIBEXEC_INSTALL_DIR:PATH=%{_libexecdir} \\\ - -DSYSCONF_INSTALL_DIR:PATH=%{_sysconfdir} \\\ - -DCMAKE_VERBOSE_MAKEFILE=ON \\\ -      -DQT_LIBRARY_DIRS=/usr/lib/qt3/%{_lib} \\\ -      -DQT_INCLUDE_DIRS=/usr/lib/qt3/include \\\ - -DPKGCONFIG_INSTALL_DIR=%{_libdir}/pkgconfig \\\ - -DMAN_INSTALL_DIR=%{_mandir} \ - ../ -make - -%install -cd build -make DESTDIR=%{buildroot} install - -%post -%{run_ldconfig} - -%postun -%{run_ldconfig} - -%clean -%{__rm} -rf %{buildroot} - -%files -%defattr(-, root, root) -%{_libdir}/libdbus-tqt-1.so.0* - -%files devel -%defattr(-, root, root) -%dir %{_includedir}/dbus-1.0 -%dir %{_includedir}/dbus-1.0/dbus -%{_includedir}/dbus-1.0/dbus/connection.h -%{_includedir}/dbus-1.0/dbus/dbus-qt.h -%{_includedir}/dbus-1.0/dbus/message.h -%{_includedir}/dbus-1.0/dbus/server.h -%{_libdir}/libdbus-tqt-1.la -%{_libdir}/libdbus-tqt-1.so -%{_libdir}/pkgconfig/dbus-tqt.pc - -%changelog diff --git a/opensuse/libtqt4/libtqt4.changes b/opensuse/libtqt4/libtqt4.changes deleted file mode 100644 index f27210b31..000000000 --- a/opensuse/libtqt4/libtqt4.changes +++ /dev/null @@ -1,11 +0,0 @@ -------------------------------------------------------------------- -Sat Aug 20 22:47:41 UTC 2011 - rxu@lincomlinux.org - -- remove the tqtinterface subpackage: it belongs in -devel -- add a shebang to convert_qt_tqt1 - -------------------------------------------------------------------- -Thu Aug 11 02:59:00 UTC 2011 - rxu@lincomlinux.org - -- initial creation libtqt4 - diff --git a/opensuse/libtqt4/libtqt4.spec b/opensuse/libtqt4/libtqt4.spec deleted file mode 100644 index 9108235bc..000000000 --- a/opensuse/libtqt4/libtqt4.spec +++ /dev/null @@ -1,173 +0,0 @@ -# -# spec file for package tqtinterface -# -# Copyright (c) 2011 the Trinity Project (opensuse). -# -# All modifications and additions to the file contributed by third parties -# remain the property of their copyright owners, unless otherwise agreed -# upon. The license for this file, and modifications and additions to the -# file, is the same license as for the pristine package itself (unless the -# license for the pristine package is not an Open Source License, in which -# case the license is the MIT License). An "Open Source License" is a -# license that conforms to the Open Source Definition (Version 1.9) -# published by the Open Source Initiative. - -# Please submit bugfixes or comments via http://bugs.trinitydesktop.org/ -# - -# norootforbuild - -Name: libtqt4 -License: GPLv2+ -Group: Graphical Desktop/TDE -Summary: Interface and abstraction library for Qt and Trinity -Version: 3.5.12.99 -Release: 1 -Source0: tqtinterface-%{version}.tar.bz2 -URL: http://www.trinitydesktop.org/ - -BuildRoot: %{_tmppath}/%{name}-%{version}-build - -%define with_qt3 1 -%define with_qt4 0 - -%if %{with_qt3} -BuildRequires: qt3-devel >= 3.3.8c -Requires: qt3 >= 3.3.8c -%endif - -%if %{with_qt4} -BuildRequires: libqt4-devel >= 4.7.0 -Requires: libqt4-x11 >= 4.7.0 -%endif - -BuildRequires: cmake -BuildRequires: pkgconfig -BuildRequires: libtool -BuildRequires: gcc-c++ - -%description -This package includes libraries that abstract the underlying Qt system -from the actual Trinity code, allowing easy, complete upgrades to new -versions of Qt. - -It also contains various functions that have been removed from newer -versions of Qt, but are completely portable and isolated from other -APIs such as Xorg. This allows the Trinity project to efficiently -perform certain operations that are infeasible or unneccessarily -difficult when using pure Qt4 or above. - -Authors: --------- - Timothy Pearson -    Robert Xu -    Tim Williams -    Serghei Amelian - -%package devel -Summary: TQtinterface header files -Group: Graphical Desktop/TDE -Requires: libtqt4 = %{version} -%if %{with_qt3} -Requires: qt3-devel >= 3.3.8c -%endif -%if %{with_qt4} -Requires: libqt4-devel >= 4.7.0 -%endif -%description devel -This package contains Trinity specific window options and commands. -You need this package to compile Trinity modules. (TQT headers) - - -Authors: --------- - Timothy Pearson -    Robert Xu -    Tim Williams -    Serghei Amelian - - -%prep -%setup -qn tqtinterface-%{version} - -%build -CFLAGS="${CFLAGS:-%optflags}" ; export CFLAGS ; -CXXFLAGS="${CXXFLAGS:-%optflags}" ; export CXXFLAGS ; -FFLAGS="${FFLAGS:-%optflags}" ; export FFLAGS ; -mkdir build -cd build -cmake \ - -DCMAKE_VERBOSE_MAKEFILE=ON \ - -DCMAKE_INSTALL_PREFIX:PATH=%{_prefix} \ - -DCMAKE_INSTALL_LIBDIR:PATH=%{_libdir} \ - -DINCLUDE_INSTALL_DIR:PATH=%{_includedir} \ - -DLIB_INSTALL_DIR:PATH=%{_libdir} \ - -DSYSCONF_INSTALL_DIR:PATH=%{_sysconfdir} \ - -DSHARE_INSTALL_PREFIX:PATH=%{_datadir} \ -%if "%{?_lib}" == "lib64" - -DLIB_SUFFIX=64 \ -%endif - -DBUILD_SHARED_LIBS:BOOL=ON \ -%if %{with_qt3} - -DQT_VERSION=3 \ -%endif -%if %{with_qt4} - -DQT_VERSION=4 \ -%endif - -DQT_LIBRARY_DIRS=/usr/lib/qt3/%{_lib} \ - -DQT_INCLUDE_DIRS=/usr/lib/qt3/include \ - -DPKGCONFIG_INSTALL_DIR=%{_libdir}/pkgconfig \ - ../ - -make %{?_smp_mflags} VERBOSE=1 - -%install -cd build -make DESTDIR=%{buildroot} install -rm -rf %{buildroot}/%{_libdir}/*.la - -# What is this? Leftovers?! -rm -rf %{buildroot}/%{_libdir}/debug - -# Shebang, please. -echo "#!/bin/bash" > %{buildroot}%{_bindir}/convert_qt_tqt1.new -cat %{buildroot}%{_bindir}/convert_qt_tqt1 >> %{buildroot}%{_bindir}/convert_qt_tqt1.new -rm -f %{buildroot}%{_bindir}/convert_qt_tqt1 -mv -v %{buildroot}%{_bindir}/convert_qt_tqt1.new %{buildroot}%{_bindir}/convert_qt_tqt1 -chmod +x %{buildroot}%{_bindir}/convert_qt_tqt1 - - -%clean -rm -rf $RPM_BUILD_ROOT - -%post -p /sbin/ldconfig - -%postun -p /sbin/ldconfig - -%files -%defattr(-,root,root,755) -%{_libdir}/libtqt.so.* -%{_libdir}/libtqassistantclient.so.* - -%files devel -%defattr(-,root,root,755) -%dir %{_includedir}/Qt -%{_includedir}/Qt/q*.h -%{_includedir}/tq*.h -%{_libdir}/pkgconfig/tqt.pc -%{_libdir}/libtqt.so -%{_libdir}/libtqassistantclient.so -%{_bindir}/convert_qt_tqt1 -%{_bindir}/convert_qt_tqt2 -%{_bindir}/convert_qt_tqt3 -%{_bindir}/dcopidl-tqt -%{_bindir}/dcopidl2cpp-tqt -%{_bindir}/dcopidlng-tqt -%{_bindir}/mcopidl-tqt -%{_bindir}/moc-tqt -%{_bindir}/tmoc -%{_bindir}/tqt-replace -%{_bindir}/tqt-replace-stream -%{_bindir}/uic-tqt - -%changelog diff --git a/opensuse/libtqt4/tqtinterface-3.5.12.99.tar.bz2 b/opensuse/libtqt4/tqtinterface-3.5.12.99.tar.bz2 deleted file mode 100644 index d74475745..000000000 Binary files a/opensuse/libtqt4/tqtinterface-3.5.12.99.tar.bz2 and /dev/null differ diff --git a/opensuse/qt3/_link b/opensuse/qt3/_link deleted file mode 100644 index c0d3fb881..000000000 --- a/opensuse/qt3/_link +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/opensuse/tde-filesystem/COPYING b/opensuse/tde-filesystem/COPYING deleted file mode 100644 index f67590d5b..000000000 --- a/opensuse/tde-filesystem/COPYING +++ /dev/null @@ -1,502 +0,0 @@ -          GNU LESSER GENERAL PUBLIC LICENSE -               Version 2.1, February 1999 -  - Copyright (C) 1991, 1999 Free Software Foundation, Inc. - 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. -  -[This is the first released version of the Lesser GPL.  It also counts - as the successor of the GNU Library Public License, version 2, hence - the version number 2.1.] -  -                Preamble -  -  The licenses for most software are designed to take away your -freedom to share and change it.  By contrast, the GNU General Public -Licenses are intended to guarantee your freedom to share and change -free software--to make sure the software is free for all its users. -  -  This license, the Lesser General Public License, applies to some -specially designated software packages--typically libraries--of the -Free Software Foundation and other authors who decide to use it.  You -can use it too, but we suggest you first think carefully about whether -this license or the ordinary General Public License is the better -strategy to use in any particular case, based on the explanations below. -  -  When we speak of free software, we are referring to freedom of use, -not price.  Our General Public Licenses are designed to make sure that -you have the freedom to distribute copies of free software (and charge -for this service if you wish); that you receive source code or can get -it if you want it; that you can change the software and use pieces of -it in new free programs; and that you are informed that you can do -these things. -  -  To protect your rights, we need to make restrictions that forbid -distributors to deny you these rights or to ask you to surrender these -rights.  These restrictions translate to certain responsibilities for -you if you distribute copies of the library or if you modify it. -  -  For example, if you distribute copies of the library, whether gratis -or for a fee, you must give the recipients all the rights that we gave -you.  You must make sure that they, too, receive or can get the source -code.  If you link other code with the library, you must provide -complete object files to the recipients, so that they can relink them -with the library after making changes to the library and recompiling -it.  And you must show them these terms so they know their rights. -  -  We protect your rights with a two-step method: (1) we copyright the -library, and (2) we offer you this license, which gives you legal -permission to copy, distribute and/or modify the library. -  -  To protect each distributor, we want to make it very clear that -there is no warranty for the free library.  Also, if the library is -modified by someone else and passed on, the recipients should know -that what they have is not the original version, so that the original -author's reputation will not be affected by problems that might be -introduced by others. -  -  Finally, software patents pose a constant threat to the existence of -any free program.  We wish to make sure that a company cannot -effectively restrict the users of a free program by obtaining a -restrictive license from a patent holder.  Therefore, we insist that -any patent license obtained for a version of the library must be -consistent with the full freedom of use specified in this license. -  -  Most GNU software, including some libraries, is covered by the -ordinary GNU General Public License.  This license, the GNU Lesser -General Public License, applies to certain designated libraries, and -is quite different from the ordinary General Public License.  We use -this license for certain libraries in order to permit linking those -libraries into non-free programs. -  -  When a program is linked with a library, whether statically or using -a shared library, the combination of the two is legally speaking a -combined work, a derivative of the original library.  The ordinary -General Public License therefore permits such linking only if the -entire combination fits its criteria of freedom.  The Lesser General -Public License permits more lax criteria for linking other code with -the library. -  -  We call this license the "Lesser" General Public License because it -does Less to protect the user's freedom than the ordinary General -Public License.  It also provides other free software developers Less -of an advantage over competing non-free programs.  These disadvantages -are the reason we use the ordinary General Public License for many -libraries.  However, the Lesser license provides advantages in certain -special circumstances. -  -  For example, on rare occasions, there may be a special need to -encourage the widest possible use of a certain library, so that it becomes -a de-facto standard.  To achieve this, non-free programs must be -allowed to use the library.  A more frequent case is that a free -library does the same job as widely used non-free libraries.  In this -case, there is little to gain by limiting the free library to free -software only, so we use the Lesser General Public License. -  -  In other cases, permission to use a particular library in non-free -programs enables a greater number of people to use a large body of -free software.  For example, permission to use the GNU C Library in -non-free programs enables many more people to use the whole GNU -operating system, as well as its variant, the GNU/Linux operating -system. -  -  Although the Lesser General Public License is Less protective of the -users' freedom, it does ensure that the user of a program that is -linked with the Library has the freedom and the wherewithal to run -that program using a modified version of the Library. -  -  The precise terms and conditions for copying, distribution and -modification follow.  Pay close attention to the difference between a -"work based on the library" and a "work that uses the library".  The -former contains code derived from the library, whereas the latter must -be combined with the library in order to run. -  -          GNU LESSER GENERAL PUBLIC LICENSE -   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION -  -  0. This License Agreement applies to any software library or other -program which contains a notice placed by the copyright holder or -other authorized party saying it may be distributed under the terms of -this Lesser General Public License (also called "this License"). -Each licensee is addressed as "you". -  -  A "library" means a collection of software functions and/or data -prepared so as to be conveniently linked with application programs -(which use some of those functions and data) to form executables. -  -  The "Library", below, refers to any such software library or work -which has been distributed under these terms.  A "work based on the -Library" means either the Library or any derivative work under -copyright law: that is to say, a work containing the Library or a -portion of it, either verbatim or with modifications and/or translated -straightforwardly into another language.  (Hereinafter, translation is -included without limitation in the term "modification".) -  -  "Source code" for a work means the preferred form of the work for -making modifications to it.  For a library, complete source code means -all the source code for all modules it contains, plus any associated -interface definition files, plus the scripts used to control compilation -and installation of the library. -  -  Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope.  The act of -running a program using the Library is not restricted, and output from -such a program is covered only if its contents constitute a work based -on the Library (independent of the use of the Library in a tool for -writing it).  Whether that is true depends on what the Library does -and what the program that uses the Library does. -    -  1. You may copy and distribute verbatim copies of the Library's -complete source code as you receive it, in any medium, provided that -you conspicuously and appropriately publish on each copy an -appropriate copyright notice and disclaimer of warranty; keep intact -all the notices that refer to this License and to the absence of any -warranty; and distribute a copy of this License along with the -Library. -  -  You may charge a fee for the physical act of transferring a copy, -and you may at your option offer warranty protection in exchange for a -fee. -  -  2. You may modify your copy or copies of the Library or any portion -of it, thus forming a work based on the Library, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: -  -    a) The modified work must itself be a software library. -  -    b) You must cause the files modified to carry prominent notices -    stating that you changed the files and the date of any change. -  -    c) You must cause the whole of the work to be licensed at no -    charge to all third parties under the terms of this License. -  -    d) If a facility in the modified Library refers to a function or a -    table of data to be supplied by an application program that uses -    the facility, other than as an argument passed when the facility -    is invoked, then you must make a good faith effort to ensure that, -    in the event an application does not supply such function or -    table, the facility still operates, and performs whatever part of -    its purpose remains meaningful. -  -    (For example, a function in a library to compute square roots has -    a purpose that is entirely well-defined independent of the -    application.  Therefore, Subsection 2d requires that any -    application-supplied function or table used by this function must -    be optional: if the application does not supply it, the square -    root function must still compute square roots.) -  -These requirements apply to the modified work as a whole.  If -identifiable sections of that work are not derived from the Library, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works.  But when you -distribute the same sections as part of a whole which is a work based -on the Library, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote -it. -  -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Library. -  -In addition, mere aggregation of another work not based on the Library -with the Library (or with a work based on the Library) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. -  -  3. You may opt to apply the terms of the ordinary GNU General Public -License instead of this License to a given copy of the Library.  To do -this, you must alter all the notices that refer to this License, so -that they refer to the ordinary GNU General Public License, version 2, -instead of to this License.  (If a newer version than version 2 of the -ordinary GNU General Public License has appeared, then you can specify -that version instead if you wish.)  Do not make any other change in -these notices. -  -  Once this change is made in a given copy, it is irreversible for -that copy, so the ordinary GNU General Public License applies to all -subsequent copies and derivative works made from that copy. -  -  This option is useful when you wish to copy part of the code of -the Library into a program that is not a library. -  -  4. You may copy and distribute the Library (or a portion or -derivative of it, under Section 2) in object code or executable form -under the terms of Sections 1 and 2 above provided that you accompany -it with the complete corresponding machine-readable source code, which -must be distributed under the terms of Sections 1 and 2 above on a -medium customarily used for software interchange. -  -  If distribution of object code is made by offering access to copy -from a designated place, then offering equivalent access to copy the -source code from the same place satisfies the requirement to -distribute the source code, even though third parties are not -compelled to copy the source along with the object code. -  -  5. A program that contains no derivative of any portion of the -Library, but is designed to work with the Library by being compiled or -linked with it, is called a "work that uses the Library".  Such a -work, in isolation, is not a derivative work of the Library, and -therefore falls outside the scope of this License. -  -  However, linking a "work that uses the Library" with the Library -creates an executable that is a derivative of the Library (because it -contains portions of the Library), rather than a "work that uses the -library".  The executable is therefore covered by this License. -Section 6 states terms for distribution of such executables. -  -  When a "work that uses the Library" uses material from a header file -that is part of the Library, the object code for the work may be a -derivative work of the Library even though the source code is not. -Whether this is true is especially significant if the work can be -linked without the Library, or if the work is itself a library.  The -threshold for this to be true is not precisely defined by law. -  -  If such an object file uses only numerical parameters, data -structure layouts and accessors, and small macros and small inline -functions (ten lines or less in length), then the use of the object -file is unrestricted, regardless of whether it is legally a derivative -work.  (Executables containing this object code plus portions of the -Library will still fall under Section 6.) -  -  Otherwise, if the work is a derivative of the Library, you may -distribute the object code for the work under the terms of Section 6. -Any executables containing that work also fall under Section 6, -whether or not they are linked directly with the Library itself. -  -  6. As an exception to the Sections above, you may also combine or -link a "work that uses the Library" with the Library to produce a -work containing portions of the Library, and distribute that work -under terms of your choice, provided that the terms permit -modification of the work for the customer's own use and reverse -engineering for debugging such modifications. -  -  You must give prominent notice with each copy of the work that the -Library is used in it and that the Library and its use are covered by -this License.  You must supply a copy of this License.  If the work -during execution displays copyright notices, you must include the -copyright notice for the Library among them, as well as a reference -directing the user to the copy of this License.  Also, you must do one -of these things: -  -    a) Accompany the work with the complete corresponding -    machine-readable source code for the Library including whatever -    changes were used in the work (which must be distributed under -    Sections 1 and 2 above); and, if the work is an executable linked -    with the Library, with the complete machine-readable "work that -    uses the Library", as object code and/or source code, so that the -    user can modify the Library and then relink to produce a modified -    executable containing the modified Library.  (It is understood -    that the user who changes the contents of definitions files in the -    Library will not necessarily be able to recompile the application -    to use the modified definitions.) -  -    b) Use a suitable shared library mechanism for linking with the -    Library.  A suitable mechanism is one that (1) uses at run time a -    copy of the library already present on the user's computer system, -    rather than copying library functions into the executable, and (2) -    will operate properly with a modified version of the library, if -    the user installs one, as long as the modified version is -    interface-compatible with the version that the work was made with. -  -    c) Accompany the work with a written offer, valid for at -    least three years, to give the same user the materials -    specified in Subsection 6a, above, for a charge no more -    than the cost of performing this distribution. -  -    d) If distribution of the work is made by offering access to copy -    from a designated place, offer equivalent access to copy the above -    specified materials from the same place. -  -    e) Verify that the user has already received a copy of these -    materials or that you have already sent this user a copy. -  -  For an executable, the required form of the "work that uses the -Library" must include any data and utility programs needed for -reproducing the executable from it.  However, as a special exception, -the materials to be distributed need not include anything that is -normally distributed (in either source or binary form) with the major -components (compiler, kernel, and so on) of the operating system on -which the executable runs, unless that component itself accompanies -the executable. -  -  It may happen that this requirement contradicts the license -restrictions of other proprietary libraries that do not normally -accompany the operating system.  Such a contradiction means you cannot -use both them and the Library together in an executable that you -distribute. -  -  7. You may place library facilities that are a work based on the -Library side-by-side in a single library together with other library -facilities not covered by this License, and distribute such a combined -library, provided that the separate distribution of the work based on -the Library and of the other library facilities is otherwise -permitted, and provided that you do these two things: -  -    a) Accompany the combined library with a copy of the same work -    based on the Library, uncombined with any other library -    facilities.  This must be distributed under the terms of the -    Sections above. -  -    b) Give prominent notice with the combined library of the fact -    that part of it is a work based on the Library, and explaining -    where to find the accompanying uncombined form of the same work. -  -  8. You may not copy, modify, sublicense, link with, or distribute -the Library except as expressly provided under this License.  Any -attempt otherwise to copy, modify, sublicense, link with, or -distribute the Library is void, and will automatically terminate your -rights under this License.  However, parties who have received copies, -or rights, from you under this License will not have their licenses -terminated so long as such parties remain in full compliance. -  -  9. You are not required to accept this License, since you have not -signed it.  However, nothing else grants you permission to modify or -distribute the Library or its derivative works.  These actions are -prohibited by law if you do not accept this License.  Therefore, by -modifying or distributing the Library (or any work based on the -Library), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Library or works based on it. -  -  10. Each time you redistribute the Library (or any work based on the -Library), the recipient automatically receives a license from the -original licensor to copy, distribute, link with or modify the Library -subject to these terms and conditions.  You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties with -this License. -  -  11. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License.  If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Library at all.  For example, if a patent -license would not permit royalty-free redistribution of the Library by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Library. -  -If any portion of this section is held invalid or unenforceable under any -particular circumstance, the balance of the section is intended to apply, -and the section as a whole is intended to apply in other circumstances. -  -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system which is -implemented by public license practices.  Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. -  -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. -  -  12. If the distribution and/or use of the Library is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Library under this License may add -an explicit geographical distribution limitation excluding those countries, -so that distribution is permitted only in or among countries not thus -excluded.  In such case, this License incorporates the limitation as if -written in the body of this License. -  -  13. The Free Software Foundation may publish revised and/or new -versions of the Lesser General Public License from time to time. -Such new versions will be similar in spirit to the present version, -but may differ in detail to address new problems or concerns. -  -Each version is given a distinguishing version number.  If the Library -specifies a version number of this License which applies to it and -"any later version", you have the option of following the terms and -conditions either of that version or of any later version published by -the Free Software Foundation.  If the Library does not specify a -license version number, you may choose any version ever published by -the Free Software Foundation. -  -  14. If you wish to incorporate parts of the Library into other free -programs whose distribution conditions are incompatible with these, -write to the author to ask for permission.  For software which is -copyrighted by the Free Software Foundation, write to the Free -Software Foundation; we sometimes make exceptions for this.  Our -decision will be guided by the two goals of preserving the free status -of all derivatives of our free software and of promoting the sharing -and reuse of software generally. -  -                NO WARRANTY -  -  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO -WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. -EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR -OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY -KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE -LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME -THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. -  -  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN -WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY -AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU -FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR -CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE -LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING -RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A -FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF -SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH -DAMAGES. -  -             END OF TERMS AND CONDITIONS -  -           How to Apply These Terms to Your New Libraries -  -  If you develop a new library, and you want it to be of the greatest -possible use to the public, we recommend making it free software that -everyone can redistribute and change.  You can do so by permitting -redistribution under these terms (or, alternatively, under the terms of the -ordinary General Public License). -  -  To apply these terms, attach the following notices to the library.  It is -safest to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least the -"copyright" line and a pointer to where the full notice is found. -  -     -    Copyright (C)   -  -    This library is free software; you can redistribute it and/or -    modify it under the terms of the GNU Lesser General Public -    License as published by the Free Software Foundation; either -    version 2.1 of the License, or (at your option) any later version. -  -    This library is distributed in the hope that it will be useful, -    but WITHOUT ANY WARRANTY; without even the implied warranty of -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU -    Lesser General Public License for more details. -  -    You should have received a copy of the GNU Lesser General Public -    License along with this library; if not, write to the Free Software -    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA -  -Also add information on how to contact you by electronic and paper mail. -  -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the library, if -necessary.  Here is a sample; alter the names: -  -  Yoyodyne, Inc., hereby disclaims all copyright interest in the -  library `Frob' (a library for tweaking knobs) written by James Random Hacker. -  -  , 1 April 1990 -  Ty Coon, President of Vice -  -That's all there is to it! diff --git a/opensuse/tde-filesystem/macros.tde b/opensuse/tde-filesystem/macros.tde deleted file mode 100644 index b488ea8e7..000000000 --- a/opensuse/tde-filesystem/macros.tde +++ /dev/null @@ -1,150 +0,0 @@ -# -# Disclaimer: this was taken from macros.kde4. Some items -# are not applicable to Trinity, but are still here. -# NEW: this obsoletes common_options from kdelibs3 - -%_tde_prefix /opt/tde -%_tde_bindir %{_tde_prefix}/bin -%_tde_libdir %{_tde_prefix}/%{_lib} -%_tde_modulesdir %{_tde_libdir}/tde -%_tde_libexecdir %{_tde_libdir}/tde/libexec -%_tde_sysconfdir %{_sysconfdir} -%_tde_iconsdir %{_tde_prefix}/share/icons -%_tde_sbindir %{_tde_prefix}/sbin -%_tde_sharedir %{_tde_prefix}/share -%_tde_datadir %{_tde_sharedir}/apps -%_tde_appdir %{_tde_datadir} -%_tde_applicationsdir %{_tde_sharedir}/applications -%_tde_appsdir %{_tde_sharedir}/applnk -%_tde_configdir %{_tde_sharedir}/config -%_tde_configkcfgdir %{_tde_sharedir}/config.kcfg -%_tde_servicesdir %{_tde_sharedir}/services -%_tde_servicetypesdir %{_tde_sharedir}/servicetypes -%_tde_includedir %{_tde_prefix}/include -%_tde_docdir %{_tde_sharedir}/doc/ -%_tde_htmldir %{_tde_sharedir}/doc/HTML -%_tde_wallpapersdir %{_tde_sharedir}/wallpapers -%_tde_icondir %{_tde_sharedir}/icons -%_tde_sounddir %{_tde_sharedir}/sounds -%_tde_locale %{_tde_sharedir}/locale -%_tde_mimedir %{_tde_sharedir}/mimelnk -%_tde_styledir %{_tde_libdir}/tde/plugins/styles -%_tde_widgetdir %{_tde_libdir}/tde/plugins/designer - -# these are for backwards compatibility -%_kde3_prefix %{_tde_prefix} -%_kde3_libdir %{_tde_libdir} -%_kde3_share_dir %{_tde_sharedir} -%_kde3_config_dir %{_tde_configdir} -%_kde3_html_dir %{_tde_htmldir} -%_tde_modules %{_tde_modulesdir} -%_tde_servicetypes %{_tde_servicetypesdir} - -%_tde_platform_version 3.5.13 - -%tde_runtime_requires Requires: tdebase3-runtime >= %_tde_platform_version qt3 >= 3.3.8c - -%_tde_build_type release - -%cmake_tde(d:) \ - export CFLAGS=$RPM_OPT_FLAGS \ - export CXXFLAGS=$RPM_OPT_FLAGS \ - export LDFLAGS="-Wl,-Bsymbolic-functions $LDFLAGS" \ - _tde_libsuffix=$(echo %_lib | cut -b4-) \ - bdir=. \ - %{-d:dir=%{-d*} \ - mkdir $dir \ - cd $dir \ - bdir=.. } \ - cmake -DCMAKE_SKIP_RPATH=ON \\\ - -DCMAKE_INSTALL_PREFIX=%{_tde_prefix} \\\ - -DCMAKE_INSTALL_LIBDIR:PATH=%{_tde_libdir} \\\ - -DINCLUDE_INSTALL_DIR:PATH=%{_tde_includedir} \\\ - -DLIB_INSTALL_DIR:PATH=%{_tde_libdir} \\\ - -DLIBEXEC_INSTALL_DIR:PATH=%{_tde_libexecdir} \\\ - -DLIB_SUFFIX="$_tde_libsuffix" \\\ - -DSYSCONF_INSTALL_DIR:PATH=%{_sysconfdir} \\\ - -DCMAKE_BUILD_TYPE=%{_tde_build_type} \\\ - -DCMAKE_VERBOSE_MAKEFILE=ON \\\ - -DQT_LIBRARY_DIRS=/usr/lib/qt3/%{_lib} \\\ - -DQT_INCLUDE_DIRS=/usr/lib/qt3/include \\\ - -DPKGCONFIG_INSTALL_DIR=%{_libdir}/pkgconfig \\\ - -DMAN_INSTALL_DIR=%{_mandir} \\\ - -DINFO_INSTALL_DIR=%{_infodir} \\\ - $bdir %* \ - if [ "$bdir" == ".." ]; then \ - cd .. \ - fi \ -%{nil} - -%make_tde(d:) \ - bdir=. \ - %{-d:dir=%{-d*} \ - cd $dir \ - bdir=.. } \ - make %{?_smp_mflags} VERBOSE=1 \ - if [ "$bdir" == ".." ]; then \ - cd .. \ - fi \ -%{nil} - -%makeinstall_tde(d:) \ - bdir=. \ - %{-d:dir=%{-d*} \ - cd $dir \ - bdir=.. } \ - make DESTDIR=%{?buildroot:%{buildroot}} install VERBOSE=1 \ - if [ "$bdir" == ".." ]; then \ - cd .. \ - fi \ -%{nil} - -%tde_post_install \ - # remove not needed development files - rm -f $RPM_BUILD_ROOT/%{_tde_libdir}/libkdeinit_*.la \ - # not worth the hassle - rm -rf $RPM_BUILD_ROOT/%{_tde_icondir}/locolor \ - # move icons in one theme - prefering hicolor - d="$RPM_BUILD_ROOT/%{_tde_icondir}/crystalsvg" \ - if [ -d "$d" -a ! -e "$d/index.theme" ]; then \ - find "$d" -type f | while read src; do \ - dest="${src/\/crystalsvg\///hicolor/}" \ - dir="${dest%/*}" \ - mkdir -p "$dir" \ - mv "$src" "$dest" \ - done \ - fi \ - # we do this 3 times as there is a 3 fold hierarchy - if [ -d $RPM_BUILD_ROOT/%{_tde_icondir} ]; then \ - for i in `seq 1 3`; do \ - find $RPM_BUILD_ROOT/%{_tde_icondir} -type d -exec rmdir -v --ignore-fail-on-non-empty -- {} \; || true \ - done \ - fi \ - if [ -d $RPM_BUILD_ROOT/%{_tde_locale}/sr@Latn ]; then \ - mv $RPM_BUILD_ROOT/%{_tde_locale}/sr@Latn $RPM_BUILD_ROOT/%{_tde_locale}/sr@latin \ - fi \ - if test -e /usr/lib/rpm/suse_update_desktop_file.sh; then \ - distribution='' \ - if test -f $HOME/.rpmmacros && test -d /usr/src/packages/SRPMS; then \ - distribution=`grep ^%distribution $HOME/.rpmmacros | cut '-d ' -f2` \ - fi \ - find $RPM_BUILD_ROOT/opt/kde3/share \\\ - -name '*.desktop' 2> /dev/null | while read file; do \ - test -r "$file" || continue \ - grep -q "^X-SuSE-translate=" "$file" && continue \ - case "$file" in \ - */.hidden/*) \ - /usr/lib/rpm/suse_update_desktop_file.sh -n "$file" \ - ;; \ - *) \ - if test -n "$distribution"; then \ - /usr/lib/rpm/suse_update_desktop_file.sh --project "$distribution" --basedir /usr/src/packages/SRPMS "$file" \ - else \ - /usr/lib/rpm/suse_update_desktop_file.sh "$file" \ - fi \ - ;; \ - esac \ - done \ - fi \ -%{nil} - diff --git a/opensuse/tde-filesystem/tde-filesystem.changes b/opensuse/tde-filesystem/tde-filesystem.changes deleted file mode 100644 index c63ff71b2..000000000 --- a/opensuse/tde-filesystem/tde-filesystem.changes +++ /dev/null @@ -1,5 +0,0 @@ -------------------------------------------------------------------- -Tue Aug 9 21:06:07 UTC 2011 - rxu@lincomlinux.org - -- initial package - diff --git a/opensuse/tde-filesystem/tde-filesystem.spec b/opensuse/tde-filesystem/tde-filesystem.spec deleted file mode 100644 index 06fa6b5fe..000000000 --- a/opensuse/tde-filesystem/tde-filesystem.spec +++ /dev/null @@ -1,61 +0,0 @@ -# -# spec file for package tde-filesystem -# -# Copyright (c) 2011 the Trinity Project (opensuse). -# -# All modifications and additions to the file contributed by third parties -# remain the property of their copyright owners, unless otherwise agreed -# upon. The license for this file, and modifications and additions to the -# file, is the same license as for the pristine package itself (unless the -# license for the pristine package is not an Open Source License, in which -# case the license is the MIT License). An "Open Source License" is a -# license that conforms to the Open Source Definition (Version 1.9) -# published by the Open Source Initiative. - -# Please submit bugfixes or comments via http://bugs.trinitydesktop.org/ -# - -# norootforbuild - - -Name: tde-filesystem -Url: http://www.trinitydesktop.org/ -Version: 3.5.13 -Release: 1 -License: LGPLv2.1+ -Group: System/Fhs -BuildRoot: %{_tmppath}/%{name}-%{version}-build -Summary: Trinity Directory Layout -Source0: macros.tde -Source1: COPYING -BuildArch: noarch -# Spare Dependency that we want tde-filesystem to pull in. -Requires: cmake - -%description -This package installs the Trinity directory structure. - - - -Authors: --------- - The Trinity Project - -%prep - -%build - -%install - install -D -m644 %{SOURCE0} $RPM_BUILD_ROOT/etc/rpm/macros.tde - install -D -m644 %{SOURCE1} $RPM_BUILD_ROOT//usr/share/doc/packages/tde-filesystem/COPYING - -%clean -rm -rf "$RPM_BUILD_ROOT" - -%files -%defattr(-,root,root) -%config /etc/rpm/macros.tde -%dir /usr/share/doc/packages/tde-filesystem -/usr/share/doc/packages/tde-filesystem/COPYING - -%changelog diff --git a/opensuse/tdebase/3_5_BRANCH.diff b/opensuse/tdebase/3_5_BRANCH.diff deleted file mode 100644 index bff4be17d..000000000 --- a/opensuse/tdebase/3_5_BRANCH.diff +++ /dev/null @@ -1,1176 +0,0 @@ -package: kdebase-3.5.10.tar.bz2 -kdemod: kdebase -Index: BRANCH_STATUS -=================================================================== ---- /dev/null -+++ BRANCH_STATUS -@@ -0,0 +1,2 @@ -+current HEAD: 865247 -+svn di between //tags/KDE/3.5.10/kdebase and //branches/KDE/3.5/kdebase -Index: kcontrol/background/bgrender.cpp -=================================================================== ---- kcontrol/background/bgrender.cpp.orig -+++ kcontrol/background/bgrender.cpp -@@ -1163,9 +1163,8 @@ void KVirtualBGRenderer::desktopResized( - m_pPixmap = new QPixmap(m_size); - m_pPixmap->fill(Qt::black); - } -- -- for (unsigned i=0; idesktopResized(); -+ -+ initRenderers(); - } - - -Index: kcontrol/info/opengl.cpp -=================================================================== ---- kcontrol/info/opengl.cpp.orig -+++ kcontrol/info/opengl.cpp -@@ -608,7 +608,6 @@ static QListViewItem *get_gl_info(Displa - } - else { - kdDebug() << "Error: glXMakeCurrent failed\n"; -- glXDestroyContext(dpy, ctx); - } - - glXDestroyContext(dpy, ctx); -Index: kicker/taskbar/taskbar.cpp -=================================================================== ---- kicker/taskbar/taskbar.cpp.orig -+++ kicker/taskbar/taskbar.cpp -@@ -61,8 +61,6 @@ TaskBar::TaskBar( QWidget *parent, const - m_textShadowEngine(0), - m_ignoreUpdates(false) - { -- setFrameStyle( NoFrame ); -- - arrowType = LeftArrow; - blocklayout = true; - -@@ -81,6 +79,8 @@ TaskBar::TaskBar( QWidget *parent, const - connect(&m_relayoutTimer, SIGNAL(timeout()), - this, SLOT(reLayout())); - -+ connect(this, SIGNAL(contentsMoving(int, int)), SLOT(setBackground())); -+ - // connect manager - connect(TaskManager::the(), SIGNAL(taskAdded(Task::Ptr)), - this, SLOT(add(Task::Ptr))); -@@ -647,7 +647,7 @@ void TaskBar::reLayoutEventually() - - if (!blocklayout && !m_ignoreUpdates) - { -- m_relayoutTimer.start(100, true); -+ m_relayoutTimer.start(25, true); - } - } - -@@ -814,24 +814,16 @@ void TaskBar::reLayout() - QTimer::singleShot(100, this, SLOT(publishIconGeometry())); - } - --void TaskBar::viewportResizeEvent( QResizeEvent* e ) --{ -- Panner::viewportResizeEvent(e); -- setViewportBackground(); --} -- - void TaskBar::setViewportBackground() - { - const QPixmap *bg = parentWidget()->backgroundPixmap(); - -- viewport()->unsetPalette(); -- - if (bg) - { - QPixmap pm(parentWidget()->size()); - pm.fill(parentWidget(), pos() + viewport()->pos()); - viewport()->setPaletteBackgroundPixmap(pm); -- viewport()->setBackgroundOrigin( WidgetOrigin ); -+ viewport()->setBackgroundOrigin(WidgetOrigin); - } - else - viewport()->setPaletteBackgroundColor(paletteBackgroundColor()); -Index: kicker/taskbar/taskbar.h -=================================================================== ---- kicker/taskbar/taskbar.h.orig -+++ kicker/taskbar/taskbar.h -@@ -63,12 +63,11 @@ public: - - QImage* blendGradient(const QSize& size); - -- void setBackground(); -- - KTextShadowEngine *textShadowEngine(); - - public slots: - void configure(); -+ void setBackground(); - - signals: - void containerCountChanged(); -@@ -98,7 +97,6 @@ protected: - void viewportMouseReleaseEvent( QMouseEvent* ); - void viewportMouseDoubleClickEvent( QMouseEvent* ); - void viewportMouseMoveEvent( QMouseEvent* ); -- void viewportResizeEvent( QResizeEvent * ); - void wheelEvent(QWheelEvent*); - void propagateMouseEvent( QMouseEvent* ); - void resizeEvent( QResizeEvent* ); -Index: kicker/libkicker/panner.cpp -=================================================================== ---- kicker/libkicker/panner.cpp.orig -+++ kicker/libkicker/panner.cpp -@@ -35,28 +35,28 @@ CONNECTION WITH THE SOFTWARE OR THE USE - #include "panner.h" - #include "panner.moc" - -- - Panner::Panner( QWidget* parent, const char* name ) -- : QScrollView( parent, name ), -+ : QWidget( parent, name ), - _luSB(0), -- _rdSB(0) -+ _rdSB(0), -+ _cwidth(0), _cheight(0), -+ _cx(0), _cy(0) - { - KGlobal::locale()->insertCatalogue("libkicker"); - setBackgroundOrigin( AncestorOrigin ); - - _updateScrollButtonsTimer = new QTimer(this); - connect(_updateScrollButtonsTimer, SIGNAL(timeout()), this, SLOT(reallyUpdateScrollButtons())); -- -- setResizePolicy(Manual); -- setVScrollBarMode( QScrollView::AlwaysOff ); -- setHScrollBarMode( QScrollView::AlwaysOff ); -- -- viewport()->setBackgroundMode( PaletteBackground ); -- viewport()->setBackgroundOrigin( AncestorOrigin ); - -+ _clipper = new QWidget(this); -+ _clipper->setBackgroundOrigin(AncestorOrigin); -+ _clipper->installEventFilter( this ); -+ _viewport = new QWidget(_clipper); -+ _viewport->setBackgroundOrigin(AncestorOrigin); -+ - // layout - _layout = new QBoxLayout(this, QBoxLayout::LeftToRight); -- _layout->addWidget(viewport(), 1); -+ _layout->addWidget(_clipper, 1); - setOrientation(Horizontal); - } - -@@ -64,6 +64,37 @@ Panner::~Panner() - { - } - -+void Panner::createScrollButtons() -+{ -+ if (_luSB) -+ { -+ return; -+ } -+ -+ // left/up scroll button -+ _luSB = new SimpleArrowButton(this); -+ _luSB->installEventFilter(this); -+ //_luSB->setAutoRepeat(true); -+ _luSB->setMinimumSize(12, 12); -+ _luSB->hide(); -+ _layout->addWidget(_luSB); -+ connect(_luSB, SIGNAL(pressed()), SLOT(startScrollLeftUp())); -+ connect(_luSB, SIGNAL(released()), SLOT(stopScroll())); -+ -+ // right/down scroll button -+ _rdSB = new SimpleArrowButton(this); -+ _rdSB->installEventFilter(this); -+ //_rdSB->setAutoRepeat(true); -+ _rdSB->setMinimumSize(12, 12); -+ _rdSB->hide(); -+ _layout->addWidget(_rdSB); -+ connect(_rdSB, SIGNAL(pressed()), SLOT(startScrollRightDown())); -+ connect(_rdSB, SIGNAL(released()), SLOT(stopScroll())); -+ -+ // set up the buttons -+ setupButtons(); -+} -+ - void Panner::setupButtons() - { - if (orientation() == Horizontal) -@@ -110,55 +141,54 @@ void Panner::setOrientation(Orientation - reallyUpdateScrollButtons(); - } - --void Panner::resizeEvent( QResizeEvent* e ) -+void Panner::resizeEvent( QResizeEvent* ) - { -- QScrollView::resizeEvent( e ); -- updateScrollButtons(); -+ //QScrollView::resizeEvent( e ); -+ //updateScrollButtons(); - } - - void Panner::scrollRightDown() - { - if(orientation() == Horizontal) // scroll right -- scrollBy( 40, 0 ); -+ scrollBy( _step, 0 ); - else // scroll down -- scrollBy( 0, 40 ); -+ scrollBy( 0, _step ); -+ if (_step < 64) -+ _step++; - } - - void Panner::scrollLeftUp() - { - if(orientation() == Horizontal) // scroll left -- scrollBy( -40, 0 ); -+ scrollBy( -_step, 0 ); - else // scroll up -- scrollBy( 0, -40 ); -+ scrollBy( 0, -_step ); -+ if (_step < 64) -+ _step++; - } - --void Panner::createScrollButtons() -+void Panner::startScrollRightDown() - { -- if (_luSB) -- { -- return; -- } -- -- // left/up scroll button -- _luSB = new SimpleArrowButton(this); -- _luSB->installEventFilter(this); -- _luSB->setAutoRepeat(true); -- _luSB->setMinimumSize(12, 12); -- _luSB->hide(); -- _layout->addWidget(_luSB); -- connect(_luSB, SIGNAL(clicked()), SLOT(scrollLeftUp())); -+ _scrollTimer = new QTimer(this); -+ connect(_scrollTimer, SIGNAL(timeout()), SLOT(scrollRightDown())); -+ _scrollTimer->start(50); -+ _step = 8; -+ scrollRightDown(); -+} - -- // right/down scroll button -- _rdSB = new SimpleArrowButton(this); -- _rdSB->installEventFilter(this); -- _rdSB->setAutoRepeat(true); -- _rdSB->setMinimumSize(12, 12); -- _rdSB->hide(); -- _layout->addWidget(_rdSB); -- connect(_rdSB, SIGNAL(clicked()), SLOT(scrollRightDown())); -+void Panner::startScrollLeftUp() -+{ -+ _scrollTimer = new QTimer(this); -+ connect(_scrollTimer, SIGNAL(timeout()), SLOT(scrollLeftUp())); -+ _scrollTimer->start(50); -+ _step = 8; -+ scrollLeftUp(); -+} - -- // set up the buttons -- setupButtons(); -+void Panner::stopScroll() -+{ -+ delete _scrollTimer; -+ _scrollTimer = 0; - } - - void Panner::reallyUpdateScrollButtons() -@@ -176,7 +206,7 @@ void Panner::reallyUpdateScrollButtons() - delta = contentsHeight() - height(); - } - -- if (delta > 1) -+ if (delta >= 1) - { - createScrollButtons(); - -@@ -184,21 +214,11 @@ void Panner::reallyUpdateScrollButtons() - // we need to do this every single time - _luSB->show(); - _rdSB->show(); -- -- if (orientation() == Horizontal) -- { -- setMargins(0, 0, _luSB->width() + _rdSB->width(), 0); -- } -- else -- { -- setMargins(0, 0, 0, _luSB->height() + _rdSB->height()); -- } - } - else if (_luSB && _luSB->isVisibleTo(this)) - { - _luSB->hide(); - _rdSB->hide(); -- setMargins(0, 0, 0, 0); - } - } - -@@ -207,8 +227,170 @@ void Panner::updateScrollButtons() - _updateScrollButtonsTimer->start(200, true); - } - -+void Panner::setContentsPos(int x, int y) -+{ -+ if (x < 0) -+ x = 0; -+ else if (x > (contentsWidth() - visibleWidth())) -+ x = contentsWidth() - visibleWidth(); -+ -+ if (y < 0) -+ y = 0; -+ else if (y > (contentsHeight() - visibleHeight())) -+ y = contentsHeight() - visibleHeight(); -+ -+ if (x == contentsX() && y == contentsY()) -+ return; -+ -+ _viewport->move(-x, -y); -+ emit contentsMoving(x, y); -+} -+ -+void Panner::scrollBy(int dx, int dy) -+{ -+ setContentsPos(contentsX() + dx, contentsY() + dy); -+} -+ - void Panner::resizeContents( int w, int h ) - { -- QScrollView::resizeContents( w, h ); -+ _viewport->resize(w, h); -+ setContentsPos(contentsX(), contentsY()); - updateScrollButtons(); - } -+ -+QPoint Panner::contentsToViewport( const QPoint& p ) const -+{ -+ return QPoint(p.x() - contentsX() - _clipper->x(), p.y() - contentsY() - _clipper->y()); -+} -+ -+QPoint Panner::viewportToContents( const QPoint& vp ) const -+{ -+ return QPoint(vp.x() + contentsX() + _clipper->x(), vp.y() + contentsY() + _clipper->y()); -+} -+ -+void Panner::contentsToViewport( int x, int y, int& vx, int& vy ) const -+{ -+ const QPoint v = contentsToViewport(QPoint(x,y)); -+ vx = v.x(); -+ vy = v.y(); -+} -+ -+void Panner::viewportToContents( int vx, int vy, int& x, int& y ) const -+{ -+ const QPoint c = viewportToContents(QPoint(vx,vy)); -+ x = c.x(); -+ y = c.y(); -+} -+ -+void Panner::ensureVisible( int x, int y ) -+{ -+ ensureVisible(x, y, 50, 50); -+} -+ -+void Panner::ensureVisible( int x, int y, int xmargin, int ymargin ) -+{ -+ int pw=visibleWidth(); -+ int ph=visibleHeight(); -+ -+ int cx=-contentsX(); -+ int cy=-contentsY(); -+ int cw=contentsWidth(); -+ int ch=contentsHeight(); -+ -+ if ( pw < xmargin*2 ) -+ xmargin=pw/2; -+ if ( ph < ymargin*2 ) -+ ymargin=ph/2; -+ -+ if ( cw <= pw ) { -+ xmargin=0; -+ cx=0; -+ } -+ if ( ch <= ph ) { -+ ymargin=0; -+ cy=0; -+ } -+ -+ if ( x < -cx+xmargin ) -+ cx = -x+xmargin; -+ else if ( x >= -cx+pw-xmargin ) -+ cx = -x+pw-xmargin; -+ -+ if ( y < -cy+ymargin ) -+ cy = -y+ymargin; -+ else if ( y >= -cy+ph-ymargin ) -+ cy = -y+ph-ymargin; -+ -+ if ( cx > 0 ) -+ cx=0; -+ else if ( cx < pw-cw && cw>pw ) -+ cx=pw-cw; -+ -+ if ( cy > 0 ) -+ cy=0; -+ else if ( cy < ph-ch && ch>ph ) -+ cy=ph-ch; -+ -+ setContentsPos( -cx, -cy ); -+} -+ -+bool Panner::eventFilter( QObject *obj, QEvent *e ) -+{ -+ if ( obj == _viewport || obj == _clipper ) -+ { -+ switch ( e->type() ) -+ { -+ case QEvent::Resize: -+ viewportResizeEvent((QResizeEvent *)e); -+ break; -+ case QEvent::MouseButtonPress: -+ viewportMousePressEvent( (QMouseEvent*)e ); -+ if ( ((QMouseEvent*)e)->isAccepted() ) -+ return true; -+ break; -+ case QEvent::MouseButtonRelease: -+ viewportMouseReleaseEvent( (QMouseEvent*)e ); -+ if ( ((QMouseEvent*)e)->isAccepted() ) -+ return true; -+ break; -+ case QEvent::MouseButtonDblClick: -+ viewportMouseDoubleClickEvent( (QMouseEvent*)e ); -+ if ( ((QMouseEvent*)e)->isAccepted() ) -+ return true; -+ break; -+ case QEvent::MouseMove: -+ viewportMouseMoveEvent( (QMouseEvent*)e ); -+ if ( ((QMouseEvent*)e)->isAccepted() ) -+ return true; -+ break; -+ default: -+ break; -+ } -+ } -+ -+ return QWidget::eventFilter( obj, e ); // always continue with standard event processing -+} -+ -+void Panner::viewportResizeEvent( QResizeEvent* ) -+{ -+} -+ -+void Panner::viewportMousePressEvent( QMouseEvent* e) -+{ -+ e->ignore(); -+} -+ -+void Panner::viewportMouseReleaseEvent( QMouseEvent* e ) -+{ -+ e->ignore(); -+} -+ -+void Panner::viewportMouseDoubleClickEvent( QMouseEvent* e ) -+{ -+ e->ignore(); -+} -+ -+void Panner::viewportMouseMoveEvent( QMouseEvent* e ) -+{ -+ e->ignore(); -+} -Index: kicker/libkicker/panner.h -=================================================================== ---- kicker/libkicker/panner.h.orig -+++ kicker/libkicker/panner.h -@@ -24,14 +24,14 @@ CONNECTION WITH THE SOFTWARE OR THE USE - #ifndef __panner_h__ - #define __panner_h__ - --#include -+#include - - #include "simplebutton.h" - - class QBoxLayout; - class QTimer; - --class KDE_EXPORT Panner : public QScrollView -+class KDE_EXPORT Panner : public QWidget - { - Q_OBJECT - -@@ -43,17 +43,55 @@ public: - - Qt::Orientation orientation() const { return _orient; } - virtual void setOrientation(Orientation orientation); -+ -+ QWidget *viewport() const { return _viewport; } -+ -+ QRect contentsRect() const { return QRect(0, 0, width(), height()); } -+ -+ int contentsX() const { return _viewport ? -_viewport->x() : 0; } -+ int contentsY() const { return _viewport ? -_viewport->y() : 0; } -+ int contentsWidth() const { return _viewport ? _viewport->width() : 0; } -+ int contentsHeight() const { return _viewport ? _viewport->height() : 0; } -+ void setContentsPos(int x, int y); -+ -+ int visibleWidth() const { return _clipper->width(); } -+ int visibleHeight() const { return _clipper->height(); } -+ -+ void contentsToViewport( int x, int y, int& vx, int& vy ) const; -+ void viewportToContents( int vx, int vy, int& x, int& y ) const; -+ QPoint contentsToViewport( const QPoint& ) const; -+ QPoint viewportToContents( const QPoint& ) const; -+ -+ void addChild(QWidget *child) { child->show(); } -+ void removeChild(QWidget *child) { child->hide(); } -+ int childX(QWidget *child) const { return child->x(); } -+ int childY(QWidget *child) const { return child->y(); } -+ void moveChild(QWidget *child, int x, int y) { child->move(x, y); } -+ -+ void ensureVisible( int x, int y ); -+ void ensureVisible( int x, int y, int xmargin, int ymargin ); - - public slots: - virtual void resizeContents( int w, int h ); -+ void startScrollRightDown(); -+ void startScrollLeftUp(); -+ void stopScroll(); - void scrollRightDown(); - void scrollLeftUp(); - void reallyUpdateScrollButtons(); -+ void scrollBy(int dx, int dy); -+ -+signals: -+ void contentsMoving(int x, int y); - - protected: -- void resizeEvent(QResizeEvent *ev); -- void contentsWheelEvent(QWheelEvent *){;} -- void viewportWheelEvent(QWheelEvent *){;} -+ virtual bool eventFilter( QObject *obj, QEvent *e ); -+ virtual void resizeEvent(QResizeEvent *ev); -+ virtual void viewportResizeEvent( QResizeEvent* ); -+ virtual void viewportMousePressEvent( QMouseEvent* ); -+ virtual void viewportMouseReleaseEvent( QMouseEvent* ); -+ virtual void viewportMouseDoubleClickEvent( QMouseEvent* ); -+ virtual void viewportMouseMoveEvent( QMouseEvent* ); - - private: - void setupButtons(); -@@ -65,6 +103,13 @@ private: - SimpleArrowButton *_luSB; // Left Scroll Button - SimpleArrowButton *_rdSB; // Right Scroll Button - QTimer *_updateScrollButtonsTimer; -+ QTimer *_scrollTimer; -+ -+ QWidget *_clipper; -+ QWidget *_viewport; -+ int _cwidth, _cheight; -+ int _cx, _cy; -+ int _step; - }; - - #endif -Index: kicker/extensions/taskbar/taskbarextension.cpp -=================================================================== ---- kicker/extensions/taskbar/taskbarextension.cpp.orig -+++ kicker/extensions/taskbar/taskbarextension.cpp -@@ -170,7 +170,6 @@ void TaskBarExtension::setBackgroundThem - } - - unsetPalette(); -- m_container->unsetPalette(); - - if (KickerSettings::useBackgroundTheme()) - { -@@ -215,17 +214,17 @@ void TaskBarExtension::setBackgroundThem - KickerLib::colorize(bgImage); - } - setPaletteBackgroundPixmap(bgImage); -- m_container->setPaletteBackgroundPixmap(bgImage); - } - } -+ -+ m_container->setBackground(); - } - - void TaskBarExtension::updateBackground(const QPixmap& bgImage) - { - unsetPalette(); - setPaletteBackgroundPixmap(bgImage); -- m_container->unsetPalette(); -- m_container->setPaletteBackgroundPixmap(bgImage); -+ m_container->setBackground(); - } - - void TaskBarExtension::resizeEvent(QResizeEvent *e) -Index: kicker/kicker/core/container_extension.cpp -=================================================================== ---- kicker/kicker/core/container_extension.cpp.orig -+++ kicker/kicker/core/container_extension.cpp -@@ -126,6 +126,7 @@ void ExtensionContainer::init() - connect(Kicker::the()->kwinModule(), SIGNAL(currentDesktopChanged(int)), - this, SLOT( currentDesktopChanged(int))); - -+ setBackgroundOrigin(AncestorOrigin); - setFrameStyle(NoFrame); - setLineWidth(0); - setMargin(0); -@@ -163,7 +164,7 @@ void ExtensionContainer::init() - { - _userHidden = static_cast(tmp); - } -- -+ - if (m_extension) - { - // if we have an extension, we need to grab the extension-specific -Index: kicker/kicker/core/containerarea.cpp -=================================================================== ---- kicker/kicker/core/containerarea.cpp.orig -+++ kicker/kicker/core/containerarea.cpp -@@ -90,15 +90,12 @@ ContainerArea::ContainerArea(KConfig* _c - m_addAppletDialog(0) - { - setBackgroundOrigin( WidgetOrigin ); -- viewport()->setBackgroundOrigin( AncestorOrigin ); - -- m_contents = new QWidget(viewport()); -- m_contents->setBackgroundOrigin(AncestorOrigin); -+ m_contents = viewport(); - - m_layout = new ContainerAreaLayout(m_contents); - -- // Install an event filter to propagate layout hints coming from -- // m_contents. -+ // Install an event filter to propagate layout hints coming from m_contents. - m_contents->installEventFilter(this); - - setBackground(); -Index: kicker/kicker/core/panelextension.cpp -=================================================================== ---- kicker/kicker/core/panelextension.cpp.orig -+++ kicker/kicker/core/panelextension.cpp -@@ -74,7 +74,6 @@ PanelExtension::PanelExtension(const QSt - connect(_containerArea, SIGNAL(maintainFocus(bool)), this, SIGNAL(maintainFocus(bool))); - _layout->addWidget(_containerArea); - -- _containerArea->setFrameStyle(QFrame::NoFrame); - _containerArea->viewport()->installEventFilter(this); - _containerArea->configure(); - -Index: kicker/applets/systemtray/systemtrayapplet.h -=================================================================== ---- kicker/applets/systemtray/systemtrayapplet.h.orig -+++ kicker/applets/systemtray/systemtrayapplet.h -@@ -118,6 +118,7 @@ public: - TrayEmbed( bool kdeTray, QWidget* parent = NULL ); - bool kdeTray() const { return kde_tray; } - void setBackground(); -+ void getIconSize(int defaultIconSize); - private: - bool kde_tray; - }; -Index: kicker/applets/systemtray/systemtrayapplet.cpp -=================================================================== ---- kicker/applets/systemtray/systemtrayapplet.cpp.orig -+++ kicker/applets/systemtray/systemtrayapplet.cpp -@@ -54,6 +54,8 @@ CONNECTION WITH THE SOFTWARE OR THE USE - - #include - -+#define ICON_MARGIN 1 -+ - extern "C" - { - KDE_EXPORT KPanelApplet* init(QWidget *parent, const QString& configFile) -@@ -459,9 +461,9 @@ void SystemTrayApplet::embedWindow( WId - delete emb; - return; - } -- -+ - connect(emb, SIGNAL(embeddedWindowDestroyed()), SLOT(updateTrayWindows())); -- emb->setMinimumSize(m_iconSize, m_iconSize); -+ emb->getIconSize(m_iconSize); - - if (shouldHide(w)) - { -@@ -471,7 +473,7 @@ void SystemTrayApplet::embedWindow( WId - } - else - { -- emb->hide(); -+ //emb->hide(); - emb->setBackground(); - emb->show(); - m_shownWins.append(emb); -@@ -515,7 +517,7 @@ void SystemTrayApplet::updateVisibleWins - { - for (; emb != lastEmb; ++emb) - { -- (*emb)->hide(); -+ //(*emb)->hide(); - (*emb)->setBackground(); - (*emb)->show(); - } -@@ -744,8 +746,7 @@ int SystemTrayApplet::widthForHeight(int - } - - int currentHeight = height(); -- int minHeight = m_iconSize + 4; -- if (currentHeight != h && currentHeight != minHeight) -+ if (currentHeight != h) - { - SystemTrayApplet* me = const_cast(this); - me->setMinimumSize(0, 0); -@@ -764,8 +765,7 @@ int SystemTrayApplet::heightForWidth(int - } - - int currentWidth = width(); -- int minSize = m_iconSize + 4; -- if (currentWidth != w && currentWidth != minSize) -+ if (currentWidth != w) - { - SystemTrayApplet* me = const_cast(this); - me->setMinimumSize(0, 0); -@@ -782,10 +782,8 @@ void SystemTrayApplet::moveEvent( QMoveE - } - - --void SystemTrayApplet::resizeEvent( QResizeEvent* e ) -+void SystemTrayApplet::resizeEvent( QResizeEvent* ) - { -- KPanelApplet::resizeEvent(e); -- - layoutTray(); - // we need to give ourselves a chance to adjust our size before calling this - QTimer::singleShot(0, this, SIGNAL(updateLayout())); -@@ -808,7 +806,7 @@ void SystemTrayApplet::layoutTray() - int i = 0, line, nbrOfLines, heightWidth; - bool showExpandButton = m_expandButton && m_expandButton->isVisibleTo(this); - delete m_layout; -- m_layout = new QGridLayout(this, 1, 1, 2, 2); -+ m_layout = new QGridLayout(this, 1, 1, ICON_MARGIN, ICON_MARGIN); - - if (m_expandButton) - { -@@ -828,18 +826,18 @@ void SystemTrayApplet::layoutTray() - - // - // The margin and spacing specified in the layout implies that: -- // [-- 2 pixels --] [-- first icon --] [-- 2 pixels --] ... [-- 2 pixels --] [-- last icon --] [-- 2 pixels --] -+ // [-- ICON_MARGIN pixels --] [-- first icon --] [-- ICON_MARGIN pixels --] ... [-- ICON_MARGIN pixels --] [-- last icon --] [-- ICON_MARGIN pixels --] - // -- // So, if we say that iconWidth is the icon width plus the 2 pixels spacing, then the available width for the icons -- // is the widget width minus 2 pixels margin. Forgetting these 2 pixels broke the layout algorithm in KDE <= 3.5.9. -+ // So, if we say that iconWidth is the icon width plus the ICON_MARGIN pixels spacing, then the available width for the icons -+ // is the widget width minus ICON_MARGIN pixels margin. Forgetting these ICON_MARGIN pixels broke the layout algorithm in KDE <= 3.5.9. - // -- // This fix makes the workaround in the heightForWidth() and widthForHeight() methods unneeded. -+ // This fix makes the workarounds in the heightForWidth() and widthForHeight() methods unneeded. - // - - if (orientation() == Vertical) - { -- int iconWidth = maxIconWidth() + 2; // +2 for the margins that implied by the layout -- heightWidth = width() - 2; -+ int iconWidth = maxIconWidth() + ICON_MARGIN; // +2 for the margins that implied by the layout -+ heightWidth = width() - ICON_MARGIN; - // to avoid nbrOfLines=0 we ensure heightWidth >= iconWidth! - heightWidth = heightWidth < iconWidth ? iconWidth : heightWidth; - nbrOfLines = heightWidth / iconWidth; -@@ -860,12 +858,12 @@ void SystemTrayApplet::layoutTray() - emb != lastEmb; ++emb) - { - line = i % nbrOfLines; -- (*emb)->hide(); -+ //(*emb)->hide(); - (*emb)->show(); - m_layout->addWidget(*emb, col, line, - Qt::AlignHCenter | Qt::AlignVCenter); - -- if (line + 1 == nbrOfLines) -+ if ((line + 1) == nbrOfLines) - { - ++col; - } -@@ -879,12 +877,12 @@ void SystemTrayApplet::layoutTray() - emb != lastEmb; ++emb) - { - line = i % nbrOfLines; -- (*emb)->hide(); -+ //(*emb)->hide(); - (*emb)->show(); - m_layout->addWidget(*emb, col, line, - Qt::AlignHCenter | Qt::AlignVCenter); - -- if (line + 1 == nbrOfLines) -+ if ((line + 1) == nbrOfLines) - { - ++col; - } -@@ -894,8 +892,8 @@ void SystemTrayApplet::layoutTray() - } - else // horizontal - { -- int iconHeight = maxIconHeight() + 2; // +2 for the margins that implied by the layout -- heightWidth = height() - 2; -+ int iconHeight = maxIconHeight() + ICON_MARGIN; // +2 for the margins that implied by the layout -+ heightWidth = height() - ICON_MARGIN; - heightWidth = heightWidth < iconHeight ? iconHeight : heightWidth; // to avoid nbrOfLines=0 - nbrOfLines = heightWidth / iconHeight; - -@@ -914,12 +912,12 @@ void SystemTrayApplet::layoutTray() - for (TrayEmbedList::const_iterator emb = m_hiddenWins.begin(); emb != lastEmb; ++emb) - { - line = i % nbrOfLines; -- (*emb)->hide(); -+ //(*emb)->hide(); - (*emb)->show(); - m_layout->addWidget(*emb, line, col, - Qt::AlignHCenter | Qt::AlignVCenter); - -- if (line + 1 == nbrOfLines) -+ if ((line + 1) == nbrOfLines) - { - ++col; - } -@@ -933,12 +931,12 @@ void SystemTrayApplet::layoutTray() - emb != lastEmb; ++emb) - { - line = i % nbrOfLines; -- (*emb)->hide(); -+ //(*emb)->hide(); - (*emb)->show(); - m_layout->addWidget(*emb, line, col, - Qt::AlignHCenter | Qt::AlignVCenter); - -- if (line + 1 == nbrOfLines) -+ if ((line + 1) == nbrOfLines) - { - ++col; - } -@@ -975,6 +973,21 @@ TrayEmbed::TrayEmbed( bool kdeTray, QWid - : QXEmbed( parent ), kde_tray( kdeTray ) - { - hide(); -+} -+ -+void TrayEmbed::getIconSize(int defaultIconSize) -+{ -+ QSize minSize = minimumSizeHint(); -+ -+ int width = minSize.width(); -+ int height = minSize.height(); -+ -+ if (width < 1 || width > defaultIconSize) -+ width = defaultIconSize; -+ if (height < 1 || height > defaultIconSize) -+ height = defaultIconSize; -+ -+ setFixedSize(width, height); - setBackground(); - } - -@@ -994,9 +1007,7 @@ void TrayEmbed::setBackground() - - if (!isHidden()) - { -- hide(); -- show(); -+ XClearArea(x11Display(), embeddedWinId(), 0, 0, 0, 0, True); - } -- //XClearArea(x11Display(), embeddedWinId(), 0, 0, 0, 0, True); - } - -Index: kicker/applets/clock/clock.h -=================================================================== ---- kicker/applets/clock/clock.h.orig -+++ kicker/applets/clock/clock.h -@@ -41,6 +41,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE - - #include - #include "settings.h" -+#include "kshadowengine.h" - - class QTimer; - class QBoxLayout; -@@ -152,6 +153,9 @@ class PlainClock : public QLabel, public - bool showDayOfWeek(); - - protected: -+ void paintEvent(QPaintEvent *e); -+ void drawContents(QPainter *p); -+ - QString _timeStr; - }; - -@@ -279,6 +283,8 @@ class ClockApplet : public KPanelApplet, - QDate clockGetDate(); - - virtual void updateKickerTip(KickerTip::Data&); -+ -+ KTextShadowEngine *shadowEngine(); - - k_dcop: - void reconfigure(); -@@ -335,6 +341,7 @@ class ClockApplet : public KPanelApplet, - QStringList _remotezonelist; - KPopupMenu* menu; - ClockAppletToolTip m_tooltip; -+ KTextShadowEngine *m_shadowEngine; - }; - - -Index: kicker/applets/clock/Makefile.am -=================================================================== ---- kicker/applets/clock/Makefile.am.orig -+++ kicker/applets/clock/Makefile.am -@@ -1,7 +1,7 @@ - pic_DATA = lcd.png - picdir = $(kde_datadir)/clockapplet/pics - --INCLUDES = -I$(top_srcdir)/kicker/libkicker $(all_includes) -+INCLUDES = -I$(top_srcdir)/kicker/libkicker -I../../libkicker $(all_includes) - - kde_module_LTLIBRARIES = clock_panelapplet.la - -Index: kicker/applets/clock/clock.cpp -=================================================================== ---- kicker/applets/clock/clock.cpp.orig -+++ kicker/applets/clock/clock.cpp -@@ -57,6 +57,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE - - #include // libkickermain - -+#include "kickerSettings.h" - #include "clock.h" - #include "datepicker.h" - #include "zone.h" -@@ -219,6 +220,7 @@ ClockWidget::~ClockWidget() - PlainClock::PlainClock(ClockApplet *applet, Prefs *prefs, QWidget *parent, const char *name) - : QLabel(parent, name), ClockWidget(applet, prefs) - { -+ setWFlags(WNoAutoErase); - setBackgroundOrigin(AncestorOrigin); - loadSettings(); - updateClock(); -@@ -228,7 +230,7 @@ PlainClock::PlainClock(ClockApplet *appl - int PlainClock::preferedWidthForHeight(int ) const - { - QString maxLengthTime = KGlobal::locale()->formatTime( QTime( 23, 59 ), _prefs->plainShowSeconds()); -- return fontMetrics().width( maxLengthTime+2 ); -+ return fontMetrics().width( maxLengthTime ) + 8; - } - - -@@ -244,7 +246,7 @@ void PlainClock::updateClock() - - if (_force || newStr != _timeStr) { - _timeStr = newStr; -- setText(_timeStr); -+ update(); - } - } - -@@ -266,6 +268,32 @@ bool PlainClock::showDayOfWeek() - return _prefs->plainShowDayOfWeek(); - } - -+void PlainClock::paintEvent(QPaintEvent *) -+{ -+ QPainter p; -+ QPixmap buf(size()); -+ buf.fill(this, 0, 0); -+ p.begin(&buf); -+ p.setFont(font()); -+ p.setPen(paletteForegroundColor()); -+ drawContents(&p); -+ drawFrame(&p); -+ p.end(); -+ p.begin(this); -+ p.drawPixmap(0, 0, buf); -+ p.end(); -+} -+ -+void PlainClock::drawContents(QPainter *p) -+{ -+ QRect tr(0, 0, width(), height()); -+ -+ if (!KickerSettings::transparent()) -+ p->drawText(tr, AlignCenter, _timeStr); -+ else -+ _applet->shadowEngine()->drawText(*p, tr, AlignCenter, _timeStr, size()); -+} -+ - //************************************************************ - - -@@ -834,12 +862,22 @@ void FuzzyClock::drawContents(QPainter * - - p->setFont(_prefs->fuzzyFont()); - p->setPen(_prefs->fuzzyForegroundColor()); -- if (_applet->getOrientation() == Vertical) { -+ -+ QRect tr; -+ -+ if (_applet->getOrientation() == Vertical) -+ { - p->rotate(90); -- p->drawText(4, -2, height() - 8, -(width()) + 2, AlignCenter, _timeStr); -- } else { -- p->drawText(4, 2, width() - 8, height() - 4, AlignCenter, _timeStr); -+ tr = QRect(4, -2, height() - 8, -(width()) + 2); - } -+ else -+ tr = QRect(4, 2, width() - 8, height() - 4); -+ -+ if (!KickerSettings::transparent()) -+ p->drawText(tr, AlignCenter, _timeStr); -+ else -+ _applet->shadowEngine()->drawText(*p, tr, AlignCenter, _timeStr, size()); -+ - alreadyDrawing = false; - } - -@@ -872,7 +910,8 @@ ClockApplet::ClockApplet(const QString& - _prefs(new Prefs(sharedConfig())), - zone(new Zone(config())), - menu(0), -- m_tooltip(this) -+ m_tooltip(this), -+ m_shadowEngine(0) - { - DCOPObject::setObjId("ClockApplet"); - _prefs->readConfig(); -@@ -910,6 +949,7 @@ ClockApplet::ClockApplet(const QString& - - ClockApplet::~ClockApplet() - { -+ delete m_shadowEngine; - //reverse for the moment - KGlobal::locale()->removeCatalogue("clockapplet"); - KGlobal::locale()->removeCatalogue("timezones"); // For time zone translations -@@ -929,6 +969,16 @@ ClockApplet::~ClockApplet() - config()->sync(); - } - -+ -+KTextShadowEngine *ClockApplet::shadowEngine() -+{ -+ if (!m_shadowEngine) -+ m_shadowEngine = new KTextShadowEngine(); -+ -+ return m_shadowEngine; -+} -+ -+ - int ClockApplet::widthForHeight(int h) const - { - if (orientation() == Qt::Vertical) -Index: kioslave/media/mediamanager/halbackend.cpp -=================================================================== ---- kioslave/media/mediamanager/halbackend.cpp.orig -+++ kioslave/media/mediamanager/halbackend.cpp -@@ -851,13 +851,6 @@ QStringList HALBackend::mountoptions(con - result << tmp; - } - -- if ( valids.contains("locale") ) -- { -- value = config.readBoolEntry( "locale", true ); -- tmp = QString( "locale=%1" ).arg( value ? "true" : "false" ); -- result << tmp; -- } -- - if (valids.contains("utf8")) - { - value = config.readBoolEntry("utf8", true); -@@ -878,6 +871,17 @@ QStringList HALBackend::mountoptions(con - result << "shortname=lower"; - } - -+ // pass our locale to the ntfs-3g driver so it can translate local characters -+ if (valids.contains("locale") && fstype == "ntfs-3g") -+ { -+ // have to obtain LC_CTYPE as returned by the `locale` command -+ // check in the same order as `locale` does -+ char *cType; -+ if ( (cType = getenv("LC_ALL")) || (cType = getenv("LC_CTYPE")) || (cType = getenv("LANG")) ) { -+ result << QString("locale=%1").arg(cType); -+ } -+ } -+ - if (valids.contains("sync")) - { - value = config.readBoolEntry("sync", ( valids.contains("flush") && !fstype.endsWith("fat") ) && removable); -@@ -931,7 +935,7 @@ bool HALBackend::setMountoptions(const Q - - QMap valids = MediaManagerUtils::splitOptions(options); - -- const char *names[] = { "ro", "quiet", "atime", "uid", "utf8", "flush", "sync", "locale", 0 }; -+ const char *names[] = { "ro", "quiet", "atime", "uid", "utf8", "flush", "sync", 0 }; - for (int index = 0; names[index]; ++index) - if (valids.contains(names[index])) - config.writeEntry(names[index], valids[names[index]] == "true"); -@@ -951,10 +955,6 @@ bool HALBackend::setMountoptions(const Q - config.writeEntry("automount", valids["automount"]); - } - -- if (valids.contains("locale") ) { -- config.writeEntry("locale", valids["locale"]); -- } -- - return true; - } - -@@ -1153,11 +1153,6 @@ QString HALBackend::mount(const Medium * - soptions << QString("uid=%1").arg(getuid()); - } - -- if (valids["locale"] == "true") -- { -- soptions << QString("locale=%1").arg( KGlobal::locale()->language() ); -- } -- - if (valids["ro"] == "true") - soptions << "ro"; - -@@ -1182,6 +1177,11 @@ QString HALBackend::mount(const Medium * - soptions << QString("shortname=%1").arg(valids["shortname"]); - } - -+ if (valids.contains("locale")) -+ { -+ soptions << QString("locale=%1").arg(valids["locale"]); -+ } -+ - if (valids.contains("journaling")) - { - QString option = valids["journaling"]; -Index: knetattach/knetattach.ui -=================================================================== ---- knetattach/knetattach.ui.orig -+++ knetattach/knetattach.ui -@@ -236,7 +236,7 @@ - - - -- 32768 -+ 65535 - - - 1 diff --git a/opensuse/tdebase/access.diff b/opensuse/tdebase/access.diff deleted file mode 100644 index 9f105550b..000000000 --- a/opensuse/tdebase/access.diff +++ /dev/null @@ -1,51 +0,0 @@ -Index: kcontrol/access/kaccess.cpp -=================================================================== ---- kcontrol/access/kaccess.cpp.orig -+++ kcontrol/access/kaccess.cpp -@@ -216,7 +216,7 @@ void KAccessApp::readSettings() - xkb->ctrls->debounce_delay = config->readNumEntry("BounceKeysDelay", 500); - - // gestures for enabling the other features -- _gestures = config->readBoolEntry("Gestures", true); -+ _gestures = config->readBoolEntry("Gestures", ::access("/opt/kde3/bin/kmag", X_OK) == 0); - if (_gestures) - xkb->ctrls->enabled_ctrls |= XkbAccessXKeysMask; - else -@@ -241,7 +241,7 @@ void KAccessApp::readSettings() - else - xkb->ctrls->ax_options &= ~(XkbAX_FeatureFBMask | XkbAX_SlowWarnFBMask); - -- _gestureConfirmation = config->readBoolEntry("GestureConfirmation", true); -+ _gestureConfirmation = config->readBoolEntry("GestureConfirmation", ::access("/opt/kde3/bin/kmag", X_OK) == 0); - - _kNotifyModifiers = config->readBoolEntry("kNotifyModifiers", false); - _kNotifyAccessX = config->readBoolEntry("kNotifyAccessX", false); -Index: kcontrol/access/kcmaccess.cpp -=================================================================== ---- kcontrol/access/kcmaccess.cpp.orig -+++ kcontrol/access/kcmaccess.cpp -@@ -7,6 +7,7 @@ - - - #include -+#include - #include - - #include -@@ -686,12 +687,14 @@ void KAccessConfig::load( bool useDefaul - bounceKeysDelay->setValue(config->readNumEntry("BounceKeysDelay", 500)); - bounceKeysRejectBeep->setChecked(config->readBoolEntry("BounceKeysRejectBeep", true)); - -- gestures->setChecked(config->readBoolEntry("Gestures", true)); -+ gestures->setChecked(config->readBoolEntry("Gestures", -+ ::access("/opt/kde3/bin/kmag", X_OK) == 0)); - timeout->setChecked(config->readBoolEntry("AccessXTimeout", false)); - timeoutDelay->setValue(config->readNumEntry("AccessXTimeoutDelay", 30)); - - accessxBeep->setChecked(config->readBoolEntry("AccessXBeep", true)); -- gestureConfirmation->setChecked(config->readBoolEntry("GestureConfirmation", false)); -+ gestureConfirmation->setChecked(config->readBoolEntry("GestureConfirmation", -+ ::access("/opt/kde3/bin/kmag", X_OK) == 0)); - kNotifyAccessX->setChecked(config->readBoolEntry("kNotifyAccessX", false)); - - delete config; diff --git a/opensuse/tdebase/applet-lock-logout.diff b/opensuse/tdebase/applet-lock-logout.diff deleted file mode 100644 index 75363e768..000000000 --- a/opensuse/tdebase/applet-lock-logout.diff +++ /dev/null @@ -1,122 +0,0 @@ -Index: kicker/applets/lockout/lockout.cpp -=================================================================== ---- kicker/applets/lockout/lockout.cpp.orig -+++ kicker/applets/lockout/lockout.cpp -@@ -31,6 +31,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE - #include - #include - #include -+#include - - #include - -@@ -54,7 +55,7 @@ extern "C" - } - - Lockout::Lockout( const QString& configFile, QWidget *parent, const char *name) -- : KPanelApplet( configFile, KPanelApplet::Normal, 0, parent, name ), bTransparent( false ) -+ : KPanelApplet( configFile, KPanelApplet::Normal, 0, parent, name ), bTransparent( false ), bAlternateButtonOrder( false ) - { - KConfig *conf = config(); - conf->setGroup("lockout"); -@@ -71,8 +72,16 @@ Lockout::Lockout( const QString& configF - layout->setMargin( 0 ); - layout->setSpacing( 0 ); - -- lockButton = new SimpleButton( this, "lock"); -- logoutButton = new SimpleButton( this, "logout"); -+ bAlternateButtonOrder = !conf->readBoolEntry( "OriginalLayout",true ); -+ -+ if (bAlternateButtonOrder) { -+ lockButton = new SimpleButton( this, "lock"); -+ logoutButton = new SimpleButton( this, "logout"); -+ } -+ else { -+ logoutButton = new SimpleButton( this, "logout"); -+ lockButton = new SimpleButton( this, "lock"); -+ } - - QToolTip::add( lockButton, i18n("Lock the session") ); - QToolTip::add( logoutButton, i18n("Log out") ); -@@ -204,12 +213,15 @@ bool Lockout::eventFilter( QObject *o, Q - this, SLOT( lock() ) ); - popup->insertSeparator(); - -+ popup->insertItem( i18n( "&Alternate Button Order" ), 90 ); - i18n("&Transparent"); - //popup->insertItem( i18n( "&Transparent" ), 100 ); - popup->insertItem( SmallIcon( "configure" ), - i18n( "&Configure Screen Saver..." ), - this, SLOT( slotLockPrefs() ) ); - -+ popup->setItemChecked( 90, bAlternateButtonOrder ); -+ popup->connectItem(90, this, SLOT( slotButtonOrder() ) ); - //popup->setItemChecked( 100, bTransparent ); - //popup->connectItem(100, this, SLOT( slotTransparent() ) ); - //if (conf->entryIsImmutable( "Transparent" )) -@@ -226,6 +238,7 @@ bool Lockout::eventFilter( QObject *o, Q - popup->insertItem( SmallIcon( "exit" ), i18n("&Log Out..."), - this, SLOT( logout() ) ); - popup->insertSeparator(); -+ popup->insertItem( i18n( "&Alternate Button Order" ), 90 ); - //popup->insertItem( i18n( "&Transparent" ), 100 ); - popup->insertItem( SmallIcon( "configure" ), - i18n( "&Configure Session Manager..." ), -@@ -235,6 +248,9 @@ bool Lockout::eventFilter( QObject *o, Q - //popup->connectItem(100, this, SLOT( slotTransparent() ) ); - //if (conf->entryIsImmutable( "Transparent" )) - // popup->setItemEnabled( 100, false ); -+ popup->setItemChecked( 90, bAlternateButtonOrder ); -+ popup->connectItem(90, this, SLOT( slotButtonOrder() ) ); -+ - popup->exec( me->globalPos() ); - delete popup; - -@@ -263,6 +279,27 @@ void Lockout::slotTransparent() - conf->sync(); - } - -+void Lockout::slotButtonOrder() -+{ -+ QObject* child = children()->getFirst(); -+ -+ if (bAlternateButtonOrder) -+ child = lockButton; -+ else -+ child = logoutButton; -+ -+ removeChild(child); -+ insertChild(child); -+ update(); -+ -+ bAlternateButtonOrder = !bAlternateButtonOrder; -+ -+ KConfig* conf = config(); -+ conf->setGroup("lockout"); -+ conf->writeEntry( "OriginalLayout", !bAlternateButtonOrder ); -+ conf->sync(); -+} -+ - void Lockout::slotLogoutPrefs() - { - // Run the logout settings. -Index: kicker/applets/lockout/lockout.h -=================================================================== ---- kicker/applets/lockout/lockout.h.orig -+++ kicker/applets/lockout/lockout.h -@@ -36,6 +36,7 @@ private slots: - - void slotLockPrefs(); - void slotLogoutPrefs(); -+ void slotButtonOrder(); - void slotTransparent(); - void slotIconChanged(); - -@@ -47,6 +48,7 @@ private: - QBoxLayout *layout; - - bool bTransparent; -+ bool bAlternateButtonOrder; - }; - - #endif // LOCKOUT_H diff --git a/opensuse/tdebase/arts-start-on-demand.diff b/opensuse/tdebase/arts-start-on-demand.diff deleted file mode 100644 index 27fcc2292..000000000 --- a/opensuse/tdebase/arts-start-on-demand.diff +++ /dev/null @@ -1,98 +0,0 @@ -Index: kcontrol/arts/Makefile.am -=================================================================== ---- kcontrol/arts/Makefile.am.orig -+++ kcontrol/arts/Makefile.am -@@ -1,3 +1,9 @@ -+bin_PROGRAMS = arts-start -+ -+arts_start_SOURCES = arts-start.cpp -+arts_start_LDFLAGS = $(all_libraries) -+arts_start_LDADD = $(LIB_KDECORE) -+ - kde_module_LTLIBRARIES = kcm_arts.la - - kcm_arts_la_SOURCES = arts.cpp generaltab.ui hardwaretab.ui krichtextlabel.cpp -Index: kcontrol/arts/arts-start.cpp -=================================================================== ---- /dev/null -+++ kcontrol/arts/arts-start.cpp -@@ -0,0 +1,79 @@ -+/* -+ -+ Copyright (C) 2007 Lubos Lunak -+ -+ This program is free software; you can redistribute it and/or modify -+ it under the terms of the GNU General Public License as published by -+ the Free Software Foundation; either version 2 of the License, or -+ (at your option) any later version. -+ -+ This program is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ GNU General Public License for more details. -+ -+ You should have received a copy of the GNU General Public License -+ along with this program; if not, write to the Free Software -+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -+ -+ Permission is also granted to link this program with the Qt -+ library, treating Qt like a library that normally accompanies the -+ operating system kernel, whether or not that is in fact the case. -+ -+*/ -+ -+#include -+#include -+#include -+#include -+#include -+ -+static bool arts_running() -+ { -+ int status = system( "artsshell status >/dev/null 2>/dev/null" ); -+ return WIFEXITED( status ) && WEXITSTATUS( status ) == 0; -+ } -+ -+int main() -+ { -+ // Try to launch arts this way only a single time in the whole session. After first -+ // try set X property on the root window and following attemps bail out if it's set. -+ Display* dpy = XOpenDisplay( NULL ); -+ if( dpy == NULL ) // don't launch arts without X -+ return 4; -+ Atom atom = XInternAtom( dpy, "_KDE_ARTS_TRIED", False ); -+ int count; -+ Atom* atoms = XListProperties( dpy, DefaultRootWindow( dpy ), &count ); -+ bool tried = false; -+ if( atoms != NULL ) -+ { -+ for( int i = 0; -+ i < count; -+ ++i ) -+ if( atoms[ i ] == atom ) -+ { -+ tried = true; -+ break; -+ } -+ } -+ if( tried ) // this should probably wait, but artsshell will result in calling this too -+ return 2; -+ long dummy = 1; -+ XChangeProperty( dpy, DefaultRootWindow( dpy ), atom, atom, 32, PropModeReplace, (const unsigned char*)&dummy, 1 ); -+ XCloseDisplay( dpy ); -+ KInstance inst( "arts-start" ); -+ KConfig config("kcmartsrc", true, false); -+ config.setGroup("Arts"); -+ if( !config.readBoolEntry("StartServer",true)) -+ return 2; -+ system( "kcminit arts" ); -+ for( int i = 0; -+ i < 50; // give it 5 seconds -+ ++i ) -+ { -+ if( arts_running()) -+ return 0; -+ usleep( 100 * 1000 ); -+ } -+ return 3; -+ } diff --git a/opensuse/tdebase/artwork.diff b/opensuse/tdebase/artwork.diff deleted file mode 100644 index ba13e5757..000000000 --- a/opensuse/tdebase/artwork.diff +++ /dev/null @@ -1,35 +0,0 @@ -Index: kioslave/fish/fish.protocol -=================================================================== ---- kioslave/fish/fish.protocol.orig -+++ kioslave/fish/fish.protocol -@@ -10,7 +10,7 @@ makedir=true - deleting=true - linking=true - moving=true --Icon=remote -+Icon=folder_html - Description=A kioslave for the FISH protocol - Description[af]='n Kioslave vir die FISH protokol - Description[be]=Kioslave Ð´Ð»Ñ Ð¿Ñ€Ð°Ñ‚Ð°ÐºÐ¾Ð»Ð° FISH -Index: kioslave/floppy/floppy.protocol -=================================================================== ---- kioslave/floppy/floppy.protocol.orig -+++ kioslave/floppy/floppy.protocol -@@ -9,6 +9,6 @@ writing=true - makedir=true - deleting=true - moving=true --Icon=3floppy_mount -+Icon=3floppy_unmount - DocPath=kioslave/floppy.html - Class=:local -Index: kioslave/nfs/nfs.protocol -=================================================================== ---- kioslave/nfs/nfs.protocol.orig -+++ kioslave/nfs/nfs.protocol -@@ -11,4 +11,4 @@ deleting=true - linking=true - moving=true - DocPath=kioslave/nfs.html --Icon=nfs_mount -+Icon=nfs_unmount diff --git a/opensuse/tdebase/autorun.patch b/opensuse/tdebase/autorun.patch deleted file mode 100644 index 962740cdc..000000000 --- a/opensuse/tdebase/autorun.patch +++ /dev/null @@ -1,27 +0,0 @@ -Index: kioslave/media/medianotifier/medianotifier.cpp -=================================================================== ---- kioslave/media/medianotifier/medianotifier.cpp.orig -+++ kioslave/media/medianotifier/medianotifier.cpp -@@ -133,7 +133,7 @@ bool MediaNotifier::autostart( const KFi - // be checked for the following Autostart files in order of precedence: - // .autorun, autorun, autorun.sh - QStringList autorun_list; -- autorun_list << ".autorun" << "autorun" << "autorun.sh"; -+ autorun_list << ".autorun" << "autorun" << "autorun.sh" << "setup.sh" << "media.1/patches"; - - QStringList::iterator it = autorun_list.begin(); - QStringList::iterator end = autorun_list.end(); -@@ -191,7 +191,12 @@ bool MediaNotifier::execAutorun( const K - // with the current working directory ( CWD ) set to the root - // directory of the medium. - KProcess proc; -- proc << "sh" << autorunFile; -+ if (autorunFile == "setup.sh") -+ proc << "kdesu" << autorunFile; -+ else if (autorunFile == "media.1/patches") -+ proc << "kdesu" << "--nonewdcop" << "/sbin/yast2" << "online_update" << ".cd_default"; -+ else -+ proc << "sh" << autorunFile; - proc.setWorkingDirectory( path ); - proc.start(); - proc.detach(); diff --git a/opensuse/tdebase/background_default.diff b/opensuse/tdebase/background_default.diff deleted file mode 100644 index 71f9a96bb..000000000 --- a/opensuse/tdebase/background_default.diff +++ /dev/null @@ -1,13 +0,0 @@ -Index: kcontrol/background/bgwallpaper.cpp -=================================================================== ---- kcontrol/background/bgwallpaper.cpp.orig -+++ kcontrol/background/bgwallpaper.cpp -@@ -149,7 +149,7 @@ void BGMultiWallpaperDialog::slotAdd() - mimeTypes += "image/svg+xml"; - #endif - -- KFileDialog fileDialog(KGlobal::dirs()->findDirs("wallpaper", "").first(), -+ KFileDialog fileDialog("/usr/share/wallpapers", - mimeTypes.join( " " ), this, - 0L, true); - diff --git a/opensuse/tdebase/baselibs.conf b/opensuse/tdebase/baselibs.conf deleted file mode 100644 index 29e28ab1d..000000000 --- a/opensuse/tdebase/baselibs.conf +++ /dev/null @@ -1,2 +0,0 @@ -kdebase3 -kdebase3-runtime diff --git a/opensuse/tdebase/beagle-0.3.diff b/opensuse/tdebase/beagle-0.3.diff deleted file mode 100644 index 6e65be590..000000000 --- a/opensuse/tdebase/beagle-0.3.diff +++ /dev/null @@ -1,21 +0,0 @@ ---- kicker/configure.in.in 2008/01/28 11:03:28 1.1 -+++ kicker/configure.in.in 2008/01/28 11:03:45 -@@ -42,14 +42,14 @@ - AC_SUBST(GLIB_LIBADD) - AC_SUBST(GLIB_LDFLAGS) - --dnl Check for libbeagle 0.2.0 -+dnl Check for libbeagle 0.3.0 - # LIBBEAGLE_CFLAGS: cflags for compiling libbeagle dependant sources - # LIBBEAGLE_LIBADD: libbeagle libraries (-l options) - # LIBBEAGLE_LDFLAGS: flags containing path to libbeagle libraries (-L options) - --LIBBEAGLE_PACKAGES="libbeagle-0.0" --LIBBEAGLE_VERSION="0.2.4" --AC_MSG_CHECKING(for libbeagle-0.2.4 (at least $LIBBEAGLE_VERSION)) -+LIBBEAGLE_PACKAGES="libbeagle-1.0" -+LIBBEAGLE_VERSION="0.3.0" -+AC_MSG_CHECKING(for libbeagle-0.3.0 (at least $LIBBEAGLE_VERSION)) - - if $PKG_CONFIG --atleast-pkgconfig-version 0.15 ; then - if $PKG_CONFIG --atleast-version $LIBBEAGLE_VERSION $LIBBEAGLE_PACKAGES >/dev/null 2>&1 ; then diff --git a/opensuse/tdebase/bnc.desktop b/opensuse/tdebase/bnc.desktop deleted file mode 100644 index c5db233cf..000000000 --- a/opensuse/tdebase/bnc.desktop +++ /dev/null @@ -1,8 +0,0 @@ -[Desktop Entry] -Charset= -Hidden=false -Keys=bnc -Name=Novell Bugzilla -Query=https://bugzilla.novell.com/show_bug.cgi?id=\\{@} -ServiceTypes=SearchProvider -Type=Service diff --git a/opensuse/tdebase/bnc584223.diff b/opensuse/tdebase/bnc584223.diff deleted file mode 100644 index 370abf150..000000000 --- a/opensuse/tdebase/bnc584223.diff +++ /dev/null @@ -1,189 +0,0 @@ ---- kdebase-3.5.10/kdm/backend/ctrl.c.sav 2010-03-23 13:22:28.000000000 +0100 -+++ kdebase-3.5.10/kdm/backend/ctrl.c 2010-03-23 14:21:48.619350322 +0100 -@@ -78,7 +78,25 @@ nukeSock( struct cmdsock *cs ) - } - - -+#ifdef HONORS_SOCKET_PERMS - static CtrlRec ctrl = { 0, 0, -1, 0, 0, { -1, 0, 0 } }; -+#else -+static CtrlRec ctrl = { 0, 0, 0, -1, 0, 0, { -1, 0, 0 } }; -+ -+static int mkTempDir( char *dir ) -+{ -+ int i, l = strlen( dir ) - 6; -+ -+ for (i = 0; i < 100; i++) { -+ randomStr( dir + l ); -+ if (!mkdir( dir, 0700 )) -+ return True; -+ if (errno != EEXIST) -+ break; -+ } -+ return False; -+} -+#endif - - void - openCtrl( struct display *d ) -@@ -140,22 +158,50 @@ openCtrl( struct display *d ) - if (strlen( cr->path ) >= sizeof(sa.sun_path)) - LogError( "path %\"s too long; no control sockets will be available\n", - cr->path ); -- else if (mkdir( sockdir, 0755 ) && errno != EEXIST) -+#ifdef HONORS_SOCKET_PERMS -+ else if (mkdir( sockdir, 0700 ) && errno != EEXIST) - LogError( "mkdir %\"s failed; no control sockets will be available\n", - sockdir ); -+ else if (unlink( cr->path ) && errno != ENOENT) -+ LogError( "unlink %\"s failed: %m; control socket will not be available\n", -+ cr->path ); - else { -- if (!d) -- chown( sockdir, -1, fifoGroup ); -+#else -+ else if (unlink( sockdir ) && errno != ENOENT) -+ LogError( "unlink %\"s failed: %m; control socket will not be available\n", -+ sockdir ); -+ else if (!strApp( &cr->realdir, sockdir, "-XXXXXX", (char *)0)) -+ ; -+ else if (!mkTempDir( cr->realdir )) { -+ LogError( "mkdir %\"s failed: %m; control socket will not be available\n", -+ cr->realdir ); -+ free( cr->realdir ); -+ cr->realdir = 0; -+ } else if (symlink( cr->realdir, sockdir )) { -+ LogError( "symlink %\"s => %\"s failed: %m; control socket will not be available\n", -+ sockdir, cr->realdir ); -+ rmdir( cr->realdir ); -+ free( cr->realdir ); -+ cr->realdir = 0; -+ } else { -+ chown( sockdir, 0, d ? 0 : fifoGroup ); - chmod( sockdir, 0750 ); -+#endif - if ((cr->fd = socket( PF_UNIX, SOCK_STREAM, 0 )) < 0) - LogError( "Cannot create control socket\n" ); - else { -- unlink( cr->path ); - sa.sun_family = AF_UNIX; - strcpy( sa.sun_path, cr->path ); - if (!bind( cr->fd, (struct sockaddr *)&sa, sizeof(sa) )) { - if (!listen( cr->fd, 5 )) { -+#ifdef HONORS_SOCKET_PERMS -+ chmod( cr->path, 0660 ); -+ if (!d) -+ chown( cr->path, -1, fifoGroup ); -+ chmod( sockdir, 0755 ); -+#else - chmod( cr->path, 0666 ); -+#endif - RegisterCloseOnFork( cr->fd ); - RegisterInput( cr->fd ); - free( sockdir ); -@@ -170,6 +216,14 @@ openCtrl( struct display *d ) - close( cr->fd ); - cr->fd = -1; - } -+#ifdef HONORS_SOCKET_PERMS -+ rmdir( sockdir ); -+#else -+ unlink( sockdir ); -+ rmdir( cr->realdir ); -+ free( cr->realdir ); -+ cr->realdir = 0; -+#endif - } - free( cr->path ); - cr->path = 0; -@@ -190,7 +244,14 @@ closeCtrl( struct display *d ) - cr->fd = -1; - unlink( cr->path ); - *strrchr( cr->path, '/' ) = 0; -+#ifdef HONORS_SOCKET_PERMS - rmdir( cr->path ); -+#else -+ unlink( cr->path ); -+ rmdir( cr->realdir ); -+ free( cr->realdir ); -+ cr->realdir = 0; -+#endif - free( cr->path ); - cr->path = 0; - while (cr->css) { -@@ -218,12 +279,12 @@ chownCtrl( CtrlRec *cr, int uid ) - { - if (cr->fpath) - chown( cr->fpath, uid, -1 ); -- if (cr->path) { -- char *ptr = strrchr( cr->path, '/' ); -- *ptr = 0; -+ if (cr->path) -+#ifdef HONORS_SOCKET_PERMS - chown( cr->path, uid, -1 ); -- *ptr = '/'; -- } -+#else -+ chown( cr->realdir, uid, -1 ); -+#endif - } - - void ---- kdebase-3.5.10/kdm/backend/dm.h.sav 2010-03-23 13:22:28.401354858 +0100 -+++ kdebase-3.5.10/kdm/backend/dm.h 2010-03-23 13:28:24.843351116 +0100 -@@ -218,6 +218,9 @@ typedef struct { - struct cmdsock *css; /* open connections */ - - char *path; /* filename of the socket */ -+#ifndef HONORS_SOCKET_PERMS -+ char *realdir; /* real dirname of the socket */ -+#endif - int fd; /* fd of the socket */ - int gid; /* owner group of the socket */ - ---- kdebase-3.5.10/config.h.in.sav 2008-08-20 18:00:23.000000000 +0200 -+++ kdebase-3.5.10/config.h.in 2010-03-23 13:36:38.913475918 +0100 -@@ -739,6 +739,9 @@ - /* Defined if your system has XRandR support */ - #undef XRANDR_SUPPORT - -+/* Define to 1 if OS honors permission bits on socket inodes */ -+#undef HONORS_SOCKET_PERMS -+ - /* - * jpeg.h needs HAVE_BOOLEAN, when the system uses boolean in system - * headers and I'm too lazy to write a configure test as long as only ---- kdebase-3.5.10/configure.in.in.sav 2006-07-22 10:15:55.000000000 +0200 -+++ kdebase-3.5.10/configure.in.in 2010-03-23 13:51:24.504477535 +0100 -@@ -274,3 +274,31 @@ AC_SUBST(LIBART_RPATH) - AC_ARG_WITH([composite], - AC_HELP_STRING([--without-composite], [Disable Xcomposite support (default: check)]) ) - -+AC_TRY_RUN([ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+int main() -+{ -+ int fd, fd2; -+ struct sockaddr_un sa; -+ -+ if ((fd = socket(PF_UNIX, SOCK_STREAM, 0)) < 0) -+ return 2; -+ sa.sun_family = AF_UNIX; -+ strcpy(sa.sun_path, "testsock"); -+ unlink(sa.sun_path); -+ if (bind(fd, (struct sockaddr *)&sa, sizeof(sa))) -+ return 2; -+ chmod(sa.sun_path, 0); -+ setuid(getuid() + 1000); -+ if ((fd2 = socket(PF_UNIX, SOCK_STREAM, 0)) < 0) -+ return 2; -+ connect(fd2, (struct sockaddr *)&sa, sizeof(sa)); -+ return errno != EACCES; -+} -+], AC_DEFINE_UNQUOTED(HONORS_SOCKET_PERMS, 1, [Define to 1 if OS honors permission bits on socket inodes])) diff --git a/opensuse/tdebase/clock-applet-style.diff b/opensuse/tdebase/clock-applet-style.diff deleted file mode 100644 index 42c768337..000000000 --- a/opensuse/tdebase/clock-applet-style.diff +++ /dev/null @@ -1,22 +0,0 @@ -Index: kicker/applets/clock/clockapplet.kcfg -=================================================================== ---- kicker/applets/clock/clockapplet.kcfg.orig -+++ kicker/applets/clock/clockapplet.kcfg -@@ -14,7 +14,7 @@ - - - -- Digital -+ Plain -
    - - -@@ -56,7 +56,7 @@ defFont.setPointSize(8); - - - defFont=KGlobalSettings::generalFont(); --defFont.setPointSize(8); -+defFont.setPointSize(16); - defFont.setBold(true); - - defFont diff --git a/opensuse/tdebase/clock-suse-integrate.diff b/opensuse/tdebase/clock-suse-integrate.diff deleted file mode 100644 index a4d24dff8..000000000 --- a/opensuse/tdebase/clock-suse-integrate.diff +++ /dev/null @@ -1,288 +0,0 @@ -Index: kcontrol/clock/tzone.cpp -=================================================================== ---- kcontrol/clock/tzone.cpp.orig -+++ kcontrol/clock/tzone.cpp -@@ -27,12 +27,16 @@ - - #include - #include -+#include - - #include - #include - #include - #include - #include -+#include -+#include -+#include - - //#include "xpm/world.xpm" - #include "tzone.h" -@@ -55,6 +59,8 @@ Tzone::Tzone(QWidget * parent, const cha - connect( tzonelist, SIGNAL(selectionChanged()), SLOT(handleZoneChange()) ); - - m_local = new QLabel(this); -+ -+ setupSuseTimezone(); - - load(); - -@@ -158,28 +164,38 @@ void Tzone::save() - - QString val = selectedzone; - #else -- QFile fTimezoneFile("/etc/timezone"); -+ QString tz = "/usr/share/zoneinfo/" + selectedzone; - -- if (fTimezoneFile.open(IO_WriteOnly | IO_Truncate) ) -+ kdDebug() << "Set time zone " << tz << endl; -+ -+ writeSuseTimezone( selectedzone ); -+ -+ if( !KStandardDirs::findExe( "zic" ).isEmpty()) - { -- QTextStream t(&fTimezoneFile); -- t << selectedzone; -- fTimezoneFile.close(); -+ KProcess proc; -+ proc << "zic" << "-l" << selectedzone; -+ proc.start( KProcess::Block ); - } -+ else -+ { -+ QFile fTimezoneFile("/etc/timezone"); - -- QString tz = "/usr/share/zoneinfo/" + selectedzone; -- -- kdDebug() << "Set time zone " << tz << endl; -+ if (fTimezoneFile.open(IO_WriteOnly | IO_Truncate) ) -+ { -+ QTextStream t(&fTimezoneFile); -+ t << selectedzone; -+ fTimezoneFile.close(); -+ } - -- if (!QFile::remove("/etc/localtime")) -- { -+ if (!QFile::remove("/etc/localtime")) -+ { - //After the KDE 3.2 release, need to add an error message -- } -- else -+ } -+ else - if (!KIO::NetAccess::file_copy(KURL(tz),KURL("/etc/localtime"))) - KMessageBox::error( 0, i18n("Error setting new timezone."), - i18n("Timezone Error")); -- -+ } - QString val = ":" + tz; - #endif // !USE_SOLARIS - -@@ -198,3 +214,58 @@ void Tzone::save() - - currentZone(); - } -+ -+// read the configured timezone from /etc/sysconfig/clock -+// and simply set it as $TZ, KDE code then will take it as the timezone -+void Tzone::setupSuseTimezone() -+{ -+ QFile f( "/etc/sysconfig/clock" ); -+ if( !f.open( IO_ReadOnly )) -+ return; -+ QTextStream str( &f ); -+ while( !str.atEnd()) -+ { -+ QString line = str.readLine(); -+ if( line.startsWith( "TIMEZONE=" )) -+ { -+ QRegExp r( "\\s*TIMEZONE=\"(.*)\"\\s*" ); -+ if( r.exactMatch( line )) -+ { -+ QString tz = r.cap( 1 ); -+ setenv( "TZ", tz.ascii(), 1 ); -+ } -+ } -+ } -+} -+ -+void Tzone::writeSuseTimezone( QString zone ) -+{ -+ QFile f( "/etc/sysconfig/clock" ); -+ if( !f.open( IO_ReadOnly )) -+ return; -+ KSaveFile out( "/etc/sysconfig/clock", 0644 ); -+ QFile* fout = out.file(); -+ if( fout == NULL ) -+ return; -+ QTextStream str( &f ); -+ QTextStream strout( fout ); -+ while( !str.atEnd()) -+ { -+ QString line = str.readLine(); -+ if( line.startsWith( "TIMEZONE=" )) -+ { -+ QRegExp r( "\\s*TIMEZONE=\"(.*)\"\\s*" ); -+ if( r.exactMatch( line )) -+ { -+ QString tz = r.cap( 1 ); -+ if( tz == zone ) // not changed, abort -+ { -+ out.abort(); -+ return; -+ } -+ line = "TIMEZONE=\"" + zone + "\""; -+ } -+ } -+ strout << line << '\n'; -+ } -+} -Index: kcontrol/clock/tzone.h -=================================================================== ---- kcontrol/clock/tzone.h.orig -+++ kcontrol/clock/tzone.h -@@ -47,6 +47,8 @@ protected slots: - - private: - void currentZone(); -+ void setupSuseTimezone(); -+ void writeSuseTimezone( QString timezone ); - KTimezones m_zoneDb; - QLabel *m_local; - KTimezoneWidget *tzonelist; -Index: kcontrol/clock/dtime.h -=================================================================== ---- kcontrol/clock/dtime.h.orig -+++ kcontrol/clock/dtime.h -@@ -65,6 +65,9 @@ signals: - void timeout(); - void set_time(); - void changeDate(QDate); -+#if 1 -+ void configureTimeServer(); -+#endif - - private: - void findNTPutility(); -@@ -72,7 +75,11 @@ private: - - QWidget* privateLayoutWidget; - QCheckBox *setDateTimeAuto; -+#if 1 -+ QPushButton *timeServerConfigure; -+#else - QComboBox *timeServerList; -+#endif - - KDatePicker *cal; - QComboBox *month; -Index: kcontrol/clock/dtime.cpp -=================================================================== ---- kcontrol/clock/dtime.cpp.orig -+++ kcontrol/clock/dtime.cpp -@@ -38,6 +38,7 @@ - #include - #include - #include -+#include - - #include "dtime.h" - #include "dtime.moc" -@@ -74,6 +75,18 @@ Dtime::Dtime(QWidget * parent, const cha - connect(setDateTimeAuto, SIGNAL(toggled(bool)), SLOT(configChanged())); - layout1->addWidget( setDateTimeAuto ); - -+#if 1 -+ // simply add a pushbutton that'll invoke the yast module -+ ntpUtility = KStandardDirs::findExe( "rcntp"); -+ timeServerConfigure = new QPushButton( i18n( "Configure" ), privateLayoutWidget, "timeServerConfigure" ); -+ connect(timeServerConfigure, SIGNAL(clicked()), SLOT(configChanged())); -+ connect(timeServerConfigure, SIGNAL(clicked()), SLOT(configureTimeServer())); -+ connect(setDateTimeAuto, SIGNAL(toggled(bool)), timeServerConfigure, SLOT(setEnabled(bool))); -+ timeServerConfigure->setEnabled(false); -+ layout1->addWidget( timeServerConfigure ); -+ if( ntpUtility.isEmpty()) -+ privateLayoutWidget->hide(); -+#else - timeServerList = new QComboBox( false, privateLayoutWidget, "timeServerList" ); - connect(timeServerList, SIGNAL(activated(int)), SLOT(configChanged())); - connect(timeServerList, SIGNAL(textChanged(const QString &)), SLOT(configChanged())); -@@ -82,6 +95,7 @@ Dtime::Dtime(QWidget * parent, const cha - timeServerList->setEditable(true); - layout1->addWidget( timeServerList ); - findNTPutility(); -+#endif - - // Date box - QGroupBox* dateBox = new QGroupBox( this, "dateBox" ); -@@ -179,7 +193,11 @@ Dtime::Dtime(QWidget * parent, const cha - hour->setEnabled(false); - minute->setEnabled(false); - second->setEnabled(false); -+#if 1 -+ timeServerConfigure->setEnabled(false); -+#else - timeServerList->setEnabled(false); -+#endif - setDateTimeAuto->setEnabled(false); - } - kclock->setEnabled(false); -@@ -241,6 +259,15 @@ void Dtime::configChanged(){ - void Dtime::load() - { - KConfig config("kcmclockrc", true, false); -+#if 1 -+ if( !ntpUtility.isEmpty()) -+ { -+ KProcess proc; -+ proc << ntpUtility << "status"; -+ proc.start( KProcess::Block ); -+ setDateTimeAuto->setChecked( proc.exitStatus() == 0 ); -+ } -+#else - config.setGroup("NTP"); - timeServerList->insertStringList(QStringList::split(',', config.readEntry("servers", - i18n("Public Time Server (pool.ntp.org),\ -@@ -249,6 +276,7 @@ europe.pool.ntp.org,\ - north-america.pool.ntp.org,\ - oceania.pool.ntp.org")))); - setDateTimeAuto->setChecked(config.readBoolEntry("enabled", false)); -+#endif - - // Reset to the current date and time - time = QTime::currentTime(); -@@ -264,6 +292,7 @@ oceania.pool.ntp.org")))); - void Dtime::save() - { - KConfig config("kcmclockrc", false, false); -+#if 0 - config.setGroup("NTP"); - - // Save the order, but don't duplicate! -@@ -301,7 +330,9 @@ void Dtime::save() - kdDebug() << "Set date from time server " << timeServer.latin1() << " success!" << endl; - } - } -- else { -+ else -+#endif -+ { - // User time setting - KProcess c_proc; - -@@ -356,6 +387,13 @@ void Dtime::timeout() - kclock->setTime( time ); - } - -+void Dtime::configureTimeServer() -+{ -+ KProcess proc; -+ proc << "/sbin/yast2" << "ntp-client"; -+ proc.start( KProcess::DontCare ); -+} -+ - QString Dtime::quickHelp() const - { - return i18n("

    Date & Time

    This control module can be used to set the system date and" diff --git a/opensuse/tdebase/console8x16.pcf.gz b/opensuse/tdebase/console8x16.pcf.gz deleted file mode 100644 index db4be9f47..000000000 Binary files a/opensuse/tdebase/console8x16.pcf.gz and /dev/null differ diff --git a/opensuse/tdebase/default-kdeprintfax.diff b/opensuse/tdebase/default-kdeprintfax.diff deleted file mode 100644 index ed686b4a7..000000000 --- a/opensuse/tdebase/default-kdeprintfax.diff +++ /dev/null @@ -1,13 +0,0 @@ -Index: kdeprint/kdeprintfax/confsystem.cpp -=================================================================== ---- kdeprint/kdeprintfax/confsystem.cpp.orig -+++ kdeprint/kdeprintfax/confsystem.cpp -@@ -103,7 +103,7 @@ void ConfSystem::load() - m_commands << conf->readPathEntry("HylaFax", defaultCommand(hylafax_default_cmd)); - m_commands << conf->readPathEntry("Mgetty", defaultCommand(mgetty_default_cmd)); - m_commands << conf->readPathEntry( "Other", QString::null ); -- QString v = conf->readEntry("System", "efax"); -+ QString v = conf->readEntry("System", "hylafax"); - if (v == "mgetty") m_current = MGETTY_ID; - else if (v == "hylafax") m_current = HYLAFAX_ID; - else if ( v == "other" ) m_current = OTHER_ID; diff --git a/opensuse/tdebase/default_fonts.diff b/opensuse/tdebase/default_fonts.diff deleted file mode 100644 index 4300b5aed..000000000 --- a/opensuse/tdebase/default_fonts.diff +++ /dev/null @@ -1,25 +0,0 @@ -Index: kcontrol/fonts/fonts.cpp -=================================================================== ---- kcontrol/fonts/fonts.cpp.orig -+++ kcontrol/fonts/fonts.cpp -@@ -1,3 +1,4 @@ -+ - // KDE Display fonts setup tab - // - // Copyright (c) Mark Donohoe 1997 -@@ -524,11 +525,11 @@ KFonts::KFonts(QWidget *parent, const ch - - // Keep in sync with kdelibs/kdecore/kglobalsettings.cpp - -- QFont f0("Sans Serif", 10); -- QFont f1("Monospace", 10); -+ QFont f0("Sans Serif", 12); -+ QFont f1("courier", 12); - QFont f2("Sans Serif", 10); -- QFont f3("Sans Serif", 9, QFont::Bold); -- QFont f4("Sans Serif", 10); -+ QFont f3("Sans Serif", 12, QFont::Bold); -+ QFont f4("Sans Serif", 11); - - f0.setPointSize(10); - f1.setPointSize(10); diff --git a/opensuse/tdebase/devmon-automounter.sh b/opensuse/tdebase/devmon-automounter.sh deleted file mode 100644 index ff2de18f1..000000000 --- a/opensuse/tdebase/devmon-automounter.sh +++ /dev/null @@ -1,1086 +0,0 @@ -#!/bin/bash -# Script Name: devmon http://igurublog.wordpress.com/downloads/script-devmon/ -# Requires: udisks bash>=4 -# Recommended: consolekit zenity -# License: GNU GENERAL PUBLIC LICENSE Version 3 http://www.gnu.org/licenses/gpl-3.0.txt -# Thanks to Bernard Baeyens (berbae) for code from udisksvm script -# https://bbs.archlinux.org/viewtopic.php?id=112397 - -#========================================================================= - -defaultmountoptions="noexec,nosuid,noatime" - -#========================================================================= - -help() -{ - cat << EOF -devmon version 1.0.5 -Automounts and unmounts optical and removable drives using udisks -Requires: udisks bash>=4 Recommended: consolekit zenity -Usage: devmon [AUTOMOUNT-OPTIONS] # Run as daemon to automount - devmon [MOUNT-OPTIONS] # Or run as client to manually un/mount -AUTOMOUNT-OPTIONS: (these can be used only in daemon mode) ---exec-on-device DEVICE "COMMAND" Execute COMMAND after mounting DEVICE ---exec-on-label "LABEL" "COMMAND" Execute COMMAND after mounting LABEL ---exec-on-video "COMMAND" Execute COMMAND after video DVD mount ---exec-on-audio "COMMAND" Execute COMMAND after audio CD insertion ---exec-on-disc "COMMAND" Execute COMMAND after data CD/DVD mount ---exec-on-drive "COMMAND" Execute COMMAND after drive mount ---exec-on-unmount "COMMAND" Execute COMMAND after unmount ---exec-on-remove "COMMAND" Execute COMMAND after drive removal - Where the following in COMMAND will be replaced with: - %d mount point directory (eg /media/cd) - %f device name (eg /dev/sdd1) - %l label of mounted volume - Multiple --exec-on-XXX options may be used to execute multiple commands. - Other exec-on-XXX commands are ignored if exec-on-device or -label executed. ---mount-options "OPTIONS" Default: $defaultmountoptions ---info-on-mount Show mounted drive info in a zenity dialog ---no-mount Don't mount anything, just exec (disables - --exec-on-video) ---no-unmount Don't unmount all removable drives on exit - -MOUNT-OPTIONS: (these can be used only in client mode) ---unmount-removable | -r Sync and unmount all removable drives and show - pop-up dialog (zenity installation required) ---unmount-recent | -c Unmount most recently mounted removable drive ---unmount-optical | -o Unmount all optical drives (error pop-up only) ---unmount-all | -u Same as --unmount-removable --unmount-optical ---unmount DIR|DEVICE Unmount DEVICE or mount point DIR ---eject DIR|DEVICE Unmount and eject DEVICE or mount point DIR ---mount-all | -a Mount all removable and optical drives ---mount DEVICE Mount DEVICE ---mount-options|--mount-fstype|--unmount-options|--eject-options "OPTIONS" - These options will be passed to udisks - -UNIVERSAL OPTIONS: (these can be used in both daemon and client modes) ---ignore-device DEVICE Ignore DEVICE (eg /dev/sdd1) ---ignore-label "LABEL" Ignore volume with LABEL ---sync | -s Add sync mount option for ext2-4 ntfs ufs, or - flush for fat & vfat (slower writing but safer) ---internal Also attempt to un/mount internal system drives - (this is mostly a fix for esata issues) ---no-gui | -g Do not show zenity pop-up dialogs -Instructions and updates: - http://igurublog.wordpress.com/downloads/script-devmon/ -EOF - exit -} - -test2() -{ - if [ "${2:0:1}" = "-" ] || [ "$2" = "" ]; then - echo "devmon: Option $1 requires an argument" 1>&2 - exit 1 - fi -} - -test3() -{ - if [ "${2:0:1}" = "-" ] || [ "$2" = "" ] || \ - [ "${3:0:1}" = "-" ] || [ "$3" = "" ]; then - echo "devmon: Option $1 requires two arguments" 1>&2 - exit 1 - fi -} - -unknown() -{ - echo "devmon: Unknown option $1" 1>&2 - echo " For help use: devmon --help" 1>&2 - exit 1 -} - -# parse command line -execoix=0 -execomx=0 -execovx=0 -execoax=0 -execodx=0 -execolx=0 -execoux=0 -execorx=0 -umntx=0 -mntx=0 -ejx=0 -igdevx=0 -iglabx=0 -while [ "$1" != "" ]; do - if [ "${1:0:1}" = "-" ]; then - case "$1" in - --help ) - help - exit - ;; - # don't use eval on these to preserve command strings - --exec-on-drive ) - test2 "$1" "$2" - execoi[$execoix]="$2" - (( execoix++ )) - shift - ;; - --exec-on-disc ) - test2 "$1" "$2" - execom[$execomx]="$2" - (( execomx++ )) - shift - ;; - --exec-on-video ) - test2 "$1" "$2" - execov[$execovx]="$2" - (( execovx++ )) - shift - ;; - --exec-on-audio ) - test2 "$1" "$2" - execoa[$execoax]="$2" - (( execoax++ )) - shift - ;; - --exec-on-device ) - test3 "$1" "$2" "$3" - execod1[$execodx]="$2" - execod2[$execodx]="$3" - (( execodx++ )) - shift 2 - ;; - --exec-on-label ) - test3 "$1" "$2" "$3" - execol1[$execolx]="$2" - execol2[$execolx]="$3" - (( execolx++ )) - shift 2 - ;; - --exec-on-unmount ) - test2 "$1" "$2" - execou[$execoux]="$2" - (( execoux++ )) - shift - ;; - --exec-on-remove ) - test2 "$1" "$2" - execor[$execorx]="$2" - (( execorx++ )) - shift - ;; - --info-on-mount ) - infomount=1 - ;; - --no-mount ) - nomount=1 - ;; - --sync ) - syncopt=1 - ;; - --unmount-on-exit ) - # leave for usage compat with versions prior to 1.0.1 - ;; - --no-unmount ) - nounmount=1 - ;; - --unmount-all ) - unmountrem=1 - unmountoptical=1 - ;; - --unmount-removable ) - unmountrem=1 - ;; - --unmount-optical ) - unmountoptical=1 - ;; - --unmount-recent ) - unmountrecent=1 - ;; - --unmount ) - test2 "$1" "$2" - umnt[$umntx]="$2" - (( umntx++ )) - shift - ;; - --mount-all ) - mountall=1 - ;; - --mount ) - test2 "$1" "$2" - mnt[$mntx]="$2" - (( mntx++ )) - shift - ;; - --eject ) - test2 "$1" "$2" - ej[$ejx]="$2" - (( ejx++ )) - shift - ;; - --mount-options ) - test2 "$1" "$2" - mountoptions="$2" - shift - ;; - --mount-fstype ) - test2 "$1" "$2" - mountfstype="$2" - shift - ;; - --unmount-options ) - test2 "$1" "$2" - unmountoptions="$2" - shift - ;; - --eject-options ) - test2 "$1" "$2" - ejectoptions="$2" - shift - ;; - --internal ) - internal=1 - ;; - --nogui | --no-gui ) - nogui=1 - ;; - --ignore-device ) - test2 "$1" "$2" - igdev[$igdevx]="$2" - (( igdevx++ )) - shift - ;; - --ignore-label ) - test2 "$1" "$2" - iglab[$iglabx]="$2" - (( iglabx++ )) - shift - ;; - --* ) - unknown "$1";; - -* ) - o="${1:1}" - while [ "$o" != "" ]; do - case "${o:0:1}" in - r ) - unmountrem=1;; - o ) - unmountoptical=1;; - u ) - unmountrem=1 - unmountoptical=1 - ;; - a ) - mountall=1;; - s ) - syncopt=1;; - c ) - unmountrecent=1;; - g ) - nogui=1;; - h ) - help - exit - ;; - * ) - unknown "-${o:0:1}";; - esac - o="${o:1}" - done - ;; - esac - else - unknown "$1" - fi - shift -done -(( mountmode = umntx + mntx + ejx + unmountrem + unmountoptical + mountall + unmountrecent )) - -# Warnings -if [ "$(whoami)" = "root" ]; then - echo "WARNING: running devmon as root is usually not required or recommended" 1>&2 -fi - -if (( execoix + execomx + execovx + execoax + execodx + execolx + execoux + execorx \ - + nounmount + infomount != 0 )) && (( mountmode != 0 )); then - echo "WARNING: devmon automount options ignored in mount mode" 1>&2 -fi - -driveinfo() #$1=dev #Optional $2=quiet -{ - unset systeminternal usage ismounted presentationnopolicy hasmedia \ - opticaldisc numaudiotracks type partition media blank label - uinfos=`udisks --show-info $1 2> /dev/null` - label=`echo "$uinfos" | grep -m 1 "^ label:" | sed 's/ *label: *\(.*\)/\1/'` - listinfos=`echo "$uinfos" | grep \ - -e "^ system internal:" \ - -e "^ usage:" \ - -e "^ type:" \ - -e "^ is mounted:" \ - -e "^ presentation nopolicy:" \ - -e "^ has media" \ - -e "^ optical disc:" \ - -e " blank:" \ - -e " num audio tracks:" \ - -e "^ partition:" \ - -e " media:"` - # The change for type= is to take only its first value in listinfos - listinfos=$(echo "$listinfos" | sed 's/ //g - s/:/=/ - s/opticaldisc=/&1/ - s/type=\(.*\)/type=${type:-\1}/ - s/[()]//g - s/partition=/&1/') - eval "$listinfos" - if (( internal == 1 )); then - systeminternal="ignored" - fi - # Take only the first character - hasmedia=${hasmedia:0:1} - # If "partition:" not find in listinfos, should mean it is not a partition - partition=${partition:-0} - nopolicy="$presentationnopolicy" - if (( mountmode == 0 )) && [ "$systeminternal" != "1" ] && [ "$2" != "quiet" ]; then - if [ "$usage" = "filesystem" ] || [ "$opticaldisc" = "1" ]; then - echo "device: [$1]" - echo " systeminternal: [$systeminternal]" - echo " usage: [$usage]" - echo " type: [$type]" - echo " label: [$label]" - echo " ismounted: [$ismounted]" - echo " nopolicy: [$nopolicy]" - echo " hasmedia: [$hasmedia]" - echo " opticaldisc: [$opticaldisc]" - echo " numaudiotracks: [$numaudiotracks]" - echo " blank: [$blank]" - echo " media: [$media]" - echo " partition: [$partition]" - fi - fi -} - -ignoredevice() -{ - idx=0 - while (( idx < igdevx )); do - if [ "$1" = "${igdev[$idx]}" ]; then - echo "devmon: ignored device $1" - return 0 - fi - (( idx++ )) - done - return 1 -} - -ignorelabel() -{ - ilx=0 - while (( ilx < iglabx )); do - if [ "$1" = "${iglab[$ilx]}" ]; then - echo "devmon: ignored label $1" - return 0 - fi - (( ilx++ )) - done - return 1 -} - -execcommands() # $exectype "${exec[@]}" -{ - exectype="$1" - shift - while [ "$1" != "" ]; do - usercmd="$1" - usercmd="${usercmd//%f/$dv}" - usercmd="${usercmd//%l/'$lb'}" - usercmd="${usercmd//%d/'$point'}" - if [ "$usercmd" != "" ]; then - echo "devmon: [$exectype] eval $usercmd &" - eval $usercmd & - fi - shift - done -} - -mountdev() # $1=device [$2=label] [$3=devtype or fstype] -{ - # set label comment - if [ "$2" = "" ]; then - lblcmt="" - else - lblcmt="($2)" - fi - # set mount-fstype option - if [ "$mountfstype" != "" ]; then - fst="--mount-fstype" - else - fst="" - fi - # set default mount options - if [ "$mountoptions" != "" ]; then - mopts="$mountoptions" - else - mopts="$defaultmountoptions" - fi - # set sync mount options - if (( syncopt == 1 )); then - case "$3" in - ext2 | ext3 | ext4 | ufs | ntfs ) - mopts="$mopts,sync";; - fat | vfat ) - mopts="$mopts,flush";; - esac - fi - # mount - mntmsg="devmon: mount $1 --mount-options $mopts $fst $mountfstype $lblcmt" - if [ "$3" != "nofs" ]; then - echo "$mntmsg" - fi - umsg=`udisks --mount $1 --mount-options "$mopts" $fst $mountfstype 2>&1` - mounterr="$?" - # get mount point - point=`echo "$umsg" | grep "^Mounted " | sed 's/^Mounted .* at \(.*\)/\1/'` - if [ "$mounterr" != "0" ] || [ "$point" = "" ]; then - # if $3=nofs then there was no apparent filesystem but we tried to mount it - # anyway in case it didn't report the filesystem accurately, so ignore the - # error - if [ "$3" != "nofs" ]; then - echo "$umsg" 1>&2 - echo "devmon: error mounting $1 ($mounterr)" 1>&2 - if (( mountmode == 0 )) && (( polkiterrgiven != 1 )) && \ - [ "$(echo "$umsg" | grep "Not Authorized")" != "" ]; then - if (( nogui != 1 )); then - ( sleep 3 && WINDOWID="" zenity --error --no-wrap --title="devmon error" \ - --text="udisks functions are not authorized through policykit,\nso devmon cannot automount drives.\nPlease see devmon's consolekit installation instructions:\n\nhttp://igurublog.wordpress.com/downloads/script-devmon/#install\n\n(To silence this pop-up add --no-gui to devmon's command line.)" &> /dev/null ) & - fi - echo "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@" 1>&2 - echo "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@" 1>&2 - echo "udisks functions are not authorized through policykit," 1>&2 - echo "so devmon cannot automount drives." 1>&2 - echo "Please see devmon's consolekit installation instructions:" 1>&2 - echo "http://igurublog.wordpress.com/downloads/script-devmon/#install" 1>&2 - echo "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@" 1>&2 - echo "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@" 1>&2 - polkiterrgiven=1 - fi - fi - uerr=3 - return 3 - elif [ "$3" = "nofs" ]; then - # no filesystem reported but successful mount - echo "$mntmsg" - fi - echo "$umsg" -} - -unmountdev() # $1=device -{ - if [ "$unmountoptions" != "" ]; then - echo "devmon: unmount $1 --unmount-options $unmountoptions" - uerrmsg=`udisks --unmount $1 --unmount-options "$unmountoptions" 2>&1` - else - echo "devmon: unmount $1" - uerrmsg=`udisks --unmount $1 2>&1` - fi - if [ "$uerrmsg" != "" ]; then - # bug: udisks returns $?==0 when unmount fails - echo "$uerrmsg" - uerr=3 - return 3 - fi -} - -ejectdev() -{ - if [ "$ejectoptions" != "" ]; then - echo "devmon: eject $1 --eject-options $ejectoptions" - udisks --eject $1 --eject-options "$ejectoptions" - else - echo "devmon: eject $1" - udisks --eject $1 - fi - if [ "$?" != "0" ]; then - uerr=3 - return 3 - fi -} - -mountdrive() # $1=device $2=label [$3=devtype or fstype] -{ - dv="$1" - lb="$2" - tp="$3" - unset point - - if ( ignoredevice "$dv" ) || ( ignorelabel "$lb" ); then - return - fi - - # mount - if [ "$tp" != "audiocd" ] && (( nomount != 1 )); then - mountdev $dv "$lb" "$tp" - if [ "$?" != "0" ]; then - return - fi - fi - - # exec on device - unset execdone - x=0 - while (( x < execodx )); do - if [ "${execod1[$x]}" = "$dv" ]; then - usercmd="${execod2[$x]}" - usercmd="${usercmd//%f/$dv}" - usercmd="${usercmd//%l/'$lb'}" - usercmd="${usercmd//%d/'$point'}" - if [ "$usercmd" != "" ]; then - echo "devmon: [exec on device] eval $usercmd" - eval $usercmd & - execdone=1 - fi - fi - (( x++ )) - done - if (( execdone == 1 )); then return; fi - - # exec on label - x=0 - while (( x < execolx )); do - if [ "${execol1[$x]}" = "$lb" ]; then - usercmd="${execol2[$x]}" - usercmd="${usercmd//%f/$dv}" - usercmd="${usercmd//%l/'$lb'}" - usercmd="${usercmd//%d/'$point'}" - if [ "$usercmd" != "" ]; then - echo "devmon: [exec on label] eval $usercmd" - eval $usercmd & - execdone=1 - fi - fi - (( x++ )) - done - if (( execdone == 1 )); then return; fi - - # exec on video - if [ "$tp" = "dvd" ] && [ "$point" != "" ] && [ -d "$point/VIDEO_TS" ]; then - echo "devmon: videodvd $dv ($lb) on $point" - if (( execovx != 0 )); then - execcommands "exec on video" "${execov[@]}" - fi - return - fi - - # exec on audio - if [ "$tp" = "audiocd" ]; then - echo "devmon: audiocd $dv ($lb)" - if (( execoax != 0 )); then - execcommands "exec on audio" "${execoa[@]}" - fi - return - fi - - # exec on disc - if [ "$tp" = "optical" ] || [ "$tp" = "dvd" ]; then - if [ "$point" != "" ] || (( nomount == 1 )); then - if (( execomx != 0 )); then - execcommands "exec on disc" "${execom[@]}" - fi - fi - return - fi - - # exec on drive - if [ "$point" != "" ] || (( nomount == 1 )); then - if (( execoix != 0 )); then - execcommands "exec on drive" "${execoi[@]}" - fi - fi - - # info on mount - if [ "$point" != "" ] && (( infomount == 1 )) && (( nomount != 1 )); then - sleep .5 - echo "devmon: [info on mount] $dv" - if (( nogui != 1 )); then - WINDOWID="" zenity --info --text="The following device has been mounted:\n\n$(df -hT "$dv" \ - | grep "$dv" | awk '{print "Device:\\t"$1"\x0AType:\\t"$2"\nSize:\\t\\t"$3"\nUsed:\\t"$4"\n""Avail:\\t"$5"\nUse%:\\t"$6"\nMount:\\t"$7,$8,$9,$10}')\nLabel:\\t$lb" --title="devmon mount" & - fi - df -hT "$dv" - fi -} - -mountalldrives() -{ - # Mount all optical drives, no exec - x=0 - while [ -e /dev/sr$x ]; do - driveinfo /dev/sr$x - if [ "$numaudiotracks" = "" ]; then - numaudiotracks=0 - fi - if [ "$systeminternal" != "1" ] && [ "$opticaldisc" = "1" ] && \ - [ "$ismounted" != "1" ] && [ "$hasmedia" != "0" ] && \ - [ "$blank" != "1" ] && (( numaudiotracks == 0 )) && \ - [ "$nopolicy" != "1" ]; then - if ( ignoredevice "/dev/sr$x" ) || ( ignorelabel "$label" ); then - (( x++ )) - continue - fi - mountdev /dev/sr$x "$label" - eval notejectedsr$x=1 - fi - (( x++ )) - done - # Mount removable drives, no exec - IFSOLD="$IFS" - IFS=$'\n' - partlist=`grep " sd[a-z0-9]*$" /proc/partitions | sed 's/.* \(sd[a-z0-9]*\)/\1/'` - for p in $partlist; do - if ( ignoredevice "/dev/$p" ); then - continue - fi - driveinfo /dev/$p - if ( ignorelabel "$label" ); then - continue - else - if [ "$systeminternal" != "1" ] && [ "$opticaldisc" != "1" ] && \ - [ "$ismounted" = "0" ] && [ "$nopolicy" != "1" ]; then - if [ "$usage" = "filesystem" ]; then - echo "mountdev /dev/$p $label $type" - mountdev /dev/$p "$label" "$type" - else - mountdev /dev/$p "$label" nofs - fi - fi - fi - done - IFS="$IFSOLD" -} - -trapexit() -{ - kill $COPROC_PID 2> /dev/null - - # prevent trap code from executing multiple times on different signals - if (( trapdone != 1 )); then - trapdone=1 - # Unmount All - if (( nounmount != 1 )); then - IFSOLD="$IFS" - IFS=$'\n' - uerr=0 - partlist=`grep " sd[a-z0-9]*$" /proc/partitions | \ - sed 's/.* \(sd[a-z0-9]*\)/\1/'` - for p in $partlist; do - if ( ignoredevice "/dev/$p" ); then - continue - fi - driveinfo /dev/$p - if ( ignorelabel "$label" ); then - continue - else - if [ "$systeminternal" != "1" ] && [ "$opticaldisc" != "1" ] && \ - [ "$usage" = "filesystem" ] && [ "$ismounted" = "1" ]; then - echo "devmon: [on exit] unmount /dev/$p &" - udisks --unmount /dev/$p & - if [ "$?" != "0" ]; then - uerr=3 - fi - fi - fi - done - IFS="$IFSOLD" - fi - echo 'devmon: stopped' - exit $uerr - fi -} - -# Client Mode -if (( mountmode != 0 )); then - uerr=0 - if (( unmountrem == 1 )) || (( unmountrecent == 1 )); then - y=0 - unset udrive zpid - IFSOLD="$IFS" - IFS=$'\n' - if (( unmountrem == 1 )); then - # Unmount All Removable Drives - partlist=`grep " sd[a-z0-9]*$" /proc/partitions | sed 's/.* \(sd[a-z0-9]*\)/\1/'` - msgtitle="devmon unmount" - else - # Unmount Recent - partlist=`mount | grep "^/dev/.* on " | sed 's/^\/dev\/\(.*\) on .*/\1/' \ - | grep -v -e "null" -e "shm" -e "mapper" -e "snd" \ - -e "video" -e "random" | tac` - msgtitle="devmon unmount recent" - fi - for p in $partlist; do - if ( ignoredevice "/dev/$p" ); then - continue - fi - driveinfo /dev/$p - if ( ignorelabel "$label" ); then - continue - else - if [ "$systeminternal" != "1" ] && [ "$opticaldisc" != "1" ] \ - && [ "$ismounted" = "1" ]; then - udrive[$y]="/dev/$p" - (( y++ )) - if (( unmountrem != 1 )); then break; fi - fi - fi - done - IFS="$IFSOLD" - if (( y == 0 )); then - msg="No removable drives are mounted" - echo "$msg" - else - msg="Unmounting ${udrive[@]}...\n\n(This dialog will close when the devices are unmounted)" - echo "Preparing to unmount ${udrive[@]}" - fi - if (( nogui != 1 )); then - WINDOWID="" zenity --info --title="$msgtitle" --text="$msg" &> /dev/null & - zpid=$! - fi - if (( y > 0 )); then - echo "devmon: sync" - sync - for d in ${udrive[@]}; do - unmountdev $d - if [ "$?" != "0" ] && (( nogui != 1 )); then - driveinfo "$d" quiet - if [ "$label" = "" ]; then - lb="" - else - lb=" ($label)" - fi - msg="Unmount error on $d$lb:\n\n$uerrmsg" - WINDOWID="" zenity --error --title="$msgtitle" --text="$msg" &> /dev/null & - fi - done - echo "devmon: sync" - sync - fi - if [ "$zpid" != "" ]; then - sleep 2 - kill $zpid 2> /dev/null - fi - fi - - # Unmount Optical - if (( unmountoptical == 1 )); then - x=0 - while [ -e "/dev/sr$x" ]; do - if ( ignoredevice "/dev/sr$x" ); then - (( x++ )) - continue - fi - driveinfo /dev/sr$x - if ( ignorelabel "$label" ); then - (( x++ )) - continue - else - if [ "$systeminternal" != "1" ] && [ "$opticaldisc" = "1" ] && \ - [ "$ismounted" = "1" ]; then - unmountdev /dev/sr$x - if [ "$?" != "0" ] && (( nogui != 1 )); then - if [ "$label" = "" ]; then - lb="" - else - lb=" ($label)" - fi - msg="Unmount error on /dev/sr$x$lb:\n\n$uerrmsg" - WINDOWID="" zenity --error --title="devmon unmount optical" \ - --text="$msg" &> /dev/null & - fi - fi - fi - (( x++ )) - done - fi - - # Unmount DIR|DEVICE - if (( umntx > 0 )); then - x=0 - while (( x < umntx )); do - d="${umnt[$x]}" - # remove trailing slash - if [ "$d" != "/" ]; then - d="${d%/}" - fi - if [ "${d:0:5}" = "/dev/" ]; then - # Unmount DEVICE - unmountdev "$d" - else - # Unmount DIR - if [ "$(dirname "$d")" = "." ]; then - if [ -d "$(pwd)/$d" ]; then - d="$(pwd)/$d" - elif [ -d "/media/$d" ]; then - d="/media/$d" - elif [ -e "/dev/$d" ] && [ "$(mount | grep "^/dev/$d on ")" != "" ]; then - unmountdev "/dev/$d" - (( x++ )) - continue - fi - fi - if [ ! -d "$d" ]; then - echo "devmon: No such directory or mounted device $d" 1>&2 - uerr=3 - else - dv=`mount | grep -m 1 " on $d type " | awk '{print $1}'` - if [ "$dv" = "" ]; then - echo "devmon: Nothing mounted on $d (mtab)" 1>&2 - uerr=3 - else - unmountdev "$dv" - fi - fi - fi - (( x++ )) - done - fi - - # Eject DIR|DEVICE - if (( ejx > 0 )); then - x=0 - while (( x < ejx )); do - d="${ej[$x]}" - # remove trailing slash - if [ "$d" != "/" ]; then - d="${d%/}" - fi - dv="" - if [ "${d:0:5}" = "/dev/" ]; then - # Eject DEVICE - dv="$d" - else - # Eject DIR - if [ "$(dirname "$d")" = "." ]; then - if [ -d "$(pwd)/$d" ]; then - d="$(pwd)/$d" - elif [ -d "/media/$d" ]; then - d="/media/$d" - elif [ -e "/dev/$d" ] && [ "$(mount | grep "^/dev/$d on ")" != "" ]; then - dv="/dev/$d" - fi - fi - if [ "$dv" = "" ]; then - if [ ! -d "$d" ]; then - echo "devmon: No such directory or mounted device $d" 1>&2 - uerr=3 - else - dv=`mount | grep -m 1 " on $d type " | awk '{print $1}'` - if [ "$dv" = "" ]; then - echo "devmon: Nothing mounted on $d (mtab)" 1>&2 - uerr=3 - fi - fi - fi - fi - if [ "$dv" != "" ]; then - driveinfo "$dv" - if [ "$systeminternal" != "1" ] && [ "$opticaldisc" = "1" ] && \ - [ "$ismounted" = "1" ]; then - unmountdev "$dv" - fi - ejectdev "$dv" - fi - (( x++ )) - done - fi - - # Mount DEVICE - if (( mntx > 0 )); then - x=0 - while (( x < mntx )); do - d="${mnt[$x]}" - # remove trailing slash - if [ "$d" != "/" ]; then - d="${d%/}" - fi - if [ "$(dirname "$d")" = "." ] && [ "${d:0:5}" != "/dev/" ]; then - d="/dev/$d" - fi - driveinfo "$d" quiet - if [ "$opticaldisc" = "1" ]; then - mountdev $d "$label" - else - mountdev $d "$label" "$type" - fi - (( x++ )) - done - fi - - # Mount All Unmounted - if (( mountall == 1 )); then - mountalldrives - fi - - exit $uerr -fi - -# Daemon Mode -if [ "$mountfstype" != "" ]; then - echo "WARNING: --mount-fstype ignored in daemon mode" 1>&2 - mountfstype="" -fi -if [ "$unmountoptions" != "" ]; then - echo "WARNING: --unmount-options ignored in daemon mode" 1>&2 - unmountoptions="" -fi -if [ "$ejectoptions" != "" ]; then - echo "WARNING: --eject-options ignored in daemon mode" 1>&2 - ejectoptions="" -fi -pidcount=`ps h -C ${0//*\//} -o pid | wc -l` -if (( pidcount > 2 )); then - echo - echo "WARNING: multiple instances of devmon appear to be running" - echo -fi - -# Trigger udisks daemon start two ways -if [ -e /dev/sr0 ]; then - udisks --poll-for-media /dev/sr0 -fi -udisks --show-info /dev/sda > /dev/null -sleep 2 # helps successful sr0 startup mount on reboot - - -# Startup Mounting -if (( nomount != 1 )); then - mountalldrives -fi - -# Start monitoring -coproc udisks --monitor -err=$? -trap trapexit EXIT SIGINT SIGTERM SIGQUIT -trap "echo devmon: ignored HUP" SIGHUP - -if [ $err != "0" ] || [ ! ps -p $COPROC_PID &>/dev/null ]; then - echo "devmon: unable to start udisks --monitor" 1>&2 - echo " is udisks installed and dbus running?" 1>&2 - exit 2 -fi - - -# Monitoring Loop -while ps -p $COPROC_PID &>/dev/null; do - read -u ${COPROC[0]} - echo "===========================================" - echo "$REPLY" - event="${REPLY%:*}" - devpath="${REPLY#*:}" - devpath="/dev/${devpath##*/}" - if [ "$event" != "" ] && [ "$devpath" != "/dev/" ] && [ -e "$devpath" ]; then - case $event in - added ) - driveinfo $devpath - if [ "$systeminternal" != "1" ] && [ "$ismounted" = "0" ] && \ - [ "$nopolicy" != "1" ]; then - if [ "$usage" = "filesystem" ]; then - mountdrive $devpath "$label" "$type" - else - mountdrive $devpath "$label" nofs - fi - fi - ;; - job-changed ) - ;; - removed ) - ;; - changed ) - driveinfo $devpath - eval notejected=\$notejected${devpath#/dev/} - eval devmounted=\$devmounted${devpath#/dev/} - eval devmounted${devpath#/dev/}="$ismounted" - # If notejected==1 then cd has not been ejected and was probably - # manually unmounted, so don't automount it. Otherwise - # devmon will instantly mount any manual unmount. - if [ "$systeminternal" != "1" ] && [ "$opticaldisc" = "1" ] && \ - [ "$ismounted" != "1" ] && [ "$hasmedia" != "0" ] && \ - [ "$blank" != "1" ] && (( notejected != 1 )) && \ - [ "$nopolicy" != "1" ]; then - if [ "$media" = "optical_dvd" ]; then - mountdrive $devpath "$label" dvd - elif (( numaudiotracks > 0 )); then - mountdrive $devpath "$label" audiocd - else - mountdrive $devpath "$label" optical - fi - eval notejected${devpath#/dev/}=1 - else - if [ "$systeminternal" != "1" ] && \ - [ "$ismounted" != "1" ] && [ "$hasmedia" = "0" ]; then - # disc ejected - echo "devmon: $devpath eject detected" - eval notejected${devpath#/dev/}=0 - fi - if [ "$systeminternal" != "1" ] && [ "$ismounted" != "1" ] && \ - [ "$nopolicy" != "1" ] && [ "$devmounted" = "1" ]; then - # exec-on-unmount - if (( execoux != 0 )); then - if ( ! ignoredevice "$devpath" ) && ( ! ignorelabel "$label" ); then - dv="$devpath" - execcommands "exec on unmount" "${execou[@]}" - fi - fi - fi - fi - ;; - esac - elif [ "$event" = "removed" ]; then - eval unset devmounted${devpath#/dev/} - # exec-on-remove - if (( execorx != 0 )); then - if ( ! ignoredevice "$devpath" ); then - unset lb point - dv="$devpath" - execcommands "exec on remove" "${execor[@]}" - fi - fi - fi -done - -exit - -# CHANGELOG -# 1.0.5: --exec-on-unmount now executes only once per unmount -# 1.0.4: added --exec-on-unmount, --exec-on-remove -# added multiple instance warning -# %f device spec no longer passed in quotes to commands -# 1.0.3: help updated for sync -# corrected exec-on-drive bug introduced in 1.0.1 -# 1.0.2: --sync adds sync for ntfs -# 1.0.1: added --sync -# added --no-unmount; unmount-on-exit is now default -# obey UDISKS_PRESENTATION_NOPOLICY to inhibit automount -# added unmount-all error pop-ups -# 1.0.0: added --unmount-recent -# improved udisks mount info to stdout -# improved mount/unmount without apparent filesystem -# 0.9.5: ignore trailing slash in un/mount dir/dev specs -# attempt to mount no filesystem in case there is one -# 0.9.4: polkit error more selective -# 0.9.3: corrected problems with spaces in volume labels -# corrected un/mounting of partitionless devices -# corrected --ignore-devices problem -# added not authorized pop-up error -# 0.9.2: added --internal -# 0.9.1: corrected --unmount-on-removable not recognized -# 0.9.0: changed --unmount-all to --unmount-removable -# added --unmount-all (now includes optical) -# added --unmount-optical -# added --unmount DIR|DEVICE -# added --eject DIR|DEVICE -# added --mount-all -# added --mount DEVICE -# added --info-on-mount -# added pass options to udisks -# better error msg from udisks -# individual drive eject detection -# no limit on number of optical drives -# 0.8.2: more verbose errors -# run as root changed to warning -# 0.8.1: added --unmount-on-exit -# adjusted start daemon trigger, timing -# added 'do not run as root' catcher -# added trap to ignore SIGHUP - diff --git a/opensuse/tdebase/dont-always-start-kaccess.diff b/opensuse/tdebase/dont-always-start-kaccess.diff deleted file mode 100644 index f50747274..000000000 --- a/opensuse/tdebase/dont-always-start-kaccess.diff +++ /dev/null @@ -1,66 +0,0 @@ -Index: kcontrol/access/kcmaccess.cpp -=================================================================== ---- kcontrol/access/kcmaccess.cpp.orig -+++ kcontrol/access/kcmaccess.cpp -@@ -103,10 +103,57 @@ void ExtendedIntNumInput::slotSliderValu - - static bool needToRunKAccessDaemon( KConfig *config ) - { -- // We always start the KAccess Daemon, if it is not needed, -- // it will terminate itself after configuring the AccessX -- // features. -- return true; -+ KConfigGroup bell( config, "Bell" ); -+ -+ if (!bell.readBoolEntry("SystemBell", true)) -+ return true; -+ if (bell.readBoolEntry("ArtsBell", false)) -+ return true; -+ if (bell.readBoolEntry("VisibleBell", false)) -+ return true; -+ -+ KConfigGroup keyboard( config, "Keyboard" ); -+ -+ if (keyboard.readBoolEntry("StickyKeys", false)) -+ return true; -+ if (keyboard.readBoolEntry("SlowKeys", false)) -+ return true; -+ if (keyboard.readBoolEntry("BounceKeys", false)) -+ return true; -+ if (keyboard.readBoolEntry("Gestures", true)) -+ return true; -+ // Find out whether the gestures are activated by default in the X configuration or not. -+ int major = XkbMajorVersion; -+ int minor = XkbMinorVersion; -+ if (XkbLibraryVersion(&major, &minor)) -+ { -+ int opcode_rtrn; -+ int error_rtrn; -+ int xkb_opcode; -+ if (XkbQueryExtension(qt_xdisplay(), &opcode_rtrn, &xkb_opcode, &error_rtrn, -+ &major, &minor)) -+ { -+ if(XkbDescPtr xkbdesc = XkbGetMap(qt_xdisplay(), 0, XkbUseCoreKbd)) -+ { -+ if(XkbGetControls(qt_xdisplay(), XkbAllControlsMask/*XkbAccessXKeysMask*/, xkbdesc ) == Success ) -+ { -+ if(xkbdesc->ctrls->enabled_ctrls & XkbAccessXKeysMask) -+ { -+ XkbFreeClientMap(xkbdesc,0,True); -+ return true; -+ } -+ } -+ XkbFreeClientMap(xkbdesc,0,True); -+ } -+ } -+ } -+ -+ KConfigGroup mouse( config, "Mouse" ); -+ -+ if (mouse.readBoolEntry("MouseKeys", false)) -+ return true; -+ -+ return false; // don't need it - } - - QString mouseKeysShortcut (Display *display) { diff --git a/opensuse/tdebase/fileshareset.8.gz b/opensuse/tdebase/fileshareset.8.gz deleted file mode 100644 index c311d10b3..000000000 Binary files a/opensuse/tdebase/fileshareset.8.gz and /dev/null differ diff --git a/opensuse/tdebase/fileshareset2.tar.bz2 b/opensuse/tdebase/fileshareset2.tar.bz2 deleted file mode 100644 index 5e26bb796..000000000 Binary files a/opensuse/tdebase/fileshareset2.tar.bz2 and /dev/null differ diff --git a/opensuse/tdebase/fix-desktop-icons.diff b/opensuse/tdebase/fix-desktop-icons.diff deleted file mode 100644 index 27d83f685..000000000 --- a/opensuse/tdebase/fix-desktop-icons.diff +++ /dev/null @@ -1,250 +0,0 @@ -Index: kcontrol/componentchooser/componentchooser.desktop -=================================================================== ---- kcontrol/componentchooser/componentchooser.desktop.orig -+++ kcontrol/componentchooser/componentchooser.desktop -@@ -1,6 +1,6 @@ - [Desktop Entry] - Exec=kcmshell componentchooser --Icon=misc -+Icon=kcmcomponentchooser - Type=Application - - -Index: kcontrol/taskbar/kcmtaskbar.desktop -=================================================================== ---- kcontrol/taskbar/kcmtaskbar.desktop.orig -+++ kcontrol/taskbar/kcmtaskbar.desktop -@@ -1,5 +1,5 @@ - [Desktop Entry] --Icon=kmenu -+Icon=kcmtaskbar - Type=Application - DocPath=kcontrol/kcmtaskbar/index.html - Exec=kcmshell kcmtaskbar -Index: kcontrol/nics/nic.desktop -=================================================================== ---- kcontrol/nics/nic.desktop.orig -+++ kcontrol/nics/nic.desktop -@@ -2,7 +2,7 @@ - Exec=kcmshell nic - Type=Application - DocPath=kinfocenter/nics/index.html --Icon=network -+Icon=kcmnic - - - X-KDE-Library=nic -Index: kcontrol/input/mouse.desktop -=================================================================== ---- kcontrol/input/mouse.desktop.orig -+++ kcontrol/input/mouse.desktop -@@ -1,6 +1,6 @@ - [Desktop Entry] - Exec=kcmshell mouse --Icon=mouse -+Icon=kcmmouse - Type=Application - DocPath=kcontrol/mouse/index.html - -Index: kcontrol/smserver/kcmsmserver.desktop -=================================================================== ---- kcontrol/smserver/kcmsmserver.desktop.orig -+++ kcontrol/smserver/kcmsmserver.desktop -@@ -1,5 +1,5 @@ - [Desktop Entry] --Icon=exit -+Icon=kcmsmserver - Type=Application - DocPath=kcontrol/kcmsmserver/index.html - Exec=kcmshell kcmsmserver -Index: kcontrol/kded/kcmkded.desktop -=================================================================== ---- kcontrol/kded/kcmkded.desktop.orig -+++ kcontrol/kded/kcmkded.desktop -@@ -1,6 +1,6 @@ - [Desktop Entry] - Exec=kcmshell kcmkded --Icon=services -+Icon=kcmkded - Type=Application - - -Index: kcontrol/konq/desktop.desktop -=================================================================== ---- kcontrol/konq/desktop.desktop.orig -+++ kcontrol/konq/desktop.desktop -@@ -1,7 +1,7 @@ - [Desktop Entry] - Type=Application - DocPath=kcontrol/desktop/index.html#desktop-number --Icon=desktop -+Icon=kcmdesktop - Exec=kcmshell desktop - - -Index: kcontrol/konq/desktopbehavior.desktop -=================================================================== ---- kcontrol/konq/desktopbehavior.desktop.orig -+++ kcontrol/konq/desktopbehavior.desktop -@@ -1,7 +1,7 @@ - [Desktop Entry] - Type=Application - DocPath=kcontrol/desktopbehavior/index.html --Icon=desktop -+Icon=kcmdesktopbehavior - Exec=kcmshell desktopbehavior - - -Index: kcontrol/privacy/privacy.desktop -=================================================================== ---- kcontrol/privacy/privacy.desktop.orig -+++ kcontrol/privacy/privacy.desktop -@@ -1,5 +1,5 @@ - [Desktop Entry] --Icon=trashcan_empty -+Icon=kcmprivacy - Comment=Privacy - a kcontrol module to clean unwanted traces the user leaves on the system - Comment[af]=Privaatheid - 'n Beheer module wat voetspore wat deur gebruikers op die stelsel gelaat word skoon maak - Comment[ar]=الخصوصية - وحدة kcontrol لتنظي٠الآثار غير المرغوب بها التي يتركها المستخدم على النظام -Index: kcontrol/crypto/crypto.desktop -=================================================================== ---- kcontrol/crypto/crypto.desktop.orig -+++ kcontrol/crypto/crypto.desktop -@@ -1,5 +1,5 @@ - [Desktop Entry] --Icon=encrypted -+Icon=kcmcrypto - Type=Application - Exec=kcmshell crypto - DocPath=kcontrol/crypto/index.html -Index: kcontrol/kio/netpref.desktop -=================================================================== ---- kcontrol/kio/netpref.desktop.orig -+++ kcontrol/kio/netpref.desktop -@@ -76,7 +76,7 @@ Comment[zh_CN]=é…置通用网络首选é - Comment[zh_TW]=設定一般網路喜好設定,例如逾時值 - Comment[zu]=Hlanganisela okuncanyelwa uwonkewonke koxhumano olusazekile, njengamanani esikhathi sokuphuma - Exec=kcmshell netpref --Icon=network -+Icon=kcmnetpref - Keywords=timeout,iopref,netpref,network preferences,ftp - Keywords[be]=ТÑрмін чаканнÑ,УлаÑціваÑці Ñеткі,timeout,iopref,netpref,network preferences,ftp - Keywords[bg]=проÑрочка, време, времето, пауза, прекъÑване, връзка, timeout, iopref, netpref, network preferences, ftp -Index: kcontrol/konqhtml/khtml_filter.desktop -=================================================================== ---- kcontrol/konqhtml/khtml_filter.desktop.orig -+++ kcontrol/konqhtml/khtml_filter.desktop -@@ -1,7 +1,7 @@ - [Desktop Entry] - Type=Application - DocPath=kcontrol/khtml/index.html#khtml-adblock --Icon=filter -+Icon=kcmkhtml_filter - Exec=kcmshell khtml_filter - - X-KDE-Library=konqhtml -Index: kcontrol/joystick/joystick.desktop -=================================================================== ---- kcontrol/joystick/joystick.desktop.orig -+++ kcontrol/joystick/joystick.desktop -@@ -173,5 +173,5 @@ Type=Application - X-KDE-FactoryName=kcm_joystick - X-KDE-Library=joystick - X-KDE-Test-Module=true --Icon=joystick -+Icon=kcmjoystick - Categories=Qt;KDE;X-KDE-settings-hardware; -Index: kcontrol/colors/colors.desktop -=================================================================== ---- kcontrol/colors/colors.desktop.orig -+++ kcontrol/colors/colors.desktop -@@ -1,6 +1,6 @@ - [Desktop Entry] - Exec=kcmshell colors --Icon=colorscm -+Icon=kcmcolors - Type=Application - DocPath=kcontrol/colors/index.html - -Index: kcontrol/performance/kcmperformance.desktop -=================================================================== ---- kcontrol/performance/kcmperformance.desktop.orig -+++ kcontrol/performance/kcmperformance.desktop -@@ -1,5 +1,5 @@ - [Desktop Entry] --Icon=launch -+Icon=kcmperformance - Type=Application - Exec=kcmshell kcmperformance - -Index: kcontrol/launch/kcmlaunch.desktop -=================================================================== ---- kcontrol/launch/kcmlaunch.desktop.orig -+++ kcontrol/launch/kcmlaunch.desktop -@@ -1,5 +1,5 @@ - [Desktop Entry] --Icon=launch -+Icon=kcmlaunch - Type=Application - DocPath=kcontrol/kcmlaunch/index.html - Exec=kcmshell kcmlaunch -Index: kcontrol/dnssd/kcm_kdnssd.desktop -=================================================================== ---- kcontrol/dnssd/kcm_kdnssd.desktop.orig -+++ kcontrol/dnssd/kcm_kdnssd.desktop -@@ -70,7 +70,7 @@ Comment[zh_TW]=設定æœå‹™åµæ¸¬ - Exec=kcmshell kcm_kdnssd - GenericName= - GenericName[ko]=ì¼ë°˜ --Icon=blockdevice -+Icon=kcmkdnssd - MimeType= - Name=Service Discovery - Name[af]=Dienste ontdekker -Index: kcontrol/spellchecking/spellchecking.desktop -=================================================================== ---- kcontrol/spellchecking/spellchecking.desktop.orig -+++ kcontrol/spellchecking/spellchecking.desktop -@@ -1,6 +1,6 @@ - [Desktop Entry] - Exec=kcmshell spellchecking --Icon=spellcheck -+Icon=kcmspellchecking - Type=Application - DocPath=kcontrol/spellchecking/index.html - -Index: konqueror/sidebar/trees/history_module/kcmhistory.desktop -=================================================================== ---- konqueror/sidebar/trees/history_module/kcmhistory.desktop.orig -+++ konqueror/sidebar/trees/history_module/kcmhistory.desktop -@@ -1,5 +1,5 @@ - [Desktop Entry] --Icon=history -+Icon=kcmhistory - Type=Application - Exec=kcmshell kcmhistory - -Index: kioslave/cgi/kcmcgi/kcmcgi.desktop -=================================================================== ---- kioslave/cgi/kcmcgi/kcmcgi.desktop.orig -+++ kioslave/cgi/kcmcgi/kcmcgi.desktop -@@ -1,5 +1,5 @@ - [Desktop Entry] --Icon=run -+Icon=kcmcgi - Type=Application - Exec=kcmshell kcmcgi - DocPath= -Index: kioslave/media/kcmodule/media.desktop -=================================================================== ---- kioslave/media/kcmodule/media.desktop.orig -+++ kioslave/media/kcmodule/media.desktop -@@ -1,7 +1,7 @@ - [Desktop Entry] - Type=Application - #DocPath= --Icon=system -+Icon=kcmmedia - Exec=kcmshell media - - diff --git a/opensuse/tdebase/fix-kcontrol-yast.diff b/opensuse/tdebase/fix-kcontrol-yast.diff deleted file mode 100644 index 5902d904d..000000000 --- a/opensuse/tdebase/fix-kcontrol-yast.diff +++ /dev/null @@ -1,63 +0,0 @@ -Index: kcontrol/kcontrol/modules.cpp -=================================================================== ---- kcontrol/kcontrol/modules.cpp.orig -+++ kcontrol/kcontrol/modules.cpp -@@ -19,6 +19,7 @@ - - #include - #include -+#include - - - #include -@@ -59,6 +60,10 @@ ConfigModule::~ConfigModule() - - ProxyWidget *ConfigModule::module() - { -+ KDesktopFile kd(service()->desktopEntryPath()); -+ if ( !kd.readEntry("X-SuSE-YaST-Call").isEmpty() ) -+ setenv("KCMYAST2_CALL", kd.readEntry("X-SuSE-YaST-Call").latin1(), 1 ); -+ - if (_module) - return _module; - -@@ -168,6 +173,7 @@ void ConfigModule::runAsRoot() - // prepare the process to run the kcmshell - QString cmd = service()->exec().stripWhiteSpace(); - bool kdeshell = false; -+ bool proxy = false; - if (cmd.left(5) == "kdesu") - { - cmd = cmd.remove(0,5).stripWhiteSpace(); -@@ -185,6 +191,15 @@ void ConfigModule::runAsRoot() - kdeshell = true; - } - -+ KDesktopFile kd(service()->desktopEntryPath()); -+ if ( !kd.readEntry("X-SuSE-YaST-Call").isEmpty() ){ -+ kdeshell = true; -+ proxy = true; -+ cmd=service()->desktopEntryPath(); -+ -+ setenv("KCMYAST2_CALL", kd.readEntry("X-SuSE-YaST-Call").latin1(), 1 ); -+ } -+ - // run the process - QString kdesu = KStandardDirs::findExe("kdesu"); - if (!kdesu.isEmpty()) -@@ -196,12 +211,12 @@ void ConfigModule::runAsRoot() - // in that case the modules is started through kdesud and kdesu - // returns before the module is running and that doesn't work. - // We also don't have a way to close the module in that case. -- *_rootProcess << "--n"; // Don't keep password. -+ *_rootProcess << "--n" << "-t"; // Don't keep password. - if (kdeshell) { -- *_rootProcess << QString("%1 %2 --embed %3 --lang %4").arg(locate("exe", "kcmshell")).arg(cmd).arg(_embedWidget->winId()).arg(KGlobal::locale()->language()); -+ *_rootProcess << QString("%1 %2 %3 %4 --lang %5").arg(locate("exe", "kcmshell")).arg(cmd).arg(proxy?"--embed-proxy":"--embed").arg(_embedWidget->winId()).arg(KGlobal::locale()->language()); - } - else { -- *_rootProcess << QString("%1 --embed %2 --lang %3").arg(cmd).arg(_embedWidget->winId()).arg( KGlobal::locale()->language() ); -+ *_rootProcess << QString("%1 %2 %3 --lang %4").arg(cmd).arg(proxy?"--embed-proxy":"--embed").arg(_embedWidget->winId()).arg( KGlobal::locale()->language() ); - } - - connect(_rootProcess, SIGNAL(processExited(KProcess*)), this, SLOT(rootExited(KProcess*))); diff --git a/opensuse/tdebase/fix-kio-smb-auth.diff b/opensuse/tdebase/fix-kio-smb-auth.diff deleted file mode 100644 index d591be038..000000000 --- a/opensuse/tdebase/fix-kio-smb-auth.diff +++ /dev/null @@ -1,13 +0,0 @@ -? kioslave/smb/kio_smb_la_all_cpp.cpp -Index: kioslave/smb/kio_smb_auth.cpp -=================================================================== ---- kioslave/smb/kio_smb_auth.cpp.orig -+++ kioslave/smb/kio_smb_auth.cpp -@@ -144,6 +144,7 @@ bool SMBSlave::checkPassword(SMBUrl &url - if ( openPassDlg(info) ) { - kdDebug(KIO_SMB) << "openPassDlg returned " << info.username << endl; - url.setUser(info.username); -+ url.setPass(info.password); - return true; - } - kdDebug(KIO_SMB) << "no value from openPassDlg\n"; diff --git a/opensuse/tdebase/fix-lockup-from-gnome-apps.diff b/opensuse/tdebase/fix-lockup-from-gnome-apps.diff deleted file mode 100644 index 05fc4313b..000000000 --- a/opensuse/tdebase/fix-lockup-from-gnome-apps.diff +++ /dev/null @@ -1,20 +0,0 @@ -Index: khelpcenter/navigator.cpp -=================================================================== ---- khelpcenter/navigator.cpp.orig -+++ khelpcenter/navigator.cpp -@@ -333,9 +333,14 @@ void Navigator::selectItem( const KURL & - // First, populate the NavigatorAppItems if we don't want the home page - if ( url != homeURL() ) { - for ( QListViewItem *item = mContentsTree->firstChild(); item; -- item = item->nextSibling() ) { -+ item = item->nextSibling() ) { - NavigatorAppItem *appItem = dynamic_cast( item ); - if ( appItem ) appItem->populate( true /* recursive */ ); -+ for ( QListViewItem *subitem = item->firstChild(); subitem; -+ subitem = subitem->nextSibling() ) { -+ appItem = dynamic_cast( subitem ); -+ if ( appItem ) appItem->populate( true /* recursive */ ); -+ } - } - } - diff --git a/opensuse/tdebase/fix_default_theme_reset.diff b/opensuse/tdebase/fix_default_theme_reset.diff deleted file mode 100644 index 2b2a6805a..000000000 --- a/opensuse/tdebase/fix_default_theme_reset.diff +++ /dev/null @@ -1,59 +0,0 @@ -Index: kcontrol/kthememanager/ktheme.cpp -=================================================================== ---- kcontrol/kthememanager/ktheme.cpp.orig -+++ kcontrol/kthememanager/ktheme.cpp -@@ -188,11 +188,11 @@ QString KTheme::createYourself( bool pac - globalConf->setGroup( "Icons" ); - QDomElement iconElem = m_dom.createElement( "icons" ); - iconElem.setAttribute( "name", globalConf->readEntry( "Theme",KIconTheme::current() ) ); -- createIconElems( "DesktopIcons", "desktop", iconElem, globalConf ); -- createIconElems( "MainToolbarIcons", "mainToolbar", iconElem, globalConf ); -- createIconElems( "PanelIcons", "panel", iconElem, globalConf ); -- createIconElems( "SmallIcons", "small", iconElem, globalConf ); -- createIconElems( "ToolbarIcons", "toolbar", iconElem, globalConf ); -+ createIconElems( "DesktopIcons", "desktop", 32, iconElem, globalConf ); -+ createIconElems( "MainToolbarIcons", "mainToolbar", 22, iconElem, globalConf ); -+ createIconElems( "PanelIcons", "panel", 32, iconElem, globalConf ); -+ createIconElems( "SmallIcons", "small", 16, iconElem, globalConf ); -+ createIconElems( "ToolbarIcons", "toolbar", 22, iconElem, globalConf ); - m_root.appendChild( iconElem ); - - // 4. Sounds -@@ -726,7 +726,7 @@ QString KTheme::getProperty( QDomElement - } - - void KTheme::createIconElems( const QString & group, const QString & object, -- QDomElement parent, KConfig * cfg ) -+ int defsize, QDomElement parent, KConfig * cfg ) - { - cfg->setGroup( group ); - QStringList elemNames; -@@ -745,7 +745,9 @@ void KTheme::createIconElems( const QStr - QDomElement tmpCol = m_dom.createElement( *it ); - tmpCol.setAttribute( "object", object ); - -- if ( (*it).contains( "Value" ) || *it == "Size" ) -+ if ( *it == "Size" ) -+ tmpCol.setAttribute( "value", cfg->readNumEntry( *it, defsize ) ); -+ else if ( (*it).contains( "Value" )) - tmpCol.setAttribute( "value", cfg->readNumEntry( *it, 1 ) ); - else if ( (*it).contains( "DisabledEffect" ) ) - tmpCol.setAttribute( "name", cfg->readEntry( *it, "togray" ) ); -Index: kcontrol/kthememanager/ktheme.h -=================================================================== ---- kcontrol/kthememanager/ktheme.h.orig -+++ kcontrol/kthememanager/ktheme.h -@@ -155,11 +155,12 @@ private: - * Creates a list of "icon" elements based on: - * @param group The group in the KConfig object @p cfg - * @param object Specifier (similiar, but not identical to @p group) -+ * @param defsize default icon size - * @param parent Parent element to append to - * @param cfg The KConfig object to work with - */ - void createIconElems( const QString & group, const QString & object, -- QDomElement parent, KConfig * cfg ); -+ int defsize, QDomElement parent, KConfig * cfg ); - - /** - * Creates a color DOM element @p name, with a specifier @p object, diff --git a/opensuse/tdebase/gcc44.diff b/opensuse/tdebase/gcc44.diff deleted file mode 100644 index 999b5f3ca..000000000 --- a/opensuse/tdebase/gcc44.diff +++ /dev/null @@ -1,20 +0,0 @@ ---- kcontrol/kfontinst/kfontinst/Fontmap.cpp.sav 2006-01-19 18:00:49.000000000 +0100 -+++ kcontrol/kfontinst/kfontinst/Fontmap.cpp 2009-05-29 14:50:08.000000000 +0200 -@@ -44,7 +44,7 @@ - - using namespace std; - --static char * findSpace(char *str) -+static const char * findSpace(const char *str) - { - while(str && *str!=' ' && *str!='\t') - str++; -@@ -65,7 +65,7 @@ static bool parseLine(const char *line, - char a[constMaxLen+1], - b[constFileMaxLen+1]; - -- char *slash1=strchr(line, '/'), -+ const char *slash1=strchr(line, '/'), - *space1=slash1 ? findSpace(slash1) : NULL, //strchr(slash1, ' ') : NULL, - *ob=slash1 ? strchr(slash1, '(') : NULL, - *cb=ob ? strchr(ob, ')') : NULL, diff --git a/opensuse/tdebase/hide-only-showin-entries.diff b/opensuse/tdebase/hide-only-showin-entries.diff deleted file mode 100644 index f403d38c5..000000000 --- a/opensuse/tdebase/hide-only-showin-entries.diff +++ /dev/null @@ -1,14 +0,0 @@ -Index: konqueror/konq_mainwindow.cc -=================================================================== ---- konqueror/konq_mainwindow.cc.orig -+++ konqueror/konq_mainwindow.cc -@@ -4926,6 +4926,9 @@ void KonqMainWindow::updateOpenWithActio - KTrader::OfferList::ConstIterator end = services.end(); - for (; it != end; ++it ) - { -+ if ( (*it)->noDisplay() ) -+ continue; -+ - KAction *action = new KAction( i18n( "Open with %1" ).arg( (*it)->name() ), 0, 0, (*it)->desktopEntryName().latin1() ); - action->setIcon( (*it)->icon() ); - diff --git a/opensuse/tdebase/improve-panelservicemenu-geticonset.diff b/opensuse/tdebase/improve-panelservicemenu-geticonset.diff deleted file mode 100644 index 842976d5a..000000000 --- a/opensuse/tdebase/improve-panelservicemenu-geticonset.diff +++ /dev/null @@ -1,32 +0,0 @@ -Index: kicker/libkicker/global.cpp -=================================================================== ---- kicker/libkicker/global.cpp.orig -+++ kicker/libkicker/global.cpp -@@ -425,6 +425,12 @@ QIconSet menuIconSet(const QString& icon - KIcon::ActiveState, - 0, - true); -+ QPixmap disabled = KGlobal::iconLoader()->loadIcon(icon, -+ KIcon::Small, -+ 0, -+ KIcon::DisabledState, -+ 0, -+ true); - - // make sure they are not larger than 20x20 - if (normal.width() > 20 || normal.height() > 20) -@@ -437,8 +443,14 @@ QIconSet menuIconSet(const QString& icon - active.convertFromImage(active.convertToImage().smoothScale(20,20)); - } - -+ if (disabled.width() > 20 || disabled.height() > 20) -+ { -+ disabled.convertFromImage(disabled.convertToImage().smoothScale(20,20)); -+ } -+ - iconset.setPixmap(normal, QIconSet::Small, QIconSet::Normal); - iconset.setPixmap(active, QIconSet::Small, QIconSet::Active); -+ iconset.setPixmap(disabled, QIconSet::Small, QIconSet::Disabled); - } - } - diff --git a/opensuse/tdebase/ioslaveinfo-icon.diff b/opensuse/tdebase/ioslaveinfo-icon.diff deleted file mode 100644 index 5f64f89d9..000000000 --- a/opensuse/tdebase/ioslaveinfo-icon.diff +++ /dev/null @@ -1,13 +0,0 @@ -Index: kcontrol/ioslaveinfo/ioslaveinfo.desktop -=================================================================== ---- kcontrol/ioslaveinfo/ioslaveinfo.desktop.orig -+++ kcontrol/ioslaveinfo/ioslaveinfo.desktop -@@ -79,7 +79,7 @@ Comment[zh_TW]=å¯ç”¨å”定的資訊 - Comment[zu]=Ulwazi mayelana nemithetho elandelwayo ekhona - DocPath=kinfocenter/protocols/index.html - Exec=kcmshell ioslaveinfo --Icon=history -+Icon=enhanced_browsing - Keywords=Protocol,IO slaves,Slaves,Network,Information,Timeout - Keywords[ar]=الميÙاق,IO Slaves,Slaves,الشبكة,معلومات Ù†Ùاذ الوقت - Keywords[az]=Protokol, IO KölÉ™lÉ™ri, KölÉ™lÉ™r, ŞəbÉ™kÉ™,MÉ™'lumat, Vaxt Dolması diff --git a/opensuse/tdebase/kcheckpass-pam-11.0 b/opensuse/tdebase/kcheckpass-pam-11.0 deleted file mode 100644 index eae973612..000000000 --- a/opensuse/tdebase/kcheckpass-pam-11.0 +++ /dev/null @@ -1,6 +0,0 @@ -#%PAM-1.0 -auth include common-auth -account include common-account -password include common-password -session include common-session -session required pam_resmgr.so diff --git a/opensuse/tdebase/kcheckpass-pam-11.1 b/opensuse/tdebase/kcheckpass-pam-11.1 deleted file mode 100644 index c6a7c9c90..000000000 --- a/opensuse/tdebase/kcheckpass-pam-11.1 +++ /dev/null @@ -1,5 +0,0 @@ -#%PAM-1.0 -auth include common-auth -account include common-account -password include common-password -session include common-session diff --git a/opensuse/tdebase/kcheckpass-pam-legacy b/opensuse/tdebase/kcheckpass-pam-legacy deleted file mode 100644 index 87df34589..000000000 --- a/opensuse/tdebase/kcheckpass-pam-legacy +++ /dev/null @@ -1,7 +0,0 @@ -#%PAM-1.0 -auth include common-auth -account include common-account -password include common-password -session include common-session -session required pam_devperm.so -session required pam_resmgr.so diff --git a/opensuse/tdebase/kcheckpass.8.gz b/opensuse/tdebase/kcheckpass.8.gz deleted file mode 100644 index 81f8aae2a..000000000 Binary files a/opensuse/tdebase/kcheckpass.8.gz and /dev/null differ diff --git a/opensuse/tdebase/kcminit-ignore-arts.diff b/opensuse/tdebase/kcminit-ignore-arts.diff deleted file mode 100644 index 2c987aae1..000000000 --- a/opensuse/tdebase/kcminit-ignore-arts.diff +++ /dev/null @@ -1,14 +0,0 @@ -Index: kcminit/main.cpp -=================================================================== ---- kcminit/main.cpp.orig -+++ kcminit/main.cpp -@@ -98,6 +98,9 @@ void KCMInit::runModules( int phase ) - if (library.isEmpty()) - library = service->library(); - -+ if (library == "arts" && list.size() > 1) -+ continue; -+ - if (library.isEmpty() || service->init().isEmpty()) - continue; // Skip - diff --git a/opensuse/tdebase/kcmkdm-default-grub.diff b/opensuse/tdebase/kcmkdm-default-grub.diff deleted file mode 100644 index 1d758eb57..000000000 --- a/opensuse/tdebase/kcmkdm-default-grub.diff +++ /dev/null @@ -1,13 +0,0 @@ -Index: kcontrol/kdm/kdm-shut.cpp -=================================================================== ---- kcontrol/kdm/kdm-shut.cpp.orig -+++ kcontrol/kdm/kdm-shut.cpp -@@ -90,7 +90,7 @@ KDMSessionsWidget::KDMSessionsWidget(QWi - QGroupBox *group4 = new QGroupBox( i18n("Miscellaneous"), this ); - - bm_combo = new KBackedComboBox( group4 ); -- bm_combo->insertItem("None", i18n("boot manager", "None")); -+ bm_combo->insertItem("None", i18n("boot manager", "Grub")); - bm_combo->insertItem("Grub", i18n("Grub")); - #if defined(__linux__) && ( defined(__i386__) || defined(__amd64__) ) - bm_combo->insertItem("Lilo", i18n("Lilo")); diff --git a/opensuse/tdebase/kcmsamba_log.diff b/opensuse/tdebase/kcmsamba_log.diff deleted file mode 100644 index e29ca1e13..000000000 --- a/opensuse/tdebase/kcmsamba_log.diff +++ /dev/null @@ -1,31 +0,0 @@ -Index: kcontrol/samba/kcmsambalog.cpp -=================================================================== ---- kcontrol/samba/kcmsambalog.cpp.orig -+++ kcontrol/samba/kcmsambalog.cpp -@@ -39,7 +39,7 @@ LogView::LogView(QWidget *parent,KConfig - ,configFile(config) - ,filesCount(0) - ,connectionsCount(0) --,logFileName("/var/log/samba.log",this) -+,logFileName("/var/log/samba/log.smbd",this) - ,label(&logFileName,i18n("Samba log file: "),this) - ,viewHistory(this) - ,showConnOpen(i18n("Show opened connections"),this) -@@ -88,7 +88,7 @@ LogView::LogView(QWidget *parent,KConfig - " on this page. The log file (shown above) will be read to obtain the" - " events logged by samba.") ); - -- logFileName.setURL("/var/log/samba.log"); -+ logFileName.setURL("/var/log/samba/log.smbd"); - - viewHistory.setAllColumnsShowFocus(TRUE); - viewHistory.setFocusPolicy(QWidget::ClickFocus); -@@ -130,7 +130,7 @@ void LogView::loadSettings() - { - if (configFile==0) return; - configFile->setGroup(LOGGROUPNAME); -- logFileName.setURL(configFile->readPathEntry( "SambaLogFile", "/var/log/samba.log")); -+ logFileName.setURL(configFile->readPathEntry( "SambaLogFile", "/var/log/samba/log.smbd")); - - showConnOpen.setChecked(configFile->readBoolEntry( "ShowConnectionOpen", TRUE)); - showConnClose.setChecked(configFile->readBoolEntry( "ShowConnectionClose", FALSE)); diff --git a/opensuse/tdebase/kcmshell_use_kde-sound.diff b/opensuse/tdebase/kcmshell_use_kde-sound.diff deleted file mode 100644 index ac6d434e4..000000000 --- a/opensuse/tdebase/kcmshell_use_kde-sound.diff +++ /dev/null @@ -1,11 +0,0 @@ -Index: kcontrol/info/sound.desktop -=================================================================== ---- kcontrol/info/sound.desktop.orig -+++ kcontrol/info/sound.desktop -@@ -1,5 +1,5 @@ - [Desktop Entry] --Exec=kcmshell sound -+Exec=kcmshell kde-sound - Icon=kcmsound - Type=Application - DocPath=kinfocenter/sound/index.html diff --git a/opensuse/tdebase/kcontrol-energy.diff b/opensuse/tdebase/kcontrol-energy.diff deleted file mode 100644 index b98a648bc..000000000 --- a/opensuse/tdebase/kcontrol-energy.diff +++ /dev/null @@ -1,167 +0,0 @@ -Index: kcontrol/energy/energy.h -=================================================================== ---- kcontrol/energy/energy.h.orig -+++ kcontrol/energy/energy.h -@@ -44,6 +44,7 @@ private slots: - void slotChangeStandby(int); - void slotChangeSuspend(int); - void slotChangeOff(int); -+ void slotLaunchKPowersave(); - void openURL(const QString &); - - private: -@@ -54,7 +55,7 @@ private: - static void applySettings(bool, int, int, int); - friend void init_energy(); - -- bool m_bChanged, m_bDPMS, m_bEnabled, m_bMaintainSanity; -+ bool m_bChanged, m_bDPMS, m_bKPowersave, m_bEnabled, m_bMaintainSanity; - int m_Standby, m_Suspend, m_Off; - int m_StandbyDesired, m_SuspendDesired, m_OffDesired; - -Index: kcontrol/energy/energy.cpp -=================================================================== ---- kcontrol/energy/energy.cpp.orig -+++ kcontrol/energy/energy.cpp -@@ -26,6 +26,7 @@ - #include - #include - #include -+#include - - #include - #include -@@ -36,6 +37,7 @@ - #include - #include - #include -+#include - - #include - #include -@@ -140,6 +142,7 @@ KEnergy::KEnergy(QWidget *parent, const - m_Suspend = DFLT_SUSPEND; - m_Off = DFLT_OFF; - m_bDPMS = false; -+ m_bKPowersave = false; - m_bMaintainSanity = true; - - setQuickHelp( i18n("

    Display Power Control

    If your display supports" -@@ -154,6 +157,13 @@ KEnergy::KEnergy(QWidget *parent, const - #ifdef HAVE_DPMS - int dummy; - m_bDPMS = DPMSQueryExtension(qt_xdisplay(), &dummy, &dummy); -+ -+ DCOPRef kpowersave("kpowersave", "KPowersaveIface"); -+ DCOPReply managingDPMS = kpowersave.call("currentSchemeManagesDPMS()"); -+ if (managingDPMS.isValid()) { -+ m_bKPowersave = managingDPMS; -+ m_bDPMS = !m_bKPowersave; -+ } - #endif - - QVBoxLayout *top = new QVBoxLayout(this, 0, KDialog::spacingHint()); -@@ -162,14 +172,26 @@ KEnergy::KEnergy(QWidget *parent, const - - QLabel *lbl; - if (m_bDPMS) { -- m_pCBEnable= new QCheckBox(i18n("&Enable display power management" ), this); -- connect(m_pCBEnable, SIGNAL(toggled(bool)), SLOT(slotChangeEnable(bool))); -- hbox->addWidget(m_pCBEnable); -+ KGlobal::locale()->insertCatalogue("kpowersave"); -+ -+ // ### these i18n strings need to be synced with kpowersave !! -+ m_pCBEnable= new QCheckBox(i18n("&Enable display power management" ), this); -+ connect(m_pCBEnable, SIGNAL(toggled(bool)), SLOT(slotChangeEnable(bool))); -+ hbox->addWidget(m_pCBEnable); - QWhatsThis::add( m_pCBEnable, i18n("Check this option to enable the" -- " power saving features of your display.") ); -- } else { -+ " power saving features of your display.") ); -+ -+ // ### -+ } else if(m_bKPowersave) { -+ m_pCBEnable = new QCheckBox(i18n("&Enable specific display power management"), this); -+ hbox->addWidget(m_pCBEnable); -+ m_bEnabled = false; -+ m_pCBEnable->setChecked(true); -+ m_pCBEnable->setEnabled(false); -+ -+ } else { - lbl = new QLabel(i18n("Your display does not support power saving."), this); -- hbox->addWidget(lbl); -+ hbox->addWidget(lbl); - } - - KURLLabel *logo = new KURLLabel(this); -@@ -183,6 +205,7 @@ connect(logo, SIGNAL(leftClickedURL(cons - hbox->addWidget(logo); - - // Sliders -+ if (!m_bKPowersave) { - m_pStandbySlider = new KIntNumInput(m_Standby, this); - m_pStandbySlider->setLabel(i18n("&Standby after:")); - m_pStandbySlider->setRange(0, 120, 10); -@@ -218,6 +241,17 @@ connect(logo, SIGNAL(leftClickedURL(cons - " greatest level of power saving that can be achieved while the" - " display is still physically turned on.") ); - -+ } -+ else { -+ m_pStandbySlider = 0; -+ m_pSuspendSlider = 0; -+ m_pOffSlider = 0; -+ QPushButton* btnKPowersave = new QPushButton(this); -+ btnKPowersave->setText(i18n("Configure KPowersave...")); -+ connect(btnKPowersave, SIGNAL(clicked()), SLOT(slotLaunchKPowersave())); -+ top->addWidget(btnKPowersave); -+ } -+ - top->addStretch(); - - if (m_bDPMS) -@@ -270,7 +304,8 @@ void KEnergy::defaults() - - void KEnergy::readSettings() - { -- m_bEnabled = m_pConfig->readBoolEntry("displayEnergySaving", false); -+ if (m_bDPMS) -+ m_bEnabled = m_pConfig->readBoolEntry("displayEnergySaving", false); - m_Standby = m_pConfig->readNumEntry("displayStandby", DFLT_STANDBY); - m_Suspend = m_pConfig->readNumEntry("displaySuspend", DFLT_SUSPEND); - m_Off = m_pConfig->readNumEntry("displayPowerOff", DFLT_OFF); -@@ -297,20 +332,27 @@ void KEnergy::writeSettings() - m_bChanged = false; - } - -+void KEnergy::slotLaunchKPowersave() -+{ -+ DCOPRef r("kpowersave", "KPowersaveIface"); -+ r.send("openConfigureDialog()"); -+} - - void KEnergy::showSettings() - { - m_bMaintainSanity = false; - - if (m_bDPMS) -- m_pCBEnable->setChecked(m_bEnabled); -+ m_pCBEnable->setChecked(m_bEnabled); - -- m_pStandbySlider->setEnabled(m_bEnabled); -- m_pStandbySlider->setValue(m_Standby); -- m_pSuspendSlider->setEnabled(m_bEnabled); -- m_pSuspendSlider->setValue(m_Suspend); -- m_pOffSlider->setEnabled(m_bEnabled); -- m_pOffSlider->setValue(m_Off); -+ if (!m_bKPowersave) { -+ m_pStandbySlider->setEnabled(m_bEnabled); -+ m_pStandbySlider->setValue(m_Standby); -+ m_pSuspendSlider->setEnabled(m_bEnabled); -+ m_pSuspendSlider->setValue(m_Suspend); -+ m_pOffSlider->setEnabled(m_bEnabled); -+ m_pOffSlider->setValue(m_Off); -+ } - - m_bMaintainSanity = true; - } diff --git a/opensuse/tdebase/kcontrol.diff b/opensuse/tdebase/kcontrol.diff deleted file mode 100644 index ab23e34ba..000000000 --- a/opensuse/tdebase/kcontrol.diff +++ /dev/null @@ -1,11 +0,0 @@ -Index: kcontrol/kcontrol/KControl.desktop -=================================================================== ---- kcontrol/kcontrol/KControl.desktop.orig -+++ kcontrol/kcontrol/KControl.desktop -@@ -1,4 +1,6 @@ - [Desktop Entry] -+Categories=Qt;KDE;X-SuSE-core -+OnlyShowIn=KDE; - Exec=kcontrol -caption "%c" %i %m - Icon=kcontrol - Type=Application diff --git a/opensuse/tdebase/kde3-session-restore.diff b/opensuse/tdebase/kde3-session-restore.diff deleted file mode 100644 index 6ade7063b..000000000 --- a/opensuse/tdebase/kde3-session-restore.diff +++ /dev/null @@ -1,12 +0,0 @@ -Index: kde3 -=================================================================== ---- kde3.orig -+++ kde3 -@@ -6,4 +6,7 @@ - # and make sure this script is in $PATH (e.g. make a symlink if necessary). - # - -+PATH=/opt/kde3/bin:${PATH/:\/opt\/kde3\/bin} -+export PATH -+ - exec "$@" diff --git a/opensuse/tdebase/kde3-session.diff b/opensuse/tdebase/kde3-session.diff deleted file mode 100644 index 763879088..000000000 --- a/opensuse/tdebase/kde3-session.diff +++ /dev/null @@ -1,13 +0,0 @@ -Index: kdm/kfrontend/sessions/kde.desktop.in -=================================================================== ---- kdm/kfrontend/sessions/kde.desktop.in.orig -+++ kdm/kfrontend/sessions/kde.desktop.in -@@ -3,7 +3,7 @@ Encoding=UTF-8 - Type=XSession - Exec=@KDE_BINDIR@/startkde - TryExec=@KDE_BINDIR@/startkde --Name=KDE -+Name=KDE3 - Name[hi]=केडीई - Name[mn]=КДЭ - Name[ta]=Kà®à®±à¯à®±à®•à¯ காவலன௠diff --git a/opensuse/tdebase/kdebase_khc_rellinks.diff b/opensuse/tdebase/kdebase_khc_rellinks.diff deleted file mode 100644 index e11269095..000000000 --- a/opensuse/tdebase/kdebase_khc_rellinks.diff +++ /dev/null @@ -1,606 +0,0 @@ -Index: khelpcenter/khelpcenterui.rc -=================================================================== ---- khelpcenter/khelpcenterui.rc.orig -+++ khelpcenter/khelpcenterui.rc -@@ -1,5 +1,5 @@ - -- -+ - - - &File -@@ -23,8 +23,8 @@ - - - &Go -- -- -+ -+ - - - -@@ -41,13 +41,19 @@ - - - -- -+ - - - - -- - - -+ -+ -+ -+ -+ -+ -+ - - -Index: khelpcenter/mainwindow.cpp -=================================================================== ---- khelpcenter/mainwindow.cpp.orig -+++ khelpcenter/mainwindow.cpp -@@ -41,6 +41,7 @@ - #include - #include - #include -+#include - - #include - #include -@@ -106,6 +107,8 @@ MainWindow::MainWindow() - - connect( mDoc, SIGNAL( selectionChanged() ), - SLOT( enableCopyTextAction() ) ); -+ connect( mDoc, SIGNAL( completed() ), -+ SLOT( updateLinkActions() ) ); - - statusBar()->insertItem(i18n("Preparing Index"), 0, 1); - statusBar()->setItemAlignment(0, AlignLeft | AlignVCenter); -@@ -250,6 +253,8 @@ void MainWindow::setupActions() - new KAction( i18n( "Configure Fonts..." ), KShortcut(), this, SLOT( slotConfigureFonts() ), actionCollection(), "configure_fonts" ); - new KAction( i18n( "Increase Font Sizes" ), "viewmag+", KShortcut(), this, SLOT( slotIncFontSizes() ), actionCollection(), "incFontSizes" ); - new KAction( i18n( "Decrease Font Sizes" ), "viewmag-", KShortcut(), this, SLOT( slotDecFontSizes() ), actionCollection(), "decFontSizes" ); -+ -+ initActions(); - } - - void MainWindow::slotCopySelectedText() -@@ -462,6 +467,418 @@ void MainWindow::slotConfigureFonts() - mDoc->slotReload(); - } - -+void MainWindow::initActions() -+{ -+ kdDebug() << k_funcinfo << endl; -+ -+ // ------------- Navigation links -------------- -+ kaction_map["home"] = new KAction( i18n("&Top"), "2uparrow", KShortcut("Ctrl+Alt+T"), this, SLOT(goHome()), actionCollection(), "rellinks_top" ); -+ kaction_map["home"]->setWhatsThis( i18n("

    This link references a home page or the top of some hierarchy.

    ") ); -+ -+ kaction_map["up"] = new KAction( i18n("&Up"), "1uparrow", KShortcut("Ctrl+Alt+U"), this, SLOT(goUp()), actionCollection(), "rellinks_up" ); -+ kaction_map["up"]->setWhatsThis( i18n("

    This link references the immediate parent of the current document.

    ") ); -+ -+ bool isRTL = QApplication::reverseLayout(); -+ -+ kaction_map["begin"] = new KAction( i18n("&First"), isRTL ? "2rightarrow" : "2leftarrow", KShortcut("Ctrl+Alt+F"), this, SLOT(goFirst()), actionCollection(), "rellinks_first" ); -+ kaction_map["begin"]->setWhatsThis( i18n("

    This link type tells search engines which document is considered by the author to be the starting point of the collection.

    ") ); -+ -+ kaction_map["prev"] = new KAction( i18n("&Previous"), isRTL ? "1rightarrow" : "1leftarrow", KShortcut("Ctrl+Alt+P"), this, SLOT(goPrevious()), actionCollection(), "rellinks_previous" ); -+ kaction_map["prev"]->setWhatsThis( i18n("

    This link references the previous document in an ordered series of documents.

    ") ); -+ -+ kaction_map["next"] = new KAction( i18n("&Next"), isRTL ? "1leftarrow" : "1rightarrow", KShortcut("Ctrl+Alt+N"), this, SLOT(goNext()), actionCollection(), "rellinks_next" ); -+ kaction_map["next"]->setWhatsThis( i18n("

    This link references the next document in an ordered series of documents.

    ") ); -+ -+ kaction_map["last"] = new KAction( i18n("&Last"), isRTL ? "2leftarrow" : "2rightarrow", KShortcut("Ctrl+Alt+L"), this, SLOT(goLast()), actionCollection(), "rellinks_last" ); -+ kaction_map["last"]->setWhatsThis( i18n("

    This link references the end of a sequence of documents.

    ") ); -+ -+ // ------------ special items -------------------------- -+ kaction_map["search"] = new KAction( i18n("&Search"), "filefind", KShortcut("Ctrl+Alt+S"), this, SLOT(goSearch()), actionCollection(), "rellinks_search" ); -+ kaction_map["search"]->setWhatsThis( i18n("

    This link references the search.

    ") ); -+ -+ // ------------ Document structure links --------------- -+ m_document = new KActionMenu( i18n("Document"), "contents", actionCollection(), "rellinks_document" ); -+ m_document->setWhatsThis( i18n("

    This menu contains the links referring the document information.

    ") ); -+ m_document->setDelayed(false); -+ -+ kaction_map["contents"] = new KAction( i18n("Table of &Contents"), "contents", KShortcut("Ctrl+Alt+C"), this, SLOT(goContents()), actionCollection(), "rellinks_toc" ); -+ m_document->insert(kaction_map["contents"]); -+ kaction_map["contents"]->setWhatsThis( i18n("

    This link references the table of contents.

    ") ); -+ -+ kactionmenu_map["chapter"] = new KActionMenu( i18n("Chapters"), "fileopen", actionCollection(), "rellinks_chapters" ); -+ m_document->insert(kactionmenu_map["chapter"]); -+ connect( kactionmenu_map["chapter"]->popupMenu(), SIGNAL( activated( int ) ), this, SLOT(goChapter(int))); -+ kactionmenu_map["chapter"]->setWhatsThis( i18n("

    This menu references the chapters of the document.

    ") ); -+ kactionmenu_map["chapter"]->setDelayed(false); -+ -+ kactionmenu_map["section"] = new KActionMenu( i18n("Sections"), "fileopen", actionCollection(), "rellinks_sections" ); -+ m_document->insert(kactionmenu_map["section"]); -+ connect( kactionmenu_map["section"]->popupMenu(), SIGNAL( activated( int ) ), this, SLOT( goSection( int ) ) ); -+ kactionmenu_map["section"]->setWhatsThis( i18n("

    This menu references the sections of the document.

    ") ); -+ kactionmenu_map["section"]->setDelayed(false); -+ -+ kactionmenu_map["subsection"] = new KActionMenu( i18n("Subsections"), "fileopen", actionCollection(), "rellinks_subsections" ); -+ m_document->insert(kactionmenu_map["subsection"]); -+ connect( kactionmenu_map["subsection"]->popupMenu(), SIGNAL( activated( int ) ), this, SLOT( goSubsection( int ) ) ); -+ kactionmenu_map["subsection"]->setWhatsThis( i18n("

    This menu references the subsections of the document.

    ") ); -+ kactionmenu_map["subsection"]->setDelayed(false); -+ -+ kactionmenu_map["appendix"] = new KActionMenu( i18n("Appendix"), "edit", actionCollection(), "rellinks_appendix" ); -+ m_document->insert(kactionmenu_map["appendix"]); -+ connect( kactionmenu_map["appendix"]->popupMenu(), SIGNAL( activated( int ) ), this, SLOT( goAppendix( int ) ) ); -+ kactionmenu_map["appendix"]->setWhatsThis( i18n("

    This link references the appendix.

    ") ); -+ kactionmenu_map["appendix"]->setDelayed(false); -+ -+ kaction_map["glossary"] = new KAction( i18n("&Glossary"), "flag", KShortcut("Ctrl+Alt+G"), this, SLOT(goGlossary()), actionCollection(), "rellinks_glossary" ); -+ m_document->insert(kaction_map["glossary"]); -+ kaction_map["glossary"]->setWhatsThis( i18n("

    This link references the glossary.

    ") ); -+ -+ kaction_map["index"] = new KAction( i18n("&Index"), "info", KShortcut("Ctrl+Alt+I"), this, SLOT(goIndex()), actionCollection(), "rellinks_index" ); -+ m_document->insert(kaction_map["index"]); -+ kaction_map["index"]->setWhatsThis( i18n("

    This link references the index.

    ") ); -+ -+ // Other links -+ m_more = new KActionMenu( i18n("More"), "misc", actionCollection(), "rellinks_more" ); -+ m_more->setWhatsThis( i18n("

    This menu contains other important links.

    ") ); -+ m_more->setDelayed(false); -+ -+ kaction_map["help"] = new KAction( i18n("&Help"), "help", KShortcut("Ctrl+Alt+H"), this, SLOT(goHelp()), actionCollection(), "rellinks_help" ); -+ m_more->insert(kaction_map["help"]); -+ kaction_map["help"]->setWhatsThis( i18n("

    This link references the help.

    ") ); -+ -+ kaction_map["author"] = new KAction( i18n("&Authors"), "mail_new", KShortcut("Ctrl+Alt+A"), this, SLOT(goAuthor()), actionCollection(), "rellinks_authors" ); -+ m_more->insert(kaction_map["author"]); -+ kaction_map["author"]->setWhatsThis( i18n("

    This link references the author.

    ") ); -+ -+ kaction_map["copyright"] = new KAction( i18n("Copy&right"), "signature", KShortcut("Ctrl+Alt+R"), this, SLOT(goCopyright()), actionCollection(), "rellinks_copyright" ); -+ m_more->insert(kaction_map["copyright"]); -+ kaction_map["copyright"]->setWhatsThis( i18n("

    This link references the copyright.

    ") ); -+ -+ kactionmenu_map["bookmark"] = new KActionMenu( i18n("Bookmarks"), "bookmark_folder", actionCollection(), "rellinks_bookmarks" ); -+ m_more->insert(kactionmenu_map["bookmark"]); -+ kactionmenu_map["bookmark"]->setWhatsThis( i18n("

    This menu references the bookmarks.

    ") ); -+ connect( kactionmenu_map["bookmark"]->popupMenu(), SIGNAL( activated( int ) ), this, SLOT( goBookmark( int ) ) ); -+ kactionmenu_map["bookmark"]->setDelayed(false); -+ -+ kactionmenu_map["alternate"] = new KActionMenu( i18n("Other Versions"), "attach", actionCollection(), "rellinks_other_versions" ); -+ m_more->insert(kactionmenu_map["alternate"]); -+ kactionmenu_map["alternate"]->setWhatsThis( i18n("

    This link references the alternate versions of this document.

    ") ); -+ connect( kactionmenu_map["alternate"]->popupMenu(), SIGNAL( activated( int ) ), this, SLOT( goAlternate( int ) ) ); -+ kactionmenu_map["alternate"]->setDelayed(false); -+ -+ // Unclassified menu -+ m_links = new KActionMenu( i18n("Miscellaneous"), "rellinks", actionCollection(), "rellinks_links" ); -+ kactionmenu_map["unclassified"] = m_links; -+ kactionmenu_map["unclassified"]->setWhatsThis( i18n("

    Miscellaneous links.

    ") ); -+ connect( kactionmenu_map["unclassified"]->popupMenu(), SIGNAL( activated( int ) ), this, SLOT( goAllElements( int ) ) ); -+ kactionmenu_map["unclassified"]->setDelayed(false); -+ -+ // We unactivate all the possible actions -+ disableAll(); -+} -+ -+/* Code from plugin_rellinks -+ * Copyright (C) 2002, Anders Lund * -+ * Copyright (C) 2003, 2004, Franck Qu�ain * -+ * Copyright (C) 2004, Kevin Krammer * -+ * Copyright (C) 2004, 2005, Oliviet Goffart -+*/ -+void MainWindow::updateLinkActions() -+{ -+ // We disable all -+ disableAll(); -+ -+ // get a list of LINK nodes in document -+ DOM::NodeList linkNodes = mDoc->document().getElementsByTagName( "link" ); -+ -+ kdDebug() << "HELP Rellinks: Link nodes =" << linkNodes.length() << endl; -+ -+ unsigned long nodeLength = linkNodes.length(); -+ -+ for ( unsigned int i=0; i < nodeLength; i++ ) { -+ // create a entry for each one -+ DOM::Element e( linkNodes.item( i ) ); -+ -+ -+ // --- Retrieve of the relation type -- -+ -+ QString rel = e.getAttribute( "rel" ).string(); -+ rel = rel.simplifyWhiteSpace(); -+ if (rel.isEmpty()) { -+ // If the "rel" attribut is null then use the "rev" attribute... -+ QString rev = e.getAttribute( "rev" ).string(); -+ rev = rev.simplifyWhiteSpace(); -+ if (rev.isEmpty()) { -+ // if "rev" attribut is also empty => ignore -+ continue; -+ } -+ // Determine the "rel" equivalent of "rev" type -+ rel = transformRevToRel(rev); -+ } -+ // Determin the name used internally -+ QString lrel = getLinkType(rel.lower()); -+ // relation to ignore -+ if (lrel.isEmpty()) continue; -+ kdDebug() << "lrel=" << lrel << endl; -+ -+ // -- Retrieve of other usefull informations -- -+ -+ QString href = e.getAttribute( "href" ).string(); -+ // if nowhere to go, ignore the link -+ if (href.isEmpty()) continue; -+ QString title = e.getAttribute( "title" ).string(); -+ QString hreflang = e.getAttribute( "hreflang" ).string(); -+ -+ KURL ref( mDoc->url(), href ); -+ if ( title.isEmpty() ) -+ title = ref.prettyURL(); -+ -+ // escape ampersand before settings as action title, otherwise the menu entry will interpret it as an -+ // accelerator -+ title.replace('&', "&&"); -+ -+ // -- Menus activation -- -+ -+ // Activation of "Document" menu ? -+ if (lrel == "contents" || lrel == "glossary" || lrel == "index" || lrel == "appendix") { -+ m_document->setEnabled(true); -+ } -+ // Activation of "More" menu ? -+ if (lrel == "help" || lrel == "author" || lrel == "copyright" ) { -+ m_more->setEnabled(true); -+ } -+ -+ // -- Buttons or menu items activation / creation -- -+ if (lrel == "bookmark" || lrel == "alternate") { -+ int id = kactionmenu_map[lrel]->popupMenu()->insertItem( title ); -+ m_more->setEnabled(true); -+ kactionmenu_map[lrel]->setEnabled(true); -+ element_map[lrel][id] = e; -+ -+ } else if (lrel == "appendix" || lrel == "chapter" || lrel == "section" || lrel == "subsection") { -+ int id = kactionmenu_map[lrel]->popupMenu()->insertItem( title ); -+ m_document->setEnabled(true); -+ kactionmenu_map[lrel]->setEnabled(true); -+ element_map[lrel][id] = e; -+ -+ } else { -+ // It is a unique action -+ element_map[lrel][0] = e; -+ if (kaction_map[lrel]) { -+ kaction_map[lrel]->setEnabled(true); -+ // Tooltip -+ if (hreflang.isEmpty()) { -+ kaction_map[lrel]->setToolTip( title ); -+ } else { -+ kaction_map[lrel]->setToolTip( title + " [" + hreflang + "]"); -+ } -+ } else { -+ // For the moment all the elements are reference in a separated menu -+ // TODO : reference the unknown ? -+ int id = kactionmenu_map["unclassified"]->popupMenu()->insertItem( lrel + " : " + title ); -+ kactionmenu_map["unclassified"]->setEnabled(true); -+ element_map["unclassified"][id] = e; -+ } -+ -+ } -+ -+ } -+} -+ -+void MainWindow::disableAll() { -+ element_map.clear(); -+ -+ // Clear actions -+ KActionMap::Iterator it; -+ for ( it = kaction_map.begin(); it != kaction_map.end(); ++it ) { -+ // If I don't test it crash :( -+ if (it.data()) { -+ it.data()->setEnabled(false); -+ it.data()->setToolTip(it.data()->text().remove('&')); -+ } -+ } -+ -+ // Clear actions -+ KActionMenuMap::Iterator itmenu; -+ for ( itmenu = kactionmenu_map.begin(); itmenu != kactionmenu_map.end(); ++itmenu ) { -+ // If I don't test it crash :( -+ if (itmenu.data()) { -+ itmenu.data()->popupMenu()->clear(); -+ itmenu.data()->setEnabled(false); -+ itmenu.data()->setToolTip(itmenu.data()->text().remove('&')); -+ } -+ } -+ -+ // Unactivate menus -+ m_more->setEnabled(false); -+ m_document->setEnabled(false); -+ -+} -+ -+QString MainWindow::getLinkType(const QString &lrel) { -+ // Relations to ignore... -+ if (lrel.contains("stylesheet") -+ || lrel == "script" -+ || lrel == "icon" -+ || lrel == "shortcut icon" -+ || lrel == "prefetch" ) -+ return QString::null; -+ -+ // ...known relations... -+ if (lrel == "top" || lrel == "origin" || lrel == "start") -+ return "home"; -+ if (lrel == "parent") -+ return "up"; -+ if (lrel == "first") -+ return "begin"; -+ if (lrel == "previous") -+ return "prev"; -+ if (lrel == "child") -+ return "next"; -+ if (lrel == "end") -+ return "last"; -+ if (lrel == "toc") -+ return "contents"; -+ if (lrel == "find") -+ return "search"; -+ if (lrel == "alternative stylesheet") -+ return "alternate stylesheet"; -+ if (lrel == "authors") -+ return "author"; -+ if (lrel == "toc") -+ return "contents"; -+ -+ //...unknown relations or name that don't need to change -+ return lrel; -+} -+ -+QString MainWindow::transformRevToRel(const QString &rev) { -+ QString altRev = getLinkType(rev); -+ -+ // Known relations -+ if (altRev == "prev") -+ return getLinkType("next"); -+ if (altRev == "next") -+ return getLinkType("prev"); -+ if (altRev == "made") -+ return getLinkType("author"); -+ if (altRev == "up") -+ return getLinkType("child"); -+ if (altRev == "sibling") -+ return getLinkType("sibling"); -+ -+ //...unknown inverse relation => ignore for the moment -+ return QString::null; -+} -+ -+void MainWindow::goHome() { -+ goToLink("home"); -+} -+ -+void MainWindow::goUp() { -+ goToLink("up"); -+} -+ -+void MainWindow::goFirst() { -+ goToLink("begin"); -+} -+ -+void MainWindow::goPrevious() { -+ goToLink("prev"); -+} -+ -+void MainWindow::goNext() { -+ goToLink("next"); -+} -+ -+void MainWindow::goLast() { -+ goToLink("last"); -+} -+ -+void MainWindow::goContents() { -+ goToLink("contents"); -+} -+ -+void MainWindow::goIndex() { -+ goToLink("index"); -+} -+ -+void MainWindow::goGlossary() { -+ goToLink("glossary"); -+} -+ -+void MainWindow::goHelp() { -+ goToLink("help"); -+} -+ -+void MainWindow::goSearch() { -+ goToLink("search"); -+} -+ -+void MainWindow::goAuthor() { -+ goToLink("author"); -+} -+ -+ -+void MainWindow::goCopyright() { -+ goToLink("copyright"); -+} -+ -+void MainWindow::goBookmark(int id) { -+ goToLink("bookmark", id); -+} -+ -+void MainWindow::goChapter(int id) { -+ goToLink("chapter", id); -+} -+ -+void MainWindow::goSection(int id) { -+ goToLink("section", id); -+} -+ -+void MainWindow::goSubsection(int id) { -+ goToLink("subsection", id); -+} -+ -+void MainWindow::goAppendix(int id) { -+ goToLink("appendix", id); -+} -+ -+void MainWindow::goAlternate(int id) { -+ goToLink("alternate", id); -+} -+ -+void MainWindow::goAllElements(int id) { -+ goToLink("unclassified", id); -+} -+ -+/** Menu links */ -+void MainWindow::goToLink(const QString & rel, int id) { -+ // have the KHTML part open it -+ if (!mDoc) -+ return; -+ -+ DOM::Element e = element_map[rel][id]; -+ QString href = e.getAttribute("href").string(); -+ KURL url( mDoc->url(), href ); -+ QString target = e.getAttribute("target").string(); -+ -+ // URL arguments -+ KParts::URLArgs args; -+ args.frameName = target; -+ -+ // Add base url if not valid -+ if (url.isValid()) { -+ mDoc->browserExtension()->openURLRequest(url, args); -+ } else { -+ KURL baseURL = mDoc->baseURL(); -+ QString endURL = url.prettyURL(); -+ KURL realURL = KURL(baseURL, endURL); -+ mDoc->browserExtension()->openURLRequest(realURL, args); -+ } -+ -+} -+ - #include "mainwindow.moc" - - // vim:ts=2:sw=2:et -Index: khelpcenter/mainwindow.h -=================================================================== ---- khelpcenter/mainwindow.h.orig -+++ khelpcenter/mainwindow.h -@@ -13,6 +13,15 @@ - #include "navigator.h" - #include "glossary.h" - -+#include -+ -+class KAction; -+class KActionMenu; -+// type definitions -+typedef QMap DOMElementMap; -+typedef QMap KActionMap; -+typedef QMap KActionMenuMap; -+ - class KHTMLPart; - class QSplitter; - -@@ -68,11 +77,43 @@ class MainWindow : public KMainWindow, p - void writeConfig(); - - protected slots: -+ void updateLinkActions(); - void enableLastSearchAction(); - void enableCopyTextAction(); - - private: - void stop(); -+ /** -+ * initialise all KActions -+ */ -+ void initActions(); -+ /** -+ * Function used to disable all the item of the toolbar (c) rellinks -+ */ -+ void disableAll(); -+ /** -+ * Function used to get link type of a relation. -+ * For example "prev" is of type "previous" and "toc" is of type "contents" -+ * If the relation must be ignored return NULL. -+ * If the relation is unknow return the input relation type. -+ * @param lrel Previous relation name -+ * @return New relation name -+ */ -+ QString getLinkType(const QString &lrel); -+ /** -+ * Function used to return the "rel" equivalent of "rev" link type -+ * If the equivalent is not found return NULL -+ * @param rev Inverse relation name -+ * @return Equivalent relation name -+ */ -+ QString transformRevToRel(const QString &rev) ; -+ -+ /** -+ * Go to the link (c) rellinks -+ * @param rel Relation name -+ * @param id Identifier of the menu item -+ */ -+ void goToLink(const QString & rel, int id=0); - - private slots: - void slotGlossSelected(const GlossaryEntry &entry); -@@ -90,7 +131,29 @@ class MainWindow : public KMainWindow, p - void slotConfigureFonts(); - void slotCopySelectedText(); - --private: -+ void goHome(); -+ void goUp(); -+ void goFirst(); -+ void goPrevious(); -+ void goNext(); -+ void goLast(); -+ void goContents(); -+ void goIndex(); -+ void goGlossary(); -+ void goHelp(); -+ void goSearch(); -+ void goCopyright(); -+ void goAuthor(); -+ -+ void goBookmark(int id); -+ void goChapter(int id); -+ void goSection(int id); -+ void goSubsection(int id); -+ void goAppendix(int id); -+ void goAlternate(int id); -+ void goAllElements(int id); -+ -+ private: - void updateZoomActions(); - - QSplitter *mSplitter; -@@ -100,6 +163,17 @@ private: - KAction *mLastSearchAction; - KAction *mCopyText; - LogDialog *mLogDialog; -+ //(c) rellinks -+ /** Map of KAction */ -+ KActionMap kaction_map; -+ /** Map of KActionMenu */ -+ KActionMenuMap kactionmenu_map; -+ /** Map of all the link element which can be managed by rellinks */ -+ QMap element_map; -+ KActionMenu *m_document; -+ KActionMenu *m_more; -+ KActionMenu *m_links; -+ - }; - - } diff --git a/opensuse/tdebase/kdebase_networkstatus_branch.diff b/opensuse/tdebase/kdebase_networkstatus_branch.diff deleted file mode 100644 index 8329d3cd2..000000000 --- a/opensuse/tdebase/kdebase_networkstatus_branch.diff +++ /dev/null @@ -1,36 +0,0 @@ -Index: konqueror/konq_frame.cc -=================================================================== ---- konqueror/konq_frame.cc.orig -+++ konqueror/konq_frame.cc -@@ -34,6 +34,7 @@ - #include - #include - #include -+#include - - #include "konq_events.h" - #include "konq_frame.h" -@@ -97,6 +98,10 @@ KonqFrameStatusBar::KonqFrameStatusBar( - m_progressBar->hide(); - addWidget( m_progressBar, 0, true /*permanent->right align*/ ); - -+ StatusBarNetworkStatusIndicator * indicator = new StatusBarNetworkStatusIndicator( this, "networkstatusindicator" ); -+ addWidget( indicator, 0, false ); -+ indicator->init(); -+ - fontChange(QFont()); - installEventFilter( this ); - } -Index: konqueror/Makefile.am -=================================================================== ---- konqueror/Makefile.am.orig -+++ konqueror/Makefile.am -@@ -48,7 +48,7 @@ noinst_HEADERS = KonqMainWindowIface.h K - konq_misc.h konq_openurlrequest.h konq_profiledlg.h konq_run.h \ - konq_view.h konq_viewmgr.h konq_extensionmanager.h version.h - --konqueror_la_LDFLAGS = -module $(KDE_PLUGIN) $(all_libraries) -+konqueror_la_LDFLAGS = -module $(KDE_PLUGIN) $(all_libraries) -lconnectionmanager - konqueror_la_LIBADD = ../libkonq/libkonq.la libkonqueror_intern.la $(LIBMALLOC) $(LIB_KUTILS) - - # Hmm, this experiment of a static konq failed, don't trust it... diff --git a/opensuse/tdebase/kdeeject.diff b/opensuse/tdebase/kdeeject.diff deleted file mode 100644 index d22e67fb6..000000000 --- a/opensuse/tdebase/kdeeject.diff +++ /dev/null @@ -1,58 +0,0 @@ -Index: kdeeject/kdeeject -=================================================================== ---- kdeeject/kdeeject.orig -+++ kdeeject/kdeeject -@@ -4,12 +4,38 @@ - # - # Copyright GPL v2 by David Faure - # --if test $# -ge 1 -a "$1" != "--help"; then -- quiet=0 -- if test "$1" = "-q"; then -- quiet=1 -- shift -- fi -+quiet=0 -+if test "$1" = "-q"; then -+ quiet=1 -+ shift -+fi -+ -+if test "$1" = "--help"; then -+ echo "Usage: $0 where name is a device or a mountpoint." -+ exit 0 -+fi -+ -+if test -z "$1"; then -+ for dev in /dev/cdrom /dev/dvd /dev/dvdram /dev/cdrecorder; do -+ if test -e $dev; then -+ lp=`readlink $dev` -+ if test -n "$lp"; then -+ device=/dev/$lp -+ else -+ device=$dev -+ fi -+ break -+ fi -+ done -+else -+ device=$1 -+fi -+ -+udi=`dcop kded mediamanager properties $device 2>/dev/null | head -n 1 ` -+if test -n "$udi"; then -+ dcop kded mediamanager unmount "$udi" >/dev/null 2>&1 -+fi -+ - # Checking for stuff in the PATH is ugly with sh. - # I guess this is the reason for making this a kde app... - OS=`uname -s` -@@ -34,7 +60,5 @@ if test $# -ge 1 -a "$1" != "--help"; th - elif test $quiet -eq 0; then - kdialog --title "KDE Eject" --error "Eject $1 failed!" - fi --else -- kdialog --title "KDE Eject" --msgbox "Usage: $0 where name is a device or a mountpoint." --fi -+ - exit 1 diff --git a/opensuse/tdebase/kdesktop_icons.diff b/opensuse/tdebase/kdesktop_icons.diff deleted file mode 100644 index 5d208b0dd..000000000 --- a/opensuse/tdebase/kdesktop_icons.diff +++ /dev/null @@ -1,311 +0,0 @@ -Index: kdesktop/KDesktopIface.h -=================================================================== ---- kdesktop/KDesktopIface.h.orig -+++ kdesktop/KDesktopIface.h -@@ -107,6 +107,35 @@ k_dcop: - * space for desktop icons - */ - virtual void desktopIconsAreaChanged(const QRect &area, int screen) = 0; -+ -+ /** -+ * Find the next free place for a not yet existing icon, so it fits -+ * in the user arrangement. Basicly prepare for icons to be moved in. -+ * It will try to find a place in the virtual grid near col,row -+ * where no other icon is. -+ * -+ * If you specify -1 for row or column, it will try to find the next -+ * free room where no other icon follows. E.g. if you specify column -+ * = -1 and row = 0, kdesktop will find the next vertical placement -+ * so that the icon appears at the end of the existing icons preferable -+ * in the first column. If the first column is full, it will find the -+ * next free room in the second column. -+ * -+ * If you specify both column and row, kdesktop won't care for aligning, -+ * or surrounding icons, but try to find the free place near the given -+ * grid place (e.g. specify 0,0 to find the nearest place in the left -+ * upper corner). -+ */ -+ virtual QPoint findPlaceForIcon( int column, int row) = 0; -+ -+ /// copy the desktop file in the Desktop and place it at x, y -+ virtual void addIcon(const QString &url, int x, int y) = 0; -+ -+ /// same with specific destination -+ virtual void addIcon(const QString &url, const QString &dest, int x, int y) = 0; -+ -+ /// remove the desktop file (either full path or relative) -+ virtual void removeIcon(const QString &dest) = 0; - }; - - #endif -Index: kdesktop/desktop.cc -=================================================================== ---- kdesktop/desktop.cc.orig -+++ kdesktop/desktop.cc -@@ -32,6 +32,9 @@ - #include - #include - #include -+#include -+#include -+#include - - #include - #include -@@ -58,6 +61,7 @@ - #include - #include - #include -+#include - // Create the equivalent of KAccelBase::connectItem - // and then remove this include and fix reconnects in initRoot() -- ellis - //#include -@@ -983,4 +987,47 @@ bool KDesktop::event(QEvent * e) - return QWidget::event(e); - } - -+QPoint KDesktop::findPlaceForIcon( int column, int row ) -+{ -+ if (m_pIconView) -+ return m_pIconView->findPlaceForIcon(column, row); -+ else -+ return QPoint(-1, -1); -+} -+ -+void KDesktop::addIcon(const QString & _url, int x, int y) -+{ -+ addIcon( _url, KGlobalSettings::desktopPath(), x, y ); -+} -+ -+void KDesktop::addIcon(const QString & _url, const QString & _dest, int x, int y) -+{ -+ QString filename = _url.mid(_url.findRev('/') + 1); -+ -+ QValueList files; -+ KIO::CopyInfo i; -+ i.uSource = KURL::fromPathOrURL( _url ); -+ i.uDest = KURL::fromPathOrURL( _dest ); -+ i.uDest.addPath( filename ); -+ files.append(i); -+ if (!QFile::exists(i.uDest.prettyURL().replace("file://",QString::null))) { m_pIconView->slotAboutToCreate( QPoint( x, y ), files ); -+ KIO::copy( i.uSource, i.uDest, false ); } -+ -+// m_pIconView->addFuturePosition(filename, x, y); -+ // qDebug("addIcon %s %s %d %d", _url.latin1(), _dest.latin1(), x, y); -+// system(QString("cp \"%1\" \"%2/%3\"").arg(KURL(_url).path()).arg(KURL(_dest).path()).arg(filename).latin1()); -+// m_pIconView->update( _dest ); -+} -+ -+void KDesktop::removeIcon(const QString &_url) -+{ -+ if (_url.at(0) != '/') { -+ qDebug("removeIcon with relative path not supported for now"); -+ return; -+ } -+ unlink(KURL(_url).path().latin1()); -+ QString dest = _url.left(_url.findRev('/') + 1); -+ m_pIconView->update( dest ); -+} -+ - #include "desktop.moc" -Index: kdesktop/desktop.h -=================================================================== ---- kdesktop/desktop.h.orig -+++ kdesktop/desktop.h -@@ -164,6 +164,11 @@ protected: - virtual void setIconsEnabled( bool enable ); - virtual bool event ( QEvent * e ); - -+ virtual QPoint findPlaceForIcon( int column, int row); -+ virtual void addIcon(const QString &url, int x, int y); -+ virtual void addIcon(const QString &url, const QString &dest, int x, int y); -+ virtual void removeIcon(const QString &url); -+ - private slots: - void desktopResized(); - -Index: kdesktop/kdiconview.cc -=================================================================== ---- kdesktop/kdiconview.cc.orig -+++ kdesktop/kdiconview.cc -@@ -962,6 +962,18 @@ void KDIconView::slotNewItems( const KFi - kdDebug(1214) << "KDIconView::slotNewItems count=" << entries.count() << endl; - KFileItemListIterator it(entries); - KFileIVI* fileIVI = 0L; -+ -+ if (m_nextItemPos.isNull() && !m_dotDirectory) { -+ // Not found, we'll need to save the new pos -+ kdDebug(1214)<<"Neither a drop position stored nor m_dotDirectory set"<url(); -@@ -1026,15 +1038,6 @@ void KDIconView::slotNewItems( const KFi - kdDebug(1214)<<"Using saved position"< viewport()->width()) -+ return QPoint(); -+ -+ while ( rect.bottom() < viewport()->height() - spacing() ) -+ { -+ if ( !isFreePosition(0,rect) ) -+ rect.moveBy(0, rect.height()); -+ else -+ return rect.topLeft(); -+ } -+ -+ return QPoint(); -+} -+ -+QPoint KDIconView::findPlaceForIconRow( int row, int dx, int dy ) -+{ -+ if (row < 0) -+ return QPoint(); -+ -+ QRect rect; -+ rect.moveTopLeft(QPoint(0, row * dy)); -+ rect.setWidth(dx); -+ rect.setHeight(dy); -+ -+ if (rect.bottom() > viewport()->height()) -+ return QPoint(); -+ -+ while (rect.right() < viewport()->width() - spacing()) -+ { -+ if (!isFreePosition(0,rect)) -+ rect.moveBy(rect.width()+spacing(), 0); -+ else -+ return rect.topLeft(); -+ } -+ -+ return QPoint(); -+} -+ -+QPoint KDIconView::findPlaceForIcon( int column, int row) -+{ -+ int dx = gridXValue(), dy = 0; -+ QIconViewItem *item = firstItem(); -+ for ( ; item; item = item->nextItem() ) { -+ dx = QMAX( dx, item->width() ); -+ dy = QMAX( dy, item->height() ); -+ } -+ -+ dx += spacing(); -+ dy += spacing(); -+ -+ if (row == -1) { -+ int max_cols = viewport()->width() / dx; -+ int delta = 0; -+ QPoint res; -+ do { -+ delta++; -+ res = findPlaceForIconCol(column + (delta / 2) * (-2 * (delta % 2) + 1), -+ dx, dy); -+ if (delta / 2 > QMAX(max_cols - column, column)) -+ return res; -+ } while (res.isNull()); -+ return res; -+ } -+ -+ if (column == -1) { -+ int max_rows = viewport()->height() / dy; -+ int delta = 0; -+ QPoint res; -+ do { -+ delta++; -+ res = findPlaceForIconRow(row + (delta / 2) * (-2 * (delta % 2) + 1), -+ dx, dy); -+ if (delta / 2 > QMAX(max_rows - row, row)) -+ return res; -+ } while (res.isNull()); -+ return res; -+ } -+ -+ // very unlikely - if I may add that -+ return QPoint(0, 0); -+} -+ - void KDIconView::saveIconPositions() - { - kdDebug(1214) << "KDIconView::saveIconPositions" << endl; -@@ -1665,4 +1760,11 @@ void KDIconView::saveIconPositions() - m_dotDirectory->sync(); - } - -+void KDIconView::update( const QString &_url ) -+{ -+ if (m_dirLister) -+ m_dirLister->updateDirectory( _url ); -+} -+ -+ - #include "kdiconview.moc" -Index: kdesktop/kdiconview.h -=================================================================== ---- kdesktop/kdiconview.h.orig -+++ kdesktop/kdiconview.h -@@ -73,6 +73,8 @@ public: - - QStringList selectedURLs(); - -+ void update( const QString &url ); -+ - /** - * Save the icon positions - */ -@@ -103,6 +105,10 @@ public: - - void startDirLister(); - -+ QPoint findPlaceForIconCol( int column, int dx, int dy ); -+ QPoint findPlaceForIconRow( int row, int dx, int dy ); -+ QPoint findPlaceForIcon( int column, int row ); -+ - protected slots: - - // slots connected to the icon view -@@ -112,8 +118,9 @@ protected slots: - void slotMouseButtonClickedKDesktop(int _button, QIconViewItem* _item, const QPoint& _global); - void slotContextMenuRequested(QIconViewItem* _item, const QPoint& _global); - void slotEnableAction( const char * name, bool enabled ); -+public slots: - void slotAboutToCreate(const QPoint &pos, const QValueList &files); -- -+protected slots: - void slotItemRenamed(QIconViewItem*, const QString &name); - - // slots connected to the directory lister diff --git a/opensuse/tdebase/kdesu-remember-keep-password.diff b/opensuse/tdebase/kdesu-remember-keep-password.diff deleted file mode 100644 index 29e9002d8..000000000 --- a/opensuse/tdebase/kdesu-remember-keep-password.diff +++ /dev/null @@ -1,18 +0,0 @@ -Subject: Default to kdesu password remembering on, but remember last state -From: Lubos Lunak -Feature: bnc#386531 -Patch-upstream: no -Relates: kdebase4/kdesu-remember-keep-password.diff, kdelibs3/kdesu-settings.diff - -Index: kdesu/kdesu/kdesu.cpp -=================================================================== ---- kdesu/kdesu/kdesu.cpp (revision 810363) -+++ kdesu/kdesu/kdesu.cpp (working copy) -@@ -382,6 +382,7 @@ - change_uid = false; - password = dlg.password(); - keep = dlg.keep(); -+ KConfigGroup(config,"Passwords").writeEntry("Keep", keep); - data.setSilent( KStartupInfoData::No ); - KStartupInfo::sendChange( id, data ); - } diff --git a/opensuse/tdebase/kdesud-security.diff b/opensuse/tdebase/kdesud-security.diff deleted file mode 100644 index 40b44de71..000000000 --- a/opensuse/tdebase/kdesud-security.diff +++ /dev/null @@ -1,21 +0,0 @@ -Index: kdesu/kdesud/kdesud.cpp -=================================================================== ---- kdesu/kdesud/kdesud.cpp.orig -+++ kdesu/kdesud/kdesud.cpp -@@ -45,6 +45,7 @@ - #include - #include - -+#include - #include - #include - #include -@@ -248,6 +249,8 @@ int create_socket() - - int main(int argc, char *argv[]) - { -+ prctl(PR_SET_DUMPABLE, 0); -+ - KAboutData aboutData("kdesud", I18N_NOOP("KDE su daemon"), - Version, I18N_NOOP("Daemon used by kdesu"), - KAboutData::License_Artistic, diff --git a/opensuse/tdebase/kdm-admin-mode.diff b/opensuse/tdebase/kdm-admin-mode.diff deleted file mode 100644 index 6028d7698..000000000 --- a/opensuse/tdebase/kdm-admin-mode.diff +++ /dev/null @@ -1,424 +0,0 @@ -Index: kdm/config.def -=================================================================== ---- kdm/config.def.orig -+++ kdm/config.def -@@ -2002,6 +2002,17 @@ Description: - Specify the widget style for the greeter. Empty means to use the - built-in default which currently is Plastik. - -+Key: UseAdminSession -+Type: bool -+Default: false -+User: greeter -+Instance: #*/! -+Comment: -+ Admin session -+Description: -+ If given there will be a special button that requires root password -+ and starts the given session -+ - Key: ColorScheme - Type: string - Default: "" -Index: kdm/kfrontend/Makefile.am -=================================================================== ---- kdm/kfrontend/Makefile.am.orig -+++ kdm/kfrontend/Makefile.am -@@ -21,6 +21,7 @@ kdm_greet_SOURCES = \ - kchooser.cpp \ - kgverify.cpp \ - kdmshutdown.cpp \ -+ kdmadmindialog.cpp \ - kgreeter.cpp \ - kgapp.cpp - kdm_greet_LDFLAGS = $(all_libraries) $(KDE_RPATH) -Index: kdm/kfrontend/kdmadmindialog.cpp -=================================================================== ---- /dev/null -+++ kdm/kfrontend/kdmadmindialog.cpp -@@ -0,0 +1,176 @@ -+ /* -+ -+ Admin dialog -+ -+ Copyright (C) 1997, 1998, 2000 Steffen Hansen -+ Copyright (C) 2000-2003 Oswald Buddenhagen -+ -+ -+ This program is free software; you can redistribute it and/or modify -+ it under the terms of the GNU General Public License as published by -+ the Free Software Foundation; either version 2 of the License, or -+ (at your option) any later version. -+ -+ This program is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ GNU General Public License for more details. -+ -+ You should have received a copy of the GNU General Public License -+ along with this program; if not, write to the Free Software -+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -+ -+ */ -+ -+#include "kdmadmindialog.h" -+#include "kdmconfig.h" -+#include "kgdialog.h" -+#include "kdm_greet.h" -+#include -+ -+#include -+#include -+#include -+#include -+#include -+ -+#include -+#include -+#include -+#include -+#include -+#include -+ -+int KDMAdmin::curPlugin = -1; -+PluginList KDMAdmin::pluginList; -+ -+KDMAdmin::KDMAdmin( const QString &user, QWidget *_parent ) -+ : inherited( _parent ) -+ , verify( 0 ), curUser(user) -+{ -+ QSizePolicy fp( QSizePolicy::Fixed, QSizePolicy::Fixed ); -+ -+ QVBoxLayout *box = new QVBoxLayout( this, 10 ); -+ -+ QHBoxLayout *hlay = new QHBoxLayout( box ); -+ -+ GSendInt( G_ReadDmrc ); -+ GSendStr( "root" ); -+ GRecvInt(); // ignore status code ... -+ -+ if (curPlugin < 0) { -+ curPlugin = 0; -+ pluginList = KGVerify::init( "classic" ); -+ } -+ verify = new KGStdVerify( this, this, -+ this, "root", -+ pluginList, KGreeterPlugin::Authenticate, -+ KGreeterPlugin::Shutdown ); -+ verify->selectPlugin( curPlugin ); -+ box->addLayout( verify->getLayout() ); -+ QAccel *accel = new QAccel( this ); -+ accel->insertItem( ALT+Key_A, 0 ); -+ connect( accel, SIGNAL(activated(int)), SLOT(slotActivatePlugMenu()) ); -+ -+ box->addWidget( new KSeparator( KSeparator::HLine, this ) ); -+ -+ okButton = new KPushButton( KStdGuiItem::ok(), this ); -+ okButton->setSizePolicy( fp ); -+ okButton->setDefault( true ); -+ cancelButton = new KPushButton( KStdGuiItem::cancel(), this ); -+ cancelButton->setSizePolicy( fp ); -+ -+ hlay = new QHBoxLayout( box ); -+ hlay->addStretch( 1 ); -+ hlay->addWidget( okButton ); -+ hlay->addStretch( 1 ); -+ hlay->addWidget( cancelButton ); -+ hlay->addStretch( 1 ); -+ -+ connect( okButton, SIGNAL(clicked()), SLOT(accept()) ); -+ connect( cancelButton, SIGNAL(clicked()), SLOT(reject()) ); -+ -+ slotWhenChanged(); -+} -+ -+KDMAdmin::~KDMAdmin() -+{ -+ hide(); -+ delete verify; -+} -+ -+void -+KDMAdmin::slotActivatePlugMenu() -+{ -+ QPopupMenu *cmnu = verify->getPlugMenu(); -+ QSize sh( cmnu->sizeHint() / 2 ); -+ cmnu->exec( geometry().center() - QPoint( sh.width(), sh.height() ) ); -+} -+ -+void -+KDMAdmin::accept() -+{ -+ verify->accept(); -+} -+ -+void -+KDMAdmin::slotWhenChanged() -+{ -+ verify->abort(); -+ verify->setEnabled( 1 ); -+ verify->start(); -+} -+ -+void -+KDMAdmin::bye_bye() -+{ -+ GSendInt( G_GetDmrc ); -+ GSendStr( "Session" ); -+ char *sess = GRecvStr(); -+ if (sess && strcmp(sess, "admin")) { -+ GSendInt( G_PutDmrc ); -+ GSendStr( "OrigSession"); -+ GSendStr( sess); -+ free(sess); -+ } -+ -+ GSendInt( G_PutDmrc ); -+ GSendStr( "Session" ); -+ GSendStr( "admin" ); -+ inherited::accept(); -+} -+ -+void -+KDMAdmin::verifyPluginChanged( int id ) -+{ -+ curPlugin = id; -+ adjustSize(); -+} -+ -+void -+KDMAdmin::verifyOk() -+{ -+ bye_bye(); -+} -+ -+void -+KDMAdmin::verifyFailed() -+{ -+ okButton->setEnabled( false ); -+ cancelButton->setEnabled( false ); -+} -+ -+void -+KDMAdmin::verifyRetry() -+{ -+ okButton->setEnabled( true ); -+ cancelButton->setEnabled( true ); -+} -+ -+void -+KDMAdmin::verifySetUser( const QString & ) -+{ -+} -+ -+ -+#include "kdmadmindialog.moc" -Index: kdm/kfrontend/kdmadmindialog.h -=================================================================== ---- /dev/null -+++ kdm/kfrontend/kdmadmindialog.h -@@ -0,0 +1,70 @@ -+ /* -+ -+ Shutdown dialog -+ -+ Copyright (C) 1997, 1998 Steffen Hansen -+ Copyright (C) 2000-2003 Oswald Buddenhagen -+ -+ -+ This program is free software; you can redistribute it and/or modify -+ it under the terms of the GNU General Public License as published by -+ the Free Software Foundation; either version 2 of the License, or -+ (at your option) any later version. -+ -+ This program is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ GNU General Public License for more details. -+ -+ You should have received a copy of the GNU General Public License -+ along with this program; if not, write to the Free Software -+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -+ -+ */ -+ -+ -+#ifndef KDMADMIN_H -+#define KDMADMIN_H -+ -+#include "kgverify.h" -+ -+#include -+ -+class LiloInfo; -+class QLabel; -+class KPushButton; -+class QButtonGroup; -+class QComboBox; -+ -+class KDMAdmin : public FDialog, public KGVerifyHandler { -+ Q_OBJECT -+ typedef FDialog inherited; -+ -+public: -+ KDMAdmin( const QString &user, QWidget *_parent = 0 ); -+ ~KDMAdmin(); -+ -+public slots: -+ void accept(); -+ void slotWhenChanged(); -+ void slotActivatePlugMenu(); -+ -+private: -+ void bye_bye(); -+ -+ KPushButton *okButton, *cancelButton; -+ KGStdVerify *verify; -+ QString curUser; -+ -+ static int curPlugin; -+ static PluginList pluginList; -+ -+public: // from KGVerifyHandler -+ virtual void verifyPluginChanged( int id ); -+ virtual void verifyOk(); -+ virtual void verifyFailed(); -+ virtual void verifyRetry(); -+ virtual void verifySetUser( const QString &user ); -+}; -+ -+#endif -Index: kdm/kfrontend/kgreeter.cpp -=================================================================== ---- kdm/kfrontend/kgreeter.cpp.orig -+++ kdm/kfrontend/kgreeter.cpp -@@ -27,6 +27,7 @@ Foundation, Inc., 51 Franklin Street, Fi - #include "kdmconfig.h" - #include "kdmclock.h" - #include "kdm_greet.h" -+#include "kdmadmindialog.h" - #include "themer/kdmthemer.h" - #include "themer/kdmitem.h" - #include "themer/kdmlabel.h" -@@ -509,7 +510,7 @@ KGreeter::insertSessions() - for (char **dit = _sessionsDirs; *dit; ++dit) { - QStringList ents = QDir( *dit ).entryList(); - for (QStringList::ConstIterator it = ents.begin(); it != ents.end(); ++it) -- if ((*it).endsWith( ".desktop" )) { -+ if ((*it).endsWith( ".desktop" ) && !(*it).endsWith("admin.desktop")) { - KSimpleConfig dsk( QString( *dit ).append( '/' ).append( *it ) ); - dsk.setGroup( "Desktop Entry" ); - putSession( (*it).left( (*it).length() - 8 ), -@@ -648,6 +649,17 @@ KGreeter::slotLoadPrevWM() - return; - } - } else { -+ if (!strcmp(sess, "admin")) { -+ // need to get the original -+ GSendInt( G_GetDmrc); -+ GSendStr( "OrigSession"); -+ sess = GRecvStr(); -+ if (!sess) { -+ free(sess); -+ sess = strdup("default"); -+ } -+ } -+ - for (uint i = 0; i < sessionTypes.count() && !sessionTypes[i].hid; i++) - if (sessionTypes[i].type == sess) { - free( sess ); -@@ -998,6 +1010,12 @@ KThemedGreeter::KThemedGreeter() - } - } - -+ admin_button = themer->findNode( "admin_button"); -+ if ( admin_button ) { -+ if ( !_useAdminSession ) -+ admin_button->hide( true ); -+ } -+ - if (plugMenu) { - inserten( i18n("&Authentication Method"), 0, plugMenu ); - needSep = true; -@@ -1103,6 +1121,8 @@ KThemedGreeter::slotThemeActivated( cons - slotSessMenu(); - else if (id == "system_button") - slotActionMenu(); -+ else if (id == "admin_button") -+ slotAskAdminPassword(); - } - - void -@@ -1129,4 +1149,15 @@ KThemedGreeter::keyPressEvent( QKeyEvent - accept(); - } - -+void -+KThemedGreeter::slotAskAdminPassword() -+{ -+ KDMAdmin k(curUser, this); -+ if (k.exec()) { -+ GSendInt(G_Ready); -+ hide(); -+ done(ex_exit); -+ } -+} -+ - #include "kgreeter.moc" -Index: kdm/kfrontend/kgreeter.h -=================================================================== ---- kdm/kfrontend/kgreeter.h.orig -+++ kdm/kfrontend/kgreeter.h -@@ -146,6 +146,7 @@ class KThemedGreeter : public KGreeter { - void slotThemeActivated( const QString &id ); - void slotSessMenu(); - void slotActionMenu(); -+ void slotAskAdminPassword(); - - protected: - virtual void updateStatus( bool fail, bool caps, int timedleft ); -@@ -158,7 +159,7 @@ class KThemedGreeter : public KGreeter { - KdmThemer *themer; - KdmItem *caps_warning, *xauth_warning, *pam_error, *timed_label, - *console_rect, *userlist_rect, -- *session_button, *system_button; -+ *session_button, *system_button, *admin_button; - - public: // from KGVerifyHandler - virtual void verifyFailed(); -Index: kdm/kfrontend/sessions/Makefile.am -=================================================================== ---- kdm/kfrontend/sessions/Makefile.am.orig -+++ kdm/kfrontend/sessions/Makefile.am -@@ -1,6 +1,6 @@ - sessionsdir = $(kde_datadir)/kdm/sessions - sessions_DATA = \ -- kde.desktop gnome.desktop \ -+ admin.desktop kde.desktop gnome.desktop \ - 9wm.desktop \ - aewm++.desktop \ - aewm.desktop \ -Index: kdm/kfrontend/sessions/admin.desktop -=================================================================== ---- /dev/null -+++ kdm/kfrontend/sessions/admin.desktop -@@ -0,0 +1,7 @@ -+[Desktop Entry] -+Encoding=UTF-8 -+Type=XSession -+Exec=YaSTadminSession -+TryExec=YaSTadminSession -+Name=admin -+Comment=Yast Admin Session -Index: kdm/kfrontend/themer/kdmlabel.cpp -=================================================================== ---- kdm/kfrontend/themer/kdmlabel.cpp.orig -+++ kdm/kfrontend/themer/kdmlabel.cpp -@@ -214,6 +214,7 @@ static const struct { - { "language", I18N_NOOP("&Language") }, - { "session", I18N_NOOP("Session &Type") }, - { "system", I18N_NOOP("&System") }, // i18n("Actions"); -+ { "admin", I18N_NOOP("&Administration") }, - { "disconnect", I18N_NOOP("&Disconnect") }, - { "quit", I18N_NOOP("&Quit") }, - { "halt", I18N_NOOP("Power O&ff") }, diff --git a/opensuse/tdebase/kdm-aliasing.diff b/opensuse/tdebase/kdm-aliasing.diff deleted file mode 100644 index 73fc86e54..000000000 --- a/opensuse/tdebase/kdm-aliasing.diff +++ /dev/null @@ -1,11 +0,0 @@ -Index: kdm/backend/Makefile.am -=================================================================== ---- kdm/backend/Makefile.am.orig -+++ kdm/backend/Makefile.am -@@ -1,5 +1,6 @@ - # forcibly remove thread-related defines & flags - AUTOMAKE_OPTIONS = foreign -+CFLAGS = $(XDM_CFLAGS) -fno-strict-aliasing - CPPFLAGS = $(USER_INCLUDES) $(X_INCLUDES) $(KRB4_INCS) $(KRB5_INCS) -I.. -I../.. - LDFLAGS = $(USER_LDFLAGS) $(X_LDFLAGS) $(X_RPATH) $(KRB4_RPATH) $(KRB5_RPATH) - LDADD = $(LIB_X11) -lXau $(LIBXDMCP) $(PASSWDLIBS) $(LIBSHADOW) $(LIBGEN) \ diff --git a/opensuse/tdebase/kdm-align-userlist-labels.diff b/opensuse/tdebase/kdm-align-userlist-labels.diff deleted file mode 100644 index 65accc55f..000000000 --- a/opensuse/tdebase/kdm-align-userlist-labels.diff +++ /dev/null @@ -1,46 +0,0 @@ -Index: kdm/kfrontend/kgreeter.cpp -=================================================================== ---- kdm/kfrontend/kgreeter.cpp.orig -+++ kdm/kfrontend/kgreeter.cpp -@@ -59,6 +59,7 @@ Foundation, Inc., 51 Franklin Street, Fi - #include - #include - #include -+#include - - #include - #include -@@ -313,6 +314,33 @@ KGreeter::insertUser( const QImage &defa - if ( p.isNull() ) - p = default_pix; - -+ const int size = 48; -+ const int wdiff = size - p.size().width(); -+ const int hdiff = size - p.size().height(); -+ if (wdiff>0 || hdiff>0) { -+ QPixmap pix(p); -+ QBitmap mask; -+ mask.convertFromImage(p.createAlphaMask()); -+ pix.resize(size, size); -+ bitBlt(&pix, wdiff/2.0, hdiff/2.0, &pix); -+ if (mask.isNull()) { -+ mask = QBitmap(size, size); -+ mask.fill(Qt::color1); -+ } -+ else { -+ mask.resize(size, size); -+ bitBlt(&mask, wdiff/2.0, hdiff/2.0, &mask); -+ } -+ QPainter pa(&mask); -+ pa.fillRect(0, 0, size, hdiff/2.0, Qt::color0); -+ pa.fillRect(0, 0, wdiff/2.0, size, Qt::color0); -+ pa.fillRect(size-(wdiff/2.0), 0, size, size, Qt::color0); -+ pa.fillRect(0, size-(hdiff/2.0), size, size, Qt::color0); -+ pa.end(); -+ pix.setMask(mask); -+ p=pix.convertToImage(); -+ } -+ - QString realname = KStringHandler::from8Bit( ps->pw_gecos ); - realname.truncate( realname.find( ',' ) ); - if (realname.isEmpty() || realname == username) diff --git a/opensuse/tdebase/kdm-all-users-nopass.diff b/opensuse/tdebase/kdm-all-users-nopass.diff deleted file mode 100644 index 612c6a553..000000000 --- a/opensuse/tdebase/kdm-all-users-nopass.diff +++ /dev/null @@ -1,34 +0,0 @@ -Index: kdm/backend/client.c -=================================================================== ---- kdm/backend/client.c.orig -+++ kdm/backend/client.c -@@ -386,6 +386,9 @@ AccNoPass( const char *un, struct passwd - if (cursource != PWSRC_MANUAL) - return 1; - -+ if (td->noPassAllUsers) -+ return 1; -+ - for (hg = 0, fp = td->noPassUsers; *fp; fp++) - if (**fp == '@') - hg = 1; -Index: kdm/config.def -=================================================================== ---- kdm/config.def.orig -+++ kdm/config.def -@@ -1852,6 +1852,15 @@ Description: - (and any other user with UID = 0). - Never list root. - -+Key: NoPassAllUsers -+Type: bool -+Default: false -+User: core -+Instance: #:0/true -+Comment: & -+Description: -+ All users can login without password -+ - Key: AutoLoginEnable - Type: bool - Default: false diff --git a/opensuse/tdebase/kdm-audit-log.diff b/opensuse/tdebase/kdm-audit-log.diff deleted file mode 100644 index de571e44d..000000000 --- a/opensuse/tdebase/kdm-audit-log.diff +++ /dev/null @@ -1,190 +0,0 @@ -Index: kdm/backend/client.c -=================================================================== ---- kdm/backend/client.c.orig -+++ kdm/backend/client.c -@@ -87,6 +87,14 @@ extern int loginsuccess( const char *Use - #include "consolekit.h" - #endif - -+#define AU_FAILED 0 -+#define AU_SUCCESS 1 -+#ifdef HAVE_LIBAUDIT -+#include -+#else -+#define log_to_audit_system(l,h,d,s) do { ; } while (0) -+#endif -+ - /* - * Session data, mostly what struct verify_info was for - */ -@@ -291,6 +299,56 @@ fail_delay( int retval ATTR_UNUSED, unsi - {} - # endif - -+ /** -+ * log_to_audit_system: -+ * @login: Name of user -+ * @hostname: Name of host machine -+ * @tty: Name of display -+ * @success: 1 for success, 0 for failure -+ * -+ * Logs the success or failure of the login attempt with the linux kernel -+ * audit system. The intent is to capture failed events where the user -+ * fails authentication or otherwise is not permitted to login. There are -+ * many other places where pam could potentially fail and cause login to -+ * fail, but these are system failures rather than the signs of an account -+ * being hacked. -+ * -+ * Returns nothing. -+ */ -+ -+#ifdef HAVE_LIBAUDIT -+static void -+log_to_audit_system (const char *loginname, -+ const char *hostname, -+ const char *tty, -+ int success) -+{ -+ struct passwd *pw; -+ char buf[64]; -+ int audit_fd; -+ -+ audit_fd = audit_open(); -+ if (loginname) -+ pw = getpwnam(loginname); -+ else { -+ loginname = "unknown"; -+ pw = NULL; -+ } -+ Debug("log_to_audit %p %s\n", pw, loginname); -+ -+ if (pw) { -+ snprintf(buf, sizeof(buf), "uid=%d", pw->pw_uid); -+ audit_log_user_message(audit_fd, AUDIT_USER_LOGIN, -+ buf, hostname, NULL, tty, (int)success); -+ } else { -+ snprintf(buf, sizeof(buf), "acct=%s", loginname); -+ audit_log_user_message(audit_fd, AUDIT_USER_LOGIN, -+ buf, hostname, NULL, tty, (int)success); -+ } -+ close(audit_fd); -+} -+#endif -+ - static int - doPAMAuth( const char *psrv, struct pam_data *pdata ) - { -@@ -349,6 +407,8 @@ doPAMAuth( const char *psrv, struct pam_ - GSendStr( curuser ); - } - if (pretc != PAM_SUCCESS) { -+ /* Log the failed login attempt */ -+ log_to_audit_system (curuser, td->remoteHost, td->name, AU_FAILED); - switch (pretc) { - case PAM_USER_UNKNOWN: - case PAM_AUTH_ERR: -@@ -702,6 +762,8 @@ Verify( GConvFunc gconv, int rootok ) - if (!p->pw_uid) { - if (!rootok && !td->allowRootLogin) - V_RET_FAIL( "Root logins are not allowed" ); -+ /* Log the failed login attempt */ -+ log_to_audit_system (curuser, td->remoteHost, td->name, AU_FAILED); - return 1; /* don't deny root to log in */ - } - -@@ -738,6 +800,8 @@ Verify( GConvFunc gconv, int rootok ) - } - if (pretc == PAM_SUCCESS) - break; -+ /* Log the failed login attempt */ -+ log_to_audit_system (curuser, td->remoteHost, td->name, AU_FAILED); - /* effectively there is only PAM_AUTHTOK_ERR */ - GSendInt( V_FAIL ); - } -@@ -827,6 +891,8 @@ Verify( GConvFunc gconv, int rootok ) - GSendInt( V_MSG_ERR ); - GSendStr( "Your account has expired;" - " please contact your system administrator" ); -+ /* Log the failed login attempt */ -+ log_to_audit_system (curuser, td->remoteHost, td->name, AU_FAILED); - GSendInt( V_FAIL ); - LC_RET0; - } else if (tim > (expir - warntime) && !quietlog) { -@@ -861,6 +927,8 @@ Verify( GConvFunc gconv, int rootok ) - GSendInt( V_MSG_ERR ); - GSendStr( "Your account has expired;" - " please contact your system administrator" ); -+ /* Log the failed login attempt */ -+ log_to_audit_system (curuser, td->remoteHost, td->name, AU_FAILED); - GSendInt( V_FAIL ); - LC_RET0; - } -@@ -920,6 +988,8 @@ Verify( GConvFunc gconv, int rootok ) - close( fd ); - } - GSendStr( "Logins are not allowed at the moment.\nTry again later" ); -+ /* Log the failed login attempt */ -+ log_to_audit_system (curuser, td->remoteHost, td->name, AU_FAILED); - GSendInt( V_FAIL ); - LC_RET0; - } -@@ -930,6 +1000,8 @@ Verify( GConvFunc gconv, int rootok ) - PrepErrorGreet(); - GSendInt( V_MSG_ERR ); - GSendStr( "You are not allowed to login at the moment" ); -+ /* Log the failed login attempt */ -+ log_to_audit_system (curuser, td->remoteHost, td->name, AU_FAILED); - GSendInt( V_FAIL ); - LC_RET0; - } -@@ -941,6 +1013,8 @@ Verify( GConvFunc gconv, int rootok ) - Debug( "shell not in /etc/shells\n" ); - endusershell(); - V_RET_FAIL( "Your login shell is not listed in /etc/shells" ); -+ /* Log the failed login attempt */ -+ log_to_audit_system (curuser, td->remoteHost, td->name, AU_FAILED); - } - if (!strcmp( s, p->pw_shell )) { - endusershell(); -@@ -1365,6 +1439,9 @@ StartClient() - # define D_LOGIN_SETGROUP 0 - #endif /* USE_PAM */ - -+ /* Login succeeded */ -+ log_to_audit_system (curuser, td->remoteHost, td->name, AU_SUCCESS); -+ - removeAuth = 1; - chownCtrl( &td->ctrl, curuid ); - endpwent(); -Index: kdm/configure.in.in -=================================================================== ---- kdm/configure.in.in.orig -+++ kdm/configure.in.in -@@ -288,3 +288,27 @@ fi - AC_SUBST(DBUS_LIBS) - - dnl AC_OUTPUT(kdm/kfrontend/sessions/kde.desktop) -+ -+ -+AC_ARG_WITH(libaudit, -+ [ --with-libaudit=[auto/yes/no] Add Linux audit support [default=auto]],, -+ with_libaudit=auto) -+ -+# Check for Linux auditing API -+# -+# libaudit detection -+if test x$with_libaudit = xno ; then -+ have_libaudit=no; -+else -+ # See if we have audit daemon library -+ AC_CHECK_LIB(audit, audit_log_user_message, -+ have_libaudit=yes, have_libaudit=no) -+fi -+ -+AM_CONDITIONAL(HAVE_LIBAUDIT, test x$have_libaudit = xyes) -+ -+if test x$have_libaudit = xyes ; then -+ EXTRA_DAEMON_LIBS="$EXTRA_DAEMON_LIBS -laudit" -+ AC_DEFINE(HAVE_LIBAUDIT,1,[linux audit support]) -+fi -+ diff --git a/opensuse/tdebase/kdm-color-scheme.diff b/opensuse/tdebase/kdm-color-scheme.diff deleted file mode 100644 index f45486ad1..000000000 --- a/opensuse/tdebase/kdm-color-scheme.diff +++ /dev/null @@ -1,28 +0,0 @@ -Index: kdm/kfrontend/kgapp.cpp -=================================================================== ---- kdm/kfrontend/kgapp.cpp.orig -+++ kdm/kfrontend/kgapp.cpp -@@ -42,6 +42,7 @@ Foundation, Inc., 51 Franklin Street, Fi - #include - #include - #include -+#include - - #include // free(), exit() - #include // alarm() -@@ -144,7 +145,14 @@ kg_main( const char *argv0 ) - if (!_GUIStyle.isEmpty()) - app.setStyle( _GUIStyle ); - -- _colorScheme = locate( "data", "kdisplay/color-schemes/" + _colorScheme + ".kcsrc" ); -+ const QString _configColorScheme = _colorScheme; -+ -+ if (_useTheme && !_theme.isEmpty()) -+ _colorScheme = _theme + "/color.kcsrc"; -+ -+ if (!QFile::exists(_colorScheme)) -+ _colorScheme = locate( "data", "kdisplay/color-schemes/" + _configColorScheme + ".kcsrc" ); -+ - if (!_colorScheme.isEmpty()) { - KSimpleConfig config( _colorScheme, true ); - config.setGroup( "Color Scheme" ); diff --git a/opensuse/tdebase/kdm-consolekit.diff b/opensuse/tdebase/kdm-consolekit.diff deleted file mode 100644 index 9b4df34bc..000000000 --- a/opensuse/tdebase/kdm-consolekit.diff +++ /dev/null @@ -1,822 +0,0 @@ -Index: kdm/backend/client.c -=================================================================== ---- kdm/backend/client.c.orig -+++ kdm/backend/client.c -@@ -83,6 +83,10 @@ extern int loginsuccess( const char *Use - #endif - #include - -+#ifdef WITH_CONSOLE_KIT -+#include "consolekit.h" -+#endif -+ - /* - * Session data, mostly what struct verify_info was for - */ -@@ -1124,8 +1128,13 @@ static int removeSession; - static int removeCreds; - #endif - -+#ifdef WITH_CONSOLE_KIT -+int -+StartClient( const char *ck_session_cookie ) -+#else - int - StartClient() -+#endif - { - const char *home, *sessargs, *desksess; - char **env, *xma; -@@ -1223,6 +1232,11 @@ StartClient() - if (krbtkfile[0] != '\0') - env = setEnv( env, "KRBTKFILE", krbtkfile ); - #endif -+#ifdef WITH_CONSOLE_KIT -+ if (ck_session_cookie != NULL) { -+ env = setEnv ( env, "XDG_SESSION_COOKIE", ck_session_cookie ); -+ } -+#endif - userEnviron = inheritEnv( env, envvars ); - env = systemEnv( p->pw_name ); - systemEnviron = setEnv( env, "HOME", p->pw_dir ); -Index: kdm/backend/consolekit.c -=================================================================== ---- /dev/null -+++ kdm/backend/consolekit.c -@@ -0,0 +1,552 @@ -+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- -+ * -+ * Copyright (C) 2006-2007 William Jon McCann -+ * Copyright (C) 2007 Kevin Kofler -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -+ * -+ */ -+ -+#include "dm.h" -+#include "dm_auth.h" -+#include "dm_error.h" -+ -+#include -+#include -+#include -+ -+#define DBUS_API_SUBJECT_TO_CHANGE -+#include -+ -+#include "consolekit.h" -+ -+ -+#define CK_NAME "org.freedesktop.ConsoleKit" -+#define CK_PATH "/org/freedesktop/ConsoleKit" -+#define CK_INTERFACE "org.freedesktop.ConsoleKit" -+#define CK_MANAGER_PATH "/org/freedesktop/ConsoleKit/Manager" -+#define CK_MANAGER_INTERFACE "org.freedesktop.ConsoleKit.Manager" -+#define CK_SESSION_INTERFACE "org.freedesktop.ConsoleKit.Session" -+ -+static DBusConnection *private_connection = NULL; -+ -+static void -+add_param_int (DBusMessageIter *iter_struct, -+ const char *key, -+ int value) -+{ -+ DBusMessageIter iter_struct_entry; -+ DBusMessageIter iter_var; -+ -+ dbus_message_iter_open_container (iter_struct, -+ DBUS_TYPE_STRUCT, -+ NULL, -+ &iter_struct_entry); -+ -+ dbus_message_iter_append_basic (&iter_struct_entry, -+ DBUS_TYPE_STRING, -+ &key); -+ -+ dbus_message_iter_open_container (&iter_struct_entry, -+ DBUS_TYPE_VARIANT, -+ DBUS_TYPE_INT32_AS_STRING, -+ &iter_var); -+ -+ dbus_message_iter_append_basic (&iter_var, -+ DBUS_TYPE_INT32, -+ &value); -+ -+ dbus_message_iter_close_container (&iter_struct_entry, -+ &iter_var); -+ -+ dbus_message_iter_close_container (iter_struct, &iter_struct_entry); -+} -+ -+static void -+add_param_boolean (DBusMessageIter *iter_struct, -+ const char *key, -+ int value) -+{ -+ DBusMessageIter iter_struct_entry; -+ DBusMessageIter iter_var; -+ -+ dbus_message_iter_open_container (iter_struct, -+ DBUS_TYPE_STRUCT, -+ NULL, -+ &iter_struct_entry); -+ -+ dbus_message_iter_append_basic (&iter_struct_entry, -+ DBUS_TYPE_STRING, -+ &key); -+ -+ dbus_message_iter_open_container (&iter_struct_entry, -+ DBUS_TYPE_VARIANT, -+ DBUS_TYPE_BOOLEAN_AS_STRING, -+ &iter_var); -+ -+ dbus_message_iter_append_basic (&iter_var, -+ DBUS_TYPE_BOOLEAN, -+ &value); -+ -+ dbus_message_iter_close_container (&iter_struct_entry, -+ &iter_var); -+ -+ dbus_message_iter_close_container (iter_struct, &iter_struct_entry); -+} -+ -+static void -+add_param_string (DBusMessageIter *iter_struct, -+ const char *key, -+ const char *value) -+{ -+ DBusMessageIter iter_struct_entry; -+ DBusMessageIter iter_var; -+ -+ dbus_message_iter_open_container (iter_struct, -+ DBUS_TYPE_STRUCT, -+ NULL, -+ &iter_struct_entry); -+ -+ dbus_message_iter_append_basic (&iter_struct_entry, -+ DBUS_TYPE_STRING, -+ &key); -+ -+ dbus_message_iter_open_container (&iter_struct_entry, -+ DBUS_TYPE_VARIANT, -+ DBUS_TYPE_STRING_AS_STRING, -+ &iter_var); -+ -+ dbus_message_iter_append_basic (&iter_var, -+ DBUS_TYPE_STRING, -+ &value); -+ -+ dbus_message_iter_close_container (&iter_struct_entry, -+ &iter_var); -+ -+ dbus_message_iter_close_container (iter_struct, &iter_struct_entry); -+} -+ -+static int -+session_get_x11_display (DBusConnection *connection, -+ const char *ssid, -+ char **str) -+{ -+ DBusError error; -+ DBusMessage *message; -+ DBusMessage *reply; -+ DBusMessageIter iter; -+ const char *value; -+ -+ if (str != NULL) { -+ *str = NULL; -+ } -+ -+ message = dbus_message_new_method_call (CK_NAME, -+ ssid, -+ CK_SESSION_INTERFACE, -+ "GetX11Display"); -+ if (message == NULL) { -+ Debug ("ConsoleKit: Couldn't allocate the D-Bus message"); -+ return FALSE; -+ } -+ -+ dbus_error_init (&error); -+ reply = dbus_connection_send_with_reply_and_block (connection, -+ message, -+ -1, &error); -+ if (dbus_error_is_set (&error)) { -+ Debug ("ConsoleKit: %s raised:\n %s\n\n", error.name, error.message); -+ reply = NULL; -+ } -+ -+ dbus_connection_flush (connection); -+ dbus_message_unref (message); -+ -+ if (reply == NULL) { -+ return FALSE; -+ } -+ -+ dbus_message_iter_init (reply, &iter); -+ dbus_message_iter_get_basic (&iter, &value); -+ if (str != NULL) { -+ *str = strdup (value); -+ } -+ dbus_message_unref (reply); -+ -+ return TRUE; -+} -+ -+static int -+session_unlock (DBusConnection *connection, -+ const char *ssid) -+{ -+ DBusError error; -+ DBusMessage *message; -+ DBusMessage *reply; -+ -+ Debug ("ConsoleKit: Unlocking session %s", ssid); -+ message = dbus_message_new_method_call (CK_NAME, -+ ssid, -+ CK_SESSION_INTERFACE, -+ "Unlock"); -+ if (message == NULL) { -+ Debug ("ConsoleKit: Couldn't allocate the D-Bus message"); -+ return FALSE; -+ } -+ -+ dbus_error_init (&error); -+ reply = dbus_connection_send_with_reply_and_block (connection, -+ message, -+ -1, &error); -+ dbus_message_unref (message); -+ dbus_message_unref (reply); -+ dbus_connection_flush (connection); -+ -+ if (dbus_error_is_set (&error)) { -+ Debug ("ConsoleKit: %s raised:\n %s\n\n", error.name, error.message); -+ return FALSE; -+ } -+ -+ return TRUE; -+} -+ -+/* from libhal */ -+static char ** -+get_path_array_from_iter (DBusMessageIter *iter, -+ int *num_elements) -+{ -+ int count; -+ char **buffer; -+ -+ count = 0; -+ buffer = (char **)malloc (sizeof (char *) * 8); -+ -+ if (buffer == NULL) -+ goto oom; -+ -+ buffer[0] = NULL; -+ while (dbus_message_iter_get_arg_type (iter) == DBUS_TYPE_OBJECT_PATH) { -+ const char *value; -+ char *str; -+ -+ if ((count % 8) == 0 && count != 0) { -+ buffer = realloc (buffer, sizeof (char *) * (count + 8)); -+ if (buffer == NULL) -+ goto oom; -+ } -+ -+ dbus_message_iter_get_basic (iter, &value); -+ str = strdup (value); -+ if (str == NULL) -+ goto oom; -+ -+ buffer[count] = str; -+ -+ dbus_message_iter_next (iter); -+ count++; -+ } -+ -+ if ((count % 8) == 0) { -+ buffer = realloc (buffer, sizeof (char *) * (count + 1)); -+ if (buffer == NULL) -+ goto oom; -+ } -+ -+ buffer[count] = NULL; -+ if (num_elements != NULL) -+ *num_elements = count; -+ return buffer; -+ -+oom: -+ LogWarn ("%s %d : error allocating memory\n", __FILE__, __LINE__); -+ return NULL; -+ -+} -+ -+static char ** -+get_sessions_for_user (DBusConnection *connection, -+ const char *user, -+ const char *x11_display) -+{ -+ DBusError error; -+ DBusMessage *message; -+ DBusMessage *reply; -+ DBusMessageIter iter; -+ DBusMessageIter iter_reply; -+ DBusMessageIter iter_array; -+ struct passwd *pwent; -+ char **sessions; -+ -+ sessions = NULL; -+ message = NULL; -+ reply = NULL; -+ -+ pwent = getpwnam (user); -+ -+ dbus_error_init (&error); -+ message = dbus_message_new_method_call (CK_NAME, -+ CK_MANAGER_PATH, -+ CK_MANAGER_INTERFACE, -+ "GetSessionsForUser"); -+ if (message == NULL) { -+ Debug ("ConsoleKit: Couldn't allocate the D-Bus message"); -+ goto out; -+ } -+ -+ dbus_message_iter_init_append (message, &iter); -+ dbus_message_iter_append_basic (&iter, -+ DBUS_TYPE_UINT32, -+ &pwent->pw_uid); -+ -+ dbus_error_init (&error); -+ reply = dbus_connection_send_with_reply_and_block (connection, -+ message, -+ -1, &error); -+ dbus_connection_flush (connection); -+ -+ if (dbus_error_is_set (&error)) { -+ Debug ("ConsoleKit: %s raised:\n %s\n\n", error.name, error.message); -+ goto out; -+ } -+ -+ if (reply == NULL) { -+ Debug ("ConsoleKit: No reply for GetSessionsForUser"); -+ goto out; -+ } -+ -+ dbus_message_iter_init (reply, &iter_reply); -+ if (dbus_message_iter_get_arg_type (&iter_reply) != DBUS_TYPE_ARRAY) { -+ Debug ("ConsoleKit: Wrong reply for GetSessionsForUser - expecting an array."); -+ goto out; -+ } -+ -+ dbus_message_iter_recurse (&iter_reply, &iter_array); -+ sessions = get_path_array_from_iter (&iter_array, NULL); -+ -+ out: -+ if (message != NULL) { -+ dbus_message_unref (message); -+ } -+ if (reply != NULL) { -+ dbus_message_unref (reply); -+ } -+ -+ return sessions; -+} -+ -+void -+unlock_ck_session (const char *user, -+ const char *x11_display) -+{ -+ DBusError error; -+ DBusConnection *connection; -+ char **sessions; -+ int i; -+ -+ Debug ("ConsoleKit: Unlocking session for %s on %s", user, x11_display); -+ -+ dbus_error_init (&error); -+ connection = dbus_bus_get (DBUS_BUS_SYSTEM, &error); -+ if (connection == NULL) { -+ Debug ("ConsoleKit: Failed to connect to the D-Bus daemon: %s", error.message); -+ dbus_error_free (&error); -+ return; -+ } -+ -+ sessions = get_sessions_for_user (connection, user, x11_display); -+ if (sessions == NULL || sessions[0] == NULL) { -+ Debug ("ConsoleKit: no sessions found"); -+ return; -+ } -+ -+ for (i = 0; sessions[i] != NULL; i++) { -+ char *ssid; -+ char *xdisplay; -+ -+ ssid = sessions[i]; -+ session_get_x11_display (connection, ssid, &xdisplay); -+ Debug ("ConsoleKit: session %s has DISPLAY %s", ssid, xdisplay); -+ -+ if (xdisplay != NULL -+ && x11_display != NULL -+ && strcmp (xdisplay, x11_display) == 0) { -+ int res; -+ -+ res = session_unlock (connection, ssid); -+ if (! res) { -+ LogError ("ConsoleKit: Unable to unlock %s", ssid); -+ } -+ } -+ -+ free (xdisplay); -+ } -+ -+ freeStrArr (sessions); -+} -+ -+char * -+open_ck_session (struct passwd *pwent, -+ struct display *d) -+{ -+ DBusConnection *connection; -+ DBusError error; -+ DBusMessage *message; -+ DBusMessage *reply; -+ DBusMessageIter iter; -+ DBusMessageIter iter_struct; -+ char *cookie; -+ -+ cookie = NULL; -+ -+ Debug ("ConsoleKit: Opening session for %s", pwent->pw_name); -+ -+ dbus_error_init (&error); -+ connection = dbus_bus_get_private (DBUS_BUS_SYSTEM, &error); -+ private_connection = connection; -+ -+ if (connection == NULL) { -+ Debug ("ConsoleKit: Failed to connect to the D-Bus daemon: %s", error.message); -+ dbus_error_free (&error); -+ return NULL; -+ } -+ -+ dbus_connection_set_exit_on_disconnect (connection, FALSE); -+ /* FIXME: What to do about these? -+ dbus_connection_set_watch_functions( connection, -+ dbusAddWatch, -+ dbusRemoveWatch, -+ dbusToggleWatch, -+ data, 0 ); -+ dbus_connection_set_timeout_functions( connection, -+ dbusAddTimeout, -+ dbusRemoveTimeout, -+ dbusToggleTimeout, -+ data, 0 ); -+ dbus_connection_set_wakeup_main_function( connection, -+ dbusWakeupMain, -+ data, 0 ); */ -+ -+ dbus_error_init (&error); -+ message = dbus_message_new_method_call (CK_NAME, -+ CK_MANAGER_PATH, -+ CK_MANAGER_INTERFACE, -+ "OpenSessionWithParameters"); -+ if (message == NULL) { -+ Debug ("ConsoleKit: Couldn't allocate the D-Bus message"); -+ return NULL; -+ } -+ -+ dbus_message_iter_init_append (message, &iter); -+ dbus_message_iter_open_container (&iter, -+ DBUS_TYPE_ARRAY, -+ DBUS_STRUCT_BEGIN_CHAR_AS_STRING -+ DBUS_TYPE_STRING_AS_STRING -+ DBUS_TYPE_VARIANT_AS_STRING -+ DBUS_STRUCT_END_CHAR_AS_STRING, -+ &iter_struct); -+ -+ add_param_int (&iter_struct, "user", pwent->pw_uid); -+ add_param_string (&iter_struct, "x11-display", d->name); -+ add_param_boolean (&iter_struct, "is-local", ((d->displayType & d_location) == dLocal)); -+#ifdef XDMCP -+ if (d->status == remoteLogin && !((d->displayType & d_location) == dLocal)) { -+ add_param_string (&iter_struct, "remote-host-name", d->remoteHost); -+ } -+#endif -+ -+#ifdef HAVE_VTS -+ if (d->serverVT > 0) { -+ char device[20]; -+ -+ /* FIXME: how does xorg construct this */ -+ sprintf(device, "/dev/tty%d", d->serverVT); -+ add_param_string (&iter_struct, "x11-display-device", device); -+ } -+#endif -+ -+ dbus_message_iter_close_container (&iter, &iter_struct); -+ -+ reply = dbus_connection_send_with_reply_and_block (connection, -+ message, -+ -1, &error); -+ if (dbus_error_is_set (&error)) { -+ Debug ("ConsoleKit: %s raised:\n %s\n\n", error.name, error.message); -+ reply = NULL; -+ } -+ -+ dbus_connection_flush (connection); -+ -+ dbus_message_unref (message); -+ dbus_error_free (&error); -+ -+ if (reply != NULL) { -+ const char *value; -+ -+ dbus_message_iter_init (reply, &iter); -+ dbus_message_iter_get_basic (&iter, &value); -+ cookie = strdup (value); -+ dbus_message_unref (reply); -+ } -+ -+ return cookie; -+} -+ -+void -+close_ck_session (const char *cookie) -+{ -+ DBusError error; -+ DBusMessage *message; -+ DBusMessage *reply; -+ DBusMessageIter iter; -+ -+ if (cookie == NULL) { -+ return; -+ } -+ -+ if (private_connection == NULL) { -+ return; -+ } -+ -+ dbus_error_init (&error); -+ message = dbus_message_new_method_call (CK_NAME, -+ CK_MANAGER_PATH, -+ CK_MANAGER_INTERFACE, -+ "CloseSession"); -+ if (message == NULL) { -+ Debug ("ConsoleKit: Couldn't allocate the D-Bus message"); -+ return; -+ } -+ -+ dbus_message_iter_init_append (message, &iter); -+ dbus_message_iter_append_basic (&iter, -+ DBUS_TYPE_STRING, -+ &cookie); -+ -+ reply = dbus_connection_send_with_reply_and_block (private_connection, -+ message, -+ -1, &error); -+ if (dbus_error_is_set (&error)) { -+ Debug ("ConsoleKit: %s raised:\n %s\n\n", error.name, error.message); -+ reply = NULL; -+ } -+ -+ dbus_connection_flush (private_connection); -+ -+ dbus_message_unref (message); -+ dbus_error_free (&error); -+ -+ dbus_connection_close (private_connection); -+ private_connection = NULL; -+} -Index: kdm/backend/consolekit.h -=================================================================== ---- /dev/null -+++ kdm/backend/consolekit.h -@@ -0,0 +1,36 @@ -+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- -+ * -+ * Copyright (C) 2006 William Jon McCann -+ * Copyright (C) 2007 Kevin Kofler -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -+ * -+ */ -+ -+ -+#ifndef __CONSOLE_KIT_H -+#define __CONSOLE_KIT_H -+ -+#include -+ -+struct display; -+ -+char * open_ck_session (struct passwd *pwent, -+ struct display *display); -+void close_ck_session (const char *cookie); -+void unlock_ck_session (const char *user, -+ const char *x11_display); -+ -+#endif /* __CONSOLE_KIT_H */ -Index: kdm/backend/dm.h -=================================================================== ---- kdm/backend/dm.h.orig -+++ kdm/backend/dm.h -@@ -37,6 +37,8 @@ from the copyright holder. - #ifndef _DM_H_ - #define _DM_H_ 1 - -+#define WITH_CONSOLE_KIT -+ - #include "greet.h" - #include - -@@ -476,7 +478,11 @@ char **GRecvArgv( void ); - #define GCONV_BINARY 5 - typedef char *(*GConvFunc)( int what, const char *prompt ); - int Verify( GConvFunc gconv, int rootok ); -+#ifdef WITH_CONSOLE_KIT -+int StartClient( const char *ck_session_cookie ); -+#else - int StartClient( void ); -+#endif - void SessionExit( int status ) ATTR_NORETURN; - int ReadDmrc( void ); - extern char **userEnviron, **systemEnviron; -Index: kdm/backend/Imakefile -=================================================================== ---- kdm/backend/Imakefile.orig -+++ kdm/backend/Imakefile -@@ -155,13 +155,13 @@ PROCTITLE_DEFINES = -DHAS_SETPROCTITLE - netaddr.c reset.c resource.c protodpy.c policy.c \ - session.c socket.c streams.c util.c xdmcp.c \ - process.c mitauth.c \ -- genauth.c access.c choose.c \ -+ genauth.c access.c choose.c consolekit.c \ - $(XDMAUTHSRCS) $(RPCSRCS) $(KRB5SRCS) - COMMOBJS = auth.o daemon.o server.o dpylist.o dm.o error.o \ - netaddr.o reset.o resource.o protodpy.o policy.o \ - session.o socket.o streams.o util.o xdmcp.o \ - process.o mitauth.o \ -- genauth.o access.o choose.o \ -+ genauth.o access.o choose.o consolekit.o \ - $(XDMAUTHOBJS) $(RPCOBJS) $(KRB5OBJS) - - SRCS1 = $(COMMSRCS) client.c -Index: kdm/backend/Makefile.am -=================================================================== ---- kdm/backend/Makefile.am.orig -+++ kdm/backend/Makefile.am -@@ -1,6 +1,6 @@ - # forcibly remove thread-related defines & flags - AUTOMAKE_OPTIONS = foreign --AM_CPPFLAGS = $(USER_INCLUDES) $(X_INCLUDES) $(KRB4_INCS) $(KRB5_INCS) -I.. -I../.. -+AM_CPPFLAGS = -DWITH_CONSOLE_KIT=1 $(USER_INCLUDES) $(X_INCLUDES) $(KRB4_INCS) $(KRB5_INCS) $(DBUS_INCS) -I.. -I../.. - - bin_PROGRAMS = kdm - kdm_SOURCES = \ -@@ -9,6 +9,7 @@ kdm_SOURCES = \ - bootman.c \ - choose.c \ - client.c \ -+ consolekit.c \ - ctrl.c \ - daemon.c \ - dm.c \ -@@ -37,7 +38,7 @@ kdm_SOURCES = \ - kdm_LDFLAGS = $(USER_LDFLAGS) $(X_LDFLAGS) $(X_RPATH) $(KRB4_RPATH) $(KRB5_RPATH) - kdm_LDADD = $(LIB_X11) -lXau $(LIBXDMCP) $(PASSWDLIBS) \ - $(LIB_LIBS) $(KRB4_LIBS) $(KRB5_LIBS) $(LIBSOCKET) $(LIBRESOLV) \ -- $(LIBUCB) $(LIBUTIL) $(LIBPOSIX4) -+ $(DBUS_LIBS) $(LIBUCB) $(LIBUTIL) $(LIBPOSIX4) - - EXTRA_DIST = printf.c - -Index: kdm/backend/session.c -=================================================================== ---- kdm/backend/session.c.orig -+++ kdm/backend/session.c -@@ -45,6 +45,10 @@ from the copyright holder. - #include - #include - -+#ifdef WITH_CONSOLE_KIT -+#include "consolekit.h" -+#endif -+ - struct display *td; - const char *td_setup = "auto"; - -@@ -530,6 +534,9 @@ ManageSession( struct display *d ) - int ex, cmd; - volatile int clientPid = 0; - volatile Time_t tdiff = 0; -+#ifdef WITH_CONSOLE_KIT -+ char *ck_session_cookie; -+#endif - - td = d; - Debug( "ManageSession %s\n", d->name ); -@@ -626,7 +633,12 @@ ManageSession( struct display *d ) - if (td_setup) - SetupDisplay( td_setup ); - -+#ifdef WITH_CONSOLE_KIT -+ ck_session_cookie = open_ck_session (getpwnam(curuser), d); -+ if (!(clientPid = StartClient(ck_session_cookie))) { -+#else - if (!(clientPid = StartClient())) { -+#endif - LogError( "Client start failed\n" ); - SessionExit( EX_NORMAL ); /* XXX maybe EX_REMANAGE_DPY? -- enable in dm.c! */ - } -@@ -648,6 +660,14 @@ ManageSession( struct display *d ) - catchTerm( SIGTERM ); - } - } -+ -+#ifdef WITH_CONSOLE_KIT -+ if (ck_session_cookie != NULL) { -+ close_ck_session (ck_session_cookie); -+ free (ck_session_cookie); -+ } -+#endif -+ - /* - * Sometimes the Xsession somehow manages to exit before - * a server crash is noticed - so we sleep a bit and wait -Index: kdm/configure.in.in -=================================================================== ---- kdm/configure.in.in.orig -+++ kdm/configure.in.in -@@ -240,4 +240,51 @@ if test "x$with_kdm_xconsole" = xyes; th - AC_DEFINE(WITH_KDM_XCONSOLE, 1, [Build kdm with built-in xconsole]) - fi - -+########### Check for DBus -+ -+ AC_MSG_CHECKING(for DBus) -+ -+ dbus_inc=NOTFOUND -+ dbus_lib=NOTFOUND -+ dbus=NOTFOUND -+ -+ search_incs="$kde_includes $kde_extra_includes /usr/include /usr/include/dbus-1.0 /usr/local/include /usr/local/include/dbus-1.0" -+ AC_FIND_FILE(dbus/dbus.h, $search_incs, dbus_incdir) -+ -+ search_incs_arch_deps="$kde_includes $kde_extra_includes /usr/lib$kdelibsuff/dbus-1.0/include /usr/local/lib$kdelibsuff/dbus-1.0/include" -+ AC_FIND_FILE(dbus/dbus-arch-deps.h, $search_incs_arch_deps, dbus_incdir_arch_deps) -+ -+ if test -r $dbus_incdir/dbus/dbus.h && test -r $dbus_incdir_arch_deps/dbus/dbus-arch-deps.h ; then -+ DBUS_INCS="-I$dbus_incdir -I$dbus_incdir_arch_deps" -+ dbus_inc=FOUND -+ fi -+ -+ search_libs="$kde_libraries $kde_extra_libs /usr/lib$kdelibsuff /usr/local/lib$kdelibsuff" -+ AC_FIND_FILE(libdbus-1.so, $search_libs, dbus_libdir) -+ -+ if test -r $dbus_libdir/libdbus-1.so ; then -+ DBUS_LIBS="-L$dbus_libdir -ldbus-1" -+ dbus_lib=FOUND -+ fi -+ -+ if test $dbus_inc != FOUND || test $dbus_lib != FOUND ; then -+ KDE_PKG_CHECK_MODULES( DBUS, "dbus-1", [ DBUS_INCS=$DBUS_CFLAGS; dbus_inc=FOUND; dbus_lib=FOUND; ] , AC_MSG_RESULT( Nothing found on PKG_CONFIG_PATH ) ) -+ fi -+ -+ dbus_bus_var=`pkg-config --variable=system_bus_default_address dbus-1 2>/dev/null` -+ if test -z "$dbus_bus_var"; then -+ dbus_bus_var="unix:path=/var/run/dbus/system_bus_socket" -+ fi -+ AC_DEFINE_UNQUOTED(DBUS_SYSTEM_BUS, "$dbus_bus_var", [Define the unix domain path for dbus system bus]) -+ -+ if test $dbus_inc = FOUND && test $dbus_lib = FOUND ; then -+ AC_MSG_RESULT(headers $DBUS_INCS libraries $DBUS_LIBS) -+ dbus=FOUND -+ else -+ AC_MSG_RESULT(searched but not found) -+ fi -+ -+ AC_SUBST(DBUS_INCS) -+ AC_SUBST(DBUS_LIBS) -+ - dnl AC_OUTPUT(kdm/kfrontend/sessions/kde.desktop) diff --git a/opensuse/tdebase/kdm-cope-with-new-grub.diff b/opensuse/tdebase/kdm-cope-with-new-grub.diff deleted file mode 100644 index cf28cf9be..000000000 --- a/opensuse/tdebase/kdm-cope-with-new-grub.diff +++ /dev/null @@ -1,27 +0,0 @@ -Index: kdm/backend/bootman.c -=================================================================== ---- kdm/backend/bootman.c.orig -+++ kdm/backend/bootman.c -@@ -132,19 +132,14 @@ setGrub( const char *opt, SdRec *sdr ) - static void - commitGrub( void ) - { -- FILE *f; -- int pid; -- static const char *args[] = { 0, "--batch", "--no-floppy", 0 }; -+ char buffer[PATH_MAX]; - - if (sdRec.bmstamp != mTime( GRUB_MENU ) && - setGrub( sdRec.osname, &sdRec ) != BO_OK) - return; - -- args[0] = grub; -- if ((f = pOpen( (char **)args, 'w', &pid ))) { -- fprintf( f, "savedefault --default=%d --once\n", sdRec.osindex ); -- pClose( f, pid ); -- } -+ snprintf(buffer, PATH_MAX, "/usr/sbin/grubonce %d", sdRec.osindex); -+ system(buffer); - } - - static char *lilo; diff --git a/opensuse/tdebase/kdm-make_it_cool.diff b/opensuse/tdebase/kdm-make_it_cool.diff deleted file mode 100644 index fb1f5b076..000000000 --- a/opensuse/tdebase/kdm-make_it_cool.diff +++ /dev/null @@ -1,1534 +0,0 @@ -Index: kdm/kfrontend/kdm_greet.c -=================================================================== ---- kdm/kfrontend/kdm_greet.c.orig -+++ kdm/kfrontend/kdm_greet.c -@@ -44,8 +44,8 @@ Foundation, Inc., 51 Franklin Street, Fi - # include - #endif - --#if defined(HAVE_XTEST) || defined(HAVE_XKB) - # include -+#if defined(HAVE_XTEST) || defined(HAVE_XKB) - # include - #endif - -Index: kdm/kfrontend/themer/kdmrect.h -=================================================================== ---- kdm/kfrontend/themer/kdmrect.h.orig -+++ kdm/kfrontend/themer/kdmrect.h -@@ -36,6 +36,7 @@ class KdmRect : public KdmItem { - - public: - KdmRect( KdmItem *parent, const QDomNode &node, const char *name = 0 ); -+ KdmRect( QWidget *parent, const QDomNode &node, const char *name = 0 ); - - protected: - // draw the rect -@@ -54,8 +55,9 @@ protected: - bool hasBorder; - } rect; - --// virtual void setWidget( QWidget *widget ); -+ virtual void setWidget( QWidget *widget ); - // virtual void setLayoutItem( QLayoutItem *item ); -+ void init( const QDomNode &node, const char *name ); - - private: - void setAttribs( QWidget *widget ); -Index: kdm/kfrontend/themer/kdmitem.h -=================================================================== ---- kdm/kfrontend/themer/kdmitem.h.orig -+++ kdm/kfrontend/themer/kdmitem.h -@@ -90,6 +90,8 @@ public: - * Item constructor and destructor - */ - KdmItem( KdmItem *parent, const QDomNode &node = QDomNode(), const char *name = 0 ); -+ KdmItem( QWidget *parent, const QDomNode &node = QDomNode(), const char *name = 0 ); // for the root -+ - virtual ~KdmItem(); - - /** -@@ -151,6 +153,7 @@ public: - - KdmItem *findNode( const QString &id ) const; - virtual void setWidget( QWidget *widget ); -+ QWidget *widget() const { return myWidget; } - virtual void setLayoutItem( QLayoutItem *item ); - - virtual void hide( bool force = false ); -@@ -160,6 +163,9 @@ public: - bool isExplicitlyHidden() const { return isShown == ExplicitlyHidden; } - QRect rect() const { return area; } - -+ QWidget *parentWidget() const; -+ QString getId() const { return id; } -+ - signals: - void needUpdate( int x, int y, int w, int h ); - void activated( const QString &id ); -@@ -237,6 +243,7 @@ protected: - void parseColor( const QString &, QColor & ); - - void inheritFromButton( KdmItem *button ); -+ void init( const QDomNode &node = QDomNode(), const char *name = 0 ); - - QString itemType, id; - QValueList m_children; -Index: kdm/kfrontend/themer/kdmpixmap.h -=================================================================== ---- kdm/kfrontend/themer/kdmpixmap.h.orig -+++ kdm/kfrontend/themer/kdmpixmap.h -@@ -61,9 +61,10 @@ protected: - } pixmap; - - private: -- // Method to load the pixmap given by the theme -- void loadPixmap( const QString &fileName, QPixmap &p, QString &path ); -+ // Method to load the pixmap path given by the theme -+ QString fullPath( const QString &fileName ); - void renderSvg( PixmapStruct::PixmapClass *pClass, const QRect &area ); -+ void loadPixmap( PixmapStruct::PixmapClass *pClass ); - }; - - #endif -Index: kdm/kfrontend/themer/kdmlabel.h -=================================================================== ---- kdm/kfrontend/themer/kdmlabel.h.orig -+++ kdm/kfrontend/themer/kdmlabel.h -@@ -67,6 +67,7 @@ protected: - - public slots: - void update(); -+ void slotAccel(); - - private: - /* Method to lookup the caption associated with an item */ -@@ -76,6 +77,10 @@ private: - QString lookupText( const QString &t ); - - QString cText; -+ int cAccel; -+ QAccel *myAccel; -+ -+ void setTextInt(const QString &); - }; - - #endif -Index: kdm/kfrontend/themer/kdmthemer.cpp -=================================================================== ---- kdm/kfrontend/themer/kdmthemer.cpp.orig -+++ kdm/kfrontend/themer/kdmthemer.cpp -@@ -36,11 +36,13 @@ - - #include - #include --//#include // animation timer - TODO -+#include // animation timer - TODO - #include - #include - #include - #include -+#include -+#include - - #include - -@@ -72,7 +74,8 @@ KdmThemer::KdmThemer( const QString &_fi - return; - } - // Set the root (screen) item -- rootItem = new KdmRect( 0, QDomNode(), "kdm root" ); -+ rootItem = new KdmRect( parent, QDomNode(), "kdm root" ); -+ - connect( rootItem, SIGNAL(needUpdate( int, int, int, int )), - widget(), SLOT(update( int, int, int, int )) ); - -@@ -82,6 +85,9 @@ KdmThemer::KdmThemer( const QString &_fi - generateItems( rootItem ); - - connect( rootItem, SIGNAL(activated( const QString & )), SIGNAL(activated( const QString & )) ); -+ connect( rootItem, SIGNAL(activated( const QString & )), SLOT(slotActivated( const QString & )) ); -+ -+ QTimer::singleShot(800, this, SLOT(slotPaintRoot())); - - /* *TODO* - // Animation timer -@@ -151,7 +157,7 @@ KdmThemer::widgetEvent( QEvent *e ) - case QEvent::Paint: - { - QRect paintRect = static_cast(e)->rect(); -- kdDebug() << "paint on: " << paintRect << endl; -+ kdDebug() << timestamp() << " paint on: " << paintRect << endl; - - if (!backBuffer) - backBuffer = new QPixmap( widget()->size() ); -@@ -195,7 +201,7 @@ KdmThemer::generateItems( KdmItem *paren - - // Get its tag, and check it's correct ("greeter") - if (theme.tagName() != "greeter") { -- kdDebug() << "This does not seem to be a correct theme file." << endl; -+ kdDebug() << timestamp() << " This does not seem to be a correct theme file." << endl; - return; - } - // Get the list of child nodes -@@ -214,6 +220,13 @@ KdmThemer::generateItems( KdmItem *paren - if (tagName == "item") { - if (!willDisplay( subnode )) - continue; -+ QString id = el.attribute("id"); -+ if (id.startsWith("plugin-specific-")) { -+ id = id.mid(strlen("plugin-specific-")); -+ if (!_pluginsLogin.contains(id)) -+ continue; -+ } -+ - // It's a new item. Draw it - QString type = el.attribute( "type" ); - -@@ -225,13 +238,11 @@ KdmThemer::generateItems( KdmItem *paren - newItem = new KdmPixmap( parent, subnode ); - else if (type == "rect") - newItem = new KdmRect( parent, subnode ); -- else if (type == "entry") { -+ else if (type == "entry" || type == "list") { - newItem = new KdmRect( parent, subnode ); - newItem->setType( type ); - } - // newItem = new KdmEntry( parent, subnode ); -- //else if (type=="list") -- // newItem = new KdmList( parent, subnode ); - else if (type == "svg") - newItem = new KdmPixmap( parent, subnode ); - if (newItem) { -@@ -287,6 +298,11 @@ bool KdmThemer::willDisplay( const QDomN - #endif - if (type == "halt" || type == "reboot") - return _allowShutdown != SHUT_NONE; -+ else if (type == "userlist") -+ return _userList; -+ else if ( type == "!userlist" ) -+ return !_userList; -+ - // if (type == "system") - // return true; - -@@ -301,7 +317,7 @@ KdmThemer::showStructure( QObject *obj ) - const QObjectList *wlist = obj->children(); - static int counter = 0; - if (counter == 0) -- kdDebug() << "\n\n<======= Widget tree =================" << endl; -+ kdDebug() << timestamp() << " \n\n<======= Widget tree =================" << endl; - if (wlist) { - counter++; - QObjectListIterator it( *wlist ); -@@ -323,7 +339,46 @@ KdmThemer::showStructure( QObject *obj ) - counter--; - } - if (counter == 0) -- kdDebug() << "\n\n<======= Widget tree =================\n\n" << endl; -+ kdDebug() << timestamp() << " \n\n<======= Widget tree =================\n\n" << endl; -+} -+ -+void -+KdmThemer::slotActivated( const QString &id ) -+{ -+ QString toactivate; -+ if (id == "username-label") -+ toactivate = "user-entry"; -+ else if (id == "password-label") -+ toactivate = "pw-entry"; -+ else -+ return; -+ -+ KdmItem *item = findNode(toactivate); -+ if (!item || !item->widget()) -+ return; -+ -+ item->widget()->setFocus(); -+ QLineEdit *le = (QLineEdit*)item->widget()->qt_cast("QLineEdit"); -+ if (le) -+ le->selectAll(); -+} -+ -+void -+KdmThemer::slotPaintRoot() -+{ -+ KdmItem *back_item = findNode("background"); -+ if (!back_item) -+ return; -+ -+ QRect screen = QApplication::desktop()->screenGeometry(0); -+ QPixmap pm(screen.size()); -+ -+ QPainter painter( &pm, true ); -+ back_item->paint( &painter, back_item->rect()); -+ painter.end(); -+ -+ QApplication::desktop()->screen()->setErasePixmap(pm); -+ QApplication::desktop()->screen()->erase(); - } - - #include "kdmthemer.moc" -Index: kdm/kfrontend/themer/kdmthemer.h -=================================================================== ---- kdm/kfrontend/themer/kdmthemer.h.orig -+++ kdm/kfrontend/themer/kdmthemer.h -@@ -80,6 +80,10 @@ public: - signals: - void activated( const QString &id ); - -+protected slots: -+ void slotActivated( const QString &id ); -+ void slotPaintRoot(); -+ - private: - /* - * Our display mode (e.g. console, remote, ...) -Index: kdm/kfrontend/themer/kdmlayout.cpp -=================================================================== ---- kdm/kfrontend/themer/kdmlayout.cpp.orig -+++ kdm/kfrontend/themer/kdmlayout.cpp -@@ -20,6 +20,7 @@ - */ - - #include "kdmlayout.h" -+#include "kdmconfig.h" - #include "kdmitem.h" - - #include -@@ -35,11 +36,11 @@ KdmLayoutFixed::KdmLayoutFixed( const QD - void - KdmLayoutFixed::update( const QRect &parentGeometry, bool force ) - { -- kdDebug() << "KdmLayoutFixed::update " << parentGeometry << endl; -+ kdDebug() << timestamp() << " KdmLayoutFixed::update " << parentGeometry << endl; - - // I can't layout children if the parent rectangle is not valid - if (parentGeometry.width() < 0 || parentGeometry.height() < 0) { -- kdDebug() << "invalid\n"; -+ kdDebug() << timestamp() << " invalid\n"; - return; - } - // For each child in list I ask their hinted size and set it! -@@ -102,7 +103,7 @@ KdmLayoutBox::update( const QRect &paren - childrenRect.setTop( childrenRect.top() + height + box.spacing ); - } else { - QRect temp( childrenRect.left(), childrenRect.top(), width, childrenRect.height() ); -- kdDebug() << "placement " << *it << " " << temp << " " << (*it)->placementHint( temp ) << endl; -+ kdDebug() << timestamp() << " placement " << *it << " " << temp << " " << (*it)->placementHint( temp ) << endl; - temp = (*it)->placementHint( temp ); - (*it)->setGeometry( temp, force ); - childrenRect.setLeft( childrenRect.left() + width + box.spacing ); -@@ -125,7 +126,7 @@ KdmLayoutBox::update( const QRect &paren - kdDebug() << this << " placementHint " << *it << " " << temp << " " << itemRect << endl; - temp.setWidth( itemRect.width() ); - childrenRect.setLeft( childrenRect.left() + itemRect.size().width() + box.spacing ); -- kdDebug() << "childrenRect after " << *it << " " << childrenRect << endl; -+ kdDebug() << timestamp() << " childrenRect after " << *it << " " << childrenRect << endl; - } - itemRect = (*it)->placementHint( temp ); - kdDebug() << this << " placementHint2 " << *it << " " << temp << " " << itemRect << endl; -Index: kdm/kfrontend/themer/kdmrect.cpp -=================================================================== ---- kdm/kfrontend/themer/kdmrect.cpp.orig -+++ kdm/kfrontend/themer/kdmrect.cpp -@@ -33,6 +33,18 @@ - KdmRect::KdmRect( KdmItem *parent, const QDomNode &node, const char *name ) - : KdmItem( parent, node, name ) - { -+ init( node, name ); -+} -+ -+KdmRect::KdmRect( QWidget *parent, const QDomNode &node, const char *name ) -+ : KdmItem( parent, node, name ) -+{ -+ init( node, name ); -+} -+ -+void -+KdmRect::init( const QDomNode &node, const char * ) -+{ - itemType = "rect"; - - // Set default values for rect (note: strings are already Null) -@@ -137,13 +149,6 @@ KdmRect::recursiveSetAttribs( QLayoutIte - } - - void --KdmRect::setWidget( QWidget *widget ) --{ -- KdmItem::setWidget( widget ); -- setAttribs( widget ); --} -- --void - KdmRect::setLayoutItem( QLayoutItem *item ) - { - KdmItem::setLayoutItem( item ); -@@ -151,4 +156,17 @@ KdmRect::setLayoutItem( QLayoutItem *ite - } - */ - -+void -+KdmRect::setWidget( QWidget *widget ) -+{ -+ if ( rect.normal.color.isValid() && widget ) -+ { -+ QPalette p = widget->palette(); -+ p.setColor( QPalette::Normal, QColorGroup::Text, rect.normal.color ); -+ widget->setPalette(p); -+ } -+ KdmItem::setWidget( widget ); -+ //setAttribs( widget ); -+} -+ - #include "kdmrect.moc" -Index: kdm/kfrontend/themer/kdmitem.cpp -=================================================================== ---- kdm/kfrontend/themer/kdmitem.cpp.orig -+++ kdm/kfrontend/themer/kdmitem.cpp -@@ -23,10 +23,11 @@ - * Generic Kdm Item - */ - --//#define DRAW_OUTLINE 1 // for debugging only -+// #define DRAW_OUTLINE 1 // for debugging only - - #include "kdmitem.h" - #include "kdmlayout.h" -+#include "kdmconfig.h" - - #include - #include -@@ -35,9 +36,7 @@ - #include - #include - #include --#ifdef DRAW_OUTLINE --# include --#endif -+#include - - KdmItem::KdmItem( KdmItem *parent, const QDomNode &node, const char *name ) - : QObject( parent, name ) -@@ -48,6 +47,25 @@ KdmItem::KdmItem( KdmItem *parent, const - , myLayoutItem( 0 ) - , buttonParent( 0 ) - { -+ init(node, name); -+} -+ -+ -+KdmItem::KdmItem( QWidget *parent, const QDomNode &node, const char *name ) -+ : QObject( parent, name ) -+ , boxManager( 0 ) -+ , fixedManager( 0 ) -+ , image( 0 ) -+ , myWidget( 0 ) -+ , myLayoutItem( 0 ) -+ , buttonParent( 0 ) -+{ -+ init(node, name); -+} -+ -+void -+KdmItem::init( const QDomNode &node, const char * ) -+{ - // Set default layout for every item - currentManager = MNone; - pos.x = pos.y = 0; -@@ -62,7 +80,7 @@ KdmItem::KdmItem( KdmItem *parent, const - state = Snormal; - - // The "toplevel" node (the screen) is really just like a fixed node -- if (!parent || !parent->inherits( "KdmItem" )) { -+ if (!parent() || !parent()->inherits( "KdmItem" )) { - setFixedLayout(); - return; - } -@@ -87,7 +105,7 @@ KdmItem::KdmItem( KdmItem *parent, const - id = tnode.toElement().attribute( "id", QString::number( (ulong)this, 16 ) ); - - // Tell 'parent' to add 'me' to its children -- KdmItem *parentItem = static_cast( parent ); -+ KdmItem *parentItem = static_cast( parent() ); - parentItem->addChildItem( this ); - } - -@@ -195,7 +213,7 @@ KdmItem::setWidget( QWidget *widget ) - if (frame) - frame->setFrameStyle( QFrame::NoFrame ); - -- myWidget->setGeometry(area); -+ setGeometry(area, true); - - connect( myWidget, SIGNAL(destroyed()), SLOT(widgetGone()) ); - } -@@ -236,15 +254,21 @@ KdmItem::setGeometry( const QRect &newGe - - area = newGeometry; - -- if (myWidget) -- myWidget->setGeometry( newGeometry ); -+ if (myWidget) { -+ QRect widGeo = newGeometry; -+ if ( widGeo.height() > myWidget->maximumHeight() ) { -+ widGeo.moveTop( widGeo.top() + ( widGeo.height() - myWidget->maximumHeight() ) / 2 ); -+ widGeo.setHeight( myWidget->maximumHeight() ); -+ } -+ myWidget->setGeometry( widGeo ); -+ } - if (myLayoutItem) - myLayoutItem->setGeometry( newGeometry ); - - // recurr to all boxed children - if (boxManager && !boxManager->isEmpty()) - boxManager->update( newGeometry, force ); -- -+ - // recurr to all fixed children - if (fixedManager && !fixedManager->isEmpty()) - fixedManager->update( newGeometry, force ); -@@ -258,8 +282,16 @@ KdmItem::paint( QPainter *p, const QRect - if (isHidden()) - return; - -- if (myWidget || (myLayoutItem && myLayoutItem->widget())) -- return; -+ if (myWidget || (myLayoutItem && myLayoutItem->widget())) { -+ // KListView because it's missing a Q_OBJECT -+ if ( myWidget && myWidget->isA( "KListView" ) ) { -+ QPixmap copy( myWidget->size() ); -+ kdDebug() << myWidget->geometry() << " " << area << " " << myWidget->size() << endl; -+ bitBlt( ©, QPoint( 0, 0), p->device(), myWidget->geometry(), Qt::CopyROP ); -+ myWidget->setPaletteBackgroundPixmap( copy ); -+ } -+ return; -+ } - - if (area.intersects( rect )) { - QRect contentsRect = area.intersect( rect ); -@@ -280,6 +312,8 @@ KdmItem::paint( QPainter *p, const QRect - QValueList::Iterator it; - for (it = m_children.begin(); it != m_children.end(); ++it) - (*it)->paint( p, rect ); -+ -+ - } - - KdmItem *KdmItem::currentActive = 0; -@@ -287,8 +321,11 @@ KdmItem *KdmItem::currentActive = 0; - void - KdmItem::mouseEvent( int x, int y, bool pressed, bool released ) - { -+ if (isShown == ExplicitlyHidden) -+ return; -+ - if (buttonParent && buttonParent != this) { -- buttonParent->mouseEvent( x, y, pressed, released ); -+ buttonParent->mouseEvent( x, y, pressed, released ); - return; - } - -@@ -362,7 +399,8 @@ KdmItem::placementHint( const QRect &par - w = parentRect.width(), - h = parentRect.height(); - -- kdDebug() << "KdmItem::placementHint parentRect=" << id << parentRect << " hintedSize=" << hintedSize << endl; -+ kdDebug() << timestamp() << " KdmItem::placementHint parentRect=" << parentRect << " hintedSize=" << hintedSize << endl; -+ - // check if width or height are set to "box" - if (pos.wType == DTbox || pos.hType == DTbox) { - if (myLayoutItem || myWidget) -@@ -372,7 +410,7 @@ KdmItem::placementHint( const QRect &par - return parentRect; - boxHint = boxManager->sizeHint(); - } -- kdDebug() << " => boxHint " << boxHint << endl; -+ kdDebug() << timestamp() << " boxHint " << boxHint << endl; - } - - if (pos.xType == DTpixel) -@@ -380,25 +418,25 @@ KdmItem::placementHint( const QRect &par - else if (pos.xType == DTnpixel) - x = parentRect.right() - pos.x; - else if (pos.xType == DTpercent) -- x += int( parentRect.width() / 100.0 * pos.x ); -+ x += qRound( parentRect.width() / 100.0 * pos.x ); - - if (pos.yType == DTpixel) - y += pos.y; - else if (pos.yType == DTnpixel) - y = parentRect.bottom() - pos.y; - else if (pos.yType == DTpercent) -- y += int( parentRect.height() / 100.0 * pos.y ); -+ y += qRound( parentRect.height() / 100.0 * pos.y ); - - if (pos.wType == DTpixel) - w = pos.width; - else if (pos.wType == DTnpixel) - w -= pos.width; - else if (pos.wType == DTpercent) -- w = int( parentRect.width() / 100.0 * pos.width ); -+ w = qRound( parentRect.width() / 100.0 * pos.width ); - else if (pos.wType == DTbox) - w = boxHint.width(); - else if (hintedSize.width() > 0) -- w = hintedSize.width(); -+ w = hintedSize.width(); - else - w = 0; - -@@ -407,14 +445,22 @@ KdmItem::placementHint( const QRect &par - else if (pos.hType == DTnpixel) - h -= pos.height; - else if (pos.hType == DTpercent) -- h = int( parentRect.height() / 100.0 * pos.height ); -+ h = qRound( parentRect.height() / 100.0 * pos.height ); - else if (pos.hType == DTbox) - h = boxHint.height(); -- else if (hintedSize.height() > 0) -- h = hintedSize.height(); -- else -+ else if (hintedSize.height() > 0) { -+ if (w && pos.wType != DTnone) -+ h = (hintedSize.height() * w) / hintedSize.width(); -+ else -+ h = hintedSize.height(); -+ } else - h = 0; - -+ // we choose to take the hinted size, but it's better to listen to the aspect ratio -+ if (pos.wType == DTnone && pos.hType != DTnone && h && w) { -+ w = qRound(float(hintedSize.width() * h) / hintedSize.height()); -+ } -+ - // defaults to center - int dx = -w / 2, dy = -h / 2; - -@@ -430,7 +476,7 @@ KdmItem::placementHint( const QRect &par - dx = -w; - } - // KdmItem *p = static_cast( parent() ); -- kdDebug() << "KdmItem::placementHint " << id << " x=" << x << " dx=" << dx << " w=" << w << " y=" << y << " dy=" << dy << " h=" << h << " " << parentRect << endl; -+ kdDebug() << timestamp() << " placementHint " << this << " x=" << x << " dx=" << dx << " w=" << w << " y=" << y << " dy=" << dy << " h=" << h << " " << parentRect << endl; - y += dy; - x += dx; - -@@ -529,4 +575,17 @@ KdmItem::setFixedLayout( const QDomNode - currentManager = MFixed; - } - -+QWidget * -+KdmItem::parentWidget() const -+{ -+ if (myWidget) -+ return myWidget; -+ if (!this->parent()) -+ return 0; -+ -+ if (parent()->qt_cast("QWidget")) -+ return (QWidget*)parent(); -+ return ((KdmItem*)parent())->parentWidget(); -+} -+ - #include "kdmitem.moc" -Index: kdm/kfrontend/themer/kdmpixmap.cpp -=================================================================== ---- kdm/kfrontend/themer/kdmpixmap.cpp.orig -+++ kdm/kfrontend/themer/kdmpixmap.cpp -@@ -22,6 +22,7 @@ - #include - - #include "kdmpixmap.h" -+#include - - #include - #ifdef HAVE_LIBART -@@ -29,6 +30,7 @@ - #endif - - #include -+#include - - #include - #include -@@ -58,21 +60,28 @@ KdmPixmap::KdmPixmap( KdmItem *parent, c - QString tagName = el.tagName(); - - if (tagName == "normal") { -- loadPixmap( el.attribute( "file", "" ), pixmap.normal.pixmap, pixmap.normal.fullpath ); -+ pixmap.normal.fullpath = fullPath( el.attribute( "file", "" ) ); - parseColor( el.attribute( "tint", "#ffffff" ), pixmap.normal.tint ); - pixmap.normal.alpha = el.attribute( "alpha", "1.0" ).toFloat(); - } else if (tagName == "active") { - pixmap.active.present = true; -- loadPixmap( el.attribute( "file", "" ), pixmap.active.pixmap, pixmap.active.fullpath ); -+ pixmap.active.fullpath = fullPath( el.attribute( "file", "" ) ); - parseColor( el.attribute( "tint", "#ffffff" ), pixmap.active.tint ); - pixmap.active.alpha = el.attribute( "alpha", "1.0" ).toFloat(); - } else if (tagName == "prelight") { - pixmap.prelight.present = true; -- loadPixmap( el.attribute( "file", "" ), pixmap.prelight.pixmap, pixmap.prelight.fullpath ); -+ pixmap.prelight.fullpath = fullPath(el.attribute( "file", "" ) ); - parseColor( el.attribute( "tint", "#ffffff" ), pixmap.prelight.tint ); - pixmap.prelight.alpha = el.attribute( "alpha", "1.0" ).toFloat(); - } - } -+ -+ // look if we have to have the aspect ratio ready -+ if (((pos.wType == DTnone && pos.hType != DTnone) || -+ (pos.wType != DTnone && pos.hType == DTnone) || -+ (pos.wType == DTnone && pos.hType == DTnone)) && -+ !pixmap.normal.fullpath.endsWith( ".svg" )) -+ loadPixmap( &pixmap.normal ); - } - - QSize -@@ -100,19 +109,16 @@ KdmPixmap::setGeometry( const QRect &new - } - - --void --KdmPixmap::loadPixmap( const QString &fileName, QPixmap &map, QString &fullName ) -+QString -+KdmPixmap::fullPath( const QString &fileName) - { -- if (fileName.isEmpty()) -- return; -+ if (fileName.isEmpty()) -+ return QString::null; - -- fullName = fileName; -+ QString fullName = fileName; - if (fullName.at( 0 ) != '/') - fullName = baseDir() + "/" + fileName; -- -- if (!fullName.endsWith( ".svg" )) // we delay it for svgs -- if (!map.load( fullName )) -- fullName = QString::null; -+ return fullName; - } - - void -@@ -140,6 +146,25 @@ KdmPixmap::renderSvg( PixmapStruct::Pixm - } - - void -+KdmPixmap::loadPixmap( PixmapStruct::PixmapClass *pClass ) -+{ -+ QString fullpath = pClass->fullpath; -+ -+ kdDebug() << timestamp() << " load " << fullpath << endl; -+ int index = fullpath.findRev('.'); -+ QString ext = fullpath.right(fullpath.length() - index); -+ fullpath = fullpath.left(index); -+ kdDebug() << timestamp() << " ext " << ext << " " << fullpath << endl; -+ QString testpath = QString("-%1x%2").arg(area.width()).arg(area.height()) + ext; -+ kdDebug() << timestamp() << " testing for " << fullpath + testpath << endl; -+ if (KStandardDirs::exists(fullpath + testpath)) -+ pClass->pixmap.load(fullpath + testpath); -+ else -+ pClass->pixmap.load( fullpath + ext ); -+ kdDebug() << timestamp() << " done\n"; -+} -+ -+void - KdmPixmap::drawContents( QPainter *p, const QRect &r ) - { - // choose the correct pixmap class -@@ -149,12 +174,20 @@ KdmPixmap::drawContents( QPainter *p, co - if (state == Sprelight && pixmap.prelight.present) - pClass = &pixmap.prelight; - -+ kdDebug() << "draw " << id << " " << pClass->pixmap.isNull() << endl; -+ - if (pClass->pixmap.isNull()) { -- if (pClass->fullpath.isEmpty()) // if neither is set, we're empty -+ -+ if (pClass->fullpath.isEmpty()) // if neither is set, we're empty - return; -- -- kdDebug() << "renderSVG\n"; -- renderSvg( pClass, area ); -+ -+ if (!pClass->fullpath.endsWith( ".svg" ) ) { -+ loadPixmap(pClass); -+ } else { -+ kdDebug() << timestamp() << " renderSVG\n"; -+ renderSvg( pClass, area ); -+ kdDebug() << timestamp() << " done\n"; -+ } - } - - int px = area.left() + r.left(); -@@ -176,25 +209,37 @@ KdmPixmap::drawContents( QPainter *p, co - - - if (pClass->readyPixmap.isNull()) { -- QImage scaledImage; -+ -+ bool haveTint = pClass->tint.rgb() != 0xFFFFFF; -+ bool haveAlpha = pClass->alpha < 1.0; - -+ QImage scaledImage; -+ - // use the loaded pixmap or a scaled version if needed - -+ kdDebug() << timestamp() << " prepare readyPixmap " << pClass->fullpath << " " << area.size() << " " << pClass->pixmap.size() << endl; - if (area.size() != pClass->pixmap.size()) { - if (pClass->fullpath.endsWith( ".svg" )) { -- kdDebug() << "renderSVG\n"; -+ kdDebug() << timestamp() << " renderSVG\n"; - renderSvg( pClass, area ); - scaledImage = pClass->pixmap.convertToImage(); - } else { -- kdDebug() << "convertFromImage\n"; -+ kdDebug() << timestamp() << " convertFromImage smoothscale\n"; - QImage tempImage = pClass->pixmap.convertToImage(); -+ kdDebug() << timestamp() << " convertToImage done\n"; - scaledImage = tempImage.smoothScale( area.width(), area.height() ); -+ kdDebug() << timestamp() << " done\n"; - } -- } else -+ } else { -+ if (haveTint || haveAlpha) -+ { - scaledImage = pClass->pixmap.convertToImage(); -- -- bool haveTint = pClass->tint.rgb() != 0xFFFFFF; -- bool haveAlpha = pClass->alpha < 1.0; -+ // enforce rgba values for the later -+ scaledImage = scaledImage.convertDepth( 32 ); -+ } -+ else -+ pClass->readyPixmap = pClass->pixmap; -+ } - - if (haveTint || haveAlpha) { - // blend image(pix) with the given tint -@@ -221,9 +266,12 @@ KdmPixmap::drawContents( QPainter *p, co - - } - -- pClass->readyPixmap.convertFromImage( scaledImage ); -+ if (!scaledImage.isNull()) { -+ kdDebug() << timestamp() << " convertFromImage " << id << " " << area << endl; -+ pClass->readyPixmap.convertFromImage( scaledImage ); -+ } - } -- // kdDebug() << "Pixmap::drawContents " << pClass->readyPixmap.size() << " " << px << " " << py << " " << sx << " " << sy << " " << sw << " " << sh << endl; -+ kdDebug() << timestamp() << " Pixmap::drawContents " << pClass->readyPixmap.size() << " " << px << " " << py << " " << sx << " " << sy << " " << sw << " " << sh << endl; - p->drawPixmap( px, py, pClass->readyPixmap, sx, sy, sw, sh ); - } - -Index: kdm/kfrontend/themer/kdmlabel.cpp -=================================================================== ---- kdm/kfrontend/themer/kdmlabel.cpp.orig -+++ kdm/kfrontend/themer/kdmlabel.cpp -@@ -19,8 +19,10 @@ - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - */ - -+#include - #include "kdmlabel.h" --#include -+#include "kdmconfig.h" -+#include "../kgreeter.h" - - #include - #include -@@ -31,6 +33,7 @@ - #include - #include - #include -+#include - - #include - #include -@@ -39,7 +42,7 @@ - #endif - - KdmLabel::KdmLabel( KdmItem *parent, const QDomNode &node, const char *name ) -- : KdmItem( parent, node, name ) -+ : KdmItem( parent, node, name ), myAccel(0) - { - itemType = "label"; - -@@ -92,21 +95,46 @@ KdmLabel::KdmLabel( KdmItem *parent, con - } - } - -- // Check if this is a timer label -+ // Check if this is a timer label) - label.isTimer = label.text.find( "%c" ) >= 0; - if (label.isTimer) { - timer = new QTimer( this ); - timer->start( 1000 ); - connect( timer, SIGNAL(timeout()), SLOT(update()) ); - } -- cText = lookupText( label.text ); -+ setTextInt( lookupText( label.text ) ); -+} -+ -+void -+KdmLabel::setTextInt( const QString &txt) -+{ -+ // TODO: catch && -+ cText = txt; -+ cAccel = txt.find('&'); -+ delete myAccel; -+ myAccel = 0; -+ if (cAccel != -1) { -+ cText.remove('&'); -+ myAccel = new QAccel(parentWidget()); -+ myAccel->insertItem(ALT + UNICODE_ACCEL + cText.at(cAccel).lower().unicode()); -+ connect(myAccel, SIGNAL(activated(int)), SLOT(slotAccel())); -+ } -+} -+ -+void -+KdmLabel::slotAccel() -+{ -+ if (buttonParent) -+ emit activated(buttonParent->getId()); -+ else -+ emit activated(id); - } - - void - KdmLabel::setText( const QString &txt ) - { - label.text = txt; -- update(); -+ setTextInt( lookupText( label.text ) ); - } - - QSize -@@ -139,7 +167,23 @@ KdmLabel::drawContents( QPainter *p, con - p->setFont( l->font ); - p->setPen( l->color ); - //TODO paint clipped (tested but not working..) -- p->drawText( area, AlignLeft | SingleLine, cText ); -+ if (cAccel != -1 && (!id.isEmpty() || buttonParent) ) { -+ QString left = cText.left(cAccel); -+ QString right = cText.mid(cAccel + 1); -+ p->drawText( area, AlignLeft | SingleLine, left ); -+ QRect tarea = area; -+ QFontMetrics fm(l->font); -+ tarea.rLeft() += fm.width(left); -+ QFont f(l->font); -+ f.setUnderline(true); -+ p->setFont ( f ); -+ p->drawText( tarea, AlignLeft | SingleLine, QString(cText.at(cAccel))); -+ tarea.rLeft() += fm.width(cText.at(cAccel)); -+ p->setFont( l->font ); -+ p->drawText( tarea, AlignLeft | SingleLine, right); -+ } else { -+ p->drawText( area, AlignLeft | SingleLine, cText); -+ } - } - - void -@@ -159,7 +203,7 @@ KdmLabel::update() - { - QString text = lookupText( label.text ); - if (text != cText) { -- cText = text; -+ setTextInt(text); - needUpdate(); - } - } -@@ -167,22 +211,23 @@ KdmLabel::update() - static const struct { - const char *type, *text; - } stocks[] = { -- { "language", I18N_NOOP("Language") }, -- { "session", I18N_NOOP("Session Type") }, -- { "system", I18N_NOOP("Menu") }, // i18n("Actions"); -- { "disconnect", I18N_NOOP("Disconnect") }, -- { "quit", I18N_NOOP("Quit") }, -- { "halt", I18N_NOOP("Power off") }, -- { "suspend", I18N_NOOP("Suspend") }, -- { "reboot", I18N_NOOP("Reboot") }, -+ { "language", I18N_NOOP("&Language") }, -+ { "session", I18N_NOOP("Session &Type") }, -+ { "system", I18N_NOOP("&System") }, // i18n("Actions"); -+ { "disconnect", I18N_NOOP("&Disconnect") }, -+ { "quit", I18N_NOOP("&Quit") }, -+ { "halt", I18N_NOOP("Power O&ff") }, -+ { "suspend", I18N_NOOP("S&uspend") }, -+ { "reboot", I18N_NOOP("&Reboot") }, - { "chooser", I18N_NOOP("XDMCP Chooser") }, - { "config", I18N_NOOP("Configure") }, -- { "caps-lock-warning", I18N_NOOP("You have got caps lock on.") }, -- { "timed-label", I18N_NOOP("User %s will login in %d seconds") }, -- { "welcome-label", I18N_NOOP("Welcome to %h") }, // _greetString -- { "username-label", I18N_NOOP("Username:") }, -- { "password-label", I18N_NOOP("Password:") }, -- { "login", I18N_NOOP("Login") } -+ { "caps-lock-warning", I18N_NOOP("Caps Lock is enabled.") }, -+ { "timed-label", I18N_NOOP("User %s will log in in %d seconds") }, -+ { "welcome-label", I18N_NOOP("Welcome to %h") }, // _greetString -+ { "username-label", I18N_NOOP("&Username:") }, -+ { "password-label", I18N_NOOP("&Password:") }, -+ { "domain-label", I18N_NOOP("&Domain:") }, -+ { "login", I18N_NOOP("L&ogin") } - }; - - QString -@@ -195,7 +240,7 @@ KdmLabel::lookupStock( const QString &st - if (type == stocks[i].type) - return i18n(stocks[i].text); - -- kdDebug() << "Invalid element. Check your theme!" << endl; -+ kdDebug() << timestamp() << " Invalid element. Check your theme!" << endl; - return stock; - } - -@@ -205,7 +250,6 @@ KdmLabel::lookupText( const QString &t ) - QString text = t; - - text.replace( '_', '&' ); --// text.remove( '_' ); // FIXME add key accels, remove underscores for now - - QMap m; - struct utsname uts; -Index: kdm/kfrontend/kdmconfig.h -=================================================================== ---- kdm/kfrontend/kdmconfig.h.orig -+++ kdm/kfrontend/kdmconfig.h -@@ -35,6 +35,7 @@ Foundation, Inc., 51 Franklin Street, Fi - #include - #include - #include -+#include - - extern QString _stsFile; - extern bool _isLocal; -@@ -46,6 +47,19 @@ CONF_GREET_CPP_DECLS - struct dpySpec; - void decodeSess( dpySpec *sess, QString &user, QString &loc ); - -+extern struct timeval st; -+ -+inline QString timestamp() { -+ struct timeval nst; -+ gettimeofday(&nst, 0); -+ if (!st.tv_sec) -+ gettimeofday(&st, 0); -+ -+ QString ret; -+ ret.sprintf("[%07ld]", (nst.tv_sec - st.tv_sec) * 1000 + (nst.tv_usec - st.tv_usec) / 1000); -+ return ret; -+} -+ - extern "C" - #endif - void init_config( void ); -Index: kdm/kfrontend/kgreeter.h -=================================================================== ---- kdm/kfrontend/kgreeter.h.orig -+++ kdm/kfrontend/kgreeter.h -@@ -73,9 +73,10 @@ class KGreeter : public KGDialog, public - void slotUserEntered(); - - protected: -+ void readFacesList(); - void installUserList(); - void insertUser( const QImage &, const QString &, struct passwd * ); -- void insertUsers(); -+ void insertUsers( int limit = -1); - void putSession( const QString &, const QString &, bool, const char * ); - void insertSessions(); - virtual void pluginSetup(); -@@ -87,10 +88,13 @@ class KGreeter : public KGDialog, public - QStringList *userList; - QPopupMenu *sessMenu; - QValueVector sessionTypes; -+ QStringList randomFaces; -+ QMap randomFacesMap; - int nNormals, nSpecials; - int curPrev, curSel; - bool prevValid; - bool needLoad; -+ bool themed; - - static int curPlugin; - static PluginList pluginList; -Index: kdm/kfrontend/kgdialog.cpp -=================================================================== ---- kdm/kfrontend/kgdialog.cpp.orig -+++ kdm/kfrontend/kgdialog.cpp -@@ -29,6 +29,7 @@ Foundation, Inc., 51 Franklin Street, Fi - #include "kdm_greet.h" - - #include -+#include - - #include - #include -@@ -58,7 +59,7 @@ KGDialog::completeMenu() - #ifdef HAVE_VTS - if (_isLocal) { - dpyMenu = new QPopupMenu( this ); -- int id = inserten( i18n("Sw&itch User"), ALT+Key_I, dpyMenu ); -+ int id = inserten( i18n("Sw&itch User"), CTRL + Key_I, dpyMenu ); - connect( dpyMenu, SIGNAL(activated( int )), - SLOT(slotDisplaySelected( int )) ); - connect( dpyMenu, SIGNAL(aboutToShow()), -@@ -71,7 +72,7 @@ KGDialog::completeMenu() - - if (_allowClose) - inserten( _isLocal ? i18n("R&estart X Server") : i18n("Clos&e Connection"), -- ALT+Key_E, SLOT(slotExit()) ); -+ 0, SLOT(slotExit()) ); - - #ifdef XDMCP - if (_isLocal && _loginMode != _switchIf) { -@@ -81,10 +82,11 @@ KGDialog::completeMenu() - #endif - - if (_hasConsole) -- inserten( i18n("Co&nsole Login"), ALT+Key_N, SLOT(slotConsole()) ); -+ inserten( i18n("Co&nsole Login"), CTRL+Key_N, SLOT(slotConsole()) ); - - if (_allowShutdown != SHUT_NONE) { -- inserten( i18n("&Shutdown..."), ALT+Key_S, SLOT(slotShutdown( int )) ); -+ ensureMenu(); -+ optMenu->insertItem(SmallIconSet( "exit" ), i18n("&Shutdown..."), this, SLOT(slotShutdown(int)), CTRL+Key_S ); - QAccel *accel = new QAccel( this ); - accel->insertItem( ALT+CTRL+Key_Delete ); - connect( accel, SIGNAL(activated( int )), SLOT(slotShutdown( int )) ); -Index: kdm/kfrontend/kdmconfig.cpp -=================================================================== ---- kdm/kfrontend/kdmconfig.cpp.orig -+++ kdm/kfrontend/kdmconfig.cpp -@@ -33,6 +33,8 @@ Foundation, Inc., 51 Franklin Street, Fi - #include - #include - -+struct timeval st = {0, 0}; -+ - CONF_GREET_DEFS - - QString _stsFile; -Index: kdm/kfrontend/kgapp.cpp -=================================================================== ---- kdm/kfrontend/kgapp.cpp.orig -+++ kdm/kfrontend/kgapp.cpp -@@ -36,6 +36,8 @@ Foundation, Inc., 51 Franklin Street, Fi - #include - #include - #include -+#include -+#include - - #include - #include -@@ -130,6 +132,7 @@ kg_main( const char *argv0 ) - static char *argv[] = { (char *)"kdmgreet", 0 }; - KCmdLineArgs::init( 1, argv, *argv, 0, 0, 0, true ); - -+ kdDebug() << timestamp() << "start" << endl; - kde_have_kipc = false; - KApplication::disableAutoDcopRegistration(); - KCrash::setSafer( true ); -@@ -166,6 +169,7 @@ kg_main( const char *argv0 ) - - GSendInt( G_Ready ); - -+ kdDebug() << timestamp() << " main1" << endl; - setCursor( dpy, app.desktop()->winId(), XC_left_ptr ); - - for (;;) { -@@ -206,6 +210,7 @@ kg_main( const char *argv0 ) - if (_useTheme && !_theme.isEmpty()) { - KThemedGreeter *tgrt; - dialog = tgrt = new KThemedGreeter; -+ kdDebug() << timestamp() << " themed" << endl; - if (!tgrt->isOK()) { - delete tgrt; - dialog = new KStdGreeter; -Index: kdm/kfrontend/kgreeter.cpp -=================================================================== ---- kdm/kfrontend/kgreeter.cpp.orig -+++ kdm/kfrontend/kgreeter.cpp -@@ -38,6 +38,7 @@ Foundation, Inc., 51 Franklin Street, Fi - #include - #include - #include -+#include - - #undef Unsorted // x headers suck - make qdir.h work with --enable-final - #include -@@ -46,6 +47,7 @@ Foundation, Inc., 51 Franklin Street, Fi - #include - #include - #include -+#include - #include - #include - #include -@@ -63,27 +65,46 @@ Foundation, Inc., 51 Franklin Street, Fi - #include - #include - #include -+#include -+#include - - #include - - class UserListView : public KListView { - public: -- UserListView( QWidget *parent = 0, const char *name = 0 ) -+ UserListView( bool _them, QWidget *parent = 0, const char *name = 0 ) - : KListView( parent, name ) -- , cachedSizeHint( -1, 0 ) -+ , themed(_them), cachedSizeHint( -1, 0 ) - { - setSizePolicy( QSizePolicy::Preferred, QSizePolicy::Ignored ); - header()->hide(); - addColumn( QString::null ); - setColumnAlignment( 0, AlignVCenter ); - setResizeMode( QListView::LastColumn ); -+ if (themed) { -+ setBackgroundMode( Qt::NoBackground ); -+ viewport()->setBackgroundMode( Qt::NoBackground ); -+ setFrameStyle( QFrame::NoFrame ); -+ } - } - -+ bool themed; - mutable QSize cachedSizeHint; - -- protected: -+ int sumHeight() const -+ { -+ int sum = 0; -+ for (QListViewItem *itm = firstChild(); itm; itm = itm->nextSibling()) { -+ sum += itm->height(); -+ } -+ return sum; -+ } -+public: - virtual QSize sizeHint() const - { -+ if (themed) -+ return KListView::sizeHint(); -+ - if (!cachedSizeHint.isValid()) { - constPolish(); - uint maxw = 0; -@@ -98,8 +119,23 @@ class UserListView : public KListView { - } - return cachedSizeHint; - } --}; -+ virtual void paintEmptyArea ( QPainter * p, const QRect & rect ) -+ { -+ if (!themed) -+ return KListView::paintEmptyArea(p, rect ); -+ -+ const QPixmap *pm = paletteBackgroundPixmap(); -+ if (!pm || pm->isNull()) -+ return; -+ -+ kdDebug() << "paintEmpty " << rect << endl; -+ QRect devRect = p->xForm( rect ); -+ kdDebug() << "paintEmpty2 " << devRect << endl; -+ p->drawPixmap(0, 0, *pm, devRect.left(), devRect.top() ); -+ } - -+ QPixmap background; -+}; - - int KGreeter::curPlugin = -1; - PluginList KGreeter::pluginList; -@@ -115,12 +151,14 @@ KGreeter::KGreeter( bool framed ) - , curSel( -1 ) - , prevValid( true ) - , needLoad( false ) -+ , themed( framed ) - { - stsFile = new KSimpleConfig( _stsFile ); - stsFile->setGroup( "PrevUser" ); - - if (_userList) { -- userView = new UserListView( this ); -+ readFacesList(); -+ userView = new UserListView( framed, this ); - connect( userView, SIGNAL(clicked( QListViewItem * )), - SLOT(slotUserClicked( QListViewItem * )) ); - connect( userView, SIGNAL(doubleClicked( QListViewItem * )), -@@ -128,10 +166,8 @@ KGreeter::KGreeter( bool framed ) - } - if (_userCompletion) - userList = new QStringList; -- if (userView || userList) -- insertUsers(); - -- sessMenu = new QPopupMenu( this ); -+ sessMenu = new QPopupMenu( this ); - connect( sessMenu, SIGNAL(activated( int )), - SLOT(slotSessionSelected( int )) ); - insertSessions(); -@@ -150,6 +186,33 @@ KGreeter::~KGreeter() - delete stsFile; - } - -+void KGreeter::readFacesList() -+{ -+ FILE *f = fopen( QFile::encodeName( _faceDir + "/.randomlist" ), "rt" ); -+ if ( !f ) -+ return; -+ QTextIStream is( f ); -+ while ( !is.eof() ) -+ { -+ QString line = is.readLine().simplifyWhiteSpace(); -+ if ( line.isEmpty() ) -+ continue; -+ QString icon; -+ int index = line.find( ' ' ); -+ if ( index > 0 ) { -+ icon = line.left( index ); -+ line = line.mid( index ); -+ } else { -+ icon = line; -+ line = QString::null; -+ } -+ randomFaces.push_back( icon ); -+ QStringList list = QStringList::split( ' ', line ); -+ for ( QStringList::ConstIterator it = list.begin(); it != list.end(); ++it ) -+ randomFacesMap[*it] = icon; -+ } -+} -+ - class UserListViewItem : public KListViewItem { - public: - UserListViewItem( UserListView *parent, const QString &text, -@@ -163,6 +226,14 @@ class UserListViewItem : public KListVie - parent->cachedSizeHint.setWidth( -1 ); - } - -+ virtual void paintCell(QPainter *p, const QColorGroup &cg, int column, int width, int alignment) -+ { -+ if (((UserListView*)listView())->themed) -+ QListViewItem::paintCell(p, cg, column, width, alignment); -+ else -+ KListViewItem::paintCell(p, cg, column, width, alignment); -+ } -+ - QString login; - }; - -@@ -224,10 +295,23 @@ KGreeter::insertUser( const QImage &defa - QSize ns( 48, 48 ); - if (p.size() != ns) - p = p.convertDepth( 32 ).smoothScale( ns, QImage::ScaleMin ); -- goto gotit; -+ break; - } while (--nd >= 0); -- p = default_pix; -- gotit: -+ -+ if ( p.isNull() && randomFaces.count() ) { -+ QString randomFace = randomFacesMap[username]; -+ if ( randomFace.isNull() ) { -+ QStringList::size_type index = 0; -+ for ( size_t i = 0; i < username.length(); ++i ) -+ index += ( 0x7f - username.at( i ).latin1() ) % 37; -+ randomFace = randomFaces[ index % randomFaces.count() ]; -+ } -+ p.load( _faceDir + "/../pics/users/" + randomFace + ".png" ); -+ } -+ -+ if ( p.isNull() ) -+ p = default_pix; -+ - QString realname = KStringHandler::from8Bit( ps->pw_gecos ); - realname.truncate( realname.find( ',' ) ); - if (realname.isEmpty() || realname == username) -@@ -278,7 +362,7 @@ UserList::UserList( char **in ) - } - - void --KGreeter::insertUsers() -+KGreeter::insertUsers(int limit_users) - { - struct passwd *ps; - -@@ -305,6 +389,8 @@ KGreeter::insertUsers() - if (_showUsers == SHOW_ALL) { - UserList noUsers( _noUsers ); - QDict dupes( 1000 ); -+ QStringList toinsert; -+ int count = 0; - for (setpwent(); (ps = getpwent()) != 0;) { - if (*ps->pw_dir && *ps->pw_shell && - (ps->pw_uid >= (unsigned)_lowUserId || -@@ -316,10 +402,53 @@ KGreeter::insertUsers() - QString username( QFile::decodeName( ps->pw_name ) ); - if (!dupes.find( username )) { - dupes.insert( username, (int *)-1 ); -- insertUser( default_pix, username, ps ); -+ toinsert.append( username ); -+ -+ if ( limit_users >= 0 && ++count > limit_users ) -+ break; - } - } - } -+ if ( limit_users >= 0 && ++count > limit_users ) { -+ utmpname( _PATH_WTMP ); -+ setutxent(); -+ toinsert = QStringList(); -+ dupes.clear(); -+ -+ for ( count = 0; count < limit_users; ) { -+ struct utmpx * ent = getutxent(); -+ if ( !ent ) -+ break; -+ struct passwd *ps = getpwnam( ent->ut_user ); -+ if (ps && *ps->pw_dir && *ps->pw_shell && -+ (ps->pw_uid >= (unsigned)_lowUserId || -+ !ps->pw_uid && _showRoot) && -+ ps->pw_uid <= (unsigned)_highUserId && -+ !noUsers.hasUser( ps->pw_name ) && -+ !noUsers.hasGroup( ps->pw_gid )) -+ { -+ QString username( QFile::decodeName( ent->ut_user ) ); -+ if (!dupes.find( username )) { -+ dupes.insert( username, (int *)-1 ); -+ toinsert.append( username ); -+ count++; -+ } -+ } -+ -+ -+ } -+ endutxent(); -+ } -+ -+ for ( QStringList::ConstIterator it = toinsert.begin(); -+ it != toinsert.end(); ++it ) -+ { -+ // pretty stupid to do another lookup round, but the number is limited -+ // and caching struct passwd is pretty ugly -+ struct passwd *ps = getpwnam( QFile::encodeName( *it ) ); -+ if ( ps ) -+ insertUser( default_pix, *it, ps ); -+ } - } else { - UserList users( _users ); - if (users.hasGroups()) { -@@ -721,21 +850,24 @@ KStdGreeter::KStdGreeter() - hbox2->addStretch( 1 ); - - if (sessMenu->count() > 1) { -- inserten( i18n("Session &Type"), ALT+Key_T, sessMenu ); -+ inserten( i18n("Session &Type"), 0, sessMenu ); - needSep = true; - } - - if (plugMenu) { -- inserten( i18n("&Authentication Method"), ALT+Key_A, plugMenu ); -+ inserten( i18n("&Authentication Method"), 0, plugMenu ); - needSep = true; - } - - #ifdef XDMCP -- completeMenu( LOGIN_LOCAL_ONLY, ex_choose, i18n("&Remote Login"), ALT+Key_R ); -+ completeMenu( LOGIN_LOCAL_ONLY, ex_choose, i18n("&Remote Login"), 0 ); - #else - completeMenu(); - #endif - -+ if (userView || userList) -+ insertUsers(); -+ - if (optMenu) - menuButton->setPopup( optMenu ); - else -@@ -829,6 +961,9 @@ KThemedGreeter::KThemedGreeter() - if (xauth_warning && (_authorized || !_authComplain)) - xauth_warning->hide( true ); - -+ if (userView || userList) -+ insertUsers( 7 ); // TODO: find out how many are a good value -+ - // if (!_greetString.isEmpty()) { - // } - // clock = new KdmClock( this, "clock" ); -@@ -854,37 +989,31 @@ KThemedGreeter::KThemedGreeter() - if ((itm = themer->findNode( "session_button" ))) { - if (sessMenu->count() <= 1) - itm->hide( true ); -- else { -- session_button = itm; -- QAccel *accel = new QAccel( this ); -- accel->insertItem( ALT+Key_T, 0 ); -- connect( accel, SIGNAL(activated( int )), SLOT(slotSessMenu()) ); -- } -+ else -+ session_button = itm; - } else { - if (sessMenu->count() > 1) { -- inserten( i18n("Session &Type"), ALT+Key_T, sessMenu ); -+ inserten( i18n("Session &Type"), 0, sessMenu ); - needSep = true; - } - } - - if (plugMenu) { -- inserten( i18n("&Authentication Method"), ALT+Key_A, plugMenu ); -+ inserten( i18n("&Authentication Method"), 0, plugMenu ); - needSep = true; - } - - #ifdef XDMCP -- completeMenu( LOGIN_LOCAL_ONLY, ex_choose, i18n("&Remote Login"), ALT+Key_R ); -+ completeMenu( LOGIN_LOCAL_ONLY, ex_choose, i18n("&Remote Login"), 0 ); - #else - completeMenu(); - #endif - - system_button = themer->findNode( "system_button" ); -- QAccel *accel = new QAccel( this ); -- accel->insertItem( ALT+Key_M, 0 ); -- connect( accel, SIGNAL(activated( int )), SLOT(slotActionMenu()) ); - - pluginSetup(); - -+ - verify->start(); - } - -@@ -902,8 +1031,8 @@ KThemedGreeter::pluginSetup() - inherited::pluginSetup(); - - if (userView && verify->entitiesLocal() && verify->entityPresettable() && userlist_rect) { -+ userView->setMaximumHeight( userView->sumHeight() ); - userlist_rect->setWidget( userView ); -- userView->show(); - } else { - if (userView) - userView->hide(); -@@ -919,12 +1048,17 @@ KThemedGreeter::verifyFailed() - { - // goButton->setEnabled( false ); - inherited::verifyFailed(); -+ if (userView) -+ userView->setEnabled(false); - } - - void - KThemedGreeter::verifyRetry() - { - // goButton->setEnabled( true ); -+ if (userView) -+ userView->setEnabled(true); -+ - } - - QString KThemedGreeter::timedUser = QString::null; diff --git a/opensuse/tdebase/kdm-mark_autologin.diff b/opensuse/tdebase/kdm-mark_autologin.diff deleted file mode 100644 index a913f5a94..000000000 --- a/opensuse/tdebase/kdm-mark_autologin.diff +++ /dev/null @@ -1,13 +0,0 @@ -Index: kdm/backend/client.c -=================================================================== ---- kdm/backend/client.c.orig -+++ kdm/backend/client.c -@@ -1214,6 +1214,8 @@ StartClient() - env = setEnv( env, "PATH", curuid ? td->userPath : td->systemPath ); - env = setEnv( env, "SHELL", p->pw_shell ); - env = setEnv( env, "HOME", p->pw_dir ); -+ if (cursource == PWSRC_AUTOLOGIN) -+ env = setEnv (env, "KDM_AUTOLOGIN", curuser); - #if !defined(USE_PAM) && !defined(_AIX) && defined(KERBEROS) - if (krbtkfile[0] != '\0') - env = setEnv( env, "KRBTKFILE", krbtkfile ); diff --git a/opensuse/tdebase/kdm-pam-np-legacy b/opensuse/tdebase/kdm-pam-np-legacy deleted file mode 100644 index 5d139e0bb..000000000 --- a/opensuse/tdebase/kdm-pam-np-legacy +++ /dev/null @@ -1,7 +0,0 @@ -#%PAM-1.0 -auth required pam_permit.so -account include common-account -password include common-password -session include common-session -session required pam_devperm.so -session required pam_resmgr.so diff --git a/opensuse/tdebase/kdm-relaxed-auth.diff b/opensuse/tdebase/kdm-relaxed-auth.diff deleted file mode 100644 index c94fa2b5d..000000000 --- a/opensuse/tdebase/kdm-relaxed-auth.diff +++ /dev/null @@ -1,22 +0,0 @@ -Index: kdm/backend/auth.c -=================================================================== ---- kdm/backend/auth.c.orig -+++ kdm/backend/auth.c -@@ -518,6 +518,7 @@ DefineLocal( FILE *file, Xauth *auth, in - uname( &name ); - writeAddr( FamilyLocal, strlen( name.nodename ), name.nodename, - file, auth, ok ); -+ setenv("XAUTHLOCALHOSTNAME", name.nodename, 1); - #endif - - #if !defined(NEED_UTSNAME) || defined(__hpux) -@@ -1211,6 +1212,9 @@ SetUserAuthorization( struct display *d - userEnviron = setEnv( userEnviron, "XAUTHORITY", envname ); - systemEnviron = setEnv( systemEnviron, "XAUTHORITY", envname ); - } -+ name = getenv("XAUTHLOCALHOSTNAME"); -+ if (name) -+ userEnviron = setEnv( userEnviron, "XAUTHLOCALHOSTNAME", name); - /* a chown() used to be here, but this code runs as user anyway */ - } - Debug( "done SetUserAuthorization\n" ); diff --git a/opensuse/tdebase/kdm-suspend-hal.diff b/opensuse/tdebase/kdm-suspend-hal.diff deleted file mode 100644 index 711e1c114..000000000 --- a/opensuse/tdebase/kdm-suspend-hal.diff +++ /dev/null @@ -1,331 +0,0 @@ -Index: kdm/backend/ctrl.c -=================================================================== ---- kdm/backend/ctrl.c.orig -+++ kdm/backend/ctrl.c -@@ -483,6 +483,10 @@ processCtrl( const char *string, int len - Reply( "nuke\t" ); - } - } -+ if (d->allowSuspend != SHUT_NONE) { -+ Reply( "suspend\t" ); -+ } -+ - if ((d->displayType & d_location) == dLocal && - AnyReserveDisplays()) - Writer( fd, cbuf, sprintf( cbuf, "reserve %d\t", -Index: kdm/backend/greet.h -=================================================================== ---- kdm/backend/greet.h.orig -+++ kdm/backend/greet.h -@@ -125,6 +125,7 @@ from the copyright holder. - # define SHUT_REBOOT 1 /* how */ - # define SHUT_HALT 2 - # define SHUT_CONSOLE -1 /* pseudo-code */ -+# define SHUT_SUSPEND -2 /* pseudo-code */ - # define SHUT_SCHEDULE 0 /* when; config only */ - # define SHUT_TRYNOW 1 - # define SHUT_FORCENOW 2 -Index: kdm/config.def -=================================================================== ---- kdm/config.def.orig -+++ kdm/config.def -@@ -1799,6 +1799,19 @@ Description: - Who is allowed to shut down the system. This applies both to the - greeter and to the command FiFo. - -+Key: AllowSuspend -+Type: enum -+ None/SHUT_NONE: no Suspend... menu entry is shown at all -+ Root/SHUT_ROOT: the root password must be entered to suspend -+ All/SHUT_ALL: everybody can suspend the machine -+Default: Root -+User: greeter -+User: core -+Instance: #:0/All -+Comment: & -+Description: -+ If the user should have an option to suspend the system if configured to (also in the desktop) -+ - Key: AllowSdForceNow - Type: enum - None: no forced shutdown is allowed at all -Index: kdm/kfrontend/kdmshutdown.cpp -=================================================================== ---- kdm/kfrontend/kdmshutdown.cpp.orig -+++ kdm/kfrontend/kdmshutdown.cpp -@@ -22,6 +22,7 @@ Foundation, Inc., 51 Franklin Street, Fi - - */ - -+#include - #include "kdmshutdown.h" - #include "kdm_greet.h" - -@@ -34,6 +35,7 @@ Foundation, Inc., 51 Franklin Street, Fi - #include - #include - #include -+#include - - #include - #include -@@ -57,6 +59,10 @@ Foundation, Inc., 51 Franklin Street, Fi - int KDMShutdownBase::curPlugin = -1; - PluginList KDMShutdownBase::pluginList; - -+#define DBUS_HAL_INTERFACE "org.freedesktop.Hal" -+#define DBUS_HAL_SYSTEM_POWER_INTERFACE "org.freedesktop.Hal.Device.SystemPowerManagement" -+#define HAL_UDI_COMPUTER "/org/freedesktop/Hal/devices/computer" -+ - KDMShutdownBase::KDMShutdownBase( int _uid, QWidget *_parent ) - : inherited( _parent ) - , box( new QVBoxLayout( this, KDmh, KDsh ) ) -@@ -71,6 +77,7 @@ KDMShutdownBase::KDMShutdownBase( int _u - , verify( 0 ) - , needRoot( -1 ) - , uid( _uid ) -+ , willSuspend( false ) - { - } - -@@ -87,6 +94,7 @@ KDMShutdownBase::complete( QWidget *prev - - if (uid && - ((willShut && _allowShutdown == SHUT_ROOT) || -+ ( willSuspend && _allowSuspend == SHUT_ROOT ) || - (mayNuke && _allowNuke == SHUT_ROOT))) - { - rootlab = new QLabel( i18n("Root authorization required."), this ); -@@ -169,6 +177,7 @@ KDMShutdownBase::updateNeedRoot() - { - int nNeedRoot = uid && - (((willShut && _allowShutdown == SHUT_ROOT) || -+ ( willSuspend && _allowSuspend == SHUT_ROOT ) || - (_allowNuke == SHUT_ROOT && doesNuke))); - if (verify && nNeedRoot != needRoot) { - if (needRoot == 1) -@@ -425,7 +434,7 @@ KDMRadioButton::mouseDoubleClickEvent( Q - - - KDMDelayedPushButton::KDMDelayedPushButton( const KGuiItem &item, -- QWidget *parent, -+ QWidget *parent, - const char *name ) - : inherited( item, parent, name ) - , pop( 0 ) -@@ -490,6 +499,57 @@ KDMSlimShutdown::KDMSlimShutdown( QWidge - buttonlay->addWidget( btnReboot ); - connect( btnReboot, SIGNAL(clicked()), SLOT(slotReboot()) ); - -+ if ( _allowSuspend != SHUT_NONE ) -+ { -+ int supported = -1; -+ liblazy_hal_get_property_bool(HAL_UDI_COMPUTER, "power_management.can_suspend", &supported); -+ if (supported == 1) -+ suspend_ram = true; -+ else -+ suspend_ram = false; -+ -+ liblazy_hal_get_property_bool(HAL_UDI_COMPUTER, "power_management.can_standby", &supported); -+ if (supported == 1) -+ standby = true; -+ else -+ standby = false; -+ liblazy_hal_get_property_bool(HAL_UDI_COMPUTER, "power_management.can_hibernate", &supported); -+ if (supported == 1) -+ suspend_disk = true; -+ else -+ suspend_disk = false; -+ -+/* if (liblazy_polkit_is_user_allowed_by_uid(0, "hal-power-hibernate", NULL) != 1) -+ suspend_disk = false; -+ if (liblazy_polkit_is_user_allowed_by_uid(0, "hal-power-suspend", NULL) != 1) -+ suspend_ram = false; -+ if (liblazy_polkit_is_user_allowed_by_uid(0, "hal-power-standby", NULL) != 1) -+ standby = false; -+*/ -+ int sum = standby + suspend_ram + suspend_disk; -+ if ( sum ) { -+ buttonlay->addSpacing( KDialog::spacingHint() ); -+ -+ QButton *btnSuspend; -+ if (sum > 1) { -+ btnSuspend = new KDMDelayedPushButton( KGuiItem( i18n("&Suspend Computer"), "player_pause"), this ); -+ QPopupMenu *suspends = new QPopupMenu(this); -+ if (suspend_disk) -+ suspends->insertItem(i18n("Suspend to Disk"), 1); -+ if (suspend_ram) -+ suspends->insertItem(i18n("Suspend to RAM"), 2); -+ if (standby) -+ suspends->insertItem(i18n("Standby"), 3); -+ connect(suspends, SIGNAL(activated(int)), SLOT(slotSuspend(int))); -+ static_cast(btnSuspend)->setPopup(suspends); -+ } else { -+ btnSuspend = new KPushButton( KGuiItem( i18n("&Suspend Computer"), "player_pause"), this ); -+ } -+ buttonlay->addWidget( btnSuspend ); -+ connect(btnSuspend, SIGNAL(clicked()), SLOT(slotSuspend())); -+ } -+ } -+ - GSet( 1 ); - GSendInt( G_ListBootOpts ); - if (GRecvInt() == BO_OK) { -@@ -536,6 +596,65 @@ KDMSlimShutdown::~KDMSlimShutdown() - freeStrArr( targetList ); - } - -+void KDMSlimShutdown::slotSuspend() -+{ -+ if (suspend_disk) -+ slotSuspend( 1 ); -+ else if (suspend_ram) -+ slotSuspend( 2 ); -+ else if ( standby ) -+ slotSuspend( 3 ); -+ else -+ reject(); -+} -+ -+void KDMSlimShutdown::slotSuspend(int id) -+{ -+ reject(); -+ // dpySpec *sess = fetchSessions( lstRemote | lstTTY ); -+ // it would be nice to show the sessions to suspend, but it -+ // would require string changes (coolo) -+ dpySpec *sess = 0; -+ kdDebug() << "slotSuspend " << _allowSuspend << endl; -+ if (sess || _allowSuspend == SHUT_ROOT) -+ { -+ int ret = KDMConfShutdown( -1, sess, SHUT_SUSPEND, 0 ).exec(); -+ if ( !ret ) -+ return; -+ } -+ -+ int error = 0; -+ int wake = 0; -+ DBusMessage *reply; -+ -+ if (suspend_disk && id == 1) { -+ error = liblazy_dbus_system_send_method_call(DBUS_HAL_INTERFACE, -+ HAL_UDI_COMPUTER, -+ DBUS_HAL_SYSTEM_POWER_INTERFACE, -+ "Hibernate", -+ &reply, -+ DBUS_TYPE_INVALID); -+ } else if (suspend_ram && id == 2) -+ error = liblazy_dbus_system_send_method_call(DBUS_HAL_INTERFACE, -+ HAL_UDI_COMPUTER, -+ DBUS_HAL_SYSTEM_POWER_INTERFACE, -+ "Suspend", -+ &reply, -+ DBUS_TYPE_INT32, -+ &wake, -+ DBUS_TYPE_INVALID); -+ else if (standby && id == 3) -+ error = liblazy_dbus_system_send_method_call(DBUS_HAL_INTERFACE, -+ HAL_UDI_COMPUTER, -+ DBUS_HAL_SYSTEM_POWER_INTERFACE, -+ "Standby", -+ &reply, -+ DBUS_TYPE_INVALID); -+ else { -+ return; -+ } -+} -+ - void - KDMSlimShutdown::slotSched() - { -@@ -601,16 +720,27 @@ KDMConfShutdown::KDMConfShutdown( int _u - if (type == SHUT_CONSOLE) - willShut = false; - #endif -+ QString title; -+ if ( type == SHUT_HALT) -+ title = i18n("Turn Off Computer"); -+ else { -+#ifdef HAVE_VTS -+ if ( type == SHUT_CONSOLE) -+ title = i18n("Switch to Console"); -+ else -+#endif -+ if ( type == SHUT_SUSPEND ) { -+ willSuspend = true; -+ title = i18n( "Suspend Computer" ); -+ } -+ else -+ title = i18n("Restart Computer"); -+ } -+ - box->addWidget( new QLabel( QString( "
    " - "%1%2" - "

    " ) -- .arg( (type == SHUT_HALT) ? -- i18n("Turn Off Computer") : --#ifdef HAVE_VTS -- (type == SHUT_CONSOLE) ? -- i18n("Switch to Console") : --#endif -- i18n("Restart Computer") ) -+ .arg( title ) - .arg( os ? - i18n("
    (Next boot: %1)") - .arg( QString::fromLocal8Bit( os ) ) : -Index: kdm/kfrontend/kdmshutdown.h -=================================================================== ---- kdm/kfrontend/kdmshutdown.h.orig -+++ kdm/kfrontend/kdmshutdown.h -@@ -67,7 +67,7 @@ class KDMShutdownBase : public FDialog, - #else - static const bool willShut = true; - #endif -- bool mayNuke, doesNuke, mayOk, maySched; -+ bool mayNuke, doesNuke, mayOk, maySched, willSuspend; - - private slots: - void slotSched(); -@@ -118,7 +118,6 @@ class KDMShutdown : public KDMShutdownBa - QComboBox *targets; - int oldTarget; - int sch_st, sch_to; -- - }; - - class KDMRadioButton : public QRadioButton { -@@ -168,10 +167,13 @@ class KDMSlimShutdown : public FDialog { - void slotReboot(); - void slotReboot( int ); - void slotSched(); -+ void slotSuspend(); -+ void slotSuspend(int); - - private: - bool checkShutdown( int type, const char *os ); - char **targetList; -+ bool suspend_disk, suspend_ram, standby; - - }; - -Index: kdm/kfrontend/Makefile.am -=================================================================== ---- kdm/kfrontend/Makefile.am.orig -+++ kdm/kfrontend/Makefile.am -@@ -4,7 +4,7 @@ GENKDMCONF_FLAGS = - SUBDIRS = themer themes pics sessions - - AM_CPPFLAGS = -I$(srcdir)/../backend -I.. -I$(top_srcdir)/kcontrol/background \ -- -I$(top_srcdir)/kdmlib $(all_includes) -+ -I$(top_srcdir)/kdmlib $(all_includes) $(DBUS_INCS) - - bin_PROGRAMS = kdm_config kdm_greet krootimage genkdmconf kdmctl - -@@ -25,7 +25,7 @@ kdm_greet_SOURCES = \ - kgreeter.cpp \ - kgapp.cpp - kdm_greet_LDFLAGS = $(all_libraries) $(KDE_RPATH) --kdm_greet_LDADD = themer/libkdmthemer.a $(LIB_KDEUI) $(XTESTLIB) $(LIBPOSIX4) -+kdm_greet_LDADD = themer/libkdmthemer.a $(LIB_KDEUI) $(XTESTLIB) $(LIBPOSIX4) -llazy $(DBUS_LIBS) - - krootimage_SOURCES = krootimage.cpp - krootimage_LDFLAGS = $(all_libraries) $(KDE_RPATH) diff --git a/opensuse/tdebase/kdm-sysconfig-values.diff b/opensuse/tdebase/kdm-sysconfig-values.diff deleted file mode 100644 index c3b9f8af9..000000000 --- a/opensuse/tdebase/kdm-sysconfig-values.diff +++ /dev/null @@ -1,737 +0,0 @@ -Index: kdm/config.def -=================================================================== ---- kdm/config.def.orig -+++ kdm/config.def -@@ -792,6 +792,21 @@ Description: - Do not change it, you may interfere with future - upgrades and this could result in &kdm; failing to run. - -+Key: SUSEConfigVersion -+Type: string -+Default: "" -+CDefault: - -+User: dummy -+# will be overwritten -+Instance: -+Comment: -+ This option exists solely for the purpose of a clean automatic upgrade. -+ Do not even think about changing it! -+Description: -+ This option exists solely for the purpose of clean automatic upgrades. -+ Do not change it, you may interfere with future -+ upgrades and this could result in &kdm; failing to run. -+ - Key: PAMService - If: defined(USE_PAM) - Type: string -@@ -874,10 +889,10 @@ Description: - - Key: PidFile - Type: string --Default: "" -+Default: "/var/run/kdm.pid" - User: core --Instance: "/var/run/kdm.pid" --Merge: xdm -+Instance: "" -+Update: reset_sec_0_1 - Comment: - Where &kdm; should store its PID (do not store if empty). - Description: -@@ -901,10 +916,10 @@ Description: - Key: AuthDir - Type: path - # differs from XDM --Default: "/var/run/xauth" -+Default: "/var/lib/xdm/authdir/authfiles" - User: core --Instance: #"/tmp" --Merge: xdm(P_authDir) -+Instance: #"" -+Update: reset_sec_0_1 - Comment: - Where to store authorization files. - Description: -@@ -930,7 +945,7 @@ Description: - - Key: ExportList - Type: list --Default: "" -+Default: "LANG,XCURSOR_THEME" - User: core - Instance: #"LD_LIBRARY_PATH,ANOTHER_IMPORTANT_VAR" - Merge: xdm(P_List) -@@ -1063,9 +1078,10 @@ Description: - - Key: Enable - Type: bool --Default: true -+Default: false - User: dep(xdmcpEnable) - Instance: false -+Update: reset_sec_0_1 - Comment: & - Description: - Whether &kdm; should listen to incoming &XDMCP; requests. -@@ -1102,11 +1118,10 @@ Description: - Key: Xaccess - Type: string - # differs from xdm --Default: *KDMCONF "/Xaccess" -+Default: *"/etc/X11/xdm/Xaccess" - User: config(Xaccess) --Instance: #"" --Update: mk_xaccess --Merge: xdm:accessFile -+Instance: # -+Update: reset_sec_0_1 - Comment: - &XDMCP; access control file in the usual XDM-Xaccess format. - Description: -@@ -1164,13 +1179,11 @@ Description: - - Key: Willing - Type: string --Default: "" -+Default: "/etc/X11/xdm/Xwilling" - User: core - # will be overwritten - Instance: # --Update: mk_willing --Merge: xdm --Merge: kdm:Xwilling -+Update: reset_sec_0_1 - Comment: - The program which is invoked to dynamically generate replies to &XDMCP; - DirectQuery or BroadcastQuery requests. -@@ -1244,7 +1257,7 @@ Type: enum - None/BO_NONE: no boot manager - Grub/BO_GRUB: Grub boot manager - Lilo/BO_LILO: Lilo boot manager (Linux on i386 & x86-64 only) --Default: None -+Default: Grub - User: core - User: greeter - Instance: #Grub -@@ -1347,6 +1360,7 @@ Default: DEF_SERVER_CMD - DDefault: - - User: core - Instance: :*/DEF_SERVER_CMD -+Update: reset_sec_0_1 - Comment: - The command line to start the &X-Server;, without display number and VT spec. - This string is subject to word splitting. -@@ -1355,7 +1369,7 @@ Description: - This string is subject to word splitting. - - The default is something reasonable for the system on which &kdm; was built, -- like /usr/X11R6/bin/X. -+ like /usr/bin/X. - - Key: ServerArgsLocal - Type: string -@@ -1549,11 +1563,10 @@ Description: - Key: Resources - # XXX strictly speaking this is supposed to be a string list, i think. - Type: string --Default: "" -+Default: "/etx/X11/xdm/Xresources" - User: core - Instance: #*/"" --Update: cp_resources --Merge: xdm -+Update: reset_sec_0_1 - Comment: - Specify a file with X-resources for the greeter, chooser and background. - The KDE frontend does not use this file, so you do not need it unless you -@@ -1581,12 +1594,11 @@ Description: - - Key: Setup - Type: string --Default: "" -+Default: "/etc/X11/xdm/Xsetup" - User: core - # will be overwritten - Instance: #*/"" --Update: mk_setup --Merge: xdm -+Update: reset_sec_0_1 - Comment: - A program to run before the greeter is shown. Can be used to start an - xconsole or an alternative background generator. Subject to word splitting. -@@ -1602,12 +1614,11 @@ Description: - - Key: Startup - Type: string --Default: "" -+Default: "/etc/X11/xdm/Xstartup" - User: core - # will be overwritten - Instance: #*/"" --Update: mk_startup --Merge: xdm -+Update: reset_sec_0_1 - Comment: - A program to run before a user session starts. Subject to word splitting. - Description: -@@ -1620,12 +1631,11 @@ Description: - - Key: Reset - Type: string --Default: "" -+Default: "/etc/X11/xdm/Xreset" - User: core - # will be overwritten - Instance: #*/"" --Update: mk_reset --Merge: xdm -+Update: reset_sec_0_1 - Comment: - A program to run after a user session exits. Subject to word splitting. - Description: -@@ -1638,12 +1648,12 @@ Description: - - Key: Session - Type: string --Default: XBINDIR "/xterm -ls -T" -+Default: "/etc/X11/xdm/Xsession" - #Merge: xdm - incompatible! - User: core - # will be overwritten - Instance: #*/"" --Update: mk_session -+Update: reset_sec_0_1 - Comment: - The program which is run as the user which logs in. It is supposed to - interpret the session argument (see SessionsDirs) and start an appropriate -@@ -1746,10 +1756,11 @@ Description: - - Key: AllowRootLogin - Type: bool --Default: true -+Default: false - User: core - User: greeter(showRoot) --Instance: */false -+Instance: #*/false -+Update: reset_sec_1_2 - Merge: xdm - Comment: - Allow root logins? -@@ -1764,6 +1775,7 @@ User: core - # sensible? - Instance: */false - Instance: :*/true -+Update: reset_sec_0_1 - Merge: xdm - Comment: - Allow to log in, when user has set an empty password? -@@ -1775,12 +1787,13 @@ Type: enum - None/SHUT_NONE: no Shutdown... menu entry is shown at all - Root/SHUT_ROOT: the root password must be entered to shut down - All/SHUT_ALL: everybody can shut down the machine --Default: All -+Default: Root - User: core - User: greeter - Instance: */Root --Instance: :*/All --Merge: kdm:-Greeter/ -+Instance: #:*/All -+Update: reset_sec_0_1 -+#Merge: kdm:-Greeter/ - Comment: & - Description: - Who is allowed to shut down the system. This applies both to the -@@ -1866,6 +1879,7 @@ Type: bool - Default: false - User: dep - Instance: #:0/true -+Update: reset_sec_0_1 - Comment: & - Description: - Enable automatic login. Use with extreme care! -@@ -1899,7 +1913,7 @@ Default: "" - PostProc: PautoLoginX - User: core(autoUser) - User: greeter --Instance: #:0/"fred" -+Instance: #:0/"" - Merge: xdm:autoUser(P_autoUser) - Comment: & - Description: -@@ -1930,10 +1944,10 @@ Description: - - Key: SessionsDirs - Type: list --Default: KDMDATA "/sessions" -+Default: "/etc/X11/sessions," KDMDATA "/sessions,/usr/share/xsessions" - User: core - User: greeter-c --Instance: #*/"/etc/X11/sessions,/usr/share/xsessions" -+Instance: #*/"" - Comment: - The directories containing session type definitions in .desktop format. - Description: -@@ -2008,7 +2022,8 @@ Type: enum - Clock/LOGO_CLOCK: a neat analog clock - Default: Clock - User: greeter --Instance: */Logo -+Instance: */Clock -+Update: reset_sec_0_1 - Comment: - What should be shown in the greeter's logo are: - Description: -@@ -2223,7 +2238,7 @@ Description: - - Key: HiddenUsers - Type: list --Default: "" -+Default: "root" - User: greeter-c(noUsers) - Instance: #*/"root" - # depends on {Min,Max}ShowUID -@@ -2363,13 +2378,14 @@ Type: enum - Default: OneStar - User: greeter - Instance: #*/NoEcho -+Update: reset_sec_0_1 - Comment: & - Description: - The password input fields cloak the typed in text. Specify, how to do it: - - Key: UseBackground - Type: bool --Default: true -+Default: false - User: greeter - Instance: #*/! - Comment: -@@ -2507,6 +2523,7 @@ Type: bool - Default: false - User: greeter - Instance: :0/true -+Update: reset_sec_0_1 - Comment: - Enable &kdm;'s built-in xconsole. Note that this can be enabled for only - one display at a time. -@@ -2595,9 +2612,10 @@ Description: - - Key: Preloader - Type: string --Default: "" -+Default: KDE_BINDIR "/preloadkde" - User: greeter-c --Instance: */KDE_BINDIR "/preloadkde" -+Instance: */"" -+Update: reset_sec_0_1 - Comment: & - Description: - A program to run while the greeter is visible. It is supposed to preload -@@ -2606,7 +2624,7 @@ Description: - - Key: UseTheme - Type: bool --Default: false -+Default: true - User: greeter - Instance: #*/true - Comment: & -@@ -2615,9 +2633,10 @@ Description: - - Key: Theme - Type: string --Default: "" -+Default: KDMDATA "/themes/SUSE" - User: greeter --Instance: */KDMDATA "/themes/circles" -+Instance: */"" -+Update: reset_sec_0_1 - Comment: & - Description: - The theme to use for the greeter. Can point to either a directory or an XML -Index: kdm/kfrontend/read_sysconfig.sh -=================================================================== ---- /dev/null -+++ kdm/kfrontend/read_sysconfig.sh -@@ -0,0 +1,147 @@ -+#!/bin/bash -+# -+# Copyright (c) 2006 SUSE Linux Products GmbH Nuernberg, Germany. -+# -+# Author: Stephan Kulow -+# -+ -+# -+# check if we are started as root -+# only one of UID and USER must be set correctly -+# -+if test "$UID" != 0 -a "$USER" != root; then -+ echo "You must be root to start $0." -+ exit 1 -+fi -+ -+# -+# check for sysconfig/displaymanager or rc.config -+# -+test -f /etc/sysconfig/displaymanager && source /etc/sysconfig/displaymanager -+test -f /etc/sysconfig/security && source /etc/sysconfig/security -+test -f /etc/sysconfig/language && source /etc/sysconfig/language -+ -+# -+# source /etc/profile to get $kdedir -+# -+kdedir="/opt/kde3" -+kdmdir="/var/adm/kdm" -+ -+# check for write permissions -+[ -w ${kdmdir} ] || mkdir -p ${kdmdir} -+[ -w ${kdmdir} ] || exit -+ -+# -+# Set Style of Shutdown -+# -+ECHO_MODE="OneStar" -+ALLOW_ROOT_LOGIN="true" -+case "$DISPLAYMANAGER_SHUTDOWN" in -+ all|ALL|All) -+ DISPLAYMANAGER_SHUTDOWN=All;; -+ none|NONE|None) -+ DISPLAYMANAGER_SHUTDOWN=None;; -+ auto|Auto|AUTO) -+ case "$PERMISSION_SECURITY" in -+ *easy*) -+ DISPLAYMANAGER_SHUTDOWN=All -+ ;; -+ *paranoid*) -+ ECHO_MODE="NoEcho" -+ ALLOW_ROOT_LOGIN="false" -+ DISPLAYMANAGER_SHUTDOWN=Root -+ ;; -+ *) -+ DISPLAYMANAGER_SHUTDOWN=Root -+ ;; -+ esac -+ ;; -+ * ) -+ DISPLAYMANAGER_SHUTDOWN=Root;; -+esac -+ -+( -+echo "[X-*-Greeter]" -+if [ -n "$KDM_USERS" ]; then -+ echo "ShowUsers=Selected" -+ echo -n "SelectedUsers=" -+ echo ${KDM_USERS}|sed -e 's@ [ ]*@ @g' -e 's@ @,@g' -+else -+ echo "ShowUsers=NotHidden" -+fi -+if [ "$DISPLAYMANAGER_AD_INTEGRATION" = "yes" ]; then -+ echo "PluginsLogin=winbind" -+fi -+if [ -n "$DISPLAYMANAGER_KDM_THEME" -a -d "/opt/kde3/share/apps/kdm/themes/$DISPLAYMANAGER_KDM_THEME" ]; then -+ echo "Theme=/opt/kde3/share/apps/kdm/themes/$DISPLAYMANAGER_KDM_THEME" -+ echo "UseTheme=true" -+ echo "UseBackground=false" -+else -+ echo "UseTheme=false" -+ echo "UseBackground=true" -+fi -+# kdm has en_US as default instead of simply reading LC_LANG :( -+echo "Language=" -+ -+echo "[Xdmcp]" -+if [ "$DISPLAYMANAGER_REMOTE_ACCESS" = "yes" ]; then -+ echo "Enable=true" -+else -+ echo "Enable=false" -+fi -+ -+echo "[X-:0-Core]" -+if [ "$DISPLAYMANAGER_AUTOLOGIN" ]; then -+ echo "AutoLoginEnable=true" -+ echo "AutoLoginUser=${DISPLAYMANAGER_AUTOLOGIN}" -+else -+ echo "AutoLoginEnable=false" -+fi -+if [ "$DISPLAYMANAGER_XSERVER_TCP_PORT_6000_OPEN" = "yes" ]; then -+ echo "ServerArgsLocal=" -+else -+ echo "ServerArgsLocal=-nolisten tcp" -+fi -+if [ "$DISPLAYMANAGER_PASSWORD_LESS_LOGIN" = "yes" ]; then -+ echo "NoPassEnable=true" -+ echo "NoPassAllUsers=true" -+else -+ echo "NoPassEnable=false" -+ echo "NoPassAllUsers=false" -+fi -+ -+echo "[X-:*-Core]" -+echo "AllowShutdown=${DISPLAYMANAGER_SHUTDOWN}" -+echo "AllowRootLogin=${ALLOW_ROOT_LOGIN}" -+echo "AllowNullPasswd=${ALLOW_ROOT_LOGIN}" -+ -+echo "[X-*-Core]" -+ -+if test "$DISPLAYMANAGER_ROOT_LOGIN_REMOTE" = "yes"; then -+ echo "AllowRootLogin=true" -+else -+ echo "AllowRootLogin=false" -+fi -+ -+case "$DISPLAYMANAGER_XSERVER" in -+ Xgl) -+ xgl=`type -p Xgl` -+ echo "ServerCmd=$xgl $DISPLAYMANAGER_XGL_OPTS -br" -+ echo "ServerTimeout=50" -+ ;; -+ Xorg) -+ xorg=`type -p Xorg` -+ echo "ServerCmd=$xorg -br" -+ ;; -+ *) -+ echo "#Unknown X server - leaving X" -+ ;; -+esac -+ -+echo "[General]" -+if [ "$DISPLAYMANAGER_STARTS_XSERVER" != "yes" ]; then -+ echo "StaticServers=" -+fi -+ -+) > ${kdmdir}/kdmrc.sysconfig -+ -Index: kdm/kfrontend/kdm_config.c -=================================================================== ---- kdm/kfrontend/kdm_config.c.orig -+++ kdm/kfrontend/kdm_config.c -@@ -386,7 +386,7 @@ static const char *kdmrc = KDMCONF "/kdm - static Section *rootsec; - - static void --ReadConf() -+ReadConfFile(const char *rcfile) - { - const char *nstr, *dstr, *cstr, *dhost, *dnum, *dclass; - char *s, *e, *st, *en, *ek, *sl, *pt; -@@ -396,14 +396,9 @@ ReadConf() - int nlen, dlen, clen, dhostl, dnuml, dclassl; - int i, line, sectmoan, restl; - File file; -- static int confread; - -- if (confread) -- return; -- confread = 1; -- -- Debug( "reading config %s ...\n", kdmrc ); -- if (!readFile( &file, kdmrc, "master configuration" )) -+ Debug( "reading config %s ...\n", rcfile ); -+ if (!readFile( &file, rcfile, "master configuration" )) - return; - - for (s = file.buf, line = 0, cursec = 0, sectmoan = 1; s < file.eof; s++) { -@@ -429,7 +424,7 @@ ReadConf() - e--; - if (*e != ']') { - cursec = 0; -- LogError( "Invalid section header at %s:%d\n", kdmrc, line ); -+ LogError( "Invalid section header at %s:%d\n", rcfile, line ); - continue; - } - nstr = sl + 1; -@@ -438,8 +433,8 @@ ReadConf() - if (nlen == cursec->nlen && - !memcmp( nstr, cursec->name, nlen )) - { -- LogInfo( "Multiple occurrences of section [%.*s] in %s. " -- "Consider merging them.\n", nlen, nstr, kdmrc ); -+ Debug( "Multiple occurrences of section [%.*s] in %s. " -+ "Consider merging them.\n", nlen, nstr, rcfile ); - goto secfnd; - } - if (nstr[0] == 'X' && nstr[1] == '-') { -@@ -495,7 +490,7 @@ ReadConf() - illsec: - cursec = 0; - LogError( "Unrecognized section name [%.*s] at %s:%d\n", -- nlen, nstr, kdmrc, line ); -+ nlen, nstr, rcfile, line ); - continue; - newsec: - if (!(cursec = Malloc( sizeof(*cursec) ))) -@@ -523,7 +518,7 @@ ReadConf() - if (!cursec) { - if (sectmoan) { - sectmoan = 0; -- LogError( "Entry outside any section at %s:%d", kdmrc, line ); -+ LogError( "Entry outside any section at %s:%d", rcfile, line ); - } - goto sktoeol; - } -@@ -531,13 +526,13 @@ ReadConf() - for (; (s < file.eof) && (*s != '\n'); s++) - if (*s == '=') - goto haveeq; -- LogError( "Invalid entry (missing '=') at %s:%d\n", kdmrc, line ); -+ LogError( "Invalid entry (missing '=') at %s:%d\n", rcfile, line ); - continue; - - haveeq: - for (ek = s - 1; ; ek--) { - if (ek < sl) { -- LogError( "Invalid entry (empty key) at %s:%d\n", kdmrc, line ); -+ LogError( "Invalid entry (empty key) at %s:%d\n", rcfile, line ); - goto sktoeol; - } - if (!isspace( *ek )) -@@ -551,7 +546,7 @@ ReadConf() - if (*s == '\\') { - s++; - if (s >= file.eof || *s == '\n') { -- LogError( "Trailing backslash at %s:%d\n", kdmrc, line ); -+ LogError( "Trailing backslash at %s:%d\n", rcfile, line ); - break; - } - switch (*s) { -@@ -580,29 +575,42 @@ ReadConf() - goto keyok; - } - LogError( "Unrecognized key '%.*s' in section [%.*s] at %s:%d\n", -- nlen, nstr, cursec->nlen, cursec->name, kdmrc, line ); -+ nlen, nstr, cursec->nlen, cursec->name, rcfile, line ); - continue; - keyok: - for (curent = cursec->entries; curent; curent = curent->next) - if (ce == curent->ent) { - LogError( "Multiple occurrences of key '%s' in section [%.*s]" - " of %s\n", -- ce->name, cursec->nlen, cursec->name, kdmrc ); -+ ce->name, cursec->nlen, cursec->name, rcfile ); - goto keyfnd; - } - if (!(curent = Malloc( sizeof(*curent) ))) - return; -+ curent->next = cursec->entries; -+ cursec->entries = curent; -+ keyfnd: - curent->ent = ce; - curent->line = line; - curent->val = st; - curent->vallen = en - st; -- curent->next = cursec->entries; -- cursec->entries = curent; -- keyfnd: - continue; - } - } - -+static void ReadConf() -+{ -+ static int confread = 0; -+ -+ if (confread) -+ return; -+ confread++; -+ -+ system("/opt/kde3/share/apps/kdm/read_sysconfig.sh"); -+ ReadConfFile("/var/adm/kdm/kdmrc.sysconfig"); -+ ReadConfFile(kdmrc); -+} -+ - static Entry * - FindGEnt( int id ) - { -Index: kdm/kfrontend/genkdmconf.c -=================================================================== ---- kdm/kfrontend/genkdmconf.c.orig -+++ kdm/kfrontend/genkdmconf.c -@@ -66,6 +66,7 @@ Foundation, Inc., 51 Franklin Street, Fi - #define stringify(x) __stringify(x) - - #define RCVERSTR stringify(RCVERMAJOR) "." stringify(RCVERMINOR) -+#define SUSERCVERSTR "2" - - static int old_scripts, no_old_scripts, old_confs, no_old, - no_backup, no_in_notice, use_destdir, mixed_scripts; -@@ -73,7 +74,7 @@ static const char *newdir = KDMCONF, *fa - *oldxdm, *oldkde; - - static int oldver; -- -+static int oldsusever; - - typedef struct StrList { - struct StrList *next; -@@ -462,6 +463,7 @@ wrconf( FILE *f ) - const char *cmt; - - putfqval( "General", "ConfigVersion", RCVERSTR ); -+ putfqval( "General", "SUSEConfigVersion", SUSERCVERSTR ); - for (cs = config; cs; cs = cs->next) { - fprintf( f, "%s[%s]\n", - cs->comment ? cs->comment : "\n", cs->name ); -@@ -1363,6 +1365,26 @@ upd_consolettys( Entry *ce, Section *cs - } - #endif - -+static void -+reset_sec_0_1( Entry *ce, Section *cs ATTR_UNUSED ) -+{ -+ if (oldsusever < 1 || !ce->written ) -+ { -+ ce->active = 0; -+ } -+ return; -+} -+ -+static void -+reset_sec_1_2( Entry *ce, Section *cs ATTR_UNUSED ) -+{ -+ if (oldsusever < 2 || !ce->written ) -+ { -+ ce->active = 0; -+ } -+ return; -+} -+ - #ifdef XDMCP - static void - cp_keyfile( Entry *ce, Section *cs ATTR_UNUSED ) -@@ -2228,7 +2250,7 @@ static int - mergeKdmRcNewer( const char *path ) - { - char *p; -- const char *cp, *sec, *key; -+ const char *cp, *sec, *key, *susever; - RSection *rootsect, *cs; - REntry *ce; - int i, j; -@@ -2291,8 +2313,12 @@ mergeKdmRcNewer( const char *path ) - } - - #ifdef XDMCP -- applydefs( kdmdefs_all, as(kdmdefs_all), path ); -+ /* applydefs( kdmdefs_all, as(kdmdefs_all), path ); */ - #endif -+ susever = getfqval( "General", "SUSEConfigVersion", "" ); -+ if (sscanf( susever, "%u", &oldsusever ) != 1) -+ oldsusever = 0; -+ - if (!*(cp = getfqval( "General", "ConfigVersion", "" ))) { /* < 3.1 */ - mod_usebg = 1; - if (is22conf( path )) { -Index: kdm/kfrontend/Makefile.am -=================================================================== ---- kdm/kfrontend/Makefile.am.orig -+++ kdm/kfrontend/Makefile.am -@@ -64,3 +64,7 @@ kdm_greet_COMPILE_FIRST = ../config.ci - kdm_config_COMPILE_FIRST = ../config.ci - genkdmconf_COMPILE_FIRST = ../config.ci - -+ -+appsdir = $(kde_datadir)/kdm -+apps_SCRIPTS = read_sysconfig.sh -+ diff --git a/opensuse/tdebase/kdm-use-rpmoptflags.diff b/opensuse/tdebase/kdm-use-rpmoptflags.diff deleted file mode 100644 index 85a03e02b..000000000 --- a/opensuse/tdebase/kdm-use-rpmoptflags.diff +++ /dev/null @@ -1,29 +0,0 @@ -Index: kdm/backend/Makefile.am -=================================================================== ---- kdm/backend/Makefile.am.orig -+++ kdm/backend/Makefile.am -@@ -1,11 +1,6 @@ - # forcibly remove thread-related defines & flags - AUTOMAKE_OPTIONS = foreign --CFLAGS = $(XDM_CFLAGS) -fno-strict-aliasing --CPPFLAGS = $(USER_INCLUDES) $(X_INCLUDES) $(KRB4_INCS) $(KRB5_INCS) -I.. -I../.. --LDFLAGS = $(USER_LDFLAGS) $(X_LDFLAGS) $(X_RPATH) $(KRB4_RPATH) $(KRB5_RPATH) --LDADD = $(LIB_X11) -lXau $(LIBXDMCP) $(PASSWDLIBS) $(LIBSHADOW) $(LIBGEN) \ -- $(LIB_LIBS) $(KRB4_LIBS) $(KRB5_LIBS) $(LIBSOCKET) $(LIBRESOLV) \ -- $(LIBUCB) $(LIBUTIL) $(LIBPOSIX4) -+AM_CPPFLAGS = $(USER_INCLUDES) $(X_INCLUDES) $(KRB4_INCS) $(KRB5_INCS) -I.. -I../.. - - bin_PROGRAMS = kdm - kdm_SOURCES = \ -@@ -39,6 +34,11 @@ kdm_SOURCES = \ - xdmauth.c \ - xdmcp.c - -+kdm_LDFLAGS = $(USER_LDFLAGS) $(X_LDFLAGS) $(X_RPATH) $(KRB4_RPATH) $(KRB5_RPATH) -+kdm_LDADD = $(LIB_X11) -lXau $(LIBXDMCP) $(PASSWDLIBS) \ -+ $(LIB_LIBS) $(KRB4_LIBS) $(KRB5_LIBS) $(LIBSOCKET) $(LIBRESOLV) \ -+ $(LIBUCB) $(LIBUTIL) $(LIBPOSIX4) -+ - EXTRA_DIST = printf.c - - noinst_HEADERS = dm.h dm_socket.h dm_error.h dm_auth.h greet.h diff --git a/opensuse/tdebase/kdm-wordbreak.diff b/opensuse/tdebase/kdm-wordbreak.diff deleted file mode 100644 index 9c50ecdc9..000000000 --- a/opensuse/tdebase/kdm-wordbreak.diff +++ /dev/null @@ -1,22 +0,0 @@ -Index: kdm/kfrontend/kfdialog.cpp -=================================================================== ---- kdm/kfrontend/kfdialog.cpp.orig -+++ kdm/kfrontend/kfdialog.cpp -@@ -28,6 +28,7 @@ Foundation, Inc., 51 Franklin Street, Fi - #include - #include - #include -+#include - - #include - #include -@@ -137,6 +138,9 @@ KFMsgBox::KFMsgBox( QWidget *parent, QMe - QLabel *label1 = new QLabel( this ); - label1->setPixmap( QMessageBox::standardIcon( type ) ); - QLabel *label2 = new QLabel( text, this ); -+ QRect d = KGlobalSettings::desktopGeometry(this); -+ if ( label2->fontMetrics().size( 0, text).width() > d.width() * 3 / 5) -+ label2->setAlignment(Qt::WordBreak | Qt::AlignAuto ); - KPushButton *button = new KPushButton( KStdGuiItem::ok(), this ); - button->setDefault( true ); - button->setSizePolicy( QSizePolicy( QSizePolicy::Preferred, QSizePolicy::Preferred ) ); diff --git a/opensuse/tdebase/kfontinst.diff b/opensuse/tdebase/kfontinst.diff deleted file mode 100644 index 51c5e59b6..000000000 --- a/opensuse/tdebase/kfontinst.diff +++ /dev/null @@ -1,10 +0,0 @@ ---- kcontrol/kfontinst/kfontinst/Main.cpp -+++ kcontrol/kfontinst/kfontinst/Main.cpp 2004/01/27 08:43:25 -@@ -80,6 +80,7 @@ - QStringList::ConstIterator xftIt; - - for(xftIt=CGlobal::cfg().getUserFontsDirs().begin(); xftIt!=CGlobal::cfg().getUserFontsDirs().end(); ++xftIt) -+ CMisc::doCmd("/sbin/conf.d/SuSEconfig.fonts", "--module", "fonts"); - CMisc::doCmd(XFT_CACHE_CMD, CMisc::xDirSyntax(*xftIt)); - #else - CMisc::doCmd(XFT_CACHE_CMD, CMisc::xDirSyntax(ds)); diff --git a/opensuse/tdebase/khelpcenter-beagle.diff b/opensuse/tdebase/khelpcenter-beagle.diff deleted file mode 100644 index 6b4314e6a..000000000 --- a/opensuse/tdebase/khelpcenter-beagle.diff +++ /dev/null @@ -1,172 +0,0 @@ -Index: khelpcenter/searchhandlers/khc_beagle_search.pl -=================================================================== ---- /dev/null -+++ khelpcenter/searchhandlers/khc_beagle_search.pl -@@ -0,0 +1,88 @@ -+#!/usr/bin/perl -w -+# vim:sw=4:et -+ -+use warnings; -+use strict; -+use Getopt::Long; -+ -+sub isBeagleRunning() -+{ -+ open(IN, "-|") || exec "beagle-ping"; -+ while() { -+ if (/^Daemon version:/) { -+ close(IN); -+ return 1; -+ } -+ } -+ close(IN); -+ return 0; -+} -+ -+sub formatHTML($$) -+{ -+ my ($query, $hits) = @_; -+ -+ print "\n\n"; -+ -+ foreach my $hit(@$hits) { -+ print "
  • $hit
  • \n"; -+ } -+ print "\n\n\n"; -+} -+ -+sub beagleQuery($$$) -+{ -+ my ($words, $method, $maxnum) = @_; -+ -+ my @hits = (); -+ -+ open(IN, "-|") || exec "beagle-query", "--type", "DocbookEntry", "--type", "File", "--max-hits", $maxnum, @$words, "ext:docbook"; -+ while() { -+ chop; -+ next if (/^Debug:/); -+ -+ my $uri = $_; -+ $uri = $1 if ($uri =~ /^file:\/\/(.*)$/); -+ -+ print "uri: $uri\n"; -+ my $helpLink = &makeHelpLink($uri); -+ -+ push(@hits, $helpLink) if (!grep { /^$helpLink$/ } @hits); -+ } -+ close(IN); -+ return @hits; -+} -+ -+sub makeHelpLink($) -+{ -+ # Try to figure out the name of the application from the path to its index.docbook file -+ -+ my ($path) = @_; -+ my @pathcomponents = split '/', $path; -+ -+ my $appName = $pathcomponents[-2]; -+ my $appName2 = $pathcomponents[-3]; -+ -+ if ($appName eq $appName2 or $appName2 eq "doc" -+ or (-d "/usr/share/locale/$appName2")) { -+ return "$appName"; -+ } -+ return "$appName ($appName2)"; -+} -+ -+my $method = "and"; -+my $maxnum = 100; -+ -+GetOptions("method=s", \$method, "maxnum=i", \$maxnum); -+ -+my @hits = ("The Beagle daemon is not running, search is not available"); -+ -+my @words = @ARGV; -+ -+if (isBeagleRunning()) { -+ @hits = beagleQuery(\@words, $method, $maxnum); -+} -+ -+@hits = ("There are no search results") if ($#hits < 0); -+ -+formatHTML(\@words, \@hits); -Index: khelpcenter/searchhandlers/khc_beagle_index.pl -=================================================================== ---- /dev/null -+++ khelpcenter/searchhandlers/khc_beagle_index.pl -@@ -0,0 +1,49 @@ -+#!/usr/bin/perl -+# vim:sw=4:et -+ -+use warnings; -+ -+sub getKDEDocDir() -+{ -+ my $prefix = `kde-config --prefix`; -+ chomp $prefix; -+ -+ $prefix = "/opt/kde" if (not defined($prefix)); -+ return "$prefix/share/doc"; -+} -+ -+sub addRoot() -+{ -+ my $kdedocdir = &getKDEDocDir; -+ -+ open (IN, "-|") || exec "beagle-config", "indexing", "ListRoots"; -+ -+ my $kdedoc_found = 0; -+ while() { -+ if (/^$kdedocdir/o) { -+ $kdedoc_found = 1; -+ last; -+ } -+ } -+ close(IN); -+ -+ if (not $kdedoc_found) { -+ `beagle-config indexing AddRoot $kdedocdir`; -+ `beagle-config indexing AddRoot $kdedocdir-bundle`; -+ } -+} -+ -+sub createExistsFile($$) -+{ -+ my ($idir, $ident) = @_; -+ -+ open(OUT, ">", "$idir/$idir"); -+ close(OUT); -+} -+ -+my $idir = $ARGV[0]; -+my $ident = $ARGV[1]; -+ -+if (addRoot) { -+ createExistsFile($idir, $ident); -+} -Index: khelpcenter/searchhandlers/docbook.desktop -=================================================================== ---- khelpcenter/searchhandlers/docbook.desktop.orig -+++ khelpcenter/searchhandlers/docbook.desktop -@@ -2,5 +2,5 @@ - - DocumentTypes=text/docbook - --SearchCommand=khc_htsearch.pl --docbook --indexdir=%d --config=%i --words=%w --method=%o --maxnum=%m --lang=en --IndexCommand=khc_docbookdig.pl --indexdir=%d --docpath=%p --identifier=%i -+SearchCommand=khc_beagle_search.pl --method=%o --maxnum=%m %w -+IndexCommand=khc_beagle_index.pl %d %i -Index: khelpcenter/searchhandlers/Makefile.am -=================================================================== ---- khelpcenter/searchhandlers/Makefile.am.orig -+++ khelpcenter/searchhandlers/Makefile.am -@@ -3,7 +3,7 @@ searchhandlers_DATA = htdig.desktop man. - searchhandlersdir = $(kde_datadir)/khelpcenter/searchhandlers - - kde_bin_SCRIPTS = khc_htdig.pl khc_htsearch.pl khc_mansearch.pl \ -- khc_docbookdig.pl -+ khc_docbookdig.pl khc_beagle_search.pl khc_beagle_index.pl - - htdigdata_DATA = htdig_long.html - diff --git a/opensuse/tdebase/khelpcenter-delayed-indexcheck.cpp b/opensuse/tdebase/khelpcenter-delayed-indexcheck.cpp deleted file mode 100644 index 37c3f195c..000000000 --- a/opensuse/tdebase/khelpcenter-delayed-indexcheck.cpp +++ /dev/null @@ -1,23 +0,0 @@ -Index: khelpcenter/navigator.cpp -=================================================================== ---- khelpcenter/navigator.cpp.orig -+++ khelpcenter/navigator.cpp -@@ -121,8 +121,6 @@ Navigator::Navigator( View *view, QWidge - - mTabWidget = new QTabWidget( this ); - topLayout->addWidget( mTabWidget ); -- connect( mTabWidget, SIGNAL( currentChanged( QWidget * ) ), -- SLOT( slotTabChanged( QWidget * ) ) ); - - setupContentsTab(); - setupGlossaryTab(); -@@ -136,6 +134,9 @@ Navigator::Navigator( View *view, QWidge - mSearchWidget->updateScopeList(); - mSearchWidget->readConfig( KGlobal::config() ); - } -+ -+ connect( mTabWidget, SIGNAL( currentChanged( QWidget * ) ), -+ SLOT( slotTabChanged( QWidget * ) ) ); - } - - Navigator::~Navigator() diff --git a/opensuse/tdebase/khelpcenter-gnome-support-legacy.patch b/opensuse/tdebase/khelpcenter-gnome-support-legacy.patch deleted file mode 100644 index fb9a11ee4..000000000 --- a/opensuse/tdebase/khelpcenter-gnome-support-legacy.patch +++ /dev/null @@ -1,327 +0,0 @@ -Index: khelpcenter/table-of-contents.xslt -================================================================================ ---- khelpcenter/docentry.cpp -+++ khelpcenter/docentry.cpp -@@ -1,5 +1,6 @@ - #include - #include -+#include - - #include - #include -@@ -206,6 +207,37 @@ - { - KDesktopFile file( fileName ); - -+ static QString desktop; -+ if (desktop.isNull()) { -+ QString win_man = getenv("WINDOWMANAGER"); -+ if (win_man.contains ("gnome", FALSE)) -+ desktop = "GNOME"; -+ else if (win_man.contains ("kde", FALSE)) -+ desktop = "KDE"; -+ else -+ desktop = ""; -+ kdDebug() << "DocEntry::desktop = " << desktop << endl; -+ }; -+ -+ QString onlyShowIn = file.readEntry ("OnlyShowIn"); -+ -+ kdDebug() << "DocEntry::readFromFile(): " << fileName << " onlyShowIn = " << onlyShowIn << endl; -+ -+ if ( !onlyShowIn.isNull() ) { -+ if (desktop.isEmpty()) -+ return false; -+ QStringList list = QStringList::split (";", onlyShowIn); -+ if ( ! list.contains (desktop) ) -+ return false; -+ } -+ -+ QString notShowIn = file.readEntry ("NotShowIn"); -+ if ( !notShowIn.isNull() ) { -+ QStringList list = QStringList::split (";", notShowIn); -+ if ( list.contains (desktop) ) -+ return false; -+ } -+ - mName = file.readName(); - mSearch = file.readEntry( "X-DOC-Search" ); - mIcon = file.readIcon(); ---- khelpcenter/navigator.cpp -+++ khelpcenter/navigator.cpp -@@ -22,6 +22,7 @@ - #include - #include - #include -+#include - - #include - #include -@@ -275,6 +276,38 @@ - const QString &file ) - { - KDesktopFile desktopFile( file ); -+ -+ static QString desktop; -+ if (desktop.isNull()) { -+ QString win_man = getenv("WINDOWMANAGER"); -+ if (win_man.contains ("gnome", FALSE)) -+ desktop = "GNOME"; -+ else if (win_man.contains ("kde", FALSE)) -+ desktop = "KDE"; -+ else -+ desktop = ""; -+ kdDebug() << "Navigator::desktop = " << desktop << endl; -+ }; -+ -+ QString onlyShowIn = desktopFile.readEntry ("OnlyShowIn"); -+ -+ kdDebug() << "Navigator::createItemFromDesktopFile(): " << file << " onlyShowIn = " << onlyShowIn << endl; -+ -+ if ( !onlyShowIn.isNull() ) { -+ if (desktop.isEmpty()) -+ return; -+ QStringList list = QStringList::split (";", onlyShowIn); -+ if ( ! list.contains (desktop) ) -+ return; -+ } -+ -+ QString notShowIn = desktopFile.readEntry ("NotShowIn"); -+ if ( !notShowIn.isNull() ) { -+ QStringList list = QStringList::split (";", notShowIn); -+ if ( list.contains (desktop) ) -+ return; -+ } -+ - QString docPath = desktopFile.readDocPath(); - if ( !docPath.isNull() ) { - // First parameter is ignored if second is an absolute path -@@ -317,6 +350,9 @@ - { - alternativeURL.setQuery("anchor="+url.ref()); - alternativeURL.setRef(QString::null); -+ } else if (url.url().endsWith("/index.html")) -+ { -+ alternativeURL = KURL (url.url().left (url.url().length() - strlen ("/index.html"))); - } - - // If the navigator already has the given URL selected, do nothing. -@@ -401,15 +437,43 @@ - TOC *tocTree = item->createTOC(); - kdDebug( 1400 ) << "slotItemSelected(): Trying to build TOC for " - << item->entry()->name() << endl; -- tocTree->setApplication( url.directory() ); -+ if (url.directory() != "/") -+ tocTree->setApplication( url.directory() ); -+ else -+ tocTree->setApplication( url.path() ); - QString doc = View::langLookup( url.path() ); - // Enforce the original .docbook version, in case langLookup returns a - // cached version - if ( !doc.isNull() ) { -- int pos = doc.find( ".html" ); -- if ( pos >= 0 ) { -- doc.replace( pos, 5, ".docbook" ); -- } -+ if (doc.endsWith( ".html" )) { -+ doc = doc.left (doc.length() - 5) + ".docbook"; -+ } -+ -+ QFileInfo di (doc); -+ if (!di.isFile()) { -+ -+ int last_slash = doc.findRev ('/'); -+ if (last_slash >= 1) { -+ -+ QString filename = doc.right(doc.length() - last_slash - 1); -+ if (filename == "index.html" || filename == "") { -+ -+ int slash2 = doc.findRev('/', last_slash -1); -+ if (slash2 != -1 && slash2 != 0) { -+ -+ int slash3 = doc.findRev('/', slash2 - 1); -+ if (slash3 != -1) { -+ QString xml_file = doc.left(last_slash) + "/" + doc.mid(slash3 + 1, slash2 - (slash3 + 1)) + ".xml"; -+ kdDebug() << "xml_file " << xml_file << endl; -+ QFileInfo fi(xml_file); -+ if (fi.exists()) -+ doc = xml_file; -+ -+ } -+ } -+ } -+ } -+ } - kdDebug( 1400 ) << "slotItemSelected(): doc = " << doc << endl; - - tocTree->build( doc ); ---- khelpcenter/navigatorappitem.cpp -+++ khelpcenter/navigatorappitem.cpp -@@ -21,6 +21,8 @@ - - #include "docentry.h" - -+#include -+ - #include - #include - -@@ -134,11 +136,42 @@ - - QString NavigatorAppItem::documentationURL( KService *s ) - { -+ static QString desktop; -+ if (desktop.isNull()) { -+ QString win_man = getenv("WINDOWMANAGER"); -+ if (win_man.contains ("gnome", FALSE)) -+ desktop = "GNOME"; -+ else if (win_man.contains ("kde", FALSE)) -+ desktop = "KDE"; -+ else -+ desktop = ""; -+ kdDebug() << "NavigatorAppItem::desktop = " << desktop << endl; -+ }; -+ -+ QString onlyShowIn = s->property("OnlyShowIn", QVariant::String).toString(); -+ -+ kdDebug() << "NavigatorAppItem::onlyShowIn = " << onlyShowIn << endl; -+ -+ if ( !onlyShowIn.isNull() ) { -+ if (desktop.isEmpty()) -+ return QString::null; -+ QStringList list = QStringList::split (";", onlyShowIn); -+ if ( ! list.contains (desktop) ) -+ return QString::null; -+ } -+ -+ QString notShowIn = s->property("NotShowIn", QVariant::String).toString(); -+ if ( !notShowIn.isNull() ) { -+ QStringList list = QStringList::split (";", notShowIn); -+ if ( list.contains (desktop) ) -+ return QString::null; -+ } -+ - QString docPath = s->property( "DocPath" ).toString(); - if ( docPath.isEmpty() ) - return QString::null; - -- if ( docPath.startsWith( "file:") || docPath.startsWith( "http:" ) ) -+ if ( docPath.startsWith( "file:") || docPath.startsWith( "http:" ) || docPath.startsWith( "ghelp:" )) - return docPath; - - return QString( "help:/" ) + docPath; ---- khelpcenter/table-of-contents.xslt -+++ khelpcenter/table-of-contents.xslt -@@ -8,6 +8,12 @@ - - - -+ -+ -+ -+ -+ -+ - - - <xsl:value-of select="title"/> -@@ -20,7 +26,15 @@ -
    - <xsl:value-of select="title"/> - -+ -
    -
    - -+ -+ -+<xsl:value-of select="title"/> -+ -+ -+ -+ - ---- khelpcenter/view.cpp -+++ khelpcenter/view.cpp -@@ -146,21 +146,51 @@ - // assemble the local search paths - const QStringList localDoc = KGlobal::dirs()->resourceDirs("html"); - -+ kdDebug() << "Looking up help for: " << fname << endl; -+ -+ QString path; -+ QString file_name; -+ int slash = fname.findRev ('/'); -+ if (slash == -1 || slash == 0) { -+ path = fname; -+ file_name = "/"; -+ } else { -+ path = fname.left (slash); -+ file_name = fname.right (fname.length() - slash); -+ } -+ -+ QStringList langs = KGlobal::locale()->languageList(); -+ QStringList::ConstIterator lang; -+ for (lang = langs.begin(); lang != langs.end(); ++lang) -+ if (*lang == "en") -+ search.append(QString("/opt/gnome/share/gnome/help/%1/C%2").arg(path).arg(file_name)); -+ else -+ search.append(QString("/opt/gnome/share/gnome/help/%1/%2%3").arg(path).arg(*lang).arg(file_name)); -+ -+ langs.append( "en" ); -+ langs.remove( "C" ); -+ -+ // this is kind of compat hack as we install our docs in en/ but the -+ // default language is en_US -+ for (QStringList::Iterator it = langs.begin(); it != langs.end(); ++it) -+ if ( *it == "en_US" ) -+ *it = "en"; -+ - // look up the different languages -- for (int id=localDoc.count()-1; id >= 0; --id) -+ int ldCount = localDoc.count(); -+ for (int id=0; id < ldCount; id++) - { -- QStringList langs = KGlobal::locale()->languageList(); -- langs.append( "en" ); -- langs.remove( "C" ); - QStringList::ConstIterator lang; - for (lang = langs.begin(); lang != langs.end(); ++lang) -- search.append(QString("%1%2/%3").arg(localDoc[id]).arg(*lang).arg(fname)); -+ search.append(QString("%1%2/%3").arg(localDoc[id]).arg(*lang).arg(path + file_name)); - } - - // try to locate the file - QStringList::Iterator it; - for (it = search.begin(); it != search.end(); ++it) - { -+ kdDebug() << "Looking for help in: " << *it << endl; -+ - QFileInfo info(*it); - if (info.exists() && info.isFile() && info.isReadable()) - return *it; -@@ -168,7 +198,7 @@ - // Fall back to the index.docbook for this language if we couldn't find its - // specific docbook file. If we are not looking up docbook (images, - // css etc) then look in other languages first. -- if ( ( *it ).endsWith( "docbook" ) ) -+ if ( ( *it ).endsWith( "docbook" ) || ( *it).endsWith( ".xml") ) - { - QString file = (*it).left((*it).findRev('/')) + "/index.docbook"; - info.setFile(file); -@@ -176,9 +206,15 @@ - { - return *it; - } -+ -+ file = (*it).left((*it).findRev('/')) + "/" + path + ".xml"; -+ info.setFile(file); -+ if (info.exists() && info.isFile() && info.isReadable()) -+ return *it; - } - } - -+ - return QString::null; - } - diff --git a/opensuse/tdebase/khelpcenter-gnome-support.patch b/opensuse/tdebase/khelpcenter-gnome-support.patch deleted file mode 100644 index d98ae01dc..000000000 --- a/opensuse/tdebase/khelpcenter-gnome-support.patch +++ /dev/null @@ -1,335 +0,0 @@ -Index: khelpcenter/docentry.cpp -=================================================================== ---- khelpcenter/docentry.cpp.orig -+++ khelpcenter/docentry.cpp -@@ -1,5 +1,6 @@ - #include - #include -+#include - - #include - #include -@@ -206,6 +207,37 @@ bool DocEntry::readFromFile( const QStri - { - KDesktopFile file( fileName ); - -+ static QString desktop; -+ if (desktop.isNull()) { -+ QString win_man = getenv("WINDOWMANAGER"); -+ if (win_man.contains ("gnome", FALSE)) -+ desktop = "GNOME"; -+ else if (win_man.contains ("kde", FALSE)) -+ desktop = "KDE"; -+ else -+ desktop = ""; -+ kdDebug() << "DocEntry::desktop = " << desktop << endl; -+ }; -+ -+ QString onlyShowIn = file.readEntry ("OnlyShowIn"); -+ -+ kdDebug() << "DocEntry::readFromFile(): " << fileName << " onlyShowIn = " << onlyShowIn << endl; -+ -+ if ( !onlyShowIn.isNull() ) { -+ if (desktop.isEmpty()) -+ return false; -+ QStringList list = QStringList::split (";", onlyShowIn); -+ if ( ! list.contains (desktop) ) -+ return false; -+ } -+ -+ QString notShowIn = file.readEntry ("NotShowIn"); -+ if ( !notShowIn.isNull() ) { -+ QStringList list = QStringList::split (";", notShowIn); -+ if ( list.contains (desktop) ) -+ return false; -+ } -+ - mName = file.readName(); - mSearch = file.readEntry( "X-DOC-Search" ); - mIcon = file.readIcon(); -Index: khelpcenter/navigator.cpp -=================================================================== ---- khelpcenter/navigator.cpp.orig -+++ khelpcenter/navigator.cpp -@@ -22,6 +22,7 @@ - #include - #include - #include -+#include - - #include - #include -@@ -275,6 +276,38 @@ void Navigator::createItemFromDesktopFil - const QString &file ) - { - KDesktopFile desktopFile( file ); -+ -+ static QString desktop; -+ if (desktop.isNull()) { -+ QString win_man = getenv("WINDOWMANAGER"); -+ if (win_man.contains ("gnome", FALSE)) -+ desktop = "GNOME"; -+ else if (win_man.contains ("kde", FALSE)) -+ desktop = "KDE"; -+ else -+ desktop = ""; -+ kdDebug() << "Navigator::desktop = " << desktop << endl; -+ }; -+ -+ QString onlyShowIn = desktopFile.readEntry ("OnlyShowIn"); -+ -+ kdDebug() << "Navigator::createItemFromDesktopFile(): " << file << " onlyShowIn = " << onlyShowIn << endl; -+ -+ if ( !onlyShowIn.isNull() ) { -+ if (desktop.isEmpty()) -+ return; -+ QStringList list = QStringList::split (";", onlyShowIn); -+ if ( ! list.contains (desktop) ) -+ return; -+ } -+ -+ QString notShowIn = desktopFile.readEntry ("NotShowIn"); -+ if ( !notShowIn.isNull() ) { -+ QStringList list = QStringList::split (";", notShowIn); -+ if ( list.contains (desktop) ) -+ return; -+ } -+ - QString docPath = desktopFile.readDocPath(); - if ( !docPath.isNull() ) { - // First parameter is ignored if second is an absolute path -@@ -317,6 +350,9 @@ void Navigator::selectItem( const KURL & - { - alternativeURL.setQuery("anchor="+url.ref()); - alternativeURL.setRef(QString::null); -+ } else if (url.url().endsWith("/index.html")) -+ { -+ alternativeURL = KURL (url.url().left (url.url().length() - strlen ("/index.html"))); - } - - // If the navigator already has the given URL selected, do nothing. -@@ -401,15 +437,43 @@ void Navigator::slotItemSelected( QListV - TOC *tocTree = item->createTOC(); - kdDebug( 1400 ) << "slotItemSelected(): Trying to build TOC for " - << item->entry()->name() << endl; -- tocTree->setApplication( url.directory() ); -+ if (url.directory() != "/") -+ tocTree->setApplication( url.directory() ); -+ else -+ tocTree->setApplication( url.path() ); - QString doc = View::langLookup( url.path() ); - // Enforce the original .docbook version, in case langLookup returns a - // cached version - if ( !doc.isNull() ) { -- int pos = doc.find( ".html" ); -- if ( pos >= 0 ) { -- doc.replace( pos, 5, ".docbook" ); -- } -+ if (doc.endsWith( ".html" )) { -+ doc = doc.left (doc.length() - 5) + ".docbook"; -+ } -+ -+ QFileInfo di (doc); -+ if (!di.isFile()) { -+ -+ int last_slash = doc.findRev ('/'); -+ if (last_slash >= 1) { -+ -+ QString filename = doc.right(doc.length() - last_slash - 1); -+ if (filename == "index.html" || filename == "") { -+ -+ int slash2 = doc.findRev('/', last_slash -1); -+ if (slash2 != -1 && slash2 != 0) { -+ -+ int slash3 = doc.findRev('/', slash2 - 1); -+ if (slash3 != -1) { -+ QString xml_file = doc.left(last_slash) + "/" + doc.mid(slash3 + 1, slash2 - (slash3 + 1)) + ".xml"; -+ kdDebug() << "xml_file " << xml_file << endl; -+ QFileInfo fi(xml_file); -+ if (fi.exists()) -+ doc = xml_file; -+ -+ } -+ } -+ } -+ } -+ } - kdDebug( 1400 ) << "slotItemSelected(): doc = " << doc << endl; - - tocTree->build( doc ); -Index: khelpcenter/navigatorappitem.cpp -=================================================================== ---- khelpcenter/navigatorappitem.cpp.orig -+++ khelpcenter/navigatorappitem.cpp -@@ -21,6 +21,8 @@ - - #include "docentry.h" - -+#include -+ - #include - #include - -@@ -134,11 +136,42 @@ void NavigatorAppItem::populate( bool re - - QString NavigatorAppItem::documentationURL( KService *s ) - { -+ static QString desktop; -+ if (desktop.isNull()) { -+ QString win_man = getenv("WINDOWMANAGER"); -+ if (win_man.contains ("gnome", FALSE)) -+ desktop = "GNOME"; -+ else if (win_man.contains ("kde", FALSE)) -+ desktop = "KDE"; -+ else -+ desktop = ""; -+ kdDebug() << "NavigatorAppItem::desktop = " << desktop << endl; -+ }; -+ -+ QString onlyShowIn = s->property("OnlyShowIn", QVariant::String).toString(); -+ -+ kdDebug() << "NavigatorAppItem::onlyShowIn = " << onlyShowIn << endl; -+ -+ if ( !onlyShowIn.isNull() ) { -+ if (desktop.isEmpty()) -+ return QString::null; -+ QStringList list = QStringList::split (";", onlyShowIn); -+ if ( ! list.contains (desktop) ) -+ return QString::null; -+ } -+ -+ QString notShowIn = s->property("NotShowIn", QVariant::String).toString(); -+ if ( !notShowIn.isNull() ) { -+ QStringList list = QStringList::split (";", notShowIn); -+ if ( list.contains (desktop) ) -+ return QString::null; -+ } -+ - QString docPath = s->property( "DocPath" ).toString(); - if ( docPath.isEmpty() ) - return QString::null; - -- if ( docPath.startsWith( "file:") || docPath.startsWith( "http:" ) ) -+ if ( docPath.startsWith( "file:") || docPath.startsWith( "http:" ) || docPath.startsWith( "ghelp:" )) - return docPath; - - return QString( "help:/" ) + docPath; -Index: khelpcenter/table-of-contents.xslt -=================================================================== ---- khelpcenter/table-of-contents.xslt.orig -+++ khelpcenter/table-of-contents.xslt -@@ -8,6 +8,12 @@ - - - -+ -+ -+ -+ -+ -+ - - - <xsl:value-of select="title"/> -@@ -20,7 +26,15 @@ -
    - <xsl:value-of select="title"/> - -+ -
    -
    - -+ -+ -+<xsl:value-of select="title"/> -+ -+ -+ -+ - -Index: khelpcenter/view.cpp -=================================================================== ---- khelpcenter/view.cpp.orig -+++ khelpcenter/view.cpp -@@ -150,21 +150,51 @@ QString View::langLookup( const QString - // assemble the local search paths - const QStringList localDoc = KGlobal::dirs()->resourceDirs("html"); - -+ kdDebug() << "Looking up help for: " << fname << endl; -+ -+ QString path; -+ QString file_name; -+ int slash = fname.findRev ('/'); -+ if (slash == -1 || slash == 0) { -+ path = fname; -+ file_name = "/"; -+ } else { -+ path = fname.left (slash); -+ file_name = fname.right (fname.length() - slash); -+ } -+ -+ QStringList langs = KGlobal::locale()->languageList(); -+ QStringList::ConstIterator lang; -+ for (lang = langs.begin(); lang != langs.end(); ++lang) -+ if (*lang == "en") -+ search.append(QString("/usr/share/gnome/help/%1/C%2").arg(path).arg(file_name)); -+ else -+ search.append(QString("/usr/share/gnome/help/%1/%2%3").arg(path).arg(*lang).arg(file_name)); -+ -+ langs.append( "en" ); -+ langs.remove( "C" ); -+ -+ // this is kind of compat hack as we install our docs in en/ but the -+ // default language is en_US -+ for (QStringList::Iterator it = langs.begin(); it != langs.end(); ++it) -+ if ( *it == "en_US" ) -+ *it = "en"; -+ - // look up the different languages -- for (int id=localDoc.count()-1; id >= 0; --id) -+ int ldCount = localDoc.count(); -+ for (int id=0; id < ldCount; id++) - { -- QStringList langs = KGlobal::locale()->languageList(); -- langs.append( "en" ); -- langs.remove( "C" ); - QStringList::ConstIterator lang; - for (lang = langs.begin(); lang != langs.end(); ++lang) -- search.append(QString("%1%2/%3").arg(localDoc[id]).arg(*lang).arg(fname)); -+ search.append(QString("%1%2/%3").arg(localDoc[id]).arg(*lang).arg(path + file_name)); - } - - // try to locate the file - QStringList::Iterator it; - for (it = search.begin(); it != search.end(); ++it) - { -+ kdDebug() << "Looking for help in: " << *it << endl; -+ - QFileInfo info(*it); - if (info.exists() && info.isFile() && info.isReadable()) - return *it; -@@ -172,7 +202,7 @@ QString View::langLookup( const QString - // Fall back to the index.docbook for this language if we couldn't find its - // specific docbook file. If we are not looking up docbook (images, - // css etc) then look in other languages first. -- if ( ( *it ).endsWith( "docbook" ) ) -+ if ( ( *it ).endsWith( "docbook" ) || ( *it).endsWith( ".xml") ) - { - QString file = (*it).left((*it).findRev('/')) + "/index.docbook"; - info.setFile(file); -@@ -180,9 +210,15 @@ QString View::langLookup( const QString - { - return *it; - } -+ -+ file = (*it).left((*it).findRev('/')) + "/" + path + ".xml"; -+ info.setFile(file); -+ if (info.exists() && info.isFile() && info.isReadable()) -+ return *it; - } - } - -+ - return QString::null; - } - diff --git a/opensuse/tdebase/khelpcenter-localindices.patch b/opensuse/tdebase/khelpcenter-localindices.patch deleted file mode 100644 index a2b41a78a..000000000 --- a/opensuse/tdebase/khelpcenter-localindices.patch +++ /dev/null @@ -1,41 +0,0 @@ -Index: khelpcenter/kcmhelpcenter.cpp -=================================================================== ---- khelpcenter/kcmhelpcenter.cpp.orig -+++ khelpcenter/kcmhelpcenter.cpp -@@ -321,6 +321,7 @@ bool KCMHelpCenter::save() - - void KCMHelpCenter::load() - { -+ findWriteableIndexDir(); - mIndexDirLabel->setText( Prefs::indexDirectory() ); - - mListView->clear(); -@@ -675,6 +676,12 @@ void KCMHelpCenter::checkSelection() - enableButtonOK( count != 0 ); - } - -+void KCMHelpCenter::findWriteableIndexDir() -+{ -+ QFileInfo currentDir( Prefs::indexDirectory() ); -+ if ( !currentDir.isWritable() ) -+ Prefs::setIndexDirectory( KGlobal::dirs()->saveLocation("data", "khelpcenter/index/") ); -+} - #include "kcmhelpcenter.moc" - - // vim:ts=2:sw=2:et -Index: khelpcenter/kcmhelpcenter.h -=================================================================== ---- khelpcenter/kcmhelpcenter.h.orig -+++ khelpcenter/kcmhelpcenter.h -@@ -146,6 +146,11 @@ class KCMHelpCenter : public KDialogBase - - void advanceProgress(); - -+ /** -+ * Find a user-writeable location for the indices, if the current location -+ * is not. -+ */ -+ void findWriteableIndexDir(); - private: - KHC::SearchEngine *mEngine; - diff --git a/opensuse/tdebase/khelpcenter-use-suseconfig-indexer.diff b/opensuse/tdebase/khelpcenter-use-suseconfig-indexer.diff deleted file mode 100644 index e63e26ff7..000000000 --- a/opensuse/tdebase/khelpcenter-use-suseconfig-indexer.diff +++ /dev/null @@ -1,25 +0,0 @@ -Index: khelpcenter/navigator.cpp -=================================================================== ---- khelpcenter/navigator.cpp.orig -+++ khelpcenter/navigator.cpp -@@ -654,10 +654,16 @@ void Navigator::hideSearch() - - bool Navigator::checkSearchIndex() - { -- KConfig *cfg = KGlobal::config(); -- cfg->setGroup( "Search" ); -- if ( cfg->readBoolEntry( "IndexExists", false ) ) return true; -- -+ // just check that the index dir contains something -+ QDir indexDir( Prefs::indexDirectory() ); -+ QStringList dirEntries = indexDir.entryList(); -+ QStringList::Iterator it = dirEntries.begin(); -+ const QStringList::Iterator end = dirEntries.end(); -+ for ( ; it != end; ++it ) -+ { -+ if ( *it != "." && *it != ".." ) -+ return true; -+ } - if ( mIndexDialog && mIndexDialog->isShown() ) return true; - - QString text = i18n( "A search index does not yet exist. Do you want " diff --git a/opensuse/tdebase/khelpcenter-use-susehelp.diff b/opensuse/tdebase/khelpcenter-use-susehelp.diff deleted file mode 100644 index 6c130a6d1..000000000 --- a/opensuse/tdebase/khelpcenter-use-susehelp.diff +++ /dev/null @@ -1,13 +0,0 @@ -Index: kdebase-3.5.10/khelpcenter/khelpcenter.desktop -=================================================================== ---- kdebase-3.5.10.orig/khelpcenter/khelpcenter.desktop -+++ kdebase-3.5.10/khelpcenter/khelpcenter.desktop -@@ -127,7 +127,7 @@ Icon=khelpcenter - DocPath=khelpcenter/index.html - Type=Service - Terminal=false --Exec=khelpcenter %u -+Exec=susehelp %u - SwallowExec= - SwallowTitle= - X-KDE-StartupNotify=true diff --git a/opensuse/tdebase/khotkeys-multimedia-action.diff b/opensuse/tdebase/khotkeys-multimedia-action.diff deleted file mode 100644 index 050e31d60..000000000 --- a/opensuse/tdebase/khotkeys-multimedia-action.diff +++ /dev/null @@ -1,345 +0,0 @@ -Index: khotkeys/data/multimedia_keys.khotkeys -=================================================================== ---- /dev/null -+++ khotkeys/data/multimedia_keys.khotkeys -@@ -0,0 +1,311 @@ -+[Data] -+DataCount=1 -+ -+[Data_1] -+Comment=This group contains actions that are set up by default.\n -+DataCount=8 -+Enabled=true -+Name=Preset Actions -+SystemGroup=0 -+Type=ACTION_DATA_GROUP -+AllowMerge=true -+ -+[Data_1Conditions] -+Comment= -+ConditionsCount=0 -+ -+[Data_1_1] -+Comment=Opens the My Computer window when the multimedia My Computer key is pressed.\n -+Enabled=true -+Name=My Computer -+Type=COMMAND_URL_SHORTCUT_ACTION_DATA -+ -+[Data_1_1Actions] -+ActionsCount=1 -+ -+[Data_1_1Actions0] -+CommandURL=sysinfo:/ -+Type=COMMAND_URL -+ -+[Data_1_1Conditions] -+Comment= -+ConditionsCount=0 -+ -+[Data_1_1Triggers] -+Comment=Simple_action -+TriggersCount=1 -+ -+[Data_1_1Triggers0] -+Key=XF86MyComputer -+Type=SHORTCUT -+ -+[Data_1_2] -+Comment=Launch or activate Amarok when the multimedia Media key is pressed.\n -+Enabled=true -+Name=Media -+Type=COMMAND_URL_SHORTCUT_ACTION_DATA -+ -+[Data_1_2Actions] -+ActionsCount=1 -+ -+[Data_1_2Actions0] -+CommandURL=amarok -+Type=COMMAND_URL -+ -+[Data_1_2Conditions] -+Comment= -+ConditionsCount=0 -+ -+[Data_1_2Triggers] -+Comment=Simple_action -+TriggersCount=1 -+ -+[Data_1_2Triggers0] -+Key=XF86AudioMedia -+Type=SHORTCUT -+ -+[Data_1_3] -+Comment=When the multimedia Calculator key is pressed, KCalc is either launched or activated if it is already running.\n -+DataCount=2 -+Enabled=true -+Name=Calculator -+SystemGroup=0 -+Type=ACTION_DATA_GROUP -+ -+[Data_1_3Conditions] -+Comment= -+ConditionsCount=0 -+ -+[Data_1_3_1] -+Comment=Runs KCalc if it is not already running.\n -+Enabled=true -+Name=Run KCalc -+Type=GENERIC_ACTION_DATA -+ -+[Data_1_3_1Actions] -+ActionsCount=1 -+ -+[Data_1_3_1Actions0] -+CommandURL=kcalc -+Type=COMMAND_URL -+ -+[Data_1_3_1Conditions] -+Comment= -+ConditionsCount=1 -+ -+[Data_1_3_1Conditions0] -+ConditionsCount=1 -+Type=NOT -+ -+[Data_1_3_1Conditions00] -+Type=EXISTING_WINDOW -+ -+[Data_1_3_1Conditions00Window] -+Comment=kcalc -+WindowsCount=1 -+ -+[Data_1_3_1Conditions00Window0] -+Class=kcalc Kcalc -+ClassType=2 -+Comment=kcalc -+Role=kcalc-mainwindow#1 -+RoleType=0 -+Title=KCalc -+TitleType=0 -+Type=SIMPLE -+WindowTypes=1 -+ -+[Data_1_3_1Triggers] -+Comment= -+TriggersCount=1 -+ -+[Data_1_3_1Triggers0] -+Key=XF86Calculator -+Type=SHORTCUT -+ -+[Data_1_3_2] -+Comment=Activates KCalc window if it is already running.\n -+Enabled=true -+Name=Activate KCalc -+Type=GENERIC_ACTION_DATA -+ -+[Data_1_3_2Actions] -+ActionsCount=1 -+ -+[Data_1_3_2Actions0] -+Type=ACTIVATE_WINDOW -+ -+[Data_1_3_2Actions0Window] -+Comment=kcalc -+WindowsCount=1 -+ -+[Data_1_3_2Actions0Window0] -+Class=kcalc Kcalc -+ClassType=2 -+Comment=kcalc -+Role=kcalc-mainwindow#1 -+RoleType=0 -+Title=KCalc -+TitleType=0 -+Type=SIMPLE -+WindowTypes=1 -+ -+[Data_1_3_2Conditions] -+Comment= -+ConditionsCount=1 -+ -+[Data_1_3_2Conditions0] -+Type=EXISTING_WINDOW -+ -+[Data_1_3_2Conditions0Window] -+Comment=kcalc -+WindowsCount=1 -+ -+[Data_1_3_2Conditions0Window0] -+Class=kcalc Kcalc -+ClassType=2 -+Comment=kcalc -+Role=kcalc-mainwindow#1 -+RoleType=0 -+Title=KCalc -+TitleType=0 -+Type=SIMPLE -+WindowTypes=1 -+ -+[Data_1_3_2Triggers] -+Comment= -+TriggersCount=1 -+ -+[Data_1_3_2Triggers0] -+Key=XF86Calculator -+Type=SHORTCUT -+ -+[Data_1_4] -+Comment=Launches the default terminal application when the multimedia Terminal key is pressed.\n -+Enabled=true -+Name=Terminal -+Type=COMMAND_URL_SHORTCUT_ACTION_DATA -+ -+[Data_1_4Actions] -+ActionsCount=1 -+ -+[Data_1_4Actions0] -+CommandURL=KHOTKEYS_TERMINAL -+Type=COMMAND_URL -+ -+[Data_1_4Conditions] -+Comment= -+ConditionsCount=0 -+ -+[Data_1_4Triggers] -+Comment=Simple_action -+TriggersCount=1 -+ -+[Data_1_4Triggers0] -+Key=XF86Terminal -+Type=SHORTCUT -+ -+[Data_1_5] -+Comment=Opens the default browser when the multimedia WWW key is pressed.\n -+Enabled=true -+Name=Browser (HomePage) -+Type=COMMAND_URL_SHORTCUT_ACTION_DATA -+ -+[Data_1_5Actions] -+ActionsCount=1 -+ -+[Data_1_5Actions0] -+CommandURL=KHOTKEYS_BROWSER -+Type=COMMAND_URL -+ -+[Data_1_5Conditions] -+Comment= -+ConditionsCount=0 -+ -+[Data_1_5Triggers] -+Comment=Simple_action -+TriggersCount=1 -+ -+[Data_1_5Triggers0] -+Key=XF86WWW -+Type=SHORTCUT -+ -+[Data_1_6] -+Comment=Ejecting when the multimedia Eject key is pressed.\n -+Enabled=true -+Name=Eject -+Type=COMMAND_URL_SHORTCUT_ACTION_DATA -+ -+[Data_1_6Actions] -+ActionsCount=1 -+ -+[Data_1_6Actions0] -+CommandURL=kdeeject "" -+Type=COMMAND_URL -+ -+[Data_1_6Conditions] -+Comment= -+ConditionsCount=0 -+ -+[Data_1_6Triggers] -+Comment=Simple_action -+TriggersCount=1 -+ -+[Data_1_6Triggers0] -+Key=XF86Eject -+Type=SHORTCUT -+ -+[Data_1_7] -+Comment=Launches KFind when the multimedia Search key is pressed.\n -+Enabled=true -+Name=Search -+Type=COMMAND_URL_SHORTCUT_ACTION_DATA -+ -+[Data_1_7Actions] -+ActionsCount=1 -+ -+[Data_1_7Actions0] -+CommandURL=kfind -+Type=COMMAND_URL -+ -+[Data_1_7Conditions] -+Comment= -+ConditionsCount=0 -+ -+[Data_1_7Triggers] -+Comment=Simple_action -+TriggersCount=1 -+ -+[Data_1_7Triggers0] -+Key=XF86Search -+Type=SHORTCUT -+ -+[Data_1_8] -+Comment=Opens a new mail composer window when the multimedia Mail key is pressed.\n -+Enabled=true -+Name=Launch Mail -+Type=COMMAND_URL_SHORTCUT_ACTION_DATA -+ -+[Data_1_8Actions] -+ActionsCount=1 -+ -+[Data_1_8Actions0] -+CommandURL=mailto:? -+Type=COMMAND_URL -+ -+[Data_1_8Conditions] -+Comment= -+ConditionsCount=0 -+ -+[Data_1_8Triggers] -+Comment=Simple_action -+TriggersCount=1 -+ -+[Data_1_8Triggers0] -+Key=XF86Mail -+Type=SHORTCUT -+ -+[Main] -+Version=2 -+ImportId=multimedia_keys -+ -Index: khotkeys/data/Makefile.am -=================================================================== ---- khotkeys/data/Makefile.am.orig -+++ khotkeys/data/Makefile.am -@@ -1,7 +1,9 @@ --khotkeys_data_DATA = kde32b1.khotkeys konqueror_gestures_kde321.khotkeys printscreen.khotkeys -+khotkeys_data_DATA = kde32b1.khotkeys konqueror_gestures_kde321.khotkeys printscreen.khotkeys \ -+ multimedia_keys.khotkeys - khotkeys_datadir = $(kde_datadir)/khotkeys - --khotkeys_update_DATA = khotkeys_32b1_update.upd konqueror_gestures_kde321_update.upd khotkeys_printscreen.upd -+khotkeys_update_DATA = khotkeys_32b1_update.upd konqueror_gestures_kde321_update.upd khotkeys_printscreen.upd \ -+ khotkeys_multimedia_keys.upd - khotkeys_updatedir = $(kde_datadir)/kconf_update - - EXTRA_DIST = $(khotkeys_data_DATA) $(khotkeys_update_DATA) -Index: khotkeys/data/khotkeys_multimedia_keys.upd -=================================================================== ---- /dev/null -+++ khotkeys/data/khotkeys_multimedia_keys.upd -@@ -0,0 +1,8 @@ -+Id=multimedia_keys -+# the file is intentionally a dummy, as the binary will update khotkeysrc, -+# the khotkeys_update will just remember it has been done -+File=khotkeys_update -+Group=Dummy -+Options=overwrite -+ScriptArguments=--id multimedia_keys -+Script=khotkeys_update diff --git a/opensuse/tdebase/khotkeys-multimedia-action2.diff b/opensuse/tdebase/khotkeys-multimedia-action2.diff deleted file mode 100644 index 9f995b1ab..000000000 --- a/opensuse/tdebase/khotkeys-multimedia-action2.diff +++ /dev/null @@ -1,81 +0,0 @@ -Index: khotkeys/shared/actions.cpp -=================================================================== ---- khotkeys/shared/actions.cpp.orig -+++ khotkeys/shared/actions.cpp -@@ -29,6 +29,7 @@ - #include - #include - #include -+#include - - #include "windows.h" - #include "action_data.h" -@@ -116,7 +117,6 @@ void Command_url_action::execute() - { - if( command_url().isEmpty()) - return; -- KURIFilterData uri; - QString cmd = command_url(); - static bool sm_ready = false; - if( !sm_ready ) -@@ -124,6 +124,9 @@ void Command_url_action::execute() - kapp->propagateSessionManager(); - sm_ready = true; - } -+ if( substituteAndHandleSpecial( cmd )) -+ return; -+ KURIFilterData uri; - // int space_pos = command_url().find( ' ' ); - // if( command_url()[ 0 ] != '\'' && command_url()[ 0 ] != '"' && space_pos > -1 - // && command_url()[ space_pos - 1 ] != '\\' ) -@@ -176,6 +179,38 @@ void Command_url_action::execute() - timeout.start( 1000, true ); // 1sec timeout - } - -+// do special command substitutions, return true if also already handled -+bool Command_url_action::substituteAndHandleSpecial( QString& cmd ) -+ { -+ if( cmd.contains( "KHOTKEYS_BROWSER" )) -+ { // the default browser -+ KConfig config( QString::fromLatin1("kfmclientrc")); // see KRun -+ config.setGroup("General"); -+ QString browser = config.readEntry("BrowserApplication"); -+ if( browser.startsWith( QString::fromLatin1( "!" ))) -+ browser = browser.mid( 1 ); -+ else -+ { -+ KService::Ptr service = KService::serviceByStorageId( browser ); -+ if( service ) -+ { -+ browser = service->exec(); -+ browser.replace( QRegExp( " %.?" ), "" ); // remove " %u" and others -+ } -+ } -+ if( browser.isEmpty()) -+ browser = QString::fromLatin1( "konqueror" ); // opens in webbrowsing profile by default -+ cmd = cmd.replace( "KHOTKEYS_BROWSER", browser ); -+ } -+ if( cmd.contains( "KHOTKEYS_TERMINAL" )) -+ { // the default terminal application -+ KConfigGroup config( KGlobal::config(), "General" ); -+ QString terminal = config.readPathEntry( "TerminalApplication", "konsole" ); -+ cmd = cmd.replace( "KHOTKEYS_TERMINAL", terminal ); -+ } -+ return false; -+ } -+ - QString Command_url_action::description() const - { - return i18n( "Command/URL : " ) + command_url(); -Index: khotkeys/shared/actions.h -=================================================================== ---- khotkeys/shared/actions.h.orig -+++ khotkeys/shared/actions.h -@@ -75,6 +75,7 @@ class KDE_EXPORT Command_url_action - protected: - QTimer timeout; - private: -+ bool substituteAndHandleSpecial( QString& cmd ); - QString _command_url; - }; - diff --git a/opensuse/tdebase/kicker-defaults.diff b/opensuse/tdebase/kicker-defaults.diff deleted file mode 100644 index a92cae562..000000000 --- a/opensuse/tdebase/kicker-defaults.diff +++ /dev/null @@ -1,57 +0,0 @@ -Index: kcontrol/kcontrol/KControl.desktop -=================================================================== ---- kcontrol/kcontrol/KControl.desktop.orig -+++ kcontrol/kcontrol/KControl.desktop -@@ -7,7 +7,9 @@ Type=Application - DocPath=kcontrol/index.html - X-KDE-StartupNotify=true - --Name=Control Center -+GenericName=Configure Desktop -+GenericName[de]=Desktop-Einstellungen -+Name=Personal Settings - Name[af]=Beheer Sentrum - Name[ar]=مركز التحكم - Name[az]=Ä°darÉ™ MÉ™rkÉ™zi -@@ -93,3 +95,4 @@ Name[zu]=Indawo Yokulawula - - X-DCOP-ServiceType=Unique - Categories=Qt;KDE;Core; -+Keywords=control,center -Index: kicker/libkicker/kickerSettings.kcfg -=================================================================== ---- kicker/libkicker/kickerSettings.kcfg.orig -+++ kicker/libkicker/kickerSettings.kcfg -@@ -159,7 +159,7 @@ - - - -- prefmenu.desktop,systemmenu.desktop -+ recentdocs.desktop,systemmenu.desktop - - - -Index: kicker/menuext/system/systemmenu.desktop -=================================================================== ---- kicker/menuext/system/systemmenu.desktop.orig -+++ kicker/menuext/system/systemmenu.desktop -@@ -1,5 +1,5 @@ - [Desktop Entry] --Name=System Menu -+Name=My System - Name[af]=Stelsel Kieslys - Name[ar]=قائمة النظام - Name[be]=СіÑÑ‚Ñмнае меню -Index: kcontrol/kicker/hidingtab_impl.cpp -=================================================================== ---- kcontrol/kicker/hidingtab_impl.cpp.orig -+++ kcontrol/kicker/hidingtab_impl.cpp -@@ -200,7 +200,7 @@ void HidingTab::defaults() - m_delaySpinBox->setValue( 3 ); - m_autoHideSwitch->setChecked( false ); - m_lHB->setChecked( false ); -- m_rHB->setChecked( true ); -+ m_rHB->setChecked( false ); - m_animateHiding->setChecked( true ); - m_hideSlider->setValue( 10 ); - m_delaySpinBox->setValue( 3 ); diff --git a/opensuse/tdebase/kickerrc b/opensuse/tdebase/kickerrc deleted file mode 100644 index e5d6351a7..000000000 --- a/opensuse/tdebase/kickerrc +++ /dev/null @@ -1,63 +0,0 @@ -[ServiceMenuButton_1] -Label=work/ -RelPath=work/ - -[buttons] -EnableIconZoom=false -EnableTileBackground=false - -[menus] -DetailedMenuEntries=false -ReduceMenuDepth=true -ShowUnimportantEntries=false - -[Applet_1] -DesktopFile=minipagerapplet.desktop -FreeSpace=0.25 - -[Applet_2] -ConfigFile=taskbar_panelappletrc -DesktopFile=taskbarapplet.desktop -FreeSpace=0.25 - -[Applet_3] -ConfigFile=systemtray_panelappletrc -DesktopFile=systemtrayapplet.desktop -FreeSpace=1 - -[Applet_4] -DesktopFile=clockapplet.desktop -FreeSpace=1 - -[General] -Applets=KMenuButton_1,ServiceMenuButton_1,ServiceButton_2,ServiceButton_1,ServiceButton_6,ServiceButton_3,ServiceButton_4,Applet_1,Applet_2,Applet_3,Applet_4 -CustomSize=58 -# this size gets converted to "3" via kconf_update -Size=58 - -[KFileDialog Speedbar] -Speedbar IconSize=32 - -[KMenuButton_1] -FreeSpace=0 - -[ServiceButton_1] -DesktopFile=System/konsole.desktop -FreeSpace=0 - -[ServiceButton_2] -DesktopFile=Home.desktop -FreeSpace=0 - -[ServiceButton_3] -DesktopFile=Internet/konqbrowser.desktop -FreeSpace=0 - -[ServiceButton_4] -DesktopFile=Internet/KMail.desktop -FreeSpace=0 - -[ServiceButton_6] -DesktopFile=Help.desktop -FreeSpace=0 - diff --git a/opensuse/tdebase/kickoff-beagle.diff b/opensuse/tdebase/kickoff-beagle.diff deleted file mode 100644 index a850e78ce..000000000 --- a/opensuse/tdebase/kickoff-beagle.diff +++ /dev/null @@ -1,1329 +0,0 @@ ---- configure.in.in (Revision 0) -+++ configure.in.in (Revision 849791) -@@ -0,0 +1,78 @@ -+dnl Check for pkg-config -+AC_PATH_PROG(PKG_CONFIG, pkg-config, no) -+ -+if test "$PKG_CONFIG" = "no"; then -+ AC_MSG_ERROR([ -+This package requires pkg-config. -+]) -+fi -+ -+dnl Check for Glib-2.0 -+# GLIB_CFLAGS: cflags for compiling glib dependant sources -+# GLIB_LIBADD: glib libraries (-l options) -+# GLIB_LDFLAGS: flags containing path to glib libraries (-L options) -+ -+GLIB_PACKAGES="gmodule-2.0 gthread-2.0" -+GLIB_VERSION="1.3.3" -+AC_MSG_CHECKING(for GLib-2.0 (at least $GLIB_VERSION)) -+ -+if $PKG_CONFIG --atleast-pkgconfig-version 0.15 ; then -+ if $PKG_CONFIG --atleast-version $GLIB_VERSION $GLIB_PACKAGES >/dev/null 2>&1 ; then -+ GLIB_CFLAGS="`$PKG_CONFIG --cflags $GLIB_PACKAGES`" -+ GLIB_LIBADD="`$PKG_CONFIG --libs-only-l --libs-only-other $GLIB_PACKAGES`" -+ GLIB_LDFLAGS="`$PKG_CONFIG --libs-only-L $GLIB_PACKAGES`" -+ AC_MSG_RESULT(yes) -+ fi -+else -+ if $PKG_CONFIG --atleast-version $GLIB_VERSION $GLIB_PACKAGES >/dev/null 2>&1 ; then -+ GLIB_CFLAGS="`$PKG_CONFIG --cflags $GLIB_PACKAGES`" -+ GLIB_LIBADD="`$PKG_CONFIG --libs-only-l $GLIB_PACKAGES`" -+ GLIB_LDFLAGS="`$PKG_CONFIG --libs-only-L $GLIB_PACKAGES`" -+ AC_MSG_RESULT(yes) -+ AC_MSG_WARN([you may need to run make LDFLAGS=-pthread to compile arts]) -+ fi -+fi -+ -+if test -z "$GLIB_LIBADD"; then -+ AC_MSG_RESULT(not installed) -+ DO_NOT_COMPILE="$DO_NOT_COMPILE kerry gmcop" -+fi -+ -+AC_SUBST(GLIB_CFLAGS) -+AC_SUBST(GLIB_LIBADD) -+AC_SUBST(GLIB_LDFLAGS) -+ -+dnl Check for libbeagle 0.2.0 -+# LIBBEAGLE_CFLAGS: cflags for compiling libbeagle dependant sources -+# LIBBEAGLE_LIBADD: libbeagle libraries (-l options) -+# LIBBEAGLE_LDFLAGS: flags containing path to libbeagle libraries (-L options) -+ -+LIBBEAGLE_PACKAGES="libbeagle-0.0" -+LIBBEAGLE_VERSION="0.2.4" -+AC_MSG_CHECKING(for libbeagle-0.2.4 (at least $LIBBEAGLE_VERSION)) -+ -+if $PKG_CONFIG --atleast-pkgconfig-version 0.15 ; then -+ if $PKG_CONFIG --atleast-version $LIBBEAGLE_VERSION $LIBBEAGLE_PACKAGES >/dev/null 2>&1 ; then -+ LIBBEAGLE_CFLAGS="`$PKG_CONFIG --cflags $LIBBEAGLE_PACKAGES`" -+ LIBBEAGLE_LIBADD="`$PKG_CONFIG --libs-only-l --libs-only-other $LIBBEAGLE_PACKAGES`" -+ LIBBEAGLE_LDFLAGS="`$PKG_CONFIG --libs-only-L $LIBBEAGLE_PACKAGES`" -+ AC_MSG_RESULT(yes) -+ fi -+else -+ if $PKG_CONFIG --atleast-version $LIBBEAGLE_VERSION $LIBBEAGLE_PACKAGES >/dev/null 2>&1 ; then -+ LIBBEAGLE_CFLAGS="`$PKG_CONFIG --cflags $LIBBEAGLE_PACKAGES`" -+ LIBBEAGLE_LIBADD="`$PKG_CONFIG --libs-only-l $LIBBEAGLE_PACKAGES`" -+ LIBBEAGLE_LDFLAGS="`$PKG_CONFIG --libs-only-L $LIBBEAGLE_PACKAGES`" -+ AC_MSG_RESULT(yes) -+ AC_MSG_WARN([you may need to run make LDFLAGS=-pthread to compile arts]) -+ fi -+fi -+ -+if test -z "$LIBBEAGLE_LIBADD"; then -+ AC_MSG_RESULT(not installed) -+ DO_NOT_COMPILE="$DO_NOT_COMPILE kerry gmcop" -+fi -+ -+AC_SUBST(LIBBEAGLE_CFLAGS) -+AC_SUBST(LIBBEAGLE_LIBADD) -+AC_SUBST(LIBBEAGLE_LDFLAGS) ---- kicker/plugins/beaglesearch.cpp (Revision 0) -+++ kicker/plugins/beaglesearch.cpp (Revision 849791) -@@ -0,0 +1,362 @@ -+/***************************************************************** -+ -+ Copyright (c) 2006 Debajyoti Bera -+ -+ This program is free software; you can redistribute it and/or -+ modify it under the terms of the GNU General Public -+ License as published by the Free Software Foundation; either -+ version 2 of the License, or (at your option) any later version. -+ -+ This program is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ General Public License for more details. -+ -+ You should have received a copy of the GNU General Public License -+ along with this program; see the file COPYING. If not, write to -+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, -+ Boston, MA 02110-1301, USA. -+ -+******************************************************************/ -+ -+#include "beaglesearch.h" -+ -+#include -+#include -+#include -+#include -+#include -+ -+void beagle_init () -+{ -+ g_type_init (); -+} -+ -+// ---------------- Hit --------------------------- -+ -+Hit::Hit (BeagleHit *_hit) : processed (false) -+{ -+ hit = beagle_hit_ref (_hit); -+} -+ -+Hit::~Hit () -+{ -+ beagle_hit_unref (hit); -+ if (! processed) -+ return; -+ QDictIterator it (property_map); -+ for( ; it.current(); ++it ) -+ ((QStringList *)it.current())->clear (); -+ -+} -+ -+void Hit::processProperties () -+{ -+ processed = true; -+ GSList *prop_list = beagle_hit_get_all_properties (hit); -+ GSList *it; -+ property_map.setAutoDelete (true); -+ for (it = prop_list; it; it = it->next) { -+ BeagleProperty *property = (BeagleProperty *) it->data; -+ QString key = QString::fromUtf8 (beagle_property_get_key (property)); -+ if (! property_map [key]) -+ property_map.insert (key, new QStringList ()); -+ property_map [key]->append (QString::fromUtf8 (beagle_property_get_value (property))); -+ } -+ g_slist_free (prop_list); -+} -+ -+const QString Hit::operator[] (QString prop_name) -+{ -+ if (! processed) -+ processProperties (); -+ -+ QStringList *prop_list = property_map [prop_name]; -+ if (! prop_list) -+ return QString::null; -+ if (prop_list->count () != 1) -+ return QString::null; -+ return (QString)prop_list->first (); -+} -+ -+// ---------------- BeagleSearch ------------------ -+ -+BeagleSearchResult::BeagleSearchResult(int client_id) -+ : client_id (client_id), total (0) -+{ -+ hitlist = new QPtrList; -+ hitlist->setAutoDelete (true); -+} -+ -+ -+BeagleSearchResult::~BeagleSearchResult() -+{ -+ // everything is set to autodelete -+} -+ -+void BeagleSearchResult::addHit(BeagleHit *_hit) -+{ -+ Hit *hit = new Hit (_hit); -+ hitlist->prepend (hit); -+} -+ -+const QPtrList *BeagleSearchResult::getHits () const -+{ -+ return hitlist; -+} -+ -+ -+static int total_hits; -+ -+static void print_feed_item_hit (BeagleHit *hit) -+{ -+ const char *text; -+ -+ if (beagle_hit_get_one_property (hit, "dc:title", &text)) -+ g_print ("Blog: %s\n", text); -+} -+ -+static void print_file_hit (BeagleHit *hit) -+{ -+ g_print ("File: %s, (%s)\n", beagle_hit_get_uri (hit), beagle_hit_get_mime_type (hit)); -+} -+ -+static void print_other_hit (BeagleHit *hit) -+{ -+ const char *text; -+ -+ g_print ("%s (%s)", beagle_hit_get_uri (hit), -+ beagle_hit_get_source (hit)); -+ if (beagle_hit_get_one_property (hit, "dc:title", &text)) -+ g_print ("title = %s\n", text); -+} -+ -+static void print_hit (BeagleHit *hit) -+{ -+ if (strcmp (beagle_hit_get_type (hit), "FeedItem") == 0) { -+ print_feed_item_hit (hit); -+ } -+ else if (strcmp (beagle_hit_get_type (hit), "File") == 0) { -+ print_file_hit (hit); -+ } else { -+ print_other_hit (hit); -+ } -+} -+ -+// ---------------- BeagleSearchClient ------------------ -+ -+void BeagleSearchClient::run () -+{ -+ kdDebug () << "Starting query ..." << endl; -+ -+ QTime query_timer; -+ query_timer.start (); -+ -+ g_signal_connect (query, "hits-added", -+ G_CALLBACK (hitsAddedSlot), -+ this); -+ g_signal_connect (query, "finished", -+ G_CALLBACK (finishedSlot), -+ this); -+ beagle_client_send_request_async (client, -+ BEAGLE_REQUEST (query), -+ NULL); -+ g_main_loop_run (main_loop); -+ kdDebug () << "Finished query ..." << endl; -+ -+ QCustomEvent *ev; -+ if (collate_results) { -+ result->query_msec = query_timer.elapsed (); -+ -+ ev = new QCustomEvent (RESULTFOUND, result); -+ QApplication::postEvent (object, ev); -+ } -+ -+ ev = new QCustomEvent (KILLME, this); -+ QApplication::postEvent (object, ev); -+ -+} -+ -+void BeagleSearchClient::stopClient () -+{ -+ if (finished ()) -+ return; // duh! -+ kdDebug () << "Query thread " << id << " not yet finished ..." << endl; -+ // get ready for suicide -+ client_mutex->lock (); -+ kill_me = true; -+ g_signal_handlers_disconnect_by_func ( -+ query, -+ (void *)hitsAddedSlot, -+ this); -+ g_signal_handlers_disconnect_by_func ( -+ query, -+ (void *)finishedSlot, -+ this); -+ g_main_loop_quit (main_loop); -+ client_mutex->unlock (); -+} -+ -+void BeagleSearchClient::hitsAddedSlot (BeagleQuery *query, -+ BeagleHitsAddedResponse *response, -+ BeagleSearchClient *bsclient) -+{ -+ GSList *hits, *l; -+ gint i; -+ gint nr_hits; -+ -+ // check if we are supposed to be killed -+ bsclient->client_mutex->lock (); -+ if (bsclient->kill_me) { -+ kdDebug () << "Suicide time before processing" << endl; -+ bsclient->client_mutex->unlock (); -+ return; -+ } -+ bsclient->client_mutex->unlock (); -+ -+ hits = beagle_hits_added_response_get_hits (response); -+ -+ nr_hits = g_slist_length (hits); -+ total_hits += nr_hits; -+ g_print ("Found hits (%d) at %ld:\n", nr_hits, time (NULL)); -+ -+ BeagleSearchResult *search_result; -+ if (! bsclient->collate_results) -+ search_result = new BeagleSearchResult (bsclient->id); -+ else -+ search_result = bsclient->result; -+ search_result->total += nr_hits; -+ -+ for (l = hits, i = 1; l; l = l->next, ++i) { -+ //g_print ("[%d] ", i); -+ //print_hit (BEAGLE_HIT (l->data)); -+ //g_print ("\n"); -+ -+ search_result->addHit(BEAGLE_HIT (l->data));//hit); -+ } -+ g_print ("[%ld] hits adding finished \n", time (NULL)); -+ -+ // check if we are supposed to be killed -+ bsclient->client_mutex->lock (); -+ if (bsclient->kill_me) { -+ kdDebug () << "Suicide time before sending ..." << endl; -+ bsclient->client_mutex->unlock (); -+ if (! bsclient->collate_results) -+ delete search_result; -+ return; -+ } -+ bsclient->client_mutex->unlock (); -+ -+ // time to send back results, if user asked so -+ if (bsclient->collate_results) -+ return; -+ QCustomEvent *ev = new QCustomEvent (RESULTFOUND, search_result); -+ g_print ("[%ld] event notified \n", time (NULL)); -+ QApplication::postEvent (bsclient->object, ev); -+} -+ -+void BeagleSearchClient::finishedSlot (BeagleQuery *query, -+ BeagleFinishedResponse *response, -+ BeagleSearchClient *bsclient) -+{ -+ // check if we are supposed to be killed -+ bsclient->client_mutex->lock (); -+ bool should_kill = bsclient->kill_me; -+ QObject* receiver = bsclient->object; -+ bsclient->client_mutex->unlock (); -+ -+ if (should_kill) -+ return; -+ -+ g_main_loop_quit (bsclient->main_loop); -+ -+ if (bsclient->collate_results) -+ return; // if we are collating, everything will be send from a central place -+ if (receiver) { -+ QCustomEvent *ev = new QCustomEvent (SEARCHOVER, bsclient); -+ g_print ("[%ld] query finish notified \n", time (NULL)); -+ QApplication::postEvent (receiver, ev); -+ } -+} -+ -+// ----------------- BeagleUtil ------------------- -+ -+BeagleQuery * -+BeagleUtil::createQueryFromString (QString query_str, -+ QStringList &sources_menu, -+ QStringList &types_menu, -+ int max_hits_per_source) -+{ -+ BeagleQuery *beagle_query = beagle_query_new (); -+ beagle_query_set_max_hits (beagle_query, max_hits_per_source); // this is per source! -+ -+ kdDebug () << "Creating query from \"" << query_str << "\"" << endl; -+ for ( QStringList::Iterator it = sources_menu.begin(); it != sources_menu.end(); ++it ) -+ beagle_query_add_source (beagle_query, g_strdup ((*it).utf8 ())); -+ -+ for ( QStringList::Iterator it = types_menu.begin(); it != types_menu.end(); ++it ) -+ beagle_query_add_hit_type (beagle_query, g_strdup ((*it).utf8 ())); -+ -+ QStringList query_terms; -+ QString start_date, end_date; -+ QStringList words = QStringList::split (' ', query_str, false); -+ for ( QStringList::Iterator it = words.begin(); it != words.end(); ++it ) { -+ QStringList key_value_pair = QStringList::split ('=', *it, false); -+ if (key_value_pair.count () == 1) -+ query_terms += *it; -+ else if (key_value_pair.count () == 2) { -+ QString key = key_value_pair [0].lower (); -+ QString value = key_value_pair [1]; -+ if (key == "mime") -+ beagle_query_add_mime_type (beagle_query, g_strdup (value.utf8 ())); -+ else if (key == "type") -+ beagle_query_add_hit_type (beagle_query, g_strdup (value.utf8 ())); -+ else if (key == "source") -+ beagle_query_add_source (beagle_query, g_strdup (value.utf8 ())); -+ else if (key == "start") -+ start_date = value; -+ else if (key == "end") -+ end_date = value; -+ else -+ query_terms += *it; -+ } else -+ query_terms += *it; -+ } -+ -+ beagle_query_add_text (beagle_query, g_strdup (query_terms.join (" ").utf8 ())); -+ kdDebug () << "Adding query text:" << query_terms.join (" ").utf8 () << endl; -+ -+ if (start_date.isNull () && end_date.isNull ()) -+ return beagle_query; -+ -+ //kdDebug () << "Handling dates ..." << endl; -+ BeagleQueryPartDate * date_part = beagle_query_part_date_new (); -+ if (! start_date.isNull ()) -+ beagle_query_part_date_set_start_date (date_part, timestringToBeagleTimestamp (start_date)); -+ if (! end_date.isNull ()) -+ beagle_query_part_date_set_end_date (date_part, timestringToBeagleTimestamp (end_date)); -+ beagle_query_add_part (beagle_query, BEAGLE_QUERY_PART (date_part)); -+ -+ return beagle_query; -+} -+ -+// timestring format allowed YYYYmmDD -+BeagleTimestamp * -+BeagleUtil::timestringToBeagleTimestamp(QString timestring) -+{ -+ //kdDebug () << "datetime string:" << timestring << endl; -+ // FIXME: error check timestring format -+ if (timestring.isNull () || timestring.stripWhiteSpace () == "" || timestring.length() != 8 ) -+ return beagle_timestamp_new_from_unix_time (QDateTime::currentDateTime ().toTime_t ()); -+ //QDateTime dt = QDateTime::fromString (timestring, Qt::ISODate); -+ struct tm tm_time; -+ time_t timet_time; -+ time (&timet_time); -+ localtime_r (&timet_time, &tm_time); -+ strptime (timestring.ascii(), "%Y%m%d", &tm_time); -+ tm_time.tm_sec = tm_time.tm_min = tm_time.tm_hour = 0; -+ //kdDebug() << asctime (&tm_time) << endl; -+ timet_time = mktime (&tm_time); -+ return beagle_timestamp_new_from_unix_time (timet_time); -+} -+ ---- kicker/plugins/kickoff-beagle-plugin.cpp (Revision 0) -+++ kicker/plugins/kickoff-beagle-plugin.cpp (Revision 849791) -@@ -0,0 +1,499 @@ -+/*************************************************************************** -+ * Copyright (C) 2006 by Stephan Binner * -+ * Copyright (c) 2006 Debajyoti Bera * -+ * * -+ * This program is free software; you can redistribute it and/or modify * -+ * it under the terms of the GNU General Public License as published by * -+ * the Free Software Foundation; either version 2 of the License, or * -+ * (at your option) any later version. * -+ * * -+ * This program is distributed in the hope that it will be useful, * -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of * -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * -+ * GNU General Public License for more details. * -+ * * -+ * You should have received a copy of the GNU General Public License * -+ * along with this program; if not, write to the * -+ * Free Software Foundation, Inc., * -+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * -+ ***************************************************************************/ -+ -+#include "kickoff-beagle-plugin.h" -+ -+#include -+#include -+ -+#include -+#include -+#include -+#include -+ -+QString dc_identifier = "dc:identifier"; -+QString dc_title = "dc:title"; -+QString parent_dc_title = "parent:dc:title"; -+QString exactfilename = "beagle:ExactFilename"; -+QString fixme_name = "fixme:Name"; -+QString beagle_filename = "beagle:Filename"; -+QString fixme_attachment_title = "fixme:attachment_title"; -+QString fixme_hasattachments = "fixme:hasAttachments"; -+QString parent_prefix = "parent:"; -+QString fixme_folder = "fixme:folder"; -+QString fixme_categories = "fixme:Categories"; -+QString fixme_comment = "fixme:Comment"; -+QString fixme_width = "fixme:width"; -+QString fixme_height = "fixme:height"; -+QString fixme_from_address = "fixme:from_address"; -+QString fixme_artist = "fixme:artist"; -+QString fixme_album = "fixme:album"; -+QString dc_source = "dc:source"; -+QString dc_publisher = "dc:publisher"; -+QString digikam_tag = "digikam:Tag"; -+QString fixme_speakingto = "fixme:speakingto"; -+QString fixme_starttime = "fixme:starttime"; -+QString comma_string = ","; -+QString vCard_FN = "vCard:FN"; -+QString vCard_PREFEMAIL = "vCard:PREFEMAIL"; -+QString fixme_uid = "fixme:uid"; -+ -+static CATEGORY getHitCategory (Hit *hit) -+{ -+ QString hittype = hit->getType(); -+ QString hitsource = hit->getSource(); -+ -+ // if hit source is None, dont handle it. Might be anthrax-envelope :) -+ if (hitsource.isNull()) -+ return OTHER; -+ -+ if (hitsource == "documentation") -+ return DOCS; -+ -+ if (hittype == "IMLog") -+ return CHATS; -+ -+ // sure shots -+ if (hittype == "FeedItem") -+ return FEEDS; -+ if (hittype == "WebHistory") -+ return WEBHIST; -+ if (hittype == "MailMessage") -+ return MAILS; -+ if (hittype == "Note") -+ return NOTES; -+ -+ // check for applications -+ if (hittype == "File" && (*hit) ["beagle:FilenameExtension"] == ".desktop") -+ return APPS; -+ -+ // check for music -+ QString hitmimetype = hit->getMimeType(); -+ if (hitsource == "Amarok" -+ || hitmimetype.startsWith ("audio") -+ || hitmimetype == "application/ogg") -+ return MUSIC; // not an exhaustive search -+ -+ // check for images from files -+ if (hitsource == "Files" && hitmimetype.startsWith ("image")) -+ return PICS; -+ -+ if (hitsource == "Files" && hitmimetype.startsWith ("video")) -+ return VIDEOS; -+ -+ if (hitsource == "Files") -+ return FILES; -+ -+ if (hitsource == "KAddressBook") -+ return ACTIONS; -+ -+ return OTHER; -+} -+ -+K_EXPORT_COMPONENT_FACTORY( kickoffsearch_beagle, -+ KGenericFactory( "kickoffsearch_beagle" ) ) -+ -+KickoffBeaglePlugin::KickoffBeaglePlugin(QObject *parent, const char* name, const QStringList&) -+ : KickoffSearch::Plugin(parent, name ), genericTitle( true ) -+{ -+ g_type_init (); -+ current_beagle_client = NULL; -+} -+ -+bool KickoffBeaglePlugin::daemonRunning() -+{ -+ return beagle_util_daemon_is_running(); -+} -+ -+void KickoffBeaglePlugin::query(QString term, bool _genericTitle) -+{ -+ genericTitle = _genericTitle; -+ current_query_str = term; -+ -+ // Beagle search -+ if (current_beagle_client != NULL) { -+ kdDebug () << "Previous client w/id " << current_beagle_client->id << " still running ... ignoring it." << endl; -+ current_beagle_client->stopClient (); -+ } -+ current_beagle_client_id = KApplication::random (); -+ kdDebug () << "Creating client with id:" << current_beagle_client_id << endl; -+ -+ BeagleClient *beagle_client = beagle_client_new (NULL); -+ if (beagle_client == NULL) { -+ kdDebug() << "beagle service not running ..." << endl; -+ return; -+ } -+ -+ QStringList sources, types; -+ BeagleQuery *beagle_query = BeagleUtil::createQueryFromString (term, sources, types, 99); // maximum 99 results, if this doesnt work, blame the stars -+ -+ current_beagle_client = new BeagleSearchClient ( -+ current_beagle_client_id, -+ this, -+ beagle_client, -+ beagle_query, -+ false); -+ current_beagle_client->start(); -+// kdDebug () << "Query dispatched at " << time (NULL) << endl; -+} -+ -+void KickoffBeaglePlugin::cleanClientList () -+{ -+ toclean_list_mutex.lock (); -+ BeagleSearchClient *old_client = toclean_client_list.take (0); -+ if (old_client != NULL) { // failsafe -+ kdDebug () << "Cleanup old client " << old_client->id << endl; -+ delete old_client; -+ } -+ toclean_list_mutex.unlock (); -+} -+ -+void KickoffBeaglePlugin::customEvent (QCustomEvent *e) -+{ -+ if (e->type () == RESULTFOUND) { -+// kdDebug () << "Quick query thread at " << time (NULL) << " with current_id=" << current_beagle_client_id << " finished ..." << endl; -+ BeagleSearchResult *result = (BeagleSearchResult *) e->data (); -+ if (current_beagle_client_id != result->client_id) { -+ kdDebug () << "Stale result from " << result->client_id << endl; -+ delete result; -+ // FIXME: Should I also free e ? -+ } else { -+ kdDebug () << "Good results ...total=" << result->total << endl; -+ showResults (result); -+ } -+ //KPassivePopup::message( "This is the message", this ); -+ } else if (e->type () == SEARCHOVER) { -+ BeagleSearchClient *client = (BeagleSearchClient *) e->data (); -+ if (client == NULL) { -+// kdDebug () << "Query finished event at " << time (NULL) << " but client is already deleted" << endl; -+ return; -+ } -+// kdDebug () << "Query finished event at " << time (NULL) << " for id=" << client->id << endl; -+ if (current_beagle_client_id == client->id) { -+ kickoffSearchInterface()->searchOver(); -+ current_beagle_client = NULL; // important ! -+ } -+ } else if (e->type () == KILLME) { -+ BeagleSearchClient *client = (BeagleSearchClient *) e->data (); -+ if (client->finished ()) -+ delete client; -+ else { -+ // add client to cleanup list -+ toclean_list_mutex.lock (); -+ toclean_client_list.append (client); -+ kdDebug () << "Scheduling client to be deleted in 500ms" << endl; -+ toclean_list_mutex.unlock (); -+ QTimer::singleShot (500, this, SLOT (cleanClientList ())); -+ } -+ } -+} -+ -+// this method decides what to display in the result list -+HitMenuItem *KickoffBeaglePlugin::hitToHitMenuItem (int category, Hit *hit) -+{ -+ QString title, info, mimetype, icon; -+ int score = 0; -+ KURL uri; -+ -+#if 0 -+ kdDebug() << "*** " << hit->getUri() << endl; -+ QDict all = hit->getAllProperties(); -+ QDictIterator it( all ); -+ for( ; it.current(); ++it ) -+ kdDebug() << it.currentKey() << ": " << *(it.current()) << endl; -+#endif -+ -+ switch (category) { -+ case FILES: -+ { -+ uri = hit->getUri (); -+ QString uristr = uri.path (); -+ title = (*hit) [exactfilename]; -+ int last_slash = uristr.findRev ('/', -1); -+ info = i18n("Folder: %1").arg(last_slash == 0 ? "/" -+ : uristr.section ('/', -2, -2)); -+ } -+ break; -+ case ACTIONS: -+ { -+ if (hit->getSource()=="KAddressBook"){ -+ title = i18n("Send Email to %1").arg((*hit)[vCard_FN]); -+ info = (*hit)[vCard_PREFEMAIL]; -+ uri = "mailto:"+(*hit)[vCard_PREFEMAIL]; -+ mimetype = hit->getMimeType (); -+ icon = "mail_new"; -+ -+ HitMenuItem * first_item=new HitMenuItem (title, info, uri, mimetype, 0, category, icon, score); -+ kickoffSearchInterface()->addHitMenuItem(first_item); -+ -+ title =i18n("Open Addressbook at %1").arg((*hit)[vCard_FN]); -+ uri = "kaddressbook:/"+(*hit)[fixme_uid]; -+ icon = "kaddressbook"; -+ } -+ break; -+ } -+ case MAILS: -+ { -+ QString prefix = QString::null; -+ bool is_attachment = ((*hit) [parent_prefix + fixme_hasattachments] == "true"); -+ bool has_parent = (! hit->getParentUri ().isEmpty ()); -+ bool parent_mbox_file = false; -+ if (has_parent) -+ parent_mbox_file = ((*hit) [parent_prefix + fixme_folder] == QString::null); -+ -+ // Logic: -+ // If has_parent == false, everything is normal -+ // If has_parent == true, parent_mbox_file == false, everything is normal, use uri -+ // FIXME: If has_parent == true, parent_mbox_file == true, ??? -+ // If has_parent == true, is_attachment == true, hit is attach and access with prefix "parent:", use parenturi -+ // Else, not attachment (multipart), access with prefix "parent:", use parenturi -+ -+ if (has_parent && !parent_mbox_file) { -+ uri = hit->getParentUri (); -+ prefix = parent_prefix; -+ if (is_attachment) -+ title = (*hit) [fixme_attachment_title]; -+ if (title.isEmpty ()) -+ title = (*hit) [prefix + dc_title]; -+ if (title.isEmpty ()) -+ title = i18n("No subject"); -+ if (is_attachment) -+ title = title.prepend (i18n("(Attachment) ")); -+ info = (i18n("From %1").arg((*hit) [prefix + fixme_from_address])); -+ } else { -+ uri = hit->getUri (); -+ title = (*hit) [dc_title]; -+ info = (i18n("From %1").arg((*hit) [fixme_from_address])); -+ } -+ } -+ mimetype = "message/rfc822"; // to handle attachment results -+ break; -+ case MUSIC: -+ uri = hit->getUri (); -+ title = (*hit) [exactfilename]; -+ { -+ QString artist = (*hit) [fixme_artist]; -+ QString album = (*hit) [fixme_album]; -+ if (! artist.isEmpty ()) -+ info = (i18n("By %1").arg(artist)); -+ else if (! album.isEmpty ()) -+ info = (i18n("From Album %1").arg(album)); -+ else { -+ QString uristr = uri.path (); -+ int last_slash = uristr.findRev ('/', -1); -+ info = i18n("Folder: %1") -+ .arg(last_slash == 0 ? "/" : uristr.section ('/', -2, -2)); -+ } -+ } -+ break; -+ case VIDEOS: -+ uri = hit->getUri (); -+ title = (*hit) [exactfilename]; -+ { -+ QString uristr = uri.path (); -+ int last_slash = uristr.findRev ('/', -1); -+ info = i18n("Folder: %1").arg(last_slash == 0 ? "/" : uristr.section ('/', -2, -2)); -+ } -+ break; -+ case WEBHIST: -+ uri = hit->getUri (); -+ title = (*hit) [dc_title]; -+ title = title.replace(QRegExp("\n")," "); -+ mimetype = "text/html"; -+ if (title.isEmpty () || title.stripWhiteSpace ().isEmpty ()) { -+ title = uri.prettyURL (); -+ } else { -+ info = uri.host () + uri.path (); -+ } -+ break; -+ case FEEDS: -+ { -+ uri = KURL ((*hit) [dc_identifier]); -+ title = (*hit) [dc_title]; -+ mimetype = "text/html"; -+ QString publisher = (*hit) [dc_publisher]; -+ QString source = (*hit) [dc_source]; -+ if (! publisher.isEmpty ()) -+ info = publisher; -+ else if (! source.isEmpty ()) -+ info = source; -+ } -+ break; -+ case PICS: -+ { -+ uri = hit->getUri (); -+ title = (*hit) [exactfilename]; -+ QString width = (*hit) [fixme_width]; -+ QString height = (*hit) [fixme_height]; -+ if (width.isEmpty () || height.isEmpty ()) { -+ QString uristr = uri.path (); -+ int last_slash = uristr.findRev ('/', -1); -+ info = i18n("Folder: %1") -+ .arg(last_slash == 0 ? "/" : uristr.section ('/', -2, -2)); -+ break; -+ } -+ info = (QString (" (%1x%2)").arg (width).arg (height)); -+ const QStringList *tags = hit->getProperties (digikam_tag); -+ if (tags == NULL) -+ break; -+ QString tags_string = tags->join (comma_string); -+ info += (" " + tags_string); -+ } -+ break; -+ case APPS: -+ { -+ uri = hit->getUri (); -+ title = (*hit) [dc_title]; -+ KDesktopFile desktopfile(uri.path(),true); -+ if (genericTitle && !desktopfile.readGenericName().isEmpty()) { -+ title = desktopfile.readGenericName(); -+ info = desktopfile.readName(); -+ } -+ else { -+ title = desktopfile.readName(); -+ info = desktopfile.readGenericName(); -+ } -+ icon = desktopfile.readIcon(); -+ QString input = current_query_str.lower(); -+ QString command = desktopfile.readEntry("Exec"); -+ if (command==input) -+ score = 100; -+ else if (command.find(input)==0) -+ score = 50; -+ else if (command.find(input)!=-1) -+ score = 10; -+ else if (title==input) -+ score = 100; -+ else if (title.find(input)==0) -+ score = 50; -+ else if (title.find(input)!=-1) -+ score = 10; -+ break; -+ } -+ break; -+ case NOTES: -+ { -+ uri = hit->getUri (); -+ title = (*hit) [dc_title]; -+ title = i18n("Title: %1").arg(title.isEmpty() ? i18n("Untitled") : title); -+ -+ if (hit->getSource()=="KNotes") -+ icon="knotes"; -+ else -+ icon="contents2"; -+ } -+ break; -+ case CHATS: -+ { -+ uri = hit->getUri (); -+ title = (*hit) [fixme_speakingto]; -+ title = i18n("Conversation With %1").arg(title.isEmpty() ? i18n("Unknown Person") : title); -+ QDateTime datetime; -+ datetime = datetimeFromString((*hit) [fixme_starttime]); -+ info=i18n("Date: %1").arg(KGlobal::locale()->formatDateTime(datetime,false)); -+ if (hit->getMimeType()=="beagle/x-kopete-log") -+ icon="kopete"; -+ else -+ icon="gaim"; -+ } -+ break; -+ case DOCS: -+ { -+ uri = hit->getUri (); -+ title = (*hit) [dc_title]; -+ if (title.isEmpty () || title.stripWhiteSpace ().isEmpty ()) -+ title = uri.prettyURL (); -+ else { -+ QString uristr = uri.path (); -+ int last_slash = uristr.findRev ('/', -1); -+ info = i18n("Folder: %1").arg(last_slash == 0 ? "/" : uristr.section ('/', -+ -2, -2)); -+ } -+ } -+ break; -+ default: -+ return NULL; -+ } -+ if (mimetype.isEmpty ()) -+ mimetype = hit->getMimeType (); -+ return new HitMenuItem (title, info, uri, mimetype, 0, category, icon, score); -+} -+ -+void KickoffBeaglePlugin::showResults(BeagleSearchResult *result) -+{ -+ if (result->total == 0 ) { -+ // Dont report error from here ... -+ kdDebug() << "No matches found" << endl; -+ delete result; -+ return; -+ } -+ -+ const QPtrList *hits = result->getHits(); -+ if (hits == NULL) { -+ kdDebug () << "Hmm... null" << endl; -+ delete result; -+ return; -+ } -+ kickoffSearchInterface()->initCategoryTitlesUpdate(); -+ -+ QPtrListIterator it (*hits); -+ Hit *hit; -+ for (; (hit = it.current ()) != NULL; ++it) { -+ CATEGORY category = getHitCategory (hit); -+ -+ // if category is not handled, continue -+ if (category == OTHER) -+ continue; -+ -+ if ( category == APPS ) { -+ // we need to check if this is useful -+ KService cs( hit->getUri().path() ); -+ if ( cs.noDisplay() ) -+ continue; -+ } -+ -+ if (!kickoffSearchInterface()->anotherHitMenuItemAllowed(category)) -+ continue; -+ -+ HitMenuItem *hit_item = hitToHitMenuItem (category, hit); -+ -+ if (!hit_item) -+ continue; -+ -+ kickoffSearchInterface()->addHitMenuItem(hit_item); -+ } -+ -+ kickoffSearchInterface()->updateCategoryTitles(); -+ -+ delete result; -+} -+ -+QDateTime KickoffBeaglePlugin::datetimeFromString( const QString& s) -+{ -+ int year( s.mid( 0, 4 ).toInt() ); -+ int month( s.mid( 4, 2 ).toInt() ); -+ int day( s.mid( 6, 2 ).toInt() ); -+ int hour( s.mid( 8, 2 ).toInt() ); -+ int min( s.mid( 10, 2 ).toInt() ); -+ int sec( s.mid( 12, 2 ).toInt() ); -+ return QDateTime(QDate(year,month,day),QTime(hour,min,sec)); -+} -+ -+#include "kickoff-beagle-plugin.moc" ---- kicker/plugins/Makefile.am (Revision 0) -+++ kicker/plugins/Makefile.am (Revision 849791) -@@ -0,0 +1,24 @@ -+INCLUDES = -I$(top_srcdir)/interfaces $(all_includes) $(LIBBEAGLE_CFLAGS) $(GLIB_CFLAGS) -+METASOURCES = AUTO -+ -+# Install this plugin in the KDE modules directory -+kde_module_LTLIBRARIES = kickoffsearch_beagle.la -+ -+# Srcs for the plugin -+kickoffsearch_beagle_la_SOURCES = kickoff-beagle-plugin.cpp beaglesearch.cpp -+ -+# Libs needed by the plugin -+kickoffsearch_beagle_la_LIBADD = $(LIB_KPARTS) ../interfaces/libkickoffsearch_interfaces.la \ -+ $(LIBBEAGLE_LIBADD) $(GLIB_LIBADD) -+ -+# LD flags for the plugin -+# -module says: this is a module, i.e. something you're going to dlopen -+# so e.g. it has no version number like a normal shared lib would have. -+kickoffsearch_beagle_la_LDFLAGS = -module $(KDE_PLUGIN) $(all_libraries) -+ -+# Install the desktop file needed to detect the plugin -+kde_services_DATA = kickoffsearch_beagle.desktop -+ -+# i18n translation messages -+messages: rc.cpp -+ $(XGETTEXT) *.cpp *.h -o $(podir)/kickoffsearch_beagle.pot ---- kicker/plugins/kickoffsearch_beagle.desktop (Revision 0) -+++ kicker/plugins/kickoffsearch_beagle.desktop (Revision 849791) -@@ -0,0 +1,6 @@ -+[Desktop Entry] -+Name=Beagle Search -+Comment=Beagle search plugin for Kickoff search -+ServiceTypes=KickoffSearch/Plugin -+Type=Service -+X-KDE-Library=kickoffsearch_beagle ---- kicker/plugins/beaglesearch.h (Revision 0) -+++ kicker/plugins/beaglesearch.h (Revision 849791) -@@ -0,0 +1,234 @@ -+/***************************************************************** -+ -+ Copyright (c) 2006 Debajyoti Bera -+ -+ This program is free software; you can redistribute it and/or -+ modify it under the terms of the GNU General Public -+ License as published by the Free Software Foundation; either -+ version 2 of the License, or (at your option) any later version. -+ -+ This program is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ General Public License for more details. -+ -+ You should have received a copy of the GNU General Public License -+ along with this program; see the file COPYING. If not, write to -+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, -+ Boston, MA 02110-1301, USA. -+ -+******************************************************************/ -+ -+#ifndef BEAGLESEARCH_H -+#define BEAGLESEARCH_H -+ -+#include -+#include -+#include -+#include -+#include -+ -+#include -+#include -+ -+extern "C" { -+#include -+#include -+} -+ -+// BeagleSearchClient sends 3 types of events -+// when results are to be sent as they arrive, -+// - RESULTFOUND : when result is found -+// - SEARCHOVER : when search is over -+// - KILLME : just before thread finishes - used to cleanup the thread object -+// when results are to be sent after receiving all of them -+// - RESULTFOUND : when all results are obtained -+// - KILLME : just before thread finishes - used to cleanup the thread object -+#define RESULTFOUND (QEvent::Type)1001 /* QEvent::User + 1 */ -+#define SEARCHOVER (QEvent::Type)1002 /* QEvent::User + 2 */ -+#define KILLME (QEvent::Type)1003 /* QEvent::User + 3 */ -+ -+class QStringList; -+ -+// IMPORTANT: Call this before any beagle calls -+void beagle_init (); -+ -+class Hit { -+public: -+ Hit (BeagleHit *_hit); -+ ~Hit (); -+ -+ // convenience wrappers -+ // remember that the hit values are utf8 strings -+ const KURL getUri () const { return KURL (QString::fromUtf8 (beagle_hit_get_uri (hit)));} -+ const QString getType () const { return QString::fromUtf8 (beagle_hit_get_type (hit));} -+ const QString getMimeType () const { return QString::fromUtf8 (beagle_hit_get_mime_type (hit));} -+ const QString getSource () const { return QString::fromUtf8 (beagle_hit_get_source (hit));} -+ const KURL getParentUri () const { return KURL (QString::fromUtf8 (beagle_hit_get_parent_uri (hit)));} -+ const QDict& getAllProperties () -+ { -+ if (! processed) -+ processProperties (); -+ return property_map; -+ } -+ const QStringList* getProperties (QString prop_name) -+ { -+ if (! processed) -+ processProperties (); -+ return property_map [prop_name]; -+ } -+ const QString operator[] (QString prop_name); -+ -+private: -+ BeagleHit *hit; -+ QDict property_map; -+ // not every hit may be used. so, do a lazy processing of property_map -+ bool processed; -+ void processProperties (); -+}; -+ -+class BeagleSearchResult{ -+public: -+ BeagleSearchResult(int client_id); -+ ~BeagleSearchResult(); -+ void addHit (BeagleHit *hit); -+ QString getHitCategory (Hit *hit); -+ -+ // id of the bsclient -+ int client_id; -+ // time taken to finish query -+ int query_msec; -+ // total number of results in this query -+ int total; -+ -+ const QPtrList *getHits () const; -+ -+private: -+ // lists of hits -+ QPtrList *hitlist; -+}; -+ -+// caller should delete bsclient->result and bsclient -+class BeagleSearchClient : public QThread { -+public: -+ // passing NULL for client makes bsclient create client itself and -+ // delete it later -+ BeagleSearchClient (int id, -+ QObject *y, -+ BeagleClient *client, -+ BeagleQuery *query, -+ bool collate_results) -+ : id (id), kill_me (false), object (y), client (client), -+ query (query), destroy_client (false), collate_results (collate_results) -+ { -+ if (client == NULL) { -+ client = beagle_client_new (NULL); -+ destroy_client = true; -+ } -+ -+// if (client == NULL) -+// throw -1; -+ -+ main_loop = g_main_loop_new (NULL, FALSE); -+ if (collate_results) -+ result = new BeagleSearchResult (id); -+ -+ client_mutex = new QMutex (); -+ } -+ -+ // It is never safe to delete BeagleSearchClient directly, the thread might still be running -+ ~BeagleSearchClient () -+ { -+ if (! finished ()) { -+ kdDebug () << "Thread " << id << " still running. Waiting.........." << endl; -+ wait (); -+ } -+ -+ if (destroy_client) -+ g_object_unref (client); -+ g_main_loop_unref (main_loop); -+ g_object_unref (query); -+ kdDebug() << "Deleting client ..." << id << endl; -+ delete client_mutex; -+ } -+ -+private: -+ static void hitsAddedSlot (BeagleQuery *query, -+ BeagleHitsAddedResponse *response, -+ BeagleSearchClient *bsclient); -+ -+ static void finishedSlot (BeagleQuery *query, -+ BeagleFinishedResponse *response, -+ BeagleSearchClient *bsclient); -+ -+public: -+ // run() starts the query and sends the result as follows: -+ // - either wait till get back all results and send it as RESULTFOUND -+ // - or, send results as it gets them as RESULTFOUND and -+ // send SEARCHOVER when finished -+ // collate_results controls the behaviour -+ virtual void run ( ); -+ -+ // after stopClient() is called, application can safely go and remove previous menu entries -+ // - i.e. after stopClient is called, app doesnt except the eventhandler to receive any results -+ // - use client_id to determine which is the current client, set it right after stopclient -+ // - Eventhandler checks client id, if it is current, it adds stuff to the menu -+ // else, it discards everything -+ // Once eventhandler is being processed, doQuery() wont be called and vice versa -+ // so no need to serialize eventhandler and doquery -+ // -+ // stopClient needs to make sure that once it is called, the thread is finished asap. Use a mutex -+ // to serialize actions. callbacks need to use mutex too. -+ // stopclient has to remove signal handlers to prevent further signal calls, set kill_me flag -+ // and quite main loop -+ // stopClient can be called at the following times: -+ // - Waiting for the first result: -+ // nothing extra -+ // - in hitsAddedSlot, processing results -+ // in callback, before processing, if killme is set, just return. -+ // - in hitsAddedSlot, after sending results -+ // before sending, if killme is set, dont send results -+ // (doing it twice in hitsAdded because forming BeagleSearchResult can take time) -+ // - Waiting for more results -+ // nothing extra -+ // - in finishedSlot, before sending finishedMsg -+ // if killme is set, just return -+ // - in finishedSlot, after sending finishedMsg -+ // if killme is set, just return -+ // in Run(), when return from mainloop, if killme is set, dont do anything more but call delete this -+ void stopClient (); -+ -+ // id of the client -+ // this is required in case applications fires many clients in rapid succession -+ int id; -+ -+ GMainLoop * main_loop; -+ BeagleSearchResult *result; -+ -+ // this is set if the client is obsolete now i.e. -+ // the application doesnt need the results from the client anymore -+ bool kill_me; -+private: -+ // the application; need this to send events to the application -+ QObject *object; -+ // mutex to control setting the kill_me shared variable -+ QMutex *client_mutex; -+ BeagleClient *client; -+ BeagleQuery *query; -+ // should the client be destroyed by the client -+ // if the client created it, then most probably it should -+ bool destroy_client; -+ bool collate_results; -+}; -+ -+class BeagleUtil { -+public: -+ -+ static BeagleQuery *createQueryFromString (QString query_str, -+ QStringList &sources, -+ QStringList &types, -+ int max_hits_per_source = 100); -+ static BeagleTimestamp *timestringToBeagleTimestamp (QString timestring); -+}; -+ -+#endif ---- kicker/plugins/kickoff-beagle-plugin.h (Revision 0) -+++ kicker/plugins/kickoff-beagle-plugin.h (Revision 849791) -@@ -0,0 +1,64 @@ -+/*************************************************************************** -+ * Copyright (C) 2006 by Stephan Binner * -+ * Copyright (c) 2006 Debajyoti Bera * -+ * * -+ * This program is free software; you can redistribute it and/or modify * -+ * it under the terms of the GNU General Public License as published by * -+ * the Free Software Foundation; either version 2 of the License, or * -+ * (at your option) any later version. * -+ * * -+ * This program is distributed in the hope that it will be useful, * -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of * -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * -+ * GNU General Public License for more details. * -+ * * -+ * You should have received a copy of the GNU General Public License * -+ * along with this program; if not, write to the * -+ * Free Software Foundation, Inc., * -+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * -+ ***************************************************************************/ -+ -+#ifndef CAPITALIZEPLUGIN_H -+#define CAPITALIZEPLUGIN_H -+ -+#include "../interfaces/kickoff-search-plugin.h" -+#include "beaglesearch.h" -+ -+class KickoffBeaglePlugin :public KickoffSearch::Plugin -+{ -+ Q_OBJECT -+ -+public: -+ KickoffBeaglePlugin(QObject *parent, const char* name, const QStringList&); -+ -+ void query(QString, bool); -+ bool daemonRunning(); -+ -+protected slots: -+ // to clean beaglesearchclients -+ void cleanClientList (); -+ -+private: -+ QString current_query_str; -+ -+ // all beagle activity is done through the BSC object -+ BeagleSearchClient *current_beagle_client; -+ -+ // used to send notification from the beagle thread to the main event loop -+ virtual void customEvent (QCustomEvent *e); -+ -+ QPtrList toclean_client_list; -+ QMutex toclean_list_mutex; -+ -+ // show the results -+ void showResults (BeagleSearchResult *); -+ HitMenuItem *hitToHitMenuItem (int category, Hit *hit); -+ -+ // use a different id for each bsc client, and use that to separate stale responses from current ones -+ int current_beagle_client_id; -+ -+ bool genericTitle; -+ QDateTime datetimeFromString( const QString& ); -+}; -+ -+#endif /* CAPITALIZEPLUGIN_H */ - -Eigenschaftsänderungen: kicker/plugins -___________________________________________________________________ -Hinzugefügt: svn:ignore - + .deps -kickoffsearch_beagle.la -.libs -Makefile -Makefile.in -*.moc - - ---- kicker/Makefile.am 2010/08/10 08:10:21 1.1 -+++ kicker/Makefile.am 2010/08/10 08:10:33 -@@ -1,6 +1,6 @@ - INCLUDES = $(all_includes) - --SUBDIRS = core ui buttons interfaces . -+SUBDIRS = core ui buttons interfaces plugins . - - bin_PROGRAMS = - lib_LTLIBRARIES = ---- kicker/core/Makefile.am 2010/08/10 08:15:06 1.2 -+++ kicker/core/Makefile.am 2010/08/10 08:17:08 -@@ -1,6 +1,6 @@ - INCLUDES = -I$(srcdir)/../../libkicker -I../../libkicker \ - -I../ui -I$(srcdir)/../ui -I$(srcdir)/../buttons -I$(top_srcdir)/libkonq \ -- $(all_includes) -+ $(all_includes) $(LIBBEAGLE_CFLAGS) $(GLIB_CFLAGS) - - noinst_LTLIBRARIES = libkicker_core.la - ---- kicker/buttons/Makefile.am 2010/08/10 08:16:06 1.1 -+++ kicker/buttons/Makefile.am 2010/08/10 08:16:28 -@@ -1,5 +1,5 @@ - INCLUDES = -I$(srcdir)/../core -I$(srcdir)/../../libkicker -I../../libkicker \ -- -I../ui -I$(srcdir)/../ui -I$(top_srcdir)/libkonq $(all_includes) -+ -I../ui -I$(srcdir)/../ui -I$(top_srcdir)/libkonq $(all_includes) $(LIBBEAGLE_CFLAGS) $(GLIB_CFLAGS) - - noinst_LTLIBRARIES = libkicker_buttons.la - diff --git a/opensuse/tdebase/kickoff-data.tar.bz2 b/opensuse/tdebase/kickoff-data.tar.bz2 deleted file mode 100644 index 9841a0aa0..000000000 Binary files a/opensuse/tdebase/kickoff-data.tar.bz2 and /dev/null differ diff --git a/opensuse/tdebase/kickoff-install-software.diff b/opensuse/tdebase/kickoff-install-software.diff deleted file mode 100644 index f053a45fb..000000000 --- a/opensuse/tdebase/kickoff-install-software.diff +++ /dev/null @@ -1,25 +0,0 @@ ---- kicker/kicker/ui/k_new_mnu.cpp 2007/08/08 15:14:50 1.141 -+++ kicker/kicker/ui/k_new_mnu.cpp 2007/08/08 15:39:58 -@@ -1345,6 +1345,9 @@ - KService::Ptr p = KService::serviceByStorageId("/usr/share/applications/YaST.desktop"); - m_systemView->insertMenuItem(p, nId++, index++); - -+ p = KService::serviceByStorageId("/usr/share/applications/package-manager.desktop"); -+ m_systemView->insertMenuItem(p, nId++, index++); -+ - m_systemView->insertItem( "info", i18n( "System Information" ), - "sysinfo:/", "sysinfo:/", nId++, index++ ); - ---- kicker/kicker/ui/itemview.cpp 2007/08/08 15:14:50 1.141 -+++ kicker/kicker/ui/itemview.cpp 2007/08/08 15:59:35 -@@ -139,7 +139,9 @@ - void KMenuItem::setIcon(const QString& icon, int size) - { - m_icon = icon; -- QListViewItem::setPixmap(0, KGlobal::iconLoader()->loadIcon(icon, KIcon::Panel, size )); -+ QPixmap pixmap = KGlobal::iconLoader()->loadIcon(icon, KIcon::Panel, size, KIcon::DefaultState, 0L, true); -+ if (!pixmap.isNull()) -+ QListViewItem::setPixmap(0, pixmap); - } - - void KMenuItem::setHasChildren( bool flag ) diff --git a/opensuse/tdebase/kickoff-kcm.diff b/opensuse/tdebase/kickoff-kcm.diff deleted file mode 100644 index 1dd87afde..000000000 --- a/opensuse/tdebase/kickoff-kcm.diff +++ /dev/null @@ -1,217 +0,0 @@ ---- menutab_impl.h (revision 755866) -+++ menutab_impl.h (revision 774645) -@@ -62,6 +62,7 @@ signals: - - public slots: - void launchMenuEditor(); -+ void menuStyleChanged(); - - protected: - kSubMenuItem *m_bookmarkMenu; ---- kicker_config_hiding.desktop (revision 755866) -+++ kicker_config_hiding.desktop (revision 774645) -@@ -146,7 +146,7 @@ Keywords[csb]=kicker,panel,kpanel,lëstà - Keywords[cy]=ciciwr,kicker,panel,kpanel,bar tasgau,bar cychwyn,bar lansio,lleoliad,maint,awto-guddio,hunan-guddio,cuddio,botymau,animeiddiad,cefndir,themâu,storfa dewislen, storfa,cache,celc,cudd,K-Menu,nodau tudalen,dogfenni diweddar,porydd cyflym,dewislen porydd,dewislen,eiconau,teiliau,rhaglenigion,ymcychwyn,amlygu,carnau,eiconau chwyddo - Keywords[da]=kicker,panel,kpanel,opgavelinje,startlinje,sted,størrelse,autogem,gem,knapper,animering,baggrund,temaer,menucache,cache,skjult,K-Menu,bogmærker,nylige dokumenter,hurtigsøger,søgemenu,menu,ikoner,fliser,panelprogrammer,opstart,markér,hÃ¥ndterer,ikoner - Keywords[de]=Kicker,Panel,Taskbar,Kontrollleiste,Startleiste,Klickstartleiste,Fensterleiste,Autom. ausblenden,Ausblenden, Knöpfe,Animation,Hintergründe,Stile,Design,Themes,Menü-Zwischenspeicher, K-Menü,Zwischenspeicher,Lesezeichen,Zuletzt geöffnete Dateien, Schnellanzeiger,Menüs,Symbole,Icons,Kacheln,Applets,Miniprogramme, Java-Miniprogramme,Hervorhebung,Anfasser,Sicherheitsstufen,Zoom für Symbole --Keywords[el]=kicker,πίνακας,kpanel,γÏαμμή εÏγασιών,γÏαμμή έναÏξης,γÏαμμή εκκίνησης,τοποθεσία,μέγεθος,αυτόματη απόκÏυψη,απόκÏυψη,κουμπιά,εφέ κίνησης,φόντο,θέματα,λανθάνουσα μνήμη μενοÏ,λανθάνουσα μνήμη,κÏυφό, K-ΜενοÏ,σελιδοδείκτες,Ï€Ïόσφατα έγγÏαφα,γÏήγοÏος εξεÏευνητής,Î¼ÎµÎ½Î¿Ï ÎµÎ¾ÎµÏευνητή,μενοÏ,εικονίδια,tiles,μικÏοεφαÏμογές,έναÏξη,τονισμός,χειÏιστήÏια, μεγέθυνση εικονιδίων -+Keywords[el]=kicker,πίνακας,kpanel,γÏαμμή εÏγασιών,γÏαμμή έναÏξης,γÏαμμή εκκίνησης,τοποθεσία,μέγεθος,αυτόματη απόκÏυψη,απόκÏυψη,κουμπιά,εφέ κίνησης,φόντο,θέματα,λανθάνουσα μνήμη μενοÏ,λανθάνουσα μνήμη,κÏυφό, K-ΜενοÏ,σελιδοδείκτες,Ï€Ïόσφατα έγγÏαφα,γÏήγοÏος εξεÏευνητής,Î¼ÎµÎ½Î¿Ï ÎµÎ¾ÎµÏευνητή,μενοÏ,εικονίδια,tiles,εφαÏμογίδια,έναÏξη,τονισμός,χειÏιστήÏια, μεγέθυνση εικονιδίων - Keywords[eo]=lanĉilo,panelo,tasklistelo,situo,grandeco,aÅ­tokaÅo,kaÅo,butono,fono,etoso,menubufro,K-Menuo,legosigno,lasta dokumento,rapidrigardilo,rigardmenuo,piktogramo,kahelo,aplikaĵo,lanĉo,emfazo,teniloj,pligrandigo,fidindaj aplikaĵetoj,sekurecnivelo - Keywords[es]=kicker,panel,kpanel,barra de tareas,barra de inicio,barra de lanzamiento,dirección,tamaño,auto ocultar,ocultar,botones,animación,fondo,temas,caché de menú,caché,oculto,Menú K,marcadores,documentos recientes,navegador rápido,menú navegador,menú,iconos,mosaicos,miniaplicaciones,arranque,resaltado,asas,iconos ampliados - Keywords[et]=kicker,paneel,kpanel,tegumiriba,käivitusriba,asukoht,suurus,terminal,automaatne peitmine,peitmine,nupud,animatsioon,taust,teemad,menüü vahemälu,vahemälu,peidetud,K-menüü,järjehoidjad,viimati kasutatud dokumendid, kiirbrauser,lehitsemise menüü,menüü,ikoonid,apletid,käivitamine,esiletõstmine,piirded,ikoonide suurendamine,usaldusväärsed apletid,turvatase ---- menutab_impl.cpp (revision 755866) -+++ menutab_impl.cpp (revision 774645) -@@ -16,12 +16,16 @@ - */ - - #include -+#include - #include - #include - #include - #include - #include -+#include -+#include - -+#include - #include - #include - #include -@@ -123,12 +127,41 @@ void MenuTab::load( bool useDefaults ) - } - } - -+ c->setGroup("General"); -+ m_comboMenuStyle->setCurrentItem( c->readBoolEntry("LegacyKMenu", false) ? 1 : 0 ); -+ m_openOnHover->setChecked( c->readBoolEntry("OpenOnHover", true) ); -+ menuStyleChanged(); -+ -+ connect(m_comboMenuStyle, SIGNAL(activated(int)), SIGNAL(changed())); -+ connect(m_comboMenuStyle, SIGNAL(activated(int)), SLOT(menuStyleChanged())); -+ connect(m_openOnHover, SIGNAL(clicked()), SIGNAL(changed())); -+ - m_showFrequent->setChecked(true); - - if ( useDefaults ) - emit changed(); - } - -+void MenuTab::menuStyleChanged() -+{ -+ if (m_comboMenuStyle->currentItem()==1) { -+ m_openOnHover->setEnabled(false); -+ m_subMenus->setEnabled(true); -+ kcfg_UseSidePixmap->setEnabled(true); -+ kcfg_MenuEntryFormat->setEnabled(true); -+ kcfg_RecentVsOften->setEnabled(true); -+ m_showFrequent->setEnabled(true); -+ } -+ else { -+ m_openOnHover->setEnabled(true); -+ m_subMenus->setEnabled(false); -+ kcfg_UseSidePixmap->setEnabled(false); -+ kcfg_MenuEntryFormat->setEnabled(false); -+ kcfg_RecentVsOften->setEnabled(false); -+ m_showFrequent->setEnabled(false); -+ } -+} -+ - void MenuTab::save() - { - KSharedConfig::Ptr c = KSharedConfig::openConfig(KickerConfig::the()->configName()); -@@ -154,8 +187,17 @@ void MenuTab::save() - } - } - c->writeEntry("Extensions", ext); -+ c->setGroup("General"); - -+ bool kmenusetting = m_comboMenuStyle->currentItem()==1; -+ bool oldkmenusetting = c->readBoolEntry("LegacyKMenu", false); -+ -+ c->writeEntry("LegacyKMenu", kmenusetting); -+ c->writeEntry("OpenOnHover", m_openOnHover->isChecked()); - c->sync(); -+ -+ if (kmenusetting != oldkmenusetting) -+ DCOPRef ("kicker", "default").call("restart()"); - } - - void MenuTab::defaults() ---- menutab.ui (revision 755866) -+++ menutab.ui (revision 774645) -@@ -8,8 +8,8 @@ - - 0 - 0 -- 410 -- 437 -+ 923 -+ 649 - - - -@@ -19,6 +19,59 @@ - - 0 - -+ -+ -+ layout5 -+ -+ -+ -+ unnamed -+ -+ -+ -+ textLabel1 -+ -+ -+ Start menu style: -+ -+ -+ comboMenuStyle -+ -+ -+ -+ -+ -+ SUSE -+ -+ -+ -+ -+ KDE -+ -+ -+ -+ m_comboMenuStyle -+ -+ -+ -+ -+ spacer4 -+ -+ -+ Horizontal -+ -+ -+ Expanding -+ -+ -+ -+ 40 -+ 20 -+ -+ -+ -+ -+ - - - m_kmenuGroup -@@ -38,6 +91,14 @@ - - unnamed - -+ -+ -+ m_openOnHover -+ -+ -+ Open menu on mouse hover -+ -+ - - - kcfg_MenuEntryFormat -@@ -377,6 +438,8 @@ - - - -+ -+ - - m_formatSimple - m_formatNameDesc -@@ -400,8 +463,5 @@ - - klistview.h - knuminput.h -- knuminput.h -- knuminput.h -- knuminput.h - - ---- kicker_config_menus.desktop (revision 755866) -+++ kicker_config_menus.desktop (revision 774645) -@@ -143,7 +143,7 @@ Keywords[csb]=kicker,panel,kpanel,lëstà - Keywords[cy]=ciciwr,kicker,panel,kpanel,bar tasgau,bar cychwyn,bar lansio,lleoliad,maint,awto-guddio,hunan-guddio,cuddio,botymau,animeiddiad,cefndir,themâu,storfa dewislen, storfa,cache,celc,cudd,K-Menu,nodau tudalen,dogfenni diweddar,porydd cyflym,dewislen porydd,dewislen,eiconau,teiliau,rhaglenigion,ymcychwyn,amlygu,carnau,eiconau chwyddo - Keywords[da]=kicker,panel,kpanel,opgavelinje,startlinje,sted,størrelse,autogem,gem,knapper,animering,baggrund,temaer,menucache,cache,skjult,K-Menu,bogmærker,nylige dokumenter,hurtigsøger,søgemenu,menu,ikoner,fliser,panelprogrammer,opstart,markér,hÃ¥ndterer,ikoner - Keywords[de]=Kicker,Panel,Taskbar,Kontrollleiste,Startleiste,Klickstartleiste,Fensterleiste,Autom. ausblenden,Ausblenden, Knöpfe,Animation,Hintergründe,Stile,Design,Themes,Menü-Zwischenspeicher, K-Menü,Zwischenspeicher,Lesezeichen,Zuletzt geöffnete Dateien, Schnellanzeiger,Menüs,Symbole,Icons,Kacheln,Applets,Miniprogramme, Java-Miniprogramme,Hervorhebung,Anfasser,Sicherheitsstufen,Zoom für Symbole --Keywords[el]=kicker,πίνακας,kpanel,γÏαμμή εÏγασιών,γÏαμμή έναÏξης,γÏαμμή εκκίνησης,τοποθεσία,μέγεθος,αυτόματη απόκÏυψη,απόκÏυψη,κουμπιά,εφέ κίνησης,φόντο,θέματα,λανθάνουσα μνήμη μενοÏ,λανθάνουσα μνήμη,κÏυφό, K-ΜενοÏ,σελιδοδείκτες,Ï€Ïόσφατα έγγÏαφα,γÏήγοÏος εξεÏευνητής,Î¼ÎµÎ½Î¿Ï ÎµÎ¾ÎµÏευνητή,μενοÏ,εικονίδια,tiles,μικÏοεφαÏμογές,έναÏξη,τονισμός,χειÏιστήÏια, μεγέθυνση εικονιδίων -+Keywords[el]=kicker,πίνακας,kpanel,γÏαμμή εÏγασιών,γÏαμμή έναÏξης,γÏαμμή εκκίνησης,τοποθεσία,μέγεθος,αυτόματη απόκÏυψη,απόκÏυψη,κουμπιά,εφέ κίνησης,φόντο,θέματα,λανθάνουσα μνήμη μενοÏ,λανθάνουσα μνήμη,κÏυφό, K-ΜενοÏ,σελιδοδείκτες,Ï€Ïόσφατα έγγÏαφα,γÏήγοÏος εξεÏευνητής,Î¼ÎµÎ½Î¿Ï ÎµÎ¾ÎµÏευνητή,μενοÏ,εικονίδια,tiles,εφαÏμογίδια,έναÏξη,τονισμός,χειÏιστήÏια, μεγέθυνση εικονιδίων - Keywords[eo]=lanĉilo,panelo,tasklistelo,situo,grandeco,aÅ­tokaÅo,kaÅo,butono,fono,etoso,menubufro,K-Menuo,legosigno,lasta dokumento,rapidrigardilo,rigardmenuo,piktogramo,kahelo,aplikaĵo,lanĉo,emfazo,teniloj,pligrandigo,fidindaj aplikaĵetoj,sekurecnivelo - Keywords[es]=kicker,panel,kpanel,barra de tareas,barra de inicio,barra de lanzamiento,dirección,tamaño,auto ocultar,ocultar,botones,animación,fondo,temas,caché de menú,caché,oculto,Menú K,marcadores,documentos recientes,navegador rápido,menú navegador,menú,iconos,mosaicos,miniaplicaciones,arranque,resaltado,asas,iconos ampliados - Keywords[et]=kicker,paneel,kpanel,tegumiriba,käivitusriba,asukoht,suurus,terminal,automaatne peitmine,peitmine,nupud,animatsioon,taust,teemad,menüü vahemälu,vahemälu,peidetud,K-menüü,järjehoidjad,viimati kasutatud dokumendid, kiirbrauser,lehitsemise menüü,menüü,ikoonid,apletid,käivitamine,esiletõstmine,piirded,ikoonide suurendamine,usaldusväärsed apletid,turvatase diff --git a/opensuse/tdebase/kickoff.diff b/opensuse/tdebase/kickoff.diff deleted file mode 100644 index e2d73f567..000000000 --- a/opensuse/tdebase/kickoff.diff +++ /dev/null @@ -1,9812 +0,0 @@ ---- taskbar/taskcontainer.cpp (Revision 849788) -+++ taskbar/taskcontainer.cpp (Revision 849791) -@@ -67,7 +67,11 @@ - discardNextMouseEvent(false), - aboutToActivate(false), - m_mouseOver(false), -- m_paintEventCompression(false) -+ animationTimer(0, "TaskContainer::animationTimer"), -+ dragSwitchTimer(0, "TaskContainer::dragSwitchTimer"), -+ attentionTimer(0, "TaskContainer::attentionTimer"), -+ m_paintEventCompression(false), -+ m_paintEventCompressionTimer(0, "TaskContainer::paintEventCompressionTimer") - { - init(); - setAcceptDrops(true); // Always enabled to activate task during drag&drop. -@@ -95,7 +99,11 @@ - discardNextMouseEvent(false), - aboutToActivate(false), - m_mouseOver(false), -- m_paintEventCompression(false) -+ animationTimer(0, "TaskContainer::animationTimer"), -+ dragSwitchTimer(0, "TaskContainer::dragSwitchTimer"), -+ attentionTimer(0, "TaskContainer::attentionTimer"), -+ m_paintEventCompression(false), -+ m_paintEventCompressionTimer(0, "TaskContainer::paintEventCompressionTimer") - { - init(); - setEnabled(false); ---- taskbar/taskbar.cpp 2009/11/20 21:00:26 1.1 -+++ taskbar/taskbar.cpp 2009/11/20 21:00:38 -@@ -59,7 +59,8 @@ - m_showIcon(false), - m_showOnlyIconified(false), - m_textShadowEngine(0), -- m_ignoreUpdates(false) -+ m_ignoreUpdates(false), -+ m_relayoutTimer(0, "TaskBar::m_relayoutTimer") - { - arrowType = LeftArrow; - blocklayout = true; ---- libkicker/panelbutton.h (Revision 849788) -+++ libkicker/panelbutton.h (Revision 849791) -@@ -254,9 +254,11 @@ - /** - * Sets the direction to pop up the contents of the button. - */ -- void setPopupDirection(KPanelApplet::Direction d); -+ virtual void setPopupDirection(KPanelApplet::Direction d); - - protected: -+ -+ void setIconAlignment(AlignmentFlags align); - /** - * Subclasses must implement this to define the name of the button which is - * used to identify this button for saving and loading. It must be unique -@@ -391,6 +393,7 @@ - QPixmap m_iconz; // mouse over - KPanelExtension::Position m_arrowDirection; - KPanelApplet::Direction m_popupDirection; -+ AlignmentFlags m_iconAlignment; - Orientation m_orientation; - int m_size; - double m_fontPercent; -@@ -419,12 +422,12 @@ - * Sets the button's popup menu. - * @param popup the menu to pop up - */ -- void setPopup(QPopupMenu *popup); -+ void setPopup(QWidget *popup); - - /** - * @return the button's popup menu - */ -- QPopupMenu *popup() const; -+ QWidget *popup() const; - - bool eventFilter(QObject *, QEvent *); - virtual void showMenu(); -@@ -459,8 +462,8 @@ - private slots: - void menuAboutToHide(); - --private: -- QPopupMenu *m_popup; -+protected: -+ QWidget *m_popup; - bool m_pressedDuringPopup; - bool m_initialized; - ---- libkicker/kickerSettings.kcfg (Revision 849788) -+++ libkicker/kickerSettings.kcfg (Revision 849791) -@@ -98,6 +98,70 @@ - - - -+ -+ -+ false -+ -+ -+ -+ -+ true -+ -+ -+ -+ -+ true -+ -+ -+ -+ -+ 0 -+ -+ -+ -+ -+ 0 -+ -+ -+ -+ -+ 0 -+ -100 -+ 100 -+ -+ -+ -+ -+ false -+ -+ -+ -+ -+ false -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ LabelAndIcon -+ -+ -+ -+ -+ -+ true -+ -+ -+ - - - -@@ -172,6 +236,19 @@ - false - - -+ -+ -+ -+ -+ -+ -+ false -+ -+ -+ -+ -+ -+ - - - -@@ -337,6 +414,29 @@ - - - -+ -+ -+ -+ -+ -+ -+ -+ 50 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ 2 -+ -+ -+ -+ -+ - - - ---- libkicker/kickertip.cpp (Revision 849788) -+++ libkicker/kickertip.cpp (Revision 849791) -@@ -38,6 +38,7 @@ - - // putting this #include higher results in compile errors - #include -+#include - - static const int DEFAULT_FRAMES_PER_SECOND = 30; - -@@ -71,14 +72,16 @@ - m_dissolveDelta(-1), - m_direction(KPanelApplet::Up), - m_dirty(false), -- m_toolTipsEnabled(KickerSettings::showToolTips()), -- m_tippingFor(0) -+ m_tippingFor(0), -+ m_timer(0, "KickerTip::m_timer"), -+ m_frameTimer(0, "KickerTip::m_frameTimer") - { - setFocusPolicy(NoFocus); - setBackgroundMode(NoBackground); - resize(0, 0); - hide(); - connect(&m_frameTimer, SIGNAL(timeout()), SLOT(internalUpdate())); -+ connect(kapp, SIGNAL(settingsChanged(SettingsCategory)), SLOT(slotSettingsChanged())); - } - - KickerTip::~KickerTip() -@@ -87,6 +90,11 @@ - delete m_mimeFactory; - } - -+void KickerTip::slotSettingsChanged() -+{ -+ QToolTip::setGloballyEnabled(KickerSettings::showToolTips()); -+} -+ - void KickerTip::display() - { - if (!tippingEnabled()) -@@ -192,9 +200,7 @@ - - void KickerTip::mousePressEvent(QMouseEvent * /*e*/) - { -- QToolTip::setGloballyEnabled(m_toolTipsEnabled); - m_timer.stop(); -- m_frameTimer.stop(); - hide(); - } - -@@ -395,8 +401,11 @@ - m_tippingEnabled--; - } - -+ assert(m_tippingEnabled >= -1); -+ - if (m_tippingEnabled < 1 && m_self) - { -+ m_self->m_timer.stop(); - m_self->hide(); - } - } -@@ -411,6 +420,8 @@ - m_tippingFor = 0; - m_frameTimer.stop(); - QWidget::hide(); -+ -+ QToolTip::setGloballyEnabled(KickerSettings::showToolTips()); - } - - bool KickerTip::eventFilter(QObject *object, QEvent *event) -@@ -439,7 +450,6 @@ - !qApp->activePopupWidget() && - !isTippingFor(widget)) - { -- m_toolTipsEnabled = QToolTip::isGloballyEnabled(); - QToolTip::setGloballyEnabled(false); - - tipFor(widget); -@@ -461,8 +471,6 @@ - } - break; - case QEvent::Leave: -- QToolTip::setGloballyEnabled(m_toolTipsEnabled); -- - m_timer.stop(); - - if (isTippingFor(widget) && isVisible()) -@@ -475,9 +483,7 @@ - tipFor(0); - break; - case QEvent::MouseButtonPress: -- QToolTip::setGloballyEnabled(m_toolTipsEnabled); - m_timer.stop(); -- m_frameTimer.stop(); - hide(); - default: - break; ---- libkicker/kickertip.h (Revision 849788) -+++ libkicker/kickertip.h (Revision 849791) -@@ -92,6 +92,7 @@ - void tipperDestroyed(QObject* o); - void internalUpdate(); - void display(); -+ void slotSettingsChanged(); - - private: - QBitmap m_mask; -@@ -108,7 +109,6 @@ - QTimer m_timer; - QTimer m_frameTimer; - bool m_dirty; -- bool m_toolTipsEnabled; - - const QWidget* m_tippingFor; - ---- libkicker/panelbutton.cpp (Revision 849788) -+++ libkicker/panelbutton.cpp (Revision 849791) -@@ -42,6 +42,7 @@ - #include - #include - #include -+#include - - #include "global.h" - -@@ -65,6 +66,7 @@ - m_hasAcceptedDrag(false), - m_arrowDirection(KPanelExtension::Bottom), - m_popupDirection(KPanelApplet::Up), -+ m_iconAlignment(AlignCenter), - m_orientation(Horizontal), - m_size((KIcon::StdSizes)-1), - m_fontPercent(0.40) -@@ -186,6 +188,12 @@ - setArrowDirection(KickerLib::directionToPopupPosition(d)); - } - -+void PanelButton::setIconAlignment(AlignmentFlags align) -+{ -+ m_iconAlignment = align; -+ update(); -+} -+ - void PanelButton::setOrientation(Orientation o) - { - m_orientation = o; -@@ -300,7 +308,9 @@ - - int PanelButton::heightForWidth(int width) const - { -- return preferredDimension(width); -+ int rc=preferredDimension(width); -+ -+ return rc; - } - - const QPixmap& PanelButton::labelIcon() const -@@ -556,11 +566,16 @@ - icon.height() - 2); - } - -+ int y = 0; -+ if (m_iconAlignment & AlignVCenter) -+ y = (height() - icon.height()) / 2; -+ else if (m_iconAlignment & AlignBottom) -+ y = (height() - icon.height()); -+ - if (!m_buttonText.isEmpty() && orientation() == Horizontal) - { - int h = height(); - int w = width(); -- int y = (h - icon.height())/2; - p->save(); - QFont f = font(); - -@@ -629,8 +644,11 @@ - } - else if (!icon.isNull()) - { -- int y = (height() - icon.height()) / 2; -- int x = (width() - icon.width()) / 2; -+ int x = 0; -+ if (m_iconAlignment & AlignHCenter) -+ x = (width() - icon.width()) / 2; -+ else if (m_iconAlignment & AlignRight) -+ x = (width() - icon.width()); - p->drawPixmap(x, y, icon); - } - -@@ -792,7 +810,19 @@ - QString nm = m_iconName; - KIcon::States defaultState = isEnabled() ? KIcon::DefaultState : - KIcon::DisabledState; -- m_icon = ldr->loadIcon(nm, KIcon::Panel, m_size, defaultState, 0L, true); -+ if (nm=="kmenu-suse") -+ { -+ QString pth = locate( "data", "kicker/pics/kmenu_basic.mng" ); -+ if (!pth.isEmpty()) -+ { -+ m_icon = QImage(pth); -+ m_iconh = QPixmap(m_icon); -+ m_iconz = QPixmap(m_icon); -+ return; -+ } -+ } -+ else -+ m_icon = ldr->loadIcon(nm, KIcon::Panel, m_size, defaultState, 0L, true); - - if (m_icon.isNull()) - { -@@ -857,7 +887,7 @@ - connect(this, SIGNAL(pressed()), SLOT(slotExecMenu())); - } - --void PanelPopupButton::setPopup(QPopupMenu *popup) -+void PanelPopupButton::setPopup(QWidget *popup) - { - if (m_popup) - { -@@ -875,7 +905,7 @@ - } - } - --QPopupMenu *PanelPopupButton::popup() const -+QWidget *PanelPopupButton::popup() const - { - return m_popup; - } -@@ -954,7 +984,9 @@ - } - - m_popup->adjustSize(); -- m_popup->exec(KickerLib::popupPosition(popupDirection(), m_popup, this)); -+ if(dynamic_cast(m_popup)) -+ static_cast(m_popup)->exec(KickerLib::popupPosition(popupDirection(), m_popup, this)); -+ // else.. hmm. some derived class has to fix it. - } - - void PanelPopupButton::menuAboutToHide() -@@ -964,8 +996,10 @@ - return; - } - -- setDown(false); -- KickerTip::enableTipping(true); -+ if (isDown()) { -+ setDown(false); -+ KickerTip::enableTipping(true); -+ } - } - - void PanelPopupButton::triggerDrag() -@@ -983,3 +1017,5 @@ - m_initialized = initialized; - } - -+ -+ ---- extensions/kasbar/kasbar.cpp (Revision 849788) -+++ extensions/kasbar/kasbar.cpp (Revision 849791) -@@ -719,7 +719,7 @@ - i->setText( "Animated" ); - i->setIcon( KGlobal::iconLoader()->loadIcon( "icons", KIcon::NoGroup, KIcon::SizeMedium ) ); - i->setAnimation( resources()->startupAnimation() ); -- QTimer *aniTimer = new QTimer( i ); -+ QTimer *aniTimer = new QTimer( i, "aniTimer" ); - connect( aniTimer, SIGNAL( timeout() ), i, SLOT( advanceAnimation() ) ); - aniTimer->start( 100 ); - i->setShowAnimation( true ); ---- extensions/kasbar/kasclockitem.cpp (Revision 849788) -+++ extensions/kasbar/kasclockitem.cpp (Revision 849791) -@@ -38,7 +38,7 @@ - { - setCustomPopup( true ); - -- QTimer *t = new QTimer( this ); -+ QTimer *t = new QTimer( this, "t" ); - connect( t, SIGNAL( timeout() ), SLOT( updateTime() ) ); - t->start( 1000 ); - ---- extensions/kasbar/kasstartupitem.cpp (Revision 849788) -+++ extensions/kasbar/kasstartupitem.cpp (Revision 849791) -@@ -79,7 +79,7 @@ - setShowFrame( false ); - setAnimation( resources()->startupAnimation() ); - -- aniTimer = new QTimer( this ); -+ aniTimer = new QTimer( this, "aniTimer" ); - connect( aniTimer, SIGNAL( timeout() ), SLOT( aniTimerFired() ) ); - aniTimer->start( 100 ); - } ---- extensions/kasbar/kasloaditem.cpp (Revision 849788) -+++ extensions/kasbar/kasloaditem.cpp (Revision 849791) -@@ -33,7 +33,7 @@ - KasLoadItem::KasLoadItem( KasBar *parent ) - : KasItem( parent ) - { -- QTimer *t = new QTimer( this ); -+ QTimer *t = new QTimer( this, "KasLoadItem::t" ); - connect( t, SIGNAL( timeout() ), SLOT( updateDisplay() ) ); - t->start( 1000 ); - updateDisplay(); ---- kicker/interfaces/kickoff-search-plugin.h (Revision 0) -+++ kicker/interfaces/kickoff-search-plugin.h (Revision 849791) -@@ -0,0 +1,106 @@ -+/*************************************************************************** -+ * Copyright (C) 2006 by Stephan Binner * -+ * Copyright (c) 2006 Debajyoti Bera * -+ * * -+ * This program is free software; you can redistribute it and/or modify * -+ * it under the terms of the GNU General Public License as published by * -+ * the Free Software Foundation; either version 2 of the License, or * -+ * (at your option) any later version. * -+ * * -+ * This program is distributed in the hope that it will be useful, * -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of * -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * -+ * GNU General Public License for more details. * -+ * * -+ * You should have received a copy of the GNU General Public License * -+ * along with this program; if not, write to the * -+ * Free Software Foundation, Inc., * -+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * -+ ***************************************************************************/ -+ -+#ifndef KICKOFF_SEARCH_PLUGIN_H -+#define KICKOFF_SEARCH_PLUGIN_H -+ -+#include "kickoffsearchinterface.h" -+ -+#include -+#include -+#include -+ -+typedef enum { -+ ACTIONS = 0, -+ APPS, -+ BOOKMARKS, -+ NOTES, -+ MAILS, -+ FILES, -+ MUSIC, -+ WEBHIST, -+ CHATS, -+ FEEDS, -+ PICS, -+ VIDEOS, -+ DOCS, -+ OTHER, -+ num_categories -+} CATEGORY; -+ -+class HitMenuItem -+{ -+public: -+ HitMenuItem (int id, int category) -+ : id (id), category (category),score(0) { } /* dummy */ -+ HitMenuItem (QString name, QString info, KURL uri, QString mimetype, int id, int category, QString icon=QString::null, int score = 0) -+ : display_name (name) -+ , display_info (info) -+ , uri (uri) -+ , mimetype (mimetype) -+ , id (id) -+ , category (category) -+ , icon (icon) -+ , score (score) -+ , service (NULL) { } -+ -+ ~HitMenuItem () { } -+ -+ bool operator< (HitMenuItem item) -+ { -+ return ((category == item.category && score > item.score) || (category == item.category && id < item.id) || -+ (category < item.category)); -+ } -+ -+ // FIXME: We dont really need to store display_name and display_info -+ QString display_name; // name to display -+ QString display_info; // other information to display -+ KURL uri; // uri to open when clicked -+ QString mimetype; -+ int id; // id of the item in the menu -+ int category; -+ QString icon; -+ int score; -+ KService::Ptr service; -+ -+ QString quotedPath () const -+ { -+ return uri.path ().replace ('"', "\\\""); -+ } -+}; -+ -+namespace KickoffSearch { -+ -+ class Plugin : public QObject -+ { -+ Q_OBJECT -+ -+ public: -+ Plugin(QObject *parent, const char* name=0); -+ virtual ~Plugin(); -+ -+ virtual bool daemonRunning()=0; -+ virtual void query(QString,bool)=0; -+ -+ KickoffSearchInterface * kickoffSearchInterface(); -+ }; -+}; -+ -+#endif /* KICKOFF_SEARCH_PLUGIN_H */ ---- kicker/interfaces/kickoffsearchinterface.cpp (Revision 0) -+++ kicker/interfaces/kickoffsearchinterface.cpp (Revision 849791) -@@ -0,0 +1,27 @@ -+/*************************************************************************** -+ * Copyright (C) 2006 by Stephan Binner * -+ * * -+ * This program is free software; you can redistribute it and/or modify * -+ * it under the terms of the GNU General Public License as published by * -+ * the Free Software Foundation; either version 2 of the License, or * -+ * (at your option) any later version. * -+ * * -+ * This program is distributed in the hope that it will be useful, * -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of * -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * -+ * GNU General Public License for more details. * -+ * * -+ * You should have received a copy of the GNU General Public License * -+ * along with this program; if not, write to the * -+ * Free Software Foundation, Inc., * -+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * -+ ***************************************************************************/ -+ -+#include "kickoffsearchinterface.h" -+ -+KickoffSearch::KickoffSearchInterface::KickoffSearchInterface( QObject* parent, const char* name ) -+ :QObject( parent, name ) -+{ -+} -+ -+#include "kickoffsearchinterface.moc" ---- kicker/interfaces/Makefile.am (Revision 0) -+++ kicker/interfaces/Makefile.am (Revision 849791) -@@ -0,0 +1,12 @@ -+METASOURCES = AUTO -+INCLUDES= -I$(top_srcdir)/src $(all_includes) -+ -+# The library containing the plugin base class -+lib_LTLIBRARIES = libkickoffsearch_interfaces.la -+libkickoffsearch_interfaces_la_SOURCES = kickoff-search-plugin.cpp kickoffsearchinterface.cpp -+libkickoffsearch_interfaces_la_LDFLAGS = $(all_libraries) -version-info 0:0:0 -+ -+kickoffsearchincludedir = $(includedir) -+kickoffsearchinclude_HEADERS = kickoff-search-plugin.h kickoffsearchinterface.h -+ -+kde_servicetypes_DATA = kickoffsearchplugin.desktop ---- kicker/interfaces/kickoffsearchinterface.h (Revision 0) -+++ kicker/interfaces/kickoffsearchinterface.h (Revision 849791) -@@ -0,0 +1,46 @@ -+/*************************************************************************** -+ * Copyright (C) 2006 by Stephan Binner * -+ * * -+ * This program is free software; you can redistribute it and/or modify * -+ * it under the terms of the GNU General Public License as published by * -+ * the Free Software Foundation; either version 2 of the License, or * -+ * (at your option) any later version. * -+ * * -+ * This program is distributed in the hope that it will be useful, * -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of * -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * -+ * GNU General Public License for more details. * -+ * * -+ * You should have received a copy of the GNU General Public License * -+ * along with this program; if not, write to the * -+ * Free Software Foundation, Inc., * -+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * -+ ***************************************************************************/ -+ -+#ifndef KICKOFFSEARCHINTERFACE_H -+#define KICKOFFSEARCHINTERFACE_H -+ -+#include -+ -+class HitMenuItem; -+ -+namespace KickoffSearch -+{ -+ class KickoffSearchInterface :public QObject -+ { -+ Q_OBJECT -+ -+ public: -+ KickoffSearchInterface( QObject* parent, const char* name = 0); -+ -+ public: -+ virtual bool anotherHitMenuItemAllowed(int cat) = 0; -+ virtual void addHitMenuItem(HitMenuItem* item) = 0; -+ virtual void searchOver() = 0; -+ virtual void initCategoryTitlesUpdate() = 0; -+ virtual void updateCategoryTitles() = 0; -+ }; -+} -+ -+#endif /* SELECTIONINTERFACE_H */ -+ ---- kicker/interfaces/kickoffsearchplugin.desktop (Revision 0) -+++ kicker/interfaces/kickoffsearchplugin.desktop (Revision 849791) -@@ -0,0 +1,4 @@ -+[Desktop Entry] -+Type=ServiceType -+X-KDE-ServiceType=KickoffSearch/Plugin -+Comment=A search plugin for Kickoff ---- kicker/interfaces/kickoff-search-plugin.cpp (Revision 0) -+++ kicker/interfaces/kickoff-search-plugin.cpp (Revision 849791) -@@ -0,0 +1,37 @@ -+/*************************************************************************** -+ * Copyright (C) 2006 by Stephan Binner * -+ * * -+ * This program is free software; you can redistribute it and/or modify * -+ * it under the terms of the GNU General Public License as published by * -+ * the Free Software Foundation; either version 2 of the License, or * -+ * (at your option) any later version. * -+ * * -+ * This program is distributed in the hope that it will be useful, * -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of * -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * -+ * GNU General Public License for more details. * -+ * * -+ * You should have received a copy of the GNU General Public License * -+ * along with this program; if not, write to the * -+ * Free Software Foundation, Inc., * -+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * -+ ***************************************************************************/ -+ -+#include "kickoff-search-plugin.h" -+#include -+ -+KickoffSearch::Plugin::Plugin(QObject *parent, const char* name ) -+ :QObject( parent, name ) -+{ -+} -+ -+KickoffSearch::Plugin::~Plugin() -+{ -+} -+ -+KickoffSearch::KickoffSearchInterface* KickoffSearch::Plugin::kickoffSearchInterface() -+{ -+ return static_cast( parent()->child( 0, "KickoffSearch::KickoffSearchInterface" ) ); -+} -+ -+#include "kickoff-search-plugin.moc" - -Eigenschaftsänderungen: kicker/interfaces -___________________________________________________________________ -Hinzugefügt: svn:ignore - + .deps -libkickoffsearch_interfaces.la -.libs -Makefile -Makefile.in -*.moc - - ---- kicker/core/menumanager.h (Revision 849788) -+++ kicker/core/menumanager.h (Revision 849791) -@@ -28,7 +28,9 @@ - #include - - class PanelKMenu; -+class KMenu; - class KickerClientMenu; -+class KMenuStub; - class PanelPopupButton; - - typedef QValueList KButtonList; -@@ -50,13 +52,12 @@ - bool process(const QCString &fun, const QByteArray &data, QCString& replyType, QByteArray &reply); - - // KMenu controls -- PanelKMenu* kmenu() { return m_kmenu; } -- void showKMenu(); -+ KMenuStub* kmenu() { return m_kmenu; } - void popupKMenu(const QPoint &p); - - void registerKButton(PanelPopupButton *button); - void unregisterKButton(PanelPopupButton *button); -- PanelPopupButton* findKButtonFor(QPopupMenu* menu); -+ PanelPopupButton* findKButtonFor(QWidget* menu); - ~MenuManager(); - - public slots: -@@ -67,7 +68,7 @@ - void applicationRemoved(const QCString&); - - protected: -- PanelKMenu* m_kmenu; -+ KMenuStub* m_kmenu; - typedef QValueList ClientMenuList; - ClientMenuList clientmenus; - ---- kicker/core/kicker.cpp (Revision 849788) -+++ kicker/core/kicker.cpp (Revision 849791) -@@ -48,6 +48,8 @@ - #include "extensionmanager.h" - #include "pluginmanager.h" - #include "menumanager.h" -+#include "k_new_mnu.h" -+#include "k_mnu_stub.h" - #include "k_mnu.h" - #include "showdesktop.h" - #include "panelbutton.h" -@@ -106,6 +108,7 @@ - - KGlobal::iconLoader()->addExtraDesktopThemes(); - -+ KGlobal::locale()->insertCatalogue("kdmgreet"); - KGlobal::locale()->insertCatalogue("libkonq"); - KGlobal::locale()->insertCatalogue("libdmctl"); - KGlobal::locale()->insertCatalogue("libtaskbar"); -@@ -212,7 +215,7 @@ - - void Kicker::showKMenu() - { -- MenuManager::the()->showKMenu(); -+ MenuManager::the()->kmenuAccelActivated(); - } - - void Kicker::popupKMenu(const QPoint &p) ---- kicker/core/container_button.cpp (Revision 849788) -+++ kicker/core/container_button.cpp (Revision 849791) -@@ -43,6 +43,7 @@ - #include "desktopbutton.h" - #include "extensionbutton.h" - #include "kbutton.h" -+#include "knewbutton.h" - #include "kicker.h" - #include "kickerSettings.h" - #include "kickertip.h" -@@ -326,14 +327,20 @@ - : ButtonContainer(opMenu, parent) - { - checkImmutability(config); -- embedButton( new KButton(this) ); -+ if(KickerSettings::legacyKMenu()) -+ embedButton( new KButton(this) ); -+ else -+ embedButton( new KNewButton(this) ); - _actions = PanelAppletOpMenu::KMenuEditor; - } - - KMenuButtonContainer::KMenuButtonContainer(QPopupMenu *opMenu, QWidget* parent) - : ButtonContainer(opMenu, parent) - { -- embedButton( new KButton(this) ); -+ if(KickerSettings::legacyKMenu()) -+ embedButton( new KButton(this) ); -+ else -+ embedButton( new KNewButton(this) ); - _actions = PanelAppletOpMenu::KMenuEditor; - } - ---- kicker/core/main.cpp (Revision 849788) -+++ kicker/core/main.cpp (Revision 849791) -@@ -108,7 +108,7 @@ - appname.sprintf("kicker-screen-%d", kicker_screen_number); - - KAboutData aboutData( appname.data(), I18N_NOOP("KDE Panel"), -- version, description, KAboutData::License_BSD, -+ version, description, KAboutData::License_GPL_V2, - I18N_NOOP("(c) 1999-2004, The KDE Team") ); - - aboutData.addAuthor("Aaron J. Seigo", I18N_NOOP("Current maintainer"), "aseigo@kde.org"); ---- kicker/core/menumanager.cpp (Revision 849788) -+++ kicker/core/menumanager.cpp (Revision 849791) -@@ -31,9 +31,12 @@ - #include "client_mnu.h" - #include "container_extension.h" - #include "global.h" -+#include "k_new_mnu.h" - #include "k_mnu.h" -+#include "k_mnu_stub.h" - #include "kicker.h" - #include "panelbutton.h" -+#include "kickerSettings.h" - - #include "menumanager.h" - #include "menumanager.moc" -@@ -62,7 +65,11 @@ - MenuManager::MenuManager(QObject *parent) - : QObject(parent, "MenuManager"), DCOPObject("MenuManager") - { -- m_kmenu = new PanelKMenu; -+ if (KickerSettings::legacyKMenu()) -+ m_kmenu = new KMenuStub(new PanelKMenu); -+ else -+ m_kmenu = new KMenuStub(new KMenu); -+ - kapp->dcopClient()->setNotifications(true); - connect(kapp->dcopClient(), SIGNAL(applicationRemoved(const QCString&)), - this, SLOT(applicationRemoved(const QCString&))); -@@ -83,14 +90,8 @@ - m_kmenu->selectFirstItem(); - } - --void MenuManager::showKMenu() --{ -- m_kmenu->showMenu(); --} -- - void MenuManager::popupKMenu(const QPoint &p) - { --// kdDebug(1210) << "popupKMenu()" << endl; - if (m_kmenu->isVisible()) - { - m_kmenu->hide(); -@@ -120,7 +121,7 @@ - m_kbuttons.remove(button); - } - --PanelPopupButton* MenuManager::findKButtonFor(QPopupMenu* menu) -+PanelPopupButton* MenuManager::findKButtonFor(QWidget* menu) - { - KButtonList::const_iterator itEnd = m_kbuttons.constEnd(); - for (KButtonList::const_iterator it = m_kbuttons.constBegin(); it != itEnd; ++it) -@@ -169,7 +170,7 @@ - const QSize size = m_kmenu->sizeHint(); - m_kmenu->resize(size.width(),size.height()); - -- PanelPopupButton* button = findKButtonFor(m_kmenu); -+ PanelPopupButton* button = findKButtonFor(m_kmenu->widget()); - - // let's unhide the panel while we're at it. traverse the widget - // hierarchy until we find the panel, if any -@@ -189,7 +190,6 @@ - - menuParent = menuParent->parent(); - } -- - button->showMenu(); - } - } -@@ -213,7 +213,7 @@ - - void MenuManager::removeMenu(QCString menu) - { -- bool iterate = true; -+ bool iterate = true, need_adjustSize = false; - ClientMenuList::iterator it = clientmenus.begin(); - for (; it != clientmenus.end(); iterate ? ++it : it) - { -@@ -224,15 +224,17 @@ - m_kmenu->removeClientMenu(m->idInParentMenu); - it = clientmenus.erase(it); - iterate = false; -+ need_adjustSize = true; - } - } -- m_kmenu->adjustSize(); -+ if (need_adjustSize) -+ m_kmenu->adjustSize(); - } - - - void MenuManager::applicationRemoved(const QCString& appRemoved) - { -- bool iterate = true; -+ bool iterate = true, need_adjustSize = false; - ClientMenuList::iterator it = clientmenus.begin(); - for (; it != clientmenus.end(); iterate ? ++it : it) - { -@@ -243,9 +245,11 @@ - m_kmenu->removeClientMenu(m->idInParentMenu); - it = clientmenus.erase(it); - iterate = false; -+ need_adjustSize = true; - } - } -- m_kmenu->adjustSize(); -+ if (need_adjustSize) -+ m_kmenu->adjustSize(); - } - - bool MenuManager::process(const QCString &fun, const QByteArray &data, ---- kicker/core/unhidetrigger.cpp (Revision 849788) -+++ kicker/core/unhidetrigger.cpp (Revision 849791) -@@ -39,7 +39,7 @@ - , _lastXineramaScreen( -1 ) - , enabledCount( 0 ) - { -- _timer = new QTimer( this ); -+ _timer = new QTimer( this, "UnhideTrigger" ); - connect( _timer, SIGNAL(timeout()), SLOT(pollMouse()) ); - } - ---- kicker/core/applethandle.cpp (Revision 849788) -+++ kicker/core/applethandle.cpp (Revision 849791) -@@ -150,7 +150,7 @@ - { - if (!m_handleHoverTimer) - { -- m_handleHoverTimer = new QTimer(this); -+ m_handleHoverTimer = new QTimer(this, "m_handleHoverTimer"); - connect(m_handleHoverTimer, SIGNAL(timeout()), - this, SLOT(checkHandleHover())); - m_applet->installEventFilter(this); -@@ -177,11 +177,7 @@ - m_drawHandle = true; - resetLayout(); - -- if (m_handleHoverTimer) -- { -- m_handleHoverTimer->start(250); -- } -- break; -+ break; - } - - case QEvent::Leave: -@@ -191,6 +187,11 @@ - break; - } - -+ if (m_handleHoverTimer) -+ { -+ m_handleHoverTimer->start(250); -+ } -+ - QWidget* w = dynamic_cast(o); - - bool nowDrawIt = false; -@@ -207,11 +208,6 @@ - - if (nowDrawIt != m_drawHandle) - { -- if (m_handleHoverTimer) -- { -- m_handleHoverTimer->stop(); -- } -- - m_drawHandle = nowDrawIt; - resetLayout(); - } -@@ -297,6 +293,11 @@ - } - - m_menuButton->setDown(false); -+ -+ if (m_handleHoverTimer) -+ { -+ m_handleHoverTimer->start(250); -+ } - } - - AppletHandleDrag::AppletHandleDrag(AppletHandle* parent) ---- kicker/core/containerarea.cpp 2009/11/20 21:00:18 1.1 -+++ kicker/core/containerarea.cpp 2009/11/20 21:00:38 -@@ -87,7 +87,8 @@ - m_immutable(_c->isImmutable()), - m_updateBackgroundsCalled(false), - m_layout(0), -- m_addAppletDialog(0) -+ m_addAppletDialog(0), -+ _autoScrollTimer(0, "ContainerArea::autoScrollTimer") - { - setBackgroundOrigin( WidgetOrigin ); - ---- kicker/core/Makefile.am (Revision 849788) -+++ kicker/core/Makefile.am (Revision 849791) -@@ -1,6 +1,6 @@ - INCLUDES = -I$(srcdir)/../../libkicker -I../../libkicker \ -- -I$(srcdir)/../ui -I$(srcdir)/../buttons -I$(top_srcdir)/libkonq \ -- $(all_includes) -+ -I../ui -I$(srcdir)/../ui -I$(srcdir)/../buttons -I$(top_srcdir)/libkonq \ -+ $(all_includes) - - noinst_LTLIBRARIES = libkicker_core.la - ---- kicker/Makefile.am (Revision 849788) -+++ kicker/Makefile.am (Revision 849791) -@@ -1,6 +1,6 @@ - INCLUDES = $(all_includes) - --SUBDIRS = core ui buttons . -+SUBDIRS = core ui buttons interfaces . - - bin_PROGRAMS = - lib_LTLIBRARIES = -@@ -9,7 +9,7 @@ - CLEANFILES = dummy.cpp - - kicker_la_LIBADD = core/libkicker_core.la buttons/libkicker_buttons.la \ -- ui/libkicker_ui.la ../libkicker/libkickermain.la $(LIB_KIO) $(LIB_KUTILS) -+ ui/libkicker_ui.la ../libkicker/libkickermain.la $(LIB_KIO) $(LIB_KUTILS) $(LIB_KABC) - - kicker_la_SOURCES = dummy.cpp - kicker_la_LDFLAGS = -module $(KDE_PLUGIN) $(all_libraries) ---- kicker/ui/browser_mnu.cpp (Revision 849788) -+++ kicker/ui/browser_mnu.cpp (Revision 849791) -@@ -329,7 +329,7 @@ - if(_mimemap.count() > 0) { - - if(!_mimecheckTimer) -- _mimecheckTimer = new QTimer(this); -+ _mimecheckTimer = new QTimer(this, "_mimecheckTimer"); - - connect(_mimecheckTimer, SIGNAL(timeout()), SLOT(slotMimeCheck())); - _mimecheckTimer->start(0); ---- kicker/ui/flipscrollview.cpp (Revision 0) -+++ kicker/ui/flipscrollview.cpp (Revision 849791) -@@ -0,0 +1,324 @@ -+/***************************************************************** -+ -+Copyright (c) 2006 Will Stephenson -+ -+Permission is hereby granted, free of charge, to any person obtaining a copy -+of this software and associated documentation files (the "Software"), to deal -+in the Software without restriction, including without limitation the rights -+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -+copies of the Software, and to permit persons to whom the Software is -+furnished to do so, subject to the following conditions: -+ -+The above copyright notice and this permission notice shall be included in -+all copies or substantial portions of the Software. -+ -+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -+AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -+AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -+ -+******************************************************************/ -+ -+#include -+#include -+#include -+#include -+ -+#include "itemview.h" -+#include "flipscrollview.h" -+#include "kickerSettings.h" -+ -+/* Flip scroll steps, as percentage of itemview width to scroll per -+ * step. Assumes the itemview is scrolled in ten steps */ -+ -+/* slow start, then fast */ -+//static const double scrollSteps[] = { 0.05, 0.05, 0.1125, 0.1125, 0.1125, 0.1125, 0.1125, 0.1125, 0.1125, 0.1125 }; -+ -+/* slow fast slow */ -+//static const double scrollSteps[] = { 0.05, 0.05, 0.13, 0.13, 0.15, 0.13, 0.13, 0.13, 0.05, 0.05 }; -+ -+/* slow veryfast slow */ -+static const double scrollSteps[] = { 0.03, 0.03, 0.147, 0.147, 0.147, 0.147, 0.147, 0.147, 0.03, 0.028 }; -+; -+ -+BackFrame::BackFrame( QWidget *parent ) -+ : QFrame( parent ), mouse_inside( false ) -+{ -+ setFrameStyle( QFrame::NoFrame ); -+ if ( QApplication::reverseLayout() ) -+ left_triangle.load( locate( "data", "kicker/pics/right_triangle.png" ) ); -+ else -+ left_triangle.load( locate( "data", "kicker/pics/left_triangle.png" ) ); -+} -+ -+void BackFrame::drawContents( QPainter *p ) -+{ -+ QColor gray( 230, 230, 230 ); -+ if ( mouse_inside ) -+ p->fillRect( 3, 3, width() - 6, height() - 6, colorGroup().color( QColorGroup::Highlight ) ); -+ else -+ p->fillRect( 3, 3, width() - 6, height() - 6, gray ); -+ p->setPen( gray.dark(110) ); -+ p->drawRect( 3, 3, width() - 6, height() - 6 ); -+ -+ int pixsize = ( width() - 6 ) * 3 / 5; -+ QImage i = left_triangle.convertToImage().smoothScale( pixsize, pixsize ); -+ QPixmap tri; -+ tri.convertFromImage( i ); -+ -+ p->drawPixmap( ( width() - tri.width() ) / 2, ( height() - tri.height() ) / 2, tri ); -+} -+ -+void BackFrame::enterEvent( QEvent *e ) -+{ -+ mouse_inside = true; -+ update(); -+} -+ -+void BackFrame::leaveEvent( QEvent *e ) -+{ -+ mouse_inside = false; -+ update(); -+} -+ -+void BackFrame::mousePressEvent ( QMouseEvent * e ) -+{ -+ emit clicked(); -+} -+ -+FlipScrollView::FlipScrollView( QWidget * parent, const char * name ) -+ : QScrollView( parent, name ), mState( StoppedLeft ), mScrollDirection( 1 ), mShowBack( false ) -+{ -+ setVScrollBarMode( QScrollView::AlwaysOff ); -+ setHScrollBarMode( QScrollView::AlwaysOff ); -+ setFrameStyle( QFrame::NoFrame ); -+ mLeftView = new ItemView( this, "left_view" ); -+ addChild( mLeftView ); -+ -+ mRightView = new ItemView( this, "right_view" ); -+ addChild( mRightView ); -+ -+ mTimer = new QTimer( this, "mTimer" ); -+ connect( mTimer, SIGNAL( timeout() ), SLOT( slotScrollTimer() ) ); -+ -+ connect( mLeftView, SIGNAL( startService(KService::Ptr) ), -+ SIGNAL( startService(KService::Ptr) ) ); -+ connect( mLeftView, SIGNAL( startURL(const QString& ) ), -+ SIGNAL( startURL(const QString& ) ) ); -+ connect( mLeftView, SIGNAL( rightButtonPressed(QListViewItem*,const QPoint&,int) ), -+ SIGNAL( rightButtonPressed(QListViewItem*,const QPoint&,int) ) ); -+ connect( mRightView, SIGNAL( startService(KService::Ptr) ), -+ SIGNAL( startService(KService::Ptr) ) ); -+ connect( mRightView, SIGNAL( startURL(const QString& ) ), -+ SIGNAL( startURL(const QString& ) ) ); -+ connect( mRightView, SIGNAL( rightButtonPressed(QListViewItem*,const QPoint&,int) ), -+ SIGNAL( rightButtonPressed(QListViewItem*,const QPoint&,int) ) ); -+ -+ // wild hack to make sure it has correct width -+ mLeftView->setVScrollBarMode( QScrollView::AlwaysOn ); -+ mRightView->setVScrollBarMode( QScrollView::AlwaysOn ); -+ mLeftView->setVScrollBarMode( QScrollView::Auto ); -+ mRightView->setVScrollBarMode( QScrollView::Auto ); -+ -+ mBackrow = new BackFrame( this ); -+ mBackrow->resize( 24, 100 ); -+ connect( mBackrow, SIGNAL( clicked() ), SIGNAL( backButtonClicked() ) ); -+} -+ -+ItemView* FlipScrollView::prepareRightMove() -+{ -+ if ( mState != StoppedLeft ) -+ { -+ mTimer->stop(); -+ ItemView *swap = mLeftView; -+ mLeftView = mRightView; -+ mRightView = swap; -+ moveChild( mLeftView, 0, 0 ); -+ moveChild( mRightView, width(), 0 ); -+ mBackrow->hide(); -+ mRightView->resize( width(), height() ); -+ mLeftView->resize( width(), height() ); -+ setContentsPos( 0, 0 ); -+ } -+ -+ mState = StoppedLeft; -+ mRightView->clear(); -+ return mRightView; -+} -+ -+void FlipScrollView::showBackButton( bool enable ) -+{ -+ kdDebug() << "FlipScrollView::showBackButton " << enable << endl; -+ mShowBack = enable; -+} -+ -+ItemView* FlipScrollView::prepareLeftMove(bool clear) -+{ -+ if ( mState != StoppedRight ) -+ { -+ mTimer->stop(); -+ ItemView *swap = mLeftView; -+ mLeftView = mRightView; -+ mRightView = swap; -+ moveChild( mLeftView, 0, 0 ); -+ moveChild( mRightView, width(), 0 ); -+ mRightView->resize( width(), height() ); -+ mLeftView->resize( width(), height() ); -+ mBackrow->hide(); -+ setContentsPos( width(), 0 ); -+ } -+ -+ mState = StoppedRight; -+ if (clear) -+ mLeftView->clear(); -+ return mLeftView; -+} -+ -+void FlipScrollView::viewportResizeEvent ( QResizeEvent * ) -+{ -+ mLeftView->resize( size() ); -+ mRightView->resize( width() - mBackrow->width(), height() ); -+ mBackrow->resize( mBackrow->width(), height() ); -+ resizeContents( width() * 2, height() ); -+ moveChild( mBackrow, width(), 0 ); -+ moveChild( mRightView, width() + mBackrow->width(), 0 ); -+ setContentsPos( 0, 0 ); -+} -+ -+ItemView *FlipScrollView::currentView() const -+{ -+ if ( mState == StoppedRight ) -+ return mRightView; -+ else -+ return mLeftView; -+} -+ -+ItemView *FlipScrollView::leftView() const -+{ -+ return mLeftView; -+} -+ -+ItemView *FlipScrollView::rightView() const -+{ -+ return mRightView; -+} -+ -+FlipScrollView::~FlipScrollView() {} -+ -+static const int max_steps = 10; -+ -+void FlipScrollView::slotScrollTimer() -+{ -+ mStepsRemaining--; -+ assert( mStepsRemaining >= 0 && mStepsRemaining < int(sizeof( scrollSteps ) / sizeof( double )) ); -+ if (KickerSettings::scrollFlipView()) -+ scrollBy( ( int )( mScrollDirection * mLeftView->width() * scrollSteps[ mStepsRemaining ] ), 0 ); -+ else -+ scrollBy( ( int )( mScrollDirection * mLeftView->width()), 0 ); -+ -+ if ( mStepsRemaining == 0 ) -+ { -+ if ( mState == ScrollingRight ) -+ { -+ mState = StoppedRight; -+ setContentsPos( width(), 0 ); -+ } else { -+ mState = StoppedLeft; -+ setContentsPos( 0, 0 ); -+ } -+ -+ kdDebug() << "slotScrollTimer " << mShowBack << endl; -+ -+ if ( mShowBack ) -+ { -+ mBackrow->show(); -+ if ( mState == StoppedRight ) -+ { -+ -+ if ( QApplication::reverseLayout() ) -+ moveChild( mRightView, width(), 0 ); -+ else -+ moveChild( mRightView, width() + mBackrow->width(), 0 ); -+ mRightView->resize( width() - mBackrow->width(), height() ); -+ mLeftView->resize( width(), height() ); -+ if ( QApplication::reverseLayout() ) -+ moveChild( mBackrow, width() + mRightView->width(), 0 ); -+ else -+ moveChild( mBackrow, width(), 0 ); -+ moveChild( mLeftView, 0, 0 ); -+ } else -+ { -+ moveChild( mRightView, width(), 0 ); -+ mRightView->resize( width(), height() ); -+ mLeftView->resize( width() - mBackrow->width(), height() ); -+ if ( QApplication::reverseLayout() ) -+ { -+ moveChild( mBackrow, mLeftView->width(), 0 ); -+ moveChild( mLeftView, 0, 0 ); -+ } -+ else -+ { -+ moveChild( mBackrow, 0, 0 ); -+ moveChild( mLeftView, mBackrow->width(), 0 ); -+ } -+ } -+ } else -+ mBackrow->hide(); -+ -+ if (!mSelectMenuPath.isEmpty()) { -+ if (mSelectMenuPath=="kicker:/goup/") { -+ currentView()->setSelected(currentView()->firstChild(),true); -+ currentView()->firstChild()->repaint(); -+ } -+ else { -+ QListViewItem * child = currentView()->firstChild(); -+ while( child ) { -+ KMenuItem* kitem = dynamic_cast(child); -+ if (kitem && kitem->menuPath()==mSelectMenuPath) { -+ currentView()->setSelected(child,true); -+ kdDebug() << "child repaint\n"; -+ child->repaint(); -+ break; -+ } -+ child = child->nextSibling(); -+ } -+ } -+ } -+ mLeftView->setVScrollBarMode( QScrollView::Auto ); -+ mRightView->setVScrollBarMode( QScrollView::Auto ); -+ mTimer->stop(); -+ mLeftView->setMouseMoveSelects( true ); -+ mRightView->setMouseMoveSelects( true ); -+ } -+} -+ -+void FlipScrollView::flipScroll(const QString& selectMenuPath) -+{ -+ if ( mState == StoppedLeft ) -+ { -+ mState = ScrollingRight; -+ mScrollDirection = 1; -+ } -+ else -+ { -+ mState = ScrollingLeft; -+ mScrollDirection = -1; -+ } -+ -+ mLeftView->setVScrollBarMode( QScrollView::AlwaysOff ); -+ mRightView->setVScrollBarMode( QScrollView::AlwaysOff ); -+ if (KickerSettings::scrollFlipView()) -+ mStepsRemaining = max_steps; -+ else -+ mStepsRemaining = 1; -+ mTimer->start( 30 ); -+ mSelectMenuPath = selectMenuPath; -+ if (!mSelectMenuPath.isEmpty()) { -+ mLeftView->setMouseMoveSelects( false ); -+ mRightView->setMouseMoveSelects( false ); -+ } -+} -+ -+#include "flipscrollview.moc" ---- kicker/ui/query.cpp (Revision 0) -+++ kicker/ui/query.cpp (Revision 849791) -@@ -0,0 +1,136 @@ -+/***************************************************************** -+ -+ Copyright (c) 2006 Stephan Binner -+ -+ This program is free software; you can redistribute it and/or -+ modify it under the terms of the GNU General Public -+ License as published by the Free Software Foundation; either -+ version 2 of the License, or (at your option) any later version. -+ -+ This program is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ General Public License for more details. -+ -+ You should have received a copy of the GNU General Public License -+ along with this program; see the file COPYING. If not, write to -+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, -+ Boston, MA 02110-1301, USA. -+ -+******************************************************************/ -+ -+#include "query.h" -+#include -+ -+Query::Query() -+{ -+ alternatives.setAutoDelete(true); -+} -+ -+void Query::clear() -+{ -+ query_term = QString::null; -+ alternatives.clear(); -+} -+ -+void Query::set(const QString &term) -+{ -+ query_term = term; -+ alternatives.clear(); -+ -+ current_alternative = new Alternative; -+ current_part = QString::null; -+ within_quotes = false; -+ exclude_part = false; -+ -+ for (uint index=0;indexexcludes+=current_part.lower(); -+ else -+ current_alternative->includes+=current_part.lower(); -+ } -+ within_quotes = false; -+ exclude_part = false; -+ current_part = QString::null; -+} -+ -+QString Query::get() const -+{ -+ return query_term; -+} -+ -+bool Query::matches(const QString &term) -+{ -+ QString lower_term = term.lower(); -+ -+ for (Alternative* alt=alternatives.first(); alt; alt=alternatives.next()) { -+ if (!alt->includes.count()) -+ continue; -+ -+ bool next_alternative = false; -+ -+ for ( QStringList::ConstIterator it = alt->excludes.begin(); it != alt->excludes.end(); ++it ) { -+ if ( lower_term.find(*it)!=-1 ) { -+ next_alternative = true; -+ continue; -+ } -+ } -+ if (next_alternative) -+ continue; -+ -+ for ( QStringList::ConstIterator it = alt->includes.begin(); it != alt->includes.end(); ++it ) { -+ if ( lower_term.find(*it)==-1 ) { -+ next_alternative = true; -+ continue; -+ } -+ } -+ if (next_alternative) -+ continue; -+ -+//kdDebug() << "Found hit in '" << term << "'" << endl; -+ return true; -+ } -+ -+ return false; -+} ---- kicker/ui/k_new_mnu.cpp (Revision 0) -+++ kicker/ui/k_new_mnu.cpp (Revision 849791) -@@ -0,0 +1,3779 @@ -+/***************************************************************** -+ -+ Copyright (c) 1996-2000 the kicker authors. See file AUTHORS. -+ Copyright (c) 2006 Debajyoti Bera -+ Copyright (c) 2006 Dirk Mueller -+ -+ This program is free software; you can redistribute it and/or -+ modify it under the terms of the GNU General Public -+ License as published by the Free Software Foundation; either -+ version 2 of the License, or (at your option) any later version. -+ -+ This program is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ General Public License for more details. -+ -+ You should have received a copy of the GNU General Public License -+ along with this program; see the file COPYING. If not, write to -+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, -+ Boston, MA 02110-1301, USA. -+ -+******************************************************************/ -+ -+#include -+#include -+#include -+#include -+#include -+ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+ -+#include "client_mnu.h" -+#include "container_base.h" -+#include "global.h" -+#include "knewbutton.h" -+#include "kicker.h" -+#include "kickerSettings.h" -+#include "konqbookmarkmanager.h" -+#include "menuinfo.h" -+#include "menumanager.h" -+#include "popupmenutitle.h" -+#include "quickbrowser_mnu.h" -+#include "recentapps.h" -+#include "flipscrollview.h" -+#include "itemview.h" -+#include -+#include -+#include -+ -+#include "media_watcher.h" -+#include "k_mnu.h" -+#include "k_new_mnu.h" -+#include "k_new_mnu.moc" -+#include "kickoff_bar.h" -+ -+#define WAIT_BEFORE_QUERYING 700 -+ -+#define IDS_PER_CATEGORY 20 -+#define ACTIONS_ID_BASE 10 -+#define APP_ID_BASE 10 + IDS_PER_CATEGORY -+#define BOOKMARKS_ID_BASE 10 + (IDS_PER_CATEGORY * 2) -+#define NOTES_ID_BASE 10 + (IDS_PER_CATEGORY * 3) -+#define MAIL_ID_BASE 10 + (IDS_PER_CATEGORY * 4) -+#define FILE_ID_BASE 10 + (IDS_PER_CATEGORY * 5) -+#define MUSIC_ID_BASE 10 + (IDS_PER_CATEGORY * 6) -+#define WEBHIST_ID_BASE 10 + (IDS_PER_CATEGORY * 7) -+#define CHAT_ID_BASE 10 + (IDS_PER_CATEGORY * 8) -+#define FEED_ID_BASE 10 + (IDS_PER_CATEGORY * 9) -+#define PIC_ID_BASE 10 + (IDS_PER_CATEGORY * 10) -+#define VIDEO_ID_BASE 10 + (IDS_PER_CATEGORY * 11) -+#define DOC_ID_BASE 10 + (IDS_PER_CATEGORY * 12) -+#define OTHER_ID_BASE 10 + (IDS_PER_CATEGORY * 13) -+ -+static QString calculate(const QString &exp) -+{ -+ QString result, cmd; -+ const QString bc = KStandardDirs::findExe("bc"); -+ if ( !bc.isEmpty() ) -+ cmd = QString("echo %1 | %2").arg(KProcess::quote(exp), KProcess::quote(bc)); -+ else -+ cmd = QString("echo $((%1))").arg(exp); -+ FILE *fs = popen(QFile::encodeName(cmd).data(), "r"); -+ if (fs) -+ { -+ QTextStream ts(fs, IO_ReadOnly); -+ result = ts.read().stripWhiteSpace(); -+ pclose(fs); -+ } -+ return result; -+} -+ -+static QString workaroundStringFreeze(const QString& str) -+{ -+ QString s = str; -+ -+ s.replace("","&"); -+ QRegExp re("<[^>]+>"); -+ re.setMinimal(true); -+ re.setCaseSensitive(false); -+ -+ s.replace(re, ""); -+ s = s.simplifyWhiteSpace(); -+ -+ return s; -+} -+ -+int base_category_id[] = {ACTIONS_ID_BASE, APP_ID_BASE, BOOKMARKS_ID_BASE, NOTES_ID_BASE, MAIL_ID_BASE, -+ FILE_ID_BASE, MUSIC_ID_BASE, WEBHIST_ID_BASE, CHAT_ID_BASE, FEED_ID_BASE, -+ PIC_ID_BASE, VIDEO_ID_BASE, DOC_ID_BASE, OTHER_ID_BASE}; -+ -+#include -+ -+static int used_size( QLabel *label, int oldsize ) -+{ -+ QSimpleRichText st( label->text(), KGlobalSettings::toolBarFont() ); -+ st.setWidth( oldsize ); -+ return QMAX( st.widthUsed(), oldsize ); -+} -+ -+KMenu::KMenu() -+ : KMenuBase(0, "SUSE::Kickoff::KMenu") -+ , m_sloppyTimer(0, "KNewMenu::sloppyTimer"), m_mediaFreeTimer(0, "KNewMenu::mediaFreeTimer"), -+ m_iconName(QString::null), m_orientation(UnDetermined), m_search_plugin( 0 ) -+{ -+ setMouseTracking(true); -+ connect(&m_sloppyTimer, SIGNAL(timeout()), SLOT(slotSloppyTimeout())); -+ -+ // set the first client id to some arbitrarily large value. -+ client_id = 10000; -+ // Don't automatically clear the main menu. -+ actionCollection = new KActionCollection(this); -+ -+ connect(Kicker::the(), SIGNAL(configurationChanged()), -+ this, SLOT(configChanged())); -+ -+ KUser * user = new KUser(); -+ -+ char hostname[256]; -+ hostname[0] = '\0'; -+ if (!gethostname( hostname, sizeof(hostname) )) -+ hostname[sizeof(hostname)-1] = '\0'; -+ -+ m_userInfo->setText( i18n( "User %1 on %2" ) -+ .arg( user->loginName() ).arg( hostname ) ); -+ setupUi(); -+ -+ m_userInfo->setBackgroundMode( PaletteBase ); -+ QColor userInfoColor = QApplication::palette().color( QPalette::Normal, QColorGroup::Mid ); -+ if ( qGray( userInfoColor.rgb() ) > 120 ) -+ userInfoColor = userInfoColor.dark( 200 ); -+ else -+ userInfoColor = userInfoColor.light( 200 ); -+ m_userInfo->setPaletteForegroundColor( userInfoColor ); -+ -+ m_tabBar = new KickoffTabBar(this, "m_tabBar"); -+ connect(m_tabBar, SIGNAL(tabClicked(QTab*)), SLOT(tabClicked(QTab*))); -+ -+ const int tab_icon_size = 32; -+ -+ m_tabs[FavoriteTab] = new QTab; -+ m_tabBar->addTab(m_tabs[FavoriteTab]); -+ m_tabBar->setToolTip(FavoriteTab, "" + i18n( "Most commonly used applications and documents" ) + "" ); -+ m_tabs[ApplicationsTab] = new QTab; -+ m_tabBar->addTab(m_tabs[ApplicationsTab]); -+ m_tabBar->setToolTip(ApplicationsTab, "" + i18n( "List of installed applications" ) + -+ "" ); -+ -+ m_tabs[ComputerTab] = new QTab; -+ m_tabBar->addTab(m_tabs[ComputerTab]); -+ m_tabBar->setToolTip(ComputerTab, "" + i18n( "Information and configuration of your " -+ "system, access to personal files, network resources and connected disk drives") -+ + ""); -+#if 0 -+ m_tabs[SearchTab] = new QTab; -+ m_tabBar->addTab(m_tabs[SearchTab]); -+#endif -+ m_tabs[HistoryTab] = new QTab; -+ m_tabBar->addTab(m_tabs[HistoryTab]); -+ m_tabBar->setToolTip(HistoryTab, "" + i18n( "Recently used applications and documents" ) + -+ "" ); -+ m_tabs[LeaveTab] = new QTab; -+ m_tabBar->addTab(m_tabs[LeaveTab]); -+ m_tabBar->setToolTip(LeaveTab, i18n("Logout, switch user, switch off or reset," -+ " suspend of the system" ) + "" ); -+ -+ if (KickerSettings::kickoffTabBarFormat() != KickerSettings::IconOnly) { -+ m_tabs[FavoriteTab]->setText(workaroundStringFreeze(i18n("

    Favorites

    "))); -+ m_tabs[HistoryTab]->setText(workaroundStringFreeze(i18n("

    History

    "))); -+ m_tabs[ComputerTab]->setText( -+ workaroundStringFreeze(i18n("

    Computer

    "))); -+ m_tabs[ApplicationsTab]->setText(workaroundStringFreeze(i18n("

    Applications

    "))); -+ m_tabs[LeaveTab]->setText( -+ workaroundStringFreeze(i18n("

    Leave

    "))); -+ } -+ -+ if (KickerSettings::kickoffTabBarFormat() != KickerSettings::LabelOnly) { -+ m_tabs[FavoriteTab]->setIconSet(BarIcon("bookmark", tab_icon_size)); -+ m_tabs[HistoryTab]->setIconSet(BarIcon("recently_used", tab_icon_size)); -+ m_tabs[ComputerTab]->setIconSet(BarIcon("system", tab_icon_size)); -+ m_tabs[ApplicationsTab]->setIconSet(BarIcon("player_playlist", tab_icon_size)); -+ m_tabs[LeaveTab]->setIconSet(BarIcon("leave", tab_icon_size)); -+ } -+ -+ connect(m_tabBar, SIGNAL(selected(int)), m_stacker, SLOT(raiseWidget(int))); -+ connect(m_stacker, SIGNAL(aboutToShow(int)), m_tabBar, SLOT(setCurrentTab(int))); -+ -+ m_favoriteView = new FavoritesItemView (m_stacker, "m_favoriteView"); -+ m_favoriteView->setAcceptDrops(true); -+ m_favoriteView->setItemsMovable(true); -+ m_stacker->addWidget(m_favoriteView, FavoriteTab); -+ -+ m_recentlyView = new ItemView (m_stacker, "m_recentlyView"); -+ m_stacker->addWidget(m_recentlyView, HistoryTab); -+ -+ m_systemView = new ItemView(m_stacker, "m_systemView"); -+ m_stacker->addWidget(m_systemView, ComputerTab ); -+ -+ m_browserView = new FlipScrollView(m_stacker, "m_browserView"); -+ m_stacker->addWidget(m_browserView, ApplicationsTab); -+ connect( m_browserView, SIGNAL( backButtonClicked() ), SLOT( slotGoBack() ) ); -+ -+ m_exitView = new FlipScrollView(m_stacker, "m_exitView"); -+ m_stacker->addWidget(m_exitView, LeaveTab); -+ connect( m_exitView, SIGNAL( backButtonClicked() ), SLOT( slotGoExitMainMenu() ) ); -+ -+ m_searchWidget = new QVBox (m_stacker, "m_searchWidget"); -+ m_searchWidget->setSpacing(0); -+ m_stacker->addWidget(m_searchWidget, 5); -+ -+ // search provider icon -+ QPixmap icon; -+ KURIFilterData data; -+ QStringList list; -+ data.setData( QString("some keyword") ); -+ list << "kurisearchfilter" << "kuriikwsfilter"; -+ -+ if ( KURIFilter::self()->filterURI(data, list) ) { -+ QString iconPath = locate("cache", KMimeType::favIconForURL(data.uri()) + ".png"); -+ if ( iconPath.isEmpty() ) -+ icon = SmallIcon("enhanced_browsing"); -+ else -+ icon = QPixmap( iconPath ); -+ } -+ else -+ icon = SmallIcon("enhanced_browsing"); -+ -+ m_searchResultsWidget = new ItemView (m_searchWidget, "m_searchResultsWidget"); -+ m_searchResultsWidget->setItemMargin(4); -+ m_searchResultsWidget->setIconSize(16); -+ m_searchActions = new ItemView (m_searchWidget, "m_searchActions"); -+ m_searchActions->setFocusPolicy(QWidget::NoFocus); -+ m_searchActions->setItemMargin(4); -+ m_searchInternet = new QListViewItem(m_searchActions, i18n("Search Internet")); -+ m_searchInternet->setPixmap(0,icon); -+ setTabOrder(m_kcommand, m_searchResultsWidget); -+ -+ m_kerryInstalled = !KStandardDirs::findExe(QString::fromLatin1("kerry")).isEmpty(); -+ m_isShowing = false; -+ -+ if (!m_kerryInstalled) { -+ m_searchIndex = 0; -+ m_searchActions->setMaximumHeight(5+m_searchInternet->height()); -+ } -+ else { -+ m_searchIndex = new QListViewItem(m_searchActions, i18n("Search Index")); -+ m_searchIndex->setPixmap(0,SmallIcon("kerry")); -+ m_searchActions->setMaximumHeight(5+m_searchIndex->height()*2); -+ } -+ connect(m_searchActions, SIGNAL(clicked(QListViewItem*)), SLOT(searchActionClicked(QListViewItem*))); -+ connect(m_searchActions, SIGNAL(returnPressed(QListViewItem*)), SLOT(searchActionClicked(QListViewItem*))); -+ connect(m_searchActions, SIGNAL(spacePressed(QListViewItem*)), SLOT(searchActionClicked(QListViewItem*))); -+ -+ connect(m_searchResultsWidget, SIGNAL(startService(KService::Ptr)), SLOT(slotStartService(KService::Ptr))); -+ connect(m_searchResultsWidget, SIGNAL(startURL(const QString&)), SLOT(slotStartURL(const QString&))); -+ connect(m_searchResultsWidget, SIGNAL(rightButtonPressed( QListViewItem*, const QPoint &, int )), SLOT(slotContextMenuRequested( QListViewItem*, const QPoint &, int ))); -+ -+ connect(m_recentlyView, SIGNAL(startService(KService::Ptr)), SLOT(slotStartService(KService::Ptr))); -+ connect(m_recentlyView, SIGNAL(startURL(const QString&)), SLOT(slotStartURL(const QString&))); -+ connect(m_recentlyView, SIGNAL(rightButtonPressed( QListViewItem*, const QPoint &, int )), SLOT(slotContextMenuRequested( QListViewItem*, const QPoint &, int ))); -+ -+ connect(m_favoriteView, SIGNAL(startService(KService::Ptr)), SLOT(slotStartService(KService::Ptr))); -+ connect(m_favoriteView, SIGNAL(startURL(const QString&)), SLOT(slotStartURL(const QString&))); -+ connect(m_favoriteView, SIGNAL(rightButtonPressed( QListViewItem*, const QPoint &, int )), SLOT(slotContextMenuRequested( QListViewItem*, const QPoint &, int ))); -+ connect(m_favoriteView, SIGNAL(moved(QListViewItem*, QListViewItem*, QListViewItem*)), SLOT(slotFavoritesMoved( QListViewItem*, QListViewItem*, QListViewItem* ))); -+ -+ connect(m_systemView, SIGNAL(startURL(const QString&)), SLOT(slotStartURL(const QString&))); -+ connect(m_systemView, SIGNAL(startService(KService::Ptr)), SLOT(slotStartService(KService::Ptr))); -+ connect(m_systemView, SIGNAL(rightButtonPressed( QListViewItem*, const QPoint &, int )), SLOT(slotContextMenuRequested( QListViewItem*, const QPoint &, int ))); -+ -+ connect(m_browserView, SIGNAL(startURL(const QString&)), SLOT(slotGoSubMenu(const QString&))); -+ connect(m_browserView, SIGNAL(startService(KService::Ptr)), SLOT(slotStartService(KService::Ptr))); -+ connect(m_browserView, SIGNAL(rightButtonPressed( QListViewItem*, const QPoint &, int )), SLOT(slotContextMenuRequested( QListViewItem*, const QPoint &, int ))); -+ -+ connect(m_exitView, SIGNAL(startURL(const QString&)), SLOT(slotStartURL(const QString&))); -+ connect(m_exitView, SIGNAL(rightButtonPressed( QListViewItem*, const QPoint &, int )), SLOT(slotContextMenuRequested( QListViewItem*, const QPoint &, int ))); -+ -+ m_kcommand->setDuplicatesEnabled( false ); -+ m_kcommand->setLineEdit(new KLineEdit(m_kcommand, "m_kcommand-lineedit")); -+ m_kcommand->setCompletionMode( KGlobalSettings::CompletionAuto ); -+ connect(m_kcommand, SIGNAL(cleared()), SLOT(clearedHistory())); -+ connect(m_kcommand->lineEdit(), SIGNAL(returnPressed()), SLOT(searchAccept())); -+ connect(m_kcommand->lineEdit(), SIGNAL(textChanged(const QString &)), SLOT(searchChanged(const QString &))); -+ -+ // URI Filter meta object... -+ m_filterData = new KURIFilterData(); -+ -+ max_category_id = new int [num_categories]; -+ categorised_hit_total = new int [num_categories]; -+ -+ input_timer = new QTimer (this, "input_timer"); -+ connect( input_timer, SIGNAL(timeout()), this, SLOT(doQuery()) ); -+ -+ init_search_timer = new QTimer (this, "init_search_timer"); -+ connect( init_search_timer, SIGNAL(timeout()), this, SLOT(initSearch()) ); -+ init_search_timer->start(2000, true); -+ -+ connect( m_favoriteView, SIGNAL( dropped (QDropEvent *, QListViewItem * ) ), -+ SLOT( slotFavDropped( QDropEvent *, QListViewItem * ) ) ); -+ -+ this->installEventFilter(this); -+ m_tabBar->installEventFilter(this); -+ m_favoriteView->installEventFilter(this); -+ m_recentlyView->installEventFilter(this); -+ m_browserView->leftView()->installEventFilter(this); -+ m_browserView->rightView()->installEventFilter(this); -+ m_systemView->installEventFilter(this); -+ m_exitView->leftView()->installEventFilter(this); -+ m_exitView->rightView()->installEventFilter(this); -+ m_kcommand->lineEdit()->installEventFilter(this); -+ m_searchLabel->installEventFilter(this); -+ m_searchPixmap->installEventFilter(this); -+ m_stacker->installEventFilter(this); -+ -+ emailRegExp = QRegExp("^([\\w\\-]+\\.)*[\\w\\-]+@([\\w\\-]+\\.)*[\\w\\-]+$"); -+ authRegExp = QRegExp("^[a-zA-Z]+://\\w+(:\\w+)?@([\\w\\-]+\\.)*[\\w\\-]+(:\\d+)?(/.*)?$"); -+ uriRegExp = QRegExp("^[a-zA-Z]+://([\\w\\-]+\\.)*[\\w\\-]+(:\\d+)?(/.*)?$"); -+ uri2RegExp = QRegExp("^([\\w\\-]+\\.)+[\\w\\-]+(:\\d+)?(/.*)?$"); -+ -+ m_resizeHandle = new QLabel(this); -+ m_resizeHandle->setBackgroundOrigin( QLabel::ParentOrigin ); -+ m_resizeHandle->setScaledContents(true); -+ m_resizeHandle->setFixedSize( 16, 16 ); -+ m_searchFrame->stackUnder( m_resizeHandle ); -+ m_isresizing = false; -+ -+ m_searchPixmap->setPixmap( BarIcon( "find", 32 ) ); -+ -+ QFont f = font(); -+ f.setPointSize( kMax( 7, (f.pointSize() * 4 / 5 ) + KickerSettings::kickoffFontPointSizeOffset() ) ); -+ m_tabBar->setFont ( f ); -+ f.setPointSize( kMax( 7, (f.pointSize() * 3 / 2 ) + KickerSettings::kickoffFontPointSizeOffset() ) ); -+ m_searchLabel->setFont( f ); -+ -+ static_cast(m_kcommand->lineEdit())->setClickMessage(i18n( "Applications, Contacts and Documents" ) ); -+ -+ bookmarkManager = 0; -+ m_addressBook = 0; -+ m_popupMenu = 0; -+ -+ main_border_tl.load( locate("data", "kicker/pics/main_corner_tl.png" ) ); -+ main_border_tr.load( locate("data", "kicker/pics/main_corner_tr.png" ) ); -+ -+ search_tab_left.load( locate("data", "kicker/pics/search-tab-left.png" ) ); -+ search_tab_right.load( locate("data", "kicker/pics/search-tab-right.png" ) ); -+ search_tab_center.load( locate("data", "kicker/pics/search-tab-center.png" ) ); -+ -+ search_tab_top_left.load( locate("data", "kicker/pics/search-tab-top-left.png" ) ); -+ search_tab_top_right.load( locate("data", "kicker/pics/search-tab-top-right.png" ) ); -+ search_tab_top_center.load( locate("data", "kicker/pics/search-tab-top-center.png" ) ); -+} -+ -+void KMenu::setupUi() -+{ -+ m_stacker = new QWidgetStack( this, "m_stacker" ); -+ m_stacker->setGeometry( QRect( 90, 260, 320, 220 ) ); -+ m_stacker->setSizePolicy( QSizePolicy( (QSizePolicy::SizeType)3, (QSizePolicy::SizeType)3, 1, 1, m_stacker->sizePolicy().hasHeightForWidth() ) ); -+ m_stacker->setPaletteBackgroundColor( QColor( 255, 255, 255 ) ); -+ // m_stacker->setFocusPolicy( QWidget::StrongFocus ); -+ m_stacker->setLineWidth( 0 ); -+ m_stacker->setFocusPolicy(QWidget::NoFocus); -+ connect(m_stacker, SIGNAL(aboutToShow(QWidget*)), SLOT(stackWidgetRaised(QWidget*))); -+ -+ m_kcommand->setName("m_kcommand"); -+} -+ -+KMenu::~KMenu() -+{ -+ saveConfig(); -+ -+ clearSubmenus(); -+ delete m_filterData; -+} -+ -+bool KMenu::eventFilter ( QObject * receiver, QEvent* e) -+{ -+//kdDebug() << "eventFilter receiver=" << receiver->name() << " type=" << e->type() << endl; -+ QWidget* raiseWidget = 0; -+ QRect raiseRect; -+ -+ if (e->type() == QEvent::KeyPress || -+ e->type() == QEvent::MouseButtonPress || -+ e->type() == QEvent::MouseMove -+ || e->type() == QEvent::FocusIn -+ || e->type() == QEvent::Wheel) { -+ QPoint p; -+ -+ if (e->type() == QEvent::MouseMove || e->type() == QEvent::MouseButtonPress) { -+ QMouseEvent* me = static_cast(e); -+ p = me->globalPos(); -+ } -+ else if (e->type() == QEvent::Wheel) { -+ QWheelEvent* we = static_cast(e); -+ p = we->globalPos(); -+ } -+ -+ while (receiver) { -+ if (receiver == m_tabBar && (e->type()!=QEvent::MouseMove || KickerSettings::kickoffSwitchTabsOnHover() ) ) { -+ QTab* s = m_tabBar->selectTab(m_tabBar->mapFromGlobal(p)); -+ if (s && s->identifier() == ApplicationsTab) -+ raiseWidget = m_browserView; -+ if (s && s->identifier() == FavoriteTab) -+ raiseWidget = m_favoriteView; -+ if (s && s->identifier() == HistoryTab) -+ raiseWidget = m_recentlyView; -+ if (s && s->identifier() == ComputerTab) -+ raiseWidget = m_systemView; -+ if (s && s->identifier() == LeaveTab) -+ raiseWidget = m_exitView; -+ -+ if (raiseWidget) -+ raiseRect = QRect( m_tabBar->mapToGlobal(s->rect().topLeft()), -+ s->rect().size()); -+ } -+ -+ /* we do not want hover activation for the search line edit as this can be -+ * pretty disturbing */ -+ if ( (receiver == m_searchPixmap || -+ ( ( receiver == m_searchLabel || receiver==m_kcommand->lineEdit() ) && -+ ( e->type() == QEvent::KeyPress || e->type() == QEvent::Wheel -+ || e->type() == QEvent::MouseButtonPress ) ) ) && -+ !m_isShowing) { -+ raiseWidget = m_searchWidget; -+ raiseRect = QRect( m_searchFrame->mapToGlobal(m_searchFrame->rect().topLeft()), -+ m_searchFrame->size()); -+ } -+ -+ if(raiseWidget) -+ break; -+ if(receiver->isWidgetType()) -+ receiver = static_cast(receiver)->parentWidget(true); -+ else -+ break; -+ } -+ -+ if (e->type() == QEvent::FocusIn && receiver && raiseWidget) { -+ m_searchResultsWidget->setFocusPolicy(QWidget::StrongFocus); -+ m_searchActions->setFocusPolicy(raiseWidget == m_searchWidget ? -+ QWidget::StrongFocus : QWidget::NoFocus); -+ setTabOrder(raiseWidget, m_searchResultsWidget); -+ if (raiseWidget != m_stacker->visibleWidget() -+ && static_cast(receiver)->focusPolicy() == QWidget::NoFocus -+ && m_stacker->id(raiseWidget) >= 0) { -+ -+ m_stacker->raiseWidget(raiseWidget); -+ return true; -+ } -+ -+ if (raiseWidget->focusPolicy() != QWidget::NoFocus) -+ return false; -+ } -+ -+ if (m_sloppyRegion.contains(p)) { -+ if (e->type() == QEvent::MouseButtonPress /*&& m_sloppyTimer.isActive()*/) -+ m_sloppySourceClicked = true; -+ -+ if (!m_sloppyTimer.isActive() || m_sloppySource != raiseRect) { -+ int timeout= style().styleHint(QStyle::SH_PopupMenu_SubMenuPopupDelay); -+ if (m_sloppySourceClicked) -+ timeout = 3000; -+ m_sloppyTimer.start(timeout); -+ } -+ -+ m_sloppyWidget = raiseWidget; -+ m_sloppySource = raiseRect; -+ return false; -+ } -+ } -+ -+ if(e->type() == QEvent::Enter && receiver->isWidgetType()) { -+ static_cast(receiver)->setMouseTracking(true); -+ QToolTip::hide(); -+ } -+ -+ if ( ( e->type() == QEvent::DragEnter || e->type() == QEvent::DragMove ) && -+ raiseWidget == m_favoriteView ) -+ { -+ m_stacker->raiseWidget(m_favoriteView); -+ -+ return false; -+ } -+ -+ // This is a nightmare of a hack, look away. Logic needs -+ // to be moved to the stacker and all widgets in the stacker -+ // must have focusNextPrevChild() overwritten to do nothing -+ if (e->type() == QEvent::KeyPress && !raiseRect.isNull()) { -+ ItemView* view; -+ if (m_browserView==m_stacker->visibleWidget()) -+ view = m_browserView->currentView(); -+ else if (m_exitView==m_stacker->visibleWidget()) -+ view = m_exitView->currentView(); -+ else -+ view = dynamic_cast(m_stacker->visibleWidget()); -+ -+ if (view) -+ { -+ bool handled = true; -+ switch (static_cast(e)->key()) { -+ case Key_Up: -+ if (view->selectedItem()) { -+ view->setSelected(view->selectedItem()->itemAbove(),true); -+ } -+ else { -+ view->setSelected(view->lastItem(),true); -+ } -+ break; -+ case Key_Down: -+ if (view->selectedItem()) { -+ view->setSelected(view->selectedItem()->itemBelow(),true); -+ } -+ else { -+ if (view->firstChild() && view->firstChild()->isSelectable()) -+ view->setSelected(view->firstChild(),true); -+ else if (view->childCount()>2) -+ view->setSelected(view->firstChild()->itemBelow(),true); -+ } -+ break; -+ case Key_Right: -+ if (view->selectedItem() && !static_cast(view->selectedItem())->hasChildren()) -+ break; -+ // nobreak -+ case Key_Enter: -+ case Key_Return: -+ if (view->selectedItem()) -+ view->slotItemClicked(view->selectedItem()); -+ -+ break; -+ case Key_Left: -+ if (m_browserView == m_stacker->visibleWidget() || m_exitView == m_stacker->visibleWidget()) { -+ FlipScrollView* flip = dynamic_cast(m_stacker->visibleWidget()); -+ if (flip->showsBackButton()) { -+ if (m_browserView == m_stacker->visibleWidget()) -+ goSubMenu( m_browserView->currentView()->backPath(), true ); -+ else -+ view->slotItemClicked(view->firstChild()); -+ } -+ break; -+ } -+ // nobreak -+ case Key_Backspace: -+ if (m_browserView == m_stacker->visibleWidget() || m_exitView == m_stacker->visibleWidget()) { -+ FlipScrollView* flip = dynamic_cast(m_stacker->visibleWidget()); -+ if (flip->showsBackButton()) { -+ if (m_browserView == m_stacker->visibleWidget()) -+ goSubMenu( m_browserView->currentView()->backPath(), true ); -+ else -+ view->slotItemClicked(view->firstChild()); -+ } -+ } -+ -+ break; -+ default: -+ handled = false; -+ } -+ -+ if (handled) -+ view->ensureItemVisible(view->selectedItem()); -+ -+ return handled; -+ } -+ } -+ -+ bool r = KMenuBase::eventFilter(receiver, e); -+ -+ if (!r && raiseWidget) -+ m_stacker->raiseWidget(raiseWidget); -+ -+ if (e->type() == QEvent::Wheel && raiseWidget ) -+ { -+ // due to an ugly Qt bug we have to kill wheel events -+ // that cause focus switches -+ r = true; -+ } -+ -+ if (e->type() == QEvent::Enter && receiver == m_stacker) -+ { -+ QRect r(m_stacker->mapToGlobal(QPoint(-8,-32)), m_stacker->size()); -+ r.setSize(r.size()+QSize(16,128)); -+ -+ m_sloppyRegion = QRegion(r); -+ } -+ -+ // redo the sloppy region -+ if (e->type() == QEvent::MouseMove && !r && raiseWidget) -+ { -+ QPointArray points(4); -+ -+ // hmm, eventually this should be mouse position + 10px, not -+ // just worst case. but worst case seems to work fine enough. -+ QPoint edge(raiseRect.topLeft()); -+ edge.setX(edge.x()+raiseRect.center().x()); -+ -+ if (m_orientation == BottomUp) -+ { -+ points.setPoint(0, m_stacker->mapToGlobal(m_stacker->rect().bottomLeft())); -+ points.setPoint(1, m_stacker->mapToGlobal(m_stacker->rect().bottomRight())); -+ -+ edge.setY(edge.y()+raiseRect.height()); -+ points.setPoint(2, edge+QPoint(+raiseRect.width()/4,0)); -+ points.setPoint(3, edge+QPoint(-raiseRect.width()/4,0)); -+ } -+ else -+ { -+ points.setPoint(0, m_stacker->mapToGlobal(m_stacker->rect().topLeft())); -+ points.setPoint(1, m_stacker->mapToGlobal(m_stacker->rect().topRight())); -+ points.setPoint(2, edge+QPoint(-raiseRect.width()/4,0)); -+ points.setPoint(3, edge+QPoint(+raiseRect.width()/4,0)); -+ } -+ -+ m_sloppyRegion = QRegion(points); -+ } -+ -+ return r; -+} -+ -+void KMenu::slotSloppyTimeout() -+{ -+ if (m_sloppyRegion.contains(QCursor::pos()) && !m_sloppySource.isNull()) -+ { -+ if ( m_sloppySource.contains(QCursor::pos())) -+ { -+ m_stacker->raiseWidget(m_sloppyWidget); -+ -+ m_sloppyWidget = 0; -+ m_sloppySource = QRect(); -+ m_sloppyRegion = QRegion(); -+ m_sloppySourceClicked = false; -+ } -+ } -+ m_sloppyTimer.stop(); -+} -+ -+void KMenu::paintSearchTab( bool active ) -+{ -+ QPixmap canvas( m_searchFrame->size() ); -+ QPainter p( &canvas ); -+ -+ QPixmap pix; -+ -+ if ( m_orientation == BottomUp ) -+ pix.load( locate("data", "kicker/pics/search-gradient.png" ) ); -+ else -+ pix.load( locate("data", "kicker/pics/search-gradient-topdown.png" ) ); -+ -+ pix.convertFromImage( pix.convertToImage().scale(pix.width(), m_searchFrame->height())); -+ p.drawTiledPixmap( 0, 0, m_searchFrame->width(), m_searchFrame->height(), pix ); -+ -+ if ( active ) { -+ -+ m_tabBar->deactivateTabs(true); -+ -+ p.setBrush( Qt::white ); -+ p.setPen( Qt::NoPen ); -+ -+ if ( m_orientation == BottomUp ) { -+ search_tab_center.convertFromImage( search_tab_center.convertToImage().scale(search_tab_center.width(), m_searchFrame->height())); -+ p.drawTiledPixmap( search_tab_left.width(), 0, m_searchFrame->width()-search_tab_left.width()-search_tab_right.width(), m_searchFrame->height(), search_tab_center ); -+ -+ search_tab_left.convertFromImage( search_tab_left.convertToImage().scale(search_tab_left.width(), m_searchFrame->height())); -+ p.drawPixmap( 0, 0, search_tab_left ); -+ -+ search_tab_right.convertFromImage( search_tab_right.convertToImage().scale(search_tab_right.width(), m_searchFrame->height())); -+ p.drawPixmap( m_searchFrame->width()-search_tab_right.width(), 0, search_tab_right ); -+ } -+ else { -+ search_tab_top_center.convertFromImage( search_tab_top_center.convertToImage().scale(search_tab_top_center.width(), m_searchFrame->height())); -+ p.drawTiledPixmap( search_tab_top_left.width(), 0, m_searchFrame->width()-search_tab_top_left.width()-search_tab_top_right.width(), m_searchFrame->height(), search_tab_top_center ); -+ -+ search_tab_top_left.convertFromImage( search_tab_top_left.convertToImage().scale(search_tab_top_left.width(), m_searchFrame->height())); -+ p.drawPixmap( 0, 0, search_tab_top_left ); -+ -+ search_tab_top_right.convertFromImage( search_tab_top_right.convertToImage().scale(search_tab_top_right.width(), m_searchFrame->height())); -+ p.drawPixmap( m_searchFrame->width()-search_tab_top_right.width(), 0, search_tab_top_right ); -+ } -+ } -+ else -+ m_tabBar->deactivateTabs(false); -+ -+ p.end(); -+ m_searchFrame->setPaletteBackgroundPixmap( canvas ); -+} -+ -+void KMenu::stackWidgetRaised(QWidget* raiseWidget) -+{ -+ paintSearchTab(raiseWidget == m_searchWidget); -+ -+ if (raiseWidget == m_browserView) { -+ if ( m_tabBar->currentTab() == ApplicationsTab) -+ slotGoSubMenu(QString::null); -+ if (m_browserDirty ) { -+ createNewProgramList(); -+ m_browserView->prepareRightMove(); -+ m_browserView->currentView()->clear(); -+ fillSubMenu(QString::null, m_browserView->currentView()); -+ m_browserDirty = false; -+ } -+ } -+ else if (raiseWidget == m_recentlyView) { -+ if (m_recentDirty) -+ updateRecent(); -+ } -+ else if (raiseWidget == m_exitView) { -+ if (m_tabBar->currentTab() == LeaveTab) -+ slotGoExitMainMenu(); -+ } -+ -+ -+#warning Qtab fixme -+#if 0 -+ else if (raiseWidget == m_systemView) -+ frame = m_system; -+ else if (raiseWidget == m_favoriteView) -+ frame = m_btnFavorites; -+ if (!frame) -+ return; -+ -+ if ( m_activeTab == frame ) -+ return; -+ -+ paintTab( m_activeTab, false ); -+ paintTab( frame, true ); -+ -+ // if (dynamic_cast(raiseWidget)) -+ // m_activeTab->setFocusProxy(static_cast(raiseWidget)->viewport()); -+ -+ if (0 && /*raiseWidget == m_stacker->visibleWidget() &&*/ !raiseWidget->hasFocus()) { -+ -+ if (dynamic_cast(raiseWidget)) -+ static_cast(raiseWidget)->viewport()->setFocus(); -+ else -+ raiseWidget->setFocus(); -+ } -+ -+ m_activeTab = frame; -+ -+ m_sloppyRegion = QRegion(); -+ m_sloppyTimer.stop(); -+ -+ ItemView* view; -+ if (raiseWidget == m_browserView) -+ view = m_browserView->currentView(); -+ else if (raiseWidget == m_exitView) -+ view = m_exitView->currentView(); -+ else -+ view = dynamic_cast(m_stacker->visibleWidget()); -+ if (view && !view->selectedItem()) { -+ if (view->firstChild() && view->firstChild()->isSelectable()) { -+ view->setSelected(view->firstChild(),true); -+ } -+ else if (view->childCount()>1) { -+ view->setSelected(view->firstChild()->itemBelow(),true); -+ } -+ } -+#endif -+} -+ -+void KMenu::paletteChanged() -+{ -+} -+ -+void KMenu::tabClicked(QTab* t) -+{ -+ if (t==m_tabs[ApplicationsTab]) -+ slotGoSubMenu(QString::null); -+ else if (t==m_tabs[LeaveTab]) -+ slotGoExitMainMenu(); -+} -+ -+void KMenu::slotGoBack() -+{ -+ goSubMenu( m_browserView->currentView()->backPath() ); -+} -+ -+void KMenu::slotGoExitMainMenu() -+{ -+ if (m_exitView->currentView()==m_exitView->rightView()) { -+ m_exitView->prepareLeftMove(false); -+ m_exitView->showBackButton(false); -+ m_exitView->flipScroll(QString::null); -+ } -+} -+ -+void KMenu::slotGoExitSubMenu(const QString& url) -+{ -+ m_exitView->prepareRightMove(); -+ m_exitView->showBackButton(true); -+ -+ int nId = serviceMenuEndId() + 1; -+ int index = 1; -+ -+ if (url=="kicker:/restart/") { -+ QStringList rebootOptions; -+ int def, cur; -+ if ( DM().bootOptions( rebootOptions, def, cur ) ) -+ { -+ if ( cur == -1 ) -+ cur = def; -+ -+ int boot_index = 0; -+ QStringList::ConstIterator it = rebootOptions.begin(); -+ for (; it != rebootOptions.end(); ++it, ++boot_index) -+ { -+ -+ QString option = i18n( "Start '%1'" ).arg( *it ); -+ if (boot_index == cur) -+ option = i18n("Start '%1' (current)").arg( *it ); -+ m_exitView->rightView()->insertItem( "reload", option, -+ i18n( "Restart and boot directly into '%1'").arg( *it ), -+ QString( "kicker:/restart_%1" ).arg( boot_index ), nId++, index++ ); -+ } -+ m_exitView->rightView()->insertHeader( nId++, "kicker:/restart/" ); -+ } -+ } -+ else /*if (url=="kicker:/switchuser/") */{ -+ m_exitView->rightView()->insertItem( "switchuser", i18n( "Start New Session" ), -+ i18n( "Start a parallel session" ), "kicker:/switchuser", nId++, index++ ); -+ -+ m_exitView->rightView()->insertItem( "lock", i18n( "Lock Current && Start New Session").replace("&&","&"), -+ i18n( "Lock screen and start a parallel session" ), "kicker:/switchuserafterlock", nId++, index++ ); -+ -+ SessList sess; -+ if (DM().localSessions( sess )) { -+ if (sess.count()>1) -+ m_exitView->rightView()->insertSeparator( nId++, QString::null, index++ ); -+ for (SessList::ConstIterator it = sess.begin(); it != sess.end(); ++it) { -+ if ((*it).vt && !(*it).self) { -+ QString user, loc; -+ DM().sess2Str2( *it, user, loc ); -+ QStringList list = QStringList::split(":", user); -+ m_exitView->rightView()->insertItem( "switchuser", i18n( "Switch to Session of User '%1'").arg(list[0]), -+ i18n("Session: %1").arg(list[1].mid(1)+", "+loc) , QString("kicker:/switchuser_%1").arg((*it).vt), nId++, index++ ); -+ } -+ } -+ } -+ -+ m_exitView->rightView()->insertHeader( nId++, "kicker:/switchuser/" ); -+ } -+ m_exitView->flipScroll(QString::null); -+} -+ -+void KMenu::slotGoSubMenu(const QString& relPath) -+{ -+ goSubMenu(relPath); -+} -+ -+void KMenu::goSubMenu(const QString& relPath, bool keyboard) -+{ -+ if ( relPath.startsWith( "kicker:/goup/" ) ) -+ { -+ QString rel = relPath.mid( strlen( "kicker:/goup/" ) ); -+ int index = rel.length() - 1; -+ if ( rel.endsWith( "/" ) ) -+ index--; -+ index = rel.findRev( '/', index ); -+ kdDebug() << "goup, rel '" << rel << "' " << index << endl; -+ QString currel = rel; -+ rel = rel.left( index + 1 ); -+ if ( rel == "/" ) -+ rel = QString::null; -+ -+ kdDebug() << "goup, rel '" << rel << "' " << rel.isEmpty() << endl; -+ fillSubMenu( rel, m_browserView->prepareLeftMove() ); -+ m_browserView->flipScroll(keyboard ? currel : QString::null); -+ return; -+ } else if (relPath.isEmpty()) -+ { -+ if (m_browserView->currentView()->path.isEmpty()) -+ return; -+ fillSubMenu( relPath, m_browserView->prepareLeftMove() ); -+ } else if ( relPath.startsWith( "kicker:/new/" ) ) -+ { -+ ItemView* view = m_browserView->prepareRightMove(); -+ m_browserView->showBackButton( true ); -+ -+ int nId = serviceMenuEndId() + 1; -+ view->insertHeader( nId++, "new/" ); -+ int index = 2; -+ for (QStringList::ConstIterator it = m_newInstalledPrograms.begin(); -+ it != m_newInstalledPrograms.end(); ++it) { -+ KService::Ptr p = KService::serviceByStorageId((*it)); -+ view->insertMenuItem(p, nId++, index++); -+ } -+ } else -+ { -+ //m_browserView->clear(); -+ fillSubMenu(relPath, m_browserView->prepareRightMove()); -+ } -+ m_browserView->flipScroll(keyboard ? "kicker:/goup/": QString::null); -+} -+ -+void KMenu::fillSubMenu(const QString& relPath, ItemView *view) -+{ -+ kdDebug() << "fillSubMenu() " << relPath << endl; -+ KServiceGroup::Ptr root = KServiceGroup::group(relPath); -+ Q_ASSERT( root ); -+ -+ KServiceGroup::List list = root->entries(true, true, true, KickerSettings:: -+ menuEntryFormat() == KickerSettings::DescriptionAndName || KickerSettings::menuEntryFormat() -+ == KickerSettings::DescriptionOnly); -+ -+ int nId = serviceMenuStartId(); -+ m_browserView->showBackButton( !relPath.isEmpty() ); -+ if ( !relPath.isEmpty() ) -+ { -+ view->insertHeader( nId++, relPath ); -+ } -+ else if ( m_newInstalledPrograms.count() ) { -+ KMenuItem *item = view->insertItem( "clock", i18n( "New Applications" ), -+ QString::null, "kicker:/new/", nId++, -1 ); -+ item->setHasChildren( true ); -+ view->insertSeparator( nId++, QString::null, -1 ); -+ } -+ -+ view->path = relPath; -+ -+ fillMenu (root, list, relPath, view, nId); -+} -+ -+void KMenu::fillMenu(KServiceGroup::Ptr& -+#ifdef KDELIBS_SUSE -+ _root -+#endif -+ , KServiceGroup::List& _list, -+ const QString& _relPath, -+ ItemView* view, -+ int& id) -+{ -+ bool separatorNeeded = false; -+ KServiceGroup::List::ConstIterator it = _list.begin(); -+#ifdef KDELIBS_SUSE -+ KSortableValueList,QCString> slist; -+ KSortableValueList,QCString> glist; -+ QMap specialTitle; -+ QMap categoryIcon; -+ QMap shortenedMenuPath; -+#endif -+ -+ for (; it != _list.end(); ++it) -+ { -+ KSycocaEntry * e = *it; -+ -+ if (e->isType(KST_KServiceGroup)) -+ { -+ KServiceGroup::Ptr g(static_cast(e)); -+#ifdef KDELIBS_SUSE -+ if ( true /*KickerSettings::reduceMenuDepth()*/ && g->SuSEshortMenu() ){ -+ KServiceGroup::List l = g->entries(true, true /*excludeNoDisplay_*/ ); -+ if ( l.count() == 1 ) { -+ // the special case, we want to short the menu. -+ // TOFIX? : this works only for one level -+ KServiceGroup::List::ConstIterator _it=l.begin(); -+ KSycocaEntry *_e = *_it; -+ if (_e->isType(KST_KService)) { -+ KService::Ptr s(static_cast(_e)); -+ QString key; -+ if ( g->SuSEgeneralDescription() ) { -+ // we use the application name -+ key = s->name(); -+ } -+ else { -+ // we use the normal menu description -+ key = s->name(); -+ if( !s->genericName().isEmpty() && g->caption()!=s->genericName()) { -+ if (KickerSettings::menuEntryFormat() == KickerSettings::NameAndDescription) -+ key = s->name() + " (" + g->caption() + ")"; -+ else if (KickerSettings::menuEntryFormat() == KickerSettings::DescriptionAndName) -+ key = g->caption() + " (" + s->name() + ")"; -+ else if (KickerSettings::menuEntryFormat() == KickerSettings::DescriptionOnly) -+ key = g->caption(); -+ } -+ } -+ specialTitle.insert( _e->name(), key ); -+ categoryIcon.insert( _e->name(), g->icon() ); -+ slist.insert( key.local8Bit(), _e ); -+ shortenedMenuPath.insert( _e->name(), g->relPath() ); -+ // and escape from here -+ continue; -+ } -+ } -+ } -+ glist.insert( g->caption().local8Bit(), e ); -+ }else if( e->isType(KST_KService)) { -+ KService::Ptr s(static_cast(e)); -+ slist.insert( s->name().local8Bit(), e ); -+ } else -+ slist.insert( e->name().local8Bit(), e ); -+ } -+ -+ _list = _root->SuSEsortEntries( slist, glist, true /*excludeNoDisplay_*/, true ); -+ it = _list.begin(); -+ -+ for (; it != _list.end(); ++it) { -+ -+ KSycocaEntry * e = *it; -+ -+ if (e->isType(KST_KServiceGroup)) { -+ -+ KServiceGroup::Ptr g(static_cast(e)); -+ if ( true /*KickerSettings::reduceMenuDepth()*/ && g->SuSEshortMenu() ){ -+ KServiceGroup::List l = g->entries(true, true /*excludeNoDisplay_*/ ); -+ if ( l.count() == 1 ) { -+ continue; -+ } -+ } -+ // standard sub menu -+#endif -+ QString groupCaption = g->caption(); -+ -+ // Avoid adding empty groups. -+ KServiceGroup::Ptr subMenuRoot = KServiceGroup::group(g->relPath()); -+ -+ int nbChildCount = subMenuRoot->childCount(); -+ if (nbChildCount == 0 && !g->showEmptyMenu()) -+ { -+ continue; -+ } -+ -+ bool is_description = KickerSettings::menuEntryFormat() == KickerSettings::DescriptionAndName || -+ KickerSettings::menuEntryFormat() == KickerSettings::DescriptionOnly; -+ -+ QString inlineHeaderName = g->showInlineHeader() ? groupCaption : ""; -+ -+ if ( nbChildCount == 1 && g->allowInline() && g->inlineAlias()) -+ { -+ KServiceGroup::Ptr element = KServiceGroup::group(g->relPath()); -+ if ( element ) -+ { -+ //just one element -+ -+ KServiceGroup::List listElement = element->entries(true, true, true, is_description ); -+ KSycocaEntry * e1 = *( listElement.begin() ); -+ if ( e1->isType( KST_KService ) ) -+ { -+ KService::Ptr s(static_cast(e1)); -+ view->insertMenuItem(s, id++, -1, 0); -+ continue; -+ } -+ } -+ } -+ -+ if (g->allowInline() && ((nbChildCount <= g->inlineValue() ) || (g->inlineValue() == 0))) -+ { -+ //inline all entries -+ KServiceGroup::Ptr rootElement = KServiceGroup::group(g->relPath()); -+ -+ if (!rootElement || !rootElement->isValid()) -+ { -+ break; -+ } -+ -+ -+ KServiceGroup::List listElement = rootElement->entries(true, true, true, is_description ); -+ -+#if 0 -+ if ( !g->inlineAlias() && !inlineHeaderName.isEmpty() ) -+ { -+ int mid = view->insertItem(new PopupMenuTitle(inlineHeaderName, font()), id++, id, 0); -+ m_browserView->setItemEnabled( mid, false ); -+ } -+#endif -+ -+ fillMenu( rootElement, listElement, g->relPath(), 0, id ); -+ continue; -+ } -+ -+ // Ignore dotfiles. -+ if ((g->name().at(0) == '.')) -+ { -+ continue; -+ } -+ -+ KMenuItem *item = view->insertItem(g->icon(), groupCaption, QString::null, g->relPath(), id++, -1); -+ item->setMenuPath(g->relPath()); -+ item->setHasChildren( true ); -+ -+#warning FIXME -+#if 0 -+ PanelServiceMenu * m = -+ newSubMenu(g->name(), g->relPath(), this, g->name().utf8(), inlineHeaderName); -+ m->setCaption(groupCaption); -+ -+ QIconSet iconset = KickerLib::menuIconSet(g->icon()); -+ -+ if (separatorNeeded) -+ { -+ insertSeparator(); -+ separatorNeeded = false; -+ } -+ -+ int newId = insertItem(iconset, groupCaption, m, id++); -+ entryMap_.insert(newId, static_cast(g)); -+ // We have to delete the sub menu our selves! (See Qt docs.) -+ subMenus.append(m); -+#endif -+ } -+ if (e->isType(KST_KService)) -+ { -+ KService::Ptr s(static_cast(e)); -+ if (_relPath.isEmpty()) { -+ QStringList favs = KickerSettings::favorites(); -+ if (favs.find(s->storageId())!=favs.end()) -+ continue; -+ } -+#ifdef KDELIBS_SUSE -+ KMenuItem *item = view->insertMenuItem(s, id++, -1, 0, QString::null, specialTitle[s->name()], categoryIcon[s->name()] ); -+ if (shortenedMenuPath[s->name()].isEmpty()) -+ item->setMenuPath(_relPath+s->menuId()); -+ else -+ item->setMenuPath(shortenedMenuPath[s->name()]+s->menuId()); -+#else -+ KMenuItem *item = view->insertMenuItem(s, id++, -1); -+ item->setMenuPath(_relPath+s->menuId()); -+#endif -+ } -+ else if (e->isType(KST_KServiceSeparator)) -+ { -+ separatorNeeded = true; -+ } -+ } -+ -+ view->slotMoveContent(); -+} -+ -+void KMenu::initialize() -+{ -+ static bool m_initialized=false; -+ if (m_initialized) -+ return; -+ m_initialized = true; -+ -+ kdDebug(1210) << "KMenu::initialize()" << endl; -+ -+ // in case we've been through here before, let's disconnect -+ disconnect(kapp, SIGNAL(kdisplayPaletteChanged()), -+ this, SLOT(paletteChanged())); -+ connect(kapp, SIGNAL(kdisplayPaletteChanged()), -+ this, SLOT(paletteChanged())); -+ -+ /* -+ If the user configured ksmserver to -+ */ -+ KConfig ksmserver("ksmserverrc", false, false); -+ ksmserver.setGroup("General"); -+ connect( m_branding, SIGNAL(clicked()), SLOT(slotOpenHomepage())); -+ m_tabBar->setTabEnabled(LeaveTab, kapp->authorize("logout")); -+ -+ // load search field history -+ QStringList histList = KickerSettings::history(); -+ int maxHistory = KickerSettings::historyLength(); -+ -+ bool block = m_kcommand->signalsBlocked(); -+ m_kcommand->blockSignals( true ); -+ m_kcommand->setMaxCount( maxHistory ); -+ m_kcommand->setHistoryItems( histList ); -+ m_kcommand->blockSignals( block ); -+ -+ QStringList compList = KickerSettings::completionItems(); -+ if( compList.isEmpty() ) -+ m_kcommand->completionObject()->setItems( histList ); -+ else -+ m_kcommand->completionObject()->setItems( compList ); -+ -+ KCompletionBox* box = m_kcommand->completionBox(); -+ if (box) -+ box->setActivateOnSelect( false ); -+ -+ m_finalFilters = KURIFilter::self()->pluginNames(); -+ m_finalFilters.remove("kuriikwsfilter"); -+ -+ m_middleFilters = m_finalFilters; -+ m_middleFilters.remove("localdomainurifilter"); -+ -+ QStringList favs = KickerSettings::favorites(); -+ if (favs.isEmpty()) { -+ QFile f(locate("data", "kicker/default-favs")); -+ if (f.open(IO_ReadOnly)) { -+ QTextStream is(&f); -+ -+ while (!is.eof()) -+ favs << is.readLine(); -+ -+ f.close(); -+ } -+ KickerSettings::setFavorites(favs); -+ KickerSettings::writeConfig(); -+ } -+ -+ int nId = serviceMenuEndId() + 1; -+ int index = 1; -+ for (QStringList::ConstIterator it = favs.begin(); it != favs.end(); ++it) -+ { -+ if ((*it)[0]=='/') { -+ KDesktopFile df((*it),true); -+ QString url = df.readURL(); -+ if (!KURL(url).isLocalFile() || QFile::exists(url.replace("file://",QString::null))) -+ m_favoriteView->insertItem(df.readIcon(),df.readName(),df.readGenericName(), url, nId++, index++); -+ } -+ else { -+ KService::Ptr p = KService::serviceByStorageId((*it)); -+ m_favoriteView->insertMenuItem(p, nId++, index++); -+ } -+ } -+ -+ //nId = m_favoriteView->insertSeparator( nId, QString::null, index++ ); -+// m_favoriteView->insertDocument(KURL("help:/khelpcenter/userguide/index.html"), nId++); -+ -+ insertStaticItems(); -+ -+ m_stacker->raiseWidget (m_favoriteView); -+} -+ -+void KMenu::insertStaticExitItems() -+{ -+ int nId = serviceMenuEndId() + 1; -+ int index = 1; -+ -+ m_exitView->leftView()->insertSeparator( nId++, i18n("Session"), index++ ); -+ if (kapp->authorize("logout")) -+ m_exitView->leftView()->insertItem( "undo", i18n( "Logout" ), -+ i18n( "End session" ), "kicker:/logout", nId++, index++ ); -+ if (kapp->authorize("lock_screen")) -+ m_exitView->leftView()->insertItem( "lock", i18n( "Lock" ), -+ i18n( "Lock screen" ), "kicker:/lock", nId++, index++ ); -+ -+ KConfig ksmserver("ksmserverrc", false, false); -+ ksmserver.setGroup("General"); -+ if (ksmserver.readEntry( "loginMode" ) == "restoreSavedSession") -+ { -+ m_exitView->leftView()->insertItem("filesave", i18n("Save Session"), -+ i18n("Save current Session for next login"), -+ "kicker:/savesession", nId++, index++ ); -+ } -+ if (DM().isSwitchable() && kapp->authorize("switch_user")) -+ { -+ KMenuItem *switchuser = m_exitView->leftView()->insertItem( "switchuser", i18n( "Switch User" ), -+ i18n( "Manage parallel sessions" ), "kicker:/switchuser/", nId++, index++ ); -+ switchuser->setHasChildren(true); -+ } -+ -+ bool maysd = false; -+ if (ksmserver.readBoolEntry( "offerShutdown", true ) && DM().canShutdown()) -+ maysd = true; -+ -+ if ( maysd ) -+ { -+ m_exitView->leftView()->insertSeparator( nId++, i18n("System"), index++ ); -+ m_exitView->leftView()->insertItem( "exit", i18n( "Shutdown Computer" ), -+ i18n( "Turn off computer" ), "kicker:/shutdown", nId++, index++ ); -+ -+ m_exitView->leftView()->insertItem( "reload", i18n( "&Restart Computer" ).replace("&",""), -+ i18n( "Restart and boot the default system" ), -+ "kicker:/restart", nId++, index++ ); -+ -+ insertSuspendOption(nId, index); -+ -+ int def, cur; -+ QStringList dummy_opts; -+ if ( DM().bootOptions( dummy_opts, def, cur ) ) -+ { -+ -+ KMenuItem *restart = m_exitView->leftView()->insertItem( "reload", i18n( "Start Operating System" ), -+ i18n( "Restart and boot another operating system" ), -+ "kicker:/restart/", nId++, index++ ); -+ restart->setHasChildren(true); -+ } -+ } -+} -+ -+void KMenu::insertStaticItems() -+{ -+ insertStaticExitItems(); -+ -+ int nId = serviceMenuEndId() + 10; -+ int index = 1; -+ -+ m_systemView->insertSeparator( nId++, i18n("Applications"), index++); -+ -+ KService::Ptr p = KService::serviceByStorageId("/usr/share/applications/YaST.desktop"); -+ m_systemView->insertMenuItem(p, nId++, index++); -+ -+ m_systemView->insertItem( "info", i18n( "System Information" ), -+ "sysinfo:/", "sysinfo:/", nId++, index++ ); -+ -+ m_systemView->insertSeparator( nId++, i18n("System Folders"), index++ ); -+ -+ m_systemView->insertItem( "folder_home", i18n( "Home Folder" ), -+ QDir::homeDirPath(), "file://"+QDir::homeDirPath(), nId++, index++ ); -+ -+ if ( KStandardDirs::exists( KGlobalSettings::documentPath() + "/" ) ) -+ { -+ QString documentPath = KGlobalSettings::documentPath(); -+ if ( documentPath.endsWith( "/" ) ) -+ documentPath = documentPath.left( documentPath.length() - 1 ); -+ if (documentPath!=QDir::homeDirPath()) -+ m_systemView->insertItem( "folder_man", i18n( "My Documents" ), documentPath, documentPath, nId++, index++ ); -+ } -+ -+ m_systemView->insertItem( "network", i18n( "Network Folders" ), -+ "remote:/", "remote:/", nId++, index++ ); -+ -+ m_mediaWatcher = new MediaWatcher( this ); -+ connect( m_mediaWatcher, SIGNAL( mediumChanged() ), SLOT( updateMedia() ) ); -+ m_media_id = 0; -+ -+ connect(&m_mediaFreeTimer, SIGNAL(timeout()), SLOT( updateMedia())); -+} -+ -+int KMenu::insertClientMenu(KickerClientMenu *) -+{ -+#if 0 -+ int id = client_id; -+ clients.insert(id, p); -+ return id; -+#endif -+ return 0; -+} -+ -+void KMenu::removeClientMenu(int) -+{ -+#if 0 -+ clients.remove(id); -+ slotClear(); -+#endif -+} -+ -+extern int kicker_screen_number; -+ -+void KMenu::slotLock() -+{ -+ kdDebug() << "slotLock " << endl; -+ accept(); -+ QCString appname( "kdesktop" ); -+ if ( kicker_screen_number ) -+ appname.sprintf("kdesktop-screen-%d", kicker_screen_number); -+ kapp->dcopClient()->send(appname, "KScreensaverIface", "lock()", ""); -+} -+ -+void KMenu::slotOpenHomepage() -+{ -+ accept(); -+ kapp->invokeBrowser("http://opensuse.org"); -+} -+ -+void KMenu::slotLogout() -+{ -+ kapp->requestShutDown(); -+} -+ -+void KMenu::slotPopulateSessions() -+{ -+ int p = 0; -+ DM dm; -+ -+ sessionsMenu->clear(); -+ if (kapp->authorize("start_new_session") && (p = dm.numReserve()) >= 0) -+ { -+ if (kapp->authorize("lock_screen")) -+ sessionsMenu->insertItem(/*SmallIconSet("lockfork"),*/ i18n("Lock Current && Start New Session"), 100 ); -+ sessionsMenu->insertItem(SmallIconSet("fork"), i18n("Start New Session"), 101 ); -+ if (!p) { -+ sessionsMenu->setItemEnabled( 100, false ); -+ sessionsMenu->setItemEnabled( 101, false ); -+ } -+ sessionsMenu->insertSeparator(); -+ } -+ SessList sess; -+ if (dm.localSessions( sess )) -+ for (SessList::ConstIterator it = sess.begin(); it != sess.end(); ++it) { -+ int id = sessionsMenu->insertItem( DM::sess2Str( *it ), (*it).vt ); -+ if (!(*it).vt) -+ sessionsMenu->setItemEnabled( id, false ); -+ if ((*it).self) -+ sessionsMenu->setItemChecked( id, true ); -+ } -+} -+ -+void KMenu::slotSessionActivated( int ent ) -+{ -+ if (ent == 100) -+ doNewSession( true ); -+ else if (ent == 101) -+ doNewSession( false ); -+ else if (!sessionsMenu->isItemChecked( ent )) -+ DM().lockSwitchVT( ent ); -+} -+ -+void KMenu::doNewSession( bool lock ) -+{ -+ int result = KMessageBox::warningContinueCancel( -+ kapp->desktop()->screen(kapp->desktop()->screenNumber(this)), -+ i18n("

    You have chosen to open another desktop session.
    " -+ "The current session will be hidden " -+ "and a new login screen will be displayed.
    " -+ "An F-key is assigned to each session; " -+ "F%1 is usually assigned to the first session, " -+ "F%2 to the second session and so on. " -+ "You can switch between sessions by pressing " -+ "Ctrl, Alt and the appropriate F-key at the same time. " -+ "Additionally, the KDE Panel and Desktop menus have " -+ "actions for switching between sessions.

    ") -+ .arg(7).arg(8), -+ i18n("Warning - New Session"), -+ KGuiItem(i18n("&Start New Session"), "fork"), -+ ":confirmNewSession", -+ KMessageBox::PlainCaption | KMessageBox::Notify); -+ -+ if (result==KMessageBox::Cancel) -+ return; -+ -+ if (lock) -+ slotLock(); -+ -+ DM().startReserve(); -+} -+ -+void KMenu::searchAccept() -+{ -+ QString cmd = m_kcommand->currentText().stripWhiteSpace(); -+ -+ bool logout = (cmd == "logout"); -+ bool lock = (cmd == "lock"); -+ -+ addToHistory(); -+ -+ if ( !logout && !lock ) -+ { -+ // first try if we have any search action -+ if (m_searchResultsWidget->currentItem()) { -+ m_searchResultsWidget->slotItemClicked(m_searchResultsWidget->currentItem()); -+ return; -+ } -+ } -+ -+ accept(); -+ saveConfig(); -+ -+ if ( logout ) -+ { -+ kapp->propagateSessionManager(); -+ kapp->requestShutDown(); -+ } -+ if ( lock ) -+ { -+ QCString appname( "kdesktop" ); -+ int kicker_screen_number = qt_xscreen(); -+ if ( kicker_screen_number ) -+ appname.sprintf("kdesktop-screen-%d", kicker_screen_number); -+ kapp->dcopClient()->send(appname, "KScreensaverIface", "lock()", ""); -+ } -+} -+ -+bool KMenu::runCommand() -+{ -+ kdDebug() << "runCommand() " << m_kcommand->lineEdit()->text() << endl; -+ // Ignore empty commands... -+ if ( m_kcommand->lineEdit()->text().isEmpty() ) -+ return true; -+ -+ accept(); -+ -+ if (input_timer->isActive ()) -+ input_timer->stop (); -+ -+ // Make sure we have an updated data -+ parseLine( true ); -+ -+ bool block = m_kcommand->signalsBlocked(); -+ m_kcommand->blockSignals( true ); -+ m_kcommand->clearEdit(); -+ m_kcommand->setFocus(); -+ m_kcommand->reset(); -+ m_kcommand->blockSignals( block ); -+ -+ -+ QString cmd; -+ KURL uri = m_filterData->uri(); -+ if ( uri.isLocalFile() && !uri.hasRef() && uri.query().isEmpty() ) -+ cmd = uri.path(); -+ else -+ cmd = uri.url(); -+ -+ QString exec; -+ -+ switch( m_filterData->uriType() ) -+ { -+ case KURIFilterData::LOCAL_FILE: -+ case KURIFilterData::LOCAL_DIR: -+ case KURIFilterData::NET_PROTOCOL: -+ case KURIFilterData::HELP: -+ { -+ // No need for kfmclient, KRun does it all (David) -+ (void) new KRun( m_filterData->uri(), parentWidget()); -+ return false; -+ } -+ case KURIFilterData::EXECUTABLE: -+ { -+ if( !m_filterData->hasArgsAndOptions() ) -+ { -+ // Look for desktop file -+ KService::Ptr service = KService::serviceByDesktopName(cmd); -+ if (service && service->isValid() && service->type() == "Application") -+ { -+ notifyServiceStarted(service); -+ KRun::run(*service, KURL::List()); -+ return false; -+ } -+ } -+ } -+ // fall-through to shell case -+ case KURIFilterData::SHELL: -+ { -+ if (kapp->authorize("shell_access")) -+ { -+ exec = cmd; -+ -+ if( m_filterData->hasArgsAndOptions() ) -+ cmd += m_filterData->argsAndOptions(); -+ -+ break; -+ } -+ else -+ { -+ KMessageBox::sorry( this, i18n("
    %1
    \n" -+ "You do not have permission to execute " -+ "this command.") -+ .arg( QStyleSheet::convertFromPlainText(cmd) )); -+ return true; -+ } -+ } -+ case KURIFilterData::UNKNOWN: -+ case KURIFilterData::ERROR: -+ default: -+ { -+ // Look for desktop file -+ KService::Ptr service = KService::serviceByDesktopName(cmd); -+ if (service && service->isValid() && service->type() == "Application") -+ { -+ notifyServiceStarted(service); -+ KRun::run(*service, KURL::List(), this); -+ return false; -+ } -+ -+ service = KService::serviceByName(cmd); -+ if (service && service->isValid() && service->type() == "Application") -+ { -+ notifyServiceStarted(service); -+ KRun::run(*service, KURL::List(), this); -+ return false; -+ } -+ -+ KMessageBox::sorry( this, i18n("
    %1
    \n" -+ "Could not run the specified command.") -+ .arg( QStyleSheet::convertFromPlainText(cmd) )); -+ return true; -+ } -+ } -+ -+ if ( KRun::runCommand( cmd, exec, m_iconName ) ) -+ return false; -+ -+ KMessageBox::sorry( this, i18n("
    %1
    \n" -+ "The specified command does not exist.").arg(cmd) ); -+ return true; // Let the user try again... -+} -+ -+void KMenu::show() -+{ -+ m_isShowing = true; -+ emit aboutToShow(); -+ -+ initialize(); -+ -+ PanelPopupButton *kButton = MenuManager::the()->findKButtonFor( this ); -+ if (kButton) -+ { -+ QPoint center = kButton->center(); -+ QRect screen = QApplication::desktop()->screenGeometry( center ); -+ setOrientation((center.y()-screen.y()raiseWidget(FavoriteTab); -+ m_kcommand->clear(); -+ current_query.clear(); -+ m_kcommand->setFocus(); -+ -+ // we need to reenable it -+ m_toolTipsEnabled = QToolTip::isGloballyEnabled(); -+ QToolTip::setGloballyEnabled(KickerSettings::showToolTips()); -+ -+ KMenuBase::show(); -+ m_isShowing = false; -+} -+ -+void KMenu::setOrientation(MenuOrientation orientation) -+{ -+ if (m_orientation == orientation) -+ return; -+ -+ m_orientation=orientation; -+ -+ m_resizeHandle->setCursor(m_orientation == BottomUp ? Qt::sizeBDiagCursor : Qt::sizeFDiagCursor); -+ -+ QPixmap pix; -+ if ( m_orientation == BottomUp ) -+ pix.load( locate("data", "kicker/pics/search-gradient.png" ) ); -+ else -+ pix.load( locate("data", "kicker/pics/search-gradient-topdown.png" ) ); -+ -+ pix.convertFromImage( pix.convertToImage().scale(pix.width(), m_searchFrame->height())); -+ m_search->mainWidget()->setPaletteBackgroundPixmap( pix ); -+ m_resizeHandle->setPaletteBackgroundPixmap( pix ); -+ -+ m_tabBar->setShape( m_orientation == BottomUp -+ ? QTabBar::RoundedBelow : QTabBar::RoundedAbove); -+ -+ QPixmap respix = QPixmap( locate("data", "kicker/pics/resize_handle.png" ) ); -+ if ( m_orientation == TopDown ) { -+ QWMatrix m; -+ m.rotate( 90.0 ); -+ respix=respix.xForm(m); -+ } -+ m_resizeHandle->setPixmap(respix); -+ -+ { -+ QWidget *footer = m_footer->mainWidget(); -+ QPixmap pix( 64, footer->height() ); -+ QPainter p( &pix ); -+ p.fillRect( 0, 0, 64, footer->height(), m_branding->colorGroup().brush( QColorGroup::Base ) ); -+ p.fillRect( 0, m_orientation == BottomUp ? footer->height() - 2 : 0, -+ 64, 3, KNewButton::self()->borderColor() ); -+ p.end(); -+ footer->setPaletteBackgroundPixmap( pix ); -+ } -+ -+ resizeEvent(new QResizeEvent(sizeHint(), sizeHint())); -+} -+ -+void KMenu::showMenu() -+{ -+ kdDebug() << "KMenu::showMenu()" << endl; -+ PanelPopupButton *kButton = MenuManager::the()->findKButtonFor(this); -+ if (kButton) -+ { -+ adjustSize(); -+ kButton->showMenu(); -+ } -+ else -+ { -+ show(); -+ } -+ kdDebug() << "end KMenu::showMenu()" << endl; -+} -+ -+void KMenu::hide() -+{ -+ //kdDebug() << "KMenu::hide() from " << kdBacktrace() << endl; -+ -+ // TODO: hide popups -+ -+ emit aboutToHide(); -+ -+ if (m_popupMenu) { -+ m_popupMenu->deleteLater(); -+ m_popupMenu=0; -+ } -+ m_mediaFreeTimer.stop(); -+ -+ m_isresizing = false; -+ -+ KickerSettings::setKMenuWidth(width()); -+ KickerSettings::setKMenuHeight(height()); -+ KickerSettings::writeConfig(); -+ -+ QToolTip::setGloballyEnabled(m_toolTipsEnabled); -+ -+ // remove focus from lineedit again, otherwise it doesn't kill its timers -+ m_stacker->raiseWidget(FavoriteTab); -+ -+ QWidget::hide(); -+} -+ -+void KMenu::paintEvent(QPaintEvent * e) -+{ -+ KMenuBase::paintEvent(e); -+ -+ QPainter p(this); -+ p.setClipRegion(e->region()); -+ -+ const BackgroundMode bgmode = backgroundMode(); -+ const QColorGroup::ColorRole crole = QPalette::backgroundRoleFromMode( bgmode ); -+ p.setBrush( colorGroup().brush( crole ) ); -+ -+ p.drawRect( 0, 0, width(), height() ); -+ int ypos = m_search->mainWidget()->geometry().bottom(); -+ -+ p.drawPixmap( 0, ypos, main_border_tl ); -+ p.drawPixmap( width() - main_border_tr.width(), ypos, main_border_tr ); -+ // p.drawPixmap( 0, ->y(), button_box_left ); -+} -+ -+ -+void KMenu::configChanged() -+{ -+ RecentlyLaunchedApps::the().m_bNeedToUpdate = false; -+ RecentlyLaunchedApps::the().configChanged(); -+ -+ m_exitView->leftView()->clear(); -+ insertStaticExitItems(); -+} -+ -+// create and fill "recent" section at first -+void KMenu::createRecentMenuItems() -+{ -+ RecentlyLaunchedApps::the().init(); -+ -+ if (!KickerSettings::numVisibleEntries()) -+ KickerSettings::setNumVisibleEntries(5); -+ -+ int nId = serviceMenuEndId() + 1; -+ m_recentlyView->insertSeparator( nId++, i18n( "Applications" ), -1 ); -+ -+ QStringList RecentApps; -+ -+ if (!KickerSettings::recentVsOften()) { -+ KickerSettings::setRecentVsOften(true); -+ RecentlyLaunchedApps::the().configChanged(); -+ RecentlyLaunchedApps::the().getRecentApps(RecentApps); -+ KickerSettings::setRecentVsOften(false); -+ RecentlyLaunchedApps::the().configChanged(); -+ } -+ else -+ RecentlyLaunchedApps::the().getRecentApps(RecentApps); -+ -+ -+ if (RecentApps.count() > 0) -+ { -+// bool bSeparator = KickerSettings::showMenuTitles(); -+ int nIndex = 0; -+ -+ for (QValueList::ConstIterator it = -+ RecentApps.begin(); it!=RecentApps.end(); ++it) -+ { -+ KService::Ptr s = KService::serviceByStorageId(*it); -+ if (!s) -+ { -+ RecentlyLaunchedApps::the().removeItem(*it); -+ } -+ else -+ m_recentlyView->insertMenuItem(s, nIndex++); -+ } -+ -+ } -+ -+ m_recentlyView->insertSeparator( nId++, i18n( "Documents" ), -1 ); -+ -+ QStringList fileList = KRecentDocument::recentDocuments(); -+ kdDebug() << "createRecentMenuItems=" << fileList << endl; -+ for (QStringList::ConstIterator it = fileList.begin(); -+ it != fileList.end(); -+ ++it) -+ m_recentlyView->insertRecentlyItem(*it, nId++); -+ -+} -+ -+void KMenu::clearSubmenus() -+{ -+ // we don't need to delete these on the way out since the libloader -+ // handles them for us -+ if (QApplication::closingDown()) -+ { -+ return; -+ } -+ -+ for (PopupMenuList::const_iterator it = dynamicSubMenus.constBegin(); -+ it != dynamicSubMenus.constEnd(); -+ ++it) -+ { -+ delete *it; -+ } -+ dynamicSubMenus.clear(); -+} -+ -+void KMenu::updateRecent() -+{ -+ m_recentlyView->clear(); -+ -+ createRecentMenuItems(); -+ -+ m_recentDirty = false; -+} -+ -+void KMenu::popup(const QPoint&, int) -+{ -+ showMenu(); -+} -+ -+void KMenu::clearRecentAppsItems() -+{ -+ RecentlyLaunchedApps::the().clearRecentApps(); -+ RecentlyLaunchedApps::the().save(); -+ RecentlyLaunchedApps::the().m_bNeedToUpdate = true; -+ updateRecent(); -+} -+ -+void KMenu::clearRecentDocsItems() -+{ -+ KRecentDocument::clear(); -+ updateRecent(); -+} -+ -+void KMenu::searchChanged(const QString & text) -+{ -+ if (!text.isEmpty()) { -+ const QColor on = QColor( 244, 244, 244 ); -+ const QColor off = QColor( 181, 181, 181 ); -+ m_stacker->raiseWidget(m_searchWidget); -+ paintSearchTab(true); -+ } -+ -+ m_searchActions->clearSelection(); -+ m_searchResultsWidget->clearSelection(); -+ -+ if (input_timer->isActive ()) -+ input_timer->stop (); -+ input_timer->start (WAIT_BEFORE_QUERYING, TRUE); -+} -+ -+bool KMenu::dontQueryNow (const QString& str) -+{ -+ if (str.isEmpty ()) -+ return true; -+ if (str == current_query.get()) -+ return true; -+ int length = str.length (); -+ int last_whitespace = str.findRev (' ', -1); -+ if (last_whitespace == length-1) -+ return false; // if the user typed a space, search -+ if (last_whitespace >= length-2) -+ return true; // dont search if the user only typed one character -+ QChar lastchar = str[length-1]; -+ if (lastchar == ":" || lastchar == "=") -+ return true; -+ return false; -+} -+ -+void KMenu::createNewProgramList() -+{ -+ m_seenProgramsChanged = false; -+ m_seenPrograms = KickerSettings::firstSeenApps(); -+ m_newInstalledPrograms.clear(); -+ -+ m_currentDate = QDate::currentDate().toString(Qt::ISODate); -+ -+ bool initialize = (m_seenPrograms.count() == 0); -+ -+ createNewProgramList(QString::null); -+ -+ if (initialize) { -+ for (QStringList::Iterator it = m_seenPrograms.begin(); it != m_seenPrograms.end(); ++it) -+ *(++it)="-"; -+ -+ m_newInstalledPrograms.clear(); -+ } -+ -+ if (m_seenProgramsChanged) { -+ KickerSettings::setFirstSeenApps(m_seenPrograms); -+ KickerSettings::writeConfig(); -+ } -+} -+ -+void KMenu::createNewProgramList(QString relPath) -+{ -+ KServiceGroup::Ptr group = KServiceGroup::group(relPath); -+ if (!group || !group->isValid()) -+ return; -+ -+ KServiceGroup::List list = group->entries(); -+ if (list.isEmpty()) -+ return; -+ -+ KServiceGroup::List::ConstIterator it = list.begin(); -+ for(; it != list.end(); ++it) { -+ KSycocaEntry *e = *it; -+ -+ if(e != 0) { -+ if(e->isType(KST_KServiceGroup)) { -+ KServiceGroup::Ptr g(static_cast(e)); -+ if(!g->noDisplay()) -+ createNewProgramList(g->relPath()); -+ } else if(e->isType(KST_KService)) { -+ KService::Ptr s(static_cast(e)); -+ if(s->type() == "Application" && !s->noDisplay() ) { -+ QString shortStorageId = s->storageId().replace(".desktop",QString::null); -+ QStringList::Iterator it_find = m_seenPrograms.begin(); -+ QStringList::Iterator it_end = m_seenPrograms.end(); -+ bool found = false; -+ for (; it_find != it_end; ++it_find) { -+ if (*(it_find)==shortStorageId) { -+ found = true; -+ break; -+ } -+ ++it_find; -+ } -+ if (!found) { -+ m_seenProgramsChanged=true; -+ m_seenPrograms+=shortStorageId; -+ m_seenPrograms+=m_currentDate; -+ if (m_newInstalledPrograms.find(s->storageId())==m_newInstalledPrograms.end()) -+ m_newInstalledPrograms+=s->storageId(); -+ } -+ else { -+ ++it_find; -+ if (*(it_find)!="-") { -+ QDate date = QDate::fromString(*(it_find),Qt::ISODate); -+ if (date.daysTo(QDate::currentDate())<3) { -+ if (m_newInstalledPrograms.find(s->storageId())==m_newInstalledPrograms.end()) -+ m_newInstalledPrograms+=s->storageId(); -+ } -+ else { -+ m_seenProgramsChanged=true; -+ (*it_find)="-"; -+ } -+ } -+ } -+ } -+ } -+ } -+ } -+} -+ -+void KMenu::searchProgramList(QString relPath) -+{ -+ KServiceGroup::Ptr group = KServiceGroup::group(relPath); -+ if (!group || !group->isValid()) -+ return; -+ -+ KServiceGroup::List list = group->entries(); -+ if (list.isEmpty()) -+ return; -+ -+ KServiceGroup::List::ConstIterator it = list.begin(); -+ for(; it != list.end(); ++it) { -+ KSycocaEntry *e = *it; -+ -+ if(e != 0) { -+ if(e->isType(KST_KServiceGroup)) { -+ KServiceGroup::Ptr g(static_cast(e)); -+ if(!g->noDisplay()) -+ searchProgramList(g->relPath()); -+ } else if(e->isType(KST_KService)) { -+ KService::Ptr s(static_cast(e)); -+ if(s->type() == "Application" && !s->noDisplay() && !checkUriInMenu(s->desktopEntryPath())) { -+ if (!current_query.matches(s->name()+' '+s->genericName()+' '+s->exec()+' '+ -+ s->keywords().join(",")+' '+s->comment()+' '+group->caption()+' '+ -+ s->categories().join(",")) || !anotherHitMenuItemAllowed(APPS)) -+ continue; -+ -+ QString input = current_query.get(); -+ int score = 0; -+ if (s->exec()==input) -+ score = 100; -+ else if (s->exec().find(input)==0) -+ score = 50; -+ else if (s->exec().find(input)!=-1) -+ score = 10; -+ else if (s->name().lower()==input) -+ score = 100; -+ else if (s->genericName().lower()==input) -+ score = 100; -+ else if (s->name().lower().find(input)==0) -+ score = 50; -+ else if (s->genericName().lower().find(input)==0) -+ score = 50; -+ else if (s->name().lower().find(input)!=-1) -+ score = 10; -+ else if (s->genericName().lower().find(input)!=-1) -+ score = 10; -+ -+ if (s->exec().find(' ')==-1) -+ score+=1; -+ -+ if (s->substituteUid()) -+ score-=1; -+ -+ if (s->noDisplay()) -+ score -= 100; -+ else if (s->terminal()) -+ score -= 50; -+ else -+ score += kMin(10, s->initialPreference()); -+ -+ QString firstLine, secondLine; -+ if ((KickerSettings::DescriptionAndName || KickerSettings::menuEntryFormat() == KickerSettings::DescriptionOnly) && !s->genericName().isEmpty()) { -+ firstLine = s->genericName(); -+ secondLine = s->name(); -+ } -+ else { -+ firstLine = s->name(); -+ secondLine = s->genericName(); -+ } -+ -+ HitMenuItem *hit_item = new HitMenuItem (firstLine, secondLine, -+ s->desktopEntryPath(), QString::null, 0, APPS, s->icon(), score); -+ if (hit_item == NULL) -+ continue; -+ -+ hit_item->service = s; -+ insertSearchResult(hit_item); -+ -+ QString exe = s->exec(); -+ int pos = exe.find(' '); -+ if (pos>0) -+ exe=exe.left(pos); -+ m_programsInMenu+=KGlobal::dirs()->findExe(exe); -+ } -+ } -+ } -+ } -+} -+ -+void KMenu::searchBookmarks(KBookmarkGroup group) -+{ -+ KBookmark bookmark = group.first(); -+ while(!bookmark.isNull()) { -+ if (bookmark.isGroup()) { -+ searchBookmarks(bookmark.toGroup()); -+ } else if (!bookmark.isSeparator() && !bookmark.isNull()) { -+ if (!current_query.matches(bookmark.fullText()+' '+bookmark.url().url()) || !anotherHitMenuItemAllowed(BOOKMARKS)) { -+ bookmark = group.next(bookmark); -+ continue; -+ } -+ -+ HitMenuItem *hit_item = new HitMenuItem (bookmark.fullText(), bookmark.fullText(), -+ bookmark.url(), QString::null, 0, BOOKMARKS, bookmark.icon()); -+ -+ insertSearchResult(hit_item); -+ } -+ bookmark = group.next(bookmark); -+ } -+} -+ -+void KMenu::initSearch() -+{ -+ if (!m_addressBook && KickerSettings::kickoffSearchAddressBook()) -+ m_addressBook = KABC::StdAddressBook::self( false ); -+ -+ if (!bookmarkManager) -+ bookmarkManager = KBookmarkManager::userBookmarksManager(); -+ -+ if (!m_search_plugin) { -+ m_search_plugin_interface = new QObject( this, "m_search_plugin_interface" ); -+ new MyKickoffSearchInterface( this, m_search_plugin_interface, "kickoffsearch interface" ); -+ KTrader::OfferList offers = KTrader::self()->query("KickoffSearch/Plugin"); -+ -+ KService::Ptr service = *offers.begin(); -+ if (service) { -+ int errCode = 0; -+ m_search_plugin = KParts::ComponentFactory::createInstanceFromService -+ ( service, m_search_plugin_interface, 0, QStringList(), &errCode); -+ } -+ } -+} -+ -+void KMenu::searchAddressbook() -+{ -+ if (!KickerSettings::kickoffSearchAddressBook()) -+ return; -+ -+ if (!m_addressBook) -+ m_addressBook = KABC::StdAddressBook::self( false ); -+ -+ KABC::AddressBook::ConstIterator it = m_addressBook->begin(); -+ while (it!=m_addressBook->end()) { -+ if (!current_query.matches((*it).assembledName()+' '+(*it).fullEmail())) { -+ it++; -+ continue; -+ } -+ -+ HitMenuItem *hit_item; -+ QString realName = (*it).realName(); -+ if (realName.isEmpty()) -+ realName=(*it).preferredEmail(); -+ -+ if (!(*it).preferredEmail().isEmpty()) { -+ if (!anotherHitMenuItemAllowed(ACTIONS)) { -+ it++; -+ continue; -+ } -+ -+ hit_item = new HitMenuItem (i18n("Send Email to %1").arg(realName), (*it).preferredEmail(), -+ "mailto:"+(*it).preferredEmail(), QString::null, 0, ACTIONS, "mail_new"); -+ -+ insertSearchResult(hit_item); -+ } -+ -+ if (!anotherHitMenuItemAllowed(ACTIONS)) { -+ it++; -+ continue; -+ } -+ -+ hit_item = new HitMenuItem (i18n("Open Addressbook at %1").arg(realName), (*it).preferredEmail(), -+ "kaddressbook:/"+(*it).uid(), QString::null, 0, ACTIONS, "kaddressbook"); -+ -+ insertSearchResult(hit_item); -+ -+ it++; -+ } -+} -+ -+QString KMenu::insertBreaks(const QString& text, QFontMetrics fm, int width, QString leadInsert) -+{ -+ QString result, line; -+ QStringList words = QStringList::split(' ', text); -+ -+ for(QStringList::Iterator it = words.begin(); it != words.end(); ++it) { -+ if (fm.width(line+' '+*it) >= width) { -+ if (!result.isEmpty()) -+ result = result + '\n'; -+ result = result + line; -+ line = leadInsert + *it; -+ } -+ else -+ line = line + ' ' + *it; -+ } -+ if (!result.isEmpty()) -+ result = result + '\n'; -+ -+ return result + line; -+} -+ -+void KMenu::clearSearchResults(bool showHelp) -+{ -+ m_searchResultsWidget->clear(); -+ m_searchResultsWidget->setFocusPolicy(showHelp ? QWidget::NoFocus : QWidget::StrongFocus); -+ setTabOrder(m_kcommand, m_searchResultsWidget); -+ -+ if (showHelp) { -+ const int width = m_searchResultsWidget->width()-10; -+ QFontMetrics fm = m_searchResultsWidget->fontMetrics(); -+ -+ QListViewItem* item; -+ item = new QListViewItem( m_searchResultsWidget, insertBreaks(i18n("- Add ext:type to specify a file extension."), fm, width, " ") ); -+ item->setSelectable(false); -+ item->setMultiLinesEnabled(true); -+ item = new QListViewItem( m_searchResultsWidget, insertBreaks(i18n("- When searching for a phrase, add quotes."), fm, width, " " ) ); -+ item->setSelectable(false); -+ item->setMultiLinesEnabled(true); -+ item = new QListViewItem( m_searchResultsWidget, insertBreaks(i18n("- To exclude search terms, use the minus symbol in front."), fm, width, " " ) ); -+ item->setSelectable(false); -+ item->setMultiLinesEnabled(true); -+ item = new QListViewItem( m_searchResultsWidget, insertBreaks(i18n("- To search for optional terms, use OR."), fm, width, " ") ); -+ item->setSelectable(false); -+ item->setMultiLinesEnabled(true); -+ item = new QListViewItem( m_searchResultsWidget, insertBreaks(i18n("- You can use upper and lower case."), fm, width, " ") ); -+ item->setSelectable(false); -+ item->setMultiLinesEnabled(true); -+ item = new QListViewItem( m_searchResultsWidget, i18n("Search Quick Tips")); -+ item->setSelectable(false); -+ } -+ -+ for (int i=0; ilineEdit()->text ().simplifyWhiteSpace (); -+ if (! return_pressed && dontQueryNow (query_str)) { -+ if (query_str.length()<3) -+ clearSearchResults(); -+ else { -+ if (m_searchResultsWidget->firstChild() && m_searchResultsWidget->firstChild()->isSelectable()) { -+ m_searchResultsWidget->setSelected(m_searchResultsWidget->firstChild(),true); -+ } -+ else if (m_searchResultsWidget->childCount()>1) { -+ m_searchResultsWidget->setSelected(m_searchResultsWidget->firstChild()->itemBelow(),true); -+ } -+ } -+ return; -+ } -+ kdDebug() << "Querying for [" << query_str << "]" << endl; -+ current_query.set(query_str); -+ -+ // reset search results -+ HitMenuItem *hit_item; -+ while ((hit_item = m_current_menu_items.take ()) != NULL) { -+ //kndDebug () << " (" << hit_item->id << "," << hit_item->category << ")" << endl; -+ delete hit_item; -+ } -+ -+ clearSearchResults(false); -+ m_searchPixmap->setMovie(QMovie(locate( "data", "kicker/pics/search-running.mng" ))); -+ -+ resetOverflowCategory(); -+ -+ initCategoryTitlesUpdate(); -+ -+ // calculate ? -+ QString cmd = query_str.stripWhiteSpace(); -+ if (!cmd.isEmpty() && (cmd[0].isNumber() || (cmd[0] == '(')) && -+ (QRegExp("[a-zA-Z\\]\\[]").search(cmd) == -1)) -+ { -+ QString result = calculate(cmd); -+ if (!result.isEmpty()) -+ { -+ categorised_hit_total[ACTIONS] ++; -+ HitMenuItem *hit_item = new HitMenuItem (i18n("%1 = %2").arg(query_str, result), QString::null, -+ "kcalc", QString::null, (++max_category_id [ACTIONS]), ACTIONS, "kcalc"); -+ int index = getHitMenuItemPosition (hit_item); -+ m_searchResultsWidget->insertItem(iconForHitMenuItem(hit_item), hit_item->display_name, -+ hit_item->display_info, KGlobal::dirs()->findExe("kcalc"), max_category_id [ACTIONS], index); -+ } -+ } -+ -+ // detect email address -+ if (emailRegExp.exactMatch(query_str)) { -+ categorised_hit_total[ACTIONS] ++; -+ HitMenuItem *hit_item = new HitMenuItem (i18n("Send Email to %1").arg(query_str), QString::null, -+ "mailto:"+query_str, QString::null, (++max_category_id [ACTIONS]), ACTIONS, "mail_new"); -+ int index = getHitMenuItemPosition (hit_item); -+ m_searchResultsWidget->insertItem(iconForHitMenuItem(hit_item), hit_item->display_name, hit_item->display_info, "mailto:"+query_str, max_category_id [ACTIONS], index); -+ } -+ -+ // quick own application search -+ m_programsInMenu.clear(); -+ searchProgramList(QString::null); -+ -+ KURIFilterData filterData; -+ filterData.setData(query_str); -+ filterData.setCheckForExecutables(true); -+ -+ if (KURIFilter::self()->filterURI(filterData)) { -+ -+ QString description; -+ QString exe; -+ -+ switch (filterData.uriType()) { -+ case KURIFilterData::LOCAL_FILE: -+ description = i18n("Open Local File: %1").arg(filterData.uri().url()); -+ break; -+ case KURIFilterData::LOCAL_DIR: -+ description = i18n("Open Local Dir: %1").arg(filterData.uri().url()); -+ break; -+ case KURIFilterData::NET_PROTOCOL: -+ description = i18n("Open Remote Location: %1").arg(filterData.uri().url()); -+ break; -+ case KURIFilterData::SHELL: -+ case KURIFilterData::EXECUTABLE: -+ { -+ exe = KGlobal::dirs()->findExe(filterData.uri().url()); -+#ifdef KDELIBS_SUSE -+ bool gimp_hack = false; -+ if (exe.endsWith("/bin/gimp")) { -+ QStringList::ConstIterator it = m_programsInMenu.begin(); -+ for (; it != m_programsInMenu.end(); ++it) -+ if ((*it).find("bin/gimp-remote-")!=-1) { -+ gimp_hack = true; -+ break; -+ } -+ } -+#endif -+ if (m_programsInMenu.find(exe)!=m_programsInMenu.end() -+#ifdef KDELIBS_SUSE -+ || gimp_hack -+#endif -+ ) -+ exe = QString::null; -+ else if (kapp->authorize("shell_access")) -+ { -+ if( filterData.hasArgsAndOptions() ) -+ exe += filterData.argsAndOptions(); -+ -+ description = i18n("Run '%1'").arg(exe); -+ exe = "kicker:/runcommand"; -+ } -+ } -+ default: -+ break; -+ } -+ -+ if (!description.isEmpty()) { -+ categorised_hit_total[ACTIONS] ++; -+ HitMenuItem *hit_item = new HitMenuItem (description, QString::null, -+ exe.isEmpty() ? filterData.uri() : exe, QString::null, -+ (++max_category_id [ACTIONS]), ACTIONS, exe.isEmpty() ? "fileopen": "run"); -+ int index = getHitMenuItemPosition (hit_item); -+ m_searchResultsWidget->insertItem(iconForHitMenuItem(hit_item), hit_item->display_name, -+ hit_item->display_info, -+ exe.isEmpty() ? filterData.uri().url() : exe, max_category_id [ACTIONS], index); -+ } -+ } -+ -+ // search Konqueror bookmarks; -+ if (!bookmarkManager) -+ bookmarkManager = KBookmarkManager::userBookmarksManager(); -+ -+ if (query_str.length()>=3) -+ searchBookmarks(bookmarkManager->root()); -+ -+ // search KDE addressbook -+ if (query_str.length()>=3) -+ searchAddressbook(); -+ -+ updateCategoryTitles(); -+ -+ if (m_searchResultsWidget->childCount()>1) -+ m_searchResultsWidget->setSelected(m_searchResultsWidget->firstChild()->itemBelow(),true); -+ m_searchActions->clearSelection(); -+ -+ if (!m_search_plugin) -+ initSearch(); -+ -+ // start search plugin only with at least 3 characters -+ if (query_str.length()<3 || !m_search_plugin || (m_search_plugin && !m_search_plugin->daemonRunning()) ) { -+ m_searchPixmap->setPixmap( BarIcon( "find", 32 ) ); -+ fillOverflowCategory(); -+ if (query_str.length()>2 && m_current_menu_items.isEmpty()) -+ reportError (i18n("No matches found")); -+ return; -+ } -+ -+ if (m_search_plugin) { -+ m_search_plugin->query(current_query.get(), KickerSettings::DescriptionAndName || KickerSettings::menuEntryFormat() == KickerSettings::DescriptionOnly); -+ } -+} -+ -+bool KMenu::anotherHitMenuItemAllowed(int cat, bool count) -+{ -+ // update number of hits in this category -+ if (count) -+ categorised_hit_total [cat] ++; -+ -+ // if number of hits in this category is more than allowed, dont process this -+ if (max_category_id [cat] - base_category_id [cat] < max_items(cat)) -+ return true; -+ -+ if (m_overflowCategoryState==None || (m_overflowCategoryState==Filling && m_overflowCategory==cat && -+ max_category_id [cat] + m_overflowList.count() - base_category_id [cat] < max_items(cat) * 2.0)) -+ return true; -+ -+ return false; -+} -+ -+void KMenu::addHitMenuItem(HitMenuItem* item) -+{ -+ if (checkUriInMenu(item->uri)) -+ return; -+ -+ // if number of hits in this category is more than allowed, dont process this -+ if (!anotherHitMenuItemAllowed(item->category, false)) -+ return; -+ -+ insertSearchResult(item); -+} -+ -+void KMenu::insertSearchResult(HitMenuItem* item) -+{ -+ if (m_overflowCategoryState==None) { -+ m_overflowCategoryState = Filling; -+ m_overflowCategory = item->category; -+ } -+ else if (m_overflowCategoryState==Filling && m_overflowCategory!=item->category) -+ m_overflowCategoryState = NotNeeded; -+ -+ if (max_category_id [item->category] - base_category_id [item->category] < max_items(item->category)) { -+ max_category_id [item->category]++; -+ item->id=max_category_id [item->category]; -+ -+ int index = getHitMenuItemPosition (item); -+ -+ kdDebug () << "Adding " << item->uri -+ << "(" << item->mimetype << ") with id=" -+ << max_category_id [item->category] << " at " << index << endl; -+ -+ KMenuItem *hit_item = m_searchResultsWidget->insertItem(iconForHitMenuItem(item), item->display_name, item->display_info, item->uri.url(), max_category_id [item->category], index); -+ hit_item->setService(item->service); -+ -+ kdDebug () << "Done inserting ... " << endl; -+ } -+ else if (m_overflowCategoryState==Filling && m_overflowCategory==item->category && -+ max_category_id [item->category] - base_category_id [item->category] < max_items(item->category) * 2) -+ m_overflowList.append(item); -+} -+ -+void KMenu::searchOver() -+{ -+ m_searchPixmap->setPixmap( BarIcon( "find", 32 ) ); -+ fillOverflowCategory(); -+ if (m_current_menu_items.isEmpty()) { -+ kdDebug() << "No matches found" << endl; -+ reportError (i18n("No matches found")); -+ } -+ if (!m_searchResultsWidget->selectedItem() && !m_searchActions->selectedItem() && m_searchResultsWidget->childCount()>1) { -+ m_searchResultsWidget->setSelected(m_searchResultsWidget->firstChild()->itemBelow(),true); -+ } -+} -+ -+void KMenu::initCategoryTitlesUpdate() -+{ -+ // Need to know if each category was updated with hits or had the first hit -+ // That way we know if we need to changetitle or inserttitle -+ already_added = new bool [num_categories]; -+ for (int i=0; iinsertSeparator(base_category_id [i], title, index); -+ kdDebug () << "Inserting heading with id=" << base_category_id[i] << " for " << categories[i] << " at " << index << endl; -+ } else { -+ // something was already displayed in this category -+ // update the title to reflect the total -+ sep = dynamic_cast( m_searchResultsWidget->findItem(base_category_id [i]) ); -+ if ( !sep ) -+ continue; -+ kdDebug () << "Changing heading of id=" << base_category_id[i] << " for " << categories[i] << endl; -+ } -+ -+ int max = max_items(i); -+ if (m_overflowCategoryState == Filling && m_overflowCategory == i) -+ max *= 2; -+ -+ if ( categorised_hit_total [i] > max ) { -+ if (m_kerryInstalled) -+ sep->setLink( i18n( "top %1 of %2" ).arg( max ).arg( categorised_hit_total [i] ), QString( "kerry:/%1" ).arg( i ) ); -+ else -+ sep->setText( 0, i18n( "%1 (top %2 of %3)" ).arg( i18n(categories [i].utf8()) ).arg( max ).arg( categorised_hit_total [i] ) ); -+ } -+ else { -+ sep->setLink( QString::null ); -+ } -+ } -+ delete[] already_added; -+ already_added = 0; -+} -+ -+QString KMenu::iconForHitMenuItem(HitMenuItem *hit_item) -+{ -+ // get the icon -+ if (!hit_item->icon.isEmpty()) -+ return hit_item->icon; -+ -+ if (hit_item->category == WEBHIST) { -+ QString favicon = KMimeType::favIconForURL (hit_item->uri); -+ if (! favicon.isEmpty ()) -+ return favicon; -+ } -+ -+ if (mimetype_iconstore.contains (hit_item->mimetype)) -+ return (mimetype_iconstore [hit_item->mimetype]); -+ else { -+ KMimeType::Ptr mimetype_ptr = KMimeType::mimeType (hit_item->mimetype); -+ QString mimetype_icon = mimetype_ptr->icon(QString::null, FALSE); -+ mimetype_iconstore [hit_item->mimetype] = mimetype_icon; -+ return mimetype_icon; -+ } -+ return QString::null; -+} -+ -+void KMenu::slotStartService(KService::Ptr ptr) -+{ -+ accept(); -+ -+ addToHistory(); -+ KApplication::startServiceByDesktopPath(ptr->desktopEntryPath(), -+ QStringList(), 0, 0, 0, "", true); -+ updateRecentlyUsedApps(ptr); -+} -+ -+ -+void KMenu::slotStartURL(const QString& u) -+{ -+ if ( u == "kicker:/goup/" ) { -+ // only m_exitView is connected to this slot, not m_browserView -+ slotGoExitMainMenu(); -+ return; -+ } -+ -+ if ( u == "kicker:/restart/" || u=="kicker:/switchuser/") { -+ slotGoExitSubMenu(u); -+ return; -+ } -+ -+ accept(); -+ -+ if ( u == "kicker:/lock" ) { -+ slotLock(); -+ } -+ else if ( u == "kicker:/logout" ) { -+#ifdef KDELIBS_SUSE -+ QByteArray params; -+ QDataStream stream(params, IO_WriteOnly); -+ stream << 0 << -1 << ""; -+ -+ kapp->dcopClient()->send("ksmserver", "default", "logoutTimed(int,int,QString)", params); -+#else -+ DCOPRef mediamanager("ksmserver", "ksmserver"); -+ DCOPReply reply = mediamanager.call( "logoutTimed", (int)KApplication::ShutdownTypeNone, (int)KApplication::ShutdownModeDefault ); -+ if (!reply.isValid() && KMessageBox::Continue==KMessageBox::warningContinueCancel(this, i18n("Do you really want to end the session?"), -+ i18n("Logout Confirmation"), KGuiItem(i18n("Logout"),"undo"))) -+ kapp->requestShutDown( KApplication::ShutdownConfirmNo, -+ KApplication::ShutdownTypeNone, -+ KApplication::ShutdownModeDefault ); -+ -+#endif -+ } -+ else if ( u == "kicker:/runcommand" ) -+ { -+ runCommand(); -+ } -+ else if ( u == "kicker:/shutdown" ) { -+#ifdef KDELIBS_SUSE -+ QByteArray params; -+ QDataStream stream(params, IO_WriteOnly); -+ stream << 2 << -1 << ""; -+ -+ kapp->dcopClient()->send("ksmserver", "default", "logoutTimed(int,int,QString)", params); -+#else -+ if (KMessageBox::Continue==KMessageBox::warningContinueCancel(this, i18n("Do you really want to turn off the computer?"), -+ i18n("Shutdown Confirmation"), KGuiItem(i18n("Shutdown"),"exit"))) -+ kapp->requestShutDown( KApplication::ShutdownConfirmNo, -+ KApplication::ShutdownTypeHalt, -+ KApplication::ShutdownModeDefault ); -+#endif -+ } -+ else if ( u == "kicker:/restart" ) { -+#ifdef KDELIBS_SUSE -+ QByteArray params; -+ QDataStream stream(params, IO_WriteOnly); -+ stream << 1 << -1 << QString::null; -+ -+ kapp->dcopClient()->send("ksmserver", "default", "logoutTimed(int,int,QString)", params); -+#else -+ if (KMessageBox::Continue==KMessageBox::warningContinueCancel(this, i18n("Do you really want to reset the computer and boot (another operating system)?"), -+ i18n("Restart Confirmation"), KGuiItem(i18n("Restart"),"reload"))) -+ kapp->requestShutDown( KApplication::ShutdownConfirmNo, -+ KApplication::ShutdownTypeReboot, -+ KApplication::ShutdownModeDefault ); -+#endif -+ } -+#ifdef KDELIBS_SUSE -+ else if ( u == "kicker:/suspend_disk" ) { -+ slotSuspend( 1 ); -+ } -+ else if ( u == "kicker:/suspend_ram" ) { -+ slotSuspend( 2 ); -+ } -+ else if ( u == "kicker:/standby" ) { -+ slotSuspend( 3 ); -+ } -+#endif -+ else if ( u == "kicker:/savesession" ) { -+ QByteArray data; -+ kapp->dcopClient()->send( "ksmserver", "default", -+ "saveCurrentSession()", data ); -+ } -+ else if ( u == "kicker:/switchuser" ) { -+ DM().startReserve(); -+ } -+ else if ( u == "kicker:/switchuserafterlock" ) { -+ slotLock(); -+ DM().startReserve(); -+ } -+ else if ( u.startsWith("kicker:/switchuser_") ) -+ DM().lockSwitchVT( u.mid(19).toInt() ); -+ else if ( u.startsWith("kicker:/restart_") ) { -+#ifdef KDELIBS_SUSE -+ QStringList rebootOptions; -+ int def, cur; -+ DM().bootOptions( rebootOptions, def, cur ); -+ -+ QByteArray params; -+ QDataStream stream(params, IO_WriteOnly); -+ stream << 1 << -1 << rebootOptions[u.mid(16).toInt()]; -+ -+ kapp->dcopClient()->send("ksmserver", "default", "logoutTimed(int,int,QString)", params); -+#else -+ KMessageBox::error( this, QString( "Sorry, not implemented." )); -+#endif -+ } -+#warning restart entry not supported -+#if 0 -+ else if ( u == "kicker:/restart_windows" ) { -+ if (KMessageBox::Continue==KMessageBox::warningContinueCancel(this, i18n("Do you really want to reset the computer and boot Microsoft Windows"), i18n("Start Windows Confirmation"), KGuiItem(i18n("Start Windows"),"reload"))) -+ KMessageBox::error( this, QString( "kicker:/restart_windows is not yet implemented " ) ); -+ } -+#endif -+ else if ( u.startsWith("kerry:/")) -+ { -+ QByteArray data; -+ QDataStream arg(data, IO_WriteOnly); -+ arg << m_kcommand->currentText() << kerry_categories[u.mid(7).toInt()]; -+ if (ensureServiceRunning("kerry")) -+ kapp->dcopClient()->send("kerry","search","search(QString,QString)", data); -+ } -+ else { -+ addToHistory(); -+ if (u.startsWith("kaddressbook:/")) { -+ KProcess *proc = new KProcess; -+ *proc << "kaddressbook" << "--uid" << u.mid(14); -+ proc->start(); -+ accept(); -+ return; -+ } else if (u.startsWith("note:/")) { -+ KProcess *proc = new KProcess; -+ *proc << "tomboy"; -+ *proc << "--open-note" << u; -+ if (!proc->start()) -+ KMessageBox::error(0,i18n("Could not start Tomboy.")); -+ return; -+ } -+ else if (u.startsWith("knotes:/") ) { -+ if (ensureServiceRunning("knotes")) { -+ QByteArray data; -+ QDataStream arg(data, IO_WriteOnly); -+ arg << u.mid(9,22); -+ -+ kapp->dcopClient()->send("knotes","KNotesIface","showNote(QString)", data); -+ } -+ return; -+ } -+ -+ kapp->propagateSessionManager(); -+ (void) new KRun( u, parentWidget()); -+ } -+} -+ -+void KMenu::slotContextMenuRequested( QListViewItem * item, const QPoint & pos, int /*col*/ ) -+{ -+ const QObject* source = sender(); -+ -+ if (!item) -+ return; -+ -+ KMenuItem* kitem = dynamic_cast(item); -+ if (!kitem) -+ return; -+ -+ KFileItemList _items; -+ _items.setAutoDelete(true); -+ -+ if (dynamic_cast(item)) -+ return; -+ -+ m_popupService = kitem->service(); -+ m_popupPath.menuPath = kitem->menuPath(); -+ if (!m_popupService) { -+ m_popupPath.title = kitem->title(); -+ m_popupPath.description = kitem->description(); -+ m_popupPath.path = kitem->path(); -+ m_popupPath.icon = kitem->icon(); -+ -+ if (m_popupPath.path.startsWith(locateLocal("data", QString::fromLatin1("RecentDocuments/")))) { -+ KDesktopFile df(m_popupPath.path,true); -+ m_popupPath.path=df.readURL(); -+ } -+ } -+ -+ m_popupMenu = new KPopupMenu(this); -+ connect(m_popupMenu, SIGNAL(activated(int)), SLOT(slotContextMenu(int))); -+ bool hasEntries = false; -+ -+ m_popupMenu->insertTitle(SmallIcon(kitem->icon()),kitem->title()); -+ -+ if (source==m_favoriteView) -+ { -+ hasEntries = true; -+ m_popupMenu->insertItem(SmallIconSet("remove"), -+ i18n("Remove From Favorites"), RemoveFromFavorites); -+ } -+ else if (!kitem->hasChildren() && !m_popupPath.path.startsWith("system:/") && -+ !m_popupPath.path.startsWith("kicker:/switchuser_") && !m_popupPath.path.startsWith("kicker:/restart_")) -+ { -+ hasEntries = true; -+ int num = m_popupMenu->insertItem(SmallIconSet("bookmark_add"), -+ i18n("Add to Favorites"), AddToFavorites); -+ -+ QStringList favs = KickerSettings::favorites(); -+ if (m_popupService && favs.find(m_popupService->storageId())!=favs.end()) -+ m_popupMenu->setItemEnabled(num, false); -+ else { -+ QStringList::Iterator it; -+ for (it = favs.begin(); it != favs.end(); ++it) -+ { -+ if ((*it)[0]=='/') -+ { -+ KDesktopFile df((*it),true); -+ if (df.readURL().replace("file://",QString::null)==m_popupPath.path) -+ break; -+ } -+ } -+ if (it!=favs.end()) -+ m_popupMenu->setItemEnabled(num, false); -+ } -+ } -+ -+ if (source!=m_exitView) { -+ if (m_popupService || (!m_popupPath.path.startsWith("kicker:/") && !m_popupPath.path.startsWith("system:/") && !m_popupPath.path.startsWith("kaddressbook:/"))) { -+ if (hasEntries) -+ m_popupMenu->insertSeparator(); -+ -+ if (kapp->authorize("editable_desktop_icons") ) -+ { -+ hasEntries = true; -+ if (m_popupPath.menuPath.endsWith("/")) -+ m_popupMenu->insertItem(SmallIconSet("desktop"), -+ i18n("Add Menu to Desktop"), AddMenuToDesktop); -+ else -+ m_popupMenu->insertItem(SmallIconSet("desktop"), -+ i18n("Add Item to Desktop"), AddItemToDesktop); -+ } -+ if (kapp->authorizeKAction("kicker_rmb") && !Kicker::the()->isImmutable()) -+ { -+ hasEntries = true; -+ if (m_popupPath.menuPath.endsWith("/")) -+ m_popupMenu->insertItem(SmallIconSet("kicker"), -+ i18n("Add Menu to Main Panel"), AddMenuToPanel); -+ else -+ m_popupMenu->insertItem(SmallIconSet("kicker"), -+ i18n("Add Item to Main Panel"), AddItemToPanel); -+ } -+ if (kapp->authorizeKAction("menuedit") && !kitem->menuPath().isEmpty()) -+ { -+ hasEntries = true; -+ if (kitem->menuPath().endsWith("/")) -+ m_popupMenu->insertItem(SmallIconSet("kmenuedit"), i18n("Edit Menu"), EditMenu); -+ else -+ m_popupMenu->insertItem(SmallIconSet("kmenuedit"), i18n("Edit Item"), EditItem); -+ } -+ if (kapp->authorize("run_command") && (m_popupService || (!m_popupPath.menuPath.isEmpty() && !m_popupPath.menuPath.endsWith("/")))) -+ { -+ hasEntries = true; -+ m_popupMenu->insertItem(SmallIconSet("run"), -+ i18n("Put Into Run Dialog"), PutIntoRunDialog); -+ } -+ } -+ if (source==m_searchResultsWidget || ((source==m_favoriteView || source==m_recentlyView || source == m_systemView) && !m_popupService && !m_popupPath.path.startsWith("kicker:/")) ) { -+ QString uri; -+ if (m_popupService) -+ uri = locate("apps", m_popupService->desktopEntryPath()); -+ else -+ uri = m_popupPath.path; -+ -+ QString mimetype = QString::null; -+ if ( m_popupPath.path.startsWith( "system:/media/" ) ) -+ mimetype = media_mimetypes[m_popupPath.path]; -+ -+ KFileItem* item = new KFileItem(uri, mimetype, KFileItem::Unknown); -+ _items.append( item ); -+ -+ const KURL kurl(uri); -+ KActionCollection act(this); -+ -+ KonqPopupMenu * konqPopupMenu = new KonqPopupMenu( KonqBookmarkManager::self(), _items, -+ kurl, act, (KNewMenu*)NULL, this, -+ item->isLocalFile() ? KonqPopupMenu::ShowProperties : KonqPopupMenu::NoFlags, -+ KParts::BrowserExtension::DefaultPopupItems ); -+ -+ if (konqPopupMenu->count()) { -+ if (hasEntries) { -+ m_popupMenu->insertSeparator(); -+ m_popupMenu->insertItem(SmallIconSet("add"),i18n("Advanced"), konqPopupMenu); -+ } -+ else { -+ delete m_popupMenu; -+ m_popupMenu = (KPopupMenu*)konqPopupMenu; -+ m_popupMenu->insertTitle(SmallIcon(kitem->icon()),kitem->title(),-1,0); -+ } -+ hasEntries = true; -+ } -+ } -+ } -+ -+ if (source==m_recentlyView) { -+ m_popupMenu->insertSeparator(); -+ if (m_popupService) -+ m_popupMenu->insertItem(SmallIconSet("history_clear"), -+ i18n("Clear Recently Used Applications"), ClearRecentlyUsedApps); -+ else -+ m_popupMenu->insertItem(SmallIconSet("history_clear"), -+ i18n("Clear Recently Used Documents"), ClearRecentlyUsedDocs); -+ } -+ -+ if (hasEntries) { -+ m_isShowing = true; -+ m_popupMenu->exec(pos); -+ m_isShowing = false; -+ } -+ -+ delete m_popupMenu; -+ m_popupMenu = 0; -+} -+ -+void KMenu::slotContextMenu(int selected) -+{ -+ KServiceGroup::Ptr g; -+ QByteArray ba; -+ QDataStream ds(ba, IO_WriteOnly); -+ -+ KURL src,dest; -+ KIO::CopyJob *job; -+ -+ KProcess *proc; -+ -+ QStringList favs = KickerSettings::favorites(); -+ -+ switch (selected) { -+ case AddItemToDesktop: -+ accept(); -+ if (m_popupService) { -+ src.setPath( KGlobal::dirs()->findResource( "apps", m_popupService->desktopEntryPath() ) ); -+ dest.setPath( KGlobalSettings::desktopPath() ); -+ dest.setFileName( src.fileName() ); -+ -+ job = KIO::copyAs( src, dest ); -+ job->setDefaultPermissions( true ); -+ } -+ else { -+ KDesktopFile* df = new KDesktopFile( newDesktopFile(KURL(m_popupPath.path), KGlobalSettings::desktopPath() ) ); -+ df->writeEntry("GenericName", m_popupPath.description); -+ df->writeEntry( "Icon", m_popupPath.icon ); -+ df->writePathEntry( "URL", m_popupPath.path ); -+ df->writeEntry( "Name", m_popupPath.title ); -+ df->writeEntry( "Type", "Link" ); -+ df->sync(); -+ delete df; -+ } -+ accept(); -+ break; -+ -+ case AddItemToPanel: -+ accept(); -+ if (m_popupService) -+ kapp->dcopClient()->send("kicker", "Panel", "addServiceButton(QString)", m_popupService->desktopEntryPath()); -+ else -+#warning FIXME special RecentDocuments/foo.desktop handling -+ kapp->dcopClient()->send("kicker", "Panel", "addURLButton(QString)", m_popupPath.path); -+ accept(); -+ break; -+ -+ case EditItem: -+ case EditMenu: -+ accept(); -+ proc = new KProcess(this); -+ *proc << KStandardDirs::findExe(QString::fromLatin1("kmenuedit")); -+ *proc << "/"+m_popupPath.menuPath.section('/',-200,-2) << m_popupPath.menuPath.section('/', -1); -+ proc->start(); -+ break; -+ -+ case PutIntoRunDialog: -+ accept(); -+ if (m_popupService) -+ kapp->dcopClient()->send("kdesktop", "default", "popupExecuteCommand(QString)", m_popupService->exec()); -+ else -+#warning FIXME special RecentDocuments/foo.desktop handling -+ kapp->dcopClient()->send("kdesktop", "default", "popupExecuteCommand(QString)", m_popupPath.path); -+ accept(); -+ break; -+ -+ case AddMenuToDesktop: { -+ accept(); -+ KDesktopFile *df = new KDesktopFile( newDesktopFile(KURL("programs:/"+m_popupPath.menuPath),KGlobalSettings::desktopPath())); -+ df->writeEntry( "Icon", m_popupPath.icon ); -+ df->writePathEntry( "URL", "programs:/"+m_popupPath.menuPath ); -+ df->writeEntry( "Name", m_popupPath.title ); -+ df->writeEntry( "Type", "Link" ); -+ df->sync(); -+ delete df; -+ -+ break; -+ } -+ case AddMenuToPanel: -+ accept(); -+ ds << "foo" << m_popupPath.menuPath; -+ kapp->dcopClient()->send("kicker", "Panel", "addServiceMenuButton(QString,QString)", ba); -+ break; -+ -+ case AddToFavorites: -+ if (m_popupService) { -+ if (favs.find(m_popupService->storageId())==favs.end()) { -+ KService::Ptr p = KService::serviceByStorageId(m_popupService->storageId()); -+ m_favoriteView->insertMenuItem(p, serviceMenuEndId()+favs.count()+1); -+ favs+=m_popupService->storageId(); -+ } -+ } -+ else { -+ QStringList::Iterator it; -+ for (it = favs.begin(); it != favs.end(); ++it) { -+ if ((*it)[0]=='/') { -+ KDesktopFile df((*it),true); -+ if (df.readURL().replace("file://",QString::null)==m_popupPath.path) -+ break; -+ } -+ } -+ if (it==favs.end()) { -+ QString file = KickerLib::newDesktopFile(m_popupPath.path); -+ KDesktopFile df(file); -+ df.writeEntry("Encoding", "UTF-8"); -+ df.writeEntry("Type","Link"); -+ df.writeEntry("Name", m_popupPath.title); -+ df.writeEntry("GenericName", m_popupPath.description); -+ df.writeEntry("Icon", m_popupPath.icon); -+ df.writeEntry("URL", m_popupPath.path); -+ -+ m_favoriteView->insertItem(m_popupPath.icon, m_popupPath.title, m_popupPath.description, -+ m_popupPath.path, serviceMenuEndId()+favs.count()+1, -1); -+ -+ favs+=file; -+ } -+ } -+ KickerSettings::setFavorites(favs); -+ KickerSettings::writeConfig(); -+ m_browserDirty=true; -+ m_stacker->raiseWidget(FavoriteTab); -+ break; -+ -+ case RemoveFromFavorites: -+ if (m_popupService) { -+ favs.erase(favs.find(m_popupService->storageId())); -+ -+ for (QListViewItemIterator it(m_favoriteView); it.current(); ++it) { -+ KMenuItem* kitem = static_cast(it.current()); -+ if (kitem->service() && kitem->service()->storageId() == m_popupService->storageId()) { -+ delete it.current(); -+ break; -+ } -+ } -+ } -+ else { -+ for (QStringList::Iterator it = favs.begin(); it != favs.end(); ++it) { -+ if ((*it)[0]=='/') { -+ KDesktopFile df((*it),true); -+ if (df.readURL().replace("file://",QString::null)==m_popupPath.path) { -+ QFile::remove((*it)); -+ favs.erase(it); -+ break; -+ } -+ } -+ } -+ for (QListViewItemIterator it(m_favoriteView); it.current(); ++it) { -+ KMenuItem* kitem = static_cast(it.current()); -+ if (!kitem->service() && kitem->path() == m_popupPath.path) { -+ delete it.current(); -+ break; -+ } -+ } -+ } -+ m_favoriteView->slotMoveContent(); -+ KickerSettings::setFavorites(favs); -+ KickerSettings::writeConfig(); -+ m_browserDirty=true; -+ m_stacker->raiseWidget(FavoriteTab); -+ break; -+ -+ case ClearRecentlyUsedApps: -+ clearRecentAppsItems(); -+ break; -+ -+ case ClearRecentlyUsedDocs: -+ clearRecentDocsItems(); -+ break; -+ -+ default: -+ break; -+ } -+} -+ -+void KMenu::resizeEvent ( QResizeEvent * e ) -+{ -+ //kdDebug() << "resizeEvent " << size() << endl; -+ KMenuBase::resizeEvent(e); -+ int ypos = 0; -+ // this is the height remaining to fill -+ int left_height = height(); -+ -+ if ( m_orientation == BottomUp ) -+ { -+ m_resizeHandle->move( e->size().width() - 19, 3); -+ -+ // put the search widget at the top of the menu and give it its desired -+ // height -+ m_search->mainWidget()->setGeometry( 0, ypos, width(), -+ m_search->minimumSize().height() ); -+ left_height -= m_search->minimumSize().height(); -+ ypos += m_search->minimumSize().height(); -+ -+ // place the footer widget at the bottom of the menu and give it its desired -+ // height -+ m_footer->mainWidget()->setGeometry( 0, height() - m_footer->minimumSize().height(), -+ width(), m_footer->minimumSize().height() ); -+ left_height -= m_footer->minimumSize().height(); -+ -+ // place the button box above the footer widget, horizontal placement -+ // has the width of the edge graphics subtracted -+ m_tabBar->setGeometry(button_box_left.width(), -+ height() - m_footer->minimumSize().height() - -+ m_tabBar->sizeHint().height(), -+ width() - button_box_left.width(), -+ m_tabBar->sizeHint().height() ); -+ left_height -= m_tabBar->sizeHint().height(); -+ -+ // place the main (stacker) widget below the search widget, -+ // in the remaining vertical space -+ m_stacker->setGeometry(0, ypos, -+ width(), -+ left_height ); -+ -+ } -+ else // TopDown orientation -+ { -+ // place the 'footer' widget at the top of the menu and give it -+ // its desired height -+ m_footer->mainWidget()->setGeometry( 0, -+ ypos /*height() - m_footer->minimumSize().height()*/, -+ width(), -+ m_footer->minimumSize().height() ); -+ ypos += m_footer->minimumSize().height(); -+ left_height -= m_footer->minimumSize().height(); -+ -+ // place the button box next at the top of the menu. -+ // has the width of the edge graphics subtracted -+ m_tabBar->setGeometry(button_box_left.width(), ypos, width() - button_box_left.width(), -+ m_tabBar->sizeHint().height()); -+ -+ ypos += m_tabBar->sizeHint().height(); -+ left_height -= m_tabBar->sizeHint().height(); -+ -+ // put the search widget above the footer widget -+ // height -+ m_search->mainWidget()->setGeometry( 0, -+ height() - m_search->minimumSize().height(), -+ width(), -+ m_search->minimumSize().height() -+ ); -+ left_height -= m_search->minimumSize().height(); -+ -+ // place the main (stacker) widget below the button box, -+ // in the remaining vertical space -+ m_stacker->setGeometry(0, ypos, -+ width(), -+ left_height ); -+ m_resizeHandle->move( e->size().width() - 19, e->size().height() - 19); -+ } -+ paintSearchTab( false ); -+} -+ -+void KMenu::mousePressEvent ( QMouseEvent * e ) -+{ -+ if ( m_orientation == BottomUp ) { -+ if (e->x() > width() - m_resizeHandle->width() && -+ e->y() < m_resizeHandle->height() ) -+ { -+ m_isresizing = true; -+ } -+ } -+ else { -+ if (e->x() > width() - m_resizeHandle->width() && -+ e->y() > height() - m_resizeHandle->height() ) -+ { -+ m_isresizing = true; -+ } -+ } -+ KMenuBase::mousePressEvent(e); -+} -+ -+void KMenu::mouseReleaseEvent ( QMouseEvent * /*e*/ ) -+{ -+ m_isresizing = false; -+} -+ -+void KMenu::mouseMoveEvent ( QMouseEvent * e ) -+{ -+ if ( hasMouseTracking() && m_isresizing ) { -+ m_stacker->setMinimumSize( QSize(0, 0) ); -+ m_stacker->setMaximumSize( QSize(32000, 32000) ); -+ int newWidth = QMAX( e->x() - x(), minimumSizeHint().width() ); -+ if ( m_orientation == BottomUp ) { -+ int newHeight = QMAX( height() - e->y(), minimumSizeHint().height() + 10 ); -+ int newY = y() + height() - newHeight; -+ setGeometry( x(), newY, newWidth, newHeight); -+ } -+ else { -+ setGeometry( x(), y(), newWidth, QMAX( e->y(), minimumSizeHint().height() + 10 )); -+ } -+ } -+} -+ -+void KMenu::clearedHistory() -+{ -+ saveConfig(); -+} -+ -+void KMenu::saveConfig() -+{ -+ KickerSettings::setHistory( m_kcommand->historyItems() ); -+ KickerSettings::setCompletionItems( m_kcommand->completionObject()->items() ); -+ KickerSettings::writeConfig(); -+} -+ -+void KMenu::notifyServiceStarted(KService::Ptr service) -+{ -+ // Inform other applications (like the quickstarter applet) -+ // that an application was started -+ QByteArray params; -+ QDataStream stream(params, IO_WriteOnly); -+ stream << "minicli" << service->storageId(); -+ kdDebug() << "minicli appLauncher dcop signal: " << service->storageId() << endl; -+ KApplication::kApplication()->dcopClient()->emitDCOPSignal("appLauncher", -+ "serviceStartedByStorageId(QString,QString)", params); -+} -+ -+void KMenu::parseLine( bool final ) -+{ -+ QString cmd = m_kcommand->currentText().stripWhiteSpace(); -+ m_filterData->setData( cmd ); -+ -+ if( final ) -+ KURIFilter::self()->filterURI( *(m_filterData), m_finalFilters ); -+ else -+ KURIFilter::self()->filterURI( *(m_filterData), m_middleFilters ); -+ -+ m_iconName = m_filterData->iconName(); -+ -+ kdDebug (1207) << "Command: " << m_filterData->uri().url() << endl; -+ kdDebug (1207) << "Arguments: " << m_filterData->argsAndOptions() << endl; -+} -+ -+// report error as a title in the menu -+void KMenu::reportError (QString error) -+{ -+ int index = 1000; //getHitMenuItemPosition (new HitMenuItem (base_category_id[0], 0)); -+ kndDebug () << "Inserting error:" << error << " at position " << index << endl; -+ m_searchResultsWidget->insertSeparator(OTHER_ID_BASE + 120, error, index); -+} -+ -+int KMenu::getHitMenuItemPosition ( HitMenuItem *hit_item) -+{ -+ QPtrListIterator it (m_current_menu_items); -+ const HitMenuItem *cur_item; -+ int pos = 0; -+ while ((cur_item = it.current ()) != NULL) { -+ ++it; -+ if ((cur_item->category!=hit_item->category || !cur_item->display_name.isEmpty()) && (*hit_item) < (*cur_item)) -+ break; -+ pos++; -+ } -+ m_current_menu_items.insert (pos, hit_item); -+ -+ return pos + 1; -+} -+ -+bool KMenu::checkUriInMenu( const KURL &uri) -+{ -+ QPtrListIterator it (m_current_menu_items); -+ const HitMenuItem *cur_item; -+ while ((cur_item = it.current ()) != NULL) { -+ ++it; -+ if (cur_item->uri == uri ) -+ return true; -+ } -+ -+ return false; -+} -+ -+void KMenu::searchActionClicked(QListViewItem* item) -+{ -+ accept(); -+ -+ addToHistory(); -+ if (item==m_searchIndex) { -+ QByteArray data; -+ QDataStream arg(data, IO_WriteOnly); -+ arg << m_kcommand->currentText(); -+ -+ if (ensureServiceRunning("kerry")) -+ kapp->dcopClient()->send("kerry","search","search(QString)", data); -+ } -+ else { -+ KURIFilterData data; -+ QStringList list; -+ data.setData( m_kcommand->currentText() ); -+ list << "kurisearchfilter" << "kuriikwsfilter"; -+ -+ if( !KURIFilter::self()->filterURI(data, list) ) { -+ KDesktopFile file("searchproviders/google.desktop", true, "services"); -+ data.setData(file.readEntry("Query").replace("\\{@}", m_kcommand->currentText())); -+ } -+ -+ (void) new KRun( data.uri(), parentWidget()); -+ } -+} -+ -+void KMenu::addToHistory() -+{ -+ QString search = m_kcommand->currentText().stripWhiteSpace(); -+ -+ if (search.length()<4) -+ return; -+ -+ m_kcommand->addToHistory( search ); -+} -+ -+QString KMenu::newDesktopFile(const KURL& url, const QString &directory) -+{ -+ QString base = url.fileName(); -+ if (base.endsWith(".desktop")) -+ base.truncate(base.length()-8); -+ QRegExp r("(.*)(?=-\\d+)"); -+ if (r.search(base) > -1) -+ base = r.cap(1); -+ -+ QString file = base + ".desktop"; -+ -+ for(int n = 1; ++n; ) -+ { -+ if (!QFile::exists(directory+file)) -+ break; -+ -+ file = QString("%2-%1.desktop").arg(n).arg(base); -+ } -+ return directory+file; -+} -+ -+void KMenu::updateRecentlyUsedApps(KService::Ptr &service) -+{ -+ QString strItem(service->desktopEntryPath()); -+ -+ // don't add an item from root kmenu level -+ if (!strItem.contains('/')) -+ { -+ return; -+ } -+ -+ // add it into recent apps list -+ RecentlyLaunchedApps::the().appLaunched(strItem); -+ RecentlyLaunchedApps::the().save(); -+ RecentlyLaunchedApps::the().m_bNeedToUpdate = true; -+} -+ -+QSize KMenu::sizeHint() const -+{ -+#warning FIXME -+ // this should be only for the inner area so layout changes do not break it -+ const int width = kMin(KickerSettings::kMenuWidth(), QApplication::desktop()->screen()->width()-50); -+ -+ const int height = kMin(KickerSettings::kMenuHeight(), QApplication::desktop()->screen()->height()-50); -+ QSize wanted(width, height); -+ kdDebug() << "show " << minimumSizeHint() << " " << m_stacker->minimumSizeHint() << " " -+ << m_searchFrame->minimumSizeHint() << " " << wanted << endl; -+ bool isDefault = wanted.isNull(); -+ wanted = wanted.expandedTo(minimumSizeHint()); -+ if ( isDefault ) -+ wanted.setHeight( wanted.height() + ( m_favoriteView->goodHeight() - m_stacker->minimumSizeHint().height() ) ); -+ -+ return wanted; -+} -+ -+QSize KMenu::minimumSizeHint() const -+{ -+ QSize minsize; -+ minsize.setWidth( minsize.width() + m_tabBar->sizeHint().width() ); -+ minsize.setWidth( QMAX( minsize.width(), -+ m_search->minimumSize().width() ) ); -+ minsize.setWidth( QMAX( minsize.width(), -+ m_search->minimumSize().width() ) ); -+ -+ minsize.setHeight( minsize.height() + -+ m_search->minimumSize().height() + -+ m_footer->minimumSize().height() + -+ 180 ); // 180 is a very rough guess for 32 icon size -+ return minsize; -+} -+ -+void KMenu::slotFavoritesMoved( QListViewItem* item, QListViewItem* /*afterFirst*/, QListViewItem* afterNow) -+{ -+ KMenuItem* kitem = dynamic_cast(item); -+ KMenuItem* kafterNow = dynamic_cast(afterNow); -+ -+ QStringList favs = KickerSettings::favorites(); -+ QStringList::Iterator it; -+ QString addFav = QString::null; -+ -+ // remove at old position -+ if (kitem->service()) -+ { -+ favs.erase(favs.find(kitem->service()->storageId())); -+ addFav = kitem->service()->storageId(); -+ } -+ else -+ { -+ for (it = favs.begin(); it != favs.end(); ++it) -+ { -+ if ((*it)[0]=='/') -+ { -+ KDesktopFile df((*it),true); -+ if (df.readURL().replace("file://",QString::null)==kitem->path()) -+ { -+ addFav = *it; -+ favs.erase(it); -+ break; -+ } -+ } -+ } -+ } -+ -+ if (addFav.isEmpty()) -+ return; -+ -+ if (!kafterNow || dynamic_cast(afterNow)) -+ { -+ favs.prepend(addFav); -+ } -+ else -+ { -+ // add at new position -+ for (it = favs.begin(); it != favs.end(); ++it) -+ { -+ if ((*it)[0]=='/' && !kafterNow->service()) -+ { -+ KDesktopFile df((*it),true); -+ if (df.readURL().replace("file://",QString::null)==kafterNow->path()) -+ { -+ kdDebug() << "insert after " << kafterNow->path() << endl; -+ favs.insert(++it,addFav); -+ break; -+ } -+ } -+ else if (kafterNow->service() && *it==kafterNow->service()->storageId()) -+ { -+ kdDebug() << "insert after service " << kafterNow->service() << endl; -+ favs.insert(++it,addFav); -+ break; -+ } -+ } -+ } -+ kdDebug() << "favs " << favs << endl; -+ -+ KickerSettings::setFavorites(favs); -+ KickerSettings::writeConfig(); -+ -+ m_favoriteView->slotMoveContent(); -+} -+ -+void KMenu::updateMedia() -+{ -+ QStringList devices = m_mediaWatcher->devices(); -+ if ( devices.isEmpty() ) -+ return; -+ -+ int nId = serviceMenuStartId(); -+ if ( m_media_id ) { -+ for ( int i = m_media_id + 1 ;; ++i ) -+ { -+ KMenuItem *item = m_systemView->findItem( i ); -+ if ( !item ) -+ break; -+ if ( !item->path().startsWith( "system:/" ) ) -+ break; -+ media_mimetypes.remove(item->path()); -+ delete item; -+ } -+ nId = m_media_id + 1; -+ } else { -+ m_media_id = nId; -+ m_systemView->insertSeparator( nId++, i18n("Media"), -1); -+ } -+ -+ for ( QStringList::ConstIterator it = devices.constBegin(); it != devices.constEnd(); ++it ) -+ { -+ QString id = ( *it ); -+ QString name = *++it; -+ QString label = *++it; -+ QString userLabel = ( *++it ); -+ bool mountable = ( *++it == "true" ); // bool -+ ( void )mountable; -+ QString deviceNode = ( *++it ); -+ QString mountPoint = ( *++it ); -+ QString fsType = ( *++it ); -+ bool mounted = ( *++it == "true" ); // bool -+ QString baseURL = ( *++it ); -+ QString mimeType = ( *++it ); -+ QString iconName = ( *++it ); -+ -+ media_mimetypes["system:/media/"+name] = mimeType; -+ -+ if ( iconName.isEmpty() ) // no user icon, query the MIME type -+ { -+ KMimeType::Ptr mime = KMimeType::mimeType( mimeType ); -+ iconName = mime->icon( QString::null, false ); -+ } -+ -+ QString descr = deviceNode; -+ if ( mounted ) -+ { -+ descr = mountPoint; -+ // calc the free/total space -+ struct statfs sfs; -+ if ( statfs( QFile::encodeName( mountPoint ), &sfs ) == 0 ) -+ { -+ uint64_t total = ( uint64_t )sfs.f_blocks * sfs.f_bsize; -+ uint64_t avail = ( uint64_t )( getuid() ? sfs.f_bavail : sfs.f_bfree ) * sfs.f_bsize; -+ if ( avail < total && avail > 1024 ) { -+ label += " " + i18n( "(%1 available)" ).arg( KIO::convertSize(avail) ); -+ } -+ } -+ } -+ m_systemView->insertItem( iconName, userLabel.isEmpty() ? label : userLabel, -+ descr, "system:/media/" + name, nId++, -1 ); -+ -+ ++it; // skip separator -+ } -+} -+ -+bool KMenu::ensureServiceRunning(const QString & service) -+{ -+ QStringList URLs; -+ QByteArray data, replyData; -+ QCString replyType; -+ QDataStream arg(data, IO_WriteOnly); -+ arg << service << URLs; -+ -+ if ( !kapp->dcopClient()->call( "klauncher", "klauncher", "start_service_by_desktop_name(QString,QStringList)", -+ data, replyType, replyData) ) { -+ qWarning( "call to klauncher failed."); -+ return false; -+ } -+ QDataStream reply(replyData, IO_ReadOnly); -+ -+ if ( replyType != "serviceResult" ) -+ { -+ qWarning( "unexpected result '%s' from klauncher.", replyType.data()); -+ return false; -+ } -+ int result; -+ QCString dcopName; -+ QString error; -+ reply >> result >> dcopName >> error; -+ if (result != 0) -+ { -+ qWarning("Error starting: %s", error.local8Bit().data()); -+ return false; -+ } -+ return true; -+} -+ -+void KMenu::slotFavDropped(QDropEvent * ev, QListViewItem *after ) -+{ -+ QStringList favs = KickerSettings::favorites(); -+ KMenuItem *newItem = 0; -+ -+ if (KMenuItemDrag::canDecode(ev)) -+ { -+ KMenuItemInfo item; -+ KMenuItemDrag::decode(ev,item); -+ -+ if (item.m_s) -+ { -+ if (favs.find(item.m_s->storageId())==favs.end()) -+ { -+ newItem = m_favoriteView->insertMenuItem(item.m_s, serviceMenuEndId()+favs.count()+1); -+ favs += item.m_s->storageId(); -+ } -+ } -+ else -+ { -+ QString uri = item.m_path; -+ if (uri.startsWith(locateLocal("data", QString::fromLatin1("RecentDocuments/")))) { -+ KDesktopFile df(uri,true); -+ uri=df.readURL(); -+ } -+ -+ QStringList::Iterator it; -+ for (it = favs.begin(); it != favs.end(); ++it) -+ { -+ if ((*it)[0]=='/') -+ { -+ KDesktopFile df((*it),true); -+ if (df.readURL().replace("file://",QString::null)==uri) -+ break; -+ } -+ } -+ if (it==favs.end()) -+ { -+ QString file = KickerLib::newDesktopFile(uri); -+ KDesktopFile df(file); -+ df.writeEntry("Encoding", "UTF-8"); -+ df.writeEntry("Type","Link"); -+ df.writeEntry("Name", item.m_title); -+ df.writeEntry("GenericName", item.m_description); -+ df.writeEntry("Icon", item.m_icon); -+ df.writeEntry("URL", uri); -+ -+ newItem = m_favoriteView->insertItem(item.m_icon, item.m_title, item.m_description, -+ uri, serviceMenuEndId()+favs.count()+1, -1); -+ favs += file; -+ } -+ } -+ } -+ else if (QTextDrag::canDecode(ev)) -+ { -+ QString text; -+ QTextDrag::decode(ev,text); -+ -+ if (text.endsWith(".desktop")) -+ { -+ KService::Ptr p = KService::serviceByDesktopPath(text.replace("file://",QString::null)); -+ if (p && favs.find(p->storageId())==favs.end()) { -+ newItem = m_favoriteView->insertMenuItem(p, serviceMenuEndId()+favs.count()+1); -+ favs+=p->storageId(); -+ } -+ } -+ else -+ { -+ QStringList::Iterator it; -+ for (it = favs.begin(); it != favs.end(); ++it) -+ { -+ if ((*it)[0]=='/') -+ { -+ KDesktopFile df((*it),true); -+ if (df.readURL().replace("file://",QString::null)==text) -+ break; -+ } -+ } -+ if (it==favs.end()) -+ { -+ KFileItem* item = new KFileItem(text, QString::null, KFileItem::Unknown); -+ KURL kurl(text); -+ -+ QString file = KickerLib::newDesktopFile(text); -+ KDesktopFile df(file); -+ df.writeEntry("Encoding", "UTF-8"); -+ df.writeEntry("Type","Link"); -+ df.writeEntry("Name", item->name()); -+ df.writeEntry("GenericName", i18n("Directory: %1").arg(kurl.upURL().path())); -+ df.writeEntry("Icon", item->iconName()); -+ df.writeEntry("URL", text); -+ -+ newItem = m_favoriteView->insertItem(item->iconName(), item->name(), i18n("Directory: %1").arg(kurl.upURL().path()), text, serviceMenuEndId()+favs.count()+1, -1); -+ favs += file; -+ } -+ } -+ } -+ -+ if ( newItem ) { -+ if (!after && m_favoriteView->childCount()>0) { -+ newItem->moveItem( m_favoriteView->firstChild() ); -+ m_favoriteView->firstChild()->moveItem( newItem ); -+ } -+ else -+ newItem->moveItem( after ); -+ KickerSettings::setFavorites(favs); -+ slotFavoritesMoved( newItem, 0, after ); -+ } -+ m_stacker->raiseWidget(m_favoriteView); -+} -+ -+void KMenu::resetOverflowCategory() -+{ -+ if (m_overflowCategoryState==NotNeeded) -+ m_overflowList.setAutoDelete( true ); -+ -+ m_overflowList.clear(); -+ m_overflowList.setAutoDelete( false ); -+ m_overflowCategoryState = None; -+ m_overflowCategory = num_categories; -+} -+ -+void KMenu::fillOverflowCategory() -+{ -+ if (m_overflowCategoryState==Filling) { -+ initCategoryTitlesUpdate(); -+ for (HitMenuItem * item = m_overflowList.first(); item; item = m_overflowList.next() ) { -+ max_category_id [item->category]++; -+ item->id=max_category_id [item->category]; -+ -+ KMenuItem *hit_item = m_searchResultsWidget->insertItem(iconForHitMenuItem(item), item->display_name, item->display_info, item->uri.url(), max_category_id [item->category], getHitMenuItemPosition (item)); -+ hit_item->setService(item->service); -+ } -+ updateCategoryTitles(); -+ } -+} -+ -+int KMenu::max_items(int category) const -+{ -+ if (category==ACTIONS) -+ return 10; -+ -+ return 5; -+} -+ -+#define DBUS_HAL_INTERFACE "org.freedesktop.Hal" -+#define DBUS_HAL_SYSTEM_POWER_INTERFACE "org.freedesktop.Hal.Device.SystemPowerManagement" -+#define HAL_UDI_COMPUTER "/org/freedesktop/Hal/devices/computer" -+ -+#ifdef KDELIBS_SUSE -+#include -+#endif -+ -+void KMenu::insertSuspendOption( int &nId, int &index ) -+{ -+#ifdef KDELIBS_SUSE -+ int supported = -1; -+ bool suspend_ram, suspend_disk, standby; -+ -+ liblazy_hal_get_property_bool(HAL_UDI_COMPUTER, "power_management.can_suspend", &supported); -+ if (supported == 1) -+ suspend_ram = true; -+ else -+ suspend_ram = false; -+ liblazy_hal_get_property_bool(HAL_UDI_COMPUTER, "power_management.can_standby", &supported); -+ if (supported == 1) -+ standby = true; -+ else -+ standby = false; -+ liblazy_hal_get_property_bool(HAL_UDI_COMPUTER, "power_management.can_hibernate", &supported); -+ if (supported == 1) -+ suspend_disk = true; -+ else -+ suspend_disk = false; -+ -+ if (liblazy_hal_is_caller_privileged("org.freedesktop.hal.power-management.hibernate") != 1) -+ suspend_disk = false; -+ if (liblazy_hal_is_caller_privileged("org.freedesktop.hal.power-management.suspend") != 1) -+ suspend_ram = false; -+ if (liblazy_hal_is_caller_privileged("org.freedesktop.hal.power-management.standby") != 1) -+ standby = false; -+ -+ if ( ! ( standby + suspend_ram + suspend_disk ) ) -+ return; -+ -+ i18n("Suspend Computer"); -+ -+ if ( suspend_disk ) -+ m_exitView->leftView()->insertItem( "suspend2disk", i18n( "Suspend to Disk" ), -+ i18n( "Pause without logging out" ), "kicker:/suspend_disk", nId++, index++ ); -+ -+ if ( suspend_ram ) -+ m_exitView->leftView()->insertItem( "suspend2ram", i18n( "Suspend to RAM" ), -+ i18n( "Pause without logging out" ), "kicker:/suspend_ram", nId++, index++ ); -+ -+ if ( standby ) -+ m_exitView->leftView()->insertItem( "player_pause", i18n( "Standby" ), -+ i18n( "Pause without logging out" ), "kicker:/standby", nId++, index++ ); -+#endif -+} -+ -+void KMenu::slotSuspend(int id) -+{ -+#ifdef KDELIBS_SUSE -+ int error = 0; -+ int wake = 0; -+ DBusMessage *reply = 0; -+ -+ if (id == 1) { -+ error = liblazy_dbus_system_send_method_call(DBUS_HAL_INTERFACE, -+ HAL_UDI_COMPUTER, -+ DBUS_HAL_SYSTEM_POWER_INTERFACE, -+ "Hibernate", -+ &reply, -+ DBUS_TYPE_INVALID); -+ } else if (id == 2) -+ error = liblazy_dbus_system_send_method_call(DBUS_HAL_INTERFACE, -+ HAL_UDI_COMPUTER, -+ DBUS_HAL_SYSTEM_POWER_INTERFACE, -+ "Suspend", -+ &reply, -+ DBUS_TYPE_INT32, -+ &wake, -+ DBUS_TYPE_INVALID); -+ else if (id == 3) -+ error = liblazy_dbus_system_send_method_call(DBUS_HAL_INTERFACE, -+ HAL_UDI_COMPUTER, -+ DBUS_HAL_SYSTEM_POWER_INTERFACE, -+ "Standby", -+ &reply, -+ DBUS_TYPE_INVALID); -+ else -+ return; -+ if (error) -+#endif -+ KMessageBox::error(this, i18n("Suspend failed")); -+ -+} -+ -+// vim:cindent:sw=4: ---- kicker/ui/kmenuitembase.ui (Revision 0) -+++ kicker/ui/kmenuitembase.ui (Revision 849791) -@@ -0,0 +1,141 @@ -+ -+KMenuItemBase -+ -+ -+ KMenuItemBase -+ -+ -+ -+ 0 -+ 0 -+ 514 -+ 80 -+ -+ -+ -+ -+ 7 -+ 5 -+ 0 -+ 0 -+ -+ -+ -+ -+ 0 -+ 0 -+ -+ -+ -+ -+ 32767 -+ 80 -+ -+ -+ -+ KMenuItemBase -+ -+ -+ -+ unnamed -+ -+ -+ 2 -+ -+ -+ -+ layout11 -+ -+ -+ -+ unnamed -+ -+ -+ -+ itemTitle -+ -+ -+ -+ 7 -+ 1 -+ 1 -+ 0 -+ -+ -+ -+ -+ 14 -+ -+ -+ -+ -+ -+ -+ RichText -+ -+ -+ WordBreak|AlignTop -+ -+ -+ -+ -+ itemDescription -+ -+ -+ -+ 7 -+ 7 -+ 0 -+ 1 -+ -+ -+ -+ -+ 188 -+ 188 -+ 188 -+ -+ -+ -+ -+ -+ -+ RichText -+ -+ -+ WordBreak|AlignTop -+ -+ -+ -+ -+ -+ -+ layout4 -+ -+ -+ -+ unnamed -+ -+ -+ -+ itemPixmap -+ -+ -+ -+ 64 -+ 64 -+ -+ -+ -+ -+ -+ -+ AlignTop|AlignHCenter -+ -+ -+ -+ -+ -+ -+ -+ ---- kicker/ui/addappletvisualfeedback.cpp (Revision 849788) -+++ kicker/ui/addappletvisualfeedback.cpp (Revision 849791) -@@ -51,6 +51,7 @@ - m_richText(0), - m_dissolveDelta(-1), - m_frames(1), -+ m_moveTimer(0, "m_moveTimer"), - m_dirty(false) - { - setFocusPolicy(NoFocus); ---- kicker/ui/kickoff_bar.cpp (Revision 0) -+++ kicker/ui/kickoff_bar.cpp (Revision 849791) -@@ -0,0 +1,200 @@ -+/***************************************************************** -+ -+ Copyright (c) 1996-2000 the kicker authors. See file AUTHORS. -+ Copyright (c) 2006 Dirk Mueller -+ -+ This program is free software; you can redistribute it and/or -+ modify it under the terms of the GNU General Public -+ License as published by the Free Software Foundation; either -+ version 2 of the License, or (at your option) any later version. -+ -+ This program is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ General Public License for more details. -+ -+ You should have received a copy of the GNU General Public License -+ along with this program; see the file COPYING. If not, write to -+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, -+ Boston, MA 02110-1301, USA. -+ -+******************************************************************/ -+ -+#include "kickoff_bar.h" -+#include "itemview.h" -+ -+#include -+#include -+#include -+#include -+#include -+ -+#include -+#include "kickerSettings.h" -+ -+KickoffTabBar::KickoffTabBar(QWidget* parent, const char* name) -+ : QTabBar(parent, name), m_tabsActivated(true) -+{ -+ setAcceptDrops(true); -+} -+ -+void KickoffTabBar::deactivateTabs(bool b) -+{ -+ m_tabsActivated = !b; -+ -+ update(); -+} -+ -+void KickoffTabBar::paint(QPainter* p, QTab* t, bool selected) const -+{ -+ QStyle::SFlags flags = QStyle::Style_Default; -+ -+ if (isEnabled() && t->isEnabled()) -+ flags |= QStyle::Style_Enabled; -+ if ( m_tabsActivated && selected ) -+ flags |= QStyle::Style_Selected; -+// else if(t == d->pressed) -+// flags |= QStyle::Style_Sunken; -+ //selection flags -+ if(t->rect().contains(mapFromGlobal(QCursor::pos()))) -+ flags |= QStyle::Style_MouseOver; -+ style().drawControl( QStyle::CE_TabBarTab, p, this, t->rect(), -+ colorGroup(), flags, QStyleOption(t) ); -+ -+ paintLabel( p, t->rect(), t, t->identifier() == keyboardFocusTab() ); -+} -+ -+ -+void KickoffTabBar::paintLabel(QPainter* p, const QRect& br, QTab* t, bool has_focus) const -+{ -+ QRect r = br; -+ -+ bool selected = m_tabsActivated && (currentTab() == t->identifier()); -+ int vframe = style().pixelMetric( QStyle::PM_TabBarTabVSpace, this ); -+ -+ p->setFont( font() ); -+ QFontMetrics fm = p->fontMetrics(); -+ int fw = fm.size( Qt::SingleLine|Qt::ShowPrefix, t->text() ).width(); -+ -+ QRect rt(r); -+ rt.setWidth(fw); -+ -+ if ( t->iconSet()) -+ { -+ // the tab has an iconset, draw it in the right mode -+ QIconSet::Mode mode = (t->isEnabled() && isEnabled()) -+ ? QIconSet::Normal : QIconSet::Disabled; -+ if ( mode == QIconSet::Normal && has_focus ) -+ mode = QIconSet::Active; -+ QPixmap pixmap = t->iconSet()->pixmap( QIconSet::Large, mode ); -+ int pixw = pixmap.width(); -+ int pixh = pixmap.height(); -+ int xoff = br.x() + (br.width() - pixw)/2; -+ int yoff = br.y() + (br.height() - 4 - pixh - ((KickerSettings::kickoffTabBarFormat() != KickerSettings::IconOnly) ? fm.height() : 0) - vframe)/2; -+ -+ p->drawPixmap( xoff, 4 + yoff, pixmap ); -+ -+ r.setTop(vframe/2 + yoff + pixh - 8); -+ rt.setTop(vframe/2 + yoff + pixh - 8); -+ rt.setHeight(((KickerSettings::kickoffTabBarFormat() != KickerSettings::IconOnly) ? fm.height() : 0) + vframe/2); -+ } -+ else -+ rt.setHeight(vframe/2 + fm.height()); -+ -+ rt.setWidth(fw+8); -+ rt.moveCenter(r.center()); -+ -+ QStyle::SFlags flags = QStyle::Style_Default; -+ -+ if (isEnabled() && t->isEnabled()) -+ flags |= QStyle::Style_Enabled; -+ if (has_focus) -+ flags |= QStyle::Style_HasFocus; -+ if ( selected ) -+ flags |= QStyle::Style_Selected; -+ // else if(t == d->pressed) -+ // flags |= QStyle::Style_Sunken; -+ if(t->rect().contains(mapFromGlobal(QCursor::pos()))) -+ flags |= QStyle::Style_MouseOver; -+ style().drawControl( QStyle::CE_TabBarLabel, p, this, rt, -+ t->isEnabled() ? colorGroup(): palette().disabled(), -+ flags, QStyleOption(t) ); -+} -+ -+QSize KickoffTabBar::sizeHint() const -+{ -+ QSize s = QTabBar::sizeHint(); -+ -+ return s; -+} -+ -+void KickoffTabBar::layoutTabs() -+{ -+ QTabBar::layoutTabs(); -+ -+ QFontMetrics fm = fontMetrics(); -+ int fh = ((KickerSettings::kickoffTabBarFormat() != KickerSettings::IconOnly) ? fm.height() : 0) + 4; -+ -+ int hframe = style().pixelMetric( QStyle::PM_TabBarTabHSpace, this ); -+ int vframe = style().pixelMetric( QStyle::PM_TabBarTabVSpace, this ); -+ int overlap = style().pixelMetric( QStyle::PM_TabBarTabOverlap, this ); -+ -+ QSize s; -+ for (int t = 0; t < count(); ++t) -+ { -+ QTab* tab = tabAt(t); -+ if (tab->iconSet()) -+ s = s.expandedTo(tab->iconSet()->pixmap(QIconSet::Large, QIconSet::Normal).size()); -+ } -+ -+ int x = 0; -+ for (int t = 0; t < count(); ++t) { -+ QTab* tab = tabAt(QApplication::reverseLayout() ? count() - t - 1 : t); -+ int h = fh; -+ if (tab->iconSet()) -+ h += 4 + s.height() + 4; -+ QRect r = tab->rect(); -+ -+ int fw = fm.size( Qt::SingleLine|Qt::ShowPrefix, tab->text() ).width(); -+ int iw = 0; -+ if ( tab->iconSet() != 0 ) -+ iw = tab->iconSet()->pixmap( QIconSet::Large, QIconSet::Normal ).width(); -+ int w = QMAX(iw, fw + 6 + 6 ) + hframe; -+ h += ((KickerSettings::kickoffTabBarFormat() != KickerSettings::IconOnly) ? fm.height() : 0) + vframe; -+ tab->setRect(QRect(QPoint(x, 0), style().sizeFromContents(QStyle::CT_TabBarTab, this, -+ QSize(w, h), QStyleOption(tab)))); -+ x += tab->rect().width() - overlap; -+ } -+} -+ -+void KickoffTabBar::dragEnterEvent(QDragEnterEvent* event) -+{ -+ event->accept(KMenuItemDrag::canDecode(event)); -+} -+ -+void KickoffTabBar::dragMoveEvent(QDragMoveEvent* event) -+{ -+ QTab* t = selectTab(event->pos()); -+ -+ // ### uhhh, look away -+ if (t && t->identifier() == 0) -+ { -+ setCurrentTab(t); -+ } -+} -+ -+void KickoffTabBar::mousePressEvent( QMouseEvent * e ) -+{ -+ if ( e->button() != LeftButton ) { -+ e->ignore(); -+ return; -+ } -+ QTab *t = selectTab( e->pos() ); -+ if ( t && t->isEnabled() ) { -+ emit tabClicked(t); -+ } -+ QTabBar::mousePressEvent(e); -+} -+ -+#include "kickoff_bar.moc" -+// vim:cindent:sw=4: ---- kicker/ui/media_watcher.h (Revision 0) -+++ kicker/ui/media_watcher.h (Revision 849791) -@@ -0,0 +1,51 @@ -+/***************************************************************** -+ -+Copyright (c) 2006 Stephan Kulow -+ -+Permission is hereby granted, free of charge, to any person obtaining a copy -+of this software and associated documentation files (the "Software"), to deal -+in the Software without restriction, including without limitation the rights -+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -+copies of the Software, and to permit persons to whom the Software is -+furnished to do so, subject to the following conditions: -+ -+The above copyright notice and this permission notice shall be included in -+all copies or substantial portions of the Software. -+ -+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -+AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -+AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -+ -+******************************************************************/ -+ -+#ifndef _media_watcher_ -+#define _media_watcher_ -+ -+#include -+#include -+#include -+ -+class MediaWatcher : public QObject, public DCOPObject -+{ -+ Q_OBJECT -+ K_DCOP -+ -+ QStringList m_devices; -+ void updateDevices(); -+ -+k_dcop: -+ void slotMediumAdded(QString medium, bool a); -+ -+signals: -+ void mediumChanged(); -+ -+public: -+ MediaWatcher(QObject *parent); -+ -+ QStringList devices() const { return m_devices; } -+}; -+ -+#endif ---- kicker/ui/appletop_mnu.h (Revision 849788) -+++ kicker/ui/appletop_mnu.h (Revision 849791) -@@ -47,6 +47,9 @@ - signals: - void escapePressed(); - -+protected slots: -+ void toggleLegacy(); -+ - protected: - void keyPressEvent(QKeyEvent* e); - }; ---- kicker/ui/flipscrollview.h (Revision 0) -+++ kicker/ui/flipscrollview.h (Revision 849791) -@@ -0,0 +1,118 @@ -+/***************************************************************** -+ -+Copyright (c) 2006 Will Stephenson -+ -+Permission is hereby granted, free of charge, to any person obtaining a copy -+of this software and associated documentation files (the "Software"), to deal -+in the Software without restriction, including without limitation the rights -+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -+copies of the Software, and to permit persons to whom the Software is -+furnished to do so, subject to the following conditions: -+ -+The above copyright notice and this permission notice shall be included in -+all copies or substantial portions of the Software. -+ -+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -+AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -+AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -+ -+******************************************************************/ -+ -+/* -+ * Flip scroll menu -+ * Each level of the menu is a separate QListView -+ * Child items are added to their own QListView. -+ * When a parent is clicked, we look up its child menu and insert -+ * that in a QScrollView, then scroll to it. -+ * -+ * Need to intercept QListViewItems' parent param and instead of -+ * inserting directly into parent, insert into parent item's listview -+ * -+ * So need -+ * - adapted QLVI -+ * - wrap QLV and offer same interface -+ */ -+ -+#ifndef FLIPSCROLLVIEW_H -+#define FLIPSCROLLVIEW_H -+ -+#include -+#include -+#include -+#include -+#include -+#include -+#include "service_mnu.h" -+ -+class ItemView; -+ -+class BackFrame : public QFrame -+{ -+ Q_OBJECT -+ -+public: -+ BackFrame( QWidget *parent ); -+ virtual void drawContents( QPainter *p ); -+ -+ void enterEvent ( QEvent * ); -+ void leaveEvent( QEvent * ); -+ void mousePressEvent ( QMouseEvent * e ); -+ -+signals: -+ void clicked(); -+ -+private: -+ QPixmap left_triangle; -+ bool mouse_inside; -+}; -+ -+class FlipScrollView : public QScrollView -+{ -+ Q_OBJECT -+public: -+ enum State{ StoppedLeft, StoppedRight, ScrollingLeft, ScrollingRight }; -+ FlipScrollView( QWidget * parent = 0, const char * name = 0 ); -+ ~FlipScrollView(); -+ -+ ItemView *currentView() const; -+ ItemView *leftView() const; -+ ItemView *rightView() const; -+ ItemView *prepareLeftMove(bool clear=true); -+ ItemView *prepareRightMove(); -+ -+ void flipScroll(const QString& selectMenuPath = QString::null); -+ void showBackButton(bool enable); -+ bool showsBackButton() const {return mShowBack;} -+ -+protected slots: -+ void slotScrollTimer(); -+ -+signals: -+ void startService(KService::Ptr kservice); -+ void startURL(const QString& u); -+ void rightButtonPressed(QListViewItem*,const QPoint&,int); -+ void backButtonClicked(); -+ -+protected: -+ void viewportResizeEvent ( QResizeEvent * ); -+ -+private: -+ ItemView * mLeftView; -+ ItemView * mRightView; -+// ItemView * mCurrentView; -+ int mStepsRemaining; -+ State mState; -+ QTimer * mTimer; -+ BackFrame *mBackrow; -+ QString mSelectMenuPath; -+ int mScrollDirection; -+ bool mShowBack; -+}; -+ -+ -+ -+ -+#endif ---- kicker/ui/k_new_mnu.h (Revision 0) -+++ kicker/ui/k_new_mnu.h (Revision 849791) -@@ -0,0 +1,342 @@ -+/***************************************************************** -+ -+ Copyright (c) 1996-2000 the kicker authors. See file AUTHORS. -+ Copyright (c) 2006 Debajyoti Bera -+ -+ This program is free software; you can redistribute it and/or -+ modify it under the terms of the GNU General Public -+ License as published by the Free Software Foundation; either -+ version 2 of the License, or (at your option) any later version. -+ -+ This program is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ General Public License for more details. -+ -+ You should have received a copy of the GNU General Public License -+ along with this program; see the file COPYING. If not, write to -+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, -+ Boston, MA 02110-1301, USA. -+ -+******************************************************************/ -+ -+#ifndef __k_new_mnu_h__ -+#define __k_new_mnu_h__ -+ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+ -+#include -+#include -+#include "../interfaces/kickoff-search-plugin.h" -+ -+#include "kmenubase.h" -+#include "service_mnu.h" -+#include "query.h" -+ -+class KickerClientMenu; -+class KickoffTabBar; -+class KBookmarkMenu; -+class KActionCollection; -+class KBookmarkOwner; -+class Panel; -+class QWidgetStack; -+class KHistoryCombo; -+class QScrollView; -+class PopupMenuTitle; -+class MediaWatcher; -+class KURIFilterData; -+class KBookmarkGroup; -+class KBookmarkManager; -+class ItemView; -+class FlipScrollView; -+class QListViewItem; -+class KMenuItem; -+class QListView; -+class QTabBar; -+class QTab; -+ -+static QString categories[14] = {I18N_NOOP("Actions"), I18N_NOOP("Applications"), I18N_NOOP("Bookmarks"), -+ I18N_NOOP("Notes"), I18N_NOOP("Emails"), I18N_NOOP("Files"), I18N_NOOP("Music"), -+ I18N_NOOP("Browsing History"), I18N_NOOP("Chat Logs"), I18N_NOOP("Feeds"), -+ I18N_NOOP("Pictures"), I18N_NOOP("Videos"), I18N_NOOP("Documentation"), -+ I18N_NOOP("Others")}; -+ -+static QString kerry_categories[14] = {"contacts", "applications", "webpages", "everything", "conversations", -+ "everything", "media", "webpages", "conversations", "webpages", "images", -+ "media", "everything", "everything"}; -+ -+enum MenuOrientation { BottomUp, TopDown, UnDetermined }; -+enum OverflowCategoryState { None, Filling, NotNeeded }; -+ -+class KMenu : public KMenuBase -+{ -+ Q_OBJECT -+ Q_PROPERTY (bool KStyleMenuDropShadow READ useKStyleMenuDropShadow ) -+ -+public: -+ KMenu(); -+ ~KMenu(); -+ -+ int insertClientMenu(KickerClientMenu *p); -+ void removeClientMenu(int id); -+ -+ bool useKStyleMenuDropShadow() const { return true; } -+ -+ virtual void showMenu(); -+ virtual bool eventFilter(QObject*, QEvent*); -+ -+ void clearRecentAppsItems(); -+ void clearRecentDocsItems(); -+ bool highlightMenuItem(const QString& /*id*/) { return false;} -+ -+ void selectFirstItem() {} -+ void popup(const QPoint&, int indexAtPoint); -+ -+ enum MaskEffect { Plain, Dissolve }; -+ -+ virtual QSize sizeHint() const; -+ virtual QSize minimumSizeHint() const; -+ -+ void searchOver(); -+ void initCategoryTitlesUpdate(); -+ bool anotherHitMenuItemAllowed(int cat, bool count=true); -+ void addHitMenuItem(HitMenuItem*); -+ void insertSearchResult(HitMenuItem* item); -+ -+ void updateCategoryTitles(); -+ -+signals: -+ void aboutToHide(); -+ void aboutToShow(); -+ -+public slots: -+ virtual void initialize(); -+ -+ virtual void hide(); -+ virtual void show(); -+ -+ void stackWidgetRaised(QWidget*); -+ -+protected slots: -+ void slotLock(); -+ void slotOpenHomepage(); -+ void slotLogout(); -+ void slotPopulateSessions(); -+ void slotSessionActivated( int ); -+ void slotGoSubMenu(const QString& relPath); -+ void slotGoBack(); -+ void slotGoExitMainMenu(); -+ void slotGoExitSubMenu(const QString& url); -+ void tabClicked(QTab*); -+ -+ void paletteChanged(); -+ virtual void configChanged(); -+ void updateRecent(); -+ -+ void initSearch(); -+ void searchAccept(); -+ void searchChanged(const QString &); -+ // when timeout happens or doQueryNow calls -+ void doQuery (bool return_pressed = false); -+ void searchActionClicked(QListViewItem*); -+ -+ void slotStartService(KService::Ptr); -+ void slotStartURL(const QString&); -+ void slotContextMenuRequested( QListViewItem * item, const QPoint & pos, int col ); -+ -+ void clearedHistory(); -+ -+ void slotSloppyTimeout(); -+ -+ void slotContextMenu(int); -+ void slotFavoritesMoved( QListViewItem*, QListViewItem*, QListViewItem* ); -+ -+ void updateMedia(); -+ void slotFavDropped(QDropEvent * e, QListViewItem *after ); -+ void slotSuspend(int id); -+ -+protected: -+ virtual void paintEvent(QPaintEvent *); -+ virtual void resizeEvent ( QResizeEvent * ); -+ virtual void mousePressEvent ( QMouseEvent * e ); -+ virtual void mouseReleaseEvent ( QMouseEvent * e ); -+ virtual void mouseMoveEvent ( QMouseEvent * e ); -+ -+ void doNewSession(bool lock); -+ void createRecentMenuItems(); -+ void insertStaticItems(); -+ void insertStaticExitItems(); -+ void insertSuspendOption( int &id, int &index ); -+ virtual void clearSubmenus(); -+// void raiseStackWidget(QWidget *view); -+ -+ bool runCommand(); -+ -+ void setupUi(); -+ -+ void saveConfig(); -+ void searchProgramList(QString relPath); -+ void searchBookmarks(KBookmarkGroup); -+ void searchAddressbook(); -+ -+ void createNewProgramList(); -+ void createNewProgramList(QString relPath); -+ -+ void paintSearchTab( bool active ); -+ -+ void goSubMenu(const QString& relPath, bool keyboard = false); -+ void setOrientation(MenuOrientation orientation); -+ -+private: -+ int serviceMenuStartId() { return 5242; } -+ int serviceMenuEndId() { return 5242; } -+ -+ void fillMenu( KServiceGroup::Ptr &_root, KServiceGroup::List &_list, -+ const QString &_relPath, ItemView* view, int & id ); -+ -+ void fillSubMenu(const QString& relPath, ItemView *view); -+ -+ QPopupMenu *sessionsMenu; -+ int client_id; -+ bool delay_init; -+ QIntDict clients; -+ KActionCollection *actionCollection; -+ PopupMenuList dynamicSubMenus; -+ -+ QTimer m_sloppyTimer; -+ QTimer m_mediaFreeTimer; -+ MediaWatcher * m_mediaWatcher; -+ QRegion m_sloppyRegion; -+ QRect m_sloppySource; -+ bool m_sloppySourceClicked; -+ QWidget * m_sloppyWidget; -+ ItemView * m_recentlyView; -+ ItemView * m_favoriteView; -+ ItemView * m_searchResultsWidget; -+ QListView * m_searchActions; -+ FlipScrollView * m_browserView; -+ ItemView * m_systemView; -+ FlipScrollView * m_exitView; -+ QVBox * m_searchWidget; -+ QLabel * m_resizeHandle; -+ -+ bool m_isresizing; -+ // timer for search without pressing enter feature -+ QTimer *input_timer, *init_search_timer; -+ -+ Query current_query; -+ -+ bool dontQueryNow(const QString &); -+ -+ // start timeout timer to call doQuery is enough time has passed since last keypress -+ void checkToDoQuery (const QString &); -+ // when return is pressed -+ void doQueryNow (); -+ void clearSearchResults(bool showHelp = true); -+ -+ int *max_category_id; // maximum id in this category: max_category_id - base_category_id gives the current number of hits displayed in this category -+ int *categorised_hit_total; // current number of hits returned in each category -+ -+ bool ensureServiceRunning(const QString & service); -+ -+ QString iconForHitMenuItem(HitMenuItem *hit_item); -+ -+ int getHitMenuItemPosition (HitMenuItem *hit_item); -+ QMap mimetype_iconstore; -+ QMap media_mimetypes; -+ // report error as a menu item -+ void reportError (QString err); -+ void addToHistory(); -+ -+ int max_items(int category) const; -+ QString TOP_CATEGORY_STRING; -+ bool *already_added; -+ -+ void notifyServiceStarted(KService::Ptr service); -+ void parseLine( bool final ); -+ QString m_iconName; -+ QStringList m_middleFilters; -+ QStringList m_finalFilters; -+ KURIFilterData* m_filterData; -+ QPtrList m_current_menu_items; -+ QListViewItem *m_searchIndex, *m_searchInternet; -+ -+ bool checkUriInMenu(const KURL &uri); -+ -+ QRegExp emailRegExp,uriRegExp,uri2RegExp,authRegExp; -+ -+ KBookmarkManager *bookmarkManager; -+ KABC::AddressBook* m_addressBook; -+ -+ enum ContextMenuEntry { AddItemToPanel, EditItem, AddMenuToPanel, EditMenu, -+ AddItemToDesktop, AddMenuToDesktop, PutIntoRunDialog, -+ AddToFavorites, RemoveFromFavorites, ClearRecentlyUsedApps, -+ ClearRecentlyUsedDocs }; -+ struct PopupPath -+ { -+ QString title, description, icon, path, menuPath; -+ }; -+ -+ enum KickoffTabEntry { FavoriteTab, ApplicationsTab, ComputerTab, -+ HistoryTab, LeaveTab, SearchTab, NumTabs }; -+ -+ KPopupMenu* m_popupMenu; -+ KService* m_popupService; -+ PopupPath m_popupPath; -+ -+ KickoffTabBar* m_tabBar; -+ QTab* m_tabs[NumTabs]; -+ -+ QString newDesktopFile(const KURL& url, const QString &directory); -+ void updateRecentlyUsedApps(KService::Ptr &service); -+ -+ QPixmap main_border_lc; -+ QPixmap main_border_rc; -+ QPixmap main_border_tl; -+ QPixmap main_border_tr; -+ QPixmap button_box_left; -+ -+ QPixmap search_tab_left; -+ QPixmap search_tab_right; -+ QPixmap search_tab_center; -+ -+ QPixmap search_tab_top_left; -+ QPixmap search_tab_top_right; -+ QPixmap search_tab_top_center; -+ -+ QWidgetStack *m_stacker; -+ -+ QStringList m_programsInMenu; -+ QStringList m_newInstalledPrograms, m_seenPrograms; -+ bool m_seenProgramsChanged; -+ QString m_currentDate; -+ -+ MenuOrientation m_orientation; -+ bool m_toolTipsEnabled; -+ int m_media_id; -+ -+ bool m_recentDirty, m_browserDirty, m_kerryInstalled, m_isShowing; -+ -+ KickoffSearch::Plugin* m_search_plugin; -+ QObject* m_search_plugin_interface; -+ -+ OverflowCategoryState m_overflowCategoryState; -+ QPtrList m_overflowList; -+ int m_overflowCategory; -+ -+ void resetOverflowCategory(); -+ void fillOverflowCategory(); -+ -+ QString insertBreaks(const QString& text, QFontMetrics fm, int width, QString leadInsert = QString::null); -+}; -+ -+#endif ---- kicker/ui/appletop_mnu.cpp (Revision 849788) -+++ kicker/ui/appletop_mnu.cpp (Revision 849791) -@@ -30,6 +30,7 @@ - #include "appletop_mnu.h" - #include "container_button.h" - #include "containerarea.h" -+#include "kickerSettings.h" - - PanelAppletOpMenu::PanelAppletOpMenu(int actions, QPopupMenu *opMenu, const QPopupMenu* appletsMenu, - const QString & title, const QString &icon, -@@ -159,6 +160,20 @@ - } - } - -+ if ((actions & PanelAppletOpMenu::KMenuEditor)) -+ { -+ if (needSeparator) -+ { -+ insertSeparator(); -+ needSeparator = false; -+ } -+ -+ if (KickerSettings::legacyKMenu()) -+ insertItem(SmallIcon("suse"), i18n("Switch to SUSE Menu Style"), this, SLOT(toggleLegacy())); -+ else -+ insertItem(SmallIcon("about_kde"), i18n("Switch to KDE Menu Style"), this, SLOT(toggleLegacy())); -+ } -+ - if ((actions & PanelAppletOpMenu::KMenuEditor) && kapp->authorizeKAction("menuedit")) - { - if (needSeparator) -@@ -205,4 +220,11 @@ - QPopupMenu::keyPressEvent(e); - } - -+void PanelAppletOpMenu::toggleLegacy() -+{ -+ KickerSettings::setLegacyKMenu(!KickerSettings::legacyKMenu()); -+ KickerSettings::writeConfig(); -+ Kicker::the()->restart(); -+} -+ - #include "appletop_mnu.moc" ---- kicker/ui/kmenubase.ui (Revision 0) -+++ kicker/ui/kmenubase.ui (Revision 849791) -@@ -0,0 +1,300 @@ -+ -+KMenuBase -+ -+ -+ KMenu -+ -+ -+ -+ 0 -+ 0 -+ 723 -+ 580 -+ -+ -+ -+ KMenu -+ -+ -+ MShadow -+ -+ -+ MShape -+ -+ -+ -+ m_search -+ -+ -+ -+ 20 -+ 40 -+ 190 -+ 54 -+ -+ -+ -+ -+ unnamed -+ -+ -+ 0 -+ -+ -+ 0 -+ -+ -+ -+ m_searchFrame -+ -+ -+ -+ 5 -+ 0 -+ 0 -+ 0 -+ -+ -+ -+ -+ 0 -+ 52 -+ -+ -+ -+ -+ 32767 -+ 52 -+ -+ -+ -+ StyledPanel -+ -+ -+ Raised -+ -+ -+ 0 -+ -+ -+ -+ unnamed -+ -+ -+ -+ layout18 -+ -+ -+ -+ unnamed -+ -+ -+ -+ m_searchLabel -+ -+ -+ ParentOrigin -+ -+ -+ -+ 14 -+ -+ -+ -+ Search: -+ -+ -+ -+ -+ m_kcommand -+ -+ -+ -+ 7 -+ 0 -+ 0 -+ 0 -+ -+ -+ -+ -+ -+ m_searchPixmap -+ -+ -+ -+ 1 -+ 1 -+ 0 -+ 0 -+ -+ -+ -+ -+ 32 -+ 32 -+ -+ -+ -+ -+ 32 -+ 32 -+ -+ -+ -+ PaletteBackground -+ -+ -+ ParentOrigin -+ -+ -+ true -+ -+ -+ -+ -+ -+ -+ -+ -+ spacer5_2 -+ -+ -+ Horizontal -+ -+ -+ Preferred -+ -+ -+ -+ 16 -+ 20 -+ -+ -+ -+ -+ -+ -+ -+ m_footer -+ -+ -+ -+ 20 -+ 110 -+ 407 -+ 34 -+ -+ -+ -+ -+ unnamed -+ -+ -+ 4 -+ -+ -+ 4 -+ -+ -+ -+ m_userInfo -+ -+ -+ -+ 3 -+ 0 -+ 0 -+ 0 -+ -+ -+ -+ User&nbsp;<b>user</b>&nbsp;on&nbsp;<b>host</b> -+ -+ -+ -+ -+ spacer13_2 -+ -+ -+ Horizontal -+ -+ -+ MinimumExpanding -+ -+ -+ -+ 10 -+ 20 -+ -+ -+ -+ -+ -+ m_branding -+ -+ -+ -+ 4 -+ 4 -+ 0 -+ 0 -+ -+ -+ -+ -+ 90 -+ 24 -+ -+ -+ -+ -+ -+ -+ image0 -+ -+ -+ true -+ -+ -+ true -+ -+ -+ -+ -+ spacer13 -+ -+ -+ Horizontal -+ -+ -+ Fixed -+ -+ -+ -+ 14 -+ 20 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ 789cdd933d6fdb30104077ff0a21de8c82b12d5bb2507448f6021d0b141dc82369d9116d7d50b1ada2ffbdbca3c4444950244032b4b790efce7cd29de8eb59f4fddbd768763d692cb73b8820e7753493ad31971f3fbffc9a5c6d36d17219c5f36871f56972e57e104dd7324be325a2464cd24cc60a5120a6731eaf046241c879b64e113bc44dcc751223da802bc41de16ac092508a753a4754885922440a8892301332a5e79e10f91c169b0cf1963083345b231a423ee0bec78dc71c51c420393578249432e664be2354d2bd17628d0889cc0447bc20cab9d490205601a9df29e142cd3d9e0933b59234ba0321576b49d3d8f69878bc41544b952a6abf218c9590f41a9c70a5c0e33d21e885a2e1b4883ad1a9de2032420ac20f8affde3df5415bdea7f8b8c0fbed507fa59b0bf02119739f9172b46e755fc819dbf55bd07ba15fef0ec7f6b41f728c0dcf84bbc76ebedfbfde0d2042eb8fdd5b801de5b794281e06f716f7ee710f619d5227a1b01b1d0aeedc18e366660ec7b2ac18ab1d1a9745acd1ad3161f28631dbbb716d86c29112c2f86363770ec20a383a89b51a9a06b4b5503a2c10dd771b46d98cdcac180a052528cc13b781b6bd7759506d5b435541ddb6161cba16c0f5a174383872b3729057c19dbfe06ed16ddab642b7324638b77b870add3eaae76e1fb577db17e7fdcc5d586bcd5fddc59bdda7deed7d83db580a81ee93bb906eefd4ee0fa24201ddda53f9d4ad4ce92605fae466713843614ceddd17b83008d1b06618bd2b5e42de3da70b7019dfc1b2eb3af7e140a9ae7342d3d152babb75ee1a76ea7c9478ea5c92bd3bf6c7a870f6677cdc8cdd7d840bf40ef1cc7dfb716efd81eef78c7fd6fdfbf3e40f51236246 -+ -+ -+ -+ kmenubase.ui.h -+ -+ -+ init() -+ -+ -+ -+ kcombobox.h -+ -+ ---- kicker/ui/kickoff_bar.h (Revision 0) -+++ kicker/ui/kickoff_bar.h (Revision 849791) -@@ -0,0 +1,53 @@ -+/***************************************************************** -+ -+ Copyright (c) 1996-2000 the kicker authors. See file AUTHORS. -+ Copyright (c) 2006 Dirk Mueller -+ -+ This program is free software; you can redistribute it and/or -+ modify it under the terms of the GNU General Public -+ License as published by the Free Software Foundation; either -+ version 2 of the License, or (at your option) any later version. -+ -+ This program is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ General Public License for more details. -+ -+ You should have received a copy of the GNU General Public License -+ along with this program; see the file COPYING. If not, write to -+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, -+ Boston, MA 02110-1301, USA. -+ -+******************************************************************/ -+ -+#ifndef __kickoff_bar_h__ -+#define __kickoff_bar_h__ -+ -+#include -+ -+class KickoffTabBar : public QTabBar -+{ -+ Q_OBJECT -+public: -+ KickoffTabBar(QWidget* parent, const char* name); -+ -+ void deactivateTabs(bool b); -+ virtual QSize sizeHint() const; -+ -+protected: -+ virtual void paint(QPainter*, QTab*, bool) const; -+ virtual void paintLabel(QPainter* p, const QRect& br, QTab* t, bool has_focus) const; -+ virtual void layoutTabs(); -+ virtual void dragEnterEvent(QDragEnterEvent*); -+ virtual void dragMoveEvent(QDragMoveEvent*); -+ virtual void mousePressEvent ( QMouseEvent * ); -+ -+signals: -+ void tabClicked(QTab*); -+ -+private: -+ bool m_tabsActivated; -+}; -+ -+ -+#endif ---- kicker/ui/k_mnu_stub.cpp (Revision 0) -+++ kicker/ui/k_mnu_stub.cpp (Revision 849791) -@@ -0,0 +1,141 @@ -+/***************************************************************** -+ -+Copyright (c) 2006 Dirk Mueller -+ -+Permission is hereby granted, free of charge, to any person obtaining a copy -+of this software and associated documentation files (the "Software"), to deal -+in the Software without restriction, including without limitation the rights -+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -+copies of the Software, and to permit persons to whom the Software is -+furnished to do so, subject to the following conditions: -+ -+The above copyright notice and this permission notice shall be included in -+all copies or substantial portions of the Software. -+ -+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -+AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -+AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -+ -+******************************************************************/ -+ -+#include "k_mnu_stub.h" -+#include "k_new_mnu.h" -+#include "k_mnu.h" -+ -+void KMenuStub::removeClientMenu(int id) -+{ -+ if(m_type == t_KMenu) -+ return m_w.kmenu->removeClientMenu(id); -+ return m_w.panelkmenu->removeClientMenu(id); -+} -+ -+int KMenuStub::insertClientMenu(KickerClientMenu *p) -+{ -+ if(m_type == t_KMenu) -+ return m_w.kmenu->insertClientMenu(p); -+ return m_w.panelkmenu->insertClientMenu(p); -+} -+ -+void KMenuStub::adjustSize() -+{ -+ if(m_type == t_KMenu) -+ return m_w.kmenu->adjustSize(); -+ return m_w.panelkmenu->adjustSize(); -+} -+ -+void KMenuStub::hide() -+{ -+ if(m_type == t_KMenu) -+ return m_w.kmenu->hide(); -+ return m_w.panelkmenu->hide(); -+} -+ -+void KMenuStub::show() -+{ -+ if(m_type == t_KMenu) -+ return m_w.kmenu->show(); -+ return m_w.panelkmenu->show(); -+} -+ -+void KMenuStub::showMenu() -+{ -+ if(m_type == t_KMenu) -+ return m_w.kmenu->showMenu(); -+ return m_w.panelkmenu->showMenu(); -+} -+ -+#if 0 -+void KMenuStub::resize() -+{ -+ if(m_type == t_KMenu) -+ return m_w.kmenu->resize(); -+ return m_w.panelkmenu->resize(); -+} -+#endif -+ -+void KMenuStub::popup(const QPoint &pos, int indexAtPoint) -+{ -+ return m_type == t_KMenu ? -+ m_w.kmenu->popup(pos, indexAtPoint) -+ : m_w.panelkmenu->popup(pos, indexAtPoint); -+} -+ -+void KMenuStub::selectFirstItem() -+{ -+ if(m_type == t_KMenu) -+ return m_w.kmenu->selectFirstItem(); -+ return m_w.panelkmenu->selectFirstItem(); -+} -+ -+void KMenuStub::resize(int w, int h) -+{ -+ if(m_type == t_KMenu) -+ return m_w.kmenu->resize(w, h); -+ return m_w.panelkmenu->resize(w, h); -+} -+ -+QSize KMenuStub::sizeHint() const -+{ -+ if(m_type == t_KMenu) -+ return m_w.kmenu->sizeHint(); -+ return m_w.panelkmenu->sizeHint(); -+} -+ -+bool KMenuStub::highlightMenuItem( const QString &menuId ) -+{ -+ if(m_type == t_KMenu) -+ return m_w.kmenu->highlightMenuItem(menuId); -+ return m_w.panelkmenu->highlightMenuItem(menuId); -+} -+ -+void KMenuStub::clearRecentMenuItems() -+{ -+ if(m_type == t_KMenu) -+ return m_w.kmenu->clearRecentAppsItems(); -+ return m_w.panelkmenu->clearRecentMenuItems(); -+} -+ -+void KMenuStub::initialize() -+{ -+ if(m_type == t_KMenu) -+ return m_w.kmenu->initialize(); -+ return m_w.panelkmenu->initialize(); -+} -+ -+bool KMenuStub::isVisible() const -+{ -+ if(m_type == t_KMenu) -+ return m_w.kmenu->isVisible(); -+ return m_w.panelkmenu->isVisible(); -+} -+ -+QWidget* KMenuStub::widget() -+{ -+ if(m_type == t_KMenu) -+ return m_w.kmenu; -+ return m_w.panelkmenu; -+} -+ ---- kicker/ui/kmenubase.ui.h (Revision 0) -+++ kicker/ui/kmenubase.ui.h (Revision 849791) -@@ -0,0 +1,9 @@ -+#include -+ -+void KMenuBase::init() -+{ -+ XSetWindowAttributes attrs; -+ attrs.override_redirect = True; -+ XChangeWindowAttributes( qt_xdisplay(), winId(), CWOverrideRedirect, &attrs ); -+ setWFlags( Qt::WType_Popup ); -+} ---- kicker/ui/mykickoffsearchinterface.h (Revision 0) -+++ kicker/ui/mykickoffsearchinterface.h (Revision 849791) -@@ -0,0 +1,47 @@ -+/*************************************************************************** -+ * Copyright (C) 2006 by Stephan Binner * -+ * * -+ * This program is free software; you can redistribute it and/or modify * -+ * it under the terms of the GNU General Public License as published by * -+ * the Free Software Foundation; either version 2 of the License, or * -+ * (at your option) any later version. * -+ * * -+ * This program is distributed in the hope that it will be useful, * -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of * -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * -+ * GNU General Public License for more details. * -+ * * -+ * You should have received a copy of the GNU General Public License * -+ * along with this program; if not, write to the * -+ * Free Software Foundation, Inc., * -+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * -+ ***************************************************************************/ -+ -+#ifndef MYKICKOFFSEARCHINTERFACE_H -+#define MYKICKOFFSEARCHINTERFACE_H -+ -+#include "../interfaces/kickoffsearchinterface.h" -+ -+class KMenu; -+ -+using namespace KickoffSearch; -+ -+class MyKickoffSearchInterface :public KickoffSearchInterface -+{ -+ Q_OBJECT -+ -+public: -+ MyKickoffSearchInterface( KMenu*, QObject* parent, const char* name = 0 ); -+ -+ bool anotherHitMenuItemAllowed(int cat); -+ void addHitMenuItem(HitMenuItem* item); -+ void searchOver(); -+ void initCategoryTitlesUpdate(); -+ void updateCategoryTitles(); -+ -+private: -+ KMenu* _menu; -+ -+}; -+ -+#endif /* MYKICKOFFSEARCHINTERFACE_H */ ---- kicker/ui/itemview.h (Revision 0) -+++ kicker/ui/itemview.h (Revision 849791) -@@ -0,0 +1,260 @@ -+/***************************************************************** -+ -+Copyright (c) 1996-2000 the kicker authors. See file AUTHORS. -+ -+Permission is hereby granted, free of charge, to any person obtaining a copy -+of this software and associated documentation files (the "Software"), to deal -+in the Software without restriction, including without limitation the rights -+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -+copies of the Software, and to permit persons to whom the Software is -+furnished to do so, subject to the following conditions: -+ -+The above copyright notice and this permission notice shall be included in -+all copies or substantial portions of the Software. -+ -+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -+AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -+AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -+ -+******************************************************************/ -+ -+#ifndef __itemview_h__ -+#define __itemview_h__ -+ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+ -+#include "kmenubase.h" -+#include "kmenuitembase.h" -+#include "service_mnu.h" -+ -+class KickerClientMenu; -+class KBookmarkMenu; -+class KActionCollection; -+class KBookmarkOwner; -+class Panel; -+class QWidgetStack; -+class KHistoryCombo; -+class QScrollView; -+class PopupMenuTitle; -+class QWidget; -+class QVBoxLayout; -+class QTimer; -+class KPixmap; -+ -+class KMenuItem : public QListViewItem -+{ -+public: -+ KMenuItem(int nId, QListView* parent) : QListViewItem(parent), m_id(nId) { init(); } -+ KMenuItem(int nId, QListViewItem* parent) : QListViewItem(parent), m_id(nId) { init(); } -+ ~KMenuItem(); -+ -+ void setIcon(const QString& icon, int size); -+ QString icon() const { return m_icon; } -+ void setTitle( const QString& text ); -+ QString title() const { return m_title; } -+ void setToolTip( const QString& text ); -+ QString toolTip() const { return m_tooltip; } -+ void setDescription(const QString& text); -+ QString description() const { return m_description; } -+ void setService(KService::Ptr& s) { m_s = s; } -+ KService::Ptr service() { return m_s; } -+ void setPath(const QString& u) { m_path = u; } -+ QString path() const { return m_path; } -+ void setMenuPath(const QString& u) { m_menuPath = u; } -+ QString menuPath() const { return m_menuPath; } -+ int id() const { return m_id; } -+ void setHasChildren(bool flag); -+ bool hasChildren() const { return m_has_children; } -+ void makeGradient(KPixmap &off, const QColor& c); -+ -+protected: -+ virtual void paintCell(QPainter* p, const QColorGroup & cg, int column, int width, int align); -+ virtual void paintCellInter(QPainter* p, const QColorGroup & cg, int column, int width, int align); -+ virtual void setup(); -+ -+private: -+ void init(); -+ -+ int m_id; -+ KService::Ptr m_s; -+ QString m_title; -+ QString m_description; -+ QString m_path; -+ QString m_icon; -+ QString m_tooltip; -+ QString m_menuPath; -+ float title_font_size; -+ float description_font_size; -+ bool m_has_children; -+ int m_old_width; -+ QPixmap right_triangle; -+}; -+ -+class KMenuItemSeparator : public KMenuItem -+{ -+public: -+ KMenuItemSeparator(int nId, QListView* parent); -+ virtual void setup(); -+ -+ virtual void paintCell(QPainter* p, const QColorGroup & cg, int column, int width, int align); -+ void setLink(const QString &text, const QString &link = QString::null ); -+ -+ QString linkUrl() const { return m_link_url; } -+ -+ /// returns true if the cursor has to change -+ bool hitsLink(const QPoint &pos); -+ -+protected: -+ void preparePixmap(int width); -+ QPixmap pixmap; -+ int left_margin; -+ -+private: -+ QListView* lv; -+ int cached_width; -+ QString m_link_text, m_link_url; -+ QRect m_link_rect; -+ -+}; -+ -+class KMenuItemHeader : public KMenuItemSeparator -+{ -+public: -+ KMenuItemHeader( int nId, const QString &relpath, QListView* parent); -+ virtual void setup(); -+ -+ virtual void paintCell(QPainter* p, const QColorGroup & cg, int column, int width, int align); -+ -+private: -+ QListView* lv; -+ QStringList paths; -+ QStringList texts; -+ QStringList icons; -+ QPixmap left_triangle; -+}; -+ -+class KMenuSpacer : public KMenuItem -+{ -+public: -+ KMenuSpacer(int nId, QListView* parent); -+ virtual void paintCell(QPainter* p, const QColorGroup & cg, int column, int width, int align); -+ virtual void setup(); -+ -+ void setHeight(int); -+}; -+ -+class ItemView : public KListView -+{ -+ friend class KMenuItem; -+ -+ Q_OBJECT -+public: -+ ItemView(QWidget* parent, const char* name = 0); -+ -+ KMenuItem* insertItem( const QString& icon, const QString& text, const QString& description, int nId, int nIndex, KMenuItem* parentItem = 0 ); -+ KMenuItem* insertItem( const QString& icon, const QString& text, const QString& description, const QString& path, int nId, int nIndex, KMenuItem* parentItem = 0 ); -+ int insertItem( PopupMenuTitle*, int, int); -+ int setItemEnabled(int id, bool enabled); -+ KMenuItemSeparator *insertSeparator(int id, const QString& text, int nIndex); -+ KMenuItemHeader *insertHeader(int id, const QString &relpath); -+ KMenuItem* insertMenuItem(KService::Ptr & s, int nId, int nIndex = -1, KMenuItem* parentItem = 0, -+ const QString &aliasname = QString::null, const QString &label = QString::null, -+ const QString &categoryIcon = QString::null); -+ KMenuItem* insertRecentlyItem(const QString& s, int nId, int nIndex = -1); -+ KMenuItem* insertDocumentItem(const QString& s, int nId, int nIndex = -1 , const QStringList* suppressGenericNames = 0, -+ const QString& aliasname = QString::null); -+ KMenuItem* insertSubItem(const QString& icon, const QString& caption, const QString& description, const QString& path, KMenuItem* parentItem); -+ KMenuItem* findItem(int nId); -+ -+ void setIconSize(int size) { m_iconSize = size; } -+ void setMouseMoveSelects(bool select) { m_mouseMoveSelects = select; } -+ void clear(); -+ int goodHeight(); -+ QString path; -+ void setBackPath( const QString &str ) { m_back_url = str; } -+ QString backPath() const { return m_back_url; } -+ -+public slots: -+ void slotItemClicked(QListViewItem*); -+ void slotMoveContent(); -+ -+signals: -+ void startService(KService::Ptr kservice); -+ void startURL(const QString& u); -+ -+protected: -+ void contentsMouseMoveEvent(QMouseEvent *e); -+ void contentsMousePressEvent ( QMouseEvent * e ); -+ void contentsWheelEvent(QWheelEvent *e); -+ void leaveEvent(QEvent *e); -+ virtual void resizeEvent ( QResizeEvent * e ); -+ virtual void viewportPaintEvent ( QPaintEvent * pe ); -+ virtual QDragObject* dragObject (); -+ virtual bool acceptDrag (QDropEvent* event) const; -+ virtual bool focusNextPrevChild(bool next); -+ -+private slots: -+ void slotItemClicked(int button, QListViewItem * item, const QPoint & pos, int c ); -+ -+private: -+ KMenuItem* itemAtIndex(int nIndex); -+ void moveItemToIndex(KMenuItem*, int); -+ -+ QWidget* m_itemBox; -+ QVBoxLayout* m_itemLayout; -+ KMenuItem *m_lastOne; -+ KMenuSpacer *m_spacer; -+ -+ QString m_back_url; -+ -+ bool m_mouseMoveSelects; -+ int m_iconSize; -+ int m_old_contentY; -+}; -+ -+class FavoritesItemView : public ItemView -+{ -+public: -+ FavoritesItemView(QWidget* parent, const char* name = 0); -+ -+protected: -+ virtual bool acceptDrag (QDropEvent* event) const; -+}; -+ -+class KMenuItemInfo -+{ -+public: -+ int m_id; -+ KService::Ptr m_s; -+ QString m_title; -+ QString m_description; -+ QString m_path; -+ QString m_icon; -+}; -+ -+class KMenuItemDrag : public QDragObject -+{ -+ public: -+ KMenuItemDrag(KMenuItem& item, QWidget *dragSource); -+ ~KMenuItemDrag(); -+ -+ virtual const char * format(int i = 0) const; -+ virtual QByteArray encodedData(const char *) const; -+ -+ static bool canDecode(const QMimeSource * e); -+ static bool decode(const QMimeSource* e, KMenuItemInfo& item); -+ -+ private: -+ QByteArray a; -+}; -+ -+#endif ---- kicker/ui/default-favs (Revision 0) -+++ kicker/ui/default-favs (Revision 849791) -@@ -0,0 +1,9 @@ -+MozillaFirefox.desktop -+kde-Kontact.desktop -+writer.desktop -+kde-amarok.desktop -+kde-digikam.desktop -+kde-Home.desktop -+kde-KControl.desktop -+kde-Help.desktop -+kde-konsole.desktop ---- kicker/ui/query.h (Revision 0) -+++ kicker/ui/query.h (Revision 849791) -@@ -0,0 +1,55 @@ -+/***************************************************************** -+ -+ Copyright (c) 2006 Stephan Binner -+ -+ This program is free software; you can redistribute it and/or -+ modify it under the terms of the GNU General Public -+ License as published by the Free Software Foundation; either -+ version 2 of the License, or (at your option) any later version. -+ -+ This program is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ General Public License for more details. -+ -+ You should have received a copy of the GNU General Public License -+ along with this program; see the file COPYING. If not, write to -+ the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, -+ Boston, MA 02110-1301, USA. -+ -+******************************************************************/ -+ -+#ifndef QUERY_H -+#define QUERY_H -+ -+#include -+#include -+ -+class Alternative -+{ -+public: -+ QStringList includes; -+ QStringList excludes; -+}; -+ -+class Query -+{ -+ public: -+ Query(); -+ void clear(); -+ void set(const QString &); -+ QString get() const; -+ bool matches(const QString &); -+ -+ private: -+ QString query_term; -+ QPtrList alternatives; -+ -+ void add_term(); -+ QString current_part; -+ Alternative *current_alternative; -+ bool within_quotes; -+ bool exclude_part; -+}; -+ -+#endif ---- kicker/ui/k_mnu_stub.h (Revision 0) -+++ kicker/ui/k_mnu_stub.h (Revision 849791) -@@ -0,0 +1,72 @@ -+/***************************************************************** -+ -+Copyright (c) 2006 Dirk Mueller -+ -+Permission is hereby granted, free of charge, to any person obtaining a copy -+of this software and associated documentation files (the "Software"), to deal -+in the Software without restriction, including without limitation the rights -+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -+copies of the Software, and to permit persons to whom the Software is -+furnished to do so, subject to the following conditions: -+ -+The above copyright notice and this permission notice shall be included in -+all copies or substantial portions of the Software. -+ -+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -+AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -+AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -+ -+******************************************************************/ -+ -+#ifndef __k_mnu_stub_h__ -+#define __k_mnu_stub_h__ -+ -+#include -+#include -+ -+class KickerClientMenu; -+class KMenu; -+class PanelKMenu; -+ -+ -+ -+ -+class KMenuStub -+{ -+public: -+ KMenuStub(KMenu* _kmenu) -+ : m_type(t_KMenu) { m_w.kmenu = _kmenu; } -+ KMenuStub(PanelKMenu* _panelkmenu) -+ : m_type(t_PanelKMenu) { m_w.panelkmenu = _panelkmenu; } -+ ~KMenuStub() {} -+ -+ void removeClientMenu(int id); -+ int insertClientMenu(KickerClientMenu *p); -+ void adjustSize(); -+ void hide(); -+ void show(); -+ void showMenu(); -+ void resize(); -+ void popup(const QPoint &pos, int indexAtPoint = -1); -+ void selectFirstItem(); -+ void resize(int, int); -+ QSize sizeHint() const; -+ bool highlightMenuItem( const QString &menuId ); -+ void clearRecentMenuItems(); -+ void initialize(); -+ -+ QWidget* widget(); -+ -+ bool isVisible() const; -+private: -+ enum {t_PanelKMenu, t_KMenu} m_type; -+ union { -+ KMenu* kmenu; -+ PanelKMenu* panelkmenu; -+ } m_w; -+}; -+ -+#endif ---- kicker/ui/Makefile.am (Revision 849788) -+++ kicker/ui/Makefile.am (Revision 849791) -@@ -1,38 +1,46 @@ - INCLUDES = -I$(srcdir)/../core -I../core -I$(srcdir)/../buttons \ - -I../../libkicker -I$(srcdir)/../../libkicker \ -- -I$(top_srcdir)/libkonq -I$(top_srcdir)/kdmlib $(all_includes) -+ -I$(top_srcdir)/libkonq -I$(top_srcdir)/kdmlib $(DBUS_INCS) $(all_includes) - - noinst_LTLIBRARIES = libkicker_ui.la - -+libkicker_ui_la_COMPILE_FIRST = kmenubase.h -+ - libkicker_ui_la_SOURCES = addbutton_mnu.cpp appletitem.ui appletview.ui addapplet.cpp \ - addapplet_mnu.cpp appletop_mnu.cpp \ - browser_mnu.cpp client_mnu.cpp dirdrop_mnu.cpp \ -- nonKDEButtonSettings.ui exe_dlg.cpp k_mnu.cpp k_mnu.skel\ -- quickbrowser_mnu.cpp service_mnu.cpp \ -- addextension_mnu.cpp extensionop_mnu.cpp \ -- recentapps.cpp browser_dlg.cpp \ -+ nonKDEButtonSettings.ui exe_dlg.cpp k_new_mnu.cpp k_mnu.cpp k_mnu.skel\ -+ quickbrowser_mnu.cpp service_mnu.cpp kmenubase.ui kmenuitembase.ui \ -+ addextension_mnu.cpp extensionop_mnu.cpp k_mnu_stub.cpp \ -+ recentapps.cpp browser_dlg.cpp itemview.cpp kickoff_bar.cpp \ - removeapplet_mnu.cpp removeextension_mnu.cpp removecontainer_mnu.cpp \ - removebutton_mnu.cpp popupmenutitle.cpp hidebutton.cpp \ -- addappletvisualfeedback.cpp -+ addappletvisualfeedback.cpp flipscrollview.cpp \ -+ media_watcher.cpp media_watcher.skel mykickoffsearchinterface.cpp query.cpp - --libkicker_ui_la_LIBADD = $(top_builddir)/libkonq/libkonq.la $(top_builddir)/kdmlib/libdmctl.la -+libkicker_ui_la_LIBADD = $(top_builddir)/libkonq/libkonq.la $(top_builddir)/kdmlib/libdmctl.la \ -+ $(LIB_KABC) ../interfaces/libkickoffsearch_interfaces.la -llazy - - libkicker_ui_la_METASOURCES = AUTO - - noinst_HEADERS = addapplet.h appletwidget.h addbutton_mnu.h addapplet_mnu.h appletop_mnu.h \ -- browser_mnu.h client_mnu.h dirdrop_mnu.h exe_dlg.h k_mnu.h \ -+ browser_mnu.h client_mnu.h dirdrop_mnu.h exe_dlg.h k_new_mnu.h k_mnu.h \ - quickbrowser_mnu.h service_mnu.h \ - addextension_mnu.h extensionop_mnu.h \ -- recentapps.h browser_dlg.h \ -+ recentapps.h browser_dlg.h itemview.h query.h \ - removeapplet_mnu.h removeextension_mnu.h removecontainer_mnu.h \ - removebutton_mnu.h popupmenutitle.h hidebutton.h addappletvisualfeedback.h - -+kicker_ui_data_DATA = default-favs -+kicker_ui_datadir = $(kde_datadir)/kicker -+ - removecontainer_mnu.lo: ../../libkicker/kickerSettings.h - removeextension_mnu.lo: ../../libkicker/kickerSettings.h - addextension_mnu.lo: ../core/extensionSettings.h - appletop_mnu.lo: ../../libkicker/kickerSettings.h - extensionop_mnu.lo: ../../libkicker/kickerSettings.h - k_mnu.lo: ../../libkicker/kickerSettings.h -+k_new_mnu.lo: ../../libkicker/kickerSettings.h - removecontainer_mnu.lo: ../core/extensionSettings.h - removeextension_mnu.lo: ../core/extensionSettings.h - service_mnu.lo: ../../libkicker/kickerSettings.h ---- kicker/ui/mykickoffsearchinterface.cpp (Revision 0) -+++ kicker/ui/mykickoffsearchinterface.cpp (Revision 849791) -@@ -0,0 +1,54 @@ -+/*************************************************************************** -+ * Copyright (C) 2006 by Stephan Binner * -+ * * -+ * This program is free software; you can redistribute it and/or modify * -+ * it under the terms of the GNU General Public License as published by * -+ * the Free Software Foundation; either version 2 of the License, or * -+ * (at your option) any later version. * -+ * * -+ * This program is distributed in the hope that it will be useful, * -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of * -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * -+ * GNU General Public License for more details. * -+ * * -+ * You should have received a copy of the GNU General Public License * -+ * along with this program; if not, write to the * -+ * Free Software Foundation, Inc., * -+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * -+ ***************************************************************************/ -+ -+#include "mykickoffsearchinterface.h" -+#include "../ui/k_new_mnu.h" -+ -+MyKickoffSearchInterface::MyKickoffSearchInterface( KMenu* menu, QObject* parent, const char* name ) -+ : KickoffSearchInterface( parent, name ), _menu( menu ) -+{ -+} -+ -+bool MyKickoffSearchInterface::anotherHitMenuItemAllowed(int cat) -+{ -+ return _menu->anotherHitMenuItemAllowed(cat); -+} -+ -+void MyKickoffSearchInterface::addHitMenuItem(HitMenuItem* item) -+{ -+ _menu->addHitMenuItem(item); -+} -+ -+ -+void MyKickoffSearchInterface::searchOver() -+{ -+ _menu->searchOver(); -+} -+ -+void MyKickoffSearchInterface::initCategoryTitlesUpdate() -+{ -+ _menu->initCategoryTitlesUpdate(); -+} -+ -+void MyKickoffSearchInterface::updateCategoryTitles() -+{ -+ _menu->updateCategoryTitles(); -+} -+ -+#include "mykickoffsearchinterface.moc" ---- kicker/ui/itemview.cpp (Revision 0) -+++ kicker/ui/itemview.cpp (Revision 849791) -@@ -0,0 +1,1257 @@ -+/***************************************************************** -+ -+Copyright (c) 1996-2000 the kicker authors. See file AUTHORS. -+ -+Permission is hereby granted, free of charge, to any person obtaining a copy -+of this software and associated documentation files (the "Software"), to deal -+in the Software without restriction, including without limitation the rights -+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -+copies of the Software, and to permit persons to whom the Software is -+furnished to do so, subject to the following conditions: -+ -+The above copyright notice and this permission notice shall be included in -+all copies or substantial portions of the Software. -+ -+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -+AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -+AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -+ -+******************************************************************/ -+ -+#include -+#include -+#include -+#include -+ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+ -+#include "client_mnu.h" -+#include "container_base.h" -+#include "global.h" -+#include "kbutton.h" -+#include "kicker.h" -+#include "kickerSettings.h" -+#include "konqbookmarkmanager.h" -+#include "menuinfo.h" -+#include "menumanager.h" -+#include "popupmenutitle.h" -+#include "quickbrowser_mnu.h" -+#include "recentapps.h" -+ -+#include "k_mnu.h" -+#include "k_new_mnu.h" -+#include "itemview.h" -+ -+// -------------------------------------------------------------------------- -+ -+KMenuItem::~KMenuItem() -+{ -+ ItemView *listview = dynamic_cast( listView() ); -+ if ( listview && listview->m_lastOne == this) { -+ listview->m_lastOne = 0; -+ listview->m_old_contentY = -1; -+ } -+} -+ -+static double pointSize( double pixelSize, QPaintDevice *w ) -+{ -+ return pixelSize * 72. / QPaintDevice::x11AppDpiY( w->x11Screen () ); -+} -+ -+static int pixelSize( double pixelSize, QPaintDevice *w ) -+{ -+ return qRound( pixelSize * QPaintDevice::x11AppDpiY( w->x11Screen () ) / 72. ); -+} -+ -+void KMenuItem::init() -+{ -+ setMultiLinesEnabled(true); -+ m_s = 0; -+ m_path = QString::null; -+ m_icon = QString::null; -+ m_menuPath = QString::null; -+ setDragEnabled(true); -+ m_has_children = false; -+ m_old_width = -1; -+ if ( QApplication::reverseLayout() ) -+ right_triangle.load( locate( "data", "kicker/pics/left_triangle.png" ) ); -+ else -+ right_triangle.load( locate( "data", "kicker/pics/right_triangle.png" ) ); -+} -+ -+void KMenuItem::setTitle(const QString& txt) -+{ -+ m_title = txt; -+ setText( 0, txt ); -+ setup(); -+} -+ -+void KMenuItem::setToolTip(const QString& txt) -+{ -+ m_tooltip = txt; -+} -+ -+void KMenuItem::setDescription(const QString& txt) -+{ -+ m_description = txt; -+ setup(); -+} -+ -+void KMenuItem::setIcon(const QString& icon, int size) -+{ -+ m_icon = icon; -+ QListViewItem::setPixmap(0, KGlobal::iconLoader()->loadIcon(icon, KIcon::Panel, size )); -+} -+ -+void KMenuItem::setHasChildren( bool flag ) -+{ -+ m_has_children = flag; -+ repaint(); -+} -+ -+void KMenuItem::setup() -+{ -+ // if someone configured a larger generalFont than 10pt, he might have a _real_ problem with 7pt -+ // the 7pt could be read out of konquerorrc I guess -+ float min_font_size = 7. * QMAX(1., KGlobalSettings::generalFont().pointSizeFloat() / 10.); -+ -+ const int expected_height = 38; -+ description_font_size = QMAX( pointSize( expected_height * .3, listView() ) + KickerSettings::kickoffFontPointSizeOffset(), min_font_size ) ; -+ title_font_size = QMAX( pointSize( expected_height * .25, listView() ) + KickerSettings::kickoffFontPointSizeOffset(), min_font_size + 1 ); -+ -+ //kdDebug() << description_font_size << " " << title_font_size << " " << pointSize( expected_height * .25, listView() ) << endl; -+ QListViewItem::setup(); -+ setHeight( (int)QMAX( expected_height, pixelSize( title_font_size + description_font_size * 2.3, listView()))); -+} -+ -+void KMenuItem::paintCell(QPainter* p, const QColorGroup & cg, int column, int width, int align) -+{ -+ ItemView *listview = static_cast( listView() ); -+ int bottom = listView()->itemRect( this ).bottom(); -+ int diff = bottom - listView()->viewport()->height(); -+ -+ KPixmap pm; -+ pm.resize( width, height() ); -+ QPainter pp( &pm ); -+ paintCellInter( &pp, cg, column, width, align ); -+ pp.end(); -+ -+ if ( diff > 0 && diff <= height() ) // cut off -+ { -+ pm.resize( width, height() - diff ); -+ KPixmapEffect::blend( pm, float( diff ) / height(), -+ cg.color( QColorGroup::Background ), -+ KPixmapEffect::VerticalGradient ); -+ p->drawPixmap( 0, 0, pm ); -+ if ( listview->m_lastOne != this ) -+ { -+ listview->m_lastOne = this; -+ listview->m_old_contentY = -1; -+ } -+ } -+ else -+ { -+ p->drawPixmap( 0, 0, pm ); -+ if ( this == listview->m_lastOne ) { -+ if ( bottom < 0 ) -+ listview->m_lastOne = static_cast( itemAbove() ); -+ else -+ listview->m_lastOne = static_cast( itemBelow() ); -+ listview->m_old_contentY = -1; -+ repaint(); -+ } -+ } -+} -+ -+void KMenuItem::makeGradient( KPixmap &off, const QColor &c ) -+{ -+ KPixmap blend; -+ blend.resize( off.width() / 3, off.height() ); -+ bitBlt( &blend, 0, 0, &off, off.width() - blend.width(), 0, blend.width(), blend.height() ); -+ KPixmapEffect::blend( blend, 0.2, c, KPixmapEffect::HorizontalGradient ); -+ QPainter p( &off ); -+ p.drawPixmap( off.width() - blend.width(), 0, blend ); -+ p.end(); -+} -+ -+void KMenuItem::paintCellInter(QPainter* p, const QColorGroup & cg, int column, int width, int align) -+{ -+ const bool reverseLayout = QApplication::reverseLayout(); -+ -+ const BackgroundMode bgmode = listView()->viewport()->backgroundMode(); -+ const QColorGroup::ColorRole crole = QPalette::backgroundRoleFromMode( bgmode ); -+ QColor backg = cg.color( crole ); -+ -+ if ( isSelected() ) -+ backg = cg.color( QColorGroup::Highlight ); -+ p->fillRect( 0, 0, width, height(), backg ); -+ -+ QFontMetrics fm( p->fontMetrics() ); -+ -+ int pixsize = 32; -+ if ( height() < 36 ) -+ pixsize = 16; -+ const int left_margin = 30; -+ const int margin = 3; -+ -+// p->drawText( 2, 2, left_margin - 2, height(), align, QString::number( childCount () ) ); -+ -+ const QPixmap * pix = pixmap( column ); -+ -+ if ( pix ) -+ { -+ QPixmap pix32 = *pix; -+ -+ if ( pix->width() > pixsize ) -+ { -+ QImage i = pix->convertToImage().smoothScale( pixsize, pixsize ); -+ pix32.convertFromImage( i ); -+ } -+ if ( reverseLayout ) -+ p->drawPixmap( width - ( (pixsize - pix32.width()) / 2 + left_margin ) - pix32.width(), -+ ( height() - pix32.height() ) / 2, pix32 ); -+ else -+ p->drawPixmap( (pixsize - pix32.width()) / 2 + left_margin, -+ ( height() - pix32.height() ) / 2, pix32 ); -+ } -+ -+ if ( m_title.isEmpty() ) -+ return; -+ -+ int r = left_margin + pixsize + margin * 2; -+ -+ QFont f1 = p->font(); -+ f1.setPointSizeFloat( title_font_size ); -+ f1.setWeight( QFont::Normal ); // QFont::DemiBold == 63 -+ -+ QFont f2 = p->font(); -+ f2.setPointSizeFloat( description_font_size ); -+ f2.setWeight( QFont::Light ); -+ -+ int f1h = QFontMetrics( f1 ).height(); -+ int f2h = QFontMetrics( f2 ).height(); -+ -+ const int text_margin = 2; -+ int spacing = ( height() - f1h - f2h - text_margin ) / 2; -+ if ( m_description.isEmpty() ) -+ spacing = ( height() - f1h ) / 2; -+ -+ int right_triangle_size = pixelSize( 7, listView() ); -+ -+ int right_margin = listView()->verticalScrollBar()->width(); -+ if ( m_has_children ) -+ right_margin += right_triangle_size * 2; -+ -+ KPixmap off; -+ QPainter pp; -+ -+ off.resize( width-text_margin-r-right_margin, height() ); -+ pp.begin( &off ); -+ pp.fillRect( 0, 0, off.width(), off.height(), backg ); -+ -+ if (isSelected()) -+ pp.setPen( cg.color( QColorGroup::HighlightedText ) ); -+ else -+ pp.setPen( cg.color( QColorGroup::Text ) ); -+ -+ pp.setFont( f1 ); -+ pp.drawText( 0, 0, off.width(), off.height(), align, m_title ); -+ pp.end(); -+ if ( QFontMetrics( f1 ).width( m_title ) > off.width() ) -+ { -+ makeGradient( off, backg ); -+ if ( !m_description.isEmpty() ) -+ setToolTip( m_title + "

    " + m_description ); -+ else -+ setToolTip( m_title ); -+ } -+ if ( reverseLayout ) -+ p->drawPixmap( width - off.width() - r, spacing, off ); -+ else -+ p->drawPixmap( r, spacing, off ); -+ -+ if ( !m_description.isEmpty() ) -+ { -+ pp.begin( &off ); -+ pp.fillRect( 0, 0, off.width(), off.height(), backg ); -+ -+ QColor myColor = cg.color( QColorGroup::Text ).light( 200 ); -+ if ( qGray( myColor.rgb() ) == 0 ) -+ myColor = QColor( 100, 100, 110 ); -+ pp.setPen( myColor ); -+ pp.setPen( isSelected() ? cg.color( QColorGroup::Mid ) : myColor ); -+ pp.setFont( f2 ); -+ pp.drawText( 0, 0, off.width(), off.height(), align, m_description ); -+ pp.end(); -+ if ( QFontMetrics( f2 ).width( m_description ) > off.width() ) -+ { -+ makeGradient( off, backg ); -+ setToolTip( m_title + "

    " + m_description ); -+ } -+ if ( reverseLayout ) -+ p->drawPixmap( width - off.width() - r, spacing + text_margin + f1h, off ); -+ else -+ p->drawPixmap( r, spacing + text_margin + f1h, off ); -+ } -+ -+ if ( m_has_children ) -+ { -+ QImage i = right_triangle.convertToImage().smoothScale( right_triangle_size, -+ right_triangle_size ); -+ QPixmap tri; -+ tri.convertFromImage( i ); -+ -+ if ( reverseLayout ) -+ p->drawPixmap( right_margin - tri.width(), ( height() - f1h ) / 2, tri ); -+ else -+ p->drawPixmap( listView()->width() - right_margin, ( height() - f1h ) / 2, tri ); -+ } -+ -+ if ( m_old_width != width ) -+ { -+ // the listview caches paint events -+ m_old_width = width; -+ repaint(); -+ } -+} -+ -+// -------------------------------------------------------------------------- -+ -+KMenuItemSeparator::KMenuItemSeparator(int nId, QListView* parent) -+ : KMenuItem(nId, parent), lv(parent), cached_width( 0 ) -+{ -+ setEnabled(false); -+ left_margin = 15; -+} -+ -+void KMenuItemSeparator::setup() -+{ -+ KMenuItem::setup(); -+ -+ QFont f = QFont(); -+ QFontMetrics fm(f); -+ f.setPointSize( 8 + KickerSettings::kickoffFontPointSizeOffset() ); -+ if ( itemAbove() && !text( 0 ).isEmpty() ) -+ setHeight( (int)QMAX( 34., fm.height() * 1.4) ); -+ else -+ setHeight( (int)QMAX( 26., fm.height() * 1.4 ) ); -+} -+ -+void KMenuItemSeparator::setLink( const QString &text, const QString &url ) -+{ -+ m_link_text = text; -+ m_link_url = url; -+ m_link_rect = QRect(); -+} -+ -+bool KMenuItemSeparator::hitsLink( const QPoint &pos ) -+{ -+ return m_link_rect.contains( pos ); -+} -+ -+void KMenuItemSeparator::preparePixmap( int width ) -+{ -+ if ( cached_width != width ) -+ { -+ pixmap.load( locate("data", "kicker/pics/menu_separator.png" ) ); -+ QImage i = pixmap.convertToImage().smoothScale( width - 15 - left_margin, pixmap.height() ); -+ pixmap.convertFromImage( i ); -+ cached_width = width; -+ } -+} -+ -+void KMenuItemSeparator::paintCell(QPainter* p, const QColorGroup & cg, int column, int width, int align) -+{ -+ preparePixmap(width); -+ -+ const int h = height(); -+ -+ if (text(0).isEmpty()) { -+ KMenuItem::paintCell(p, cg, column, width, align); -+ p->drawPixmap( 15 , h/2, pixmap ); -+ } -+ else { -+ const BackgroundMode bgmode = lv->viewport()->backgroundMode(); -+ const QColorGroup::ColorRole crole = QPalette::backgroundRoleFromMode( bgmode ); -+ p->fillRect( 0, 0, width, h, cg.brush( crole ) ); -+ -+ int margin = 0; -+ if ( itemAbove() ) { -+ p->drawPixmap( 15 , h/4, pixmap ); -+ margin = h / 4; -+ } -+ QFont f = listView()->font(); -+ f.setWeight( QFont::Normal ); -+ f.setPointSize( 8 + KickerSettings::kickoffFontPointSizeOffset() ); -+ p->setFont( f ); -+ QColor myColor = cg.color( QColorGroup::Text ).light( 200 ); -+ if ( qGray( myColor.rgb() ) == 0 ) -+ myColor = QColor( 100, 100, 110 ); -+ p->setPen( myColor ); -+ int twidth = p->fontMetrics().width(text(0)); -+ int lwidth = 0; -+ int swidth = 0; -+ int fwidth = 0; -+ -+ if ( !m_link_text.isEmpty() ) -+ { -+ swidth = p->fontMetrics().width( " (" ); -+ lwidth = p->fontMetrics().width(m_link_text ); -+ fwidth = p->fontMetrics().width( ")" ); -+ } -+ int pos = int(lv->width() * 0.9 - twidth - swidth - lwidth - fwidth); -+ p->drawText( pos, margin + 5, -+ width, h - ( margin +5 ), AlignTop, text(0) ); -+ if ( !m_link_text.isEmpty() ) -+ { -+ pos += twidth; -+ p->drawText( pos, margin + 5, -+ width, h - ( margin +5 ), AlignTop, " (" ); -+ pos += swidth; -+ p->setPen( cg.color( QColorGroup::Link ) ); -+ f.setUnderline( true ); -+ p->setFont( f ); -+ p->drawText( pos, margin + 5, -+ width, h - ( margin +5 ), AlignTop, m_link_text ); -+ m_link_rect = QRect( pos, margin + 5, lwidth, p->fontMetrics().height() ); -+ pos += lwidth; -+ f.setUnderline( false ); -+ p->setFont( f ); -+ p->drawText( pos, margin + 5, -+ width, h - ( margin +5 ), AlignTop, ")" ); -+ } -+ } -+} -+ -+KMenuItemHeader::KMenuItemHeader(int nId, const QString& relPath, QListView* parent) -+ : KMenuItemSeparator(nId, parent) -+{ -+ setEnabled( false ); -+ QString path; -+ if (relPath.startsWith( "new/" /*"kicker:/new/"*/ )) { -+ paths.append( "kicker:/goup/" ); -+ texts.append( i18n("New Applications") ); -+ icons.append( "clock" ); -+ } -+ else if (relPath == "kicker:/restart/") { -+ texts.append( i18n("Restart Computer") ); -+ } -+ else if (relPath == "kicker:/switchuser/") { -+ texts.append( i18n("Switch User") ); -+ } -+ else { -+ KServiceGroup::Ptr subMenuRoot = KServiceGroup::group(relPath); -+ QStringList items = QStringList::split( '/', relPath ); -+ for ( QStringList::ConstIterator it = items.begin(); it != items.end(); ++it ) -+ { -+ path += *it + "/"; -+ paths.append( "kicker:/goup/" + path ); -+ KServiceGroup::Ptr subMenuRoot = KServiceGroup::group(path); -+ QString groupCaption = subMenuRoot->caption(); -+ texts.append( groupCaption ); -+ icons.append( subMenuRoot->icon() ); -+ } -+ } -+ -+ setPath( "kicker:/goup/" + path ); // the last wins for now -+ left_margin = 10; -+} -+ -+void KMenuItemHeader::setup() -+{ -+ KMenuItem::setup(); -+ -+ QFontMetrics fm( listView()->font() ); -+ setHeight( QMAX( int( texts.count() * fm.height() + ( texts.count() + 1 ) * 2 + 10 ), height()) ); -+ // nada -+} -+ -+void KMenuItemHeader::paintCell(QPainter* p, const QColorGroup & cg, int , int width, int align ) -+{ -+ preparePixmap(width); -+ -+ const BackgroundMode bgmode = listView()->viewport()->backgroundMode(); -+ const QColorGroup::ColorRole crole = QPalette::backgroundRoleFromMode( bgmode ); -+ -+ QBrush br = cg.brush( crole ); -+ if ( isSelected() ) { -+ br = cg.brush( QColorGroup::Highlight ); -+ p->fillRect( 0, 0, width, height() - 3, br ); -+ } else { -+ p->fillRect( 0, 0, width, height(), br ); -+ } -+ -+ QFontMetrics fm( p->fontMetrics() ); -+ const int left_margin = 10; -+ -+ const int margin = 3; -+ -+ int r = left_margin + margin * 2; -+ -+ const int min_font_size = 7; -+ int title_font_pixelSize = qRound( pixelSize( QMAX( pointSize( 12, listView() ) + KickerSettings::kickoffFontPointSizeOffset(), min_font_size + 1 ), listView() ) ); -+ -+ QFont f1 = p->font(); -+ f1.setPixelSize( title_font_pixelSize ); -+ p->setFont( f1 ); -+ int f1h = QFontMetrics( f1 ).height(); -+ -+ p->setPen( cg.color( QColorGroup::Text ) ); -+ -+ const int text_margin = 2; -+ int spacing = ( height() - texts.count() * f1h - QMAX( texts.count() - 1, 0 ) * text_margin ) / 2; -+ -+ for ( uint i = 0; i < texts.count(); ++i ) -+ { -+ if (i==texts.count()-1) { -+ f1.setWeight( QFont::DemiBold ); -+ p->setFont( f1 ); -+ f1h = QFontMetrics( f1 ).height(); -+ } -+ -+ p->drawText( r, spacing, width-text_margin-r, height(), align, texts[i] ); -+ spacing += text_margin + f1h; -+ r += title_font_pixelSize; -+ } -+ -+ p->drawPixmap( left_margin , height() - 2, pixmap ); -+} -+ -+KMenuSpacer::KMenuSpacer(int nId, QListView* parent) -+ : KMenuItem(nId, parent) -+{ -+ setEnabled(false); -+} -+ -+void KMenuSpacer::setup() -+{ -+ // nada -+} -+ -+void KMenuSpacer::paintCell(QPainter* p, const QColorGroup & cg, int , int width, int ) -+{ -+ const BackgroundMode bgmode = listView()->viewport()->backgroundMode(); -+ const QColorGroup::ColorRole crole = QPalette::backgroundRoleFromMode( bgmode ); -+ QBrush br = cg.brush( crole ); -+ -+ p->fillRect( 0, 0, width, height(), br ); -+} -+ -+void KMenuSpacer::setHeight( int i ) -+{ -+ KMenuItem::setHeight( i ); -+} -+ -+class ItemViewTip : public QToolTip -+{ -+public: -+ ItemViewTip( QWidget *parent, QListView *lv ); -+ -+ void maybeTip( const QPoint &pos ); -+ -+private: -+ QListView *view; -+ -+}; -+ -+ItemViewTip::ItemViewTip( QWidget *parent, QListView *lv ) -+ : QToolTip( parent ), view( lv ) -+{ -+} -+ -+void ItemViewTip::maybeTip( const QPoint &pos ) -+{ -+ KMenuItem *item = dynamic_cast( view->itemAt( pos ) ); -+ QPoint contentsPos = view->viewportToContents( pos ); -+ if ( !item ) -+ return; -+ -+ if ( item->toolTip().isNull() ) -+ return; -+ -+ QRect r = view->itemRect( item ); -+ int headerPos = view->header()->sectionPos( 0 ); -+ r.setLeft( headerPos ); -+ r.setRight( headerPos + view->header()->sectionSize( 0 ) ); -+ tip( r, item->toolTip() ); -+} -+ -+// -------------------------------------------------------------------------- -+ -+ItemView::ItemView(QWidget* parent, const char* name) -+ : KListView(parent, name), m_spacer( 0 ), -+ m_mouseMoveSelects(true), m_iconSize(32) -+{ -+ setHScrollBarMode( QScrollView::AlwaysOff ); -+ setFrameStyle( QFrame::NoFrame ); -+ setSelectionMode(QListView::Single); -+ addColumn(""); -+ header()->setStretchEnabled(1, 0); -+ //setColumnWidthMode(0, QListView::Maximum); -+ header()->hide(); -+ setMouseTracking(true); -+ setItemMargin(0); -+ setSorting(-1); -+ setTreeStepSize(38); -+ setFocusPolicy(QWidget::NoFocus); -+ -+ m_lastOne = 0; -+ m_old_contentY = -1; -+ -+ connect(this, SIGNAL(mouseButtonClicked( int, QListViewItem*, const QPoint &, int )), -+ SLOT(slotItemClicked(int, QListViewItem*, const QPoint &, int))); -+ -+ connect(this, SIGNAL(returnPressed(QListViewItem*)), SLOT(slotItemClicked(QListViewItem*))); -+ connect(this, SIGNAL(spacePressed(QListViewItem*)), SLOT(slotItemClicked(QListViewItem*))); -+ -+ new ItemViewTip( viewport(), this ); -+} -+ -+KMenuItemHeader *ItemView::insertHeader(int id, const QString &relpath) -+{ -+ KMenuItemHeader *newItem = new KMenuItemHeader(id, relpath, this ); -+ moveItemToIndex(newItem, 1); -+ setBackPath( "kicker:/goup/" + relpath ); // the last wins for now -+ -+ return newItem; -+} -+ -+KMenuItem* ItemView::findItem(int nId) -+{ -+ for (QListViewItemIterator it(this); it.current(); ++it) -+ { -+ if(static_cast(it.current())->id() == nId) -+ return static_cast(it.current()); -+ } -+ -+ return 0L; -+} -+ -+bool ItemView::focusNextPrevChild(bool /*next*/) -+{ -+ return false; -+} -+ -+KMenuItem* ItemView::itemAtIndex(int nIndex) -+{ -+ if(nIndex <= 0) -+ return 0L; -+ -+ if(nIndex >= childCount()) -+ return static_cast(lastItem()); -+ -+ int i = 1; -+ QListViewItemIterator it(this); -+ for (;it.current(); ++i, ++it) { -+ if(i == nIndex) -+ return static_cast(it.current()); -+ } -+ -+ return static_cast(lastItem()); -+} -+ -+KMenuItem* ItemView::insertItem( const QString& icon, const QString& text, const QString& description, const -+ QString& path, int nId, int nIndex, KMenuItem *parent) -+{ -+ KMenuItem* newItem = findItem(nId); -+ -+ if(!newItem && parent) -+ newItem = new KMenuItem(nId, parent ); -+ else if ( !newItem ) -+ newItem = new KMenuItem(nId, this ); -+ -+ newItem->setIcon(icon, m_iconSize); -+ newItem->setTitle(text); -+ newItem->setDescription(description); -+ newItem->setPath(path); -+ -+ if (nIndex==-1) -+ nIndex=childCount(); -+ -+ moveItemToIndex(newItem, nIndex); -+ -+ return newItem; -+} -+ -+KMenuItem* ItemView::insertItem( const QString& icon, const QString& text, const QString& description, -+ int nId, int nIndex, KMenuItem *parent) -+{ -+ return insertItem( icon, text, description, QString::null, nId, nIndex, parent); -+} -+ -+int ItemView::setItemEnabled(int id, bool enabled) -+{ -+ KMenuItem* item = findItem(id); -+ -+ if(item) -+ item->setEnabled(enabled); -+ -+ return 0; -+} -+ -+KMenuItemSeparator *ItemView::insertSeparator(int nId, const QString& text, int nIndex) -+{ -+ KMenuItemSeparator *newItem = new KMenuItemSeparator(nId, this); -+ -+ newItem->setText(0, text); -+ -+ if (nIndex==-1) -+ nIndex=childCount(); -+ -+ moveItemToIndex(newItem, nIndex); -+ return newItem; -+} -+ -+void ItemView::moveItemToIndex(KMenuItem* item, int nIndex) -+{ -+ -+ if (nIndex <= 0) { -+ takeItem(item); -+ KListView::insertItem(item); -+ } -+ else { -+ item->moveItem(itemAtIndex(nIndex)); -+ } -+} -+ -+void ItemView::slotMoveContent() -+{ -+ if ( !m_spacer ) -+ return; -+ -+ int item_height = 0; -+ QListViewItemIterator it( this ); -+ while ( it.current() ) { -+ if ( !dynamic_cast( it.current() ) && !it.current()->parent() && it.current()->isVisible() ) { -+ it.current()->invalidateHeight(); -+ item_height += it.current()->totalHeight(); -+ } -+ ++it; -+ } -+ -+ if ( height() > item_height ) -+ m_spacer->setHeight( height() - item_height ); -+ else -+ m_spacer->setHeight( 0 ); -+} -+ -+KMenuItem *ItemView::insertMenuItem(KService::Ptr& s, int nId, int nIndex, KMenuItem* parentItem, -+ const QString& aliasname, const QString & label, const QString & categoryIcon ) -+{ -+ if (!s) -+ return 0; -+ -+ QString serviceName = aliasname.isEmpty() ? s->name() : aliasname; -+ -+ kdDebug() << "insertMenuItem " << nId << " " << nIndex << " " << s->name() << endl; -+ KMenuItem* newItem = 0; //findItem(nId); -+ if(!newItem) -+ newItem = parentItem ? new KMenuItem(nId, parentItem) : new KMenuItem(nId, this); -+ -+ newItem->setIcon(s->icon()=="unknown" ? categoryIcon : s->icon(), m_iconSize); -+ if ((KickerSettings::DescriptionAndName || KickerSettings::menuEntryFormat() -+ == KickerSettings::DescriptionOnly) && !s->genericName().isEmpty()) { -+ newItem->setTitle(s->genericName()); -+ newItem->setDescription(label.isEmpty() ? serviceName : label); -+ } -+ else { -+ newItem->setTitle(label.isEmpty() ? serviceName : label); -+ newItem->setDescription(s->genericName()); -+ } -+ newItem->setService(s); -+ -+ if (nIndex==-2) -+ return newItem; -+ -+ if (nIndex==-1) -+ nIndex=childCount(); -+ -+ moveItemToIndex(newItem, nIndex); -+ -+ return newItem; -+} -+ -+KMenuItem* ItemView::insertDocumentItem(const QString& s, int nId, int nIndex, const QStringList* /*suppressGenericNames*/, -+ const QString& /*aliasname*/) -+{ -+ KMenuItem* newItem = findItem(nId); -+ -+ if(!newItem) -+ newItem = new KMenuItem(nId, this); -+ -+ KMimeType::Ptr mt = KMimeType::findByURL( s ); -+ newItem->setIcon(KMimeType::iconForURL( s ), m_iconSize); -+ newItem->setTitle(s); -+ newItem->setDescription(mt->comment()); -+ newItem->setPath(s); -+ -+ if (nIndex==-1) -+ nIndex=childCount(); -+ -+ moveItemToIndex(newItem, nIndex); -+ -+ return newItem; -+} -+ -+KMenuItem* ItemView::insertRecentlyItem(const QString& s, int nId, int nIndex) -+{ -+ KDesktopFile f(s, true /* read only */); -+ -+ KMenuItem* newItem = findItem(nId); -+ -+ if(!newItem) -+ newItem = new KMenuItem(nId, this); -+ -+ newItem->setIcon(f.readIcon(), m_iconSize); -+ -+ // work around upstream fixed bug -+ QString name=f.readName(); -+ if (name.isEmpty()) -+ name=f.readURL(); -+ -+ newItem->setTitle(name); -+ -+ QString comment = f.readComment(); -+ if (comment.isEmpty()) { -+ KURL url(f.readURL()); -+ if (!url.host().isEmpty()) -+ comment = i18n("Host: %1").arg(url.host()); -+ } -+ -+ newItem->setDescription(comment); -+ newItem->setPath(s); -+ -+ if (nIndex==-1) -+ nIndex=childCount(); -+ -+ moveItemToIndex(newItem, nIndex); -+ -+ return newItem; -+} -+ -+int ItemView::insertItem(PopupMenuTitle*, int, int) -+{ -+ return 0; -+} -+ -+KMenuItem* ItemView::insertSubItem(const QString& icon, const QString& caption, const QString& description, const QString& path, KMenuItem* parentItem) -+{ -+#warning FIXME -+ KMenuItem* newItem = parentItem ? new KMenuItem(-1, parentItem) : new KMenuItem(-1, this); -+ newItem->setTitle(caption); -+ newItem->setDescription(description); -+ newItem->setIcon(icon, m_iconSize); -+ newItem->setPath(path); -+ -+ return newItem; -+} -+ -+ -+ -+void ItemView::slotItemClicked(int button, QListViewItem * item, const QPoint & /*pos*/, int /*c*/ ) -+{ -+ if (button==1) -+ slotItemClicked(item); -+} -+ -+void ItemView::slotItemClicked(QListViewItem* item) -+{ -+ KMenuItem* kitem = dynamic_cast(item); -+ if ( !kitem ) -+ return; -+ -+ if(kitem->service()) { -+ emit startService(kitem->service()); -+ } -+ else if(!kitem->path().isEmpty()) { -+ emit startURL(kitem->path()); -+ } -+} -+ -+void ItemView::contentsMousePressEvent ( QMouseEvent * e ) -+{ -+ KListView::contentsMousePressEvent( e ); -+ -+ QPoint vp = contentsToViewport(e->pos()); -+ KMenuItemSeparator *si = dynamic_cast( itemAt( vp ) ); -+ if ( si ) -+ { -+ if ( si->hitsLink( vp - itemRect(si).topLeft() ) ) -+ emit startURL( si->linkUrl() ); -+ } -+} -+ -+void ItemView::contentsMouseMoveEvent(QMouseEvent *e) -+{ -+ QPoint vp = contentsToViewport(e->pos()); -+ QListViewItem * i = itemAt( vp ); -+ -+ bool link_cursor = false; -+ KMenuItemSeparator *si = dynamic_cast( i ); -+ if ( si ) -+ link_cursor = si->hitsLink( vp - itemRect(si).topLeft() ); -+ -+ if (i && !i->isSelectable() && !link_cursor) { -+ unsetCursor(); -+ viewport()->unsetCursor(); -+ return; -+ } -+ -+ KListView::contentsMouseMoveEvent(e); -+ -+ if (m_mouseMoveSelects) { -+ if(i && i->isEnabled() && !i->isSelected() && -+ // FIXME: This is wrong if you drag over the items. -+ (e->state() & (LeftButton|MidButton|RightButton)) == 0) -+ KListView::setSelected(i, true); -+ else if (!i && selectedItem()) -+ KListView::setSelected(selectedItem(), false); -+ } -+ -+ if ( link_cursor ) -+ setCursor( Qt::PointingHandCursor ); -+ else -+ unsetCursor(); -+ -+} -+ -+void ItemView::leaveEvent(QEvent* e) -+{ -+ KListView::leaveEvent(e); -+ -+ clearSelection(); -+} -+ -+void ItemView::resizeEvent ( QResizeEvent * e ) -+{ -+ KListView::resizeEvent( e ); -+// if ( m_lastOne ) -+// int diff = itemRect( m_lastOne ).bottom() - viewport()->height(); -+} -+ -+void ItemView::viewportPaintEvent ( QPaintEvent * pe ) -+{ -+ //kdDebug() << "viewportPaintEvent " << pe->rect() << " " << contentsY () << " " << m_old_contentY << endl; -+ KListView::viewportPaintEvent( pe ); -+ -+ if ( m_lastOne && m_old_contentY != contentsY() ) { -+ m_old_contentY = contentsY(); -+ m_lastOne->repaint(); -+ } -+} -+ -+void ItemView::clear() -+{ -+ KListView::clear(); -+ m_lastOne = 0; -+ m_old_contentY = -1; -+ m_back_url = QString::null; -+} -+ -+void ItemView::contentsWheelEvent(QWheelEvent *e) -+{ -+ KListView::contentsWheelEvent(e); -+ -+ QPoint vp = contentsToViewport(e->pos()); -+ QListViewItem * i = itemAt( vp ); -+ -+ if(i && i->isEnabled() && !i->isSelected() && -+ // FIXME: This is wrong if you drag over the items. -+ (e->state() & (LeftButton|MidButton|RightButton)) == 0) -+ KListView::setSelected(i, true); -+ else if (!i && selectedItem()) -+ KListView::setSelected(selectedItem(), false); -+} -+ -+QDragObject * ItemView::dragObject() -+{ -+ KMultipleDrag* o = 0; -+ QListViewItem *item = itemAt( viewport()->mapFromGlobal(QCursor::pos()) ); -+ if ( item ) { -+ KMenuItem* kitem = static_cast(item); -+ -+ if (dynamic_cast(item)) -+ return 0; -+ -+ o = new KMultipleDrag(viewport()); -+ QPixmap pix = KGlobal::iconLoader()->loadIcon( kitem->icon(), KIcon::Panel, m_iconSize); -+ QPixmap add = KGlobal::iconLoader()->loadIcon( "add", KIcon::Small ); -+ -+ QPainter p( &pix ); -+ p.drawPixmap(pix.height()-add.height(), pix.width()-add.width(), add); -+ p.end(); -+ -+ QBitmap mask; -+ -+ if (pix.mask()) -+ mask = *pix.mask(); -+ else { -+ mask.resize(pix.size()); -+ mask.fill(Qt::color1); -+ } -+ -+ bitBlt( &mask, pix.width()-add.width(), pix.height()-add.height(), add.mask(), 0, 0, add.width(), add.height(), OrROP ); -+ pix.setMask( mask ); -+ o->setPixmap(pix); -+ -+ if(kitem->service()) { -+ // If the path to the desktop file is relative, try to get the full -+ // path from KStdDirs. -+ QString path = kitem->service()->desktopEntryPath(); -+ path = locate("apps", path); -+ o->addDragObject(new KURLDrag(KURL::List(KURL(path)), 0)); -+ } -+ else if (kitem->path().startsWith("kicker:/new") || kitem->path().startsWith("system:/") -+ || kitem->path().startsWith("kicker:/switchuser_") || kitem->path().startsWith("kicker:/restart_")) { -+ delete o; -+ return 0; -+ } -+ else if (kitem->hasChildren()) { -+ o->addDragObject(new KURLDrag(KURL::List(KURL("programs:/"+kitem->menuPath())), 0)); -+ return o; -+ } -+ else if(!kitem->path().isEmpty() && !kitem->path().startsWith("kicker:/") && !kitem->path().startsWith("kaddressbook:/")) { -+ QString uri = kitem->path(); -+ -+ if (uri.startsWith(locateLocal("data", QString::fromLatin1("RecentDocuments/")))) { -+ KDesktopFile df(uri,true); -+ uri=df.readURL(); -+ } -+ -+ o->addDragObject(new KURLDrag(KURL::List(KURL(uri)), 0)); -+ } -+ -+ o->addDragObject(new KMenuItemDrag(*kitem,this)); -+ } -+ return o; -+} -+ -+int ItemView::goodHeight() -+{ -+ int item_height = 0; -+ QListViewItemIterator it( this ); -+ while ( it.current() ) { -+ if ( !dynamic_cast( it.current() ) && !it.current()->parent() && it.current()->isVisible() ) { -+ item_height += it.current()->height(); -+ } -+ ++it; -+ } -+ -+ return item_height; -+} -+ -+ -+KMenuItemDrag::KMenuItemDrag(KMenuItem& item, QWidget *dragSource) -+ : QDragObject(dragSource, 0) -+{ -+ QBuffer buff(a); -+ buff.open(IO_WriteOnly); -+ QDataStream s(&buff); -+ -+ s << item.id() << (item.service() ? item.service()->storageId() : QString::null) -+ << item.title() << item.description() << item.icon() << item.path(); -+} -+ -+KMenuItemDrag::~KMenuItemDrag() -+{ -+} -+ -+const char * KMenuItemDrag::format(int i) const -+{ -+ if (i == 0) -+ return "application/kmenuitem"; -+ -+ return 0; -+} -+ -+QByteArray KMenuItemDrag::encodedData(const char* mimeType) const -+{ -+ if (QString("application/kmenuitem") == mimeType) -+ return a; -+ -+ return QByteArray(); -+} -+ -+bool KMenuItemDrag::canDecode(const QMimeSource * e) -+{ -+ if (e->provides( "application/kmenuitem" ) ) -+ return true; -+ -+ return false; -+} -+ -+bool ItemView::acceptDrag (QDropEvent* event) const -+{ -+ if ( !acceptDrops() ) -+ return false; -+ -+ if (KMenuItemDrag::canDecode(event)) -+ return true; -+ -+ if (QTextDrag::canDecode(event)) { -+ QString text; -+ QTextDrag::decode(event,text); -+ return !text.startsWith("programs:/"); -+ } -+ -+ return itemsMovable(); -+} -+ -+bool KMenuItemDrag::decode(const QMimeSource* e, KMenuItemInfo& item) -+{ -+ QByteArray a = e->encodedData("application/kmenuitem"); -+ -+ if (a.isEmpty()) { -+ QStringList l; -+ bool ret = QUriDrag::decodeToUnicodeUris( e, l ); -+ if ( ret ) -+ { -+ for ( QStringList::ConstIterator it = l.begin(); it != l.end(); ++it ) -+ { -+ QString url = *it; -+ kdDebug () << "Url " << url << endl; -+ item.m_path = KURL( url ).path(); -+ if ( KDesktopFile::isDesktopFile( item.m_path ) ) -+ { -+ KDesktopFile df( item.m_path, true ); -+ item.m_description = df.readGenericName(); -+ item.m_icon = df.readIcon(); -+ item.m_title = df.readName(); -+ } -+ else -+ { -+ item.m_title = item.m_path; -+ item.m_icon = KMimeType::iconForURL( url ); -+ item.m_title = item.m_path.section( '/', -1, -1 ); -+ int last_slash = url.findRev ('/', -1); -+ if (last_slash == 0) -+ item.m_description = i18n("Directory: /)"); -+ else -+ item.m_description = i18n("Directory: ") + url.section ('/', -2, -2); -+ } -+ -+ return true; -+ } -+ } -+ return false; -+ } -+ -+ QBuffer buff(a); -+ buff.open(IO_ReadOnly); -+ QDataStream s(&buff); -+ -+ KMenuItemInfo i; -+ QString storageId; -+ s >> i.m_id >> storageId >> i.m_title >> i.m_description >> i.m_icon >> i.m_path; -+ -+ i.m_s = storageId.isEmpty() ? 0 : KService::serviceByStorageId(storageId); -+ item = i; -+ -+ return true; -+} -+ -+FavoritesItemView::FavoritesItemView(QWidget* parent, const char* name) -+ : ItemView(parent, name) -+{ -+} -+ -+bool FavoritesItemView::acceptDrag (QDropEvent* event) const -+{ -+ if (event->source()==this->viewport()) -+ return true; -+ -+ if (KMenuItemDrag::canDecode(event)) { -+ KMenuItemInfo item; -+ KMenuItemDrag::decode(event,item); -+ QStringList favs = KickerSettings::favorites(); -+ -+ if (item.m_s) -+ return favs.find(item.m_s->storageId())==favs.end(); -+ else { -+ QStringList::Iterator it; -+ -+ QString uri = item.m_path; -+ -+ if (uri.startsWith(locateLocal("data", QString::fromLatin1("RecentDocuments/")))) { -+ KDesktopFile df(uri,true); -+ uri=df.readURL(); -+ } -+ -+ for (it = favs.begin(); it != favs.end(); ++it) { -+ if ((*it)[0]=='/') { -+ KDesktopFile df((*it),true); -+ if (df.readURL().replace("file://",QString::null)==uri) -+ break; -+ } -+ } -+ return it==favs.end(); -+ } -+ } -+ -+ if (QTextDrag::canDecode(event)) { -+ QString text; -+ QTextDrag::decode(event,text); -+ QStringList favs = KickerSettings::favorites(); -+ -+ if (text.endsWith(".desktop")) { -+ KService::Ptr p = KService::serviceByDesktopPath(text.replace("file://",QString::null)); -+ return (p && favs.find(p->storageId())==favs.end()); -+ } -+ else { -+ QStringList::Iterator it; -+ for (it = favs.begin(); it != favs.end(); ++it) { -+ if ((*it)[0]=='/') { -+ KDesktopFile df((*it),true); -+ if (df.readURL().replace("file://",QString::null)==text) -+ break; -+ } -+ } -+ return it==favs.end(); -+ } -+ } -+ -+ return itemsMovable(); -+} -+ -+#include "itemview.moc" -+ -+// vim:cindent:sw=4: ---- kicker/ui/media_watcher.cpp (Revision 0) -+++ kicker/ui/media_watcher.cpp (Revision 849791) -@@ -0,0 +1,57 @@ -+/***************************************************************** -+ -+Copyright (c) 2006 Stephan Kulow -+ -+Permission is hereby granted, free of charge, to any person obtaining a copy -+of this software and associated documentation files (the "Software"), to deal -+in the Software without restriction, including without limitation the rights -+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -+copies of the Software, and to permit persons to whom the Software is -+furnished to do so, subject to the following conditions: -+ -+The above copyright notice and this permission notice shall be included in -+all copies or substantial portions of the Software. -+ -+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -+AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -+AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -+ -+******************************************************************/ -+ -+#include "media_watcher.h" -+#include -+#include -+#include -+#include -+ -+MediaWatcher::MediaWatcher( QObject *parent ) : -+ QObject( parent ), DCOPObject("mediawatcher") -+{ -+ connectDCOPSignal( "kded", "mediamanager", "mediumAdded(QString,bool)", -+ "slotMediumAdded(QString,bool)", true ); -+ connectDCOPSignal( "kded", "mediamanager", "mediumRemoved(QString,bool)", -+ "slotMediumAdded(QString,bool)", true ); -+ connectDCOPSignal( "kded", "mediamanager", "mediumChanged(QString,bool)", -+ "slotMediumAdded(QString,bool)", true ); -+ -+ updateDevices(); -+} -+ -+void MediaWatcher::updateDevices() -+{ -+ DCOPRef nsd( "kded", "mediamanager" ); -+ nsd.setDCOPClient( kapp->dcopClient() ); -+ m_devices = nsd.call( "fullList" ); -+} -+ -+void MediaWatcher::slotMediumAdded( QString item, bool a ) -+{ -+ updateDevices(); -+ -+ emit mediumChanged(); -+} -+ -+#include "media_watcher.moc" - -Eigenschaftsänderungen: kicker/ui -___________________________________________________________________ -Geändert: svn:ignore - - nonKDEButtonSettings.h -appletitem.h -appletview.cpp -nonKDEButtonSettings.cpp -k_mnu.kidl -appletview.h -appletitem.cpp -k_mnu_skel.cpp -.deps -.libs -Makefile -Makefile.in -*.moc - - + nonKDEButtonSettings.h -appletitem.h -appletview.cpp -nonKDEButtonSettings.cpp -k_mnu.kidl -appletview.h -appletitem.cpp -k_mnu_skel.cpp -.deps -.libs -Makefile -Makefile.in -*.moc -kmenuitembase.cpp -media_watcher.kidl -kmenubase.cpp -kmenuitembase.h -kmenubase.h -media_watcher_skel.cpp - - ---- kicker/buttons/knewbutton.cpp (Revision 0) -+++ kicker/buttons/knewbutton.cpp (Revision 849791) -@@ -0,0 +1,455 @@ -+/***************************************************************** -+ -+Copyright (c) 2006 Stephan Binner -+ Stephan Kulow -+ Dirk Mueller -+ -+Permission is hereby granted, free of charge, to any person obtaining a copy -+of this software and associated documentation files (the "Software"), to deal -+in the Software without restriction, including without limitation the rights -+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -+copies of the Software, and to permit persons to whom the Software is -+furnished to do so, subject to the following conditions: -+ -+The above copyright notice and this permission notice shall be included in -+all copies or substantial portions of the Software. -+ -+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -+AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -+AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -+ -+******************************************************************/ -+ -+#include -+#include -+ -+#include -+#include -+#include -+#include -+ -+#include -+#include -+#include -+#include -+#include -+ -+#include "kickerSettings.h" -+ -+#include "config.h" -+#include "global.h" -+ -+#include "menumanager.h" -+#include "k_mnu_stub.h" -+#include "k_new_mnu.h" -+ -+#include "knewbutton.h" -+#include "knewbutton.moc" -+ -+KNewButton *KNewButton::m_self = 0; -+ -+KNewButton::KNewButton( QWidget* parent ) -+ : KButton( parent ), -+ m_oldPos(0,0) -+{ -+ Q_ASSERT( !m_self ); -+ m_self = this; -+ m_hoverTimer = -1; -+ m_openTimer = -1; -+ m_active = false; -+ m_mouseInside = false; -+ m_drag = false; -+ -+ setIconAlignment((Qt::AlignmentFlags)(AlignTop|AlignRight)); -+ setAcceptDrops(true); -+ setIcon("kmenu-suse"); -+ setDrawArrow(false); -+ -+ m_movie = new QMovie(locate("data", "kicker/pics/kmenu_basic.mng")); -+ m_movie->connectUpdate(this, SLOT(updateMovie())); -+ m_movie->connectStatus(this, SLOT(slotStatus(int))); -+ m_movie->connectResize(this, SLOT(slotSetSize(const QSize&))); -+ -+ QApplication::desktop()->screen()->installEventFilter(this); -+ setMouseTracking(true); -+} -+ -+KNewButton::~KNewButton() -+{ -+ if ( m_self == this ) -+ m_self = 0; -+ setMouseTracking(false); -+ delete m_movie; -+} -+ -+void KNewButton::slotStatus(int status) -+{ -+ if(status == QMovie::EndOfLoop) -+ slotStopAnimation(); -+} -+ -+QColor KNewButton::borderColor() const -+{ -+ QImage img = m_active_pixmap.convertToImage(); -+ -+ for (int i = 0; i < img.width(); ++i) { -+ QRgb rgb = img.pixel(orientation() == Qt::Horizontal ? img.width() - i - 1 : -+ i, 2); -+ -+ if (qGreen(rgb) > 0x50) -+ return rgb; -+ } -+ -+ return img.pixel( orientation() == Qt::Horizontal ? img.width() - 2 : 2, 2); -+} -+ -+void KNewButton::show() -+{ -+ KButton::show(); -+ -+ if (KickerSettings::firstRun()) { -+ QTimer::singleShot(500,this,SLOT(slotExecMenu())); -+ KickerSettings::setFirstRun(false); -+ KickerSettings::writeConfig(); -+ } -+} -+ -+void KNewButton::updateMovie() -+{ -+ m_oldPos = QPoint( -1, -1 ); -+ drawEye(); -+ -+ if (!m_active && m_movie->running()) -+ m_movie->pause(); -+} -+ -+void KNewButton::setPopupDirection(KPanelApplet::Direction d) -+{ -+ KButton::setPopupDirection(d); -+ -+ delete m_movie; -+ -+ switch (d) { -+ case KPanelApplet::Left: -+ setIconAlignment((Qt::AlignmentFlags)(AlignTop|AlignLeft)); -+ m_movie = new QMovie(locate("data", "kicker/pics/kmenu_vertical.mng")); -+ break; -+ case KPanelApplet::Right: -+ setIconAlignment((Qt::AlignmentFlags)(AlignTop|AlignRight)); -+ m_movie = new QMovie(locate("data", "kicker/pics/kmenu_vertical.mng")); -+ break; -+ case KPanelApplet::Up: -+ setIconAlignment((Qt::AlignmentFlags)(AlignTop|AlignHCenter)); -+ m_movie = new QMovie(locate("data", "kicker/pics/kmenu_basic.mng")); -+ break; -+ case KPanelApplet::Down: -+ setIconAlignment((Qt::AlignmentFlags)(AlignBottom|AlignHCenter)); -+ m_movie = new QMovie(locate("data", "kicker/pics/kmenu_flipped.mng")); -+ } -+ -+ m_movie->connectUpdate(this, SLOT(updateMovie())); -+ m_movie->connectStatus(this, SLOT(slotStatus(int))); -+ m_movie->connectResize(this, SLOT(slotSetSize(const QSize&))); -+} -+ -+void KNewButton::slotSetSize(const QSize& s) -+{ -+ m_iconSize = s; -+} -+ -+double KNewButton::buttonScaleFactor(const QSize& s) const -+{ -+ double sf = 1.0; -+ -+ switch (popupDirection()) { -+ case KPanelApplet::Left: -+ case KPanelApplet::Right: -+// sf = kMin(double(s.width()) / m_iconSize.height(), double(s.height()) / m_iconSize.width()); -+// break; -+ case KPanelApplet::Up: -+ case KPanelApplet::Down: -+ sf = kMin(double(s.width()) / m_iconSize.width(), double(s.height()) / m_iconSize.height()); -+ break; -+ } -+ -+ if (sf > 0.8) sf = 1.0; -+ return sf; -+} -+ -+int KNewButton::widthForHeight(int height) const -+{ -+ int r = m_iconSize.width() * buttonScaleFactor(QSize(m_iconSize.width(), height)); -+ -+ if (!m_movie->running() && height != m_active_pixmap.height()) -+ { -+ KNewButton* that = const_cast(this); -+ QTimer::singleShot(0, that, SLOT(slotStopAnimation())); -+ } -+ -+ return r; -+} -+ -+int KNewButton::preferredDimension(int panelDim) const -+{ -+ return kMax(m_icon.width(), m_icon.height()); -+} -+ -+int KNewButton::heightForWidth(int width) const -+{ -+ int r = m_iconSize.width() * buttonScaleFactor(QSize(width, m_iconSize.height())); -+ if (!m_movie->running() && width != m_active_pixmap.width()) -+ { -+ KNewButton* that = const_cast(this); -+ QTimer::singleShot(0, that, SLOT(slotStopAnimation())); -+ } -+ return r; -+} -+ -+bool KNewButton::eventFilter(QObject *o, QEvent *e) -+{ -+ if (e->type() == QEvent::MouseButtonRelease || -+ e->type() == QEvent::MouseButtonPress || -+ e->type() == QEvent::MouseButtonDblClick ) -+ { -+ QMouseEvent *me = static_cast(e); -+ if (rect().contains(mapFromGlobal(me->globalPos()))) -+ { -+ if (m_pressedDuringPopup && m_popup && m_openTimer != -1 -+ && (me->button() & Qt::LeftButton) ) -+ return true; -+ } -+ } -+ -+ if (KickerSettings::kickoffDrawGeekoEye() && e->type() == QEvent::MouseMove) -+ { -+ QMouseEvent *me = static_cast(e); -+ if ((me->state() & MouseButtonMask) == NoButton) -+ drawEye(); -+ } -+ -+ return KButton::eventFilter(o, e); -+} -+ -+void KNewButton::drawEye() -+{ -+#define eye_x 62 -+#define eye_y 13 -+ QPoint mouse = QCursor::pos(); -+ QPoint me = mapToGlobal(QPoint(eye_x, eye_y)); -+ double a = atan2(mouse.y() - me.y(), mouse.x() - me.x()); -+ int dx = int(2.1 * cos(a)); -+ int dy = int(2.1 * sin(a)); -+ -+ QPoint newpos(eye_x+dx,eye_y+dy); -+ if (newpos!=m_oldPos) { -+ m_oldPos = newpos; -+ QPixmap pixmap = m_active_pixmap; -+ -+ double sf = 1.0; -+ -+ if(!m_movie->framePixmap().isNull()) -+ { -+ pixmap = m_movie->framePixmap(); -+ pixmap.detach(); -+ m_iconSize = pixmap.size(); -+ sf = buttonScaleFactor(size()); -+ -+ if (KickerSettings::kickoffDrawGeekoEye()) { -+ QPainter p(&pixmap); -+ p.setPen(white); -+ p.setBrush(white); -+ // p.setPen(QColor(110,185,55)); -+ p.drawRect(eye_x+dx, eye_y+dy, 2, 2); -+ p. end(); -+ } -+ } -+ -+ QWMatrix matrix; -+ switch (popupDirection()) { -+ case KPanelApplet::Left: -+ matrix.scale(sf, -sf); -+ matrix.rotate(90); -+ break; -+ case KPanelApplet::Up: -+ matrix.scale(sf, sf); -+ break; -+ case KPanelApplet::Right: -+ matrix.scale(sf, -sf); -+ matrix.rotate(90); -+ break; -+ case KPanelApplet::Down: -+ matrix.scale(sf, sf); -+ break; -+ } -+ m_active_pixmap = pixmap.xForm(matrix); -+ -+ repaint(false); -+ } -+#undef eye_x -+#undef eye_y -+} -+ -+void KNewButton::enterEvent(QEvent* e) -+{ -+ KButton::enterEvent(e); -+ -+ QSize s(size()); -+ s *= 0.25; -+ s = s.expandedTo(QSize(6,6)); -+ -+ switch (popupDirection()) { -+ case KPanelApplet::Left: -+ m_sloppyRegion = QRect(rect().topRight() - QPoint(s.width()-1, 0), s); -+ break; -+ case KPanelApplet::Right: -+ m_sloppyRegion = QRect(rect().topLeft(), s); -+ break; -+ case KPanelApplet::Up: -+ m_sloppyRegion = QRect(rect().bottomLeft() - QPoint(0, s.height()-1), s); -+ break; -+ case KPanelApplet::Down: -+ m_sloppyRegion = QRect(rect().topLeft(), s); -+ } -+ -+ m_active = true; -+ m_movie->unpause(); -+ m_movie->restart(); -+} -+ -+void KNewButton::rewindMovie() -+{ -+ m_oldPos = QPoint( -1, -1 ); -+ m_movie->unpause(); -+} -+ -+void KNewButton::dragEnterEvent(QDragEnterEvent* /*e*/) -+{ -+ if (m_hoverTimer != -1) -+ killTimer(m_hoverTimer); -+ -+ m_hoverTimer = startTimer(QApplication::startDragTime()); -+ m_mouseInside = true; -+ m_drag = true; -+} -+ -+void KNewButton::dragLeaveEvent(QDragLeaveEvent* /*e*/) -+{ -+ m_mouseInside = false; -+ m_drag = false; -+} -+ -+void KNewButton::leaveEvent(QEvent* e) -+{ -+ m_mouseInside = false; -+ if (m_hoverTimer != -1) -+ killTimer(m_hoverTimer); -+ m_hoverTimer = -1; -+ -+ KButton::leaveEvent(e); -+} -+ -+void KNewButton::mouseMoveEvent(QMouseEvent* e) -+{ -+ KButton::mouseMoveEvent(e); -+ -+ m_mouseInside = m_sloppyRegion.contains(e->pos()); -+ -+ if ( m_sloppyRegion.contains(e->pos())) -+ { -+ if (m_hoverTimer == -1 && KickerSettings::openOnHover()) -+ m_hoverTimer = startTimer(kMax(200,QApplication::doubleClickInterval()/2)); -+ } -+ else if (m_hoverTimer != -1) -+ { -+ killTimer(m_hoverTimer); -+ m_hoverTimer = -1; -+ } -+} -+ -+void KNewButton::slotStopAnimation() -+{ -+ m_active = false; -+ m_movie->pause(); -+ m_movie->restart(); -+ QTimer::singleShot(200, this, SLOT(rewindMovie())); -+} -+ -+const QPixmap& KNewButton::labelIcon() const -+{ -+ return m_active_pixmap; -+} -+ -+void KNewButton::slotExecMenu() -+{ -+ if (m_openTimer != -1) -+ killTimer(m_openTimer); -+ -+ m_openTimer = startTimer(QApplication::doubleClickInterval() * 3); -+ -+ if (m_active) -+ { -+ m_active = false; -+ m_movie->pause(); -+ m_movie->restart(); -+ } -+ -+ KButton::slotExecMenu(); -+ -+ assert(!KickerTip::tippingEnabled()); -+ assert(dynamic_cast(m_popup)); -+ -+ disconnect(dynamic_cast(m_popup), SIGNAL(aboutToHide()), this, -+ SLOT(slotStopAnimation())); -+ connect(dynamic_cast(m_popup), SIGNAL(aboutToHide()), -+ SLOT(slotStopAnimation())); -+ -+ m_popup->move(KickerLib::popupPosition(popupDirection(), m_popup, this)); -+ // I wish KMenu would properly done itself when it closes. But it doesn't. -+ -+ bool useEffect = true; // could be QApplication::isEffectEnabled() -+ useEffect = false; // too many Qt bugs to be useful -+ if (m_drag) -+ useEffect = false; -+ -+ m_drag = false; // once is enough -+ -+ if (useEffect) -+ { -+ switch (popupDirection()) { -+ case KPanelApplet::Left: -+ qScrollEffect(m_popup, QEffects::LeftScroll); -+ break; -+ case KPanelApplet::Up: -+ qScrollEffect(m_popup, QEffects::UpScroll); -+ break; -+ case KPanelApplet::Right: -+ qScrollEffect(m_popup, QEffects::RightScroll); -+ break; -+ case KPanelApplet::Down: -+ qScrollEffect(m_popup, QEffects::DownScroll); -+ break; -+ } -+ } -+ else -+ static_cast(m_popup)->show(); -+} -+ -+void KNewButton::timerEvent(QTimerEvent* e) -+{ -+ if (e->timerId() == m_hoverTimer) -+ { -+ if (m_mouseInside && !isDown()) -+ showMenu(); -+ -+ killTimer(m_hoverTimer); -+ m_hoverTimer = -1; -+ } -+ if (e->timerId() == m_openTimer) -+ { -+ killTimer(m_openTimer); -+ m_openTimer = -1; -+ } -+} ---- kicker/buttons/knewbutton.h (Revision 0) -+++ kicker/buttons/knewbutton.h (Revision 849791) -@@ -0,0 +1,98 @@ -+/***************************************************************** -+ -+Copyright (c) 2006 Stephan Binner -+ Stephan Kulow -+ Dirk Mueller -+ -+Permission is hereby granted, free of charge, to any person obtaining a copy -+of this software and associated documentation files (the "Software"), to deal -+in the Software without restriction, including without limitation the rights -+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -+copies of the Software, and to permit persons to whom the Software is -+furnished to do so, subject to the following conditions: -+ -+The above copyright notice and this permission notice shall be included in -+all copies or substantial portions of the Software. -+ -+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -+AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -+AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -+ -+******************************************************************/ -+ -+#ifndef __knewbutton_h__ -+#define __knewbutton_h__ -+ -+#include "kbutton.h" -+ -+#include -+#include -+ -+/** -+ * Button that contains the PanelKMenu and client menu manager. -+ */ -+class KNewButton : public KButton -+{ -+ Q_OBJECT -+ -+public: -+ KNewButton( QWidget *parent ); -+ ~KNewButton(); -+ -+ static KNewButton *self() { return m_self; } -+ -+ void loadConfig( const KConfigGroup& config ); -+ -+ virtual const QPixmap& labelIcon() const; -+ -+ virtual int widthForHeight(int height) const; -+ virtual int preferredDimension(int panelDim) const; -+ virtual int heightForWidth(int width) const; -+ -+ QColor borderColor() const; -+ -+ virtual void setPopupDirection(KPanelApplet::Direction d); -+ -+private slots: -+ void slotStatus(int); -+ void slotSetSize(const QSize&); -+ void slotStopAnimation(); -+ void rewindMovie(); -+ void updateMovie(); -+ -+protected: -+ virtual void show(); -+ virtual void slotExecMenu(); -+ virtual QString tileName() { return "KMenu"; } -+ virtual QString defaultIcon() const { return "go"; } -+ -+ virtual void enterEvent(QEvent* e); -+ virtual void leaveEvent(QEvent* e); -+ virtual void mouseMoveEvent(QMouseEvent* e); -+ virtual void dragEnterEvent(QDragEnterEvent*); -+ virtual void dragLeaveEvent(QDragLeaveEvent*); -+ virtual bool eventFilter(QObject *, QEvent *); -+ void timerEvent(QTimerEvent*); -+ -+private: -+ void drawEye(); -+ double buttonScaleFactor(const QSize& s) const; -+ -+ QMovie* m_movie; -+ QPixmap m_active_pixmap; -+ QPoint m_oldPos; -+ QSize m_iconSize; -+ QRect m_sloppyRegion; -+ int m_hoverTimer; -+ int m_openTimer; -+ bool m_active; -+ bool m_mouseInside; -+ bool m_drag; -+ -+ static KNewButton *m_self; -+}; -+ -+#endif ---- kicker/buttons/browserbutton.cpp (Revision 849788) -+++ kicker/buttons/browserbutton.cpp (Revision 849791) -@@ -65,7 +65,7 @@ - topMenu = new PanelBrowserMenu( path ); - setPopup(topMenu); - -- _menuTimer = new QTimer( this ); -+ _menuTimer = new QTimer( this, "_menuTimer" ); - connect( _menuTimer, SIGNAL(timeout()), SLOT(slotDelayedPopup()) ); - - QToolTip::add(this, i18n("Browse: %1").arg(path)); ---- kicker/buttons/kbutton.cpp (Revision 849788) -+++ kicker/buttons/kbutton.cpp (Revision 849791) -@@ -33,6 +33,7 @@ - - #include "menumanager.h" - #include "k_mnu.h" -+#include "k_mnu_stub.h" - - #include "kbutton.h" - #include "kbutton.moc" -@@ -43,7 +44,7 @@ - QToolTip::add(this, i18n("Applications, tasks and desktop sessions")); - setTitle(i18n("K Menu")); - -- setPopup(MenuManager::the()->kmenu()); -+ setPopup(MenuManager::the()->kmenu()->widget()); - MenuManager::the()->registerKButton(this); - setIcon("kmenu"); - ---- kicker/buttons/Makefile.am (Revision 849788) -+++ kicker/buttons/Makefile.am (Revision 849791) -@@ -1,10 +1,10 @@ - INCLUDES = -I$(srcdir)/../core -I$(srcdir)/../../libkicker -I../../libkicker \ -- -I$(srcdir)/../ui -I$(top_srcdir)/libkonq $(all_includes) -+ -I../ui -I$(srcdir)/../ui -I$(top_srcdir)/libkonq $(all_includes) - - noinst_LTLIBRARIES = libkicker_buttons.la - - libkicker_buttons_la_SOURCES = servicebutton.cpp bookmarksbutton.cpp \ -- browserbutton.cpp \ -+ browserbutton.cpp knewbutton.cpp \ - desktopbutton.cpp extensionbutton.cpp kbutton.cpp \ - nonkdeappbutton.cpp servicemenubutton.cpp urlbutton.cpp \ - windowlistbutton.cpp ---- applets/media/mediumbutton.cpp (Revision 849788) -+++ applets/media/mediumbutton.cpp (Revision 849791) -@@ -45,7 +45,8 @@ - #include - - MediumButton::MediumButton(QWidget *parent, const KFileItem &fileItem) -- : PanelPopupButton(parent), mActions(this, this), mFileItem(fileItem) -+ : PanelPopupButton(parent), mActions(this, this), mFileItem(fileItem), mOpenTimer(0, -+ "MediumButton::mOpenTimer") - { - KAction *a = KStdAction::paste(this, SLOT(slotPaste()), - &mActions, "pasteto"); -@@ -74,9 +75,9 @@ - - MediumButton::~MediumButton() - { -- QPopupMenu *menu = popup(); -- setPopup(0); -- delete menu; -+ QPopupMenu *menu = static_cast(popup()); -+ setPopup(0); -+ delete menu; - } - - const KFileItem &MediumButton::fileItem() const -@@ -94,29 +95,29 @@ - - void MediumButton::initPopup() - { -- QPopupMenu *old_popup = popup(); -- -- KFileItemList items; -- items.append(&mFileItem); -- -- KonqPopupMenu::KonqPopupFlags kpf = -- KonqPopupMenu::ShowProperties -- | KonqPopupMenu::ShowNewWindow; -- -- KParts::BrowserExtension::PopupFlags bef = -- KParts::BrowserExtension::DefaultPopupItems; -- -- KonqPopupMenu *new_popup = new KonqPopupMenu(0L, items, -- KURL("media:/"), mActions, 0L, -- this, kpf, bef); -- KPopupTitle *title = new KPopupTitle(new_popup); -- title->setTitle(mFileItem.text()); -- -- new_popup->insertItem(title, -1, 0); -- -- setPopup(new_popup); -- -- if (old_popup!=0L) delete old_popup; -+ QPopupMenu *old_popup = static_cast(popup()); -+ -+ KFileItemList items; -+ items.append(&mFileItem); -+ -+ KonqPopupMenu::KonqPopupFlags kpf = -+ KonqPopupMenu::ShowProperties -+ | KonqPopupMenu::ShowNewWindow; -+ -+ KParts::BrowserExtension::PopupFlags bef = -+ KParts::BrowserExtension::DefaultPopupItems; -+ -+ KonqPopupMenu *new_popup = new KonqPopupMenu(0L, items, -+ KURL("media:/"), mActions, 0L, -+ this, kpf, bef); -+ KPopupTitle *title = new KPopupTitle(new_popup); -+ title->setTitle(mFileItem.text()); -+ -+ new_popup->insertItem(title, -1, 0); -+ -+ setPopup(new_popup); -+ -+ if (old_popup!=0L) delete old_popup; - } - - void MediumButton::refreshType() ---- applets/naughty/NaughtyProcessMonitor.cpp (Revision 849788) -+++ applets/naughty/NaughtyProcessMonitor.cpp (Revision 849791) -@@ -94,7 +94,7 @@ - d = new NaughtyProcessMonitorPrivate; - d->interval_ = interval * 1000; - d->triggerLevel_ = triggerLevel; -- d->timer_ = new QTimer(this); -+ d->timer_ = new QTimer(this, "NaughtyProcessMonitorPrivate::timer"); - connect(d->timer_, SIGNAL(timeout()), this, SLOT(slotTimeout())); - } - ---- applets/launcher/quicklauncher.cpp (Revision 849788) -+++ applets/launcher/quicklauncher.cpp (Revision 849791) -@@ -110,7 +110,7 @@ - m_configAction = new KAction(i18n("Configure Quicklauncher..."), "configure", KShortcut(), - this, SLOT(slotConfigure()), this); - -- m_saveTimer = new QTimer(this); -+ m_saveTimer = new QTimer(this, "m_saveTimer"); - connect(m_saveTimer, SIGNAL(timeout()), this, SLOT(saveConfig())); - - m_popularity = new PopularityStatistics(); ---- applets/trash/trashbutton.cpp (Revision 849788) -+++ applets/trash/trashbutton.cpp (Revision 849791) -@@ -78,7 +78,7 @@ - - void TrashButton::initPopup() - { -- QPopupMenu *old_popup = popup(); -+ QPopupMenu *old_popup = static_cast(popup()); - - KFileItemList items; - items.append(&mFileItem); ---- applets/systemtray/systemtrayapplet.cpp (Revision 849788) -+++ applets/systemtray/systemtrayapplet.cpp (Revision 849791) -@@ -375,7 +375,7 @@ - connect(m_expandButton, SIGNAL(clicked()), - this, SLOT(toggleExpanded())); - -- m_autoRetractTimer = new QTimer(this); -+ m_autoRetractTimer = new QTimer(this, "m_autoRetractTimer"); - connect(m_autoRetractTimer, SIGNAL(timeout()), - this, SLOT(checkAutoRetract())); - } ---- applets/clock/clock.cpp (Revision 849788) -+++ applets/clock/clock.cpp (Revision 849791) -@@ -863,8 +863,8 @@ - _calendar(0), - _disableCalendar(false), - _clock(0), -- _timer(new QTimer(this)), -- m_layoutTimer(new QTimer(this)), -+ _timer(new QTimer(this, "ClockApplet::_timer")), -+ m_layoutTimer(new QTimer(this, "m_layoutTimer")), - m_layoutDelay(0), - m_followBackgroundSetting(true), - m_dateFollowBackgroundSetting(true), ---- applets/minipager/pagerbutton.cpp (Revision 849788) -+++ applets/minipager/pagerbutton.cpp (Revision 849791) -@@ -70,6 +70,8 @@ - m_bgPixmap(0), - m_isCommon(false), - m_currentWindow(0), -+ m_updateCompressor(0, "KMiniPagerButton::updateCompressor"), -+ m_dragSwitchTimer(0, "KMiniPagerButton::dragSwitchTimer"), - m_inside(false) - { - setToggleButton(true); ---- data/kmenu_side/Makefile.am (Revision 849788) -+++ data/kmenu_side/Makefile.am (Revision 849791) -@@ -1,6 +1,5 @@ --kicker_kmenuside_pics_data_DATA = kside.png kside_tile.png -+kicker_kmenuside_pics_data_DATA = kside.png kside_tile.png -+kicker_kmenuside_pics_datadir = $(kde_datadir)/kicker/pics - --kicker_kmenuside_pics_datadir = $(kde_datadir)/kicker/pics/ -- - EXTRA_DIST = $(kicker_kmenuside_pics_data_DATA) - ---- data/Makefile.am (Revision 849788) -+++ data/Makefile.am (Revision 849791) -@@ -1 +1 @@ --SUBDIRS = icons tiles app_start_anim wallpaper kmenu_side -+SUBDIRS = icons tiles app_start_anim wallpaper kmenu_side kickoff -Kann nicht anzeigen: Dateityp ist als binär angegeben. -svn:mime-type = application/octet-stream - -Eigenschaftsänderungen: data/kickoff/cr32-action-suspend2disk.png -___________________________________________________________________ -Hinzugefügt: svn:mime-type - + application/octet-stream - -Kann nicht anzeigen: Dateityp ist als binär angegeben. -svn:mime-type = application/octet-stream - -Eigenschaftsänderungen: data/kickoff/search-tab-left.png -___________________________________________________________________ -Hinzugefügt: svn:mime-type - + application/octet-stream - -Kann nicht anzeigen: Dateityp ist als binär angegeben. -svn:mime-type = application/octet-stream - -Eigenschaftsänderungen: data/kickoff/main_corner_tr.png -___________________________________________________________________ -Hinzugefügt: svn:mime-type - + application/octet-stream - -Kann nicht anzeigen: Dateityp ist als binär angegeben. -svn:mime-type = application/octet-stream - -Eigenschaftsänderungen: data/kickoff/cr48-app-recently_used.png -___________________________________________________________________ -Hinzugefügt: svn:mime-type - + application/octet-stream - -Kann nicht anzeigen: Dateityp ist als binär angegeben. -svn:mime-type = application/octet-stream - -Eigenschaftsänderungen: data/kickoff/search-tab-top-left.png -___________________________________________________________________ -Hinzugefügt: svn:mime-type - + application/octet-stream - -Kann nicht anzeigen: Dateityp ist als binär angegeben. -svn:mime-type = application/octet-stream - -Eigenschaftsänderungen: data/kickoff/right_triangle.png -___________________________________________________________________ -Hinzugefügt: svn:mime-type - + application/octet-stream - -Kann nicht anzeigen: Dateityp ist als binär angegeben. -svn:mime-type = application/octet-stream - -Eigenschaftsänderungen: data/kickoff/cr16-action-suspend2disk.png -___________________________________________________________________ -Hinzugefügt: svn:mime-type - + application/octet-stream - -Kann nicht anzeigen: Dateityp ist als binär angegeben. -svn:mime-type = application/octet-stream - -Eigenschaftsänderungen: data/kickoff/crsc-action-suspend2ram.svgz -___________________________________________________________________ -Hinzugefügt: svn:mime-type - + application/octet-stream - -Kann nicht anzeigen: Dateityp ist als binär angegeben. -svn:mime-type = application/octet-stream - -Eigenschaftsänderungen: data/kickoff/cr128-action-suspend2ram.png -___________________________________________________________________ -Hinzugefügt: svn:mime-type - + application/octet-stream - -Kann nicht anzeigen: Dateityp ist als binär angegeben. -svn:mime-type = application/octet-stream - -Eigenschaftsänderungen: data/kickoff/cr32-action-leave.png -___________________________________________________________________ -Hinzugefügt: svn:mime-type - + application/octet-stream - -Kann nicht anzeigen: Dateityp ist als binär angegeben. -svn:mime-type = application/octet-stream - -Eigenschaftsänderungen: data/kickoff/left_triangle.png -___________________________________________________________________ -Hinzugefügt: svn:mime-type - + application/octet-stream - -Kann nicht anzeigen: Dateityp ist als binär angegeben. -svn:mime-type = application/octet-stream - -Eigenschaftsänderungen: data/kickoff/menu_separator.png -___________________________________________________________________ -Hinzugefügt: svn:mime-type - + application/octet-stream - -Kann nicht anzeigen: Dateityp ist als binär angegeben. -svn:mime-type = application/octet-stream - -Eigenschaftsänderungen: data/kickoff/cr32-action-suspend2ram.png -___________________________________________________________________ -Hinzugefügt: svn:mime-type - + application/octet-stream - -Kann nicht anzeigen: Dateityp ist als binär angegeben. -svn:mime-type = application/octet-stream - -Eigenschaftsänderungen: data/kickoff/cr48-action-leave.png -___________________________________________________________________ -Hinzugefügt: svn:mime-type - + application/octet-stream - -Kann nicht anzeigen: Dateityp ist als binär angegeben. -svn:mime-type = application/octet-stream - -Eigenschaftsänderungen: data/kickoff/cr16-action-suspend2ram.png -___________________________________________________________________ -Hinzugefügt: svn:mime-type - + application/octet-stream - -Kann nicht anzeigen: Dateityp ist als binär angegeben. -svn:mime-type = application/octet-stream - -Eigenschaftsänderungen: data/kickoff/search-tab-top-center.png -___________________________________________________________________ -Hinzugefügt: svn:mime-type - + application/octet-stream - -Kann nicht anzeigen: Dateityp ist als binär angegeben. -svn:mime-type = application/octet-stream - -Eigenschaftsänderungen: data/kickoff/search-tab-center.png -___________________________________________________________________ -Hinzugefügt: svn:mime-type - + application/octet-stream - -Kann nicht anzeigen: Dateityp ist als binär angegeben. -svn:mime-type = application/octet-stream - -Eigenschaftsänderungen: data/kickoff/cr64-action-suspend2ram.png -___________________________________________________________________ -Hinzugefügt: svn:mime-type - + application/octet-stream - -Kann nicht anzeigen: Dateityp ist als binär angegeben. -svn:mime-type = application/octet-stream - -Eigenschaftsänderungen: data/kickoff/cr48-action-suspend2ram.png -___________________________________________________________________ -Hinzugefügt: svn:mime-type - + application/octet-stream - -Kann nicht anzeigen: Dateityp ist als binär angegeben. -svn:mime-type = application/octet-stream - -Eigenschaftsänderungen: data/kickoff/search-gradient.png -___________________________________________________________________ -Hinzugefügt: svn:mime-type - + application/octet-stream - -Kann nicht anzeigen: Dateityp ist als binär angegeben. -svn:mime-type = application/octet-stream - -Eigenschaftsänderungen: data/kickoff/crsc-action-leave.svgz -___________________________________________________________________ -Hinzugefügt: svn:mime-type - + application/octet-stream - -Kann nicht anzeigen: Dateityp ist als binär angegeben. -svn:mime-type = application/octet-stream - -Eigenschaftsänderungen: data/kickoff/kmenu_vertical.mng -___________________________________________________________________ -Hinzugefügt: svn:mime-type - + application/octet-stream - -Kann nicht anzeigen: Dateityp ist als binär angegeben. -svn:mime-type = application/octet-stream - -Eigenschaftsänderungen: data/kickoff/cr64-action-suspend2disk.png -___________________________________________________________________ -Hinzugefügt: svn:mime-type - + application/octet-stream - -Kann nicht anzeigen: Dateityp ist als binär angegeben. -svn:mime-type = application/octet-stream - -Eigenschaftsänderungen: data/kickoff/cr48-action-suspend2disk.png -___________________________________________________________________ -Hinzugefügt: svn:mime-type - + application/octet-stream - -Kann nicht anzeigen: Dateityp ist als binär angegeben. -svn:mime-type = application/octet-stream - -Eigenschaftsänderungen: data/kickoff/resize_handle.png -___________________________________________________________________ -Hinzugefügt: svn:mime-type - + application/octet-stream - -Kann nicht anzeigen: Dateityp ist als binär angegeben. -svn:mime-type = application/octet-stream - -Eigenschaftsänderungen: data/kickoff/kmenu_basic.mng -___________________________________________________________________ -Hinzugefügt: svn:mime-type - + application/octet-stream - -Kann nicht anzeigen: Dateityp ist als binär angegeben. -svn:mime-type = application/octet-stream - -Eigenschaftsänderungen: data/kickoff/kmenu_flipped.mng -___________________________________________________________________ -Hinzugefügt: svn:mime-type - + application/octet-stream - -Kann nicht anzeigen: Dateityp ist als binär angegeben. -svn:mime-type = application/octet-stream - -Eigenschaftsänderungen: data/kickoff/search-running.mng -___________________________________________________________________ -Hinzugefügt: svn:mime-type - + application/octet-stream - -Kann nicht anzeigen: Dateityp ist als binär angegeben. -svn:mime-type = application/octet-stream - -Eigenschaftsänderungen: data/kickoff/search-tab-right.png -___________________________________________________________________ -Hinzugefügt: svn:mime-type - + application/octet-stream - -Kann nicht anzeigen: Dateityp ist als binär angegeben. -svn:mime-type = application/octet-stream - -Eigenschaftsänderungen: data/kickoff/search-tab-top-right.png -___________________________________________________________________ -Hinzugefügt: svn:mime-type - + application/octet-stream - ---- data/kickoff/Makefile.am (Revision 0) -+++ data/kickoff/Makefile.am (Revision 849791) -@@ -0,0 +1,14 @@ -+kicker_kmenuside_pics_data_DATA = resize_handle.png \ -+ main_corner_tl.png main_corner_tr.png search-gradient.png \ -+ menu_separator.png search-tab-center.png search-tab-left.png \ -+ search-tab-right.png search-tab-top-center.png search-tab-top-left.png \ -+ left_triangle.png right_triangle.png \ -+ kmenu_basic.mng kmenu_flipped.mng kmenu_vertical.mng \ -+ search-tab-top-right.png search-gradient-topdown.png search-running.mng -+ -+kicker_kmenuside_pics_datadir = $(kde_datadir)/kicker/pics -+ -+EXTRA_DIST = $(kicker_kmenuside_pics_data_DATA) -+ -+kickerdir = $(kde_datadir)/kicker/icons -+kicker_ICON = leave recently_used suspend2disk suspend2ram -Kann nicht anzeigen: Dateityp ist als binär angegeben. -svn:mime-type = application/octet-stream - -Eigenschaftsänderungen: data/kickoff/cr128-action-suspend2disk.png -___________________________________________________________________ -Hinzugefügt: svn:mime-type - + application/octet-stream - -Kann nicht anzeigen: Dateityp ist als binär angegeben. -svn:mime-type = application/octet-stream - -Eigenschaftsänderungen: data/kickoff/crsc-action-suspend2disk.svgz -___________________________________________________________________ -Hinzugefügt: svn:mime-type - + application/octet-stream - -Kann nicht anzeigen: Dateityp ist als binär angegeben. -svn:mime-type = application/octet-stream - -Eigenschaftsänderungen: data/kickoff/search-gradient-topdown.png -___________________________________________________________________ -Hinzugefügt: svn:mime-type - + application/octet-stream - -Kann nicht anzeigen: Dateityp ist als binär angegeben. -svn:mime-type = application/octet-stream - -Eigenschaftsänderungen: data/kickoff/main_corner_tl.png -___________________________________________________________________ -Hinzugefügt: svn:mime-type - + application/octet-stream - - -Eigenschaftsänderungen: data/kickoff -___________________________________________________________________ -Hinzugefügt: svn:ignore - + Makefile -Makefile.in - - diff --git a/opensuse/tdebase/kio-media-errorhandling.diff b/opensuse/tdebase/kio-media-errorhandling.diff deleted file mode 100644 index fd9420f3b..000000000 --- a/opensuse/tdebase/kio-media-errorhandling.diff +++ /dev/null @@ -1,18 +0,0 @@ -Index: kioslave/media/mediaimpl.cpp -=================================================================== ---- kioslave/media/mediaimpl.cpp.orig -+++ kioslave/media/mediaimpl.cpp -@@ -274,6 +274,13 @@ bool MediaImpl::ensureMediumMounted(Medi - return m_lastErrorCode==0; - } - -+ if (medium.id().isEmpty()) -+ { -+ m_lastErrorCode = KIO::ERR_COULD_NOT_MOUNT; -+ m_lastErrorMessage = i18n("No such medium."); -+ return false; -+ } -+ - return true; - } - diff --git a/opensuse/tdebase/klipperrc.diff b/opensuse/tdebase/klipperrc.diff deleted file mode 100644 index d18b4852f..000000000 --- a/opensuse/tdebase/klipperrc.diff +++ /dev/null @@ -1,22 +0,0 @@ -Index: klipper/klipperrc.desktop -=================================================================== ---- klipper/klipperrc.desktop.orig -+++ klipper/klipperrc.desktop -@@ -232,7 +232,7 @@ Number of commands=5 - Regexp=^https?://. - - [Action_1/Command_0] --Commandline=kfmclient exec %s -+Commandline=kfmclient openURL %s - Description=Open with &Konqueror - Description[af]=Maak oop met Konqueror - Description[ar]=Ø¥Ùتح بــ &Konqueror -@@ -1644,7 +1644,7 @@ Number of commands=5 - Regexp=^ftp://. - - [Action_6/Command_0] --Commandline=kfmclient exec %s -+Commandline=kfmclient openURL %s - Description=Open with &Konqueror - Description[af]=Maak oop met Konqueror - Description[ar]=Ø¥Ùتح بــ &Konqueror diff --git a/opensuse/tdebase/kmenu-search-fs20050503-fixed.diff b/opensuse/tdebase/kmenu-search-fs20050503-fixed.diff deleted file mode 100644 index aa36d6a22..000000000 --- a/opensuse/tdebase/kmenu-search-fs20050503-fixed.diff +++ /dev/null @@ -1,342 +0,0 @@ -Index: kicker/kicker/ui/k_mnu.cpp -=================================================================== ---- kicker/kicker/ui/k_mnu.cpp.orig -+++ kicker/kicker/ui/k_mnu.cpp -@@ -26,9 +26,13 @@ CONNECTION WITH THE SOFTWARE OR THE USE - #include - #include - -+#include - #include -+#include - #include - #include -+#include -+#include - - #include - #include -@@ -40,9 +44,11 @@ CONNECTION WITH THE SOFTWARE OR THE USE - #include - #include - #include -+#include - #include - #include - #include -+#include - #include - - #include "client_mnu.h" -@@ -58,9 +64,12 @@ CONNECTION WITH THE SOFTWARE OR THE USE - #include "quickbrowser_mnu.h" - #include "recentapps.h" - -+ - #include "k_mnu.h" - #include "k_mnu.moc" - -+const int PanelKMenu::searchLineID(23140 /*whatever*/); -+ - PanelKMenu::PanelKMenu() - : PanelServiceMenu(QString::null, QString::null, 0, "KMenu") - , bookmarkMenu(0) -@@ -165,6 +174,26 @@ void PanelKMenu::paletteChanged() - } - } - -+ -+/* A MenuHBox is supposed to be inserted into a menu. -+ * You can set a special widget in the hbox which will -+ * get the focus if the user moves up or down with the -+ * cursor keys -+ */ -+class MenuHBox : public QHBox { -+public: -+ MenuHBox(PanelKMenu* parent) : QHBox(parent) -+ { -+ } -+ -+ virtual void keyPressEvent(QKeyEvent *e) -+ { -+ -+ } -+private: -+ PanelKMenu *parent; -+}; -+ - void PanelKMenu::initialize() - { - // kdDebug(1210) << "PanelKMenu::initialize()" << endl; -@@ -191,13 +220,29 @@ void PanelKMenu::initialize() - // add services - PanelServiceMenu::initialize(); - -+ // Insert search field -+ QHBox* hbox = new QHBox( this ); -+ KToolBarButton *clearButton = new KToolBarButton( "locationbar_erase", 0, hbox ); -+ searchEdit = new KLineEdit(hbox); searchEdit->setClickMessage(" "+i18n("Press '/' to search...")); -+ hbox->setFocusPolicy(QWidget::StrongFocus); -+ hbox->setFocusProxy(searchEdit); -+ hbox->setSpacing( 3 ); -+ connect(clearButton, SIGNAL(clicked()), searchEdit, SLOT(clear())); -+ connect(this, SIGNAL(aboutToHide()), this, SLOT(slotClearSearch())); -+ connect(searchEdit, SIGNAL(textChanged(const QString&)), -+ this, SLOT( slotUpdateSearch( const QString&))); -+ insertItem(hbox, searchLineID, 0); -+ -+ //QToolTip::add(clearButton, i18n("Clear Search")); -+ //QToolTip::add(searchEdit, i18n("Enter the name of an application")); -+ - if (KickerSettings::showMenuTitles()) - { - int id; - id = insertItem(new PopupMenuTitle(i18n("All Applications"), font()), -1 /* id */, 0); -- setItemEnabled( id, false ); -+ setItemEnabled(id, false); - id = insertItem(new PopupMenuTitle(i18n("Actions"), font()), -1 /* id */, -1); -- setItemEnabled( id, false ); -+ setItemEnabled(id, false); - } - - // create recent menu section -@@ -737,3 +782,43 @@ void PanelKMenu::clearRecentMenuItems() - } - - -+void PanelKMenu::slotUpdateSearch(const QString& searchString) -+{ -+ kdDebug() << "Searching for " << searchString << endl; -+ setSearchString(searchString); -+} -+ -+void PanelKMenu::slotClearSearch() -+{ -+ if (searchEdit && searchEdit->text().isEmpty() == false) { -+ QTimer::singleShot(0, searchEdit, SLOT(clear())); -+ } -+} -+ -+void PanelKMenu::keyPressEvent(QKeyEvent* e) -+{ -+ // We move the focus to the search field if the -+ // user presses '/'. This is the same shortcut as -+ // konqueror is using, and afaik it's hardcoded both -+ // here and there. This sucks badly for many non-us -+ // keyboard layouts, but for the sake of consistency -+ // we follow konqueror. -+ if (!searchEdit) return KPanelMenu::keyPressEvent(e); -+ -+ if (e->key() == Qt::Key_Slash && !searchEdit->hasFocus()) { -+ if (indexOf(searchLineID) >=0 ) { -+ setActiveItem(indexOf(searchLineID)); -+ } -+ } -+ else if (e->key() == Qt::Key_Escape && searchEdit->text().isEmpty() == false) { -+ searchEdit->clear(); -+ } -+ else if (e->key() == Qt::Key_Delete && !searchEdit->hasFocus() && -+ searchEdit->text().isEmpty() == false) -+ { -+ searchEdit->clear(); -+ } -+ else { -+ KPanelMenu::keyPressEvent(e); -+ } -+} -Index: kicker/kicker/ui/k_mnu.h -=================================================================== ---- kicker/kicker/ui/k_mnu.h.orig -+++ kicker/kicker/ui/k_mnu.h -@@ -73,6 +73,8 @@ protected slots: - void slotSaveSession(); - void slotRunCommand(); - void slotEditUserContact(); -+ void slotUpdateSearch(const QString &searchtext); -+ void slotClearSearch(); - void paletteChanged(); - virtual void configChanged(); - void updateRecent(); -@@ -89,6 +91,8 @@ protected: - void doNewSession(bool lock); - void createRecentMenuItems(); - virtual void clearSubmenus(); -+ void filterMenu(PanelServiceMenu* menu, const QString &searchString); -+ void keyPressEvent(QKeyEvent* e); - - private: - QPopupMenu *sessionsMenu; -@@ -101,6 +105,8 @@ private: - KActionCollection *actionCollection; - KBookmarkOwner *bookmarkOwner; - PopupMenuList dynamicSubMenus; -+ KLineEdit *searchEdit; -+ static const int searchLineID; - }; - - #endif -Index: kicker/kicker/ui/service_mnu.cpp -=================================================================== ---- kicker/kicker/ui/service_mnu.cpp.orig -+++ kicker/kicker/ui/service_mnu.cpp -@@ -26,6 +26,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE - #include - #include - #include -+#include - - #include - #include -@@ -100,6 +101,8 @@ void PanelServiceMenu::initialize() - clear(); - - clearSubmenus(); -+ searchSubMenuIDs.clear(); -+ searchMenuItems.clear(); - doInitialize(); - } - -@@ -296,6 +299,10 @@ void PanelServiceMenu::fillMenu(KService - - int newId = insertItem(iconset, groupCaption, m, id++); - entryMap_.insert(newId, static_cast(g)); -+ // This submenu will be searched when applying a search string -+ searchSubMenuIDs[m] = newId; -+ // Also search the submenu name itself -+ searchMenuItems.insert(newId); - // We have to delete the sub menu our selves! (See Qt docs.) - subMenus.append(m); - } -@@ -308,6 +315,7 @@ void PanelServiceMenu::fillMenu(KService - } - - KService::Ptr s(static_cast(e)); -+ searchMenuItems.insert(id); - insertMenuItem(s, id++, -1, &suppressGenericNames, QString::null, specialTitle[s->name()], categoryIcon[s->name()] ); - } - else if (e->isType(KST_KServiceSeparator)) -@@ -900,6 +908,8 @@ void PanelServiceMenu::slotClear() - delete *it; - } - subMenus.clear(); -+ searchSubMenuIDs.clear(); -+ searchMenuItems.clear(); - } - - void PanelServiceMenu::selectFirstItem() -@@ -924,3 +934,72 @@ void PanelServiceMenu::updateRecentlyUse - RecentlyLaunchedApps::the().m_bNeedToUpdate = true; - } - -+void PanelServiceMenu::setSearchString(const QString &searchString) -+{ -+ // We must initialize the menu, because it might have not been opened before -+ initialize(); -+ -+ bool foundSomething = false; -+ std::set nonemptyMenus; -+ std::set::const_iterator menuItemIt(searchMenuItems.begin()); -+ // Apply the filter on this menu -+ for (; menuItemIt != searchMenuItems.end(); ++menuItemIt) { -+ int id = *menuItemIt; -+ KService* s = dynamic_cast< KService* >( static_cast< KSycocaEntry* >( entryMap_[ id ])); -+ QString menuText = text(id); -+ if (menuText.contains(searchString, false) > 0 -+ || ( s != NULL && ( s->name().contains(searchString, false) > 0 -+ || s->exec().contains(searchString, false) > 0 -+ || s->comment().contains(searchString, false) > 0 -+ || s->genericName().contains(searchString, false) > 0 -+ || s->exec().contains(searchString, false) > 0 ) -+ )) { -+ setItemEnabled(id, true); -+ foundSomething = true; -+ nonemptyMenus.insert(id); -+ } -+ else { -+ setItemEnabled(id, false); -+ } -+ } -+ // Apply the filter on this menu -+ /*for (int i=count()-1; i>=0; --i) { -+ int id = idAt(i); -+ QString menuText = text(id); -+ if (menuText.contains(searchString, false) > 0) { -+ setItemEnabled(id, true); -+ foundSomething = true; -+ nonemptyMenus.insert(id); -+ } -+ else { -+ setItemEnabled(id, false); -+ } -+ }*/ -+ -+ PanelServiceMenuMap::iterator it(searchSubMenuIDs.begin()); -+ // Apply the search filter on submenus -+ for (; it != searchSubMenuIDs.end(); ++it) { -+ it.key()->setSearchString(searchString); -+ if (nonemptyMenus.find(it.data()) != nonemptyMenus.end()) { -+ // if the current menu is a match already, we don't -+ // block access to the contained items -+ setItemEnabled(it.data(), true); -+ it.key()->setSearchString(QString()); -+ foundSomething = true; -+ } -+ else if (it.key()->hasSearchResults()) { -+ setItemEnabled(it.data(), true); -+ foundSomething = true; -+ } -+ else { -+ setItemEnabled(it.data(), false); -+ } -+ } -+ -+ hasSearchResults_ = foundSomething; -+} -+ -+bool PanelServiceMenu::hasSearchResults() -+{ -+ return hasSearchResults_; -+} -Index: kicker/kicker/ui/service_mnu.h -=================================================================== ---- kicker/kicker/ui/service_mnu.h.orig -+++ kicker/kicker/ui/service_mnu.h -@@ -26,6 +26,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE - - #include - #include -+#include - - #include - #include -@@ -41,8 +42,11 @@ CONNECTION WITH THE SOFTWARE OR THE USE - * @author Rik Hemsley - */ - -+class KLineEdit; - typedef QMap EntryMap; - typedef QValueVector PopupMenuList; -+class PanelServiceMenu; -+typedef QMap PanelServiceMenuMap; - - class KDE_EXPORT PanelServiceMenu : public KPanelMenu - { -@@ -63,6 +67,8 @@ public: - virtual void showMenu(); - bool highlightMenuItem( const QString &menuId ); - void selectFirstItem(); -+ void setSearchString(const QString& searchString); -+ bool hasSearchResults(); - - private: - void fillMenu( KServiceGroup::Ptr &_root, KServiceGroup::List &_list, -@@ -115,6 +121,9 @@ protected: - bool addmenumode_; - QPoint startPos_; - PopupMenuList subMenus; -+ PanelServiceMenuMap searchSubMenuIDs; -+ bool hasSearchResults_; -+ std::set searchMenuItems; - - private slots: - void slotContextMenu(int); diff --git a/opensuse/tdebase/kmenu-search-slowdown-fix.diff b/opensuse/tdebase/kmenu-search-slowdown-fix.diff deleted file mode 100644 index 83c771db2..000000000 --- a/opensuse/tdebase/kmenu-search-slowdown-fix.diff +++ /dev/null @@ -1,129 +0,0 @@ -Index: kicker/kicker/ui/k_mnu.cpp -=================================================================== ---- kicker/kicker/ui/k_mnu.cpp.orig -+++ kicker/kicker/ui/k_mnu.cpp -@@ -771,6 +771,7 @@ void PanelKMenu::updateRecent() - insertSeparator(RecentlyLaunchedApps::the().m_nNumMenuItems); - } - } -+ iconsLoaded_ = false; - } - - void PanelKMenu::clearRecentMenuItems() -Index: kicker/kicker/ui/service_mnu.cpp -=================================================================== ---- kicker/kicker/ui/service_mnu.cpp.orig -+++ kicker/kicker/ui/service_mnu.cpp -@@ -63,13 +63,20 @@ PanelServiceMenu::PanelServiceMenu(const - insertInlineHeader_( insertInlineHeader ), - clearOnClose_(false), - addmenumode_(addmenumode), -- popupMenu_(0) -+ popupMenu_(0), -+ iconsLoaded_(false) - { - excludeNoDisplay_=true; - - connect(KSycoca::self(), SIGNAL(databaseChanged()), - SLOT(slotClearOnClose())); - connect(this, SIGNAL(aboutToHide()), this, SLOT(slotClose())); -+ -+ const int iconSize = KickerSettings::menuEntryHeight(); -+ QPixmap pix(iconSize,iconSize); -+ QBitmap map(iconSize,iconSize,true); -+ pix.setMask(map); -+ emptyiconset = QIconSet(pix,pix); - } - - PanelServiceMenu::~PanelServiceMenu() -@@ -103,6 +110,7 @@ void PanelServiceMenu::initialize() - clearSubmenus(); - searchSubMenuIDs.clear(); - searchMenuItems.clear(); -+ iconsLoaded_ = false; - doInitialize(); - } - -@@ -289,15 +297,13 @@ void PanelServiceMenu::fillMenu(KService - newSubMenu(g->name(), g->relPath(), this, g->name().utf8(), inlineHeaderName); - m->setCaption(groupCaption); - -- QIconSet iconset = KickerLib::menuIconSet(g->icon()); -- - if (separatorNeeded) - { - insertSeparator(); - separatorNeeded = false; - } - -- int newId = insertItem(iconset, groupCaption, m, id++); -+ int newId = insertItem(emptyiconset,groupCaption, m, id++); - entryMap_.insert(newId, static_cast(g)); - // This submenu will be searched when applying a search string - searchSubMenuIDs[m] = newId; -@@ -392,6 +398,12 @@ void PanelServiceMenu::doInitialize() - - void PanelServiceMenu::configChanged() - { -+ const int iconSize = KickerSettings::menuEntryHeight(); -+ QPixmap pix(iconSize,iconSize); -+ QBitmap map(iconSize,iconSize,true); -+ pix.setMask(map); -+ emptyiconset = QIconSet(pix,pix); -+ - deinitialize(); - } - -@@ -456,9 +468,9 @@ void PanelServiceMenu::insertMenuItem(KS - - int newId; - if ( label.isEmpty() ) -- newId = insertItem(KickerLib::menuIconSet(s->icon()), serviceName, nId, nIndex); -+ newId = insertItem(emptyiconset, serviceName, nId, nIndex); - else -- newId = insertItem(KickerLib::menuIconSet(s->icon()), label, nId, nIndex); -+ newId = insertItem(emptyiconset, label, nId, nIndex); - entryMap_.insert(newId, static_cast(s)); - } - -@@ -1003,3 +1015,23 @@ bool PanelServiceMenu::hasSearchResults( - { - return hasSearchResults_; - } -+ -+void PanelServiceMenu::slotAboutToShow() -+{ -+ KPanelMenu::slotAboutToShow(); -+ -+ if (!iconsLoaded_) { -+ EntryMap::Iterator mapIt; -+ for ( mapIt = entryMap_.begin(); mapIt != entryMap_.end(); ++mapIt ) { -+ KService *s = dynamic_cast(static_cast(mapIt.data())); -+ if (s) -+ changeItem(mapIt.key(),KickerLib::menuIconSet(s->icon()),text(mapIt.key())); -+ else { -+ KServiceGroup *g = dynamic_cast(static_cast(mapIt.data())); -+ if (g) -+ changeItem(mapIt.key(),KickerLib::menuIconSet(g->icon()),text(mapIt.key())); -+ } -+ } -+ iconsLoaded_ = true; -+ } -+} -Index: kicker/kicker/ui/service_mnu.h -=================================================================== ---- kicker/kicker/ui/service_mnu.h.orig -+++ kicker/kicker/ui/service_mnu.h -@@ -124,9 +124,12 @@ protected: - PanelServiceMenuMap searchSubMenuIDs; - bool hasSearchResults_; - std::set searchMenuItems; -+ QIconSet emptyiconset; -+ bool iconsLoaded_; - - private slots: - void slotContextMenu(int); -+ void slotAboutToShow(); - - private: - enum ContextMenuEntry { AddItemToPanel, EditItem, AddMenuToPanel, EditMenu, diff --git a/opensuse/tdebase/knetattach-show.diff b/opensuse/tdebase/knetattach-show.diff deleted file mode 100644 index 0f24370fd..000000000 --- a/opensuse/tdebase/knetattach-show.diff +++ /dev/null @@ -1,7 +0,0 @@ ---- knetattach/knetattach.desktop 2008/12/02 13:49:00 1.1 -+++ knetattach/knetattach.desktop 2008/12/02 14:06:16 -@@ -80,3 +80,4 @@ - X-KDE-StartupNotify=true - Categories=Qt;KDE;Network; - DocPath=knetattach/index.html -+OnlyShowIn=KDE; diff --git a/opensuse/tdebase/kompmgr_use_defaults.diff b/opensuse/tdebase/kompmgr_use_defaults.diff deleted file mode 100644 index 00863fc66..000000000 --- a/opensuse/tdebase/kompmgr_use_defaults.diff +++ /dev/null @@ -1,34 +0,0 @@ -Index: kwin/kcmkwin/kwinoptions/windows.cpp -=================================================================== ---- kwin/kcmkwin/kwinoptions/windows.cpp.orig -+++ kwin/kcmkwin/kwinoptions/windows.cpp -@@ -46,6 +46,7 @@ - #include - #include - -+#include - #include - #include - #include -@@ -1524,6 +1525,8 @@ void KTranslucencyConfig::load( void ) - movingWindowOpacity->setEnabled(movingWindowTransparency->isChecked()); - dockWindowOpacity->setEnabled(dockWindowTransparency->isChecked()); - -+ if( !QFile::exists( QDir::homeDirPath() + "/.xcompmgrrc" )) -+ system( "/bin/cp /etc/opt/kde3/share/config/xcompmgrrc $HOME/.xcompmgrrc" ); - KConfig conf_(QDir::homeDirPath() + "/.xcompmgrrc"); - conf_.setGroup("xcompmgr"); - -Index: kwin/kompmgr/kompmgr.c -=================================================================== ---- kwin/kompmgr/kompmgr.c.orig -+++ kwin/kompmgr/kompmgr.c -@@ -2431,6 +2431,8 @@ loadConfig(char *filename){ - - strcat(filename, home); - strcat(filename, configfile); -+ if( access( filename, R_OK ) != 0 ) -+ system( "/bin/cp /etc/opt/kde3/share/config/xcompmgrrc $HOME/.xcompmgrrc" ); - } - - printf("trying '%s' as configfile\n\n", filename); diff --git a/opensuse/tdebase/konq-combo-editor.diff b/opensuse/tdebase/konq-combo-editor.diff deleted file mode 100644 index 8a205fb9f..000000000 --- a/opensuse/tdebase/konq-combo-editor.diff +++ /dev/null @@ -1,42 +0,0 @@ -Index: konqueror/konq_combo.h -=================================================================== ---- konqueror/konq_combo.h.orig -+++ konqueror/konq_combo.h -@@ -87,6 +87,7 @@ signals: - - private slots: - void slotCleared(); -+ void slotRemoved( const QString& item ); - void slotSetIcon( int index ); - void slotActivated( const QString& text ); - -Index: konqueror/konq_combo.cc -=================================================================== ---- konqueror/konq_combo.cc.orig -+++ konqueror/konq_combo.cc -@@ -128,6 +128,9 @@ KonqCombo::KonqCombo( QWidget *parent, c - connect( this, SIGNAL(activated( const QString& )), - SLOT(slotActivated( const QString& )) ); - -+ setHistoryEditorEnabled( true ); -+ connect( this, SIGNAL(removed( const QString&) ), SLOT(slotRemoved( const QString& )) ); -+ - if ( !kapp->dcopClient()->isAttached() ) - kapp->dcopClient()->attach(); - } -@@ -506,6 +509,15 @@ void KonqCombo::slotCleared() - kapp->dcopClient()->send( "konqueror*", "KonquerorIface", "comboCleared(QCString)", data); - } - -+void KonqCombo::slotRemoved( const QString& item ) -+{ -+ QByteArray data; -+ QDataStream s( data, IO_WriteOnly ); -+ s << item << kapp->dcopClient()->defaultObject(); -+ kapp->dcopClient()->send( "konqueror*", "KonquerorIface", -+ "removeFromCombo(QString,QCString)", data); -+} -+ - void KonqCombo::removeURL( const QString& url ) - { - setUpdatesEnabled( false ); diff --git a/opensuse/tdebase/konsole-schema-update.diff b/opensuse/tdebase/konsole-schema-update.diff deleted file mode 100644 index dbba940dd..000000000 --- a/opensuse/tdebase/konsole-schema-update.diff +++ /dev/null @@ -1,33 +0,0 @@ -Index: konsole/other/BlackOnWhite.schema -=================================================================== ---- konsole/other/BlackOnWhite.schema.orig -+++ konsole/other/BlackOnWhite.schema -@@ -18,11 +18,11 @@ color 1 255 255 255 1 0 # regular b - - color 2 0 0 0 0 0 # regular color 0 Black - color 3 178 24 24 0 0 # regular color 1 Red --color 4 24 178 24 0 0 # regular color 2 Green -+color 4 0 128 0 0 0 # regular color 2 Green - color 5 178 104 24 0 0 # regular color 3 Yellow - color 6 24 24 178 0 0 # regular color 4 Blue --color 7 178 24 178 0 0 # regular color 5 Magenta --color 8 24 178 178 0 0 # regular color 6 Cyan -+color 7 128 0 128 0 0 # regular color 5 Magenta -+color 8 16 128 128 0 0 # regular color 6 Cyan - color 9 178 178 178 0 0 # regular color 7 White - - # intensive colors -@@ -34,9 +34,9 @@ color 11 255 255 255 1 0 # intensive b - - color 12 104 104 104 0 0 # intensive color 0 - color 13 255 84 84 0 0 # intensive color 1 --color 14 84 255 84 0 0 # intensive color 2 --color 15 255 255 84 0 0 # intensive color 3 -+color 14 0 178 0 0 0 # intensive color 2 -+color 15 192 193 64 0 0 # intensive color 3 - color 16 84 84 255 0 0 # intensive color 4 --color 17 255 84 255 0 0 # intensive color 5 --color 18 84 255 255 0 0 # intensive color 6 -+color 17 178 0 178 0 0 # intensive color 5 -+color 18 55 178 178 0 0 # intensive color 6 - color 19 255 255 255 0 0 # intensive color 7 diff --git a/opensuse/tdebase/konsole_keytab.diff b/opensuse/tdebase/konsole_keytab.diff deleted file mode 100644 index 18698e2b2..000000000 --- a/opensuse/tdebase/konsole_keytab.diff +++ /dev/null @@ -1,17 +0,0 @@ -Index: konsole/other/x11r5.keytab -=================================================================== ---- konsole/other/x11r5.keytab.orig -+++ konsole/other/x11r5.keytab -@@ -32,10 +32,10 @@ key Left -Shift : "\EOD" - - key Enter : "\r" - --key Home : "\E[1~" -+key Home : "\E[H" - key Insert-Shift : "\E[2~" - key Delete : "\E[3~" --key End : "\E[4~" -+key End : "\E[F" - key Prior -Shift : "\E[5~" - key Next -Shift : "\E[6~" - diff --git a/opensuse/tdebase/kpamgreeter.diff b/opensuse/tdebase/kpamgreeter.diff deleted file mode 100644 index ff8241623..000000000 --- a/opensuse/tdebase/kpamgreeter.diff +++ /dev/null @@ -1,852 +0,0 @@ -Index: kdm/backend/client.c -=================================================================== ---- kdm/backend/client.c.orig -+++ kdm/backend/client.c -@@ -547,6 +547,9 @@ Verify( GConvFunc gconv, int rootok ) - } else - psrv = PAMService; - pdata.usecur = TRUE; -+ } else if (!strcmp( curtype, "pam" )) { -+ psrv = PAMService; -+ pdata.usecur = FALSE; - } else { - sprintf( psrvb, "%.31s-%.31s", PAMService, curtype ); - psrv = psrvb; -@@ -616,7 +619,7 @@ Verify( GConvFunc gconv, int rootok ) - free( msg ); - V_RET_FAIL( 0 ); - } -- } else if (!strcmp( curtype, "generic" )) { -+ } else if (!strcmp( curtype, "generic" ) || !strcmp(curtype, "pam")) { - if (!gconv( GCONV_USER, 0 )) - return 0; - for (curret = 0;;) { -Index: kdm/kfrontend/themer/kdmlabel.h -=================================================================== ---- kdm/kfrontend/themer/kdmlabel.h.orig -+++ kdm/kfrontend/themer/kdmlabel.h -@@ -50,6 +50,7 @@ protected: - // handle switching between normal / active / prelight configurations - virtual void statusChanged(); - -+public: - struct LabelStruct { - QString text; - bool isTimer; -Index: kdmlib/kgreet_pam.cpp -=================================================================== ---- /dev/null -+++ kdmlib/kgreet_pam.cpp -@@ -0,0 +1,668 @@ -+/* -+ -+Conversation widget for kdm greeter -+ -+Copyright (C) 2008 Dirk Mueller -+ -+based on classic kdm greeter: -+ -+ Copyright (C) 1997, 1998, 2000 Steffen Hansen -+ Copyright (C) 2000-2003 Oswald Buddenhagen -+ -+ -+This program is free software; you can redistribute it and/or modify -+it under the terms of the GNU General Public License as published by -+the Free Software Foundation; either version 2 of the License, or -+(at your option) any later version. -+ -+This program is distributed in the hope that it will be useful, -+but WITHOUT ANY WARRANTY; without even the implied warranty of -+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+GNU General Public License for more details. -+ -+You should have received a copy of the GNU General Public License -+along with this program; if not, write to the Free Software -+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -+ -+*/ -+ -+#include "kgreet_pam.h" -+#include "themer/kdmthemer.h" -+#include "themer/kdmlabel.h" -+ -+#include -+#include -+#include -+#include -+ -+#include -+#include -+#include -+#include -+ -+#include -+#include -+#include -+#include -+ -+//#define PAM_GREETER_DEBUG -+ -+class KDMPasswordEdit : public KPasswordEdit { -+public: -+ KDMPasswordEdit( QWidget *parent ) : KPasswordEdit( parent, 0 ) {} -+ KDMPasswordEdit( KPasswordEdit::EchoModes echoMode, QWidget *parent ) : KPasswordEdit( echoMode, parent, 0 ) {} -+protected: -+ virtual void contextMenuEvent( QContextMenuEvent * ) {} -+}; -+ -+static FILE* log; -+static void debug(const char* fmt, ...) -+{ -+ va_list lst; -+ va_start(lst, fmt); -+ -+#ifdef PAM_GREETER_DEBUG -+#if 0 -+ vfprintf(log, fmt, lst); -+ fflush(log); -+#else -+ char buf[6000]; -+ sprintf(buf, "*** %s\n", fmt); -+ vsyslog(LOG_WARNING, buf, lst); -+#endif -+#endif -+ va_end(lst); -+} -+ -+static KPasswordEdit::EchoModes echoMode; -+ -+KPamGreeter::KPamGreeter( KGreeterPluginHandler *_handler, -+ KdmThemer *themer, -+ QWidget *parent, QWidget *pred, -+ const QString &_fixedEntity, -+ Function _func, Context _ctx ) : -+ QObject(), -+ KGreeterPlugin( _handler ), -+ fixedUser( _fixedEntity ), -+ func( _func ), -+ ctx( _ctx ), -+ exp( -1 ), -+ pExp( -1 ), -+ running( false ) -+{ -+ ctx = Login; -+ -+ debug("KPamGreeter constructed\n"); -+ -+ m_parentWidget = parent; -+ -+ KdmItem *user_entry = 0, *pw_entry = 0; -+ int line = 0; -+ -+ layoutItem = 0; -+ -+ if (themer && -+ (!(user_entry = themer->findNode( "user-entry" )) || -+ !(pw_entry = themer->findNode( "pw-entry" )))) -+ themer = 0; -+ -+ m_themer = themer; -+ -+ if (!themer) -+ layoutItem = new QGridLayout( 0, 0, 10 ); -+ -+ loginLabel = 0; -+ authLabel.clear(); -+ authEdit.clear(); -+ loginLabel = 0; -+ loginEdit = 0; -+ if (ctx == ExUnlock || ctx == ExChangeTok) -+ fixedUser = KUser().loginName(); -+ if (func != ChAuthTok) { -+ debug("func != ChAuthTok\n"); -+ debug("fixedUser: *%s*\n", fixedUser.latin1()); -+ -+ if (fixedUser.isEmpty()) { -+ loginEdit = new KLineEdit( parent ); -+ loginEdit->setContextMenuEnabled( false ); -+ connect( loginEdit, SIGNAL(lostFocus()), SLOT(slotLoginLostFocus()) ); -+ connect( loginEdit, SIGNAL(lostFocus()), SLOT(slotActivity()) ); -+ connect( loginEdit, SIGNAL(textChanged( const QString & )), SLOT(slotActivity()) ); -+ connect( loginEdit, SIGNAL(selectionChanged()), SLOT(slotActivity()) ); -+ if (pred) { -+ parent->setTabOrder( pred, loginEdit ); -+ pred = loginEdit; -+ } -+ if (!getLayoutItem()) { -+ loginEdit->adjustSize(); -+ user_entry->setWidget( loginEdit ); -+ } else { -+ loginLabel = new QLabel( loginEdit, i18n("Username:"), parent ); -+ getLayoutItem()->addWidget( loginLabel, line, 0 ); -+ getLayoutItem()->addWidget( loginEdit, line++, 1 ); -+ } -+ } else if (ctx != Login && ctx != Shutdown && getLayoutItem()) { -+ loginLabel = new QLabel( i18n("Username:"), parent ); -+ getLayoutItem()->addWidget( loginLabel, line, 0 ); -+ getLayoutItem()->addWidget( new QLabel( fixedUser, parent ), line++, 1 ); -+ } -+#if 0 -+ if (echoMode == -1) -+ passwdEdit = new KDMPasswordEdit( parent ); -+ else -+ passwdEdit = new KDMPasswordEdit( echoMode, -+ parent ); -+ connect( passwdEdit, SIGNAL(textChanged( const QString & )), -+ SLOT(slotActivity()) ); -+ connect( passwdEdit, SIGNAL(lostFocus()), SLOT(slotActivity()) ); -+ if (pred) { -+ parent->setTabOrder( pred, passwdEdit ); -+ pred = passwdEdit; -+ } -+ if (!getLayoutItem()) { -+ passwdEdit->adjustSize(); -+ pw_entry->setWidget( passwdEdit ); -+ } else { -+ passwdLabel = new QLabel( passwdEdit, -+ func == Authenticate ? -+ i18n("hello &Password:") : -+ i18n("Current &password:"), -+ parent ); -+ getLayoutItem()->addWidget( passwdLabel, line, 0 ); -+ getLayoutItem()->addWidget( passwdEdit, line++, 1 ); -+ } -+#endif -+ if (loginEdit) -+ loginEdit->setFocus(); -+ } -+ if (func != Authenticate) { -+ if (echoMode == -1) { -+ authEdit << new KDMPasswordEdit( echoMode, parent ); -+ authEdit << new KDMPasswordEdit( echoMode, parent ); -+ } else { -+ authEdit << new KDMPasswordEdit( parent ); -+ authEdit << new KDMPasswordEdit( parent ); -+ } -+ authLabel << new QLabel( authEdit[0], i18n("&New password:"), parent ); -+ authLabel << new QLabel( authEdit[1], i18n("Con&firm password:"), parent ); -+ if (pred) { -+ parent->setTabOrder( pred, authEdit[0] ); -+ parent->setTabOrder( authEdit[0], authEdit[1] ); -+ } -+ if (getLayoutItem()) { -+ getLayoutItem()->addWidget( authLabel[0], line, 0 ); -+ getLayoutItem()->addWidget( authEdit[0], line++, 1 ); -+ getLayoutItem()->addWidget( authLabel[1], line, 0 ); -+ getLayoutItem()->addWidget( authEdit[1], line, 1 ); -+ } -+ if (authEdit.size() >= 2) -+ authEdit[1]->setFocus(); -+ } -+} -+ -+// virtual -+KPamGreeter::~KPamGreeter() -+{ -+ debug("KPamGreeter::~KPamGreeter"); -+ abort(); -+ if (!layoutItem) { -+ delete loginEdit; -+ return; -+ } -+ QLayoutIterator it = static_cast(layoutItem)->iterator(); -+ for (QLayoutItem *itm = it.current(); itm; itm = ++it) -+ delete itm->widget(); -+ delete layoutItem; -+ debug("destructor finished, good bye"); -+} -+ -+void // virtual -+KPamGreeter::loadUsers( const QStringList &users ) -+{ -+ KCompletion *userNamesCompletion = new KCompletion; -+ userNamesCompletion->setItems( users ); -+ loginEdit->setCompletionObject( userNamesCompletion ); -+ loginEdit->setAutoDeleteCompletionObject( true ); -+ loginEdit->setCompletionMode( KGlobalSettings::CompletionAuto ); -+} -+ -+void // virtual -+KPamGreeter::presetEntity( const QString &entity, int field ) -+{ -+ debug("presetEntity(%s,%d) called!\n", entity.latin1(), field); -+ loginEdit->setText( entity ); -+ if (field == 1 && authEdit.size() >= 1) -+ authEdit[0]->setFocus(); -+ else { -+ loginEdit->setFocus(); -+ loginEdit->selectAll(); -+ if (field == -1 && authEdit.size() >= 1) { -+ authEdit[0]->setText( " " ); -+ authEdit[0]->setEnabled( false ); -+ authTok = false; -+ } -+ } -+ curUser = entity; -+} -+ -+QString // virtual -+KPamGreeter::getEntity() const -+{ -+ return fixedUser.isEmpty() ? loginEdit->text() : fixedUser; -+} -+ -+void // virtual -+KPamGreeter::setUser( const QString &user ) -+{ -+ // assert( fixedUser.isEmpty() ); -+ curUser = user; -+ loginEdit->setText( user ); -+ if (authEdit.size() >= 1) { -+ authEdit[0]->setFocus(); -+ authEdit[0]->selectAll(); -+ } -+} -+ -+void // virtual -+KPamGreeter::setEnabled(bool enable) -+{ -+ // assert( !passwd1Label ); -+ // assert( func == Authenticate && ctx == Shutdown ); -+// if (loginLabel) -+// loginLabel->setEnabled( enable ); -+ authEdit[0]->setEnabled( enable ); -+ setActive( enable ); -+ if (enable) -+ authEdit[0]->setFocus(); -+ } -+ -+void // private -+KPamGreeter::returnData() -+{ -+ debug("*************** returnData called with exp %d\n", exp); -+ -+ -+ switch (exp) { -+ case 0: -+ handler->gplugReturnText( (loginEdit ? loginEdit->text() : -+ fixedUser).local8Bit(), -+ KGreeterPluginHandler::IsUser ); -+ break; -+ case 1: -+ handler->gplugReturnText( authEdit[0]->password(), -+ KGreeterPluginHandler::IsPassword | -+ KGreeterPluginHandler::IsSecret ); -+ break; -+ case 2: -+ handler->gplugReturnText( authEdit[1]->password(), -+ KGreeterPluginHandler::IsSecret ); -+ break; -+ default: // case 3: -+ handler->gplugReturnText( authEdit[2]->password(), -+ KGreeterPluginHandler::IsNewPassword | -+ KGreeterPluginHandler::IsSecret ); -+ break; -+ } -+} -+ -+bool // virtual -+KPamGreeter::textMessage( const char *text, bool err ) -+{ -+ debug(" ************** textMessage(%s, %d)\n", text, err); -+ -+ if (!authEdit.size()) -+ return false; -+ -+ if (getLayoutItem()) { -+ QLabel* label = new QLabel(QString::fromUtf8(text), m_parentWidget); -+ getLayoutItem()->addWidget(label, state+1, 0, 0); -+ } -+ -+ return true; -+} -+ -+void // virtual -+KPamGreeter::textPrompt( const char *prompt, bool echo, bool nonBlocking ) -+{ -+ debug("textPrompt called with prompt %s echo %d nonBlocking %d", prompt, echo, nonBlocking); -+ debug("state is %d, authEdit.size is %d\n", state, authEdit.size()); -+ -+ if (state == 0 && echo) { -+ if (loginLabel) -+ loginLabel->setText(QString::fromUtf8(prompt)); -+ else if (m_themer) { -+ KdmLabel *kdmlabel = static_cast(m_themer->findNode("user-label")); -+ if (kdmlabel) { -+ //userLabel->setText(QString::fromUtf8(prompt)); -+ kdmlabel->label.text = QString::fromUtf8(prompt); -+ QTimer::singleShot(0, kdmlabel, SLOT(update())); -+ } -+ } -+ } -+ else if (state >= authEdit.size()) { -+ if (getLayoutItem()) { -+ QLabel* label = new QLabel(QString::fromUtf8(prompt), m_parentWidget); -+ getLayoutItem()->addWidget(label, state+1, 0, 0); -+ debug("added label widget to layout"); -+ } -+ else if (m_themer) { -+ debug("themer found!"); -+ KdmItem *pw_label = 0; -+ -+ KdmLabel *kdmlabel = static_cast(m_themer->findNode("pw-label")); -+ if (kdmlabel) { -+ //userLabel->setText(QString::fromUtf8(prompt)); -+ QString str = QString::fromUtf8(prompt); -+ kdmlabel->label.text = str; -+ QTimer::singleShot(0, kdmlabel, SLOT(update())); -+ } -+ } -+ -+ KDMPasswordEdit* passwdEdit; -+ -+ if (echoMode == -1) -+ passwdEdit = new KDMPasswordEdit( m_parentWidget ); -+ else -+ passwdEdit = new KDMPasswordEdit( echoMode, m_parentWidget); -+ connect( passwdEdit, SIGNAL(textChanged( const QString & )), -+ SLOT(slotActivity()) ); -+ connect( passwdEdit, SIGNAL(lostFocus()), SLOT(slotActivity()) ); -+ authEdit << passwdEdit; -+ -+#if 1 -+ for(QValueList::iterator it = authEdit.begin(); -+ it != authEdit.end(); -+ ++it) { -+ if ((*it)->isEnabled() && (*it)->text().isEmpty()) { -+ (*it)->setFocus(); -+ break; -+ } -+ } -+#endif -+ if (getLayoutItem()) -+ getLayoutItem()->addWidget(passwdEdit, state+1, 1, 0); -+ -+ if (m_themer) { -+ debug("themer found!"); -+ KdmItem *pw_entry = 0; -+ -+ pw_entry = m_themer->findNode("pw-entry"); -+ -+ if (pw_entry && passwdEdit) -+ pw_entry->setWidget(passwdEdit); -+ -+ if (0) { -+ //userLabel->setText(QString::fromUtf8(prompt)); -+ //kdmlabel->label.text = QString::fromUtf8(prompt); -+ //QTimer::singleShot(0, kdmlabel, SLOT(update())); -+ } -+ } -+ else -+ debug("no themer found!"); -+ } -+ ++state; -+ pExp = exp; -+ -+ exp = authEdit.size(); -+ debug("state %d exp: %d, has %d\n", state, exp, has); -+ -+ if (has >= exp || nonBlocking) -+ returnData(); -+} -+ -+bool // virtual -+KPamGreeter::binaryPrompt( const char *, bool ) -+{ -+ // this simply cannot happen ... :} -+ return true; -+} -+ -+void // virtual -+KPamGreeter::start() -+{ -+ debug("******* start() called\n"); -+ -+ while(authEdit.begin() != authEdit.end()) { -+ KPasswordEdit* item = *authEdit.remove(authEdit.begin()); -+ delete item; -+ } -+ -+ while(authLabel.begin() != authLabel.end()) { -+ QLabel* item = *authLabel.remove(authLabel.begin()); -+ delete item; -+ } -+ -+ authTok = !(authEdit.size() >= 2 && authEdit[1]->isEnabled()); -+ exp = has = -1; -+ state = 0; -+ running = true; -+ handler->gplugStart(); -+} -+ -+void // virtual -+KPamGreeter::suspend() -+{ -+} -+ -+void // virtual -+KPamGreeter::resume() -+{ -+} -+ -+void // virtual -+KPamGreeter::next() -+{ -+ debug("********* next() called state %d\n", state); -+ -+ if (state == 0 && running && handler) { -+ debug(" **** returned text!\n"); -+ handler->gplugReturnText( (loginEdit ? loginEdit->text() : -+ fixedUser).local8Bit(), -+ KGreeterPluginHandler::IsUser ); -+ setActive(false); -+ } -+ -+ has = 0; -+ -+ for(QValueList::iterator it = authEdit.begin(); -+ it != authEdit.end(); -+ ++it) { -+ -+ has++; -+ if ((*it)->hasFocus()) { -+ ++it; -+ if (it != authEdit.end()) -+ (*it)->setFocus(); -+ break; -+ } -+ if (it == authEdit.end()) -+ has = -1; -+ } -+ -+ debug(" has %d and exp %d\n", has, exp); -+ -+#if 0 -+ // assert( running ); -+ if (loginEdit && loginEdit->hasFocus()) { -+ passwdEdit->setFocus(); // will cancel running login if necessary -+ has = 0; -+ } else if (passwdEdit && passwdEdit->hasFocus()) { -+ if (passwd1Edit) -+ passwd1Edit->setFocus(); -+ has = 1; -+ } else if (passwd1Edit) { -+ if (passwd1Edit->hasFocus()) { -+ passwd2Edit->setFocus(); -+ has = 1; // sic! -+ } else -+ has = 3; -+ } else -+ has = 1; -+ if (exp < 0) -+ handler->gplugStart(); -+#endif -+ if (has >= exp) -+ returnData(); -+} -+ -+void // virtual -+KPamGreeter::abort() -+{ -+ debug("***** abort() called\n"); -+ -+ running = false; -+ if (exp >= 0) { -+ exp = -1; -+ handler->gplugReturnText( 0, 0 ); -+ } -+} -+ -+void // virtual -+KPamGreeter::succeeded() -+{ -+ debug("**** succeeded() called\n"); -+ -+ // assert( running || timed_login ); -+ if (!authTok) -+ setActive( false ); -+ else -+ setAllActive( false ); -+ exp = -1; -+ running = false; -+} -+ -+void // virtual -+KPamGreeter::failed() -+{ -+ // assert( running || timed_login ); -+ setActive( false ); -+ setAllActive( false ); -+ exp = -1; -+ running = false; -+} -+ -+#include -+void // virtual -+KPamGreeter::revive() -+{ -+ // assert( !running ); -+ setAllActive( true ); -+ -+#if 1 -+ if (authEdit.size() < 1) -+ return; -+#endif -+ -+ assert(authEdit.size() >= 1); -+ if (authTok) { -+ authEdit[0]->erase(); -+ if(authEdit.size() >= 2) -+ authEdit[1]->erase(); -+ authEdit[0]->setFocus(); -+ } else { -+ authEdit[0]->erase(); -+ if (loginEdit && loginEdit->isEnabled()) -+ authEdit[0]->setEnabled( true ); -+ else { -+ setActive( true ); -+ if (loginEdit && loginEdit->text().isEmpty()) -+ loginEdit->setFocus(); -+ else -+ authEdit[0]->setFocus(); -+ } -+ } -+} -+ -+void // virtual -+KPamGreeter::clear() -+{ -+ // assert( !running && !passwd1Edit ); -+ authEdit[0]->erase(); -+ if (loginEdit) { -+ loginEdit->clear(); -+ loginEdit->setFocus(); -+ curUser = QString::null; -+ } else -+ authEdit[0]->setFocus(); -+} -+ -+ -+// private -+ -+void -+KPamGreeter::setActive( bool enable ) -+{ -+ if (loginEdit) -+ loginEdit->setEnabled( enable ); -+} -+ -+void -+KPamGreeter::setAllActive( bool enable ) -+{ -+ for(QValueList::iterator it = authEdit.begin(); -+ it != authEdit.end(); -+ ++it) -+ (*it)->setEnabled( enable ); -+} -+ -+void -+KPamGreeter::slotLoginLostFocus() -+{ -+ if (!running) -+ return; -+ if (exp > 0) { -+ if (curUser == loginEdit->text()) -+ return; -+ exp = -1; -+ handler->gplugReturnText( 0, 0 ); -+ } -+ curUser = loginEdit->text(); -+ debug("curUser is %s", curUser.latin1()); -+ handler->gplugSetUser( curUser ); -+} -+ -+void -+KPamGreeter::slotActivity() -+{ -+ debug("slotActivity"); -+ -+ if (running) -+ handler->gplugActivity(); -+} -+ -+// factory -+ -+static bool init( const QString &, -+ QVariant (*getConf)( void *, const char *, const QVariant & ), -+ void *ctx ) -+{ -+ echoMode = (KPasswordEdit::EchoModes) getConf( ctx, "EchoMode", QVariant( -1 ) ).toInt(); -+ KGlobal::locale()->insertCatalogue( "kgreet_pam" ); -+ return true; -+} -+ -+static void done( void ) -+{ -+ KGlobal::locale()->removeCatalogue( "kgreet_pam" ); -+ if (log && log != stderr) -+ fclose(log); -+ log = 0; -+} -+ -+static KGreeterPlugin * -+create( KGreeterPluginHandler *handler, KdmThemer *themer, -+ QWidget *parent, QWidget *predecessor, -+ const QString &fixedEntity, -+ KGreeterPlugin::Function func, -+ KGreeterPlugin::Context ctx ) -+{ -+ return new KPamGreeter( handler, themer, parent, predecessor, fixedEntity, func, ctx ); -+} -+ -+KDE_EXPORT kgreeterplugin_info kgreeterplugin_info = { -+ I18N_NOOP("Pam conversation plugin"), "pam", -+ kgreeterplugin_info::Local | kgreeterplugin_info::Presettable, -+ init, done, create -+}; -+ -+#include "kgreet_pam.moc" -Index: kdmlib/kgreet_pam.h -=================================================================== ---- /dev/null -+++ kdmlib/kgreet_pam.h -@@ -0,0 +1,93 @@ -+/* -+ -+Conversation widget for kdm greeter -+ -+Copyright (C) 2008 Dirk Mueller -+ -+ -+This program is free software; you can redistribute it and/or modify -+it under the terms of the GNU General Public License as published by -+the Free Software Foundation; either version 2 of the License, or -+(at your option) any later version. -+ -+This program is distributed in the hope that it will be useful, -+but WITHOUT ANY WARRANTY; without even the implied warranty of -+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+GNU General Public License for more details. -+ -+You should have received a copy of the GNU General Public License -+along with this program; if not, write to the Free Software -+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -+ -+*/ -+ -+ -+#ifndef KGREET_CLASSIC_H -+#define KGREET_CLASSIC_H -+ -+#include "kgreeterplugin.h" -+ -+#include -+#include -+ -+class KLineEdit; -+class KPasswordEdit; -+class KSimpleConfig; -+class QGridLayout; -+class QLabel; -+ -+class KPamGreeter : public QObject, public KGreeterPlugin { -+ Q_OBJECT -+ -+ public: -+ KPamGreeter( KGreeterPluginHandler *handler, -+ KdmThemer *themer, -+ QWidget *parent, QWidget *predecessor, -+ const QString &fixedEntitiy, -+ Function func, Context ctx ); -+ ~KPamGreeter(); -+ virtual void loadUsers( const QStringList &users ); -+ virtual void presetEntity( const QString &entity, int field ); -+ virtual QString getEntity() const; -+ virtual void setUser( const QString &user ); -+ virtual void setEnabled( bool on ); -+ virtual bool textMessage( const char *message, bool error ); -+ virtual void textPrompt( const char *prompt, bool echo, bool nonBlocking ); -+ virtual bool binaryPrompt( const char *prompt, bool nonBlocking ); -+ virtual void start(); -+ virtual void suspend(); -+ virtual void resume(); -+ virtual void next(); -+ virtual void abort(); -+ virtual void succeeded(); -+ virtual void failed(); -+ virtual void revive(); -+ virtual void clear(); -+ -+ QGridLayout *getLayoutItem() const { return static_cast(layoutItem); } -+ -+ public slots: -+ void slotLoginLostFocus(); -+ void slotActivity(); -+ -+ private: -+ void setActive( bool enable ); -+ void setAllActive( bool enable ); -+ void returnData(); -+ -+ QLabel *loginLabel; -+ QValueList authLabel; -+ KLineEdit *loginEdit; -+ QWidget* m_parentWidget; -+ QValueList authEdit; -+ KSimpleConfig *stsFile; -+ KdmThemer *m_themer; -+ QString fixedUser, curUser; -+ Function func; -+ Context ctx; -+ int exp, pExp, has; -+ unsigned state; -+ bool running, authTok; -+}; -+ -+#endif /* KGREET_CLASSIC_H */ -Index: kdmlib/Makefile.am -=================================================================== ---- kdmlib/Makefile.am.orig -+++ kdmlib/Makefile.am -@@ -1,11 +1,15 @@ - AM_CPPFLAGS = -I$(top_srcdir)/kdm/kfrontend $(all_includes) - --kde_module_LTLIBRARIES = kgreet_classic.la kgreet_winbind.la -+kde_module_LTLIBRARIES = kgreet_classic.la kgreet_pam.la kgreet_winbind.la - - kgreet_classic_la_SOURCES = kgreet_classic.cpp - kgreet_classic_la_LDFLAGS = -module -no-undefined $(KDE_PLUGIN) $(all_libraries) - kgreet_classic_la_LIBADD = $(LIB_KDEUI) - -+kgreet_pam_la_SOURCES = kgreet_pam.cpp -+kgreet_pam_la_LDFLAGS = -module -no-undefined $(KDE_PLUGIN) $(all_libraries) -+kgreet_pam_la_LIBADD = $(LIB_KDEUI) -+ - kgreet_winbind_la_SOURCES = kgreet_winbind.cpp - kgreet_winbind_la_LDFLAGS = -module -no-undefined $(KDE_PLUGIN) $(all_libraries) - kgreet_winbind_la_LIBADD = $(LIB_KDEUI) -Index: kcheckpass/checkpass_pam.c -=================================================================== ---- kcheckpass/checkpass_pam.c.orig -+++ kcheckpass/checkpass_pam.c -@@ -140,13 +140,16 @@ AuthReturn Authenticate(const char *call - openlog("kcheckpass", LOG_PID, LOG_AUTH); - - PAM_data.conv = conv; -- if (strcmp(method, "classic")) { -- sprintf(pservb, "%.31s-%.31s", caller, method); -- pam_service = pservb; -- } else { -+ if (!strcmp(method, "classic")) { - PAM_data.classic = 1; - pam_service = caller; - } -+ else if (!strcmp(method, "pam")) { -+ pam_service = caller; -+ } else { -+ sprintf(pservb, "%.31s-%.31s", caller, method); -+ pam_service = pservb; -+ } - pam_error = pam_start(pam_service, user, &PAM_conversation, &pamh); - if (pam_error != PAM_SUCCESS) - return AuthError; diff --git a/opensuse/tdebase/krandr-0.5.2.1.diff.bz2 b/opensuse/tdebase/krandr-0.5.2.1.diff.bz2 deleted file mode 100644 index 5e35b382b..000000000 Binary files a/opensuse/tdebase/krandr-0.5.2.1.diff.bz2 and /dev/null differ diff --git a/opensuse/tdebase/kscreensaver-random-NG.diff b/opensuse/tdebase/kscreensaver-random-NG.diff deleted file mode 100644 index 389babf13..000000000 --- a/opensuse/tdebase/kscreensaver-random-NG.diff +++ /dev/null @@ -1,189 +0,0 @@ -Index: kscreensaver/random.cpp -=================================================================== ---- kscreensaver/random.cpp.orig -+++ kscreensaver/random.cpp -@@ -1,4 +1,4 @@ --//----------------------------------------------------------------------------- -+ //----------------------------------------------------------------------------- - // - // Screen savers for KDE - // -@@ -19,6 +19,7 @@ - #include - #include - #include -+#include - - #include - #include -@@ -36,7 +37,7 @@ - - #define MAX_ARGS 20 - --void usage(char *name) -+static void usage(char *name) - { - puts(i18n("Usage: %1 [-setup] [args]\n" - "Starts a random screen saver.\n" -@@ -60,6 +61,43 @@ static const KCmdLineOptions options[] = - - //---------------------------------------------------------------------------- - -+#ifdef HAVE_GLXCHOOSEVISUAL -+#include -+#endif -+ -+//------------------------------------- -+bool hasDirectRendering () { -+ Display *dpy = QApplication::desktop()->x11Display(); -+ -+#ifdef HAVE_GLXCHOOSEVISUAL -+ int attribSingle[] = { -+ GLX_RGBA, -+ GLX_RED_SIZE, 1, -+ GLX_GREEN_SIZE, 1, -+ GLX_BLUE_SIZE, 1, -+ None -+ }; -+ XVisualInfo* visinfo = glXChooseVisual ( -+ dpy, QApplication::desktop()->primaryScreen(), attribSingle -+ ); -+ if (visinfo) { -+ GLXContext ctx = glXCreateContext ( dpy, visinfo, NULL, True ); -+ if (glXIsDirect(dpy, ctx)) { -+ glXDestroyContext (dpy,ctx); -+ return true; -+ } -+ glXDestroyContext (dpy,ctx); -+ return false; -+ } else { -+ return false; -+ } -+#else -+#error no GL? -+ return false; -+#endif -+ -+} -+ - int main(int argc, char *argv[]) - { - KLocale::setMainCatalogue("kscreensaver"); -@@ -103,55 +141,63 @@ int main(int argc, char *argv[]) - - KConfig type("krandom.kssrc"); - type.setGroup("Settings"); -- bool opengl = type.readBoolEntry("OpenGL"); -+ bool opengl = type.readBoolEntry("OpenGL", hasDirectRendering()); -+ kdDebug() << "hasOPEN " << opengl << endl; - bool manipulatescreen = type.readBoolEntry("ManipulateScreen"); - bool fortune = !KStandardDirs::findExe("fortune").isEmpty(); -+ QStringList defaults = type.readListEntry( "Defaults" ); -+ QMap def_numbers; -+ for ( QStringList::ConstIterator it = defaults.begin(); it != defaults.end(); ++it ) { -+ int index = ( *it ).find( ':' ); -+ if ( index == -1 ) -+ def_numbers[*it] = 1; -+ else -+ def_numbers[( *it ).left( index )] = ( *it ).mid( index + 1 ).toInt(); -+ } - - for (uint i = 0; i < tempSaverFileList.count(); i++) - { -- kdDebug() << "Looking at " << tempSaverFileList[i] << endl; -+ int howoften = 1; -+ if ( defaults.count() != 0 ) { -+ QFileInfo fi( tempSaverFileList[i] ); -+ if ( def_numbers.contains( fi.fileName() ) ) -+ howoften = def_numbers[fi.fileName()]; -+ else -+ howoften = 0; -+ } -+ - KDesktopFile saver(tempSaverFileList[i], true); -- if(!saver.tryExec()) -- continue; -- kdDebug() << "read X-KDE-Type" << endl; -+ if (!saver.tryExec()) -+ continue; - QString saverType = saver.readEntry("X-KDE-Type"); -- -- if (saverType.isEmpty()) // no X-KDE-Type defined so must be OK -- { -- saverFileList.append(tempSaverFileList[i]); -- } -- else -- { -+ if (!saverType.isEmpty()) // no X-KDE-Type defined so must be OK -+ { - QStringList saverTypes = QStringList::split(";", saverType); - for (QStringList::ConstIterator it = saverTypes.begin(); it != saverTypes.end(); ++it ) - { -- kdDebug() << "saverTypes is "<< *it << endl; - if (*it == "ManipulateScreen") - { -- if (manipulatescreen) -- { -- saverFileList.append(tempSaverFileList[i]); -- } -+ if (!manipulatescreen) -+ howoften = 0; - } - else - if (*it == "OpenGL") - { -- if (opengl) -- { -- saverFileList.append(tempSaverFileList[i]); -- } -+ if (!opengl) -+ howoften = 0; - } - if (*it == "Fortune") - { -- if (fortune) -- { -- saverFileList.append(tempSaverFileList[i]); -- } -+ if (!fortune) -+ howoften = 0; - } - - } - } -+ for ( int j = 0; j < howoften; ++j ) -+ saverFileList.append(tempSaverFileList[i]); - } -+ kdDebug() << "final " << saverFileList << endl; - - KRandomSequence rnd; - int indx = rnd.getLong(saverFileList.count()); -@@ -229,7 +275,7 @@ KRandomSetup::KRandomSetup( QWidget *par - - KConfig config("krandom.kssrc"); - config.setGroup("Settings"); -- openGL->setChecked(config.readBoolEntry("OpenGL", true)); -+ openGL->setChecked(config.readBoolEntry("OpenGL", hasDirectRendering())); - manipulateScreen->setChecked(config.readBoolEntry("ManipulateScreen", true)); - } - -Index: kscreensaver/Makefile.am -=================================================================== ---- kscreensaver/Makefile.am.orig -+++ kscreensaver/Makefile.am -@@ -3,13 +3,13 @@ - - AM_CPPFLAGS = -UQT_NO_ASCII_CAST - --INCLUDES = $(all_includes) -+INCLUDES = $(GLINC) $(all_includes) - AM_LDFLAGS = $(all_libraries) $(KDE_RPATH) - - bin_PROGRAMS = krandom.kss kblankscrn.kss - - krandom_kss_SOURCES = random.cpp --krandom_kss_LDADD = $(LIB_KDEUI) -lm -+krandom_kss_LDADD = $(LIB_KDEUI) $(GLLIB) -lm - - kblankscrn_kss_SOURCES = blankscrn.cpp - kblankscrn_kss_LDADD = $(LIB_KDEUI) -lkscreensaver -lm diff --git a/opensuse/tdebase/ksmserver-defaulttohalt.diff b/opensuse/tdebase/ksmserver-defaulttohalt.diff deleted file mode 100644 index 71a8a5037..000000000 --- a/opensuse/tdebase/ksmserver-defaulttohalt.diff +++ /dev/null @@ -1,13 +0,0 @@ -Index: ksmserver/shutdowndlg.cpp -=================================================================== ---- ksmserver/shutdowndlg.cpp.orig -+++ ksmserver/shutdowndlg.cpp -@@ -222,7 +222,7 @@ KSMShutdownDlg::KSMShutdownDlg( QWidget* - btnHalt->setFont( btnFont ); - buttonlay->addWidget( btnHalt ); - connect(btnHalt, SIGNAL(clicked()), SLOT(slotHalt())); -- if ( sdtype == KApplication::ShutdownTypeHalt ) -+ if ( sdtype == KApplication::ShutdownTypeHalt || getenv("KDM_AUTOLOGIN") ) - btnHalt->setFocus(); - - // Reboot diff --git a/opensuse/tdebase/ksmserver-kdeinit.diff b/opensuse/tdebase/ksmserver-kdeinit.diff deleted file mode 100644 index a21b92dc8..000000000 --- a/opensuse/tdebase/ksmserver-kdeinit.diff +++ /dev/null @@ -1,67 +0,0 @@ ---- ksmserver/server.h.sav 2009-07-23 11:44:55.000000000 +0200 -+++ ksmserver/server.h 2009-07-23 11:47:52.000000000 +0200 -@@ -145,7 +145,8 @@ private: - - KProcess* startApplication( QStringList command, - const QString& clientMachine = QString::null, -- const QString& userId = QString::null ); -+ const QString& userId = QString::null, -+ bool wm = false ); - void executeCommand( const QStringList& command ); - - bool isWM( const KSMClient* client ) const; ---- ksmserver/startup.cpp.sav 2009-07-23 11:44:54.000000000 +0200 -+++ ksmserver/startup.cpp 2009-07-23 11:45:49.000000000 +0200 -@@ -168,7 +168,7 @@ void KSMServer::launchWM( const QValueLi - // when we have a window manager, we start it first and give - // it some time before launching other processes. Results in a - // visually more appealing startup. -- wmProcess = startApplication( wmStartCommands[ 0 ] ); -+ wmProcess = startApplication( wmStartCommands[ 0 ], QString(), QString(), true ); - connect( wmProcess, SIGNAL( processExited( KProcess* )), SLOT( wmProcessChange())); - // there can be possibly more wm's (because of forking for multihead), - // but in such case care only about the process of the first one ---- ksmserver/server.cpp.sav 2009-07-23 11:51:33.000000000 +0200 -+++ ksmserver/server.cpp 2009-07-23 11:49:02.000000000 +0200 -@@ -101,7 +101,7 @@ KSMServer* KSMServer::self() - * to restart applications. - */ - KProcess* KSMServer::startApplication( QStringList command, const QString& clientMachine, -- const QString& userId ) -+ const QString& userId, bool wm ) - { - if ( command.isEmpty() ) - return NULL; -@@ -118,12 +118,26 @@ KProcess* KSMServer::startApplication( Q - command.prepend( clientMachine ); - command.prepend( xonCommand ); // "xon" by default - } -- KProcess* process = new KProcess( this ); -- *process << command; -- // make it auto-delete -- connect( process, SIGNAL( processExited( KProcess* )), process, SLOT( deleteLater())); -- process->start(); -- return process; -+// TODO this function actually should not use KProcess at all and use klauncher (kdeinit) instead. -+// Klauncher should also have support for tracking whether the launched process is still alive -+// or not, so this should be redone. For now, use KProcess for wm's, as they need to be tracked, -+// klauncher for the rest where ksmserver doesn't care. -+ if( wm ) { -+ KProcess* process = new KProcess( this ); -+ *process << command; -+ // make it auto-delete -+ connect( process, SIGNAL( processExited( KProcess* )), process, SLOT( deleteLater())); -+ process->start(); -+ return process; -+ } else { -+ int n = command.count(); -+ QCString app = command[0].latin1(); -+ QValueList argList; -+ for ( int i=1; i < n; i++) -+ argList.append( QCString(command[i].latin1())); -+ DCOPRef( launcher ).send( "exec_blind", app, DCOPArg( argList, "QValueList" ) ); -+ return NULL; -+ } - } - - /*! Utility function to execute a command on the local machine. Used diff --git a/opensuse/tdebase/ksmserver-suspend.diff b/opensuse/tdebase/ksmserver-suspend.diff deleted file mode 100644 index ef7a88036..000000000 --- a/opensuse/tdebase/ksmserver-suspend.diff +++ /dev/null @@ -1,233 +0,0 @@ -Index: ksmserver/Makefile.am -=================================================================== ---- ksmserver/Makefile.am.orig -+++ ksmserver/Makefile.am -@@ -17,7 +17,7 @@ - - SUBDIRS = . - --INCLUDES= -I$(top_srcdir)/kdmlib $(all_includes) -+INCLUDES= -I$(top_srcdir)/kdmlib $(all_includes) $(DBUS_INCS) - - bin_PROGRAMS = - lib_LTLIBRARIES = -@@ -31,7 +31,7 @@ ksmserver_la_SOURCES = main.cpp server.c - KSMServerInterface.skel server.skel - - ksmserver_la_LDFLAGS = $(all_libraries) -avoid-version -module --ksmserver_la_LIBADD = ../kdmlib/libdmctl.la $(LIB_KDEUI) -+ksmserver_la_LIBADD = ../kdmlib/libdmctl.la $(LIB_KDEUI) -llazy $(DBUS_LIBS) - - picsdir = $(kde_datadir)/ksmserver/pics - pics_DATA = shutdownkonq.png -@@ -44,7 +44,7 @@ updatedir = $(kde_datadir)/kconf_update - EXTRA_PROGRAMS = testsh - testsh_SOURCES = test.cpp - testsh_LDFLAGS = $(all_libraries) $(KDE_RPATH) --testsh_LDADD = $(LIB_KDEUI) shutdowndlg.lo ../kdmlib/libdmctl.la -+testsh_LDADD = $(LIB_KDEUI) shutdowndlg.lo ../kdmlib/libdmctl.la -llazy $(DBUS_LIBS) - - messages: - $(XGETTEXT) *.cpp -o $(podir)/ksmserver.pot -Index: ksmserver/shutdowndlg.cpp -=================================================================== ---- ksmserver/shutdowndlg.cpp.orig -+++ ksmserver/shutdowndlg.cpp -@@ -38,17 +38,23 @@ Copyright (C) 2000 Matthias Ettrich - #include - #include -+#include - - #include - #include - #include - #include - #include -+#include - - #include - - #include "shutdowndlg.moc" - -+#define DBUS_HAL_INTERFACE "org.freedesktop.Hal" -+#define DBUS_HAL_SYSTEM_POWER_INTERFACE "org.freedesktop.Hal.Device.SystemPowerManagement" -+#define HAL_UDI_COMPUTER "/org/freedesktop/Hal/devices/computer" -+ - static const int max_faded = 2300; - static const int slice = 20; - -@@ -215,8 +221,8 @@ KSMShutdownDlg::KSMShutdownDlg( QWidget* - connect(btnLogout, SIGNAL(clicked()), SLOT(slotLogout())); - - if (maysd) { -- -- // Shutdown -+ -+ // Shutdown - KPushButton* btnHalt = new KPushButton( KGuiItem( i18n("&Turn Off Computer"), "exit"), frame ); - QToolTip::add( btnHalt, i18n( "

    Turn Off Computer

    Log out of the current session and turn off the computer

    " ) ); - btnHalt->setFont( btnFont ); -@@ -251,13 +257,58 @@ KSMShutdownDlg::KSMShutdownDlg( QWidget* - else - targets->insertItem( label, index ); - } -- -+ - btnReboot->setPopup(targets); - connect( targets, SIGNAL(activated(int)), SLOT(slotReboot(int)) ); - } else - QToolTip::add( btnReboot, i18n( "

    Restart Computer

    Log out of the current session and restart the computer

    " ) ); -- } - -+ int supported = -1; -+ liblazy_hal_get_property_bool(HAL_UDI_COMPUTER, "power_management.can_suspend", &supported); -+ if (supported == 1) -+ suspend_ram = true; -+ else -+ suspend_ram = false; -+ liblazy_hal_get_property_bool(HAL_UDI_COMPUTER, "power_management.can_standby", &supported); -+ if (supported == 1) -+ standby = true; -+ else -+ standby = false; -+ liblazy_hal_get_property_bool(HAL_UDI_COMPUTER, "power_management.can_hibernate", &supported); -+ if (supported == 1) -+ suspend_disk = true; -+ else -+ suspend_disk = false; -+ -+ if (liblazy_hal_is_caller_privileged("org.freedesktop.hal.power-management.hibernate") != 1) -+ suspend_disk = false; -+ if (liblazy_hal_is_caller_privileged("org.freedesktop.hal.power-management.suspend") != 1) -+ suspend_ram = false; -+ if (liblazy_hal_is_caller_privileged("org.freedesktop.hal.power-management.standby") != 1) -+ standby = false; -+ -+ int sum = standby + suspend_ram + suspend_disk; -+ if ( sum ) { -+ QButton *btnSuspend; -+ if (sum > 1) { -+ btnSuspend = new KSMDelayedPushButton( KGuiItem( i18n("&Suspend Computer"), "player_pause"), frame ); -+ QPopupMenu *suspends = new QPopupMenu(frame); -+ if (suspend_disk) -+ suspends->insertItem(i18n("Suspend to Disk"), 1); -+ if (suspend_ram) -+ suspends->insertItem(i18n("Suspend to RAM"), 2); -+ if (standby) -+ suspends->insertItem(i18n("Standby"), 3); -+ connect(suspends, SIGNAL(activated(int)), SLOT(slotSuspend(int))); -+ static_cast(btnSuspend)->setPopup(suspends); -+ } else { -+ btnSuspend = new KPushButton( KGuiItem( i18n("&Suspend Computer"), "player_pause"), frame ); -+ } -+ btnSuspend->setFont( btnFont ); -+ buttonlay->addWidget( btnSuspend ); -+ connect(btnSuspend, SIGNAL(clicked()), SLOT(slotSuspend())); -+ } -+ } - buttonlay->addStretch( 1 ); - - // Separator -@@ -270,6 +321,80 @@ KSMShutdownDlg::KSMShutdownDlg( QWidget* - - } - -+void KSMShutdownDlg::slotSuspend() -+{ -+ int error = 0; -+ int wake = 0; -+ DBusMessage *reply; -+ -+ if (suspend_disk) -+ error = liblazy_dbus_system_send_method_call(DBUS_HAL_INTERFACE, -+ HAL_UDI_COMPUTER, -+ DBUS_HAL_SYSTEM_POWER_INTERFACE, -+ "Hibernate", -+ &reply, -+ DBUS_TYPE_INVALID); -+ else if (suspend_ram) -+ error = liblazy_dbus_system_send_method_call(DBUS_HAL_INTERFACE, -+ HAL_UDI_COMPUTER, -+ DBUS_HAL_SYSTEM_POWER_INTERFACE, -+ "Suspend", -+ &reply, -+ DBUS_TYPE_INT32, -+ &wake, -+ DBUS_TYPE_INVALID); -+ else -+ error = liblazy_dbus_system_send_method_call(DBUS_HAL_INTERFACE, -+ HAL_UDI_COMPUTER, -+ DBUS_HAL_SYSTEM_POWER_INTERFACE, -+ "Standby", -+ &reply, -+ DBUS_TYPE_INVALID); -+ -+ if (error) -+ KMessageBox::error(this, i18n("Suspend failed")); -+ -+ // possibly after resume :) -+ reject(); -+} -+ -+void KSMShutdownDlg::slotSuspend(int id) -+{ -+ int error = 0; -+ int wake = 0; -+ DBusMessage *reply; -+ -+ if (suspend_disk && id == 1) { -+ error = liblazy_dbus_system_send_method_call(DBUS_HAL_INTERFACE, -+ HAL_UDI_COMPUTER, -+ DBUS_HAL_SYSTEM_POWER_INTERFACE, -+ "Hibernate", -+ &reply, -+ DBUS_TYPE_INVALID); -+ } else if (suspend_ram && id == 2) -+ error = liblazy_dbus_system_send_method_call(DBUS_HAL_INTERFACE, -+ HAL_UDI_COMPUTER, -+ DBUS_HAL_SYSTEM_POWER_INTERFACE, -+ "Suspend", -+ &reply, -+ DBUS_TYPE_INT32, -+ &wake, -+ DBUS_TYPE_INVALID); -+ else if (standby && id == 3) -+ error = liblazy_dbus_system_send_method_call(DBUS_HAL_INTERFACE, -+ HAL_UDI_COMPUTER, -+ DBUS_HAL_SYSTEM_POWER_INTERFACE, -+ "Standby", -+ &reply, -+ DBUS_TYPE_INVALID); -+ else -+ return; -+ if (error) -+ KMessageBox::error(this, i18n("Suspend failed")); -+ -+ // possibly after resume :) -+ reject(); -+} - - void KSMShutdownDlg::slotLogout() - { -Index: ksmserver/shutdowndlg.h -=================================================================== ---- ksmserver/shutdowndlg.h.orig -+++ ksmserver/shutdowndlg.h -@@ -60,6 +60,8 @@ public slots: - void slotHalt(); - void slotReboot(); - void slotReboot(int); -+ void slotSuspend(); -+ void slotSuspend(int); - - protected: - ~KSMShutdownDlg() {}; -@@ -70,6 +72,7 @@ private: - QString m_bootOption; - QPopupMenu *targets; - QStringList rebootOptions; -+ bool suspend_disk, suspend_ram, standby; - }; - - class KSMDelayedPushButton : public KPushButton diff --git a/opensuse/tdebase/ksmserver-timed.diff b/opensuse/tdebase/ksmserver-timed.diff deleted file mode 100644 index 89f4a7004..000000000 --- a/opensuse/tdebase/ksmserver-timed.diff +++ /dev/null @@ -1,700 +0,0 @@ -Index: ksmserver/KSMServerInterface.h -=================================================================== ---- ksmserver/KSMServerInterface.h.orig -+++ ksmserver/KSMServerInterface.h -@@ -22,6 +22,8 @@ k_dcop: - - virtual void suspendStartup( QCString ) = 0; - virtual void resumeStartup( QCString ) = 0; -+ -+ virtual void logoutTimed( int, int, QString ) = 0; - }; - - #endif -Index: ksmserver/Makefile.am -=================================================================== ---- ksmserver/Makefile.am.orig -+++ ksmserver/Makefile.am -@@ -28,7 +28,7 @@ ksmserver_la_METASOURCES = AUTO - # Order is important for --enable-final! - ksmserver_la_SOURCES = main.cpp server.cpp shutdowndlg.cpp \ - legacy.cpp startup.cpp shutdown.cpp client.cpp \ -- KSMServerInterface.skel server.skel -+ KSMServerInterface.skel server.skel timed.ui - - ksmserver_la_LDFLAGS = $(all_libraries) -avoid-version -module - ksmserver_la_LIBADD = ../kdmlib/libdmctl.la $(LIB_KDEUI) -llazy $(DBUS_LIBS) -@@ -42,7 +42,7 @@ updatedir = $(kde_datadir)/kconf_update - - - EXTRA_PROGRAMS = testsh --testsh_SOURCES = test.cpp -+testsh_SOURCES = test.cpp timed.ui - testsh_LDFLAGS = $(all_libraries) $(KDE_RPATH) - testsh_LDADD = $(LIB_KDEUI) shutdowndlg.lo ../kdmlib/libdmctl.la -llazy $(DBUS_LIBS) - -Index: ksmserver/server.h -=================================================================== ---- ksmserver/server.h.orig -+++ ksmserver/server.h -@@ -85,6 +85,7 @@ public: - // public API - void restoreSession( QString sessionName ); - void startDefaultSession(); -+ - void shutdown( KApplication::ShutdownConfirm confirm, - KApplication::ShutdownType sdtype, - KApplication::ShutdownMode sdmode ); -@@ -92,6 +93,11 @@ public: - virtual void suspendStartup( QCString app ); - virtual void resumeStartup( QCString app ); - -+ bool checkStatus( bool &logoutConfirmed, bool &maysd, -+ KApplication::ShutdownConfirm confirm, -+ KApplication::ShutdownType sdtype, -+ KApplication::ShutdownMode sdmode ); -+ - public slots: - void cleanUp(); - -@@ -142,6 +148,11 @@ private: - bool defaultSession() const; // empty session - void setupXIOErrorHandler(); - -+ void shutdownInternal( KApplication::ShutdownConfirm confirm, -+ KApplication::ShutdownType sdtype, -+ KApplication::ShutdownMode sdmode, -+ QString bootOption = QString::null ); -+ - void performLegacySessionSave(); - void storeLegacySession( KConfig* config ); - void restoreLegacySession( KConfig* config ); -@@ -157,6 +168,7 @@ private: - - // public dcop interface - void logout( int, int, int ); -+ virtual void logoutTimed( int, int, QString ); - QStringList sessionList(); - QString currentSession(); - void saveCurrentSession(); -Index: ksmserver/shutdown.cpp -=================================================================== ---- ksmserver/shutdown.cpp.orig -+++ ksmserver/shutdown.cpp -@@ -93,14 +93,16 @@ void KSMServer::logout( int confirm, int - (KApplication::ShutdownMode)sdmode ); - } - --void KSMServer::shutdown( KApplication::ShutdownConfirm confirm, -- KApplication::ShutdownType sdtype, KApplication::ShutdownMode sdmode ) -+bool KSMServer::checkStatus( bool &logoutConfirmed, bool &maysd, -+ KApplication::ShutdownConfirm confirm, -+ KApplication::ShutdownType sdtype, -+ KApplication::ShutdownMode sdmode ) - { - pendingShutdown.stop(); - if( dialogActive ) -- return; -+ return false; - if( state >= Shutdown ) // already performing shutdown -- return; -+ return false; - if( state != Idle ) // performing startup - { - // perform shutdown as soon as startup is finished, in order to avoid saving partial session -@@ -111,25 +113,44 @@ void KSMServer::shutdown( KApplication:: - pendingShutdown_sdtype = sdtype; - pendingShutdown_sdmode = sdmode; - } -- return; -+ return false; - } - - KConfig *config = KGlobal::config(); - config->reparseConfiguration(); // config may have changed in the KControl module - - config->setGroup("General" ); -- bool logoutConfirmed = -+ logoutConfirmed = - (confirm == KApplication::ShutdownConfirmYes) ? false : -- (confirm == KApplication::ShutdownConfirmNo) ? true : -- !config->readBoolEntry( "confirmLogout", true ); -- bool maysd = false; -+ (confirm == KApplication::ShutdownConfirmNo) ? true : -+ !config->readBoolEntry( "confirmLogout", true ); -+ maysd = false; - if (config->readBoolEntry( "offerShutdown", true ) && DM().canShutdown()) - maysd = true; - if (!maysd) { - if (sdtype != KApplication::ShutdownTypeNone && - sdtype != KApplication::ShutdownTypeDefault && - logoutConfirmed) -- return; /* unsupported fast shutdown */ -+ return false; /* unsupported fast shutdown */ -+ } -+ -+ return true; -+} -+ -+void KSMServer::shutdownInternal( KApplication::ShutdownConfirm confirm, -+ KApplication::ShutdownType sdtype, -+ KApplication::ShutdownMode sdmode, -+ QString bopt ) -+{ -+ bool maysd = false; -+ bool logoutConfirmed = false; -+ if ( !checkStatus( logoutConfirmed, maysd, confirm, sdtype, sdmode ) ) -+ return; -+ -+ KConfig *config = KGlobal::config(); -+ -+ config->setGroup("General" ); -+ if (!maysd) { - sdtype = KApplication::ShutdownTypeNone; - } else if (sdtype == KApplication::ShutdownTypeDefault) - sdtype = (KApplication::ShutdownType) -@@ -138,7 +159,6 @@ void KSMServer::shutdown( KApplication:: - sdmode = KApplication::ShutdownModeInteractive; - - dialogActive = true; -- QString bopt; - if ( !logoutConfirmed ) { - KSMShutdownFeedback::start(); // make the screen gray - logoutConfirmed = -@@ -204,6 +224,42 @@ void KSMServer::shutdown( KApplication:: - dialogActive = false; - } - -+void KSMServer::shutdown( KApplication::ShutdownConfirm confirm, -+ KApplication::ShutdownType sdtype, KApplication::ShutdownMode sdmode ) -+{ -+ shutdownInternal( confirm, sdtype, sdmode ); -+} -+ -+#include -+ -+void KSMServer::logoutTimed( int sdtype, int sdmode, QString bootOption ) -+{ -+ int confirmDelay; -+ -+ KConfig* config = KGlobal::config(); -+ config->setGroup( "General" ); -+ -+ if ( sdtype == KApplication::ShutdownTypeHalt ) -+ confirmDelay = config->readNumEntry( "confirmShutdownDelay", 31 ); -+ else if ( sdtype == KApplication::ShutdownTypeReboot ) -+ confirmDelay = config->readNumEntry( "confirmRebootDelay", 31 ); -+ else -+ confirmDelay = config->readNumEntry( "confirmLogoutDelay", 31 ); -+ -+ bool result = true; -+ if (confirmDelay) { -+ KSMShutdownFeedback::start(); // make the screen gray -+ result = KSMDelayedMessageBox::showTicker( (KApplication::ShutdownType)sdtype, bootOption, confirmDelay ); -+ KSMShutdownFeedback::stop(); // make the screen become normal again -+ } -+ -+ if ( result ) -+ shutdownInternal( KApplication::ShutdownConfirmNo, -+ (KApplication::ShutdownType)sdtype, -+ (KApplication::ShutdownMode)sdmode, -+ bootOption ); -+} -+ - void KSMServer::pendingShutdownTimeout() - { - shutdown( pendingShutdown_confirm, pendingShutdown_sdtype, pendingShutdown_sdmode ); -Index: ksmserver/shutdowndlg.cpp -=================================================================== ---- ksmserver/shutdowndlg.cpp.orig -+++ ksmserver/shutdowndlg.cpp -@@ -25,6 +25,7 @@ Copyright (C) 2000 Matthias Ettrich - - #include -+#include - #include - #include - #include -@@ -488,3 +489,67 @@ void KSMDelayedPushButton::slotTimeout() - popt->stop(); - setDown(false); - } -+ -+KSMDelayedMessageBox::KSMDelayedMessageBox( KApplication::ShutdownType sdtype, const QString &bootOption, int confirmDelay ) -+ : TimedLogoutDlg( 0, 0, true, WType_Popup ), m_remaining(confirmDelay) -+{ -+ if ( sdtype == KApplication::ShutdownTypeHalt ) -+ { -+ m_title->setText( i18n( "Would you like to turn off your computer?" ) ); -+ m_template = i18n( "This computer will turn off automatically\n" -+ "after %1 seconds." ); -+ m_logo->setPixmap( BarIcon( "exit", 48 ) ); -+ } else if ( sdtype == KApplication::ShutdownTypeReboot ) -+ { -+ if (bootOption.isEmpty()) -+ m_title->setText( i18n( "Would you like to reboot your computer?" ) ); -+ else -+ m_title->setText( i18n( "Would you like to reboot to \"%1\"?" ).arg(bootOption) ); -+ m_template = i18n( "This computer will reboot automatically\n" -+ "after %1 seconds." ); -+ m_logo->setPixmap( BarIcon( "reload", 48 ) ); -+ } else { -+ m_title->setText( i18n( "Would you like to end your current session?" ) ); -+ m_template = i18n( "This session will end\n" -+ "after %1 seconds automatically." ); -+ m_logo->setPixmap( BarIcon( "previous", 48 ) ); -+ } -+ -+ updateText(); -+ adjustSize(); -+ if ( double( height() ) / width() < 0.25 ) -+ { -+ setFixedHeight( qRound( width() * 0.3 ) ); -+ adjustSize(); -+ } -+ QTimer *timer = new QTimer( this ); -+ timer->start( 1000 ); -+ connect( timer, SIGNAL( timeout() ), SLOT( updateText() ) ); -+ KDialog::centerOnScreen(this); -+} -+ -+void KSMDelayedMessageBox::updateText() -+{ -+ m_remaining--; -+ if ( m_remaining == 0 ) -+ { -+ accept(); -+ return; -+ } -+ m_text->setText( m_template.arg( m_remaining ) ); -+} -+ -+bool KSMDelayedMessageBox::showTicker( KApplication::ShutdownType sdtype, const QString &bootOption, int confirmDelay ) -+{ -+ kapp->enableStyles(); -+ KSMDelayedMessageBox msg( sdtype, bootOption, confirmDelay ); -+ QSize sh = msg.sizeHint(); -+ QRect rect = KGlobalSettings::desktopGeometry(QCursor::pos()); -+ -+ msg.move(rect.x() + (rect.width() - sh.width())/2, -+ rect.y() + (rect.height() - sh.height())/2); -+ bool result = msg.exec(); -+ -+ kapp->disableStyles(); -+ return result; -+} -Index: ksmserver/shutdowndlg.h -=================================================================== ---- ksmserver/shutdowndlg.h.orig -+++ ksmserver/shutdowndlg.h -@@ -17,6 +17,7 @@ class QVButtonGroup; - class QPopupMenu; - class QTimer; - -+#include "timed.h" - #include - - // The (singleton) widget that makes the desktop gray. -@@ -94,4 +95,22 @@ private: - QTimer *popt; - }; - -+class QLabel; -+ -+class KSMDelayedMessageBox : public TimedLogoutDlg -+{ -+ Q_OBJECT -+ -+public: -+ KSMDelayedMessageBox( KApplication::ShutdownType sdtype, const QString &bootOption, int confirmDelay ); -+ static bool showTicker( KApplication::ShutdownType sdtype, const QString &bootOption, int confirmDelay ); -+ -+protected slots: -+ void updateText(); -+ -+private: -+ QString m_template; -+ int m_remaining; -+}; -+ - #endif -Index: ksmserver/test.cpp -=================================================================== ---- ksmserver/test.cpp.orig -+++ ksmserver/test.cpp -@@ -14,11 +14,16 @@ main(int argc, char *argv[]) - a.iconLoader()->addAppDir("ksmserver"); - KSMShutdownFeedback::start(); - -+ // ShutdownTypeNone == Logout == 0 -+ // ShutdownTypeReboot == 1 -+ // ShutdownTypeHalt == 2 - KApplication::ShutdownType sdtype = KApplication::ShutdownTypeNone; - QString bopt; -+ KSMDelayedMessageBox::showTicker( sdtype ); -+ /* - (void)KSMShutdownDlg::confirmShutdown( true, - sdtype, -- bopt ); -+ bopt );*/ - /* (void)KSMShutdownDlg::confirmShutdown( false, - sdtype, - bopt ); */ -Index: ksmserver/timed.ui -=================================================================== ---- /dev/null -+++ ksmserver/timed.ui -@@ -0,0 +1,352 @@ -+ -+TimedLogoutDlg -+ -+ -+ TimedLogoutDlg -+ -+ -+ -+ 0 -+ 0 -+ 381 -+ 131 -+ -+ -+ -+ -+ 5 -+ 5 -+ 0 -+ 0 -+ -+ -+ -+ Confirmation -+ -+ -+ -+ unnamed -+ -+ -+ 0 -+ -+ -+ 0 -+ -+ -+ -+ frame3 -+ -+ -+ -+ 5 -+ 5 -+ 0 -+ 0 -+ -+ -+ -+ StyledPanel -+ -+ -+ Raised -+ -+ -+ 2 -+ -+ -+ 0 -+ -+ -+ 0 -+ -+ -+ -+ unnamed -+ -+ -+ -+ layout10 -+ -+ -+ -+ unnamed -+ -+ -+ 0 -+ -+ -+ 0 -+ -+ -+ -+ layout8 -+ -+ -+ -+ unnamed -+ -+ -+ -+ layout6 -+ -+ -+ -+ unnamed -+ -+ -+ 0 -+ -+ -+ 0 -+ -+ -+ -+ spacer3_2 -+ -+ -+ Vertical -+ -+ -+ MinimumExpanding -+ -+ -+ -+ 20 -+ 2 -+ -+ -+ -+ -+ -+ m_logo -+ -+ -+ -+ 1 -+ 1 -+ 0 -+ 0 -+ -+ -+ -+ -+ 48 -+ 48 -+ -+ -+ -+ true -+ -+ -+ -+ -+ spacer3 -+ -+ -+ Vertical -+ -+ -+ MinimumExpanding -+ -+ -+ -+ 20 -+ 2 -+ -+ -+ -+ -+ -+ -+ -+ layout7 -+ -+ -+ -+ unnamed -+ -+ -+ 7 -+ -+ -+ -+ m_title -+ -+ -+ -+ 7 -+ 0 -+ 0 -+ 0 -+ -+ -+ -+ -+ 1 -+ -+ -+ -+ Would you like to shutdown your computer? -+ -+ -+ PlainText -+ -+ -+ AlignVCenter|AlignLeft -+ -+ -+ -+ -+ m_text -+ -+ -+ -+ 7 -+ 5 -+ 0 -+ 0 -+ -+ -+ -+ If you do not act, your computer will shutdown -+after X automatically. -+ -+ -+ RichText -+ -+ -+ WordBreak|AlignVCenter -+ -+ -+ -+ -+ spacer4 -+ -+ -+ Vertical -+ -+ -+ Preferred -+ -+ -+ -+ 30 -+ 0 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ layout9 -+ -+ -+ -+ unnamed -+ -+ -+ -+ spacer2 -+ -+ -+ Horizontal -+ -+ -+ Expanding -+ -+ -+ -+ 90 -+ 20 -+ -+ -+ -+ -+ -+ pushButton1 -+ -+ -+ Confirm -+ -+ -+ false -+ -+ -+ -+ -+ spacer2_2 -+ -+ -+ Horizontal -+ -+ -+ Expanding -+ -+ -+ -+ 90 -+ 20 -+ -+ -+ -+ -+ -+ pushButton2 -+ -+ -+ -+ 1 -+ 5 -+ 0 -+ 0 -+ -+ -+ -+ Cancel -+ -+ -+ -+ -+ spacer2_2_2 -+ -+ -+ Horizontal -+ -+ -+ Expanding -+ -+ -+ -+ 90 -+ 20 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ pushButton1 -+ clicked() -+ TimedLogoutDlg -+ accept() -+ -+ -+ pushButton2 -+ clicked() -+ TimedLogoutDlg -+ reject() -+ -+ -+ -+ diff --git a/opensuse/tdebase/ksmserver-tooltips.diff b/opensuse/tdebase/ksmserver-tooltips.diff deleted file mode 100644 index c847907af..000000000 --- a/opensuse/tdebase/ksmserver-tooltips.diff +++ /dev/null @@ -1,38 +0,0 @@ -Index: ksmserver/shutdowndlg.cpp -=================================================================== ---- ksmserver/shutdowndlg.cpp.orig -+++ ksmserver/shutdowndlg.cpp -@@ -126,6 +126,7 @@ KSMShutdownDlg::KSMShutdownDlg( QWidget* - - // End session - KPushButton* btnLogout = new KPushButton( KGuiItem( i18n("&End Current Session"), "undo"), frame ); -+ QToolTip::add( btnLogout, i18n( "

    End Current Session

    Log out of the current session to login with a different user

    " ) ); - QFont btnFont = btnLogout->font(); - buttonlay->addWidget( btnLogout ); - connect(btnLogout, SIGNAL(clicked()), SLOT(slotLogout())); -@@ -134,6 +135,7 @@ KSMShutdownDlg::KSMShutdownDlg( QWidget* - - // Shutdown - KPushButton* btnHalt = new KPushButton( KGuiItem( i18n("&Turn Off Computer"), "exit"), frame ); -+ QToolTip::add( btnHalt, i18n( "

    Turn Off Computer

    Log out of the current session and turn off the computer

    " ) ); - btnHalt->setFont( btnFont ); - buttonlay->addWidget( btnHalt ); - connect(btnHalt, SIGNAL(clicked()), SLOT(slotHalt())); -@@ -142,6 +144,7 @@ KSMShutdownDlg::KSMShutdownDlg( QWidget* - - // Reboot - KSMDelayedPushButton* btnReboot = new KSMDelayedPushButton( KGuiItem( i18n("&Restart Computer"), "reload"), frame ); -+ QToolTip::add( btnReboot, i18n( "

    Restart Computer

    Log out of the current session and restart the computer

    Hold the mouse button or the space bar for a short while to get a list of options what to boot

    " ) ); - btnReboot->setFont( btnFont ); - buttonlay->addWidget( btnReboot ); - -@@ -168,7 +171,8 @@ KSMShutdownDlg::KSMShutdownDlg( QWidget* - - btnReboot->setPopup(targets); - connect( targets, SIGNAL(activated(int)), SLOT(slotReboot(int)) ); -- } -+ } else -+ QToolTip::add( btnReboot, i18n( "

    Restart Computer

    Log out of the current session and restart the computer

    " ) ); - } - - buttonlay->addStretch( 1 ); diff --git a/opensuse/tdebase/ksplashml.patch b/opensuse/tdebase/ksplashml.patch deleted file mode 100644 index 5d3ca0cf7..000000000 --- a/opensuse/tdebase/ksplashml.patch +++ /dev/null @@ -1,19 +0,0 @@ -Index: ksplashml/kcmksplash/installer.cpp -=================================================================== ---- ksplashml/kcmksplash/installer.cpp.orig -+++ ksplashml/kcmksplash/installer.cpp -@@ -474,6 +474,14 @@ void SplashInstaller::slotTest() - KMessageBox::error(this,i18n("Unable to start ksplashsimple.")); - return; - } -+ if( themeName.startsWith( "ksplashx-" )) -+ { -+ KProcess proc; -+ proc << "ksplashx" << themeName.mid( 9 ) << "--test"; -+ if (!proc.start(KProcess::Block)) -+ KMessageBox::error(this,i18n("Unable to start ksplashx.")); -+ return; -+ } - KProcess proc; - proc << "ksplash" << "--test" << "--theme" << themeName; - if (!proc.start(KProcess::Block)) diff --git a/opensuse/tdebase/ksysguard-slp-ratelimit.diff b/opensuse/tdebase/ksysguard-slp-ratelimit.diff deleted file mode 100644 index 7859ed096..000000000 --- a/opensuse/tdebase/ksysguard-slp-ratelimit.diff +++ /dev/null @@ -1,15 +0,0 @@ ---- ksysguard/gui/ksysguard.cc -+++ ksysguard/gui/ksysguard.cc -@@ -407,7 +407,11 @@ - } - - #if HAVE_SLP -- rescanSLP(); -+ static int rate; -+ if (++rate > 100) { -+ rate = 0; -+ rescanSLP(); -+ } - #endif - } - diff --git a/opensuse/tdebase/ksysguardd-openslp.diff b/opensuse/tdebase/ksysguardd-openslp.diff deleted file mode 100644 index 4cb0e3795..000000000 --- a/opensuse/tdebase/ksysguardd-openslp.diff +++ /dev/null @@ -1,288 +0,0 @@ ---- ksysguard/configure.in.in -+++ ksysguard/configure.in.in -@@ -45,5 +45,34 @@ - AC_SUBST(LIBHOSTS) - AC_SUBST(LIBSENSORS) - -+# check for SLP -+dnl define the configure option that disables slp -+AC_ARG_ENABLE(slp, [ --disable-slp don't require libslp (ksysguard do not find daemons) ], with_slp=$enableval, with_slp=yes) -+if test "$with_slp" = "yes"; then -+AC_MSG_CHECKING(for SLP support) -+save_slptest_LIBS="$LIBS" -+save_slptest_LDFLAGS="$LDFLAGS" -+save_slptest_CPPFLAGS="$CPPFLAGS" -+LDFLAGS="$all_libraries $LDFLAGS" -+CPPFLAGS="$CPPFLAGS $all_includes" -+LIBS="-lslp" -+AC_TRY_LINK( [ -+ #include -+ ],[ -+ SLPOpen(0, SLP_FALSE, (SLPHandle*) 0); -+ ],[ -+ AC_DEFINE(HAVE_SLP,1,[Define if SLP is available]) -+ LIB_SLP="-lslp" -+ AC_MSG_RESULT(yes) -+ ],[ -+ AC_MSG_RESULT(no) -+ LIB_SLP="" -+]) -+CPPFLAGS=$save_slptest_CPPFLAGS -+LDFLAGS=$save_slptest_LDFLAGS -+LIBS=$save_slptest_LIBS -+fi -+AC_SUBST(LIB_SLP) -+ - dnl Check for dell laptop support - AM_CONDITIONAL(supports_i8k, test -f /proc/i8k) ---- ksysguard/example/ksysguarddrc -+++ ksysguard/example/ksysguarddrc -@@ -1,5 +1,8 @@ - # /etc/ksysguardd.conf - -+# refresh SLP registration -+SLPrefresh=1800 -+ - # LogFiles: the list of all available logfiles - LogFiles=messages:/var/log/messages,kern:/var/log/kern.log,daemon:/var/log/daemon.log - ---- ksysguard/gui/Makefile.am -+++ ksysguard/gui/Makefile.am -@@ -31,7 +31,7 @@ - ksysguard_LDADD = \ - ksgrd/libksgrd.la \ - SensorDisplayLib/libsensordisplays.la \ -- $(LIB_KDEUI) $(LIB_KIO) $(LIB_KDNSSD) -+ $(LIB_KDEUI) $(LIB_KIO) $(LIB_KDNSSD) $(LIB_SLP) - ksysguard_LDFLAGS = $(all_libraries) $(KDE_RPATH) - - kpm_SOURCES = kpm.c ---- ksysguard/gui/ksysguard.cc -+++ ksysguard/gui/ksysguard.cc -@@ -34,6 +34,8 @@ - #include - #include - -+#include -+ - #include - #include - #include -@@ -280,6 +282,46 @@ - mSplitter->setSizes( sizes ); - } - -+#if HAVE_SLP -+ -+SLPBoolean MySLPSrvURLCallback( SLPHandle phslp, -+ const char* srvurl, -+ unsigned short lifetime, -+ SLPError errcode, -+ void* cookie ) -+{ -+ QRegExp r("^service:ksysguardd.kde://(\\w+):(.*)$"); -+ -+ if ( r.search(srvurl) >= 0 ){ -+ QString host( r.cap(1) ); -+ int port = r.cap(2).toInt() ; -+ -+ if ( !host.isEmpty() && port > 0 ) -+ KSGRD::SensorMgr->engage( host, "", "", port ); -+ }; -+ return SLP_TRUE; -+} -+ -+void TopLevel::rescanSLP( bool enableErrorPopup ) -+{ -+ SLPHandle phslp; -+ SLPError result; -+ result = SLPOpen( NULL, SLP_FALSE, &phslp); -+ if (result != SLP_OK) -+ qWarning( "SLPOpen failed" ); // TODO: KMessagebox -+ else { -+ result = SLPFindSrvs( phslp, -+ "service:ksysguardd.kde", -+ "", // TODO: Scope selector -+ "", // all services -+ MySLPSrvURLCallback, -+ this ); -+ if (result != SLP_OK) -+ qWarning( "unable to register SLP service" ); // TODO: KMessageBox -+ } -+} -+#endif -+ - void TopLevel::initStatusBar() - { - KSGRD::SensorMgr->engage( "localhost", "", "ksysguardd" ); -@@ -363,6 +405,10 @@ - KSGRD::SensorMgr->sendRequest( "localhost", "mem/swap/used", - (KSGRD::SensorClient*)this, 4 ); - } -+ -+#if HAVE_SLP -+ rescanSLP(); -+#endif - } - - bool TopLevel::queryClose() ---- ksysguard/gui/ksysguard.h -+++ ksysguard/gui/ksysguard.h -@@ -24,6 +24,8 @@ - #ifndef KSG_KSYSGUARD_H - #define KSG_KSYSGUARD_H - -+#include -+ - #include - - #include -@@ -34,6 +36,10 @@ - - #include - -+#if HAVE_SLP -+#include -+#endif -+ - class KRecentFilesAction; - class KToggleAction; - -@@ -77,6 +83,9 @@ - virtual void customEvent( QCustomEvent* ); - virtual void timerEvent( QTimerEvent* ); - virtual bool queryClose(); -+#if HAVE_SLP -+ virtual void rescanSLP( bool enableErrorPopup = FALSE ); -+#endif - - protected slots: - void connectHost(); ---- ksysguard/ksysguardd/Makefile.am -+++ ksysguard/ksysguardd/Makefile.am -@@ -31,5 +31,5 @@ - bin_PROGRAMS = ksysguardd - - ksysguardd_SOURCES = Command.c conf.c ksysguardd.c PWUIDCache.c --ksysguardd_LDFLAGS = $(all_libraries) -+ksysguardd_LDFLAGS = $(all_libraries) $(LIB_SLP) - ksysguardd_LDADD = $(top_builddir)/ksysguard/ksysguardd/$(UNAME)/libksysguardd.a ../CContLib/libccont.a -lkdefakes_nonpic $(LIBHOSTS) $(LIB_DNSSD) $(LIB_KINFO) ---- ksysguard/ksysguardd/conf.c -+++ ksysguard/ksysguardd/conf.c -@@ -56,6 +56,7 @@ - char *begin, *token, *tmp; - ConfigLogFile *confLog; - -+ confSLPrefresh = 0; - LogFileList = new_ctnr(); - SensorList = new_ctnr(); - -@@ -93,6 +94,10 @@ - if ( line[ strlen( line ) - 1 ] == '\n' ) - line[ strlen( line ) - 1 ] = '\0'; - -+ if ( !strncmp( line, "SLPrefresh=", 11 ) ) { -+ confSLPrefresh = atoi( line + 11 ); -+ }; -+ - if ( !strncmp( line, "RegisterDomain",14) && (begin = strchr( line, '=' )) ) RegisterDomain=strdup(begin+1); - - if ( !strncmp( line, "LogFiles", 8 ) && (begin = strchr( line, '=' )) ) { ---- ksysguard/ksysguardd/conf.h -+++ ksysguard/ksysguardd/conf.h -@@ -30,6 +30,8 @@ - - extern char* RegisterDomain; - -+short confSLPrefresh; -+ - void parseConfigFile( const char *filename ); - void freeConfigFile(); - ---- ksysguard/ksysguardd/ksysguardd.c -+++ ksysguard/ksysguardd/ksysguardd.c -@@ -43,6 +43,10 @@ - #ifdef HAVE_DNSSD - #include - #endif -+#if HAVE_SLP -+#include -+#endif -+ - #include "modules.h" - - #include "ksysguardd.h" -@@ -348,6 +352,62 @@ - #endif - - -+#if HAVE_SLP -+void mySLPRegReport(SLPHandle hslp, SLPError errcode, void *cookie) -+{ -+ if (errcode) -+ log_error( "SLP (de)registration error" ); -+} -+ -+void register_slp(); -+ -+void refresh_slp() -+{ -+ register_slp(); -+} -+ -+void register_slp() -+{ -+ SLPHandle phslp; -+ SLPError result; -+ int slp_timeout = confSLPrefresh; -+ struct sigaction act, oact; -+ -+ if ( slp_timeout < 120 ) /* do not bomb the slp server with wrong config */ -+ slp_timeout = 120 ; -+ if ( slp_timeout > SLP_LIFETIME_MAXIMUM ) -+ slp_timeout = SLP_LIFETIME_MAXIMUM; -+ -+ result = SLPOpen( NULL, SLP_FALSE, &phslp); -+ if (result != SLP_OK) -+ log_error( "SLPOpen failed" ); -+ else { -+ char hostname[1024]; -+ char SLPServiceUrl[2048]; -+ gethostname( hostname, 1023 ); -+ snprintf( SLPServiceUrl, 1023, "service:ksysguardd.kde://%s:%i", hostname, SocketPort ); -+ -+ result = SLPReg( phslp, -+ SLPServiceUrl, -+ slp_timeout, -+ 0, -+ "", -+ SLP_TRUE, -+ mySLPRegReport, -+ 0 ); -+ -+ if (result != SLP_OK) -+ log_error( "unable to register SLP service" ); -+ SLPClose( phslp ); -+ -+ act.sa_handler = refresh_slp; -+ if (0 != sigaction(SIGALRM, &act, &oact)) -+ log_error("Error establishing signal handler for SLP"); -+ alarm(slp_timeout - 15); -+ } -+} -+#endif -+ - int createServerSocket() - { - int i = 1; -@@ -402,6 +462,10 @@ - ServiceSocket = DNSServiceRefSockFD(Ref); - #endif - -+#if HAVE_SLP -+ if ( BindToAllInterfaces ) -+ register_slp(); -+#endif - return newSocket; - } - diff --git a/opensuse/tdebase/ksysguardd.init b/opensuse/tdebase/ksysguardd.init deleted file mode 100644 index 3be2cba3b..000000000 --- a/opensuse/tdebase/ksysguardd.init +++ /dev/null @@ -1,80 +0,0 @@ -#! /bin/sh -# Copyright (c) 1995-2001 SuSE GmbH Nuernberg, Germany. -# -# Author: adrian@suse.de -# -# /etc/init.d/ksysguardd -# and its symbolic link -# /usr/sbin/rcksysguardd -# -### BEGIN INIT INFO -# Provides: ksysguardd -# Required-Start: $time $named -# Should-Start: $syslog slpd -# Required-Stop: $null -# Default-Start: 3 5 -# Default-Stop: 0 1 2 4 6 -# Description: remote monitor daemon for ksysguard -# Short-Description: remote monitor daemon for ksysguard -### END INIT INFO - -. /etc/rc.status -test -e /etc/rc.config && source /etc/rc.config - -# Determine the base and follow a runlevel link name. -base=${0##*/} -link=${base#*[SK][0-9][0-9]} - -# Force execution if not called by a runlevel directory. -test -x /usr/bin/ksysguardd || exit 0 - -rc_reset -case "$1" in - start) - echo -n "Starting remote monitor daemon for ksysguard " - - /usr/bin/ksysguardd -d -i >/dev/null - rc_status -v - ;; - stop) - if [ -e /var/run/ksysguardd.pid ]; then - echo -n "Shutting down remote monitor daemon for ksysguard " - killproc -p /var/run/ksysguardd.pid -TERM /usr/bin/ksysguardd - rc_status -v - fi - ;; - try-restart|condrestart) - if test "$1" = "condrestart"; then - echo "${attn} Use try-restart ${done}(LSB)${attn} rather than condrestart ${warn}(RH)${norm}" - fi - $0 status - if test $? = 0; then - $0 restart - else - rc_reset # Not running is not a failure. - fi - # Remember status and be quiet - rc_status - ;; - restart|force-reload) - ## If first returns OK call the second, if first or - ## second command fails, set echo return value. - $0 stop; sleep 1 && $0 start - rc_status - ;; - reload) - $0 stop && $0 start - rc_status - ;; - status) - echo -n "Checking for remote monitor daemon for ksysguard " - - checkproc -p /var/run/ksysguardd.pid /usr/bin/ksysguardd - rc_status -v - ;; - *) - echo "Usage: $0 {start|stop|status|restart|reload|try-restart|force-reload}" - exit 1 - ;; -esac -rc_exit diff --git a/opensuse/tdebase/ksysguardd.reg b/opensuse/tdebase/ksysguardd.reg deleted file mode 100644 index 889cb252f..000000000 --- a/opensuse/tdebase/ksysguardd.reg +++ /dev/null @@ -1,12 +0,0 @@ -############################################################################# -# -# OpenSLP registration file -# -# register ksysguard daemon -# -############################################################################# - -service:ksysguardd.kde://$HOSTNAME:3112,en,65535 -watch-port-udp=3112 -description=KDE ksysguard daemon - diff --git a/opensuse/tdebase/kwinbindings.diff b/opensuse/tdebase/kwinbindings.diff deleted file mode 100644 index 51069e5b3..000000000 --- a/opensuse/tdebase/kwinbindings.diff +++ /dev/null @@ -1,43 +0,0 @@ -Index: kwin/kwinbindings.cpp -=================================================================== ---- kwin/kwinbindings.cpp.orig -+++ kwin/kwinbindings.cpp -@@ -119,22 +119,22 @@ - DEF( I18N_NOOP("Switch to Desktop 2"), CTRL+Qt::Key_F2, WIN+Qt::Key_F2, slotSwitchToDesktop(int) ); - DEF( I18N_NOOP("Switch to Desktop 3"), CTRL+Qt::Key_F3, WIN+Qt::Key_F3, slotSwitchToDesktop(int) ); - DEF( I18N_NOOP("Switch to Desktop 4"), CTRL+Qt::Key_F4, WIN+Qt::Key_F4, slotSwitchToDesktop(int) ); -- DEF( I18N_NOOP("Switch to Desktop 5"), CTRL+Qt::Key_F5, WIN+Qt::Key_F5, slotSwitchToDesktop(int) ); -- DEF( I18N_NOOP("Switch to Desktop 6"), CTRL+Qt::Key_F6, WIN+Qt::Key_F6, slotSwitchToDesktop(int) ); -- DEF( I18N_NOOP("Switch to Desktop 7"), CTRL+Qt::Key_F7, WIN+Qt::Key_F7, slotSwitchToDesktop(int) ); -- DEF( I18N_NOOP("Switch to Desktop 8"), CTRL+Qt::Key_F8, WIN+Qt::Key_F8, slotSwitchToDesktop(int) ); -- DEF( I18N_NOOP("Switch to Desktop 9"), CTRL+Qt::Key_F9, WIN+Qt::Key_F9, slotSwitchToDesktop(int) ); -- DEF( I18N_NOOP("Switch to Desktop 10"), CTRL+Qt::Key_F10, WIN+Qt::Key_F10, slotSwitchToDesktop(int) ); -- DEF( I18N_NOOP("Switch to Desktop 11"), CTRL+Qt::Key_F11, 0, slotSwitchToDesktop(int) ); -- DEF( I18N_NOOP("Switch to Desktop 12"), CTRL+Qt::Key_F12, 0, slotSwitchToDesktop(int) ); -- DEF( I18N_NOOP("Switch to Desktop 13"), CTRL+SHIFT+Qt::Key_F1, 0, slotSwitchToDesktop(int) ); -- DEF( I18N_NOOP("Switch to Desktop 14"), CTRL+SHIFT+Qt::Key_F2, 0, slotSwitchToDesktop(int) ); -- DEF( I18N_NOOP("Switch to Desktop 15"), CTRL+SHIFT+Qt::Key_F3, 0, slotSwitchToDesktop(int) ); -- DEF( I18N_NOOP("Switch to Desktop 16"), CTRL+SHIFT+Qt::Key_F4, 0, slotSwitchToDesktop(int) ); -- DEF( I18N_NOOP("Switch to Desktop 17"), CTRL+SHIFT+Qt::Key_F5, 0, slotSwitchToDesktop(int) ); -- DEF( I18N_NOOP("Switch to Desktop 18"), CTRL+SHIFT+Qt::Key_F6, 0, slotSwitchToDesktop(int) ); -- DEF( I18N_NOOP("Switch to Desktop 19"), CTRL+SHIFT+Qt::Key_F7, 0, slotSwitchToDesktop(int) ); -- DEF( I18N_NOOP("Switch to Desktop 20"), CTRL+SHIFT+Qt::Key_F8, 0, slotSwitchToDesktop(int) ); -+ DEF( I18N_NOOP("Switch to Desktop 5"), 0, WIN+Qt::Key_F5, slotSwitchToDesktop(int) ); -+ DEF( I18N_NOOP("Switch to Desktop 6"), 0, WIN+Qt::Key_F6, slotSwitchToDesktop(int) ); -+ DEF( I18N_NOOP("Switch to Desktop 7"), 0, WIN+Qt::Key_F7, slotSwitchToDesktop(int) ); -+ DEF( I18N_NOOP("Switch to Desktop 8"), 0, WIN+Qt::Key_F8, slotSwitchToDesktop(int) ); -+ DEF( I18N_NOOP("Switch to Desktop 9"), 0, WIN+Qt::Key_F9, slotSwitchToDesktop(int) ); -+ DEF( I18N_NOOP("Switch to Desktop 10"), 0, WIN+Qt::Key_F10, slotSwitchToDesktop(int) ); -+ DEF( I18N_NOOP("Switch to Desktop 11"), 0, 0, slotSwitchToDesktop(int) ); -+ DEF( I18N_NOOP("Switch to Desktop 12"), 0, 0, slotSwitchToDesktop(int) ); -+ DEF( I18N_NOOP("Switch to Desktop 13"), 0, 0, slotSwitchToDesktop(int) ); -+ DEF( I18N_NOOP("Switch to Desktop 14"), 0, 0, slotSwitchToDesktop(int) ); -+ DEF( I18N_NOOP("Switch to Desktop 15"), 0, 0, slotSwitchToDesktop(int) ); -+ DEF( I18N_NOOP("Switch to Desktop 16"), 0, 0, slotSwitchToDesktop(int) ); -+ DEF( I18N_NOOP("Switch to Desktop 17"), 0, 0, slotSwitchToDesktop(int) ); -+ DEF( I18N_NOOP("Switch to Desktop 18"), 0, 0, slotSwitchToDesktop(int) ); -+ DEF( I18N_NOOP("Switch to Desktop 19"), 0, 0, slotSwitchToDesktop(int) ); -+ DEF( I18N_NOOP("Switch to Desktop 20"), 0, 0, slotSwitchToDesktop(int) ); - DEF( I18N_NOOP("Switch to Next Desktop"), 0, 0, slotSwitchDesktopNext() ); - DEF( I18N_NOOP("Switch to Previous Desktop"), 0, 0, slotSwitchDesktopPrevious() ); - DEF( I18N_NOOP("Switch One Desktop to the Right"), 0, 0, slotSwitchDesktopRight() ); diff --git a/opensuse/tdebase/kxkb-include-latin-layout.diff b/opensuse/tdebase/kxkb-include-latin-layout.diff deleted file mode 100644 index a0b09a3c5..000000000 --- a/opensuse/tdebase/kxkb-include-latin-layout.diff +++ /dev/null @@ -1,14 +0,0 @@ -Index: kxkb/kcmlayout.cpp -=================================================================== ---- kxkb/kcmlayout.cpp.orig -+++ kxkb/kcmlayout.cpp -@@ -352,6 +352,9 @@ void LayoutConfig::add() - // Create a copy of the sel widget, as one might add the same layout more - // than one time, with different variants. - QListViewItem* toadd = copyLVI(sel, widget->listLayoutsDst); -+ -+ // Turn on "Include Latin layout" for new language by default (bnc:204402) -+ toadd->setText(LAYOUT_COLUMN_INCLUDE, "us"); - - widget->listLayoutsDst->insertItem(toadd); - if( widget->listLayoutsDst->childCount() > 1 ) diff --git a/opensuse/tdebase/less_verbal_kdesu.patch b/opensuse/tdebase/less_verbal_kdesu.patch deleted file mode 100644 index fd5375836..000000000 --- a/opensuse/tdebase/less_verbal_kdesu.patch +++ /dev/null @@ -1,26 +0,0 @@ -Index: kdesu/kdesu/sudlg.cpp -=================================================================== ---- kdesu/kdesu/sudlg.cpp.orig -+++ kdesu/kdesu/sudlg.cpp -@@ -29,18 +29,10 @@ KDEsuDialog::KDEsuDialog(QCString user, - setCaption(i18n("Run as %1").arg(user)); - - QString prompt; -- if (superUserCommand == "sudo" && m_User == "root") { -- prompt = i18n("Please enter your password." ); -+ if (m_User == "root") { -+ prompt = i18n("Please enter the Administrator (root) password to continue."); - } else { -- if (m_User == "root") { -- prompt = i18n("The action you requested needs root privileges. " -- "Please enter root's password below or click " -- "Ignore to continue with your current privileges."); -- } else { -- prompt = i18n("The action you requested needs additional privileges. " -- "Please enter the password for \"%1\" below or click " -- "Ignore to continue with your current privileges.").arg(m_User); -- } -+ prompt = i18n("Please enter password for \"%1\" to continue.").arg(m_User); - } - setPrompt(prompt); - diff --git a/opensuse/tdebase/libkonq-kdemm.diff b/opensuse/tdebase/libkonq-kdemm.diff deleted file mode 100644 index 6eb45eab4..000000000 --- a/opensuse/tdebase/libkonq-kdemm.diff +++ /dev/null @@ -1,117 +0,0 @@ -Index: libkonq/Makefile.am -=================================================================== ---- libkonq/Makefile.am.orig -+++ libkonq/Makefile.am -@@ -53,14 +53,10 @@ include_HEADERS = konq_popupmenu.h knewm - konq_faviconmgr.h konq_xmlguiclient.h konqbookmarkmanager.h konq_filetip.h - - --if include_ARTS --ARTS_MODULE = konq_sound.la --endif -- --kde_module_LTLIBRARIES = $(ARTS_MODULE) -+kde_module_LTLIBRARIES = konq_sound.la - konq_sound_la_SOURCES = konq_sound.cc - konq_sound_la_LDFLAGS = $(all_libraries) -module $(KDE_PLUGIN) --konq_sound_la_LIBADD = -lsoundserver_idl -lartskde -+konq_sound_la_LIBADD = -lkdemm - - noinst_HEADERS = konq_sound.h - -Index: libkonq/konq_sound.cc -=================================================================== ---- libkonq/konq_sound.cc.orig -+++ libkonq/konq_sound.cc -@@ -16,10 +16,9 @@ - Boston, MA 02110-1301, USA. - */ - --#include - #include --#include --#include -+#include -+#include - - #include "konq_sound.h" - -@@ -39,71 +38,38 @@ public: - private: - QStringList m_mimeTypes; - -- KArtsDispatcher m_dispatcher; -- Arts::SoundServerV2 m_soundServer; -- KDE::PlayObjectFactory *m_factory; -- KDE::PlayObject *m_player; -+ KDE::Multimedia::SimplePlayer m_player; - }; - - KonqSoundPlayerImpl::KonqSoundPlayerImpl() -- : m_player(0) - { -- m_soundServer = Arts::Reference("global:Arts_SoundServerV2"); -- m_factory = new KDE::PlayObjectFactory(m_soundServer); - } - - KonqSoundPlayerImpl::~KonqSoundPlayerImpl() - { -- delete m_player; -- delete m_factory; - } - - const QStringList &KonqSoundPlayerImpl::mimeTypes() - { -- if (m_mimeTypes.isEmpty()) -- { -- Arts::TraderQuery query; -- vector *offers = query.query(); -- -- for (vector::iterator it = offers->begin(); -- it != offers->end(); ++it) -- { -- vector *prop = (*it).getProperty("MimeType"); -- for (vector::iterator mt = prop->begin(); -- mt != prop->end(); ++mt) -- if ((*mt).length()) // && (*mt).find("video/") == string::npos) -- m_mimeTypes << (*mt).c_str(); -- delete prop; -- } -- delete offers; -- } -+ if( m_mimeTypes.isEmpty() ) -+ m_mimeTypes = KDE::Multimedia::Factory::self()->playableMimeTypes(); -+ - return m_mimeTypes; - } - - void KonqSoundPlayerImpl::play(const QString &fileName) - { -- if (m_soundServer.isNull()) -- return; -- -- delete m_player; -- if ((m_player = m_factory->createPlayObject(fileName, true))) -- { -- if (m_player->isNull()) -- stop(); -- else -- m_player->play(); -- } -+ m_player.play( KURL( fileName ) ); - } - - void KonqSoundPlayerImpl::stop() - { -- delete m_player; -- m_player = 0; -+ m_player.stop(); - } - - bool KonqSoundPlayerImpl::isPlaying() - { -- return m_player ? (m_player->state() == Arts::posPlaying) : false; -+ return m_player.isPlaying(); - } - - class KonqSoundFactory : public KLibFactory diff --git a/opensuse/tdebase/locale-dont-show-flag.diff b/opensuse/tdebase/locale-dont-show-flag.diff deleted file mode 100644 index 2c0a57454..000000000 --- a/opensuse/tdebase/locale-dont-show-flag.diff +++ /dev/null @@ -1,33 +0,0 @@ -Index: kcontrol/locale/kcmlocale.cpp -=================================================================== ---- kcontrol/locale/kcmlocale.cpp.orig -+++ kcontrol/locale/kcmlocale.cpp -@@ -292,9 +292,13 @@ void KLocaleConfig::loadCountryList() - QString map( locate( "locale", - QString::fromLatin1( "l10n/%1.png" ) - .arg(tag) ) ); -+#if 0 - QIconSet icon; - if ( !map.isNull() ) - icon = KGlobal::iconLoader()->loadIconSet(map, KIcon::Small); -+#else -+ QIconSet icon; -+#endif - m_comboCountry->insertSubmenu( icon, name, tag, sub, -2 ); - } - -@@ -318,10 +322,14 @@ void KLocaleConfig::loadCountryList() - tag = tag.mid(index + 1); - int menu_index = submenu.isEmpty() ? -1 : -2; - -+#if 0 - QString flag( locate( "locale", - QString::fromLatin1( "l10n/%1/flag.png" ) - .arg(tag) ) ); - QIconSet icon( KGlobal::iconLoader()->loadIconSet(flag, KIcon::Small) ); -+#else -+ QIconSet icon; -+#endif - m_comboCountry->insertItem( icon, name, tag, submenu, menu_index ); - } - diff --git a/opensuse/tdebase/lock-xvkbd.diff b/opensuse/tdebase/lock-xvkbd.diff deleted file mode 100644 index 9b5faae8a..000000000 --- a/opensuse/tdebase/lock-xvkbd.diff +++ /dev/null @@ -1,380 +0,0 @@ -Index: kdesktop/lock/lockprocess.cc -=================================================================== ---- kdesktop/lock/lockprocess.cc.orig -+++ kdesktop/lock/lockprocess.cc -@@ -36,6 +36,8 @@ - #include - #include - #include -+#include -+#include - - #include - #include -@@ -93,6 +95,8 @@ static Window gVRootData = 0; - static Atom gXA_VROOT; - static Atom gXA_SCREENSAVER_VERSION; - -+extern Atom qt_wm_state; -+ - //=========================================================================== - // - // Screen saver handling process. Handles screensaver window, -@@ -108,7 +112,9 @@ LockProcess::LockProcess(bool child, boo - mVisibility(false), - mRestoreXF86Lock(false), - mForbidden(false), -- mAutoLogout(false) -+ mAutoLogout(false), -+ mVkbdProcess(NULL), -+ mKWinModule(NULL) - { - setupSignals(); - -@@ -909,10 +915,14 @@ bool LockProcess::checkPass() - { - if (mAutoLogout) - killTimer(mAutoLogoutTimerId); -+ -+ showVkbd(); - - PasswordDlg passDlg( this, &greetPlugin); - - int ret = execDialog( &passDlg ); -+ -+ hideVkbd(); - - XWindowAttributes rootAttr; - XGetWindowAttributes(qt_xdisplay(), RootWindow(qt_xdisplay(), -@@ -992,9 +1002,13 @@ bool LockProcess::x11Event(XEvent *event - { - switch (event->type) - { -- case KeyPress: - case ButtonPress: - case MotionNotify: -+ case ButtonRelease: -+ if( forwardVkbdEvent( event )) -+ return true; // filter out -+ // fall through -+ case KeyPress: - if (mBusy || !mDialogs.isEmpty()) - break; - mBusy = true; -@@ -1031,11 +1045,30 @@ bool LockProcess::x11Event(XEvent *event - case ConfigureNotify: // from SubstructureNotifyMask on the root window - if(event->xconfigure.event == qt_xrootwin()) - stayOnTop(); -+ for( QValueList< VkbdWindow >::Iterator it = mVkbdWindows.begin(); -+ it != mVkbdWindows.end(); -+ ++it ) { -+ if( (*it).id == event->xconfigure.window ) { -+ (*it).rect = QRect( event->xconfigure.x, event->xconfigure.y, -+ event->xconfigure.width, event->xconfigure.height ); -+ break; -+ } -+ } - break; - case MapNotify: // from SubstructureNotifyMask on the root window -+ windowAdded( event->xmap.window, false ); - if( event->xmap.event == qt_xrootwin()) - stayOnTop(); - break; -+ case DestroyNotify: -+ for( QValueList< VkbdWindow >::Iterator it = mVkbdWindows.begin(); -+ it != mVkbdWindows.end(); -+ ++it ) -+ if( (*it).id == event->xdestroywindow.window ) { -+ mVkbdWindows.remove( it ); -+ break; -+ } -+ break; - } - - // We have grab with the grab window being the root window. -@@ -1060,17 +1093,24 @@ bool LockProcess::x11Event(XEvent *event - - void LockProcess::stayOnTop() - { -- if(!mDialogs.isEmpty()) -+ if(!mDialogs.isEmpty() || !mVkbdWindows.isEmpty()) - { - // this restacking is written in a way so that - // if the stacking positions actually don't change, - // all restacking operations will be no-op, - // and no ConfigureNotify will be generated, - // thus avoiding possible infinite loops -- XRaiseWindow( qt_xdisplay(), mDialogs.first()->winId()); // raise topmost -+ if( !mVkbdWindows.isEmpty()) -+ XRaiseWindow( qt_xdisplay(), mVkbdWindows.first().id ); -+ else -+ XRaiseWindow( qt_xdisplay(), mDialogs.first()->winId()); // raise topmost - // and stack others below it -- Window* stack = new Window[ mDialogs.count() + 1 ]; -+ Window* stack = new Window[ mDialogs.count() + mVkbdWindows.count() + 1 ]; - int count = 0; -+ for( QValueList< VkbdWindow >::ConstIterator it = mVkbdWindows.begin(); -+ it != mVkbdWindows.end(); -+ ++it ) -+ stack[ count++ ] = (*it).id; - for( QValueList< QWidget* >::ConstIterator it = mDialogs.begin(); - it != mDialogs.end(); - ++it ) -@@ -1169,4 +1209,200 @@ void LockProcess::msgBox( QMessageBox::I - execDialog( &box ); - } - -+static int run_vkbd = -1; -+void LockProcess::showVkbd() -+{ -+ if( run_vkbd == - 1 ) { -+ int status = system( "hal-find-by-property --key system.formfactor.subtype --string tabletpc" ); -+// status = 0; // enable for testing -+ run_vkbd = ( WIFEXITED( status ) && WEXITSTATUS( status ) == 0 -+ && !KStandardDirs::findExe( "xvkbd" ).isEmpty()) ? 1 : 0; -+ } -+ if( run_vkbd ) { -+ mVkbdWindows.clear(); -+ mVkbdLastEventWindow = None; -+ mKWinModule = new KWinModule( NULL, KWinModule::INFO_WINDOWS ); -+ connect( mKWinModule, SIGNAL( windowAdded( WId )), SLOT( windowAdded( WId ))); -+ mVkbdProcess = new KProcess; -+ *mVkbdProcess << "xvkbd" << "-compact" << "-geometry" << "-0-0" << "-xdm"; -+ mVkbdProcess->start(); -+ } -+} -+ -+void LockProcess::hideVkbd() -+{ -+ if( mVkbdProcess != NULL ) { -+ mVkbdProcess->kill(); -+ delete mVkbdProcess; -+ mVkbdProcess = NULL; -+ delete mKWinModule; -+ mKWinModule = NULL; -+ mVkbdWindows.clear(); -+ } -+} -+ -+void LockProcess::windowAdded( WId w ) -+{ -+ windowAdded( w, true ); -+} -+ -+void LockProcess::windowAdded( WId w, bool managed ) -+{ -+ KWin::WindowInfo info = KWin::windowInfo( w, 0, NET::WM2WindowClass ); -+ if( info.windowClassClass().lower() != "xvkbd" ) -+ return; -+ // Unmanaged windows (i.e. popups) don't currently work anyway, since they -+ // don't have WM_CLASS set anyway. I could perhaps try tricks with X id -+ // ranges if really needed. -+ if( managed ) { -+ // withdraw the window, wait for it to be withdrawn, reparent it directly -+ // to root at the right position -+ XWithdrawWindow( qt_xdisplay(), w, qt_xscreen()); -+ for(;;) { -+ Atom type; -+ int format; -+ unsigned long length, after; -+ unsigned char *data; -+ int r = XGetWindowProperty( qt_xdisplay(), w, qt_wm_state, 0, 2, -+ false, AnyPropertyType, &type, &format, -+ &length, &after, &data ); -+ bool withdrawn = true; -+ if ( r == Success && data && format == 32 ) { -+ Q_UINT32 *wstate = (Q_UINT32*)data; -+ withdrawn = (*wstate == WithdrawnState ); -+ XFree( (char *)data ); -+ } -+ if( withdrawn ) -+ break; -+ } -+ } -+ XSelectInput( qt_xdisplay(), w, StructureNotifyMask ); -+ XWindowAttributes attr_geom; -+ if( !XGetWindowAttributes( qt_xdisplay(), w, &attr_geom )) -+ return; -+ int x = XDisplayWidth( qt_xdisplay(), qt_xscreen()) - attr_geom.width; -+ int y = XDisplayHeight( qt_xdisplay(), qt_xscreen()) - attr_geom.height; -+ if( managed ) { -+ XSetWindowAttributes attr; -+ attr.override_redirect = True; -+ XChangeWindowAttributes( qt_xdisplay(), w, CWOverrideRedirect, &attr ); -+ XReparentWindow( qt_xdisplay(), w, qt_xrootwin(), x, y ); -+ XMapWindow( qt_xdisplay(), w ); -+ } -+ VkbdWindow data; -+ data.id = w; -+ data.rect = QRect( x, y, attr_geom.width, attr_geom.height ); -+ mVkbdWindows.prepend( data ); -+} -+ -+bool LockProcess::forwardVkbdEvent( XEvent* event ) -+{ -+ if( mVkbdProcess == NULL ) -+ return false; -+ QPoint pos; -+ Time time; -+ switch( event->type ) -+ { -+ case ButtonPress: -+ case ButtonRelease: -+ pos = QPoint( event->xbutton.x, event->xbutton.y ); -+ time = event->xbutton.time; -+ break; -+ case MotionNotify: -+ pos = QPoint( event->xmotion.x, event->xmotion.y ); -+ time = event->xmotion.time; -+ break; -+ default: -+ return false; -+ } -+ // vkbd windows are kept topmost, so just find the first one in the position -+ for( QValueList< VkbdWindow >::ConstIterator it = mVkbdWindows.begin(); -+ it != mVkbdWindows.end(); -+ ++it ) { -+ if( (*it).rect.contains( pos )) { -+ // Find the subwindow where the event should actually go. -+ // Not exactly cheap in the number of X roundtrips but oh well. -+ Window window = (*it).id; -+ Window root, child; -+ int root_x, root_y, x, y; -+ unsigned int mask; -+ for(;;) { -+ if( !XQueryPointer( qt_xdisplay(), window, &root, &child, &root_x, &root_y, &x, &y, &mask )) -+ return false; -+ if( child == None ) -+ break; -+ window = child; -+ } -+ switch( event->type ) -+ { -+ case ButtonPress: -+ case ButtonRelease: -+ event->xbutton.x = x; -+ event->xbutton.y = y; -+ event->xbutton.subwindow = None; -+ break; -+ case MotionNotify: -+ event->xmotion.x = x; -+ event->xmotion.y = y; -+ event->xmotion.subwindow = None; -+ break; -+ } -+ event->xany.window = window; -+ sendVkbdFocusInOut( window, time ); -+ XSendEvent( qt_xdisplay(), window, False, 0, event ); -+ return true; -+ } -+ } -+ sendVkbdFocusInOut( None, time ); -+ return false; -+} -+ -+// Fake EnterNotify/LeaveNotify events as the mouse moves. They're not sent by X -+// because of the grab and having them makes xvkbd highlight the buttons (but -+// not needed otherwise it seems). -+void LockProcess::sendVkbdFocusInOut( WId window, Time t ) -+{ -+ if( mVkbdLastEventWindow == window ) -+ return; -+ if( mVkbdLastEventWindow != None ) { -+ XEvent e; -+ e.xcrossing.type = LeaveNotify; -+ e.xcrossing.display = qt_xdisplay(); -+ e.xcrossing.window = mVkbdLastEventWindow; -+ e.xcrossing.root = qt_xrootwin(); -+ e.xcrossing.subwindow = None; -+ e.xcrossing.time = t; -+ e.xcrossing.x = 0; -+ e.xcrossing.y = 0; -+ e.xcrossing.x_root = -1; -+ e.xcrossing.y_root = -1; -+ e.xcrossing.mode = NotifyNormal; -+ e.xcrossing.detail = NotifyAncestor; -+ e.xcrossing.same_screen = True; -+ e.xcrossing.focus = False; -+ e.xcrossing.state = 0; -+ XSendEvent( qt_xdisplay(), mVkbdLastEventWindow, False, 0, &e ); -+ } -+ mVkbdLastEventWindow = window; -+ if( mVkbdLastEventWindow != None ) { -+ XEvent e; -+ e.xcrossing.type = EnterNotify; -+ e.xcrossing.display = qt_xdisplay(); -+ e.xcrossing.window = mVkbdLastEventWindow; -+ e.xcrossing.root = qt_xrootwin(); -+ e.xcrossing.subwindow = None; -+ e.xcrossing.time = t; -+ e.xcrossing.x = 0; -+ e.xcrossing.y = 0; -+ e.xcrossing.x_root = 0; -+ e.xcrossing.y_root = 0; -+ e.xcrossing.mode = NotifyNormal; -+ e.xcrossing.detail = NotifyAncestor; -+ e.xcrossing.same_screen = True; -+ e.xcrossing.focus = False; -+ e.xcrossing.state = 0; -+ XSendEvent( qt_xdisplay(), mVkbdLastEventWindow, False, 0, &e ); -+ } -+} -+ - #include "lockprocess.moc" -Index: kdesktop/lock/lockprocess.h -=================================================================== ---- kdesktop/lock/lockprocess.h.orig -+++ kdesktop/lock/lockprocess.h -@@ -23,6 +23,7 @@ - #include - - class KLibrary; -+class KWinModule; - - struct GreeterPluginHandle { - KLibrary *library; -@@ -53,7 +54,7 @@ public: - - void msgBox( QMessageBox::Icon type, const QString &txt ); - int execDialog( QDialog* dlg ); -- -+ - public slots: - void quitSaver(); - void preparePopup(); -@@ -70,6 +71,7 @@ private slots: - void suspend(); - void checkDPMSActive(); - void slotDeadTimePassed(); -+ void windowAdded( WId ); - - private: - void configure(); -@@ -93,6 +95,11 @@ private: - void stayOnTop(); - void lockXF86(); - void unlockXF86(); -+ void showVkbd(); -+ void hideVkbd(); -+ bool forwardVkbdEvent( XEvent* event ); -+ void sendVkbdFocusInOut( WId window, Time t ); -+ void windowAdded( WId window, bool managed ); - void resume( bool force ); - static QVariant getConf(void *ctx, const char *key, const QVariant &dflt); - -@@ -125,6 +132,15 @@ private: - int mAutoLogoutTimerId; - int mAutoLogoutTimeout; - bool mAutoLogout; -+ KProcess* mVkbdProcess; -+ KWinModule* mKWinModule; -+ struct VkbdWindow -+ { -+ WId id; -+ QRect rect; -+ }; -+ QValueList< VkbdWindow > mVkbdWindows; -+ WId mVkbdLastEventWindow; - }; - - #endif diff --git a/opensuse/tdebase/lowdiskspace.patch b/opensuse/tdebase/lowdiskspace.patch deleted file mode 100644 index a2ee05f54..000000000 --- a/opensuse/tdebase/lowdiskspace.patch +++ /dev/null @@ -1,413 +0,0 @@ -Subject: Dialog notifying about running low on disk space -From: Lubos Lunak -Feature: bnc#199054 -Patch-upstream: no - -Index: kioslave/media/medianotifier/Makefile.am -=================================================================== ---- kioslave/media/medianotifier/Makefile.am.orig -+++ kioslave/media/medianotifier/Makefile.am -@@ -5,7 +5,8 @@ kded_medianotifier_la_LDFLAGS = -module - kded_medianotifier_la_LIBADD = ../libmediacommon/libmediacommon.la $(LIB_KDECORE) \ - $(LIB_KDEUI) $(LIB_KIO) - kded_medianotifier_la_SOURCES = medianotifier.cpp medianotifier.skel \ -- notificationdialog.cpp notificationdialogview.ui -+ notificationdialog.cpp notificationdialogview.ui \ -+ freespacenotifier.cpp freespacewidget.ui - - noinst_HEADERS = medianotifier.h notificationdialog.h - -Index: kioslave/media/medianotifier/medianotifier.h -=================================================================== ---- kioslave/media/medianotifier/medianotifier.h.orig -+++ kioslave/media/medianotifier/medianotifier.h -@@ -27,6 +27,8 @@ - #include - #include - -+class FreeSpaceNotifier; -+ - class MediaNotifier: public KDEDModule - { - Q_OBJECT -@@ -52,6 +54,8 @@ private: - const QString &autoopenFile ); - - QMap m_allowNotificationMap; -+ FreeSpaceNotifier* m_freeSpaceNotifier; - }; -+ - #endif - -Index: kioslave/media/medianotifier/medianotifier.cpp -=================================================================== ---- kioslave/media/medianotifier/medianotifier.cpp.orig -+++ kioslave/media/medianotifier/medianotifier.cpp -@@ -36,6 +36,7 @@ - #include "notifiersettings.h" - #include "notifieraction.h" - #include "mediamanagersettings.h" -+#include "freespacenotifier.h" - - MediaNotifier::MediaNotifier(const QCString &name) : KDEDModule(name) - { -@@ -44,6 +45,8 @@ MediaNotifier::MediaNotifier(const QCStr - - connectDCOPSignal( "kded", "mediamanager", "mediumChanged(QString, bool)", - "onMediumChange(QString, bool)", true ); -+ -+ m_freeSpaceNotifier = new FreeSpaceNotifier( this ); - } - - MediaNotifier::~MediaNotifier() -@@ -53,6 +56,7 @@ MediaNotifier::~MediaNotifier() - - disconnectDCOPSignal( "kded", "mediamanager", "mediumChanged(QString, bool)", - "onMediumChange(QString, bool)" ); -+ delete m_freeSpaceNotifier; - } - - void MediaNotifier::onMediumChange( const QString &name, bool allowNotification ) -Index: kioslave/media/medianotifier/freespacenotifier.cpp -=================================================================== ---- /dev/null -+++ kioslave/media/medianotifier/freespacenotifier.cpp -@@ -0,0 +1,159 @@ -+/* This file is part of the KDE Project -+ Copyright (c) 2006 Lukas Tinkl -+ Copyright (c) 2008 Lubos Lunak -+ -+ This program is free software; you can redistribute it and/or modify -+ it under the terms of the GNU General Public License as published by -+ the Free Software Foundation; either version 2 of the License, or -+ (at your option) any later version. -+ -+ This program is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ GNU General Public License for more details. -+ -+ You should have received a copy of the GNU General Public License -+ along with this program. If not, see . -+*/ -+ -+#include "freespacenotifier.h" -+ -+#include -+#include -+ -+#include -+#include -+#include -+#include -+ -+#include -+#include -+#include -+#include -+ -+#include "freespacewidget.h" -+ -+ -+FreeSpaceNotifier::FreeSpaceNotifier( QObject* parent ) -+ : QObject( parent ) -+ , lastAvailTimer( NULL ) -+ , dialog( NULL ) -+ , lastAvail( -1 ) -+{ -+ connect( &timer, SIGNAL( timeout() ), SLOT( checkFreeDiskSpace() ) ); -+ KConfig cfg( "lowspacesuse", true ); // read only -+ KConfigGroup group( &cfg, "General" ); -+ limit = group.readNumEntry( "WarnMinimumFreeSpace", 200 ); // MiB -+ if( limit != 0 ) -+ timer.start( 1000 * 60 /* 1 minute */ ); -+} -+ -+FreeSpaceNotifier::~FreeSpaceNotifier() -+{ -+ delete dialog; -+} -+ -+void FreeSpaceNotifier::checkFreeDiskSpace() -+{ -+ if ( dialog ) -+ return; -+ struct statfs sfs; -+ if ( statfs( QFile::encodeName( QDir::homeDirPath() ), &sfs ) == 0 ) -+ { -+ long avail = ( getuid() ? sfs.f_bavail : sfs.f_bfree ); -+ -+ if (avail < 0 || sfs.f_blocks <= 0) -+ return; // we better do not say anything about it -+ -+ int availpct = int( 100 * avail / sfs.f_blocks ); -+ avail = ((long long)avail) * sfs.f_bsize / ( 1024 * 1024 ); // to MiB -+ bool warn = false; -+ if( avail < limit ) // avail disk space dropped under a limit -+ { -+ if( lastAvail < 0 ) // always warn the first time -+ { -+ lastAvail = avail; -+ warn = true; -+ } -+ else if( avail > lastAvail ) // the user freed some space -+ lastAvail = avail; // so warn if it goes low again -+ else if( avail < lastAvail * 0.5 ) // available dropped to a half of previous one, warn again -+ { -+ warn = true; -+ lastAvail = avail; -+ } -+ // do not change lastAvail otherwise, to handle free space slowly going down -+ } -+ if ( warn ) -+ { -+ dialog = new KDialogBase( -+ i18n( "Low Disk Space" ), -+ KDialogBase::Yes | KDialogBase::No | KDialogBase::Cancel, -+ KDialogBase::Yes, KDialogBase::No, -+ 0, "lowdiskspacedialog", false, true, -+ i18n( "Open File Manager" ), i18n( "Do Nothing" ), i18n( "Disable Warning" )); -+ widget = new FreeSpaceWidget( dialog ); -+ dialog->setMainWidget( widget ); -+ -+ QString text = i18n( "You are running low on disk space on your home partition (currently %2%, %1 MiB free)." ) -+ .arg( avail ).arg( availpct ); -+ widget->warningLabel->setText( text ); -+ widget->spinbox->setMinValue( 0 ); -+ widget->spinbox->setMaxValue( 100000 ); -+ widget->spinbox->setValue( limit ); -+ connect( dialog, SIGNAL( yesClicked() ), SLOT( slotYes() ) ); -+ connect( dialog, SIGNAL( noClicked() ), SLOT( slotNo() ) ); -+ connect( dialog, SIGNAL( cancelClicked() ), SLOT( slotCancel() ) ); -+ dialog->show(); -+ } -+ } -+} -+ -+void FreeSpaceNotifier::slotYes() -+{ -+ ( void ) new KRun( KURL::fromPathOrURL( QDir::homeDirPath() ) ); -+ cleanupDialog( widget->spinbox->value()); -+} -+ -+void FreeSpaceNotifier::slotNo() -+{ -+ cleanupDialog( widget->spinbox->value()); -+} -+ -+void FreeSpaceNotifier::slotCancel() -+{ -+ cleanupDialog( 0 ); // set limit to zero -+} -+ -+void FreeSpaceNotifier::cleanupDialog( long newLimit ) -+{ -+ dialog->deleteLater(); -+ dialog = NULL; -+ if( limit != newLimit ) -+ { -+ KConfig cfg( "lowspacesuse" ); -+ KConfigGroup group( &cfg, "General" ); -+ limit = newLimit; -+ group.writeEntry( "WarnMinimumFreeSpace", limit ); -+ if( limit == 0 ) -+ timer.stop(); -+ } -+ if( limit != 0 ) -+ { // warn again if constanly below limit for too long -+ if( lastAvailTimer == NULL ) -+ { -+ lastAvailTimer = new QTimer( this ); -+ connect( lastAvailTimer, SIGNAL( timeout()), SLOT( resetLastAvailable())); -+ } -+ lastAvailTimer->start( 1000 * 60 * 60 /* 1 hour*/ ); -+ } -+} -+ -+void FreeSpaceNotifier::resetLastAvailable() -+{ -+ lastAvail = -1; -+ lastAvailTimer->deleteLater(); -+ lastAvailTimer = NULL; -+} -+ -+#include "freespacenotifier.moc" -Index: kioslave/media/medianotifier/freespacenotifier.h -=================================================================== ---- /dev/null -+++ kioslave/media/medianotifier/freespacenotifier.h -@@ -0,0 +1,51 @@ -+/* This file is part of the KDE Project -+ Copyright (c) 2006 Lukas Tinkl -+ Copyright (c) 2008 Lubos Lunak -+ -+ This program is free software; you can redistribute it and/or modify -+ it under the terms of the GNU General Public License as published by -+ the Free Software Foundation; either version 2 of the License, or -+ (at your option) any later version. -+ -+ This program is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ GNU General Public License for more details. -+ -+ You should have received a copy of the GNU General Public License -+ along with this program. If not, see . -+*/ -+ -+#ifndef _FREESPACENOTIFIER_H_ -+#define _FREESPACENOTIFIER_H_ -+ -+#include -+ -+#include -+ -+class FreeSpaceWidget; -+ -+class FreeSpaceNotifier -+: public QObject -+{ -+ Q_OBJECT -+ public: -+ FreeSpaceNotifier( QObject* parent = NULL ); -+ virtual ~FreeSpaceNotifier(); -+ private slots: -+ void checkFreeDiskSpace(); -+ void resetLastAvailable(); -+ void slotYes(); -+ void slotNo(); -+ void slotCancel(); -+ private: -+ void cleanupDialog( long newLimit ); -+ QTimer timer; -+ QTimer* lastAvailTimer; -+ KDialogBase* dialog; -+ FreeSpaceWidget* widget; -+ long limit; -+ long lastAvail; // used to supress repeated warnings when available space hasn't changed -+}; -+ -+#endif -Index: kioslave/media/medianotifier/freespacewidget.ui -=================================================================== ---- /dev/null -+++ kioslave/media/medianotifier/freespacewidget.ui -@@ -0,0 +1,118 @@ -+ -+FreeSpaceWidget -+ -+ -+ Form1 -+ -+ -+ -+ 0 -+ 0 -+ 489 -+ 108 -+ -+ -+ -+ Form1 -+ -+ -+ -+ unnamed -+ -+ -+ -+ warningLabel -+ -+ -+ -+ -+ -+ -+ -+ textLabel2 -+ -+ -+ Would you like to run a file manager to free some disk space and fix the problem? -+ -+ -+ -+ -+ spacer3 -+ -+ -+ Vertical -+ -+ -+ Expanding -+ -+ -+ -+ 20 -+ 40 -+ -+ -+ -+ -+ -+ layout3 -+ -+ -+ -+ unnamed -+ -+ -+ -+ textLabel3 -+ -+ -+ Warn again when the free space is below -+ -+ -+ -+ -+ spinbox -+ -+ -+ MiB -+ -+ -+ -+ -+ spacer1 -+ -+ -+ Horizontal -+ -+ -+ Expanding -+ -+ -+ -+ 30 -+ 20 -+ -+ -+ -+ -+ -+ -+ -+ spacer2 -+ -+ -+ Vertical -+ -+ -+ Expanding -+ -+ -+ -+ 20 -+ 16 -+ -+ -+ -+ -+ -+ -+ diff --git a/opensuse/tdebase/mach_blass.diff b/opensuse/tdebase/mach_blass.diff deleted file mode 100644 index 8ea798d13..000000000 --- a/opensuse/tdebase/mach_blass.diff +++ /dev/null @@ -1,160 +0,0 @@ -Index: ksmserver/shutdowndlg.cpp -=================================================================== ---- ksmserver/shutdowndlg.cpp.orig -+++ ksmserver/shutdowndlg.cpp -@@ -35,6 +35,7 @@ Copyright (C) 2000 Matthias Ettrich - #include - #include -+#include - #include - #include - -@@ -48,6 +49,9 @@ Copyright (C) 2000 Matthias Ettrich geometry() ); -- QTimer::singleShot( 10, this, SLOT( slotPaintEffect() ) ); -- m_root.resize( width(), height() ); --} -+ if( QPixmap::defaultDepth() > 8 ) -+ { -+ grabbed.create( size(), 32 ); -+ QTimer::singleShot( 0, this, SLOT( slotGrab() ) ); -+ } -+ else -+ { -+ QTimer::singleShot( 10, this, SLOT( slotPaintEffectOld() ) ); -+ m_root.resize( width(), height() ); -+ } - - --void KSMShutdownFeedback::slotPaintEffect() -+} -+ -+// the upstream KDE effect -+void KSMShutdownFeedback::slotPaintEffectOld() - { - if ( m_currentY >= height() ) { - if ( backgroundMode() == QWidget::NoBackground ) { -@@ -80,7 +94,76 @@ void KSMShutdownFeedback::slotPaintEffec - bitBlt( this, 0, m_currentY, &pixmap ); - bitBlt( &m_root, 0, m_currentY, &pixmap ); - m_currentY += 10; -- QTimer::singleShot( 1, this, SLOT( slotPaintEffect() ) ); -+ QTimer::singleShot( 1, this, SLOT( slotPaintEffectOld() ) ); -+} -+ -+// the SUSE effect -+void KSMShutdownFeedback::slotGrab() -+{ -+ // we start the passed early -+ if ( m_currentY * 4 >= height() * 3 && passed.isNull()) -+ passed.start(); -+ -+ if ( m_currentY >= height() ) { -+ slotPaintEffectNew(); -+ return; -+ } -+ -+ QImage img; -+ img = QPixmap::grabWindow( qt_xrootwin(), 0, -+ m_currentY, width(), -+ slice ); -+ bitBlt(&grabbed, 0, m_currentY, &img); -+ m_currentY += slice; -+ QTimer::singleShot(0, this, SLOT(slotGrab())); -+} -+ -+void KSMShutdownFeedback::slotPaintEffectNew() -+{ -+ const unsigned int shift_scale = 10; -+ const unsigned int scale = 1 << shift_scale; -+ -+ //kdDebug() << "passed before paint " << passed.elapsed() << endl; -+ unsigned int current_fade = QMIN(scale, passed.elapsed() * scale / max_faded); -+ QImage copy; -+ copy.create( grabbed.size(), grabbed.depth() ); -+ unsigned int pixels = grabbed.width()*grabbed.height(); -+ QRgb *orig = ( QRgb* )grabbed.bits(); -+ QRgb *dest = ( QRgb* )copy.bits(); -+ QColor clr; -+ -+ int r, g, b, tg; -+ -+ for ( unsigned int i = 0; i < pixels; ++i ) -+ { -+ r = qRed( orig[i] ); -+ g = qGreen( orig[i] ); -+ b = qBlue( orig[i] ); -+ -+ // qGray formla -+ tg = (r*11 + g*16 + b*5)/32; -+ // make it a bit darker than gray -+ tg = tg - tg / 5; -+ -+ r = ( ( r << shift_scale ) + current_fade * ( tg - r ) ) >> shift_scale; -+ g = ( ( g << shift_scale ) + current_fade * ( tg - g ) ) >> shift_scale; -+ b = ( ( b << shift_scale ) + current_fade * ( tg - b ) ) >> shift_scale; -+ -+ dest[i] = qRgb(r, g, b); -+ } -+ //kdDebug() << "passed before bitBlt " << passed.elapsed() << endl; -+ bitBlt( this, 0, 0, ©); -+ //kdDebug() << "passed after bitBlt " << passed.elapsed() << endl; -+ -+ if ( current_fade >= scale ) { -+ if ( backgroundMode() == QWidget::NoBackground ) { -+ setBackgroundMode( QWidget::NoBackground ); -+ setBackgroundPixmap( copy ); -+ } -+ return; -+ } -+ -+ QTimer::singleShot( 0, this, SLOT( slotPaintEffectNew() ) ); - } - - ////// -Index: ksmserver/shutdowndlg.h -=================================================================== ---- ksmserver/shutdowndlg.h.orig -+++ ksmserver/shutdowndlg.h -@@ -9,7 +9,9 @@ Copyright (C) 2000 Matthias Ettrich - #include -+#include - #include -+#include - class QPushButton; - class QVButtonGroup; - class QPopupMenu; -@@ -31,13 +33,17 @@ protected: - ~KSMShutdownFeedback() {} - - private slots: -- void slotPaintEffect(); -+ void slotPaintEffectOld(); -+ void slotPaintEffectNew(); -+ void slotGrab(); - - private: - static KSMShutdownFeedback * s_pSelf; - KSMShutdownFeedback(); - int m_currentY; - QPixmap m_root; -+ QTime passed; -+ QImage grabbed; - }; - - diff --git a/opensuse/tdebase/make-wallpapers-hideable.diff b/opensuse/tdebase/make-wallpapers-hideable.diff deleted file mode 100644 index d59494940..000000000 --- a/opensuse/tdebase/make-wallpapers-hideable.diff +++ /dev/null @@ -1,48 +0,0 @@ -Index: kcontrol/background/bgdialog.cpp -=================================================================== ---- kcontrol/background/bgdialog.cpp.orig -+++ kcontrol/background/bgdialog.cpp -@@ -477,14 +477,23 @@ void BGDialog::loadWallpaperFilesList() - //search for .desktop files before searching for images without .desktop files - QStringList lst = m_pDirs->findAllResources("wallpaper", "*desktop", false, true); - QStringList files; -+ QStringList hiddenfiles; - for (QStringList::ConstIterator it = lst.begin(); it != lst.end(); ++it) - { - KSimpleConfig fileConfig(*it); - fileConfig.setGroup("Wallpaper"); - -+ int slash = (*it).findRev('/') + 1; -+ QString directory = (*it).left(slash); -+ - QString imageCaption = fileConfig.readEntry("Name"); - QString fileName = fileConfig.readEntry("File"); - -+ if (fileConfig.readBoolEntry("Hidden",false)) { -+ hiddenfiles.append(directory + fileName); -+ continue; -+ } -+ - if (imageCaption.isEmpty()) - { - imageCaption = fileName; -@@ -500,9 +509,8 @@ void BGDialog::loadWallpaperFilesList() - rs = imageCaption + " (" + QString::number(n) + ')'; - lrs = rs.lower(); - } -- int slash = (*it).findRev('/') + 1; -- QString directory = (*it).left(slash); - bool canLoadScaleable = false; -+ - #ifdef HAVE_LIBART - canLoadScaleable = true; - #endif -@@ -516,7 +524,7 @@ void BGDialog::loadWallpaperFilesList() - lst = m_pDirs->findAllResources("wallpaper", "*", false, true); - for (QStringList::ConstIterator it = lst.begin(); it != lst.end(); ++it) - { -- if ( !(*it).endsWith(".desktop") && files.grep(*it).empty() ) { -+ if ( !(*it).endsWith(".desktop") && files.grep(*it).empty() && hiddenfiles.grep(*it).empty() ) { - // First try to see if we have a comment describing the image. If we do - // just use the first line of said comment. - KFileMetaInfo metaInfo(*it); diff --git a/opensuse/tdebase/media-cryptosupport.diff b/opensuse/tdebase/media-cryptosupport.diff deleted file mode 100644 index e9b4fb58d..000000000 --- a/opensuse/tdebase/media-cryptosupport.diff +++ /dev/null @@ -1,31 +0,0 @@ -Index: kioslave/media/mediamanager/halbackend.cpp -=================================================================== ---- kioslave/media/mediamanager/halbackend.cpp.orig -+++ kioslave/media/mediamanager/halbackend.cpp -@@ -214,10 +214,26 @@ void HALBackend::AddDevice(const char *u - { - /* We only list volume that have a filesystem or volume that have an audio track*/ - if ( libhal_device_get_property_QString(m_halContext, udi, "volume.fsusage") != "filesystem" && -+ libhal_device_get_property_QString(m_halContext, udi, "volume.fsusage") != "crypto" && - !libhal_device_get_property_bool(m_halContext, udi, "volume.disc.has_audio", NULL) && - !libhal_device_get_property_bool(m_halContext, udi, "volume.disc.is_blank", NULL) ) - return; - -+ /* For crypto_LUKS devices check its dm-device, if it is already mounted*/ -+ if ( libhal_device_get_property_QString(m_halContext, udi, "volume.fstype") == "crypto_LUKS" && -+ !libhal_device_get_property_bool(m_halContext, udi, "volume.ignore", NULL) ) { -+ int num; -+ char **dm_uuid = libhal_manager_find_device_string_match(m_halContext, "volume.crypto_luks.clear.backing_volume",udi,&num,NULL); -+ /* if a dm device is found the volume is already decrypted */ -+ if (num == 0) { -+ // TODO: Check for kryptomedia binary. -+ KProcess proc; -+ proc << "kryptomedia" << udi; -+ proc.start(KProcess::DontCare); -+ return; -+ } -+ } -+ - /* Query drive udi */ - QString driveUdi = libhal_device_get_property_QString(m_halContext, udi, "block.storage_device"); - if ( driveUdi.isNull() ) // no storage - no fun diff --git a/opensuse/tdebase/media-iPod.diff b/opensuse/tdebase/media-iPod.diff deleted file mode 100644 index c5f1f8a24..000000000 --- a/opensuse/tdebase/media-iPod.diff +++ /dev/null @@ -1,26 +0,0 @@ -Index: kioslave/media/mediamanager/halbackend.cpp -=================================================================== ---- kioslave/media/mediamanager/halbackend.cpp.orig -+++ kioslave/media/mediamanager/halbackend.cpp -@@ -33,6 +33,7 @@ - #include - #include - #include -+#include - - #define MOUNT_SUFFIX (libhal_volume_is_mounted(halVolume) ? QString("_mounted") : QString("_unmounted")) - #define MOUNT_ICON_SUFFIX (libhal_volume_is_mounted(halVolume) ? QString("_mount") : QString("_unmount")) -@@ -532,6 +533,13 @@ void HALBackend::setVolumeProperties(Med - case LIBHAL_DRIVE_TYPE_PORTABLE_AUDIO_PLAYER: - { - medium->setIconName("ipod" + MOUNT_ICON_SUFFIX); -+ -+ if (libhal_device_get_property_QString(m_halContext, driveUdi.latin1(), "info.product") == "iPod" && -+ KProtocolInfo::isKnownProtocol( QString("ipod") ) ) -+ { -+ medium->unmountableState( "ipod:/" ); -+ medium->mountableState( libhal_volume_is_mounted(halVolume) ); -+ } - break; - } - case LIBHAL_DRIVE_TYPE_CAMERA: diff --git a/opensuse/tdebase/media-teardown_crypto.diff b/opensuse/tdebase/media-teardown_crypto.diff deleted file mode 100644 index f713cffc7..000000000 --- a/opensuse/tdebase/media-teardown_crypto.diff +++ /dev/null @@ -1,175 +0,0 @@ -Index: kioslave/media/mediamanager/halbackend.cpp -=================================================================== ---- kioslave/media/mediamanager/halbackend.cpp.orig 2011-05-31 13:41:55.000000000 +0200 -+++ kioslave/media/mediamanager/halbackend.cpp 2011-05-31 13:42:48.317334543 +0200 -@@ -1379,4 +1379,54 @@ QString HALBackend::unmount(const QStrin - return QString(); - } - -+bool HALBackend::teardown(const QString &_udi) -+{ -+ const char* dm_udi = _udi.latin1(); -+ const QString blockudi = libhal_device_get_property_QString(m_halContext, dm_udi, "volume.crypto_luks.clear.backing_volume"); -+ if (!blockudi.isEmpty()) { -+ const char* udi = blockudi.latin1(); -+ DBusMessage *dmesg, *reply; -+ DBusError error; -+ const char *options[2]; -+ -+ kdDebug() << "tearDown " << udi << "..." << endl; -+ -+ dbus_error_init(&error); -+ DBusConnection *dbus_connection = dbus_bus_get(DBUS_BUS_SYSTEM, &error); -+ if (dbus_error_is_set(&error)) -+ { -+ dbus_error_free(&error); -+ return false; -+ } -+ -+ if (!(dmesg = dbus_message_new_method_call ("org.freedesktop.Hal", udi, -+ "org.freedesktop.Hal.Device.Volume.Crypto", -+ "Teardown"))) { -+ kdDebug() << "teardown failed for " << udi << ": could not create dbus message\n"; -+ return false; -+ } -+ -+ dbus_error_init (&error); -+ if (!(reply = dbus_connection_send_with_reply_and_block (dbus_connection, dmesg, -1, &error))) -+ { -+ QString qerror; -+ -+ kdDebug() << "teardown failed for " << udi << ": " << error.name << " " << error.message << endl; -+ qerror = QString("teardown failed for %1 because: %2").arg(udi).arg(error.name); -+ dbus_message_unref (dmesg); -+ dbus_error_free (&error); -+ return false; -+ } -+ -+ kdDebug() << "teardown queued for " << udi << endl; -+ -+ dbus_message_unref (dmesg); -+ dbus_message_unref (reply); -+ return true; -+ } -+ -+ return false; -+} -+ -+ - #include "halbackend.moc" -Index: kioslave/media/mediamanager/halbackend.h -=================================================================== ---- kioslave/media/mediamanager/halbackend.h.orig 2011-05-31 13:39:05.000000000 +0200 -+++ kioslave/media/mediamanager/halbackend.h 2011-05-31 13:42:48.317334543 +0200 -@@ -85,6 +85,7 @@ public: - QString mount(const QString &id); - QString mount(const Medium *medium); - QString unmount(const QString &id); -+ bool teardown(const QString &_udi); - - static bool isHotplug( const QString & id ); - -Index: kioslave/media/mediamanager/mediamanager.cpp -=================================================================== ---- kioslave/media/mediamanager/mediamanager.cpp.orig 2011-05-31 13:39:05.000000000 +0200 -+++ kioslave/media/mediamanager/mediamanager.cpp 2011-05-31 13:43:07.916484054 +0200 -@@ -232,6 +232,17 @@ QString MediaManager::unmount(const QStr - #endif - } - -+bool MediaManager::teardown(const QString &name) -+{ -+#ifdef COMPILE_HALBACKEND -+ if (!m_halbackend) -+ return false; -+ return m_halbackend->teardown(name); -+#else -+ return false; -+#endif -+} -+ - QString MediaManager::nameForLabel(const QString &label) - { - const QPtrList media = m_mediaList.list(); -Index: kioslave/media/mediamanager/mediamanager.h -=================================================================== ---- kioslave/media/mediamanager/mediamanager.h.orig 2011-05-31 13:39:05.000000000 +0200 -+++ kioslave/media/mediamanager/mediamanager.h 2011-05-31 13:42:48.318334448 +0200 -@@ -47,6 +47,7 @@ k_dcop: - - QString mount(const QString &uid); - QString unmount(const QString &uid); -+ bool teardown(const QString &uid); - - QString nameForLabel(const QString &label); - ASYNC setUserLabel(const QString &name, const QString &label); -Index: kioslave/media/mounthelper/kio_media_mounthelper.h -=================================================================== ---- kioslave/media/mounthelper/kio_media_mounthelper.h.orig 2007-01-15 12:31:31.000000000 +0100 -+++ kioslave/media/mounthelper/kio_media_mounthelper.h 2011-05-31 13:42:48.318334448 +0200 -@@ -40,6 +40,8 @@ private: - QString m_errorStr; - QString m_device; - bool m_isCdrom; -+ bool isCryptMedia(QString); -+ bool teardown(QString); - - private slots: - void ejectFinished(KProcess* proc); -Index: kioslave/media/mounthelper/kio_media_mounthelper.cpp -=================================================================== ---- kioslave/media/mounthelper/kio_media_mounthelper.cpp.orig 2007-05-14 09:55:40.000000000 +0200 -+++ kioslave/media/mounthelper/kio_media_mounthelper.cpp 2011-05-31 13:42:48.319334353 +0200 -@@ -27,6 +27,7 @@ - #include - #include - #include -+#include - #include - #include - #include -@@ -117,14 +118,17 @@ MountHelper::MountHelper() : KApplicatio - DCOPRef mediamanager("kded", "mediamanager"); - DCOPReply reply = mediamanager.call( "unmount", medium.id()); - if (reply.isValid()) -- reply.get(m_errorStr); -- if (m_errorStr.isNull()) -- invokeEject(device, true); -- else -- error(); -+ reply.get(m_errorStr); -+ if (m_errorStr.isNull()) { -+ if (!teardown(medium.id())) -+ invokeEject(device, true); -+ } else -+ error(); - m_device = device; -- } else -- invokeEject(device, true); -+ } else { -+ if (!teardown(medium.id())) -+ invokeEject(device, true); -+ } - } - else - { -@@ -139,6 +143,19 @@ MountHelper::MountHelper() : KApplicatio - } - } - -+bool MountHelper::teardown(QString id) -+{ -+ DCOPRef mediamanager("kded", "mediamanager"); -+ DCOPReply reply = mediamanager.call( "teardown", id); -+ if (reply.isValid()) { -+ bool rep; -+ reply.get(rep); -+ kdDebug() << "reply from teardown: " << rep << endl; -+ return rep; -+ } -+ return false; -+} -+ - void MountHelper::invokeEject(const QString &device, bool quiet) - { - KProcess *proc = new KProcess(this); diff --git a/opensuse/tdebase/media_suse.diff b/opensuse/tdebase/media_suse.diff deleted file mode 100644 index 8583f03d2..000000000 --- a/opensuse/tdebase/media_suse.diff +++ /dev/null @@ -1,49 +0,0 @@ -Index: kioslave/media/mediamanager/halbackend.cpp -=================================================================== ---- kioslave/media/mediamanager/halbackend.cpp.orig -+++ kioslave/media/mediamanager/halbackend.cpp -@@ -248,14 +248,15 @@ void HALBackend::AddDevice(const char *u - return; - } - } -+ m_mediaList.addMedium(medium, allowNotification); -+ - QMap options = MediaManagerUtils::splitOptions(mountoptions(udi)); - kdDebug() << "automount " << options["automount"] << endl; -- if (options["automount"] == "true" && allowNotification ) { -+ if (options["automount"] == "true" ) { - QString error = mount(medium); - if (!error.isEmpty()) - kdDebug() << "error " << error << endl; - } -- m_mediaList.addMedium(medium, allowNotification); - - return; - } -@@ -292,6 +293,12 @@ void HALBackend::AddDevice(const char *u - m_mediaList.addMedium(medium, allowNotification); - return; - } -+ -+ if ( allowNotification ) { -+ KProcess proc; -+ proc << "suseplugger" << udi; -+ proc.start(KProcess::DontCare); -+ } - } - - void HALBackend::RemoveDevice(const char *udi) -@@ -816,8 +823,12 @@ QStringList HALBackend::mountoptions(con - removable = libhal_device_get_property_bool(m_halContext, drive_udi.latin1(), "storage.removable", NULL) - || libhal_device_get_property_bool(m_halContext, drive_udi.latin1(), "storage.hotpluggable", NULL); - -+ bool value = removable; -+ QString drive_type = libhal_device_get_property_QString( m_halContext, drive_udi.latin1(), "storage.drive_type" ); -+ value |= ( drive_type == "cdrom" ); -+ - config.setGroup(drive_udi); -- bool value = config.readBoolEntry("automount", false); -+ value = config.readBoolEntry("automount", value); - config.setGroup(name); - - if (libhal_device_get_property_bool(m_halContext, name.latin1(), "volume.disc.is_blank", NULL) diff --git a/opensuse/tdebase/mediamanager-mount-point-utf8.diff b/opensuse/tdebase/mediamanager-mount-point-utf8.diff deleted file mode 100644 index 87db2b9ef..000000000 --- a/opensuse/tdebase/mediamanager-mount-point-utf8.diff +++ /dev/null @@ -1,13 +0,0 @@ -Index: kioslave/media/mediamanager/halbackend.cpp -=================================================================== ---- kioslave/media/mediamanager/halbackend.cpp.orig -+++ kioslave/media/mediamanager/halbackend.cpp -@@ -471,7 +471,7 @@ void HALBackend::setVolumeProperties(Med - - medium->mountableState( - libhal_volume_get_device_file(halVolume), /* Device node */ -- libhal_volume_get_mount_point(halVolume), /* Mount point */ -+ QString::fromUtf8(libhal_volume_get_mount_point(halVolume)), /* Mount point */ - libhal_volume_get_fstype(halVolume), /* Filesystem type */ - libhal_volume_is_mounted(halVolume) ); /* Mounted ? */ - diff --git a/opensuse/tdebase/minicli-combo-editor.diff b/opensuse/tdebase/minicli-combo-editor.diff deleted file mode 100644 index 698668ec1..000000000 --- a/opensuse/tdebase/minicli-combo-editor.diff +++ /dev/null @@ -1,34 +0,0 @@ -Index: kdesktop/minicli.h -=================================================================== ---- kdesktop/minicli.h.orig -+++ kdesktop/minicli.h -@@ -52,12 +52,14 @@ public: - - void setCommand(const QString& command); - void reset(); -- void saveConfig(); - void clearHistory(); - - virtual void show(); - virtual QSize sizeHint() const; - -+public slots: -+ void saveConfig(); -+ - protected slots: - virtual void accept(); - virtual void reject(); -Index: kdesktop/minicli.cpp -=================================================================== ---- kdesktop/minicli.cpp.orig -+++ kdesktop/minicli.cpp -@@ -133,6 +133,9 @@ Minicli::Minicli( QWidget *parent, const - connect( m_dlg->cbCommand, SIGNAL( returnPressed() ), - m_dlg->pbRun, SLOT( animateClick() ) ); - -+ m_dlg->cbCommand->setHistoryEditorEnabled( true ); -+ connect( m_dlg->cbCommand, SIGNAL(removed( const QString&) ), SLOT(saveConfig()) ); -+ - // Advanced group box... - connect(m_dlg->cbPriority, SIGNAL(toggled(bool)), SLOT(slotChangeScheduler(bool))); - connect(m_dlg->slPriority, SIGNAL(valueChanged(int)), SLOT(slotPriority(int))); diff --git a/opensuse/tdebase/mp3-info.tar.bz2 b/opensuse/tdebase/mp3-info.tar.bz2 deleted file mode 100644 index f6cf95bcd..000000000 Binary files a/opensuse/tdebase/mp3-info.tar.bz2 and /dev/null differ diff --git a/opensuse/tdebase/mtab-reenable.patch b/opensuse/tdebase/mtab-reenable.patch deleted file mode 100644 index 1593a560d..000000000 --- a/opensuse/tdebase/mtab-reenable.patch +++ /dev/null @@ -1,153 +0,0 @@ -diff -wruN kdebase-3.5.10.orig/kioslave/media/mediamanager/fstabbackend.cpp kdebase-3.5.10/kioslave/media/mediamanager/fstabbackend.cpp ---- kdebase-3.5.10.orig/kioslave/media/mediamanager/fstabbackend.cpp 2006-10-01 21:31:54.000000000 +0400 -+++ kdebase-3.5.10/kioslave/media/mediamanager/fstabbackend.cpp 2011-08-17 14:51:34.697199962 +0400 -@@ -50,7 +50,7 @@ - #define MTAB "/etc/mnttab" - #else - #define FSTAB "/etc/fstab" --#define MTAB "/etc/mtab" -+#define MTAB "/proc/self/mounts" - #endif - - -@@ -58,7 +58,7 @@ - FstabBackend::FstabBackend(MediaList &list, bool networkSharesOnly) - : QObject(), BackendBase(list), m_networkSharesOnly(networkSharesOnly) - { -- KDirWatch::self()->addFile(MTAB); -+ KDirWatch::self()->addDir("/media",0); - KDirWatch::self()->addFile(FSTAB); - - connect( KDirWatch::self(), SIGNAL( dirty(const QString&) ), -@@ -94,7 +94,7 @@ - m_mediaList.removeMedium(*it, false); - } - KDirWatch::self()->removeFile(FSTAB); -- KDirWatch::self()->removeFile(MTAB); -+ KDirWatch::self()->removeDir("/media"); - } - - QString FstabBackend::mount( const QString &_udi ) -@@ -119,8 +119,9 @@ - - void FstabBackend::slotDirty(const QString &path) - { -- if (path==MTAB) -+ if (path=="/media") - { -+ sleep(1); - handleMtabChange(); - } - else if (path==FSTAB) -@@ -136,18 +137,23 @@ - || mount->mountType() == "sysfs" - || mount->mountType() == "fdescfs" - || mount->mountType() == "kernfs" -+ || mount->mountType() == "devtmpfs" -+ || mount->mountType() == "rootfs" - || mount->mountType() == "usbfs" - || mount->mountType().contains( "proc" ) -+ || mount->mountType().contains( "gvfs" ) - || mount->mountType() == "unknown" - || mount->mountType() == "none" - || mount->mountType() == "sunrpc" - || mount->mountedFrom() == "none" - || mount->mountedFrom() == "tmpfs" - || mount->mountedFrom().find("shm") != -1 -- || mount->mountPoint() == "/dev/swap" -+ || !(mount->mountPoint() == "/" || mount->mountPoint().find("/media") == 0 ) -+/* || mount->mountPoint() == "/dev/swap" -+ || mount->mountPoint() == "/dev" - || mount->mountPoint() == "/dev/pts" - || mount->mountPoint().find("/proc") == 0 -- || mount->mountPoint().find("/sys") == 0 -+ || mount->mountPoint().find("/sys") == 0 */ - - // We might want to display only network shares - // since HAL doesn't handle them -@@ -187,10 +193,12 @@ - nothing has changed, do not stat the mount point. Avoids - hang if network shares are stalling */ - QString mtabEntry = dev + "*" + mp + "*" + fs; -+#if 0 - if(m_mtabEntries.contains(mtabEntry)) { - new_mtabIds += m_mtabEntries[mtabEntry]; - continue; - } -+#endif - - QString id = generateId(dev, mp); - new_mtabIds+=id; -@@ -203,7 +211,6 @@ - m_mediaList.changeMediumState(id, true, false, - mime, icon, label); - } --#if 0 - else if ( !m_mtabIds.contains(id) ) - { - QString name = generateName(dev, fs); -@@ -219,9 +226,8 @@ - m->setIconName(icon); - m->setLabel(label); - -- m_mediaList.addMedium(m, notificationAllowed); -+ m_mediaList.addMedium(m, allowNotification); - } --#endif - } - - QStringList::iterator it2 = m_mtabIds.begin(); -@@ -247,12 +253,10 @@ - m_mediaList.changeMediumState(*it2, false, false, - mime, icon, label); - } --#if 0 - else if ( !new_mtabIds.contains(*it2) ) - { - m_mediaList.removeMedium(*it2, allowNotification); - } --#endif - } - - m_mtabIds = new_mtabIds; -diff -wruN kdebase-3.5.10.orig/kioslave/media/mediamanager/removablebackend.cpp kdebase-3.5.10/kioslave/media/mediamanager/removablebackend.cpp ---- kdebase-3.5.10.orig/kioslave/media/mediamanager/removablebackend.cpp 2006-03-17 13:17:33.000000000 +0300 -+++ kdebase-3.5.10/kioslave/media/mediamanager/removablebackend.cpp 2011-08-17 14:51:51.854357476 +0400 -@@ -27,7 +27,7 @@ - #ifdef _OS_SOLARIS_ - #define MTAB "/etc/mnttab" - #else --#define MTAB "/etc/mtab" -+#define MTAB "/proc/self/mounts" - #endif - - -@@ -35,7 +35,7 @@ - RemovableBackend::RemovableBackend(MediaList &list) - : QObject(), BackendBase(list) - { -- KDirWatch::self()->addFile(MTAB); -+ KDirWatch::self()->addDir("/media",0); - - connect( KDirWatch::self(), SIGNAL( dirty(const QString&) ), - this, SLOT( slotDirty(const QString&) ) ); -@@ -52,7 +52,7 @@ - m_mediaList.removeMedium(*it, false); - } - -- KDirWatch::self()->removeFile(MTAB); -+ KDirWatch::self()->removeDir("/media"); - } - - bool RemovableBackend::plug(const QString &devNode, const QString &label) -@@ -116,8 +116,9 @@ - - void RemovableBackend::slotDirty(const QString &path) - { -- if (path==MTAB) -+ if (path=="/media") - { -+ sleep(1); - handleMtabChange(); - } - } diff --git a/opensuse/tdebase/non-fast-malloc.diff b/opensuse/tdebase/non-fast-malloc.diff deleted file mode 100644 index c3f36be87..000000000 --- a/opensuse/tdebase/non-fast-malloc.diff +++ /dev/null @@ -1,15 +0,0 @@ ---- konqueror/konq_mainwindow.cc -+++ konqueror/konq_mainwindow.cc 2003/05/30 13:19:04 -@@ -4550,9 +4550,9 @@ - int usage_sum = 0; - #if defined(KDE_MALLINFO_STDLIB) || defined(KDE_MALLINFO_MALLOC) - // ugly hack for kdecore/malloc -- extern int kde_malloc_is_used; -- free( calloc( 4, 4 )); // trigger setting kde_malloc_is_used -- if( kde_malloc_is_used ) -+// extern int kde_malloc_is_used; -+// free( calloc( 4, 4 )); // trigger setting kde_malloc_is_used -+ if( 0 ) - { - struct mallinfo m = mallinfo(); - usage_sum = m.hblkhd + m.uordblks; diff --git a/opensuse/tdebase/nsplugin-Preference.diff b/opensuse/tdebase/nsplugin-Preference.diff deleted file mode 100644 index 3e3bcca05..000000000 --- a/opensuse/tdebase/nsplugin-Preference.diff +++ /dev/null @@ -1,13 +0,0 @@ -Index: nsplugins/pluginscan.cpp -=================================================================== ---- nsplugins/pluginscan.cpp.orig -+++ nsplugins/pluginscan.cpp -@@ -463,7 +463,7 @@ void writeServicesFile( QStringList mime - ts << "Icon=netscape" << endl; - ts << "Comment=" << i18n("Netscape plugin viewer") << endl; - ts << "X-KDE-Library=libnsplugin" << endl; -- ts << "InitialPreference=0" << endl; -+ ts << "InitialPreference=7" << endl; - ts << "ServiceTypes=KParts/ReadOnlyPart,Browser/View" << endl; - ts << "X-KDE-BrowserView-PluginsInfo=nsplugins/pluginsinfo" << endl; - diff --git a/opensuse/tdebase/nsplugin-init-gtk.diff b/opensuse/tdebase/nsplugin-init-gtk.diff deleted file mode 100644 index 882c12443..000000000 --- a/opensuse/tdebase/nsplugin-init-gtk.diff +++ /dev/null @@ -1,49 +0,0 @@ ---- nsplugins/viewer/nsplugin.h~ 2008-02-13 10:40:38.000000000 +0100 -+++ nsplugins/viewer/nsplugin.h 2010-09-22 23:31:58.721961990 +0200 -@@ -315,6 +315,10 @@ private: - QPtrList _trash; - - QCString _app; -+ -+ // If plugins use gtk, we call the gtk_init function for them --- -+ // but only do it once. -+ static bool s_initedGTK; - }; - - ---- nsplugins/viewer/nsplugin.cpp~ 2008-02-13 10:40:38.000000000 +0100 -+++ nsplugins/viewer/nsplugin.cpp 2010-09-22 23:31:58.775909705 +0200 -@@ -1330,6 +1330,9 @@ DCOPRef NSPluginViewer::newClass( QStrin - - /****************************************************************************/ - -+bool NSPluginClass::s_initedGTK = false; -+ -+typedef void gtkInitFunc(int *argc, char ***argv); - - NSPluginClass::NSPluginClass( const QString &library, - QObject *parent, const char *name ) -@@ -1377,6 +1380,23 @@ NSPluginClass::NSPluginClass( const QStr - - // initialize plugin - kdDebug(1431) << "Plugin library " << library << " loaded!" << endl; -+ -+ // see if it uses gtk -+ if (!s_initedGTK) { -+ gtkInitFunc* gtkInit = (gtkInitFunc*)_handle->symbol("gtk_init"); -+ if (gtkInit) { -+ kdDebug(1431) << "Calling gtk_init for the plugin" << endl; -+ // Prevent gtk_init() from replacing the X error handlers, since the Gtk -+ // handlers abort when they receive an X error, thus killing the viewer. -+ int (*old_error_handler)(Display*,XErrorEvent*) = XSetErrorHandler(0); -+ int (*old_io_error_handler)(Display*) = XSetIOErrorHandler(0); -+ gtkInit(0, 0); -+ XSetErrorHandler(old_error_handler); -+ XSetIOErrorHandler(old_io_error_handler); -+ s_initedGTK = true; -+ } -+ } -+ - _constructed = true; - _error = initialize()!=NPERR_NO_ERROR; - } diff --git a/opensuse/tdebase/openssl1.patch b/opensuse/tdebase/openssl1.patch deleted file mode 100644 index f1d250c44..000000000 --- a/opensuse/tdebase/openssl1.patch +++ /dev/null @@ -1,40 +0,0 @@ ---- kcontrol/crypto/crypto.cpp.orig 2006-10-02 06:31:49.000000000 +1300 -+++ kcontrol/crypto/crypto.cpp -@@ -2321,7 +2321,11 @@ bool KCryptoConfig::loadCiphers() { - unsigned int i; - SSL_CTX *ctx; - SSL *ssl; -+#if OPENSSL_VERSION_NUMBER < 0x00909000L - SSL_METHOD *meth; -+#else -+const SSL_METHOD *meth; -+#endif - - SSLv2Box->clear(); - SSLv3Box->clear(); -@@ -2337,8 +2341,10 @@ SSL_METHOD *meth; - CipherItem *item; - for (i=0; ; i++) { - int j, k; -- SSL_CIPHER *sc; -- sc = (meth->get_cipher)(i); -+#if defined(OPENSSL_VERSION_NUMBER) && OPENSSL_VERSION_NUMBER >= 0x10000000L -+ const -+#endif -+ SSL_CIPHER *sc = (meth->get_cipher)(i); - if (!sc) - break; - // Leak of sc*? -@@ -2365,8 +2371,10 @@ SSL_METHOD *meth; - - for (i=0; ; i++) { - int j, k; -- SSL_CIPHER *sc; -- sc = (meth->get_cipher)(i); -+#if defined(OPENSSL_VERSION_NUMBER) && OPENSSL_VERSION_NUMBER >= 0x10000000L -+ const -+#endif -+ SSL_CIPHER *sc = (meth->get_cipher)(i); - if (!sc) - break; - // Leak of sc*? diff --git a/opensuse/tdebase/optional-compmgr.diff b/opensuse/tdebase/optional-compmgr.diff deleted file mode 100644 index d0affeed9..000000000 --- a/opensuse/tdebase/optional-compmgr.diff +++ /dev/null @@ -1,32 +0,0 @@ -Index: kwin/workspace.cpp -=================================================================== ---- kwin/workspace.cpp.orig -+++ kwin/workspace.cpp -@@ -59,6 +59,17 @@ KSelectionOwner* kompmgr_selection; - - bool allowKompmgrRestart = TRUE; - -+bool supportsCompMgr() -+{ -+ int i; -+ -+ bool damageExt = XQueryExtension(qt_xdisplay(), "DAMAGE", &i, &i, &i); -+ bool compositeExt = XQueryExtension(qt_xdisplay(), "Composite", &i, &i, &i); -+ bool xfixesExt = XQueryExtension(qt_xdisplay(), "XFIXES", &i, &i, &i); -+ -+ return damageExt && compositeExt && xfixesExt; -+} -+ - // Rikkus: This class is too complex. It needs splitting further. - // It's a nightmare to understand, especially with so few comments :( - -@@ -199,6 +210,9 @@ Workspace::Workspace( bool restore ) - connect( kapp->desktop(), SIGNAL( resized( int )), SLOT( desktopResized())); - #endif - -+ if (!supportsCompMgr()) -+ options->useTranslucency = false; -+ - // start kompmgr - i wanted to put this into main.cpp, but that would prevent dcop support, as long as Application was no dcop_object - if (options->useTranslucency) - { diff --git a/opensuse/tdebase/quick_browser_menu.diff b/opensuse/tdebase/quick_browser_menu.diff deleted file mode 100644 index dd955115c..000000000 --- a/opensuse/tdebase/quick_browser_menu.diff +++ /dev/null @@ -1,30 +0,0 @@ -Index: kicker/kicker/ui/browser_mnu.cpp -=================================================================== ---- kicker/kicker/ui/browser_mnu.cpp.orig -+++ kicker/kicker/ui/browser_mnu.cpp -@@ -31,6 +31,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE - #include - #include - #include -+#include - #include - #include - #include -@@ -148,12 +149,14 @@ void PanelBrowserMenu::initialize() - // only the first part menu got them - if(_startid == 0 && !_filesOnly) { - insertTitle(path()); -+ KConfig *c = KGlobal::config(); -+ c->setGroup("menus"); - insertItem(CICON("kfm"), i18n("Open in File Manager"), this, SLOT(slotOpenFileManager())); -- if (kapp->authorize("shell_access")) -- insertItem(CICON("terminal"), i18n("Open in Terminal"), this, SLOT(slotOpenTerminal())); -+ if (kapp->authorize("shell_access") && c->readBoolEntry("kickerOpenInTerminalIsVisible",false)) -+ insertItem(CICON("terminal"), i18n("Open in Terminal"), this, SLOT(slotOpenTerminal())); -+ insertSeparator(); - } - -- - bool first_entry = true; - bool dirfile_separator = false; - unsigned int item_count = 0; diff --git a/opensuse/tdebase/remove-beagle-stuff.diff b/opensuse/tdebase/remove-beagle-stuff.diff deleted file mode 100644 index 94b243d9d..000000000 --- a/opensuse/tdebase/remove-beagle-stuff.diff +++ /dev/null @@ -1,34 +0,0 @@ -a "make it compile " patch from Stephan Binner - ---- kicker/kicker/plugins/beaglesearch.cpp -+++ kicker/kicker/plugins/beaglesearch.cpp -@@ -291,11 +291,11 @@ - beagle_query_set_max_hits (beagle_query, max_hits_per_source); // this is per source! - - kdDebug () << "Creating query from \"" << query_str << "\"" << endl; -- for ( QStringList::Iterator it = sources_menu.begin(); it != sources_menu.end(); ++it ) -+ /* for ( QStringList::Iterator it = sources_menu.begin(); it != sources_menu.end(); ++it ) - beagle_query_add_source (beagle_query, g_strdup ((*it).utf8 ())); - - for ( QStringList::Iterator it = types_menu.begin(); it != types_menu.end(); ++it ) -- beagle_query_add_hit_type (beagle_query, g_strdup ((*it).utf8 ())); -+ beagle_query_add_hit_type (beagle_query, g_strdup ((*it).utf8 ()));*/ - - QStringList query_terms; - QString start_date, end_date; -@@ -307,13 +307,13 @@ - else if (key_value_pair.count () == 2) { - QString key = key_value_pair [0].lower (); - QString value = key_value_pair [1]; -- if (key == "mime") -+ if /*(key == "mime") - beagle_query_add_mime_type (beagle_query, g_strdup (value.utf8 ())); - else if (key == "type") - beagle_query_add_hit_type (beagle_query, g_strdup (value.utf8 ())); - else if (key == "source") - beagle_query_add_source (beagle_query, g_strdup (value.utf8 ())); -- else if (key == "start") -+ else if */ (key == "start") - start_date = value; - else if (key == "end") - end_date = value; diff --git a/opensuse/tdebase/restore-description-parens.diff b/opensuse/tdebase/restore-description-parens.diff deleted file mode 100644 index f575dbcb2..000000000 --- a/opensuse/tdebase/restore-description-parens.diff +++ /dev/null @@ -1,13 +0,0 @@ -Index: kicker/kicker/ui/service_mnu.cpp -=================================================================== ---- kicker/kicker/ui/service_mnu.cpp.orig -+++ kicker/kicker/ui/service_mnu.cpp -@@ -426,7 +426,7 @@ void PanelServiceMenu::insertMenuItem(KS - { - if (comment.find(serviceName, 0, true) == -1) - { -- serviceName = i18n("Entries in K-menu: %1 app name, %2 description", "%1 - %2").arg(serviceName, comment); -+ serviceName = i18n("Entries in K-menu: %1 app name, %2 description", "%1 (%2)").arg(serviceName, comment); - } - else - { diff --git a/opensuse/tdebase/rotate-wacom-pointers.diff b/opensuse/tdebase/rotate-wacom-pointers.diff deleted file mode 100644 index a8d9c7f96..000000000 --- a/opensuse/tdebase/rotate-wacom-pointers.diff +++ /dev/null @@ -1,291 +0,0 @@ ---- kcontrol/randr/legacyrandrscreen.cpp -+++ kcontrol/randr/legacyrandrscreen.cpp -@@ -30,6 +30,8 @@ - #include - #include - #include -+#include -+#include - - #include "ktimerdialog.h" - #include "legacyrandrscreen.h" -@@ -103,12 +105,55 @@ bool LegacyRandRScreen::applyProposed() - m_currentSize = m_proposedSize; - m_currentRotation = m_proposedRotation; - m_currentRefreshRate = m_proposedRefreshRate; -+ -+ // search wacom utility and set orientation for available wacom pointers -+ QString xsetwacom = KStandardDirs::findExe("xsetwacom"); -+ if (!xsetwacom.isEmpty()) { -+ m_wacomPointers.clear(); -+ KProcess *proc = new KProcess; -+ connect(proc, SIGNAL(receivedStdout(KProcess *, char *, int)), SLOT(gotAvailablePointers(KProcess *, char *, int))); -+ *proc << "xsetwacom" << "list"; -+ if (!proc->start(KProcess::Block,KProcess::Stdout)) -+ kdError("Could not ask xsetwacom for available pointers."); -+ else { -+ for ( QStringList::Iterator it = m_wacomPointers.begin(); it != m_wacomPointers.end(); ++it ) { -+ KProcess *set = new KProcess; -+ *set << "xsetwacom" << "set" << (*it) << "Rotate"; -+ switch (m_currentRotation) { -+ case RR_Rotate_90: -+ *set << "CW"; -+ break; -+ case RR_Rotate_180: -+ *set << "HALF"; -+ break; -+ case RR_Rotate_270: -+ *set << "CCW"; -+ break; -+ default: -+ *set << "NONE"; -+ } -+ if (!set->start()) -+ kdError("Could not set orientation for wacom pointers."); -+ } -+ } -+ } -+ - return true; - } - - return false; - } - -+void LegacyRandRScreen::gotAvailablePointers(KProcess*, char *buffer, int len) -+{ -+ QString myBuf = QString::fromLatin1(buffer, len); -+ QStringList lines = QStringList::split('\n', myBuf); -+ for ( QStringList::Iterator it = lines.begin(); it != lines.end(); it++) { -+ QStringList split = QStringList::split(' ', (*it)); -+ m_wacomPointers+=split.first(); -+ } -+} -+ - bool LegacyRandRScreen::applyProposedAndConfirm() - { - if (proposedChanged()) { ---- kcontrol/randr/legacyrandrscreen.h -+++ kcontrol/randr/legacyrandrscreen.h -@@ -30,6 +30,7 @@ - #include "randr.h" - - class KTimerDialog; -+class KProcess; - - class LegacyRandRScreen : public QObject - { -@@ -135,6 +136,9 @@ public: - void load(KConfig& config); - void save(KConfig& config) const; - -+private slots: -+ void gotAvailablePointers(KProcess*, char *buffer, int len); -+ - private: - XRRScreenConfiguration* m_config; - -@@ -156,6 +160,8 @@ private: - int m_proposedSize; - int m_proposedRefreshRate; - -+ QStringList m_wacomPointers; -+ - KTimerDialog* m_shownDialog; - - }; ---- kcontrol/randr/randrscreen.cpp -+++ kcontrol/randr/randrscreen.cpp -@@ -18,6 +18,8 @@ - - #include - #include -+#include -+#include - #include "randrscreen.h" - #include "randrcrtc.h" - #include "randroutput.h" -@@ -429,6 +431,40 @@ bool RandRScreen::applyProposed(bool confirm) - if (succeed && confirm) - succeed = RandR::confirm(r); - -+ if (succeed) { -+ // search wacom utility and set orientation for available wacom pointers -+ QString xsetwacom = KStandardDirs::findExe("xsetwacom"); -+ if (!xsetwacom.isEmpty()) { -+ m_wacomPointers.clear(); -+ KProcess *proc = new KProcess; -+ connect(proc, SIGNAL(receivedStdout(KProcess *, char *, int)), SLOT(gotAvailablePointers(KProcess *, char *, int))); -+ *proc << "xsetwacom" << "list"; -+ if (!proc->start(KProcess::Block,KProcess::Stdout)) -+ kdError("Could not ask xsetwacom for available pointers."); -+ else { -+ for ( QStringList::Iterator it = m_wacomPointers.begin(); it != m_wacomPointers.end(); ++it ) { -+ KProcess *set = new KProcess; -+ *set << "xsetwacom" << "set" << (*it) << "Rotate"; -+ switch (m_unifiedRotation) { -+ case RR_Rotate_90: -+ *set << "CW"; -+ break; -+ case RR_Rotate_180: -+ *set << "HALF"; -+ break; -+ case RR_Rotate_270: -+ *set << "CCW"; -+ break; -+ default: -+ *set << "NONE"; -+ } -+ if (!set->start()) -+ kdError("Could not set orientation for wacom pointers."); -+ } -+ } -+ } -+ } -+ - // if we succeded applying and the user confirmer the changes, - // just return from here - if (succeed) -@@ -447,6 +483,16 @@ bool RandRScreen::applyProposed(bool confirm) - return false; - } - -+void RandRScreen::gotAvailablePointers(KProcess*, char *buffer, int len) -+{ -+ QString myBuf = QString::fromLatin1(buffer, len); -+ QStringList lines = QStringList::split('\n', myBuf); -+ for ( QStringList::Iterator it = lines.begin(); it != lines.end(); it++) { -+ QStringList split = QStringList::split(' ', (*it)); -+ m_wacomPointers+=split.first(); -+ } -+} -+ - void RandRScreen::unifyOutputs() - { - SizeList sizes = unifiedSizes(); ---- kcontrol/randr/randrscreen.h -+++ kcontrol/randr/randrscreen.h -@@ -29,6 +29,7 @@ - - class QAction; - class KConfig; -+class KProcess; - - class RandRScreen : public QObject - { -@@ -95,6 +96,9 @@ public slots: - void save(); - void load(); - -+private slots: -+ void gotAvailablePointers(KProcess*, char *buffer, int len); -+ - signals: - void configChanged(); - -@@ -119,7 +123,7 @@ private: - CrtcMap m_crtcs; - OutputMap m_outputs; - ModeMap m_modes; -- -+ QStringList m_wacomPointers; - }; - #endif - ---- kcontrol/randr/randrcrtc.cpp -+++ kcontrol/randr/randrcrtc.cpp -@@ -17,6 +17,8 @@ - */ - - #include -+#include -+#include - #include "randrcrtc.h" - #include "randrscreen.h" - #include "randroutput.h" -@@ -298,6 +300,38 @@ - m_currentRate = mode.refreshRate(); - emit crtcChanged(m_id, RandR::ChangeMode); - ret = true; -+ -+ // search wacom utility and set orientation for available wacom pointers -+ QString xsetwacom = KStandardDirs::findExe("xsetwacom"); -+ if (!xsetwacom.isEmpty()) { -+ m_wacomPointers.clear(); -+ KProcess *proc = new KProcess; -+ connect(proc, SIGNAL(receivedStdout(KProcess *, char *, int)), SLOT(gotAvailablePointers(KProcess *, char *, int))); -+ *proc << "xsetwacom" << "list"; -+ if (!proc->start(KProcess::Block,KProcess::Stdout)) -+ kdError("Could not ask xsetwacom for available pointers."); -+ else { -+ for ( QStringList::Iterator it = m_wacomPointers.begin(); it != m_wacomPointers.end(); ++it ) { -+ KProcess *set = new KProcess; -+ *set << "xsetwacom" << "set" << (*it) << "Rotate"; -+ switch (m_currentRotation) { -+ case RR_Rotate_90: -+ *set << "CW"; -+ break; -+ case RR_Rotate_180: -+ *set << "HALF"; -+ break; -+ case RR_Rotate_270: -+ *set << "CCW"; -+ break; -+ default: -+ *set << "NONE"; -+ } -+ if (!set->start()) -+ kdError("Could not set orientation for wacom pointers."); -+ } -+ } -+ } - } - else - { -@@ -309,6 +343,16 @@ - return ret; - } - -+void RandRCrtc::gotAvailablePointers(KProcess*, char *buffer, int len) -+{ -+ QString myBuf = QString::fromLatin1(buffer, len); -+ QStringList lines = QStringList::split('\n', myBuf); -+ for ( QStringList::Iterator it = lines.begin(); it != lines.end(); it++) { -+ QStringList split = QStringList::split(' ', (*it)); -+ m_wacomPointers+=split.first(); -+ } -+} -+ - bool RandRCrtc::proposeSize(QSize s) - { - m_proposedRect.setSize(s); ---- kcontrol/randr/randrcrtc.h -+++ kcontrol/randr/randrcrtc.h -@@ -26,6 +26,8 @@ - - #ifdef HAS_RANDR_1_2 - -+class KProcess; -+ - class RandRCrtc : public QObject - { - Q_OBJECT -@@ -62,6 +64,9 @@ - - ModeList modes() const; - -+private slots: -+ void gotAvailablePointers(KProcess*, char *buffer, int len); -+ - signals: - void crtcChanged(RRCrtc c, int changes); - -@@ -86,6 +91,8 @@ - float m_currentRate; - - RandRScreen *m_screen; -+ -+ QStringList m_wacomPointers; - }; - #endif - diff --git a/opensuse/tdebase/runupdater.patch b/opensuse/tdebase/runupdater.patch deleted file mode 100644 index 3dcc4c550..000000000 --- a/opensuse/tdebase/runupdater.patch +++ /dev/null @@ -1,133 +0,0 @@ -Index: runupdater/runupdater.desktop -=================================================================== ---- /dev/null -+++ runupdater/runupdater.desktop -@@ -0,0 +1,9 @@ -+[Desktop Entry] -+Type=Application -+Exec=runupdater -+Terminal=false -+Name=Run Updater Tool -+Icon=www -+ -+X-KDE-StartupNotify=false -+OnlyShowIn=KDE; -Index: runupdater/runupdater.cpp -=================================================================== ---- /dev/null -+++ runupdater/runupdater.cpp -@@ -0,0 +1,96 @@ -+/* -+ Run either opensuseupdater or zen-updater but not both. -+ For opensuseupdater its autostart condition is checked, for zen-updater -+ it's checked whether its autostart file is enabled. -+*/ -+ -+#include -+#include -+#include -+#include -+ -+static bool disabledOSU() -+ { -+ KConfig osu( "opensuseupdaterrc", true ); -+ osu.setGroup( "General" ); -+// fprintf( stderr, "OSU:%d\n", osu.readBoolEntry ("Autostart", true )); -+ return !osu.readBoolEntry( "Autostart", true ); -+ } -+ -+static bool availableOSU() -+ { -+ return !KStandardDirs::findExe( "opensuseupdater" ).isEmpty(); -+ } -+ -+static bool runOSU() -+ { -+ return KApplication::kdeinitExec( "opensuseupdater", QStringList(), NULL, NULL, "0" ) == 0; -+ } -+ -+static bool disabledZU() -+ { -+ KConfig zu( "zen-updater-auto.desktop", true, false, "xdgconf-autostart" ); -+ zu.setGroup( "Desktop Entry" ); -+// fprintf( stderr, "ZU %d\n", zu.readBoolEntry( "Hidden", false ) ); -+ return zu.readBoolEntry( "Hidden", false ); -+ } -+ -+static bool availableZU() -+ { -+ return !KStandardDirs::findExe( "zen-updater" ).isEmpty(); -+ } -+ -+static bool runZU() -+ { -+ return KApplication::kdeinitExec( "zen-updater", QStringList(), NULL, NULL, "0" ) == 0; -+ } -+ -+extern "C" -+int kdemain() -+ { -+ KInstance inst( "runupdater" ); -+ // KSimpleConfig should parse this one just fine, with entries in the default group -+ KSimpleConfig sysconfig( "/etc/sysconfig/sw_management", true ); -+ QString preferred = sysconfig.readEntry( "PREFERRED_SW_MANAGER_STACK" ); -+// fprintf( stderr, "SC1: %s\n", preferred.latin1()); -+ if( preferred.startsWith( "\"" ) && preferred.endsWith( "\"" )) // strip "" -+ preferred = preferred.mid( 1, preferred.length() - 2 ); -+// fprintf( stderr, "SC2: %s\n", preferred.latin1()); -+ if( preferred.lower() == "opensuse" ) -+ { -+ // opensuseupdater preferred - it's it's available, run it if it's enabled, -+ // try zen-updater only if opensuseupdater is not available at all -+ if( availableOSU()) -+ { -+ if( !disabledOSU()) -+ return runOSU(); -+ return 0; -+ } -+ else if( availableZU() && !disabledZU()) -+ return runZU(); -+ return 0; -+ } -+ else if( preferred.lower() == "zlm" ) -+ { -+ // similar like above, just the other way around -+ if( availableZU()) -+ { -+ if( !disabledZU()) -+ return runZU(); -+ return 0; -+ } -+ else if( availableOSU() && !disabledOSU()) -+ return runOSU(); -+ return 0; -+ } -+ else -+ { -+ // prefer opensuseupdater, but try to run zen-updater if opensuseupdater is not run -+ // the difference is that zen-updater is still run if opensuseupdater is disabled -+ if( availableOSU() && !disabledOSU() && runOSU()) -+ return 0; -+ if( availableZU() && !disabledZU() && runZU()) -+ return 0; -+ return 0; -+ } -+ } -Index: runupdater/Makefile.am -=================================================================== ---- /dev/null -+++ runupdater/Makefile.am -@@ -0,0 +1,13 @@ -+INCLUDES = $(all_includes) -+ -+bin_PROGRAMS = -+lib_LTLIBRARIES = -+kdeinit_LTLIBRARIES = runupdater.la -+ -+runupdater_la_LDFLAGS = $(all_libraries) -module $(KDE_PLUGIN) -+runupdater_la_LIBADD = $(LIB_KDECORE) -+ -+runupdater_la_SOURCES = runupdater.cpp -+ -+autostart_DATA = runupdater.desktop -+autostartdir = $(datadir)/autostart diff --git a/opensuse/tdebase/select-wm-gui.diff b/opensuse/tdebase/select-wm-gui.diff deleted file mode 100644 index 823262962..000000000 --- a/opensuse/tdebase/select-wm-gui.diff +++ /dev/null @@ -1,635 +0,0 @@ -Subject: GUI configuration for selecting WM -From: Lubos Lunak -Feature: bnc#332079 -Patch-upstream: no - -Index: ksmserver/startup.cpp -=================================================================== ---- ksmserver/startup.cpp.orig -+++ ksmserver/startup.cpp -@@ -103,38 +103,39 @@ void KSMServer::restoreSession( QString - config->setGroup( sessionGroup ); - int count = config->readNumEntry( "count" ); - appsToStart = count; -- -- QValueList wmCommands; -- if ( !wm.isEmpty() ) { -- for ( int i = 1; i <= count; i++ ) { -- QString n = QString::number(i); -- if ( wm == config->readEntry( QString("program")+n ) ) { -- wmCommands << config->readListEntry( QString("restartCommand")+n ); -- } -- } -- } -- if ( wmCommands.isEmpty() ) -- wmCommands << ( QStringList() << wm ); -- - publishProgress( appsToStart, true ); -+ upAndRunning( "ksmserver" ); - connectDCOPSignal( launcher, launcher, "autoStart0Done()", - "autoStart0Done()", true); - connectDCOPSignal( launcher, launcher, "autoStart1Done()", - "autoStart1Done()", true); - connectDCOPSignal( launcher, launcher, "autoStart2Done()", - "autoStart2Done()", true); -- upAndRunning( "ksmserver" ); - -- if ( !wmCommands.isEmpty() ) { -- // when we have a window manager, we start it first and give -- // it some time before launching other processes. Results in a -- // visually more appealing startup. -- for (uint i = 0; i < wmCommands.count(); i++) -- startApplication( wmCommands[i] ); -- QTimer::singleShot( 4000, this, SLOT( autoStart0() ) ); -- } else { -- autoStart0(); -+ // find all commands to launch the wm in the session -+ QValueList wmStartCommands; -+ if ( !wm.isEmpty() ) { -+ for ( int i = 1; i <= count; i++ ) { -+ QString n = QString::number(i); -+ // special hack for it, both kde3(=native) and kde4 kwin have the same program, -+ // but the command for kde4 kwin starts with the kde4 wrapper -+ if( config->readEntry( QString("program")+n ) == "kwin" ) { -+ QStringList command = config->readListEntry( QString("restartCommand")+n ); -+ if( wmCommands.count() > 1 && wmCommands[ 0 ].endsWith( "kde4" ) -+ && command.count() > 1 && command[ 0 ].endsWith( "kde4" )) { -+ wmStartCommands << command; // kde4 wanted, kde4 found -+ } else if(!( wmCommands.count() > 1 && wmCommands[ 0 ].endsWith( "kde4" )) -+ && !( command.count() > 1 && command[ 0 ].endsWith( "kde4" ))) { -+ wmStartCommands << command; // native wanted, native found -+ } -+ } else if ( wm == config->readEntry( QString("program")+n ) ) { -+ wmStartCommands << config->readListEntry( QString("restartCommand")+n ); -+ } -+ } - } -+ if( wmStartCommands.isEmpty()) // otherwise use the configured default -+ wmStartCommands << wmCommands; -+ launchWM( wmStartCommands ); - } - - /*! -@@ -157,17 +158,53 @@ void KSMServer::startDefaultSession() - "autoStart1Done()", true); - connectDCOPSignal( launcher, launcher, "autoStart2Done()", - "autoStart2Done()", true); -- startApplication( wm ); -+ launchWM( QValueList< QStringList >() << wmCommands ); -+} -+ -+void KSMServer::launchWM( const QValueList< QStringList >& wmStartCommands ) -+{ -+ assert( state == LaunchingWM ); -+ -+ // when we have a window manager, we start it first and give -+ // it some time before launching other processes. Results in a -+ // visually more appealing startup. -+ wmProcess = startApplication( wmStartCommands[ 0 ] ); -+ connect( wmProcess, SIGNAL( processExited( KProcess* )), SLOT( wmProcessChange())); -+ // there can be possibly more wm's (because of forking for multihead), -+ // but in such case care only about the process of the first one -+ for (unsigned int i = 1; i < wmStartCommands.count(); i++) -+ startApplication( wmStartCommands[i] ); - QTimer::singleShot( 4000, this, SLOT( autoStart0() ) ); - } - - - void KSMServer::clientSetProgram( KSMClient* client ) - { -- if ( !wm.isEmpty() && client->program() == wm ) -+ if ( client->program() == wm ) - autoStart0(); - } - -+void KSMServer::wmProcessChange() -+{ -+ if( state != LaunchingWM ) -+ { // don't care about the process when not in the wm-launching state anymore -+ wmProcess = NULL; -+ return; -+ } -+ if( !wmProcess->isRunning()) -+ { // wm failed to launch for some reason, go with kwin instead -+ kdWarning( 1218 ) << "Window manager '" << wm << "' failed to launch" << endl; -+ if( wm == "kwin" ) -+ return; // uhoh, kwin itself failed -+ kdDebug( 1218 ) << "Launching KWin" << endl; -+ wm = "kwin"; -+ wmCommands = ( QStringList() << "kwin" ); -+ // launch it -+ launchWM( QValueList< QStringList >() << wmCommands ); -+ return; -+ } -+} -+ - void KSMServer::autoStart0() - { - if( state != LaunchingWM ) -Index: ksmserver/server.h -=================================================================== ---- ksmserver/server.h.orig -+++ ksmserver/server.h -@@ -30,6 +30,8 @@ Copyright (C) 2000 Matthias Ettrich QCStringList; - class KSMListener; - class KSMConnection; -@@ -98,6 +100,8 @@ public: - KApplication::ShutdownType sdtype, - KApplication::ShutdownMode sdmode ); - -+ void launchWM( const QValueList< QStringList >& wmStartCommands ); -+ - public slots: - void cleanUp(); - -@@ -120,6 +124,7 @@ private slots: - void autoStart2(); - void tryRestoreNext(); - void startupSuspendTimeout(); -+ void wmProcessChange(); - - private: - void handlePendingInteractions(); -@@ -138,13 +143,14 @@ private: - void startProtection(); - void endProtection(); - -- void startApplication( QStringList command, -+ KProcess* startApplication( QStringList command, - const QString& clientMachine = QString::null, - const QString& userId = QString::null ); - void executeCommand( const QStringList& command ); - - bool isWM( const KSMClient* client ) const; - bool isWM( const QString& program ) const; -+ void selectWm( const QString& kdewm ); - bool defaultSession() const; // empty session - void setupXIOErrorHandler(); - -@@ -223,6 +229,8 @@ private: - int lastAppStarted; - QString lastIdStarted; - -+ QStringList wmCommands; -+ KProcess* wmProcess; - QStringList excludeApps; - - WindowMap legacyWindows; -Index: ksmserver/Makefile.am -=================================================================== ---- ksmserver/Makefile.am.orig -+++ ksmserver/Makefile.am -@@ -15,7 +15,7 @@ - # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - # CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - --SUBDIRS = . -+SUBDIRS = . windowmanagers - - INCLUDES= -I$(top_srcdir)/kdmlib $(all_includes) $(DBUS_INCS) - -Index: ksmserver/main.cpp -=================================================================== ---- ksmserver/main.cpp.orig -+++ ksmserver/main.cpp -@@ -203,8 +203,6 @@ extern "C" KDE_EXPORT int kdemain( int a - } - - QCString wm = args->getOption("windowmanager"); -- if ( wm.isEmpty() ) -- wm = "kwin"; - - bool only_local = args->isSet("local"); - #ifndef HAVE__ICETRANSNOLISTEN -Index: ksmserver/server.cpp -=================================================================== ---- ksmserver/server.cpp.orig -+++ ksmserver/server.cpp -@@ -77,6 +77,8 @@ CONNECTION WITH THE SOFTWARE OR THE USE - #include - #include - #include -+#include -+#include - - #include "server.h" - #include "global.h" -@@ -98,11 +100,11 @@ KSMServer* KSMServer::self() - /*! Utility function to execute a command on the local machine. Used - * to restart applications. - */ --void KSMServer::startApplication( QStringList command, const QString& clientMachine, -+KProcess* KSMServer::startApplication( QStringList command, const QString& clientMachine, - const QString& userId ) - { - if ( command.isEmpty() ) -- return; -+ return NULL; - if ( !userId.isEmpty()) { - struct passwd* pw = getpwuid( getuid()); - if( pw != NULL && userId != QString::fromLocal8Bit( pw->pw_name )) { -@@ -116,12 +118,12 @@ void KSMServer::startApplication( QStrin - command.prepend( clientMachine ); - command.prepend( xonCommand ); // "xon" by default - } -- int n = command.count(); -- QCString app = command[0].latin1(); -- QValueList argList; -- for ( int i=1; i < n; i++) -- argList.append( QCString(command[i].latin1())); -- DCOPRef( launcher ).send( "exec_blind", app, DCOPArg( argList, "QValueList" ) ); -+ KProcess* process = new KProcess( this ); -+ *process << command; -+ // make it auto-delete -+ connect( process, SIGNAL( processExited( KProcess* )), process, SLOT( deleteLater())); -+ process->start(); -+ return process; - } - - /*! Utility function to execute a command on the local machine. Used -@@ -580,10 +582,10 @@ extern "C" int _IceTransNoListen(const c - - KSMServer::KSMServer( const QString& windowManager, bool _only_local ) - : DCOPObject("ksmserver"), sessionGroup( "" ) -+ , wmProcess( NULL ) - { - the_server = this; - clean = false; -- wm = windowManager; - - shutdownType = KApplication::ShutdownTypeNone; - -@@ -595,6 +597,9 @@ KSMServer::KSMServer( const QString& win - config->setGroup("General" ); - clientInteracting = 0; - xonCommand = config->readEntry( "xonCommand", "xon" ); -+ -+ KGlobal::dirs()->addResourceType( "windowmanagers", "share/apps/ksmserver/windowmanagers" ); -+ selectWm( windowManager ); - - connect( &knotifyTimeoutTimer, SIGNAL( timeout()), SLOT( knotifyTimeout())); - connect( &startupSuspendTimeoutTimer, SIGNAL( timeout()), SLOT( startupSuspendTimeout())); -@@ -851,14 +856,12 @@ void KSMServer::storeSession() - config->setGroup( sessionGroup ); - count = 0; - -- if ( !wm.isEmpty() ) { -- // put the wm first -- for ( KSMClient* c = clients.first(); c; c = clients.next() ) -- if ( c->program() == wm ) { -- clients.prepend( clients.take() ); -- break; -- } -- } -+ // put the wm first -+ for ( KSMClient* c = clients.first(); c; c = clients.next() ) -+ if ( c->program() == wm ) { -+ clients.prepend( clients.take() ); -+ break; -+ } - - for ( KSMClient* c = clients.first(); c; c = clients.next() ) { - int restartHint = c->restartStyleHint(); -@@ -909,14 +912,65 @@ bool KSMServer::isWM( const KSMClient* c - - bool KSMServer::isWM( const QString& program ) const - { -- // KWin relies on ksmserver's special treatment in phase1, -- // therefore make sure it's recognized even if ksmserver -- // was initially started with different WM, and kwin replaced -- // it later -- return program == wm || program == "kwin"; -+ return program == wm; - } - - bool KSMServer::defaultSession() const - { - return sessionGroup.isEmpty(); - } -+ -+static bool noDisplay( KDesktopFile& f ) -+{ -+ KConfigGroup gr( &f, "Desktop Entry" ); -+ if (gr.readBoolEntry("NoDisplay", false)) { -+ return true; -+ } -+ if (gr.hasKey("OnlyShowIn")) { -+ if (!gr.readListEntry("OnlyShowIn", ';').contains("KDE")) -+ return true; -+ } -+ if (gr.hasKey("NotShowIn")) { -+ if (gr.readListEntry("NotShowIn", ';').contains("KDE")) -+ return true; -+ } -+ return false; -+} -+ -+// selection logic: -+// - $KDEWM is set - use that -+// - a wm is selected using the kcm - use that -+// - if that fails, just use KWin -+void KSMServer::selectWm( const QString& kdewm ) -+{ -+ wm = "kwin"; // defaults -+ wmCommands = ( QStringList() << "kwin" ); -+ if( !kdewm.isEmpty()) -+ { -+ wmCommands = ( QStringList() << kdewm ); -+ wm = kdewm; -+ return; -+ } -+ KConfigGroup config(KGlobal::config(), "General"); -+ QString cfgwm = config.readEntry( "windowManager", "kwin" ); -+ KDesktopFile file( cfgwm + ".desktop", true, "windowmanagers" ); -+ if( noDisplay( file )) -+ return; -+ if( !file.tryExec()) -+ return; -+ file.setDesktopGroup(); -+ QString testexec = file.readEntry( "X-KDE-WindowManagerTestExec" ); -+ if( !testexec.isEmpty()) -+ { -+ int ret = system( QFile::encodeName( testexec )); -+ if( !WIFEXITED( ret ) || WEXITSTATUS( ret ) != 0 ) -+ return; -+ } -+ QStringList cfgWmCommands = KShell::splitArgs( file.readEntry( "Exec" )); -+ if( cfgWmCommands.isEmpty()) -+ return; -+ QString smname = file.readEntry( "X-KDE-WindowManagerId" ); -+ // ok -+ wm = smname.isEmpty() ? cfgwm : smname; -+ wmCommands = cfgWmCommands; -+} -Index: ksmserver/windowmanagers/openbox.desktop -=================================================================== ---- /dev/null -+++ ksmserver/windowmanagers/openbox.desktop -@@ -0,0 +1,5 @@ -+[Desktop Entry] -+Name=Openbox -+Exec=openbox -+TryExec=openbox -+ -Index: ksmserver/windowmanagers/Makefile.am -=================================================================== ---- /dev/null -+++ ksmserver/windowmanagers/Makefile.am -@@ -0,0 +1,2 @@ -+windowmanager_DATA = compiz-custom.desktop compiz.desktop kwin4.desktop metacity.desktop openbox.desktop -+windowmanagerdir = $(kde_datadir)/ksmserver/windowmanagers -Index: ksmserver/windowmanagers/compiz.desktop -=================================================================== ---- /dev/null -+++ ksmserver/windowmanagers/compiz.desktop -@@ -0,0 +1,4 @@ -+[Desktop Entry] -+Name=Compiz -+Exec=compiz ccp -+TryExec=compiz -Index: ksmserver/windowmanagers/compiz-custom.desktop -=================================================================== ---- /dev/null -+++ ksmserver/windowmanagers/compiz-custom.desktop -@@ -0,0 +1,5 @@ -+[Desktop Entry] -+Name=Compiz custom (create wrapper script 'compiz-kde-launcher' to launch it) -+Exec=compiz-kde-launcher -+TryExec=compiz -+X-KDE-WindowManagerId=compiz -Index: ksmserver/windowmanagers/kwin4.desktop -=================================================================== ---- /dev/null -+++ ksmserver/windowmanagers/kwin4.desktop -@@ -0,0 +1,6 @@ -+[Desktop Entry] -+Name=KWin (KDE4) -+Exec=kde4 /usr/bin/kwin -+TryExec=/usr/bin/kwin -+X-KDE-WindowManagerId=kwin -+ -Index: ksmserver/windowmanagers/metacity.desktop -=================================================================== ---- /dev/null -+++ ksmserver/windowmanagers/metacity.desktop -@@ -0,0 +1,4 @@ -+[Desktop Entry] -+Name=Metacity (GNOME) -+Exec=metacity -+TryExec=metacity -Index: kcontrol/smserver/smserverconfigdlg.ui -=================================================================== ---- kcontrol/smserver/smserverconfigdlg.ui.orig -+++ kcontrol/smserver/smserverconfigdlg.ui -@@ -1,4 +1,4 @@ -- -+ - SMServerConfigDlg - - -@@ -8,8 +8,8 @@ - - 0 - 0 -- 325 -- 366 -+ 334 -+ 476 - - - -@@ -148,6 +148,24 @@ - - - -+ -+ -+ windowManagerGroup -+ -+ -+ Window Manager -+ -+ -+ -+ unnamed -+ -+ -+ -+ windowManagerCombo -+ -+ -+ -+ - - - advancedGroup -@@ -236,6 +254,12 @@ - SMServerConfigDlg - configChanged() - -+ -+ windowManagerCombo -+ activated(int) -+ SMServerConfigDlg -+ configChanged() -+ - - - kdialog.h -Index: kcontrol/smserver/kcmsmserver.cpp -=================================================================== ---- kcontrol/smserver/kcmsmserver.cpp.orig -+++ kcontrol/smserver/kcmsmserver.cpp -@@ -22,6 +22,8 @@ - #include - #include - #include -+#include -+#include - - #include - -@@ -29,6 +31,12 @@ - #include - #include - #include -+#include -+#include -+#include -+#include -+#include -+#include - - #include "kcmsmserver.h" - #include "smserverconfigimpl.h" -@@ -52,6 +60,7 @@ SMServerConfig::SMServerConfig( QWidget - - dialog->show(); - topLayout->add(dialog); -+ KGlobal::dirs()->addResourceType( "windowmanagers", "share/apps/ksmserver/windowmanagers" ); - load(); - - } -@@ -90,6 +99,7 @@ void SMServerConfig::load(bool useDefaul - dialog->logoutRadio->setChecked(true); - break; - } -+ loadWMs(c->readEntry("windowManager", "kwin")); - dialog->excludeLineedit->setText( c->readEntry("excludeApps")); - - delete c; -@@ -116,6 +126,7 @@ void SMServerConfig::save() - dialog->rebootRadio->isChecked() ? - int(KApplication::ShutdownTypeReboot) : - int(KApplication::ShutdownTypeNone)); -+ c->writeEntry("windowManager", currentWM()); - c->writeEntry("excludeApps", dialog->excludeLineedit->text()); - c->sync(); - delete c; -@@ -123,6 +134,12 @@ void SMServerConfig::save() - // update the k menu if necessary - QByteArray data; - kapp->dcopClient()->send( "kicker", "kicker", "configure()", data ); -+ if( oldwm != currentWM()) -+ { // TODO switch it already in the session instead and tell ksmserver -+ KMessageBox::information( this, -+ i18n( "The new window manager will be used when KDE is started the next time." ), -+ i18n( "Window manager change" ), "windowmanagerchange" ); -+ } - } - - void SMServerConfig::defaults() -@@ -130,5 +147,72 @@ void SMServerConfig::defaults() - load( true ); - } - -+static bool noDisplay( KDesktopFile& f ) -+{ -+ KConfigGroup gr( &f, "Desktop Entry" ); -+ if (gr.readBoolEntry("NoDisplay", false)) { -+ return true; -+ } -+ if (gr.hasKey("OnlyShowIn")) { -+ if (!gr.readListEntry("OnlyShowIn", ';').contains("KDE")) -+ return true; -+ } -+ if (gr.hasKey("NotShowIn")) { -+ if (gr.readListEntry("NotShowIn", ';').contains("KDE")) -+ return true; -+ } -+ return false; -+} -+ -+void SMServerConfig::loadWMs( const QString& current ) -+{ -+ QString kwinname = i18n( "KWin (KDE default)" ); -+ dialog->windowManagerCombo->insertItem( kwinname ); -+ dialog->windowManagerCombo->setCurrentItem( 0 ); -+ wms[ kwinname ] = "kwin"; -+ oldwm = "kwin"; -+ QStringList list = KGlobal::dirs()->findAllResources( "windowmanagers", QString(), false, true ); -+ QRegExp reg( ".*/([^/\\.]*)\\.[^/\\.]*" ); -+ for( QStringList::ConstIterator it = list.begin(); -+ it != list.end(); -+ ++it ) -+ { -+ QString wmfile = *it; -+ KDesktopFile file( wmfile ); -+ if( noDisplay( file )) -+ continue; -+ if( !file.tryExec()) -+ continue; -+ file.setDesktopGroup(); -+ QString testexec = file.readEntry( "X-KDE-WindowManagerTestExec" ); -+ if( !testexec.isEmpty()) -+ { -+ int ret = system( QFile::encodeName( testexec )); -+ if( !WIFEXITED( ret ) || WEXITSTATUS( ret ) != 0 ) -+ continue; -+ } -+ QString name = file.readName(); -+ if( name.isEmpty()) -+ continue; -+ if( !reg.exactMatch( wmfile )) -+ continue; -+ QString wm = reg.cap( 1 ); -+ if( wms.values().contains( wm )) -+ continue; -+ wms[ name ] = wm; -+ dialog->windowManagerCombo->insertItem( name ); -+ if( wms[ name ] == current ) // make it selected -+ { -+ dialog->windowManagerCombo->setCurrentItem( dialog->windowManagerCombo->count() - 1 ); -+ oldwm = wm; -+ } -+ } -+} -+ -+QString SMServerConfig::currentWM() const -+{ -+ return wms[ dialog->windowManagerCombo->currentText() ]; -+} -+ - #include "kcmsmserver.moc" - -Index: kcontrol/smserver/kcmsmserver.h -=================================================================== ---- kcontrol/smserver/kcmsmserver.h.orig -+++ kcontrol/smserver/kcmsmserver.h -@@ -40,6 +40,10 @@ public: - - private: - SMServerConfigImpl* dialog; -+ void loadWMs( const QString& current ); -+ QString currentWM() const; -+ QMap< QString, QString > wms; // i18n text -> internal name -+ QString oldwm; // the original value - - }; - diff --git a/opensuse/tdebase/short-menus.diff b/opensuse/tdebase/short-menus.diff deleted file mode 100644 index 784c75ebb..000000000 --- a/opensuse/tdebase/short-menus.diff +++ /dev/null @@ -1,209 +0,0 @@ -Index: kdesktop/Makefile.am -=================================================================== ---- kdesktop/Makefile.am.orig -+++ kdesktop/Makefile.am -@@ -6,6 +6,8 @@ kdesktop_la_LIBADD = libkdesktopsettin - - SUBDIRS = . lock pics patterns programs init kwebdesktop - -+KDE_OPTIONS = nofinal -+ - ####### Files - - bin_PROGRAMS = kcheckrunning -Index: kicker/kicker/ui/service_mnu.cpp -=================================================================== ---- kicker/kicker/ui/service_mnu.cpp.orig -+++ kicker/kicker/ui/service_mnu.cpp -@@ -111,6 +111,11 @@ void PanelServiceMenu::fillMenu(KService - QStringList suppressGenericNames = _root->suppressGenericNames(); - - KServiceGroup::List::ConstIterator it = _list.begin(); -+ KSortableValueList,QCString> slist; -+ KSortableValueList,QCString> glist; -+ QMap specialTitle; -+ QMap categoryIcon; -+ - bool separatorNeeded = false; - for (; it != _list.end(); ++it) - { -@@ -118,19 +123,108 @@ void PanelServiceMenu::fillMenu(KService - - if (e->isType(KST_KServiceGroup)) - { -+ KServiceGroup::Ptr g(static_cast(e)); -+ if ( KickerSettings::reduceMenuDepth() && g->SuSEshortMenu() ){ -+ KServiceGroup::List l = g->entries(true, excludeNoDisplay_ ); -+ if ( l.count() == 1 ) { -+ // the special case, we want to short the menu. -+ // TOFIX? : this works only for one level -+ KServiceGroup::List::ConstIterator _it=l.begin(); -+ KSycocaEntry *_e = *_it; -+ if (_e->isType(KST_KService)) { -+ KService::Ptr s(static_cast(_e)); -+ QString key; -+ if ( g->SuSEgeneralDescription() ) { -+ // we use the application name -+ key = s->name(); -+ if( !s->genericName().isEmpty()) { -+ if (KickerSettings::menuEntryFormat() == KickerSettings::NameAndDescription) -+ key = s->name() + " (" + s->genericName() + ")"; -+ else if (KickerSettings::menuEntryFormat() == KickerSettings::DescriptionAndName) -+ key = s->genericName() + " (" + s->name() + ")"; -+ else if (KickerSettings::menuEntryFormat() == KickerSettings::DescriptionOnly) -+ key = s->genericName(); -+ } -+ } -+ else { -+ // we use the normal menu description -+ key = s->name(); -+ if( !s->genericName().isEmpty()) { -+ if (KickerSettings::menuEntryFormat() == KickerSettings::NameAndDescription) -+ key = s->name() + " (" + g->caption() + ")"; -+ else if (KickerSettings::menuEntryFormat() == KickerSettings::DescriptionAndName) -+ key = g->caption() + " (" + s->name() + ")"; -+ else if (KickerSettings::menuEntryFormat() == KickerSettings::DescriptionOnly) -+ key = g->caption(); -+ } -+ } -+ specialTitle.insert( _e->name(), key ); -+ categoryIcon.insert( _e->name(), g->icon() ); -+ slist.insert( key.local8Bit(), _e ); -+ // and escape from here -+ continue; -+ } -+ } -+ } -+ glist.insert( g->caption().local8Bit(), e ); -+ }else if( e->isType(KST_KService)) { -+ KService::Ptr s(static_cast(e)); -+ QString name = s->name(); -+ if( !s->genericName().isEmpty()) { -+ if (KickerSettings::menuEntryFormat() == KickerSettings::NameAndDescription) -+ name = s->name() + " (" + s->genericName() + ")"; -+ else if (KickerSettings::menuEntryFormat() == KickerSettings::DescriptionAndName) -+ name = s->genericName() + " (" + s->name() + ")"; -+ else if (KickerSettings::menuEntryFormat() == KickerSettings::DescriptionOnly) -+ name = s->genericName(); -+ } -+ slist.insert( name.local8Bit(), e ); -+ } else -+ slist.insert( e->name().local8Bit(), e ); -+ } -+ -+ _list = _root->SuSEsortEntries( slist, glist, excludeNoDisplay_, true ); -+ it = _list.begin(); - -+ for (; it != _list.end(); ++it) { -+ -+ KSycocaEntry * e = *it; -+ -+ if (e->isType(KST_KServiceGroup)) { - KServiceGroup::Ptr g(static_cast(e)); -+ if ( KickerSettings::reduceMenuDepth() && g->SuSEshortMenu() ){ -+ KServiceGroup::List l = g->entries(true, excludeNoDisplay_ ); -+ if ( l.count() == 1 ) { -+ /* // the special case, we want to short the menu. -+ // TOFIX? : this works only for one level -+ KServiceGroup::List::ConstIterator _it=l.begin(); -+ KSycocaEntry *_e = *_it; -+ if (_e->isType(KST_KService)) { -+ KService::Ptr s(static_cast(_e)); -+ if ( g->SuSEgeneralDescription() ) -+ // we use the application name -+ insertMenuItem(s, id++, -1, 0, QString::null, QString::null, g->icon() ); -+ else -+ // we use the normal menu description -+ insertMenuItem(s, id++, -1, 0, QString::null, g->caption(), g->icon() ); -+ // and escape from here */ -+ continue; -+ // } -+ } -+ } -+ // standard sub menu -+ - QString groupCaption = g->caption(); -- -+ - // Avoid adding empty groups. - KServiceGroup::Ptr subMenuRoot = KServiceGroup::group(g->relPath()); -- -+ - int nbChildCount = subMenuRoot->childCount(); - if (nbChildCount == 0 && !g->showEmptyMenu()) -- { -+ { - continue; -- } -- -+ } -+ - QString inlineHeaderName = g->showInlineHeader() ? groupCaption : ""; - // Item names may contain ampersands. To avoid them being converted - // to accelerators, replace them with two ampersands. -@@ -214,7 +308,7 @@ void PanelServiceMenu::fillMenu(KService - } - - KService::Ptr s(static_cast(e)); -- insertMenuItem(s, id++, -1, &suppressGenericNames); -+ insertMenuItem(s, id++, -1, &suppressGenericNames, QString::null, specialTitle[s->name()], categoryIcon[s->name()] ); - } - else if (e->isType(KST_KServiceSeparator)) - { -@@ -296,7 +390,8 @@ void PanelServiceMenu::configChanged() - void PanelServiceMenu::insertMenuItem(KService::Ptr & s, int nId, - int nIndex/*= -1*/, - const QStringList *suppressGenericNames /* = 0 */, -- const QString & aliasname) -+ const QString & aliasname, const QString & label /*=QString::NULL*/, -+ const QString & categoryIcon /*=QString::null*/) - { - QString serviceName = (aliasname.isEmpty() ? s->name() : aliasname).simplifyWhiteSpace(); - QString comment = s->genericName().simplifyWhiteSpace(); -@@ -347,7 +442,15 @@ void PanelServiceMenu::insertMenuItem(KS - // to accelerators, replace them with two ampersands. - serviceName.replace("&", "&&"); - -- int newId = insertItem(KickerLib::menuIconSet(s->icon()), serviceName, nId, nIndex); -+ QString icon = s->icon(); -+ if (icon=="unknown") -+ icon = categoryIcon; -+ -+ int newId; -+ if ( label.isEmpty() ) -+ newId = insertItem(KickerLib::menuIconSet(s->icon()), serviceName, nId, nIndex); -+ else -+ newId = insertItem(KickerLib::menuIconSet(s->icon()), label, nId, nIndex); - entryMap_.insert(newId, static_cast(s)); - } - -Index: kicker/kicker/ui/service_mnu.h -=================================================================== ---- kicker/kicker/ui/service_mnu.h.orig -+++ kicker/kicker/ui/service_mnu.h -@@ -83,7 +83,8 @@ protected slots: - protected: - void insertMenuItem(KService::Ptr & s, int nId, int nIndex = -1, - const QStringList *suppressGenericNames=0, -- const QString &aliasname = QString::null); -+ const QString &aliasname = QString::null, -+ const QString &label = QString::null, const QString &categoryIcon = QString::null); - virtual PanelServiceMenu * newSubMenu(const QString & label, - const QString & relPath, - QWidget * parent, const char * name, -Index: kicker/libkicker/kickerSettings.kcfg -=================================================================== ---- kicker/libkicker/kickerSettings.kcfg.orig -+++ kicker/libkicker/kickerSettings.kcfg -@@ -126,6 +126,11 @@ - true - - -+ -+ -+ false -+ -+ - - - 0 diff --git a/opensuse/tdebase/show-konqueror-in-menu.diff b/opensuse/tdebase/show-konqueror-in-menu.diff deleted file mode 100644 index a5f4b9ab3..000000000 --- a/opensuse/tdebase/show-konqueror-in-menu.diff +++ /dev/null @@ -1,30 +0,0 @@ -Index: konqueror/konqfilemgr.desktop -=================================================================== ---- konqueror/konqfilemgr.desktop.orig -+++ konqueror/konqfilemgr.desktop -@@ -4,7 +4,8 @@ Exec=kfmclient openProfile filemanagemen - Icon=kfm - DocPath=konqueror/index.html - --Name=File Manager -+Name=Konqueror -+GenericName=File Manager - Name[af]=Lêer Bestuurder - Name[ar]=مدبّر الملÙات - Name[az]=Fayl Ä°darÉ™cisi -Index: konqueror/Makefile.am -=================================================================== ---- konqueror/Makefile.am.orig -+++ konqueror/Makefile.am -@@ -69,10 +69,7 @@ messages: rc.cpp - $(XGETTEXT) -kaliasLocal rc.cpp *.h *.cc *view/*h *view/*cc kedit*/*.h kedit*/*.cpp about/*.h about/*.cc remoteencodingplugin/*.cpp remoteencodingplugin/*.h shellcmdplugin/*.cpp -o `find sidebar -name "*.cpp"` `find sidebar -name "*.h"` -o $(podir)/konqueror.pot - - xdg_apps_DATA = kfmclient.desktop kfmclient_dir.desktop kfmclient_html.desktop \ -- kfmclient_war.desktop konqbrowser.desktop konquerorsu.desktop Home.desktop -- --konq_data4_DATA = konqfilemgr.desktop --konq_data4dir = $(kde_appsdir)/.hidden -+ kfmclient_war.desktop konqbrowser.desktop konquerorsu.desktop Home.desktop konqfilemgr.desktop - - kde_kcfg_DATA = konqueror.kcfg - diff --git a/opensuse/tdebase/simplify-randr-settings.diff b/opensuse/tdebase/simplify-randr-settings.diff deleted file mode 100644 index 93add22fd..000000000 --- a/opensuse/tdebase/simplify-randr-settings.diff +++ /dev/null @@ -1,91 +0,0 @@ ---- kcontrol/randr/krandrmodule.cpp -+++ kcontrol/randr/krandrmodule.cpp -@@ -114,23 +114,15 @@ KRandRModule::KRandRModule(QWidget *parent, const char *name, const QStringList& - m_rotationGroup->setRadioButtonExclusive(true); - QWhatsThis::add(m_rotationGroup, i18n("The options in this section allow you to change the rotation of your screen.")); - -- m_applyOnStartup = new QCheckBox(i18n("Apply settings on KDE startup"), this); -- topLayout->addWidget(m_applyOnStartup); -- QWhatsThis::add(m_applyOnStartup, i18n("If this option is enabled the size and orientation settings will be used when KDE starts.")); -- connect(m_applyOnStartup, SIGNAL(clicked()), SLOT(setChanged())); -- -- QHBox* syncBox = new QHBox(this); -- syncBox->layout()->addItem(new QSpacerItem(20, 1, QSizePolicy::Maximum)); -- m_syncTrayApp = new QCheckBox(i18n("Allow tray application to change startup settings"), syncBox); -- topLayout->addWidget(syncBox); -- QWhatsThis::add(m_syncTrayApp, i18n("If this option is enabled, options set by the system tray applet will be saved and loaded when KDE starts instead of being temporary.")); -- connect(m_syncTrayApp, SIGNAL(clicked()), SLOT(setChanged())); -+ m_applyOnlySession = new QCheckBox(i18n("Change settings only for current session"), this); -+ topLayout->addWidget(m_applyOnlySession); -+ QWhatsThis::add(m_applyOnlySession, i18n("If this option is enabled the size and orientation settings will be only changed for the current session.")); -+ connect(m_applyOnlySession, SIGNAL(clicked()), SLOT(setChanged())); - - topLayout->addStretch(1); - - // just set the "apply settings on startup" box - load(); -- m_syncTrayApp->setEnabled(m_applyOnStartup->isChecked()); - - slotScreenChanged(QApplication::desktop()->primaryScreen()); - -@@ -272,8 +264,7 @@ void KRandRModule::load( bool useDefaults ) - m_oldApply = loadDisplay(config, false); - m_oldSyncTrayApp = syncTrayApp(config); - -- m_applyOnStartup->setChecked(m_oldApply); -- m_syncTrayApp->setChecked(m_oldSyncTrayApp); -+ m_applyOnlySession->setChecked(!m_oldApply); - - emit changed( useDefaults ); - } -@@ -291,8 +282,7 @@ void KRandRModule::save() - - apply(); - -- m_oldApply = m_applyOnStartup->isChecked(); -- m_oldSyncTrayApp = m_syncTrayApp->isChecked(); -+ m_oldApply = !m_applyOnlySession->isChecked(); - KConfig config("kcmrandrrc"); - saveDisplay(config, m_oldApply, m_oldSyncTrayApp); - -@@ -308,8 +298,7 @@ void KRandRModule::setChanged() - #endif - - -- bool isChanged = (m_oldApply != m_applyOnStartup->isChecked()) || (m_oldSyncTrayApp != m_syncTrayApp->isChecked()); -- m_syncTrayApp->setEnabled(m_applyOnStartup->isChecked()); -+ bool isChanged = (m_oldApply != !m_applyOnlySession->isChecked()); - - if (!isChanged) - for (int screenIndex = 0; screenIndex < numScreens(); screenIndex++) { ---- kcontrol/randr/krandrmodule.h -+++ kcontrol/randr/krandrmodule.h -@@ -79,8 +79,7 @@ protected: - KComboBox* m_sizeCombo; - QButtonGroup* m_rotationGroup; - KComboBox* m_refreshRates; -- QCheckBox* m_applyOnStartup; -- QCheckBox* m_syncTrayApp; -+ QCheckBox* m_applyOnlySession; - bool m_oldApply; - bool m_oldSyncTrayApp; - ---- kcontrol/randr/randrdisplay.cpp -+++ kcontrol/randr/randrdisplay.cpp -@@ -241,7 +241,7 @@ bool RandRDisplay::loadDisplay(KConfig& config, bool loadScreens) - bool RandRDisplay::applyOnStartup(KConfig& config) - { - config.setGroup("Display"); -- return config.readBoolEntry("ApplyOnStartup", false); -+ return config.readBoolEntry("ApplyOnStartup", true); - } - - bool RandRDisplay::syncTrayApp(KConfig& config) -@@ -254,7 +254,6 @@ void RandRDisplay::saveDisplay(KConfig& config, bool applyOnStartup, bool syncTr - { - config.setGroup("Display"); - config.writeEntry("ApplyOnStartup", applyOnStartup); -- config.writeEntry("SyncTrayApp", syncTrayApp); - - #ifdef HAS_RANDR_1_2 - if (RandR::has_1_2) diff --git a/opensuse/tdebase/sourceforge.desktop b/opensuse/tdebase/sourceforge.desktop deleted file mode 100644 index 4a218ad84..000000000 --- a/opensuse/tdebase/sourceforge.desktop +++ /dev/null @@ -1,7 +0,0 @@ -[Desktop Entry] -Encoding=UTF-8 -Type=Service -Name=SourceForge Tracker -ServiceTypes=SearchProvider -Keys=sft -Query=https://sourceforge.net/support/tracker.php?aid=\{@} diff --git a/opensuse/tdebase/spellcheck-default-utf8.diff b/opensuse/tdebase/spellcheck-default-utf8.diff deleted file mode 100644 index 57d49fab6..000000000 --- a/opensuse/tdebase/spellcheck-default-utf8.diff +++ /dev/null @@ -1,13 +0,0 @@ -Index: kcontrol/spellchecking/spellchecking.cpp -=================================================================== ---- kcontrol/spellchecking/spellchecking.cpp.orig -+++ kcontrol/spellchecking/spellchecking.cpp -@@ -67,7 +67,7 @@ void KSpellCheckingConfig::defaults() - spellConfig->setRunTogether(0); - spellConfig->setDictionary(""); - spellConfig->setDictFromList(FALSE); -- spellConfig->setEncoding (KS_E_ASCII); -+ spellConfig->setEncoding (KS_E_UTF8); - spellConfig->setClient (KS_CLIENT_ISPELL); - } - diff --git a/opensuse/tdebase/startkde.diff b/opensuse/tdebase/startkde.diff deleted file mode 100644 index c7cd061ce..000000000 --- a/opensuse/tdebase/startkde.diff +++ /dev/null @@ -1,80 +0,0 @@ -Index: startkde -=================================================================== ---- startkde.orig -+++ startkde -@@ -3,6 +3,9 @@ - # DEFAULT KDE STARTUP SCRIPT ( KDE-3.5.10 ) - # - -+PATH=/opt/kde3/bin:${PATH/:\/opt\/kde3\/bin} -+export PATH -+test -x /usr/bin/xrandr && /usr/bin/xrandr --auto - # When the X server dies we get a HUP signal from xinit. We must ignore it - # because we still need to do some cleanup. - trap 'echo GOT SIGHUP' HUP -@@ -19,7 +22,7 @@ fi - # people's heads. We use colours from the standard KDE palette for those with - # palettised displays. - if test -z "$XDM_MANAGED" || echo "$XDM_MANAGED" | grep ",auto" > /dev/null; then -- xsetroot -solid "#000000" -+ : # xsetroot -solid "#C0C0C0" - fi - - # we have to unset this for Darwin since it will screw up KDE's dynamic-loading -@@ -62,7 +65,7 @@ cat >$kdehome/share/config/startupconfig - kcminputrc Mouse cursorTheme '' - kcminputrc Mouse cursorSize '' - kpersonalizerrc General FirstLogin true --ksplashrc KSplash Theme Default -+ksplashrc KSplash Theme ksplashx-suse - kcmrandrrc Display ApplyOnStartup false - kcmrandrrc [Screen0] - kcmrandrrc [Screen1] -@@ -160,6 +163,16 @@ Xft.dpi: 96 - EOF - fi - -+case "$ksplashrc_ksplash_theme" in -+ ksplashx-*) -+ if test -x /opt/kde3/bin/ksplashx; then -+ /opt/kde3/bin/ksplashx ${ksplashrc_ksplash_theme#ksplashx-} -+ else -+ ksplashrc_ksplash_theme=Default -+ fi -+ ;; -+esac -+ - # Source scripts found in /env/*.sh and /env/*.sh - # (where is $KDEHOME or ~/.kde, and is where KDE is installed) - # -@@ -286,7 +299,7 @@ dcopserver_shutdown - echo 'startkde: Starting up...' 1>&2 - - # run KPersonalizer before the session, if this is the first login --if test "$kpersonalizerrc_general_firstlogin" = "true"; then -+if false && test "$kpersonalizerrc_general_firstlogin" = "true"; then - # start only dcopserver, don't start whole kdeinit (takes too long) - echo 'startkde: Running kpersonalizer...' 1>&2 - dcopserver -@@ -305,6 +318,8 @@ if test -z "$dl"; then - case "$ksplashrc_ksplash_theme" in - None) - ;; # nothing -+ ksplashx-*) -+ ;; # started earlier - Simple) - if test "$kpersonalizerrc_general_firstlogin" = "true"; then - ksplashsimple -@@ -384,9 +399,11 @@ done - echo 'startkde: Shutting down...' 1>&2 - - # Clean up -+if test -e /opt/kde3/bin/artsshell; then -+ artsshell -q terminate -+fi - kdeinit_shutdown - dcopserver_shutdown --wait --artsshell -q terminate - # KDE4 support - kde4 kdeinit4_shutdown 2>/dev/null - diff --git a/opensuse/tdebase/startkde.suse.sh b/opensuse/tdebase/startkde.suse.sh deleted file mode 100644 index 28c200695..000000000 --- a/opensuse/tdebase/startkde.suse.sh +++ /dev/null @@ -1,140 +0,0 @@ - -# -# do we run in a prelinked system ? -# -if test -f /etc/sysconfig/prelink; then -. /etc/sysconfig/prelink - if test "$USE_PRELINK" = "yes" ; then - KDE_IS_PRELINKED=1 - export KDE_IS_PRELINKED - else - unset KDE_IS_PRELINKED - fi -fi - -# -# Do we have a special Gtk theming for our Qt widget theme ? -# -if [ ! -e $HOME/.no-qtrc-to-gtkrc-mapping ]; then - - SUSE_VERSION="`cat /etc/SuSE-release | sed -n 's/VERSION = //p'`" - - # Defaults for SuSE 9.0 - GTK2_SYSCONFDIR=/etc/opt/gnome - GTK2_DATADIR=/opt/gnome/share/themes/ - - # use general gtk-qt-engine - if [ -e "$GTK2_DATADIR/Qt/gtk-2.0/gtkrc" ] ; then - GTK2_THEME_RC="$GTK2_DATADIR/Qt/gtk-2.0/gtkrc" - fi - - # GTK2 - # NOTE: ~/.gtkrc-2.0-kde is added later (in latest KDE only) - if [ "$GTK2_RC_FILES" ]; then - export GTK2_RC_FILES="$GTK2_RC_FILES:$GTK2_THEME_RC:$HOME/.gtkrc-2.0-qtengine:$HOME/.gtkrc-2.0" - else - export GTK2_RC_FILES="$GTK2_SYSCONFDIR/gtk-2.0/gtkrc:$GTK2_THEME_RC:$HOME/.gtkrc-2.0-qtengine:$HOME/.gtkrc-2.0" - fi - -fi - -# -# use optimized libs, if your CPU has the needed support -# (kdemultimedia package has some SSE optimized libs) -[ -z "$LD_HWCAP_MASK" ] && export LD_HWCAP_MASK=0x20000000 - -if [ -r /etc/sysconfig/windowmanager ]; then - # Do the user want the SuSE theme ? - source /etc/sysconfig/windowmanager - - # Should we really enable FAM support for KDE ? - export USE_FAM="$KDE_USE_FAM" - - # Disable IPv6 ? - if [ "$KDE_USE_IPV6" = "no" ]; then - export KDE_NO_IPV6=1 - fi - # Disable IDN ? - if [ "$KDE_USE_IDN" = "no" ]; then - export KDE_NO_IDN=1 - fi - -else - if [ -r /etc/rc.config ]; then - # Do the user want the SuSE theme ? - INSTALL_DESKTOP_EXTENSIONS=`bash -c "source /etc/rc.config && echo \\$INSTALL_DESKTOP_EXTENSIONS"` - - # Should we really enable FAM support for KDE ? - USE_FAM=`bash -c "source /etc/rc.config && echo \\$KDE_USE_FAM"` - export USE_FAM - fi -fi - -# -# create SuSE defaults -# -if [ "$INSTALL_DESKTOP_EXTENSIONS" == "yes" ]; then - if [ -x /opt/kde3/bin/kde-open ]; then - export DESKTOP_LAUNCH=kde-open - fi - if [ "$USER" == "root" ]; then - if [ ! -e "$HOME/.skel/kdebase3" -a ! -e "$KDEHOME/share/config/kdeglobals" ]; then - if [ -e "/opt/kde3/bin/startkde.theme.unitedlinux" ]; then - . /opt/kde3/bin/startkde.theme.unitedlinux - copy_default_root_ul "$KDEHOME" - create_default_desktop_ul "$HOME/Desktop/" - fi - - if [ -e "/opt/kde3/bin/startkde.theme" ]; then - . /opt/kde3/bin/startkde.theme - fi - copy_default_root "$KDEHOME" - create_default_desktop "$HOME/Desktop/" - mkdir -p $HOME/.skel/ - touch $HOME/.skel/kdebase3 $HOME/.skel/kdebase3.91 - fi - else - if [ ! -e "$HOME/.skel/kdebase3" -a ! -e "$KDEHOME/share/config/kdeglobals" ]; then - if [ -e "/opt/kde3/bin/startkde.theme.unitedlinux" ]; then - . /opt/kde3/bin/startkde.theme.unitedlinux - copy_default_user_ul "$KDEHOME" - create_default_desktop_ul "$HOME/Desktop/" - fi - - if [ -e "/opt/kde3/bin/startkde.theme" ]; then - . /opt/kde3/bin/startkde.theme - fi - copy_default_user "$KDEHOME" - create_default_desktop "$HOME/Desktop/" - mkdir -p $HOME/.skel/ - touch $HOME/.skel/kdebase3 $HOME/.skel/kdebase3.91 - fi - fi - if [ -e /opt/kde3/bin/startkde.update93 -a ! -e "$HOME/.skel/kdebase3.93" ]; then - . /opt/kde3/bin/startkde.update93 - mkdir -p $HOME/.skel/ - touch $HOME/.skel/kdebase3.93 - fi - for i in /opt/kde3/share/UnitedLinux/addon-scripts/*; do - [ -r "$i" ] && \ - . "$i" - done -fi - -# check if any rpms have been (un)installed since ksycoca -# had been built, if yes, trigger ksycoca rebuild immediatelly -# instead of delayed - -kdehome=$HOME/.kde -test -n "$KDEHOME" && kdehome=`echo "$KDEHOME"|sed "s,^~/,$HOME/,"` -host=$HOSTNAME -test -n "$XAUTHLOCALHOSTNAME" && host=$XAUTHLOCALHOSTNAME -ksycoca="$kdehome/cache-$host/ksycoca" - -if test -f "$ksycoca"; then - if test -f /var/lib/rpm/Packages; then - if test /var/lib/rpm/Packages -nt "$ksycoca"; then - rm -f "$ksycoca" - fi - fi -fi diff --git a/opensuse/tdebase/stopkde.suse.sh b/opensuse/tdebase/stopkde.suse.sh deleted file mode 100644 index 54f7de3a3..000000000 --- a/opensuse/tdebase/stopkde.suse.sh +++ /dev/null @@ -1,13 +0,0 @@ -#! /bin/sh - -if test -n "$SSH_AGENT_PID"; then - ssh-agent -k -fi - -if test -n "$GPG_AGENT_INFO"; then - pid=`echo "$GPG_AGENT_INFO" | cut -d: -f2` - if test -n "$pid"; then - kill $pid - fi -fi - diff --git a/opensuse/tdebase/suse_default_move.diff b/opensuse/tdebase/suse_default_move.diff deleted file mode 100644 index 1eb938e20..000000000 --- a/opensuse/tdebase/suse_default_move.diff +++ /dev/null @@ -1,83 +0,0 @@ -Index: empty/Makefile.am -=================================================================== ---- /dev/null -+++ empty/Makefile.am -@@ -0,0 +1,17 @@ -+# set the include path for X, qt and KDE -+INCLUDES= $(all_includes) -+ -+# you can add here more. This one gets installed -+bin_PROGRAMS = default_desktop_aligning -+ -+# Which sources should be compiled -+default_desktop_aligning_SOURCES = moving.cpp KDesktopIface.stub -+ -+# the library search path. -+default_desktop_aligning_LDFLAGS = $(all_libraries) $(KDE_RPATH) -+ -+# the libraries to link against. Be aware of the order. First the libraries, -+# that depend on the following ones. -+default_desktop_aligning_LDADD = $(LIB_KDEUI) -+ -+KDesktopIface_DIR = $(srcdir)/../kdesktop -Index: empty/moving.cpp -=================================================================== ---- /dev/null -+++ empty/moving.cpp -@@ -0,0 +1,56 @@ -+#include -+#include -+#include -+#include "KDesktopIface_stub.h" -+#include -+#include -+#include -+#include -+#include -+#include -+ -+int main(int argc, char **argv) -+{ -+ KCmdLineArgs::init(argc, argv, "default_desktop_moving", -+ "move the icons on the correct place on initial boot", -+ "0.1"); -+ KApplication app; -+ QStringList icons = KGlobal::dirs()->findAllResources("data", "default_desktop/*.desktop"); -+ char buffer[PATH_MAX]; -+ strcpy(buffer, "/tmp/suse_desktop_XXXXXX"); -+ mkdtemp(buffer); -+ QString tname = QString::fromLatin1(buffer); -+ -+ icons.sort(); -+ -+ KDesktopIface_stub stub("kdesktop", "KDesktopIface"); -+ KConfig c( "kdesktoprc" ); -+ c.setGroup( "General" ); -+ -+ if ( c.readBoolEntry( "CopyDesktopLinks", true ) ) -+ for (QStringList::ConstIterator it = icons.begin(); it != icons.end(); ++it) -+ { -+ QString name = *it; -+ QPoint t; -+ bool col = (name.mid(name.findRev('/') + 1, 4) == "COL_"); -+ name = name.mid(name.findRev('/') + 5, name.length()); -+ int index = name.find('_'); -+ int num = name.left(index).toInt(); -+ -+ if (col) -+ t = stub.findPlaceForIcon(num, -1); -+ else -+ t = stub.findPlaceForIcon(-1, num); -+ QFileInfo f(*it); -+ -+ name = name.mid(name.find('_', index + 1) + 1, name.length()); -+ -+ if ( 0 == system(QString("mv '%1' '%1'").arg(*it).arg(tname + "/" + name).local8Bit()) ) -+ stub.addIcon( tname + "/" + name, t.x(), t.y()); -+ -+ sleep(2); // only need to make sure kdesktop goes back in event loop -+ } -+ stub.lineupIcons(); -+ system(QString("rm -f %1/moving_desktop.desktop").arg(KGlobalSettings::autostartPath()).latin1()); -+ system(QString("rm -rf '%1'").arg(tname).local8Bit()); -+} diff --git a/opensuse/tdebase/suspend-kpowersave.diff b/opensuse/tdebase/suspend-kpowersave.diff deleted file mode 100644 index 13aaa131c..000000000 --- a/opensuse/tdebase/suspend-kpowersave.diff +++ /dev/null @@ -1,178 +0,0 @@ -Subject: Use KPowersave for suspend if available -From: Lubos Lunak -Bug: bnc#326848 -Patch-upstream: No - ---- kicker/kicker/ui/k_new_mnu.cpp.sav 2008-11-20 10:12:42.000000000 +0100 -+++ kicker/kicker/ui/k_new_mnu.cpp 2008-11-20 13:49:20.000000000 +0100 -@@ -3691,6 +3691,9 @@ int KMenu::max_items(int category) const - - #ifdef KDELIBS_SUSE - #include -+ -+#include -+#include - #endif - - void KMenu::insertSuspendOption( int &nId, int &index ) -@@ -3699,6 +3702,14 @@ void KMenu::insertSuspendOption( int &nI - int supported = -1; - bool suspend_ram, suspend_disk, standby; - -+ DCOPRef kpowersave( "kpowersave", "KPowersaveIface" ); -+ DCOPReply reply = kpowersave.call( "allowed_sleepingStates" ); -+ if( reply.isValid()) { -+ QStringList supported = reply; -+ suspend_ram = supported.contains( "suspendToRAM" ); -+ suspend_disk = supported.contains( "suspendToDisk" ); -+ standby = supported.contains( "standBy" ); -+ } else { - liblazy_hal_get_property_bool(HAL_UDI_COMPUTER, "power_management.can_suspend", &supported); - if (supported == 1) - suspend_ram = true; -@@ -3721,6 +3732,7 @@ void KMenu::insertSuspendOption( int &nI - suspend_ram = false; - if (liblazy_hal_is_caller_privileged("org.freedesktop.hal.power-management.standby") != 1) - standby = false; -+ } - - if ( ! ( standby + suspend_ram + suspend_disk ) ) - return; -@@ -3745,6 +3757,25 @@ void KMenu::slotSuspend(int id) - { - #ifdef KDELIBS_SUSE - int error = 0; -+ -+ DCOPRef kpowersave( "kpowersave", "KPowersaveIface" ); -+ DCOPReply reply = kpowersave.call( "allowed_sleepingStates" ); -+ if( reply.isValid()) { -+ bool ok; -+ extern Time qt_x_time; -+ XUngrabKeyboard( qt_xdisplay(), qt_x_time ); -+ XUngrabPointer( qt_xdisplay(), qt_x_time ); -+ XSync( qt_xdisplay(), False ); -+ if( id == 1 ) -+ ok = kpowersave.call( "do_suspendToDisk" ); -+ else if( id == 2 ) -+ ok = kpowersave.call( "do_suspendToRAM" ); -+ else if( id == 3 ) -+ ok = kpowersave.call( "do_standBy" ); -+ else -+ return; -+ error = ok ? 0 : 1; -+ } else { - int wake = 0; - DBusMessage *reply = 0; - -@@ -3773,6 +3804,8 @@ void KMenu::slotSuspend(int id) - DBUS_TYPE_INVALID); - else - return; -+ } -+ - if (error) - #endif - KMessageBox::error(this, i18n("Suspend failed")); ---- ksmserver/shutdowndlg.cpp.sav 2008-11-20 10:12:41.000000000 +0100 -+++ ksmserver/shutdowndlg.cpp 2008-11-20 13:34:19.000000000 +0100 -@@ -40,6 +40,7 @@ Copyright (C) 2000 Matthias Ettrich - #include - #include -+#include - - #include - #include -@@ -264,6 +265,14 @@ KSMShutdownDlg::KSMShutdownDlg( QWidget* - } else - QToolTip::add( btnReboot, i18n( "

    Restart Computer

    Log out of the current session and restart the computer

    " ) ); - -+ DCOPRef kpowersave( "kpowersave", "KPowersaveIface" ); -+ DCOPReply reply = kpowersave.call( "allowed_sleepingStates" ); -+ if( reply.isValid()) { -+ QStringList supported = reply; -+ suspend_ram = supported.contains( "suspendToRAM" ); -+ suspend_disk = supported.contains( "suspendToDisk" ); -+ standby = supported.contains( "standBy" ); -+ } else { - int supported = -1; - liblazy_hal_get_property_bool(HAL_UDI_COMPUTER, "power_management.can_suspend", &supported); - if (supported == 1) -@@ -287,6 +296,7 @@ KSMShutdownDlg::KSMShutdownDlg( QWidget* - suspend_ram = false; - if (liblazy_hal_is_caller_privileged("org.freedesktop.hal.power-management.standby") != 1) - standby = false; -+ } - - int sum = standby + suspend_ram + suspend_disk; - if ( sum ) { -@@ -325,6 +335,24 @@ KSMShutdownDlg::KSMShutdownDlg( QWidget* - void KSMShutdownDlg::slotSuspend() - { - int error = 0; -+ DCOPRef kpowersave( "kpowersave", "KPowersaveIface" ); -+ DCOPReply reply = kpowersave.call( "allowed_sleepingStates" ); -+ if( reply.isValid()) { -+ bool ok; -+ // so that screen locking can take place -+ extern Time qt_x_time; -+ XUngrabKeyboard( qt_xdisplay(), qt_x_time ); -+ XUngrabPointer( qt_xdisplay(), qt_x_time ); -+ XSync( qt_xdisplay(), False ); -+ if( suspend_disk ) -+ ok = kpowersave.call( "do_suspendToDisk" ); -+ else if( suspend_ram ) -+ ok = kpowersave.call( "do_suspendToRAM" ); -+ else -+ ok = kpowersave.call( "do_standBy" ); -+ error = ok ? 0 : 1; -+ } else { -+ - int wake = 0; - DBusMessage *reply; - -@@ -351,6 +379,7 @@ void KSMShutdownDlg::slotSuspend() - "Standby", - &reply, - DBUS_TYPE_INVALID); -+ } - - if (error) - KMessageBox::error(this, i18n("Suspend failed")); -@@ -362,6 +391,27 @@ void KSMShutdownDlg::slotSuspend() - void KSMShutdownDlg::slotSuspend(int id) - { - int error = 0; -+ -+ DCOPRef kpowersave( "kpowersave", "KPowersaveIface" ); -+ DCOPReply reply = kpowersave.call( "allowed_sleepingStates" ); -+ if( reply.isValid()) { -+ bool ok; -+ extern Time qt_x_time; -+ XUngrabKeyboard( qt_xdisplay(), qt_x_time ); -+ XUngrabPointer( qt_xdisplay(), qt_x_time ); -+ XSync( qt_xdisplay(), False ); -+ if( suspend_disk && id == 1 ) -+ ok = kpowersave.call( "do_suspendToDisk" ); -+ else if( suspend_ram && id == 2 ) -+ ok = kpowersave.call( "do_suspendToRAM" ); -+ else if( standby && id == 3 ) -+ ok = kpowersave.call( "do_standBy" ); -+ else -+ return; -+ error = ok ? 0 : 1; -+ } else { -+ -+ - int wake = 0; - DBusMessage *reply; - -@@ -390,6 +440,8 @@ void KSMShutdownDlg::slotSuspend(int id) - DBUS_TYPE_INVALID); - else - return; -+ } -+ - if (error) - KMessageBox::error(this, i18n("Suspend failed")); - diff --git a/opensuse/tdebase/suspend-unmount.diff b/opensuse/tdebase/suspend-unmount.diff deleted file mode 100644 index dabdd1271..000000000 --- a/opensuse/tdebase/suspend-unmount.diff +++ /dev/null @@ -1,179 +0,0 @@ -Index: kioslave/media/libmediacommon/medium.cpp -=================================================================== ---- kioslave/media/libmediacommon/medium.cpp.orig -+++ kioslave/media/libmediacommon/medium.cpp -@@ -42,6 +42,7 @@ Medium::Medium(const QString &id, const - loadUserLabel(); - - m_halmounted = false; -+ m_isHotplug = false; - } - - Medium::Medium() -@@ -59,8 +60,9 @@ Medium::Medium() - m_properties+= QString::null; /* BASE_URL */ - m_properties+= QString::null; /* MIME_TYPE */ - m_properties+= QString::null; /* ICON_NAME */ -- -+ - m_halmounted = false; -+ m_isHotplug = false; - } - - const Medium Medium::create(const QStringList &properties) -Index: kioslave/media/libmediacommon/medium.h -=================================================================== ---- kioslave/media/libmediacommon/medium.h.orig -+++ kioslave/media/libmediacommon/medium.h -@@ -82,18 +82,22 @@ public: - void setHalMounted(bool flag) const { m_halmounted = flag; } - bool halMounted() const { return m_halmounted; } - -+ void setIsHotplug( bool state ) { m_isHotplug = state; } -+ bool isHotplug() const { return m_isHotplug; } -+ - private: - Medium(); - void loadUserLabel(); - - QStringList m_properties; - mutable bool m_halmounted; -- -+ bool m_isHotplug; -+ - friend class QValueListNode; - }; - - namespace MediaManagerUtils { -- static inline QMap splitOptions(const QStringList & options) -+ static inline QMap splitOptions(const QStringList & options) - { - QMap valids; - -Index: kioslave/media/mediamanager/mediamanager.cpp -=================================================================== ---- kioslave/media/mediamanager/mediamanager.cpp.orig -+++ kioslave/media/mediamanager/mediamanager.cpp -@@ -330,6 +330,54 @@ void MediaManager::slotMediumChanged(con - emit mediumChanged(name); - } - -+QString MediaManager::unmountAllSuspend() -+{ -+ QPtrList list = m_mediaList.list(); -+ -+ QPtrList::const_iterator it = list.begin(); -+ QPtrList::const_iterator end = list.end(); -+ -+ QString result; -+ -+ for (; it!=end; ++it) -+ { -+ if ( (*it)->isMounted() && (*it)->isHotplug() ) -+ { -+ QString tmp = unmount( (*it)->id() ); -+ if ( !tmp.isEmpty() ) // umount failed -+ result = tmp; -+ else -+ m_suspendResumeMountList.append( (*it)->id() ); -+ } -+ } -+ -+ // return last error -+ return result; -+} -+ -+QString MediaManager::remountAllResume() -+{ -+ QString result; -+ -+ for (QStringList::const_iterator it = m_suspendResumeMountList.begin(); -+ it != m_suspendResumeMountList.end(); -+ ++it) -+ { -+ const Medium *m = m_mediaList.findById(*it); -+ -+ if ( m && m->needMounting() ) -+ { -+ QString tmp = mount( *it ); -+ if ( !tmp.isEmpty() ) // mount failed -+ result = tmp; -+ } -+ } -+ -+ m_suspendResumeMountList.clear(); -+ -+ // return last error -+ return result; -+} - - extern "C" { - KDE_EXPORT KDEDModule *create_mediamanager(const QCString &obj) -Index: kioslave/media/mediamanager/mediamanager.h -=================================================================== ---- kioslave/media/mediamanager/mediamanager.h.orig -+++ kioslave/media/mediamanager/mediamanager.h -@@ -58,6 +58,20 @@ k_dcop: - bool removableUnplug(const QString &devNode); - bool removableCamera(const QString &devNode); - -+ /** -+ * Unmount manually all partitions when going to suspend -+ * -+ * @return last error if any -+ */ -+ QString unmountAllSuspend(); -+ -+ /** -+ * Remount previously unmounted partitions in unmountAllSuspend() -+ * -+ * @return last error if any -+ */ -+ QString remountAllResume(); -+ - k_dcop_signals: - void mediumAdded(const QString &name, bool allowNotification); - void mediumRemoved(const QString &name, bool allowNotification); -@@ -70,7 +84,7 @@ k_dcop_signals: - - private slots: - void loadBackends(); -- -+ - void slotMediumAdded(const QString &id, const QString &name, - bool allowNotification); - void slotMediumRemoved(const QString &id, const QString &name, -@@ -85,6 +99,7 @@ private: - HALBackend *m_halbackend; - MediaDirNotify m_dirNotify; - FstabBackend *m_fstabbackend; -+ QStringList m_suspendResumeMountList; - }; - - #endif -Index: kioslave/media/mediamanager/halbackend.cpp -=================================================================== ---- kioslave/media/mediamanager/halbackend.cpp.orig -+++ kioslave/media/mediamanager/halbackend.cpp -@@ -459,6 +459,8 @@ void HALBackend::setVolumeProperties(Med - libhal_volume_get_fstype(halVolume), /* Filesystem type */ - libhal_volume_is_mounted(halVolume) ); /* Mounted ? */ - -+ medium->setIsHotplug( libhal_drive_is_hotpluggable(halDrive) ); -+ - char* name = libhal_volume_policy_compute_display_name(halDrive, halVolume, m_halStoragePolicy); - QString volume_name = QString::fromUtf8(name); - QString media_name = volume_name; -Index: kioslave/media/mediamanager/halbackend.h -=================================================================== ---- kioslave/media/mediamanager/halbackend.h.orig -+++ kioslave/media/mediamanager/halbackend.h -@@ -86,6 +86,8 @@ public: - QString mount(const Medium *medium); - QString unmount(const QString &id); - -+ static bool isHotplug( const QString & id ); -+ - private: - /** - * Append a device in the media list. This function will check if the device diff --git a/opensuse/tdebase/system-folder_man.diff b/opensuse/tdebase/system-folder_man.diff deleted file mode 100644 index 98fd9e08f..000000000 --- a/opensuse/tdebase/system-folder_man.diff +++ /dev/null @@ -1,13 +0,0 @@ -Index: kioslave/system/entries/documents.desktop -=================================================================== ---- kioslave/system/entries/documents.desktop.orig -+++ kioslave/system/entries/documents.desktop -@@ -1,7 +1,7 @@ - [Desktop Entry] - Type=Link - Path[$e]=$( kio_system_documenthelper ) --Icon=folder_important -+Icon=folder_man - Name=Documents Folder - Name[af]=Dokument Gids - Name[ar]=مستنداتي diff --git a/opensuse/tdebase/systray_order.diff b/opensuse/tdebase/systray_order.diff deleted file mode 100644 index b864afc8e..000000000 --- a/opensuse/tdebase/systray_order.diff +++ /dev/null @@ -1,162 +0,0 @@ -Index: kicker/applets/systemtray/systemtrayapplet.cpp -=================================================================== ---- kicker/applets/systemtray/systemtrayapplet.cpp.orig -+++ kicker/applets/systemtray/systemtrayapplet.cpp -@@ -187,6 +187,7 @@ bool SystemTrayApplet::x11Event( XEvent - if( isWinManaged( (WId)e->xclient.data.l[2] ) ) // we already manage it - return true; - embedWindow( e->xclient.data.l[2], false ); -+ updateVisibleWins(); - layoutTray(); - return true; - } -@@ -213,13 +214,12 @@ void SystemTrayApplet::preferences() - connect(m_settingsDialog, SIGNAL(finished()), this, SLOT(settingsDialogFinished())); - - m_iconSelector = new KActionSelector(m_settingsDialog); -- m_iconSelector->setAvailableLabel(i18n("Visible icons:")); -- m_iconSelector->setSelectedLabel(i18n("Hidden icons:")); -- m_iconSelector->setShowUpDownButtons(false); -+ m_iconSelector->setAvailableLabel(i18n("Hidden icons:")); -+ m_iconSelector->setSelectedLabel(i18n("Visible icons:")); - m_settingsDialog->setMainWidget(m_iconSelector); - -- QListBox *shownListBox = m_iconSelector->availableListBox(); -- QListBox *hiddenListBox = m_iconSelector->selectedListBox(); -+ QListBox *hiddenListBox = m_iconSelector->availableListBox(); -+ QListBox *shownListBox = m_iconSelector->selectedListBox(); - - TrayEmbedList::const_iterator it = m_shownWins.begin(); - TrayEmbedList::const_iterator itEnd = m_shownWins.end(); -@@ -261,26 +261,48 @@ void SystemTrayApplet::applySettings() - } - - KConfig *conf = config(); -- conf->setGroup("HiddenTrayIcons"); -- QString name; - -- // use the following snippet of code someday to implement ordering -- // of icons -- /* -- m_visibleIconList.clear(); -- QListBoxItem* item = m_iconSelector->availableListBox()->firstItem(); -- for (; item; item = item->next()) -+ // Save the sort order and hidden status using the window class (WM_CLASS) rather -+ // than window name (caption) - window name is i18n-ed, so it's for example -+ // not possible to create default settings. -+ // For backwards compatibility, name is kept as it is, class is preceded by '!'. -+ QMap< QString, QString > windowNameToClass; -+ for( TrayEmbedList::ConstIterator it = m_shownWins.begin(); -+ it != m_shownWins.end(); -+ ++it ) { -+ KWin::WindowInfo info = KWin::windowInfo( (*it)->embeddedWinId(), NET::WMName, NET::WM2WindowClass); -+ windowNameToClass[ info.name() ] = '!' + info.windowClassClass(); -+ } -+ for( TrayEmbedList::ConstIterator it = m_hiddenWins.begin(); -+ it != m_hiddenWins.end(); -+ ++it ) { -+ KWin::WindowInfo info = KWin::windowInfo( (*it)->embeddedWinId(), NET::WMName, NET::WM2WindowClass); -+ windowNameToClass[ info.name() ] = '!' + info.windowClassClass(); -+ } -+ -+ conf->setGroup("SortedTrayIcons"); -+ m_sortOrderIconList.clear(); -+ for(QListBoxItem* item = m_iconSelector->selectedListBox()->firstItem(); -+ item; -+ item = item->next()) - { -- m_visibleIconList.append(item->text()); -+ if( windowNameToClass.contains(item->text())) -+ m_sortOrderIconList.append(windowNameToClass[item->text()]); -+ else -+ m_sortOrderIconList.append(item->text()); - } -- conf->writeEntry("Visible", m_visibleIconList); -- selection.clear();*/ -+ conf->writeEntry("SortOrder", m_sortOrderIconList); - -+ conf->setGroup("HiddenTrayIcons"); - m_hiddenIconList.clear(); -- QListBoxItem* item = m_iconSelector->selectedListBox()->firstItem(); -- for (; item; item = item->next()) -+ for(QListBoxItem* item = m_iconSelector->availableListBox()->firstItem(); -+ item; -+ item = item->next()) - { -- m_hiddenIconList.append(item->text()); -+ if( windowNameToClass.contains(item->text())) -+ m_hiddenIconList.append(windowNameToClass[item->text()]); -+ else -+ m_hiddenIconList.append(item->text()); - } - conf->writeEntry("Hidden", m_hiddenIconList); - conf->sync(); -@@ -416,6 +438,9 @@ void SystemTrayApplet::loadSettings() - conf->setGroup("HiddenTrayIcons"); - m_hiddenIconList = conf->readListEntry("Hidden"); - -+ conf->setGroup("SortedTrayIcons"); -+ m_sortOrderIconList = conf->readListEntry("SortOrder"); -+ - //Note This setting comes from kdeglobal. - conf->setGroup("System Tray"); - m_iconSize = conf->readNumEntry("systrayIconWidth", 22); -@@ -505,7 +530,9 @@ bool SystemTrayApplet::isWinManaged(WId - - bool SystemTrayApplet::shouldHide(WId w) - { -- return m_hiddenIconList.find(KWin::windowInfo(w).name()) != m_hiddenIconList.end(); -+ return m_hiddenIconList.find(KWin::windowInfo(w).name()) != m_hiddenIconList.end() -+ || m_hiddenIconList.find('!'+KWin::windowInfo(w,0,NET::WM2WindowClass).windowClassClass()) -+ != m_hiddenIconList.end(); - } - - void SystemTrayApplet::updateVisibleWins() -@@ -529,6 +556,35 @@ void SystemTrayApplet::updateVisibleWins - (*emb)->hide(); - } - } -+ -+ QMap< QXEmbed*, QString > names; // cache window names and classes -+ QMap< QXEmbed*, QString > classes; -+ for( TrayEmbedList::const_iterator it = m_shownWins.begin(); -+ it != m_shownWins.end(); -+ ++it ) { -+ KWin::WindowInfo info = KWin::windowInfo((*it)->embeddedWinId(),NET::WMName,NET::WM2WindowClass); -+ names[ *it ] = info.name(); -+ classes[ *it ] = '!'+info.windowClassClass(); -+ } -+ TrayEmbedList newList; -+ for( QStringList::const_iterator it1 = m_sortOrderIconList.begin(); -+ it1 != m_sortOrderIconList.end(); -+ ++it1 ) { -+ for( TrayEmbedList::iterator it2 = m_shownWins.begin(); -+ it2 != m_shownWins.end(); -+ ) { -+ if( (*it1).startsWith("!") ? classes[ *it2 ] == *it1 : names[ *it2 ] == *it1 ) { -+ newList.append( *it2 ); // don't bail out, there may be multiple ones -+ it2 = m_shownWins.erase( it2 ); -+ } else -+ ++it2; -+ } -+ } -+ for( TrayEmbedList::const_iterator it = m_shownWins.begin(); -+ it != m_shownWins.end(); -+ ++it ) -+ newList.append( *it ); // append unsorted items -+ m_shownWins = newList; - } - - void SystemTrayApplet::toggleExpanded() -Index: kicker/applets/systemtray/systemtrayapplet.h -=================================================================== ---- kicker/applets/systemtray/systemtrayapplet.h.orig -+++ kicker/applets/systemtray/systemtrayapplet.h -@@ -97,6 +97,7 @@ private: - TrayEmbedList m_shownWins; - TrayEmbedList m_hiddenWins; - QStringList m_hiddenIconList; -+ QStringList m_sortOrderIconList; - KWinModule *kwin_module; - Atom net_system_tray_selection; - Atom net_system_tray_opcode; diff --git a/opensuse/tdebase/taskbar.patch b/opensuse/tdebase/taskbar.patch deleted file mode 100644 index f8e526e6d..000000000 --- a/opensuse/tdebase/taskbar.patch +++ /dev/null @@ -1,29 +0,0 @@ ---- kicker/taskbar/taskcontainer.cpp.orig 2011-02-12 00:40:57.060389620 +0300 -+++ kicker/taskbar/taskcontainer.cpp 2011-02-12 02:03:08.345389684 +0300 -@@ -576,9 +576,9 @@ - // draw button background - if (drawButton) - { -- style().drawPrimitive(QStyle::PE_HeaderSection, p, -- QRect(0, 0, width(), height()), -- colors); -+ style().drawPrimitive(QStyle::PE_HeaderSection, p, -+ QRect(1, 1, width()-2, height()-2), -+ colors, sunken ? QStyle::Style_Down : QStyle::Style_Raised); - } - - // shift button label on sunken buttons -@@ -674,11 +674,11 @@ - } - else - { -- textPen = p->pen(); -+ textPen = QPen(colors.buttonText()); //textPen = p->pen(); - } - } - -- int availableWidth = width() - (br.x() * 2) - textPos; -+ int availableWidth = width() - (br.x() * 2) - textPos - 4; - if (m_filteredTasks.count() > 1) - { - availableWidth -= 8; diff --git a/opensuse/tdebase/tdebase.changes b/opensuse/tdebase/tdebase.changes deleted file mode 100644 index 5c3add7de..000000000 --- a/opensuse/tdebase/tdebase.changes +++ /dev/null @@ -1,5422 +0,0 @@ -------------------------------------------------------------------- -Wed Aug 17 02:38:36 UTC 2011 - anixx@opensuse.org - -- reenable and repair MTAB watching in fstab plugin for media autodetection without HAL - -------------------------------------------------------------------- -Tue Jul 26 10:26:42 UTC 2011 - anixx@opensuse.org - -- add dependency on libusb-compat-devel to restore Logitech mouse support -- add a simlink to the screensavers directory to fix the issue of their sudden disappearance - -------------------------------------------------------------------- -Thu Jun 9 18:59:49 UTC 2011 - coolo@novell.com - -- do not require something we don't build in factory - -------------------------------------------------------------------- -Wed Jun 1 09:41:05 UTC 2011 - anixx@opensuse.org - -- make hal usage conditional on the project - -------------------------------------------------------------------- -Tue May 31 12:41:04 UTC 2011 - coolo@novell.com - -- remove hal support for 12.1 and some cleanup for long gone distributions - -------------------------------------------------------------------- -Thu Mar 10 08:49:11 UTC 2011 - neptunia@mail.ru - -- fix build - -------------------------------------------------------------------- -Thu Sep 23 00:15:01 CEST 2010 - hpj@urpla.net - -- attempt to fix flashplayer dysfunction - -------------------------------------------------------------------- -Fri Aug 13 17:03:58 UTC 2010 - neptunia@mail.ru - -- removing dependencies on KDE4, restoring ksysguardd but without strict dependency - -------------------------------------------------------------------- -Tue Aug 10 06:04:35 UTC 2010 - beineri@opensuse.org - -- Drop dependencies on Beagle for 11.4 - -------------------------------------------------------------------- -Mon Apr 19 18:51:14 UTC 2010 - tittiatcoke@gmail.com - -- Added patch to enable build with openssl 1.0 - -------------------------------------------------------------------- -Tue Mar 23 12:45:11 UTC 2010 - llunak@novell.com - -- CVE-2010-0436 (bnc#584223) - -------------------------------------------------------------------- -Fri Jan 1 20:09:49 CET 2010 - jengelh@medozas.de - -- package baselibs.conf -- enable full parallel build - -------------------------------------------------------------------- -Fri Nov 20 21:02:01 UTC 2009 - beineri@opensuse.org - -- update patches to apply without fuzz - -------------------------------------------------------------------- -Fri Oct 16 15:07:21 CEST 2009 - llunak@novell.com - -- add .1 to version to allow obsoleting 11.1 version (bnc#529955) - -------------------------------------------------------------------- -Sun Oct 4 06:06:45 UTC 2009 - beineri@opensuse.org - -- make kdebase3-session require kdebase3-workspace (bnc#544173) - -------------------------------------------------------------------- -Thu Jul 23 11:52:14 CEST 2009 - llunak@suse.cz - -- use kdeinit from ksmserver when possible (r967149) - -------------------------------------------------------------------- -Sun Jul 19 12:21:09 CEST 2009 - beineri@opensuse.org - -- fix kdebase3-devel dependencies - -------------------------------------------------------------------- -Sun Jul 12 16:35:28 CEST 2009 - beineri@opensuse.org - -- split off -apps and -workspace sub-packages -- remove some with kde4 packages conflicting man pages - -------------------------------------------------------------------- -Mon Jun 22 07:03:30 CEST 2009 - beineri@opensuse.org - -- remove ancient unversionized obsolete (kdialog) - -------------------------------------------------------------------- -Fri May 29 14:55:51 CEST 2009 - llunak@suse.cz - -- build with gcc 4.4 - -------------------------------------------------------------------- -Mon Apr 20 20:59:26 CEST 2009 - dmueller@suse.de - -- build for SLE_10 without fdupes run - -------------------------------------------------------------------- -Sat Apr 4 17:33:29 CEST 2009 - coolo@suse.de - -- refresh all patches to fix build - -------------------------------------------------------------------- -Thu Dec 11 15:12:11 CET 2008 - dmueller@suse.de - -- fix kdebase3 being pulled in for kde4 installs (bnc#458323) - -------------------------------------------------------------------- -Wed Dec 10 12:34:56 CET 2008 - olh@suse.de - -- use Obsoletes: -XXbit only for ppc64 to help solver during distupgrade - (bnc#437293) - -------------------------------------------------------------------- -Thu Dec 4 12:34:56 CET 2008 - olh@suse.de - -- obsolete old -XXbit packages (bnc#437293) - -------------------------------------------------------------------- -Tue Dec 2 15:07:17 CET 2008 - stbinner@suse.de - -- don't show KNetAttach menu entry on KDE4 desktop - -------------------------------------------------------------------- -Sun Nov 23 17:28:18 CET 2008 - stbinner@suse.de - -- fix build/patch apply on ppc - -------------------------------------------------------------------- -Thu Nov 20 13:59:52 CET 2008 - llunak@suse.cz - -- use KPowersave for suspend if available, so that the screen - is also locked (bnc#326848) - -------------------------------------------------------------------- -Mon Sep 29 10:13:39 CEST 2008 - stbinner@suse.de - -- Update 3_5_BRANCH.diff (bnc#430476) - -------------------------------------------------------------------- -Sun Sep 21 18:56:48 CEST 2008 - wstephenson@suse.de - -- Fix maximum port allowed in knetattach wizard (bnc#335794) - -------------------------------------------------------------------- -Wed Sep 10 00:45:48 CEST 2008 - dmueller@suse.de - -- remove resmgr references from kcheckpass (bnc#422616) - -------------------------------------------------------------------- -Wed Sep 3 00:46:39 CEST 2008 - dmueller@suse.de - -- build against libsensors4 - -------------------------------------------------------------------- -Tue Aug 26 09:46:37 CEST 2008 - llunak@suse.cz - -- fix wallpapers when the number of screens changes (bnc#329221) - -------------------------------------------------------------------- -Sun Aug 24 11:57:13 CEST 2008 - stbinner@suse.de - -- fix build breakage by previous submission -- fix file conflict with kde4-kdm (bnc#411239) - -------------------------------------------------------------------- -Wed Aug 20 18:53:58 CEST 2008 - coolo@suse.de - -- update to KDE 3.5.10 - * many kicker fixes - * translation updates - * desktop files validate - -------------------------------------------------------------------- -Mon Aug 4 13:45:49 CEST 2008 - dmueller@suse.de - -- fix build on 10.2 - -------------------------------------------------------------------- -Thu Jul 24 16:32:56 CEST 2008 - dmueller@suse.de - -- update rotate-wacom pointers patch to work on xrandr 1.2 displays - as well (bnc#385149) - -------------------------------------------------------------------- -Thu Jul 24 16:30:05 CEST 2008 - dmueller@suse.de - -- disable ksysguard openslp patch as it causes hangs - -------------------------------------------------------------------- -Mon Jul 14 00:27:15 CEST 2008 - dmueller@suse.de - -- fix suspend/hibernate buttons for 11.0 and newer (bnc#290917) - -------------------------------------------------------------------- -Wed Jun 11 16:08:14 CEST 2008 - dmueller@suse.de - -- remove kdebase3-nsplugins64 package and add nspluginwrapper - dependency - -------------------------------------------------------------------- -Tue May 20 18:00:46 CEST 2008 - llunak@suse.cz - -- do not always default to kdesu remembering password (bnc#386531) - -------------------------------------------------------------------- -Mon May 19 21:16:25 CEST 2008 - llunak@suse.cz - -- fix broken patch for bnc#332079 - -------------------------------------------------------------------- -Mon May 19 11:15:29 CEST 2008 - thoenig@suse.de - -- add fingerprint reader support: kpamgreeter.diff, - use-pam-before-classic.diff. Closes bnc#339331. - -------------------------------------------------------------------- -Fri May 16 19:25:52 CEST 2008 - dkukawka@suse.de - -- fixed rotate-wacom-pointers.diff to work with current xsetwacom - (bnc#391440) - -------------------------------------------------------------------- -Wed May 14 08:34:36 CEST 2008 - stbinner@suse.de - -- port/renable rotate-wacom-pointers.diff (bnc#385149) - -------------------------------------------------------------------- -Sat May 10 21:37:04 CEST 2008 - stbinner@suse.de - -- move some icons to -runtime because kdelibs3 references them - or they are used in default KDE3 applications on KDE4 desktop - -------------------------------------------------------------------- -Fri May 9 23:46:02 CEST 2008 - dmueller@suse.de - -- fix kdm shutdown being set to "no" during config conversion - -------------------------------------------------------------------- -Fri May 9 10:37:16 CEST 2008 - dmueller@suse.de - -- 3_5_BRANCH.diff update: - * new translations - -------------------------------------------------------------------- -Tue May 6 17:58:58 CEST 2008 - dmueller@suse.de - -- fix uninitialized return in krandrtray - -------------------------------------------------------------------- -Fri May 2 13:49:03 CEST 2008 - llunak@suse.cz - -- avoid kded crash on CD ejecting (bnc#359424) - -------------------------------------------------------------------- -Mon Apr 28 17:48:30 CEST 2008 - llunak@suse.cz - -- switch kdesu backend back to su (bnc#216796) - -------------------------------------------------------------------- -Mon Apr 28 11:15:30 CEST 2008 - dmueller@suse.de - -- add /usr/bin/startkde3 - -------------------------------------------------------------------- -Fri Apr 25 16:38:03 CEST 2008 - dmueller@suse.de - -- update 3_5_BRANCH.diff to include translations -- call xrandr --auto to xvideo issues on xrandr 1.2 setups - -------------------------------------------------------------------- -Thu Apr 17 11:35:35 CEST 2008 - stbinner@suse.de - -- don't build kdebase3-ksysguardd package for 11.0 but require/use - kdebase4-workspace-ksysguardd (bnc#379351) - -------------------------------------------------------------------- -Mon Apr 14 18:09:05 CEST 2008 - llunak@suse.cz - -- improve the low-disk-space dialog (bnc#199054) -- GUI for selecting the WM (bnc#332079) - -------------------------------------------------------------------- -Sun Apr 13 16:10:51 CEST 2008 - dmueller@suse.de - -- fix build against glibc 2.8 -- fix session restore of kde3 apps if kde 4.x is installed - as well - -------------------------------------------------------------------- -Sat Apr 12 08:16:18 CEST 2008 - stbinner@suse.de - -- rename session type from "KDE" to "KDE3" (bnc#379355) - -------------------------------------------------------------------- -Thu Apr 10 12:54:45 CEST 2008 - ro@suse.de - -- added baselibs.conf file to build xxbit packages - for multilib support - -------------------------------------------------------------------- -Thu Apr 3 20:20:28 CEST 2008 - stbinner@suse.de - -- split of misc-console-font subpackage (fate#302474) - -------------------------------------------------------------------- -Thu Apr 3 14:09:47 CEST 2008 - stbinner@suse.de - -- add web shortcut for SourceForge tracker (bnc#331663) - -------------------------------------------------------------------- -Tue Mar 18 19:26:59 CET 2008 - dmueller@suse.de - -- fix shutdown option being reset on each update (bnc#348546) - -------------------------------------------------------------------- -Thu Mar 13 20:29:49 CET 2008 - stbinner@suse.de - -- fix splitting - -------------------------------------------------------------------- -Wed Mar 12 15:29:01 CET 2008 - dmueller@suse.de - -- update 3_5_BRANCH.diff -- further improve kdebase3-runtime splitting - -------------------------------------------------------------------- -Mon Mar 3 11:18:07 CET 2008 - stbinner@suse.de - -- move kreadconfig to kdebase3-runtime - -------------------------------------------------------------------- -Tue Feb 26 14:19:56 CET 2008 - dmueller@suse.de - -- fix sensors support in ksysguardd - -------------------------------------------------------------------- -Mon Feb 18 13:42:36 CET 2008 - dmueller@suse.de - -- add missing split provides - -------------------------------------------------------------------- -Wed Feb 13 23:18:17 CET 2008 - dmueller@suse.de - -- update to 3.5.9 - * bugfixes, translation update - -------------------------------------------------------------------- -Sat Feb 9 06:18:39 CET 2008 - stbinner@suse.de - -- fix position of kdebase3-runtime requirement - -------------------------------------------------------------------- -Fri Feb 8 14:28:23 CET 2008 - stbinner@suse.de - -- split off few parts like KIO-slaves into kdebase3-runtime package - -------------------------------------------------------------------- -Mon Jan 28 12:04:32 CET 2008 - stbinner@suse.de - -- fix build against libbeagle 0.3 - -------------------------------------------------------------------- -Thu Jan 17 10:53:53 CET 2008 - stbinner@suse.de - -- update 3_5_BRANCH.diff for 64bit Flash fixes - -------------------------------------------------------------------- -Wed Jan 2 08:37:44 CET 2008 - stbinner@suse.de - -- add 3_5_BRANCH.diff to pick up nsplugin fixes for Flash - -------------------------------------------------------------------- -Wed Dec 5 12:05:45 CET 2007 - wstephenson@suse.de - -- Remove spurious openldap2, pcsc-lite and libsmbclient build - requirements. - -------------------------------------------------------------------- -Sat Nov 24 20:09:11 CET 2007 - coolo@suse.de - -- require liblazy-devel on 10.3+ - -------------------------------------------------------------------- -Wed Nov 21 14:15:29 CET 2007 - stbinner@suse.de - -- fix build for < 11.0 - -------------------------------------------------------------------- -Fri Nov 16 16:22:06 CET 2007 - tpatzig@suse.de - -- fix, no kryptomedia for already decrypted raid devices (#308196) - -------------------------------------------------------------------- -Fri Nov 16 13:12:13 CET 2007 - dmueller@suse.de - -- remove unneeded source file - -------------------------------------------------------------------- -Fri Nov 2 15:47:22 CET 2007 - jdelvare@suse.de - -- libsensors is in a separate package now. - -------------------------------------------------------------------- -Tue Oct 23 11:42:05 CEST 2007 - stbinner@suse.de - -- fix build with gcc 4.3 -- fix Konqueror not generating previews of b/w photos (#334965) - -------------------------------------------------------------------- -Sat Oct 20 15:24:18 CEST 2007 - schwab@suse.de - -- Remove invalid delete in ~NSPluginStreamBase. - -------------------------------------------------------------------- -Tue Oct 9 11:31:40 CEST 2007 - stbinner@suse.de - -- fix Kickoff layout for Xinerama (#254215) -- update to KDE 3.5.8: bugfixes in pop3 and smtp kio slaves, Kate, - kcontrol, kdesktop, kdm, kwin, Konsole and Konqueror - -------------------------------------------------------------------- -Fri Sep 21 16:19:20 CEST 2007 - stbinner@suse.de - -- fix parameter handling in input field of Kickoff (#325633) - -------------------------------------------------------------------- -Fri Sep 21 15:58:29 CEST 2007 - dmueller@suse.de - -- fix kded crashes on resume when kpowersave is installed (#326488) -- fix Window domain listing in kdm (#292084) - -------------------------------------------------------------------- -Thu Sep 20 19:25:35 CEST 2007 - tpatzig@suse.de - -- update for already mounted crypto_LUKS patch (#308196) - -------------------------------------------------------------------- -Wed Sep 19 22:35:54 CEST 2007 - dmueller@suse.de - -- fix arts being started twice/running after logout (#178930) - -------------------------------------------------------------------- -Wed Sep 19 22:17:03 CEST 2007 - tpatzig@suse.de - -- fix to safely remove (teardown) crypted volumes (#306641) - -------------------------------------------------------------------- -Wed Sep 19 15:56:04 CEST 2007 - dmueller@suse.de - -- fix kdm autologin vulnerability (#307372, CVE-2007-4569) - -------------------------------------------------------------------- -Wed Sep 19 10:50:37 CEST 2007 - stbinner@suse.de - -- fix Kickoff problems with secondary screen (#232446) -- replace khc_beagle-*.py with Perl versions for one CD install - -------------------------------------------------------------------- -Fri Sep 14 15:01:18 CEST 2007 - tpatzig@suse.de - -- let mediamamanger check if crypto_LUKS vol is already mounted - before running kryptomedia-dialog (#308196) - -------------------------------------------------------------------- -Tue Sep 11 13:07:23 CEST 2007 - stbinner@suse.de - -- show folder_man icon in system:/ slave for Documents (#304656) - -------------------------------------------------------------------- -Tue Sep 11 12:12:23 CEST 2007 - dmueller@suse.de - -- reorder patches to apply properly even without uncommitted patches - -------------------------------------------------------------------- -Fri Sep 7 17:47:55 CEST 2007 - dmueller@suse.de - -- fix kdm crash on vnc login (#301374) -- fix DISPLAYMANAGER_SHUTDOWN to work like documented (#308257) - -------------------------------------------------------------------- -Thu Aug 30 16:37:13 CEST 2007 - llunak@suse.cz - -- avoid excessive X errors from kicker (#299594) - -------------------------------------------------------------------- -Tue Aug 28 15:29:19 CEST 2007 - stbinner@suse.de - -- change Kickoff's "Home Folder" and "My Document" icons (#304656) -- check if netscape plugins have changed (eg by YOU) (#296425) - -------------------------------------------------------------------- -Sat Aug 25 11:41:45 CEST 2007 - stbinner@suse.de - -- reorder default Kickoff favorites: Firefox first, Help not last - -------------------------------------------------------------------- -Wed Aug 22 15:42:31 CEST 2007 - stbinner@suse.de - -- don't try to overwrite desktop icons during setup (#278109) -- Lock/Logout applet defaults to wrong button order (#302179) -- don't check for khelpcenter index at application start - -------------------------------------------------------------------- -Sun Aug 19 09:38:47 CEST 2007 - stbinner@suse.de - -- fix build on older distributions -- don't show progress indicator when creating initial desktop icons - -------------------------------------------------------------------- -Thu Aug 16 12:12:05 CEST 2007 - hmacht@suse.de - -- adjust to new liblazy API due to new PolicyKit (>=0.4) (#299733) - -------------------------------------------------------------------- -Tue Aug 14 09:17:54 CEST 2007 - stbinner@suse.de - -- don't package obsolete (x)emacs icons (#299941) -- align kdm user list labels (#294421) -- kxkb: "Include Latin layout" by default for new layouts (#204402) -- fix opening of media with non UTF name (#297886) - -------------------------------------------------------------------- -Fri Aug 10 17:47:36 CEST 2007 - dmueller@suse.de - -- actually enable the consolekit patch (d'oh) - -------------------------------------------------------------------- -Wed Aug 8 18:03:11 CEST 2007 - stbinner@suse.de - -- show "Install Software" menu item within Kickoff "Computer" tab -- don't show "missing icon" icon when an entry icon cannot be found - -------------------------------------------------------------------- -Mon Aug 6 18:43:51 CEST 2007 - dmueller@suse.de - -- add krandr 0.5.2.1 (part of fate 300481) - -------------------------------------------------------------------- -Sat Aug 4 18:49:16 CEST 2007 - stbinner@suse.de - -- update 3_5_BRANCH.diff a last time before freeze - -------------------------------------------------------------------- -Fri Aug 3 15:47:22 CEST 2007 - dmueller@suse.de - -- notify consolekit of logged in users - -------------------------------------------------------------------- -Fri Jul 27 13:56:11 CEST 2007 - stbinner@suse.de - -- add color scheme support to kdm greeter themes (#294421) - -------------------------------------------------------------------- -Mon Jul 16 13:52:32 CEST 2007 - stbinner@suse.de - -- ensure that correct kcmshell is called (#277292) - -------------------------------------------------------------------- -Mon Jul 16 11:39:13 CEST 2007 - dmueller@suse.de - -- update from 3.5 branch to include bugfixes (#287193) - -------------------------------------------------------------------- -Fri Jul 13 11:45:20 CEST 2007 - stbinner@suse.de - -- activate text completion editor in mini-CLI and Konqueror URL bar - -------------------------------------------------------------------- -Thu Jul 12 11:40:17 CEST 2007 - stbinner@suse.de - -- fix ugly scaled remote:/ image in kickoff (#258462) - -------------------------------------------------------------------- -Tue Jul 10 07:07:57 CEST 2007 - stbinner@suse.de - -- fix build on SUSE_Linux_10.0 - -------------------------------------------------------------------- -Thu Jun 21 18:20:58 CEST 2007 - stbinner@suse.de - -- fix invalid .desktop files - -------------------------------------------------------------------- -Wed Jun 20 11:58:22 CEST 2007 - stbinner@suse.de - -- remove kappfinder data (#285831) -- fix build on older distributions - -------------------------------------------------------------------- -Wed Jun 20 11:25:27 CEST 2007 - coolo@suse.de - -- don't install earlykdm anymore and rely on preload to provide - an early start - -------------------------------------------------------------------- -Tue Jun 19 18:12:42 CEST 2007 - dmueller@suse.de - -- 3_5_BRANCH update (#282305) - -------------------------------------------------------------------- -Sat Jun 16 17:23:30 CEST 2007 - coolo@suse.de - -- don't require kbd to run - -------------------------------------------------------------------- -Wed Jun 13 18:42:31 CEST 2007 - dmueller@suse.de - -- fix duplicate files in package -- don't install config files as executable -- fix untranslated wallpaper desktop files -- add missing ldconfig call to %postun -- add missing %stop_on_removal to kdm - -------------------------------------------------------------------- -Thu Jun 7 05:37:53 CEST 2007 - stbinner@suse.de - -- move konqueror.desktop back to old position (#281572) - -------------------------------------------------------------------- -Wed Jun 6 15:15:06 CEST 2007 - dmueller@suse.de - -- fix syslog autodetection in init.earlykdm script - -------------------------------------------------------------------- -Mon Jun 4 14:32:55 CEST 2007 - stbinner@suse.de - -- move kde_post_install - -------------------------------------------------------------------- -Fri Jun 1 17:57:46 CEST 2007 - dmueller@suse.de - -- update 3_5_BRANCH.diff - * build fix - -------------------------------------------------------------------- -Thu May 24 21:32:01 CEST 2007 - wstephenson@suse.de - -- Revised offline mode infrastructure (#237274) - -------------------------------------------------------------------- -Wed May 23 22:59:23 CEST 2007 - stbinner@suse.de - -- fix build requires - -------------------------------------------------------------------- -Mon May 16 22:38:26 CEST 2007 - stbinner@suse.de - -- update to 3.5.7: - * kicker: Added option to change font color used by taskbar applet - * kwin: Option to turn off alt+tab outline. - * several bugfixes in all applications -- update xinerama.patch: fix handling of SeparateScreenFocus option -- update kickoff.diff from SVN -- only default shortcuts to switch to first 10 desktops (#275705) - -------------------------------------------------------------------- -Tue May 15 14:06:01 CEST 2007 - dmueller@suse.de - -- drop python requirement -- only install kdebase3-beagle when both kdebase3 and beagle - are selected - -------------------------------------------------------------------- -Thu May 10 14:20:13 CEST 2007 - stbinner@suse.de - -- add audit log support to kdm (#263180) - -------------------------------------------------------------------- -Thu Apr 26 23:23:31 CEST 2007 - dmueller@suse.de - -- fix build for 10.3 - -------------------------------------------------------------------- -Wed Apr 25 16:29:22 CEST 2007 - stbinner@suse.de - -- fix build for < 10.2 - -------------------------------------------------------------------- -Wed Apr 18 21:31:30 CEST 2007 - dmueller@suse.de - -- reapply konsole font color update - -------------------------------------------------------------------- -Mon Apr 16 13:32:51 CEST 2007 - dmueller@suse.de - -- build kfontinst against libfontenc again - -------------------------------------------------------------------- -Thu Apr 12 13:20:52 CEST 2007 - stbinner@suse.de - -- don't include kdm/sessions/enlightenment.desktop (#259717) -- default to UTF-8 encoding for spellchecking (#261217) - -------------------------------------------------------------------- -Thu Apr 5 15:22:27 CEST 2007 - stbinner@suse.de - -- simplify resize and rotate settings dialog (#104926) - -------------------------------------------------------------------- -Tue Apr 3 18:25:30 CEST 2007 - stbinner@suse.de - -- update 3_5_BRANCH.diff -- update kickoff.diff from SVN: - * prefer user over system media label (#257007) - * implement listening to Beagle KAddressbook hits and do not - search addressbooks via kabc by default (#249287) - * make drawing of Geeko eye an option with default off - -------------------------------------------------------------------- -Fri Mar 30 20:06:41 CEST 2007 - wstephenson@suse.de - -- Add fix for dbus error message after resume (#223775) - -------------------------------------------------------------------- -Sun Mar 25 09:28:48 CEST 2007 - aj@suse.de - -- Add libbz2-devel to BuildRequires for 10.3 and newer. - -------------------------------------------------------------------- -Fri Mar 16 16:18:08 CET 2007 - stbinner@suse.de - -- update Kickoff from SVN: - * don't allow "Switch/Reboot to foo" items as Favorites - * distinct icons for suspend to ram and disk (#229966) -- fix "cannot login with KDM after wrong password" (#229245) -- fix kcmkdm not defaulting to Grub (#230715) - -------------------------------------------------------------------- -Thu Mar 9 17:23:58 CET 2007 - stbinner@suse.de - -- fix build (new icon location check) -- don't duplicate /opt/kde3/bin in PATH (#251358) -- solve #216489 problem in a more generic, path independent way - -------------------------------------------------------------------- -Wed Mar 7 15:48:00 CET 2007 - dmueller@suse.de - -- adjust patsh for gnome help integration (#251117) - -------------------------------------------------------------------- -Mon Mar 5 13:11:44 CET 2007 - stbinner@suse.de - -- /usr/share/xsessions is now already part of filesystem RPM - -------------------------------------------------------------------- -Tue Feb 20 15:21:07 CET 2007 - stbinner@suse.de - -- add "PATH=/opt/kde3/bin:$PATH" to startkde script - -------------------------------------------------------------------- -Fri Feb 9 17:53:24 CET 2007 - stbinner@suse.de - -- new Kickoff option: "KickoffSearchAddressBook=false" disables kabc - search for people who are annoyed by KMail being started by the menu - -------------------------------------------------------------------- -Wed Feb 7 15:05:39 CET 2007 - dmueller@suse.de - -- fix build - -------------------------------------------------------------------- -Mon Feb 5 19:30:47 CET 2007 - dmueller@suse.de - -- fix kde-window-decorator detection -- re-apply 3.5 branch diff - -------------------------------------------------------------------- -Fri Feb 2 14:19:16 CET 2007 - dmueller@suse.de - -- update 3_5_BRANCH diff -- fix low diskspace patch (#226766) - -------------------------------------------------------------------- -Tue Jan 30 14:40:12 CET 2007 - stbinner@suse.de - -- show konqfilemgr.desktop in the menu - -------------------------------------------------------------------- -Fri Jan 26 10:58:09 CET 2007 - coolo@suse.de - -- making kdmrc noreplace as genkdmconf will update the config - anyway (#224505) - -------------------------------------------------------------------- -Mon Jan 22 11:37:44 CET 2007 - stbinner@suse.de - -- update to 3.5.6 release: - * kicker: more support for compiz, fix systray flicker - * kwin: claim _NET_WM_CM_Sn when compositing, bug fixes - * kate: added session chooser panel applet and KMenu extension - * kcontrol: Fonts settings module by default does not affect - system-wide font rendering settings. - * several bugfixes within kdesktop, konqueror, konsole, fish:/, - kfind and ksysguard - -------------------------------------------------------------------- -Thu Jan 18 11:06:28 CET 2007 - dgollub@suse.de - -- fixed typo in crypto support for media manager - -------------------------------------------------------------------- -Tue Jan 16 13:40:48 CET 2007 - dmueller@suse.de - -- add crypto media handling (fate #253) -- konsole color scheme update (experimental) -- start kde-window-decorator for compiz startup - -------------------------------------------------------------------- -Tue Jan 16 02:58:56 CET 2007 - ltinkl@suse.cz - -- update patch to fix #215262 - -------------------------------------------------------------------- -Sat Jan 13 20:22:24 CET 2007 - stbinner@suse.de - -- context menu entry in lock/lockout applet to switch button order - -------------------------------------------------------------------- -Thu Jan 11 19:21:26 CET 2007 - stbinner@suse.de - -- make krandrtray also rotate wacom-input devices (Fate #300713) - -------------------------------------------------------------------- -Tue Jan 9 11:36:30 CET 2007 - stbinner@suse.de - -- fix fish:// does not support files larger than 2 Gb (#230941) -- update of kickoff.diff from SVN: - * fix keyboard navigation in app browser (#227891) - * option to not switch tabs on hover (KickoffSwitchTabsOnHover) - -------------------------------------------------------------------- -Thu Jan 4 22:42:16 CET 2007 - stbinner@suse.de - -- update of kickoff.diff and kickoff-data.tar.bz2 from SVN: - * always show most recently used items, never frequently (#227829) - * fix order of appplication history and reboot options (#227826) - * don't require restart to show/hide "Save Session" (#228829) - * re-add lost "click on tab switches to flip top level" feature - * switch back to top level when changing to exit view via accell - * darker (instead of lighter) resize stripes for better visibility - * added non-GUI options (require restart): kickerrc, [General] - "KickoffFontPointSizeOffset=3" increases, negative decreases - "KickoffTabBarFormat={LabelAndIcon,LabelOnly,IconOnly}" - -------------------------------------------------------------------- -Thu Jan 4 14:41:52 CET 2007 - stbinner@suse.de - -- allow to configure/disable session confirmations in ksmserverrc: - [General] - confirmLogoutDelay=0 - confirmRebootDelay=11 - confirmShutdownDelay=11 - -------------------------------------------------------------------- -Mon Dec 18 18:44:45 CET 2006 - llunak@suse.cz - -- handle custom browser specified as .desktop file (#224897) - -------------------------------------------------------------------- -Mon Dec 11 15:09:30 CET 2006 - stbinner@suse.de - -- unbreak mach_blass_legacy.diff (revert brain damage) - -------------------------------------------------------------------- -Wed Dec 6 11:46:50 CET 2006 - stbinner@suse.de - -- make KDE protocol information use enhanced_browsing icon (#186707) -- use upstream logout effect for 8-bit displays (#214543) - -------------------------------------------------------------------- -Mon Dec 4 11:25:43 CET 2006 - stbinner@suse.de - -- remove UnitedLinux cruft from spec file -- ksmserver: escape "&" properly in grub partition label -- fix more the build for < 10.1 - -------------------------------------------------------------------- -Fri Dec 1 10:09:23 CET 2006 - stbinner@suse.de - -- fix build for < 10.1 - -------------------------------------------------------------------- -Fri Dec 1 04:20:22 CET 2006 - dmueller@suse.de - -- fix drag&drop of favourites on tab regression in kickoff -- fix tooltips sometimes disappearing (#221616) - -------------------------------------------------------------------- -Mon Nov 27 22:14:12 CET 2006 - dmueller@suse.de - -- refresh ksmserver-timed.diff to apply properly - -------------------------------------------------------------------- -Mon Nov 27 17:53:03 CET 2006 - dmueller@suse.de - -- fix translation issue in kickoff Leave tab (#221299) -- fix kickoff tab labels not being drawn centered -- add (hidden) option to disable flip animation - -------------------------------------------------------------------- -Mon Nov 27 17:24:17 CET 2006 - stbinner@suse.de - -- set all logout/shutdown/restart delays to 30 seconds - -------------------------------------------------------------------- -Sat Nov 25 13:32:52 CET 2006 - coolo@suse.de - -- correctly handle media mounted on startup (#223413) - -------------------------------------------------------------------- -Fri Nov 24 10:43:42 CET 2006 - coolo@suse.de - -- correctly follow font sizes in the logout dialog (#222496) - -------------------------------------------------------------------- -Fri Nov 24 08:55:19 CET 2006 - stbinner@suse.de - -- add direct "Requires: Beagle" for kdebase3-beagle package - -------------------------------------------------------------------- -Thu Nov 23 18:59:07 CET 2006 - coolo@suse.de - -- fix highly visible X after dpms kicks out again (#222623 also - reported by ro and various others) - -------------------------------------------------------------------- -Thu Nov 23 16:43:03 CET 2006 - dmueller@suse.de - -- fix kickoff sloppy region also in alternative layout -- use system language in kdm (#223445) -- revert change from 3.5 branch to show media icons (#223413) - -------------------------------------------------------------------- -Wed Nov 22 04:50:20 CET 2006 - ltinkl@suse.cz - -- implement two requested DCOp functions for -#215262 - Suspend to disk with attached usb storage not working - -------------------------------------------------------------------- -Tue Nov 21 13:53:58 CET 2006 - dmueller@suse.de - -- fix another typo (#222686) - -------------------------------------------------------------------- -Tue Nov 21 13:18:31 CET 2006 - dmueller@suse.de - -- fix typo in i18n string (#222686) -- trigger the kmenu when the greeter closes to avoid focus handling - locks - -------------------------------------------------------------------- -Mon Nov 20 22:16:43 CET 2006 - llunak@suse.cz - -- update the updater autostart utility (#219390) - -------------------------------------------------------------------- -Mon Nov 20 17:12:05 CET 2006 - dmueller@suse.de - -- improve application scoring (#221252) -- fix kickoff button flicker (#221287) -- fix kickoff button not flipped in top position (#221209) -- fix some RTL issues with kickoff (#219415) -- hide dpms module if kpowersave is messing with DPMS (#167919) - -------------------------------------------------------------------- -Mon Nov 20 16:01:38 CET 2006 - ltinkl@suse.cz - -- fix #218243 - insserv: Service earlykbd has to be enabled for - service earlykdm - -------------------------------------------------------------------- -Thu Nov 16 18:18:02 CET 2006 - llunak@suse.cz - -- add autostart utility to launch the right updater tool (#219390) -- fix 3_5_BRANCH_kde_128648.diff to avoid KDE#137119 -- fix systray_order.diff to also immediately place properly - zen-updater or other XDG systray apps -- require root password for shutdown by default (#220268) -- fix shell insertion vulnerability in khelpcenter (#218764) - -------------------------------------------------------------------- -Wed Nov 15 21:14:08 CET 2006 - dmueller@suse.de - -- permissions %post for fileshareset (#221129) - -------------------------------------------------------------------- -Tue Nov 14 11:39:06 CET 2006 - dmueller@suse.de - -- update to current optional-kwin.diff (#219020) -- fix more minipager issues with compiz -- fix more shell insertion issues with khelpcenter - -------------------------------------------------------------------- -Tue Nov 14 10:43:27 CET 2006 - ltinkl@suse.cz - -- fixed #218764 - shell insertion vulnerability in khelpcenter - -------------------------------------------------------------------- -Mon Nov 13 23:50:32 CET 2006 - dmueller@suse.de - -- update optional kwin diff to add custom start script support - (#219020) - -------------------------------------------------------------------- -Mon Nov 13 17:41:17 CET 2006 - dmueller@suse.de - -- update kickoff diff to include button-hover fix - -------------------------------------------------------------------- -Mon Nov 13 13:50:44 CET 2006 - dmueller@suse.de - -- update kickoff diff to include latest fixes (#219709) - -------------------------------------------------------------------- -Fri Nov 10 18:56:21 CET 2006 - llunak@suse.cz - -- fix kompmgr leaks (#197990) - -------------------------------------------------------------------- -Fri Nov 10 15:40:30 CET 2006 - llunak@suse.cz - -- make kompmgr read default settings from /etc/opt/kde3/... . -- fix clickraise with compositing (KDE#128648) -- fix possible infinite loop in kompmgr -- composite manager selection in kompmgr -- fix focus chain when opening links in background - -------------------------------------------------------------------- -Thu Nov 9 14:59:02 CET 2006 - stbinner@suse.de - -- fix Kicker default behavior: don't turn on right hide button -- restore parens for NameAndDescription format in Kicker (#213450) -- remove historic "Provides:"/"Obsoletes:" (#218798) - -------------------------------------------------------------------- -Tue Nov 7 16:28:21 CET 2006 - coolo@suse.de - -- only show "you're running out of disk space" dialog once (#218185) - -------------------------------------------------------------------- -Tue Nov 7 14:22:18 CET 2006 - coolo@suse.de - -- mount USB devices again to find out if they are cameras (#217731) -- mount devices on startup too (#179427) - -------------------------------------------------------------------- -Mon Nov 6 12:06:47 CET 2006 - dmueller@suse.de - -- switch kickoff to style based theming -- improve error message upon media:/ errors (#218179) -- fix kerberos refresh problem in kcheckpass (#203570) - -------------------------------------------------------------------- -Sat Nov 4 19:30:12 CET 2006 - stbinner@suse.de - -- fix build for < 10.2 -- fix drag & drop print with utf-8 name (#194400) -- fix systray flicker (#216669) - -------------------------------------------------------------------- -Fri Nov 3 16:09:00 CET 2006 - dmueller@suse.de - -- readd kickoff kcontrol module - -------------------------------------------------------------------- -Thu Nov 2 15:38:25 CET 2006 - stbinner@suse.de - -- show complete wallpaper name in desktop configuration (#103202) -- let lockout applet call again kdm dialog on left click (#215058) - -------------------------------------------------------------------- -Thu Nov 2 15:22:48 CET 2006 - coolo@suse.de - -- don't crash on 8bit displays (#210209) -- don't pollute log/messages with debug (#217035) -- update kdm config patch to fix root login (#208279) -- update ksmserver patch to fix the layout of the logout confirmation - -------------------------------------------------------------------- -Tue Oct 31 14:55:21 CET 2006 - dmueller@suse.de - -- fix kdesu prompt again (#216563) - -------------------------------------------------------------------- -Tue Oct 31 12:49:22 CET 2006 - coolo@suse.de - -- update 3.5 branch and kickoff diff to fix restart (#216092) - -------------------------------------------------------------------- -Mon Oct 30 16:28:05 CET 2006 - coolo@suse.de - -- don't install your own xdm-xp (#192400) - -------------------------------------------------------------------- -Mon Oct 30 11:05:35 CET 2006 - coolo@suse.de - -- update kdm patch to make it quilt ready -- update kickoff.diff for suspend (#215065) -- update 3.5 branch diff to fix - - "set as wallpaper" does not work (#215286) - -------------------------------------------------------------------- -Sun Oct 29 07:48:47 CET 2006 - aj@suse.de - -- Fix kdm-sysconfig-values.diff patch to fix build. - -------------------------------------------------------------------- -Fri Oct 27 10:30:11 CEST 2006 - dmueller@suse.de - -- update 3_5_BRANCH to fix accessibility beeping -- fix Home not showing up in kickoff favourites -- disable accessibility without kdeaccessibility3 (#213622) -- resort some patches -- KDM provides suspend to disk/RAM (fate #300629) -- umount partitions from USB when suspending (fate #300647) -- beagle support in khelpcenter (fate #301208) - -------------------------------------------------------------------- -Tue Oct 24 18:20:56 CEST 2006 - dmueller@suse.de - -- update WM configuration patch -------------------------------------------------------------------- -Tue Oct 24 10:09:57 CEST 2006 - coolo@suse.de - -- update kdm config patch - -------------------------------------------------------------------- -Mon Oct 23 18:16:14 CEST 2006 - dmueller@suse.de - -- add patch for kdm config update problem (#211874) -- add patch for WM configuration in session (FATE 301137) - -------------------------------------------------------------------- -Mon Oct 23 17:25:49 CEST 2006 - dmueller@suse.de - -- adding more default actions for khotkeys to support laptop - extra keys by default (#210875) - -------------------------------------------------------------------- -Mon Oct 23 10:43:34 CEST 2006 - stbinner@suse.de - -- fix file globbing build -- fix build for SUSE < 10.1 - -------------------------------------------------------------------- -Sun Oct 22 23:42:59 CEST 2006 - llunak@suse.cz - -- remove patches disable-kcm-modules.diff and close-use-yast2.diff - that made clock applet use yast timezone module -- patch KDE clock configuration to integrate better with SUSE - (#213897) -- update 3_5_branch diff to include clock fix for picking up - timzone changes (#213897) -- add patch for desktop lock to use xvkbd on tablet pc's (#213677) - -------------------------------------------------------------------- -Fri Oct 20 19:18:44 CEST 2006 - stbinner@suse.de - -- add reboot option parameter to ksm-server-timed.diff dcop call -- update kickoff.diff from SVN: - * if all hits are in same category show double amount of entries - * open Kerry showing only results of selected category link - * add categories for (k)notes and videos - * change logout/shutdown/restart to confirmation with timer - * implement switch user and reboot to other partition - -------------------------------------------------------------------- -Fri Oct 20 12:53:03 CEST 2006 - stbinner@suse.de - -- let logout applet call timed logout in ksmserver - -------------------------------------------------------------------- -Tue Oct 17 17:22:33 CEST 2006 - llunak@suse.cz - -- updates to the systray ordering patch - -------------------------------------------------------------------- -Mon Oct 16 12:49:25 CEST 2006 - stbinner@suse.de - -- update kickoff.diff from SVN and break it into parts - -------------------------------------------------------------------- -Fri Oct 13 18:50:18 CEST 2006 - llunak@suse.cz - -- add patch for KDE#135250 to 3_5 branch diff -- systray ordering (fate #301154) - -------------------------------------------------------------------- -Thu Oct 12 15:36:32 CEST 2006 - stbinner@suse.de - -- change Home.desktop type to URL (#158487) - -------------------------------------------------------------------- -Tue Oct 10 15:36:15 CEST 2006 - coolo@suse.de - -- add patch to provide a timed logout mode to ksmserver - -------------------------------------------------------------------- -Mon Oct 9 11:53:13 CEST 2006 - coolo@suse.de - -- update 3_5 branch diff to include - - show all user mountable devices in fstab (#204376) - -------------------------------------------------------------------- -Sat Oct 7 20:06:06 CEST 2006 - stbinner@suse.de - -- update to next 3.5.5 release tarball - - changes to Kicker tip showing/switching and systemtray - - give focus to OK button in media notifier - -------------------------------------------------------------------- -Fri Oct 6 14:22:36 CEST 2006 - coolo@suse.de - -- update to next 3.5.5 release tarball - - kdesu fixes - - kicker pager fix -- fix kdm config reader to only reset changes in kdmrc once - -------------------------------------------------------------------- -Wed Oct 4 15:15:35 CEST 2006 - hmacht@suse.de - -- new ksmserver-suspend.diff: - - query HAL for suspend capabilities and trigger sleep via HAL - - dependency to liblazy instead of powersave-devel for > 10.1 -- renname existing ksmserver-suspend.diff to - ksmserver-suspend_legacy-10.1.diff for 10.1 - -------------------------------------------------------------------- -Wed Oct 4 14:43:08 CEST 2006 - coolo@suse.de - -- let kdm start Xgl if configured so - -------------------------------------------------------------------- -Wed Oct 4 11:49:47 CEST 2006 - dmueller@suse.de - -- update 3_5_BRANCH.diff to include kicker minipager fixlets - -------------------------------------------------------------------- -Tue Oct 3 10:14:26 CEST 2006 - stbinner@suse.de - -- update to 3.5.5 release tarball - -------------------------------------------------------------------- -Sun Oct 1 17:48:20 CEST 2006 - stbinner@suse.de - -- update 3_5_BRANCH.diff (random bug fixes) -- update kickoff.diff - -------------------------------------------------------------------- -Wed Sep 27 16:34:49 CEST 2006 - stbinner@suse.de - -- add recommendation to kdebase3-beagle for kdebase3 package - -------------------------------------------------------------------- -Thu Sep 21 19:02:39 CEST 2006 - dmueller@suse.de - -- preliminary viewport pager support -- update compmgr patch to remove opacity slider when no extension - is applicable - -------------------------------------------------------------------- -Thu Sep 21 09:53:40 CEST 2006 - stbinner@suse.de - -- fix build -- kcheckpass-pam, kdm-pam-np: remove pam_devperm.so (Bug #206963) - -------------------------------------------------------------------- -Tue Sep 19 22:58:28 CEST 2006 - dmueller@suse.de - -- use sudo for kdesu - -------------------------------------------------------------------- -Tue Sep 19 09:56:02 CEST 2006 - coolo@suse.de - -- disable low disk space warning for < 10.1 - -------------------------------------------------------------------- -Tue Sep 19 00:40:04 CEST 2006 - dmueller@suse.de - -- update kickoff patch to include numerous bugfixes - -------------------------------------------------------------------- -Mon Sep 18 13:56:22 CEST 2006 - ltinkl@suse.cz - -- fixing low disk space warning dialog (the don't-show-again case) - -------------------------------------------------------------------- -Thu Sep 14 21:31:44 CEST 2006 - coolo@suse.de - -- fixing low disk space calculation for huge volumes (without having - one to test either) - -------------------------------------------------------------------- -Thu Sep 14 09:16:23 CEST 2006 - coolo@suse.de - -- actually check the auth in kcheckpass - -------------------------------------------------------------------- -Tue Sep 12 20:59:30 CEST 2006 - dmueller@suse.de - -- update 3_5_BRANCH to fix kicker hang (#204728) - -------------------------------------------------------------------- -Tue Sep 12 15:28:07 CEST 2006 - stbinner@suse.de - -- update kickoff patch and package plugin to kdebase3-beagle -- add "bnc" web shortcut for Novell Bugzilla (#204724) - -------------------------------------------------------------------- -Tue Sep 12 15:13:17 CEST 2006 - ltinkl@suse.cz - -- implement #199054 - Add low disk space real time monitor - -------------------------------------------------------------------- -Thu Sep 7 16:52:33 CEST 2006 - dmueller@suse.de - -- make kompmr optional - -------------------------------------------------------------------- -Thu Sep 7 12:03:49 CEST 2006 - coolo@suse.de - -- split pam config between xdm and kcheckpass (#133347) - -------------------------------------------------------------------- -Thu Sep 7 09:24:18 CEST 2006 - coolo@suse.de - -- recommend gdb -- update kickoff patch to have larger back button -- update 3_5_BRANCH.diff (random bug fixes) -- back out the konsole bold font change for now (kde #131770) - -------------------------------------------------------------------- -Tue Sep 5 10:00:14 CEST 2006 - stbinner@suse.de - -- correcting kdm patches for older distributions - -------------------------------------------------------------------- -Mon Sep 4 14:48:46 CEST 2006 - llunak@suse.cz - -- Add patches with Xinerama improvements - -------------------------------------------------------------------- -Sun Sep 3 08:59:45 CEST 2006 - stbinner@suse.de - -- fix build on older distributions - -------------------------------------------------------------------- -Fri Sep 1 14:52:22 CEST 2006 - coolo@suse.de - -- fixed layout of the back button -- updated to 3_5_BRANCH to fix kwin alt-tab ugliness -- move kdmrc out of /etc/opt/kde3 if found an old one in /opt/kde3 - -------------------------------------------------------------------- -Fri Sep 1 07:29:42 CEST 2006 - coolo@suse.de - -- adding SUSE menu - -------------------------------------------------------------------- -Thu Aug 31 13:56:43 CEST 2006 - stbinner@suse.de - -- add man pages for fileshareset and kcheckpass (#187356) - -------------------------------------------------------------------- -Mon Aug 28 13:30:59 CEST 2006 - stbinner@suse.de - -- switch lock and logout order in Kicker lock/logout applet - -------------------------------------------------------------------- -Fri Aug 25 21:34:59 CEST 2006 - coolo@suse.de - -- fixing the order where it matters - -------------------------------------------------------------------- -Fri Aug 25 14:36:30 CEST 2006 - coolo@suse.de - -- fix more default values for kdmrc - -------------------------------------------------------------------- -Wed Aug 23 17:46:14 CEST 2006 - coolo@suse.de - -- rework the way kdmrc is handled (rather experimental): - - the KDE defaults are changed right in the build where the value - is static (kdm-fix-default-kdmrc.diff) - - the KDE kdmrc is the one used by kdm and kcontrol - - the default values are overwritten by values in - (/var/adm/kdm/kdmrc.syscnfig generated by kdm_config) - - Fixes #163954 - - drops a SuSEconfig - -------------------------------------------------------------------- -Wed Aug 23 11:01:33 CEST 2006 - stbinner@suse.de - -- update 3_5_BRANCH.diff (mostly Konqueror, Kicker and Kwin fixes) - -------------------------------------------------------------------- -Thu Aug 17 14:31:25 CEST 2006 - dmueller@suse.de - -- add SuSEconfig.kdm3 script from the theme flavour package - (#181572) - -------------------------------------------------------------------- -Thu Aug 3 17:45:35 CEST 2006 - stbinner@suse.de - -- adapt to new X.org paths - -------------------------------------------------------------------- -Sun Jul 23 21:49:02 CEST 2006 - coolo@suse.de - -- update to KDE 3.5.4: - * support X-KDE-Protocols in konqi RMB menu - * several Kate fixes - * Konsole: miscellanous speedups and bug fixes - * media manager: several fixes and HAL support merged upstream - * security: add various missing return value checks - -------------------------------------------------------------------- -Sun Jul 9 20:50:29 CEST 2006 - stbinner@suse.de - -- fix "kdeeject --help" (#190836) - -------------------------------------------------------------------- -Sat Jun 24 21:44:58 CEST 2006 - schwab@suse.de - -- Use long long for parsing net stats to support more than 4G. - -------------------------------------------------------------------- -Wed Jun 21 18:44:29 CEST 2006 - stbinner@suse.de - -- update branch diff and media-iPod.diff to fix iPod support - -------------------------------------------------------------------- -Mon Jun 19 21:24:08 CEST 2006 - stbinner@suse.de - -- fix build - -------------------------------------------------------------------- -Mon Jun 19 15:34:16 CEST 2006 - coolo@suse.de - -- update 3_5_BRANCH.diff again for several bug fixes (KDE bug reports - 47242 128754 117623 116209 55795) - -------------------------------------------------------------------- -Mon Jun 19 08:21:22 CEST 2006 - coolo@suse.de - -- don't translate hidden uninstall.desktop files - -------------------------------------------------------------------- -Fri Jun 16 12:41:47 CEST 2006 - coolo@suse.de - -- use sax.mo for translating xkb options (#183672) - -------------------------------------------------------------------- -Wed Jun 14 16:56:43 CEST 2006 - coolo@suse.de - -- update 3_5_BRANCH.diff and media_suse.diff to follow the upstream - merge of our media:/ changes - -------------------------------------------------------------------- -Mon Jun 12 17:11:03 CEST 2006 - dmueller@suse.de - -- fix ~/.dmrc symlink attack (#180704, CVE-2006-2449) - -------------------------------------------------------------------- -Mon Jun 12 15:19:14 CEST 2006 - stbinner@suse.de - -- update 3_5_BRANCH.diff to fix build (OpenEXR configure check) -- obey chosen k menu item format when collapsing menus (#183244) - -------------------------------------------------------------------- -Tue Jun 6 22:03:45 CEST 2006 - stbinner@suse.de - -- add 3_5_BRANCH.diff to fix screensaver not starting (#181122) - -------------------------------------------------------------------- -Tue May 30 17:06:14 CEST 2006 - stbinner@suse.de - -- don't enforce sorting of menu entries (#160259) - -------------------------------------------------------------------- -Fri May 26 17:18:32 CEST 2006 - stbinner@suse.de - -- new KDE 3.5.3 tarball (fix systram-tray related Kicker crashes) - -------------------------------------------------------------------- -Wed May 24 09:56:43 CEST 2006 - stbinner@suse.de - -- update to KDE 3.5.3 - * KDE startup reordered in order to improve startup time - * several fixes to Kicker, Konsole, Kate, Konqueror and kwin - -------------------------------------------------------------------- -Tue May 23 17:14:56 CEST 2006 - adrian@suse.de - -- fix build for the openSUSE build service - -------------------------------------------------------------------- -Fri May 19 10:15:30 CEST 2006 - stbinner@suse.de - -- fix supplementary build - -------------------------------------------------------------------- -Mon May 15 17:14:14 CEST 2006 - stbinner@suse.de - -- update to KDE 3.5.2 and 3_5_BRANCH.diff - * Klipper - - Handle URLs as URLs and not as Text (bug #121114) - - Prevent crashes caused by corrupted history (bug #109161) - - XFixes support (especially helps with broken clipboard - implementations of some non-KDE applications) (bug #101087) - - Images are ignored by default, add 'IgnoreImages=false' to - '[General]' in klipperrc (bug #109032) - - Avoid repeated action popup with the same URL with some - non-KDE applications with broken clipboard implementations - * Konsole - - Correct issue where history size is unlimited when dealing - with History options in profiles (bug #120046) - - Correctly set Tab bar when set to Dynamic Hide after - session restore (bug #121688) - * Country settings - - Fix short date format for Switzerland (bug #122574) - - Fix address format (especially P.O. Box) for Switzerland - * KSysGuard - - Show the sensors with values of more than two digits - correctly in the applet - * Kicker - - Connect the applications to systray correctly on startup - - Panels properly reserve space at screen edges even for - differently sized Xinerama screens (bug #94470) - * Konqueror - - Resolve symlinks only on the desktop (bug #63014) - * KWin - - Added new window-specific rules for OpenOffice.org, XV and - Mozilla family applications for turning off focus stealing - prevention, as these applications don't work well with it - - Reverted a workaround that as a side-effect had broken - systray docking of some applications (bug #100177) - - Each virtual desktop has a separate focus chain (bug #33701) - * KDesktop - - Fixed stacking of some dialogs (bug #89951,bug #113556) -------------------------------------------------------------------- -Wed May 10 16:19:01 CEST 2006 - coolo@suse.de - -- line break if the message is too long for the screen (#157237) - -------------------------------------------------------------------- -Tue Apr 25 19:22:06 CEST 2006 - wstephenson@suse.de - -- Use a user writable directory for user indexing (#165308) - -------------------------------------------------------------------- -Mon Apr 24 13:24:18 CEST 2006 - stbinner@suse.de - -- pull libXt into plugin scan to find all NS plugins (#140485) - -------------------------------------------------------------------- -Fri Apr 21 17:04:13 CEST 2006 - stbinner@suse.de - -- don't show errors in kcm_kio without kdenetwork3-lan (#165318) - -------------------------------------------------------------------- -Mon Apr 17 18:07:32 CEST 2006 - ltinkl@suse.cz - -- fix "KDE Information Center fails to provide log info for samba" - (#98763) - -------------------------------------------------------------------- -Tue Apr 11 10:48:45 CEST 2006 - coolo@suse.de - -- update media_hal.diff to make mounting floppies work (#164488) - -------------------------------------------------------------------- -Mon Apr 10 13:22:01 CEST 2006 - wstephenson@suse.de - -- Fix failure to open Sound kcmodule (#164768) - -------------------------------------------------------------------- -Sat Apr 8 21:25:25 CEST 2006 - schwab@suse.de - -- Fix misplaced %endif [#58820]. - -------------------------------------------------------------------- -Wed Apr 5 12:19:14 CEST 2006 - dmueller@suse.de - -- update hinting default to full (#157441) - -------------------------------------------------------------------- -Mon Apr 3 19:00:25 CEST 2006 - stbinner@suse.de - -- fix possible Konsole crash on session saving/logout (#147286) - -------------------------------------------------------------------- -Mon Apr 3 14:34:35 CEST 2006 - stbinner@suse.de - -- don't remove obsolete from list of known kdesu options (#162790) -- fix panel configuration to not always ask to save (#157821) -- add missing kdm Provides: for transition from NLD9 (#162511) - -------------------------------------------------------------------- -Fri Mar 31 17:24:26 CEST 2006 - stbinner@suse.de - -- update media_hal.diff to make it possible that applications like - k3b can stop automounting (#160654) - -------------------------------------------------------------------- -Tue Mar 28 17:46:23 CEST 2006 - coolo@suse.de - -- update media_hal.diff to handle fstab entries more correctly - -------------------------------------------------------------------- -Thu Mar 23 10:34:38 CET 2006 - stbinner@suse.de - -- add patch to fix jumpy taskbar size (#156621) -- update media_hal.diff to fix setting of mount properties for a - removable device (#160002) and respect hal lockdown (#153241) -- fix kded application launch hang due to NFS (#160292) - -------------------------------------------------------------------- -Tue Mar 21 11:14:57 CET 2006 - stbinner@suse.de - -- make kdeeject work again (#159310) - -------------------------------------------------------------------- -Mon Mar 20 10:52:45 CET 2006 - stbinner@suse.de - -- remove "Keep password" checkbox from kdesu (#159224) - -------------------------------------------------------------------- -Sat Mar 18 22:26:30 CET 2006 - coolo@suse.de - -- update kicker to more changes to fix crashes on logout - (#155339) - -------------------------------------------------------------------- -Thu Mar 16 18:01:05 CET 2006 - dmueller@suse.de - -- fix klipper actions listing firefox twice -- fix klipper not linking against Xfixes -- fix klipper handling urls as plain text (KDE #121114) -- fix Xfixes detection - -------------------------------------------------------------------- -Mon Mar 13 19:00:07 CET 2006 - wstephenson@suse.de - -- make offline mode for accessible for konqueror - -------------------------------------------------------------------- -Mon Mar 13 15:13:11 CET 2006 - stbinner@suse.de - -- allow to hide wallpapers from configuration (#156170) -- install startkde.suse.sh only for older distributions - -------------------------------------------------------------------- -Sat Mar 11 14:36:23 CET 2006 - coolo@suse.de - -- hide kjobviewer startup info on quit (#156821) - -------------------------------------------------------------------- -Thu Mar 9 13:02:33 CET 2006 - coolo@suse.de - -- update kicker to latest changes to fix crashes on logout (#155339, - http://bugs.kde.org/121430) - -------------------------------------------------------------------- -Wed Mar 8 08:39:40 CET 2006 - dmueller@suse.de - -- fix permissions of README (#155946) -- make KDM_SHUTDOWN sysconfig migration complete - -------------------------------------------------------------------- -Tue Mar 7 10:59:00 CET 2006 - stbinner@suse.de - -- update media_hal.diff to fix mounting (#154652) -- give mini cli dialog parent to fix #155355 -- add %post for 10.1 to migrate KDM_SHUTDOWN (#148468) -- don't try to grep non-existing file in kdm %post (#154302) -- don't try to run artsshell on shutdown if not installed -- let kdm ignore unresolvable hosts in Xaccess (#135714) - -------------------------------------------------------------------- -Mon Mar 6 16:17:13 CET 2006 - dmueller@suse.de - -- Add XV to focus-stealing-prevention blacklist (#155250) - -------------------------------------------------------------------- -Mon Mar 6 08:23:40 CET 2006 - hpj@suse.de - -- Use susehelp to show docs. This enables preprocessing that - allows khelpcenter to show GNOME documentation. - -------------------------------------------------------------------- -Wed Mar 1 19:32:30 CET 2006 - stbinner@suse.de - -- unbreak Kicker menus when user-arranged (#151492) - -------------------------------------------------------------------- -Tue Feb 28 10:38:04 CET 2006 - stbinner@suse.de - -- no "Recommends:" for older distributions - -------------------------------------------------------------------- -Mon Feb 27 16:05:35 CET 2006 - coolo@suse.de - -- more files to translate (#144788) - -------------------------------------------------------------------- -Mon Feb 27 10:51:56 CET 2006 - coolo@suse.de - -- only use preload if it's the 10.1 version (#153543) - -------------------------------------------------------------------- -Fri Feb 24 21:36:02 CET 2006 - ltinkl@suse.cz - -- fix keyboard navigation in Theme Manager (#148299) - -------------------------------------------------------------------- -Tue Feb 21 16:17:23 CET 2006 - dmueller@suse.de - -- downgrade kdelibs3_doc require to recommends (#152504) - -------------------------------------------------------------------- -Mon Feb 20 19:14:40 CET 2006 - dmueller@suse.de - -- fix ksysguard killing hidden processes (#151804) - -------------------------------------------------------------------- -Fri Feb 17 14:25:10 CET 2006 - dmueller@suse.de - -- remove spec file sections for SL < 9.2 - -------------------------------------------------------------------- -Fri Feb 17 11:11:30 CET 2006 - coolo@suse.de - -- fix crash in HAL backend on stick removal (#151742) - -------------------------------------------------------------------- -Thu Feb 16 10:14:26 CET 2006 - dmueller@suse.de - -- add $HOME/.gtkrc-2.0 to GTK2_RC_FILES (#151344) - -------------------------------------------------------------------- -Wed Feb 15 16:57:42 CET 2006 - coolo@suse.de - -- update media_hal.diff to fix unmount (#149472) - -------------------------------------------------------------------- -Wed Feb 15 09:06:39 CET 2006 - stbinner@suse.de - -- fix %suse_update_desktop_file parameter order -- add intermediate kdebase3-khotkeys package to provides/obsoletes - -------------------------------------------------------------------- -Tue Feb 14 15:17:10 CET 2006 - llunak@suse.cz - -- discard old ksycoca during startup if rpm database has changed -- fix showing menu entries in short-menus.diff -- khelpcenter indexing fixes (#146618) - -------------------------------------------------------------------- -Fri Feb 10 11:45:40 CET 2006 - stbinner@suse.de - -- disable kwin focus stealing prevention for Mozilla family apps - and OpenOffice.org by default (#115417) - -------------------------------------------------------------------- -Thu Feb 9 11:55:34 CET 2006 - coolo@suse.de - -- adapt to new way of preload (#147673) - -------------------------------------------------------------------- -Wed Feb 8 15:53:05 CET 2006 - coolo@suse.de - -- reinit pam sessions as the pam handle stores user specific data - (#144804) - -------------------------------------------------------------------- -Tue Feb 7 13:46:57 CET 2006 - stbinner@suse.de - -- add "most common nsplugin crash" fix (KDE #121501) -- fix Konsole history saving being incomplete (KDE #116351) - -------------------------------------------------------------------- -Mon Feb 6 12:01:33 CET 2006 - dmueller@suse.de - -- move khotkeys-arts to kdebase3-extra -- rediff media_hal.diff to fix crash on logout - -------------------------------------------------------------------- -Mon Feb 6 01:35:13 CET 2006 - ro@suse.de - -- fix build for < 10.1 - -------------------------------------------------------------------- -Fri Feb 3 16:16:50 CET 2006 - coolo@suse.de - -- fix kicker menu extension (#147941) - -------------------------------------------------------------------- -Fri Feb 3 12:14:37 CET 2006 - coolo@suse.de - -- add patches to KDE SVN done by SUSE engineers -- add patch to fix severe problem with keyboard chooser (KDE #121087) - -------------------------------------------------------------------- -Fri Feb 3 12:08:33 CET 2006 - coolo@suse.de - -- Fix #74524 and merge kicker-fix-alphabetical into short-menus - (by Lubos) - -------------------------------------------------------------------- -Thu Feb 2 19:19:29 CET 2006 - coolo@suse.de - -- updating media patch as we fixed problems - -------------------------------------------------------------------- -Thu Feb 2 14:58:35 CET 2006 - coolo@suse.de - -- remove logrotate script (#144544) - -------------------------------------------------------------------- -Wed Feb 1 16:50:16 CET 2006 - dmueller@suse.de - -- fix kicker crashes caused by kicker-fix-alphabetical.diff -- add xfixes support to klipper - -------------------------------------------------------------------- -Wed Feb 1 16:15:19 CET 2006 - coolo@suse.de - -- fix wallpapers path - -------------------------------------------------------------------- -Mon Jan 30 18:22:25 CET 2006 - coolo@suse.de - -- make xdm pam service future proof (suggestion by kukuk) - -------------------------------------------------------------------- -Mon Jan 30 14:27:19 CET 2006 - stbinner@suse.de - -- update media_hal.diff -- drop workaround-xterm-size-bug.diff - -------------------------------------------------------------------- -Mon Jan 30 11:44:06 CET 2006 - stbinner@suse.de - -- update to 3.5 branch - -------------------------------------------------------------------- -Sun Jan 29 22:19:40 CET 2006 - coolo@suse.de - -- fix build - -------------------------------------------------------------------- -Sun Jan 29 15:21:26 CET 2006 - aj@suse.de - -- Require dbus-1-qt3-devel for build. - -------------------------------------------------------------------- -Sat Jan 28 16:08:11 CET 2006 - coolo@suse.de - -- fix kdm colors - -------------------------------------------------------------------- -Sat Jan 28 15:17:06 CET 2006 - coolo@suse.de - -- move wallpapers to /usr/share/wallpapers - -------------------------------------------------------------------- -Fri Jan 27 18:09:47 CET 2006 - coolo@suse.de - -- fix two media handling bugs - -------------------------------------------------------------------- -Fri Jan 27 11:33:35 CET 2006 - coolo@suse.de - -- samba maintainers changed their mind - -------------------------------------------------------------------- -Wed Jan 25 22:00:05 CET 2006 - coolo@suse.de - -- update to 3.5 branch for smb integration fix -- add Lubos' splash screen improvment patch -- update media handling patch -- add patch to support old plugger features - -------------------------------------------------------------------- -Wed Jan 25 21:33:03 CET 2006 - mls@suse.de - -- converted neededforbuild to BuildRequires - -------------------------------------------------------------------- -Mon Jan 23 22:36:31 CET 2006 - coolo@suse.de - -- wrote mount plugin for subfs replacement - -------------------------------------------------------------------- -Mon Jan 23 18:15:28 CET 2006 - stbinner@suse.de - -- fix alphabetic sorting of start menu entries (#143351) - -------------------------------------------------------------------- -Mon Jan 23 16:08:22 CET 2006 - coolo@suse.de - -- translate some more files - -------------------------------------------------------------------- -Sun Jan 22 13:34:23 CET 2006 - stbinner@suse.de - -- fix Bug 117636 - No printer entry in the control center - -------------------------------------------------------------------- -Sat Jan 21 20:25:30 CET 2006 - coolo@suse.de - -- update to KDE 3.5.1 -- use HAL in media:/ instead of subfs - -------------------------------------------------------------------- -Mon Jan 16 17:28:44 CET 2006 - wstephenson@suse.de - -- Add KHelpCenter rellinks support -- Don't prompt the user to create indices, now automatic. - -------------------------------------------------------------------- -Thu Jan 12 16:16:47 CET 2006 - stbinner@suse.de - -- Rename "Control Center" to "Personal Settings" -- Have "My System" and "Recent Documents" by default in kmenu - -------------------------------------------------------------------- -Tue Jan 10 09:08:57 CET 2006 - coolo@suse.de - -- adding a domain-label to kdm themes - -------------------------------------------------------------------- -Mon Jan 9 12:26:27 CET 2006 - stbinner@suse.de - -- update to 3_5_BRANCH -- disable kxkb_variants_3_5.diff (same functionality upstream) -- remove khotkeys.patch (committed upstream) - -------------------------------------------------------------------- -Sat Jan 7 22:55:24 CET 2006 - stbinner@suse.de - -- update to 3_5_BRANCH.diff before the first Beta - -------------------------------------------------------------------- -Thu Jan 5 15:17:51 CET 2006 - llunak@suse.cz - -- update performance patch, use same names like in kdebase-SuSE -- less verbal kdesu prompt (feature #4135) - -------------------------------------------------------------------- -Mon Jan 2 13:56:48 CET 2006 - ltinkl@suse.cz - -- fix KDE screen lock missing language switcher (#133244) - -------------------------------------------------------------------- -Fri Dec 23 11:41:01 CET 2005 - stbinner@suse.de - -- updated 3_5_BRANCH.diff (kdm winbind greeter etc.) -- updated kdm-make_it_cool.diff - -------------------------------------------------------------------- -Wed Dec 21 13:18:25 CET 2005 - stbinner@suse.de - -- fix build for released distributions - -------------------------------------------------------------------- -Mon Dec 19 11:58:53 CET 2005 - dmueller@suse.de - -- use dbus-1-qt3 - -------------------------------------------------------------------- -Wed Dec 14 14:04:32 CET 2005 - lmuelle@suse.de - -- Package fileshareset and filesharelist as a separate package named fileshare - for post 10.0 products and use %_bindir as install location. - -------------------------------------------------------------------- -Sun Dec 4 23:53:06 CET 2005 - lmuelle@suse.de - -- Revert libsmbclient renameing. - -------------------------------------------------------------------- -Fri Dec 2 11:38:19 CET 2005 - coolo@suse.de - -- update to 3.5 branch and adapt the patches accordingly -- add two more patches of Lubos - -------------------------------------------------------------------- -Tue Nov 29 14:17:40 CET 2005 - coolo@suse.de - -- uncommenting kxkb patch -- remove support for outdated suse versions -- remove the khotkeys package for now - -------------------------------------------------------------------- -Mon Nov 28 13:26:02 CET 2005 - ltinkl@suse.cz - -- update kxkb to fix KDE bug #116619 - -------------------------------------------------------------------- -Sun Nov 27 18:09:08 CET 2005 - coolo@suse.de - -- fix patch conflict - -------------------------------------------------------------------- -Sat Nov 26 10:09:51 CET 2005 - coolo@suse.de - -- update to version 3.5 - -------------------------------------------------------------------- -Fri Nov 25 11:47:09 CET 2005 - stbinner@suse.de - -- fix initial kmenu pos and last/most used section losing icons - -------------------------------------------------------------------- -Wed Nov 23 20:37:54 CET 2005 - coolo@suse.de - -- fix repainting - -------------------------------------------------------------------- -Tue Nov 22 21:52:24 CET 2005 - coolo@suse.de - -- add tooltips to the buttons as suggested by Eva - -------------------------------------------------------------------- -Mon Nov 21 15:25:27 CET 2005 - stbinner@suse.de - -- update to version 3.5 RC 2 - -------------------------------------------------------------------- -Mon Nov 21 11:12:28 CET 2005 - dmueller@suse.de - -- remove xorg-x11 dependency for SL < 9.2 - -------------------------------------------------------------------- -Fri Nov 18 08:45:51 CET 2005 - stbinner@suse.de - -- fix build after last patch on older distributions - -------------------------------------------------------------------- -Thu Nov 17 16:24:55 CET 2005 - stbinner@suse.de - -- fix kmenu search freezing computer for some seconds (#133593) - -------------------------------------------------------------------- -Mon Nov 14 22:41:14 CET 2005 - lmuelle@suse.de - -- Use samba-libs instead of libsmbclient. - -------------------------------------------------------------------- -Thu Nov 10 12:03:25 CET 2005 - stbinner@suse.de - -- update to version 3.5 RC 1 - -------------------------------------------------------------------- -Sat Nov 5 00:33:54 CET 2005 - coolo@suse.de - -- add patches to improve startup performance - -------------------------------------------------------------------- -Thu Nov 3 10:54:17 CET 2005 - coolo@suse.de - -- fix suseplugger integration to not create fork bombs - -------------------------------------------------------------------- -Mon Oct 31 11:50:24 CET 2005 - coolo@suse.de - -- update kdm patches - -------------------------------------------------------------------- -Mon Oct 31 09:43:52 CET 2005 - coolo@suse.de - -- update to 3.5 branch -- call suseplugger for unhandled UDIs - -------------------------------------------------------------------- -Thu Oct 20 13:43:18 CEST 2005 - ltinkl@suse.cz - -- update kstartupconfig for KDE 3.5 (from Seli) -- fixed window decorations messed up with maximized windows (#120027) -- implemented support for configuring multiple keyboard variants in kxkb (#120395) - -------------------------------------------------------------------- -Wed Oct 19 13:48:43 CEST 2005 - stbinner@suse.de - -- readd still needed parts of improve-panelservicemenu-geticonset.diff - -------------------------------------------------------------------- -Thu Oct 13 16:41:08 CEST 2005 - dmueller@suse.de - -- fix build -- disable accessibility feature if kdeaccessibility is not installed - -------------------------------------------------------------------- -Wed Oct 12 13:34:12 CEST 2005 - stbinner@suse.de - -- update to version 3.4.92 (3.5 Beta 2) - -------------------------------------------------------------------- -Tue Oct 11 21:11:14 CEST 2005 - stbinner@suse.de - -- add patch to teach mini-CLI the "lock" command - -------------------------------------------------------------------- -Fri Oct 7 17:56:00 CEST 2005 - coolo@suse.de - -- update to 3.5 branch to get some testing for media:/ changes - -------------------------------------------------------------------- -Sun Oct 2 10:22:57 CEST 2005 - stbinner@suse.de - -- in collapsed k menu group use category icon if entry has none - -------------------------------------------------------------------- -Fri Sep 30 17:45:12 CEST 2005 - stbinner@suse.de - -- fix wrongly upgraded patch (short-menus.diff) - -------------------------------------------------------------------- -Thu Sep 29 11:06:07 CEST 2005 - stbinner@suse.de - -- remove gdm support from kdmlib for 9.3-x86_64 to fix compilation - -------------------------------------------------------------------- -Wed Sep 28 18:36:49 CEST 2005 - stbinner@suse.de - -- never show broken looking icons in kicker start menu -- show nice disabled icons for smaller kicker menu icon sizes - -------------------------------------------------------------------- -Mon Sep 26 14:12:46 CEST 2005 - stbinner@suse.de - -- fix compilation on 9.2-x86_64, don't use Xfixes - -------------------------------------------------------------------- -Mon Sep 26 13:03:24 CEST 2005 - dmueller@suse.de - -- add 3_5_BRANCH.diff and try to fix fileconflicts - -------------------------------------------------------------------- -Mon Sep 26 09:32:45 CEST 2005 - coolo@suse.de - -- updating info about lame as given by legal - -------------------------------------------------------------------- -Sat Sep 24 16:08:27 CEST 2005 - stbinner@suse.de - -- fix dependencies of khotkeys package for <10.0 - -------------------------------------------------------------------- -Tue Sep 20 18:29:49 CEST 2005 - stbinner@suse.de - -- update to version 3.4.91 (3.5 Beta) - -------------------------------------------------------------------- -Wed Sep 14 22:54:52 CEST 2005 - dmueller@suse.de - -- fix kicker crashing on logout (#117100) - -------------------------------------------------------------------- -Wed Sep 14 08:46:39 CEST 2005 - dmueller@suse.de - -- drop kdelibs3-devel-doc dependendy - -------------------------------------------------------------------- -Fri Sep 9 10:46:20 CEST 2005 - coolo@suse.de - -- fix grubonce support (#106037) - -------------------------------------------------------------------- -Thu Sep 8 13:47:18 CEST 2005 - dmueller@suse.de - -- fix for theme-resetting from Lubos (#114951) - -------------------------------------------------------------------- -Wed Sep 7 20:05:46 CEST 2005 - dmueller@suse.de - -- fix deletion of folders via media:/ (#113583) - -------------------------------------------------------------------- -Tue Sep 6 21:58:30 CEST 2005 - dmueller@suse.de - -- add patch to smb:// to support kerberos authentication (#115245) - -------------------------------------------------------------------- -Tue Sep 6 21:37:46 CEST 2005 - coolo@suse.de - -- let the other init scripts do some IO too, so they don't run - into timeouts - -------------------------------------------------------------------- -Tue Sep 6 15:43:24 CEST 2005 - stbinner@suse.de - -- Fix quick launcher duplicating moved items (#113879) - -------------------------------------------------------------------- -Tue Sep 6 13:31:23 CEST 2005 - coolo@suse.de - -- be a bit more careful with disabling unmount for media (#80313) - -------------------------------------------------------------------- -Mon Sep 5 10:20:37 CEST 2005 - dmueller@suse.de - -- apply fixes for kcheckpass (CAN-2005-2494, #66218) - -------------------------------------------------------------------- -Mon Aug 29 16:03:09 CEST 2005 - coolo@suse.de - -- work around the xterm sizing bug again as we did on 9.2 (#61153) - -------------------------------------------------------------------- -Thu Aug 25 18:11:47 CEST 2005 - coolo@suse.de - -- fixing the screensaver picking - -------------------------------------------------------------------- -Tue Aug 23 17:52:58 CEST 2005 - coolo@suse.de - -- use better defaults for random screensaver -- use the new preload - -------------------------------------------------------------------- -Mon Aug 22 17:24:30 CEST 2005 - llunak@suse.cz - -- Use --embed-proxy instead of --embed for kcmshell with kcmyast, - so that there are no kcmshell buttons with embedded yast. - -------------------------------------------------------------------- -Mon Aug 22 16:16:04 CEST 2005 - llunak@suse.cz - -- Don't start kaccess unconditionally. - -------------------------------------------------------------------- -Mon Aug 22 15:24:42 CEST 2005 - ro@suse.de - -- fixed file list - -------------------------------------------------------------------- -Mon Aug 22 11:25:34 CEST 2005 - coolo@suse.de - -- fix file conflict - -------------------------------------------------------------------- -Sun Aug 21 16:22:30 CEST 2005 - coolo@suse.de - -- fix the kdm change for incomplete themes - -------------------------------------------------------------------- -Sat Aug 20 18:21:45 CEST 2005 - coolo@suse.de - -- trying to please Rudi's impatience (again saving - share holder value) -- some icons massage - -------------------------------------------------------------------- -Fri Aug 19 21:03:12 CEST 2005 - coolo@suse.de - -- update to 3.4 branch -- trying to fix floppy support - -------------------------------------------------------------------- -Thu Aug 18 14:03:25 CEST 2005 - coolo@suse.de - -- kdm sets config variable for xauth (#98627) - -------------------------------------------------------------------- -Tue Aug 16 10:28:44 CEST 2005 - coolo@suse.de - -- let kdm search in the global path even without SUSE theming - -------------------------------------------------------------------- -Mon Aug 15 10:36:49 CEST 2005 - coolo@suse.de - -- update for kdm's not themed user list (#95862) - -------------------------------------------------------------------- -Fri Aug 12 18:34:57 CEST 2005 - dmueller@suse.de - -- add dependency on xorg-x11 (bug #81848) - -------------------------------------------------------------------- -Thu Aug 11 16:39:47 CEST 2005 - llunak@suse.cz - -- Fix the k-menu search patch. - -------------------------------------------------------------------- -Thu Aug 11 12:26:51 CEST 2005 - werner@suse.de - -- Add /home to the nfs check of earlykdm (bug #104052) - -------------------------------------------------------------------- -Wed Aug 10 21:06:50 CEST 2005 - coolo@suse.de - -- update for the media slave (#102564) - -------------------------------------------------------------------- -Tue Aug 9 16:12:27 CEST 2005 - llunak@suse.cz - -- Don't show flags only in the language control module, - otherwise enable them again. - -------------------------------------------------------------------- -Fri Aug 5 11:44:44 CEST 2005 - coolo@suse.de - -- fix kdm to follow the aspect ratio of logos and dots -- some proofreadings - -------------------------------------------------------------------- -Wed Jul 27 11:09:50 CEST 2005 - coolo@suse.de - -- redone kdm patches - -------------------------------------------------------------------- -Tue Jul 26 13:13:09 CEST 2005 - coolo@suse.de - -- new patch for new powersave API - -------------------------------------------------------------------- -Fri Jul 22 14:24:23 CEST 2005 - coolo@suse.de - -- update to version 3.4.2 - -------------------------------------------------------------------- -Tue Jul 19 17:28:14 CEST 2005 - coolo@suse.de - -- Use double-buffered visual also for the screensaver kcm module - (#96605) - -------------------------------------------------------------------- -Sat Jul 16 13:55:53 CEST 2005 - dmueller@suse.de - -- fix typo in -fpie patch - -------------------------------------------------------------------- -Fri Jul 15 14:12:39 CEST 2005 - dmueller@suse.de - -- compile kcheckpass with -fPIE/pie for SL > 9.3 -- compile kdesud with -fpie/pie as well. - -------------------------------------------------------------------- -Wed Jul 6 02:50:35 CEST 2005 - dmueller@suse.de - -- add buffer overflow fix for genkdmconf - -------------------------------------------------------------------- -Fri Jun 24 16:22:46 CEST 2005 - coolo@suse.de - -- fix GL xscreensavers - -------------------------------------------------------------------- -Tue Jun 14 09:38:38 CEST 2005 - coolo@suse.de - -- fix build - -------------------------------------------------------------------- -Mon Jun 13 16:40:15 CEST 2005 - coolo@suse.de - -- another update for kdm - -------------------------------------------------------------------- -Tue Jun 7 14:42:12 CEST 2005 - coolo@suse.de - -- update to 3.4 branch, kdm to 3.5 branch -- add my chances to kdm for more advanced user list - -------------------------------------------------------------------- -Mon Jun 6 10:51:03 CEST 2005 - schwab@suse.de - -- Fix completely stupid and embarrassing CD polling code. - -------------------------------------------------------------------- -Thu Jun 2 11:18:34 CEST 2005 - adrian@suse.de - -- apply k-menu search patch from Fred Schaettgen for post 9.3 - -------------------------------------------------------------------- -Tue May 24 14:09:29 CEST 2005 - adrian@suse.de - -- update to version 3.4.1 - -------------------------------------------------------------------- -Mon May 23 11:22:11 CEST 2005 - adrian@suse.de - -- remove flag images for political reasons (#72452) - -------------------------------------------------------------------- -Tue May 17 11:39:40 CEST 2005 - adrian@suse.de - -- remove dummy TESTME enviroment variable - -------------------------------------------------------------------- -Thu Apr 21 14:30:37 CEST 2005 - adrian@suse.de - -- apply patch with experimental HAL 0.5 support from cvs HEAD - -------------------------------------------------------------------- -Thu Apr 14 17:17:06 CEST 2005 - sbrabec@suse.cz - -- Added audiofile-devel to neededforbuild. - -------------------------------------------------------------------- -Wed Apr 13 12:55:17 CEST 2005 - adrian@suse.de - -- update to current 3_4_BRANCH - * contains konqueror crash fix, when compiled with gcc 4 - -------------------------------------------------------------------- -Mon Apr 4 14:05:15 CEST 2005 - adrian@suse.de - -- do not reload kdm in logrotate (#75700) - -------------------------------------------------------------------- -Mon Apr 4 13:58:12 CEST 2005 - adrian@suse.de - -- fix build with gcc 4 - -------------------------------------------------------------------- -Fri Apr 1 15:14:47 CEST 2005 - adrian@suse.de - -- let libkonq use kdemm framework instead of arts for post 9.3 - -------------------------------------------------------------------- -Sun Mar 27 00:51:17 CET 2005 - schwab@suse.de - -- Fix crash in kwin. - -------------------------------------------------------------------- -Wed Mar 23 15:08:59 CET 2005 - coolo@suse.de - -- fix typo (#74357) - -------------------------------------------------------------------- -Tue Mar 22 18:40:00 CET 2005 - adrian@suse.de - -- avoid double entries from non-visible services in konqueror menu - -------------------------------------------------------------------- -Tue Mar 22 17:22:31 CET 2005 - adrian@suse.de - -- fix kicker layout, after adding items (#71831, by Waldo) - -------------------------------------------------------------------- -Tue Mar 22 15:18:13 CET 2005 - adrian@suse.de - -- create .kde and .kde/share with 0700 permissions again -- hide umount option in media slave for subfs systems - -------------------------------------------------------------------- -Mon Mar 21 17:19:42 CET 2005 - adrian@suse.de - -- move old kdmrc configurations away to avoid problems on - login time (#74072) - -------------------------------------------------------------------- -Sat Mar 19 13:52:49 CET 2005 - adrian@suse.de - -- hide menu entries below gnome, since gnome does require KDE - installed currently (#73539) -- move kthememgr icon to main package (#67133) - -------------------------------------------------------------------- -Fri Mar 18 15:09:02 CET 2005 - adrian@suse.de - -- make ksplashx configurable (by Lubos) - -------------------------------------------------------------------- -Wed Mar 16 21:19:42 CET 2005 - adrian@suse.de - -- fix redirection to kio_ipod - -------------------------------------------------------------------- -Wed Mar 16 08:53:11 CET 2005 - adrian@suse.de - -- fix OnlyShowIn typo in kcontrol.desktop (#72029) -- nsplugin fixes from BRANCH -- check for remote autologin users in earlykdm - -------------------------------------------------------------------- -Tue Mar 15 13:32:14 CET 2005 - coolo@suse.de - -- installing dummy flag for tw to apply to china's import - restrictions (#72503 #72452) - -------------------------------------------------------------------- -Mon Mar 14 09:56:27 CET 2005 - adrian@suse.de - -- let klipper ignore selections in firefox (#72352, by Lubos) -- 3_4_BRANCH update - * sftp protocol fix for non latin1 chars -- change earlykdm check for kbd startup (by jw) -- show kcontrol only within KDE -- disable gestures by default, they get enabled again when - kdeaccessibility3 get installed -- earlykdm does wait for resmgr - -------------------------------------------------------------------- -Thu Mar 10 20:38:41 CET 2005 - coolo@suse.de - -- handle ksplashx in kcontrol - -------------------------------------------------------------------- -Wed Mar 9 10:21:51 CET 2005 - adrian@suse.de - -- fix khelpcenter search (#66466 by Cornelius) -- disable firewire kcm module -- use current BRANCH for kwin - -------------------------------------------------------------------- -Tue Mar 8 14:29:41 CET 2005 - adrian@suse.de - -- fix gimp 2.0 icon pixmap name -- fix kcmfontinst issue (waldo, #66858) -- point the user to a possible configured firewall, if kio_smb - does fail - -------------------------------------------------------------------- -Tue Mar 8 10:16:52 CET 2005 - adrian@suse.de - -- add warning about firewall, if no smb shares got found. - -------------------------------------------------------------------- -Mon Mar 7 10:22:21 CET 2005 - coolo@suse.de - -- fix kdm auth (3_4_BRANCH) -- some kdm accessibility fixes -- shutdown ssh-agent and gpg-agent on logout - -------------------------------------------------------------------- -Fri Mar 4 17:29:55 CET 2005 - adrian@suse.de - -- update to version 3.4 final -- fix kio_smb for password protected shares - -------------------------------------------------------------------- -Wed Mar 2 16:37:02 CET 2005 - adrian@suse.de - -- move Requires: kdelibs3_doc from kdelibs3 to kdebase3 - -------------------------------------------------------------------- -Tue Mar 1 10:37:07 CET 2005 - adrian@suse.de - -- change default style from kicker clock, as requested by Ken - -------------------------------------------------------------------- -Mon Feb 28 17:17:57 CET 2005 - coolo@suse.de - -- porting the admin patch to themed greeter -- fix ksysguardd - -------------------------------------------------------------------- -Mon Feb 28 14:13:37 CET 2005 - coolo@suse.de - -- fix the shutdown entry - -------------------------------------------------------------------- -Mon Feb 28 08:01:25 CET 2005 - adrian@suse.de - -- apply fixes from 3_4_BRANCH - * acroread netscape plugin resize fixes - * enable mdns kcontrol module - -------------------------------------------------------------------- -Sat Feb 26 12:18:23 CET 2005 - adrian@suse.de - -- update to 3.4.0 RC 1 - -------------------------------------------------------------------- -Wed Feb 23 15:03:20 CET 2005 - adrian@suse.de - -- move permissions to aaa_base for 9.3 (#66312) -- remove /usr/X11R6/bin/setXF86Config from permissions - -------------------------------------------------------------------- -Wed Feb 23 09:23:02 CET 2005 - adrian@suse.de - -- hide .hidden/.directory in Gnome - -------------------------------------------------------------------- -Tue Feb 22 09:47:57 CET 2005 - adrian@suse.de - -- add Firefox entry to klipper - -------------------------------------------------------------------- -Mon Feb 21 14:56:10 CET 2005 - adrian@suse.de - -- call update93 script, if needed/possible - -------------------------------------------------------------------- -Fri Feb 18 11:54:18 CET 2005 - adrian@suse.de - -- no System icon on the desktop by default anymore - -------------------------------------------------------------------- -Fri Feb 18 10:54:02 CET 2005 - adrian@suse.de - -- update to current cvs - -------------------------------------------------------------------- -Thu Feb 17 15:38:10 CET 2005 - coolo@suse.de - -- reconfigure the clock afer kdesu yast finished - -------------------------------------------------------------------- -Wed Feb 16 21:49:58 CET 2005 - schwab@suse.de - -- Fix splash configuration in startkde. - -------------------------------------------------------------------- -Wed Feb 16 18:40:24 CET 2005 - adrian@suse.de - -- use ipod:/ slave for /media/iPod in kio_media, if this slave - does exist - -------------------------------------------------------------------- -Wed Feb 16 15:46:23 CET 2005 - coolo@suse.de - -- fixing konsole fonts - -------------------------------------------------------------------- -Wed Feb 16 14:33:02 CET 2005 - adrian@suse.de - -- fix menu shorting - -------------------------------------------------------------------- -Mon Feb 14 17:47:37 CET 2005 - adrian@suse.de - -- update from CVS - -------------------------------------------------------------------- -Fri Feb 11 16:18:16 CET 2005 - adrian@suse.de - -- add split provides for session sub package - -------------------------------------------------------------------- -Fri Feb 11 12:54:37 CET 2005 - coolo@suse.de - -- split kde startup link into an extra package to asure people do - not log into incomplete KDE setups because of dependencies - -------------------------------------------------------------------- -Fri Feb 11 10:31:49 CET 2005 - adrian@suse.de - -- update from CVS - -------------------------------------------------------------------- -Thu Feb 10 18:19:08 CET 2005 - adrian@suse.de - -- konsole-use-xft-font patch got obsoleted - -------------------------------------------------------------------- -Thu Feb 10 11:11:08 CET 2005 - adrian@suse.de - -- do not package a static kdmrc anymore, but generate it with genkdmconf - -------------------------------------------------------------------- -Mon Feb 7 11:37:49 CET 2005 - adrian@suse.de - -- update to beta 2 - -------------------------------------------------------------------- -Mon Jan 31 15:24:11 CET 2005 - coolo@suse.de - -- removed tip that is not true on SUSE (#45352) - -------------------------------------------------------------------- -Sat Jan 29 10:36:45 CET 2005 - coolo@suse.de - -- updated the mach_blass patch to do some really fancy stuff - -------------------------------------------------------------------- -Fri Jan 28 15:49:58 CET 2005 - adrian@suse.de - -- update to current snapshot -- add option in kdm/logout dialog to call suspend (coolo) - -------------------------------------------------------------------- -Tue Jan 25 16:47:15 CET 2005 - adrian@suse.de - -- fix export of GTK2_RC_FILES - -------------------------------------------------------------------- -Mon Jan 24 17:22:31 CET 2005 - coolo@suse.de - -- update to current snapshot (new kdm) - -------------------------------------------------------------------- -Fri Jan 21 10:42:16 CET 2005 - adrian@suse.de - -- update to current snapshot -- enable HAL in media slave -- remove update dialog - -------------------------------------------------------------------- -Thu Jan 20 19:22:23 CET 2005 - coolo@suse.de - -- activate earlykdm per default - -------------------------------------------------------------------- -Sat Jan 15 20:54:11 CET 2005 - schwab@suse.de - -- Use : in permissions file. - -------------------------------------------------------------------- -Thu Jan 13 09:50:09 CET 2005 - coolo@suse.de - -- updated to HEAD -- patched startkde to prefer ksplashx - -------------------------------------------------------------------- -Wed Jan 12 13:34:39 CET 2005 - coolo@suse.de - -- fix order in startkde.suse - -------------------------------------------------------------------- -Mon Jan 10 18:49:24 CET 2005 - coolo@suse.de - -- fix earlykdm init script to use correct return values -- make use of earlysyslog - -------------------------------------------------------------------- -Sun Jan 9 10:01:53 CET 2005 - adrian@suse.de - -- final 3.4 beta 1 - -------------------------------------------------------------------- -Tue Jan 4 16:36:40 CET 2005 - coolo@suse.de - -- update to 3.4 beta 1 (snapshot) -- some work on kdm - -------------------------------------------------------------------- -Fri Dec 17 13:52:19 CET 2004 - coolo@suse.de - -- fixing exec call - -------------------------------------------------------------------- -Wed Dec 15 16:28:14 CET 2004 - coolo@suse.de - -- simplifying script - -------------------------------------------------------------------- -Tue Dec 14 11:46:45 CET 2004 - coolo@suse.de - -- convert fileshareset to automake syntax -- adding early kdm boot script - -------------------------------------------------------------------- -Mon Dec 13 17:32:25 CET 2004 - coolo@suse.de - -- get rid of own copy of startkde and split into suse specific - startup resource and default changing diff - -------------------------------------------------------------------- -Wed Dec 8 13:26:42 CET 2004 - adrian@suse.de - -- update to official 3.4 alpha 1 - -------------------------------------------------------------------- -Fri Dec 3 15:34:28 CET 2004 - adrian@suse.de - -- apply 3_3_BRANCH patch to fix konsole crash - -------------------------------------------------------------------- -Tue Nov 30 09:55:55 CET 2004 - adrian@suse.de - -- run krootimage in background on startup - -------------------------------------------------------------------- -Mon Nov 29 22:52:54 CET 2004 - adrian@suse.de - -- update to version 3.3.2 - -------------------------------------------------------------------- -Tue Nov 23 16:14:32 CET 2004 - adrian@suse.de - -- fix build for older distributions -- clean up startkde script a bit (removing themeing of GTK1 applications) - -------------------------------------------------------------------- -Thu Nov 18 15:46:19 CET 2004 - adrian@suse.de - -- add missing %suse_update_desktop_file calls - -------------------------------------------------------------------- -Thu Nov 18 15:37:21 CET 2004 - ro@suse.de - -- use kerberos-devel-packages - -------------------------------------------------------------------- -Thu Nov 11 22:22:07 CET 2004 - adrian@suse.de - -- add $prefix/env support from KDE startkde script - -------------------------------------------------------------------- -Mon Oct 25 18:33:09 CEST 2004 - adrian@suse.de - -- fix file sharing visibility (#43056) - -------------------------------------------------------------------- -Wed Oct 20 11:26:20 CEST 2004 - uli@suse.de - -- fixed KDM on 64-bit BE systems (bug #47202) - -------------------------------------------------------------------- -Thu Oct 14 17:43:40 CEST 2004 - adrian@suse.de - -- remove kdm-codec patch, it is not needed with the new xdm - script anymore and has a bad effect for chinese people - -------------------------------------------------------------------- -Tue Oct 12 13:11:34 CEST 2004 - adrian@suse.de - -- update to version 3.3.1 - -------------------------------------------------------------------- -Thu Oct 7 13:28:57 CEST 2004 - adrian@suse.de - -- fix file conflict between kdebase3 and kdebase3-extra - -------------------------------------------------------------------- -Tue Oct 5 17:21:05 CEST 2004 - adrian@suse.de - -- update to complete polish translations - -------------------------------------------------------------------- -Tue Oct 5 16:49:00 CEST 2004 - coolo@suse.de - -- updated translations - -------------------------------------------------------------------- -Tue Oct 5 13:31:36 CEST 2004 - adrian@suse.de - -- avoid error message on adding a desktop icon on first login. - (#46713) - -------------------------------------------------------------------- -Mon Oct 4 18:16:31 CEST 2004 - adrian@suse.de - -- fix for view gnome help pages with khelpcenter via help:$application - (by clahey, #45480) - -------------------------------------------------------------------- -Mon Oct 4 14:58:59 CEST 2004 - coolo@suse.de - -- don't show a trans slider by default (#46492) - -------------------------------------------------------------------- -Thu Sep 30 15:06:44 CEST 2004 - adrian@suse.de - -- workaround for a xterm size bug (by Lubos, #46153) -- workaround a problem with acrobat reader plugin on 64bit system - (by coolo, #45375) -- fix kstart behavior (by Lubos, #45919) - -------------------------------------------------------------------- -Wed Sep 29 10:18:10 CEST 2004 - adrian@suse.de - -- hide second entry for printer management - -------------------------------------------------------------------- -Wed Sep 29 09:58:37 CEST 2004 - coolo@suse.de - -- hiding the clean button again - -------------------------------------------------------------------- -Tue Sep 28 17:58:40 CEST 2004 - adrian@suse.de - -- disable XInitThread() call again., it has to moved a little bit - deeper ... - -------------------------------------------------------------------- -Mon Sep 27 17:27:59 CEST 2004 - coolo@suse.de - -- merged kdm patches for KDE 3.3 - -------------------------------------------------------------------- -Sun Sep 26 13:32:31 CEST 2004 - adrian@suse.de - -- use current 3_3_BRANCH - * fixes a possible crash of konsole -- disable the composite extension of konsole again, it cause a hang (#46098) -- update kwin composite patch -- fix hanging kparts using threads (like kaffeine/xine) again - -------------------------------------------------------------------- -Wed Sep 22 10:22:48 CEST 2004 - adrian@suse.de - -- create desktop icons also for root user - -------------------------------------------------------------------- -Mon Sep 20 23:41:08 CEST 2004 - adrian@suse.de - -- update to current 3_3_BRANCH - * various kio_fish fixes - -------------------------------------------------------------------- -Mon Sep 20 17:56:56 CEST 2004 - adrian@suse.de - -- update to current 3_3_BRANCH - * includes fix for desktop icon positions with panel on the left - (#45437) - -------------------------------------------------------------------- -Wed Sep 15 15:14:40 CEST 2004 - adrian@suse.de - -- add hook to startkde to disable IPv6 depending on - /etc/sysconfig/windowmanager - -------------------------------------------------------------------- -Tue Sep 14 14:44:16 CEST 2004 - adrian@suse.de - -- update to current BRANCH -- enable composite support in konsole (patch from Lubos) - -------------------------------------------------------------------- -Sat Sep 11 16:40:09 CEST 2004 - adrian@suse.de - -- update to current 3_3_BRANCH -- remove mad from nfb - -------------------------------------------------------------------- -Sat Sep 4 10:56:25 CEST 2004 - coolo@suse.de - -- replaced 3_2_BRANCH with 3_3_BRANCH (including fix for parallel build) -- going for unsermake (parallel build + no bugs with installing icons) - -------------------------------------------------------------------- -Sat Aug 21 20:54:16 CEST 2004 - adrian@suse.de - -- remove shadow patch -- some menu item fixes -- khelpcenter gnome support by clahey - -------------------------------------------------------------------- -Mon Aug 16 15:32:44 CEST 2004 - adrian@suse.de - -- update to version 3.3.0 final - -------------------------------------------------------------------- -Sat Aug 14 19:21:49 CEST 2004 - schwab@suse.de - -- ksysguard: rate limit SLP rescan [#43820]. - -------------------------------------------------------------------- -Fri Aug 13 11:39:02 CEST 2004 - adrian@suse.de - -- package libkfontinst for 8.2 - -------------------------------------------------------------------- -Tue Aug 10 08:58:24 CEST 2004 - adrian@suse.de - -- update to version 3.3.0 RC2 - -------------------------------------------------------------------- -Tue Aug 3 08:06:21 CEST 2004 - adrian@suse.de - -- use kde-open, if it exists - -------------------------------------------------------------------- -Mon Jul 26 21:08:06 CEST 2004 - adrian@suse.de - -- run ksysguardd as daemon (#38861) - -------------------------------------------------------------------- -Tue Jul 20 15:22:47 CEST 2004 - adrian@suse.de - -- update to KDE 3.2.92 (3.3 beta 2) - -------------------------------------------------------------------- -Tue Jun 29 09:48:30 CEST 2004 - adrian@suse.de - -- fix some aliasing warnings - -------------------------------------------------------------------- -Mon Jun 28 11:18:47 CEST 2004 - adrian@suse.de - -- update to version 3.3 beta 1 - -------------------------------------------------------------------- -Wed Jun 9 11:41:26 CEST 2004 - adrian@suse.de - -- fix ksysguardd sig11 due to slp implementation - (using a reg file now) - -------------------------------------------------------------------- -Wed Jun 2 09:58:36 CEST 2004 - adrian@suse.de - -- fix double entries in kicker quick browser. - (found by Joerg Seymer) -- fix double packaging of some icons - -------------------------------------------------------------------- -Tue Jun 1 08:33:58 CEST 2004 - adrian@suse.de - -- update to version 3.2.3 - -------------------------------------------------------------------- -Fri Apr 16 15:49:17 CEST 2004 - adrian@suse.de - -- fix compile on 8.1 - -------------------------------------------------------------------- -Fri Apr 16 12:04:19 CEST 2004 - adrian@suse.de - -- fix build for 9.0-x86_64 - -------------------------------------------------------------------- -Thu Apr 15 08:50:02 CEST 2004 - adrian@suse.de - -- fix build for < 9.1 distributions - -------------------------------------------------------------------- -Wed Apr 14 11:16:13 CEST 2004 - adrian@suse.de - -- update to version 3.2.2 - -------------------------------------------------------------------- -Tue Apr 6 18:21:30 CEST 2004 - adrian@suse.de - -- do also export locale enviroment with kdesu (#38527) - -------------------------------------------------------------------- -Tue Apr 6 08:10:02 CEST 2004 - adrian@suse.de - -- remove debug infobox on drive eject (#38294) -- fix wrong highlighted colors in gtk applications (#36935) - -------------------------------------------------------------------- -Mon Apr 5 18:16:59 CEST 2004 - adrian@suse.de - -- get KCMYAST2_CALL through kdesu -- fix yast module loading also when kcontrol already runs as root - -------------------------------------------------------------------- -Mon Apr 5 08:54:30 CEST 2004 - adrian@suse.de - -- remove second devices button in sidebar -- do use drives:/ on > 9.0 in the main devices button in the sidebar -- fix broken icon entry for sidebar services button -- kdm starts WindowMaker with "windowmaker" #38319 - -------------------------------------------------------------------- -Sun Apr 4 21:23:36 CEST 2004 - coolo@suse.de - -- update to kicker CVS for critical bug fix (replacing two other - former patches) - -------------------------------------------------------------------- -Sat Apr 3 08:52:35 CEST 2004 - coolo@suse.de - -- remove pointer to lan:/ in sidebar (#38174) -- fixing yet another place where the wrong string was used - -------------------------------------------------------------------- -Thu Apr 1 17:58:13 CEST 2004 - adrian@suse.de - -- apply fix for non-editable menu entries in kmenuedit (Waldo) - -------------------------------------------------------------------- -Thu Apr 1 15:06:58 CEST 2004 - coolo@suse.de - -- adding fix for kicker to not increase menu size because of newer - Qt (KDE #78556) - -------------------------------------------------------------------- -Thu Apr 1 09:20:05 CEST 2004 - adrian@suse.de - -- better icon for fish:/ -- don't show "mount" menu items for > 9.0 (we have subfs) - -------------------------------------------------------------------- -Wed Mar 31 17:10:35 CEST 2004 - coolo@suse.de - -- adding switchuser translations -- don't give the warning in kdesktop_lock -- add an icon to the kdm menu so that it doesn't look ugly in - thinkeramik - -------------------------------------------------------------------- -Tue Mar 30 16:35:30 CEST 2004 - adrian@suse.de - -- remove random user list file -- remove help menu entry in kdesktop to not existing help pages -- Honour global defaults & kiosk restrictions in kcmstyle (Waldo) -- ksysguardd runlevel fixes (#37614) -- fix klipperrc patch -- don't wait for arts shutdown - -------------------------------------------------------------------- -Sun Mar 28 18:39:40 CEST 2004 - adrian@suse.de - -- fix eject via kio_drives (#37156) - -------------------------------------------------------------------- -Sat Mar 27 09:23:54 CET 2004 - adrian@suse.de - -- apply fix for kicker crash by Lubos (#36360) -- use current BRANCH for kdesktop/ - * kiosk, minicli fixes and translation updates -- fixes a problem with focus stealing prevention with klipper (Lubos) -- use current BRANCH from kwin/ - * fixes pop-up windows below main window (#36682) -- fix several icons in kcontrol - -------------------------------------------------------------------- -Fri Mar 26 13:36:08 CET 2004 - coolo@suse.de - -- fixing kdm layout on personal theme -- default to shutdown when auto logined (#36856) - -------------------------------------------------------------------- -Wed Mar 24 16:12:26 CET 2004 - coolo@suse.de - -- fixing konsole pasting (#34892) -- fixing window shadow - -------------------------------------------------------------------- -Wed Mar 24 15:30:21 CET 2004 - adrian@suse.de - -- export $KDESU_USER with kdesu session - -------------------------------------------------------------------- -Mon Mar 22 09:22:59 CET 2004 - adrian@suse.de - -- update to current 3_2_BRANCH - * kcminit fixes, qt apps are using the default KDE widget style now - * Alt F2 dialog layout fixes -- call 9.1 update script -- apply default-fonts.diff again - -------------------------------------------------------------------- -Sun Mar 21 16:54:58 CET 2004 - adrian@suse.de - -- fix kcontrol yast integration - -------------------------------------------------------------------- -Wed Mar 17 23:51:12 CET 2004 - adrian@suse.de - -- move krandrtray menu entry -- move some .desktop files to correct sub package - -------------------------------------------------------------------- -Wed Mar 17 20:49:31 CET 2004 - coolo@suse.de - -- fixing NFS URLs (#36032, #36275) - -------------------------------------------------------------------- -Tue Mar 16 14:37:38 CET 2004 - coolo@suse.de - -- increasing rudi's screen space for higher stock holder value - (#36065) - -------------------------------------------------------------------- -Mon Mar 15 16:02:26 CET 2004 - coolo@suse.de - -- updating branch diff for konsole fixes (mutt, vim, irssi) - -------------------------------------------------------------------- -Fri Mar 12 17:38:58 CET 2004 - coolo@suse.de - -- fixing file test - -------------------------------------------------------------------- -Thu Mar 11 22:08:45 CET 2004 - coolo@suse.de - -- fixing user switching - -------------------------------------------------------------------- -Thu Mar 11 10:25:26 CET 2004 - coolo@suse.de - -- replace Xservers with a symlink to the real file from XFree86 -- fixing kdm layout -- fixing konsole font - -------------------------------------------------------------------- -Wed Mar 10 16:43:58 CET 2004 - coolo@suse.de - -- adding switchuser for kdm user switch support -- removing untranslated shadow from popup -- artwork.diff update for services - -------------------------------------------------------------------- -Tue Mar 9 13:34:12 CET 2004 - coolo@suse.de - -- reworked admin mode patch -- adding patch by Lubos to enhance xcursor support -- updating to latest 3_2_BRANCH (including at least 3 #s) -- adding patch by Matz to reintroduce window shadows -- adding support for HideMenu=true in kdm (#35209) - -------------------------------------------------------------------- -Mon Mar 8 11:27:23 CET 2004 - adrian@suse.de - -- use original Home folder icon again - -------------------------------------------------------------------- -Sat Mar 6 22:17:57 CET 2004 - coolo@suse.de - -- fix build with gcc 2.95 - -------------------------------------------------------------------- -Sat Mar 6 15:08:02 CET 2004 - coolo@suse.de - -- huge cleanup in the patches -- update 3_2_BRANCH diff - -------------------------------------------------------------------- -Thu Mar 4 09:55:52 CET 2004 - adrian@suse.de - -- use gtk-qt-engine only as fallback -- fix gnome startup call for kdm - -------------------------------------------------------------------- -Wed Mar 3 19:16:35 CET 2004 - coolo@suse.de - -- give us back the kdm user pictures - -------------------------------------------------------------------- -Mon Mar 1 10:34:30 CET 2004 - coolo@suse.de - -- update to version 3.2.1 - -------------------------------------------------------------------- -Fri Feb 27 19:34:12 CET 2004 - coolo@suse.de - -- adding font overwrites (again) to startkde (#30760) - -------------------------------------------------------------------- -Fri Feb 27 10:05:20 CET 2004 - coolo@suse.de - -- updated 3_2_BRANCH for kdesktop wallpaper fix (taking out - experimental patches do no longer apply because of this) -- install xdm-np pam service to fix autologin (#34674) -- fixing warnings build dislikes - -------------------------------------------------------------------- -Thu Feb 26 20:25:39 CET 2004 - adrian@suse.de - -- add kwin shadow patch again (prepared by Matz) - -------------------------------------------------------------------- -Tue Feb 24 17:51:26 CET 2004 - coolo@suse.de - -- removing kdm-xconsole - went upstream -- adding mach_blass for getting feedback -- adding kiosk patch by Waldo -- adding user switch patch for kdm - -------------------------------------------------------------------- -Sat Feb 21 17:02:14 CET 2004 - adrian@suse.de - -- one KControl menu entry is enough - -------------------------------------------------------------------- -Wed Feb 18 10:25:06 CET 2004 - coolo@suse.de - -- updating two patches -- updating mp3-info (#33151) -- removed ssh protocol -- disable kwin shadow patch again (too broken atm) - -------------------------------------------------------------------- -Tue Feb 17 15:15:54 CET 2004 - coolo@suse.de - -- fixing kdesktop icon aligning again - -------------------------------------------------------------------- -Mon Feb 16 17:46:23 CET 2004 - adrian@suse.de - -- update to current 3_2_BRANCH - * includes the kicker clock flickering fix - -------------------------------------------------------------------- -Wed Feb 11 12:03:20 CET 2004 - adrian@suse.de - -- update to current 3_2_BRANCH -- justify kcm modules in kdesktop configure dialog -- use gtk-qt-engine by default for Gtk2 apps, if installed - -------------------------------------------------------------------- -Tue Feb 10 10:13:12 CET 2004 - adrian@suse.de - -- update to current 3_2_BRANCH -- enable firewire support -- build kdm backend and pam code with -fno-strict-aliasing - -------------------------------------------------------------------- -Sun Feb 8 21:30:49 CET 2004 - adrian@suse.de - -- update to current 3_2_BRANCH -- add current kwin shadow patch - -------------------------------------------------------------------- -Mon Feb 2 10:00:36 CET 2004 - adrian@suse.de - -- fix build for older distributions -- add kickerrc config for < 9.1, because deinstallation of - kdebase3-SuSE will mess up the kicker otherwise - -------------------------------------------------------------------- -Wed Jan 28 13:48:10 CET 2004 - adrian@suse.de - -- fish can also used view ssh:/ now - -------------------------------------------------------------------- -Wed Jan 28 11:03:41 CET 2004 - adrian@suse.de - -- fix file list - -------------------------------------------------------------------- -Tue Jan 27 21:42:10 CET 2004 - adrian@suse.de - -- update to version 3.2.0 final -- cleanup and fix some more patches from 3.1 - -------------------------------------------------------------------- -Mon Jan 19 10:43:08 CET 2004 - adrian@suse.de - -- add logrotate config for kdm - -------------------------------------------------------------------- -Sun Jan 18 21:43:52 CET 2004 - adrian@suse.de - -- update to version 3.1.95 ( KDE 3.2 RC1 ) - -------------------------------------------------------------------- -Fri Jan 16 17:12:13 CET 2004 - adrian@suse.de - -- implement short menus again -- make icon size of KDE menu configurable - -------------------------------------------------------------------- -Fri Jan 16 12:56:42 CET 2004 - kukuk@suse.de - -- Add pam-devel to neededforbuild - -------------------------------------------------------------------- -Tue Jan 13 13:40:32 CET 2004 - adrian@suse.de - -- update to snapshot 2004011309 -- rename kdebase3-nsplugin to kdebase3-nsplugin64 for 64bit archs - -------------------------------------------------------------------- -Tue Dec 30 15:08:10 CET 2003 - adrian@suse.de - -- update to snapshot 2003123011 - -------------------------------------------------------------------- -Wed Dec 17 17:54:02 CET 2003 - adrian@suse.de - -- update to snapshot 2003121718 -- fix kdesktop sig11 due to extensions - -------------------------------------------------------------------- -Mon Dec 15 15:33:18 CET 2003 - adrian@suse.de - -- update to snapshot 2003121511 -- apply needed kdesktop extensions again - -------------------------------------------------------------------- -Tue Dec 2 11:38:53 CET 2003 - adrian@suse.de - -- use 3.1.94, second try tar ball - -------------------------------------------------------------------- -Mon Dec 1 22:00:31 CET 2003 - adrian@suse.de - -- update to 3.1.94 ( KDE 3.2 beta 2 ) - -------------------------------------------------------------------- -Thu Nov 13 23:14:30 CET 2003 - adrian@suse.de - -- update to new snapshot from 2003102409 -- fix kwin startup -- add SLP support for ksysguard - -------------------------------------------------------------------- -Wed Oct 29 09:59:01 CET 2003 - adrian@suse.de - -- update to KDE 3.2 beta1 - -------------------------------------------------------------------- -Tue Oct 21 09:34:51 CEST 2003 - adrian@suse.de - -- update to snapshot 2003102008 - -------------------------------------------------------------------- -Sun Oct 5 14:31:09 CEST 2003 - adrian@suse.de - -- update to snapshot 2003100510 - -------------------------------------------------------------------- -Mon Sep 29 15:59:09 CEST 2003 - adrian@suse.de - -- update to version 1.1.92 (KDE 3.2 alpha 2) - -------------------------------------------------------------------- -Sat Sep 20 16:29:17 CEST 2003 - adrian@suse.de - -- fix from Waldo, to update kicker menu, when sycoca has changed - -------------------------------------------------------------------- -Fri Sep 19 12:37:43 CEST 2003 - adrian@suse.de - -- Add Screensaver Categories, needed for Gnome (#31282) - -------------------------------------------------------------------- -Fri Sep 19 09:37:42 CEST 2003 - adrian@suse.de - -- redo nsplugin silence patch, the output is needed for the GUI - progress bar - -------------------------------------------------------------------- -Thu Sep 18 17:52:36 CEST 2003 - adrian@suse.de - -- fix a handling of shortet menu names, broken encoding for - non-latin1 (#31248) - -------------------------------------------------------------------- -Thu Sep 18 10:56:56 CEST 2003 - adrian@suse.de - -- update konsole_compose fix from Waldo (fixes issues with screen) -- silence during nspluginscan - -------------------------------------------------------------------- -Wed Sep 17 09:18:01 CEST 2003 - adrian@suse.de - -- disable kthemegr completely. It can mess up the complete setup - (#30727) -- fix touch of update90 file - -------------------------------------------------------------------- -Tue Sep 16 17:16:08 CEST 2003 - adrian@suse.de - -- apply fix from Lubos for the Double Focus problem (#29467) - -------------------------------------------------------------------- -Tue Sep 16 10:34:13 CEST 2003 - adrian@suse.de - -- higher nsplugin service priority - (pdf's are shown in embedded acroread) -- use correct background setup during autologin - -------------------------------------------------------------------- -Mon Sep 15 21:48:32 CEST 2003 - coolo@suse.de - -- providing function for the suseplugger - -------------------------------------------------------------------- -Mon Sep 15 17:30:13 CEST 2003 - coolo@suse.de - -- have pkgconfig in the neededforbuilds to get fontconfig - support (that you get if you don't calculate build dependencies - automatically) - -------------------------------------------------------------------- -Mon Sep 15 14:38:37 CEST 2003 - adrian@suse.de - -- fix typo in startkde - -------------------------------------------------------------------- -Mon Sep 15 11:33:03 CEST 2003 - adrian@suse.de - -- apply patch from coolo to fix mouse cursor settings from kcontrol - (#30760) -- clean up obsolete/double patch -- apply fix from Waldo for the kicker update script (#30767) - -------------------------------------------------------------------- -Sun Sep 14 23:33:54 CEST 2003 - coolo@suse.de - -- fixes for suseplugger placement - -------------------------------------------------------------------- -Sat Sep 13 13:56:31 CEST 2003 - adrian@suse.de - -- apply fix from Waldo for editing icon entries in kicker (#30606) -- fix Unimportant entries finaly. -- update suse_default_move.diff patch to new verions from coolo - * fixes icon placement finally, hopefully -- implement second level menu sorting - -------------------------------------------------------------------- -Fri Sep 12 15:55:00 CEST 2003 - coolo@suse.de - -- fixing the aligning of the default icons - -------------------------------------------------------------------- -Fri Sep 12 11:33:14 CEST 2003 - coolo@suse.de - -- set background even on autologin users - -------------------------------------------------------------------- -Thu Sep 11 08:33:28 CEST 2003 - adrian@suse.de - -- redone 3.1.4 tar ball, whith kdesu enviroment fix -- apply branch patch with kdesktop rename fix -- add new console font from mfabian with an EUR char -- fix copy quoting of kdesktop addIcon -- export $STYLE to get a matching look in xmms -- new version for krdb-gtk2 patch from coolo -- fix from Waldo to show UTF-8 in konsole correct (#25146) -- prepare startkde script to call the 9.0 update script - -------------------------------------------------------------------- -Wed Sep 10 13:23:15 CEST 2003 - coolo@suse.de - -- check a specific dcop interface (kdesktop). that's less likely to - stay stale (#30148) - -------------------------------------------------------------------- -Tue Sep 9 15:58:30 CEST 2003 - coolo@suse.de - -- remove unused patch7 -- add patch to force xft2 usage on qt3 in konsole (#29164) - -------------------------------------------------------------------- -Tue Sep 9 01:17:23 CEST 2003 - adrian@suse.de - -- do even apply coolos patch -- further kcontrol yast patch. we need only one line in the - desktop file now and can keep a usual Exec line - -------------------------------------------------------------------- -Tue Sep 9 00:13:49 CEST 2003 - adrian@suse.de - -- update to version 3.1.4 -- some missing bits, to be able to load YaST embedded into kcontrol - again - -------------------------------------------------------------------- -Mon Sep 8 20:23:34 CEST 2003 - coolo@suse.de - -- update smb code in CVS to include more detailed error message -- add debug code as found a problem in our windows network which - might hit more users - -------------------------------------------------------------------- -Mon Sep 8 15:22:33 CEST 2003 - coolo@suse.de - -- fixing kdesktop to read .directory on new files -- updating short-menus diff from adrian - -------------------------------------------------------------------- -Fri Sep 5 13:52:05 CEST 2003 - adrian@suse.de - -- honor also X-SuSE-Unimportant entries during menu shorting -- new kmenuedit from Waldo, fixing creation of new entries -- add gtk2-set-enviroment patch from Lubos to fix encoding problems -- handle special flags for folder (no shorting and name usage) -- new handling of GTK theme, made by Stanislav Brabec -- kfontinst: reload instead of restart the xfs -- kfontinst: call also SuSEconfig --module fonts -- make KControl visible in main menu - -------------------------------------------------------------------- -Thu Sep 4 16:42:43 CEST 2003 - adrian@suse.de - -- remove clock kcm module. it breaks the system and we have a - YaST modul for this purpose. -- new patch from Waldo to fix kcontrol yast module menu -- stop/restart ksysguardd on update/remove - -------------------------------------------------------------------- -Thu Sep 4 14:12:19 CEST 2003 - adrian@suse.de - -- some desktop Categories tuning - -------------------------------------------------------------------- -Tue Sep 2 13:16:53 CEST 2003 - adrian@suse.de - -- kwrite becomes unimportant - -------------------------------------------------------------------- -Mon Sep 1 14:48:24 CEST 2003 - adrian@suse.de - -- update to current 3_1_BRANCH - * contains kwin resize fix for xmms from Lubos -- implement X-SuSE-Unimportant support -- apply crash fix for khelpcenter from Cornelius -- coolo: add check in startkde for already running kde - -------------------------------------------------------------------- -Sun Aug 31 16:58:23 CEST 2003 - adrian@suse.de - -- implement menu auto shorting in kicker - -------------------------------------------------------------------- -Sat Aug 30 21:20:22 CEST 2003 - adrian@suse.de - -- fix kdm startup error -- disable password field for no-password-for-all-users mode - -------------------------------------------------------------------- -Sat Aug 30 14:33:43 CEST 2003 - adrian@suse.de - -- update xdg patch to new version from Waldo. - -------------------------------------------------------------------- -Fri Aug 29 17:26:55 CEST 2003 - adrian@suse.de - -- update to current 3_1_BRANCH for kdm security fixes - -------------------------------------------------------------------- -Wed Aug 27 08:20:45 CEST 2003 - adrian@suse.de - -- fixing smb:/ protocol by using libsmbclient from samba 3 -- hide "Open In Terminal" entries in kicker by default - -------------------------------------------------------------------- -Tue Aug 26 13:58:02 CEST 2003 - adrian@suse.de - -- implement the kdm admin mode - -------------------------------------------------------------------- -Tue Aug 26 08:19:20 CEST 2003 - adrian@suse.de - -- apply fix from Lubos for maximised windows of GTK apps - -------------------------------------------------------------------- -Sun Aug 24 19:44:55 CEST 2003 - adrian@suse.de - -- let kthumbnailcreator use ksvgiconengine - -------------------------------------------------------------------- -Sat Aug 23 22:35:16 CEST 2003 - adrian@suse.de - -- update to 3_1_BRANCH - -------------------------------------------------------------------- -Wed Aug 20 18:30:27 CEST 2003 - adrian@suse.de - -- apply fix from Lubos for khotkey support with XDG - -------------------------------------------------------------------- -Sat Aug 16 20:23:35 CEST 2003 - adrian@suse.de - -- rpm -V fixes - -------------------------------------------------------------------- -Fri Aug 15 10:25:34 CEST 2003 - adrian@suse.de - -- set Categories for KControl via patch - -------------------------------------------------------------------- -Thu Aug 14 16:17:44 CEST 2003 - adrian@suse.de - -- add %ghost /var/run/xdmctl - -------------------------------------------------------------------- -Wed Aug 13 15:40:04 CEST 2003 - adrian@suse.de - -- use new places of gtkrc-$STYLE files -- use current 3_1_BRANCH - -------------------------------------------------------------------- -Tue Aug 12 13:18:38 CEST 2003 - adrian@suse.de - -- justify Categories -- new XDG patch from Waldo - -------------------------------------------------------------------- -Thu Aug 7 17:09:02 CEST 2003 - adrian@suse.de - -- update XDG patch - -------------------------------------------------------------------- -Thu Aug 7 14:43:29 CEST 2003 - adrian@suse.de - -- new code from Waldo: kmenuedit can handle XDG now -- require smbclnt, if samba 3 is not used - -------------------------------------------------------------------- -Sun Aug 3 15:11:32 CEST 2003 - adrian@suse.de - -- fix build for 8.2 - -------------------------------------------------------------------- -Fri Aug 1 19:49:47 CEST 2003 - adrian@suse.de - -- disable shadow text at all -- add patch to support kwin shadow windows instead - -------------------------------------------------------------------- -Tue Jul 29 15:59:21 CEST 2003 - adrian@suse.de - -- disable shadow text for 8.2 -- fix build for 8.2 (now it really works everywhere for sure, I hope) - -------------------------------------------------------------------- -Tue Jul 29 10:36:18 CEST 2003 - adrian@suse.de - -- fix build for < 8.0 - -------------------------------------------------------------------- -Mon Jul 28 14:06:58 CEST 2003 - cschum@suse.de - -- Updated KHelpcenter tarball. Fixes bug #24374. - -------------------------------------------------------------------- -Fri Jul 25 11:36:34 CEST 2003 - cschum@suse.de - -- Added KHelpcenter from CVS HEAD. - -------------------------------------------------------------------- -Fri Jul 25 09:24:51 CEST 2003 - adrian@suse.de - -- fix build for < 8.1 -- add Categories - -------------------------------------------------------------------- -Sat Jul 19 22:29:07 CEST 2003 - adrian@suse.de - -- add XDG patch from Waldo -- add backported patch from 3.2 for shadow text on icons. - kcontrol changes are not included for i18n compliance - (written by Laur Ivan ) - -------------------------------------------------------------------- -Wed Jul 16 15:07:55 CEST 2003 - adrian@suse.de - -- update to version 3.1.3 - -------------------------------------------------------------------- -Wed Jun 25 09:13:07 CEST 2003 - coolo@suse.de - -- updating 3_1_BRANCH diff (heading 3.1.3) - -------------------------------------------------------------------- -Mon Jun 23 16:22:33 CEST 2003 - schwab@suse.de - -- Remove trailing spaces from Xpdf.ad. - -------------------------------------------------------------------- -Fri Jun 13 11:01:30 CEST 2003 - coolo@suse.de - -- package directories - -------------------------------------------------------------------- -Fri May 30 15:20:18 CEST 2003 - adrian@suse.de - -- fix build on non-fast-malloc architectures - -------------------------------------------------------------------- -Mon May 26 15:45:14 CEST 2003 - adrian@suse.de - -- use $INSTALL_TARGET -- all config files are %config(noreplace) now -- startkde.lib is obsolete in future - -------------------------------------------------------------------- -Mon May 26 11:14:12 CEST 2003 - adrian@suse.de - -- do not save original startkde (fix build for rpm4) - -------------------------------------------------------------------- -Wed May 21 14:01:41 CEST 2003 - adrian@suse.de - -- add fix from Lubos to start preloaded Konq on correct screen -- drop patch which ignores global malloc - -------------------------------------------------------------------- -Thu May 15 07:49:15 CEST 2003 - adrian@suse.de - -- 3.1.2, take four - -------------------------------------------------------------------- -Mon May 12 18:08:54 CEST 2003 - adrian@suse.de - -- update to 3.1.2, take three -- use $HOME/.fonts path also via XLFD - -------------------------------------------------------------------- -Thu May 8 16:43:08 CEST 2003 - ro@suse.de - -- fileshareset2: include errno in fssConfigNfs.cpp - -------------------------------------------------------------------- -Thu May 8 09:33:32 CEST 2003 - adrian@suse.de - -- update to 3.1.2 - * cleanup patches - -------------------------------------------------------------------- -Fri Apr 18 16:26:25 CEST 2003 - adrian@suse.de - -- merge 8.2 and 8.3 stream - -------------------------------------------------------------------- -Wed Apr 9 17:34:22 CEST 2003 - adrian@suse.de - -- security fix, call ghostscript in safe mode. -- replace fileshareset utility with a working one - (written by Uwe Gansert, reviewed by security-team) - Only samba exports for now, nfs is disabled for security reasons -- add global gtkrc to enviroment variable to fix used encoding -- fix kdm behaviour after wrong password (#25727) - -------------------------------------------------------------------- -Sun Mar 16 19:22:16 CET 2003 - adrian@suse.de - -- fix console font size also in konsole code -- workaround a qt bug to find a fixed font (#25430) - (do not recalculate the pixelSize via dpi) - -------------------------------------------------------------------- -Sat Mar 15 18:58:45 CET 2003 - adrian@suse.de - -- xmms can't handle .m3u files in a stream -- ensure that $kdehome is set during startkde run -- remove xset font calls in startkde - (reduces warnings during KDE startup and is not needed with fontconfig) - -------------------------------------------------------------------- -Fri Mar 14 10:00:16 CET 2003 - adrian@suse.de - -- fix from Lubos to disable kdesu parameters, when running in - kcmshell already (first part to fix #25230) -- remove senseless permissions file (we don't have a suid perl) - -------------------------------------------------------------------- -Wed Mar 12 18:00:19 CET 2003 - adrian@suse.de - -- fix the last place of hardcoded kdmrc path -- fix build for < 8.2 - -------------------------------------------------------------------- -Wed Mar 12 17:08:09 CET 2003 - adrian@suse.de - -- add sensors support to ksysguard again -- apply fix from Lubos for kdm mouse cursor - -------------------------------------------------------------------- -Wed Mar 12 14:25:58 CET 2003 - adrian@suse.de - -- fix kxkb extension for XFree 4.3 -- fix nsplugin scan init - -------------------------------------------------------------------- -Tue Mar 11 11:26:06 CET 2003 - adrian@suse.de - -- fix kdm layout/position -- disable unneeded Menu and Erase button -- use standard button ordering in kdm -- fix encoding usage for user names -- add fix from Lubos for Konqueror session management -- add fix from Coolo for pam-error-message handling in kdm -- add PreReq: aaa_base in kdebase3-ksysguardd to be able to update - from 7.3 -- add fix from Cornelius to let khelpcenter use the correct language -- fallback gtkrc style is keramik/geramik - -------------------------------------------------------------------- -Sun Mar 9 00:30:15 CET 2003 - adrian@suse.de - -- apply kdm patches again for console -- use better icon for "new session" -- use console8x16 font from HEAD to fix freetype2 issues -- check only for lowercase gtkrc-$STYLE's -- fix remote .pls file handling with xmms -- run update script, if present - -------------------------------------------------------------------- -Tue Mar 4 18:33:10 CET 2003 - adrian@suse.de - -- add missing Provides/Obsoletes kdialog -- use a better icon for Home directory items - -------------------------------------------------------------------- -Sat Mar 1 23:23:42 CET 2003 - adrian@suse.de - -- update to version 3.1.1 - * kwin fixes: don't show toplevel menus for non-active windows. - * konq fixes: don't repost data on reload, if url changes - sidebar crash fix - * nsplugin viewer: fixes and NPN_PostURL* support. -- update kcmrandr and patches from Lubos - * restoring resolution by kcminit works now -- Konqueror preloading fixes from Lubos - * creating KonqMainWindow on --preload -- disable klipper actions of not installed apps -- add /usr/lib{,64}/browser-plugins/ path to scan list -- fix build on non-ia32/x86_64 -- drop obsoletes patches - -------------------------------------------------------------------- -Fri Feb 28 00:31:38 CET 2003 - adrian@suse.de - -- update 3_1_BRANCH patch -- update preloaded konq patch from Lubos -- drop Obsoletes kdebase again -- fix quickbrowser patch to show entries only once - -------------------------------------------------------------------- -Wed Feb 26 12:14:15 CET 2003 - adrian@suse.de - -- update 3_1_BRANCH patch -- follow susewatcher directory change -- Obsoletes kdebase - -------------------------------------------------------------------- -Mon Feb 24 11:27:16 CET 2003 - adrian@suse.de - -- update 3_1_BRANCH patch -- fix kdmrc path in kcm_kdm -- use yast for setting the clock in kicker/applet/clock - -------------------------------------------------------------------- -Sat Feb 22 14:37:31 CET 2003 - kukuk@suse.de - -- If we provide kdebase, we should also obsolete the old one. - -------------------------------------------------------------------- -Thu Feb 20 11:49:36 CET 2003 - cschum@suse.de - -- Fixed check, if khelpcenter index builder needs root permissions. - -------------------------------------------------------------------- -Wed Feb 19 13:19:57 CET 2003 - adrian@suse.de - -- fix typo in Provides for kdm, fixes update from kde 2 - -------------------------------------------------------------------- -Tue Feb 18 14:05:31 CET 2003 - adrian@suse.de - -- fix build for < 8.2 - -------------------------------------------------------------------- -Tue Feb 18 11:58:45 CET 2003 - adrian@suse.de - -- add Provides kdebase3-konqueror - -------------------------------------------------------------------- -Mon Feb 17 14:16:08 CET 2003 - adrian@suse.de - -- use gtk[2]rc-$STYLE to be more flexible - -------------------------------------------------------------------- -Mon Feb 17 10:03:02 CET 2003 - adrian@suse.de - -- set enviroment to use special kde themings for gtk apps - -------------------------------------------------------------------- -Sun Feb 16 16:56:13 CET 2003 - adrian@suse.de - -- install kappfinder_install, fixes susewm build -- disable obsolete quick browser patch - -------------------------------------------------------------------- -Sun Feb 16 01:35:35 CET 2003 - adrian@suse.de - -- create susewatcher Desktop icon on the fly -- remove unneeded requires - -------------------------------------------------------------------- -Sat Feb 15 16:58:59 CET 2003 - adrian@suse.de - -- update 3_1_BRANCH patch -- fix qt/xrandr signal usage -- add konqueror preload patches from Lubos -- extend kdesktop addIcon api -- add additional Desktop path for kdesktop for susewatcher icons -- let kicker accept $HOME pathes - -------------------------------------------------------------------- -Tue Feb 11 01:30:10 CET 2003 - adrian@suse.de - -- let kdesktop use susewatcher directory -- add RandR tools - -------------------------------------------------------------------- -Fri Feb 7 13:28:53 CET 2003 - cschum@suse.de - -- new search index generation for khelpcenter which doesn't - necessarily need root permissions - -------------------------------------------------------------------- -Fri Jan 24 18:06:29 CET 2003 - adrian@suse.de - -- apply patches from Lubos to use XrandR -- add check for prelinked systems in startkde - -------------------------------------------------------------------- -Wed Jan 22 09:01:39 CET 2003 - adrian@suse.de - -- fix file list -- disable xsetroot in startkde - -------------------------------------------------------------------- -Fri Jan 17 14:50:13 CET 2003 - adrian@suse.de - -- use RC7-try2 tar ball - -------------------------------------------------------------------- -Thu Jan 16 16:29:09 CET 2003 - adrian@suse.de - -- update to RC7 -- merge kdebase3-konqueror into kdebase3 again -- do not link kdesysguardd against libkdefakes - -------------------------------------------------------------------- -Mon Jan 13 10:50:14 CET 2003 - adrian@suse.de - -- clean up #neededforbuild - -------------------------------------------------------------------- -Fri Jan 10 09:47:53 CET 2003 - coolo@suse.de - -- adding metadata to fillup -- use KDE_FAST_MALLOC only for distribution versions - < 8.2 (without metadata for them) - -------------------------------------------------------------------- -Wed Jan 8 17:16:41 CET 2003 - coolo@suse.de - -- using the real euro symbol instead of the subscript - (#21779) - -------------------------------------------------------------------- -Wed Jan 8 16:34:45 CET 2003 - coolo@suse.de - -- making cursor changes in kcontrol work (#21777) - -------------------------------------------------------------------- -Tue Jan 7 15:08:32 CET 2003 - adrian@suse.de - -- update to RC6 - -------------------------------------------------------------------- -Thu Dec 5 12:09:05 CET 2002 - adrian@suse.de - -- fix build - -------------------------------------------------------------------- -Tue Dec 3 16:45:23 CET 2002 - adrian@suse.de - -- apply kdesktop icon placement patches again. - -------------------------------------------------------------------- -Mon Dec 2 15:48:56 CET 2002 - adrian@suse.de - -- update startkde script to 3.1 - * fixes session handling - -------------------------------------------------------------------- -Sat Nov 30 21:49:13 CET 2002 - adrian@suse.de - -- new try of RC5 tar ball. BRANCH fixes are disabled again. - -------------------------------------------------------------------- -Fri Nov 29 14:45:59 CET 2002 - adrian@suse.de - -- revert kicker changes (compile failed with 2.95) - -------------------------------------------------------------------- -Thu Nov 28 16:07:58 CET 2002 - adrian@suse.de - -- use current 3_1_BRANCH fixes - -------------------------------------------------------------------- -Mon Nov 25 20:26:17 CET 2002 - adrian@suse.de - -- update to RC5 - -------------------------------------------------------------------- -Sun Nov 24 00:29:31 CET 2002 - adrian@suse.de - -- move kcm samba module into samba subpackage -- move thememgr into extra package - -------------------------------------------------------------------- -Sat Nov 23 17:59:54 CET 2002 - adrian@suse.de - -- fix build for < SuSE 7.3 - -------------------------------------------------------------------- -Wed Nov 20 12:09:05 CET 2002 - adrian@suse.de - -- remove obsolete kdm-xconsole patch - -------------------------------------------------------------------- -Wed Nov 20 11:24:05 CET 2002 - adrian@suse.de - -- update to version 3.1-RC4 (final ?) - -------------------------------------------------------------------- -Wed Nov 20 11:15:22 CET 2002 - adrian@suse.de - -- update to version 3.1-RC4 (final ?) - -------------------------------------------------------------------- -Fri Nov 15 10:46:41 CET 2002 - coolo@suse.de - -- removed one more patch that isn't needed with - the later CVS snapshot - -------------------------------------------------------------------- -Tue Nov 12 14:12:45 CET 2002 - coolo@suse.de - -- sorted patches out -- update snapshot to include a last minute fix for - new kdelibs - -------------------------------------------------------------------- -Wed Nov 6 17:36:07 CET 2002 - adrian@suse.de - -- update to snapshot 3.0.8.20021106 - -------------------------------------------------------------------- -Tue Nov 5 14:26:38 CET 2002 - adrian@suse.de - -- update to snapshot 20021030 - ( fixes file conflicts with kdelibs ) - -------------------------------------------------------------------- -Sun Nov 3 13:16:21 CET 2002 - adrian@suse.de - -- update to version 3.0.9.20021030 ~= RC1 - -------------------------------------------------------------------- -Tue Oct 8 21:23:32 CEST 2002 - adrian@suse.de - -- update to version 3.0.4 - -------------------------------------------------------------------- -Thu Sep 26 16:28:19 CEST 2002 - adrian@suse.de - -- limit kconsole log lines to 100 (fixes the memory "leak") -- kate encoding fix from HEAD (#20139) - -------------------------------------------------------------------- -Tue Sep 17 17:53:44 CEST 2002 - adrian@suse.de - -- fix kdesktop lock behaviour with "focus under mouse" settings - (credit for finding it goes to Lubos) - -------------------------------------------------------------------- -Fri Sep 13 14:19:07 CEST 2002 - coolo@suse.de - -- fixing the fix for nspluginscan - -------------------------------------------------------------------- -Wed Sep 11 01:00:30 CEST 2002 - adrian@suse.de - -- disable Console Login option in kdm menu - -------------------------------------------------------------------- -Mon Sep 9 17:54:53 CEST 2002 - adrian@suse.de - -- add fix from ossi to suppress "new session" buttons, when not - started via kdm -- use launch icon for "new session" entries -- fix acroread default colors - -------------------------------------------------------------------- -Mon Sep 9 13:49:55 CEST 2002 - coolo@suse.de - -- fixing #19212 in showing all printers if there is no - printer defined to be used - -------------------------------------------------------------------- -Mon Sep 9 02:31:07 CEST 2002 - adrian@suse.de - -- fix compile - -------------------------------------------------------------------- -Mon Sep 9 01:21:35 CEST 2002 - adrian@suse.de - -- fix focus handling with locking screensavers -- make kdm quiet - -------------------------------------------------------------------- -Sun Sep 8 13:50:27 CEST 2002 - adrian@suse.de - -- fixes from Ossi for chooser. I disable it anyway by default to - get sure. -- disable auto-new-session on lock -- use own Xsetup script (fix the double root window setup) -- fix kcontrol/kdm to write the right (superior) kdmrc file -- update the fallback kdmrc to fix values from kdebase3-SuSE -- move krootimage to kdm package -- add split alias for -kdm and -konqueror package - -------------------------------------------------------------------- -Fri Sep 6 01:08:50 CEST 2002 - adrian@suse.de - -- apply last bits from Ossi - * adds "create new session" feature -- remove chooser from menu button in kdm, since it does not work atm -- we still use kdmrc for kdm desktop settings, so kdm must some settings - (we do not need to replace the kcm module) -- disable the nohang patch, we are fast enough to live without now :) - -------------------------------------------------------------------- -Thu Sep 5 14:42:53 CEST 2002 - coolo@suse.de - -- found work around for nsplugin and real player plugin - (major PR 18083) - -------------------------------------------------------------------- -Wed Sep 4 10:44:22 MEST 2002 - coolo@suse.de - -- applying fix for PR18629 (suse tour broken) -- fixing rcksysguardd -- don't line up icons on font change - -------------------------------------------------------------------- -Wed Sep 4 01:11:43 CEST 2002 - adrian@suse.de - -- update to latest kdm version from ossi - * fixes possible seg fault / support user defined log file - * adds chooser - * GUI cleanup -- set background color after installing theme - -------------------------------------------------------------------- -Mon Sep 2 11:54:50 CEST 2002 - coolo@suse.de - -- don't crash kicker on switching desktops while renaming - -------------------------------------------------------------------- -Fri Aug 30 07:48:49 CEST 2002 - adrian@suse.de - -- fix for kfindpart crash ( it does since memory leak fix) -- install root theme also when kdesu has been used from a user - account before -- move kpersonalizer pictures to main package, the greeter is using it - -------------------------------------------------------------------- -Fri Aug 23 08:17:54 CEST 2002 - adrian@suse.de - -- we do not need kdm_position patch anymore (xconsole will go away :) -- add patch to check for kdmrc in /etc and /opt -- install and package kappfinder_install (used by susewm) -- do not create a sub menu for Terminal and Konq in kicker/quickbrowser -- disable tracing of kdesud via prctl() instead of set gid bit (hint from okir) -- hot fix for kdm xconsole - -------------------------------------------------------------------- -Wed Aug 21 00:19:34 CEST 2002 - adrian@suse.de - -- apply kdm xconsole patch from ossi with some changes -- let konqueror->Go->Applications go to {/etc/,}opt/kde3/share/applnk -- set explicit kcheckpass permissions in %files section -- use default kdmrc in /opt only and make /etc free for theme package -- add extra hooks for additional UL calls -- coolo: fix kicker_default patch -- coolo: fix khelpcenter startup - -------------------------------------------------------------------- -Tue Aug 20 10:49:57 CEST 2002 - coolo@suse.de - -- fixing kicker default for smaller resolutions - -------------------------------------------------------------------- -Mon Aug 19 21:27:19 CEST 2002 - adrian@suse.de - -- unset also QTDIR in startkde -- update khelpcenter to current HEAD snapshot - -------------------------------------------------------------------- -Mon Aug 19 15:07:15 CEST 2002 - coolo@suse.de - -- changed ShowUsers from All to NotHidden - -------------------------------------------------------------------- -Mon Aug 19 14:27:29 CEST 2002 - coolo@suse.de - -- use Nimbus Sans l when installed instead of helvetica - -------------------------------------------------------------------- -Sun Aug 18 12:19:18 CEST 2002 - adrian@suse.de - -- fix PreRequires - -------------------------------------------------------------------- -Wed Aug 14 14:52:46 CEST 2002 - coolo@suse.de - -- 400 is too few on 800x600 - 480 is minimum (6 buttons remaining) - -------------------------------------------------------------------- -Tue Aug 13 10:59:19 CEST 2002 - coolo@suse.de - -- changed kcheckpass to suid root again as discussed with kukuk - (needed for nisplus+ldap) - -------------------------------------------------------------------- -Mon Aug 12 15:09:54 CEST 2002 - coolo@suse.de - -- don't name the default_desktop stuff suse_ -- let the scripts specify the row/col -- fix the name of the resulting icons -- remove the file from auto start after having done the work -- keep 100 pixels more for the taskbar - -------------------------------------------------------------------- -Sun Aug 11 12:55:30 CEST 2002 - coolo@suse.de - -- splitting the kdesktop moving patch from the suse_default patch - and fixing both - -------------------------------------------------------------------- -Sat Aug 10 22:30:42 CEST 2002 - coolo@suse.de - -- changed the way kicker sets the default config - -------------------------------------------------------------------- -Sat Aug 10 20:46:47 CEST 2002 - adrian@suse.de - -- disable kdesktop patch for now - -------------------------------------------------------------------- -Sat Aug 10 18:58:21 CEST 2002 - adrian@suse.de - -- second try of gcc 3 fix for suse_move_default_desktop - (yes, again untested ;) - -------------------------------------------------------------------- -Sat Aug 10 18:40:15 CEST 2002 - adrian@suse.de - -- fix build for 7.3 and older - -------------------------------------------------------------------- -Sat Aug 10 11:28:23 CEST 2002 - adrian@suse.de - -- fix build of suse_move_default_desktop for gcc 3 - -------------------------------------------------------------------- -Fri Aug 9 17:38:38 CEST 2002 - adrian@suse.de - -- add workaround for plugins when compiled with gcc 3.x (from malte) - -------------------------------------------------------------------- -Fri Aug 9 15:41:09 CEST 2002 - coolo@suse.de - -- adding suse_move_default_desktop - to be used through - kdebase-SuSE (the name of the tool isn't visible to the - user, so other UL parties can use it too :) - -------------------------------------------------------------------- -Fri Aug 9 12:05:37 CEST 2002 - adrian@suse.de - -- fix build for older distributions - -------------------------------------------------------------------- -Thu Aug 8 17:43:07 CEST 2002 - adrian@suse.de - -- fix stupid typo in spec file - -------------------------------------------------------------------- -Thu Aug 8 02:55:20 CEST 2002 - adrian@suse.de - -- update to version 3.0.3 -- update khelpcenter from current HEAD - -------------------------------------------------------------------- -Wed Aug 7 09:52:22 CEST 2002 - coolo@suse.de - -- show the default printer's jobs by default - -------------------------------------------------------------------- -Tue Aug 6 15:37:14 CEST 2002 - coolo@suse.de - -- fixing the fix - -------------------------------------------------------------------- -Tue Aug 6 12:49:11 CEST 2002 - coolo@suse.de - -- extending konsole fix - -------------------------------------------------------------------- -Tue Aug 6 11:27:33 CEST 2002 - coolo@suse.de - -- fixing konsole on PPC - -------------------------------------------------------------------- -Fri Aug 2 14:05:08 CEST 2002 - coolo@suse.de - -- don't use lilo reboot option by default - -------------------------------------------------------------------- -Thu Aug 1 11:00:20 CEST 2002 - adrian@suse.de - -- fix PreRequires -- set default kdmrc greeting string to "United Linux 1.0" -- fix %post / %pre scripts - -------------------------------------------------------------------- -Wed Jul 24 20:20:44 CEST 2002 - adrian@suse.de - -- fix #neededforbuild - -------------------------------------------------------------------- -Mon Jul 22 10:55:34 CEST 2002 - coolo@suse.de - -- fixing scope of the lib64 patch - -------------------------------------------------------------------- -Fri Jul 19 15:03:18 CEST 2002 - adrian@suse.de - -- do not export KDE_MALLOC anymore - -------------------------------------------------------------------- -Thu Jul 18 23:34:11 CEST 2002 - adrian@suse.de - -- fix file list - -------------------------------------------------------------------- -Wed Jul 17 16:26:26 CEST 2002 - adrian@suse.de - -- split samba dependend libs into -samba subpackage -- use updated lib64 patches from coolo -- fix build for several changes in base system - -------------------------------------------------------------------- -Tue Jul 16 16:51:22 CEST 2002 - coolo@suse.de - -- fixing location for ldap on lib64 architectures -- fixing cddb entries for Schwab's CD - -------------------------------------------------------------------- -Sun Jul 14 19:18:36 CEST 2002 - adrian@suse.de - -- split sub-packages for kdm, konqueror and unneeded extra stuff. -- do not start kinternet for 8.1 and higher by startkde -- apply fix for smb kio from coolo -- apply fix for kpager from coolo -- apply fix to fix time stamps when handle with konqueror from coolo -- fix USE_FAM variable in startscript - -------------------------------------------------------------------- -Mon Jul 1 14:03:40 CEST 2002 - adrian@suse.de - -- fix default settings for klipper to start Netscape and Mozilla - -------------------------------------------------------------------- -Mon Jun 24 21:00:55 CEST 2002 - adrian@suse.de - -- update to version 3.0.2 - -------------------------------------------------------------------- -Wed Jun 12 14:24:38 CEST 2002 - coolo@suse.de - -- cleanup around $configkde - -------------------------------------------------------------------- -Mon Jun 10 20:11:45 CEST 2002 - adrian@suse.de - -- fix memory leak in kfind (partitial, but the bigger one ;) - -------------------------------------------------------------------- -Mon Jun 10 14:11:37 CEST 2002 - coolo@suse.de - -- adding fix for cddb computation - -------------------------------------------------------------------- -Mon Jun 10 00:56:03 CEST 2002 - adrian@suse.de - -- fix build on lib64 (audiocd slave) - -------------------------------------------------------------------- -Wed May 29 11:17:41 CEST 2002 - adrian@suse.de - -- use update_admin -- add extra optional script directory /opt/kde3/share/addon-scripts/ -- check for tmp-$HOST symlinks in startscript - -------------------------------------------------------------------- -Tue May 14 12:55:35 CEST 2002 - adrian@suse.de - -- update to 3.0.1, second try -- memory leak fixes for kicker - -------------------------------------------------------------------- -Fri May 10 13:43:31 CEST 2002 - adrian@suse.de - -- update to 3.0.1 - -------------------------------------------------------------------- -Tue May 7 15:28:30 CEST 2002 - meissner@suse.de - -- generic KDE Libdir fixes, fixed updatedialog compilation. - -------------------------------------------------------------------- -Wed Apr 17 14:04:55 CEST 2002 - adrian@suse.de - -- do not overwrite root-user settings - -------------------------------------------------------------------- -Mon Apr 15 13:12:58 CEST 2002 - adrian@suse.de - -- add pre install script to check for a /opt/kde3/share/config/kdm - directory. -- rename ksysguardd3 back to ksysguardd - -------------------------------------------------------------------- -Wed Mar 27 18:01:22 CET 2002 - adrian@suse.de - -- do not start kpersonilzer (fix it really) - -------------------------------------------------------------------- -Wed Mar 27 12:08:09 CET 2002 - adrian@suse.de - -- remove wrong double quotes around the Desktop copy routine -- disable kpersonalizer on autostart - (it mess up some systems during update) - -------------------------------------------------------------------- -Wed Mar 27 12:07:04 CET 2002 - kukuk@suse.de - -- Remove last konsole patch - -------------------------------------------------------------------- -Tue Mar 26 15:16:37 CET 2002 - adrian@suse.de - -- crash fix for konqueror, when browsing not readable directorys - (made by Andreas Schwab) - -------------------------------------------------------------------- -Mon Mar 25 20:33:10 CET 2002 - adrian@suse.de - -- update tar ball to 3.0 final, second try -- add window raise fix for ktaskbar in kicker - -------------------------------------------------------------------- -Mon Mar 25 11:25:49 CET 2002 - adrian@suse.de - -- update to 3.0 final (everything is wonderfull release) -- unset $KDEDIRS instead of exporting, we have /etc/kde3rc now - -------------------------------------------------------------------- -Thu Mar 21 17:43:25 CET 2002 - adrian@suse.de - -- update to 3.0rc3 -- change to new SuSE background, if the user is still using the - old version - -------------------------------------------------------------------- -Mon Mar 18 09:04:00 CET 2002 - adrian@suse.de - -- fix ~/.kde2->~/.kde copy routine - -------------------------------------------------------------------- -Fri Mar 15 00:33:20 CET 2002 - ro@suse.de - -- changed neededforbuild to - -------------------------------------------------------------------- -Sun Mar 10 23:07:19 CET 2002 - adrian@suse.de - -- fix %pre install script - -------------------------------------------------------------------- -Sun Mar 10 17:05:52 CET 2002 - adrian@suse.de - -- update to 3.0rc2 - -------------------------------------------------------------------- -Tue Mar 5 09:14:54 CET 2002 - ro@suse.de - -- fixed pre-install - -------------------------------------------------------------------- -Mon Mar 4 17:38:37 CET 2002 - adrian@suse.de - -- update to 3.0rc1 - -------------------------------------------------------------------- -Tue Feb 26 15:49:14 CET 2002 - adrian@suse.de - -- fix startscript (use changed sysconfig variables) - -------------------------------------------------------------------- -Tue Feb 26 14:41:14 CET 2002 - adrian@suse.de - -- fix updatedialog install - -------------------------------------------------------------------- -Tue Feb 26 13:03:32 CET 2002 - adrian@suse.de - -- update to snapshot 2.92.2002022519 - -------------------------------------------------------------------- -Thu Feb 14 01:11:30 CET 2002 - adrian@suse.de - -- update to snapshot 2.92.2002021421 -- move Doug Lea's malloc to kdelibs3 - (can be configured via kdebase3-SuSE) -- fix samba support -- add KDE 2 -> 3 update tool - -------------------------------------------------------------------- -Tue Feb 12 02:39:22 CET 2002 - adrian@suse.de - -- add optional Doug Lea's fast malloc implementation -- fix ownership of files - -------------------------------------------------------------------- -Mon Feb 11 15:14:13 CET 2002 - adrian@suse.de - -- update to snapshot 2.92.2002021111 -- add rckdm symlink -- kdm follows qtrc - -------------------------------------------------------------------- -Wed Feb 6 21:57:56 CET 2002 - adrian@suse.de - -- update to version 2.92 (KDE 3.0 beta 2) -- use common_compile_flags - -------------------------------------------------------------------- -Tue Jan 29 12:56:23 CET 2002 - adrian@suse.de - -- fix startkde script to call startkde.theme early enough - -------------------------------------------------------------------- -Mon Jan 28 16:52:04 CET 2002 - adrian@suse.de - -- fix $KDEDIRS - -------------------------------------------------------------------- -Mon Jan 28 15:21:04 CET 2002 - adrian@suse.de - -- update to snapshot 2.91.2002012811 - -------------------------------------------------------------------- -Sun Jan 27 16:47:04 CET 2002 - schwab@suse.de - -- Remove invalid use of PAGE_SHIFT. - -------------------------------------------------------------------- -Wed Jan 23 00:46:05 CET 2002 - adrian@suse.de - -- update to snapshot 2.91.2002012221 -- move all distribution version depending configure stuff - to kdebase3-SuSE - -------------------------------------------------------------------- -Wed Jan 16 14:39:09 CET 2002 - adrian@suse.de - -- really fix the kde start link - -------------------------------------------------------------------- -Tue Jan 15 18:29:37 CET 2002 - adrian@suse.de - -- update to snapshot 2.91.2002011511 -- fix kde start link for 7.3.99 development version - -------------------------------------------------------------------- -Tue Jan 8 17:34:22 CET 2002 - adrian@suse.de - -- use current CVS snapshot -- disable rpath linking depending on kdelibs - -------------------------------------------------------------------- -Tue Dec 18 01:01:14 CET 2001 - adrian@suse.de - -- update to version 2.91 (3.0 beta1) - -------------------------------------------------------------------- -Tue Dec 4 20:14:18 CET 2001 - adrian@suse.de - -- use current cvs snapshot - -------------------------------------------------------------------- -Fri Nov 2 12:32:18 CET 2001 - adrian@suse.de - -- using cvs snapshot from 01 Nov. 2001 - ( compiles again with qt 3 final ) - -------------------------------------------------------------------- -Tue Sep 25 19:08:50 CEST 2001 - adrian@suse.de - -- remove a part of setuid-kdm patch, which caused hanging and - killing a bit too much processes -- added diff to avoid killing arbitrary processes - -------------------------------------------------------------------- -Mon Sep 24 10:50:04 CEST 2001 - adrian@suse.de - -- add setuid-kdm patch (SECURITY FIX) -- remove export $LANGUAGE from startkde -- remove testing patch from kdm -- fix KOffice icon really -- add fixes for IconDialog in kmenuedit and kicker - (all icons are back) - -------------------------------------------------------------------- -Fri Sep 21 17:17:30 CEST 2001 - adrian@suse.de - -- fix icon positions again -- change ktip picture -- add dcopserver_shutdown also before a new session is started - (no more login problems;) -- kdm greeter will do not cover xconsole anymore -- fix kcmkdm to use the right kdmrc file (and not to remove the link) -- fix SuSEconfig.kdm2 for security non-easy mode ("NoStars"->"NoEcho") -- fix Home/End keys in konsole _really_ -- fix SegFault in audiocd+lame after first title -- add some last fixes for kdm (thanks a lot, ossi) -- fix ksysguardd start script (kill only, if pid file present) -- change koffice icon from unkown->xedit - -------------------------------------------------------------------- -Thu Sep 20 23:00:34 CEST 2001 - adrian@suse.de - -- add dcopserver_shutdown from HEAD branch and call it in startkde - -------------------------------------------------------------------- -Thu Sep 20 18:41:33 CEST 2001 - adrian@suse.de - -- add fix for wrong ownership of $HOME/.wmrc - -------------------------------------------------------------------- -Thu Sep 20 12:37:43 CEST 2001 - adrian@suse.de - -- change icon for kwintv template - -------------------------------------------------------------------- -Wed Sep 19 00:18:35 CEST 2001 - mfabian@suse.de - -- fix for bug #10464: - make Japanese input possible even when UNIX-style application - shortcuts are selected (Japanese input becomes impossible - when the keyboard shortcut for "SelectAll" is empty. This - workaround sets it to "Alt+Ctrl+Shift+A" instead). -- patch for kpersonalizer to handle encoding as well - -------------------------------------------------------------------- -Tue Sep 18 15:24:30 CEST 2001 - adrian@suse.de - -- add signal handler fix for smbro: -- revert patch for konsole, which breaks the Home/End keys -- minor theme improvements -- add fixes kcontrol: - * size for YaST2 - * broken about page for Menus with sub folders - * rename Modify button to root button - -------------------------------------------------------------------- -Wed Sep 12 13:47:54 CEST 2001 - adrian@suse.de - -- apply cvs branch fix (fix icon desktop handling) -- improve startkde.devices script for better icon positioning - -------------------------------------------------------------------- -Tue Sep 11 20:03:15 CEST 2001 - adrian@suse.de - -- update to second try of kdebase 2.2.1 tar ball - -------------------------------------------------------------------- -Sat Sep 8 21:00:27 CEST 2001 - adrian@suse.de - -- update to 2.2.1 -- fix sane check for kooka icon -- make the Euro char working again in konsole -- fix CD-R icon on desktop - -------------------------------------------------------------------- -Wed Sep 5 17:01:07 CEST 2001 - adrian@suse.de - -- add kwintv and kooka to start scripts -- fix file conflicts -- apply patch from kukuk: do not show lilo menu on non i386 architectures - -------------------------------------------------------------------- -Tue Sep 4 16:55:46 CEST 2001 - adrian@suse.de - -- update to current KDE_2_2_BRANCH ( 04.09.2001 ) - * konsole fixes again - * translation updates - * audiocd fix for Xing tag writing - * charset define fix in kcontrol title -- fix startkde & SuSEconfig scripts - -------------------------------------------------------------------- -Sun Sep 2 10:46:05 CEST 2001 - adrian@suse.de - -- update to current KDE_2_2_BRANCH ( 02.09.2001 ) - * ksmserver checks disk-space in error handling - * removed startup notification for kpager - * fix x screen savers - * kate fixes - * konsole fixes -- add fallbackAppliation lines to templates -- fix startkde scripts for new theme - -------------------------------------------------------------------- -Wed Aug 29 08:22:56 CEST 2001 - adrian@suse.de - -- fix logo patch - -------------------------------------------------------------------- -Tue Aug 28 12:01:34 CEST 2001 - adrian@suse.de - -- update to current KDE_2_2_BRANCH ( 28.08.2001 ) - * better gui in kcontrol file handling - * konsole fixes - * crash fix for konqueror about:blank - * translation updates -- kdm pam support fix - -------------------------------------------------------------------- -Tue Aug 28 02:24:23 CEST 2001 - adrian@suse.de - -- fix startkde scripts for new theme - -------------------------------------------------------------------- -Mon Aug 27 00:51:40 CEST 2001 - ro@suse.de - -- fix typo in specfile (build-root dir was missing in one place) - -------------------------------------------------------------------- -Sat Aug 25 10:30:24 CEST 2001 - adrian@suse.de - -- update to current KDE_2_2_BRANCH - * several fixes for konsole -- split and cleanup SuSE startkde script -- do not apply kcm modules twice on KDE start - -------------------------------------------------------------------- -Tue Aug 21 18:01:42 CEST 2001 - adrian@suse.de - -- update to current KDE_2_2_BRANCH - * fixes for icon handling on desktop - * konsole fixes and enhencements - * kpersonalizer fixes - * icon cleaning - * several kicker fixes -- dlopen libmp3lame if present -- add README and spec file to compile lame -- obsolete kdebase-i686 until objprelink does work better -- move ksysguardd to /usr/bin/ - -------------------------------------------------------------------- -Mon Aug 6 12:47:43 CEST 2001 - adrian@suse.de - -- update to final 2.2 -- add optimized -i686 package for i386 architecture -- add start scripts for ksysguardd -- add SuSE menu kicker patch - -------------------------------------------------------------------- -Wed Aug 1 16:46:21 CEST 2001 - adrian@suse.de - -- update to 2.2rc1 - -------------------------------------------------------------------- -Fri Jun 29 15:39:23 CEST 2001 - adrian@suse.de - -- 2.2beta1 - -------------------------------------------------------------------- -Mon May 28 10:39:45 CEST 2001 - adrian@suse.de - -- 2.2alpha2 - -------------------------------------------------------------------- -Tue May 22 12:59:22 CEST 2001 - adrian@suse.de - -- switch greeting font in kdm to helvetica -- write correct codec numbers for ja,ko,zh -- fix anti_xsnow_pro_netscape fix - -------------------------------------------------------------------- -Tue May 15 19:16:32 CEST 2001 - adrian@suse.de - -- fix kdialog dialog - -------------------------------------------------------------------- -Tue May 15 18:03:03 CEST 2001 - adrian@suse.de - -- add hack to workaround a segfault from Flash6 plugin -- fix root warning in startkde - -------------------------------------------------------------------- -Mon May 14 19:01:28 CEST 2001 - adrian@suse.de - -- my last try to get the top icons in line - (startkde script changes) - -------------------------------------------------------------------- -Sat May 12 08:18:59 CEST 2001 - adrian@suse.de - -- set rc.config variable back to auto - (the users get a asterix in passwd field by default) -- set konsole keytab to XFree86 3 by default, F-Keys are working now -- change picture in ktip - -------------------------------------------------------------------- -Fri May 11 13:18:15 CEST 2001 - adrian@suse.de - -- fix SuSEconfig.kdm2 for LANG=C -- improve icon positions on desktop - -------------------------------------------------------------------- -Thu May 10 14:26:34 CEST 2001 - adrian@suse.de - -- fix lock up if $LANG is not set -- fix not translated Floppy -- add bookmarks to menu -- add SuSE icon to desktop - -------------------------------------------------------------------- -Mon May 7 22:06:49 CEST 2001 - adrian@suse.de - -- fix permissions in kdebase-conf.tar.bz2 -- big icons on panel only for >1280x1024 -- revert coolo's xsnow hack - (it is summer, netscape is more important and it reduces the load) - (BTW: dpms was also broken by this hack ...) -- check for broken SM entry for kicker in kwin:* -- change KDM_SHUTDOWN default to local - -------------------------------------------------------------------- -Sun May 6 14:11:52 CEST 2001 - adrian@suse.de - -- reorganize startkde script to use old and new mountpoints and - translate application icons on desktop -- update to current KDE_2_1_BRANCH -- fix kdm to use Language from kdmrc and not configuration from root -- fix SuSEconfig.kdm2 to write language depended GreetString -- make kcontrol widther by default for YaST2 -- ignore LastLogin in kdmrc for md5sum -- add own kickerrc for resolution 1024 and more -- fix wmlist handling -- drop libkicker_internal.la to fix crashes as suggested by Waldo -- add public_html link to konqueror tree -- add drives folder to konqueror tree -- fix broken line in proxy.desktop - -------------------------------------------------------------------- -Tue May 1 17:41:08 CEST 2001 - adrian@suse.de - -- kcmshell reposition for YaST2 modules -- use iso-8895-15 to support the EUR - -------------------------------------------------------------------- -Wed Apr 25 00:18:14 CEST 2001 - adrian@suse.de - -- drop sensors support (do it really destroy thinkpads ?, not my ;-) -- add konsole patch from mls for latin9 - -------------------------------------------------------------------- -Mon Apr 23 21:41:12 CEST 2001 - adrian@suse.de - -- use SuSEwizard for setup -- strip leading /media/ for device icons -- cleanup startkde - -------------------------------------------------------------------- -Wed Apr 18 14:34:25 CEST 2001 - adrian@suse.de - -- switch off --enable-final for axp - -------------------------------------------------------------------- -Fri Apr 13 11:23:57 CEST 2001 - adrian@suse.de - -- show currency symbol/Euro() in kcontrol font dialog - -------------------------------------------------------------------- -Wed Apr 11 17:21:08 CEST 2001 - adrian@suse.de - -- fix SuSEconfig.kdm2 -- fix conflicts in sub packages - -------------------------------------------------------------------- -Mon Apr 9 17:30:32 CEST 2001 - adrian@suse.de - -- added dialog box while root login. Hopefully no more magazines - will write about our ugly red standard desktop. - But I do not believe it. -- disable alsa for 7.0-ppc - -------------------------------------------------------------------- -Fri Apr 6 13:21:43 CEST 2001 - adrian@suse.de - -- -O2 for axp - apply NOnostdlib patch (resolve hopefully ppc link problems) - -------------------------------------------------------------------- -Fri Mar 30 01:52:53 CEST 2001 - ro@suse.de - -- neededforbuild fix - -------------------------------------------------------------------- -Thu Mar 29 00:56:47 CEST 2001 - mfabian@suse.de - -- I didn't apply the patch for my last changelog entry correctly. - fixed. - -------------------------------------------------------------------- -Tue Mar 27 21:48:17 CEST 2001 - mfabian@suse.de - -- use correct charset for Japanese, Korean, and Chinese in - "startkde" -- use "default" as the font for Japanese, Korean, and Chinese - in /sbin/conf.d/SuSEconfig.kdm2 -- add "GreetString[ja]" to /opt/kde2/share/config/SuSE/config/kdmrc -- add "windowmanager" to "Provides:" - -------------------------------------------------------------------- -Tue Mar 27 12:08:52 CEST 2001 - ro@suse.de - -- changed neededforbuild to - -------------------------------------------------------------------- -Sat Mar 24 11:52:42 CET 2001 - adrian@suse.de - -- go back to -O0 for ppc - disable cdparanoia support for 6.3 - -------------------------------------------------------------------- -Wed Mar 21 20:55:31 CET 2001 - adrian@suse.de - -- remove QT_XFT=yes from startkde to reduce problems with - NVidia Vanta cards - -------------------------------------------------------------------- -Tue Mar 20 21:57:33 CET 2001 - adrian@suse.de - -- enable -O2 for ppc - -------------------------------------------------------------------- -Tue Mar 20 18:53:25 CET 2001 - adrian@suse.de - -- update to 2.1.1 (official tar ball) - -------------------------------------------------------------------- -Tue Mar 20 14:53:56 CET 2001 - adrian@suse.de - -- add feature to kicker (SuSE menu as main menu now possible) - -------------------------------------------------------------------- -Mon Mar 19 22:12:11 CET 2001 - adrian@suse.de - -- fix patches again :-( - -------------------------------------------------------------------- -Sun Mar 18 18:43:10 CET 2001 - adrian@suse.de - -- fix patches - -------------------------------------------------------------------- -Sat Mar 17 14:22:54 CET 2001 - adrian@suse.de - -- update to current 2_1_BRANCH - -------------------------------------------------------------------- -Thu Mar 15 18:23:12 CET 2001 - ro@suse.de - -- changed neededforbuild to -- changed neededforbuild to - -------------------------------------------------------------------- -Thu Mar 15 01:08:35 CET 2001 - ro@suse.de - -- fixed neededforbuild for openldap - -------------------------------------------------------------------- -Tue Mar 13 10:06:50 CET 2001 - ro@suse.de - -- removed second occurence of docbk30 from neededforbuild - -------------------------------------------------------------------- -Tue Mar 13 01:12:28 CET 2001 - ro@suse.de - -- changed neededforbuild to - -------------------------------------------------------------------- -Wed Mar 7 16:58:40 CET 2001 - ro@suse.de - -- changed neededforbuild to - -------------------------------------------------------------------- -Wed Feb 28 17:38:47 CET 2001 - schwab@suse.de - -- kcontrol: Use getpagesize() to determine page size. - -------------------------------------------------------------------- -Tue Feb 27 11:20:53 CET 2001 - ro@suse.de - -- changed neededforbuild to - -------------------------------------------------------------------- -Wed Feb 21 18:15:39 CET 2001 - adrian@suse.de - -- update to final 2.1.0 - -------------------------------------------------------------------- -Mon Feb 19 14:38:11 CET 2001 - adrian@suse.de - -- update to 2.1 post beta 2 - -------------------------------------------------------------------- -Wed Jan 24 15:18:37 CET 2001 - adrian@suse.de - -- fix konsole for non iso8859-1 - add Mozilla to desktop, if Netscape is not installed - make SuSEconfig.kdm2 output nicer - a little bit heigher welcome screen - -------------------------------------------------------------------- -Mon Jan 22 18:13:46 CET 2001 - adrian@suse.de - -- fix maximize button in SuSE decoration - -------------------------------------------------------------------- -Mon Jan 22 15:45:55 CET 2001 - adrian@suse.de - -- set nr of mixer in kcontrol to 1 bye default, this fix the - error lines in xconsole -- fix not translated icons on desktop - -------------------------------------------------------------------- -Wed Jan 17 17:40:28 CET 2001 - adrian@suse.de - -- changed kcheckpass to setgroudid shadow instead of setuserid root - add kinternet call to startkde - fixed web font sizes - fixed kde menu icons - fixed non iso-8859-1 language support - -------------------------------------------------------------------- -Wed Jan 17 11:13:54 CET 2001 - adrian@suse.de - -- fix locolor config for standard user and root user settings - -------------------------------------------------------------------- -Mon Jan 15 19:07:42 CET 2001 - adrian@suse.de - -- fix info service - -------------------------------------------------------------------- -Mon Jan 15 13:31:24 CET 2001 - adrian@suse.de - -- fix welcome page size for resolutions>1152 - switch to small desktop font, which looks better - fix czech trash bin name on desktop - update logo on desktop - -------------------------------------------------------------------- -Sun Jan 14 17:12:46 CET 2001 - adrian@suse.de - -- fix hang in SuSEconfig.kdm2, when REAL_LANG is empty - -------------------------------------------------------------------- -Sat Jan 13 18:52:49 CET 2001 - adrian@suse.de - -- fix fallback icon for applications in kicker - fix welcome page start (does not start anymore in second login) - fix SuSE decoration close function from menu - -------------------------------------------------------------------- -Fri Jan 12 11:31:41 CET 2001 - adrian@suse.de - -- new tar ball from KDE_2_0_BRANCH (fix ksysguard bug) - change kcontrol root button label - a little work on the logo - fix rc.config template - fix $LANG problem in welcome page startup - -------------------------------------------------------------------- -Thu Jan 11 23:16:43 CET 2001 - adrian@suse.de - -- changed logo - changed inactive text color in window header - -------------------------------------------------------------------- -Thu Jan 11 10:11:55 CET 2001 - adrian@suse.de - -- delete debug lines in SuSEconfig.kdm2 (cause a hang) - -------------------------------------------------------------------- -Wed Jan 10 17:11:15 CET 2001 - adrian@suse.de - -- fix SuSEconfig.kdm2 for czech people - workaround KDE bug in charset selection via script - fix startkde function for suppress double desktop icons - -------------------------------------------------------------------- -Tue Jan 9 21:21:53 CET 2001 - adrian@suse.de - -- fix welcome page start - fix bg colors. 220,220,220 again. - added security fix for kdesud from Waldo - -------------------------------------------------------------------- -Sun Jan 7 16:44:24 CET 2001 - adrian@suse.de - -- fix update problems due to changed icon handling - -------------------------------------------------------------------- -Sun Jan 7 14:55:50 CET 2001 - adrian@suse.de - -- change icon handling - -------------------------------------------------------------------- -Thu Jan 4 15:58:53 CET 2001 - adrian@suse.de - -- changes in SuSE theme - workaround slow mouse acceleration from XFree 4 - added fix for stolen focus in kdm (Thanks Waldo) - fix ktip start on every KDE start - do not set $LANG new anymore, since kdelibs are fixed - new tar ball with Kernel 2.4 fix in ksysguard (Thanks Chris) - -------------------------------------------------------------------- -Tue Jan 2 21:54:08 CET 2001 - adrian@suse.de - -- font handling fix for AA (thanks Kurt) - -------------------------------------------------------------------- -Mon Jan 1 19:59:35 CET 2001 - adrian@suse.de - -- add kdm resize patch for little resolutions - fix SuSEconfig.kdm2 for languages with no defined charsets - set $LANG for KDE 2 in startkde (for a desktop with native language) - -------------------------------------------------------------------- -Sat Dec 30 20:05:15 CET 2000 - adrian@suse.de - -- fixed two .desktop files for kcontrol - minor fix in startkde - new version of SuSE decoration - -------------------------------------------------------------------- -Fri Dec 22 11:19:45 CET 2000 - adrian@suse.de - -- switch off the X11 resource manager by default - set TERM=kvt for konsole (several Keys like Pos1 are working now) - minor fix in startkde - -------------------------------------------------------------------- -Wed Dec 20 18:38:54 CET 2000 - adrian@suse.de - -- fix SuSEconfig.kdm2 for non iso-8859-1 - added option to disable SuSE theme - added --SuSE function to ksplash - added kdm sec patch from waldo - -------------------------------------------------------------------- -Mon Dec 18 16:13:24 CET 2000 - adrian@suse.de - -- make symbol labels nicer - do not show double icons - added rc.config entrys for kdm - -------------------------------------------------------------------- -Sun Dec 10 23:15:40 CET 2000 - adrian@suse.de - -- extend startkde for dvd and cdrecorder - added logo background mode - changed kicker configuration - fixed line up function for icons on root window - enabled Mesa support again - -------------------------------------------------------------------- -Sat Dec 9 12:49:12 CET 2000 - adrian@suse.de - -- fixing startkde and working on the SuSE theme - -------------------------------------------------------------------- -Wed Dec 6 12:48:53 MET 2000 - adrian@suse.de - -- fixed kde link - -------------------------------------------------------------------- -Wed Nov 29 23:03:42 CET 2000 - adrian@suse.de - -- update to 2.0.1 - -------------------------------------------------------------------- -Tue Nov 21 09:20:25 CET 2000 - ro@suse.de - -- switch to openmotif - -------------------------------------------------------------------- -Tue Nov 21 00:10:43 CET 2000 - adrian@suse.de - -- moved non kde icon support to kdelibs - added drive icon creation to startkde - -------------------------------------------------------------------- -Fri Nov 17 15:15:26 CET 2000 - adrian@suse.de - -- fixed kdm - -------------------------------------------------------------------- -Fri Nov 17 14:57:54 CET 2000 - ro@suse.de - -- fixed neededforbuild: += libmng-devel - -------------------------------------------------------------------- -Thu Nov 16 15:51:08 CET 2000 - adrian@suse.de - -- update to newer snapshot from KDE_2_0_BRANCH - -------------------------------------------------------------------- -Fri Nov 3 08:54:32 CET 2000 - adrian@suse.de - -- fixed needed for build - -------------------------------------------------------------------- -Thu Nov 2 20:40:00 CET 2000 - adrian@suse.de - -- fixed file list - -------------------------------------------------------------------- -Tue Oct 17 05:36:10 CEST 2000 - adrian@suse.de - -- update to 2.0.0 -- added SuSE decoration -- splitted package into - * kdebase - * kdebase-devel - -------------------------------------------------------------------- -Tue Sep 12 08:58:16 CEST 2000 - adrian@suse.de - -- update to RC 1 - -------------------------------------------------------------------- -Mon Aug 21 16:49:08 CEST 2000 - adrian@suse.de - -- update to beta 4 / 1.93 - -------------------------------------------------------------------- -Mon Jul 31 17:10:27 CEST 2000 - adrian@suse.de - -- added workaround for localized startup - (KDE2 can not handle aliases) - -------------------------------------------------------------------- -Mon Jul 24 18:00:53 CEST 2000 - adrian@suse.de - -- update to second try of beta 3 - -------------------------------------------------------------------- -Fri Jul 21 22:54:34 CEST 2000 - adrian@suse.de - -- update to beta 3 - -------------------------------------------------------------------- -Mon Jul 17 19:27:38 CEST 2000 - adrian@suse.de - -- update to snapshot from 17.07.2000 - -------------------------------------------------------------------- -Thu Jul 13 22:58:33 CEST 2000 - adrian@suse.de - -- fixed really the filelist - -------------------------------------------------------------------- -Wed Jul 12 11:37:22 CEST 2000 - adrian@suse.de - -- fixed filelist and fix for older distris - -------------------------------------------------------------------- -Mon Jul 10 17:30:49 CEST 2000 - adrian@suse.de - -- fix start script - -------------------------------------------------------------------- -Mon Jul 10 08:05:46 CEST 2000 - adrian@suse.de - -- update to snapshot from 06.07.2000 - -------------------------------------------------------------------- -Sun Jun 11 12:23:21 CEST 2000 - adrian@suse.de - -- added netscape plugin support - -------------------------------------------------------------------- -Fri Jun 9 17:16:56 CEST 2000 - adrian@suse.de - -- added workarounds in startkde - -------------------------------------------------------------------- -Fri Jun 9 08:03:53 CEST 2000 - adrian@suse.de - -- update to 1.91; beta 2 - -------------------------------------------------------------------- -Sun May 28 09:24:03 CEST 2000 - adrian@suse.de - -- snapshot from 28.05.2000 - new type of spec file - -------------------------------------------------------------------- -Fri May 12 18:09:02 CEST 2000 - adrian@suse.de - -- update to 1.90 - -------------------------------------------------------------------- -Thu Apr 27 18:25:40 CEST 2000 - adrian@suse.de - -- snapshot from 25.04.2000 - -------------------------------------------------------------------- -Wed Apr 19 17:19:28 CEST 2000 - adrian@suse.de - -- snapshot from 17.04.2000 - -------------------------------------------------------------------- -Fri Mar 31 17:05:43 CEST 2000 - adrian@suse.de - -- the first KDE 2 snapshot. still PRE 1.90 - diff --git a/opensuse/tdebase/tdebase.fillup b/opensuse/tdebase/tdebase.fillup deleted file mode 100644 index d2e2beeb8..000000000 --- a/opensuse/tdebase/tdebase.fillup +++ /dev/null @@ -1,25 +0,0 @@ -## Type: yesno -## Default: no -## Path: Desktop/KDE -## Description: KDE uses fam support -# -# KDE use the fam daemon -# (makes only sense on NFS mounted directorys) -# -KDE_USE_FAM="no" - -## Type: string -## Default: -# -# space separated list of users for which icons should be shown in KDM -# if empty, then take system defaults -# -KDM_USERS="" - -## Type: string -## Default: -# -# Special greeting words in kdm -# -KDM_GREETSTRING="" - diff --git a/opensuse/tdebase/tdebase.spec b/opensuse/tdebase/tdebase.spec deleted file mode 100644 index 52d6c3c81..000000000 --- a/opensuse/tdebase/tdebase.spec +++ /dev/null @@ -1,1851 +0,0 @@ -# -# spec file for package kdebase3 -# -# Copyright (c) 2011 SUSE LINUX Products GmbH, Nuernberg, Germany. -# -# All modifications and additions to the file contributed by third parties -# remain the property of their copyright owners, unless otherwise agreed -# upon. The license for this file, and modifications and additions to the -# file, is the same license as for the pristine package itself (unless the -# license for the pristine package is not an Open Source License, in which -# case the license is the MIT License). An "Open Source License" is a -# license that conforms to the Open Source Definition (Version 1.9) -# published by the Open Source Initiative. - -# Please submit bugfixes or comments via http://bugs.opensuse.org/ -# - -# norootforbuild - -%if %suse_version < 1210 || 0%{?is_kde_kde3} > 0 -%define with_hal 1 -%else -%define with_hal 0 -%endif - -Name: kdebase3 -BuildRequires: OpenEXR-devel cups-devel db-devel doxygen graphviz kdelibs3-devel krb5-devel libsmbclient-devel mDNSResponder-devel openldap2 openldap2-devel openmotif openmotif-devel openslp-devel openssh pam-devel pcsc-lite-devel qt3-devel-doc samba-client utempter xorg-x11 -BuildRequires: unsermake xorg-x11-libfontenc-devel -BuildRequires: liblazy-devel -%if %suse_version >= 1130 -BuildRequires: libusb-compat-devel -%endif -%if 0%{?with_hal} > 0 -BuildRequires: hal-devel -Provides: kdebase3-with-hal-enabled -%endif -BuildRequires: fdupes libbz2-devel -%ifnarch s390 s390x -BuildRequires: libsensors4-devel -%endif -%define qt_path /usr/lib/qt3 -%define kde_path /opt/kde3 -Provides: windowmanager kfontinst kdebase3-konqueror kdebase3-khotkeys -Obsoletes: kfontinst kdebase3-konqueror kdebase3-khotkeys -# bug437293 -%ifarch ppc64 -Obsoletes: kdebase3-64bit -%endif -# -Requires: kdelibs3 >= %( echo `rpm -q --queryformat '%{VERSION}' kdelibs3`) -Requires: xorg-x11 misc-console-font -Recommends: kdelibs3_doc -Recommends: gdb -PreReq: fileshareset -%define fileshare_prefix %{_prefix} -Conflicts: kdebase3-SuSE <= 9.0 -PreReq: /bin/sh fileutils permissions -%if %suse_version < 1120 -Requires: kdebase3-apps kdebase3-workspace -%endif -%if %suse_version > 1130 -Provides: kdebase3-beagle = 3.5.10 -Obsoletes: kdebase3-beagle <= 3.5.10 -%endif -License: GPLv2+ -Group: System/GUI/KDE -Summary: The KDE Core Components -BuildRoot: %{_tmppath}/%{name}-%{version}-build -Url: http://www.kde.org/ -Version: 3.5.10.1 -Release: 17 -%define kde_version 3.5.10 -Requires: kdebase3-runtime == %{version} -Source0: kdebase-%{kde_version}.tar.bz2 -Source1: baselibs.conf -Source3: startkde.suse.sh -Source4: kdebase3.fillup -Source6: ksysguardd.init -# we append this file for older dist verions -Source8: mp3-info.tar.bz2 -Source9: wizard_small.png -# kicker gets messed up, if it got deinstalled -Source11: kickerrc -# from HEAD/3.2: -Source12: console8x16.pcf.gz -Source13: fileshareset2.tar.bz2 -Source914: kdm-pam-np-legacy -Source15: ksysguardd.reg -Source16: stopkde.suse.sh -Source17: zh_TW.flag.png -Source18: fileshareset.8.gz -Source19: kcheckpass.8.gz -Source20: kickoff-data.tar.bz2 -Source21: kcheckpass-pam-11.1 -Source921: kcheckpass-pam-11.0 -Source9921: kcheckpass-pam-legacy -Source22: bnc.desktop -Source23: sourceforge.desktop -Source24: devmon-automounter.sh -Patch0: 3_5_BRANCH.diff -Patch3: startkde.diff -Patch5: media-iPod.diff -Patch6: ksysguardd-openslp.diff -Patch7: fix-kio-smb-auth.diff -Patch8: konsole_keytab.diff -Patch10: kdesud-security.diff -Patch11: clock-applet-style.diff -Patch12: dont-always-start-kaccess.diff -Patch14: autorun.patch -Patch15: artwork.diff -# TODO -Patch16: kfontinst.diff -Patch17: nsplugin-Preference.diff -Patch20: ksplashml.patch -Patch21: media_suse.diff -Patch22: libkonq-kdemm.diff -Patch39: kdesktop_icons.diff -Patch40: suse_default_move.diff -Patch44: clock-suse-integrate.diff -Patch45: klipperrc.diff -Patch46: lock-xvkbd.diff -Patch51: kcontrol.diff -Patch60: short-menus.diff -# from http://fred.hexbox.de/kde_patches/kmenu-search-fs20050503.diff -Patch61: kmenu-search-fs20050503-fixed.diff -Patch62: fix-kcontrol-yast.diff -Patch63: quick_browser_menu.diff -Patch64: default_fonts.diff -#kdm -Patch69: kdm-cope-with-new-grub.diff -Patch70: kdm-aliasing.diff -Patch71: kdm-mark_autologin.diff -Patch72: kdm-all-users-nopass.diff -Patch74: kdm-sysconfig-values.diff -# svn diff $BASE/branches/KDE/3.5/kdebase/kdm@599257 $BASE/branches/work/coolos_kdm | sed -e "s,^+++ ,+++ kdm/," -Patch75: kdm-make_it_cool.diff -Patch76: kdm-admin-mode.diff -Patch77: kdm-suspend-hal.diff -Patch78: kdm-relaxed-auth.diff -Patch79: kdm-wordbreak.diff -Patch80: non-fast-malloc.diff -Patch81: ksmserver-defaulttohalt.diff -Patch82: fix-lockup-from-gnome-apps.diff -Patch83: ksmserver-suspend.diff -Patch84: default-kdeprintfax.diff -Patch85: ksmserver-tooltips.diff -Patch88: hide-only-showin-entries.diff -Patch92: kcminit-ignore-arts.diff -Patch94: mach_blass.diff -Patch96: khelpcenter-gnome-support.patch -Patch996: khelpcenter-gnome-support-legacy.patch -Patch98: workaround-pdf-on64bit-nsplugin-bug.diff -Patch99: xcursor.diff -Patch100: ksysguard-slp-ratelimit.diff -Patch104: locale-dont-show-flag.diff -Patch105: kscreensaver-random-NG.diff -Patch111: fix_default_theme_reset.diff -Patch114: improve-panelservicemenu-geticonset.diff -Patch116: teach-minicli-lock.diff -Patch117: access.diff -Patch120: kmenu-search-slowdown-fix.diff -Patch123: less_verbal_kdesu.patch -Patch125: kicker-defaults.diff -Patch126: kdebase_khc_rellinks.diff -Patch127: khelpcenter-use-suseconfig-indexer.diff -Patch131: background_default.diff -Patch141: khelpcenter-use-susehelp.diff -Patch144: make-wallpapers-hideable.diff -Patch145: kdebase_networkstatus_branch.diff -Patch149: kdeeject.diff -Patch155: use-full-hinting-by-default.diff -Patch156: kcmshell_use_kde-sound.diff -Patch157: kcmsamba_log.diff -Patch160: khelpcenter-localindices.patch -Patch161: applet-lock-logout.diff -# svn diff $BASE/branches/KDE/3.5/kdebase/kicker@849788 $BASE/branches/work/suse_kickoff_qstyle/kicker | clean_patch -Patch162: kickoff.diff -Patch1629: kickoff-beagle.diff -# svn diff $BASE/branches/KDE/3.5/kdebase/kcontrol/kicker@755866 $BASE/branches/work/suse_kickoff_qstyle/kcontrol/kicker -Patch158: kickoff-kcm.diff -# svn diff -r 551296:HEAD khelpcenter -Patch159: khelpcenter-beagle.diff -Patch163: xinerama.patch -Patch165: optional-compmgr.diff -Patch166: lowdiskspace.patch -Patch167: ksmserver-timed.diff -Patch169: systray_order.diff -Patch170: khotkeys-multimedia-action.diff -Patch171: khotkeys-multimedia-action2.diff -Patch172: select-wm-gui.diff -Patch173: suspend-unmount.diff -Patch174: ksmserver-kdeinit.diff -Patch177: kio-media-errorhandling.diff -Patch179: restore-description-parens.diff -Patch180: kompmgr_use_defaults.diff -Patch189: runupdater.patch -Patch190: kcontrol-energy.diff -Patch195: ioslaveinfo-icon.diff -Patch197: rotate-wacom-pointers.diff -Patch198: konsole-schema-update.diff -Patch199: media-cryptosupport.diff -Patch200: kdm-use-rpmoptflags.diff -Patch203: show-konqueror-in-menu.diff -Patch204: fix-desktop-icons.diff -Patch205: kcmkdm-default-grub.diff -Patch206: simplify-randr-settings.diff -Patch207: spellcheck-default-utf8.diff -Patch208: kdm-audit-log.diff -Patch209: kwinbindings.diff -Patch211: konq-combo-editor.diff -Patch212: minicli-combo-editor.diff -Patch214: kdm-color-scheme.diff -Patch215: kdm-consolekit.diff -Patch216: krandr-0.5.2.1.diff.bz2 -Patch217: kickoff-install-software.diff -Patch218: kdm-align-userlist-labels.diff -Patch219: kxkb-include-latin-layout.diff -Patch220: mediamanager-mount-point-utf8.diff -Patch222: khelpcenter-delayed-indexcheck.cpp -Patch225: system-folder_man.diff -Patch227: arts-start-on-demand.diff -Patch228: media-teardown_crypto.diff -Patch229: beagle-0.3.diff -Patch230: remove-beagle-stuff.diff -Patch231: kde3-session.diff -Patch232: kde3-session-restore.diff -Patch233: uninit.diff -Patch234: kpamgreeter.diff -Patch235: use-pam-before-classic.diff -Patch236: kdesu-remember-keep-password.diff -Patch237: suspend-kpowersave.diff -Patch238: knetattach-show.diff -Patch239: gcc44.diff -Patch240: bnc584223.diff -Patch241: openssl1.patch -Patch242: nsplugin-init-gtk.diff -Patch243: taskbar.patch -Patch244: mtab-reenable.patch - -%description -This package contains kdebase, one of the basic packages of the K -Desktop Environment. It contains, among others, kwin (the KDE window -manager), Konqueror (the KDE Web browser), and KControl (the -configuration program) - -This package is needed if you want to use the KDE Desktop. It is not -needed if you only want to start some KDE applications. - - - -Authors: --------- - The KDE Team - -%package -n misc-console-font -License: GPLv2+ -Group: System/GUI/KDE -Summary: A font for terminal usage - -%description -n misc-console-font -This package contains the Misc Console font as shipped with KDE. - - - -Authors: --------- - The KDE Team - -%package runtime -License: GPLv2+ -Summary: Runtime Dependencies of KDE3 Applications -Group: System/GUI/KDE -Provides: kio_fish -Obsoletes: kio_fish -Provides: kdebase3:/opt/kde3/%_lib/libkonq.so.4 - -%description runtime -This package contains runtime dependencies of KDE3 applications like -KIO-slaves. - - - -Authors: --------- - The KDE Team - -%package workspace -License: GPLv2+ -Summary: Workspace Components of KDE3 Desktop -Group: System/GUI/KDE -Requires: kdebase3 == %{version} -Provides: kdebase3:/opt/kde3/bin/kicker -Recommends: kdebase3-ksysguardd == %{version} -%if 0%{?with_hal} > 0 -Recommends: kdebase3-with-hal-enabled -%endif - -%description workspace -This package contains the wrkspace components of kdebase3 like -kdesktop, kicker and kwin. - - -Authors: --------- - The KDE Team - -%package apps -License: GPLv2+ -Summary: Major Applications KDE3 Desktop -Group: System/GUI/KDE -Requires: kdebase3 == %{version} -Provides: kdebase3:/opt/kde3/bin/konsole - -%description apps -This package contains the major applications kdebase3 like -Kate, Konqueror and KWrite. - - -Authors: --------- - The KDE Team - -%package devel -License: GPLv2+ -Requires: kdelibs3-devel kdebase3 = %version kdebase3-apps = %version kdebase3-runtime = %version kdebase3-workspace = %version -Summary: KDE Base Package: Base, Build Environment -Group: System/GUI/KDE - -%description devel -This package contains KDEbase, one of the basic packages of the K -Desktop Environment. It contains, among other things, KWIN, the KDE -window manager; Konqueror, the KDE web and file browser; and KControl, -the KDE configuration program. - -This package is not needed if you do not want to compile high level KDE -applications. - - - -Authors: --------- - The KDE Team - -%package kdm -License: GPLv2+ -# usesubdirs kdm -Summary: The KDE login and display manager -Provides: kdebase3:/opt/kde3/bin/kdm -Provides: kdebase:/opt/kde2/bin/kdm -Provides: kdebase3-kdm-SLD:/opt/kde3/bin/kdm -Requires: xorg-x11 -Requires: kdebase3-runtime >= %version -Group: System/GUI/KDE -PreReq: %fillup_prereq /bin/grep - -%description kdm -This package contains kdm, the login and session manager for KDE. - - - -Authors: --------- - The KDE Team - -%package samba -License: GPLv2+ -# usesubdirs kioslave/smb kcontrol/samba -Summary: KDE Base package: Windows Connection Module -Group: System/GUI/KDE - -%description samba -This package provides the "smb://" protocol, to connect to and from -Windows and Samba shares. - - - -Authors: --------- - The KDE Team - -%package extra -License: GPLv2+ -# usesubdirs kpersonalizer kcontrol/thememgr -Summary: KDE Base package: Extra Applications -Group: System/GUI/KDE - -%description extra -This package contains applications which are usually not needed on -SUSE. - -- kpersonalizer - sets different settings - -- khotkeys aRts support - for voice triggered shortcuts - - - -Authors: --------- - The KDE Team - -%package nsplugin -License: GPLv2+ -%ifarch x86_64 ppc64 s390x ia64 -Requires: nspluginwrapper -%endif -Supplements: kdebase3 >= %version -Requires: kdebase3 = %version -Summary: Netscape plugin support for KDE -Group: System/GUI/KDE - -%description nsplugin -This package contains support for Netscape plug-ins in konqueror. You -have to enable JavaScript for this. - - - -Authors: --------- - The KDE Team - - -%package ksysguardd -License: GPLv2+ -PreReq: %insserv_prereq %fillup_prereq aaa_base -Summary: KDE base package: ksysguard daemon -Group: System/GUI/KDE -Provides: kdebase4-workspace-ksysguardd - -%description ksysguardd -This package contains the ksysguard daemon. It is needed for ksysguard. - -This package can be installed on servers without any other KDE packages -to guard the system from remote computers. - - - -Authors: --------- - The KDE Team - - -%package session -License: GPLv2+ -Summary: The KDE Session -Group: System/GUI/KDE -Provides: kdebase3:/usr/bin/kde -Requires: kdebase3-workspace - -%description session -This package contains the startup scripts necessary to start a KDE -session from kdm. - - - -Authors: --------- - The KDE Team - -%if %suse_version < 1140 - -%package beagle -License: GPLv2+ -Summary: Beagle dependent plugins for KDE desktop -Group: System/GUI/KDE -Requires: beagle >= 0.3.0 -Requires: kdebase3-workspace = %version -Supplements: packageand(kdebase3-session:beagle) -BuildRequires: libbeagle-devel - -%description beagle -This package contains kdebase plugins which provide additional search -functionality via Beagle. - - - -Authors: --------- - The KDE Team - -%endif - -%package -n fileshareset -License: GPLv2+ -Summary: Set and list fileshares -Group: System/Management -Version: 2.0 -Release: 578 - -%description -n fileshareset -This package contains the the fileshareset utility to allow users to -add or remove file shares. It's also possible to list currently shared -locations. /etc/security/fileshare.conf is the main configuration file. - - - -Authors: --------- - Uwe Gansert - -%define sysconfdir /etc - -%prep -%setup -q -b 8 -b 13 -n kdebase-%{kde_version} -%patch0 -%patch3 -%patch5 -# causes hangs (bnc#158239) -#%patch6 -#%patch100 -%patch7 -%patch8 -%patch10 -%patch11 -%patch12 -%patch14 -# do we really still need it ? -#%patch16 -%patch15 -%patch17 -%patch20 -%patch21 -%patch85 -%patch39 -%patch40 -%patch44 -%patch45 -%patch46 -%patch51 -%patch63 -%patch60 -%patch64 -%patch94 -%patch98 -# all the kdm changes -%patch75 -%patch70 -%patch71 -%patch72 -%patch74 -%patch76 -%patch78 -%patch79 -# default-to-halt -%patch81 -%patch82 -%if %suse_version > 1010 -%patch83 -%patch77 -%endif -%patch200 -%patch215 -%patch84 -%patch61 -%patch120 -%patch22 -%patch92 -%patch88 -%if %suse_version > 1020 -%patch96 -%else -%patch996 -%endif -# xcursor -%patch99 -%ifnarch %ix86 x86_64 -%patch80 -%endif -%patch62 -%patch69 -%patch104 -%patch105 -%patch111 -%patch114 -%patch116 -%patch117 -%patch123 -%patch126 -%patch131 -%patch141 -p1 -%patch127 -%patch144 -%patch145 -%patch149 -%patch155 -%patch156 -%patch157 -%patch160 -%if %suse_version > 1010 -%patch161 -pushd kicker -%patch162 -pushd ../kcontrol/kicker -%patch158 -popd -popd -%if %suse_version > 1010 -%if %suse_version < 1140 -%patch159 -%endif -%endif -%patch165 -%patch166 -%patch167 -tar xvfj %SOURCE20 -%endif -%patch163 -%patch125 -%patch169 -%patch170 -%patch171 -%patch172 -%patch173 -%patch174 -%patch177 -%patch179 -%patch180 -%if %suse_version > 1010 -%patch189 -%endif -%patch190 -%patch195 -%if %suse_version > 1020 -%patch198 -%patch199 -%endif -%patch203 -%patch204 -%patch205 -%patch207 -%patch208 -%patch209 -%patch211 -%patch212 -%patch214 -pushd kcontrol -%patch216 -popd -%patch217 -%patch218 -%patch219 -%patch220 -%patch222 -%patch225 -%patch197 -%patch206 -%patch227 -%patch228 -%if %suse_version > 1030 -%if %suse_version < 1140 -pushd kicker -%patch1629 -popd -%patch229 -%patch230 -%endif -%endif -%patch231 -%patch232 -%patch233 -%patch234 -%patch235 -%patch236 -%if %suse_version > 1010 -%patch237 -%endif -%patch238 -%patch239 -%patch240 -p1 -%patch241 -p0 -%patch242 -p0 -%patch243 -%patch244 -p1 - -rm -rf kappfinder -rm pics/crystalsvg/cr??-*emacs.png -cp %SOURCE17 l10n/tw/flag.png -. /etc/opt/kde3/common_options -cd ../fileshareset2 -aclocal -autoconf -automake -a -c -cd ../kdebase-%{kde_version} -update_admin - -%build -. /etc/opt/kde3/common_options -DEBUG="--disable-debug" -FINAL="--enable-final" -PARANOIA="" -%ifnarch s390 -PARANOIA="--with-cdparanoia" -%endif - LDAP="--with-ldap" -%if %suse_version > 1010 - MOTIF_INCLUDE="/usr/include" -X_SERVER=/usr/bin/X RUN_KAPPFINDER=no \ -%else - MOTIF_INCLUDE="/usr/X11R6/include" -X_SERVER=/usr/X11R6/bin/X RUN_KAPPFINDER=no \ -%endif -./configure \ - $configkde \ - $PARANOIA \ - $LDAP \ - $FLAGS \ - $XINERAMA \ -%if %suse_version > 1010 - --with-motif-libraries=/usr/%{_lib}/ \ -%else - --with-motif-libraries=/usr/X11R6/%{_lib}/ \ -%endif - --with-motif-includes=$MOTIF_INCLUDE \ - --with-samba-libs \ - --with-pam=xdm \ - --with-kdm-xconsole \ - --with-kdm-pam=xdm \ - --with-kcp-pam=kcheckpass \ - --with-kss-pam=kcheckpass - do_make %{?_smp_mflags} -cd ../fileshareset2 - ./configure --prefix=%{fileshare_prefix} - make %{?_smp_mflags} - -%install -. /etc/opt/kde3/common_options -# relabel smb icon -grep -v ^Icon= kioslave/smb/smb-network.desktop | grep -v ^Name > w -mv w kioslave/smb/smb-network.desktop -echo "Icon=samba" >> kioslave/smb/smb-network.desktop -echo "Name=SMB Shares" >> kioslave/smb/smb-network.desktop -# install -do_make DESTDIR=$RPM_BUILD_ROOT $INSTALL_TARGET -rm $RPM_BUILD_ROOT/opt/kde3/share/applnk/System/kmenuedit.desktop -rm $RPM_BUILD_ROOT/opt/kde3/share/applnk/System/kpersonalizer.desktop -rm $RPM_BUILD_ROOT/opt/kde3/share/applnk/Utilities/kpager.desktop -rm $RPM_BUILD_ROOT/opt/kde3/share/applnk/Internet/keditbookmarks.desktop -rm $RPM_BUILD_ROOT/opt/kde3/share/applnk/Toys/ktip.desktop -install -m 0644 %SOURCE12 $RPM_BUILD_ROOT/opt/kde3/share/fonts/ -%if %suse_version > 1100 -install -D -m 0644 %SOURCE21 $RPM_BUILD_ROOT/etc/pam.d/kcheckpass -%else -%if %suse_version > 1010 -install -D -m 0644 %SOURCE921 $RPM_BUILD_ROOT/etc/pam.d/kcheckpass -%else -install -D -m 0644 %SOURCE914 $RPM_BUILD_ROOT/etc/pam.d/xdm-np -install -D -m 0644 %SOURCE9921 $RPM_BUILD_ROOT/etc/pam.d/kcheckpass -%endif -%endif -install -m 0644 %SOURCE22 $RPM_BUILD_ROOT/opt/kde3/share/services/searchproviders/ -install -m 0644 %SOURCE23 $RPM_BUILD_ROOT/opt/kde3/share/services/searchproviders/ -%if %suse_version < 1011 -mkdir -p $RPM_BUILD_ROOT/usr/X11R6/bin -%endif -mkdir -p ${RPM_BUILD_ROOT}/usr/bin \ - ${RPM_BUILD_ROOT}/usr/sbin \ - ${RPM_BUILD_ROOT}/var/run/xdmctl -%if %suse_version > 1010 - ln -fs /opt/kde3/bin/startkde $RPM_BUILD_ROOT/usr/bin/kde - ln -fs /opt/kde3/bin/startkde $RPM_BUILD_ROOT/usr/bin/startkde3 -%else - ln -fs /opt/kde3/bin/startkde $RPM_BUILD_ROOT/usr/X11R6/bin/kde -%endif -ln -sf rcxdm ${RPM_BUILD_ROOT}/usr/sbin/rckdm -#%if %suse_version > 1020 -#rm ${RPM_BUILD_ROOT}/opt/kde3/bin/ksysguardd -#rm ${RPM_BUILD_ROOT}/etc/ksysguarddrc -#%else -mv ${RPM_BUILD_ROOT}/opt/kde3/bin/ksysguardd ${RPM_BUILD_ROOT}/usr/bin/ksysguardd -ln -sf /usr/bin/ksysguardd ${RPM_BUILD_ROOT}/opt/kde3/bin/ksysguardd -#%endif -install -d ${RPM_BUILD_ROOT}/opt/kde3/env -%if %suse_version < 1001 -install -m 0755 %SOURCE3 ${RPM_BUILD_ROOT}/opt/kde3/env -%endif -install -D -m 0755 %SOURCE16 ${RPM_BUILD_ROOT}/opt/kde3/shutdown/stopkde.suse.sh -mkdir -p "${RPM_BUILD_ROOT}"/etc/security/ -echo "RESTRICT=yes" > "${RPM_BUILD_ROOT}"/etc/security/fileshare.conf -# -# install pixmaps and configuration -# -mkdir -p $RPM_BUILD_ROOT/var/adm/fillup-templates -mkdir -p $RPM_BUILD_ROOT/etc/init.d/ -install -m 0644 %SOURCE9 ${RPM_BUILD_ROOT}/opt/kde3/share/apps/kdewizard/pics/wizard_small.png -#%if %suse_version < 1031 -install -m 0744 %SOURCE6 $RPM_BUILD_ROOT/etc/init.d/ksysguardd -#%endif -mkdir -p $RPM_BUILD_ROOT/opt/kde3/share/apps/kdm/faces/ -ln -s ../pics/users/root1.png $RPM_BUILD_ROOT/opt/kde3/share/apps/kdm/faces/root.face.icon -ln -s ../pics/users/default2.png $RPM_BUILD_ROOT/opt/kde3/share/apps/kdm/faces/.default.face.icon -#%if %suse_version < 1031 -ln -sf /etc/init.d/ksysguardd $RPM_BUILD_ROOT/usr/sbin/rcksysguardd -install -D -m 644 %SOURCE15 $RPM_BUILD_ROOT/etc/slp.reg.d/ksysguardd.reg -#%endif -# even if we use smbro -install -D -m 644 kioslave/smb/smb-network.desktop $RPM_BUILD_ROOT/opt/kde3/share/apps/konqueror/dirtree/remote/smb-network.desktop -# -# install kde session file -# -install -m 0755 -d $RPM_BUILD_ROOT/usr/share/xsessions/ -mv $RPM_BUILD_ROOT/opt/kde3/share/apps/kdm/sessions/kde.desktop $RPM_BUILD_ROOT/usr/share/xsessions/ -# for those we have a package for remove the backup and rely on the package -for wm in gnome xfce4 xfce wmaker blackbox fvwm95 fvwm icewm enlightenment; do - rm -f $RPM_BUILD_ROOT/opt/kde3/share/apps/kdm/sessions/$wm.desktop -done -%suse_update_desktop_file $RPM_BUILD_ROOT/usr/share/xsessions/kde.desktop -# -# delete unwanted/double files -# -rm $RPM_BUILD_ROOT/opt/kde3/share/apps/kdesktop/DesktopLinks/Home.desktop -rm $RPM_BUILD_ROOT/opt/kde3/share/apps/kdesktop/DesktopLinks/System.desktop -rm $RPM_BUILD_ROOT/opt/kde3/share/icons/*/*/apps/kvirc.* -mkdir -p $RPM_BUILD_ROOT/usr/share -mv $RPM_BUILD_ROOT/opt/kde3/share/wallpapers $RPM_BUILD_ROOT/usr/share -cd ../fileshareset2/src -rm -f $RPM_BUILD_ROOT/opt/kde3/bin/fileshare{set,list} -make DESTDIR=$RPM_BUILD_ROOT install -chmod 0755 $RPM_BUILD_ROOT/%{fileshare_prefix}/bin/fileshareset -cd .. -FILLUP_DIR=$RPM_BUILD_ROOT/var/adm/fillup-templates -install -m 644 -D %SOURCE4 $FILLUP_DIR/sysconfig.windowmanager-kdebase3 -mkdir -p $RPM_BUILD_ROOT/opt/kde3/share/icons/hicolor/{16x16,22x22,32x32,48x48,64x64,128x128}/apps/ -for i in {16,32,48,64,128}; do cp $BUILD_ROOT/opt/kde3/share/icons/crystalsvg/"$i"x"$i"/mimetypes/misc.png $RPM_BUILD_ROOT/opt/kde3/share/icons/hicolor/"$i"x"$i"/apps/kcmcomponentchooser.png;done -for i in {16,22,32,48,128}; do cp $BUILD_ROOT/opt/kde3/share/icons/crystalsvg/"$i"x"$i"/actions/launch.png $RPM_BUILD_ROOT/opt/kde3/share/icons/hicolor/"$i"x"$i"/apps/kcmperformance.png;done -cp $BUILD_ROOT/opt/kde3/share/icons/crystalsvg/16x16/actions/services.png $RPM_BUILD_ROOT/opt/kde3/share/icons/hicolor/16x16/apps/kcmkded.png -for i in {16,22,32,48}; do cp $BUILD_ROOT/opt/kde3/share/icons/crystalsvg/"$i"x"$i"/actions/exit.png $RPM_BUILD_ROOT/opt/kde3/share/icons/hicolor/"$i"x"$i"/apps/kcmsmserver.png;done -for i in {16,22,32}; do cp $BUILD_ROOT/opt/kde3/share/icons/crystalsvg/"$i"x"$i"/actions/spellcheck.png $RPM_BUILD_ROOT/opt/kde3/share/icons/hicolor/"$i"x"$i"/apps/kcmspellchecking.png;done -for i in {16,22,32,48,64,128}; do cp $BUILD_ROOT/opt/kde3/share/icons/crystalsvg/"$i"x"$i"/filesystems/desktop.png $RPM_BUILD_ROOT/opt/kde3/share/icons/hicolor/"$i"x"$i"/apps/kcmdesktopbehavior.png;done -for i in {16,22,32,48,64,128}; do cp $BUILD_ROOT/opt/kde3/share/icons/crystalsvg/"$i"x"$i"/filesystems/desktop.png $RPM_BUILD_ROOT/opt/kde3/share/icons/hicolor/"$i"x"$i"/apps/kcmdesktop.png;done -for i in {16,22,32,48,64,128}; do cp $BUILD_ROOT/opt/kde3/share/icons/crystalsvg/"$i"x"$i"/apps/kmenu.png $RPM_BUILD_ROOT/opt/kde3/share/icons/hicolor/"$i"x"$i"/apps/kcmtaskbar.png;done -for i in {16,22,32,48,64,128}; do cp $BUILD_ROOT/opt/kde3/share/icons/crystalsvg/"$i"x"$i"/mimetypes/colorscm.png $RPM_BUILD_ROOT/opt/kde3/share/icons/hicolor/"$i"x"$i"/apps/kcmcolors.png;done -for i in {16,22,32,48,128}; do cp $BUILD_ROOT/opt/kde3/share/icons/crystalsvg/"$i"x"$i"/actions/launch.png $RPM_BUILD_ROOT/opt/kde3/share/icons/hicolor/"$i"x"$i"/apps/kcmlaunch.png;done -for i in {16,22,32}; do cp $BUILD_ROOT/opt/kde3/share/icons/crystalsvg/"$i"x"$i"/actions/filter.png $RPM_BUILD_ROOT/opt/kde3/share/icons/hicolor/"$i"x"$i"/apps/kcmkhtml_filter.png;done -for i in {16,22,32}; do cp $BUILD_ROOT/opt/kde3/share/icons/crystalsvg/"$i"x"$i"/actions/run.png $RPM_BUILD_ROOT/opt/kde3/share/icons/hicolor/"$i"x"$i"/apps/kcmcgi.png;done -for i in {16,22}; do cp $BUILD_ROOT/opt/kde3/share/icons/crystalsvg/"$i"x"$i"/actions/history.png $RPM_BUILD_ROOT/opt/kde3/share/icons/hicolor/"$i"x"$i"/apps/kcmhistory.png;done -for i in {16,22,32,48,64,128}; do cp $BUILD_ROOT/opt/kde3/share/icons/crystalsvg/"$i"x"$i"/filesystems/network.png $RPM_BUILD_ROOT/opt/kde3/share/icons/hicolor/"$i"x"$i"/apps/kcmnetpref.png;done -for i in {16,32,48,64,128}; do cp $BUILD_ROOT/opt/kde3/share/icons/crystalsvg/"$i"x"$i"/devices/blockdevice.png $RPM_BUILD_ROOT/opt/kde3/share/icons/hicolor/"$i"x"$i"/apps/kcmkdnssd.png;done -for i in {16,22,32,48,64}; do cp $BUILD_ROOT/opt/kde3/share/icons/crystalsvg/"$i"x"$i"/devices/joystick.png $RPM_BUILD_ROOT/opt/kde3/share/icons/hicolor/"$i"x"$i"/apps/kcmjoystick.png;done -for i in {16,32,48,64,128}; do cp $BUILD_ROOT/opt/kde3/share/icons/crystalsvg/"$i"x"$i"/devices/mouse.png $RPM_BUILD_ROOT/opt/kde3/share/icons/hicolor/"$i"x"$i"/apps/kcmmouse.png;done -for i in {16,22,32,48,64,128}; do cp $BUILD_ROOT/opt/kde3/share/icons/crystalsvg/"$i"x"$i"/devices/system.png $RPM_BUILD_ROOT/opt/kde3/share/icons/hicolor/"$i"x"$i"/apps/kcmmedia.png;done -for i in {16,22,32}; do cp $BUILD_ROOT/opt/kde3/share/icons/crystalsvg/"$i"x"$i"/actions/encrypted.png $RPM_BUILD_ROOT/opt/kde3/share/icons/hicolor/"$i"x"$i"/apps/kcmcrypto.png;done -for i in {16,22,32,48,64,128}; do cp $BUILD_ROOT/opt/kde3/share/icons/crystalsvg/"$i"x"$i"/filesystems/trashcan_empty.png $RPM_BUILD_ROOT/opt/kde3/share/icons/hicolor/"$i"x"$i"/apps/kcmprivacy.png;done -for i in {16,22,32,48,64,128}; do cp $BUILD_ROOT/opt/kde3/share/icons/crystalsvg/"$i"x"$i"/filesystems/network.png $RPM_BUILD_ROOT/opt/kde3/share/icons/hicolor/"$i"x"$i"/apps/kcmnic.png;done -# -# solve file conflicts with theme packages ... -# -mv $RPM_BUILD_ROOT/opt/kde3/share/apps/ksplash/pics $RPM_BUILD_ROOT/opt/kde3/share/apps/ksplash/pics-default -ln -s pics-default $RPM_BUILD_ROOT/opt/kde3/share/apps/ksplash/pics -chmod 0755 $RPM_BUILD_ROOT/%{fileshare_prefix}/bin/fileshareset -%suse_update_desktop_file kate TextEditor -%suse_update_desktop_file kwrite TextEditor -%suse_update_desktop_file Help Documentation Viewer -%suse_update_desktop_file Home System FileManager core -%suse_update_desktop_file KControl X-SuSE-core -%suse_update_desktop_file konqbrowser WebBrowser -%suse_update_desktop_file Kfind System Filesystem core -%suse_update_desktop_file kinfocenter System Monitor -%suse_update_desktop_file kmenuedit Core-Configuration -%suse_update_desktop_file konsole TerminalEmulator -%suse_update_desktop_file konsolesu TerminalEmulator -%suse_update_desktop_file ksysguard System Monitor -%suse_update_desktop_file -r klipper System TrayIcon -%suse_update_desktop_file kpager Utility DesktopUtility -%suse_update_desktop_file -u ktip System Utility -%suse_update_desktop_file konqfilemgr System FileManager -%suse_update_desktop_file konquerorsu System FileManager -%suse_update_desktop_file kdeprintfax PrintingUtility -%suse_update_desktop_file kjobviewer PrintingUtility -%suse_update_desktop_file kpersonalizer DesktopUtility -%suse_update_desktop_file kcmkicker X-KDE-settings-desktop -%suse_update_desktop_file knetattach System Network -%suse_update_desktop_file -r kfontview Graphics Viewer -%suse_update_desktop_file -r krandrtray Applet X-KDE-settings-desktop -%suse_update_desktop_file $RPM_BUILD_ROOT/opt/kde3/share/apps/remoteview/smb-network.desktop -for i in $RPM_BUILD_ROOT/opt/kde3/share/applnk/System/ScreenSavers/*.desktop ; do - sed -e '/^\[Desktop Entry\]/a\ -Categories=Screensaver;' $i > ${i}_ - mv ${i}_ $i - %suse_update_desktop_file "$i" -done -install -d $RPM_BUILD_ROOT/opt/kde3/share/applnk/apps -ln -sf /opt/kde3/share/applnk/System/ScreenSavers $RPM_BUILD_ROOT/opt/kde3/share/applnk/apps/ScreenSavers - -for i in $RPM_BUILD_ROOT/opt/kde3/share/applications/kde/*.desktop \ - $RPM_BUILD_ROOT/opt/kde3/share/apps/konqueror/servicemenus/*.desktop \ - $RPM_BUILD_ROOT/opt/kde3/share/apps/kicker/*/*.desktop \ - $RPM_BUILD_ROOT/opt/kde3/share/apps/kicker/*/*/*.desktop \ - $RPM_BUILD_ROOT/opt/kde3/share/apps/kicker/*/*/*.desktop \ - $RPM_BUILD_ROOT/usr/share/wallpapers/*.desktop \ - $RPM_BUILD_ROOT/opt/kde3/share/apps/konqsidebartng/virtual_folders/services/*.desktop; do - [ "`sed -n '/^\[Desktop Entry\]/,/^\[/ s,NoDisplay=\(.*\),\1,p' "$i"`" = "true" ] && continue - [ "`sed -n '/^\[Desktop Entry\]/,/^\[/ s,Hidden=\(.*\),\1,p' "$i"`" = "true" ] && continue - grep -q X-SuSE-translate "$i" && continue - %suse_update_desktop_file "$i" -done -rm -f $RPM_BUILD_ROOT/opt/kde3/share/config/kdm/README -rm -f $RPM_BUILD_ROOT/opt/kde3/share/apps/kdm/sessions/icewm.desktop -# -# gimp 2.0 does have a different named icon -# -for i in $RPM_BUILD_ROOT//opt/kde3/share/icons/*/*/apps/gimp.png; do - ln "$i" "${i%/*}/wilber-icon.png" -done -mkdir -p -m 755 $RPM_BUILD_ROOT/%_mandir/man8 -cp %SOURCE18 $RPM_BUILD_ROOT/%_mandir/man8 -cp %SOURCE19 $RPM_BUILD_ROOT/%_mandir/man8 -# don't conflict with man pages from KDE4 packages -rm $RPM_BUILD_ROOT/%_mandir/man1/kate.* -rm $RPM_BUILD_ROOT/%_mandir/man1/kdesu.* -rm $RPM_BUILD_ROOT/%_mandir/man1/kbookmarkmerger.* -rm $RPM_BUILD_ROOT/%_mandir/man1/kfind.* -kde_post_install -%if %suse_version > 1020 -%fdupes $RPM_BUILD_ROOT/opt/kde3/share -%endif -# move konqueror.desktop back to old position (#281572) -mv $RPM_BUILD_ROOT/opt/kde3/share/applications/kde/konqueror.desktop $RPM_BUILD_ROOT/opt/kde3/share/applnk/konqueror.desktop - -%if 0%{?with_hal} == 0 -cp -f %{SOURCE24} $RPM_BUILD_ROOT/opt/kde3/bin -chmod +x $RPM_BUILD_ROOT/opt/kde3/bin/devmon-automounter.sh -sed -i 5i\ '/opt/kde3/bin/devmon-automounter.sh &' $RPM_BUILD_ROOT/opt/kde3/bin/startkde -%endif - -%pre -# we have this as link -if test -e opt/kde3/share/apps/ksplash/pics -a ! -L opt/kde3/share/apps/ksplash/pics ; - then - if test -e opt/kde3/share/apps/ksplash/pics-default; then - rm -rf opt/kde3/share/apps/ksplash/pics - else - mv opt/kde3/share/apps/ksplash/pics opt/kde3/share/apps/ksplash/pics-default - fi -fi -kdmrc=/opt/kde3/share/config/kdm/kdmrc -# if the /opt/kde3 one is obviously wrong and we have one in /etc we move that one over to -# avoid confusion on update what's the right kdmrc -if test -f $kdmrc && grep -q "Session=/opt/kde3/share/config/kdm/Xsession" $kdmrc && test -f /etc$kdmrc; then - mv /etc$kdmrc $kdmrc -fi - -%post -/sbin/ldconfig -%run_permissions - -%post kdm -%{fillup_only -an windowmanager-kdebase3} -/opt/kde3/bin/genkdmconf -if test -f /etc/sysconfig/displaymanager ; then - . /etc/sysconfig/displaymanager -fi -%{fillup_only -n displaymanager -s kdebase3-SuSE} -%{remove_and_set -n displaymanager KDM_SHUTDOWN} -if test -n "$KDM_SHUTDOWN" -a "$KDM_SHUTDOWN" != "no"; then - if test "$KDM_SHUTDOWN" = "local" ; then - KDM_SHUTDOWN=all - fi - case "$KDM_SHUTDOWN" in - "auto" | "none" | "root") - sed -i -e "s/^DISPLAYMANAGER_SHUTDOWN=.*/DISPLAYMANAGER_SHUTDOWN=\"$KDM_SHUTDOWN\"/" /etc/sysconfig/displaymanager - ;; - esac -fi - -%post -n fileshareset -%run_permissions - -%postun kdm -%insserv_cleanup - -%postun -%insserv_cleanup -/sbin/ldconfig -%if %suse_version < 1031 - -%post ksysguardd -%{fillup_and_insserv -sn kdebase3-ksysguardd ksysguardd RUN_KSYSGUARDD} -%verifyscript -%verify_permissions -e /opt/kde3/bin/kcheckpass -%verify_permissions -e /opt/kde3/bin/kdesud -%verify_permissions -e /opt/kde3/bin/khc_indexbuilder - -%postun ksysguardd -%restart_on_update ksysguardd -%insserv_cleanup - -%preun ksysguardd -%stop_on_removal ksysguardd -%endif - -%post runtime -p /sbin/ldconfig - -%postun runtime -p /sbin/ldconfig - -%post workspace -p /sbin/ldconfig -%if %suse_version > 1110 && 0%{?with_hal} > 0 -chkconfig haldaemon on -%endif - -%postun workspace -p /sbin/ldconfig - -%post apps -p /sbin/ldconfig - -%postun apps -p /sbin/ldconfig - -%clean -rm -rf $RPM_BUILD_ROOT - -%files -n misc-console-font -%defattr(-,root,root) -%doc COPYING -/opt/kde3/share/fonts/console8x16.pcf.gz - -%files -%defattr(-,root,root) -%doc AUTHORS COPYING README README.pam ../lame.spec ../README.mp3 -%exclude /opt/kde3/share/fonts/console8x16.pcf.gz -%dir /opt/kde3/share/icons/hicolor/* -%dir /opt/kde3/%_lib/kconf_update_bin -%dir /opt/kde3/share/apps/plugin -%dir /opt/kde3/share/applnk/ -%dir /opt/kde3/share/applnk/Settings -%dir /opt/kde3/share/applnk/Settings/WebBrowsing -%dir /opt/kde3/share/applnk/System/ScreenSavers -%dir /opt/kde3/share/applnk/apps -/opt/kde3/share/applnk/apps/ScreenSavers -/etc/xdg/menus/*.menu -/etc/xdg/menus/applications-merged -%verify(not mode) %attr(2755,root,nogroup) /opt/kde3/bin/kdesud -%verify(not mode) %attr(0755,root,man) /opt/kde3/bin/khc_indexbuilder -/opt/kde3/env -/opt/kde3/bin/arts-start -/opt/kde3/bin/drkonqi -/opt/kde3/bin/kaccess -/opt/kde3/bin/kblankscrn.kss -/opt/kde3/bin/kbookmarkmerger -/opt/kde3/bin/kcminit -/opt/kde3/bin/kcminit_startup -/opt/kde3/%_lib/kde3/kcminit_startup.* -/opt/kde3/bin/kcontrol* -/opt/kde3/bin/kdeinstallktheme -/opt/kde3/bin/kdepasswd -/opt/kde3/bin/kdcop -/opt/kde3/bin/kdebugdialog -/opt/kde3/bin/kdeeject -/opt/kde3/bin/kdeprintfax -/opt/kde3/bin/keditfiletype -/opt/kde3/bin/khelpcenter -/opt/kde3/bin/kjobviewer -/opt/kde3/bin/kcheckrunning -/opt/kde3/bin/kpm -/opt/kde3/bin/krandom.kss -/opt/kde3/bin/krdb -/opt/kde3/bin/kxkb -/opt/kde3/bin/kdialog -/opt/kde3/bin/klocaldomainurifilterhelper -/opt/kde3/bin/kio_media_mounthelper -/opt/kde3/bin/knetattach -/opt/kde3/bin/ktrash -/opt/kde3/bin/khc_docbookdig.pl -/opt/kde3/bin/khc_mansearch.pl -/opt/kde3/bin/khc_htdig.pl -/opt/kde3/bin/khc_htsearch.pl -/opt/kde3/bin/kapplymousetheme -/opt/kde3/bin/kio_system_documenthelper -%if %suse_version > 1010 -/opt/kde3/bin/runupdater -%endif -/opt/kde3/bin/kstart -/opt/kde3/bin/ksystraycmd -/opt/kde3/%_lib/kde3/cursorthumbnail.* -/opt/kde3/%_lib/kde3/htmlthumbnail.* -/opt/kde3/%_lib/kde3/imagethumbnail.* -/opt/kde3/%_lib/kde3/kcm_a* -/opt/kde3/%_lib/kde3/kcm_bell* -/opt/kde3/%_lib/kde3/kcm_keyboard* -/opt/kde3/%_lib/kde3/kcm_c* -/opt/kde3/%_lib/kde3/kcm_d* -/opt/kde3/%_lib/kde3/kcm_e* -/opt/kde3/%_lib/kde3/kcm_f* -/opt/kde3/%_lib/kde3/kcm_h* -/opt/kde3/%_lib/kde3/kcm_i* -/opt/kde3/%_lib/kde3/kcm_l* -/opt/kde3/%_lib/kde3/kcm_nic.* -/opt/kde3/%_lib/kde3/kcm_p* -/opt/kde3/%_lib/kde3/kcm_smserver.* -/opt/kde3/%_lib/kde3/kcm_spellchecking.* -/opt/kde3/%_lib/kde3/kcm_style.* -/opt/kde3/%_lib/kde3/kcm_usb.* -/opt/kde3/%_lib/kde3/khelpcenter.* -/opt/kde3/%_lib/kde3/kcm_xinerama.* -/opt/kde3/%_lib/kde3/kxkb.* -/opt/kde3/%_lib/kde3/djvuthumbnail.* -/opt/kde3/%_lib/kde3/kaccess.* -/opt/kde3/%_lib/kde3/kcminit.* -/opt/kde3/%_lib/kde3/kcm_nsplugins.* -/opt/kde3/%_lib/kde3/kcontrol.* -/opt/kde3/%_lib/kde3/keditbookmarks.* -/opt/kde3/%_lib/kde3/kfmclient.* -/opt/kde3/%_lib/kde3/kjobviewer.* -/opt/kde3/%_lib/kde3/kprinter.* -/opt/kde3/%_lib/kde3/libkdeprint_part.* -/opt/kde3/%_lib/kde3/libkshorturifilter.* -/opt/kde3/%_lib/kde3/libkuri* -/opt/kde3/%_lib/kde3/libkonsolepart.* -/opt/kde3/%_lib/kde3/textthumbnail.* -/opt/kde3/%_lib/kde3/kcm_joystick.* -/opt/kde3/%_lib/kde3/kcm_useraccount.* -/opt/kde3/%_lib/kde3/kcontroledit.* -/opt/kde3/%_lib/kde3/kded_kwrited.* -/opt/kde3/%_lib/kde3/kstyle_keramik_config.* -/opt/kde3/%_lib/kde3/libkmanpart.* -/opt/kde3/%_lib/kde3/liblocaldomainurifilter.* -%if %suse_version > 1010 -/opt/kde3/%_lib/kde3/runupdater.* -/opt/kde3/%_lib/libkdeinit_runupdater.so -%endif -/opt/kde3/%_lib/libkdeinit_kaccess.so -/opt/kde3/%_lib/libkdeinit_kcminit.so -/opt/kde3/%_lib/libkdeinit_kcminit_startup.so -/opt/kde3/%_lib/libkdeinit_kcontrol.so -/opt/kde3/%_lib/libkdeinit_kcontroledit.so -/opt/kde3/%_lib/libkdeinit_keditbookmarks.so -/opt/kde3/%_lib/libkdeinit_kfmclient.so -/opt/kde3/%_lib/libkdeinit_khelpcenter.so -/opt/kde3/%_lib/libkdeinit_kjobviewer.so -/opt/kde3/%_lib/libkdeinit_kxkb.so -/opt/kde3/%_lib/kde3/libnsplugin.* -/opt/kde3/%_lib/kde3/kded_remotedirnotify.* -/opt/kde3/%_lib/kde3/kded_systemdirnotify.* -/opt/kde3/%_lib/kde3/libkhtmlkttsdplugin.* -/opt/kde3/%_lib/kde3/kcm_media.la -/opt/kde3/%_lib/kde3/kcm_media.so -/opt/kde3/%_lib/kde3/kded_homedirnotify.la -/opt/kde3/%_lib/kde3/kded_homedirnotify.so -/opt/kde3/%_lib/kde3/kded_medianotifier.la -/opt/kde3/%_lib/kde3/kded_medianotifier.so -%if 0%{?with_hal} > 0 -/opt/kde3/%_lib/kde3/media_propsdlgplugin.* -%endif -/opt/kde3/%_lib/kde3/kcm_kded.* -/opt/kde3/%_lib/kde3/kcm_kdnssd.* -/opt/kde3/%_lib/kde3/kcm_keyboard.* -/opt/kde3/%_lib/kde3/kcm_keys.* -/opt/kde3/%_lib/kde3/kcm_kio.* -/opt/kde3/%_lib/kde3/kcm_knotify.* -/opt/kde3/%_lib/kde3/kcm_konq.* -/opt/kde3/%_lib/kde3/kcm_konqhtml.* -/opt/kde3/%_lib/kde3/kcm_kthememanager.* -/opt/kde3/%_lib/kde3/kcm_kurifilt.* -/opt/kde3/share/applications/kde/khtml_filter.desktop -/opt/kde3/share/applications/kde/media.desktop -/opt/kde3/share/applications/kde/joystick.desktop -/opt/kde3/share/applications/kde/kcm_useraccount.desktop -/opt/kde3/share/applications/kde/kdepasswd.desktop -/opt/kde3/share/applications/kde/kthememanager.desktop -/opt/kde3/share/applications/kde/Help.desktop -/opt/kde3/share/applications/kde/KControl.desktop -/opt/kde3/share/applications/kde/arts.desktop -/opt/kde3/share/applications/kde/bell.desktop -/opt/kde3/share/applications/kde/cache.desktop -/opt/kde3/share/applications/kde/colors.desktop -/opt/kde3/share/applications/kde/componentchooser.desktop -/opt/kde3/share/applications/kde/cookies.desktop -/opt/kde3/share/applications/kde/crypto.desktop -/opt/kde3/share/applications/kde/display.desktop -/opt/kde3/share/applications/kde/dma.desktop -/opt/kde3/share/applications/kde/ebrowsing.desktop -/opt/kde3/share/applications/kde/filebrowser.desktop -/opt/kde3/share/applications/kde/filetypes.desktop -/opt/kde3/share/applications/kde/fonts.desktop -/opt/kde3/share/applications/kde/clock.desktop -/opt/kde3/share/applications/kde/icons.desktop -/opt/kde3/share/applications/kde/interrupts.desktop -/opt/kde3/share/applications/kde/installktheme.desktop -/opt/kde3/share/applications/kde/ioports.desktop -/opt/kde3/share/applications/kde/ioslaveinfo.desktop -/opt/kde3/share/applications/kde/kcmaccess.desktop -/opt/kde3/share/applications/kde/kcmcgi.desktop -/opt/kde3/share/applications/kde/kcmcss.desktop -/opt/kde3/share/applications/kde/kcmhistory.desktop -/opt/kde3/share/applications/kde/kcmkded.desktop -/opt/kde3/share/applications/kde/kcmlaunch.desktop -/opt/kde3/share/applications/kde/kcm_kdnssd.desktop -/opt/kde3/share/applications/kde/kcmnotify.desktop -/opt/kde3/share/applications/kde/kcmperformance.desktop -/opt/kde3/share/applications/kde/kcmusb.desktop -/opt/kde3/share/applications/kde/kdeprintfax.desktop -/opt/kde3/share/applications/kde/keyboard.desktop -/opt/kde3/share/applications/kde/keyboard_layout.desktop -/opt/kde3/share/applications/kde/keys.desktop -/opt/kde3/share/applications/kde/kfmclient.desktop -/opt/kde3/share/applications/kde/kfmclient_dir.desktop -/opt/kde3/share/applications/kde/kfmclient_html.desktop -/opt/kde3/share/applications/kde/kfmclient_war.desktop -/opt/kde3/share/applications/kde/khtml_behavior.desktop -/opt/kde3/share/applications/kde/khtml_fonts.desktop -/opt/kde3/share/applications/kde/khtml_java_js.desktop -/opt/kde3/share/applications/kde/khtml_plugins.desktop -/opt/kde3/share/applications/kde/kjobviewer.desktop -/opt/kde3/share/applications/kde/lanbrowser.desktop -/opt/kde3/share/applications/kde/language.desktop -/opt/kde3/share/applications/kde/memory.desktop -/opt/kde3/share/applications/kde/mouse.desktop -/opt/kde3/share/applications/kde/netpref.desktop -/opt/kde3/share/applications/kde/nic.desktop -/opt/kde3/share/applications/kde/partitions.desktop -/opt/kde3/share/applications/kde/pci.desktop -/opt/kde3/share/applications/kde/printers.desktop -/opt/kde3/share/applications/kde/privacy.desktop -/opt/kde3/share/applications/kde/processor.desktop -/opt/kde3/share/applications/kde/proxy.desktop -/opt/kde3/share/applications/kde/scsi.desktop -/opt/kde3/share/applications/kde/smbstatus.desktop -/opt/kde3/share/applications/kde/sound.desktop -/opt/kde3/share/applications/kde/spellchecking.desktop -/opt/kde3/share/applications/kde/style.desktop -/opt/kde3/share/applications/kde/useragent.desktop -/opt/kde3/share/applications/kde/xserver.desktop -/opt/kde3/share/applications/kde/cdinfo.desktop -/opt/kde3/share/applnk/.hidden -/opt/kde3/share/applnk/Settings/Information -/opt/kde3/share/applnk/Settings/LookNFeel -/opt/kde3/share/applnk/Settings/WebBrowsing/khtml_appearance.desktop -/opt/kde3/share/applnk/Settings/WebBrowsing/smb.desktop -/opt/kde3/share/apps/drkonqi -/opt/kde3/share/apps/kc* -/opt/kde3/share/apps/kdcop -/opt/kde3/share/apps/kdeprint* -/opt/kde3/share/apps/kdewizard -/opt/kde3/share/apps/kdisplay -/opt/kde3/share/apps/khelpcenter/searchhandlers/docbook.desktop -/opt/kde3/share/apps/khelpcenter -/opt/kde3/share/apps/kio* -/opt/kde3/share/apps/kjobviewer -/opt/kde3/share/apps/konsole -/opt/kde3/share/apps/khtml/kpartplugins -/opt/kde3/share/apps/kthememanager -/opt/kde3/share/apps/remoteview -/opt/kde3/share/apps/systemview -/opt/kde3/share/apps/kaccess -/opt/kde3/share/config.kcfg/klaunch.kcfg -/opt/kde3/share/config.kcfg/khelpcenter.kcfg -/opt/kde3/share/config.kcfg/keditbookmarks.kcfg -/opt/kde3/share/config.kcfg/launcherapplet.kcfg -/opt/kde3/share/config.kcfg/mediamanagersettings.kcfg -/opt/kde3/share/mimelnk/inode/system_directory.desktop -/opt/kde3/share/services/kded/remotedirnotify.desktop -/opt/kde3/share/services/kded/systemdirnotify.desktop -%if 0%{?with_hal} > 0 -/opt/kde3/share/services/media_propsdlgplugin.desktop - -%endif -%config(noreplace) /opt/kde3/share/config/kshorturifilterrc -%config(noreplace) /opt/kde3/share/config/kxkb_groups -/opt/kde3/share/desktop-directories -%exclude /opt/kde3/share/doc/HTML/en/kioslave -%dir /opt/kde3/share/fonts -%dir /opt/kde3/share/fonts/override -%verify(not md5 size mtime) /opt/kde3/share/fonts/override/fonts.dir -%dir /opt/kde3/share/icons/*/*/* -/opt/kde3/share/config.kcfg/kcm_useraccount.kcfg -/opt/kde3/share/config.kcfg/kcm_useraccount_pass.kcfg -%exclude /opt/kde3/share/icons/*/*/*/style.* -%exclude /opt/kde3/share/icons/*/*/*/looknfeel.* -%exclude /opt/kde3/share/icons/*/*/*/energy.* -%exclude /opt/kde3/share/icons/*/*/*/date.* -%exclude /opt/kde3/share/icons/*/*/*/filetypes.* -%exclude /opt/kde3/share/icons/*/*/*/personal.* -/opt/kde3/share/icons/*/*/*/a*.* -/opt/kde3/share/icons/*/*/*/b*.* -/opt/kde3/share/icons/*/*/*/c*.* -/opt/kde3/share/icons/*/*/*/d*.* -/opt/kde3/share/icons/*/*/*/f*.* -/opt/kde3/share/icons/*/*/*/g*.* -/opt/kde3/share/icons/*/*/*/help_index.* -/opt/kde3/share/icons/*/*/*/icons.* -/opt/kde3/share/icons/*/*/*/input_devices_settings.* -/opt/kde3/share/icons/*/*/*/kcmx.* -/opt/kde3/share/icons/*/*/*/kcmdf.* -/opt/kde3/share/icons/*/*/*/kbinaryclock.* -/opt/kde3/share/icons/*/*/apps/kcmcgi.* -/opt/kde3/share/icons/*/*/apps/kcmcolors.* -/opt/kde3/share/icons/*/*/apps/kcmcomponentchooser.* -/opt/kde3/share/icons/*/*/apps/kcmcrypto.* -/opt/kde3/share/icons/*/*/apps/kcmhistory.* -/opt/kde3/share/icons/*/*/apps/kcmjoystick.* -/opt/kde3/share/icons/*/*/apps/kcmkded.* -/opt/kde3/share/icons/*/*/apps/kcmkdnssd.* -/opt/kde3/share/icons/*/*/apps/kcmkhtml_filter.* -/opt/kde3/share/icons/*/*/apps/kcmlaunch.* -/opt/kde3/share/icons/*/*/apps/kcmmedia.* -/opt/kde3/share/icons/*/*/apps/kcmmouse.* -/opt/kde3/share/icons/*/*/apps/kcmnetpref.* -/opt/kde3/share/icons/*/*/apps/kcmnic.* -/opt/kde3/share/icons/*/*/apps/kcmperformance.* -/opt/kde3/share/icons/*/*/apps/kcmprivacy.* -/opt/kde3/share/icons/*/*/apps/kcmspellchecking.* -/opt/kde3/share/icons/*/*/*/ieee1394.* -/opt/kde3/share/icons/*/*/*/kdeprintfax.* -/opt/kde3/share/icons/*/*/*/kdisknav.* -/opt/kde3/share/icons/*/*/*/knetattach.* -/opt/kde3/share/icons/*/*/*/key_bindings.* -/opt/kde3/share/icons/*/*/*/keyboard_layout.* -/opt/kde3/share/icons/*/*/*/kfm_home.* -/opt/kde3/share/icons/*/*/*/khelpcenter.* -/opt/kde3/share/icons/*/*/*/kjobviewer.* -/opt/kde3/share/icons/*/*/*/konsole.* -/opt/kde3/share/icons/*/*/*/l*.* -/opt/kde3/share/icons/*/*/*/m*.* -/opt/kde3/share/icons/*/*/*/ne*.* -/opt/kde3/share/icons/*/*/*/opera.* -/opt/kde3/share/icons/*/*/*/r*.* -/opt/kde3/share/icons/*/*/*/s*.* -/opt/kde3/share/icons/*/*/*/usb.* -/opt/kde3/share/icons/*/*/*/vnc.* -/opt/kde3/share/icons/*/*/*/w*.* -/opt/kde3/share/icons/*/*/*/e*.* -/opt/kde3/share/icons/*/*/*/kcmdevices.* -/opt/kde3/share/icons/*/*/*/kcmdrkonqi.* -/opt/kde3/share/icons/*/*/*/kcmmemory.* -/opt/kde3/share/icons/*/*/*/kcmmidi.* -/opt/kde3/share/icons/*/*/*/kcmpartitions.* -/opt/kde3/share/icons/*/*/*/kcmpci.* -/opt/kde3/share/icons/*/*/*/kcmprocessor.* -/opt/kde3/share/icons/*/*/*/kcmscsi.* -/opt/kde3/share/icons/*/*/*/kthememgr.* -/opt/kde3/share/icons/*/*/*/kcontrol.* -/opt/kde3/share/icons/*/*/*/kxkb.* -/opt/kde3/share/icons/*/*/*/p*.* -/opt/kde3/share/icons/*/*/*/t*.* -/opt/kde3/share/icons/*/*/*/qtella.* -/opt/kde3/share/icons/*/*/*/x*.* -# these have no PNG -/opt/kde3/share/icons/*/scalable/apps/hardware.svgz -/opt/kde3/share/icons/*/scalable/apps/kate2.svgz -/opt/kde3/share/icons/*/scalable/apps/kwrite2.svgz -/opt/kde3/share/icons/*/scalable/apps/openoffice.svgz -/opt/kde3/share/icons/*/scalable/apps/quicktime.svgz -/opt/kde3/share/locale -/opt/kde3/share/mimelnk/application/x-konsole.desktop -/opt/kde3/share/mimelnk/application/x-ktheme.desktop -/opt/kde3/share/mimelnk/application/x-smb-server.desktop -/opt/kde3/share/mimelnk/print -/opt/kde3/share/services/textthumbnail.desktop -/opt/kde3/share/services/htmlthumbnail.desktop -/opt/kde3/share/services/ka*.desktop -/opt/kde3/share/services/kdeprint_part.desktop -/opt/kde3/share/services/konsolepart.desktop -/opt/kde3/share/services/konsole-script.desktop -/opt/kde3/share/services/kshorturifilter.desktop -/opt/kde3/share/services/ku*.desktop -/opt/kde3/share/services/searchproviders -/opt/kde3/share/services/useragentstrings -/opt/kde3/share/services/imagethumbnail.desktop -/opt/kde3/share/services/kxkb.desktop -/opt/kde3/share/services/kmanpart.desktop -/opt/kde3/share/services/localdomainurifilter.desktop -/opt/kde3/share/services/kwrited.desktop -/opt/kde3/share/services/djvuthumbnail.desktop -/opt/kde3/share/services/kded/kwrited.desktop -/opt/kde3/share/servicetypes/terminalemulator.desktop -/opt/kde3/share/servicetypes/kateplugin.desktop -/opt/kde3/share/servicetypes/findpart.desktop -/opt/kde3/share/servicetypes/searchprovider.desktop -/opt/kde3/share/servicetypes/thumbcreator.desktop -/opt/kde3/share/servicetypes/uasprovider.desktop -%exclude /opt/kde3/share/sounds/KDE_Close_Window* -%exclude /opt/kde3/share/sounds/KDE_Dialog* -%exclude /opt/kde3/share/sounds/KDE_Desktop* -%exclude /opt/kde3/share/sounds/KDE_Logout* -%exclude /opt/kde3/share/sounds/KDE_Startup* -%exclude /opt/kde3/share/sounds/KDE_Window* -/opt/kde3/share/sounds -/opt/kde3/share/templates -/opt/kde3/share/services/khelpcenter.desktop -/opt/kde3/bin/keditbookmarks -/opt/kde3/bin/kfm* -/opt/kde3/share/apps/kbookmark -/opt/kde3/share/apps/keditbookmarks -/opt/kde3/share/icons/*/*/*/keditbookmarks.* -/opt/kde3/share/icons/*/*/*/kfm.* -/opt/kde3/share/icons/*/*/*/konqueror.* -/opt/kde3/share/services/konq* -/opt/kde3/share/servicetypes/konq* -/opt/kde3/share/services/cursorthumbnail.desktop -/opt/kde3/%_lib/kde3/kcm_randr.* -/opt/kde3/bin/krandrtray -/opt/kde3/share/applications/kde/krandrtray.desktop -/opt/kde3/%_lib/kde3/kded_mediamanager.* -/opt/kde3/%_lib/kde3/kfile_media.* -/opt/kde3/%_lib/kde3/kfile_trash.* -/opt/kde3/share/applications/kde/devices.desktop -/opt/kde3/share/applications/kde/knetattach.desktop -/opt/kde3/share/applications/kde/opengl.desktop -/opt/kde3/share/icons/*/*/*/kcmopengl.* -/opt/kde3/share/mimelnk/media -/opt/kde3/share/services/kded/mediamanager.desktop -/opt/kde3/share/services/kded/homedirnotify.desktop -/opt/kde3/share/services/kded/medianotifier.desktop -/opt/kde3/share/services/kfile_media.desktop -/opt/kde3/share/services/kfile_trash.desktop -/opt/kde3/share/services/kfile_trash_system.desktop -/opt/kde3/share/mimelnk/fonts/package.desktop -/opt/kde3/%_lib/kde3/exrthumbnail.* -/opt/kde3/share/services/exrthumbnail.desktop -%dir /opt/kde3/share/mimelnk/fonts -/opt/kde3/bin/kfontinst -/opt/kde3/%_lib/kde3/fontthumbnail.* -/opt/kde3/%_lib/kde3/kfile_font.* -/opt/kde3/%_lib/kde3/libkfontviewpart.* -%dir /opt/kde3/share/apps/kfontview -/opt/kde3/share/apps/kfontview/kfontviewpart.rc -/opt/kde3/share/applications/kde/kcmfontinst.desktop -/opt/kde3/share/mimelnk/fonts/folder.desktop -/opt/kde3/share/mimelnk/fonts/system-folder.desktop -/opt/kde3/share/services/fontthumbnail.desktop -/opt/kde3/share/services/kfile_font.desktop -/opt/kde3/share/services/kfontviewpart.desktop -%_mandir/man1/* -%if %suse_version < 1001 -%config(noreplace) /etc/security/fileshare.conf -/opt/kde3/bin/filesharelist -%verify(not mode) /opt/kde3/bin/fileshareset -%endif -%{_mandir}/man8/kcheckpass.8.gz -%doc %lang(en) /opt/kde3/share/doc/HTML/en/kcontrol -%doc %lang(en) /opt/kde3/share/doc/HTML/en/kdcop -%doc %lang(en) /opt/kde3/share/doc/HTML/en/kdebugdialog -%doc %lang(en) /opt/kde3/share/doc/HTML/en/kdeprint -%doc %lang(en) /opt/kde3/share/doc/HTML/en/kdesu -%exclude /opt/kde3/share/doc/HTML/en/khelpcenter/userguide -%exclude /opt/kde3/share/doc/HTML/en/khelpcenter/visualdict -%doc %lang(en) /opt/kde3/share/doc/HTML/en/khelpcenter -%doc %lang(en) /opt/kde3/share/doc/HTML/en/knetattach -/opt/kde3/share/applications/kde/desktoppath.desktop - -%files samba -%defattr(-,root,root) -/opt/kde3/%_lib/kde3/kcm_samba.* -/opt/kde3/%_lib/kde3/kio_smb.* -/opt/kde3/share/services/smb.protocol -%dir /opt/kde3/share/apps/konqueror/dirtree -%dir /opt/kde3/share/apps/konqueror/dirtree/remote -/opt/kde3/share/apps/konqueror/dirtree/remote/smb-network.desktop -/opt/kde3/share/mimelnk/application/x-smb-workgroup.desktop - -%files kdm -%defattr(-,root,root) -%dir /opt/kde3/share/doc/kdm -/opt/kde3/bin/genkdmconf -/opt/kde3/bin/kdm* -/opt/kde3/bin/krootimage -/opt/kde3/share/apps/kdm -/opt/kde3/%_lib/kde3/kgreet_pam.* -%doc /opt/kde3/share/doc/kdm/README -%if %suse_version < 1020 -%config /etc/pam.d/xdm-np -%endif -%dir /opt/kde3/share/config/kdm -%config(noreplace) /opt/kde3/share/config/kdm/kdmrc -%config(noreplace) /opt/kde3/share/config/kdm/backgroundrc -%if %suse_version < 1010 -%config /opt/kde3/share/config/kdm/Xaccess -%config /opt/kde3/share/config/kdm/Xreset -%config /opt/kde3/share/config/kdm/Xresources -%config /opt/kde3/share/config/kdm/Xsession -%config /opt/kde3/share/config/kdm/Xsetup -%config /opt/kde3/share/config/kdm/Xstartup -%config /opt/kde3/share/config/kdm/Xwilling -%endif -%ghost /var/run/xdmctl -/usr/sbin/rckdm -/opt/kde3/share/applications/kde/kdm.desktop -/opt/kde3/share/icons/*/*/*/kdmconfig.* -/opt/kde3/%_lib/kde3/kcm_kdm.* -%doc %lang(en) /opt/kde3/share/doc/HTML/en/kdm - -%files session -%defattr(-,root,root) -%if %suse_version > 1010 -/usr/bin/kde -/usr/bin/startkde3 -%else -/usr/X11R6/bin/kde -%endif -%if %suse_version < 1030 -%dir /usr/share/xsessions -%endif -/usr/share/xsessions/kde.desktop - -%files extra -%defattr(-,root,root) -/opt/kde3/bin/kpersonalizer -/opt/kde3/share/applications/kde/kpersonalizer.desktop -/opt/kde3/share/apps/kpersonalizer -/opt/kde3/share/icons/*/*/*/kpersonalizer.* -/opt/kde3/bin/kfontview -/opt/kde3/share/applications/kde/kfontview.desktop -/opt/kde3/share/apps/kfontview/kfontviewui.rc -/opt/kde3/%_lib/kde3/khotkeys_arts.* - -%files nsplugin -%defattr(-,root,root) -/opt/kde3/bin/nsplugin* -/opt/kde3/share/apps/plugin/nspluginpart.rc -%dir /opt/kde3/share/applnk/Settings/WebBrowsing -/opt/kde3/share/applnk/Settings/WebBrowsing/nsplugin.desktop - -%files devel -%defattr(-,root,root) -/opt/kde3/include/* -/opt/kde3/%_lib/libkonq.so -/opt/kde3/%_lib/libkdecorations.so -/opt/kde3/%_lib/libkonqsidebarplugin.so -/opt/kde3/%_lib/libkickermain.so -/opt/kde3/%_lib/libtask*.so -/opt/kde3/%_lib/libksgrd.so -%if %suse_version > 1010 -/opt/kde3/%_lib/libkickoffsearch_interfaces.so -/opt/kde3/%_lib/libkickoffsearch_interfaces.la -%endif -/opt/kde3/%_lib/libksplashthemes.so -/opt/kde3/%_lib/libkateinterfaces.so -/opt/kde3/%_lib/libkateutils.so -/opt/kde3/%_lib/libkhotkeys_shared.so -/opt/kde3/%_lib/libkateinterfaces.la -/opt/kde3/%_lib/libkateutils.la -/opt/kde3/%_lib/libkdecorations.la -/opt/kde3/%_lib/libkfontinst.la -/opt/kde3/%_lib/libkfontinst.so -/opt/kde3/%_lib/libkhotkeys_shared.la -/opt/kde3/%_lib/libkickermain.la -/opt/kde3/%_lib/libkonq.la -/opt/kde3/%_lib/libkonqsidebarplugin.la -/opt/kde3/%_lib/libksgrd.la -/opt/kde3/%_lib/libksplashthemes.la -/opt/kde3/%_lib/libtaskbar.la -/opt/kde3/%_lib/libtaskmanager.la -/opt/kde3/%_lib/libkasbar.so -/opt/kde3/%_lib/libkasbar.la - -%files ksysguardd -%defattr(-,root,root) -%dir /etc/slp.reg.d -#%if %suse_version < 1020 -/usr/bin/ksysguardd -/opt/kde3/bin/ksysguardd -%config(noreplace) /etc/ksysguarddrc -#%endif -#%if %suse_version > 1030 -#/usr/bin/ksysguardd -#%config(noreplace) /etc/ksysguarddrc -#%endif -/etc/init.d/ksysguardd -/usr/sbin/rcksysguardd -%config(noreplace) /etc/slp.reg.d/* - -%if %suse_version > 1010 -%if %suse_version < 1140 - -%files beagle -%defattr(-,root,root) -/opt/kde3/bin/khc_beagle_search.pl -/opt/kde3/bin/khc_beagle_index.pl -/opt/kde3/share/apps/khelpcenter/searchhandlers/docbook.desktop -/opt/kde3/%_lib/kde3/kickoffsearch_beagle.* -/opt/kde3/share/services/kickoffsearch_beagle.desktop -%endif -%endif - -%files -n fileshareset -%defattr(-,root,root) -%config(noreplace) /etc/security/fileshare.conf -%{_bindir}/filesharelist -%verify(not mode) %{_bindir}/fileshareset -%{_mandir}/man8/fileshareset.8.gz - -%files apps -%defattr(-,root,root) -/opt/kde3/bin/konsole* -/opt/kde3/%_lib/kde3/konsole.* -/opt/kde3/%_lib/kde3/kcm_konsole.* -/opt/kde3/%_lib/libkdeinit_konsole.so -/opt/kde3/share/applications/kde/konsole.desktop -/opt/kde3/share/applications/kde/konsolesu.desktop -%doc %lang(en) /opt/kde3/share/doc/HTML/en/konsole -/opt/kde3/share/applications/kde/Home.desktop -/opt/kde3/%_lib/libkdeinit_konqueror.so -/opt/kde3/share/apps/konqueror/konq-simplebrowser.rc -/opt/kde3/share/applications/kde/konquerorsu.desktop -/opt/kde3/share/applnk/konqueror.desktop -%doc %lang(en) /opt/kde3/share/doc/HTML/en/konqueror -/opt/kde3/share/config.kcfg/konqueror.kcfg -/opt/kde3/bin/konqueror -/opt/kde3/%_lib/kde3/konq*.so -/opt/kde3/%_lib/kde3/konq*.la -%dir /opt/kde3/share/apps/konqueror -/opt/kde3/share/apps/konqueror/tiles -/opt/kde3/share/apps/konqueror/about -/opt/kde3/share/apps/konqueror/icons -/opt/kde3/share/apps/konqueror/konqueror.rc -/opt/kde3/share/apps/konqueror/p* -/opt/kde3/share/apps/konqueror/servicemenus -/opt/kde3/%_lib/kde3/konqueror.* -/opt/kde3/share/apps/konqiconview -/opt/kde3/share/apps/konqlistview -/opt/kde3/share/apps/konqsidebartng -/opt/kde3/%_lib/kde3/kded_konqy_preloader.* -/opt/kde3/share/services/kded/konqy_preloader.desktop -/opt/kde3/share/applications/kde/konqbrowser.desktop -/opt/kde3/share/applications/kde/konqfilemgr.desktop -/opt/kde3/share/config.kcfg/konq_listview.kcfg -%config(noreplace) /opt/kde3/share/config/konqsidebartng.rc -/opt/kde3/bin/kfind -/opt/kde3/%_lib/kde3/libkfindpart.* -/opt/kde3/share/applications/kde/Kfind.desktop -/opt/kde3/share/apps/kfindpart -/opt/kde3/share/icons/*/*/*/kfind.* -/opt/kde3/share/services/kfindpart.desktop -%doc %lang(en) /opt/kde3/share/doc/HTML/en/kfind -/opt/kde3/bin/kwrite -/opt/kde3/%_lib/kde3/kwrite.* -/opt/kde3/%_lib/libkdeinit_kwrite.so -/opt/kde3/share/applications/kde/kwrite.desktop -/opt/kde3/share/apps/kwrite -/opt/kde3/share/icons/*/*/*/kwrite.* -%doc %lang(en) /opt/kde3/share/doc/HTML/en/kwrite -/opt/kde3/bin/kate -/opt/kde3/%_lib/kde3/kate.* -/opt/kde3/%_lib/libkateinterfaces.so.* -/opt/kde3/%_lib/libkateutils.so.* -/opt/kde3/%_lib/libkdeinit_kate.so -/opt/kde3/share/applications/kde/kate.desktop -/opt/kde3/share/apps/kate -/opt/kde3/share/config/katerc -/opt/kde3/share/icons/*/*/*/kate.* -%doc %lang(en) /opt/kde3/share/doc/HTML/en/kate - -%files workspace -%defattr(-,root,root) -%exclude /usr/share/wallpapers/default_blue.* -%doc %lang(en) /opt/kde3/share/doc/HTML/en/kicker -/usr/share/wallpapers -/opt/kde3/bin/startkde -/opt/kde3/bin/kdesktop -/opt/kde3/bin/kdesktop_lock -/opt/kde3/bin/ksmserver -/opt/kde3/%_lib/libkdeinit_ksmserver.so -/opt/kde3/bin/ksplash -/opt/kde3/bin/ksplashsimple -/opt/kde3/%_lib/kde3/kdesktop.* -/opt/kde3/share/apps/kdesktop -/opt/kde3/share/config.kcfg/kdesktop.kcfg -%config(noreplace) /opt/kde3/share/config/kdesktop_custom_menu* -/opt/kde3/bin/kicker -/opt/kde3/%_lib/kde3/kicker* -/opt/kde3/%_lib/kde3/kcm_kicker* -/opt/kde3/%_lib/libkickermain.so.* -/opt/kde3/share/applications/kde/kcmkicker.desktop -/opt/kde3/share/apps/kicker -/opt/kde3/share/config.kcfg/kickerSettings.kcfg -/opt/kde3/share/icons/*/*/*/kcmkicker.* -/opt/kde3/share/icons/*/*/*/kicker.* -/opt/kde3/%_lib/kconf_update_bin/kicker-3.4-reverseLayout -/opt/kde3/bin/kwin -/opt/kde3/bin/kwin_killer_helper -/opt/kde3/bin/kwin_rules_dialog -/opt/kde3/%_lib/kde3/kwin_* -/opt/kde3/share/apps/kwin -/opt/kde3/%_lib/kde3/kwin.* -/opt/kde3/%_lib/kde3/kwin3_* -/opt/kde3/%_lib/kconf_update_bin/kwin_update_default_rules -/opt/kde3/%_lib/kconf_update_bin/kwin_update_window_settings -/opt/kde3/share/applications/kde/kwinrules.desktop -/opt/kde3/share/applications/kde/kwindecoration.desktop -/opt/kde3/share/applications/kde/kwinoptions.desktop -/opt/kde3/share/config.kcfg/kwin.kcfg -/opt/kde3/share/icons/*/*/*/kwin.* -/var/adm/fillup-templates/sysconfig.windowmanager-kdebase3 -/opt/kde3/share/apps/ksplash -/opt/kde3/share/services/ksplash.desktop -/opt/kde3/share/services/ksplashdefault.desktop -/opt/kde3/share/services/ksplashredmond.desktop -/opt/kde3/share/services/ksplashstandard.desktop -/opt/kde3/share/servicetypes/ksplashplugins.desktop -/opt/kde3/share/icons/*/*/*/ksplash.* -/opt/kde3/%_lib/kde3/ksplash* -/opt/kde3/%_lib/libksplashthemes.so.* -/opt/kde3/share/icons/*/*/apps/kcmsmserver.* -/opt/kde3/share/applications/kde/kcmsmserver.desktop -/opt/kde3/%_lib/kde3/ksmserver.* -/opt/kde3/share/apps/ksmserver -/opt/kde3/%_lib/kde3/clock_panelapplet.* -/opt/kde3/%_lib/kde3/dockbar_panelextension.* -/opt/kde3/%_lib/kde3/kasbar_panelextension.* -/opt/kde3/%_lib/kde3/menu_panelapplet.* -/opt/kde3/%_lib/kde3/klipper_panelapplet.* -/opt/kde3/%_lib/kde3/launcher_panelapplet.* -/opt/kde3/%_lib/kde3/lockout_panelapplet.* -/opt/kde3/%_lib/kde3/minipager_panelapplet.* -/opt/kde3/%_lib/kde3/naughty_panelapplet.* -/opt/kde3/%_lib/kde3/run_panelapplet.* -/opt/kde3/%_lib/kde3/sidebar_panelextension.* -/opt/kde3/share/applications/kde/panel.desktop -/opt/kde3/share/applications/kde/panel_appearance.desktop -/opt/kde3/%_lib/kde3/media_panelapplet.* -/opt/kde3/%_lib/kde3/kcm_taskbar.* -/opt/kde3/share/applications/kde/kcmtaskbar.desktop -/opt/kde3/share/config.kcfg/taskbar.kcfg -/opt/kde3/share/icons/*/*/apps/kcmtaskbar.* -/opt/kde3/%_lib/kde3/kcm_screensaver.* -/opt/kde3/share/applications/kde/screensaver.desktop -/opt/kde3/share/applnk/System/ScreenSavers/KBlankscreen.desktop -/opt/kde3/share/applnk/System/ScreenSavers/KRandom.desktop -/opt/kde3/bin/kwebdesktop -/opt/kde3/share/config.kcfg/kwebdesktop.kcfg -/opt/kde3/share/applications/kde/background.desktop -/opt/kde3/%_lib/kde3/kcm_background* -/opt/kde3/bin/default_desktop_aligning -/opt/kde3/share/applications/kde/desktop.desktop -/opt/kde3/share/applications/kde/desktopbehavior.desktop -/opt/kde3/share/applications/kde/ksplashthememgr.desktop -/opt/kde3/share/icons/*/*/apps/kcmdesktop.* -/opt/kde3/share/icons/*/*/apps/kcmdesktopbehavior.* -/opt/kde3/%_lib/kde3/kcm_ksplashthemes.* -/opt/kde3/%_lib/kde3/kcm_kwindecoration.* -/opt/kde3/%_lib/kde3/kcm_kwinoptions.* -/opt/kde3/%_lib/kde3/kcm_kwinrules.* -%doc %lang(en) /opt/kde3/share/doc/HTML/en/ksplashml -/opt/kde3/shutdown -%if %suse_version > 1010 -/opt/kde3/%_lib/libkickoffsearch_interfaces.so.* -/opt/kde3/share/servicetypes/kickoffsearchplugin.desktop -%endif -/opt/kde3/share/autostart/* -/opt/kde3/share/apps/naughtyapplet -/opt/kde3/%_lib/libtask*.so.* -/opt/kde3/bin/extensionproxy -/opt/kde3/bin/appletproxy -/opt/kde3/%_lib/kde3/appletproxy.* -/opt/kde3/%_lib/kde3/extensionproxy.* -/opt/kde3/%_lib/kde3/taskbar* -/opt/kde3/%_lib/kde3/trash_panelapplet* -/opt/kde3/%_lib/kde3/sys* -/opt/kde3/share/apps/clockapplet -/opt/kde3/bin/kasbar -/opt/kde3/%_lib/libkasbar.so.* -/opt/kde3/%_lib/libkdeinit_kicker.so -/opt/kde3/%_lib/libkdeinit_appletproxy.so -/opt/kde3/%_lib/libkdeinit_extensionproxy.so -/opt/kde3/%_lib/libkdeinit_kdesktop.so -/opt/kde3/%_lib/libkdeinit_kwin.so -/opt/kde3/%_lib/libkdeinit_kwin_rules_dialog.so -/opt/kde3/bin/ktip -/opt/kde3/share/appl*/*/ktip.desktop -/opt/kde3/share/icons/*/*/*/ktip.* -/opt/kde3/bin/kpager -/opt/kde3/share/appl*/*/kpager.desktop -/opt/kde3/share/icons/*/*/*/kpager.* -%doc %lang(en) /opt/kde3/share/doc/HTML/en/kpager -/opt/kde3/bin/klipper -/opt/kde3/%_lib/kde3/klipper.* -/opt/kde3/%_lib/libkdeinit_klipper.so -/opt/kde3/share/applications/kde/klipper.desktop -%config(noreplace) /opt/kde3/share/config/klipperrc -/opt/kde3/share/icons/*/*/*/klipper.* -%doc %lang(en) /opt/kde3/share/doc/HTML/en/klipper -/opt/kde3/share/applications/kde/kmenuedit.desktop -/opt/kde3/share/apps/kmenuedit -/opt/kde3/share/icons/*/*/*/kmenuedit.* -%doc %lang(en) /opt/kde3/share/doc/HTML/en/kmenuedit -/opt/kde3/bin/kmenuedit -/opt/kde3/%_lib/kde3/kmenuedit.* -/opt/kde3/%_lib/libkdeinit_kmenuedit.so -/opt/kde3/bin/kinfocenter -/opt/kde3/share/applications/kde/kinfocenter.desktop -/opt/kde3/share/apps/kinfocenter -%doc %lang(en) /opt/kde3/share/doc/HTML/en/kinfocenter -%doc %lang(en) /opt/kde3/share/doc/HTML/en/khelpcenter/userguide -%doc %lang(en) /opt/kde3/share/doc/HTML/en/khelpcenter/visualdict -/opt/kde3/share/sounds/KDE_Close_Window* -/opt/kde3/share/sounds/KDE_Dialog* -/opt/kde3/share/sounds/KDE_Desktop* -/opt/kde3/share/sounds/KDE_Logout* -/opt/kde3/share/sounds/KDE_Startup* -/opt/kde3/share/sounds/KDE_Window* -/opt/kde3/%_lib/libkdeinit_khotkeys.so -/opt/kde3/%_lib/kde3/kcm_khotkeys.* -/opt/kde3/%_lib/kde3/kcm_khotkeys_init.* -/opt/kde3/share/icons/*/*/*/khotkeys.* -/opt/kde3/bin/khotkeys -/opt/kde3/%_lib/kconf_update_bin/khotkeys_update -/opt/kde3/%_lib/kde3/khotkeys.* -/opt/kde3/%_lib/kde3/kded_khotkeys.* -/opt/kde3/%_lib/libkhotkeys_shared.so.* -/opt/kde3/share/applications/kde/khotkeys.desktop -/opt/kde3/share/apps/khotkeys -/opt/kde3/share/services/kded/khotkeys.desktop -/opt/kde3/bin/ksysguard -/opt/kde3/share/applications/kde/ksysguard.desktop -/opt/kde3/share/apps/ksysguard -/opt/kde3/share/icons/*/*/*/ksysguard.* -/opt/kde3/share/mimelnk/application/x-ksysguard.desktop -%doc %lang(en) /opt/kde3/share/doc/HTML/en/ksysguard -%doc %lang(en) /opt/kde3/share/doc/HTML/en/kxkb -/opt/kde3/%_lib/libksgrd.so.* -/opt/kde3/bin/kompmgr -%doc %lang(en) /opt/kde3/share/doc/HTML/en/kompmgr -%if 0%{?with_hal} == 0 -/opt/kde3/bin/devmon-automounter.sh -%endif - -%files runtime -%defattr(-,root,root) -%doc %lang(en) /opt/kde3/share/doc/HTML/en/kioslave -%exclude /opt/kde3/%_lib/kde3/kio_smb.* -%exclude /opt/kde3/share/services/smb.protocol -/opt/kde3/bin/kde3 -/opt/kde3/bin/kreadconfig -/opt/kde3/bin/kwriteconfig -/opt/kde3/bin/kprinter -/opt/kde3/%_lib/libkdeinit_kprinter.so -/opt/kde3/bin/kdesu -/opt/kde3/%_lib/kde3/kio_* -/opt/kde3/%_lib/libkfontinst.so.* -/opt/kde3/share/services/*.protocol -/opt/kde3/%_lib/libkonq.so.* -/opt/kde3/%_lib/libkonqsidebarplugin.so.* -/opt/kde3/%_lib/kde3/kded_favicons.* -/opt/kde3/share/services/kded/favicons.desktop -/opt/kde3/%_lib/libkdecorations.so.* -/opt/kde3/%_lib/kde3/kgreet_winbind.* -/opt/kde3/%_lib/kde3/kgreet_classic.* -%config /etc/pam.d/kcheckpass -%verify(not mode) %attr(4755,root,shadow) /opt/kde3/bin/kcheckpass -/opt/kde3/share/icons/*/*/*/knotify.* -/opt/kde3/share/icons/*/*/*/kscreensaver.* -/opt/kde3/share/icons/*/*/*/style.* -/opt/kde3/share/icons/*/*/*/looknfeel.* -/opt/kde3/share/icons/*/*/*/iconthemes.* -/opt/kde3/share/icons/*/*/*/keyboard.* -/opt/kde3/share/icons/*/*/*/kcmsound.* -/opt/kde3/share/icons/*/*/*/energy.* -/opt/kde3/share/icons/*/*/*/kcmkwm.* -/opt/kde3/share/icons/*/*/*/hwinfo.* -/opt/kde3/share/icons/*/*/*/date.* -/opt/kde3/share/icons/*/*/*/filetypes.* -/opt/kde3/share/icons/*/*/*/kcmsystem.* -/opt/kde3/share/icons/*/*/*/personal.* - -%changelog diff --git a/opensuse/tdebase/teach-minicli-lock.diff b/opensuse/tdebase/teach-minicli-lock.diff deleted file mode 100644 index 73bd7da1e..000000000 --- a/opensuse/tdebase/teach-minicli-lock.diff +++ /dev/null @@ -1,30 +0,0 @@ -Index: kdesktop/minicli.cpp -=================================================================== ---- kdesktop/minicli.cpp.orig -+++ kdesktop/minicli.cpp -@@ -265,7 +265,9 @@ void Minicli::accept() - } - - bool logout = (cmd == "logout"); -- if( !logout && runCommand() == 1 ) -+ bool lock = (cmd == "lock"); -+ -+ if( !logout && !lock && runCommand() == 1 ) - return; - - m_dlg->cbCommand->addToHistory( m_dlg->cbCommand->currentText().stripWhiteSpace() ); -@@ -278,6 +280,14 @@ void Minicli::accept() - kapp->propagateSessionManager(); - kapp->requestShutDown(); - } -+ if ( lock ) -+ { -+ QCString appname( "kdesktop" ); -+ int kicker_screen_number = qt_xscreen(); -+ if ( kicker_screen_number ) -+ appname.sprintf("kdesktop-screen-%d", kicker_screen_number); -+ kapp->dcopClient()->send(appname, "KScreensaverIface", "lock()", ""); -+ } - } - - void Minicli::reject() diff --git a/opensuse/tdebase/uninit.diff b/opensuse/tdebase/uninit.diff deleted file mode 100644 index 92dd544ab..000000000 --- a/opensuse/tdebase/uninit.diff +++ /dev/null @@ -1,10 +0,0 @@ ---- kcontrol/randr/randroutput.cpp -+++ kcontrol/randr/randroutput.cpp -@@ -383,6 +383,7 @@ RandRCrtc *RandROutput::findEmptyCrtc() - if (crtc->connectedOutputs().count() == 0) - return crtc; - } -+ return crtc; - } - - bool RandROutput::tryCrtc(RandRCrtc *crtc, int changes) diff --git a/opensuse/tdebase/use-full-hinting-by-default.diff b/opensuse/tdebase/use-full-hinting-by-default.diff deleted file mode 100644 index 3375f0943..000000000 --- a/opensuse/tdebase/use-full-hinting-by-default.diff +++ /dev/null @@ -1,35 +0,0 @@ -Index: kcontrol/fonts/fonts.cpp -=================================================================== ---- kcontrol/fonts/fonts.cpp.orig -+++ kcontrol/fonts/fonts.cpp -@@ -332,7 +332,7 @@ bool FontAASettings::load( bool useDefau - kglobals.setReadDefaults( useDefaults ); - - kglobals.setGroup("General"); -- hStyle=KXftConfig::Hint::Medium; -+ hStyle=KXftConfig::Hint::Full; - xft.setHintStyle(hStyle); - xft.apply(); // Save this setting - kglobals.writeEntry("XftHintStyle", KXftConfig::toStr(hStyle)); -@@ -450,7 +450,7 @@ KXftConfig::Hint::Style FontAASettings:: - if(hintingStyle->currentText()==KXftConfig::description((KXftConfig::Hint::Style)s)) - return (KXftConfig::Hint::Style)s; - -- return KXftConfig::Hint::Medium; -+ return KXftConfig::Hint::Full; - } - #endif - -Index: kcontrol/krdb/krdb.cpp -=================================================================== ---- kcontrol/krdb/krdb.cpp.orig -+++ kcontrol/krdb/krdb.cpp -@@ -524,7 +524,7 @@ void runRdb( uint flags ) - - if (kglobals.hasKey("XftHintStyle")) - { -- QString hintStyle = kglobals.readEntry("XftHintStyle", "hintmedium"); -+ QString hintStyle = kglobals.readEntry("XftHintStyle", "hintfull"); - contents += "Xft.hinting: "; - if(hintStyle.isEmpty()) - contents += "-1\n"; diff --git a/opensuse/tdebase/use-pam-before-classic.diff b/opensuse/tdebase/use-pam-before-classic.diff deleted file mode 100644 index 4f2a00008..000000000 --- a/opensuse/tdebase/use-pam-before-classic.diff +++ /dev/null @@ -1,17 +0,0 @@ -Index: kdesktop/lock/lockprocess.cc -=================================================================== ---- kdesktop/lock/lockprocess.cc.orig -+++ kdesktop/lock/lockprocess.cc -@@ -364,8 +364,10 @@ void LockProcess::configure() - readSaver(); - - mPlugins = KDesktopSettings::pluginsUnlock(); -- if (mPlugins.isEmpty()) -- mPlugins = QStringList("classic"); -+ if (mMethod == "pam") -+ mPlugins << mMethod; -+ if (mMethod == "pam" || mPlugins.isEmpty()) -+ mPlugins << "classic"; - mPluginOptions = KDesktopSettings::pluginOptions(); - } - diff --git a/opensuse/tdebase/wizard_small.png b/opensuse/tdebase/wizard_small.png deleted file mode 100644 index 52233e341..000000000 Binary files a/opensuse/tdebase/wizard_small.png and /dev/null differ diff --git a/opensuse/tdebase/workaround-pdf-on64bit-nsplugin-bug.diff b/opensuse/tdebase/workaround-pdf-on64bit-nsplugin-bug.diff deleted file mode 100644 index b5681e0a3..000000000 --- a/opensuse/tdebase/workaround-pdf-on64bit-nsplugin-bug.diff +++ /dev/null @@ -1,44 +0,0 @@ -Index: nsplugins/nspluginloader.cpp -=================================================================== ---- nsplugins/nspluginloader.cpp.orig -+++ nsplugins/nspluginloader.cpp -@@ -322,7 +322,7 @@ QString NSPluginLoader::lookup(const QSt - } - - --bool NSPluginLoader::loadViewer() -+bool NSPluginLoader::loadViewer(const QString &mimeType) - { - kdDebug() << "NSPluginLoader::loadViewer" << endl; - -@@ -346,7 +346,7 @@ bool NSPluginLoader::loadViewer() - } - - // find the external artsdsp process -- if( _useArtsdsp ) { -+ if( _useArtsdsp && mimeType != "application/pdf" ) { - kdDebug() << "trying to use artsdsp" << endl; - QString artsdsp = KGlobal::dirs()->findExe("artsdsp"); - if (!artsdsp) -@@ -460,7 +460,7 @@ NSPluginInstance *NSPluginLoader::newIns - if ( !_viewer ) - { - // load plugin viewer process -- loadViewer(); -+ loadViewer(mimeType); - - if ( !_viewer ) - { -Index: nsplugins/nspluginloader.h -=================================================================== ---- nsplugins/nspluginloader.h.orig -+++ nsplugins/nspluginloader.h -@@ -100,7 +100,7 @@ protected: - QString lookup(const QString &mimeType); - QString lookupMimeType(const QString &url); - -- bool loadViewer(); -+ bool loadViewer(const QString &mimeType); - void unloadViewer(); - - protected slots: diff --git a/opensuse/tdebase/xcursor.diff b/opensuse/tdebase/xcursor.diff deleted file mode 100644 index 8c4010915..000000000 --- a/opensuse/tdebase/xcursor.diff +++ /dev/null @@ -1,36 +0,0 @@ -Index: kcontrol/input/xcursor/themepage.cpp -=================================================================== ---- kcontrol/input/xcursor/themepage.cpp.orig -+++ kcontrol/input/xcursor/themepage.cpp -@@ -73,6 +73,13 @@ struct ThemeInfo { - }; - - -+static QString defaultThemeDescription( const QString& theme ) -+{ -+ if( theme == "redglass" || theme == "whiteglass" || theme == "pseudocore" || theme == "handhelds" ) -+ return i18n( "XFree theme %1 - incomplete for KDE" ).arg( theme ); -+ return i18n( "No description available" );; -+} -+ - ThemePage::ThemePage( QWidget* parent, const char* name ) - : QWidget( parent, name ), selectedTheme( NULL ), currentTheme( NULL ) - { -@@ -333,7 +340,7 @@ void ThemePage::insertTheme( const QStri - - // Defaults in case there's no name or comment field. - QString name = dirName; -- QString desc = i18n( "No description available" ); -+ QString desc = defaultThemeDescription( name ); - QString sample = "left_ptr"; - - KSimpleConfig c( path + "/index.theme", true ); // Open read-only -@@ -480,7 +487,7 @@ void ThemePage::insertThemes() - // Defaults in case there's no index.theme file or it lacks - // a name and a comment field. - QString name = *it; -- QString desc = i18n( "No description available" ); -+ QString desc = defaultThemeDescription( name ); - QString sample = "left_ptr"; - - // Parse the index.theme file if the theme has one. diff --git a/opensuse/tdebase/xinerama.patch b/opensuse/tdebase/xinerama.patch deleted file mode 100644 index 41aedbcba..000000000 --- a/opensuse/tdebase/xinerama.patch +++ /dev/null @@ -1,951 +0,0 @@ -Index: kdesktop/minicli.cpp -=================================================================== ---- kdesktop/minicli.cpp.orig -+++ kdesktop/minicli.cpp -@@ -379,6 +379,17 @@ int Minicli::runCommand() - cmd = uri.path(); - else - cmd = uri.url(); -+ -+ QCString asn; -+ if( qApp->desktop()->isVirtualDesktop()) -+ { -+ asn = KStartupInfo::createNewStartupId(); -+ KStartupInfoId id; -+ id.initId( asn ); -+ KStartupInfoData data; -+ data.setXinerama( qApp->desktop()->screenNumber( this )); -+ KStartupInfo::sendChange( id, data ); -+ } - - // Determine whether the application should be run through - // the command line (terminal) interface... -@@ -514,7 +525,7 @@ int Minicli::runCommand() - case KURIFilterData::HELP: - { - // No need for kfmclient, KRun does it all (David) -- (void) new KRun( m_filterData->uri(), parentWidget()); -+ (void) new KRun( m_filterData->uri(), parentWidget(), asn ); - return 0; - } - case KURIFilterData::EXECUTABLE: -@@ -526,7 +537,7 @@ int Minicli::runCommand() - if (service && service->isValid() && service->type() == "Application") - { - notifyServiceStarted(service); -- KRun::run(*service, KURL::List()); -+ KRun::run(*service, KURL::List(), parentWidget(), asn ); - return 0; - } - } -@@ -561,7 +572,7 @@ int Minicli::runCommand() - if (service && service->isValid() && service->type() == "Application") - { - notifyServiceStarted(service); -- KRun::run(*service, KURL::List(), this); -+ KRun::run(*service, KURL::List(), parentWidget(), asn ); - return 0; - } - -@@ -569,7 +580,7 @@ int Minicli::runCommand() - if (service && service->isValid() && service->type() == "Application") - { - notifyServiceStarted(service); -- KRun::run(*service, KURL::List(), this); -+ KRun::run(*service, KURL::List(), parentWidget(), asn ); - return 0; - } - -@@ -581,7 +592,7 @@ int Minicli::runCommand() - } - } - -- if ( KRun::runCommand( cmd, exec, m_iconName ) ) -+ if ( KRun::runCommand( cmd, exec, m_iconName, parentWidget(), asn ) ) - return 0; - else - { -Index: kdesktop/desktop.cc -=================================================================== ---- kdesktop/desktop.cc.orig -+++ kdesktop/desktop.cc -@@ -520,9 +520,12 @@ void KDesktop::popupExecuteCommand(const - if ( m_miniCli->isVisible() ) { - KWin::forceActiveWindow( m_miniCli->winId() ); - } else { -- QRect rect = KGlobalSettings::desktopGeometry(QCursor::pos()); -- m_miniCli->move(rect.x() + (rect.width() - m_miniCli->width())/2, -- rect.y() + (rect.height() - m_miniCli->height())/2); -+ NETRootInfo i( qt_xdisplay(), NET::Supported ); -+ if( !i.isSupported( NET::WM2FullPlacement )) { -+ QRect rect = KGlobalSettings::desktopGeometry(QCursor::pos()); -+ m_miniCli->move(rect.x() + (rect.width() - m_miniCli->width())/2, -+ rect.y() + (rect.height() - m_miniCli->height())/2); -+ } - m_miniCli->show(); // non-modal - } - } -Index: kwin/useractions.cpp -=================================================================== ---- kwin/useractions.cpp.orig -+++ kwin/useractions.cpp -@@ -482,27 +482,33 @@ bool Client::performMouseCommand( Option - case Options::MouseActivateAndRaise: - replay = isActive(); // for clickraise mode - workspace()->takeActivity( this, ActivityFocus | ActivityRaise, handled && replay ); -+ workspace()->setActiveScreenMouse( globalPos ); - break; - case Options::MouseActivateAndLower: - workspace()->requestFocus( this ); - workspace()->lowerClient( this ); -+ workspace()->setActiveScreenMouse( globalPos ); - break; - case Options::MouseActivate: - replay = isActive(); // for clickraise mode - workspace()->takeActivity( this, ActivityFocus, handled && replay ); -+ workspace()->setActiveScreenMouse( globalPos ); - break; - case Options::MouseActivateRaiseAndPassClick: - workspace()->takeActivity( this, ActivityFocus | ActivityRaise, handled ); -+ workspace()->setActiveScreenMouse( globalPos ); - replay = TRUE; - break; - case Options::MouseActivateAndPassClick: - workspace()->takeActivity( this, ActivityFocus, handled ); -+ workspace()->setActiveScreenMouse( globalPos ); - replay = TRUE; - break; - case Options::MouseActivateRaiseAndMove: - case Options::MouseActivateRaiseAndUnrestrictedMove: - workspace()->raiseClient( this ); - workspace()->requestFocus( this ); -+ workspace()->setActiveScreenMouse( globalPos ); - if( options->moveMode == Options::Transparent && isMovable()) - move_faked_activity = workspace()->fakeRequestedActivity( this ); - // fallthrough -@@ -709,6 +715,40 @@ void Workspace::slotWindowToDesktop( int - sendClientToDesktop( c, i, true ); - } - -+void Workspace::slotSwitchToScreen( int i ) -+ { -+ setCurrentScreen( i ); -+ } -+ -+void Workspace::slotSwitchToNextScreen() -+ { -+ slotSwitchToScreen(( activeScreen() + 1 ) % numScreens()); -+ } -+ -+void Workspace::slotWindowToScreen( int i ) -+ { -+ Client* c = active_popup_client ? active_popup_client : active_client; -+ if( i >= 0 && i <= numScreens() && c -+ && !c->isDesktop() -+ && !c->isDock() -+ && !c->isTopMenu()) -+ { -+ sendClientToScreen( c, i ); -+ } -+ } -+ -+void Workspace::slotWindowToNextScreen() -+ { -+ Client* c = active_popup_client ? active_popup_client : active_client; -+ if( c -+ && !c->isDesktop() -+ && !c->isDock() -+ && !c->isTopMenu()) -+ { -+ sendClientToScreen( c, ( c->screen() + 1 ) % numScreens()); -+ } -+ } -+ - /*! - Maximizes the popup client - */ -Index: kwin/options.h -=================================================================== ---- kwin/options.h.orig -+++ kwin/options.h -@@ -124,6 +124,11 @@ class Options : public KDecorationOption - */ - enum AltTabStyle { KDE, CDE }; - AltTabStyle altTabStyle; -+ -+ // whether to see Xinerama screens separately for focus (in Alt+Tab, when activating next client) -+ bool separateScreenFocus; -+ // whether active Xinerama screen is the one with mouse (or with the active window) -+ bool activeMouseScreen; - - /** - * Xinerama options -@@ -133,6 +138,9 @@ class Options : public KDecorationOption - bool xineramaMovementEnabled; - bool xineramaMaximizeEnabled; - bool xineramaFullscreenEnabled; -+ -+ // number, or -1 = active screen (Workspace::activeScreen()) -+ int xineramaPlacementScreen; - - /** - MoveResizeMode, either Tranparent or Opaque. -Index: kwin/workspace.h -=================================================================== ---- kwin/workspace.h.orig -+++ kwin/workspace.h -@@ -91,6 +91,7 @@ class Workspace : public QObject, public - - QRect clientArea( clientAreaOption, const QPoint& p, int desktop ) const; - QRect clientArea( clientAreaOption, const Client* c ) const; -+ QRect clientArea( clientAreaOption, int screen, int desktop ) const; - - /** - * @internal -@@ -161,6 +162,13 @@ class Workspace : public QObject, public - */ - int numberOfDesktops() const; - void setNumberOfDesktops( int n ); -+ -+ int activeScreen() const; -+ int numScreens() const; -+ void checkActiveScreen( const Client* c ); -+ void setActiveScreenMouse( QPoint mousepos ); -+ QRect screenGeometry( int screen ) const; -+ int screenNumber( QPoint pos ) const; - - QWidget* desktopWidget(); - -@@ -186,6 +194,7 @@ class Workspace : public QObject, public - void sendClientToDesktop( Client* c, int desktop, bool dont_activate ); - void windowToPreviousDesktop( Client* c ); - void windowToNextDesktop( Client* c ); -+ void sendClientToScreen( Client* c, int screen ); - - // KDE4 remove me - and it's also in the DCOP interface :( - void showWindowMenuAt( unsigned long id, int x, int y ); -@@ -224,6 +233,7 @@ class Workspace : public QObject, public - void nextDesktop(); - void previousDesktop(); - void circulateDesktopApplications(); -+ void setCurrentScreen( int new_screen ); - - QString desktopName( int desk ) const; - virtual void setDesktopLayout(int , int , int ); -@@ -301,6 +311,10 @@ class Workspace : public QObject, public - //void slotSwitchToWindow( int ); - void slotWindowToDesktop( int ); - //void slotWindowToListPosition( int ); -+ void slotSwitchToScreen( int ); -+ void slotWindowToScreen( int ); -+ void slotSwitchToNextScreen(); -+ void slotWindowToNextScreen(); - - void slotWindowMaximize(); - void slotWindowMaximizeVertical(); -@@ -481,6 +495,7 @@ class Workspace : public QObject, public - int current_desktop; - int number_of_desktops; - QMemArray desktop_focus_chain; -+ int active_screen; - - QWidget* active_popup; - Client* active_popup_client; -Index: kwin/tabbox.cpp -=================================================================== ---- kwin/tabbox.cpp.orig -+++ kwin/tabbox.cpp -@@ -23,7 +23,6 @@ License. See the file "COPYING" for the - #include - #include - #include --#include - #include - #include - #include -@@ -110,26 +109,36 @@ void TabBox::createClientList(ClientList - - while ( c ) - { -+ Client* add = NULL; - if ( ((desktop == -1) || c->isOnDesktop(desktop)) - && c->wantsTabFocus() ) -+ { // don't add windows that have modal dialogs -+ Client* modal = c->findModal(); -+ if( modal == NULL || modal == c ) -+ add = c; -+ else if( !list.contains( modal )) -+ add = modal; -+ else -+ { -+ // nothing -+ } -+ } -+ -+ if( options->separateScreenFocus && options->xineramaEnabled ) - { -- if ( start == c ) -+ if( c->screen() != workspace()->activeScreen()) -+ add = NULL; -+ } -+ -+ if( add != NULL ) -+ { -+ if ( start == add ) - { -- list.remove( c ); -- list.prepend( c ); -+ list.remove( add ); -+ list.prepend( add ); - } - else -- { // don't add windows that have modal dialogs -- Client* modal = c->findModal(); -- if( modal == NULL || modal == c ) -- list += c; -- else if( !list.contains( modal )) -- list += modal; -- else -- { -- // nothing -- } -- } -+ list += add; - } - - if ( chain ) -@@ -156,7 +165,7 @@ void TabBox::reset() - { - int w, h, cw = 0, wmax = 0; - -- QRect r = KGlobalSettings::desktopGeometry(QCursor::pos()); -+ QRect r = workspace()->screenGeometry( workspace()->activeScreen()); - - // calculate height of 1 line - // fontheight + 1 pixel above + 1 pixel below, or 32x32 icon + 2 pixel above + below -Index: kwin/kcmkwin/kwinoptions/windows.h -=================================================================== ---- kwin/kcmkwin/kwinoptions/windows.h.orig -+++ kwin/kcmkwin/kwinoptions/windows.h -@@ -86,6 +86,7 @@ private slots: - void delayFocusOnTog(bool); - void clickRaiseOnTog(bool); - void updateAltTabMode(); -+ void updateActiveMouseScreen(); - void changed() { emit KCModule::changed(true); } - - -@@ -101,6 +102,8 @@ private: - void setDelayFocusInterval(int); - void setDelayFocus(bool); - void setClickRaise(bool); -+ void setSeparateScreenFocus(bool); -+ void setActiveMouseScreen(bool); - void setAltTabMode(bool); - void setTraverseAll(bool); - void setRollOverDesktops(bool); -@@ -113,6 +116,8 @@ private: - QCheckBox *clickRaiseOn; - KIntNumInput *autoRaise; - KIntNumInput *delayFocus; -+ QCheckBox *separateScreenFocus; -+ QCheckBox *activeMouseScreen; - - QButtonGroup *kbdBox; - QCheckBox *altTabPopup; -Index: kwin/kcmkwin/kwinoptions/windows.cpp -=================================================================== ---- kwin/kcmkwin/kwinoptions/windows.cpp.orig -+++ kwin/kcmkwin/kwinoptions/windows.cpp -@@ -76,6 +76,8 @@ - #define KWIN_SHADEHOVER_INTERVAL "ShadeHoverInterval" - #define KWIN_FOCUS_STEALING "FocusStealingPreventionLevel" - #define KWIN_HIDE_UTILITY "HideUtilityWindowsForInactive" -+#define KWIN_SEPARATE_SCREEN_FOCUS "SeparateScreenFocus" -+#define KWIN_ACTIVE_MOUSE_SCREEN "ActiveMouseScreen" - - // kwm config keywords - #define KWM_ELECTRIC_BORDER "ElectricBorders" -@@ -209,6 +211,27 @@ KFocusConfig::KFocusConfig (bool _standA - QWhatsThis::add( delayFocus, i18n("This is the delay after which the window the mouse pointer is over" - " will automatically receive focus.") ); - -+ separateScreenFocus = new QCheckBox( i18n( "S&eparate screen focus" ), fcsBox ); -+ fLay->addWidget( separateScreenFocus ); -+ wtstr = i18n( "When this option is enabled, focus operations are limited only to the active Xinerama screen" ); -+ QWhatsThis::add( separateScreenFocus, wtstr ); -+ -+ activeMouseScreen = new QCheckBox( i18n( "Active &mouse screen" ), fcsBox ); -+ fLay->addWidget( activeMouseScreen ); -+ wtstr = i18n( "When this option is enabled, active Xinerama screen (where for example new windows appear)" -+ " is the screen with the mouse pointer. When disabled, the active Xinerama screen is the screen" -+ " with the focused window. This option is by default disabled for Click to focus and" -+ " enabled for other focus policies." ); -+ QWhatsThis::add( activeMouseScreen, wtstr ); -+ connect(focusCombo, SIGNAL(activated(int)), this, SLOT(updateActiveMouseScreen())); -+ -+ if (!QApplication::desktop()->isVirtualDesktop() || -+ QApplication::desktop()->numScreens() == 1) // No Ximerama -+ { -+ separateScreenFocus->hide(); -+ activeMouseScreen->hide(); -+ } -+ - lay->addWidget(fcsBox); - - kbdBox = new QButtonGroup(i18n("Navigation"), this); -@@ -260,6 +283,8 @@ KFocusConfig::KFocusConfig (bool _standA - connect(fcsBox, SIGNAL(clicked(int)), SLOT(changed())); - connect(autoRaise, SIGNAL(valueChanged(int)), SLOT(changed())); - connect(delayFocus, SIGNAL(valueChanged(int)), SLOT(changed())); -+ connect(separateScreenFocus, SIGNAL(clicked()), SLOT(changed())); -+ connect(activeMouseScreen, SIGNAL(clicked()), SLOT(changed())); - connect(altTabPopup, SIGNAL(clicked()), SLOT(changed())); - connect(traverseAll, SIGNAL(clicked()), SLOT(changed())); - connect(rollOverDesktops, SIGNAL(clicked()), SLOT(changed())); -@@ -366,6 +391,22 @@ void KFocusConfig::delayFocusOnTog(bool - void KFocusConfig::clickRaiseOnTog(bool ) { - } - -+void KFocusConfig::setSeparateScreenFocus(bool s) { -+ separateScreenFocus->setChecked(s); -+} -+ -+void KFocusConfig::setActiveMouseScreen(bool a) { -+ activeMouseScreen->setChecked(a); -+} -+ -+void KFocusConfig::updateActiveMouseScreen() -+{ -+ // on by default for non click to focus policies -+ KConfigGroup cfg( config, "Windows" ); -+ if( !cfg.hasKey( KWIN_ACTIVE_MOUSE_SCREEN )) -+ setActiveMouseScreen( focusCombo->currentItem() != 0 ); -+} -+ - void KFocusConfig::setAltTabMode(bool a) { - altTabPopup->setChecked(a); - } -@@ -412,6 +453,10 @@ void KFocusConfig::load( void ) - setClickRaise(key != "off"); - setAutoRaiseEnabled(); // this will disable/hide the auto raise delay widget if focus==click - setDelayFocusEnabled(); -+ -+ setSeparateScreenFocus( config->readBoolEntry(KWIN_SEPARATE_SCREEN_FOCUS, false)); -+ // on by default for non click to focus policies -+ setActiveMouseScreen( config->readBoolEntry(KWIN_ACTIVE_MOUSE_SCREEN, focusCombo->currentItem() != 0 )); - - key = config->readEntry(KWIN_ALTTABMODE, "KDE"); - setAltTabMode(key == "KDE"); -@@ -467,6 +512,9 @@ void KFocusConfig::save( void ) - else - config->writeEntry(KWIN_CLICKRAISE, "off"); - -+ config->writeEntry(KWIN_SEPARATE_SCREEN_FOCUS, separateScreenFocus->isChecked()); -+ config->writeEntry(KWIN_ACTIVE_MOUSE_SCREEN, activeMouseScreen->isChecked()); -+ - if (altTabPopup->isChecked()) - config->writeEntry(KWIN_ALTTABMODE, "KDE"); - else -@@ -500,6 +548,9 @@ void KFocusConfig::defaults() - setAutoRaise(false); - setDelayFocus(false); - setClickRaise(true); -+ setSeparateScreenFocus( false ); -+ // on by default for non click to focus policies -+ setActiveMouseScreen( focusCombo->currentItem() != 0 ); - setAltTabMode(true); - setTraverseAll( false ); - setRollOverDesktops(true); -Index: kwin/popupinfo.h -=================================================================== ---- kwin/popupinfo.h.orig -+++ kwin/popupinfo.h -@@ -24,7 +24,7 @@ class PopupInfo : public QWidget - { - Q_OBJECT - public: -- PopupInfo( const char *name=0 ); -+ PopupInfo( Workspace* ws, const char *name=0 ); - ~PopupInfo(); - - void reset(); -@@ -43,6 +43,7 @@ class PopupInfo : public QWidget - bool m_show; - bool m_shown; - QString m_infoString; -+ Workspace* workspace; - }; - - } // namespace -Index: kwin/options.cpp -=================================================================== ---- kwin/options.cpp.orig -+++ kwin/options.cpp -@@ -71,6 +71,9 @@ unsigned long Options::updateSettings() - altTabStyle = KDE; // what a default :-) - if ( val == "CDE" ) - altTabStyle = CDE; -+ -+ separateScreenFocus = config->readBoolEntry( "SeparateScreenFocus", false ); -+ activeMouseScreen = config->readBoolEntry( "ActiveMouseScreen", focusPolicy != ClickToFocus ); - - rollOverDesktops = config->readBoolEntry("RollOverDesktops", TRUE); - -@@ -91,9 +94,10 @@ unsigned long Options::updateSettings() - delete gc; - - placement = Placement::policyFromString( config->readEntry("Placement"), true ); -+ xineramaPlacementScreen = KCLAMP( config->readNumEntry( "XineramaPlacementScreen", -1 ), -+ -1, qApp->desktop()->numScreens() - 1 ); - - animateShade = config->readBoolEntry("AnimateShade", TRUE ); -- - animateMinimize = config->readBoolEntry("AnimateMinimize", TRUE ); - animateMinimizeSpeed = config->readNumEntry("AnimateMinimizeSpeed", 5 ); - -Index: kwin/placement.cpp -=================================================================== ---- kwin/placement.cpp.orig -+++ kwin/placement.cpp -@@ -473,7 +473,7 @@ void Placement::placeOnMainWindow(Client - it != mainwindows.end(); - ++it ) - { -- if( (*it)->isSpecialWindow()) -+ if( mainwindows.count() > 1 && (*it)->isSpecialWindow()) - continue; // don't consider toolbars etc when placing - ++mains_count; - place_on2 = *it; -@@ -502,6 +502,11 @@ void Placement::placeOnMainWindow(Client - } - place_on = place_on2; // use the only window filtered together with 'mains_count' - } -+ if( place_on->isDesktop()) -+ { -+ place( c, area, Centered ); -+ return; -+ } - QRect geom = c->geometry(); - geom.moveCenter( place_on->geometry().center()); - c->move( geom.topLeft()); -Index: kwin/client.cpp -=================================================================== ---- kwin/client.cpp.orig -+++ kwin/client.cpp -@@ -1255,6 +1255,20 @@ bool Client::isOnCurrentDesktop() const - return isOnDesktop( workspace()->currentDesktop()); - } - -+int Client::screen() const -+ { -+ if( !options->xineramaEnabled ) -+ return 0; -+ return workspace()->screenNumber( geometry().center()); -+ } -+ -+bool Client::isOnScreen( int screen ) const -+ { -+ if( !options->xineramaEnabled ) -+ return screen == 0; -+ return workspace()->screenGeometry( screen ).intersects( geometry()); -+ } -+ - // performs activation and/or raising of the window - void Client::takeActivity( int flags, bool handled, allowed_t ) - { -Index: kwin/popupinfo.cpp -=================================================================== ---- kwin/popupinfo.cpp.orig -+++ kwin/popupinfo.cpp -@@ -25,7 +25,6 @@ License. See the file "COPYING" for the - #include - #include - #include --#include - #include - #include - -@@ -34,8 +33,8 @@ License. See the file "COPYING" for the - namespace KWinInternal - { - --PopupInfo::PopupInfo( const char *name ) -- : QWidget( 0, name ) -+PopupInfo::PopupInfo( Workspace* ws, const char *name ) -+ : QWidget( 0, name ), workspace( ws ) - { - m_infoString = ""; - m_shown = false; -@@ -60,7 +59,7 @@ PopupInfo::~PopupInfo() - */ - void PopupInfo::reset() - { -- QRect r = KGlobalSettings::desktopGeometry(QCursor::pos()); -+ QRect r = workspace->screenGeometry( workspace->activeScreen()); - - int w = fontMetrics().width( m_infoString ) + 30; - -Index: kwin/geometry.cpp -=================================================================== ---- kwin/geometry.cpp.orig -+++ kwin/geometry.cpp -@@ -211,14 +211,11 @@ void Workspace::updateClientArea() - - \sa geometry() - */ --QRect Workspace::clientArea( clientAreaOption opt, const QPoint& p, int desktop ) const -+QRect Workspace::clientArea( clientAreaOption opt, int screen, int desktop ) const - { - if( desktop == NETWinInfo::OnAllDesktops || desktop == 0 ) - desktop = currentDesktop(); - QDesktopWidget *desktopwidget = KApplication::desktop(); -- int screen = desktopwidget->isVirtualDesktop() ? desktopwidget->screenNumber( p ) : desktopwidget->primaryScreen(); -- if( screen < 0 ) -- screen = desktopwidget->primaryScreen(); - QRect sarea = screenarea // may be NULL during KWin initialization - ? screenarea[ desktop ][ screen ] - : desktopwidget->screenGeometry( screen ); -@@ -263,11 +260,21 @@ QRect Workspace::clientArea( clientAreaO - return QRect(); - } - -+QRect Workspace::clientArea( clientAreaOption opt, const QPoint& p, int desktop ) const -+ { -+ QDesktopWidget *desktopwidget = KApplication::desktop(); -+ int screen = desktopwidget->screenNumber( p ); -+ if( screen < 0 ) -+ screen = desktopwidget->primaryScreen(); -+ return clientArea( opt, screen, desktop ); -+ } -+ - QRect Workspace::clientArea( clientAreaOption opt, const Client* c ) const - { - return clientArea( opt, c->geometry().center(), c->desktop()); - } - -+ - /*! - Client \a c is moved around to position \a pos. This gives the - workspace the opportunity to interveniate and to implement -@@ -896,10 +903,6 @@ void Client::checkWorkspacePosition() - setGeometry( area ); - return; - } -- if( maximizeMode() != MaximizeRestore ) -- // TODO update geom_restore? -- changeMaximize( false, false, true ); // adjust size -- - if( isFullScreen()) - { - QRect area = workspace()->clientArea( FullScreenArea, this ); -@@ -926,6 +929,10 @@ void Client::checkWorkspacePosition() - return; - } - -+ if( maximizeMode() != MaximizeRestore ) -+ // TODO update geom_restore? -+ changeMaximize( false, false, true ); // adjust size -+ - if( !isShade()) // TODO - { - int old_diff_x = workarea_diff_x; -@@ -1722,6 +1729,7 @@ void Client::setGeometry( int x, int y, - sendSyntheticConfigureNotify(); - updateWindowRules(); - checkMaximizeGeometry(); -+ workspace()->checkActiveScreen( this ); - } - - void Client::plainResize( int w, int h, ForceGeometry_t force ) -@@ -1775,6 +1783,7 @@ void Client::plainResize( int w, int h, - sendSyntheticConfigureNotify(); - updateWindowRules(); - checkMaximizeGeometry(); -+ workspace()->checkActiveScreen( this ); - } - - /*! -@@ -1795,6 +1804,7 @@ void Client::move( int x, int y, ForceGe - sendSyntheticConfigureNotify(); - updateWindowRules(); - checkMaximizeGeometry(); -+ workspace()->checkActiveScreen( this ); - } - - -Index: kwin/kwin.kcfg -=================================================================== ---- kwin/kwin.kcfg.orig -+++ kwin/kwin.kcfg -@@ -60,6 +60,9 @@ - - - -+ -+ -+ - - - -Index: kwin/client.h -=================================================================== ---- kwin/client.h.orig -+++ kwin/client.h -@@ -118,6 +118,9 @@ class Client : public QObject, public KD - bool isOnCurrentDesktop() const; - bool isOnAllDesktops() const; - void setOnAllDesktops( bool set ); -+ -+ bool isOnScreen( int screen ) const; // true if it's at least partially there -+ int screen() const; // the screen where the center is - - // !isMinimized() && not hidden, i.e. normally visible on some virtual desktop - bool isShown( bool shaded_is_shown ) const; -Index: kwin/manage.cpp -=================================================================== ---- kwin/manage.cpp.orig -+++ kwin/manage.cpp -@@ -166,7 +166,7 @@ bool Client::manage( Window w, bool isMa - it != mainclients.end(); - ++it ) - { -- if( (*it)->isSpecialWindow()) -+ if( mainclients.count() > 1 && (*it)->isSpecialWindow()) - continue; // don't consider toolbars etc when placing - maincl = *it; - if( (*it)->isOnCurrentDesktop()) -@@ -202,9 +202,14 @@ bool Client::manage( Window w, bool isMa - if( isMapped || session ) - area = workspace()->clientArea( FullArea, geom.center(), desktop()); - else if( options->xineramaPlacementEnabled ) -- area = workspace()->clientArea( PlacementArea, QCursor::pos(), desktop()); -+ { -+ int screen = options->xineramaPlacementScreen; -+ if( screen == -1 ) // active screen -+ screen = asn_data.xinerama() == -1 ? workspace()->activeScreen() : asn_data.xinerama(); -+ area = workspace()->clientArea( PlacementArea, workspace()->screenGeometry( screen ).center(), desktop()); -+ } - else -- area = workspace()->clientArea( PlacementArea, geom.center(), desktop()); -+ area = workspace()->clientArea( PlacementArea, QCursor::pos(), desktop()); - - if( int type = checkFullScreenHack( geom )) - { -Index: kwin/workspace.cpp -=================================================================== ---- kwin/workspace.cpp.orig -+++ kwin/workspace.cpp -@@ -82,6 +82,7 @@ Workspace::Workspace( bool restore ) - QObject (0, "workspace"), - current_desktop (0), - number_of_desktops(0), -+ active_screen (0), - active_popup( NULL ), - active_popup_client( NULL ), - desktop_widget (0), -@@ -202,7 +203,7 @@ Workspace::Workspace( bool restore ) - client_keys = new KGlobalAccel( this ); - initShortcuts(); - tab_box = new TabBox( this ); -- popupinfo = new PopupInfo( ); -+ popupinfo = new PopupInfo( this ); - - init(); - -@@ -304,6 +305,7 @@ void Workspace::init() - NET::WM2ExtendedStrut | - NET::WM2KDETemporaryRules | - NET::WM2ShowingDesktop | -+ NET::WM2FullPlacement | - NET::WM2DesktopLayout | - 0 - , -@@ -1541,6 +1543,83 @@ void Workspace::setDesktopLayout( int, i - { // DCOP-only, unused - } - -+int Workspace::numScreens() const -+ { -+ if( !options->xineramaEnabled ) -+ return 0; -+ return qApp->desktop()->numScreens(); -+ } -+ -+int Workspace::activeScreen() const -+ { -+ if( !options->xineramaEnabled ) -+ return 0; -+ if( !options->activeMouseScreen ) -+ { -+ if( activeClient() != NULL && !activeClient()->isOnScreen( active_screen )) -+ return qApp->desktop()->screenNumber( activeClient()->geometry().center()); -+ return active_screen; -+ } -+ return qApp->desktop()->screenNumber( QCursor::pos()); -+ } -+ -+// check whether a client moved completely out of what's considered the active screen, -+// if yes, set a new active screen -+void Workspace::checkActiveScreen( const Client* c ) -+ { -+ if( !options->xineramaEnabled ) -+ return; -+ if( !c->isActive()) -+ return; -+ if( !c->isOnScreen( active_screen )) -+ active_screen = c->screen(); -+ } -+ -+// called e.g. when a user clicks on a window, set active screen to be the screen -+// where the click occured -+void Workspace::setActiveScreenMouse( QPoint mousepos ) -+ { -+ if( !options->xineramaEnabled ) -+ return; -+ active_screen = qApp->desktop()->screenNumber( mousepos ); -+ } -+ -+QRect Workspace::screenGeometry( int screen ) const -+ { -+ if( !options->xineramaEnabled ) -+ return qApp->desktop()->geometry(); -+ return qApp->desktop()->screenGeometry( screen ); -+ } -+ -+int Workspace::screenNumber( QPoint pos ) const -+ { -+ if( !options->xineramaEnabled ) -+ return 0; -+ return qApp->desktop()->screenNumber( pos ); -+ } -+ -+ -+void Workspace::sendClientToScreen( Client* c, int screen ) -+ { -+ if( c->screen() == screen ) // don't use isOnScreen(), that's true even when only parti -+ // ally -+ return; -+ GeometryUpdatesPostponer blocker( c ); -+ QRect old_sarea = clientArea( MaximizeArea, c ); -+ QRect sarea = clientArea( MaximizeArea, screen, c->desktop()); -+ c->setGeometry( sarea.x() - old_sarea.x() + c->x(), sarea.y() - old_sarea.y() + c->y(), -+ c->size().width(), c->size().height()); -+ c->checkWorkspacePosition(); -+ ClientList transients_stacking_order = ensureStackingOrder( c->transients()); -+ for( ClientList::ConstIterator it = transients_stacking_order.begin(); -+ it != transients_stacking_order.end(); -+ ++it ) -+ sendClientToScreen( *it, screen ); -+ if( c->isActive()) -+ active_screen = screen; -+ } -+ -+ - void Workspace::updateDesktopLayout() - { - // rootInfo->desktopLayoutCorner(); // I don't find this worth bothering, feel free to -Index: kwin/activation.cpp -=================================================================== ---- kwin/activation.cpp.orig -+++ kwin/activation.cpp -@@ -360,6 +360,8 @@ void Workspace::takeActivity( Client* c, - return; - } - c->takeActivity( flags, handled, Allowed ); -+ if( !c->isOnScreen( active_screen )) -+ active_screen = c->screen(); - } - - void Workspace::handleTakeActivity( Client* c, Time /*timestamp*/, int flags ) -@@ -413,6 +415,13 @@ bool Workspace::activateNextClient( Clie - { - if( !(*it)->isShown( false ) || !(*it)->isOnCurrentDesktop()) - continue; -+ if( options->separateScreenFocus ) -+ { -+ if( c != NULL && !(*it)->isOnScreen( c->screen())) -+ continue; -+ if( c == NULL && !(*it)->isOnScreen( activeScreen())) -+ continue; -+ } - if( mainwindows.contains( *it )) - { - get_focus = *it; -@@ -438,6 +447,31 @@ bool Workspace::activateNextClient( Clie - return true; - } - -+void Workspace::setCurrentScreen( int new_screen ) -+ { -+ if (new_screen < 0 || new_screen > numScreens()) -+ return; -+ if ( !options->focusPolicyIsReasonable()) -+ return; -+ closeActivePopup(); -+ Client* get_focus = NULL; -+ for( ClientList::ConstIterator it = focus_chain[currentDesktop()].fromLast(); -+ it != focus_chain[currentDesktop()].end(); -+ --it ) -+ { -+ if( !(*it)->isShown( false ) || !(*it)->isOnCurrentDesktop()) -+ continue; -+ if( !(*it)->screen() == new_screen ) -+ continue; -+ get_focus = *it; -+ break; -+ } -+ if( get_focus == NULL ) -+ get_focus = findDesktop( true, currentDesktop()); -+ if( get_focus != NULL && get_focus != mostRecentlyActivatedClient()) -+ requestFocus( get_focus ); -+ active_screen = new_screen; -+ } - - void Workspace::gotFocusIn( const Client* c ) - { -@@ -860,6 +894,8 @@ void Client::startupIdChanged() - desktop = asn_data.desktop(); - if( !isOnAllDesktops()) - workspace()->sendClientToDesktop( this, desktop, true ); -+ if( asn_data.xinerama() != -1 ) -+ workspace()->sendClientToScreen( this, asn_data.xinerama()); - Time timestamp = asn_id.timestamp(); - if( timestamp == 0 && asn_data.timestamp() != -1U ) - timestamp = asn_data.timestamp(); -Index: kwin/kwinbindings.cpp -=================================================================== ---- kwin/kwinbindings.cpp.orig -+++ kwin/kwinbindings.cpp -@@ -104,6 +104,15 @@ - DEF( I18N_NOOP("Window One Desktop to the Left"), 0, 0, slotWindowToDesktopLeft() ); - DEF( I18N_NOOP("Window One Desktop Up"), 0, 0, slotWindowToDesktopUp() ); - DEF( I18N_NOOP("Window One Desktop Down"), 0, 0, slotWindowToDesktopDown() ); -+ DEF( I18N_NOOP("Window to Screen 0"), 0, 0, slotWindowToScreen(int) ); -+ DEF( I18N_NOOP("Window to Screen 1"), 0, 0, slotWindowToScreen(int) ); -+ DEF( I18N_NOOP("Window to Screen 2"), 0, 0, slotWindowToScreen(int) ); -+ DEF( I18N_NOOP("Window to Screen 3"), 0, 0, slotWindowToScreen(int) ); -+ DEF( I18N_NOOP("Window to Screen 4"), 0, 0, slotWindowToScreen(int) ); -+ DEF( I18N_NOOP("Window to Screen 5"), 0, 0, slotWindowToScreen(int) ); -+ DEF( I18N_NOOP("Window to Screen 6"), 0, 0, slotWindowToScreen(int) ); -+ DEF( I18N_NOOP("Window to Screen 7"), 0, 0, slotWindowToScreen(int) ); -+ DEF( I18N_NOOP("Window to Next Screen"), 0, 0, slotWindowToNextScreen() ); - - keys->insert( "Group:Desktop Switching", i18n("Desktop Switching") ); - DEF( I18N_NOOP("Switch to Desktop 1"), CTRL+Qt::Key_F1, WIN+Qt::Key_F1, slotSwitchToDesktop(int) ); -@@ -132,6 +141,15 @@ - DEF( I18N_NOOP("Switch One Desktop to the Left"), 0, 0, slotSwitchDesktopLeft() ); - DEF( I18N_NOOP("Switch One Desktop Up"), 0, 0, slotSwitchDesktopUp() ); - DEF( I18N_NOOP("Switch One Desktop Down"), 0, 0, slotSwitchDesktopDown() ); -+ DEF( I18N_NOOP("Switch to Screen 0"), 0, 0, slotSwitchToScreen(int) ); -+ DEF( I18N_NOOP("Switch to Screen 1"), 0, 0, slotSwitchToScreen(int) ); -+ DEF( I18N_NOOP("Switch to Screen 2"), 0, 0, slotSwitchToScreen(int) ); -+ DEF( I18N_NOOP("Switch to Screen 3"), 0, 0, slotSwitchToScreen(int) ); -+ DEF( I18N_NOOP("Switch to Screen 4"), 0, 0, slotSwitchToScreen(int) ); -+ DEF( I18N_NOOP("Switch to Screen 5"), 0, 0, slotSwitchToScreen(int) ); -+ DEF( I18N_NOOP("Switch to Screen 6"), 0, 0, slotSwitchToScreen(int) ); -+ DEF( I18N_NOOP("Switch to Screen 7"), 0, 0, slotSwitchToScreen(int) ); -+ DEF( I18N_NOOP("Switch to Next Screen"), 0, 0, slotSwitchToNextScreen() ); - - keys->insert( "Group:Miscellaneous", i18n("Miscellaneous") ); - DEF( I18N_NOOP("Mouse Emulation"), ALT+Qt::Key_F12, 0, slotMouseEmulation() ); diff --git a/opensuse/tdebase/zh_TW.flag.png b/opensuse/tdebase/zh_TW.flag.png deleted file mode 100644 index 472e3376a..000000000 Binary files a/opensuse/tdebase/zh_TW.flag.png and /dev/null differ diff --git a/opensuse/tdelibs/10888-bt.tar.gz b/opensuse/tdelibs/10888-bt.tar.gz deleted file mode 100644 index 8c94be571..000000000 Binary files a/opensuse/tdelibs/10888-bt.tar.gz and /dev/null differ diff --git a/opensuse/tdelibs/3_5_BRANCH.diff b/opensuse/tdelibs/3_5_BRANCH.diff deleted file mode 100644 index 6809b8aea..000000000 --- a/opensuse/tdelibs/3_5_BRANCH.diff +++ /dev/null @@ -1,126 +0,0 @@ -package: kdelibs-3.5.10.tar.bz2 -kdemod: kdelibs -Index: BRANCH_STATUS -=================================================================== ---- /dev/null -+++ BRANCH_STATUS -@@ -0,0 +1,2 @@ -+current HEAD: 859452 -+svn di between //tags/KDE/3.5.10/kdelibs and //branches/KDE/3.5/kdelibs -Index: kinit/start_kdeinit.c -=================================================================== ---- kinit/start_kdeinit.c.orig -+++ kinit/start_kdeinit.c -@@ -44,7 +44,7 @@ static int set_protection( pid_t pid, in - { - char buf[ 1024 ]; - int procfile; -- sprintf( buf, "/proc/%d/oom_adj", pid ); -+ sprintf( buf, "/proc/%d/stat", pid ); - if( !enable ) { - /* Be paranoid and check that the pid we got from the pipe - belongs to this user. */ -@@ -52,6 +52,7 @@ static int set_protection( pid_t pid, in - if( lstat( buf, &st ) < 0 || st.st_uid != getuid()) - return 0; - } -+ sprintf( buf, "/proc/%d/oom_adj", pid ); - procfile = open( buf, O_WRONLY ); - if( procfile >= 0 ) { - if( enable ) -Index: kio/kio/configure.in.in -=================================================================== ---- kio/kio/configure.in.in.orig -+++ kio/kio/configure.in.in -@@ -139,8 +139,30 @@ if test "x$kde_enable_inotify" = "xyes"; - AC_LANG_RESTORE - ]) - -- if test "$kde_cv_have_inotify" = "yes" ; then -+ AC_CACHE_VAL(kde_cv_have_sys_inotify, -+ [ -+ kde_cv_have_sys_inotify=no -+ AC_LANG_SAVE -+ AC_LANG_C -+ -+ AC_TRY_COMPILE( -+ [ -+#include -+ ], -+ [ -+#ifndef IN_ALL_EVENTS -+#error no inotify notification -+#endif -+ ],kde_cv_have_sys_inotify=yes,kde_cv_have_sys_inotify=no) -+ -+ AC_LANG_RESTORE -+ ]) -+ -+ if test "$kde_cv_have_inotify" = "yes" -o "$kde_cv_have_sys_inotify" = "yes"; then - AC_DEFINE_UNQUOTED(HAVE_INOTIFY, 1, [Define if your system has Linux Inode Notification]) -+ if test "$kde_cv_have_sys_inotify" = "yes"; then -+ AC_DEFINE_UNQUOTED(HAVE_SYS_INOTIFY, 1, [Define if your system has glibc support for inotify]) -+ fi - AC_MSG_RESULT(yes) - else - AC_MSG_RESULT(no) -Index: kio/kio/kdirwatch.cpp -=================================================================== ---- kio/kio/kdirwatch.cpp.orig -+++ kio/kio/kdirwatch.cpp -@@ -64,11 +64,13 @@ - // debug - #include - --#ifdef HAVE_INOTIFY -+#ifdef HAVE_SYS_INOTIFY -+#include -+#include -+#elif HAVE_INOTIFY - #include - #include - #include --#include - // Linux kernel headers are documented to not compile - #define _S390_BITOPS_H - #include -@@ -87,7 +89,9 @@ static inline int inotify_rm_watch (int - { - return syscall (__NR_inotify_rm_watch, fd, wd); - } -+#endif - -+#ifdef HAVE_INOTIFY - #ifndef IN_ONLYDIR - #define IN_ONLYDIR 0x01000000 - #endif -@@ -99,7 +103,6 @@ static inline int inotify_rm_watch (int - #ifndef IN_MOVE_SELF - #define IN_MOVE_SELF 0x00000800 - #endif -- - #endif - - #include -Index: kdoctools/customization/pt-BR/user.entities -=================================================================== ---- kdoctools/customization/pt-BR/user.entities.orig -+++ kdoctools/customization/pt-BR/user.entities -@@ -17,7 +17,7 @@ - Esc"> - etc"> - por exemplo"> --FAQ)"> -+FAQ)"> - HTML'> - - Centro de Informações"> -@@ -34,7 +34,7 @@ - esquerdo do mouse"> - meio do mouse"> - Sistema Operacional"> --direto do mouse"> -+direito do mouse"> - Shift"> - bandeja do sistema"> - Tab"> diff --git a/opensuse/tdelibs/CATALOG.kdelibs3.diff b/opensuse/tdelibs/CATALOG.kdelibs3.diff deleted file mode 100644 index 5fac7cf92..000000000 --- a/opensuse/tdelibs/CATALOG.kdelibs3.diff +++ /dev/null @@ -1,139 +0,0 @@ -Index: kdelibs-3.5.10/CATALOG.kdelibs3 -=================================================================== ---- /dev/null -+++ kdelibs-3.5.10/CATALOG.kdelibs3 -@@ -0,0 +1,134 @@ -+-- -+Catalogue for KDE DocBook XML -+ -+Copyright (C) 2001,2002 Frederik Fouvry -+ -+This program is free software; you can redistribute it and/or -+modify it under the terms of the GNU General Public License -+as published by the Free Software Foundation; either version 2 -+of the License, or (at your option) any later version. -+ -+This program is distributed in the hope that it will be useful, -+but WITHOUT ANY WARRANTY; without even the implied warranty of -+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+GNU General Public License for more details. -+ -+You should have received a copy of the GNU General Public License -+along with this program; if not, write to the Free Software -+Foundation, Inc., 51 Franklin Steet, Fifth Floor, Boston, MA 02110-1301, USA. -+ -+Send suggestions, comments, etc. to the KDE DocBook mailing list -+. -+-- -+ -+OVERRIDE YES -+-- SGMLDECL "xml.dcl" -- -+DTDDECL "-//KDE//DTD DocBook XML V4.2-Based Variant V1.1//EN" /usr/share/sgml/opensp/xml.dcl -+DTDDECL "-//KDE//ELEMENTS DocBook XML Hierarchy Redeclarations 2 V1.0//EN" /usr/share/sgml/opensp/xml.dcl -+DTDDECL "-//KDE//ELEMENTS DocBook XML Pool Redeclarations V1.1//EN" /usr/share/sgml/opensp/xml.dcl -+DTDDECL "-//KDE//ELEMENTS DocBook XML Modifications (Restrictions) V1.1//EN" /usr/share/sgml/opensp/xml.dcl -+DTDDECL "-//KDE//ENTITIES DocBook XML General Entity Declarations V1.2//EN" /usr/share/sgml/opensp/xml.dcl -+DTDDECL "-//KDE//ENTITIES DocBook XML General Entity Declarations (Persons) V1.0//EN" /usr/share/sgml/opensp/xml.dcl -+DTDDECL "-//KDE//ENTITIES DocBook XML Localisation Entity Declarations V1.0//EN" /usr/share/sgml/opensp/xml.dcl -+ -+ -- DocBook -- -+ -+-- DocBook 4.2 KDE Variant V1.1 -- -+ -+PUBLIC "-//KDE//DTD DocBook XML V4.2-Based Variant V1.1//EN" -+ "dtd/kdex.dtd" -+PUBLIC "-//KDE//ELEMENTS DocBook XML Hierarchy Redeclarations 2 V1.0//EN" -+ "dtd/rdbhier2.elements" -+PUBLIC "-//KDE//ELEMENTS DocBook XML Pool Redeclarations V1.1//EN" -+ "dtd/rdbpool.elements" -+PUBLIC "-//KDE//ELEMENTS DocBook XML Modifications (Restrictions) V1.1//EN" -+ "dtd/modifications.elements" -+ -+PUBLIC "-//KDE//ENTITIES DocBook XML General Entity Declarations V1.2//EN" -+ "entities/general.entities" -+PUBLIC "-//KDE//ENTITIES DocBook XML General Entity Declarations (Persons) V1.0//EN" -+ "entities/contributor.entities" -+ -+ -- General KDE Entities -- -+ -+PUBLIC "-//KDE//ENTITIES DocBook XML Localisation Entity Declarations V1.0//EN" -+ "entities/l10n.entities" -+ -+ -- Various external files -- -+ -+-- only DocBook XML files are in entities, the others are in -+ kdelibs/doc/common or in kdelibs/licenses -- -+ -+PUBLIC "-//GNU//DOCUMENT GNU General Public License V2//EN" -+ "entities/gpl-license" -+PUBLIC "-//GNU//DOCUMENT GNU Lesser General Public License V2.1//EN" -+ "entities/lgpl-license" -+PUBLIC "-//GNU//DOCUMENT GNU Free Documentation License V1.1//EN" -+ "entities/fdl-license" -+PUBLIC "-//KDE//DOCUMENT X11 License//EN" -+ "entities/x11-license" -+PUBLIC "-//KDE//DOCUMENT BSD License//EN" -+ "entities/bsd-license" -+PUBLIC "-//KDE//DOCUMENT Artistic License//EN" -+ "entities/artistic-license" -+ -+CATALOG af/catalog -+CATALOG bg/catalog -+CATALOG ca/catalog -+CATALOG cs/catalog -+CATALOG da/catalog -+CATALOG de/catalog -+CATALOG el/catalog -+CATALOG en/catalog -+CATALOG en-GB/catalog -+CATALOG es/catalog -+CATALOG et/catalog -+CATALOG fi/catalog -+CATALOG fo/catalog -+CATALOG fr/catalog -+CATALOG he/catalog -+CATALOG hu/catalog -+CATALOG id/catalog -+CATALOG it/catalog -+CATALOG ja/catalog -+CATALOG ko/catalog -+CATALOG lt/catalog -+CATALOG nl/catalog -+CATALOG no/catalog -- considered to be the same as nb -- -+CATALOG nn/catalog -- incorrectly known as no_NY -- -+CATALOG pl/catalog -+CATALOG pt-BR/catalog -+CATALOG pt/catalog -+CATALOG ro/catalog -+CATALOG ru/catalog -+CATALOG sk/catalog -+CATALOG sl/catalog -+CATALOG sr/catalog -+CATALOG sv/catalog -+CATALOG tr/catalog -+CATALOG uk/catalog -+CATALOG wa/catalog -+CATALOG xh/catalog -+CATALOG zh-CN/catalog -+CATALOG zh-TW/catalog -+ -+-- DocBook 4.1.2 KDE Variant V1.1 -- -+ -+PUBLIC "-//KDE//DTD DocBook XML V4.1.2-Based Variant V1.1//EN" -+ "obsolete/kdex.dtd" -+PUBLIC "-//KDE//ENTITIES DocBook XML General Entity Declarations V1.1//EN" -+ "obsolete/general.entities" -+PUBLIC "-//KDE//ELEMENTS DocBook XML Pool Redeclarations V1.0//EN" -+ "obsolete/rdbpool.elements" -+PUBLIC "-//KDE//ELEMENTS DocBook XML Modifications V1.0//EN" -+ "obsolete/modifications.elements" -+ -+-- DocBook 4.1.2 KDE Variant V1.0 -- -+ -+PUBLIC "-//KDE//DTD DocBook XML V4.1.2-Based Variant V1.0//EN" -+ "obsolete/kdex-412-10.dtd" -+ -+-- DocBook 4.1 KDE Variant V1.0 -- -+ -+PUBLIC "-//KDE//DTD DocBook XML V4.1-Based Variant V1.0//EN" -+ "obsolete/kdex-412-10.dtd" diff --git a/opensuse/tdelibs/add-suse-translations.diff b/opensuse/tdelibs/add-suse-translations.diff deleted file mode 100644 index 2cb8ce8cb..000000000 --- a/opensuse/tdelibs/add-suse-translations.diff +++ /dev/null @@ -1,14 +0,0 @@ -Index: kdecore/klocale.cpp -=================================================================== ---- kdecore/klocale.cpp.orig -+++ kdecore/klocale.cpp -@@ -131,6 +131,9 @@ void KLocale::initMainCatalogues(const Q - d->catalogNames.append( mainCatalogue ); // application catalog - d->catalogNames.append( SYSTEM_MESSAGES ); // always include kdelibs.mo - d->catalogNames.append( "kio" ); // always include kio.mo -+ KGlobal::dirs()->addResourceDir("locale", "/usr/share/locale"); -+ d->catalogNames.append( "desktop_translations" ); -+ d->catalogNames.append( "susetranslations" ); - updateCatalogues(); // evaluate this for all languages - } - } diff --git a/opensuse/tdelibs/admin.diff b/opensuse/tdelibs/admin.diff deleted file mode 100644 index 8abac2426..000000000 --- a/opensuse/tdelibs/admin.diff +++ /dev/null @@ -1,55 +0,0 @@ -Index: admin/acinclude.m4.in -=================================================================== ---- admin/acinclude.m4.in.orig -+++ admin/acinclude.m4.in -@@ -4988,6 +4988,7 @@ AC_DEFUN([KDE_SET_PREFIX_CORE], - fi - # And delete superfluous '/' to make compares easier - prefix=`echo "$prefix" | sed 's,//*,/,g' | sed -e 's,/$,,'` -+ kde_libs_htmldir=$prefix/share/doc/HTML/ - exec_prefix=`echo "$exec_prefix" | sed 's,//*,/,g' | sed -e 's,/$,,'` - - kde_libs_prefix='$(prefix)' -Index: admin/detect-autoconf.pl -=================================================================== ---- admin/detect-autoconf.pl.orig -+++ admin/detect-autoconf.pl -@@ -216,7 +216,7 @@ $unsermake = ""; - # backward compatible: if $UNSERMAKE points to a path, use it - $unsermake = findProgram('unsermake') if (defined($ENV{'UNSERMAKE'}) and $ENV{'UNSERMAKE'} =~ /\//); - # new compatible: if it says 'yes', use the one from path --$unsermake = which('unsermake') if ($ENV{'UNSERMAKE'} ne 'no'); -+$unsermake = which('unsermake') if ($ENV{'UNSERMAKE'} eq 'yes'); - - ($automake_suffix) = $automake =~ /.*automake(.*)$/; - - ---- admin/cvs.sh -+++ admin/cvs.sh -@@ -32,7 +32,7 @@ check_autotool_versions() - required_autoconf_version="2.53 or newer" - AUTOCONF_VERSION=`$AUTOCONF --version | head -n 1` - case $AUTOCONF_VERSION in -- Autoconf*2.5* | autoconf*2.5* | autoconf*2.6* ) : ;; -+ autoconf* ) : ;; - "" ) - echo "*** AUTOCONF NOT FOUND!." - echo "*** KDE requires autoconf $required_autoconf_version" -@@ -47,7 +47,7 @@ esac - - AUTOHEADER_VERSION=`$AUTOHEADER --version | head -n 1` - case $AUTOHEADER_VERSION in -- Autoconf*2.5* | autoheader*2.5* | autoheader*2.6* ) : ;; -+ autoheader* ) : ;; - "" ) - echo "*** AUTOHEADER NOT FOUND!." - echo "*** KDE requires autoheader $required_autoconf_version" -@@ -68,7 +68,7 @@ case $AUTOMAKE_STRING in - echo "*** KDE requires automake $required_automake_version" - exit 1 - ;; -- automake*1.6.* | automake*1.7* | automake*1.8* | automake*1.9* | automake*1.10*) -+ automake*) - echo "*** $AUTOMAKE_STRING found." - UNSERMAKE=no - ;; diff --git a/opensuse/tdelibs/admin.tar.bz2 b/opensuse/tdelibs/admin.tar.bz2 deleted file mode 100644 index 7a2e55a1e..000000000 Binary files a/opensuse/tdelibs/admin.tar.bz2 and /dev/null differ diff --git a/opensuse/tdelibs/allow-man-setgid.diff b/opensuse/tdelibs/allow-man-setgid.diff deleted file mode 100644 index 51a47d720..000000000 --- a/opensuse/tdelibs/allow-man-setgid.diff +++ /dev/null @@ -1,32 +0,0 @@ -Index: kdecore/kapplication.cpp -=================================================================== ---- kdecore/kapplication.cpp.orig -+++ kdecore/kapplication.cpp -@@ -87,6 +87,8 @@ - #include - #endif - #include -+#include -+#include - - #ifndef Q_WS_WIN - #include "kwin.h" -@@ -776,10 +778,15 @@ void KApplication::init(bool GUIenabled) - { - d->guiEnabled = GUIenabled; - if ((getuid() != geteuid()) || -- (getgid() != getegid())) -+ (getgid() != getegid()) ) - { -- fprintf(stderr, "The KDE libraries are not designed to run with suid privileges.\n"); -- ::exit(127); -+ // man permissions are not exploitable and better than -+ // world writable directories -+ struct group *man = getgrnam("man"); -+ if ( !man || man->gr_gid != getegid() ){ -+ fprintf(stderr, "The KDE libraries are not designed to run with suid privileges.\n"); -+ ::exit(127); -+ } - } - - KProcessController::ref(); diff --git a/opensuse/tdelibs/api_docu_description b/opensuse/tdelibs/api_docu_description deleted file mode 100644 index 8c26424dd..000000000 --- a/opensuse/tdelibs/api_docu_description +++ /dev/null @@ -1,36 +0,0 @@ -arts:KDE bindings for arts including knotify -dcop:The DCOP communications library -interfaces:Defines interfaces for common components so that new implementations can be dropped in -kabc:Access to the KDE address book -kate:Interfaces for the standard text editor KPart -kdecore: Core KDE classes that are not related to the user interface -kded:The KDE daemon interface, to observe your file system -kdejava:The KDE Java enviroment -kdeprint:High level printer control functionality -kdeui:KDE User interface classes such as widgets -kfile:High level access to the KDE network aware file abstraction -khtml:The KDE HTML component -kio:Low level access to network files. Also provides access to facilities such as KDirWatcher which monitors directories for changes -kjs:Javascript (aka. ECMAScript and JScript) support -kparts:Support for re-usable, embeddable, extendable applications -kspell:Easy access to the spell checker -kspell2:Easy access to the spell checker -kdefx:A library with pixmap effects -kssl:KDE secure socket layer interface -kutils:High-level utils, like search/replace support -kmdi:MultiDocument Interface library -kresources:The KDE resources system -kwallet:KDE password manager classes -kdeprint:High level printer control functionality -libkmid:Midi library -knewstuff:Upload and download of application data -dnssd:mDNS support library to request and register network services -kdemm:KDE Multimedia Framework -kcmshell:KControl module shell -kdesu:Change user helper framework -kdoctools:Documentation support -kimgio:Image Handlers -kinit:KDEinit support -kioslave:Basic IO slaves -kunittest:Support for unit tests -libkscreensaver:KDE screensavers diff --git a/opensuse/tdelibs/applications.menu-fallback.diff b/opensuse/tdelibs/applications.menu-fallback.diff deleted file mode 100644 index 69450dad8..000000000 --- a/opensuse/tdelibs/applications.menu-fallback.diff +++ /dev/null @@ -1,19 +0,0 @@ -Index: kded/kbuildsycoca.cpp -=================================================================== ---- kded/kbuildsycoca.cpp.orig -+++ kded/kbuildsycoca.cpp -@@ -378,8 +378,12 @@ bool KBuildSycoca::build() - - connect(g_vfolder, SIGNAL(newService(const QString &, KService **)), - this, SLOT(slotCreateEntry(const QString &, KService **))); -- -- VFolderMenu::SubMenu *kdeMenu = g_vfolder->parseMenu("applications.menu", true); -+ -+ VFolderMenu::SubMenu *kdeMenu; -+ if ( QFile::exists( "/etc/xdg/menus/applications.menu" ) ) -+ kdeMenu = g_vfolder->parseMenu("applications.menu", true); -+ else -+ kdeMenu = g_vfolder->parseMenu("applications.menu.kde", true); - - KServiceGroup *entry = g_bsgf->addNew("/", kdeMenu->directoryFile, 0, false); - entry->setLayoutInfo(kdeMenu->layoutList); diff --git a/opensuse/tdelibs/arts-acinclude.patch b/opensuse/tdelibs/arts-acinclude.patch deleted file mode 100644 index 0610d6df5..000000000 --- a/opensuse/tdelibs/arts-acinclude.patch +++ /dev/null @@ -1,66 +0,0 @@ -2009-12-10 Stepan Kasal - -The change of implementation of AC_REQUIRE in 2.64 caused a regression -in the arts project. -This can be fixed by shuffling some macro calls. - -I suppose that most of this patch will not be needed with a future -release of Autoconf. -But the last chunk of this patch is a real bug in this source and -should go upstream. - ---- arts-1.5.10/admin/acinclude.m4.in 2008-08-20 18:07:05.000000000 +0200 -+++ arts-1.5.10/admin/acinclude.m4.in 2009-12-09 17:30:57.000000000 +0100 -@@ -3081,8 +3081,18 @@ - fi - ]) - -+AC_DEFUN([AC_CHECK_COMPILERS_CC], -+[ -+ dnl this prevents stupid AC_PROG_CC to add "-g" to the default CFLAGS -+ CFLAGS=" $CFLAGS" -+ AC_PROG_CC -+ CXXFLAGS=" $CXXFLAGS" -+ AC_PROG_CXX -+]) -+ - AC_DEFUN([AC_CHECK_COMPILERS], - [ -+ AC_REQUIRE([AC_CHECK_COMPILERS_CC]) - AC_ARG_ENABLE(debug, - AC_HELP_STRING([--enable-debug=ARG],[enables debug symbols (yes|no|full) [default=no]]), - [ -@@ -3141,11 +3151,6 @@ - [kde_use_profiling="no"] - ) - -- dnl this prevents stupid AC_PROG_CC to add "-g" to the default CFLAGS -- CFLAGS=" $CFLAGS" -- -- AC_PROG_CC -- - AC_PROG_CPP - - if test "$GCC" = "yes"; then -@@ -3174,10 +3179,6 @@ - LDFLAGS="" - fi - -- CXXFLAGS=" $CXXFLAGS" -- -- AC_PROG_CXX -- - KDE_CHECK_FOR_BAD_COMPILER - - if test "$GXX" = "yes" || test "$CXX" = "KCC"; then -@@ -3503,8 +3504,8 @@ - AC_REQUIRE([AC_LIBTOOL_DLOPEN]) - AC_REQUIRE([KDE_CHECK_LIB64]) - --AC_OBJEXT --AC_EXEEXT -+AC_REQUIRE([AC_OBJEXT]) -+AC_REQUIRE([AC_EXEEXT]) - - AM_PROG_LIBTOOL - AC_LIBTOOL_CXX diff --git a/opensuse/tdelibs/artwork.diff b/opensuse/tdelibs/artwork.diff deleted file mode 100644 index 0c6742d22..000000000 --- a/opensuse/tdelibs/artwork.diff +++ /dev/null @@ -1,46 +0,0 @@ -Index: kdecore/eventsrc -=================================================================== ---- kdecore/eventsrc.orig -+++ kdecore/eventsrc -@@ -2572,7 +2572,7 @@ Comment[wa]=On messaedje critike est hÃ¥ - Comment[zh_CN]=æ­£åœ¨æ˜¾ç¤ºå…³é”®æ¶ˆæ¯ - Comment[zh_HK]=顯示嚴é‡è­¦å‘Šè¨Šæ¯ - Comment[zh_TW]=åš´é‡çš„警告訊æ¯å·²é¡¯ç¤º --default_sound=KDE_Glass_Break.ogg -+default_sound=KDE_Error_1.ogg - default_presentation=65 - nopresentation=18 - level=4 -Index: mimetypes/application/x-bittorrent.desktop -=================================================================== ---- mimetypes/application/x-bittorrent.desktop.orig -+++ mimetypes/application/x-bittorrent.desktop -@@ -1,4 +1,5 @@ - [Desktop Entry] -+Icon=torrent - Comment=BitTorrent Download - Comment[af]=BitTorrent Aflaai - Comment[ar]=مل٠تنزيل BitTorrent -Index: mimetypes/application/x-msdos-program.desktop -=================================================================== ---- mimetypes/application/x-msdos-program.desktop.orig -+++ mimetypes/application/x-msdos-program.desktop -@@ -85,5 +85,5 @@ MimeType=application/x-msdos-program - X-KDE-IsAlso=application/x-executable - [Property::X-KDE-NativeExtension] - Type=QString --Value=.exe -+Value=.exe;.EXE; - -Index: kresources/kresources.desktop -=================================================================== ---- kresources/kresources.desktop.orig -+++ kresources/kresources.desktop -@@ -1,6 +1,6 @@ - [Desktop Entry] - Exec=kcmshell kresources --Icon=date -+Icon=about_kde - Type=Application - Terminal=false - diff --git a/opensuse/tdelibs/autostart-spec.diff b/opensuse/tdelibs/autostart-spec.diff deleted file mode 100644 index a67a8e487..000000000 --- a/opensuse/tdelibs/autostart-spec.diff +++ /dev/null @@ -1,55 +0,0 @@ -Index: kdecore/kstandarddirs.cpp -=================================================================== ---- kdecore/kstandarddirs.cpp.orig -+++ kdecore/kstandarddirs.cpp -@@ -100,7 +100,7 @@ static const char* const types[] = {"htm - "wallpaper", "lib", "pixmap", "templates", - "module", "qtplugins", - "xdgdata-apps", "xdgdata-dirs", "xdgconf-menu", -- "xdgdata-icon", "xdgdata-pixmap", -+ "xdgdata-icon", "xdgdata-pixmap", "xdgconf-autostart", - "kcfg", "emoticons", 0 }; - - static int tokenize( QStringList& token, const QString& str, -@@ -1067,6 +1067,8 @@ QString KStandardDirs::kde_default(const - return "desktop-directories/"; - if (!strcmp(type, "xdgconf-menu")) - return "menus/"; -+ if (!strcmp(type, "xdgconf-autostart")) -+ return "autostart/"; - if (!strcmp(type, "kcfg")) - return "share/config.kcfg"; - if (!strcmp(type, "emoticons")) -Index: kinit/autostart.cpp -=================================================================== ---- kinit/autostart.cpp.orig -+++ kinit/autostart.cpp -@@ -104,7 +104,9 @@ static bool startCondition(const QString - void - AutoStart::loadAutoStartList() - { -- QStringList files = KGlobal::dirs()->findAllResources("autostart", "*.desktop", false, true); -+ QStringList files = KGlobal::dirs()->findAllResources("xdgconf-autostart", "*.desktop", false, true); -+ QStringList kdefiles = KGlobal::dirs()->findAllResources("autostart", "*.desktop", false, true); -+ files += kdefiles; - - for(QStringList::ConstIterator it = files.begin(); - it != files.end(); -@@ -129,6 +131,17 @@ AutoStart::loadAutoStartList() - continue; - } - -+ if (config.hasKey("OnlyShowIn")) -+ { -+ if (!config.readListEntry("OnlyShowIn", ';').contains("KDE")) -+ continue; -+ } -+ if (config.hasKey("NotShowIn")) -+ { -+ if (config.readListEntry("NotShowIn", ';').contains("KDE")) -+ continue; -+ } -+ - AutoStartItem *item = new AutoStartItem; - item->name = extractName(*it); - item->service = *it; diff --git a/opensuse/tdelibs/avahi-pidfile.diff b/opensuse/tdelibs/avahi-pidfile.diff deleted file mode 100644 index 62cd3d8da..000000000 --- a/opensuse/tdelibs/avahi-pidfile.diff +++ /dev/null @@ -1,13 +0,0 @@ -Index: dnssd/servicebrowser.cpp -=================================================================== ---- dnssd/servicebrowser.cpp.orig -+++ dnssd/servicebrowser.cpp -@@ -30,7 +30,7 @@ - #include - #endif - --#define MDNSD_PID "/var/run/mdnsd.pid" -+#define MDNSD_PID "/var/run/avahi-daemon/pid" - - namespace DNSSD - { diff --git a/opensuse/tdelibs/baselibs.conf b/opensuse/tdelibs/baselibs.conf deleted file mode 100644 index 903729278..000000000 --- a/opensuse/tdelibs/baselibs.conf +++ /dev/null @@ -1,3 +0,0 @@ -tdelibs -tdelibs-arts -tdelibs-default-style diff --git a/opensuse/tdelibs/bnc557126.diff b/opensuse/tdelibs/bnc557126.diff deleted file mode 100644 index 0782537b9..000000000 --- a/opensuse/tdelibs/bnc557126.diff +++ /dev/null @@ -1,21 +0,0 @@ ------------------------------------------------------------------------- -r1052100 | mueller | 2009-11-20 19:35:00 +0000 (Fri, 20 Nov 2009) | 2 lines -Changed paths: - M /branches/KDE/4.3/kdelibs/kjs/dtoa.cpp - -fix array overrun (CVE-2009-0689) - ------------------------------------------------------------------------- -Index: dtoa.cpp -=================================================================== ---- kjs/dtoa.cpp (revision 1052099) -+++ kjs/dtoa.cpp (revision 1052100) -@@ -457,7 +457,7 @@ - #define FREE_DTOA_LOCK(n) /*nothing*/ - #endif - --#define Kmax 15 -+#define Kmax (sizeof(size_t) << 3) - - struct - Bigint { diff --git a/opensuse/tdelibs/bug-382959_kabc_fix_vcardparser.patch b/opensuse/tdelibs/bug-382959_kabc_fix_vcardparser.patch deleted file mode 100644 index f7c3ee78d..000000000 --- a/opensuse/tdelibs/bug-382959_kabc_fix_vcardparser.patch +++ /dev/null @@ -1,562 +0,0 @@ -Index: kabc/vcardconverter.cpp -=================================================================== ---- kabc/vcardconverter.cpp.orig -+++ kabc/vcardconverter.cpp -@@ -51,6 +51,14 @@ QString VCardConverter::createVCard( con - return createVCards( list, version ); - } - -+QCString VCardConverter::createVCardRaw( const Addressee &addr, Version version ) -+{ -+ Addressee::List list; -+ list.append( addr ); -+ -+ return createVCardsRaw( list, version ); -+} -+ - QString VCardConverter::createVCards( Addressee::List list, Version version ) - { - VCardTool tool; -@@ -58,6 +66,13 @@ QString VCardConverter::createVCards( Ad - return tool.createVCards( list, ( version == v3_0 ? VCard::v3_0 : VCard::v2_1 ) ); - } - -+QCString VCardConverter::createVCardsRaw( Addressee::List list, Version version ) -+{ -+ VCardTool tool; -+ -+ return tool.createVCardsRaw( list, ( version == v3_0 ? VCard::v3_0 : VCard::v2_1 ) ); -+} -+ - Addressee VCardConverter::parseVCard( const QString& vcard ) - { - Addressee::List list = parseVCards( vcard ); -@@ -65,6 +80,13 @@ Addressee VCardConverter::parseVCard( co - return list[ 0 ]; - } - -+Addressee VCardConverter::parseVCardRaw( const QCString& vcard ) -+{ -+ Addressee::List list = parseVCardsRaw( vcard ); -+ -+ return list[ 0 ]; -+} -+ - Addressee::List VCardConverter::parseVCards( const QString& vcard ) - { - VCardTool tool; -@@ -72,6 +94,13 @@ Addressee::List VCardConverter::parseVCa - return tool.parseVCards( vcard ); - } - -+Addressee::List VCardConverter::parseVCardsRaw( const QCString& vcard ) -+{ -+ VCardTool tool; -+ -+ return tool.parseVCardsRaw( vcard ); -+} -+ - // ---------------------------- deprecated stuff ---------------------------- // - - bool VCardConverter::vCardToAddressee( const QString &str, Addressee &addr, Version version ) -Index: kabc/vcardconverter.h -=================================================================== ---- kabc/vcardconverter.h.orig -+++ kabc/vcardconverter.h -@@ -82,6 +82,7 @@ class KABC_EXPORT VCardConverter - @param version The version of the generated vCard format - */ - QString createVCard( const Addressee &addr, Version version = v3_0 ); -+ QCString createVCardRaw( const Addressee &addr, Version version = v3_0 ); - - /** - Creates a string in vCard format which contains the given -@@ -92,6 +93,7 @@ class KABC_EXPORT VCardConverter - */ - // FIXME: Add error handling - QString createVCards( Addressee::List list, Version version = v3_0 ); -+ QCString createVCardsRaw( Addressee::List list, Version version = v3_0 ); - - // FIXME: Add "createVCards( AddressBook * )" - -@@ -99,12 +101,14 @@ class KABC_EXPORT VCardConverter - Parses a string in vCard format and returns the first contact. - */ - Addressee parseVCard( const QString& vcard ); -+ Addressee parseVCardRaw( const QCString& vcard ); - - /** - Parses a string in vCard format and returns a list of contact objects. - */ - // FIXME: Add error handling - Addressee::List parseVCards( const QString& vcard ); -+ Addressee::List parseVCardsRaw( const QCString& vcard ); - - // FIXME: Add "bool parseVCards( AddressBook *, const QString &vcard )" - -Index: kabc/vcardformatplugin.cpp -=================================================================== ---- kabc/vcardformatplugin.cpp.orig -+++ kabc/vcardformatplugin.cpp -@@ -38,14 +38,11 @@ VCardFormatPlugin::~VCardFormatPlugin() - - bool VCardFormatPlugin::load( Addressee &addressee, QFile *file ) - { -- QString data; -- -- QTextStream t( file ); -- t.setEncoding( QTextStream::Latin1 ); -- data = t.read(); -+ const QByteArray rawData = file->readAll(); -+ const QCString data( rawData.data(), rawData.size() ); - - VCardConverter converter; -- Addressee::List l = converter.parseVCards( data ); -+ Addressee::List l = converter.parseVCardsRaw( data ); - - if ( ! l.first().isEmpty() ) { - addressee = l.first(); -@@ -57,15 +54,11 @@ bool VCardFormatPlugin::load( Addressee - - bool VCardFormatPlugin::loadAll( AddressBook*, Resource *resource, QFile *file ) - { -- QString data; -- -- QTextStream t( file ); -- t.setEncoding( QTextStream::Latin1 ); -- data = t.read(); -+ const QByteArray rawData = file->readAll(); -+ const QCString data( rawData.data(), rawData.size() ); - - VCardConverter converter; -- -- Addressee::List l = converter.parseVCards( data ); -+ Addressee::List l = converter.parseVCardsRaw( data ); - - Addressee::List::iterator itr; - for ( itr = l.begin(); itr != l.end(); ++itr) { -@@ -86,9 +79,8 @@ void VCardFormatPlugin::save( const Addr - - vcardlist.append( addressee ); - -- QTextStream t( file ); -- t.setEncoding( QTextStream::UnicodeUTF8 ); -- t << converter.createVCards( vcardlist ); -+ const QCString data = converter.createVCardsRaw( vcardlist ); -+ file->writeBlock( data, data.length() ); - } - - void VCardFormatPlugin::saveAll( AddressBook*, Resource *resource, QFile *file ) -@@ -102,9 +94,8 @@ void VCardFormatPlugin::saveAll( Address - vcardlist.append( *it ); - } - -- QTextStream t( file ); -- t.setEncoding( QTextStream::UnicodeUTF8 ); -- t << converter.createVCards( vcardlist ); -+ const QCString data = converter.createVCardsRaw( vcardlist ); -+ file->writeBlock( data, data.length() ); - } - - bool VCardFormatPlugin::checkFormat( QFile *file ) const -Index: kabc/vcardparser/vcardparser.cpp -=================================================================== ---- kabc/vcardparser/vcardparser.cpp.orig -+++ kabc/vcardparser/vcardparser.cpp -@@ -18,10 +18,13 @@ - Boston, MA 02110-1301, USA. - */ - -+#include - #include - #include -+#include - - #include -+#include - - #include "vcardparser.h" - -@@ -29,25 +32,60 @@ - - using namespace KABC; - --static QString backslash( "\\\\" ); --static QString comma( "\\," ); --static QString newline( "\\n" ); --static QString cr( "\\r" ); -+typedef QValueList QCStringList; - --static void addEscapes( QString &str ) -+QValueList splitCString( const QCString &str, char sep ) - { -- str.replace( '\\', backslash ); -- str.replace( ',', comma ); -- str.replace( '\r', cr ); -- str.replace( '\n', newline ); -+ QValueList list; -+ int start = 0; -+ int end; -+ while ((end = str.find(sep, start)) != -1) { -+ list.append(str.mid(start, end - start)); -+ start = end + 1; -+ } -+ list.append(str.mid(start)); -+ -+ return list; -+} -+ -+QValueList splitCString( const QCString &str, const QRegExp &exp ) -+{ -+ QValueList list; -+ int start = 0; -+ int end; -+ while ((end = str.find(exp, start)) != -1) { -+ list.append(str.mid(start, end - start)); -+ start = end + 1; -+ } -+ list.append(str.mid(start)); -+ -+ return list; -+} -+ -+bool cStringStartsWith( const QCString &str, const QCString &pattern ) -+{ -+ const int length = pattern.length(); -+ if ( length == 0 ) -+ return true; -+ -+ const QCString part = str.left( length ); -+ return (pattern == part); - } - --static void removeEscapes( QString &str ) -+static void addEscapes( QCString &str ) - { -- str.replace( cr, "\\r" ); -- str.replace( newline, "\n" ); -- str.replace( comma, "," ); -- str.replace( backslash, "\\" ); -+ str.replace( '\\', "\\\\" ); -+ str.replace( ',', "\\," ); -+ str.replace( '\r', "\\r" ); -+ str.replace( '\n', "\\n" ); -+} -+ -+static void removeEscapes( QCString &str ) -+{ -+ str.replace( "\\r", "\r" ); -+ str.replace( "\\n", "\n" ); -+ str.replace( "\\,", "," ); -+ str.replace( "\\\\", "\\" ); - } - - VCardParser::VCardParser() -@@ -60,24 +98,29 @@ VCardParser::~VCardParser() - - VCard::List VCardParser::parseVCards( const QString& text ) - { -+ return parseVCardsRaw( text.utf8() ); -+} -+ -+VCard::List VCardParser::parseVCardsRaw( const QCString& text ) -+{ - static QRegExp sep( "[\x0d\x0a]" ); - - VCard currentVCard; - VCard::List vCardList; -- QString currentLine; -+ QCString currentLine; - -- const QStringList lines = QStringList::split( sep, text ); -- QStringList::ConstIterator it; -+ const QCStringList lines = splitCString( text, sep ); -+ QCStringList::ConstIterator it; - - bool inVCard = false; -- QStringList::ConstIterator linesEnd( lines.end() ); -+ QCStringList::ConstIterator linesEnd( lines.end() ); - for ( it = lines.begin(); it != linesEnd; ++it ) { - - if ( (*it).isEmpty() ) // empty line - continue; - - if ( (*it)[ 0 ] == ' ' || (*it)[ 0 ] == '\t' ) { // folded line => append to previous -- currentLine += QString( *it ).remove( 0, 1 ); -+ currentLine.append( (*it).mid( 1 ) ); - continue; - } else { - if ( inVCard && !currentLine.isEmpty() ) { // now parse the line -@@ -88,23 +131,23 @@ VCard::List VCardParser::parseVCards( co - } - - VCardLine vCardLine; -- const QString key = currentLine.left( colon ).stripWhiteSpace(); -- QString value = currentLine.mid( colon + 1 ); -+ const QCString key = currentLine.left( colon ).stripWhiteSpace(); -+ QCString value = currentLine.mid( colon + 1 ); - -- QStringList params = QStringList::split( ';', key ); -+ QCStringList params = splitCString( key, ';' ); - - // check for group - if ( params[0].find( '.' ) != -1 ) { -- const QStringList groupList = QStringList::split( '.', params[0] ); -- vCardLine.setGroup( groupList[0] ); -- vCardLine.setIdentifier( groupList[1] ); -+ const QCStringList groupList = splitCString( params[0], '.' ); -+ vCardLine.setGroup( QString::fromLatin1( groupList[0] ) ); -+ vCardLine.setIdentifier( QString::fromLatin1( groupList[1] ) ); - } else -- vCardLine.setIdentifier( params[0] ); -+ vCardLine.setIdentifier( QString::fromLatin1( params[0] ) ); - - if ( params.count() > 1 ) { // find all parameters -- QStringList::ConstIterator paramIt = params.begin(); -+ QCStringList::ConstIterator paramIt = params.begin(); - for ( ++paramIt; paramIt != params.end(); ++paramIt ) { -- QStringList pair = QStringList::split( '=', *paramIt ); -+ QCStringList pair = splitCString( *paramIt, '=' ); - if ( pair.size() == 1 ) { - // correct the fucking 2.1 'standard' - if ( pair[0].lower() == "quoted-printable" ) { -@@ -119,12 +162,12 @@ VCard::List VCardParser::parseVCards( co - } - // This is pretty much a faster pair[1].contains( ',' )... - if ( pair[1].find( ',' ) != -1 ) { // parameter in type=x,y,z format -- const QStringList args = QStringList::split( ',', pair[ 1 ] ); -- QStringList::ConstIterator argIt; -+ const QCStringList args = splitCString( pair[ 1 ], ',' ); -+ QCStringList::ConstIterator argIt; - for ( argIt = args.begin(); argIt != args.end(); ++argIt ) -- vCardLine.addParameter( pair[0].lower(), *argIt ); -+ vCardLine.addParameter( QString::fromLatin1( pair[0].lower() ), QString::fromLatin1( *argIt ) ); - } else -- vCardLine.addParameter( pair[0].lower(), pair[1] ); -+ vCardLine.addParameter( QString::fromLatin1( pair[0].lower() ), QString::fromLatin1( pair[1] ) ); - } - } - -@@ -133,10 +176,8 @@ VCard::List VCardParser::parseVCards( co - QByteArray output; - bool wasBase64Encoded = false; - -- params = vCardLine.parameterList(); -- if ( params.findIndex( "encoding" ) != -1 ) { // have to decode the data -- QByteArray input; -- input = QCString(value.latin1()); -+ if ( vCardLine.parameterList().findIndex( "encoding" ) != -1 ) { // have to decode the data -+ QByteArray input = value; - if ( vCardLine.parameter( "encoding" ).lower() == "b" || - vCardLine.parameter( "encoding" ).lower() == "base64" ) { - KCodecs::base64Decode( input, output ); -@@ -148,14 +189,14 @@ VCard::List VCardParser::parseVCards( co - value = value.remove( value.length() - 1, 1 ) + (*it); - ++it; - } -- input = QCString(value.latin1()); -+ input = value; - KCodecs::quotedPrintableDecode( input, output ); - } - } else { -- output = QCString(value.latin1()); -+ output = value; - } - -- if ( params.findIndex( "charset" ) != -1 ) { // have to convert the data -+ if ( vCardLine.parameterList().findIndex( "charset" ) != -1 ) { // have to convert the data - QTextCodec *codec = - QTextCodec::codecForName( vCardLine.parameter( "charset" ).latin1() ); - if ( codec ) { -@@ -173,17 +214,17 @@ VCard::List VCardParser::parseVCards( co - } - - // we do not save the start and end tag as vcardline -- if ( (*it).lower().startsWith( "begin:vcard" ) ) { -+ if ( cStringStartsWith( (*it).lower(), QCString( "begin:vcard" ) ) ) { - inVCard = true; -- currentLine.setLength( 0 ); -+ currentLine = QCString(); - currentVCard.clear(); // flush vcard - continue; - } - -- if ( (*it).lower().startsWith( "end:vcard" ) ) { -+ if ( cStringStartsWith( (*it).lower(), QCString( "end:vcard" ) ) ) { - inVCard = false; - vCardList.append( currentVCard ); -- currentLine.setLength( 0 ); -+ currentLine = QCString(); - currentVCard.clear(); // flush vcard - continue; - } -@@ -197,8 +238,13 @@ VCard::List VCardParser::parseVCards( co - - QString VCardParser::createVCards( const VCard::List& list ) - { -- QString text; -- QString textLine; -+ return QString::fromUtf8( createVCardsRaw( list ) ); -+} -+ -+QCString VCardParser::createVCardsRaw( const VCard::List& list ) -+{ -+ QCString text; -+ QCString textLine; - QString encodingType; - QStringList idents; - QStringList params; -@@ -213,7 +259,7 @@ QString VCardParser::createVCards( const - - bool hasEncoding; - -- text.reserve( list.size() * 300 ); // reserve memory to be more efficient -+// text.reserve( list.size() * 300 ); // reserve memory to be more efficient - - // iterate over the cards - VCard::List::ConstIterator listEnd( list.end() ); -@@ -228,9 +274,9 @@ QString VCardParser::createVCards( const - for ( lineIt = lines.constBegin(); lineIt != lines.constEnd(); ++lineIt ) { - if ( !(*lineIt).value().asString().isEmpty() ) { - if ( (*lineIt).hasGroup() ) -- textLine = (*lineIt).group() + "." + (*lineIt).identifier(); -+ textLine = (*lineIt).group().latin1() + QCString( "." ) + (*lineIt).identifier().latin1(); - else -- textLine = (*lineIt).identifier(); -+ textLine = (*lineIt).identifier().latin1(); - - params = (*lineIt).parameterList(); - hasEncoding = false; -@@ -243,9 +289,9 @@ QString VCardParser::createVCards( const - - values = (*lineIt).parameters( *paramIt ); - for ( valueIt = values.constBegin(); valueIt != values.constEnd(); ++valueIt ) { -- textLine.append( ";" + (*paramIt).upper() ); -+ textLine.append( QCString( ";" ) + (*paramIt).upper().latin1() ); - if ( !(*valueIt).isEmpty() ) -- textLine.append( "=" + (*valueIt) ); -+ textLine.append( QCString( "=" ) + (*valueIt).latin1() ); - } - } - } -@@ -261,11 +307,11 @@ QString VCardParser::createVCards( const - KCodecs::quotedPrintableEncode( input, output, false ); - } - -- QString value( output ); -+ QCString value( output ); - addEscapes( value ); - textLine.append( ":" + value ); - } else { -- QString value( (*lineIt).value().asString() ); -+ QCString value( (*lineIt).value().toString().utf8() ); - addEscapes( value ); - textLine.append( ":" + value ); - } -Index: kabc/vcardparser/vcardparser.h -=================================================================== ---- kabc/vcardparser/vcardparser.h.orig -+++ kabc/vcardparser/vcardparser.h -@@ -34,6 +34,9 @@ class VCardParser - static VCard::List parseVCards( const QString& text ); - static QString createVCards( const VCard::List& list ); - -+ static VCard::List parseVCardsRaw( const QCString& text ); -+ static QCString createVCardsRaw( const VCard::List& list ); -+ - private: - class VCardParserPrivate; - VCardParserPrivate *d; -Index: kabc/vcardtool.cpp -=================================================================== ---- kabc/vcardtool.cpp.orig -+++ kabc/vcardtool.cpp -@@ -74,15 +74,28 @@ VCardTool::~VCardTool() - { - } - --// TODO: make list a const& -+QCString VCardTool::createVCardsRaw( Addressee::List list, VCard::Version version ) -+{ -+ const VCard::List vCardList = createVCardsInternal( list, version ); -+ -+ return VCardParser::createVCardsRaw( vCardList ); -+} -+ - QString VCardTool::createVCards( Addressee::List list, VCard::Version version ) - { -- VCard::List vCardList; -+ const VCard::List vCardList = createVCardsInternal( list, version ); -+ -+ return VCardParser::createVCards( vCardList ); -+} -+ -+KABC::VCard::List VCardTool::createVCardsInternal( Addressee::List list, KABC::VCard::Version version ) -+{ -+ KABC::VCard::List vCardList; - - Addressee::List::ConstIterator addrIt; - Addressee::List::ConstIterator listEnd( list.constEnd() ); - for ( addrIt = list.constBegin(); addrIt != listEnd; ++addrIt ) { -- VCard card; -+ KABC::VCard card; - QStringList::ConstIterator strIt; - - // ADR + LABEL -@@ -348,17 +361,30 @@ QString VCardTool::createVCards( Address - vCardList.append( card ); - } - -- return VCardParser::createVCards( vCardList ); -+ return vCardList; -+} -+ -+Addressee::List VCardTool::parseVCardsRaw( const QCString& vcard ) -+{ -+ const VCard::List vCardList = VCardParser::parseVCardsRaw( vcard ); -+ -+ return parseVCardsInternal( vCardList ); - } - - Addressee::List VCardTool::parseVCards( const QString& vcard ) - { -+ const VCard::List vCardList = VCardParser::parseVCards( vcard ); -+ -+ return parseVCardsInternal( vCardList ); -+} -+ -+Addressee::List VCardTool::parseVCardsInternal( const VCard::List &vCardList ) -+{ - static const QChar semicolonSep( ';' ); - static const QChar commaSep( ',' ); - QString identifier; - - Addressee::List addrList; -- const VCard::List vCardList = VCardParser::parseVCards( vcard ); - - VCard::List::ConstIterator cardIt; - VCard::List::ConstIterator listEnd( vCardList.end() ); -Index: kabc/vcardtool.h -=================================================================== ---- kabc/vcardtool.h.orig -+++ kabc/vcardtool.h -@@ -46,12 +46,19 @@ class KABC_EXPORT VCardTool - */ - QString createVCards( Addressee::List list, VCard::Version version = VCard::v3_0 ); - -+ QCString createVCardsRaw( Addressee::List list, VCard::Version version = VCard::v3_0 ); -+ - /** - Parses the string and returns a list of addressee objects. - */ - Addressee::List parseVCards( const QString& vcard ); - -+ Addressee::List parseVCardsRaw( const QCString& vcard ); -+ - private: -+ VCard::List createVCardsInternal( Addressee::List list, VCard::Version version ); -+ Addressee::List parseVCardsInternal( const VCard::List &vCardList ); -+ - /** - Split a string and replaces escaped separators on the fly with - unescaped ones. diff --git a/opensuse/tdelibs/bug-399296_ftphandling-fix.diff b/opensuse/tdelibs/bug-399296_ftphandling-fix.diff deleted file mode 100644 index a8719ab92..000000000 --- a/opensuse/tdelibs/bug-399296_ftphandling-fix.diff +++ /dev/null @@ -1,57 +0,0 @@ -Index: kioslave/ftp/ftp.cc -=================================================================== ---- kioslave/ftp/ftp.cc.orig -+++ kioslave/ftp/ftp.cc -@@ -1275,6 +1275,16 @@ bool Ftp::ftpRename( const QString & src - return false; - } - -+ // Must check if dst already exists, RNFR+RNTO overwrites by default (#127793). -+ if (ftpFileExists(dst)) { -+ error(ERR_FILE_ALREADY_EXIST, dst); -+ return false; -+ } -+ if (ftpFolder(dst, false)) { -+ error(ERR_DIR_ALREADY_EXIST, dst); -+ return false; -+ } -+ - int pos = src.findRev("/"); - if( !ftpFolder(src.left(pos+1), false) ) - return false; -@@ -2406,6 +2416,19 @@ bool Ftp::ftpSize( const QString & path, - return true; - } - -+bool Ftp::ftpFileExists(const QString& path) -+{ -+ QCString buf; -+ buf = "SIZE "; -+ buf += remoteEncoding()->encode(path); -+ if( !ftpSendCmd( buf ) || (m_iRespType != 2) ) -+ return false; -+ -+ // skip leading "213 " (response code) -+ const char* psz = ftpResponse(4); -+ return psz != 0; -+} -+ - // Today the differences between ASCII and BINARY are limited to - // CR or CR/LF line terminators. Many servers ignore ASCII (like - // win2003 -or- vsftp with default config). In the early days of -Index: kioslave/ftp/ftp.h -=================================================================== ---- kioslave/ftp/ftp.h.orig -+++ kioslave/ftp/ftp.h -@@ -350,6 +350,11 @@ private: - /** - * Set the current working directory, but only if not yet current - */ -+ bool ftpFileExists(const QString& path); -+ -+ /** -+ * Set the current working directory, but only if not yet current -+ */ - bool ftpFolder(const QString& path, bool bReportError); - - /** diff --git a/opensuse/tdelibs/bundle-locale-help.diff b/opensuse/tdelibs/bundle-locale-help.diff deleted file mode 100644 index 8305fad3a..000000000 --- a/opensuse/tdelibs/bundle-locale-help.diff +++ /dev/null @@ -1,107 +0,0 @@ -Index: kdecore/kstandarddirs.cpp -=================================================================== ---- kdecore/kstandarddirs.cpp.orig -+++ kdecore/kstandarddirs.cpp -@@ -94,8 +94,8 @@ KStandardDirsSingleton* KStandardDirsSin - return s_self; - } - --static const char* const types[] = {"html", "icon", "apps", "sound", -- "data", "locale", "services", "mime", -+static const char* const types[] = {"html", "html-bundle", "icon", "apps", "sound", -+ "data", "locale", "locale-bundle", "services", "mime", - "servicetypes", "config", "exe", - "wallpaper", "lib", "pixmap", "templates", - "module", "qtplugins", -@@ -1023,6 +1023,8 @@ static int tokenize( QStringList& tokens - QString KStandardDirs::kde_default(const char *type) { - if (!strcmp(type, "data")) - return "share/apps/"; -+ if (!strcmp(type, "html-bundle")) -+ return "share/doc-bundle/HTML/"; - if (!strcmp(type, "html")) - return "share/doc/HTML/"; - if (!strcmp(type, "icon")) -@@ -1035,6 +1037,8 @@ QString KStandardDirs::kde_default(const - return "share/applnk/"; - if (!strcmp(type, "sound")) - return "share/sounds/"; -+ if (!strcmp(type, "locale-bundle")) -+ return "share/locale-bundle/"; - if (!strcmp(type, "locale")) - return "share/locale/"; - if (!strcmp(type, "services")) -Index: kdecore/kcatalogue.cpp -=================================================================== ---- kdecore/kcatalogue.cpp.orig -+++ kdecore/kcatalogue.cpp -@@ -66,7 +66,11 @@ KCatalogue::KCatalogue(const QString & n - .arg( d->language ) - .arg( d->name ); - -- setFileName( locate( "locale", path ) ); -+ QString fileName = locate( "locale", path ); -+ if (fileName.isEmpty()) -+ fileName = locate( "locale-bundle", path ); -+ -+ setFileName( fileName ); - - } - -Index: kdecore/klocale.cpp -=================================================================== ---- kdecore/klocale.cpp.orig -+++ kdecore/klocale.cpp -@@ -402,7 +402,11 @@ QString KLocale::catalogueFileName(const - .arg( language ) - .arg( catalog.name() ); - -- return locate( "locale", path ); -+ QString fileName = locate( "locale", path ); -+ if (fileName.isEmpty()) -+ fileName = locate( "locale-bundle", path ); -+ -+ return fileName; - } - - bool KLocale::setLanguage(const QString & language) -@@ -501,6 +505,9 @@ bool KLocale::isApplicationTranslatedInt - // kdDebug() << "isApplicationTranslatedInto: filename " << sFileName << endl; - - QString sAbsFileName = locate( "locale", sFileName ); -+ if (sAbsFileName.isEmpty()) -+ sAbsFileName = locate( "locale-bundle", sFileName ); -+ - // kdDebug() << "isApplicationTranslatedInto: absname " << sAbsFileName << endl; - return ! sAbsFileName.isEmpty(); - } -Index: kdoctools/kio_help.cpp -=================================================================== ---- kdoctools/kio_help.cpp.orig -+++ kdoctools/kio_help.cpp -@@ -42,7 +42,7 @@ QString HelpProtocol::langLookup(const Q - QStringList search; - - // assemble the local search paths -- const QStringList localDoc = KGlobal::dirs()->resourceDirs("html"); -+ const QStringList localDoc = KGlobal::dirs()->resourceDirs("html") + KGlobal::dirs()->resourceDirs("html-bundle"); - - kdDebug( 7119 ) << "Looking up help for: " << fname << endl; - QString _fname = fname; -@@ -60,10 +60,14 @@ QString HelpProtocol::langLookup(const Q - QStringList langs = KGlobal::locale()->languageList(); - QStringList::ConstIterator lang; - for (lang = langs.begin(); lang != langs.end(); ++lang) -- if ((*lang).left(2) == "en") -+ if ((*lang).left(2) == "en") { - search.append(QString("/usr/share/gnome/help/%1/C%2").arg(path).arg(_fname)); -- else -+ search.append(QString("/usr/share/gnome/help-bundle/%1/C%2").arg(path).arg(_fname)); -+ } -+ else { - search.append(QString("/usr/share/gnome/help/%1/%2%3").arg(path).arg(*lang).arg(_fname)); -+ search.append(QString("/usr/share/gnome/help-bundle/%1/%2%3").arg(path).arg(*lang).arg(_fname)); -+ } - - langs.append( "en" ); - langs.remove( "C" ); diff --git a/opensuse/tdelibs/clever-menu.diff b/opensuse/tdelibs/clever-menu.diff deleted file mode 100644 index e2ae876c5..000000000 --- a/opensuse/tdelibs/clever-menu.diff +++ /dev/null @@ -1,221 +0,0 @@ -Index: kio/kio/kservice.cpp -=================================================================== ---- kio/kio/kservice.cpp.orig -+++ kio/kio/kservice.cpp -@@ -725,6 +725,20 @@ QString KService::untranslatedGenericNam - return v.isValid() ? v.toString() : QString::null; - } - -+bool KService::SuSEunimportant() const { -+ QMap::ConstIterator it = m_mapProps.find( "X-SuSE-Unimportant" ); -+ if ( (it == m_mapProps.end()) || (!it.data().isValid())) -+ { -+ return false; -+ } -+ -+ QString aValue = it.data().toString(); -+ if (aValue == "true" || aValue == "on" || aValue == "yes") -+ return true; -+ else -+ return false; -+} -+ - QString KService::parentApp() const { - QMap::ConstIterator it = m_mapProps.find( "X-KDE-ParentApp" ); - if ( (it == m_mapProps.end()) || (!it.data().isValid())) -Index: kio/kio/kservice.h -=================================================================== ---- kio/kio/kservice.h.orig -+++ kio/kio/kservice.h -@@ -327,6 +327,10 @@ public: - * @return true to suppress this service - */ - bool noDisplay() const; -+ /** -+ * check if the application entry is important -+ */ -+ bool SuSEunimportant() const; - - /** - * Name of the application this service belongs to. -Index: kio/kio/kservicegroup.cpp -=================================================================== ---- kio/kio/kservicegroup.cpp.orig -+++ kio/kio/kservicegroup.cpp -@@ -31,8 +31,10 @@ - class KServiceGroup::Private - { - public: -- Private() { m_bNoDisplay = false; m_bShowEmptyMenu = false;m_bShowInlineHeader=false;m_bInlineAlias=false; m_bAllowInline = false;m_inlineValue = 4;} -+ Private() { m_bNoDisplay = false; m_bShowEmptyMenu = false;m_bShowInlineHeader=false;m_bInlineAlias=false; m_bAllowInline = false; m_inlineValue = 4; m_bShortMenu = false; m_bGeneralDescription = false;} - bool m_bNoDisplay; -+ bool m_bShortMenu; -+ bool m_bGeneralDescription; - bool m_bShowEmptyMenu; - bool m_bShowInlineHeader; - bool m_bInlineAlias; -@@ -73,6 +75,11 @@ KServiceGroup::KServiceGroup( const QStr - m_strComment = config.readEntry( "Comment" ); - m_bDeleted = config.readBoolEntry( "Hidden", false ); - d->m_bNoDisplay = config.readBoolEntry( "NoDisplay", false ); -+ if (d->directoryEntryPath.startsWith(QDir::homeDirPath())) -+ d->m_bShortMenu = false; -+ else -+ d->m_bShortMenu = config.readBoolEntry( "X-SuSE-AutoShortMenu", true ); -+ d->m_bGeneralDescription = config.readBoolEntry( "X-SuSE-GeneralDescription", false ); - QStringList tmpList; - if (config.hasKey("OnlyShowIn")) - { -@@ -120,6 +127,10 @@ int KServiceGroup::childCount() - { - if (m_childCount == -1) - { -+ KConfig global("kdeglobals"); -+ global.setGroup("KDE"); -+ bool showUnimportant = global.readBoolEntry("showUnimportant", false); -+ - m_childCount = 0; - - for( List::ConstIterator it = m_serviceList.begin(); -@@ -130,7 +141,8 @@ int KServiceGroup::childCount() - { - KService *service = static_cast(p); - if (!service->noDisplay()) -- m_childCount++; -+ if ( showUnimportant || !service->SuSEunimportant() ) -+ m_childCount++; - } - else if (p->isType(KST_KServiceGroup)) - { -@@ -203,6 +215,16 @@ QStringList KServiceGroup::suppressGener - return d->suppressGenericNames; - } - -+bool KServiceGroup::SuSEgeneralDescription() const -+{ -+ return d->m_bGeneralDescription; -+} -+ -+bool KServiceGroup::SuSEshortMenu() const -+{ -+ return d->m_bShortMenu; -+} -+ - void KServiceGroup::load( QDataStream& s ) - { - QStringList groupList; -@@ -214,7 +236,8 @@ void KServiceGroup::load( QDataStream& s - s >> m_strCaption >> m_strIcon >> - m_strComment >> groupList >> m_strBaseGroupName >> m_childCount >> - noDisplay >> d->suppressGenericNames >> d->directoryEntryPath >> -- d->sortOrder >> _showEmptyMenu >> inlineHeader >> _inlineAlias >> _allowInline; -+ d->sortOrder >> _showEmptyMenu >> inlineHeader >> _inlineAlias >> -+ _allowInline >> d->m_bShortMenu >> d->m_bGeneralDescription; - - d->m_bNoDisplay = (noDisplay != 0); - d->m_bShowEmptyMenu = ( _showEmptyMenu != 0 ); -@@ -286,7 +309,8 @@ void KServiceGroup::save( QDataStream& s - s << m_strCaption << m_strIcon << - m_strComment << groupList << m_strBaseGroupName << m_childCount << - noDisplay << d->suppressGenericNames << d->directoryEntryPath << -- d->sortOrder <<_showEmptyMenu <sortOrder <<_showEmptyMenu <m_bShortMenu << d->m_bGeneralDescription; - } - - KServiceGroup::List -@@ -312,6 +336,12 @@ static void addItem(KServiceGroup::List - KServiceGroup::List - KServiceGroup::entries(bool sort, bool excludeNoDisplay, bool allowSeparators, bool sortByGenericName) - { -+ return SuSEentries(sort, excludeNoDisplay, allowSeparators, sortByGenericName); -+} -+ -+KServiceGroup::List -+KServiceGroup::SuSEentries(bool sort, bool excludeNoDisplay, bool allowSeparators, bool sortByGenericName, bool excludeSuSEunimportant) -+{ - KServiceGroup *group = this; - - // If the entries haven't been loaded yet, we have to reload ourselves -@@ -338,11 +368,18 @@ KServiceGroup::entries(bool sort, bool e - for (List::ConstIterator it(group->m_serviceList.begin()); it != group->m_serviceList.end(); ++it) - { - KSycocaEntry *p = (*it); -+ if( !p->isType(KST_KServiceGroup) && !p->isType(KST_KService)) -+ continue; - bool noDisplay = p->isType(KST_KServiceGroup) ? - static_cast(p)->noDisplay() : - static_cast(p)->noDisplay(); - if (excludeNoDisplay && noDisplay) - continue; -+ bool SuSEunimportant = p->isType(KST_KService) && -+ static_cast(p)->SuSEunimportant(); -+ if (excludeSuSEunimportant && SuSEunimportant) -+ continue; -+ - // Choose the right list - KSortableValueList & list = p->isType(KST_KServiceGroup) ? glist : slist; - QString name; -@@ -374,6 +411,15 @@ KServiceGroup::entries(bool sort, bool e - } - list.insert(key,SPtr(*it)); - } -+ -+ return group->SuSEsortEntries( slist, glist, excludeNoDisplay, allowSeparators ); -+} -+ -+KServiceGroup::List -+KServiceGroup::SuSEsortEntries( KSortableValueList slist, KSortableValueList glist, bool excludeNoDisplay, bool allowSeparators ) -+{ -+ KServiceGroup *group = this; -+ - // Now sort - slist.sort(); - glist.sort(); -@@ -415,6 +461,8 @@ KServiceGroup::entries(bool sort, bool e - // TODO: This prevents duplicates - for(KSortableValueList::Iterator it2 = slist.begin(); it2 != slist.end(); ++it2) - { -+ if (!(*it2).value()->isType(KST_KService)) -+ continue; - KService *service = (KService *)((KSycocaEntry *)((*it2).value())); - if (service->menuId() == item) - { -Index: kio/kio/kservicegroup.h -=================================================================== ---- kio/kio/kservicegroup.h.orig -+++ kio/kio/kservicegroup.h -@@ -26,6 +26,7 @@ - #include - - #include -+#include - - #include "ksycocaentry.h" - #include "ksycocatype.h" -@@ -201,6 +202,12 @@ public: - void setLayoutInfo(const QStringList &layout); - - /** -+ * SuSE special, not part of KDE API -+ */ -+ bool SuSEshortMenu() const; -+ bool SuSEgeneralDescription() const; -+ -+ /** - * @internal - * Returns information related to the layout of services in this group. - */ -@@ -238,6 +245,12 @@ public: - */ - virtual List entries(bool sorted = false); - -+ /* -+ * UNOFFICIAL SuSE special -+ */ -+ virtual List SuSEentries(bool sort, bool excludeNoDisplay, bool allowSeparators, bool sortByGenericName, bool excludeSuSEunimportant = true); -+ virtual List SuSEsortEntries( KSortableValueList slist, KSortableValueList glist, bool excludeNoDisplay, bool allowSeparators ); -+ - /** - * Returns a non-empty string if the group is a special base group. - * By default, "Settings/" is the kcontrol base group ("settings") diff --git a/opensuse/tdelibs/common_options b/opensuse/tdelibs/common_options deleted file mode 100644 index b1883c282..000000000 --- a/opensuse/tdelibs/common_options +++ /dev/null @@ -1,156 +0,0 @@ -export prefix="/opt/kde3" -export includedir="$prefix/include" - -export kde_prefix="$prefix" -export kde_confdir="$prefix/share/config" - -export kde_bindir="$kde_prefix/bin" -export kde_libdir="$kde_prefix/@_lib@" -export kde_includes="$kde_prefix/include" -export kde_includedir="$kde_prefix/include" - -export kde_htmldir="$kde_prefix/share/doc/HTML" -export kde_icondir="$kde_prefix/share/icons" -export kde_sounddir="$kde_prefix/share/sounds" -export kde_datadir="$kde_prefix/share/apps" -export kde_locale="$kde_prefix/share/locale" -export kde_mimedir="$kde_prefix/share/mimelnk" -export kde_wallpaperdir="$kde_prefix/share/wallpapers" - -export kde_appsdir="$kde_prefix/share/applnk" -export kde_servicesdir="$kde_prefix/share/services" -export kde_servicetypesdir="$kde_prefix/share/servicetypes" - -export kde_styledir="$kde_libdir/kde3/plugins/styles" -export kde_widgetdir="$kde_libdir/kde3/plugins/designer" - -export PATH=$PWD/admin/:$PATH -if test -x $PWD/admin/do_make; then -alias make=do_make -else -alias make=/opt/kde3/share/apps/kdelibs/admin/do_make -fi - -export configkde="@configkde@" - -unset KDEDIR || : -unset KDEDIRS || : -unset QTDIR || : - -#export INSTALL_TARGET=install-strip -export INSTALL_TARGET=install - -Debug=0 -if test "$Debug" = 1; then - export configkde="$configkde --enable-debug=full" - export NO_BRP_STRIP_DEBUG=true -else - export configkde="$configkde --disable-debug" -fi - -CFLAGS="$CFLAGS $RPM_OPT_FLAGS" -CXXFLAGS="$CXXFLAGS $RPM_OPT_FLAGS" -LDFLAGS= -if ld -Bsymbolic-functions -v &> /dev/null; then - LDFLAGS="$LDFLAGS -Wl,-Bsymbolic-functions" -fi -export CFLAGS CXXFLAGS LDFLAGS - -update_admin() -{ - set +x - if [ ! -d /opt/kde3/share/apps/kdelibs/admin ]; then - echo "ERROR: kde2-compat-devel isn't installed." - exit 1 - fi - if [ ! -d admin ]; then - echo "WARNING: there is no admin directory." - fi - rm -rf admin autom4te.cache - cp -a /opt/kde3/share/apps/kdelibs/admin . - arg=$1 -# if [ "$arg" != "--no-unsermake" ] && \ -# [ -f /.buildenv ] && grep -q BUILD_BASENAME=beta- /.buildenv; then -# arg="--unsermake" -# fi - if [ "$arg" = "--no-unsermake" ]; then - touch $RPM_BUILD_DIR/.no_unsermake - else - export UNSERMAKE=yes - fi - - make -f admin/Makefile.common cvs - - test -f /.buildenv && . /.buildenv - - find . -name \*.ui | while read i; do - for j in ${i%.ui}.cpp ${i%.ui}.h ${i%.ui}.moc;do - if [ -e "$j" ] && grep -q "by: The User Interface Compiler" "$j"; then - echo WARNING: pregenerated files from $i exist, deleting ... - rm -f "$j" - fi - done - if [ "${BUILD_BASENAME:0:4}" != "beta" ]; then - if grep -q "" "$i"; then - echo WARNING: removing include hints from $i - sed -i -e 's,.*,,' "$i" - fi - fi - done -} - -kde_post_install() -{ - # remove not needed development files - rm -f $RPM_BUILD_ROOT/opt/kde3/@_lib@/libkdeinit_*.la - - # not worth the hassle - rm -rf $RPM_BUILD_ROOT/opt/kde3/share/icons/locolor - - # move icons in one theme - prefering hicolor - d="$RPM_BUILD_ROOT/opt/kde3/share/icons/crystalsvg" - if [ -d "$d" -a ! -e "$d/index.theme" ]; then - find "$d" -type f | while read src; do - dest="${src/\/crystalsvg\///hicolor/}" - dir="${dest%/*}" - mkdir -p "$dir" - mv "$src" "$dest" - done - fi - # we do this 3 times as there is a 3 fold hierarchy - if [ -d $RPM_BUILD_ROOT/opt/kde3/share/icons ]; then - for i in `seq 1 3`; do - find $RPM_BUILD_ROOT/opt/kde3/share/icons -type d -exec rmdir -v --ignore-fail-on-non-empty -- {} \; || true - done - fi - - if [ -d $RPM_BUILD_ROOT/opt/kde3/share/locale/sr@Latn ]; then - mv $RPM_BUILD_ROOT/opt/kde3/share/locale/sr@Latn $RPM_BUILD_ROOT/opt/kde3/share/locale/sr@latin - fi - - if test -e /usr/lib/rpm/suse_update_desktop_file.sh; then - distribution='' - if test -f $HOME/.rpmmacros && test -d /usr/src/packages/SRPMS; then - distribution=`grep ^%distribution $HOME/.rpmmacros | cut '-d ' -f2` - fi - - find $RPM_BUILD_ROOT/opt/kde3/share \ - -name '*.desktop' 2> /dev/null | while read file; do - test -r "$file" || continue - grep -q "^X-SuSE-translate=" "$file" && continue - case "$file" in - */.hidden/*) - /usr/lib/rpm/suse_update_desktop_file.sh -n "$file" - ;; - *) - if test -n "$distribution"; then - /usr/lib/rpm/suse_update_desktop_file.sh --project "$distribution" --basedir /usr/src/packages/SRPMS "$file" - else - /usr/lib/rpm/suse_update_desktop_file.sh "$file" - fi - ;; - esac - done - fi -} - diff --git a/opensuse/tdelibs/cr16-filesys-file_broken.png b/opensuse/tdelibs/cr16-filesys-file_broken.png deleted file mode 100644 index fbbb60a0b..000000000 Binary files a/opensuse/tdelibs/cr16-filesys-file_broken.png and /dev/null differ diff --git a/opensuse/tdelibs/create-kdeapi b/opensuse/tdelibs/create-kdeapi deleted file mode 100644 index 6a11907eb..000000000 --- a/opensuse/tdelibs/create-kdeapi +++ /dev/null @@ -1,107 +0,0 @@ -#! /bin/sh -# Copyright (c) 2001 SuSE GmbH Nuernberg, Germany. All rights reserved. -# -# Author: Adrian Schroeter -# -# This module generates a index.html page for all KDE main api index.html pages -# SuSEhelp will use this index.html page as start point - -r=`pwd` -while test ! -x usr/share/doc/TDE-API/ && test "$r" != "/"; do - r=`dirname $root` - cd .. -done - -kdeapi=/usr/share/doc/TDE-API/ - -if test ! -w $r/${kdeapi} ; then - echo "The KDE API directory $kdeapi is not writeable. Exit..." - exit 1 -fi - -# -# write html header -# -cat > $r/${kdeapi}/index.html < - - - - - - KDE API Reference - - - -

    KDE 3.x API Reference

    - -EOF - -# -# list all the api start pages -# - -cat >> $r/${kdeapi}/index.html < - - Descriptionfrom package - -Qt all Qt classes qt -EOF - -dark=1 -mods= -list=`ls -1 $r/${kdeapi}/*/index.html 2> /dev/null` -for page in $list; do - mainapi=`echo $page | sed -n -e "s@$r/$kdeapi/\([^/]*\)/index.html@\1@p"` - mods="$mods $mainapi" - eval "page_$mainapi=$page" - eval "path_$mainapi=/$kdeapi/$mainapi" -done - -list=`ls -1 $r/opt/tde/share/doc/HTML/en/*-apidocs/*/html/index.html 2> /dev/null` -for page in $list; do - mainapi=`echo $page | sed -n -e "s@$r/opt/tde/share/doc/HTML/en/.*-apidocs/\([^/]*\)/html/index.html@\1@p"` - mods="$mods $mainapi" - path=`echo $page | sed -e "s,$r/opt,/opt,"` - eval "page_$mainapi=$path" - path=`echo $page | sed -n -e "s@$r\(/opt/tde/share/doc/HTML/en/.*-apidocs/[^/]*\)/html/index.html@\1@p"` - eval "path_$mainapi=$path" -done - -mods=`(for i in $mods; do echo $i; done ) | sort` - -for mod in $mods; do - eval "apipath=$""page_$mod" - eval "basepath=$""path_$mod" - description="`cat $r/$basepath/description.SuSE`" - package="`cat $r/$basepath/package.SuSE`" - - if [ "$dark" == "1" ]; then - dark=0 - echo "" >> $r/${kdeapi}/index.html - else - dark=1 - echo "" >> $r/${kdeapi}/index.html - fi - - echo " ${mod} " >> $r/${kdeapi}/index.html - echo "${description}" >> $r/${kdeapi}/index.html - echo "${package}" >> $r/${kdeapi}/index.html - echo "" >> $r/${kdeapi}/index.html - -done - -# -# finish it ... -# -cat >> $r/${kdeapi}/index.html < -
    - - -
    generated by create-kdeapi on `date`
    - - - -EOF diff --git a/opensuse/tdelibs/default-useragent.diff b/opensuse/tdelibs/default-useragent.diff deleted file mode 100644 index 76b92aef8..000000000 --- a/opensuse/tdelibs/default-useragent.diff +++ /dev/null @@ -1,13 +0,0 @@ -Index: kio/kio/kprotocolmanager.cpp -=================================================================== ---- kio/kio/kprotocolmanager.cpp.orig -+++ kio/kio/kprotocolmanager.cpp -@@ -72,7 +72,7 @@ KProtocolManagerPrivate::~KProtocolManag - - // DEFAULT USERAGENT STRING - #define CFG_DEFAULT_UAGENT(X) \ --QString("Mozilla/5.0 (compatible; Konqueror/%1.%2%3) KHTML/%4.%5.%6 (like Gecko)") \ -+QString("Mozilla/5.0 (compatible; Konqueror/%1.%2%3) KHTML/%4.%5.%6 (like Gecko) SUSE") \ - .arg(KDE_VERSION_MAJOR).arg(KDE_VERSION_MINOR).arg(X).arg(KDE_VERSION_MAJOR).arg(KDE_VERSION_MINOR).arg(KDE_VERSION_RELEASE) - - void KProtocolManager::reparseConfiguration() diff --git a/opensuse/tdelibs/desktop-translations.diff b/opensuse/tdelibs/desktop-translations.diff deleted file mode 100644 index 6bf878469..000000000 --- a/opensuse/tdelibs/desktop-translations.diff +++ /dev/null @@ -1,209 +0,0 @@ -Index: kdecore/kconfigbase.h -=================================================================== ---- kdecore/kconfigbase.h.orig -+++ kdecore/kconfigbase.h -@@ -1985,6 +1985,7 @@ public: - - protected: - QCString readEntryUtf8( const char *pKey) const; -+ bool hasTranslatedKey( const char *pKey ) const; - - /** - * The currently selected group. */ -Index: kdecore/kconfigbase.cpp -=================================================================== ---- kdecore/kconfigbase.cpp.orig -+++ kdecore/kconfigbase.cpp -@@ -131,6 +131,24 @@ bool KConfigBase::hasKey(const char *pKe - return !entry.mValue.isNull(); - } - -+bool KConfigBase::hasTranslatedKey(const char* pKey) const -+{ -+ KEntryKey aEntryKey(mGroup, 0); -+ aEntryKey.c_key = pKey; -+ aEntryKey.bDefault = readDefaults(); -+ -+ if (!locale().isNull()) { -+ // try the localized key first -+ aEntryKey.bLocal = true; -+ KEntry entry = lookupData(aEntryKey); -+ if (!entry.mValue.isNull()) -+ return true; -+ aEntryKey.bLocal = false; -+ } -+ -+ return false; -+} -+ - bool KConfigBase::hasGroup(const QString &group) const - { - return internalHasGroup( group.utf8()); -Index: kdecore/kdesktopfile.h -=================================================================== ---- kdecore/kdesktopfile.h.orig -+++ kdecore/kdesktopfile.h -@@ -236,6 +236,8 @@ private: - - private: - -+ QString translatedEntry(const char*) const; -+ - // copy-construction and assignment are not allowed - KDesktopFile( const KDesktopFile& ); - KDesktopFile& operator= ( const KDesktopFile& ); -Index: kdecore/kdesktopfile.cpp -=================================================================== ---- kdecore/kdesktopfile.cpp.orig -+++ kdecore/kdesktopfile.cpp -@@ -34,6 +34,8 @@ - #include "kapplication.h" - #include "kstandarddirs.h" - #include "kmountpoint.h" -+#include "kcatalogue.h" -+#include "klocale.h" - - #include "kdesktopfile.h" - #include "kdesktopfile.moc" -@@ -145,6 +147,27 @@ bool KDesktopFile::isAuthorizedDesktopFi - return false; - } - -+QString KDesktopFile::translatedEntry(const char* key) const -+{ -+ if (hasTranslatedKey(key)) -+ return readEntry(key); -+ -+ if (hasKey(key)) { -+ QString value = readEntryUntranslated(key); -+ QString fName = fileName(); -+ fName = fName.mid(fName.findRev('/')+1); -+ QString po_lookup_key = QString::fromLatin1(key) + "(" + fName + "): " + value; -+ QString po_value = KGlobal::locale()->translate(po_lookup_key.utf8().data()); -+ -+ if (po_value == po_lookup_key) -+ return value; -+ -+ return po_value; -+ } -+ -+ return QString::null; -+} -+ - QString KDesktopFile::readType() const - { - return readEntry("Type"); -@@ -157,17 +180,17 @@ QString KDesktopFile::readIcon() const - - QString KDesktopFile::readName() const - { -- return readEntry("Name"); -+ return translatedEntry("Name"); - } - - QString KDesktopFile::readComment() const - { -- return readEntry("Comment"); -+ return translatedEntry("Comment"); - } - - QString KDesktopFile::readGenericName() const - { -- return readEntry("GenericName"); -+ return translatedEntry("GenericName"); - } - - QString KDesktopFile::readPath() const -@@ -342,5 +365,3 @@ KDesktopFile* KDesktopFile::copyTo(const - config->setDesktopGroup(); - return config; - } -- -- -Index: kio/kio/kservice.cpp -=================================================================== ---- kio/kio/kservice.cpp.orig -+++ kio/kio/kservice.cpp -@@ -114,7 +114,7 @@ KService::init( KDesktopFile *config ) - return; - } - -- m_strName = config->readEntry( "Name" ); -+ m_strName = config->readName(); - entryMap.remove("Name"); - if ( m_strName.isEmpty() ) - { -@@ -134,7 +134,7 @@ KService::init( KDesktopFile *config ) - m_strName = m_strName.left(i); - } - -- m_strType = config->readEntry( "Type" ); -+ m_strType = config->readType(); - entryMap.remove("Type"); - if ( m_strType.isEmpty() ) - { -@@ -204,11 +204,11 @@ KService::init( KDesktopFile *config ) - entryMap.remove("Terminal"); - m_strTerminalOptions = config->readEntry( "TerminalOptions" ); // should be a property IMHO - entryMap.remove("TerminalOptions"); -- m_strPath = config->readPathEntry( "Path" ); -+ m_strPath = config->readPath(); - entryMap.remove("Path"); -- m_strComment = config->readEntry( "Comment" ); -+ m_strComment = config->readComment(); - entryMap.remove("Comment"); -- m_strGenName = config->readEntry( "GenericName" ); -+ m_strGenName = config->readGenericName(); - entryMap.remove("GenericName"); - QString untranslatedGenericName = config->readEntryUntranslated( "GenericName" ); - if (!untranslatedGenericName.isEmpty()) -Index: kio/kio/kservicegroup.cpp -=================================================================== ---- kio/kio/kservicegroup.cpp.orig -+++ kio/kio/kservicegroup.cpp -@@ -66,13 +66,11 @@ KServiceGroup::KServiceGroup( const QStr - - d->directoryEntryPath = cfg; - -- KConfig config( cfg, true, false, "apps" ); -+ KDesktopFile config( cfg, true, "apps" ); - -- config.setDesktopGroup(); -- -- m_strCaption = config.readEntry( "Name" ); -- m_strIcon = config.readEntry( "Icon" ); -- m_strComment = config.readEntry( "Comment" ); -+ m_strCaption = config.readName(); -+ m_strIcon = config.readIcon(); -+ m_strComment = config.readComment(); - m_bDeleted = config.readBoolEntry( "Hidden", false ); - d->m_bNoDisplay = config.readBoolEntry( "NoDisplay", false ); - if (d->directoryEntryPath.startsWith(QDir::homeDirPath())) -Index: kio/kio/kmimetype.cpp -=================================================================== ---- kio/kio/kmimetype.cpp.orig -+++ kio/kio/kmimetype.cpp -@@ -677,9 +677,8 @@ QString KFolderType::comment( const KURL - KURL u( _url ); - u.addPath( ".directory" ); - -- KSimpleConfig cfg( u.path(), true ); -- cfg.setDesktopGroup(); -- QString comment = cfg.readEntry( "Comment" ); -+ KDesktopFile cfg( u.path(), true ); -+ QString comment = cfg.readComment(); - if ( comment.isEmpty() ) - return KMimeType::comment( _url, _is_local ); - -@@ -772,9 +771,8 @@ QString KDEDesktopMimeType::comment( con - if ( !_is_local ) - return KMimeType::comment( _url, _is_local ); - -- KSimpleConfig cfg( _url.path(), true ); -- cfg.setDesktopGroup(); -- QString comment = cfg.readEntry( "Comment" ); -+ KDesktopFile cfg( _url.path(), true ); -+ QString comment = cfg.readComment(); - if ( comment.isEmpty() ) - return KMimeType::comment( _url, _is_local ); - diff --git a/opensuse/tdelibs/disable-idn-support.diff b/opensuse/tdelibs/disable-idn-support.diff deleted file mode 100644 index 37c59bc91..000000000 --- a/opensuse/tdelibs/disable-idn-support.diff +++ /dev/null @@ -1,34 +0,0 @@ -Index: kdecore/network/kresolver.cpp -=================================================================== ---- kdecore/network/kresolver.cpp.orig -+++ kdecore/network/kresolver.cpp -@@ -50,6 +50,7 @@ - - // IDN - #ifdef HAVE_IDNA_H -+# include - # include - #endif - -@@ -1084,6 +1085,10 @@ static QStringList splitLabels(const QSt - static QCString ToASCII(const QString& label) - { - #ifdef HAVE_IDNA_H -+ // We do disable it by default for security reasons for now. -+ if ( getenv("KDE_NO_IPV6") && strcmp( getenv("KDE_NO_IPV6"), "no" ) ) -+ return label.latin1(); -+ - // We have idna.h, so we can use the idna_to_ascii - // function :) - -@@ -1118,6 +1123,10 @@ static QCString ToASCII(const QString& l - static QString ToUnicode(const QString& label) - { - #ifdef HAVE_IDNA_H -+ // We do disable it by default for security reasons for now. -+ if ( getenv("KDE_NO_IPV6") && strcmp( getenv("KDE_NO_IPV6"), "no" ) ) -+ return label; -+ - // We have idna.h, so we can use the idna_to_unicode - // function :) - diff --git a/opensuse/tdelibs/disable-samba-dialog-without-smb.diff b/opensuse/tdelibs/disable-samba-dialog-without-smb.diff deleted file mode 100644 index cd0c29927..000000000 --- a/opensuse/tdelibs/disable-samba-dialog-without-smb.diff +++ /dev/null @@ -1,66 +0,0 @@ -Index: kio/kio/kfileshare.cpp -=================================================================== ---- kio/kio/kfileshare.cpp.orig -+++ kio/kio/kfileshare.cpp -@@ -291,4 +291,24 @@ bool KFileShare::setShared( const QStrin - return ok; - } - -+bool KFileShare::sambaActive() -+{ -+ // rcsmb is not executable by users, try ourselves -+ int status = system( "/sbin/checkproc -p /var/run/samba/smbd.pid /usr/sbin/smbd" ); -+ return status != -1 && WIFEXITED( status ) && WEXITSTATUS( status ) == 0; -+} -+ -+bool KFileShare::nfsActive() -+{ -+ // rcnfsserver is not executable by users, try ourselves -+ int status = system( "/sbin/checkproc /usr/sbin/rpc.mountd" ); -+ if( status != -1 && WIFEXITED( status ) && WEXITSTATUS( status ) == 0 ) -+ { -+ status = system( "/sbin/checkproc -n nfsd" ); -+ if( status != -1 && WIFEXITED( status ) && WEXITSTATUS( status ) == 0 ) -+ return true; -+ } -+ return false; -+} -+ - #include "kfileshare.moc" -Index: kio/kio/kfileshare.h -=================================================================== ---- kio/kio/kfileshare.h.orig -+++ kio/kio/kfileshare.h -@@ -131,6 +131,18 @@ public: - * Returns whether NFS is enabled - */ - static bool nfsEnabled(); -+ -+ /** -+ * Returns whether Samba is active (service is running) -+ * @internal -+ */ -+ static bool sambaActive(); -+ -+ /** -+ * Returns whether NFS is active (service is running) -+ * @internal -+ */ -+ static bool nfsActive(); - - private: - static Authorization s_authorization; -Index: kio/kfile/kfilesharedlg.cpp -=================================================================== ---- kio/kfile/kfilesharedlg.cpp.orig -+++ kio/kfile/kfilesharedlg.cpp -@@ -167,6 +167,9 @@ void KFileSharePropsPlugin::init() - vbox->addWidget( m_pbConfig, 0, Qt::AlignHCenter ); - - vbox->addStretch( 10 ); -+ -+ if( !KFileShare::sambaActive() && !KFileShare::nfsActive()) -+ m_widget->setEnabled( false ); - } - } - break; diff --git a/opensuse/tdelibs/do_make b/opensuse/tdelibs/do_make deleted file mode 100644 index b317494db..000000000 --- a/opensuse/tdelibs/do_make +++ /dev/null @@ -1,96 +0,0 @@ -#!/bin/bash - -# this is a script around make which basicly checks -# if it's in srcdir or in builddir and changes to -# the right directory for calling /usr/bin/make -# (C) Stephan Kulow - -# You may need to set OBJ_REPLACEMENT variable to get it to work. -# In the variable use the sed syntax to switch directories, for example -# export OBJ_REPLACEMENT="s:/home/zack/cvs/kde:/home/zack/build:" -# will assure that the builds are performed under /home/zack/build -# directory, when the cvs is held under /home/zack/cvs/kde. - -file=Makefile -dir=. -args=() -jobs= - -while test $# -gt 0 ; do - case "${1}" in - -f) - shift - file="${1}" - shift - args=("${args[@]}" -f $file) - ;; - -C) - shift - dir="${1}" - shift ;; - -j) - shift - jobs="${1}" - shift ;; - -j*) - jobs="${1/-j/}" - shift ;; - *) - args=("${args[@]}" "$1") - shift - ;; - esac -done - -if test ! -f $dir/$file; then - if test -n "$OBJ_SUBDIR"; then - dir=$PWD - subdir=. - while test ! -f $dir/$OBJ_SUBDIR/$file; do - subdir=`basename $dir`"/$subdir" - dir=`dirname $dir` - if test "$dir" = "/"; then - # the case that someone puts the compile dir in / - # is very unlikely, so we better skip here ;) - echo "can't find $OBJ_SUBDIR above current dir" - exit 1 - fi - done - cd $dir/$OBJ_SUBDIR/$subdir - else - if test -n "$OBJ_REPLACEMENT"; then - pwd=`echo $PWD | sed -e "$OBJ_REPLACEMENT"` - if test ! -f $pwd/$dir/$file; then - echo "no objdir found. Tried $pwd" - exit 1 - fi - cd $pwd/$dir - fi - fi -else - cd $dir -fi - -echo "makeobj[0]: Entering directory \`$PWD'" -if test -z "$MAKE"; then - if head -n 1 $file | grep unsermake >/dev/null; then - MAKE=`type -p unsermake` - if test ! -x "$MAKE"; then - echo 'Makefile was created with unsermake, but there' - echo 'is no unsermake in $PATH' - exit 1 - fi - MAKE="$MAKE --no-real-compare VERBOSE=1" - if test -n "$jobs"; then args=("${args[@]}" --compile-jobs=$jobs); fi - else - MAKE=/usr/bin/make - if test -n "$jobs"; then args=("${args[@]}" -j $jobs); fi - fi -fi - -echo "Calling $MAKE ${args[@]}" -LANGUAGE=C $MAKE "${args[@]}" -retval=$? -echo "makeobj[0]: Leaving directory \`$PWD'" -exit $retval - diff --git a/opensuse/tdelibs/fileshare.diff b/opensuse/tdelibs/fileshare.diff deleted file mode 100644 index 86f7d0941..000000000 --- a/opensuse/tdelibs/fileshare.diff +++ /dev/null @@ -1,296 +0,0 @@ ---- kio/kfile/kfilesharedlg.cpp -+++ kio/kfile/kfilesharedlg.cpp 2004/08/06 08:38:31 -@@ -24,6 +24,7 @@ - #include - #include - #include -+#include - #include - #include - #include -@@ -93,8 +94,10 @@ - delete m_widget; - m_rbShare = 0L; - m_rbUnShare = 0L; -+ m_rbSharerw = 0L; - m_widget = new QWidget( d->m_vBox ); - QVBoxLayout * vbox = new QVBoxLayout( m_widget ); -+ //QHBoxLayout * hbox = new QHBoxLayout( vbox ); - - switch ( KFileShare::authorization() ) { - case KFileShare::Authorized: -@@ -105,18 +108,31 @@ - home += '/'; - bool ok = true; - KFileItemList items = properties->items(); -- // We have 3 possibilities: all shared, all unshared, or mixed. -+ // We have some possibilities: all shared, all unshared (ro,rw), or mixed. - bool allShared = true; - bool allUnshared = true; -+ bool allreadonly = true; - KFileItemListIterator it( items ); - for ( ; it.current() && ok; ++it ) { - QString path = (*it)->url().path(); -+ -+ // 0 => not shared -+ // 1 => shared read only -+ // 3 => shared writeable -+ int dirStatus = KFileShare::isDirectoryShared( path ); - if ( !path.startsWith( home ) ) - ok = false; -- if ( KFileShare::isDirectoryShared( path ) ) -+ if ( dirStatus == 1 ) { - allUnshared = false; -- else -+ } -+ else if ( dirStatus == 3 ) { -+ allUnshared = false; -+ allreadonly = false; -+ } -+ else { - allShared = false; -+ allreadonly = false; -+ } - } - if ( !ok ) - { -@@ -136,16 +152,31 @@ - vbox->addWidget( m_rbUnShare, 0 ); - rbGroup->insert( m_rbUnShare ); - -- m_rbShare = new QRadioButton( i18n("Shared"), m_widget ); -+ m_rbShare = new QRadioButton( i18n("Shared - read only for others"), m_widget ); - connect( m_rbShare, SIGNAL( toggled(bool) ), SIGNAL( changed() ) ); - vbox->addWidget( m_rbShare, 0 ); - rbGroup->insert( m_rbShare ); - -+ m_rbSharerw = new QRadioButton( i18n("Shared - writeable for others"), m_widget ); -+ connect( m_rbSharerw, SIGNAL( toggled(bool) ), SIGNAL( changed() ) ); -+ vbox->addWidget( m_rbSharerw, 0 ); -+ rbGroup->insert( m_rbSharerw ); -+ -+ //QLabel *testlabel1 = new QLabel(i18n("Enter Samba Share Name here"),m_widget); -+ //m_leSmbShareName = new QLineEdit(m_widget); -+ //m_leSmbShareName->setMaxLength(12); -+ -+ //hbox->addWidget( testlabel1, 0 ); -+ //hbox->addWidget( m_leSmbShareName ); -+ //vbox->addLayout( hbox ); -+ - // Activate depending on status - if ( allShared ) -- m_rbShare->setChecked(true); -+ m_rbSharerw->setChecked(true); - if ( allUnshared ) - m_rbUnShare->setChecked(true); -+ if ( allreadonly ) -+ m_rbShare->setChecked(true); - - // Some help text - QLabel *label = new QLabel( i18n("Sharing this folder makes it available under Linux/UNIX (NFS) and Windows (Samba).") , m_widget ); -@@ -204,7 +235,7 @@ - void KFileSharePropsPlugin::applyChanges() - { - kdDebug() << "KFileSharePropsPlugin::applyChanges" << endl; -- if ( m_rbShare && m_rbUnShare ) -+ if ( m_rbShare && m_rbUnShare && m_rbSharerw ) - { - bool share = m_rbShare->isChecked(); - KFileItemList items = properties->items(); -@@ -212,7 +243,7 @@ - bool ok = true; - for ( ; it.current() && ok; ++it ) { - QString path = (*it)->url().path(); -- ok = setShared( path, share ); -+ ok = SuSEsetShared( path, share, m_rbSharerw->isChecked() ); - if (!ok) { - if (share) - KMessageBox::detailedError(properties, -@@ -239,8 +270,14 @@ - - bool KFileSharePropsPlugin::setShared( const QString& path, bool shared ) - { -- kdDebug() << "KFileSharePropsPlugin::setShared " << path << "," << shared << endl; -- return KFileShare::setShared( path, shared ); -+ return SuSEsetShared( path, shared, true ); -+} -+ -+bool KFileSharePropsPlugin::SuSEsetShared( const QString& path, bool shared, bool readonly ) -+{ -+ kdDebug() << "KFileSharePropsPlugin::setShared " << path << "," -+ << shared << readonly << endl; -+ return KFileShare::SuSEsetShared( path, shared, readonly ); - } - - QWidget* KFileSharePropsPlugin::page() const ---- kio/kfile/kfilesharedlg.h -+++ kio/kfile/kfilesharedlg.h 2004/08/06 08:38:31 -@@ -54,10 +54,13 @@ - private: - void init(); - bool setShared( const QString&path, bool shared ); -+ bool SuSEsetShared( const QString&path, bool shared, bool readonly ); - - QWidget *m_widget; - QRadioButton *m_rbShare; -+ QRadioButton *m_rbSharerw; - QRadioButton *m_rbUnShare; -+ //QLineEdit *m_leSmbShareName; - QPushButton *m_pbConfig; - class Private; - Private *d; ---- kio/kio/kfileshare.cpp -+++ kio/kio/kfileshare.cpp 2004/08/06 08:38:51 -@@ -20,6 +20,7 @@ - #include "kfileshare.h" - #include - #include -+#include - #include - #include - #include -@@ -35,8 +36,10 @@ - #include - - KFileShare::Authorization KFileShare::s_authorization = NotInitialized; --QStringList* KFileShare::s_shareList = 0L; --static KStaticDeleter sdShareList; -+//QStringList* KFileShare::s_shareList = 0L; -+//static KStaticDeleter sdShareList; -+QMap* KFileShare::s_shareMap = 0L; -+static KStaticDeleter > sdShareMap; - - KFileShare::ShareMode KFileShare::s_shareMode; - bool KFileShare::s_sambaEnabled; -@@ -164,10 +167,10 @@ - void KFileShare::readShareList() - { - KFileSharePrivate::self(); -- if ( !s_shareList ) -- sdShareList.setObject( s_shareList, new QStringList ); -+ if ( !s_shareMap ) -+ sdShareMap.setObject( s_shareMap, new QMap ); - else -- s_shareList->clear(); -+ s_shareMap->clear(); - - // /usr/sbin on Mandrake, $PATH allows flexibility for other distributions - QString exe = findExe( "filesharelist" ); -@@ -185,29 +188,45 @@ - - // Reading code shamelessly stolen from khostname.cpp ;) - QString line; -+ QString options; -+ QString path; - int length; -+ QRegExp rx_line("([^\\s]+)\\s+(.*)"); - do { - length = proc.readln(line, true); - if ( length > 0 ) - { - if ( line[length-1] != '/' ) - line += '/'; -- s_shareList->append(line); -+ if( rx_line.search( line ) != -1 ) { -+ options = rx_line.cap(1); -+ path = rx_line.cap(2); -+ (*s_shareMap)[path] = options; -+ } - kdDebug(7000) << "Shared dir:" << line << endl; - } - } while (length > -1); - } - - --bool KFileShare::isDirectoryShared( const QString& _path ) -+int KFileShare::isDirectoryShared( const QString& _path ) - { -- if ( ! s_shareList ) -+ int ret(0); -+ -+ if ( ! s_shareMap ) - readShareList(); - - QString path( _path ); - if ( path[path.length()-1] != '/' ) - path += '/'; -- return s_shareList && s_shareList->contains( path ); -+ //return s_shareList && s_shareList->contains( path ); -+ if( (*s_shareMap).contains(path) && !((*s_shareMap)[path].isEmpty()) ) { -+ ret+=1; -+ if( (*s_shareMap)[path].find("readwrite") != -1 ) -+ ret+=2; -+ } -+ -+ return ret; - } - - KFileShare::Authorization KFileShare::authorization() -@@ -230,17 +249,30 @@ - - bool KFileShare::setShared( const QString& path, bool shared ) - { -+ return SuSEsetShared( path, shared, false ); -+} -+ -+bool KFileShare::SuSEsetShared( const QString& path, bool shared, bool rw ) -+{ - if (! KFileShare::sharingEnabled() || - KFileShare::shareMode() == Advanced) - return false; - -- kdDebug(7000) << "KFileShare::setShared " << path << "," << shared << endl; - QString exe = KFileShare::findExe( "fileshareset" ); - if (exe.isEmpty()) - return false; -- -+ -+ // we want to share, so we kick it first - just to be sure - KProcess proc; - proc << exe; -+ proc << "--remove"; -+ proc << path; -+ proc.start( KProcess::Block ); -+ proc.clearArguments(); -+ -+ proc << exe; -+ if( rw ) -+ proc << "--rw"; - if ( shared ) - proc << "--add"; - else ---- kio/kio/kfileshare.h -+++ kio/kio/kfileshare.h 2004/08/06 08:38:31 -@@ -65,7 +65,7 @@ - /** - * Call this to know if a directory is currently shared - */ -- static bool isDirectoryShared( const QString& path ); -+ static int isDirectoryShared( const QString& path ); - - enum Authorization { NotInitialized, ErrorNotFound, Authorized, UserNotAllowed }; - /** -@@ -83,7 +83,12 @@ - * @returns wether the perl script was successful - */ - static bool setShared( const QString& path, bool shared ); -- -+ -+ /* -+ * SuSE only enhancement for now -+ */ -+ static bool SuSEsetShared( const QString& path, bool shared, bool ro ); -+ - /** - * The used share mode. - * Simple means that the simple sharing dialog is used and -@@ -132,7 +137,8 @@ - - private: - static Authorization s_authorization; -- static QStringList* s_shareList; -+// static QStringList* s_shareList; -+ static QMap* s_shareMap; - static ShareMode s_shareMode; - static bool s_sambaEnabled; - static bool s_nfsEnabled; diff --git a/opensuse/tdelibs/fix-dcopidlng-within-kdelibs-build.diff b/opensuse/tdelibs/fix-dcopidlng-within-kdelibs-build.diff deleted file mode 100644 index bac35d2b4..000000000 --- a/opensuse/tdelibs/fix-dcopidlng-within-kdelibs-build.diff +++ /dev/null @@ -1,16 +0,0 @@ -Index: dcop/dcopidlng/dcopidlng -=================================================================== ---- dcop/dcopidlng/dcopidlng.orig -+++ dcop/dcopidlng/dcopidlng -@@ -5,7 +5,11 @@ trap "rm -f dcopidlng.stderr.$$" 0 1 2 1 - if test -z "$KDECONFIG"; then - KDECONFIG=kde-config - fi -+if type kde-config > /dev/null; then - LIBDIR="`$KDECONFIG --install data --expandvars`/dcopidlng" -+else -+LIBDIR="${0%/*}" -+fi - perl -I"$LIBDIR" "$LIBDIR/kalyptus" --allow_k_dcop_accessors -f dcopidl $1 2> dcopidlng.stderr.$$ - RET=$? - if [ $RET -ne 0 ] diff --git a/opensuse/tdelibs/fix-gnome-help-support.diff b/opensuse/tdelibs/fix-gnome-help-support.diff deleted file mode 100644 index c9778f9bf..000000000 --- a/opensuse/tdelibs/fix-gnome-help-support.diff +++ /dev/null @@ -1,130 +0,0 @@ -Index: kdoctools/kio_help.cpp -=================================================================== ---- kdoctools/kio_help.cpp.orig -+++ kdoctools/kio_help.cpp -@@ -44,7 +44,27 @@ QString HelpProtocol::langLookup(const Q - // assemble the local search paths - const QStringList localDoc = KGlobal::dirs()->resourceDirs("html"); - -+ kdDebug( 7119 ) << "Looking up help for: " << fname << endl; -+ QString _fname = fname; -+ -+ QString path; -+ int slash = _fname.findRev ('/'); -+ if (slash == -1 || slash == 0) { -+ path = _fname; -+ _fname = ""; -+ } else { -+ path = _fname.left (slash); -+ _fname = _fname.right (_fname.length() - slash); -+ } -+ - QStringList langs = KGlobal::locale()->languageList(); -+ QStringList::ConstIterator lang; -+ for (lang = langs.begin(); lang != langs.end(); ++lang) -+ if ((*lang).left(2) == "en") -+ search.append(QString("/usr/share/gnome/help/%1/C%2").arg(path).arg(_fname)); -+ else -+ search.append(QString("/usr/share/gnome/help/%1/%2%3").arg(path).arg(*lang).arg(_fname)); -+ - langs.append( "en" ); - langs.remove( "C" ); - -@@ -60,7 +80,7 @@ QString HelpProtocol::langLookup(const Q - { - QStringList::ConstIterator lang; - for (lang = langs.begin(); lang != langs.end(); ++lang) -- search.append(QString("%1%2/%3").arg(localDoc[id], *lang, fname)); -+ search.append(QString("%1%2/%3").arg(localDoc[id], *lang, path + _fname)); - } - - // try to locate the file -@@ -81,6 +101,15 @@ QString HelpProtocol::langLookup(const Q - if (info.exists() && info.isFile() && info.isReadable()) - return *it; - } -+ -+ if ( ( *it ).right( 5 ) == ".html" ) -+ { -+ QString file = (*it).left((*it).findRev('/')) + "/" + path + ".xml"; -+ kdDebug( 7119 ) << "Looking for help in: " << file << endl; -+ info.setFile(file); -+ if (info.exists() && info.isFile() && info.isReadable()) -+ return *it; -+ } - } - - -@@ -100,7 +129,7 @@ QString HelpProtocol::lookupFile(const Q - result = langLookup(path); - if (result.isEmpty()) - { -- result = langLookup(path+"/index.html"); -+ result = langLookup(path + "/index.html"); - if (!result.isEmpty()) - { - KURL red( "help:/" ); -@@ -190,12 +219,26 @@ void HelpProtocol::get( const KURL& url - } - } else { - QString docbook_file = file.left(file.findRev('/')) + "/index.docbook"; -+ int last_slash = file.findRev('/'); -+ if (last_slash != -1 && last_slash != 0) { -+ int slash2 = file.findRev('/', last_slash -1); -+ if (slash2 != -1 && slash2 != 0) { -+ int slash3 = file.findRev('/', slash2 - 1); -+ if (slash3 != -1) { -+ QString xml_file = file.left(file.findRev('/')) + "/" + file.mid(slash3 + 1, slash2 - (slash3 + 1)) + ".xml"; -+ kdDebug( 7119 ) << "xml_file " << xml_file << endl; -+ QFileInfo fi(xml_file); -+ if (fi.exists()) -+ docbook_file = xml_file; -+ } -+ } -+ } - if (!KStandardDirs::exists(file)) { - file = docbook_file; - } else { - QFileInfo fi(file); - if (fi.isDir()) { -- file = file + "/index.docbook"; -+ file = docbook_file; - } else { - if ( file.right( 5 ) != ".html" || !compareTimeStamps( file, docbook_file ) ) { - get_file( target ); -@@ -238,7 +281,11 @@ void HelpProtocol::get( const KURL& url - mParsed = transform(file, locate("dtd", "customization/kde-chunk.xsl")); - if ( !mParsed.isEmpty() ) { - infoMessage( i18n( "Saving to cache" ) ); -- QString cache = file.left( file.length() - 7 ); -+ QString cache; -+ if (file.endsWith(".xml")) -+ cache = file.left( file.length() - strlen ("xml") ); -+ else -+ cache = file.left( file.length() - strlen ("docbook") ); - saveToCache( mParsed, locateLocal( "cache", - "kio_help" + cache + - "cache.bz2" ) ); -Index: kdoctools/xslt.cpp -=================================================================== ---- kdoctools/xslt.cpp.orig -+++ kdoctools/xslt.cpp -@@ -278,10 +278,16 @@ static bool readCache( const QString &fi - QString lookForCache( const QString &filename ) - { - kdDebug() << "lookForCache " << filename << endl; -- assert( filename.endsWith( ".docbook" ) ); -+ assert( filename.endsWith( ".docbook" ) || filename.endsWith( ".xml" ) ); - assert( filename.at( 0 ) == '/' ); - -- QString cache = filename.left( filename.length() - 7 ); -+ QString cache; -+ -+ if (filename.endsWith( ".xml" )) -+ cache = filename.left( filename.length() - strlen ("xml") ); -+ else -+ cache = filename.left( filename.length() - strlen ("docbook") ); -+ - QString output; - if ( readCache( filename, cache + "cache.bz2", output) ) - return output; diff --git a/opensuse/tdelibs/fix-gnome-help-support_legacy.diff b/opensuse/tdelibs/fix-gnome-help-support_legacy.diff deleted file mode 100644 index 0e2922e41..000000000 --- a/opensuse/tdelibs/fix-gnome-help-support_legacy.diff +++ /dev/null @@ -1,126 +0,0 @@ ---- kdoctools/kio_help.cpp -+++ kdoctools/kio_help.cpp -@@ -44,7 +44,27 @@ - // assemble the local search paths - const QStringList localDoc = KGlobal::dirs()->resourceDirs("html"); - -+ kdDebug( 7119 ) << "Looking up help for: " << fname << endl; -+ QString _fname = fname; -+ -+ QString path; -+ int slash = _fname.findRev ('/'); -+ if (slash == -1 || slash == 0) { -+ path = _fname; -+ _fname = ""; -+ } else { -+ path = _fname.left (slash); -+ _fname = _fname.right (_fname.length() - slash); -+ } -+ - QStringList langs = KGlobal::locale()->languageList(); -+ QStringList::ConstIterator lang; -+ for (lang = langs.begin(); lang != langs.end(); ++lang) -+ if ((*lang).left(2) == "en") -+ search.append(QString("/opt/gnome/share/gnome/help/%1/C%2").arg(path).arg(_fname)); -+ else -+ search.append(QString("/opt/gnome/share/gnome/help/%1/%2%3").arg(path).arg(*lang).arg(_fname)); -+ - langs.append( "en" ); - langs.remove( "C" ); - -@@ -60,7 +80,7 @@ - { - QStringList::ConstIterator lang; - for (lang = langs.begin(); lang != langs.end(); ++lang) -- search.append(QString("%1%2/%3").arg(localDoc[id], *lang, fname)); -+ search.append(QString("%1%2/%3").arg(localDoc[id], *lang, path + _fname)); - } - - // try to locate the file -@@ -81,6 +101,15 @@ - if (info.exists() && info.isFile() && info.isReadable()) - return *it; - } -+ -+ if ( ( *it ).right( 5 ) == ".html" ) -+ { -+ QString file = (*it).left((*it).findRev('/')) + "/" + path + ".xml"; -+ kdDebug( 7119 ) << "Looking for help in: " << file << endl; -+ info.setFile(file); -+ if (info.exists() && info.isFile() && info.isReadable()) -+ return *it; -+ } - } - - -@@ -100,7 +129,7 @@ - result = langLookup(path); - if (result.isEmpty()) - { -- result = langLookup(path+"/index.html"); -+ result = langLookup(path + "/index.html"); - if (!result.isEmpty()) - { - KURL red( "help:/" ); -@@ -190,12 +219,26 @@ - } - } else { - QString docbook_file = file.left(file.findRev('/')) + "/index.docbook"; -+ int last_slash = file.findRev('/'); -+ if (last_slash != -1 && last_slash != 0) { -+ int slash2 = file.findRev('/', last_slash -1); -+ if (slash2 != -1 && slash2 != 0) { -+ int slash3 = file.findRev('/', slash2 - 1); -+ if (slash3 != -1) { -+ QString xml_file = file.left(file.findRev('/')) + "/" + file.mid(slash3 + 1, slash2 - (slash3 + 1)) + ".xml"; -+ kdDebug( 7119 ) << "xml_file " << xml_file << endl; -+ QFileInfo fi(xml_file); -+ if (fi.exists()) -+ docbook_file = xml_file; -+ } -+ } -+ } - if (!KStandardDirs::exists(file)) { - file = docbook_file; - } else { - QFileInfo fi(file); - if (fi.isDir()) { -- file = file + "/index.docbook"; -+ file = docbook_file; - } else { - if ( file.right( 5 ) != ".html" || !compareTimeStamps( file, docbook_file ) ) { - get_file( target ); -@@ -238,7 +281,11 @@ - mParsed = transform(file, locate("dtd", "customization/kde-chunk.xsl")); - if ( !mParsed.isEmpty() ) { - infoMessage( i18n( "Saving to cache" ) ); -- QString cache = file.left( file.length() - 7 ); -+ QString cache; -+ if (file.endsWith(".xml")) -+ cache = file.left( file.length() - strlen ("xml") ); -+ else -+ cache = file.left( file.length() - strlen ("docbook") ); - saveToCache( mParsed, locateLocal( "cache", - "kio_help" + cache + - "cache.bz2" ) ); ---- kdoctools/xslt.cpp -+++ kdoctools/xslt.cpp -@@ -274,10 +274,16 @@ - QString lookForCache( const QString &filename ) - { - kdDebug() << "lookForCache " << filename << endl; -- assert( filename.endsWith( ".docbook" ) ); -+ assert( filename.endsWith( ".docbook" ) || filename.endsWith( ".xml" ) ); - assert( filename.at( 0 ) == '/' ); - -- QString cache = filename.left( filename.length() - 7 ); -+ QString cache; -+ -+ if (filename.endsWith( ".xml" )) -+ cache = filename.left( filename.length() - strlen ("xml") ); -+ else -+ cache = filename.left( filename.length() - strlen ("docbook") ); -+ - QString output; - if ( readCache( filename, cache + "cache.bz2", output) ) - return output; diff --git a/opensuse/tdelibs/fix-kdemm-build.diff b/opensuse/tdelibs/fix-kdemm-build.diff deleted file mode 100644 index befe5e324..000000000 --- a/opensuse/tdelibs/fix-kdemm-build.diff +++ /dev/null @@ -1,88 +0,0 @@ -Index: kdemm/backend.h -=================================================================== ---- kdemm/backend.h.orig -+++ kdemm/backend.h -@@ -41,7 +41,7 @@ namespace Multimedia - * \author Matthias Kretz - * \since 4.0 - */ -- class Backend : public QObject -+ class KDE_EXPORT Backend : public QObject - { - Q_OBJECT - public: -Index: kdemm/channel.h -=================================================================== ---- kdemm/channel.h.orig -+++ kdemm/channel.h -@@ -34,7 +34,7 @@ namespace Multimedia - * \author Matthias Kretz - * \since 4.0 - */ -- class Channel : public QObject, virtual public MixerIface -+ class KDE_EXPORT Channel : public QObject, virtual public MixerIface - { - Q_OBJECT - public: -Index: kdemm/factory.h -=================================================================== ---- kdemm/factory.h.orig -+++ kdemm/factory.h -@@ -64,7 +64,7 @@ class VideoPlayer; - * \author Matthias Kretz - * \since 4.0 - */ --class Factory : public QObject, public DCOPObject -+class KDE_EXPORT Factory : public QObject, public DCOPObject - { - Q_OBJECT - public: -Index: kdemm/player.h -=================================================================== ---- kdemm/player.h.orig -+++ kdemm/player.h -@@ -20,6 +20,7 @@ - #ifndef PLAYOBJECT_H - #define PLAYOBJECT_H - -+#include - #include - - class KURL; -@@ -35,7 +36,7 @@ namespace Multimedia - * \author Matthias Kretz - * \since 4.0 - */ -- class Player : public QObject -+ class KDE_EXPORT Player : public QObject - { - Q_OBJECT - public: -Index: kdemm/simpleplayer.h -=================================================================== ---- kdemm/simpleplayer.h.orig -+++ kdemm/simpleplayer.h -@@ -32,7 +32,7 @@ namespace KDE - namespace Multimedia - { - --class SimplePlayer : public QObject -+class KDE_EXPORT SimplePlayer : public QObject - { - Q_OBJECT - public: -Index: kdemm/mixeriface.h -=================================================================== ---- kdemm/mixeriface.h.orig -+++ kdemm/mixeriface.h -@@ -21,8 +21,9 @@ - #define MIXERIFACE_H - - #include -+#include - --class MixerIface : public DCOPObject -+class KDE_EXPORT MixerIface : public DCOPObject - { - K_DCOP - k_dcop: diff --git a/opensuse/tdelibs/fix-kerberos-printing.diff b/opensuse/tdelibs/fix-kerberos-printing.diff deleted file mode 100644 index 0276cdd06..000000000 --- a/opensuse/tdelibs/fix-kerberos-printing.diff +++ /dev/null @@ -1,37 +0,0 @@ -Index: kdeprint/management/smbview.cpp -=================================================================== ---- kdeprint/management/smbview.cpp.orig -+++ kdeprint/management/smbview.cpp -@@ -187,13 +187,26 @@ void SmbView::setOpen(QListViewItem *ite - } - else if (item->depth() == 1) - { // opening server -+ char *krb5ccname = getenv ("KRB5CCNAME"); - m_current = item; -- *m_proc << "smbclient -N -L "; -- *m_proc << KProcess::quote(item->text(0)); -- *m_proc << " -W "; -- *m_proc << KProcess::quote(item->parent()->text(0)); -- *m_proc << " -A "; -- *m_proc << KProcess::quote(m_passwdFile->name()); -+ if (krb5ccname) -+ { -+ *m_proc << "smbclient -k -N -L "; -+ } -+ else -+ { -+ *m_proc << "smbclient -N -L "; -+ } -+ *m_proc << KProcess::quote (item->text (0)); -+ *m_proc << " -W "; -+ *m_proc << KProcess::quote (item->parent ()-> -+ text (0)); -+ if (!krb5ccname) -+ { -+ *m_proc << " -A "; -+ *m_proc << KProcess:: -+ quote (m_passwdFile->name ()); -+ } - startProcess(ShareListing); - } - } diff --git a/opensuse/tdelibs/fix-macmenu.patch b/opensuse/tdelibs/fix-macmenu.patch deleted file mode 100644 index 4b8f6b1cf..000000000 --- a/opensuse/tdelibs/fix-macmenu.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- kdeui/kmenubar.cpp.sav 2008-03-08 17:32:38.000000000 +0100 -+++ kdeui/kmenubar.cpp 2009-08-30 09:27:29.000000000 +0200 -@@ -308,7 +308,7 @@ void KMenuBar::updateFallbackSize() - if( d->fallback_mode ) - { - d->fallback_mode = false; --// KWin::setStrut( winId(), 0, 0, 0, 0 ); KWin will set strut as it will see fit -+ KWin::setStrut( winId(), 0, 0, 0, 0 ); - setMinimumSize( 0, 0 ); - setMaximumSize( QWIDGETSIZE_MAX, QWIDGETSIZE_MAX ); - updateMenuBarSize(); diff --git a/opensuse/tdelibs/fix-qxembed.diff b/opensuse/tdelibs/fix-qxembed.diff deleted file mode 100644 index 8ea18d69d..000000000 --- a/opensuse/tdelibs/fix-qxembed.diff +++ /dev/null @@ -1,80 +0,0 @@ -Index: kdeui/qxembed.h -=================================================================== ---- kdeui/qxembed.h.orig -+++ kdeui/qxembed.h -@@ -191,6 +191,11 @@ public: - void enterWhatsThisMode(); // temporary, fix in Qt (Matthias, Mon Jul 17 15:20:55 CEST 2000 ) - virtual void reparent( QWidget * parent, WFlags f, const QPoint & p, bool showIt = false ); - -+ /** -+ * @internal -+ */ -+ void updateEmbeddedFocus( bool hasfocus ); -+ - signals: - /** - * This signal is emitted when the embedded window has been lost (destroyed or reparented away) -Index: kdeui/qxembed.cpp -=================================================================== ---- kdeui/qxembed.cpp.orig -+++ kdeui/qxembed.cpp -@@ -314,8 +314,8 @@ bool QXEmbedAppFilter::eventFilter( QObj - if ( qApp->focusWidget() == o && - ((QPublicWidget*)qApp->focusWidget()->topLevelWidget())->topData()->embedded ) { - QFocusEvent* fe = (QFocusEvent*) e; -- if ( obeyFocus || fe->reason() == QFocusEvent::Mouse || -- fe->reason() == QFocusEvent::Shortcut ) { -+ if ( obeyFocus || fe->reason() != QFocusEvent::ActiveWindow /*|| fe->reason() == QFocusEvent::Mouse || -+ fe->reason() == QFocusEvent::Shortcut*/ ) { - // L0614: A widget in the embedded client was just given the Qt focus. - // Variable `obeyFocus' suggests that this is the result of mouse - // activity in the client. The XEMBED_REQUEST_FOCUS message causes -@@ -478,8 +478,11 @@ static int qxembed_x11_event_filter( XEv - switch ( detail ) { - case XEMBED_FOCUS_CURRENT: - // L0683: Set focus on saved focus widget -- if ( focusCurrent ) -+ if ( focusCurrent ) { - focusCurrent->setFocus(); -+ if( QXEmbed* emb = dynamic_cast< QXEmbed* >( focusCurrent )) -+ emb->updateEmbeddedFocus( true ); -+ } - else if ( !w->topLevelWidget()->focusWidget() ) - w->topLevelWidget()->setFocus(); - break; -@@ -511,6 +514,8 @@ static int qxembed_x11_event_filter( XEv - // We first record what the focus widget was - // and clear the Qt focus. - if ( w->topLevelWidget()->focusWidget() ) { -+ if( QXEmbed* emb = dynamic_cast< QXEmbed* >( w->topLevelWidget()->focusWidget())) -+ emb->updateEmbeddedFocus( false ); - focusMap->insert( w->topLevelWidget(), - new QGuardedPtr(w->topLevelWidget()->focusWidget() ) ); - w->topLevelWidget()->focusWidget()->clearFocus(); -@@ -919,6 +924,17 @@ void QXEmbed::focusOutEvent( QFocusEvent - } - - -+// When QXEmbed has Qt focus and gets/loses X focus, make sure the client knows -+// about the state of the focus. -+void QXEmbed::updateEmbeddedFocus( bool hasfocus ){ -+ if (!window || d->xplain) -+ return; -+ if( hasfocus ) -+ sendXEmbedMessage( window, XEMBED_FOCUS_IN, XEMBED_FOCUS_CURRENT); -+ else -+ sendXEmbedMessage( window, XEMBED_FOCUS_OUT); -+} -+ - // L1600: Helper for QXEmbed::embed() - // Check whether a window is in withdrawn state. - static bool wstate_withdrawn( WId winid ) -@@ -1161,6 +1177,8 @@ bool QXEmbed::x11Event( XEvent* e) - // L2085: The client asks for the focus. - case XEMBED_REQUEST_FOCUS: - if( ((QPublicWidget*)topLevelWidget())->topData()->embedded ) { -+ focusMap->remove( topLevelWidget() ); -+ focusMap->insert( topLevelWidget(), new QGuardedPtr( this )); - WId window = ((QPublicWidget*)topLevelWidget())->topData()->parentWinId; - sendXEmbedMessage( window, XEMBED_REQUEST_FOCUS ); - } else { diff --git a/opensuse/tdelibs/flash-player-non-oss.diff b/opensuse/tdelibs/flash-player-non-oss.diff deleted file mode 100644 index e3bcdc3e4..000000000 --- a/opensuse/tdelibs/flash-player-non-oss.diff +++ /dev/null @@ -1,44 +0,0 @@ -Index: khtml/rendering/render_frames.cpp -=================================================================== ---- khtml/rendering/render_frames.cpp.orig -+++ khtml/rendering/render_frames.cpp -@@ -940,14 +940,33 @@ void RenderPartObject::slotPartLoadingEr - // Prepare the URL to show in the question (host only if http, to make it short) - KURL pluginPageURL( embed->pluginPage ); - QString shortURL = pluginPageURL.protocol() == "http" ? pluginPageURL.host() : pluginPageURL.prettyURL(); -- int res = KMessageBox::questionYesNo( m_view, -- i18n("No plugin found for '%1'.\nDo you want to download one from %2?").arg(mimeName).arg(shortURL), -+ -+ int res; -+ if (mimeName.startsWith("Shockwave Flash",false)) -+ { -+ res = KMessageBox::questionYesNo( m_view, -+ i18n("No plugin found for '%1'.\nDo you want to download one from %2?").arg(mimeName).arg("openSUSE"), - i18n("Missing Plugin"), i18n("Download"), i18n("Do Not Download"), QString("plugin-")+serviceType); -- if ( res == KMessageBox::Yes ) -+ -+ if ( res == KMessageBox::Yes ) -+ { -+ // Open YMP file -+ KURL ymp_flash ("http://download.opensuse.org/YaST/flash-player.ymp"); -+ ext->openURLRequest( ymp_flash ); -+ return; -+ } -+ } -+ else - { -- // Display vendor download page -- ext->createNewWindow( pluginPageURL ); -- return; -+ res = KMessageBox::questionYesNo( m_view, -+ i18n("No plugin found for '%1'.\nDo you want to download one from %2?").arg(mimeName).arg(shortURL), -+ i18n("Missing Plugin"), i18n("Download"), i18n("Do Not Download"), QString("plugin-")+serviceType); -+ if ( res == KMessageBox::Yes ) -+ { -+ // Display vendor download page -+ ext->createNewWindow( pluginPageURL ); -+ return; -+ } - } - } - } diff --git a/opensuse/tdelibs/fontconfig-reverse-lookup.diff b/opensuse/tdelibs/fontconfig-reverse-lookup.diff deleted file mode 100644 index af32e5600..000000000 --- a/opensuse/tdelibs/fontconfig-reverse-lookup.diff +++ /dev/null @@ -1,137 +0,0 @@ -Index: kdeui/Makefile.am -=================================================================== ---- kdeui/Makefile.am.orig -+++ kdeui/Makefile.am -@@ -20,7 +20,7 @@ - - SUBDIRS = . kdetrayproxy tests about - --INCLUDES= -I$(top_srcdir)/kdefx -I$(top_srcdir)/interfaces $(all_includes) -+INCLUDES= -I/usr/include/freetype2/ -I$(top_srcdir)/kdefx -I$(top_srcdir)/interfaces $(all_includes) - - # For the future: examine if condensing the tons of *_LDFLAGS variables - # into $(all_libraries) isn't better -Index: kdeui/kaction.cpp -=================================================================== ---- kdeui/kaction.cpp.orig -+++ kdeui/kaction.cpp -@@ -42,6 +42,17 @@ - #include - #include - -+#include -+#include FT_FREETYPE_H -+#include -+#include -+#include -+#include -+#include -+#include -+ -+#include -+ - /** - * How it works. - * KActionCollection is an organizing container for KActions. -Index: kdeui/kactionclasses.cpp -=================================================================== ---- kdeui/kactionclasses.cpp.orig -+++ kdeui/kactionclasses.cpp -@@ -27,6 +27,9 @@ - #include "kactionclasses.h" - - #include -+#include -+#include FT_FREETYPE_H -+#include - - #include - #include -@@ -35,6 +38,7 @@ - #include - #include - #include -+#include - - #include - #include -@@ -1498,7 +1502,24 @@ void KFontAction::setFont( const QString - return; - } - } -- kdDebug(129) << "Font not found " << family.lower() << endl; -+ -+ // nothing matched yet, try a fontconfig reverse lookup and -+ // check again to solve an alias -+ FcPattern *pattern = NULL; -+ FcConfig *config = NULL; -+ QString realFamily; -+ QRegExp regExp("[-:]"); -+ pattern = FcNameParse( (unsigned char*) family.ascii() ); -+ FcDefaultSubstitute(pattern); -+ FcConfigSubstitute (config, pattern, FcMatchPattern); -+ pattern = FcFontMatch(NULL, pattern, NULL); -+ realFamily = (char*)FcNameUnparse(pattern); -+ realFamily.remove(realFamily.find(regExp), realFamily.length()); -+ -+ if ( !realFamily.isEmpty() && realFamily != family ) -+ setFont( realFamily ); -+ else -+ kdDebug(129) << "Font not found " << family.lower() << endl; - } - - int KFontAction::plug( QWidget *w, int index ) -Index: kdeui/kfontcombo.cpp -=================================================================== ---- kdeui/kfontcombo.cpp.orig -+++ kdeui/kfontcombo.cpp -@@ -20,6 +20,7 @@ - #include - #include - #include -+#include - - #include - #include -@@ -29,6 +30,18 @@ - #include "kfontcombo.h" - #include "kfontcombo.moc" - -+#include -+#include FT_FREETYPE_H -+#include -+#include -+#include -+#include -+#include -+#include -+ -+#include -+ -+ - struct KFontComboPrivate - { - KFontComboPrivate() -@@ -227,6 +240,22 @@ void KFontCombo::setCurrentFont(const QS - return; - } - } -+ -+ // nothing matched yet, try a fontconfig reverse lookup and -+ // check again to solve an alias -+ FcPattern *pattern = NULL; -+ FcConfig *config = NULL; -+ QString realFamily; -+ QRegExp regExp("[-:]"); -+ pattern = FcNameParse( (unsigned char*) family.ascii() ); -+ FcDefaultSubstitute(pattern); -+ FcConfigSubstitute (config, pattern, FcMatchPattern); -+ pattern = FcFontMatch(NULL, pattern, NULL); -+ realFamily = (char*)FcNameUnparse(pattern); -+ realFamily.remove(realFamily.find(regExp), realFamily.length()); -+ -+ if ( !realFamily.isEmpty() && realFamily != family ) -+ setCurrentFont( realFamily ); - } - - void KFontCombo::slotModified( int ) diff --git a/opensuse/tdelibs/gcc44.diff b/opensuse/tdelibs/gcc44.diff deleted file mode 100644 index f191e1202..000000000 --- a/opensuse/tdelibs/gcc44.diff +++ /dev/null @@ -1,20 +0,0 @@ ---- kioslave/ftp/ftp.cc.sav 2009-05-29 13:38:11.000000000 +0200 -+++ kioslave/ftp/ftp.cc 2009-05-29 13:38:38.000000000 +0200 -@@ -876,7 +876,7 @@ int Ftp::ftpOpenPASVDataConnection() - // The usual answer is '227 Entering Passive Mode. (160,39,200,55,6,245)' - // but anonftpd gives '227 =160,39,200,55,6,245' - int i[6]; -- char *start = strchr(ftpResponse(3), '('); -+ const char *start = strchr(ftpResponse(3), '('); - if ( !start ) - start = strchr(ftpResponse(3), '='); - if ( !start || -@@ -931,7 +931,7 @@ int Ftp::ftpOpenEPSVDataConnection() - return ERR_INTERNAL; - } - -- char *start = strchr(ftpResponse(3), '|'); -+ const char *start = strchr(ftpResponse(3), '|'); - if ( !start || sscanf(start, "|||%d|", &portnum) != 1) - return ERR_INTERNAL; - diff --git a/opensuse/tdelibs/gcc45.diff b/opensuse/tdelibs/gcc45.diff deleted file mode 100644 index a4b8679bf..000000000 --- a/opensuse/tdelibs/gcc45.diff +++ /dev/null @@ -1,31 +0,0 @@ ------------------------------------------------------------------------- -r1074156 | mueller | 2010-01-13 16:02:53 +0100 (Mi, 13. Jan 2010) | 2 Zeilen - -fix build with gcc 4.5 - ------------------------------------------------------------------------- -Index: kate/part/katehighlight.cpp -=================================================================== ---- kate/part/katehighlight.cpp (Revision 1074155) -+++ kate/part/katehighlight.cpp (Revision 1074156) -@@ -3225,7 +3225,7 @@ void KateHlManager::getDefaults(uint sch - list.append(charAttribute); - - KateAttribute* string = new KateAttribute(); -- string->setTextColor(QColor::QColor("#D00")); -+ string->setTextColor(QColor("#D00")); - string->setSelectedTextColor(Qt::red); - list.append(string); - -@@ -3242,9 +3242,9 @@ void KateHlManager::getDefaults(uint sch - - KateAttribute* alert = new KateAttribute(); - alert->setTextColor(Qt::black); -- alert->setSelectedTextColor( QColor::QColor("#FCC") ); -+ alert->setSelectedTextColor( QColor("#FCC") ); - alert->setBold(true); -- alert->setBGColor( QColor::QColor("#FCC") ); -+ alert->setBGColor( QColor("#FCC") ); - list.append(alert); - - KateAttribute* functionAttribute = new KateAttribute(); diff --git a/opensuse/tdelibs/google-mail.diff b/opensuse/tdelibs/google-mail.diff deleted file mode 100644 index 59b132529..000000000 --- a/opensuse/tdelibs/google-mail.diff +++ /dev/null @@ -1,18 +0,0 @@ -Index: khtml/html/html_elementimpl.cpp -=================================================================== ---- khtml/html/html_elementimpl.cpp.orig -+++ khtml/html/html_elementimpl.cpp -@@ -565,6 +565,13 @@ DocumentFragment HTMLElementImpl::create - - void HTMLElementImpl::setInnerHTML( const DOMString &html, int &exceptioncode ) - { -+ // Works line innerText in Gecko -+ // ### test if needed for ID_SCRIPT as well. -+ if ( id() == ID_STYLE ) { -+ setInnerText(html, exceptioncode); -+ return; -+ } -+ - DocumentFragment fragment = createContextualFragment( html ); - if ( fragment.isNull() ) { - exceptioncode = DOMException::NO_MODIFICATION_ALLOWED_ERR; diff --git a/opensuse/tdelibs/ignore-inline-menu.diff b/opensuse/tdelibs/ignore-inline-menu.diff deleted file mode 100644 index 106bc5284..000000000 --- a/opensuse/tdelibs/ignore-inline-menu.diff +++ /dev/null @@ -1,18 +0,0 @@ ---- kded/vfolder_menu.cpp 2009/11/07 07:01:12 1.1 -+++ kded/vfolder_menu.cpp 2009/11/07 07:01:42 -@@ -1496,6 +1496,7 @@ - else - kdDebug()<<" Error in parsing show_empty attribute :"<hidden = cfg.readBoolEntry("Hidden", false); - d->example = cfg.readPathEntry("Example"); diff --git a/opensuse/tdelibs/integrate-global-pixmaps-new.diff b/opensuse/tdelibs/integrate-global-pixmaps-new.diff deleted file mode 100644 index 2d3a831b7..000000000 --- a/opensuse/tdelibs/integrate-global-pixmaps-new.diff +++ /dev/null @@ -1,13 +0,0 @@ -Index: kdecore/kicontheme.cpp -=================================================================== ---- kdecore/kicontheme.cpp.orig -+++ kdecore/kicontheme.cpp -@@ -150,6 +150,8 @@ KIconTheme::KIconTheme(const QString& na - if ( name != "crystalsvg" ) - for ( QStringList::Iterator it = mInherits.begin(); it != mInherits.end(); ++it ) - if ( *it == "default" || *it == "hicolor" ) *it="crystalsvg"; -+ if ( name == "hicolor" ) -+ mInherits = "crystalsuse"; - - d->hidden = cfg.readBoolEntry("Hidden", false); - d->example = cfg.readPathEntry("Example"); diff --git a/opensuse/tdelibs/kcontrol_crash_patch.diff b/opensuse/tdelibs/kcontrol_crash_patch.diff deleted file mode 100644 index 22b3749f6..000000000 --- a/opensuse/tdelibs/kcontrol_crash_patch.diff +++ /dev/null @@ -1,11 +0,0 @@ ---- kdecore/svgicons/ksvgiconengine.cpp.orig 2011-03-15 01:29:21.172970849 +0300 -+++ kdecore/svgicons/ksvgiconengine.cpp 2011-03-15 01:42:09.904779795 +0300 -@@ -538,6 +538,8 @@ - - bool KSVGIconEngine::load(int width, int height, const QString &path) - { -+ if(path.isNull()) return false; -+ - QDomDocument svgDocument("svg"); - QFile file(path); - diff --git a/opensuse/tdelibs/kde3rc.dif b/opensuse/tdelibs/kde3rc.dif deleted file mode 100644 index 72465757e..000000000 --- a/opensuse/tdelibs/kde3rc.dif +++ /dev/null @@ -1,17 +0,0 @@ -Index: kdecore/kconfigbackend.cpp -=================================================================== ---- kdecore/kconfigbackend.cpp.orig -+++ kdecore/kconfigbackend.cpp -@@ -352,7 +352,11 @@ bool KConfigINIBackEnd::parseConfigFiles - #ifdef Q_WS_WIN - QString etc_kderc = QFile::decodeName( QCString(getenv("WINDIR")) + "\\kderc" ); - #else -- QString etc_kderc = QString::fromLatin1("/etc/kderc"); -+ QString etc_kderc; -+ if (checkAccess(QString::fromLatin1("/etc/tderc"), R_OK)) -+ etc_kderc = QString::fromLatin1("/etc/tderc"); -+ else -+ etc_kderc = QString::fromLatin1("/etc/kde3rc"); - #endif - - if (checkAccess(etc_kderc, R_OK)) diff --git a/opensuse/tdelibs/kde4-applications.diff b/opensuse/tdelibs/kde4-applications.diff deleted file mode 100644 index 78f223d46..000000000 --- a/opensuse/tdelibs/kde4-applications.diff +++ /dev/null @@ -1,70 +0,0 @@ -Index: kio/kio/kservice.cpp -=================================================================== ---- kio/kio/kservice.cpp.orig -+++ kio/kio/kservice.cpp -@@ -97,6 +97,7 @@ KService::init( KDesktopFile *config ) - m_bValid = true; - - bool absPath = !QDir::isRelativePath(entryPath()); -+ bool kde4application = config->fileName().startsWith("/usr/share/applications/kde4/"); - - config->setDesktopGroup(); - -@@ -133,6 +134,8 @@ KService::init( KDesktopFile *config ) - if (i != -1) - m_strName = m_strName.left(i); - } -+ if (kde4application) -+ m_strName += "/KDE4"; - - m_strType = config->readType(); - entryMap.remove("Type"); -@@ -196,6 +199,18 @@ KService::init( KDesktopFile *config ) - name = name.left(pos); - - m_strExec = config->readPathEntry( "Exec" ); -+ if (kde4application && !m_strExec.startsWith("/")) -+ m_strExec = "/usr/bin/"+m_strExec; -+ else if (config->readBoolEntry("X-KDE-SubstituteUID")) { -+ int space = m_strExec.find(" "); -+ if (space==-1) -+ m_strExec = KStandardDirs::findExe(m_strExec); -+ else { -+ const QString command = m_strExec.left(space); -+ m_strExec.replace(command,KStandardDirs::findExe(command)); -+ } -+ } -+ - entryMap.remove("Exec"); - - m_strIcon = config->readEntry( "Icon", "unknown" ); -@@ -245,6 +260,8 @@ KService::init( KDesktopFile *config ) - m_DCOPServiceType = DCOP_None; - - m_strDesktopEntryName = name.lower(); -+ if (kde4application) -+ m_strDesktopEntryName = "kde4-" + m_strDesktopEntryName; - - m_bAllowAsDefault = config->readBoolEntry( "AllowDefault", true ); - entryMap.remove("AllowDefault"); -@@ -254,6 +271,8 @@ KService::init( KDesktopFile *config ) - if ( m_initialPreference == 1 ) - m_initialPreference = config->readNumEntry( "InitialPreference", 1 ); - entryMap.remove("InitialPreference"); -+ if (kde4application) -+ m_initialPreference = 1; - - // Store all additional entries in the property map. - // A QMap would be easier for this but we can't -@@ -263,7 +282,10 @@ KService::init( KDesktopFile *config ) - for( ; it != entryMap.end();++it) - { - //qDebug(" Key = %s Data = %s", it.key().latin1(), it.data().latin1()); -- m_mapProps.insert( it.key(), QVariant( it.data())); -+ QString key = it.key(); -+ if (kde4application && key=="OnlyShowIn" && it.data()=="KDE;") -+ key = "NotShowIn"; -+ m_mapProps.insert( key, QVariant( it.data())); - } - } - diff --git a/opensuse/tdelibs/kdecode_fakes_include.diff b/opensuse/tdelibs/kdecode_fakes_include.diff deleted file mode 100644 index a00585286..000000000 --- a/opensuse/tdelibs/kdecode_fakes_include.diff +++ /dev/null @@ -1,18 +0,0 @@ ---- kdecore/fakes.c -+++ kdecore/fakes.c 2010/01/10 14:00:22 -@@ -323,6 +323,7 @@ - #endif - - #ifndef HAVE_STRLCPY -+#include - KDECORE_EXPORT unsigned long strlcpy(char* d, const char* s, unsigned long bufsize) - { - unsigned long len, ret = strlen(s); -@@ -341,6 +342,7 @@ - #endif - - #ifndef HAVE_STRLCAT -+#include - KDECORE_EXPORT unsigned long strlcat(char* d, const char* s, unsigned long bufsize) - { - char *cp; diff --git a/opensuse/tdelibs/kdelibs-3.5.10-CVE-2009-2702.patch b/opensuse/tdelibs/kdelibs-3.5.10-CVE-2009-2702.patch deleted file mode 100644 index e6f06a779..000000000 --- a/opensuse/tdelibs/kdelibs-3.5.10-CVE-2009-2702.patch +++ /dev/null @@ -1,62 +0,0 @@ -diff -pruN kdelibs-3.5.4.orig/kio/kssl/kopenssl.cc kdelibs-3.5.4/kio/kssl/kopenssl.cc ---- kdelibs-3.5.4.orig/kio/kssl/kopenssl.cc 2009-08-31 20:50:12.000000000 +0200 -+++ kdelibs-3.5.4/kio/kssl/kopenssl.cc 2009-08-31 21:46:47.000000000 +0200 -@@ -196,6 +196,7 @@ static int (*K_X509_NAME_add_entry_by_tx - static X509_NAME *(*K_X509_NAME_new)() = 0L; - static int (*K_X509_REQ_set_subject_name)(X509_REQ*,X509_NAME*) = 0L; - static unsigned char *(*K_ASN1_STRING_data)(ASN1_STRING*) = 0L; -+static int (*K_ASN1_STRING_length)(ASN1_STRING*) = 0L; - static STACK_OF(SSL_CIPHER) *(*K_SSL_get_ciphers)(const SSL *ssl) = 0L; - - #endif -@@ -498,6 +499,7 @@ KConfig *cfg; - K_X509_NAME_new = (X509_NAME *(*)()) _cryptoLib->symbol("X509_NAME_new"); - K_X509_REQ_set_subject_name = (int (*)(X509_REQ*,X509_NAME*)) _cryptoLib->symbol("X509_REQ_set_subject_name"); - K_ASN1_STRING_data = (unsigned char *(*)(ASN1_STRING*)) _cryptoLib->symbol("ASN1_STRING_data"); -+ K_ASN1_STRING_length = (int (*)(ASN1_STRING*)) _cryptoLib->symbol("ASN1_STRING_length"); - #endif - } - -@@ -1549,6 +1551,13 @@ unsigned char *KOpenSSLProxy::ASN1_STRIN - return 0L; - } - -+ -+int KOpenSSLProxy::ASN1_STRING_length(ASN1_STRING *x) { -+ if (K_ASN1_STRING_length) return (K_ASN1_STRING_length)(x); -+ return 0L; -+} -+ -+ - STACK_OF(SSL_CIPHER) *KOpenSSLProxy::SSL_get_ciphers(const SSL* ssl) { - if (K_SSL_get_ciphers) return (K_SSL_get_ciphers)(ssl); - return 0L; -diff -pruN kdelibs-3.5.4.orig/kio/kssl/kopenssl.h kdelibs-3.5.4/kio/kssl/kopenssl.h ---- kdelibs-3.5.4.orig/kio/kssl/kopenssl.h 2006-07-22 10:16:39.000000000 +0200 -+++ kdelibs-3.5.4/kio/kssl/kopenssl.h 2009-08-31 21:46:47.000000000 +0200 -@@ -622,6 +622,11 @@ public: - unsigned char *ASN1_STRING_data(ASN1_STRING *x); - - /* -+ * ASN1_STRING_length -+ */ -+ int ASN1_STRING_length(ASN1_STRING *x); -+ -+ /* - * - */ - int OBJ_obj2nid(ASN1_OBJECT *o); -diff -pruN kdelibs-3.5.4.orig/kio/kssl/ksslcertificate.cc kdelibs-3.5.4/kio/kssl/ksslcertificate.cc ---- kdelibs-3.5.4.orig/kio/kssl/ksslcertificate.cc 2006-01-19 18:06:12.000000000 +0100 -+++ kdelibs-3.5.4/kio/kssl/ksslcertificate.cc 2009-08-31 21:54:38.000000000 +0200 -@@ -1099,7 +1099,9 @@ QStringList KSSLCertificate::subjAltName - } - - QString s = (const char *)d->kossl->ASN1_STRING_data(val->d.ia5); -- if (!s.isEmpty()) { -+ if (!s.isEmpty() && -+ /* skip subjectAltNames with embedded NULs */ -+ s.length() == d->kossl->ASN1_STRING_length(val->d.ia5)) { - rc += s; - } - } diff --git a/opensuse/tdelibs/kdelibs-3.5.10-cve-2009-1698.patch b/opensuse/tdelibs/kdelibs-3.5.10-cve-2009-1698.patch deleted file mode 100644 index ab9fea5c2..000000000 --- a/opensuse/tdelibs/kdelibs-3.5.10-cve-2009-1698.patch +++ /dev/null @@ -1,42 +0,0 @@ -diff -ur kdelibs-3.5.10/khtml/css/cssparser.cpp kdelibs-3.5.10-cve-2009-1698/khtml/css/cssparser.cpp ---- kdelibs-3.5.10/khtml/css/cssparser.cpp 2007-01-15 12:34:04.000000000 +0100 -+++ kdelibs-3.5.10-cve-2009-1698/khtml/css/cssparser.cpp 2009-07-26 05:46:39.000000000 +0200 -@@ -1344,6 +1344,14 @@ - if ( args->size() != 1) - return false; - Value *a = args->current(); -+ if (a->unit != CSSPrimitiveValue::CSS_IDENT) { -+ isValid=false; -+ break; -+ } -+ if (qString(a->string)[0] == '-') { -+ isValid=false; -+ break; -+ } - parsedValue = new CSSPrimitiveValueImpl(domString(a->string), CSSPrimitiveValue::CSS_ATTR); - } - else -@@ -1396,7 +1404,8 @@ - - CounterImpl *counter = new CounterImpl; - Value *i = args->current(); --// if (i->unit != CSSPrimitiveValue::CSS_IDENT) goto invalid; -+ if (i->unit != CSSPrimitiveValue::CSS_IDENT) goto invalid; -+ if (qString(i->string)[0] == '-') goto invalid; - counter->m_identifier = domString(i->string); - if (counters) { - i = args->next(); -diff -ur kdelibs-3.5.10/khtml/css/css_valueimpl.cpp kdelibs-3.5.10-cve-2009-1698/khtml/css/css_valueimpl.cpp ---- kdelibs-3.5.10/khtml/css/css_valueimpl.cpp 2006-07-22 10:16:49.000000000 +0200 -+++ kdelibs-3.5.10-cve-2009-1698/khtml/css/css_valueimpl.cpp 2009-07-26 05:45:36.000000000 +0200 -@@ -736,7 +736,9 @@ - text = getValueName(m_value.ident); - break; - case CSSPrimitiveValue::CSS_ATTR: -- // ### -+ text = "attr("; -+ text += DOMString( m_value.string ); -+ text += ")"; - break; - case CSSPrimitiveValue::CSS_COUNTER: - text = "counter("; diff --git a/opensuse/tdelibs/kdelibs-3.5.10-cve-2009-1725.patch b/opensuse/tdelibs/kdelibs-3.5.10-cve-2009-1725.patch deleted file mode 100644 index ee8fdbc3f..000000000 --- a/opensuse/tdelibs/kdelibs-3.5.10-cve-2009-1725.patch +++ /dev/null @@ -1,13 +0,0 @@ -Index: khtml/html/htmltokenizer.cpp -=================================================================== ---- khtml/html/htmltokenizer.cpp (revision 1002163) -+++ khtml/html/htmltokenizer.cpp (revision 1002164) -@@ -736,7 +736,7 @@ - #ifdef TOKEN_DEBUG - kdDebug( 6036 ) << "unknown entity!" << endl; - #endif -- checkBuffer(10); -+ checkBuffer(11); - // ignore the sequence, add it to the buffer as plaintext - *dest++ = '&'; - for(unsigned int i = 0; i < cBufferPos; i++) diff --git a/opensuse/tdelibs/kdelibs-3.5.10-cve-2009-2537-select-length.patch b/opensuse/tdelibs/kdelibs-3.5.10-cve-2009-2537-select-length.patch deleted file mode 100644 index 5972b0a38..000000000 --- a/opensuse/tdelibs/kdelibs-3.5.10-cve-2009-2537-select-length.patch +++ /dev/null @@ -1,30 +0,0 @@ -diff -ur kdelibs-3.5.10/khtml/ecma/kjs_html.cpp kdelibs-3.5.10-cve-2009-2537-select-length/khtml/ecma/kjs_html.cpp ---- kdelibs-3.5.10/khtml/ecma/kjs_html.cpp 2008-02-13 10:41:09.000000000 +0100 -+++ kdelibs-3.5.10-cve-2009-2537-select-length/khtml/ecma/kjs_html.cpp 2009-07-26 04:54:52.000000000 +0200 -@@ -62,6 +62,9 @@ - - #include - -+// CVE-2009-2537 (vendors agreed on max 10000 elements) -+#define MAX_SELECT_LENGTH 10000 -+ - namespace KJS { - - KJS_DEFINE_PROTOTYPE_WITH_PROTOTYPE(HTMLDocumentProto, DOMDocumentProto) -@@ -2550,8 +2553,14 @@ - case SelectValue: { select.setValue(str); return; } - case SelectLength: { // read-only according to the NS spec, but webpages need it writeable - Object coll = Object::dynamicCast( getSelectHTMLCollection(exec, select.options(), select) ); -- if ( coll.isValid() ) -- coll.put(exec,"length",value); -+ -+ if ( coll.isValid() ) { -+ if (value.toInteger(exec) >= MAX_SELECT_LENGTH) { -+ Object err = Error::create(exec, RangeError); -+ exec->setException(err); -+ } else -+ coll.put(exec, "length", value); -+ } - return; - } - // read-only: form diff --git a/opensuse/tdelibs/kdelibs-3.5.10-kio.patch b/opensuse/tdelibs/kdelibs-3.5.10-kio.patch deleted file mode 100644 index 9fb299d4a..000000000 --- a/opensuse/tdelibs/kdelibs-3.5.10-kio.patch +++ /dev/null @@ -1,47 +0,0 @@ ---- kdelibs-3.5.10/kio/kio/kzip.cpp.orig 2009-12-09 18:42:47.000000000 +0100 -+++ kdelibs-3.5.10/kio/kio/kzip.cpp 2009-12-09 18:45:43.000000000 +0100 -@@ -1051,6 +1051,20 @@ - return true; - } - -+bool KZip::writeDir(const QString& name, const QString& user, const QString& group) -+{ -+ // Zip files have no explicit directories, they are implicitly created during extraction time -+ // when file entries have paths in them. -+ // However, to support empty directories, we must create a dummy file entry which ends with '/'. -+ QString dirName = name; -+ if (!name.endsWith("/")) -+ dirName = dirName.append('/'); -+ -+ mode_t perm = 040755; -+ time_t the_time = time(0); -+ return writeFile(dirName, user, group, 0, perm, the_time, the_time, the_time, 0); -+} -+ - // Doesn't need to be reimplemented anymore. Remove for KDE-4.0 - bool KZip::writeFile( const QString& name, const QString& user, const QString& group, uint size, const char* data ) - { -@@ -1114,7 +1128,7 @@ - } - - // delete entries in the filelist with the same filename as the one we want -- // to save, so that we don´t have duplicate file entries when viewing the zip -+ // to save, so that we don�t have duplicate file entries when viewing the zip - // with konqi... - // CAUTION: the old file itself is still in the zip and won't be removed !!! - QPtrListIterator it( d->m_fileList ); -diff -up kdelibs-3.5.10/kio/kio/kzip.h.orig kdelibs-3.5.10/kio/kio/kzip.h ---- kdelibs-3.5.10/kio/kio/kzip.h.orig 2009-12-09 19:35:42.000000000 +0100 -+++ kdelibs-3.5.10/kio/kio/kzip.h 2009-12-09 19:35:48.000000000 +0100 -@@ -191,10 +191,7 @@ protected: - /// Closes the archive - virtual bool closeArchive(); - -- /** -- * @internal Not needed for zip -- */ -- virtual bool writeDir( const QString& name, const QString& user, const QString& group) { Q_UNUSED(name); Q_UNUSED(user); Q_UNUSED(group); return true; } -+ virtual bool writeDir(const QString& name, const QString& user, const QString& group); - // TODO(BIC) uncomment and make virtual for KDE 4. - // bool writeDir( const QString& name, const QString& user, const QString& group, - // mode_t perm, time_t atime, time_t mtime, time_t ctime ); diff --git a/opensuse/tdelibs/kdelibs-3.5.10-latex-syntax-kile-2.0.3.patch b/opensuse/tdelibs/kdelibs-3.5.10-latex-syntax-kile-2.0.3.patch deleted file mode 100644 index 450dd1fe8..000000000 --- a/opensuse/tdelibs/kdelibs-3.5.10-latex-syntax-kile-2.0.3.patch +++ /dev/null @@ -1,143 +0,0 @@ -diff -ur kdelibs-3.5.10/kate/data/latex.xml kdelibs-3.5.10-latex-syntax-kile-2.0.3/kate/data/latex.xml ---- kdelibs-3.5.10/kate/data/latex.xml 2007-05-14 09:52:27.000000000 +0200 -+++ kdelibs-3.5.10-latex-syntax-kile-2.0.3/kate/data/latex.xml 2008-12-05 14:08:28.000000000 +0100 -@@ -1,16 +1,18 @@ - - -- -+ - - - - - - -- -+ - -+ - - -+ - - - -@@ -22,6 +24,11 @@ - - - -+ -+ -+ -+ -+ - - - -@@ -59,9 +66,46 @@ - - - -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ - - -- -+ - - - -@@ -137,8 +181,9 @@ - - - -- - -+ -+ - - - -@@ -228,6 +273,28 @@ - - - -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ - - - -@@ -315,11 +382,18 @@ - - - -+ -+ - - - - - -+ -+ -+ -+ -+ - - - diff --git a/opensuse/tdelibs/kdelibs-3.5.10-ossl-1.x.patch b/opensuse/tdelibs/kdelibs-3.5.10-ossl-1.x.patch deleted file mode 100644 index a948b884a..000000000 --- a/opensuse/tdelibs/kdelibs-3.5.10-ossl-1.x.patch +++ /dev/null @@ -1,180 +0,0 @@ -diff -up kdelibs-3.5.10/kio/kssl/kopenssl.cc.ossl-1.x kdelibs-3.5.10/kio/kssl/kopenssl.cc ---- kdelibs-3.5.10/kio/kssl/kopenssl.cc.ossl-1.x 2009-09-04 23:10:53.000000000 +0200 -+++ kdelibs-3.5.10/kio/kssl/kopenssl.cc 2009-09-04 23:10:53.000000000 +0200 -@@ -96,9 +96,14 @@ static int (*K_BIO_write) (BIO *b, cons - static int (*K_PEM_ASN1_write_bio) (int (*)(),const char *,BIO *,char *, - const EVP_CIPHER *,unsigned char *,int , - pem_password_cb *, void *) = 0L; -+#if OPENSSL_VERSION_NUMBER >= 0x10000000L -+static int (*K_ASN1_item_i2d_fp)(ASN1_ITEM *,FILE *,unsigned char *) = 0L; -+static ASN1_ITEM *K_NETSCAPE_X509_it = 0L; -+#else - static ASN1_METHOD* (*K_X509_asn1_meth) (void) = 0L; - static int (*K_ASN1_i2d_fp)(int (*)(),FILE *,unsigned char *) = 0L; - static int (*K_i2d_ASN1_HEADER)(ASN1_HEADER *, unsigned char **) = 0L; -+#endif - static int (*K_X509_print_fp) (FILE *, X509*) = 0L; - static int (*K_i2d_PKCS12) (PKCS12*, unsigned char**) = 0L; - static int (*K_i2d_PKCS12_fp) (FILE *, PKCS12*) = 0L; -@@ -430,9 +435,14 @@ KConfig *cfg; - K_BIO_ctrl = (long (*) (BIO *,int,long,void *)) _cryptoLib->symbol("BIO_ctrl"); - K_BIO_write = (int (*) (BIO *b, const void *data, int len)) _cryptoLib->symbol("BIO_write"); - K_PEM_ASN1_write_bio = (int (*)(int (*)(), const char *,BIO*, char*, const EVP_CIPHER *, unsigned char *, int, pem_password_cb *, void *)) _cryptoLib->symbol("PEM_ASN1_write_bio"); -+#if OPENSSL_VERSION_NUMBER >= 0x10000000L -+ K_ASN1_item_i2d_fp = (int (*)(ASN1_ITEM *, FILE*, unsigned char *)) _cryptoLib->symbol("ASN1_item_i2d_fp"); -+ K_NETSCAPE_X509_it = (ASN1_ITEM *) _cryptoLib->symbol("NETSCAPE_X509_it"); -+#else - K_X509_asn1_meth = (ASN1_METHOD* (*)(void)) _cryptoLib->symbol("X509_asn1_meth"); - K_ASN1_i2d_fp = (int (*)(int (*)(), FILE*, unsigned char *)) _cryptoLib->symbol("ASN1_i2d_fp"); - K_i2d_ASN1_HEADER = (int (*)(ASN1_HEADER *, unsigned char **)) _cryptoLib->symbol("i2d_ASN1_HEADER"); -+#endif - K_X509_print_fp = (int (*)(FILE*, X509*)) _cryptoLib->symbol("X509_print_fp"); - K_i2d_PKCS12 = (int (*)(PKCS12*, unsigned char**)) _cryptoLib->symbol("i2d_PKCS12"); - K_i2d_PKCS12_fp = (int (*)(FILE *, PKCS12*)) _cryptoLib->symbol("i2d_PKCS12_fp"); -@@ -594,7 +604,7 @@ KConfig *cfg; - K_SSL_set_session = (int (*)(SSL*,SSL_SESSION*)) _sslLib->symbol("SSL_set_session"); - K_d2i_SSL_SESSION = (SSL_SESSION* (*)(SSL_SESSION**,unsigned char**, long)) _sslLib->symbol("d2i_SSL_SESSION"); - K_i2d_SSL_SESSION = (int (*)(SSL_SESSION*,unsigned char**)) _sslLib->symbol("i2d_SSL_SESSION"); -- K_SSL_get_ciphers = (STACK *(*)(const SSL*)) _sslLib->symbol("SSL_get_ciphers"); -+ K_SSL_get_ciphers = (STACK_OF(SSL_CIPHER) *(*)(const SSL*)) _sslLib->symbol("SSL_get_ciphers"); - #endif - - -@@ -982,7 +992,13 @@ int KOpenSSLProxy::PEM_write_bio_X509(BI - else return -1; - } - -- -+#if OPENSSL_VERSION_NUMBER >= 0x10000000L -+int KOpenSSLProxy::ASN1_i2d_fp(FILE *out,unsigned char *x) { -+ if (K_ASN1_item_i2d_fp && K_NETSCAPE_X509_it) -+ return (K_ASN1_item_i2d_fp)(K_NETSCAPE_X509_it, out, x); -+ else return -1; -+} -+#else - ASN1_METHOD *KOpenSSLProxy::X509_asn1_meth(void) { - if (K_X509_asn1_meth) return (K_X509_asn1_meth)(); - else return 0L; -@@ -994,7 +1010,7 @@ int KOpenSSLProxy::ASN1_i2d_fp(FILE *out - return (K_ASN1_i2d_fp)((int (*)())K_i2d_ASN1_HEADER, out, x); - else return -1; - } -- -+#endif - - int KOpenSSLProxy::X509_print(FILE *fp, X509 *x) { - if (K_X509_print_fp) return (K_X509_print_fp)(fp, x); -diff -up kdelibs-3.5.10/kio/kssl/kopenssl.h.ossl-1.x kdelibs-3.5.10/kio/kssl/kopenssl.h ---- kdelibs-3.5.10/kio/kssl/kopenssl.h.ossl-1.x 2006-07-22 10:16:39.000000000 +0200 -+++ kdelibs-3.5.10/kio/kssl/kopenssl.h 2009-09-04 23:10:53.000000000 +0200 -@@ -48,6 +48,9 @@ class KOpenSSLProxyPrivate; - #include - #include - #undef crypt -+#if OPENSSL_VERSION_NUMBER >= 0x10000000L -+#define STACK _STACK -+#endif - #endif - - #include -@@ -446,12 +449,12 @@ public: - */ - int PEM_write_bio_X509(BIO *bp, X509 *x); - -- -+#if OPENSSL_VERSION_NUMBER < 0x10000000L - /* - * X509_asn1_meth - used for netscape output - */ - ASN1_METHOD *X509_asn1_meth(); -- -+#endif - - /* - * ASN1_i2d_fp - used for netscape output -@@ -531,6 +534,9 @@ public: - */ - void sk_free(STACK *s); - -+#if OPENSSL_VERSION_NUMBER >= 0x10000000L -+ void sk_free(void *s) { return sk_free(reinterpret_cast(s)); } -+#endif - - /* - * Number of elements in the stack -@@ -543,6 +549,9 @@ public: - */ - char *sk_value(STACK *s, int n); - -+#if OPENSSL_VERSION_NUMBER >= 0x10000000L -+ char *sk_value(void *s, int n) { return sk_value(reinterpret_cast(s), n); } -+#endif - - /* - * Create a new stack -@@ -555,6 +564,9 @@ public: - */ - int sk_push(STACK *s, char *d); - -+#if OPENSSL_VERSION_NUMBER >= 0x10000000L -+ int sk_push(void *s, void *d) { return sk_push(reinterpret_cast(s), reinterpret_cast(d)); } -+#endif - - /* - * Duplicate the stack -diff -up kdelibs-3.5.10/kio/kssl/ksmimecrypto.cc.ossl-1.x kdelibs-3.5.10/kio/kssl/ksmimecrypto.cc ---- kdelibs-3.5.10/kio/kssl/ksmimecrypto.cc.ossl-1.x 2005-10-10 17:05:44.000000000 +0200 -+++ kdelibs-3.5.10/kio/kssl/ksmimecrypto.cc 2009-09-04 23:10:53.000000000 +0200 -@@ -87,7 +87,7 @@ KSMIMECryptoPrivate::KSMIMECryptoPrivate - - - STACK_OF(X509) *KSMIMECryptoPrivate::certsToX509(QPtrList &certs) { -- STACK_OF(X509) *x509 = sk_new(NULL); -+ STACK_OF(X509) *x509 = reinterpret_cast(sk_new(NULL)); - KSSLCertificate *cert = certs.first(); - while(cert) { - sk_X509_push(x509, cert->getCert()); -diff -up kdelibs-3.5.10/kio/kssl/ksslcertificate.cc.ossl-1.x kdelibs-3.5.10/kio/kssl/ksslcertificate.cc ---- kdelibs-3.5.10/kio/kssl/ksslcertificate.cc.ossl-1.x 2006-01-19 18:06:12.000000000 +0100 -+++ kdelibs-3.5.10/kio/kssl/ksslcertificate.cc 2009-09-04 23:10:53.000000000 +0200 -@@ -1003,17 +1003,31 @@ return qba; - QByteArray KSSLCertificate::toNetscape() { - QByteArray qba; - #ifdef KSSL_HAVE_SSL --ASN1_HEADER ah; --ASN1_OCTET_STRING os; --KTempFile ktf; -+#if OPENSSL_VERSION_NUMBER >= 0x10000000L -+ NETSCAPE_X509 nx; -+ ASN1_OCTET_STRING hdr; -+#else -+ ASN1_HEADER ah; -+ ASN1_OCTET_STRING os; -+#endif -+ KTempFile ktf; - -- os.data = (unsigned char *)NETSCAPE_CERT_HDR; -- os.length = strlen(NETSCAPE_CERT_HDR); -- ah.header = &os; -- ah.data = (char *)getCert(); -- ah.meth = d->kossl->X509_asn1_meth(); -+#if OPENSSL_VERSION_NUMBER >= 0x10000000L -+ hdr.data = (unsigned char *)NETSCAPE_CERT_HDR; -+ hdr.length = strlen(NETSCAPE_CERT_HDR); -+ nx.header = &hdr; -+ nx.cert = getCert(); -+ -+ d->kossl->ASN1_i2d_fp(ktf.fstream(),(unsigned char *)&nx); -+#else -+ os.data = (unsigned char *)NETSCAPE_CERT_HDR; -+ os.length = strlen(NETSCAPE_CERT_HDR); -+ ah.header = &os; -+ ah.data = (char *)getCert(); -+ ah.meth = d->kossl->X509_asn1_meth(); - -- d->kossl->ASN1_i2d_fp(ktf.fstream(),(unsigned char *)&ah); -+ d->kossl->ASN1_i2d_fp(ktf.fstream(),(unsigned char *)&ah); -+#endif - - ktf.close(); - diff --git a/opensuse/tdelibs/kdelibs-3.5.10.tar.bz2 b/opensuse/tdelibs/kdelibs-3.5.10.tar.bz2 deleted file mode 100644 index 914cfc6a4..000000000 Binary files a/opensuse/tdelibs/kdelibs-3.5.10.tar.bz2 and /dev/null differ diff --git a/opensuse/tdelibs/kdelibs-3.5.12.99.tar.bz2 b/opensuse/tdelibs/kdelibs-3.5.12.99.tar.bz2 deleted file mode 100644 index 9d4c96c44..000000000 Binary files a/opensuse/tdelibs/kdelibs-3.5.12.99.tar.bz2 and /dev/null differ diff --git a/opensuse/tdelibs/kdelibs-3.5.4-CVE-2009-1690.patch b/opensuse/tdelibs/kdelibs-3.5.4-CVE-2009-1690.patch deleted file mode 100644 index 2972d0ebf..000000000 --- a/opensuse/tdelibs/kdelibs-3.5.4-CVE-2009-1690.patch +++ /dev/null @@ -1,545 +0,0 @@ ---- kdelibs-3.5.4/khtml/html/RefPtr.h.CVE-2009-1690 2009-06-17 14:19:00.000000000 +0200 -+++ kdelibs-3.5.4/khtml/html/RefPtr.h 2009-06-17 14:19:00.000000000 +0200 -@@ -0,0 +1,202 @@ -+// -*- mode: c++; c-basic-offset: 4 -*- -+/* -+ * Copyright (C) 2005, 2006, 2007, 2008 Apple Inc. All rights reserved. -+ * -+ * This library is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU Library General Public -+ * License as published by the Free Software Foundation; either -+ * version 2 of the License, or (at your option) any later version. -+ * -+ * This library is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ * Library General Public License for more details. -+ * -+ * You should have received a copy of the GNU Library General Public License -+ * along with this library; see the file COPYING.LIB. If not, write to -+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, -+ * Boston, MA 02110-1301, USA. -+ * -+ */ -+ -+#ifndef WTF_RefPtr_h -+#define WTF_RefPtr_h -+ -+#include -+#include "AlwaysInline.h" -+ -+namespace WTF { -+ -+ enum PlacementNewAdoptType { PlacementNewAdopt }; -+ -+ template class PassRefPtr; -+ -+ enum HashTableDeletedValueType { HashTableDeletedValue }; -+ -+ template class RefPtr { -+ public: -+ RefPtr() : m_ptr(0) { } -+ RefPtr(T* ptr) : m_ptr(ptr) { if (ptr) ptr->ref(); } -+ RefPtr(const RefPtr& o) : m_ptr(o.m_ptr) { if (T* ptr = m_ptr) ptr->ref(); } -+ // see comment in PassRefPtr.h for why this takes const reference -+ template RefPtr(const PassRefPtr&); -+ -+ // Special constructor for cases where we overwrite an object in place. -+ RefPtr(PlacementNewAdoptType) { } -+ -+ // Hash table deleted values, which are only constructed and never copied or destroyed. -+ RefPtr(HashTableDeletedValueType) : m_ptr(hashTableDeletedValue()) { } -+ bool isHashTableDeletedValue() const { return m_ptr == hashTableDeletedValue(); } -+ -+ ~RefPtr() { if (T* ptr = m_ptr) ptr->deref(); } -+ -+ template RefPtr(const RefPtr& o) : m_ptr(o.get()) { if (T* ptr = m_ptr) ptr->ref(); } -+ -+ T* get() const { return m_ptr; } -+ -+ void clear() { if (T* ptr = m_ptr) ptr->deref(); m_ptr = 0; } -+ PassRefPtr release() { PassRefPtr tmp = adoptRef(m_ptr); m_ptr = 0; return tmp; } -+ -+ T& operator*() const { return *m_ptr; } -+ ALWAYS_INLINE T* operator->() const { return m_ptr; } -+ -+ bool operator!() const { return !m_ptr; } -+ -+ // This conversion operator allows implicit conversion to bool but not to other integer types. -+ typedef T* RefPtr::*UnspecifiedBoolType; -+ operator UnspecifiedBoolType() const { return m_ptr ? &RefPtr::m_ptr : 0; } -+ -+ RefPtr& operator=(const RefPtr&); -+ RefPtr& operator=(T*); -+ RefPtr& operator=(const PassRefPtr&); -+ template RefPtr& operator=(const RefPtr&); -+ template RefPtr& operator=(const PassRefPtr&); -+ -+ void swap(RefPtr&); -+ -+ private: -+ static T* hashTableDeletedValue() { return reinterpret_cast(-1); } -+ -+ T* m_ptr; -+ }; -+ -+ template template inline RefPtr::RefPtr(const PassRefPtr& o) -+ : m_ptr(o.releaseRef()) -+ { -+ } -+ -+ template inline RefPtr& RefPtr::operator=(const RefPtr& o) -+ { -+ T* optr = o.get(); -+ if (optr) -+ optr->ref(); -+ T* ptr = m_ptr; -+ m_ptr = optr; -+ if (ptr) -+ ptr->deref(); -+ return *this; -+ } -+ -+ template template inline RefPtr& RefPtr::operator=(const RefPtr& o) -+ { -+ T* optr = o.get(); -+ if (optr) -+ optr->ref(); -+ T* ptr = m_ptr; -+ m_ptr = optr; -+ if (ptr) -+ ptr->deref(); -+ return *this; -+ } -+ -+ template inline RefPtr& RefPtr::operator=(T* optr) -+ { -+ if (optr) -+ optr->ref(); -+ T* ptr = m_ptr; -+ m_ptr = optr; -+ if (ptr) -+ ptr->deref(); -+ return *this; -+ } -+ -+ template inline RefPtr& RefPtr::operator=(const PassRefPtr& o) -+ { -+ T* ptr = m_ptr; -+ m_ptr = o.releaseRef(); -+ if (ptr) -+ ptr->deref(); -+ return *this; -+ } -+ -+ template template inline RefPtr& RefPtr::operator=(const PassRefPtr& o) -+ { -+ T* ptr = m_ptr; -+ m_ptr = o.releaseRef(); -+ if (ptr) -+ ptr->deref(); -+ return *this; -+ } -+ -+ template inline void RefPtr::swap(RefPtr& o) -+ { -+ std::swap(m_ptr, o.m_ptr); -+ } -+ -+ template inline void swap(RefPtr& a, RefPtr& b) -+ { -+ a.swap(b); -+ } -+ -+ template inline bool operator==(const RefPtr& a, const RefPtr& b) -+ { -+ return a.get() == b.get(); -+ } -+ -+ template inline bool operator==(const RefPtr& a, U* b) -+ { -+ return a.get() == b; -+ } -+ -+ template inline bool operator==(T* a, const RefPtr& b) -+ { -+ return a == b.get(); -+ } -+ -+ template inline bool operator!=(const RefPtr& a, const RefPtr& b) -+ { -+ return a.get() != b.get(); -+ } -+ -+ template inline bool operator!=(const RefPtr& a, U* b) -+ { -+ return a.get() != b; -+ } -+ -+ template inline bool operator!=(T* a, const RefPtr& b) -+ { -+ return a != b.get(); -+ } -+ -+ template inline RefPtr static_pointer_cast(const RefPtr& p) -+ { -+ return RefPtr(static_cast(p.get())); -+ } -+ -+ template inline RefPtr const_pointer_cast(const RefPtr& p) -+ { -+ return RefPtr(const_cast(p.get())); -+ } -+ -+ template inline T* getPtr(const RefPtr& p) -+ { -+ return p.get(); -+ } -+ -+} // namespace WTF -+ -+using WTF::RefPtr; -+using WTF::static_pointer_cast; -+using WTF::const_pointer_cast; -+ -+#endif // WTF_RefPtr_h ---- kdelibs-3.5.4/khtml/html/htmlparser.cpp.CVE-2009-1690 2006-07-22 10:16:43.000000000 +0200 -+++ kdelibs-3.5.4/khtml/html/htmlparser.cpp 2009-06-17 11:51:15.000000000 +0200 -@@ -199,7 +199,6 @@ - - form = 0; - map = 0; -- head = 0; - end = false; - isindex = 0; - -@@ -616,8 +615,7 @@ - case ID_BASE: - if(!head) { - head = new HTMLHeadElementImpl(document); -- e = head; -- insertNode(e); -+ insertNode(head.get()); - handled = true; - } - break; -@@ -839,7 +837,7 @@ - case ID_HEAD: - if(!head && current->id() == ID_HTML) { - head = new HTMLHeadElementImpl(document); -- n = head; -+ n = head.get(); - } - break; - case ID_BODY: -@@ -1679,12 +1677,12 @@ - head = new HTMLHeadElementImpl(document); - HTMLElementImpl *body = doc()->body(); - int exceptioncode = 0; -- doc()->firstChild()->insertBefore(head, body, exceptioncode); -+ doc()->firstChild()->insertBefore(head.get(), body, exceptioncode); - if ( exceptioncode ) { - #ifdef PARSER_DEBUG - kdDebug( 6035 ) << "creation of head failed!!!!" << endl; - #endif -- delete head; -+ delete head.get(); - head = 0; - } - } ---- kdelibs-3.5.4/khtml/html/Platform.h.CVE-2009-1690 2009-06-17 14:19:07.000000000 +0200 -+++ kdelibs-3.5.4/khtml/html/Platform.h 2009-06-17 14:19:07.000000000 +0200 -@@ -0,0 +1,218 @@ -+/* -*- mode: c++; c-basic-offset: 4 -*- */ -+/* -+ * Copyright (C) 2006 Apple Computer, Inc. All rights reserved. -+ * -+ * Redistribution and use in source and binary forms, with or without -+ * modification, are permitted provided that the following conditions -+ * are met: -+ * 1. Redistributions of source code must retain the above copyright -+ * notice, this list of conditions and the following disclaimer. -+ * 2. Redistributions in binary form must reproduce the above copyright -+ * notice, this list of conditions and the following disclaimer in the -+ * documentation and/or other materials provided with the distribution. -+ * -+ * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY -+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR -+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY -+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -+ */ -+ -+#ifndef WTF_Platform_h -+#define WTF_Platform_h -+ -+/* Force KDE build here in our tree... */ -+#ifndef BUILDING_KDE__ -+#define BUILDING_KDE__ 1 -+#endif -+ -+/* PLATFORM handles OS, operating environment, graphics API, and CPU */ -+#define PLATFORM(WTF_FEATURE) (defined( WTF_PLATFORM_##WTF_FEATURE ) && WTF_PLATFORM_##WTF_FEATURE) -+#define COMPILER(WTF_FEATURE) (defined( WTF_COMPILER_##WTF_FEATURE ) && WTF_COMPILER_##WTF_FEATURE) -+#define HAVE(WTF_FEATURE) (defined( HAVE_##WTF_FEATURE ) && HAVE_##WTF_FEATURE) -+#define USE(WTF_FEATURE) (defined( WTF_USE_##WTF_FEATURE ) && WTF_USE_##WTF_FEATURE) -+#define ENABLE(WTF_FEATURE) (defined( ENABLE_##WTF_FEATURE ) && ENABLE_##WTF_FEATURE) -+ -+/* Operating systems - low-level dependencies */ -+ -+/* PLATFORM(DARWIN) */ -+/* Operating system level dependencies for Mac OS X / Darwin that should */ -+/* be used regardless of operating environment */ -+#ifdef __APPLE__ -+#define WTF_PLATFORM_DARWIN 1 -+#endif -+ -+/* PLATFORM(WIN_OS) */ -+/* Operating system level dependencies for Windows that should be used */ -+/* regardless of operating environment */ -+#if defined(WIN32) || defined(_WIN32) -+#define WTF_PLATFORM_WIN_OS 1 -+#endif -+ -+/* PLATFORM(UNIX) */ -+/* Operating system level dependencies for Unix-like systems that */ -+/* should be used regardless of operating environment */ -+/* (includes PLATFORM(DARWIN)) */ -+#if defined(__APPLE__) \ -+ || defined(unix) \ -+ || defined(__unix) \ -+ || defined(__unix__) \ -+ || defined (__NetBSD__) \ -+ || defined(_AIX) -+#define WTF_PLATFORM_UNIX 1 -+#endif -+ -+/* PLATFORM(SOLARIS_OS) */ -+/* Operating system level dependencies for Sun (Open)Solaris 10. */ -+/* Studio 12 on Solaris defines __SunOS; gcc defines __sun__; */ -+/* Both compilers define __sun and sun. */ -+#if defined(__sun) || defined(sun) -+#define WTF_PLATFORM_SOLARIS_OS 1 -+#endif -+ -+/* Operating environments */ -+ -+/* I made the BUILDING_KDE__ macro up for the KDE build system to define */ -+ -+/* PLATFORM(KDE) */ -+/* PLATFORM(MAC) */ -+/* PLATFORM(WIN) */ -+#if BUILDING_KDE__ -+#define WTF_PLATFORM_KDE 1 -+#elif PLATFORM(DARWIN) -+#define WTF_PLATFORM_MAC 1 -+#elif PLATFORM(WIN_OS) -+#define WTF_PLATFORM_WIN 1 -+#endif -+#if defined(BUILDING_GDK__) -+#define WTF_PLATFORM_GDK 1 -+#endif -+ -+ -+/* CPU */ -+ -+/* PLATFORM(PPC) */ -+#if defined(__ppc__) \ -+ || defined(__PPC__) \ -+ || defined(__powerpc__) \ -+ || defined(__powerpc) \ -+ || defined(__POWERPC__) \ -+ || defined(_M_PPC) \ -+ || defined(__PPC) -+#define WTF_PLATFORM_PPC 1 -+#define WTF_PLATFORM_BIG_ENDIAN 1 -+#endif -+ -+/* PLATFORM(PPC64) */ -+#if defined(__ppc64__) \ -+ || defined(__PPC64__) -+#define WTF_PLATFORM_PPC64 1 -+#define WTF_PLATFORM_BIG_ENDIAN 1 -+#endif -+ -+#if defined(arm) -+#define WTF_PLATFORM_ARM 1 -+#if defined(__ARMEB__) -+#define WTF_PLATFORM_BIG_ENDIAN 1 -+#elif !defined(__ARM_EABI__) && !defined(__ARMEB__) -+#define WTF_PLATFORM_MIDDLE_ENDIAN 1 -+#endif -+#if !defined(__ARM_EABI__) -+#define WTF_PLATFORM_FORCE_PACK 1 -+#endif -+#endif -+ -+/* PLATFORM(X86) */ -+#if defined(__i386__) \ -+ || defined(i386) \ -+ || defined(_M_IX86) \ -+ || defined(_X86_) \ -+ || defined(__THW_INTEL) -+#define WTF_PLATFORM_X86 1 -+#endif -+ -+/* PLATFORM(X86_64) */ -+#if defined(__x86_64__) \ -+ || defined(__ia64__) -+#define WTF_PLATFORM_X86_64 1 -+#endif -+ -+/* PLATFORM(SPARC) */ -+#if defined(sparc) -+#define WTF_PLATFORM_SPARC 1 -+#endif -+ -+/* Compiler */ -+ -+/* COMPILER(CWP) */ -+#if defined(__MWERKS__) -+#define WTF_COMPILER_CWP 1 -+#endif -+ -+/* COMPILER(MSVC) */ -+#if defined(_MSC_VER) -+#define WTF_COMPILER_MSVC 1 -+#endif -+ -+/* COMPILER(GCC) */ -+#if defined(__GNUC__) -+#define WTF_COMPILER_GCC 1 -+#endif -+ -+/* COMPILER(SUNPRO) */ -+#if defined(__SUNPRO_CC) -+#define WTF_COMPILER_SUNPRO 1 -+#endif -+ -+/* COMPILER(BORLAND) */ -+/* not really fully supported - is this relevant any more? */ -+#if defined(__BORLANDC__) -+#define WTF_COMPILER_BORLAND 1 -+#endif -+ -+/* COMPILER(CYGWIN) */ -+/* not really fully supported - is this relevant any more? */ -+#if defined(__CYGWIN__) -+#define WTF_COMPILER_CYGWIN 1 -+#endif -+ -+/* multiple threads only supported on Mac for now */ -+#if PLATFORM(MAC) -+#ifndef WTF_USE_MULTIPLE_THREADS -+#define WTF_USE_MULTIPLE_THREADS 1 -+#endif -+#ifndef WTF_USE_BINDINGS -+#define WTF_USE_BINDINGS 1 -+#endif -+#endif -+ -+/* for Unicode, KDE uses Qt, everything else uses ICU */ -+#if PLATFORM(KDE) || PLATFORM(QT) -+#define WTF_USE_QT4_UNICODE 1 -+#elif PLATFORM(SYMBIAN) -+#define WTF_USE_SYMBIAN_UNICODE 1 -+#else -+#define WTF_USE_ICU_UNICODE 1 -+#endif -+ -+#if PLATFORM(MAC) -+#define WTF_PLATFORM_CF 1 -+#endif -+ -+#if PLATFORM(WIN) -+#define WTF_USE_WININET 1 -+#endif -+ -+#if PLATFORM(GDK) -+#define WTF_USE_CURL 1 -+#endif -+ -+/* ENABLE macro defaults */ -+ -+#endif /* WTF_Platform_h */ ---- kdelibs-3.5.4/khtml/html/AlwaysInline.h.CVE-2009-1690 2009-06-17 14:18:52.000000000 +0200 -+++ kdelibs-3.5.4/khtml/html/AlwaysInline.h 2009-06-17 13:56:36.000000000 +0200 -@@ -0,0 +1,49 @@ -+/* -+ * Copyright (C) 2005, 2007 Apple Inc. All rights reserved. -+ * -+ * This library is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU Library General Public -+ * License as published by the Free Software Foundation; either -+ * version 2 of the License, or (at your option) any later version. -+ * -+ * This library is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ * Library General Public License for more details. -+ * -+ * You should have received a copy of the GNU Library General Public License -+ * along with this library; see the file COPYING.LIB. If not, write to -+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, -+ * Boston, MA 02110-1301, USA. -+ * -+ */ -+ -+#include "html/Platform.h" -+ -+ -+#ifndef ALWAYS_INLINE -+#if COMPILER(GCC) && defined(NDEBUG) && __GNUC__ > 3 -+#define ALWAYS_INLINE inline __attribute__ ((__always_inline__)) -+#elif COMPILER(MSVC) && defined(NDEBUG) -+#define ALWAYS_INLINE __forceinline -+#else -+#define ALWAYS_INLINE inline -+#endif -+#endif -+ -+#ifndef ALWAYS_INLINE_INTO -+#if COMPILER(GCC) && defined(NDEBUG) && ((__GNUC__ == 4 && __GNUC_MINOR__ >= 1) || __GNUC__ > 4) -+#define ALWAYS_INLINE_INTO __attribute__ ((__flatten__)) -+#else -+#define ALWAYS_INLINE_INTO -+#endif -+#endif -+ -+ -+#ifndef NEVER_INLINE -+#if COMPILER(GCC) && __GNUC__ > 3 -+#define NEVER_INLINE __attribute__ ((__noinline__)) -+#else -+#define NEVER_INLINE -+#endif -+#endif ---- kdelibs-3.5.4/khtml/html/htmlparser.h.CVE-2009-1690 2005-10-10 17:06:04.000000000 +0200 -+++ kdelibs-3.5.4/khtml/html/htmlparser.h 2009-06-17 14:42:27.000000000 +0200 -@@ -38,10 +38,10 @@ - #include - #endif - -- - #include "dom/dom_string.h" - #include "xml/dom_nodeimpl.h" - #include "html/html_documentimpl.h" -+#include "html/RefPtr.h" - - class KHTMLView; - class HTMLStackElem; -@@ -148,7 +148,7 @@ - /* - * the head element. Needed for crappy html which defines after - */ -- DOM::HTMLHeadElementImpl *head; -+ RefPtr head; - - /* - * a possible element in the head. Compatibility hack for diff --git a/opensuse/tdelibs/kdelibs3-gcc-4.1-miscompile.diff b/opensuse/tdelibs/kdelibs3-gcc-4.1-miscompile.diff deleted file mode 100644 index cad4ceedd..000000000 --- a/opensuse/tdelibs/kdelibs3-gcc-4.1-miscompile.diff +++ /dev/null @@ -1,15 +0,0 @@ -Index: kdecore/kwinmodule.cpp -=================================================================== ---- kdecore/kwinmodule.cpp.orig -+++ kdecore/kwinmodule.cpp -@@ -436,7 +436,9 @@ QRect KWinModule::workArea( const QValue - if ( strut.bottom > 0 ) - r.setBottom( r.bottom() - (int) strut.bottom ); - -- a = a.intersect(r); -+ QRect tmp; -+ tmp = a.intersect(r); -+ a = tmp; - } - return a; - } diff --git a/opensuse/tdelibs/kdelibs3-hicolor-scalable-sizes.patch b/opensuse/tdelibs/kdelibs3-hicolor-scalable-sizes.patch deleted file mode 100644 index 9f06adc93..000000000 --- a/opensuse/tdelibs/kdelibs3-hicolor-scalable-sizes.patch +++ /dev/null @@ -1,50 +0,0 @@ -diff -uNr kdelibs-3.5.1.old/pics/hicolor/index.theme kdelibs-3.5.1/pics/hicolor/index.theme ---- kdelibs-3.5.1.old/pics/hicolor/index.theme 2006-01-20 07:53:04.000000000 +0100 -+++ kdelibs-3.5.1/pics/hicolor/index.theme 2006-04-12 20:18:31.907163700 +0200 -@@ -314,36 +314,36 @@ - Type=Threshold - - [scalable/actions] --MinSize=1 --Size=128 -+MinSize=32 -+Size=48 - MaxSize=256 - Context=Actions - Type=Scalable - - [scalable/apps] --MinSize=1 --Size=128 -+MinSize=32 -+Size=48 - MaxSize=256 - Context=Applications - Type=Scalable - - [scalable/devices] --MinSize=1 --Size=128 -+MinSize=32 -+Size=48 - MaxSize=256 - Context=Devices - Type=Scalable - - [scalable/filesystems] --MinSize=1 --Size=128 -+MinSize=32 -+Size=48 - MaxSize=256 - Context=FileSystems - Type=Scalable - - [scalable/mimetypes] --MinSize=1 --Size=128 -+MinSize=32 -+Size=48 - MaxSize=256 - Context=MimeTypes - Type=Scalable diff --git a/opensuse/tdelibs/kdelibs_networkstatus_branch2.diff b/opensuse/tdelibs/kdelibs_networkstatus_branch2.diff deleted file mode 100644 index 069dffbea..000000000 --- a/opensuse/tdelibs/kdelibs_networkstatus_branch2.diff +++ /dev/null @@ -1,69 +0,0 @@ -Index: kioslave/http/http.cc -=================================================================== ---- kioslave/http/http.cc.orig -+++ kioslave/http/http.cc -@@ -1804,9 +1804,11 @@ bool HTTPProtocol::isOffline(const KURL - QByteArray reply; - - QDataStream stream(params, IO_WriteOnly); -- stream << url.url(); - -- if ( dcopClient()->call( "kded", "networkstatus", "status(QString)", -+ if ( url.host() == QString::fromLatin1("localhost") || url.host() == QString::fromLatin1("127.0.0.1") || url.host() == QString::fromLatin1("::") ) { -+ return false; -+ } -+ if ( dcopClient()->call( "kded", "networkstatus", "status()", - params, replyType, reply ) && (replyType == "int") ) - { - int result; -@@ -2210,6 +2212,11 @@ bool HTTPProtocol::httpOpen() - // Conditional cache hit. (Validate) - } - -+ if (bCacheOnly && bOffline) -+ { -+ error( ERR_OFFLINE_MODE, m_request.url.url() ); -+ return false; -+ } - if (bCacheOnly) - { - error( ERR_DOES_NOT_EXIST, m_request.url.url() ); -@@ -2217,7 +2224,7 @@ bool HTTPProtocol::httpOpen() - } - if (bOffline) - { -- error( ERR_COULD_NOT_CONNECT, m_request.url.url() ); -+ error( ERR_OFFLINE_MODE, m_request.url.url() ); - return false; - } - } -Index: kio/kio/global.cpp -=================================================================== ---- kio/kio/global.cpp.orig -+++ kio/kio/global.cpp -@@ -408,6 +408,9 @@ KIO_EXPORT QString KIO::buildErrorString - case KIO::ERR_POST_DENIED: - result = i18n( "Access to restricted port in POST denied."); - break; -+ case KIO::ERR_OFFLINE_MODE: -+ result = i18n( "Could not access %1.\nOffline mode active.").arg( errorText ); -+ break; - default: - result = i18n( "Unknown error code %1\n%2\nPlease send a full bug report at http://bugs.kde.org." ).arg( errorCode ).arg( errorText ); - break; -Index: kio/kio/global.h -=================================================================== ---- kio/kio/global.h.orig -+++ kio/kio/global.h -@@ -244,8 +244,10 @@ namespace KIO - ERR_UPGRADE_REQUIRED = 64, // A transport upgrade is required to access this - // object. For instance, TLS is demanded by - // the server in order to continue. -- ERR_POST_DENIED = 65 // Issued when trying to POST data to a certain Ports -+ ERR_POST_DENIED = 65, // Issued when trying to POST data to a certain Ports - // see job.cpp -+ ERR_OFFLINE_MODE = 66 // Used when an app is in offline mode and a -+ // requested document is unavailable. - }; - - /** diff --git a/opensuse/tdelibs/kdemm-20050330.tar.bz2 b/opensuse/tdelibs/kdemm-20050330.tar.bz2 deleted file mode 100644 index e71e379e4..000000000 Binary files a/opensuse/tdelibs/kdemm-20050330.tar.bz2 and /dev/null differ diff --git a/opensuse/tdelibs/kdemm-filepreview.diff b/opensuse/tdelibs/kdemm-filepreview.diff deleted file mode 100644 index 227dc39ec..000000000 --- a/opensuse/tdelibs/kdemm-filepreview.diff +++ /dev/null @@ -1,40 +0,0 @@ -Index: interfaces/kmediaplayer/kfileaudiopreview/Makefile.am -=================================================================== ---- interfaces/kmediaplayer/kfileaudiopreview/Makefile.am.orig -+++ interfaces/kmediaplayer/kfileaudiopreview/Makefile.am -@@ -1,11 +1,11 @@ --INCLUDES = -I$(top_srcdir)/interfaces/ -I$(top_srcdir)/arts/kde -I$(includedir)/arts $(all_includes) -+INCLUDES = -I$(top_srcdir)/interfaces/ $(all_includes) - METASOURCES = AUTO - - kde_module_LTLIBRARIES = kfileaudiopreview.la - - kfileaudiopreview_la_SOURCES = kfileaudiopreview.cpp - kfileaudiopreview_la_LDFLAGS = $(all_libraries) $(KDE_RPATH) -module -avoid-version -no-undefined --kfileaudiopreview_la_LIBADD = $(top_builddir)/interfaces/kmediaplayer/libkmediaplayer.la $(top_builddir)/arts/kde/libartskde.la $(LIB_KIO) -+kfileaudiopreview_la_LIBADD = $(top_builddir)/interfaces/kmediaplayer/libkmediaplayer.la $(top_builddir)/kdemm/libkdemm.la $(LIB_KIO) - - noinst_HEADERS = kfileaudiopreview.h - -Index: interfaces/kmediaplayer/kfileaudiopreview/kfileaudiopreview.cpp -=================================================================== ---- interfaces/kmediaplayer/kfileaudiopreview/kfileaudiopreview.cpp.orig -+++ interfaces/kmediaplayer/kfileaudiopreview/kfileaudiopreview.cpp -@@ -13,7 +13,7 @@ - #include - #include - --#include -+#include - - #include - -@@ -58,7 +58,7 @@ KFileAudioPreview::KFileAudioPreview( QW - { - KGlobal::locale()->insertCatalogue("kfileaudiopreview"); - -- QStringList formats = KDE::PlayObjectFactory::mimeTypes(); -+ QStringList formats = KDE::Multimedia::Factory::self()->playableMimeTypes(); - // ### - QStringList::ConstIterator it = formats.begin(); - for ( ; it != formats.end(); ++it ) diff --git a/opensuse/tdelibs/kdemm.diff b/opensuse/tdelibs/kdemm.diff deleted file mode 100644 index 3d1e3d925..000000000 --- a/opensuse/tdelibs/kdemm.diff +++ /dev/null @@ -1,669 +0,0 @@ -Index: arts/knotify/knotify.cpp -=================================================================== ---- arts/knotify/knotify.cpp.orig -+++ arts/knotify/knotify.cpp -@@ -5,6 +5,7 @@ - 2000 Matthias Ettrich (ettrich@kde.org) - 2000 Waldo Bastian - 2000-2003 Carsten Pfeiffer -+ 2004 Allan Sandfeld Jensen - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by -@@ -26,21 +27,12 @@ - #include - #include - --#include --#ifndef WITHOUT_ARTS --// aRts headers --#include --#include --#include --#include --#include --#endif -- - // QT headers - #include - #include - #include - #include -+#include - - // KDE headers - #include -@@ -80,15 +72,11 @@ public: - QString externalPlayer; - KProcess *externalPlayerProc; - --#ifndef WITHOUT_ARTS -- QPtrList playObjects; -- QMap playObjectEventMap; -- KAudioManagerPlay *audioManager; --#endif -+ QMap playObjectEventMap; - int externalPlayerEventId; - - bool useExternal; -- bool useArts; -+ bool useKDEMM; - int volume; - QTimer *playTimer; - bool inStartup; -@@ -106,12 +94,13 @@ extern "C"{ - KDE_EXPORT int kdemain(int argc, char **argv) - { - KAboutData aboutdata("knotify", I18N_NOOP("KNotify"), -- "3.0", I18N_NOOP("KDE Notification Server"), -+ "4.0", I18N_NOOP("KDE Notification Server"), - KAboutData::License_GPL, "(C) 1997-2003, KDE Developers"); - aboutdata.addAuthor("Carsten Pfeiffer",I18N_NOOP("Current Maintainer"),"pfeiffer@kde.org"); - aboutdata.addAuthor("Christian Esken",0,"esken@kde.org"); - aboutdata.addAuthor("Stefan Westerfeld",I18N_NOOP("Sound support"),"stefan@space.twc.de"); - aboutdata.addAuthor("Charles Samuels",I18N_NOOP("Previous Maintainer"),"charles@kde.org"); -+ aboutdata.addAuthor("Allan Sandfeld Jensen",I18N_NOOP("Conversion to KDEMM"),"kde@carewolf.com"); - - KCmdLineArgs::init( argc, argv, &aboutdata ); - KUniqueApplication::addCmdLineOptions(); -@@ -126,145 +115,36 @@ KDE_EXPORT int kdemain(int argc, char ** - KUniqueApplication app; - app.disableSessionManagement(); - -- // KNotify is started on KDE startup and on demand (using -- // KNotifClient::startDaemon()) whenever a KNotify event occurs. Especially -- // KWin may fire many events (e.g. when a window pops up). When we have -- // problems with aRts or the installation, we might get an infinite loop -- // of knotify crashing, popping up the crashhandler window and kwin firing -- // another event, starting knotify again... -- // We try to prevent this by tracking our startup and offer options to -- // abort this. -- --#ifndef WITHOUT_ARTS -- KConfigGroup config( KGlobal::config(), "StartProgress" ); -- KConfig artsKCMConfig( "kcmartsrc" ); -- artsKCMConfig.setGroup( "Arts" ); -- bool useArts = artsKCMConfig.readBoolEntry( "StartServer", true ); -- if (useArts) -- useArts = config.readBoolEntry( "Use Arts", useArts ); -- bool ok = config.readBoolEntry( "Arts Init", true ); -- -- if ( useArts && !ok ) -- { -- if ( KMessageBox::questionYesNo( -- 0L, -- i18n("During the previous startup, KNotify crashed while creating " -- "Arts::Dispatcher. Do you want to try again or disable " -- "aRts sound output?\n\n" -- "If you choose to disable aRts output now, you can re-enable " -- "it later or select an alternate sound player " -- "in the System Notifications control panel."), -- i18n("KNotify Problem"), -- i18n("&Try Again"), -- i18n("D&isable aRts Output"), -- "KNotifyStartProgress", -- 0 /* don't call KNotify :) */ -- ) -- == KMessageBox::No ) -- { -- useArts = false; -- } -- } -- -- // when ArtsDispatcher crashes, we know it the next start. -- config.writeEntry( "Arts Init", false ); -- config.writeEntry( "Use Arts", useArts ); -- config.sync(); -- -- KArtsDispatcher *dispatcher = 0; -- if ( useArts ) -- { -- dispatcher = new KArtsDispatcher; -- soundServer = new KArtsServer; -- } -- -- // ok, seemed to work. -- config.writeEntry("Arts Init", useArts ); -- config.sync(); -- -- ok = config.readBoolEntry( "KNotify Init", true ); -- if ( useArts && !ok ) -- { -- if ( KMessageBox::questionYesNo( -- 0L, -- i18n("During the previous startup, KNotify crashed while instantiating " -- "KNotify. Do you want to try again or disable " -- "aRts sound output?\n\n" -- "If you choose to disable aRts output now, you can re-enable " -- "it later or select an alternate sound player " -- "in the System Notifications control panel."), -- i18n("KNotify Problem"), -- i18n("&Try Again"), -- i18n("D&isable aRts Output"), -- "KNotifyStartProgress", -- 0 /* don't call KNotify :) */ -- ) -- == KMessageBox::No ) -- { -- useArts = false; -- delete soundServer; -- soundServer = 0L; -- delete dispatcher; -- dispatcher = 0L; -- } -- } -- -- // when KNotify instantiation crashes, we know it the next start. -- config.writeEntry( "KNotify Init", false ); -- config.writeEntry( "Use Arts", useArts ); -- config.sync(); -- - // start notify service -- KNotify *notify = new KNotify( useArts ); -- -- config.writeEntry( "KNotify Init", true ); -- config.sync(); -- --#else -- -- // start notify service, without aRts -- KNotify *notify = new KNotify( false ); -- --#endif -+ KNotify notify( true ); - - app.dcopClient()->setDefaultObject( "Notify" ); - app.dcopClient()->setDaemonMode( true ); - // kdDebug() << "knotify starting" << endl; - - int ret = app.exec(); -- delete notify; --#ifndef WITHOUT_ARTS -- delete soundServer; -- delete dispatcher; --#endif - return ret; - } - }// end extern "C" - --KNotify::KNotify( bool useArts ) -+KNotify::KNotify( bool useKDEMM ) - : QObject(), DCOPObject("Notify") - { - d = new KNotifyPrivate; - d->globalEvents = new KConfig("knotify/eventsrc", true, false, "data"); - d->globalConfig = new KConfig("knotify.eventsrc", true, false); - d->externalPlayerProc = 0; -- d->useArts = useArts; -- d->inStartup = true; --#ifndef WITHOUT_ARTS -- d->playObjects.setAutoDelete(true); -- d->audioManager = 0; -- if( useArts ) -- { -- connect( soundServer, SIGNAL( restartedServer() ), this, SLOT( restartedArtsd() ) ); -- restartedArtsd(); //started allready need to initialize d->audioManager -- } --#endif -+ d->useKDEMM = useKDEMM; - -- d->volume = 100; -+ d->inStartup = 0; -+ d->volume = 100; - - d->playTimer = 0; - - loadConfig(); -+ -+ connect ( this, SIGNAL(deletePlayObject(KDE::Multimedia::SimplePlayer*)), -+ SLOT(objectDeleter(KDE::Multimedia::SimplePlayer*)) ); - } - - KNotify::~KNotify() -@@ -272,12 +152,9 @@ KNotify::~KNotify() - reconfigure(); - - #ifndef WITHOUT_ARTS -- d->playObjects.clear(); -- - delete d->globalEvents; - delete d->globalConfig; - delete d->externalPlayerProc; -- delete d->audioManager; - #endif - delete d; - } -@@ -293,7 +170,7 @@ void KNotify::loadConfig() { - // try to locate a suitable player if none is configured - if ( d->externalPlayer.isEmpty() ) { - QStringList players; -- players << "wavplay" << "aplay" << "auplay"; -+ players << "wavplay" << "aplay" << "auplay" << "artsplay" << "akodeplay"; - QStringList::Iterator it = players.begin(); - while ( d->externalPlayer.isEmpty() && it != players.end() ) { - d->externalPlayer = KStandardDirs::findExe( *it ); -@@ -456,9 +333,9 @@ bool KNotify::notifyBySound( const QStri - if ( soundFile.isEmpty() ) - soundFile = locate( "sound", sound ); - } -- if ( soundFile.isEmpty() || isPlaying( soundFile ) ) -+ if ( soundFile.isEmpty() ) - { -- soundFinished( eventId, soundFile.isEmpty() ? NoSoundFile : FileAlreadyPlaying ); -+ soundFinished( eventId, NoSoundFile ); - return false; - } - -@@ -466,64 +343,18 @@ bool KNotify::notifyBySound( const QStri - // kdDebug() << "KNotify::notifyBySound - trying to play file " << soundFile << endl; - - if (!external) { -- //If we disabled using aRts, just return, -- //(If we don't, we'll blow up accessing the null soundServer) -- if (!d->useArts) -+ //If we disabled audio, just return, -+ if (!d->useKDEMM) - { - soundFinished( eventId, NoSoundSupport ); - return false; - } - --#ifndef WITHOUT_ARTS -- // play sound finally -- while( d->playObjects.count()>5 ) -- abortFirstPlayObject(); -- -- KDE::PlayObjectFactory factory(soundServer->server()); -- if( d->audioManager ) -- factory.setAudioManagerPlay( d->audioManager ); - KURL soundURL; - soundURL.setPath(soundFile); -- KDE::PlayObject *playObject = factory.createPlayObject(soundURL, false); -- -- if (playObject->isNull()) -- { -- soundFinished( eventId, NoSoundSupport ); -- delete playObject; -- return false; -- } -- -- if ( d->volume != 100 ) -- { -- // It works to access the playObject immediately because we don't allow -- // non-file URLs for sounds. -- Arts::StereoVolumeControl volumeControl = Arts::DynamicCast(soundServer->server().createObject("Arts::StereoVolumeControl")); -- Arts::PlayObject player = playObject->object(); -- Arts::Synth_AMAN_PLAY ap = d->audioManager->amanPlay(); -- if( ! volumeControl.isNull() && ! player.isNull() && ! ap.isNull() ) -- { -- volumeControl.scaleFactor( d->volume/100.0 ); -- -- ap.stop(); -- Arts::disconnect( player, "left", ap, "left" ); -- Arts::disconnect( player, "right", ap, "right" ); -- -- ap.start(); -- volumeControl.start(); -- -- Arts::connect(player,"left",volumeControl,"inleft"); -- Arts::connect(player,"right",volumeControl,"inright"); -- -- Arts::connect(volumeControl,"outleft",ap,"left"); -- Arts::connect(volumeControl,"outright",ap,"right"); -- -- player._addChild( volumeControl, "volume" ); -- } -- } -- -- playObject->play(); -- d->playObjects.append( playObject ); -+ KDE::Multimedia::SimplePlayer* playObject = new KDE::Multimedia::SimplePlayer( this ); - d->playObjectEventMap.insert( playObject, eventId ); -+ playObject->play( soundURL ); - - if ( !d->playTimer ) - { -@@ -532,8 +363,7 @@ bool KNotify::notifyBySound( const QStri - } - if ( !d->playTimer->isActive() ) - d->playTimer->start( 1000 ); --#endif -- return true; -+ return playObject->isPlaying(); - - } else if(!d->externalPlayer.isEmpty()) { - // use an external player to play the sound -@@ -686,58 +516,39 @@ void KNotify::setVolume( int volume ) - d->volume = volume; - } - -+void KNotify::slotPlayerProcessExited( KProcess *proc ) -+{ -+ soundFinished( d->externalPlayerEventId, -+ (proc->normalExit() && proc->exitStatus() == 0) ? PlayedOK : Unknown ); -+} -+ -+ - void KNotify::playTimeout() - { --#ifndef WITHOUT_ARTS -- for ( QPtrListIterator< KDE::PlayObject > it(d->playObjects); *it;) -+qDebug("KNotify::playTimeout"); -+ for( QMap< KDE::Multimedia::SimplePlayer*, int >::Iterator it = d->playObjectEventMap.begin(); -+ it != d->playObjectEventMap.end(); -+ ) - { -- QPtrListIterator< KDE::PlayObject > current = it; -+ QMap< KDE::Multimedia::SimplePlayer*, int >::Iterator current = it; - ++it; -- if ( (*current)->state() != Arts::posPlaying ) -+ KDE::Multimedia::SimplePlayer* playObject = current.key(); -+ if ( !playObject->isPlaying() || playObject->totalTime() <= 0 ) // may be "playing" even if there's an error - { -- QMap::Iterator eit = d->playObjectEventMap.find( *current ); -- if ( eit != d->playObjectEventMap.end() ) -- { -- soundFinished( *eit, PlayedOK ); -- d->playObjectEventMap.remove( eit ); -- } -- d->playObjects.remove( current ); -+ soundFinished( *current, PlayedOK ); -+ d->playObjectEventMap.remove( current ); -+ disconnect( playObject, SIGNAL( finished() ) ); -+ playObject->stop(); -+ emit deletePlayObject(playObject); - } - } -- if ( !d->playObjects.count() ) -+ if ( !d->playObjectEventMap.count() ) - d->playTimer->stop(); --#endif - } - --bool KNotify::isPlaying( const QString& soundFile ) const -+void KNotify::objectDeleter( KDE::Multimedia::SimplePlayer *playObject ) - { --#ifndef WITHOUT_ARTS -- for ( QPtrListIterator< KDE::PlayObject > it(d->playObjects); *it; ++it) -- { -- if ( (*it)->mediaName() == soundFile ) -- return true; -- } --#endif -- return false; --} -- --void KNotify::slotPlayerProcessExited( KProcess *proc ) --{ -- soundFinished( d->externalPlayerEventId, -- (proc->normalExit() && proc->exitStatus() == 0) ? PlayedOK : Unknown ); --} -- --void KNotify::abortFirstPlayObject() --{ --#ifndef WITHOUT_ARTS -- QMap::Iterator it = d->playObjectEventMap.find( d->playObjects.getFirst() ); -- if ( it != d->playObjectEventMap.end() ) -- { -- soundFinished( it.data(), Aborted ); -- d->playObjectEventMap.remove( it ); -- } -- d->playObjects.removeFirst(); --#endif -+ delete playObject; - } - - void KNotify::soundFinished( int eventId, PlayingFinishedStatus reason ) -@@ -780,16 +591,6 @@ WId KNotify::checkWinId( const QString & - return senderWinId; - } - --void KNotify::restartedArtsd() --{ --#ifndef WITHOUT_ARTS -- delete d->audioManager; -- d->audioManager = new KAudioManagerPlay( soundServer ); -- d->audioManager->setTitle( i18n( "KDE System Notifications" ) ); -- d->audioManager->setAutoRestoreID( "KNotify Aman Play" ); --#endif --} -- - void KNotify::sessionReady() - { - if( d->inStartup && !d->startupEvents.isEmpty()) -Index: arts/knotify/knotify.h -=================================================================== ---- arts/knotify/knotify.h.orig -+++ arts/knotify/knotify.h -@@ -24,9 +24,10 @@ - #include - #include - -+#include -+ - class KNotifyPrivate; - class KProcess; --class KConfig; - - class KNotify : public QObject, public DCOPObject - { -@@ -76,19 +77,16 @@ private: - bool notifyByStderr(const QString &text); - bool notifyByPassivePopup(const QString &text, const QString &appName, - KConfig* eventsFile, WId winId ); -- bool notifyByExecute(const QString &command, -- const QString& event, -- const QString& fromApp, -+ bool notifyByExecute(const QString &command, -+ const QString& event, -+ const QString& fromApp, - const QString& text, - int winId, - int eventId ); -- bool notifyByTaskbar( WId winId ); -- -- bool isPlaying( const QString& soundFile ) const; -- -- void soundFinished( int eventId, PlayingFinishedStatus reason ); -- void abortFirstPlayObject(); -- -+ bool notifyByTaskbar( WId winId ); -+ -+ void soundFinished( int eventId, PlayingFinishedStatus reason ); -+ - WId checkWinId( const QString& appName, WId senderWinId ); - - /** -@@ -97,9 +95,13 @@ private: - bool isGlobal(const QString &eventname); - - private slots: -- void playTimeout(); -- void slotPlayerProcessExited( KProcess *proc ); -- void restartedArtsd(); -+ void playTimeout(); -+ void slotPlayerProcessExited( KProcess *proc ); -+ void objectDeleter( KDE::Multimedia::SimplePlayer* ); -+ -+signals: -+ void deletePlayObject( KDE::Multimedia::SimplePlayer* ); -+ - - private: - KNotifyPrivate* d; -Index: arts/knotify/Makefile.am -=================================================================== ---- arts/knotify/Makefile.am.orig -+++ arts/knotify/Makefile.am -@@ -3,12 +3,13 @@ INCLUDES= -I$(top_srcdir)/arts/kde -I$(i - - ####### Files - --kde_module_LTLIBRARIES = knotify.la -+#kde_module_LTLIBRARIES = knotify.la -+bin_PROGRAMS = -+lib_LTLIBRARIES = -+kdeinit_LTLIBRARIES = knotify.la - - knotify_la_SOURCES = knotify.cpp knotify.skel --if include_ARTS --knotify_la_LIBADD = -lsoundserver_idl -lqtmcop $(LIB_KDEUI) $(top_builddir)/arts/kde/libartskde.la --endif -+knotify_la_LIBADD = $(LIB_KDEUI) $(top_builddir)/kdemm/libkdemm.la - knotify_la_LDFLAGS = $(all_libraries) -module -avoid-version - knotify_la_METASOURCES = AUTO - -Index: kdemm/channel.h -=================================================================== ---- kdemm/channel.h.orig -+++ kdemm/channel.h -@@ -83,7 +83,7 @@ namespace Multimedia - * You can not instantiate channels yourself, use the Factory to - * create them. - */ -- Channel( const QString & name, const QString & type, Direction direction, -+ Channel( const QString & channelName, const QString & type, Direction direction, - QObject * parent = 0, const char * name = 0 ); - - private: -Index: kdemm/factory.cpp -=================================================================== ---- kdemm/factory.cpp.orig -+++ kdemm/factory.cpp -@@ -80,6 +80,7 @@ class Factory::Private - ":\n" << e << endl; - } - } -+#if 0 - if( 0 == backend ) - { - if( offers.size() == 0 ) -@@ -100,6 +101,7 @@ class Factory::Private - i18n( "Unable to use any of the available Multimedia Backends" ), details ); - } - } -+#endif - } - - Backend * backend; -Index: kdemm/simpleplayer.cpp -=================================================================== ---- kdemm/simpleplayer.cpp.orig -+++ kdemm/simpleplayer.cpp -@@ -50,10 +50,12 @@ SimplePlayer::SimplePlayer( QObject * pa - connect( Factory::self(), SIGNAL( recreateObjects() ), SLOT( recreateObjects() ) ); - d->channel = Factory::self()->createChannel( KGlobal::instance()->aboutData()->programName() ); - d->player = Factory::self()->createPlayer(); -- d->player->setOutputChannel( d->channel ); -- connect( d->player, SIGNAL( stateChanged( KDE::Multimedia::Player::State, KDE::Multimedia::Player::State ) ), -+ if ( d->player ) { -+ d->player->setOutputChannel( d->channel ); -+ connect( d->player, SIGNAL( stateChanged( KDE::Multimedia::Player::State, KDE::Multimedia::Player::State ) ), - SLOT( stateChanged( KDE::Multimedia::Player::State, KDE::Multimedia::Player::State ) ) ); -- connect( d->player, SIGNAL( finished() ), SIGNAL( finished() ) ); -+ connect( d->player, SIGNAL( finished() ), SIGNAL( finished() ) ); -+ }; - } - - SimplePlayer::~SimplePlayer() -@@ -64,6 +66,8 @@ SimplePlayer::~SimplePlayer() - - void SimplePlayer::play( const KURL & url ) - { -+ if( ! d->player ) -+ return; - if( isPaused() && url == d->url ) - { - d->player->play(); -@@ -78,51 +82,71 @@ void SimplePlayer::play( const KURL & ur - - void SimplePlayer::pause() - { -+ if( ! d->player ) -+ return; - d->player->pause(); - } - - void SimplePlayer::stop() - { -+ if( ! d->player ) -+ return; - d->player->stop(); - } - - long SimplePlayer::totalTime() const - { -+ if( ! d->player ) -+ return 0; - return d->player->totalTime(); - } - - long SimplePlayer::currentTime() const - { -+ if( ! d->player ) -+ return 0; - return d->player->currentTime(); - } - - void SimplePlayer::seek( long ms ) - { -+ if( ! d->player ) -+ return; - d->player->seek( ms ); - } - - float SimplePlayer::volume() const - { -+ if( ! d->player ) -+ return 0; - return d->channel->volume(); - } - - void SimplePlayer::setVolume( float v ) - { -+ if( ! d->player ) -+ return; - d->channel->setVolume( v ); - } - - bool SimplePlayer::isPlaying() const - { -+ if( ! d->player ) -+ return false; - return ( d->player->state() == Player::Playing ); - } - - bool SimplePlayer::isPaused() const - { -+ if( ! d->player ) -+ return false; - return ( d->player->state() == Player::Paused ); - } - - void SimplePlayer::stateChanged( Player::State ns, Player::State os ) - { -+ if( ! d->player ) -+ return; - if( os == Player::Loading && ns == Player::Stopped ) - d->player->play(); - } -@@ -135,7 +159,8 @@ void SimplePlayer::deleteYourObjects() - d->title = d->channel->channelName(); - d->type = d->channel->channelType(); - -- d->player->stop(); -+ if( d->player ) -+ d->player->stop(); - - delete d->player; - delete d->channel; -@@ -149,6 +174,9 @@ void SimplePlayer::recreateObjects() - d->channel->setVolume( d->channelvolume ); - - d->player = Factory::self()->createPlayer(); -+ if( ! d->player ) -+ return; -+ - d->player->setOutputChannel( d->channel ); - - if( d->state != Player::NoMedia ) diff --git a/opensuse/tdelibs/kdeprint-restart-cupsd.diff b/opensuse/tdelibs/kdeprint-restart-cupsd.diff deleted file mode 100644 index d464098eb..000000000 --- a/opensuse/tdelibs/kdeprint-restart-cupsd.diff +++ /dev/null @@ -1,32 +0,0 @@ -Index: kdeprint/cups/cupsdconf2/cupsddialog.cpp -=================================================================== ---- kdeprint/cups/cupsdconf2/cupsddialog.cpp.orig -+++ kdeprint/cups/cupsdconf2/cupsddialog.cpp -@@ -45,6 +45,7 @@ - #include - #include - -+#include - #include - #include - -@@ -205,15 +206,13 @@ bool CupsdDialog::restartServer(QString& - } - else - { -+ KProcess proc; - bool success = false; - if (getuid() == 0 ) -- success = (::kill(serverPid, SIGHUP) == 0); -+ proc << "rccups" << "force-reload"; - else -- { -- KProcess proc; -- proc << "kdesu" << "-c" << "kill -SIGHUP " + QString::number( serverPid ); -- success = proc.start( KProcess::Block ) && proc.normalExit(); -- } -+ proc << "kdesu" << "-c" << "rccups" << "force-reload"; -+ success = proc.start( KProcess::Block ) && proc.normalExit(); - if( !success ) - msg = i18n("Unable to restart CUPS server (pid = %1)").arg(serverPid); - } diff --git a/opensuse/tdelibs/kdeprint-utf8.diff b/opensuse/tdelibs/kdeprint-utf8.diff deleted file mode 100644 index ed2ad79da..000000000 --- a/opensuse/tdelibs/kdeprint-utf8.diff +++ /dev/null @@ -1,13 +0,0 @@ -Index: kdeprint/cups/kmcupsmanager.cpp -=================================================================== ---- kdeprint/cups/kmcupsmanager.cpp.orig -+++ kdeprint/cups/kmcupsmanager.cpp -@@ -85,7 +85,7 @@ static int trials = 5; - // change LANG variable so that CUPS is always using - // english language: translation may only come from the PPD - // itself, or from KDE. -- setenv("LANG", "en", 1); -+ setenv("LANG", "en_US.UTF-8", 1); - } - - KMCupsManager::~KMCupsManager() diff --git a/opensuse/tdelibs/kdesu-settings.diff b/opensuse/tdelibs/kdesu-settings.diff deleted file mode 100644 index fc24c09b6..000000000 --- a/opensuse/tdelibs/kdesu-settings.diff +++ /dev/null @@ -1,50 +0,0 @@ -Subject: Change kdesu settings -From: Lubos Lunak -Bug: 216796 -Relates: kdelibs4/kdesu-settings.diff -Patch-upstream: never - -Change kdesu(d) password keeping timeout only to 5 minutes and enable -it by default (to match kdesu using sudo in 10.3 behaviour). -KDE3 needs a hack in KPasswordDialog for enabling it by default. - -Update: Change the timeout back to 2 hours (bnc#404521). - -Index: kdesu/defaults.h -=================================================================== ---- kdesu/defaults.h.orig -+++ kdesu/defaults.h -@@ -13,8 +13,9 @@ - #ifndef __Defaults_h_included__ - #define __Defaults_h_included__ - -+/*const int defTimeout = 120*60;*/ - const int defTimeout = 120*60; - const int defEchoMode = 0; --const int defKeep = false; -+const int defKeep = true; - - #endif -Index: kdeui/kpassdlg.cpp -=================================================================== ---- kdeui/kpassdlg.cpp.orig -+++ kdeui/kpassdlg.cpp -@@ -49,6 +49,8 @@ - - #include "kpassdlg.h" - -+#include "../kdesu/defaults.h" -+ - /* - * Password line editor. - */ -@@ -337,7 +339,8 @@ void KPasswordDialog::init() - - KConfig* const cfg = KGlobal::config(); - const KConfigGroupSaver saver(cfg, "Passwords"); -- if (m_Keep && cfg->readBoolEntry("Keep", false)) -+ bool def = ( qstrcmp( qAppName(), "kdesu" ) == 0 ? defKeep : false ); -+ if (m_Keep && cfg->readBoolEntry("Keep", def)) - ++m_Keep; - - m_pMain = new QWidget(this); diff --git a/opensuse/tdelibs/kdeversion.diff b/opensuse/tdelibs/kdeversion.diff deleted file mode 100644 index f9b4cc1c2..000000000 --- a/opensuse/tdelibs/kdeversion.diff +++ /dev/null @@ -1,13 +0,0 @@ -Index: kdecore/kdeversion.h -=================================================================== ---- kdecore/kdeversion.h.orig -+++ kdecore/kdeversion.h -@@ -33,6 +33,8 @@ - - #define KDE_IS_VERSION(a,b,c) ( KDE_VERSION >= KDE_MAKE_VERSION(a,b,c) ) - -+#define KDELIBS_SUSE -+ - /** - * Namespace for general KDE functions. - */ diff --git a/opensuse/tdelibs/kfile-beagle.diff b/opensuse/tdelibs/kfile-beagle.diff deleted file mode 100644 index 467e68ed4..000000000 --- a/opensuse/tdelibs/kfile-beagle.diff +++ /dev/null @@ -1,42 +0,0 @@ -Index: kio/kfile/kurlbar.cpp -=================================================================== ---- kio/kfile/kurlbar.cpp.orig -+++ kio/kfile/kurlbar.cpp -@@ -605,8 +605,19 @@ void KURLBar::readItem( int i, KConfig * - if ( !url.isValid() || !KProtocolInfo::isKnownProtocol( url )) - return; // nothing we could do. - -+ QString description = config->readEntry( QString("Description_") + number ); -+ -+ if (description.isEmpty() && url.protocol()=="beagle") { -+ KIO::UDSEntry uds; -+ const KURL kurl("beagle:?beagled-status"); -+ if (!KIO::NetAccess::stat(kurl, uds)) -+ return; -+ -+ description = i18n("Desktop Search"); -+ } -+ - insertItem( url, -- config->readEntry( QString("Description_") + number ), -+ description, - applicationLocal, - config->readEntry( QString("Icon_") + number ), - static_cast( -Index: kio/kfile/kfiledialog.cpp -=================================================================== ---- kio/kfile/kfiledialog.cpp.orig -+++ kio/kfile/kfiledialog.cpp -@@ -1165,6 +1165,12 @@ void KFileDialog::urlEntered(const KURL& - d->pathCombo->setURL( url ); - } - -+ if (url.protocol()=="beagle" && url.path()=="/") { -+ d->pathCombo->setEditText("beagle:/<"+i18n("search term")+">"); -+ d->pathCombo->lineEdit()->setSelection(8,255); -+ d->pathCombo->setFocus(); -+ } -+ - locationEdit->blockSignals( true ); - locationEdit->setCurrentItem( 0 ); - if ( d->keepLocation ) diff --git a/opensuse/tdelibs/kickoff-drop-shadow.diff b/opensuse/tdelibs/kickoff-drop-shadow.diff deleted file mode 100644 index e4c7befc2..000000000 --- a/opensuse/tdelibs/kickoff-drop-shadow.diff +++ /dev/null @@ -1,177 +0,0 @@ -Index: kdefx/kstyle.cpp -=================================================================== ---- kdefx/kstyle.cpp.orig -+++ kdefx/kstyle.cpp -@@ -31,6 +31,7 @@ - - #include - #include -+#include - #include - #include - #include -@@ -79,7 +80,7 @@ namespace - QWidget* w1; - QWidget* w2; - }; -- typedef QMap ShadowMap; -+ typedef QMap ShadowMap; - static ShadowMap *_shadowMap = 0; - QSingleCleanupHandler cleanupShadowMap; - ShadowMap &shadowMap() { -@@ -113,8 +114,13 @@ namespace - - const double shadow_strip[4] = - { 0.565, 0.675, 0.835, 0.945 }; --} - -+ static bool useDropShadow(QWidget* w) -+ { -+ return w && w->metaObject() && -+ w->metaObject()->findProperty("KStyleMenuDropShadow") != -1; -+ } -+} - - namespace - { -@@ -128,12 +134,12 @@ class TransparencyHandler : public QObje - - protected: - void blendToColor(const QColor &col); -- void blendToPixmap(const QColorGroup &cg, const QPopupMenu* p); -+ void blendToPixmap(const QColorGroup &cg, const QWidget* p); - #ifdef HAVE_XRENDER -- void XRenderBlendToPixmap(const QPopupMenu* p); -+ void XRenderBlendToPixmap(const QWidget* p); - #endif -- void createShadowWindows(const QPopupMenu* p); -- void removeShadowWindows(const QPopupMenu* p); -+ void createShadowWindows(const QWidget* p); -+ void removeShadowWindows(const QWidget* p); - void rightShadow(QImage& dst); - void bottomShadow(QImage& dst); - private: -@@ -256,8 +262,16 @@ void KStyle::polish( QWidget* widget ) - widget->installEventFilter(this); - } - } --} -+ if (widget->isTopLevel()) -+ { -+ if (!d->menuHandler && useDropShadow(widget)) -+ d->menuHandler = new TransparencyHandler(this, Disabled, 1.0, false); - -+ if (d->menuHandler && useDropShadow(widget)) -+ widget->installEventFilter(d->menuHandler); -+ } -+} -+ - - void KStyle::unPolish( QWidget* widget ) - { -@@ -267,8 +281,10 @@ void KStyle::unPolish( QWidget* widget ) - QFrame::Shape shape = frame->frameShape(); - if (shape == QFrame::ToolBarPanel || shape == QFrame::MenuBarPanel) - widget->removeEventFilter(this); -- } -+ } - } -+ if (widget->isTopLevel() && d->menuHandler && useDropShadow(widget)) -+ widget->removeEventFilter(d->menuHandler); - } - - -@@ -1997,7 +2013,7 @@ void TransparencyHandler::bottomShadow(Q - } - - // Create a shadow of thickness 4. --void TransparencyHandler::createShadowWindows(const QPopupMenu* p) -+void TransparencyHandler::createShadowWindows(const QWidget* p) - { - #ifdef Q_WS_X11 - int x2 = p->x()+p->width(); -@@ -2044,7 +2060,7 @@ void TransparencyHandler::createShadowWi - #endif - } - --void TransparencyHandler::removeShadowWindows(const QPopupMenu* p) -+void TransparencyHandler::removeShadowWindows(const QWidget* p) - { - #ifdef Q_WS_X11 - ShadowMap::iterator it = shadowMap().find(p); -@@ -2070,7 +2086,7 @@ bool TransparencyHandler::eventFilter( Q - // Copyright (C) 2000 Daniel M. Duley - - // Added 'fake' menu shadows <04-Jul-2002> -- Karol -- QPopupMenu* p = (QPopupMenu*)object; -+ QWidget* p = (QWidget*)object; - QEvent::Type et = event->type(); - - if (et == QEvent::Show) -@@ -2109,13 +2125,23 @@ bool TransparencyHandler::eventFilter( Q - // * shadows after duplicate show events. - // * TODO : determine real cause for duplicate events - // * till 20021005 -- if (dropShadow && p->width() > 16 && p->height() > 16 && !shadowMap().contains( p )) -+ if ((dropShadow || useDropShadow(p)) -+ && p->width() > 16 && p->height() > 16 && !shadowMap().contains( p )) - createShadowWindows(p); - } -+ else if (et == QEvent::Resize && p->isShown() && p->isTopLevel()) -+ { -+ // Handle drop shadow -+ if (dropShadow || useDropShadow(p)) -+ { -+ removeShadowWindows(p); -+ createShadowWindows(p); -+ } -+ } - else if (et == QEvent::Hide) - { - // Handle drop shadow -- if (dropShadow) -+ if (dropShadow || useDropShadow(p)) - removeShadowWindows(p); - - // Handle translucency -@@ -2140,7 +2166,7 @@ void TransparencyHandler::blendToColor(c - } - - --void TransparencyHandler::blendToPixmap(const QColorGroup &cg, const QPopupMenu* p) -+void TransparencyHandler::blendToPixmap(const QColorGroup &cg, const QWidget* p) - { - if (opacity < 0.0 || opacity > 1.0) - return; -@@ -2153,7 +2179,10 @@ void TransparencyHandler::blendToPixmap( - return; - - // Allow styles to define the blend pixmap - allows for some interesting effects. -- kstyle->renderMenuBlendPixmap( blendPix, cg, p ); -+ if (::qt_cast(p)) -+ kstyle->renderMenuBlendPixmap( blendPix, cg, ::qt_cast(p) ); -+ else -+ blendPix.fill(cg.button()); // Just tint as the default behavior - - QImage blendImg = blendPix.convertToImage(); - QImage backImg = pix.convertToImage(); -@@ -2166,13 +2195,17 @@ void TransparencyHandler::blendToPixmap( - // Here we go, use XRender in all its glory. - // NOTE: This is actually a bit slower than the above routines - // on non-accelerated displays. -- Karol. --void TransparencyHandler::XRenderBlendToPixmap(const QPopupMenu* p) -+void TransparencyHandler::XRenderBlendToPixmap(const QWidget* p) - { - KPixmap renderPix; - renderPix.resize( pix.width(), pix.height() ); - - // Allow styles to define the blend pixmap - allows for some interesting effects. -- kstyle->renderMenuBlendPixmap( renderPix, p->colorGroup(), p ); -+ if (::qt_cast(p)) -+ kstyle->renderMenuBlendPixmap( renderPix, p->colorGroup(), -+ ::qt_cast(p) ); -+ else -+ renderPix.fill(p->colorGroup().button()); // Just tint as the default behavior - - Display* dpy = qt_xdisplay(); - Pixmap alphaPixmap; diff --git a/opensuse/tdelibs/kimproxy-warning.diff b/opensuse/tdelibs/kimproxy-warning.diff deleted file mode 100644 index 0731ebf4b..000000000 --- a/opensuse/tdelibs/kimproxy-warning.diff +++ /dev/null @@ -1,13 +0,0 @@ -Index: interfaces/kimproxy/library/kimproxy.cpp -=================================================================== ---- interfaces/kimproxy/library/kimproxy.cpp.orig -+++ interfaces/kimproxy/library/kimproxy.cpp -@@ -204,7 +204,7 @@ KIMProxy::KIMProxy( DCOPClient* dc ) : D - - // FIXME: make this work when the sender object id is set to KIMIFace - if ( !connectDCOPSignal( 0, 0, method, method, false ) ) -- KMessageBox::information( 0, QString( "Couldn't connect DCOP signal.\nWon't receive any status notifications!" ) ); -+ kdWarning() << "Couldn't connect DCOP signal. Won't receive any status notifications!" << endl; - } - - KIMProxy::~KIMProxy( ) diff --git a/opensuse/tdelibs/kmimelist.diff b/opensuse/tdelibs/kmimelist.diff deleted file mode 100644 index 484523f25..000000000 --- a/opensuse/tdelibs/kmimelist.diff +++ /dev/null @@ -1,81 +0,0 @@ -Index: kded/Makefile.am -=================================================================== ---- kded/Makefile.am.orig -+++ kded/Makefile.am -@@ -36,12 +36,16 @@ kbuildsycoca_la_SOURCES = kbuildsycoca.c - kctimefactory.cpp \ - vfolder_menu.cpp - --bin_PROGRAMS = kdontchangethehostname kde-menu -+bin_PROGRAMS = kdontchangethehostname kde-menu kmimelist - - kdontchangethehostname_LDFLAGS = $(all_libraries) $(KDE_RPATH) - kdontchangethehostname_LDADD = $(LIB_KDECORE) - kdontchangethehostname_SOURCES = khostname.cpp - -+kmimelist_LDFLAGS = $(all_libraries) $(KDE_RPATH) -+kmimelist_LDADD = ../kio/libkio.la -+kmimelist_SOURCES = kmimelist.cpp -+ - kde_menu_LDFLAGS = $(all_libraries) $(KDE_RPATH) - kde_menu_LDADD = $(LIB_KIO) - kde_menu_SOURCES = kde-menu.cpp -Index: kded/kmimelist.cpp -=================================================================== ---- /dev/null -+++ kded/kmimelist.cpp -@@ -0,0 +1,54 @@ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+ -+#include -+ -+#include -+ -+int main(int argc, char *argv[]) -+{ -+ KApplication k(argc,argv,"blurb",false); -+ -+ KMimeType::List mtl = KMimeType::allMimeTypes( ); -+ assert( mtl.count() ); -+ qDebug( "Found %d mime types.", mtl.count() ); -+ QValueListIterator it(mtl.begin()); -+ KServiceTypeProfile::OfferList ol; -+ -+ for (; it != mtl.end(); ++it) -+ { -+ { -+ // Application -+ printf( "APP:%s:", (*it)->name().latin1() ); -+ ol = KServiceTypeProfile::offers((*it)->name(), "Application"); -+ QValueListIterator it2(ol.begin()); -+ for (; it2 != ol.end(); ++it2) { -+ if ((*it2).allowAsDefault()) -+ printf( " %s", (*it2).service()->desktopEntryPath().ascii() ); -+ -+ } -+ printf( "\n" ); -+ } -+ -+ { -+ // Embedded -+ printf( "PART:%s:", (*it)->name().latin1() ); -+ ol = KServiceTypeProfile::offers((*it)->name(), "KParts/ReadOnlyPart"); -+ QValueListIterator it2(ol.begin()); -+ for (; it2 != ol.end(); ++it2) { -+ if ((*it2).allowAsDefault()) -+ printf( " %s", (*it2).service()->desktopEntryPath().ascii() ); -+ -+ } -+ printf( "\n" ); -+ } -+ } -+} -+ diff --git a/opensuse/tdelibs/kremoteencoding-utf8.diff b/opensuse/tdelibs/kremoteencoding-utf8.diff deleted file mode 100644 index 74600a0f4..000000000 --- a/opensuse/tdelibs/kremoteencoding-utf8.diff +++ /dev/null @@ -1,28 +0,0 @@ -Index: kio/kio/kremoteencoding.cpp -=================================================================== ---- kio/kio/kremoteencoding.cpp.orig -+++ kio/kio/kremoteencoding.cpp -@@ -53,7 +53,7 @@ QCString KRemoteEncoding::encode(const Q - QCString result = codec->fromUnicode(name); - if (codec->toUnicode(result) != name) - return name.latin1(); -- -+ - return result; - } - -@@ -80,11 +80,13 @@ void KRemoteEncoding::setEncoding(const - - if (name) - codec = QTextCodec::codecForName(name); -+ else -+ codec = QTextCodec::codecForMib( 106 ); // fallback to UTF-8 - - if (codec == 0L) - codec = QTextCodec::codecForMib(1); - -- kdDebug() << k_funcinfo << "setting encoding " << codec->name() -+ kdDebug() << k_funcinfo << "setting encoding " << codec->name() - << " for name=" << name << endl; - } - diff --git a/opensuse/tdelibs/ktip-icon-hack.diff b/opensuse/tdelibs/ktip-icon-hack.diff deleted file mode 100644 index 4812646d1..000000000 --- a/opensuse/tdelibs/ktip-icon-hack.diff +++ /dev/null @@ -1,56 +0,0 @@ -Index: kdeui/ktip.cpp -=================================================================== ---- kdeui/ktip.cpp.orig -+++ kdeui/ktip.cpp -@@ -367,24 +367,47 @@ void KTipDialog::showMultiTip(QWidget *p - mInstance->raise(); - } - -+static QString fixTip(QString tip) -+{ -+ QRegExp iconRegExp(""); -+ iconRegExp.setMinimal(true); -+ if (iconRegExp.search(tip)>-1) { -+ QString iconName = iconRegExp.cap(1); -+ if (!iconName.isEmpty()) -+ if (KGlobal::dirs()->findResource("icon", iconName).isEmpty()) -+ tip.replace("crystalsvg","hicolor"); -+ } -+ -+ return tip; -+} -+ - void KTipDialog::prevTip() - { - mDatabase->prevTip(); -- mTipText->setText(QString::fromLatin1( -+ QString currentTip = QString::fromLatin1( - "%3") - .arg(mTextColor.name()) - .arg(mBaseColor.name()) -- .arg(i18n(mDatabase->tip().utf8()))); -+ .arg(i18n(mDatabase->tip().utf8())); -+ -+ -+ currentTip = fixTip(currentTip); -+ mTipText->setText(currentTip); - mTipText->setContentsPos(0, 0); - } - - void KTipDialog::nextTip() - { - mDatabase->nextTip(); -- mTipText->setText(QString::fromLatin1("%3") -+ QString currentTip = QString::fromLatin1( -+ "%3") - .arg(mTextColor.name()) - .arg(mBaseColor.name()) -- .arg(i18n(mDatabase->tip().utf8()))); -+ .arg(i18n(mDatabase->tip().utf8())); -+ -+ -+ currentTip = fixTip(currentTip); -+ mTipText->setText(currentTip); - mTipText->setContentsPos(0, 0); - } - diff --git a/opensuse/tdelibs/kwalletd-try-open.diff b/opensuse/tdelibs/kwalletd-try-open.diff deleted file mode 100644 index 547f8192d..000000000 --- a/opensuse/tdelibs/kwalletd-try-open.diff +++ /dev/null @@ -1,81 +0,0 @@ -Index: kio/misc/kwalletd/kwalletd.cpp -=================================================================== ---- kio/misc/kwalletd/kwalletd.cpp.orig -+++ kio/misc/kwalletd/kwalletd.cpp -@@ -355,6 +355,44 @@ int KWalletD::doTransactionOpen(const QC - return rc; - } - -+int KWalletD::tryOpen(const QString& wallet, const QCString& password) -+{ -+ if (isOpen(wallet)) -+ return 0; -+ -+ if (_tryOpenBlocked.isActive()) { -+ kdDebug() << "tryOpen is active.." << endl; -+ return -1; -+ } -+ -+ if (!KWallet::Backend::exists(wallet)) -+ return -2; -+ -+ KWallet::Backend *b = new KWallet::Backend(wallet, false /*isPath*/); -+ int rc = b->open(QByteArray().duplicate(password, strlen(password))); -+ if (rc == 0) { -+ _wallets.insert(rc = generateHandle(), b); -+ _passwords[wallet] = password; -+ b->ref(); -+ _tryOpenBlocked.stop(); -+ QByteArray data; -+ QDataStream ds(data, IO_WriteOnly); -+ ds << wallet; -+ emitDCOPSignal("walletOpened(QString)", data); -+ } -+ else { -+ delete b; -+ // make sure that we're not bombed with a dictionary attack -+ _tryOpenBlocked.start (30 * 1000, true /*single shot*/); -+ if (++_failed > 5) { -+ _failed = 0; -+ QTimer::singleShot(0, this, SLOT(notifyFailures())); -+ } -+ -+ rc = -1; -+ } -+ return rc; -+} - - int KWalletD::internalOpen(const QCString& appid, const QString& wallet, bool isPath, WId w, bool modal) { - int rc = -1; -Index: kio/misc/kwalletd/kwalletd.h -=================================================================== ---- kio/misc/kwalletd/kwalletd.h.orig -+++ kio/misc/kwalletd/kwalletd.h -@@ -26,6 +26,7 @@ - #include - #include - #include -+#include - #include - #include "kwalletbackend.h" - -@@ -51,8 +52,10 @@ class KWalletD : public KDEDModule { - - // Open and unlock the wallet - virtual int open(const QString& wallet, uint wId); -- -+ // Open and unlock the wallet -+ virtual int tryOpen(const QString& wallet, const QCString& passwd); - // Open and unlock the wallet with this path -+ - virtual int openPath(const QString& path, uint wId); - - // Asynchronous open - must give the object to return the handle -@@ -186,6 +189,7 @@ class KWalletD : public KDEDModule { - int _idleTime; - QMap _implicitAllowMap, _implicitDenyMap; - KTimeout *_timeouts; -+ QTimer _tryOpenBlocked; - - QPtrList _transactions; - QGuardedPtr< QWidget > activeDialog; diff --git a/opensuse/tdelibs/light_v_2_scrollbar_patch.patch b/opensuse/tdelibs/light_v_2_scrollbar_patch.patch deleted file mode 100644 index e4ad1dd81..000000000 --- a/opensuse/tdelibs/light_v_2_scrollbar_patch.patch +++ /dev/null @@ -1,34 +0,0 @@ -diff -ur kdelibs-3.5.10.orig/kstyles/light/lightstyle-v2.cpp kdelibs-3.5.10/kstyles/light/lightstyle-v2.cpp ---- kdelibs-3.5.10.orig/kstyles/light/lightstyle-v2.cpp 2006-03-17 13:19:10.000000000 +0300 -+++ kdelibs-3.5.10/kstyles/light/lightstyle-v2.cpp 2011-05-07 23:30:18.000000000 +0400 -@@ -501,12 +501,14 @@ - p->drawLine(r.topLeft(), r.topRight()); - p->setPen(cg.background()); - p->drawLine(r.left(), r.top() + 1, r.right(), r.top() + 1); -- fr.addCoords(0, 2, 0, 0); -+ p->drawLine(r.left(), r.bottom(), r.right(), r.bottom()); -+ fr.addCoords(0, 2, 0, -1); - } else { - p->drawLine(r.topLeft(), r.bottomLeft()); - p->setPen(cg.background()); - p->drawLine(r.left() + 1, r.top(), r.left() + 1, r.bottom()); -- fr.addCoords(2, 0, 0, 0); -+ p->drawLine(r.right(), r.top(), r.right(), r.bottom()); -+ fr.addCoords(2, 0, -1, 0); - } - - p->fillRect(fr, cg.brush((flags & Style_Down) ? -@@ -523,11 +525,13 @@ - if (flags & Style_Horizontal) { - p->drawLine(r.topLeft(), r.topRight()); - p->setPen(cg.background()); -+ p->drawLine(r.left(), r.bottom(), r.right(), r.bottom()); - p->drawLine(r.left(), r.top() + 1, r.right(), r.top() + 1); - fr.addCoords(0, 2, 0, -1); - } else { - p->drawLine(r.topLeft(), r.bottomLeft()); - p->setPen(cg.background()); -+ p->drawLine(r.right(), r.top(), r.right(), r.bottom()); - p->drawLine(r.left() + 1, r.top(), r.left() + 1, r.bottom()); - fr.addCoords(2, 0, -1, 0); - } diff --git a/opensuse/tdelibs/limit-max-image-size.diff b/opensuse/tdelibs/limit-max-image-size.diff deleted file mode 100644 index 6a01bf063..000000000 --- a/opensuse/tdelibs/limit-max-image-size.diff +++ /dev/null @@ -1,28 +0,0 @@ -Index: kapplication.cpp -=================================================================== -RCS file: /home/kde/kdelibs/kdecore/kapplication.cpp,v -retrieving revision 1.670 -diff -u -p -r1.670 kapplication.cpp ---- kdecore/kapplication.cpp 22 Jul 2004 16:50:04 -0000 1.670 -+++ kdecore/kapplication.cpp 16 Aug 2004 20:31:02 -0000 -@@ -43,6 +43,7 @@ - #include - #include - #include -+#include - #ifndef QT_NO_SQL - #include - #endif -@@ -1975,6 +1976,12 @@ void KApplication::propagateSettings(Set - KConfigBase* config = KGlobal::config(); - KConfigGroupSaver saver( config, "KDE" ); - -+#ifdef QT_HAVE_MAX_IMAGE_SIZE -+ QSize maxImageSize(4096, 4096); -+ maxImageSize = config->readSizeEntry("MaxImageSize", &maxImageSize); -+ QImage::setMaxImageSize(maxImageSize); -+#endif -+ - int num = config->readNumEntry("CursorBlinkRate", QApplication::cursorFlashTime()); - if ((num != 0) && (num < 200)) - num = 200; diff --git a/opensuse/tdelibs/lpoptions-cups-1.2.diff b/opensuse/tdelibs/lpoptions-cups-1.2.diff deleted file mode 100644 index aa3f5d5b6..000000000 --- a/opensuse/tdelibs/lpoptions-cups-1.2.diff +++ /dev/null @@ -1,28 +0,0 @@ -Index: kdeprint/kmvirtualmanager.cpp -=================================================================== ---- kdeprint/kmvirtualmanager.cpp.orig -+++ kdeprint/kmvirtualmanager.cpp -@@ -179,7 +179,7 @@ void KMVirtualManager::setAsDefault(KMPr - - void KMVirtualManager::refresh() - { -- QFileInfo fi(QDir::homeDirPath() + QFile::decodeName("/.lpoptions")); -+ QFileInfo fi(QDir::homeDirPath() + QFile::decodeName("/.cups/lpoptions")); - QFileInfo fi2(QFile::decodeName("/etc/cups/lpoptions")); - - // if root, then only use global file: trick -> use twice the same file -@@ -301,7 +301,13 @@ void KMVirtualManager::triggerSave() - filename = QFile::decodeName("/etc/cups/lpoptions"); - } - else -- filename = QDir::homeDirPath() + QFile::decodeName("/.lpoptions"); -+ { -+ QDir cupsDir(QDir::home().absPath()+"/.cups"); -+ if (!cupsDir.exists()) -+ cupsDir.mkdir(QDir::home().absPath()+"/.cups"); -+ filename = QDir::homeDirPath() + QFile::decodeName("/.cups/lpoptions"); -+ } -+ - if (!filename.isEmpty()) - { - saveFile(filename); diff --git a/opensuse/tdelibs/mimetype-changes.diff b/opensuse/tdelibs/mimetype-changes.diff deleted file mode 100644 index ea47629b8..000000000 --- a/opensuse/tdelibs/mimetype-changes.diff +++ /dev/null @@ -1,36 +0,0 @@ -Index: mimetypes/application/x-rpm.desktop -=================================================================== ---- mimetypes/application/x-rpm.desktop.orig -+++ mimetypes/application/x-rpm.desktop -@@ -1,4 +1,5 @@ - [Desktop Entry] -+X-KDE-AutoEmbed=true - Type=MimeType - MimeType=application/x-rpm - Icon=rpm -Index: mimetypes/application/x-ogg.desktop -=================================================================== ---- mimetypes/application/x-ogg.desktop.orig -+++ mimetypes/application/x-ogg.desktop -@@ -4,7 +4,7 @@ - # application/ogg "inherits" from it, so that apps associated with x-ogg can open ogg files. - Type=MimeType - MimeType=application/x-ogg --Icon=multimedia -+Icon=sound - Comment=Ogg Multimedia - Comment[ar]=وسائط Ogg متعددة - Comment[az]=Ogg Multimediya -Index: mimetypes/application/ogg.desktop -=================================================================== ---- mimetypes/application/ogg.desktop.orig -+++ mimetypes/application/ogg.desktop -@@ -1,7 +1,7 @@ - [Desktop Entry] - Type=MimeType - MimeType=application/ogg --Icon=multimedia -+Icon=sound - Patterns=*.ogg;*.OGG; - # Previous name of this mimetype - X-KDE-IsAlso=application/x-ogg diff --git a/opensuse/tdelibs/mimetype-icons.tar.bz2 b/opensuse/tdelibs/mimetype-icons.tar.bz2 deleted file mode 100644 index b37a35baa..000000000 Binary files a/opensuse/tdelibs/mimetype-icons.tar.bz2 and /dev/null differ diff --git a/opensuse/tdelibs/mozilla-sliders.patch b/opensuse/tdelibs/mozilla-sliders.patch deleted file mode 100644 index 004b0fd36..000000000 --- a/opensuse/tdelibs/mozilla-sliders.patch +++ /dev/null @@ -1,19 +0,0 @@ -Index: kdefx/kstyle.cpp -=================================================================== ---- kdefx/kstyle.cpp.orig -+++ kdefx/kstyle.cpp -@@ -2210,6 +2210,14 @@ void TransparencyHandler::XRenderBlendTo - void KStyle::virtual_hook( int, void* ) - { /*BASE::virtual_hook( id, data );*/ } - -+// HACK for gtk-qt-engine -+ -+KDE_EXPORT extern "C" -+void kde_kstyle_set_scrollbar_type_windows( void* style ) -+{ -+ ((KStyle*)style)->setScrollBarType( KStyle::WindowsStyleScrollBar ); -+} -+ - // vim: set noet ts=4 sw=4: - // kate: indent-width 4; replace-tabs off; tab-width 4; space-indent off; - diff --git a/opensuse/tdelibs/networkstatus.diff b/opensuse/tdelibs/networkstatus.diff deleted file mode 100644 index d7b4e8c89..000000000 --- a/opensuse/tdelibs/networkstatus.diff +++ /dev/null @@ -1,6006 +0,0 @@ -Index: networkstatus/connectionmanager.cpp -=================================================================== ---- /dev/null -+++ networkstatus/connectionmanager.cpp -@@ -0,0 +1,171 @@ -+/* This file is part of kdepim. -+ Copyright (C) 2005,2007 Will Stephenson -+ -+ This library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Library General Public -+ License version 2 as published by the Free Software Foundation. -+ -+ This library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Library General Public License for more details. -+ -+ You should have received a copy of the GNU Library General Public License -+ along with this library. If not, write to the Free Software -+ Foundation, Inc., 51 Franklin Street, Fifth Floor, -+ Boston, MA 02110-1301, USA. -+ -+ As a special exception, permission is given to link this library -+ with any edition of Qt, and distribute the resulting executable, -+ without including the source code for Qt in the source distribution. -+*/ -+ -+#include -+#include -+#include -+ -+#include "connectionmanager.h" -+#include "connectionmanager_p.h" -+ -+// Connection manager itself -+ConnectionManager::ConnectionManager( QObject * parent, const char * name ) : DCOPObject( "ConnectionManager" ), QObject( parent, name ), d( new ConnectionManagerPrivate( this ) ) -+{ -+ d->service = new NetworkStatusIface_stub( kapp->dcopClient(), "kded", "networkstatus" ); -+ -+ connectDCOPSignal( "kded", "networkstatus", "statusChange(int)", "slotStatusChanged(int)", false ); -+ -+ initialise(); -+} -+ -+ConnectionManager::~ConnectionManager() -+{ -+ delete d; -+} -+ -+ConnectionManager *ConnectionManager::s_self = 0L; -+ -+ConnectionManager *ConnectionManager::self() -+{ -+ static KStaticDeleter deleter; -+ if(!s_self) -+ deleter.setObject( s_self, new ConnectionManager( 0, "connection_manager" ) ); -+ return s_self; -+} -+ -+void ConnectionManager::initialise() -+{ -+ // determine initial state and set the state object accordingly. -+ d->status = ( NetworkStatus::Status )d->service->status(); -+} -+ -+NetworkStatus::Status ConnectionManager::status() -+{ -+ return d->status; -+} -+ -+void ConnectionManager::slotStatusChanged( int status ) -+{ -+ d->status = ( NetworkStatus::Status )status; -+ switch ( status ) { -+ case NetworkStatus::NoNetworks: -+ break; -+ case NetworkStatus::Unreachable: -+ break; -+ case NetworkStatus::OfflineDisconnected: -+ case NetworkStatus::OfflineFailed: -+ case NetworkStatus::ShuttingDown: -+ case NetworkStatus::Offline: -+ case NetworkStatus::Establishing: -+ if ( d->disconnectPolicy == Managed ) { -+ emit d->disconnected(); -+ } else if ( d->disconnectPolicy == OnNextChange ) { -+ setDisconnectPolicy( Manual ); -+ emit d->disconnected(); -+ } -+ break; -+ case NetworkStatus::Online: -+ if ( d->disconnectPolicy == Managed ) { -+ emit d->connected(); -+ } else if ( d->disconnectPolicy == OnNextChange ) { -+ setConnectPolicy( Manual ); -+ emit d->connected(); -+ } -+ break; -+ default: -+ kdDebug() << k_funcinfo << "Unrecognised status code!" << endl; -+ } -+ emit statusChanged( d->status ); -+} -+ -+ConnectionManager::ConnectionPolicy ConnectionManager::connectPolicy() const -+{ -+ return d->connectPolicy; -+} -+ -+void ConnectionManager::setConnectPolicy( ConnectionManager::ConnectionPolicy policy ) -+{ -+ d->connectPolicy = policy; -+} -+ -+ConnectionManager::ConnectionPolicy ConnectionManager::disconnectPolicy() const -+{ -+ return d->disconnectPolicy; -+} -+ -+void ConnectionManager::setDisconnectPolicy( ConnectionManager::ConnectionPolicy policy ) -+{ -+ d->disconnectPolicy = policy; -+} -+ -+void ConnectionManager::setManualConnectionPolicies() -+{ -+ d->connectPolicy = ConnectionManager::Manual; -+ d->disconnectPolicy = ConnectionManager::Manual; -+} -+ -+void ConnectionManager::setManagedConnectionPolicies() -+{ -+ d->connectPolicy = ConnectionManager::Managed; -+ d->disconnectPolicy = ConnectionManager::Managed; -+} -+ -+void ConnectionManager::registerConnectSlot( QObject * receiver, const char * member ) -+{ -+ d->connectReceiver = receiver; -+ d->connectSlot = member; -+ connect( d, SIGNAL( connected() ), receiver, member ); -+} -+ -+void ConnectionManager::forgetConnectSlot() -+{ -+ disconnect( d, SIGNAL( connected() ), d->connectReceiver, d->connectSlot ); -+ d->connectReceiver = 0; -+ d->connectSlot = 0; -+} -+ -+bool ConnectionManager::isConnectSlotRegistered() const -+{ -+ return ( d->connectSlot != 0 ); -+} -+ -+void ConnectionManager::registerDisconnectSlot( QObject * receiver, const char * member ) -+{ -+ d->disconnectReceiver = receiver; -+ d->disconnectSlot = member; -+ connect( d, SIGNAL( disconnected() ), receiver, member ); -+} -+ -+void ConnectionManager::forgetDisconnectSlot() -+{ -+ disconnect( d, SIGNAL( disconnected() ), d->disconnectReceiver, d->disconnectSlot ); -+ d->disconnectReceiver = 0; -+ d->disconnectSlot = 0; -+} -+ -+bool ConnectionManager::isDisconnectSlotRegistered() const -+{ -+ return ( d->disconnectSlot != 0 ); -+} -+ -+#include "connectionmanager.moc" -+ -Index: networkstatus/connectionmanager.h -=================================================================== ---- /dev/null -+++ networkstatus/connectionmanager.h -@@ -0,0 +1,167 @@ -+/* This file is part of kdepim. -+ Copyright (C) 2005,2007 Will Stephenson -+ -+ This library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Library General Public -+ License version 2 as published by the Free Software Foundation. -+ -+ This library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Library General Public License for more details. -+ -+ You should have received a copy of the GNU Library General Public License -+ along with this library. If not, write to the Free Software -+ Foundation, Inc., 51 Franklin Street, Fifth Floor, -+ Boston, MA 02110-1301, USA. -+ -+ As a special exception, permission is given to link this library -+ with any edition of Qt, and distribute the resulting executable, -+ without including the source code for Qt in the source distribution. -+*/ -+ -+#ifndef KDE_CONNECTION_MANAGER_H -+#define KDE_CONNECTION_MANAGER_H -+ -+#include -+#include -+ -+#include -+ -+class ConnectionManagerPrivate; -+ -+class KDE_EXPORT ConnectionManager : public QObject, virtual public DCOPObject -+{ -+Q_OBJECT -+K_DCOP -+k_dcop: -+ void slotStatusChanged( int status ); -+public: -+ /** -+ * This defines application policy in response to networking connect/disconnect events -+ * Manual - the app only disconnects when the user does so -+ * OnNextChange - the app should connect or disconnect the next time the network changes state, thereafter -+ * Manual -+ * Managed - the app should disconnect when the ConnectionManager thinks the system is -+ * offline -+ */ -+ enum ConnectionPolicy { Manual, OnNextChange, Managed }; -+ /** -+ * Set a policy to manage the application's connect behaviour -+ */ -+ void setConnectPolicy( ConnectionPolicy ); -+ /** -+ * Retrieve a policy managing the application's connect behaviour -+ */ -+ ConnectionPolicy connectPolicy() const; -+ -+ /** -+ * Set a policy to manage the application's disconnect behaviour -+ */ -+ void setDisconnectPolicy( ConnectionPolicy ); -+ -+ /** -+ * Retrieve a policy managing the application's disconnect behaviour -+ */ -+ ConnectionPolicy disconnectPolicy() const; -+ -+ /* -+ * We'll get logic of the form -+ * onStatusChange() { -+ * if ( ConnectionManager::self()->policy( ConnectionManager::ConnectBehaviour ) == ConnectionManager::OnNextChange || -+ * ConnectionManager::self()->policy( ConnectionManager::ConnectBehaviour ) == ConnectionManager::Managed ) -+ * { -+ * // do connect -+ * -+ * // reset the policy -+ * if ( ConnectionManager::self()->policy( ConnectionManager::ConnectBehaviour ) == ConnectionManager::OnNextChange ) -+ * ConnectionManager::self()->setPolicy( ConnectionManager::ConnectionManager, -+ * ConnectionManager::Manual ); -+ * } -+ * -+ * Do we just use the CM for policy storage, or do we try to factor the logic to implement the -+ * policy into the CM too? -+ * -+ * could signal doConnect(), then reset the policy -+ * or could register a connect slot -+ * registerConnectMethod( QObject * receiver, const char * member ); -+ * unregisterConnectMethod(); -+ * etc. -+ * -+ * The problem with automatically controlled behaviour, where policy may change as a result of a -+ * connect, is that if it is also manually altered, the CM needs to be updated. But the CM needs to -+ * be updated in any case. -+ * CM need -+ */ -+ /** -+ * Lazy-method to set Manual on both policies -+ */ -+ void setManualConnectionPolicies(); -+ /** -+ * Lazy-method to set Managed on both policies -+ */ -+ void setManagedConnectionPolicies(); -+ -+ /** -+ * Record a slot to call on a given receiving QObject when -+ * 1) the network connection is online, -+ * 2) the policy mandates that the app connect -+ * -+ * Only one slot may be registered at any one time. If a second slot is -+ * registered, the first slot is forgotten -+ * @param receiver the QObject where the slot is located -+ * @param member the slot to call. Set up member using the SLOT() macro. -+ */ -+ void registerConnectSlot( QObject * receiver, const char * member ); -+ -+ /** -+ * Forget any connect slot previously registered -+ */ -+ void forgetConnectSlot(); -+ -+ /** -+ * Has any slot been registered to be called on connect? -+ */ -+ bool isConnectSlotRegistered() const; -+ -+ /** -+ * Record a slot to call on a given receiving QObject when -+ * 1) the network connection goes offline (in any way ), -+ * 2) the policy mandates that the app disconnect -+ * -+ * Only one slot may be registered at any one time. If a second slot is -+ * registered, the first slot is forgotten -+ * @param receiver the QObject where the slot is located -+ * @param member the slot to call. Set up member using the SLOT() macro. -+ */ -+ void registerDisconnectSlot( QObject * receiver, const char * member ); -+ -+ /** -+ * Forget any disconnect slot previously registered -+ */ -+ void forgetDisconnectSlot(); -+ -+ /** -+ * Has any slot been registered to be called on disconnect? -+ */ -+ bool isDisconnectSlotRegistered() const; -+ -+ /// existing API -+ -+ static ConnectionManager* self(); -+ virtual ~ConnectionManager(); -+ NetworkStatus::Status status(); -+signals: -+ // signal that the network for a hostname is up/down -+ void statusChanged( NetworkStatus::Status status ); -+private: -+ // sets up internal state -+ void initialise(); -+ // reread the desktop status from the daemon and update internal state -+ ConnectionManager( QObject *parent, const char * name ); -+ ConnectionManagerPrivate * d; -+ static ConnectionManager * s_self; -+}; -+ -+#endif -+ -Index: networkstatus/connectionmanager_p.cpp -=================================================================== ---- /dev/null -+++ networkstatus/connectionmanager_p.cpp -@@ -0,0 +1,13 @@ -+#include "connectionmanager_p.h" -+ -+ConnectionManagerPrivate::ConnectionManagerPrivate(QObject * parent, const char * name ) : QObject( parent, name ), service( 0 ), connectPolicy( ConnectionManager::Managed ), -+ disconnectPolicy( ConnectionManager::Managed ), connectReceiver( 0 ), connectSlot( 0 ), -+ disconnectReceiver( 0 ), disconnectSlot( 0 ) -+{ -+} -+ -+ConnectionManagerPrivate::~ConnectionManagerPrivate() -+{ -+} -+ -+#include "connectionmanager_p.moc" -Index: networkstatus/connectionmanager_p.h -=================================================================== ---- /dev/null -+++ networkstatus/connectionmanager_p.h -@@ -0,0 +1,55 @@ -+/* This file is part of the KDE project -+ Copyright (C) 2007 Will Stephenson -+ -+ This library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Library General Public -+ License version 2 as published by the Free Software Foundation. -+ -+ This library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Library General Public License for more details. -+ -+ You should have received a copy of the GNU Library General Public License -+ along with this library. If not, write to the Free Software -+ Foundation, Inc., 51 Franklin Street, Fifth Floor, -+ Boston, MA 02110-1301, USA. -+ -+ As a special exception, permission is given to link this library -+ with any edition of Qt, and distribute the resulting executable, -+ without including the source code for Qt in the source distribution. -+*/ -+ -+#ifndef CONNECTIONMANAGERPRIVATE_H -+#define CONNECTIONMANAGERPRIVATE_H -+ -+#include -+ -+#include "connectionmanager.h" -+#include "networkstatuscommon.h" -+#include "networkstatusiface_stub.h" -+ -+ -+// ConnectionManager's private parts -+class ConnectionManagerPrivate : public QObject -+{ -+Q_OBJECT -+ friend class ConnectionManager; -+public: -+ ConnectionManagerPrivate( QObject * parent = 0, const char * name = 0); -+ ~ConnectionManagerPrivate(); -+ // this holds the currently active state -+ NetworkStatus::Status status; -+ NetworkStatusIface_stub * service; -+ ConnectionManager::ConnectionPolicy connectPolicy; -+ ConnectionManager::ConnectionPolicy disconnectPolicy; -+ QObject * connectReceiver; -+ const char * connectSlot; -+ QObject * disconnectReceiver; -+ const char * disconnectSlot; -+signals: -+ void connected(); -+ void disconnected(); -+}; -+ -+#endif -Index: networkstatus/Makefile.am -=================================================================== ---- /dev/null -+++ networkstatus/Makefile.am -@@ -0,0 +1,45 @@ -+#SUBDIRS = networkstatustray -+ -+METASOURCES = AUTO -+ -+INCLUDES = -I$(top_srcdir)/kded -I$(top_srcdir) $(all_includes) -+ -+kde_module_LTLIBRARIES = kded_networkstatus.la -+ -+kded_networkstatus_la_SOURCES = networkstatus.cpp networkstatus.skel \ -+ network.cpp -+kded_networkstatus_la_LIBADD = $(LIB_KDECORE) $(LIB_KIO) ./libnetworkstatus.la -+kded_networkstatus_la_LDFLAGS = $(all_libraries) -module -avoid-version -+ -+servicesdir = $(kde_servicesdir)/kded -+ -+services_DATA = networkstatus.desktop -+ -+lib_LTLIBRARIES = libnetworkstatus.la libconnectionmanager.la -+ -+libnetworkstatus_la_LIBADD = $(LIB_KDECORE) -+libnetworkstatus_la_LDFLAGS = $(all_libraries) -+libnetworkstatus_la_SOURCES = networkstatuscommon.cpp -+ -+libconnectionmanager_la_LIBADD = $(LIB_KDECORE) libnetworkstatus.la -+libconnectionmanager_la_LDFLAGS = $(all_libraries) -+libconnectionmanager_la_SOURCES = connectionmanager.cpp connectionmanager_p.cpp networkstatusindicator.cpp connectionmanager.skel networkstatusiface.stub -+ -+noinst_PROGRAMS = networkstatustestservice networkstatustestclient managedconnectiontestclient -+ -+networkstatustestservice_LDFLAGS = $(all_libraries) -+networkstatustestservice_LDADD = $(LIB_KFILE) libnetworkstatus.la -+networkstatustestservice_SOURCES = testservice.cpp testserviceview.ui networkstatusiface.stub -+ -+networkstatustestclient_LDFLAGS = $(all_libraries) -+networkstatustestclient_LDADD = $(LIB_KFILE) libnetworkstatus.la libconnectionmanager.la -+networkstatustestclient_SOURCES = testclient.cpp testclientview.ui -+ -+managedconnectiontestclient_LDFLAGS = $(all_libraries) -+managedconnectiontestclient_LDADD = $(LIB_KFILE) libnetworkstatus.la libconnectionmanager.la -+managedconnectiontestclient_SOURCES = testclient2.cpp testclientview.ui -+ -+noinst_HEADERS = network.h testservice.h testclient.h -+ -+include_HEADERS = networkstatuscommon.h connectionmanager.h networkstatusindicator.h \ -+ networkstatusiface.h -Index: networkstatus/network.cpp -=================================================================== ---- /dev/null -+++ networkstatus/network.cpp -@@ -0,0 +1,62 @@ -+/* This file is part of kdepim. -+ Copyright (C) 2005,2007 Will Stephenson -+ -+ This library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Library General Public -+ License version 2 as published by the Free Software Foundation. -+ -+ This library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Library General Public License for more details. -+ -+ You should have received a copy of the GNU Library General Public License -+ along with this library. If not, write to the Free Software -+ Foundation, Inc., 51 Franklin Street, Fifth Floor, -+ Boston, MA 02110-1301, USA. -+ -+ As a special exception, permission is given to link this library -+ with any edition of Qt, and distribute the resulting executable, -+ without including the source code for Qt in the source distribution. -+*/ -+ -+#include -+ -+#include "network.h" -+ -+Network::Network( NetworkStatus::Properties properties ) -+ : m_name( properties.name ), m_status( properties.status ), m_service( properties.service ) -+{ -+} -+ -+void Network::setStatus( NetworkStatus::Status status ) -+{ -+ m_status = status; -+} -+ -+NetworkStatus::Status Network::status() -+{ -+ return m_status; -+} -+ -+void Network::setName( const QString& name ) -+{ -+ m_name = name; -+} -+ -+QString Network::name() -+{ -+ return m_name; -+} -+ -+QString Network::service() -+{ -+ return m_service; -+} -+ -+void Network::setService( const QString& service ) -+{ -+ m_service = service; -+} -+ -+// vim: sw=4 ts=4 -Index: networkstatus/network.h -=================================================================== ---- /dev/null -+++ networkstatus/network.h -@@ -0,0 +1,60 @@ -+/* This file is part of kdepim. -+ Copyright (C) 2005,2007 Will Stephenson -+ -+ This library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Library General Public -+ License version 2 as published by the Free Software Foundation. -+ -+ This library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Library General Public License for more details. -+ -+ You should have received a copy of the GNU Library General Public License -+ along with this library. If not, write to the Free Software -+ Foundation, Inc., 51 Franklin Street, Fifth Floor, -+ Boston, MA 02110-1301, USA. -+ -+ As a special exception, permission is given to link this library -+ with any edition of Qt, and distribute the resulting executable, -+ without including the source code for Qt in the source distribution. -+*/ -+ -+#ifndef NETWORKSTATUS_NETWORK_H -+#define NETWORKSTATUS_NETWORK_H -+ -+#include "networkstatuscommon.h" -+ -+class Network -+{ -+public: -+ Network( const QString name ); -+ Network( NetworkStatus::Properties properties ); -+ /** -+ * Update the status of this network -+ */ -+ void setStatus( NetworkStatus::Status status ); -+ /** -+ * The connection status of this network -+ */ -+ NetworkStatus::Status status(); -+ /** -+ * The name of this network -+ */ -+ QString name(); -+ void setName( const QString& name ); -+ /** -+ * Returns the service owning this network -+ */ -+ QString service(); -+ void setService( const QString& service ); -+ -+private: -+ Network( const Network & ); -+ QString m_name; -+ NetworkStatus::Status m_status; -+ QString m_service; -+}; -+ -+#endif -+// vim: sw=4 ts=4 -Index: networkstatus/networkstatuscommon.cpp -=================================================================== ---- /dev/null -+++ networkstatus/networkstatuscommon.cpp -@@ -0,0 +1,76 @@ -+/* This file is part of kdepim. -+ Copyright (C) 2005,2007 Will Stephenson -+ -+ This library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Library General Public -+ License version 2 as published by the Free Software Foundation. -+ -+ This library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Library General Public License for more details. -+ -+ You should have received a copy of the GNU Library General Public License -+ along with this library. If not, write to the Free Software -+ Foundation, Inc., 51 Franklin Street, Fifth Floor, -+ Boston, MA 02110-1301, USA. -+ -+ As a special exception, permission is given to link this library -+ with any edition of Qt, and distribute the resulting executable, -+ without including the source code for Qt in the source distribution. -+*/ -+ -+#include "networkstatuscommon.h" -+ -+QDataStream & operator<< ( QDataStream & s, const NetworkStatus::Properties p ) -+{ -+ s << p.name; -+ s << (int)p.status; -+ s << p.service; -+ return s; -+} -+ -+QDataStream & operator>> ( QDataStream & s, NetworkStatus::Properties &p ) -+{ -+ int status; -+ s >> p.name; -+ s >> status; -+ p.status = (NetworkStatus::Status)status; -+ s >> p.service; -+ return s; -+} -+ -+namespace NetworkStatus -+{ -+ QString toString( NetworkStatus::Status st ) -+ { -+ QString str; -+ switch ( st ) { -+ case NetworkStatus::NoNetworks: -+ str = "NoNetworks"; -+ break; -+ case NetworkStatus::Unreachable: -+ str = "Unreachable"; -+ break; -+ case NetworkStatus::OfflineDisconnected: -+ str = "OfflineDisconnected"; -+ break; -+ case NetworkStatus::OfflineFailed: -+ str = "OfflineFailed"; -+ break; -+ case NetworkStatus::ShuttingDown: -+ str = "ShuttingDown"; -+ break; -+ case NetworkStatus::Offline: -+ str = "Offline"; -+ break; -+ case NetworkStatus::Establishing: -+ str = "Establishing"; -+ break; -+ case NetworkStatus::Online: -+ str = "Online"; -+ break; -+ } -+ return str; -+ } -+} // namespace NetworkStatus -Index: networkstatus/networkstatuscommon.h -=================================================================== ---- /dev/null -+++ networkstatus/networkstatuscommon.h -@@ -0,0 +1,52 @@ -+/* This file is part of kdepim -+ Copyright (C) 2005,2007 Will Stephenson -+ -+ This library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Library General Public -+ License version 2 as published by the Free Software Foundation. -+ -+ This library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Library General Public License for more details. -+ -+ You should have received a copy of the GNU Library General Public License -+ along with this library. If not, write to the Free Software -+ Foundation, Inc., 51 Franklin Street, Fifth Floor, -+ Boston, MA 02110-1301, USA. -+ -+ As a special exception, permission is given to link this library -+ with any edition of Qt, and distribute the resulting executable, -+ without including the source code for Qt in the source distribution. -+*/ -+ -+#ifndef NETWORKSTATUS_COMMON_H -+#define NETWORKSTATUS_COMMON_H -+ -+#include -+ -+namespace NetworkStatus -+{ -+ enum Status { NoNetworks = 1, Unreachable, OfflineDisconnected, OfflineFailed, ShuttingDown, Offline, Establishing, Online }; -+ enum RequestResult { RequestAccepted = 1, Connected, UserRefused, Unavailable }; -+ enum UnusedDemandPolicy { All, User, None, Permanent }; -+ -+ // BINARY COMPATIBILITY ALERT BEGIN !!!! -+ struct Properties -+ { -+ QString name; -+ Status status; -+ UnusedDemandPolicy unused1; -+ QCString service; -+ bool unused3; -+ QStringList unused4; -+ }; -+ // BINARY COMPATIBILITY ALERT END !!!! -+ -+ QString toString( Status st ); -+} -+ -+QDataStream & operator>> ( QDataStream & s, NetworkStatus::Properties &p ); -+QDataStream & operator<< ( QDataStream & s, const NetworkStatus::Properties p ); -+ -+#endif -Index: networkstatus/networkstatus.cpp -=================================================================== ---- /dev/null -+++ networkstatus/networkstatus.cpp -@@ -0,0 +1,163 @@ -+/* This file is part of kdepim -+ Copyright (C) 2005,2007 Will Stephenson -+ -+ This library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Library General Public -+ License version 2 as published by the Free Software Foundation. -+ -+ This library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Library General Public License for more details. -+ -+ You should have received a copy of the GNU Library General Public License -+ along with this library. If not, write to the Free Software -+ Foundation, Inc., 51 Franklin Street, Fifth Floor, -+ Boston, MA 02110-1301, USA. -+ -+ As a special exception, permission is given to link this library -+ with any edition of Qt, and distribute the resulting executable, -+ without including the source code for Qt in the source distribution. -+*/ -+ -+#include "networkstatus.h" -+ -+#include -+ -+#include -+#include -+#include -+ -+#include "network.h" -+#include -+ -+extern "C" { -+ KDE_EXPORT KDEDModule* create_networkstatus( const QCString& obj ) -+ { -+ return new NetworkStatusModule( obj ); -+ } -+} -+ -+// INTERNALLY USED STRUCTS AND TYPEDEFS -+ -+typedef QMap< QString, Network * > NetworkMap; -+ -+class NetworkStatusModule::Private -+{ -+public: -+ NetworkMap networks; -+ NetworkStatus::Status status; -+}; -+ -+// CTORS/DTORS -+ -+NetworkStatusModule::NetworkStatusModule( const QCString & obj ) : KDEDModule( obj ), d( new Private ) -+{ -+ d->status = NetworkStatus::NoNetworks; -+ connect( kapp->dcopClient(), SIGNAL( applicationRemoved( const QCString& ) ) , this, SLOT( unregisteredFromDCOP( const QCString& ) ) ); -+ // connect( kapp->dcopClient(), SIGNAL( applicationRegistered( const QCString& ) ) , this, SLOT( registeredToDCOP( const QCString& ) ) ); -+} -+ -+NetworkStatusModule::~NetworkStatusModule() -+{ -+ NetworkMap::ConstIterator it; -+ const NetworkMap::ConstIterator end = d->networks.end(); -+ -+ for ( it = d->networks.begin(); it != end; ++it ) { -+ delete ( *it ); -+ } -+ -+ delete d; -+} -+ -+// CLIENT INTERFACE -+ -+QStringList NetworkStatusModule::networks() -+{ -+ kdDebug() << k_funcinfo << " contains " << d->networks.count() << " networks" << endl; -+ return d->networks.keys(); -+} -+ -+int NetworkStatusModule::status() -+{ -+ kdDebug() << k_funcinfo << " status: " << (int)d->status << endl; -+ return (int)d->status; -+} -+ -+//protected: -+ -+void NetworkStatusModule::updateStatus() -+{ -+ NetworkStatus::Status bestStatus = NetworkStatus::NoNetworks; -+ const NetworkStatus::Status oldStatus = d->status; -+ -+ NetworkMap::ConstIterator it; -+ const NetworkMap::ConstIterator end = d->networks.end(); -+ for ( it = d->networks.begin(); it != end; ++it ) { -+ if ( ( *it )->status() > bestStatus ) -+ bestStatus = ( *it )->status(); -+ } -+ d->status = bestStatus; -+ -+ if ( oldStatus != d->status ) { -+ statusChange( (int)d->status ); -+ } -+} -+ -+void NetworkStatusModule::unregisteredFromDCOP( const QCString & appId ) -+{ -+ // unregister and delete any networks owned by a service that has just unregistered -+ NetworkMap::Iterator it = d->networks.begin(); -+ const NetworkMap::Iterator end = d->networks.end(); -+ while (it != d->networks.end()) -+ { -+ if ( ( *it )->service() == QString( appId ) ) -+ { -+ NetworkMap::Iterator toRemove = it++; -+ delete *toRemove; -+ d->networks.remove( toRemove ); -+ updateStatus(); -+ continue; -+ } -+ ++it; -+ } -+} -+ -+// SERVICE INTERFACE // -+void NetworkStatusModule::setNetworkStatus( const QString & networkName, int st ) -+{ -+ kdDebug() << k_funcinfo << networkName << ", " << st << endl; -+ NetworkStatus::Status changedStatus = (NetworkStatus::Status)st; -+ Network * net = 0; -+ NetworkMap::Iterator it = d->networks.find( networkName ); -+ if ( it != d->networks.end() ) { -+ net = (*it); -+ net->setStatus( changedStatus ); -+ updateStatus(); -+ } -+ else -+ kdDebug() << " No network named '" << networkName << "' found." << endl; -+} -+ -+void NetworkStatusModule::registerNetwork( const NetworkStatus::Properties properties ) -+{ -+ kdDebug() << k_funcinfo << properties.name << ", with status " << properties.status << endl; -+ -+ d->networks.insert( properties.name, new Network( properties ) ); -+ updateStatus(); -+} -+ -+void NetworkStatusModule::unregisterNetwork( const QString & networkName ) -+{ -+ kdDebug() << k_funcinfo << networkName << endl; -+ -+ NetworkMap::Iterator it = d->networks.find( networkName ); -+ if ( it != d->networks.end() ) { -+ delete *it; -+ d->networks.remove( it ); -+ } -+ updateStatus(); -+} -+ -+#include "networkstatus.moc" -+// vim: set noet sw=4 ts=4: -Index: networkstatus/networkstatus.desktop -=================================================================== ---- /dev/null -+++ networkstatus/networkstatus.desktop -@@ -0,0 +1,98 @@ -+[Desktop Entry] -+Encoding=UTF-8 -+Name=Network Status Daemon -+Name[af]=Netwerk status bediener -+Name[ar]=مراقب القرص Ùˆ التنÙيذ لحالة الشبكة -+Name[bg]=Демон за ÑÑŠÑтоÑние на мрежата -+Name[ca]=Dimoni de l'estat de la xarxa -+Name[cs]=Démon stavu sítÄ› -+Name[da]=Netværkstatusdæmon -+Name[de]=Ãœberwachung des Netzwerkstatus -+Name[el]=Δαίμονας κατάστασης δικτÏου -+Name[es]=Daemon de estado de la red -+Name[et]=Võrguoleku deemon -+Name[eu]=Sarearen egoera deabrua -+Name[fa]=شبح وضعیت شبکه -+Name[fi]=Verkkotilan tarkkailija -+Name[fr]=Suivi de l'état du réseau -+Name[fy]=Netwurktastândaemon -+Name[gl]=Daemon do Estado da Rede -+Name[hu]=Hálózati állapotjelzÅ‘ szolgáltatás -+Name[is]=Netstöðupúki -+Name[it]=Demone dello stato della rete -+Name[ja]=ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹ãƒ‡ãƒ¼ãƒ¢ãƒ³ -+Name[kk]=Желі күйінің қызметі -+Name[km]=ដáŸáž˜áž·áž“​ស្ážáž¶áž“ភាព​បណ្ដាញ -+Name[lt]=Tinklo statuso tarnyba -+Name[mk]=Даемон за мрежен ÑÑ‚Ð°Ñ‚ÑƒÑ -+Name[ms]=Daemon Berstatus Rangkaian -+Name[nb]=Statusnisse for nettverket -+Name[nds]=Nettwarkstatus-Dämoon -+Name[ne]=सञà¥à¤œà¤¾à¤² सà¥à¤¥à¤¿à¤¤à¤¿ डेइमन -+Name[nl]=Netwerkstatusdaemon -+Name[nn]=Statusnisse for nettverket -+Name[pl]=UsÅ‚uga stanu sieci -+Name[pt]=Servidor de Estado de Rede -+Name[pt_BR]=Daemon de Status da Rede -+Name[ru]=Служба ÑоÑтоÑÐ½Ð¸Ñ Ñети -+Name[sk]=Daemon stavu siete -+Name[sl]=Demon za omrežno stanje -+Name[sr]=Демон за ÑÑ‚Ð°Ñ‚ÑƒÑ Ð¼Ñ€ÐµÐ¶Ðµ -+Name[sr@Latn]=Demon za status mreže -+Name[sv]=Nätverksstatusdemon -+Name[ta]=வலைபà¯à®ªà®¿à®©à¯à®©à®²à¯ நிலை டெமான௠-+Name[tr]=AÄŸ Durum Ä°zleyici -+Name[uk]=Демон Ñтану мережі -+Name[zh_CN]=网络状æ€å®ˆæŠ¤ç¨‹åº -+Name[zh_TW]=ç¶²è·¯ç‹€æ…‹å®ˆè­·ç¨‹å¼ -+Comment=Tracks status of network interfaces and provides notification to applications using the network. -+Comment[af]=Hou tred van die status van netwerk intervlakke en verskaf kennisgewings na programme wat die netwerk gebruik. -+Comment[bg]=Следене на ÑÑŠÑтоÑнието на мрежата и предаване на информациÑта на програмите, които имат нужда -+Comment[ca]=Controla l'estat de les interfícies de xarxa i proporciona notificacions a les aplicacions que usen la xarxa. -+Comment[cs]=ZjiÅ¡'tuje stav síťových rozhraní a upozorňuje v případÄ› přístupu aplikací k síti. -+Comment[da]=Sporer status af netværksgrænseflade og sørger for meddelelser til programmer der bruger netværket. -+Comment[de]=Ãœberprüft den Netzwerk-Status und benachrichtigt anfragende Anwendungen -+Comment[el]=ΠαÏακολουθεί την κατάσταση του δικτÏου και παÏέχει ειδοποιήσεις σε εφαÏμογές που χÏησιμοποιοÏν το δίκτυο. -+Comment[es]=Sigue la pista de las interfaces de red y proporciona notificaciones a las aplicaciones que están usando la red. -+Comment[et]=Jälgib võrguliideste olekut ja annab sellest võrgu vahendusel rakendustele teada. -+Comment[eu]=Sare interfazeen egoera jarraitzen du eta sarea darabilten aplikazioei jakinarazten die. -+Comment[fa]=وضعیت واسطهای شبکه را شیار داده Ùˆ با استÙاده از شبکه، برای کاربردها اخطار Ùراهم می‌کند. -+Comment[fi]=Tarkkailee verkkoliitäntöjen tilaa ja varoittaa verkkoa käyttäviä sovelluksia. -+Comment[fr]=Surveille l'état des interfaces réseaux et fournit des notifications aux applications qui utilisent le réseau -+Comment[fy]=Hâldt de tastân by fan de Netwurkynterfaces en hâldt dêr de tapassings fan op de hichte. -+Comment[gl]=Monitoriza o estado das interfaces de rede e fornece notificacións ás aplicacións que usen a rede. -+Comment[hu]=Figyeli a hálózati csatolók állapotát és értesítési lehetÅ‘séget biztosít hálózati alkalmazások számára. -+Comment[is]=Fylgist með stöðu netkorta og sendir tilkynningar til forrita sem nota netið. -+Comment[it]=Controlla lo stato delle interfacce di rete e fornisce notifiche alle applicazioni che usano al rete. -+Comment[ja]=ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ãƒ¼ã‚¹ã®çŠ¶æ…‹ã‚’追跡ã—ã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚’用ã„るアプリケーションã«é€šçŸ¥ã—ã¾ã™ -+Comment[kk]=Желі интерфейÑтерінің күйін бақылап, желіні қолданатын бағдарламаларын құлақтандыру қызметі. -+Comment[km]=ážáž¶áž˜ážŠáž¶áž“​ស្ážáž¶áž“ភាព​របស់​ចំណុច​ប្រទាក់​បណ្ដាញ ព្រម​ទាំង​ផ្ដល់​នូវ​ការ​ជូនដំណឹង​ទៅ​កម្មវិធី ដែល​ប្រើ​បណ្ដាញ ។ -+Comment[lt]=Seka tinklo sÄ…sajų bÅ«senÄ… ir informuoja apie jas programas, naudojanÄias tinklÄ… -+Comment[mk]=Го Ñледи ÑтатуÑот на мрежните интерфејÑи и дава извеÑтувања на апликациите што ја кориÑтат мрежата. -+Comment[ms]=Menjejak status antara muka rangkaian dan memberitahu aplikasi yang menggunakan rangkaian tersebut. -+Comment[nb]=OvervÃ¥ker status for nettverksgrensesnitt og varsler programmer som bruker nettverket. -+Comment[nds]=Överwacht den Tostand vun Nettwark-Koppelsteden un sendt Narichten na Programmen, de dat Nettwark bruukt. -+Comment[ne]=सञà¥à¤œà¤¾à¤² इनà¥à¤Ÿà¤°à¤«à¥‡à¤¸à¤•à¥‹ सà¥à¤¥à¤¿à¤¤à¤¿ टà¥à¤°à¥à¤¯à¤¾à¤• गरà¥à¤¦à¤› र सञà¥à¤œà¤¾à¤² पà¥à¤°à¤¯à¥‹à¤— गरेर अनà¥à¤ªà¥à¤°à¤¯à¥‹à¤—मा जानकारी उपलबà¥à¤§ गराउछ । -+Comment[nl]=Houdt de status bij van de netwerkinterfaces en houdt daar de toepassingen van op de hoogte. -+Comment[nn]=Overvakar status for nettverksgrensesnitt og varslar program som brukar nettverket. -+Comment[pl]=Åšledzi stan interfejsów sieciowych i powiadamia programy używajÄ…ce sieci. -+Comment[pt]=Vigia o estado das interfaces de rede e avisa as aplicações que utilizam a rede. -+Comment[pt_BR]=Controla o status das interfaces de rede e fornece notificações para aplicativos utilizando a rede. -+Comment[ru]=Служба отÑÐ»ÐµÐ¶Ð¸Ð²Ð°Ð½Ð¸Ñ ÑоÑтоÑÐ½Ð¸Ñ Ñетевых интерфейÑов и Ð¾Ð±Ñ€Ð°Ñ‰ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ð¹ к Ñети. -+Comment[sk]=Sleduje stav sieÅ¥ových rozhraní a poskytuje upozornenia aplikáciám používajúcim sieÅ¥. -+Comment[sl]=Sledi stanju omrežnim vmesnikom in omogoÄa obvestila programom, ki uporabljajo omrežje -+Comment[sr]=Прати ÑÑ‚Ð°Ñ‚ÑƒÑ Ð¼Ñ€ÐµÐ¶Ð½Ð¸Ñ… интерфејÑа и пружа обавештења програмима који кориÑте мрежу. -+Comment[sr@Latn]=Prati status mrežnih interfejsa i pruža obaveÅ¡tenja programima koji koriste mrežu. -+Comment[sv]=Bevakar status för nätverksgränssnitt och tillhandahÃ¥ller underrättelser till program som använder nätverket. -+Comment[ta]=வலைபà¯à®ªà®¿à®©à¯à®©à®²à¯ˆà®ªà¯ பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à®¿ வலைபà¯à®ªà®¿à®©à¯à®©à®²à¯ இடைமà¯à®•à®™à¯à®•à®³à®¿à®©à¯ நிலையை கணà¯à®•à®¾à®£à®¿à®•à¯à®•à®¿à®±à®¤à¯ மறà¯à®±à¯à®®à¯ பயனà¯à®ªà®¾à®Ÿà¯à®•à®³à¯à®•à¯à®•à¯ அறிவிபà¯à®ªà¯ˆ வழஙà¯à®•à¯à®•à®¿à®±à®¤à¯. -+Comment[uk]=Слідкує за Ñтаном інтерфейÑів мережі Ñ– Ñповіщає програми, Ñкі кориÑтуютьÑÑ Ð¼ÐµÑ€ÐµÐ¶ÐµÑŽ. -+Comment[zh_CN]=跟踪网å¡çš„状æ€å¹¶ä¸ºåº”用程åºæ供使用网络的通知。 -+Comment[zh_TW]=追蹤網路介é¢çš„狀態,並æ供使用網路的應用程å¼çš„通知。 -+Type=Service -+ServiceTypes=KDEDModule -+X-KDE-ModuleType=Library -+X-KDE-Library=networkstatus -+X-KDE-FactoryName=networkstatus -+X-KDE-Kded-autoload=true -+X-KDE-Kded-load-on-demand=true -+ -Index: networkstatus/networkstatus.h -=================================================================== ---- /dev/null -+++ networkstatus/networkstatus.h -@@ -0,0 +1,66 @@ -+/* This file is part of kdepim -+ Copyright (C) 2005,2007 Will Stephenson -+ -+ This library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Library General Public -+ License version 2 as published by the Free Software Foundation. -+ -+ This library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Library General Public License for more details. -+ -+ You should have received a copy of the GNU Library General Public License -+ along with this library. If not, write to the Free Software -+ Foundation, Inc., 51 Franklin Street, Fifth Floor, -+ Boston, MA 02110-1301, USA. -+ -+ As a special exception, permission is given to link this library -+ with any edition of Qt, and distribute the resulting executable, -+ without including the source code for Qt in the source distribution. -+*/ -+ -+#ifndef KDED_NETWORKSTATUS_H -+#define KDED_NETWORKSTATUS_H -+ -+#include -+ -+#include "networkstatuscommon.h" -+#include "network.h" -+ -+class NetworkStatusModule : virtual public KDEDModule -+{ -+Q_OBJECT -+K_DCOP -+public: -+ NetworkStatusModule( const QCString& obj ); -+ ~NetworkStatusModule(); -+k_dcop: -+ // Client interface -+ QStringList networks(); -+ int status(); -+ // Service interface -+ void setNetworkStatus( const QString & networkName, int status ); -+ void registerNetwork( NetworkStatus::Properties properties ); -+ void unregisterNetwork( const QString & networkName ); -+k_dcop_signals: -+ /** -+ * A status change occurred affecting the overall connectivity -+ * @param status The new status -+ */ -+ void statusChange( int status ); -+protected slots: -+ //void registeredToDCOP( const QCString& appId ); -+ void unregisteredFromDCOP( const QCString& appId ); -+ -+protected: -+ // recalculate cached status -+ void updateStatus(); -+ -+private: -+ class Private; -+ Private *d; -+}; -+ -+#endif -+// vim: sw=4 ts=4 -Index: networkstatus/networkstatusiface.h -=================================================================== ---- /dev/null -+++ networkstatus/networkstatusiface.h -@@ -0,0 +1,50 @@ -+/* This file is part of kdepim. -+ Copyright (C) 2005,2007 Will Stephenson -+ -+ This library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Library General Public -+ License version 2 as published by the Free Software Foundation. -+ -+ This library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Library General Public License for more details. -+ -+ You should have received a copy of the GNU Library General Public License -+ along with this library. If not, write to the Free Software -+ Foundation, Inc., 51 Franklin Street, Fifth Floor, -+ Boston, MA 02110-1301, USA. -+ -+ As a special exception, permission is given to link this library -+ with any edition of Qt, and distribute the resulting executable, -+ without including the source code for Qt in the source distribution. -+*/ -+ -+#ifndef KDED_NETWORKSTATUSIFACE_H -+#define KDED_NETWORKSTATUSIFACE_H -+ -+#include -+#include -+ -+#include "networkstatuscommon.h" -+ -+class NetworkStatusIface : virtual public DCOPObject -+{ -+K_DCOP -+k_dcop: -+ // Client interface -+ virtual QStringList networks() = 0; -+ virtual int status() = 0; -+ // Service interface -+ virtual void setNetworkStatus( const QString & networkName, int status ) = 0; -+ virtual void registerNetwork( NetworkStatus::Properties properties ) = 0; -+ virtual void unregisterNetwork( const QString & networkName ) = 0 ; -+k_dcop_signals: -+ /** -+ * A status change occurred affecting the overall connectivity -+ * @param status The new status -+ */ -+ virtual void statusChange( int status ) = 0; -+}; -+#endif -+// vim: sw=4 ts=4 -Index: networkstatus/networkstatusindicator.cpp -=================================================================== ---- /dev/null -+++ networkstatus/networkstatusindicator.cpp -@@ -0,0 +1,64 @@ -+/* This file is part of the KDE project -+ Copyright (C) 2007 Will Stephenson -+ -+ This library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Library General Public -+ License version 2 as published by the Free Software Foundation. -+ -+ This library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Library General Public License for more details. -+ -+ You should have received a copy of the GNU Library General Public License -+ along with this library. If not, write to the Free Software -+ Foundation, Inc., 51 Franklin Street, Fifth Floor, -+ Boston, MA 02110-1301, USA. -+ -+ As a special exception, permission is given to link this library -+ with any edition of Qt, and distribute the resulting executable, -+ without including the source code for Qt in the source distribution. -+*/ -+ -+#include -+#include -+#include -+#include -+ -+#include "connectionmanager.h" -+ -+#include "networkstatusindicator.h" -+ -+StatusBarNetworkStatusIndicator::StatusBarNetworkStatusIndicator( -+ QWidget * parent, const char * name ) : QHBox( parent, name )/*, d( new StatusBarNetworkStatusIndicatorPrivate )*/ -+{ -+ setMargin( 2 ); -+ setSpacing( 1 ); -+ QLabel * label = new QLabel( this, "offlinemodelabel" ); -+ label->setPixmap( SmallIcon("connect_no") ); -+ QToolTip::add( label, i18n( "The desktop is offline" ) ); -+ -+ connect( ConnectionManager::self(), SIGNAL( statusChanged( NetworkStatus::Status ) ), -+ SLOT( networkStatusChanged( NetworkStatus::Status) ) ); -+ -+} -+ -+void StatusBarNetworkStatusIndicator::init() -+{ -+ networkStatusChanged( ConnectionManager::self()->status()); -+} -+ -+StatusBarNetworkStatusIndicator::~StatusBarNetworkStatusIndicator() -+{ -+} -+ -+void StatusBarNetworkStatusIndicator::networkStatusChanged( NetworkStatus::Status status ) -+{ -+ if ( status == NetworkStatus::Online || status == NetworkStatus::NoNetworks ) { -+ hide(); -+ } else { -+ show(); -+ } -+} -+ -+#include "networkstatusindicator.moc" -Index: networkstatus/networkstatusindicator.h -=================================================================== ---- /dev/null -+++ networkstatus/networkstatusindicator.h -@@ -0,0 +1,42 @@ -+/* This file is part of the KDE project -+ Copyright (C) 2007 Will Stephenson -+ -+ This library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Library General Public -+ License version 2 as published by the Free Software Foundation. -+ -+ This library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Library General Public License for more details. -+ -+ You should have received a copy of the GNU Library General Public License -+ along with this library. If not, write to the Free Software -+ Foundation, Inc., 51 Franklin Street, Fifth Floor, -+ Boston, MA 02110-1301, USA. -+ -+ As a special exception, permission is given to link this library -+ with any edition of Qt, and distribute the resulting executable, -+ without including the source code for Qt in the source distribution. -+*/ -+ -+#ifndef KDE_NETWORKSTATUS_INDICATOR_H -+#define KDE_NETWORKSTATUS_INDICATOR_H -+ -+#include -+#include -+#include -+ -+class StatusBarNetworkStatusIndicator : public QHBox -+{ -+Q_OBJECT -+public: -+ StatusBarNetworkStatusIndicator( QWidget * parent, const char * name ); -+ virtual ~StatusBarNetworkStatusIndicator(); -+ void init(); -+protected slots: -+ void networkStatusChanged( NetworkStatus::Status status ); -+}; -+ -+#endif -+ -Index: networkstatus/networkstatus.kdevelop -=================================================================== ---- /dev/null -+++ networkstatus/networkstatus.kdevelop -@@ -0,0 +1,108 @@ -+ -+ -+ -+ Will Stephenson -+ wstephenson@suse.de -+ $VERSION$ -+ KDevKDEAutoProject -+ C++ -+ -+ Qt -+ KDE -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ false -+ false -+ -+ -+ *.o,*.lo,CVS -+ false -+ -+ -+ -+ -+ ada -+ ada_bugs_gcc -+ bash -+ bash_bugs -+ clanlib -+ fortran_bugs_gcc -+ gnome1 -+ gnustep -+ gtk -+ gtk_bugs -+ haskell -+ haskell_bugs_ghc -+ java_bugs_gcc -+ java_bugs_sun -+ opengl -+ pascal_bugs_fp -+ php -+ php_bugs -+ perl -+ perl_bugs -+ python -+ python_bugs -+ ruby -+ ruby_bugs -+ sdl -+ stl -+ sw -+ w3c-dom-level2-html -+ w3c-svg -+ w3c-uaag10 -+ wxwidgets_bugs -+ -+ -+ qmake User Guide -+ -+ -+ -+ -+ libtool -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ executable -+ -+ -+ kded_networkstatus.la -+ -+ -+ -+ -+ -+ true -+ true -+ true -+ false -+ true -+ true -+ true -+ 250 -+ 400 -+ 250 -+ -+ -+ -Index: networkstatus/README.statetransition -=================================================================== ---- /dev/null -+++ networkstatus/README.statetransition -@@ -0,0 +1,29 @@ -+This table defines the actions to be taken on state transition. -+ -+TODO: potentially add extra states OnlineReading and OnlineWriting -+ -+ NEW -+ |Offline | Online | -+---+---+----------------+---------------+ -+ | | |N|set online | -+ | | |L|reload | -+ | O | |C|resources | -+ | F | +---------------+ -+ | F | |L|set online | -+O | | |C|reload res. | -+L | | | |write res. | -+D +---+----------------+---------------+ -+ | |N|set offline | | -+ | |C| | | -+ | | | | | -+ | O +---------------+| | -+ | N |U|set offline | | -+ | |W|write locally | | -+ | |C|(subject to | | -+ | | | save policy)| | -+---+---+----------------+---------------+ -+LC = Local changes exist -+NLC = No local changes exist -+UWC = Unsaved changes exist -+NC = no changes exist -+ -Index: networkstatus/.svn/dir-prop-base -=================================================================== ---- /dev/null -+++ networkstatus/.svn/dir-prop-base -@@ -0,0 +1,11 @@ -+K 10 -+svn:ignore -+V 83 -+Makefile -+Makefile.in -+Makefile.calls.in -+Makefile.rules.in -+*_skel.cpp -+*.kidl -+Doxyfile -+END -Index: networkstatus/.svn/entries -=================================================================== ---- /dev/null -+++ networkstatus/.svn/entries -@@ -0,0 +1,342 @@ -+8 -+ -+dir -+712059 -+svn+ssh://mueller@svn.kde.org/home/kde/branches/work/~wstephens/kdelibs/networkstatus -+svn+ssh://mueller@svn.kde.org/home/kde -+ -+ -+ -+2007-08-06T09:06:39.201606Z -+696919 -+wstephens -+has-props -+ -+svn:special svn:externals svn:needs-lock -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+283d02a7-25f6-0310-bc7c-ecb5cbfe19da -+ -+network.h -+file -+ -+ -+ -+ -+2007-09-13T13:09:10.000000Z -+034300313451d5b6a95bff1022861227 -+2007-08-06T09:06:39.201606Z -+696919 -+wstephens -+has-props -+ -+networkstatusindicator.h -+file -+ -+ -+ -+ -+2007-09-13T13:09:10.000000Z -+bbc7c6ea3b8da983d477d53556e39dd0 -+2007-08-06T09:06:39.201606Z -+696919 -+wstephens -+ -+connectionmanager.h -+file -+ -+ -+ -+ -+2007-09-13T13:09:10.000000Z -+7992e623b84fd99f9ff17c613a7269a3 -+2007-08-06T09:06:39.201606Z -+696919 -+wstephens -+has-props -+ -+testservice.cpp -+file -+ -+ -+ -+ -+2007-09-13T13:09:10.000000Z -+527dc95a7ae39d565bd29d5fe59de31a -+2007-08-06T09:06:39.201606Z -+696919 -+wstephens -+has-props -+ -+testclient2.cpp -+file -+ -+ -+ -+ -+2007-09-13T13:09:10.000000Z -+c426585cf5d9e3f4b06adcaff0a3ef32 -+2007-08-06T09:06:39.201606Z -+696919 -+wstephens -+ -+networkstatus.h -+file -+ -+ -+ -+ -+2007-09-13T13:09:10.000000Z -+8ca1d871b31d5840e2e3d24da4693f1d -+2007-08-06T09:06:39.201606Z -+696919 -+wstephens -+has-props -+ -+testclientview.ui -+file -+ -+ -+ -+ -+2007-09-13T13:09:10.000000Z -+8f63eb3db978c53143417ad33d45076b -+2007-08-06T09:06:39.201606Z -+696919 -+wstephens -+ -+testservice.h -+file -+ -+ -+ -+ -+2007-09-13T13:09:10.000000Z -+2b5693b2e174ebf96e460a52cfcf9739 -+2007-08-06T09:06:39.201606Z -+696919 -+wstephens -+has-props -+ -+testclient2.h -+file -+ -+ -+ -+ -+2007-09-13T13:09:10.000000Z -+3b9f645e56a92014b7a6547c5bc88527 -+2007-08-06T09:06:39.201606Z -+696919 -+wstephens -+ -+README.statetransition -+file -+ -+ -+ -+ -+2007-09-13T13:09:10.000000Z -+0091b6bdce4abe1e1260bf2a4cce984f -+2005-02-11T15:15:30.000000Z -+388364 -+wstephens -+has-props -+ -+networkstatuscommon.cpp -+file -+ -+ -+ -+ -+2007-09-13T13:09:10.000000Z -+1516e99224ce850fb6d134346fd9d074 -+2007-08-06T09:06:39.201606Z -+696919 -+wstephens -+has-props -+ -+connectionmanager_p.cpp -+file -+ -+ -+ -+ -+2007-09-13T13:09:10.000000Z -+07e9643c6cdb39d28abc9c8992bcab23 -+2007-08-06T09:06:39.201606Z -+696919 -+wstephens -+ -+networkstatuscommon.h -+file -+712062 -+ -+ -+ -+2007-09-13T13:10:21.000000Z -+a4f22eecd7d0a0fdcc78c9c31d5f14fd -+2007-09-13T13:12:05.866586Z -+712062 -+mueller -+has-props -+ -+testclient.cpp -+file -+ -+ -+ -+ -+2007-09-13T13:09:10.000000Z -+d932143bab5c7985bc48e64e2bf0c227 -+2007-08-06T09:06:39.201606Z -+696919 -+wstephens -+ -+connectionmanager_p.h -+file -+ -+ -+ -+ -+2007-09-13T13:09:10.000000Z -+34ed7e34d50ae4b36342a6cc250ad386 -+2007-08-06T09:06:39.201606Z -+696919 -+wstephens -+ -+testclient.h -+file -+ -+ -+ -+ -+2007-09-13T13:09:10.000000Z -+67d3671e5fbeb51a333550f52ec34294 -+2007-08-06T09:06:39.201606Z -+696919 -+wstephens -+ -+networkstatus.kdevelop -+file -+ -+ -+ -+ -+2007-09-13T13:09:10.000000Z -+64e6cd906f82dad6a3c70a8dd7e69c3c -+2005-01-24T08:48:57.000000Z -+381869 -+wstephens -+has-props -+ -+networkstatus.desktop -+file -+ -+ -+ -+ -+2007-09-13T13:09:10.000000Z -+1bc32c39d8c6ed9c63e6fdc1b3d34aba -+2007-08-06T09:06:39.201606Z -+696919 -+wstephens -+has-props -+ -+testserviceview.ui -+file -+ -+ -+ -+ -+2007-09-13T13:09:10.000000Z -+f8883c2425f16054c8cfd99a6c288000 -+2007-08-06T09:06:39.201606Z -+696919 -+wstephens -+ -+Makefile.am -+file -+712061 -+ -+ -+ -+2007-09-13T13:10:11.000000Z -+70d1b224f8edc970fbdf2f4af63282f0 -+2007-09-13T13:11:26.289844Z -+712061 -+mueller -+has-props -+ -+network.cpp -+file -+ -+ -+ -+ -+2007-09-13T13:09:10.000000Z -+1f481f54f0161b8a65d00753d6397904 -+2007-08-06T09:06:39.201606Z -+696919 -+wstephens -+has-props -+ -+networkstatusindicator.cpp -+file -+ -+ -+ -+ -+2007-09-13T13:09:10.000000Z -+243176eca79394c0e2a763b1e56a0690 -+2007-08-06T09:06:39.201606Z -+696919 -+wstephens -+ -+networkstatusiface.h -+file -+ -+ -+ -+ -+2007-09-13T13:09:10.000000Z -+285a14008068eb0cd26e3af2bb8fbb92 -+2007-08-06T09:06:39.201606Z -+696919 -+wstephens -+ -+connectionmanager.cpp -+file -+ -+ -+ -+ -+2007-09-13T13:09:10.000000Z -+922d360b2e43b6b35f56c0d97ab1afa9 -+2007-08-06T09:06:39.201606Z -+696919 -+wstephens -+has-props -+ -+networkstatus.cpp -+file -+ -+ -+ -+ -+2007-09-13T13:09:10.000000Z -+433313b5f03259de305b6d722c0251e5 -+2007-08-06T09:06:39.201606Z -+696919 -+wstephens -+has-props -+ -Index: networkstatus/.svn/format -=================================================================== ---- /dev/null -+++ networkstatus/.svn/format -@@ -0,0 +1 @@ -+8 -Index: networkstatus/.svn/prop-base/connectionmanager.cpp.svn-base -=================================================================== ---- /dev/null -+++ networkstatus/.svn/prop-base/connectionmanager.cpp.svn-base -@@ -0,0 +1,13 @@ -+K 13 -+svn:eol-style -+V 6 -+native -+K 12 -+svn:keywords -+V 23 -+Author Date Id Revision -+K 13 -+svn:mime-type -+V 13 -+text/x-c++src -+END -Index: networkstatus/.svn/prop-base/connectionmanager.h.svn-base -=================================================================== ---- /dev/null -+++ networkstatus/.svn/prop-base/connectionmanager.h.svn-base -@@ -0,0 +1,13 @@ -+K 13 -+svn:eol-style -+V 6 -+native -+K 12 -+svn:keywords -+V 23 -+Author Date Id Revision -+K 13 -+svn:mime-type -+V 11 -+text/x-chdr -+END -Index: networkstatus/.svn/prop-base/Makefile.am.svn-base -=================================================================== ---- /dev/null -+++ networkstatus/.svn/prop-base/Makefile.am.svn-base -@@ -0,0 +1,13 @@ -+K 13 -+svn:eol-style -+V 6 -+native -+K 12 -+svn:keywords -+V 23 -+Author Date Id Revision -+K 13 -+svn:mime-type -+V 9 -+text/x-am -+END -Index: networkstatus/.svn/prop-base/network.cpp.svn-base -=================================================================== ---- /dev/null -+++ networkstatus/.svn/prop-base/network.cpp.svn-base -@@ -0,0 +1,13 @@ -+K 13 -+svn:eol-style -+V 6 -+native -+K 12 -+svn:keywords -+V 23 -+Author Date Id Revision -+K 13 -+svn:mime-type -+V 13 -+text/x-c++src -+END -Index: networkstatus/.svn/prop-base/network.h.svn-base -=================================================================== ---- /dev/null -+++ networkstatus/.svn/prop-base/network.h.svn-base -@@ -0,0 +1,13 @@ -+K 13 -+svn:eol-style -+V 6 -+native -+K 12 -+svn:keywords -+V 23 -+Author Date Id Revision -+K 13 -+svn:mime-type -+V 11 -+text/x-chdr -+END -Index: networkstatus/.svn/prop-base/networkstatuscommon.cpp.svn-base -=================================================================== ---- /dev/null -+++ networkstatus/.svn/prop-base/networkstatuscommon.cpp.svn-base -@@ -0,0 +1,13 @@ -+K 13 -+svn:eol-style -+V 6 -+native -+K 12 -+svn:keywords -+V 23 -+Author Date Id Revision -+K 13 -+svn:mime-type -+V 13 -+text/x-c++src -+END -Index: networkstatus/.svn/prop-base/networkstatuscommon.h.svn-base -=================================================================== ---- /dev/null -+++ networkstatus/.svn/prop-base/networkstatuscommon.h.svn-base -@@ -0,0 +1,13 @@ -+K 13 -+svn:eol-style -+V 6 -+native -+K 12 -+svn:keywords -+V 23 -+Author Date Id Revision -+K 13 -+svn:mime-type -+V 11 -+text/x-chdr -+END -Index: networkstatus/.svn/prop-base/networkstatus.cpp.svn-base -=================================================================== ---- /dev/null -+++ networkstatus/.svn/prop-base/networkstatus.cpp.svn-base -@@ -0,0 +1,13 @@ -+K 13 -+svn:eol-style -+V 6 -+native -+K 12 -+svn:keywords -+V 23 -+Author Date Id Revision -+K 13 -+svn:mime-type -+V 13 -+text/x-c++src -+END -Index: networkstatus/.svn/prop-base/networkstatus.desktop.svn-base -=================================================================== ---- /dev/null -+++ networkstatus/.svn/prop-base/networkstatus.desktop.svn-base -@@ -0,0 +1,13 @@ -+K 13 -+svn:eol-style -+V 6 -+native -+K 12 -+svn:keywords -+V 23 -+Author Date Id Revision -+K 13 -+svn:mime-type -+V 14 -+text/x-desktop -+END -Index: networkstatus/.svn/prop-base/networkstatus.h.svn-base -=================================================================== ---- /dev/null -+++ networkstatus/.svn/prop-base/networkstatus.h.svn-base -@@ -0,0 +1,13 @@ -+K 13 -+svn:eol-style -+V 6 -+native -+K 12 -+svn:keywords -+V 23 -+Author Date Id Revision -+K 13 -+svn:mime-type -+V 11 -+text/x-chdr -+END -Index: networkstatus/.svn/prop-base/networkstatus.kdevelop.svn-base -=================================================================== ---- /dev/null -+++ networkstatus/.svn/prop-base/networkstatus.kdevelop.svn-base -@@ -0,0 +1,5 @@ -+K 12 -+svn:keywords -+V 23 -+Author Date Id Revision -+END -Index: networkstatus/.svn/prop-base/README.statetransition.svn-base -=================================================================== ---- /dev/null -+++ networkstatus/.svn/prop-base/README.statetransition.svn-base -@@ -0,0 +1,5 @@ -+K 12 -+svn:keywords -+V 23 -+Author Date Id Revision -+END -Index: networkstatus/.svn/prop-base/testservice.cpp.svn-base -=================================================================== ---- /dev/null -+++ networkstatus/.svn/prop-base/testservice.cpp.svn-base -@@ -0,0 +1,13 @@ -+K 13 -+svn:eol-style -+V 6 -+native -+K 12 -+svn:keywords -+V 23 -+Author Date Id Revision -+K 13 -+svn:mime-type -+V 13 -+text/x-c++src -+END -Index: networkstatus/.svn/prop-base/testservice.h.svn-base -=================================================================== ---- /dev/null -+++ networkstatus/.svn/prop-base/testservice.h.svn-base -@@ -0,0 +1,13 @@ -+K 13 -+svn:eol-style -+V 6 -+native -+K 12 -+svn:keywords -+V 23 -+Author Date Id Revision -+K 13 -+svn:mime-type -+V 11 -+text/x-chdr -+END -Index: networkstatus/.svn/text-base/connectionmanager.cpp.svn-base -=================================================================== ---- /dev/null -+++ networkstatus/.svn/text-base/connectionmanager.cpp.svn-base -@@ -0,0 +1,171 @@ -+/* This file is part of kdepim. -+ Copyright (C) 2005,2007 Will Stephenson -+ -+ This library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Library General Public -+ License version 2 as published by the Free Software Foundation. -+ -+ This library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Library General Public License for more details. -+ -+ You should have received a copy of the GNU Library General Public License -+ along with this library. If not, write to the Free Software -+ Foundation, Inc., 51 Franklin Street, Fifth Floor, -+ Boston, MA 02110-1301, USA. -+ -+ As a special exception, permission is given to link this library -+ with any edition of Qt, and distribute the resulting executable, -+ without including the source code for Qt in the source distribution. -+*/ -+ -+#include -+#include -+#include -+ -+#include "connectionmanager.h" -+#include "connectionmanager_p.h" -+ -+// Connection manager itself -+ConnectionManager::ConnectionManager( QObject * parent, const char * name ) : DCOPObject( "ConnectionManager" ), QObject( parent, name ), d( new ConnectionManagerPrivate( this ) ) -+{ -+ d->service = new NetworkStatusIface_stub( kapp->dcopClient(), "kded", "networkstatus" ); -+ -+ connectDCOPSignal( "kded", "networkstatus", "statusChange(int)", "slotStatusChanged(int)", false ); -+ -+ initialise(); -+} -+ -+ConnectionManager::~ConnectionManager() -+{ -+ delete d; -+} -+ -+ConnectionManager *ConnectionManager::s_self = 0L; -+ -+ConnectionManager *ConnectionManager::self() -+{ -+ static KStaticDeleter deleter; -+ if(!s_self) -+ deleter.setObject( s_self, new ConnectionManager( 0, "connection_manager" ) ); -+ return s_self; -+} -+ -+void ConnectionManager::initialise() -+{ -+ // determine initial state and set the state object accordingly. -+ d->status = ( NetworkStatus::Status )d->service->status(); -+} -+ -+NetworkStatus::Status ConnectionManager::status() -+{ -+ return d->status; -+} -+ -+void ConnectionManager::slotStatusChanged( int status ) -+{ -+ d->status = ( NetworkStatus::Status )status; -+ switch ( status ) { -+ case NetworkStatus::NoNetworks: -+ break; -+ case NetworkStatus::Unreachable: -+ break; -+ case NetworkStatus::OfflineDisconnected: -+ case NetworkStatus::OfflineFailed: -+ case NetworkStatus::ShuttingDown: -+ case NetworkStatus::Offline: -+ case NetworkStatus::Establishing: -+ if ( d->disconnectPolicy == Managed ) { -+ emit d->disconnected(); -+ } else if ( d->disconnectPolicy == OnNextChange ) { -+ setDisconnectPolicy( Manual ); -+ emit d->disconnected(); -+ } -+ break; -+ case NetworkStatus::Online: -+ if ( d->disconnectPolicy == Managed ) { -+ emit d->connected(); -+ } else if ( d->disconnectPolicy == OnNextChange ) { -+ setConnectPolicy( Manual ); -+ emit d->connected(); -+ } -+ break; -+ default: -+ kdDebug() << k_funcinfo << "Unrecognised status code!" << endl; -+ } -+ emit statusChanged( d->status ); -+} -+ -+ConnectionManager::ConnectionPolicy ConnectionManager::connectPolicy() const -+{ -+ return d->connectPolicy; -+} -+ -+void ConnectionManager::setConnectPolicy( ConnectionManager::ConnectionPolicy policy ) -+{ -+ d->connectPolicy = policy; -+} -+ -+ConnectionManager::ConnectionPolicy ConnectionManager::disconnectPolicy() const -+{ -+ return d->disconnectPolicy; -+} -+ -+void ConnectionManager::setDisconnectPolicy( ConnectionManager::ConnectionPolicy policy ) -+{ -+ d->disconnectPolicy = policy; -+} -+ -+void ConnectionManager::setManualConnectionPolicies() -+{ -+ d->connectPolicy = ConnectionManager::Manual; -+ d->disconnectPolicy = ConnectionManager::Manual; -+} -+ -+void ConnectionManager::setManagedConnectionPolicies() -+{ -+ d->connectPolicy = ConnectionManager::Managed; -+ d->disconnectPolicy = ConnectionManager::Managed; -+} -+ -+void ConnectionManager::registerConnectSlot( QObject * receiver, const char * member ) -+{ -+ d->connectReceiver = receiver; -+ d->connectSlot = member; -+ connect( d, SIGNAL( connected() ), receiver, member ); -+} -+ -+void ConnectionManager::forgetConnectSlot() -+{ -+ disconnect( d, SIGNAL( connected() ), d->connectReceiver, d->connectSlot ); -+ d->connectReceiver = 0; -+ d->connectSlot = 0; -+} -+ -+bool ConnectionManager::isConnectSlotRegistered() const -+{ -+ return ( d->connectSlot != 0 ); -+} -+ -+void ConnectionManager::registerDisconnectSlot( QObject * receiver, const char * member ) -+{ -+ d->disconnectReceiver = receiver; -+ d->disconnectSlot = member; -+ connect( d, SIGNAL( disconnected() ), receiver, member ); -+} -+ -+void ConnectionManager::forgetDisconnectSlot() -+{ -+ disconnect( d, SIGNAL( disconnected() ), d->disconnectReceiver, d->disconnectSlot ); -+ d->disconnectReceiver = 0; -+ d->disconnectSlot = 0; -+} -+ -+bool ConnectionManager::isDisconnectSlotRegistered() const -+{ -+ return ( d->disconnectSlot != 0 ); -+} -+ -+#include "connectionmanager.moc" -+ -Index: networkstatus/.svn/text-base/connectionmanager.h.svn-base -=================================================================== ---- /dev/null -+++ networkstatus/.svn/text-base/connectionmanager.h.svn-base -@@ -0,0 +1,167 @@ -+/* This file is part of kdepim. -+ Copyright (C) 2005,2007 Will Stephenson -+ -+ This library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Library General Public -+ License version 2 as published by the Free Software Foundation. -+ -+ This library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Library General Public License for more details. -+ -+ You should have received a copy of the GNU Library General Public License -+ along with this library. If not, write to the Free Software -+ Foundation, Inc., 51 Franklin Street, Fifth Floor, -+ Boston, MA 02110-1301, USA. -+ -+ As a special exception, permission is given to link this library -+ with any edition of Qt, and distribute the resulting executable, -+ without including the source code for Qt in the source distribution. -+*/ -+ -+#ifndef KDE_CONNECTION_MANAGER_H -+#define KDE_CONNECTION_MANAGER_H -+ -+#include -+#include -+ -+#include -+ -+class ConnectionManagerPrivate; -+ -+class KDE_EXPORT ConnectionManager : public QObject, virtual public DCOPObject -+{ -+Q_OBJECT -+K_DCOP -+k_dcop: -+ void slotStatusChanged( int status ); -+public: -+ /** -+ * This defines application policy in response to networking connect/disconnect events -+ * Manual - the app only disconnects when the user does so -+ * OnNextChange - the app should connect or disconnect the next time the network changes state, thereafter -+ * Manual -+ * Managed - the app should disconnect when the ConnectionManager thinks the system is -+ * offline -+ */ -+ enum ConnectionPolicy { Manual, OnNextChange, Managed }; -+ /** -+ * Set a policy to manage the application's connect behaviour -+ */ -+ void setConnectPolicy( ConnectionPolicy ); -+ /** -+ * Retrieve a policy managing the application's connect behaviour -+ */ -+ ConnectionPolicy connectPolicy() const; -+ -+ /** -+ * Set a policy to manage the application's disconnect behaviour -+ */ -+ void setDisconnectPolicy( ConnectionPolicy ); -+ -+ /** -+ * Retrieve a policy managing the application's disconnect behaviour -+ */ -+ ConnectionPolicy disconnectPolicy() const; -+ -+ /* -+ * We'll get logic of the form -+ * onStatusChange() { -+ * if ( ConnectionManager::self()->policy( ConnectionManager::ConnectBehaviour ) == ConnectionManager::OnNextChange || -+ * ConnectionManager::self()->policy( ConnectionManager::ConnectBehaviour ) == ConnectionManager::Managed ) -+ * { -+ * // do connect -+ * -+ * // reset the policy -+ * if ( ConnectionManager::self()->policy( ConnectionManager::ConnectBehaviour ) == ConnectionManager::OnNextChange ) -+ * ConnectionManager::self()->setPolicy( ConnectionManager::ConnectionManager, -+ * ConnectionManager::Manual ); -+ * } -+ * -+ * Do we just use the CM for policy storage, or do we try to factor the logic to implement the -+ * policy into the CM too? -+ * -+ * could signal doConnect(), then reset the policy -+ * or could register a connect slot -+ * registerConnectMethod( QObject * receiver, const char * member ); -+ * unregisterConnectMethod(); -+ * etc. -+ * -+ * The problem with automatically controlled behaviour, where policy may change as a result of a -+ * connect, is that if it is also manually altered, the CM needs to be updated. But the CM needs to -+ * be updated in any case. -+ * CM need -+ */ -+ /** -+ * Lazy-method to set Manual on both policies -+ */ -+ void setManualConnectionPolicies(); -+ /** -+ * Lazy-method to set Managed on both policies -+ */ -+ void setManagedConnectionPolicies(); -+ -+ /** -+ * Record a slot to call on a given receiving QObject when -+ * 1) the network connection is online, -+ * 2) the policy mandates that the app connect -+ * -+ * Only one slot may be registered at any one time. If a second slot is -+ * registered, the first slot is forgotten -+ * @param receiver the QObject where the slot is located -+ * @param member the slot to call. Set up member using the SLOT() macro. -+ */ -+ void registerConnectSlot( QObject * receiver, const char * member ); -+ -+ /** -+ * Forget any connect slot previously registered -+ */ -+ void forgetConnectSlot(); -+ -+ /** -+ * Has any slot been registered to be called on connect? -+ */ -+ bool isConnectSlotRegistered() const; -+ -+ /** -+ * Record a slot to call on a given receiving QObject when -+ * 1) the network connection goes offline (in any way ), -+ * 2) the policy mandates that the app disconnect -+ * -+ * Only one slot may be registered at any one time. If a second slot is -+ * registered, the first slot is forgotten -+ * @param receiver the QObject where the slot is located -+ * @param member the slot to call. Set up member using the SLOT() macro. -+ */ -+ void registerDisconnectSlot( QObject * receiver, const char * member ); -+ -+ /** -+ * Forget any disconnect slot previously registered -+ */ -+ void forgetDisconnectSlot(); -+ -+ /** -+ * Has any slot been registered to be called on disconnect? -+ */ -+ bool isDisconnectSlotRegistered() const; -+ -+ /// existing API -+ -+ static ConnectionManager* self(); -+ virtual ~ConnectionManager(); -+ NetworkStatus::Status status(); -+signals: -+ // signal that the network for a hostname is up/down -+ void statusChanged( NetworkStatus::Status status ); -+private: -+ // sets up internal state -+ void initialise(); -+ // reread the desktop status from the daemon and update internal state -+ ConnectionManager( QObject *parent, const char * name ); -+ ConnectionManagerPrivate * d; -+ static ConnectionManager * s_self; -+}; -+ -+#endif -+ -Index: networkstatus/.svn/text-base/connectionmanager_p.cpp.svn-base -=================================================================== ---- /dev/null -+++ networkstatus/.svn/text-base/connectionmanager_p.cpp.svn-base -@@ -0,0 +1,13 @@ -+#include "connectionmanager_p.h" -+ -+ConnectionManagerPrivate::ConnectionManagerPrivate(QObject * parent, const char * name ) : QObject( parent, name ), service( 0 ), connectPolicy( ConnectionManager::Managed ), -+ disconnectPolicy( ConnectionManager::Managed ), connectReceiver( 0 ), connectSlot( 0 ), -+ disconnectReceiver( 0 ), disconnectSlot( 0 ) -+{ -+} -+ -+ConnectionManagerPrivate::~ConnectionManagerPrivate() -+{ -+} -+ -+#include "connectionmanager_p.moc" -Index: networkstatus/.svn/text-base/connectionmanager_p.h.svn-base -=================================================================== ---- /dev/null -+++ networkstatus/.svn/text-base/connectionmanager_p.h.svn-base -@@ -0,0 +1,55 @@ -+/* This file is part of the KDE project -+ Copyright (C) 2007 Will Stephenson -+ -+ This library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Library General Public -+ License version 2 as published by the Free Software Foundation. -+ -+ This library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Library General Public License for more details. -+ -+ You should have received a copy of the GNU Library General Public License -+ along with this library. If not, write to the Free Software -+ Foundation, Inc., 51 Franklin Street, Fifth Floor, -+ Boston, MA 02110-1301, USA. -+ -+ As a special exception, permission is given to link this library -+ with any edition of Qt, and distribute the resulting executable, -+ without including the source code for Qt in the source distribution. -+*/ -+ -+#ifndef CONNECTIONMANAGERPRIVATE_H -+#define CONNECTIONMANAGERPRIVATE_H -+ -+#include -+ -+#include "connectionmanager.h" -+#include "networkstatuscommon.h" -+#include "networkstatusiface_stub.h" -+ -+ -+// ConnectionManager's private parts -+class ConnectionManagerPrivate : public QObject -+{ -+Q_OBJECT -+ friend class ConnectionManager; -+public: -+ ConnectionManagerPrivate( QObject * parent = 0, const char * name = 0); -+ ~ConnectionManagerPrivate(); -+ // this holds the currently active state -+ NetworkStatus::Status status; -+ NetworkStatusIface_stub * service; -+ ConnectionManager::ConnectionPolicy connectPolicy; -+ ConnectionManager::ConnectionPolicy disconnectPolicy; -+ QObject * connectReceiver; -+ const char * connectSlot; -+ QObject * disconnectReceiver; -+ const char * disconnectSlot; -+signals: -+ void connected(); -+ void disconnected(); -+}; -+ -+#endif -Index: networkstatus/.svn/text-base/Makefile.am.svn-base -=================================================================== ---- /dev/null -+++ networkstatus/.svn/text-base/Makefile.am.svn-base -@@ -0,0 +1,45 @@ -+#SUBDIRS = networkstatustray -+ -+METASOURCES = AUTO -+ -+INCLUDES = -I$(top_srcdir)/kded -I$(top_srcdir) $(all_includes) -+ -+kde_module_LTLIBRARIES = kded_networkstatus.la -+ -+kded_networkstatus_la_SOURCES = networkstatus.cpp networkstatus.skel \ -+ network.cpp -+kded_networkstatus_la_LIBADD = $(LIB_KDECORE) $(LIB_KIO) ./libnetworkstatus.la -+kded_networkstatus_la_LDFLAGS = $(all_libraries) -module -avoid-version -+ -+servicesdir = $(kde_servicesdir)/kded -+ -+services_DATA = networkstatus.desktop -+ -+lib_LTLIBRARIES = libnetworkstatus.la libconnectionmanager.la -+ -+libnetworkstatus_la_LIBADD = $(LIB_KDECORE) -+libnetworkstatus_la_LDFLAGS = $(all_libraries) -+libnetworkstatus_la_SOURCES = networkstatuscommon.cpp -+ -+libconnectionmanager_la_LIBADD = $(LIB_KDECORE) libnetworkstatus.la -+libconnectionmanager_la_LDFLAGS = $(all_libraries) -+libconnectionmanager_la_SOURCES = connectionmanager.cpp connectionmanager_p.cpp networkstatusindicator.cpp connectionmanager.skel networkstatusiface.stub -+ -+noinst_PROGRAMS = networkstatustestservice networkstatustestclient managedconnectiontestclient -+ -+networkstatustestservice_LDFLAGS = $(all_libraries) -+networkstatustestservice_LDADD = $(LIB_KFILE) libnetworkstatus.la -+networkstatustestservice_SOURCES = testservice.cpp testserviceview.ui networkstatusiface.stub -+ -+networkstatustestclient_LDFLAGS = $(all_libraries) -+networkstatustestclient_LDADD = $(LIB_KFILE) libnetworkstatus.la libconnectionmanager.la -+networkstatustestclient_SOURCES = testclient.cpp testclientview.ui -+ -+managedconnectiontestclient_LDFLAGS = $(all_libraries) -+managedconnectiontestclient_LDADD = $(LIB_KFILE) libnetworkstatus.la libconnectionmanager.la -+managedconnectiontestclient_SOURCES = testclient2.cpp testclientview.ui -+ -+noinst_HEADERS = network.h testservice.h testclient.h -+ -+include_HEADERS = networkstatuscommon.h connectionmanager.h networkstatusindicator.h \ -+ networkstatusiface.h -Index: networkstatus/.svn/text-base/network.cpp.svn-base -=================================================================== ---- /dev/null -+++ networkstatus/.svn/text-base/network.cpp.svn-base -@@ -0,0 +1,62 @@ -+/* This file is part of kdepim. -+ Copyright (C) 2005,2007 Will Stephenson -+ -+ This library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Library General Public -+ License version 2 as published by the Free Software Foundation. -+ -+ This library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Library General Public License for more details. -+ -+ You should have received a copy of the GNU Library General Public License -+ along with this library. If not, write to the Free Software -+ Foundation, Inc., 51 Franklin Street, Fifth Floor, -+ Boston, MA 02110-1301, USA. -+ -+ As a special exception, permission is given to link this library -+ with any edition of Qt, and distribute the resulting executable, -+ without including the source code for Qt in the source distribution. -+*/ -+ -+#include -+ -+#include "network.h" -+ -+Network::Network( NetworkStatus::Properties properties ) -+ : m_name( properties.name ), m_status( properties.status ), m_service( properties.service ) -+{ -+} -+ -+void Network::setStatus( NetworkStatus::Status status ) -+{ -+ m_status = status; -+} -+ -+NetworkStatus::Status Network::status() -+{ -+ return m_status; -+} -+ -+void Network::setName( const QString& name ) -+{ -+ m_name = name; -+} -+ -+QString Network::name() -+{ -+ return m_name; -+} -+ -+QString Network::service() -+{ -+ return m_service; -+} -+ -+void Network::setService( const QString& service ) -+{ -+ m_service = service; -+} -+ -+// vim: sw=4 ts=4 -Index: networkstatus/.svn/text-base/network.h.svn-base -=================================================================== ---- /dev/null -+++ networkstatus/.svn/text-base/network.h.svn-base -@@ -0,0 +1,60 @@ -+/* This file is part of kdepim. -+ Copyright (C) 2005,2007 Will Stephenson -+ -+ This library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Library General Public -+ License version 2 as published by the Free Software Foundation. -+ -+ This library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Library General Public License for more details. -+ -+ You should have received a copy of the GNU Library General Public License -+ along with this library. If not, write to the Free Software -+ Foundation, Inc., 51 Franklin Street, Fifth Floor, -+ Boston, MA 02110-1301, USA. -+ -+ As a special exception, permission is given to link this library -+ with any edition of Qt, and distribute the resulting executable, -+ without including the source code for Qt in the source distribution. -+*/ -+ -+#ifndef NETWORKSTATUS_NETWORK_H -+#define NETWORKSTATUS_NETWORK_H -+ -+#include "networkstatuscommon.h" -+ -+class Network -+{ -+public: -+ Network( const QString name ); -+ Network( NetworkStatus::Properties properties ); -+ /** -+ * Update the status of this network -+ */ -+ void setStatus( NetworkStatus::Status status ); -+ /** -+ * The connection status of this network -+ */ -+ NetworkStatus::Status status(); -+ /** -+ * The name of this network -+ */ -+ QString name(); -+ void setName( const QString& name ); -+ /** -+ * Returns the service owning this network -+ */ -+ QString service(); -+ void setService( const QString& service ); -+ -+private: -+ Network( const Network & ); -+ QString m_name; -+ NetworkStatus::Status m_status; -+ QString m_service; -+}; -+ -+#endif -+// vim: sw=4 ts=4 -Index: networkstatus/.svn/text-base/networkstatuscommon.cpp.svn-base -=================================================================== ---- /dev/null -+++ networkstatus/.svn/text-base/networkstatuscommon.cpp.svn-base -@@ -0,0 +1,76 @@ -+/* This file is part of kdepim. -+ Copyright (C) 2005,2007 Will Stephenson -+ -+ This library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Library General Public -+ License version 2 as published by the Free Software Foundation. -+ -+ This library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Library General Public License for more details. -+ -+ You should have received a copy of the GNU Library General Public License -+ along with this library. If not, write to the Free Software -+ Foundation, Inc., 51 Franklin Street, Fifth Floor, -+ Boston, MA 02110-1301, USA. -+ -+ As a special exception, permission is given to link this library -+ with any edition of Qt, and distribute the resulting executable, -+ without including the source code for Qt in the source distribution. -+*/ -+ -+#include "networkstatuscommon.h" -+ -+QDataStream & operator<< ( QDataStream & s, const NetworkStatus::Properties p ) -+{ -+ s << p.name; -+ s << (int)p.status; -+ s << p.service; -+ return s; -+} -+ -+QDataStream & operator>> ( QDataStream & s, NetworkStatus::Properties &p ) -+{ -+ int status; -+ s >> p.name; -+ s >> status; -+ p.status = (NetworkStatus::Status)status; -+ s >> p.service; -+ return s; -+} -+ -+namespace NetworkStatus -+{ -+ QString toString( NetworkStatus::Status st ) -+ { -+ QString str; -+ switch ( st ) { -+ case NetworkStatus::NoNetworks: -+ str = "NoNetworks"; -+ break; -+ case NetworkStatus::Unreachable: -+ str = "Unreachable"; -+ break; -+ case NetworkStatus::OfflineDisconnected: -+ str = "OfflineDisconnected"; -+ break; -+ case NetworkStatus::OfflineFailed: -+ str = "OfflineFailed"; -+ break; -+ case NetworkStatus::ShuttingDown: -+ str = "ShuttingDown"; -+ break; -+ case NetworkStatus::Offline: -+ str = "Offline"; -+ break; -+ case NetworkStatus::Establishing: -+ str = "Establishing"; -+ break; -+ case NetworkStatus::Online: -+ str = "Online"; -+ break; -+ } -+ return str; -+ } -+} // namespace NetworkStatus -Index: networkstatus/.svn/text-base/networkstatuscommon.h.svn-base -=================================================================== ---- /dev/null -+++ networkstatus/.svn/text-base/networkstatuscommon.h.svn-base -@@ -0,0 +1,52 @@ -+/* This file is part of kdepim -+ Copyright (C) 2005,2007 Will Stephenson -+ -+ This library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Library General Public -+ License version 2 as published by the Free Software Foundation. -+ -+ This library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Library General Public License for more details. -+ -+ You should have received a copy of the GNU Library General Public License -+ along with this library. If not, write to the Free Software -+ Foundation, Inc., 51 Franklin Street, Fifth Floor, -+ Boston, MA 02110-1301, USA. -+ -+ As a special exception, permission is given to link this library -+ with any edition of Qt, and distribute the resulting executable, -+ without including the source code for Qt in the source distribution. -+*/ -+ -+#ifndef NETWORKSTATUS_COMMON_H -+#define NETWORKSTATUS_COMMON_H -+ -+#include -+ -+namespace NetworkStatus -+{ -+ enum Status { NoNetworks = 1, Unreachable, OfflineDisconnected, OfflineFailed, ShuttingDown, Offline, Establishing, Online }; -+ enum RequestResult { RequestAccepted = 1, Connected, UserRefused, Unavailable }; -+ enum UnusedDemandPolicy { All, User, None, Permanent }; -+ -+ // BINARY COMPATIBILITY ALERT BEGIN !!!! -+ struct Properties -+ { -+ QString name; -+ Status status; -+ UnusedDemandPolicy unused1; -+ QCString service; -+ bool unused3; -+ QStringList unused4; -+ }; -+ // BINARY COMPATIBILITY ALERT END !!!! -+ -+ QString toString( Status st ); -+} -+ -+QDataStream & operator>> ( QDataStream & s, NetworkStatus::Properties &p ); -+QDataStream & operator<< ( QDataStream & s, const NetworkStatus::Properties p ); -+ -+#endif -Index: networkstatus/.svn/text-base/networkstatus.cpp.svn-base -=================================================================== ---- /dev/null -+++ networkstatus/.svn/text-base/networkstatus.cpp.svn-base -@@ -0,0 +1,162 @@ -+/* This file is part of kdepim -+ Copyright (C) 2005,2007 Will Stephenson -+ -+ This library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Library General Public -+ License version 2 as published by the Free Software Foundation. -+ -+ This library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Library General Public License for more details. -+ -+ You should have received a copy of the GNU Library General Public License -+ along with this library. If not, write to the Free Software -+ Foundation, Inc., 51 Franklin Street, Fifth Floor, -+ Boston, MA 02110-1301, USA. -+ -+ As a special exception, permission is given to link this library -+ with any edition of Qt, and distribute the resulting executable, -+ without including the source code for Qt in the source distribution. -+*/ -+ -+#include "networkstatus.h" -+ -+#include -+ -+#include -+#include -+#include -+ -+#include "network.h" -+#include -+ -+extern "C" { -+ KDE_EXPORT KDEDModule* create_networkstatus( const QCString& obj ) -+ { -+ return new NetworkStatusModule( obj ); -+ } -+} -+ -+// INTERNALLY USED STRUCTS AND TYPEDEFS -+ -+typedef QMap< QString, Network * > NetworkMap; -+ -+class NetworkStatusModule::Private -+{ -+public: -+ NetworkMap networks; -+ NetworkStatus::Status status; -+}; -+ -+// CTORS/DTORS -+ -+NetworkStatusModule::NetworkStatusModule( const QCString & obj ) : KDEDModule( obj ), d( new Private ) -+{ -+ d->status = NetworkStatus::NoNetworks; -+ connect( kapp->dcopClient(), SIGNAL( applicationRemoved( const QCString& ) ) , this, SLOT( unregisteredFromDCOP( const QCString& ) ) ); -+ // connect( kapp->dcopClient(), SIGNAL( applicationRegistered( const QCString& ) ) , this, SLOT( registeredToDCOP( const QCString& ) ) ); -+} -+ -+NetworkStatusModule::~NetworkStatusModule() -+{ -+ NetworkMap::ConstIterator it; -+ const NetworkMap::ConstIterator end = d->networks.end(); -+ -+ for ( it = d->networks.begin(); it != end; ++it ) { -+ delete ( *it ); -+ } -+ -+ delete d; -+} -+ -+// CLIENT INTERFACE -+ -+QStringList NetworkStatusModule::networks() -+{ -+ kdDebug() << k_funcinfo << " contains " << d->networks.count() << " networks" << endl; -+ return d->networks.keys(); -+} -+ -+int NetworkStatusModule::status() -+{ -+ kdDebug() << k_funcinfo << " status: " << (int)d->status << endl; -+ return (int)d->status; -+} -+ -+//protected: -+ -+void NetworkStatusModule::updateStatus() -+{ -+ NetworkStatus::Status bestStatus = NetworkStatus::NoNetworks; -+ const NetworkStatus::Status oldStatus = d->status; -+ -+ NetworkMap::ConstIterator it; -+ const NetworkMap::ConstIterator end = d->networks.end(); -+ for ( it = d->networks.begin(); it != end; ++it ) { -+ if ( ( *it )->status() > bestStatus ) -+ bestStatus = ( *it )->status(); -+ } -+ d->status = bestStatus; -+ -+ if ( oldStatus != d->status ) { -+ statusChange( (int)d->status ); -+ } -+} -+ -+void NetworkStatusModule::unregisteredFromDCOP( const QCString & appId ) -+{ -+ // unregister and delete any networks owned by a service that has just unregistered -+ NetworkMap::Iterator it; -+ const NetworkMap::Iterator end = d->networks.end(); -+ for ( it = d->networks.begin(); it != end; ++it ) -+ { -+ if ( ( *it )->service() == QString( appId ) ) -+ { -+ NetworkMap::Iterator toRemove = it; -+ Network * removedNet = *toRemove; -+ d->networks.remove( toRemove ); -+ updateStatus(); -+ delete removedNet; -+ } -+ } -+} -+ -+// SERVICE INTERFACE // -+void NetworkStatusModule::setNetworkStatus( const QString & networkName, int st ) -+{ -+ kdDebug() << k_funcinfo << networkName << ", " << st << endl; -+ NetworkStatus::Status changedStatus = (NetworkStatus::Status)st; -+ Network * net = 0; -+ NetworkMap::Iterator it = d->networks.find( networkName ); -+ if ( it != d->networks.end() ) { -+ net = (*it); -+ net->setStatus( changedStatus ); -+ updateStatus(); -+ } -+ else -+ kdDebug() << " No network named '" << networkName << "' found." << endl; -+} -+ -+void NetworkStatusModule::registerNetwork( const NetworkStatus::Properties properties ) -+{ -+ kdDebug() << k_funcinfo << properties.name << ", with status " << properties.status << endl; -+ -+ d->networks.insert( properties.name, new Network( properties ) ); -+ updateStatus(); -+} -+ -+void NetworkStatusModule::unregisterNetwork( const QString & networkName ) -+{ -+ kdDebug() << k_funcinfo << networkName << endl; -+ -+ NetworkMap::Iterator it = d->networks.find( networkName ); -+ if ( it != d->networks.end() ) { -+ delete *it; -+ d->networks.remove( it ); -+ } -+ updateStatus(); -+} -+ -+#include "networkstatus.moc" -+// vim: set noet sw=4 ts=4: -Index: networkstatus/.svn/text-base/networkstatus.desktop.svn-base -=================================================================== ---- /dev/null -+++ networkstatus/.svn/text-base/networkstatus.desktop.svn-base -@@ -0,0 +1,98 @@ -+[Desktop Entry] -+Encoding=UTF-8 -+Name=Network Status Daemon -+Name[af]=Netwerk status bediener -+Name[ar]=مراقب القرص Ùˆ التنÙيذ لحالة الشبكة -+Name[bg]=Демон за ÑÑŠÑтоÑние на мрежата -+Name[ca]=Dimoni de l'estat de la xarxa -+Name[cs]=Démon stavu sítÄ› -+Name[da]=Netværkstatusdæmon -+Name[de]=Ãœberwachung des Netzwerkstatus -+Name[el]=Δαίμονας κατάστασης δικτÏου -+Name[es]=Daemon de estado de la red -+Name[et]=Võrguoleku deemon -+Name[eu]=Sarearen egoera deabrua -+Name[fa]=شبح وضعیت شبکه -+Name[fi]=Verkkotilan tarkkailija -+Name[fr]=Suivi de l'état du réseau -+Name[fy]=Netwurktastândaemon -+Name[gl]=Daemon do Estado da Rede -+Name[hu]=Hálózati állapotjelzÅ‘ szolgáltatás -+Name[is]=Netstöðupúki -+Name[it]=Demone dello stato della rete -+Name[ja]=ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚¹ãƒ†ãƒ¼ã‚¿ã‚¹ãƒ‡ãƒ¼ãƒ¢ãƒ³ -+Name[kk]=Желі күйінің қызметі -+Name[km]=ដáŸáž˜áž·áž“​ស្ážáž¶áž“ភាព​បណ្ដាញ -+Name[lt]=Tinklo statuso tarnyba -+Name[mk]=Даемон за мрежен ÑÑ‚Ð°Ñ‚ÑƒÑ -+Name[ms]=Daemon Berstatus Rangkaian -+Name[nb]=Statusnisse for nettverket -+Name[nds]=Nettwarkstatus-Dämoon -+Name[ne]=सञà¥à¤œà¤¾à¤² सà¥à¤¥à¤¿à¤¤à¤¿ डेइमन -+Name[nl]=Netwerkstatusdaemon -+Name[nn]=Statusnisse for nettverket -+Name[pl]=UsÅ‚uga stanu sieci -+Name[pt]=Servidor de Estado de Rede -+Name[pt_BR]=Daemon de Status da Rede -+Name[ru]=Служба ÑоÑтоÑÐ½Ð¸Ñ Ñети -+Name[sk]=Daemon stavu siete -+Name[sl]=Demon za omrežno stanje -+Name[sr]=Демон за ÑÑ‚Ð°Ñ‚ÑƒÑ Ð¼Ñ€ÐµÐ¶Ðµ -+Name[sr@Latn]=Demon za status mreže -+Name[sv]=Nätverksstatusdemon -+Name[ta]=வலைபà¯à®ªà®¿à®©à¯à®©à®²à¯ நிலை டெமான௠-+Name[tr]=AÄŸ Durum Ä°zleyici -+Name[uk]=Демон Ñтану мережі -+Name[zh_CN]=网络状æ€å®ˆæŠ¤ç¨‹åº -+Name[zh_TW]=ç¶²è·¯ç‹€æ…‹å®ˆè­·ç¨‹å¼ -+Comment=Tracks status of network interfaces and provides notification to applications using the network. -+Comment[af]=Hou tred van die status van netwerk intervlakke en verskaf kennisgewings na programme wat die netwerk gebruik. -+Comment[bg]=Следене на ÑÑŠÑтоÑнието на мрежата и предаване на информациÑта на програмите, които имат нужда -+Comment[ca]=Controla l'estat de les interfícies de xarxa i proporciona notificacions a les aplicacions que usen la xarxa. -+Comment[cs]=ZjiÅ¡'tuje stav síťových rozhraní a upozorňuje v případÄ› přístupu aplikací k síti. -+Comment[da]=Sporer status af netværksgrænseflade og sørger for meddelelser til programmer der bruger netværket. -+Comment[de]=Ãœberprüft den Netzwerk-Status und benachrichtigt anfragende Anwendungen -+Comment[el]=ΠαÏακολουθεί την κατάσταση του δικτÏου και παÏέχει ειδοποιήσεις σε εφαÏμογές που χÏησιμοποιοÏν το δίκτυο. -+Comment[es]=Sigue la pista de las interfaces de red y proporciona notificaciones a las aplicaciones que están usando la red. -+Comment[et]=Jälgib võrguliideste olekut ja annab sellest võrgu vahendusel rakendustele teada. -+Comment[eu]=Sare interfazeen egoera jarraitzen du eta sarea darabilten aplikazioei jakinarazten die. -+Comment[fa]=وضعیت واسطهای شبکه را شیار داده Ùˆ با استÙاده از شبکه، برای کاربردها اخطار Ùراهم می‌کند. -+Comment[fi]=Tarkkailee verkkoliitäntöjen tilaa ja varoittaa verkkoa käyttäviä sovelluksia. -+Comment[fr]=Surveille l'état des interfaces réseaux et fournit des notifications aux applications qui utilisent le réseau -+Comment[fy]=Hâldt de tastân by fan de Netwurkynterfaces en hâldt dêr de tapassings fan op de hichte. -+Comment[gl]=Monitoriza o estado das interfaces de rede e fornece notificacións ás aplicacións que usen a rede. -+Comment[hu]=Figyeli a hálózati csatolók állapotát és értesítési lehetÅ‘séget biztosít hálózati alkalmazások számára. -+Comment[is]=Fylgist með stöðu netkorta og sendir tilkynningar til forrita sem nota netið. -+Comment[it]=Controlla lo stato delle interfacce di rete e fornisce notifiche alle applicazioni che usano al rete. -+Comment[ja]=ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ãƒ¼ã‚¹ã®çŠ¶æ…‹ã‚’追跡ã—ã€ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚’用ã„るアプリケーションã«é€šçŸ¥ã—ã¾ã™ -+Comment[kk]=Желі интерфейÑтерінің күйін бақылап, желіні қолданатын бағдарламаларын құлақтандыру қызметі. -+Comment[km]=ážáž¶áž˜ážŠáž¶áž“​ស្ážáž¶áž“ភាព​របស់​ចំណុច​ប្រទាក់​បណ្ដាញ ព្រម​ទាំង​ផ្ដល់​នូវ​ការ​ជូនដំណឹង​ទៅ​កម្មវិធី ដែល​ប្រើ​បណ្ដាញ ។ -+Comment[lt]=Seka tinklo sÄ…sajų bÅ«senÄ… ir informuoja apie jas programas, naudojanÄias tinklÄ… -+Comment[mk]=Го Ñледи ÑтатуÑот на мрежните интерфејÑи и дава извеÑтувања на апликациите што ја кориÑтат мрежата. -+Comment[ms]=Menjejak status antara muka rangkaian dan memberitahu aplikasi yang menggunakan rangkaian tersebut. -+Comment[nb]=OvervÃ¥ker status for nettverksgrensesnitt og varsler programmer som bruker nettverket. -+Comment[nds]=Överwacht den Tostand vun Nettwark-Koppelsteden un sendt Narichten na Programmen, de dat Nettwark bruukt. -+Comment[ne]=सञà¥à¤œà¤¾à¤² इनà¥à¤Ÿà¤°à¤«à¥‡à¤¸à¤•à¥‹ सà¥à¤¥à¤¿à¤¤à¤¿ टà¥à¤°à¥à¤¯à¤¾à¤• गरà¥à¤¦à¤› र सञà¥à¤œà¤¾à¤² पà¥à¤°à¤¯à¥‹à¤— गरेर अनà¥à¤ªà¥à¤°à¤¯à¥‹à¤—मा जानकारी उपलबà¥à¤§ गराउछ । -+Comment[nl]=Houdt de status bij van de netwerkinterfaces en houdt daar de toepassingen van op de hoogte. -+Comment[nn]=Overvakar status for nettverksgrensesnitt og varslar program som brukar nettverket. -+Comment[pl]=Åšledzi stan interfejsów sieciowych i powiadamia programy używajÄ…ce sieci. -+Comment[pt]=Vigia o estado das interfaces de rede e avisa as aplicações que utilizam a rede. -+Comment[pt_BR]=Controla o status das interfaces de rede e fornece notificações para aplicativos utilizando a rede. -+Comment[ru]=Служба отÑÐ»ÐµÐ¶Ð¸Ð²Ð°Ð½Ð¸Ñ ÑоÑтоÑÐ½Ð¸Ñ Ñетевых интерфейÑов и Ð¾Ð±Ñ€Ð°Ñ‰ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ð¹ к Ñети. -+Comment[sk]=Sleduje stav sieÅ¥ových rozhraní a poskytuje upozornenia aplikáciám používajúcim sieÅ¥. -+Comment[sl]=Sledi stanju omrežnim vmesnikom in omogoÄa obvestila programom, ki uporabljajo omrežje -+Comment[sr]=Прати ÑÑ‚Ð°Ñ‚ÑƒÑ Ð¼Ñ€ÐµÐ¶Ð½Ð¸Ñ… интерфејÑа и пружа обавештења програмима који кориÑте мрежу. -+Comment[sr@Latn]=Prati status mrežnih interfejsa i pruža obaveÅ¡tenja programima koji koriste mrežu. -+Comment[sv]=Bevakar status för nätverksgränssnitt och tillhandahÃ¥ller underrättelser till program som använder nätverket. -+Comment[ta]=வலைபà¯à®ªà®¿à®©à¯à®©à®²à¯ˆà®ªà¯ பயனà¯à®ªà®Ÿà¯à®¤à¯à®¤à®¿ வலைபà¯à®ªà®¿à®©à¯à®©à®²à¯ இடைமà¯à®•à®™à¯à®•à®³à®¿à®©à¯ நிலையை கணà¯à®•à®¾à®£à®¿à®•à¯à®•à®¿à®±à®¤à¯ மறà¯à®±à¯à®®à¯ பயனà¯à®ªà®¾à®Ÿà¯à®•à®³à¯à®•à¯à®•à¯ அறிவிபà¯à®ªà¯ˆ வழஙà¯à®•à¯à®•à®¿à®±à®¤à¯. -+Comment[uk]=Слідкує за Ñтаном інтерфейÑів мережі Ñ– Ñповіщає програми, Ñкі кориÑтуютьÑÑ Ð¼ÐµÑ€ÐµÐ¶ÐµÑŽ. -+Comment[zh_CN]=跟踪网å¡çš„状æ€å¹¶ä¸ºåº”用程åºæ供使用网络的通知。 -+Comment[zh_TW]=追蹤網路介é¢çš„狀態,並æ供使用網路的應用程å¼çš„通知。 -+Type=Service -+ServiceTypes=KDEDModule -+X-KDE-ModuleType=Library -+X-KDE-Library=networkstatus -+X-KDE-FactoryName=networkstatus -+X-KDE-Kded-autoload=true -+X-KDE-Kded-load-on-demand=true -+ -Index: networkstatus/.svn/text-base/networkstatus.h.svn-base -=================================================================== ---- /dev/null -+++ networkstatus/.svn/text-base/networkstatus.h.svn-base -@@ -0,0 +1,66 @@ -+/* This file is part of kdepim -+ Copyright (C) 2005,2007 Will Stephenson -+ -+ This library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Library General Public -+ License version 2 as published by the Free Software Foundation. -+ -+ This library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Library General Public License for more details. -+ -+ You should have received a copy of the GNU Library General Public License -+ along with this library. If not, write to the Free Software -+ Foundation, Inc., 51 Franklin Street, Fifth Floor, -+ Boston, MA 02110-1301, USA. -+ -+ As a special exception, permission is given to link this library -+ with any edition of Qt, and distribute the resulting executable, -+ without including the source code for Qt in the source distribution. -+*/ -+ -+#ifndef KDED_NETWORKSTATUS_H -+#define KDED_NETWORKSTATUS_H -+ -+#include -+ -+#include "networkstatuscommon.h" -+#include "network.h" -+ -+class NetworkStatusModule : virtual public KDEDModule -+{ -+Q_OBJECT -+K_DCOP -+public: -+ NetworkStatusModule( const QCString& obj ); -+ ~NetworkStatusModule(); -+k_dcop: -+ // Client interface -+ QStringList networks(); -+ int status(); -+ // Service interface -+ void setNetworkStatus( const QString & networkName, int status ); -+ void registerNetwork( NetworkStatus::Properties properties ); -+ void unregisterNetwork( const QString & networkName ); -+k_dcop_signals: -+ /** -+ * A status change occurred affecting the overall connectivity -+ * @param status The new status -+ */ -+ void statusChange( int status ); -+protected slots: -+ //void registeredToDCOP( const QCString& appId ); -+ void unregisteredFromDCOP( const QCString& appId ); -+ -+protected: -+ // recalculate cached status -+ void updateStatus(); -+ -+private: -+ class Private; -+ Private *d; -+}; -+ -+#endif -+// vim: sw=4 ts=4 -Index: networkstatus/.svn/text-base/networkstatusiface.h.svn-base -=================================================================== ---- /dev/null -+++ networkstatus/.svn/text-base/networkstatusiface.h.svn-base -@@ -0,0 +1,50 @@ -+/* This file is part of kdepim. -+ Copyright (C) 2005,2007 Will Stephenson -+ -+ This library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Library General Public -+ License version 2 as published by the Free Software Foundation. -+ -+ This library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Library General Public License for more details. -+ -+ You should have received a copy of the GNU Library General Public License -+ along with this library. If not, write to the Free Software -+ Foundation, Inc., 51 Franklin Street, Fifth Floor, -+ Boston, MA 02110-1301, USA. -+ -+ As a special exception, permission is given to link this library -+ with any edition of Qt, and distribute the resulting executable, -+ without including the source code for Qt in the source distribution. -+*/ -+ -+#ifndef KDED_NETWORKSTATUSIFACE_H -+#define KDED_NETWORKSTATUSIFACE_H -+ -+#include -+#include -+ -+#include "networkstatuscommon.h" -+ -+class NetworkStatusIface : virtual public DCOPObject -+{ -+K_DCOP -+k_dcop: -+ // Client interface -+ virtual QStringList networks() = 0; -+ virtual int status() = 0; -+ // Service interface -+ virtual void setNetworkStatus( const QString & networkName, int status ) = 0; -+ virtual void registerNetwork( NetworkStatus::Properties properties ) = 0; -+ virtual void unregisterNetwork( const QString & networkName ) = 0 ; -+k_dcop_signals: -+ /** -+ * A status change occurred affecting the overall connectivity -+ * @param status The new status -+ */ -+ virtual void statusChange( int status ) = 0; -+}; -+#endif -+// vim: sw=4 ts=4 -Index: networkstatus/.svn/text-base/networkstatusindicator.cpp.svn-base -=================================================================== ---- /dev/null -+++ networkstatus/.svn/text-base/networkstatusindicator.cpp.svn-base -@@ -0,0 +1,64 @@ -+/* This file is part of the KDE project -+ Copyright (C) 2007 Will Stephenson -+ -+ This library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Library General Public -+ License version 2 as published by the Free Software Foundation. -+ -+ This library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Library General Public License for more details. -+ -+ You should have received a copy of the GNU Library General Public License -+ along with this library. If not, write to the Free Software -+ Foundation, Inc., 51 Franklin Street, Fifth Floor, -+ Boston, MA 02110-1301, USA. -+ -+ As a special exception, permission is given to link this library -+ with any edition of Qt, and distribute the resulting executable, -+ without including the source code for Qt in the source distribution. -+*/ -+ -+#include -+#include -+#include -+#include -+ -+#include "connectionmanager.h" -+ -+#include "networkstatusindicator.h" -+ -+StatusBarNetworkStatusIndicator::StatusBarNetworkStatusIndicator( -+ QWidget * parent, const char * name ) : QHBox( parent, name )/*, d( new StatusBarNetworkStatusIndicatorPrivate )*/ -+{ -+ setMargin( 2 ); -+ setSpacing( 1 ); -+ QLabel * label = new QLabel( this, "offlinemodelabel" ); -+ label->setPixmap( SmallIcon("connect_no") ); -+ QToolTip::add( label, i18n( "The desktop is offline" ) ); -+ -+ connect( ConnectionManager::self(), SIGNAL( statusChanged( NetworkStatus::Status ) ), -+ SLOT( networkStatusChanged( NetworkStatus::Status) ) ); -+ -+} -+ -+void StatusBarNetworkStatusIndicator::init() -+{ -+ networkStatusChanged( ConnectionManager::self()->status()); -+} -+ -+StatusBarNetworkStatusIndicator::~StatusBarNetworkStatusIndicator() -+{ -+} -+ -+void StatusBarNetworkStatusIndicator::networkStatusChanged( NetworkStatus::Status status ) -+{ -+ if ( status == NetworkStatus::Online || status == NetworkStatus::NoNetworks ) { -+ hide(); -+ } else { -+ show(); -+ } -+} -+ -+#include "networkstatusindicator.moc" -Index: networkstatus/.svn/text-base/networkstatusindicator.h.svn-base -=================================================================== ---- /dev/null -+++ networkstatus/.svn/text-base/networkstatusindicator.h.svn-base -@@ -0,0 +1,42 @@ -+/* This file is part of the KDE project -+ Copyright (C) 2007 Will Stephenson -+ -+ This library is free software; you can redistribute it and/or -+ modify it under the terms of the GNU Library General Public -+ License version 2 as published by the Free Software Foundation. -+ -+ This library is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Library General Public License for more details. -+ -+ You should have received a copy of the GNU Library General Public License -+ along with this library. If not, write to the Free Software -+ Foundation, Inc., 51 Franklin Street, Fifth Floor, -+ Boston, MA 02110-1301, USA. -+ -+ As a special exception, permission is given to link this library -+ with any edition of Qt, and distribute the resulting executable, -+ without including the source code for Qt in the source distribution. -+*/ -+ -+#ifndef KDE_NETWORKSTATUS_INDICATOR_H -+#define KDE_NETWORKSTATUS_INDICATOR_H -+ -+#include -+#include -+#include -+ -+class StatusBarNetworkStatusIndicator : public QHBox -+{ -+Q_OBJECT -+public: -+ StatusBarNetworkStatusIndicator( QWidget * parent, const char * name ); -+ virtual ~StatusBarNetworkStatusIndicator(); -+ void init(); -+protected slots: -+ void networkStatusChanged( NetworkStatus::Status status ); -+}; -+ -+#endif -+ -Index: networkstatus/.svn/text-base/networkstatus.kdevelop.svn-base -=================================================================== ---- /dev/null -+++ networkstatus/.svn/text-base/networkstatus.kdevelop.svn-base -@@ -0,0 +1,108 @@ -+ -+ -+ -+ Will Stephenson -+ wstephenson@suse.de -+ $VERSION$ -+ KDevKDEAutoProject -+ C++ -+ -+ Qt -+ KDE -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ false -+ false -+ -+ -+ *.o,*.lo,CVS -+ false -+ -+ -+ -+ -+ ada -+ ada_bugs_gcc -+ bash -+ bash_bugs -+ clanlib -+ fortran_bugs_gcc -+ gnome1 -+ gnustep -+ gtk -+ gtk_bugs -+ haskell -+ haskell_bugs_ghc -+ java_bugs_gcc -+ java_bugs_sun -+ opengl -+ pascal_bugs_fp -+ php -+ php_bugs -+ perl -+ perl_bugs -+ python -+ python_bugs -+ ruby -+ ruby_bugs -+ sdl -+ stl -+ sw -+ w3c-dom-level2-html -+ w3c-svg -+ w3c-uaag10 -+ wxwidgets_bugs -+ -+ -+ qmake User Guide -+ -+ -+ -+ -+ libtool -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ executable -+ -+ -+ kded_networkstatus.la -+ -+ -+ -+ -+ -+ true -+ true -+ true -+ false -+ true -+ true -+ true -+ 250 -+ 400 -+ 250 -+ -+ -+ -Index: networkstatus/.svn/text-base/README.statetransition.svn-base -=================================================================== ---- /dev/null -+++ networkstatus/.svn/text-base/README.statetransition.svn-base -@@ -0,0 +1,29 @@ -+This table defines the actions to be taken on state transition. -+ -+TODO: potentially add extra states OnlineReading and OnlineWriting -+ -+ NEW -+ |Offline | Online | -+---+---+----------------+---------------+ -+ | | |N|set online | -+ | | |L|reload | -+ | O | |C|resources | -+ | F | +---------------+ -+ | F | |L|set online | -+O | | |C|reload res. | -+L | | | |write res. | -+D +---+----------------+---------------+ -+ | |N|set offline | | -+ | |C| | | -+ | | | | | -+ | O +---------------+| | -+ | N |U|set offline | | -+ | |W|write locally | | -+ | |C|(subject to | | -+ | | | save policy)| | -+---+---+----------------+---------------+ -+LC = Local changes exist -+NLC = No local changes exist -+UWC = Unsaved changes exist -+NC = no changes exist -+ -Index: networkstatus/.svn/text-base/testclient2.cpp.svn-base -=================================================================== ---- /dev/null -+++ networkstatus/.svn/text-base/testclient2.cpp.svn-base -@@ -0,0 +1,222 @@ -+/* This file is part of kdepim. -+ Copyright (C) 2007 Will Stephenson -+ -+ This program is free software; you can redistribute it and/or modify -+ it under the terms of the GNU General Public License version 2 -+ as published by the Free Software Foundation. -+ -+ This program is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ GNU General Public License for more details. -+ -+ You should have received a copy of the GNU General Public License -+ along with this program; if not, write to the Free Software -+ Foundation, Inc., 51 Franklin Street, Fifth Floor, -+ Boston, MA 02110-1301, USA. -+ -+ As a special exception, permission is given to link this program -+ with any edition of Qt, and distribute the resulting executable, -+ without including the source code for Qt in the source distribution. -+*/ -+ -+#include -+#include -+#include -+ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+ -+#include -+#include -+ -+#include "testclientview.h" -+#include "testclient2.h" -+ -+TestClient::TestClient() -+ : KMainWindow( 0, "ktestnetworkstatus" ), -+ m_layout( new QVBox( 0, "layout" ) ), -+ m_status( AppDisconnected ) -+{ -+ m_view = new TestClientView( this ); -+ new StatusBarNetworkStatusIndicator( m_view, "statusindicator" ); -+ // tell the KMainWindow that this is indeed the main widget -+ setCentralWidget(m_view); -+ -+ networkStatusChanged( ConnectionManager::self()->status() ); -+ appDisconnected(); -+ -+ connect( ConnectionManager::self(), SIGNAL( statusChanged( NetworkStatus::Status ) ), SLOT( networkStatusChanged( NetworkStatus::Status ) ) ); -+ ConnectionManager::self()->registerConnectSlot( this, SLOT( doConnect() ) ); -+ ConnectionManager::self()->registerDisconnectSlot( this, SLOT( doDisconnect() ) ); -+ -+ connect( m_view->connectButton, SIGNAL( clicked() ), SLOT( connectButtonClicked() ) ); -+} -+ -+TestClient::~TestClient() -+{ -+} -+ -+void TestClient::networkStatusChanged( NetworkStatus::Status status ) -+{ -+ kdDebug() << k_funcinfo << endl; -+ kdDebug() << "Networking is now: " << NetworkStatus::toString( status ) << " (" << status << ")" << endl; -+ m_view->netStatusLabel->setText( NetworkStatus::toString( status ) ); -+ m_view->netStatusLabel->setPaletteBackgroundColor( toQColor( status ) ); -+} -+ -+void TestClient::doConnect() -+{ -+ Q_ASSERT( ConnectionManager::self()->status() == NetworkStatus::Online ); -+ if ( m_status != AppConnected ) { -+ appIsConnected(); -+ } -+} -+ -+void TestClient::doDisconnect() -+{ -+ Q_ASSERT( ConnectionManager::self()->status() != NetworkStatus::Online ); -+ if ( m_status == AppConnected ) { -+ appDisconnected(); -+ } -+} -+ -+void TestClient::connectButtonClicked() -+{ -+ kdDebug() << k_funcinfo << endl; -+ if ( m_status == AppDisconnected ) { -+ switch ( ConnectionManager::self()->status() ) -+ { -+ case NetworkStatus::NoNetworks: -+ case NetworkStatus::Online: -+ appIsConnected(); -+ break; -+ default: -+ appWaiting(); -+ break; -+ } -+ } -+ else if ( m_status == AppConnected || m_status == AppWaitingForConnect ) { -+ appDisconnected(); -+ } -+} -+ -+void TestClient::appWaiting() -+{ -+ kdDebug() << k_funcinfo << endl; -+ //m_status = AppWaitingForConnect; -+ m_view->appStatusLabel->setText( "Waiting" ); -+} -+ -+void TestClient::appIsConnected() -+{ -+ kdDebug() << k_funcinfo << endl; -+ m_view->connectButton->setEnabled( true ); -+ m_view->connectButton->setText( "Disconnect" ); -+ m_view->appStatusLabel->setText( "Connected" ); -+ m_status = AppConnected; -+} -+ -+void TestClient::appEstablishing() -+{ -+ kdDebug() << k_funcinfo << endl; -+ m_view->netStatusLabel->setText( "Establishing" ); -+ m_view->connectButton->setEnabled( false ); -+} -+ -+void TestClient::appDisestablishing( ) -+{ -+ kdDebug() << k_funcinfo << endl; -+ m_view->connectButton->setEnabled( false ); -+ m_view->appStatusLabel->setText( "Disconnected" ); -+} -+ -+void TestClient::appDisconnected( ) -+{ -+ kdDebug() << k_funcinfo << endl; -+ m_view->connectButton->setEnabled( true ); -+ m_view->connectButton->setText( "Start Connect" ); -+ m_view->appStatusLabel->setText( "Disconnected" ); -+ m_status = AppDisconnected; -+} -+ -+QColor TestClient::toQColor( NetworkStatus::Status st ) -+{ -+ QColor col; -+ switch ( st ) { -+ case NetworkStatus::NoNetworks: -+ col = Qt::darkGray; -+ break; -+ case NetworkStatus::Unreachable: -+ col = Qt::darkMagenta; -+ break; -+ case NetworkStatus::OfflineDisconnected: -+ col = Qt::blue; -+ break; -+ case NetworkStatus::OfflineFailed: -+ col = Qt::darkRed; -+ break; -+ case NetworkStatus::ShuttingDown: -+ col = Qt::darkYellow; -+ break; -+ case NetworkStatus::Offline: -+ col = Qt::blue; -+ break; -+ case NetworkStatus::Establishing: -+ col = Qt::yellow; -+ break; -+ case NetworkStatus::Online: -+ col = Qt::green; -+ break; -+ } -+ return col; -+} -+//main -+static const char description[] = -+ I18N_NOOP("Test Client for Network Status kded module"); -+ -+static const char version[] = "v0.1"; -+ -+static KCmdLineOptions options[] = -+{ -+ KCmdLineLastOption -+}; -+ -+int main(int argc, char **argv) -+{ -+ KAboutData about("KNetworkStatusTestClient", I18N_NOOP("knetworkstatustestclient"), version, description, KAboutData::License_GPL, "(C) 2007 Will Stephenson", 0, 0, "wstephenson@kde.org"); -+ about.addAuthor( "Will Stephenson", 0, "wstephenson@kde.org" ); -+ KCmdLineArgs::init(argc, argv, &about); -+ KCmdLineArgs::addCmdLineOptions(options); -+ KApplication app; -+ -+ // register ourselves as a dcop client -+ app.dcopClient()->registerAs(app.name(), false); -+ -+ KCmdLineArgs *args = KCmdLineArgs::parsedArgs(); -+ if (args->count() == 0) -+ { -+ TestClient *widget = new TestClient; -+ widget->show(); -+ } -+ else -+ { -+ int i = 0; -+ for (; i < args->count(); i++) -+ { -+ TestClient *widget = new TestClient; -+ widget->show(); -+ } -+ } -+ args->clear(); -+ -+ return app.exec(); -+} -+ -+#include "testclient2.moc" -+ -Index: networkstatus/.svn/text-base/testclient2.h.svn-base -=================================================================== ---- /dev/null -+++ networkstatus/.svn/text-base/testclient2.h.svn-base -@@ -0,0 +1,82 @@ -+/* This file is part of kdepim. -+ -+ Copyright (C) 2007 Will Stephenson -+ -+ This program is free software; you can redistribute it and/or modify -+ it under the terms of the GNU General Public License as published by -+ the Free Software Foundation; either version 2 of the License, or -+ (at your option) any later version. -+ -+ This program is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ GNU General Public License for more details. -+ -+ You should have received a copy of the GNU General Public License -+ along with this program; if not, write to the Free Software -+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -+ -+ As a special exception, permission is given to link this program -+ with any edition of Qt, and distribute the resulting executable, -+ without including the source code for Qt in the source distribution. -+*/ -+ -+#ifndef KTESTNETWORKSTATUS_H -+#define KTESTNETWORKSTATUS_H -+ -+#ifdef HAVE_CONFIG_H -+#include -+#endif -+ -+#include -+#include -+#include -+#include -+ -+#include "networkstatusiface_stub.h" -+ -+class TestClientView; -+ -+/** -+ * Test client that uses a ConnectionManager to change its state -+ * -+ * @short Main window class -+ * @author Will Stephenson -+ * @version 0.1 -+ */ -+class TestClient : public KMainWindow -+{ -+Q_OBJECT -+public: -+ enum AppStatus{ AppDisconnected, AppWaitingForConnect, AppConnected }; -+ /** -+ * Default Constructor -+ */ -+ TestClient(); -+ -+ /** -+ * Default Destructor -+ */ -+ virtual ~TestClient(); -+ -+private slots: -+ void networkStatusChanged( NetworkStatus::Status status ); -+ void connectButtonClicked(); -+ void doConnect(); -+ void doDisconnect(); -+private: -+ void appWaiting(); -+ void appEstablishing(); -+ void appIsConnected(); -+ void appDisestablishing(); -+ void appDisconnected(); -+ static QColor toQColor( NetworkStatus::Status ); -+private: -+ QHBox * m_layout; -+ NetworkStatusIface_stub *m_service; -+ TestClientView *m_view; -+ AppStatus m_status; // this represents the app's status not the network's status -+}; -+ -+#endif // KTESTNETWORKSTATUS_H -+ -Index: networkstatus/.svn/text-base/testclient.cpp.svn-base -=================================================================== ---- /dev/null -+++ networkstatus/.svn/text-base/testclient.cpp.svn-base -@@ -0,0 +1,234 @@ -+/* This file is part of kdepim. -+ Copyright (C) 2007 Will Stephenson -+ -+ This program is free software; you can redistribute it and/or modify -+ it under the terms of the GNU General Public License version 2 -+ as published by the Free Software Foundation. -+ -+ This program is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ GNU General Public License for more details. -+ -+ You should have received a copy of the GNU General Public License -+ along with this program; if not, write to the Free Software -+ Foundation, Inc., 51 Franklin Street, Fifth Floor, -+ Boston, MA 02110-1301, USA. -+ -+ As a special exception, permission is given to link this program -+ with any edition of Qt, and distribute the resulting executable, -+ without including the source code for Qt in the source distribution. -+*/ -+ -+#include -+#include -+ -+ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+ -+#include "connectionmanager.h" -+#include "testclientview.h" -+#include "testclient.h" -+ -+TestClient::TestClient() -+ : KMainWindow( 0, "ktestnetworkstatus" ), -+ m_view(new TestClientView(this)), -+ m_status( AppDisconnected ) -+{ -+ // tell the KMainWindow that this is indeed the main widget -+ setCentralWidget(m_view); -+ -+ networkStatusChanged( ConnectionManager::self()->status() ); -+ appDisconnected(); -+ -+ connect( ConnectionManager::self(), SIGNAL( statusChanged( NetworkStatus::Status ) ), SLOT( networkStatusChanged( NetworkStatus::Status ) ) ); -+ -+ connect( m_view->connectButton, SIGNAL( toggled( bool ) ), SLOT( connectButtonToggled( bool ) ) ); -+} -+ -+TestClient::~TestClient() -+{ -+} -+ -+void TestClient::networkStatusChanged( NetworkStatus::Status status ) -+{ -+ kdDebug() << k_funcinfo << endl; -+//enum EnumStatus { NoNetworks = 1, Unreachable, OfflineDisconnected, OfflineFailed, ShuttingDown -+// , Offline, Establishing, Online }; -+ kdDebug() << "Networking is now: " << NetworkStatus::toString( status ) << " (" << status << ")" << endl; -+ m_view->netStatusLabel->setText( NetworkStatus::toString( status ) ); -+ m_view->netStatusLabel->setPaletteBackgroundColor( toQColor( status ) ); -+ switch ( status ) { -+ case NetworkStatus::NoNetworks: -+ break; -+ case NetworkStatus::Unreachable: -+ break; -+ case NetworkStatus::OfflineDisconnected: -+ break; -+ case NetworkStatus::OfflineFailed: -+ break; -+ case NetworkStatus::ShuttingDown: -+ if ( m_status == AppConnected ) { -+ appDisestablishing(); -+ } -+ break; -+ case NetworkStatus::Offline: -+ if ( m_status == AppConnected ) { -+ appDisconnected(); -+ } -+ break; -+ case NetworkStatus::Establishing: -+ if ( m_status == AppWaitingForConnect ) -+ appEstablishing(); -+ else if ( m_status == AppConnected ) -+ appDisconnected(); -+ break; -+ case NetworkStatus::Online: -+ if ( m_status == AppWaitingForConnect ) -+ appIsConnected(); -+ break; -+ default: -+ m_view->netStatusLabel->setText( "Unrecognised status code!" ); -+ } -+} -+ -+void TestClient::connectButtonToggled( bool on ) -+{ -+ kdDebug() << k_funcinfo << endl; -+ if ( on && m_status == AppDisconnected ) { -+ switch ( ConnectionManager::self()->status() ) -+ { -+ case NetworkStatus::NoNetworks: -+ case NetworkStatus::Online: -+ appIsConnected(); -+ break; -+ default: -+ appWaiting(); -+ break; -+ } -+ } -+ else if ( !on && m_status == AppConnected ) { -+ appDisconnected(); -+ } -+} -+ -+void TestClient::appWaiting() -+{ -+ kdDebug() << k_funcinfo << endl; -+ m_status = AppWaitingForConnect; -+ m_view->appStatusLabel->setText( "Waiting" ); -+} -+ -+void TestClient::appIsConnected() -+{ -+ kdDebug() << k_funcinfo << endl; -+ m_view->connectButton->setEnabled( true ); -+ m_view->connectButton->setText( "Disconnect" ); -+ m_view->appStatusLabel->setText( "Connected" ); -+ m_status = AppConnected; -+} -+ -+void TestClient::appEstablishing() -+{ -+ kdDebug() << k_funcinfo << endl; -+ m_view->netStatusLabel->setText( "Establishing" ); -+ m_view->connectButton->setEnabled( false ); -+} -+ -+void TestClient::appDisestablishing( ) -+{ -+ kdDebug() << k_funcinfo << endl; -+ m_view->connectButton->setEnabled( false ); -+ m_view->appStatusLabel->setText( "Disconnected" ); -+} -+ -+void TestClient::appDisconnected( ) -+{ -+ kdDebug() << k_funcinfo << endl; -+ m_view->connectButton->setEnabled( true ); -+ m_view->connectButton->setText( "Start Connect" ); -+ m_view->appStatusLabel->setText( "Disconnected" ); -+ m_status = AppDisconnected; -+} -+ -+QColor TestClient::toQColor( NetworkStatus::Status st ) -+{ -+ QColor col; -+ switch ( st ) { -+ case NetworkStatus::NoNetworks: -+ col = Qt::darkGray; -+ break; -+ case NetworkStatus::Unreachable: -+ col = Qt::darkMagenta; -+ break; -+ case NetworkStatus::OfflineDisconnected: -+ col = Qt::blue; -+ break; -+ case NetworkStatus::OfflineFailed: -+ col = Qt::darkRed; -+ break; -+ case NetworkStatus::ShuttingDown: -+ col = Qt::darkYellow; -+ break; -+ case NetworkStatus::Offline: -+ col = Qt::blue; -+ break; -+ case NetworkStatus::Establishing: -+ col = Qt::yellow; -+ break; -+ case NetworkStatus::Online: -+ col = Qt::green; -+ break; -+ } -+ return col; -+} -+//main -+static const char description[] = -+ I18N_NOOP("Test Client for Network Status kded module"); -+ -+static const char version[] = "v0.1"; -+ -+static KCmdLineOptions options[] = -+{ -+ KCmdLineLastOption -+}; -+ -+int main(int argc, char **argv) -+{ -+ KAboutData about("KNetworkStatusTestClient", I18N_NOOP("knetworkstatustestclient"), version, description, KAboutData::License_GPL, "(C) 2007 Will Stephenson", 0, 0, "wstephenson@kde.org"); -+ about.addAuthor( "Will Stephenson", 0, "wstephenson@kde.org" ); -+ KCmdLineArgs::init(argc, argv, &about); -+ KCmdLineArgs::addCmdLineOptions(options); -+ KApplication app; -+ -+ // register ourselves as a dcop client -+ app.dcopClient()->registerAs(app.name(), false); -+ -+ KCmdLineArgs *args = KCmdLineArgs::parsedArgs(); -+ if (args->count() == 0) -+ { -+ TestClient *widget = new TestClient; -+ widget->show(); -+ } -+ else -+ { -+ int i = 0; -+ for (; i < args->count(); i++) -+ { -+ TestClient *widget = new TestClient; -+ widget->show(); -+ } -+ } -+ args->clear(); -+ -+ return app.exec(); -+} -+ -+#include "testclient.moc" -+ -Index: networkstatus/.svn/text-base/testclient.h.svn-base -=================================================================== ---- /dev/null -+++ networkstatus/.svn/text-base/testclient.h.svn-base -@@ -0,0 +1,80 @@ -+/* This file is part of kdepim. -+ -+ Copyright (C) 2007 Will Stephenson -+ -+ This program is free software; you can redistribute it and/or modify -+ it under the terms of the GNU General Public License as published by -+ the Free Software Foundation; either version 2 of the License, or -+ (at your option) any later version. -+ -+ This program is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ GNU General Public License for more details. -+ -+ You should have received a copy of the GNU General Public License -+ along with this program; if not, write to the Free Software -+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -+ -+ As a special exception, permission is given to link this program -+ with any edition of Qt, and distribute the resulting executable, -+ without including the source code for Qt in the source distribution. -+*/ -+ -+#ifndef KTESTNETWORKSTATUS_H -+#define KTESTNETWORKSTATUS_H -+ -+#ifdef HAVE_CONFIG_H -+#include -+#endif -+ -+#include -+#include -+#include -+#include -+ -+#include "networkstatusiface_stub.h" -+ -+class TestClientView; -+ -+/** -+ * This class serves as the main window for ktestnetworkstatus. It handles the -+ * menus, toolbars, and status bars. -+ * -+ * @short Main window class -+ * @author Will Stephenson -+ * @version 0.1 -+ */ -+class TestClient : public KMainWindow -+{ -+Q_OBJECT -+public: -+ enum AppStatus{ AppDisconnected, AppWaitingForConnect, AppConnected }; -+ /** -+ * Default Constructor -+ */ -+ TestClient(); -+ -+ /** -+ * Default Destructor -+ */ -+ virtual ~TestClient(); -+ -+private slots: -+ void networkStatusChanged( NetworkStatus::Status status ); -+ void connectButtonToggled( bool on ); -+private: -+ void appWaiting(); -+ void appEstablishing(); -+ void appIsConnected(); -+ void appDisestablishing(); -+ void appDisconnected(); -+ static QColor toQColor( NetworkStatus::Status ); -+private: -+ NetworkStatusIface_stub *m_service; -+ TestClientView *m_view; -+ AppStatus m_status; // this represents the app's status not the network's status -+}; -+ -+#endif // KTESTNETWORKSTATUS_H -+ -Index: networkstatus/.svn/text-base/testclientview.ui.svn-base -=================================================================== ---- /dev/null -+++ networkstatus/.svn/text-base/testclientview.ui.svn-base -@@ -0,0 +1,177 @@ -+ -+TestClientView -+ -+ -+ TestClientView -+ -+ -+ -+ 0 -+ 0 -+ 356 -+ 127 -+ -+ -+ -+ Form1 -+ -+ -+ -+ unnamed -+ -+ -+ -+ textLabel4 -+ -+ -+ -+ 5 -+ 5 -+ 0 -+ 0 -+ -+ -+ -+ <font size="+2"><b>Client for KDE 3 Offline Mode</b></font> -+ -+ -+ AlignVCenter -+ -+ -+ -+ -+ layout1 -+ -+ -+ -+ unnamed -+ -+ -+ -+ textLabel1 -+ -+ -+ Network status: -+ -+ -+ -+ -+ netStatusLabel -+ -+ -+ -+ 0 -+ 255 -+ 0 -+ -+ -+ -+ Panel -+ -+ -+ STATUS -+ -+ -+ AlignCenter -+ -+ -+ -+ -+ -+ -+ layout1_2 -+ -+ -+ -+ unnamed -+ -+ -+ -+ textLabel1_2 -+ -+ -+ App status: -+ -+ -+ -+ -+ appStatusLabel -+ -+ -+ -+ 0 -+ 255 -+ 0 -+ -+ -+ -+ Panel -+ -+ -+ STATUS -+ -+ -+ AlignCenter -+ -+ -+ -+ -+ -+ -+ layout2 -+ -+ -+ -+ unnamed -+ -+ -+ -+ spacer1 -+ -+ -+ Horizontal -+ -+ -+ Expanding -+ -+ -+ -+ 31 -+ 20 -+ -+ -+ -+ -+ -+ connectButton -+ -+ -+ Start Connect -+ -+ -+ false -+ -+ -+ -+ -+ spacer2 -+ -+ -+ Horizontal -+ -+ -+ Expanding -+ -+ -+ -+ 61 -+ 20 -+ -+ -+ -+ -+ -+ -+ -+ -+ -Index: networkstatus/.svn/text-base/testservice.cpp.svn-base -=================================================================== ---- /dev/null -+++ networkstatus/.svn/text-base/testservice.cpp.svn-base -@@ -0,0 +1,219 @@ -+/* This file is part of kdepim. -+ Copyright (C) 2005,2007 Will Stephenson -+ -+ This program is free software; you can redistribute it and/or modify -+ it under the terms of the GNU General Public License version 2 -+ as published by the Free Software Foundation. -+ -+ This program is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ GNU General Public License for more details. -+ -+ You should have received a copy of the GNU General Public License -+ along with this program; if not, write to the Free Software -+ Foundation, Inc., 51 Franklin Street, Fifth Floor, -+ Boston, MA 02110-1301, USA. -+ -+ As a special exception, permission is given to link this program -+ with any edition of Qt, and distribute the resulting executable, -+ without including the source code for Qt in the source distribution. -+*/ -+ -+#include -+#include -+#include -+#include -+ -+#include -+#include -+#include -+#include -+#include -+#include -+ -+#include "testservice.h" -+#include "testserviceview.h" -+#include "networkstatusiface_stub.h" -+ -+TestService::TestService() : KMainWindow( 0, "testservice" ), -+ m_service( new NetworkStatusIface_stub( "kded", "networkstatus" ) ), -+ m_status ( NetworkStatus::Offline ), -+ m_nextStatus( NetworkStatus::OfflineDisconnected ), -+ m_view( new TestServiceView( this ) ) -+{ -+ setCentralWidget( m_view ); -+ kapp->dcopClient()->registerAs("testservice" ); -+ -+ connect( m_view->changeCombo, SIGNAL( activated( int ) ), SLOT( changeComboActivated( int ) ) ); -+ connect( m_view->changeButton, SIGNAL( clicked() ), SLOT( changeButtonClicked() ) ); -+ -+ connect( kapp->dcopClient(), SIGNAL( applicationRegistered( const QCString& ) ), this, SLOT( registeredToDCOP( const QCString& ) ) ); -+ kapp->dcopClient()->setNotifications( true ); -+ -+ m_view->statusLabel->setText( NetworkStatus::toString( m_status ) ); -+ m_view->statusLabel->setPaletteBackgroundColor( toQColor( m_status ) ); -+ setCaption( NetworkStatus::toString( m_status ) ); -+ -+ registerService(); -+} -+ -+TestService::~TestService() -+{ -+ delete m_service; -+ delete m_view; -+} -+ -+void TestService::registerService() -+{ -+ NetworkStatus::Properties nsp; -+ nsp.name = "test_net"; -+ nsp.service = kapp->dcopClient()->appId(); -+ nsp.status = m_status; -+ m_service->registerNetwork( nsp ); -+} -+ -+void TestService::registeredToDCOP( const QCString & appId ) -+{ -+ if ( appId == "kded" ) -+ registerService(); -+} -+ -+int TestService::status( const QString & network ) -+{ -+ Q_UNUSED( network ); -+ return (int)m_status; -+} -+ -+void TestService::changeComboActivated( int index ) -+{ -+ switch ( index ) { -+ case 0 /*NetworkStatus::OfflineDisconnected*/: -+ m_nextStatus = NetworkStatus::OfflineDisconnected; -+ break; -+ case 1 /*NetworkStatus::OfflineFailed*/: -+ m_nextStatus = NetworkStatus::OfflineFailed; -+ break; -+ case 2 /*NetworkStatus::ShuttingDown*/: -+ m_nextStatus = NetworkStatus::ShuttingDown; -+ break; -+ case 3 /*NetworkStatus::Offline*/: -+ m_nextStatus = NetworkStatus::Offline; -+ break; -+ case 4 /*NetworkStatus::Establishing*/: -+ m_nextStatus = NetworkStatus::Establishing; -+ break; -+ case 5 /*NetworkStatus::Online*/: -+ m_nextStatus = NetworkStatus::Online; -+ break; -+ default: -+ kdDebug() << "Unrecognised status!" << endl; -+ Q_ASSERT( false ); -+ } -+ m_view->changeButton->setEnabled( true ); -+} -+ -+void TestService::changeButtonClicked() -+{ -+ m_view->changeButton->setEnabled( false ); -+ m_status = m_nextStatus; -+ m_service->setNetworkStatus( "test_net", ( int )m_status ); -+ m_view->statusLabel->setText( NetworkStatus::toString( m_status ) ); -+ m_view->statusLabel->setPaletteBackgroundColor( toQColor( m_status ) ); -+ setCaption( NetworkStatus::toString( m_status ) ); -+} -+ -+int TestService::establish( const QString & network ) -+{ -+ Q_UNUSED( network ); -+ m_status = NetworkStatus::Establishing; -+ m_service->setNetworkStatus( "test_net", (int)m_status ); -+ m_nextStatus = NetworkStatus::Online; -+ QTimer::singleShot( 5000, this, SLOT( slotStatusChange() ) ); -+ return (int)NetworkStatus::RequestAccepted; -+} -+ -+int TestService::shutdown( const QString & network ) -+{ -+ Q_UNUSED( network ); -+ m_status = NetworkStatus::ShuttingDown; -+ m_service->setNetworkStatus( "test_net", (int)m_status ); -+ m_nextStatus = NetworkStatus::Offline; -+ QTimer::singleShot( 5000, this, SLOT( slotStatusChange() ) ); -+ return (int)NetworkStatus::RequestAccepted; -+} -+ -+void TestService::simulateFailure() -+{ -+ m_status = NetworkStatus::OfflineFailed; -+ m_service->setNetworkStatus( "test_net", (int)m_status ); -+} -+ -+void TestService::simulateDisconnect() -+{ -+ m_status = NetworkStatus::OfflineDisconnected; -+ m_service->setNetworkStatus( "test_net", (int)m_status ); -+} -+ -+void TestService::slotStatusChange() -+{ -+ m_status = m_nextStatus; -+ m_service->setNetworkStatus( "test_net", (int)m_status ); -+} -+ -+QColor TestService::toQColor( NetworkStatus::Status st ) -+{ -+ QColor col; -+ switch ( st ) { -+ case NetworkStatus::NoNetworks: -+ col = Qt::darkGray; -+ break; -+ case NetworkStatus::Unreachable: -+ col = Qt::darkMagenta; -+ break; -+ case NetworkStatus::OfflineDisconnected: -+ col = Qt::blue; -+ break; -+ case NetworkStatus::OfflineFailed: -+ col = Qt::darkRed; -+ break; -+ case NetworkStatus::ShuttingDown: -+ col = Qt::darkYellow; -+ break; -+ case NetworkStatus::Offline: -+ col = Qt::blue; -+ break; -+ case NetworkStatus::Establishing: -+ col = Qt::yellow; -+ break; -+ case NetworkStatus::Online: -+ col = Qt::green; -+ break; -+ } -+ return col; -+} -+ -+static const char description[] = -+ I18N_NOOP("Test Service for Network Status kded module"); -+ -+static const char version[] = "v0.1"; -+ -+static KCmdLineOptions options[] = -+{ -+ KCmdLineLastOption -+}; -+ -+int main( int argc, char** argv ) -+{ -+ KAboutData about("KNetworkStatusTestService", I18N_NOOP("knetworkstatustestservice"), version, description, KAboutData::License_GPL, "(C) 2007 Will Stephenson", 0, 0, "wstephenson@kde.org"); -+ about.addAuthor( "Will Stephenson", 0, "wstephenson@kde.org" ); -+ KCmdLineArgs::init(argc, argv, &about); -+ KCmdLineArgs::addCmdLineOptions(options); -+ KApplication app; -+ -+ TestService * test = new TestService; -+ test->show(); -+ return app.exec(); -+} -+ -+#include "testservice.moc" -Index: networkstatus/.svn/text-base/testservice.h.svn-base -=================================================================== ---- /dev/null -+++ networkstatus/.svn/text-base/testservice.h.svn-base -@@ -0,0 +1,60 @@ -+/* This file is part of kdepim. -+ -+ Copyright (C) 2005,2007 Will Stephenson -+ -+ This program is free software; you can redistribute it and/or modify -+ it under the terms of the GNU General Public License as published by -+ the Free Software Foundation; either version 2 of the License, or -+ (at your option) any later version. -+ -+ This program is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ GNU General Public License for more details. -+ -+ You should have received a copy of the GNU General Public License -+ along with this program; if not, write to the Free Software -+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -+ -+ As a special exception, permission is given to link this program -+ with any edition of Qt, and distribute the resulting executable, -+ without including the source code for Qt in the source distribution. -+*/ -+ -+#ifndef _TEST_NETWORKSTATUS_SERVICE_H -+#define _TEST_NETWORKSTATUS_SERVICE_H -+ -+#include -+ -+#include "networkstatuscommon.h" -+ -+class NetworkStatusIface_stub; -+class TestServiceView; -+ -+class TestService : public KMainWindow { -+Q_OBJECT -+public: -+ TestService(); -+ virtual ~TestService(); -+ int status( const QString & network ); -+ int establish( const QString & network ); -+ int shutdown( const QString & network ); -+ void simulateFailure(); -+ void simulateDisconnect(); -+protected slots: -+ void changeComboActivated( int index ); -+ void registeredToDCOP( const QCString& appId ); -+ -+ void changeButtonClicked(); -+ -+ void slotStatusChange(); -+private: -+ void registerService(); -+ static QColor toQColor( NetworkStatus::Status ); -+ NetworkStatusIface_stub * m_service; -+ NetworkStatus::Status m_status; -+ NetworkStatus::Status m_nextStatus; -+ TestServiceView * m_view; -+}; -+ -+#endif -Index: networkstatus/.svn/text-base/testserviceview.ui.svn-base -=================================================================== ---- /dev/null -+++ networkstatus/.svn/text-base/testserviceview.ui.svn-base -@@ -0,0 +1,181 @@ -+ -+TestServiceView -+ -+ -+ TestServiceView -+ -+ -+ -+ 0 -+ 0 -+ 367 -+ 132 -+ -+ -+ -+ Form1 -+ -+ -+ -+ unnamed -+ -+ -+ -+ textLabel4 -+ -+ -+ <font size="+2"><b>Service for KDE 3 Offline Mode</b></font> -+ -+ -+ AlignVCenter -+ -+ -+ -+ -+ layout2 -+ -+ -+ -+ unnamed -+ -+ -+ -+ textLabel1 -+ -+ -+ Status: -+ -+ -+ -+ -+ statusLabel -+ -+ -+ -+ 0 -+ 255 -+ 0 -+ -+ -+ -+ StyledPanel -+ -+ -+ STATUS -+ -+ -+ AlignCenter -+ -+ -+ -+ -+ -+ -+ layout3 -+ -+ -+ -+ unnamed -+ -+ -+ -+ textLabel3 -+ -+ -+ Change to: -+ -+ -+ -+ -+ -+ Offline Disconnected -+ -+ -+ -+ -+ Offline Failed -+ -+ -+ -+ -+ Shutting Down -+ -+ -+ -+ -+ Offline -+ -+ -+ -+ -+ Establishing -+ -+ -+ -+ -+ Online -+ -+ -+ -+ changeCombo -+ -+ -+ -+ -+ -+ -+ layout1 -+ -+ -+ -+ unnamed -+ -+ -+ -+ spacer1 -+ -+ -+ Horizontal -+ -+ -+ Expanding -+ -+ -+ -+ 51 -+ 20 -+ -+ -+ -+ -+ -+ changeButton -+ -+ -+ Do change -+ -+ -+ -+ -+ spacer2 -+ -+ -+ Horizontal -+ -+ -+ Expanding -+ -+ -+ -+ 41 -+ 20 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -Index: networkstatus/testclient2.cpp -=================================================================== ---- /dev/null -+++ networkstatus/testclient2.cpp -@@ -0,0 +1,222 @@ -+/* This file is part of kdepim. -+ Copyright (C) 2007 Will Stephenson -+ -+ This program is free software; you can redistribute it and/or modify -+ it under the terms of the GNU General Public License version 2 -+ as published by the Free Software Foundation. -+ -+ This program is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ GNU General Public License for more details. -+ -+ You should have received a copy of the GNU General Public License -+ along with this program; if not, write to the Free Software -+ Foundation, Inc., 51 Franklin Street, Fifth Floor, -+ Boston, MA 02110-1301, USA. -+ -+ As a special exception, permission is given to link this program -+ with any edition of Qt, and distribute the resulting executable, -+ without including the source code for Qt in the source distribution. -+*/ -+ -+#include -+#include -+#include -+ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+ -+#include -+#include -+ -+#include "testclientview.h" -+#include "testclient2.h" -+ -+TestClient::TestClient() -+ : KMainWindow( 0, "ktestnetworkstatus" ), -+ m_layout( new QVBox( 0, "layout" ) ), -+ m_status( AppDisconnected ) -+{ -+ m_view = new TestClientView( this ); -+ new StatusBarNetworkStatusIndicator( m_view, "statusindicator" ); -+ // tell the KMainWindow that this is indeed the main widget -+ setCentralWidget(m_view); -+ -+ networkStatusChanged( ConnectionManager::self()->status() ); -+ appDisconnected(); -+ -+ connect( ConnectionManager::self(), SIGNAL( statusChanged( NetworkStatus::Status ) ), SLOT( networkStatusChanged( NetworkStatus::Status ) ) ); -+ ConnectionManager::self()->registerConnectSlot( this, SLOT( doConnect() ) ); -+ ConnectionManager::self()->registerDisconnectSlot( this, SLOT( doDisconnect() ) ); -+ -+ connect( m_view->connectButton, SIGNAL( clicked() ), SLOT( connectButtonClicked() ) ); -+} -+ -+TestClient::~TestClient() -+{ -+} -+ -+void TestClient::networkStatusChanged( NetworkStatus::Status status ) -+{ -+ kdDebug() << k_funcinfo << endl; -+ kdDebug() << "Networking is now: " << NetworkStatus::toString( status ) << " (" << status << ")" << endl; -+ m_view->netStatusLabel->setText( NetworkStatus::toString( status ) ); -+ m_view->netStatusLabel->setPaletteBackgroundColor( toQColor( status ) ); -+} -+ -+void TestClient::doConnect() -+{ -+ Q_ASSERT( ConnectionManager::self()->status() == NetworkStatus::Online ); -+ if ( m_status != AppConnected ) { -+ appIsConnected(); -+ } -+} -+ -+void TestClient::doDisconnect() -+{ -+ Q_ASSERT( ConnectionManager::self()->status() != NetworkStatus::Online ); -+ if ( m_status == AppConnected ) { -+ appDisconnected(); -+ } -+} -+ -+void TestClient::connectButtonClicked() -+{ -+ kdDebug() << k_funcinfo << endl; -+ if ( m_status == AppDisconnected ) { -+ switch ( ConnectionManager::self()->status() ) -+ { -+ case NetworkStatus::NoNetworks: -+ case NetworkStatus::Online: -+ appIsConnected(); -+ break; -+ default: -+ appWaiting(); -+ break; -+ } -+ } -+ else if ( m_status == AppConnected || m_status == AppWaitingForConnect ) { -+ appDisconnected(); -+ } -+} -+ -+void TestClient::appWaiting() -+{ -+ kdDebug() << k_funcinfo << endl; -+ //m_status = AppWaitingForConnect; -+ m_view->appStatusLabel->setText( "Waiting" ); -+} -+ -+void TestClient::appIsConnected() -+{ -+ kdDebug() << k_funcinfo << endl; -+ m_view->connectButton->setEnabled( true ); -+ m_view->connectButton->setText( "Disconnect" ); -+ m_view->appStatusLabel->setText( "Connected" ); -+ m_status = AppConnected; -+} -+ -+void TestClient::appEstablishing() -+{ -+ kdDebug() << k_funcinfo << endl; -+ m_view->netStatusLabel->setText( "Establishing" ); -+ m_view->connectButton->setEnabled( false ); -+} -+ -+void TestClient::appDisestablishing( ) -+{ -+ kdDebug() << k_funcinfo << endl; -+ m_view->connectButton->setEnabled( false ); -+ m_view->appStatusLabel->setText( "Disconnected" ); -+} -+ -+void TestClient::appDisconnected( ) -+{ -+ kdDebug() << k_funcinfo << endl; -+ m_view->connectButton->setEnabled( true ); -+ m_view->connectButton->setText( "Start Connect" ); -+ m_view->appStatusLabel->setText( "Disconnected" ); -+ m_status = AppDisconnected; -+} -+ -+QColor TestClient::toQColor( NetworkStatus::Status st ) -+{ -+ QColor col; -+ switch ( st ) { -+ case NetworkStatus::NoNetworks: -+ col = Qt::darkGray; -+ break; -+ case NetworkStatus::Unreachable: -+ col = Qt::darkMagenta; -+ break; -+ case NetworkStatus::OfflineDisconnected: -+ col = Qt::blue; -+ break; -+ case NetworkStatus::OfflineFailed: -+ col = Qt::darkRed; -+ break; -+ case NetworkStatus::ShuttingDown: -+ col = Qt::darkYellow; -+ break; -+ case NetworkStatus::Offline: -+ col = Qt::blue; -+ break; -+ case NetworkStatus::Establishing: -+ col = Qt::yellow; -+ break; -+ case NetworkStatus::Online: -+ col = Qt::green; -+ break; -+ } -+ return col; -+} -+//main -+static const char description[] = -+ I18N_NOOP("Test Client for Network Status kded module"); -+ -+static const char version[] = "v0.1"; -+ -+static KCmdLineOptions options[] = -+{ -+ KCmdLineLastOption -+}; -+ -+int main(int argc, char **argv) -+{ -+ KAboutData about("KNetworkStatusTestClient", I18N_NOOP("knetworkstatustestclient"), version, description, KAboutData::License_GPL, "(C) 2007 Will Stephenson", 0, 0, "wstephenson@kde.org"); -+ about.addAuthor( "Will Stephenson", 0, "wstephenson@kde.org" ); -+ KCmdLineArgs::init(argc, argv, &about); -+ KCmdLineArgs::addCmdLineOptions(options); -+ KApplication app; -+ -+ // register ourselves as a dcop client -+ app.dcopClient()->registerAs(app.name(), false); -+ -+ KCmdLineArgs *args = KCmdLineArgs::parsedArgs(); -+ if (args->count() == 0) -+ { -+ TestClient *widget = new TestClient; -+ widget->show(); -+ } -+ else -+ { -+ int i = 0; -+ for (; i < args->count(); i++) -+ { -+ TestClient *widget = new TestClient; -+ widget->show(); -+ } -+ } -+ args->clear(); -+ -+ return app.exec(); -+} -+ -+#include "testclient2.moc" -+ -Index: networkstatus/testclient2.h -=================================================================== ---- /dev/null -+++ networkstatus/testclient2.h -@@ -0,0 +1,82 @@ -+/* This file is part of kdepim. -+ -+ Copyright (C) 2007 Will Stephenson -+ -+ This program is free software; you can redistribute it and/or modify -+ it under the terms of the GNU General Public License as published by -+ the Free Software Foundation; either version 2 of the License, or -+ (at your option) any later version. -+ -+ This program is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ GNU General Public License for more details. -+ -+ You should have received a copy of the GNU General Public License -+ along with this program; if not, write to the Free Software -+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -+ -+ As a special exception, permission is given to link this program -+ with any edition of Qt, and distribute the resulting executable, -+ without including the source code for Qt in the source distribution. -+*/ -+ -+#ifndef KTESTNETWORKSTATUS_H -+#define KTESTNETWORKSTATUS_H -+ -+#ifdef HAVE_CONFIG_H -+#include -+#endif -+ -+#include -+#include -+#include -+#include -+ -+#include "networkstatusiface_stub.h" -+ -+class TestClientView; -+ -+/** -+ * Test client that uses a ConnectionManager to change its state -+ * -+ * @short Main window class -+ * @author Will Stephenson -+ * @version 0.1 -+ */ -+class TestClient : public KMainWindow -+{ -+Q_OBJECT -+public: -+ enum AppStatus{ AppDisconnected, AppWaitingForConnect, AppConnected }; -+ /** -+ * Default Constructor -+ */ -+ TestClient(); -+ -+ /** -+ * Default Destructor -+ */ -+ virtual ~TestClient(); -+ -+private slots: -+ void networkStatusChanged( NetworkStatus::Status status ); -+ void connectButtonClicked(); -+ void doConnect(); -+ void doDisconnect(); -+private: -+ void appWaiting(); -+ void appEstablishing(); -+ void appIsConnected(); -+ void appDisestablishing(); -+ void appDisconnected(); -+ static QColor toQColor( NetworkStatus::Status ); -+private: -+ QHBox * m_layout; -+ NetworkStatusIface_stub *m_service; -+ TestClientView *m_view; -+ AppStatus m_status; // this represents the app's status not the network's status -+}; -+ -+#endif // KTESTNETWORKSTATUS_H -+ -Index: networkstatus/testclient.cpp -=================================================================== ---- /dev/null -+++ networkstatus/testclient.cpp -@@ -0,0 +1,234 @@ -+/* This file is part of kdepim. -+ Copyright (C) 2007 Will Stephenson -+ -+ This program is free software; you can redistribute it and/or modify -+ it under the terms of the GNU General Public License version 2 -+ as published by the Free Software Foundation. -+ -+ This program is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ GNU General Public License for more details. -+ -+ You should have received a copy of the GNU General Public License -+ along with this program; if not, write to the Free Software -+ Foundation, Inc., 51 Franklin Street, Fifth Floor, -+ Boston, MA 02110-1301, USA. -+ -+ As a special exception, permission is given to link this program -+ with any edition of Qt, and distribute the resulting executable, -+ without including the source code for Qt in the source distribution. -+*/ -+ -+#include -+#include -+ -+ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+ -+#include "connectionmanager.h" -+#include "testclientview.h" -+#include "testclient.h" -+ -+TestClient::TestClient() -+ : KMainWindow( 0, "ktestnetworkstatus" ), -+ m_view(new TestClientView(this)), -+ m_status( AppDisconnected ) -+{ -+ // tell the KMainWindow that this is indeed the main widget -+ setCentralWidget(m_view); -+ -+ networkStatusChanged( ConnectionManager::self()->status() ); -+ appDisconnected(); -+ -+ connect( ConnectionManager::self(), SIGNAL( statusChanged( NetworkStatus::Status ) ), SLOT( networkStatusChanged( NetworkStatus::Status ) ) ); -+ -+ connect( m_view->connectButton, SIGNAL( toggled( bool ) ), SLOT( connectButtonToggled( bool ) ) ); -+} -+ -+TestClient::~TestClient() -+{ -+} -+ -+void TestClient::networkStatusChanged( NetworkStatus::Status status ) -+{ -+ kdDebug() << k_funcinfo << endl; -+//enum EnumStatus { NoNetworks = 1, Unreachable, OfflineDisconnected, OfflineFailed, ShuttingDown -+// , Offline, Establishing, Online }; -+ kdDebug() << "Networking is now: " << NetworkStatus::toString( status ) << " (" << status << ")" << endl; -+ m_view->netStatusLabel->setText( NetworkStatus::toString( status ) ); -+ m_view->netStatusLabel->setPaletteBackgroundColor( toQColor( status ) ); -+ switch ( status ) { -+ case NetworkStatus::NoNetworks: -+ break; -+ case NetworkStatus::Unreachable: -+ break; -+ case NetworkStatus::OfflineDisconnected: -+ break; -+ case NetworkStatus::OfflineFailed: -+ break; -+ case NetworkStatus::ShuttingDown: -+ if ( m_status == AppConnected ) { -+ appDisestablishing(); -+ } -+ break; -+ case NetworkStatus::Offline: -+ if ( m_status == AppConnected ) { -+ appDisconnected(); -+ } -+ break; -+ case NetworkStatus::Establishing: -+ if ( m_status == AppWaitingForConnect ) -+ appEstablishing(); -+ else if ( m_status == AppConnected ) -+ appDisconnected(); -+ break; -+ case NetworkStatus::Online: -+ if ( m_status == AppWaitingForConnect ) -+ appIsConnected(); -+ break; -+ default: -+ m_view->netStatusLabel->setText( "Unrecognised status code!" ); -+ } -+} -+ -+void TestClient::connectButtonToggled( bool on ) -+{ -+ kdDebug() << k_funcinfo << endl; -+ if ( on && m_status == AppDisconnected ) { -+ switch ( ConnectionManager::self()->status() ) -+ { -+ case NetworkStatus::NoNetworks: -+ case NetworkStatus::Online: -+ appIsConnected(); -+ break; -+ default: -+ appWaiting(); -+ break; -+ } -+ } -+ else if ( !on && m_status == AppConnected ) { -+ appDisconnected(); -+ } -+} -+ -+void TestClient::appWaiting() -+{ -+ kdDebug() << k_funcinfo << endl; -+ m_status = AppWaitingForConnect; -+ m_view->appStatusLabel->setText( "Waiting" ); -+} -+ -+void TestClient::appIsConnected() -+{ -+ kdDebug() << k_funcinfo << endl; -+ m_view->connectButton->setEnabled( true ); -+ m_view->connectButton->setText( "Disconnect" ); -+ m_view->appStatusLabel->setText( "Connected" ); -+ m_status = AppConnected; -+} -+ -+void TestClient::appEstablishing() -+{ -+ kdDebug() << k_funcinfo << endl; -+ m_view->netStatusLabel->setText( "Establishing" ); -+ m_view->connectButton->setEnabled( false ); -+} -+ -+void TestClient::appDisestablishing( ) -+{ -+ kdDebug() << k_funcinfo << endl; -+ m_view->connectButton->setEnabled( false ); -+ m_view->appStatusLabel->setText( "Disconnected" ); -+} -+ -+void TestClient::appDisconnected( ) -+{ -+ kdDebug() << k_funcinfo << endl; -+ m_view->connectButton->setEnabled( true ); -+ m_view->connectButton->setText( "Start Connect" ); -+ m_view->appStatusLabel->setText( "Disconnected" ); -+ m_status = AppDisconnected; -+} -+ -+QColor TestClient::toQColor( NetworkStatus::Status st ) -+{ -+ QColor col; -+ switch ( st ) { -+ case NetworkStatus::NoNetworks: -+ col = Qt::darkGray; -+ break; -+ case NetworkStatus::Unreachable: -+ col = Qt::darkMagenta; -+ break; -+ case NetworkStatus::OfflineDisconnected: -+ col = Qt::blue; -+ break; -+ case NetworkStatus::OfflineFailed: -+ col = Qt::darkRed; -+ break; -+ case NetworkStatus::ShuttingDown: -+ col = Qt::darkYellow; -+ break; -+ case NetworkStatus::Offline: -+ col = Qt::blue; -+ break; -+ case NetworkStatus::Establishing: -+ col = Qt::yellow; -+ break; -+ case NetworkStatus::Online: -+ col = Qt::green; -+ break; -+ } -+ return col; -+} -+//main -+static const char description[] = -+ I18N_NOOP("Test Client for Network Status kded module"); -+ -+static const char version[] = "v0.1"; -+ -+static KCmdLineOptions options[] = -+{ -+ KCmdLineLastOption -+}; -+ -+int main(int argc, char **argv) -+{ -+ KAboutData about("KNetworkStatusTestClient", I18N_NOOP("knetworkstatustestclient"), version, description, KAboutData::License_GPL, "(C) 2007 Will Stephenson", 0, 0, "wstephenson@kde.org"); -+ about.addAuthor( "Will Stephenson", 0, "wstephenson@kde.org" ); -+ KCmdLineArgs::init(argc, argv, &about); -+ KCmdLineArgs::addCmdLineOptions(options); -+ KApplication app; -+ -+ // register ourselves as a dcop client -+ app.dcopClient()->registerAs(app.name(), false); -+ -+ KCmdLineArgs *args = KCmdLineArgs::parsedArgs(); -+ if (args->count() == 0) -+ { -+ TestClient *widget = new TestClient; -+ widget->show(); -+ } -+ else -+ { -+ int i = 0; -+ for (; i < args->count(); i++) -+ { -+ TestClient *widget = new TestClient; -+ widget->show(); -+ } -+ } -+ args->clear(); -+ -+ return app.exec(); -+} -+ -+#include "testclient.moc" -+ -Index: networkstatus/testclient.h -=================================================================== ---- /dev/null -+++ networkstatus/testclient.h -@@ -0,0 +1,80 @@ -+/* This file is part of kdepim. -+ -+ Copyright (C) 2007 Will Stephenson -+ -+ This program is free software; you can redistribute it and/or modify -+ it under the terms of the GNU General Public License as published by -+ the Free Software Foundation; either version 2 of the License, or -+ (at your option) any later version. -+ -+ This program is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ GNU General Public License for more details. -+ -+ You should have received a copy of the GNU General Public License -+ along with this program; if not, write to the Free Software -+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -+ -+ As a special exception, permission is given to link this program -+ with any edition of Qt, and distribute the resulting executable, -+ without including the source code for Qt in the source distribution. -+*/ -+ -+#ifndef KTESTNETWORKSTATUS_H -+#define KTESTNETWORKSTATUS_H -+ -+#ifdef HAVE_CONFIG_H -+#include -+#endif -+ -+#include -+#include -+#include -+#include -+ -+#include "networkstatusiface_stub.h" -+ -+class TestClientView; -+ -+/** -+ * This class serves as the main window for ktestnetworkstatus. It handles the -+ * menus, toolbars, and status bars. -+ * -+ * @short Main window class -+ * @author Will Stephenson -+ * @version 0.1 -+ */ -+class TestClient : public KMainWindow -+{ -+Q_OBJECT -+public: -+ enum AppStatus{ AppDisconnected, AppWaitingForConnect, AppConnected }; -+ /** -+ * Default Constructor -+ */ -+ TestClient(); -+ -+ /** -+ * Default Destructor -+ */ -+ virtual ~TestClient(); -+ -+private slots: -+ void networkStatusChanged( NetworkStatus::Status status ); -+ void connectButtonToggled( bool on ); -+private: -+ void appWaiting(); -+ void appEstablishing(); -+ void appIsConnected(); -+ void appDisestablishing(); -+ void appDisconnected(); -+ static QColor toQColor( NetworkStatus::Status ); -+private: -+ NetworkStatusIface_stub *m_service; -+ TestClientView *m_view; -+ AppStatus m_status; // this represents the app's status not the network's status -+}; -+ -+#endif // KTESTNETWORKSTATUS_H -+ -Index: networkstatus/testclientview.ui -=================================================================== ---- /dev/null -+++ networkstatus/testclientview.ui -@@ -0,0 +1,177 @@ -+ -+TestClientView -+ -+ -+ TestClientView -+ -+ -+ -+ 0 -+ 0 -+ 356 -+ 127 -+ -+ -+ -+ Form1 -+ -+ -+ -+ unnamed -+ -+ -+ -+ textLabel4 -+ -+ -+ -+ 5 -+ 5 -+ 0 -+ 0 -+ -+ -+ -+ <font size="+2"><b>Client for KDE 3 Offline Mode</b></font> -+ -+ -+ AlignVCenter -+ -+ -+ -+ -+ layout1 -+ -+ -+ -+ unnamed -+ -+ -+ -+ textLabel1 -+ -+ -+ Network status: -+ -+ -+ -+ -+ netStatusLabel -+ -+ -+ -+ 0 -+ 255 -+ 0 -+ -+ -+ -+ Panel -+ -+ -+ STATUS -+ -+ -+ AlignCenter -+ -+ -+ -+ -+ -+ -+ layout1_2 -+ -+ -+ -+ unnamed -+ -+ -+ -+ textLabel1_2 -+ -+ -+ App status: -+ -+ -+ -+ -+ appStatusLabel -+ -+ -+ -+ 0 -+ 255 -+ 0 -+ -+ -+ -+ Panel -+ -+ -+ STATUS -+ -+ -+ AlignCenter -+ -+ -+ -+ -+ -+ -+ layout2 -+ -+ -+ -+ unnamed -+ -+ -+ -+ spacer1 -+ -+ -+ Horizontal -+ -+ -+ Expanding -+ -+ -+ -+ 31 -+ 20 -+ -+ -+ -+ -+ -+ connectButton -+ -+ -+ Start Connect -+ -+ -+ false -+ -+ -+ -+ -+ spacer2 -+ -+ -+ Horizontal -+ -+ -+ Expanding -+ -+ -+ -+ 61 -+ 20 -+ -+ -+ -+ -+ -+ -+ -+ -+ -Index: networkstatus/testservice.cpp -=================================================================== ---- /dev/null -+++ networkstatus/testservice.cpp -@@ -0,0 +1,219 @@ -+/* This file is part of kdepim. -+ Copyright (C) 2005,2007 Will Stephenson -+ -+ This program is free software; you can redistribute it and/or modify -+ it under the terms of the GNU General Public License version 2 -+ as published by the Free Software Foundation. -+ -+ This program is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ GNU General Public License for more details. -+ -+ You should have received a copy of the GNU General Public License -+ along with this program; if not, write to the Free Software -+ Foundation, Inc., 51 Franklin Street, Fifth Floor, -+ Boston, MA 02110-1301, USA. -+ -+ As a special exception, permission is given to link this program -+ with any edition of Qt, and distribute the resulting executable, -+ without including the source code for Qt in the source distribution. -+*/ -+ -+#include -+#include -+#include -+#include -+ -+#include -+#include -+#include -+#include -+#include -+#include -+ -+#include "testservice.h" -+#include "testserviceview.h" -+#include "networkstatusiface_stub.h" -+ -+TestService::TestService() : KMainWindow( 0, "testservice" ), -+ m_service( new NetworkStatusIface_stub( "kded", "networkstatus" ) ), -+ m_status ( NetworkStatus::Offline ), -+ m_nextStatus( NetworkStatus::OfflineDisconnected ), -+ m_view( new TestServiceView( this ) ) -+{ -+ setCentralWidget( m_view ); -+ kapp->dcopClient()->registerAs("testservice" ); -+ -+ connect( m_view->changeCombo, SIGNAL( activated( int ) ), SLOT( changeComboActivated( int ) ) ); -+ connect( m_view->changeButton, SIGNAL( clicked() ), SLOT( changeButtonClicked() ) ); -+ -+ connect( kapp->dcopClient(), SIGNAL( applicationRegistered( const QCString& ) ), this, SLOT( registeredToDCOP( const QCString& ) ) ); -+ kapp->dcopClient()->setNotifications( true ); -+ -+ m_view->statusLabel->setText( NetworkStatus::toString( m_status ) ); -+ m_view->statusLabel->setPaletteBackgroundColor( toQColor( m_status ) ); -+ setCaption( NetworkStatus::toString( m_status ) ); -+ -+ registerService(); -+} -+ -+TestService::~TestService() -+{ -+ delete m_service; -+ delete m_view; -+} -+ -+void TestService::registerService() -+{ -+ NetworkStatus::Properties nsp; -+ nsp.name = "test_net"; -+ nsp.service = kapp->dcopClient()->appId(); -+ nsp.status = m_status; -+ m_service->registerNetwork( nsp ); -+} -+ -+void TestService::registeredToDCOP( const QCString & appId ) -+{ -+ if ( appId == "kded" ) -+ registerService(); -+} -+ -+int TestService::status( const QString & network ) -+{ -+ Q_UNUSED( network ); -+ return (int)m_status; -+} -+ -+void TestService::changeComboActivated( int index ) -+{ -+ switch ( index ) { -+ case 0 /*NetworkStatus::OfflineDisconnected*/: -+ m_nextStatus = NetworkStatus::OfflineDisconnected; -+ break; -+ case 1 /*NetworkStatus::OfflineFailed*/: -+ m_nextStatus = NetworkStatus::OfflineFailed; -+ break; -+ case 2 /*NetworkStatus::ShuttingDown*/: -+ m_nextStatus = NetworkStatus::ShuttingDown; -+ break; -+ case 3 /*NetworkStatus::Offline*/: -+ m_nextStatus = NetworkStatus::Offline; -+ break; -+ case 4 /*NetworkStatus::Establishing*/: -+ m_nextStatus = NetworkStatus::Establishing; -+ break; -+ case 5 /*NetworkStatus::Online*/: -+ m_nextStatus = NetworkStatus::Online; -+ break; -+ default: -+ kdDebug() << "Unrecognised status!" << endl; -+ Q_ASSERT( false ); -+ } -+ m_view->changeButton->setEnabled( true ); -+} -+ -+void TestService::changeButtonClicked() -+{ -+ m_view->changeButton->setEnabled( false ); -+ m_status = m_nextStatus; -+ m_service->setNetworkStatus( "test_net", ( int )m_status ); -+ m_view->statusLabel->setText( NetworkStatus::toString( m_status ) ); -+ m_view->statusLabel->setPaletteBackgroundColor( toQColor( m_status ) ); -+ setCaption( NetworkStatus::toString( m_status ) ); -+} -+ -+int TestService::establish( const QString & network ) -+{ -+ Q_UNUSED( network ); -+ m_status = NetworkStatus::Establishing; -+ m_service->setNetworkStatus( "test_net", (int)m_status ); -+ m_nextStatus = NetworkStatus::Online; -+ QTimer::singleShot( 5000, this, SLOT( slotStatusChange() ) ); -+ return (int)NetworkStatus::RequestAccepted; -+} -+ -+int TestService::shutdown( const QString & network ) -+{ -+ Q_UNUSED( network ); -+ m_status = NetworkStatus::ShuttingDown; -+ m_service->setNetworkStatus( "test_net", (int)m_status ); -+ m_nextStatus = NetworkStatus::Offline; -+ QTimer::singleShot( 5000, this, SLOT( slotStatusChange() ) ); -+ return (int)NetworkStatus::RequestAccepted; -+} -+ -+void TestService::simulateFailure() -+{ -+ m_status = NetworkStatus::OfflineFailed; -+ m_service->setNetworkStatus( "test_net", (int)m_status ); -+} -+ -+void TestService::simulateDisconnect() -+{ -+ m_status = NetworkStatus::OfflineDisconnected; -+ m_service->setNetworkStatus( "test_net", (int)m_status ); -+} -+ -+void TestService::slotStatusChange() -+{ -+ m_status = m_nextStatus; -+ m_service->setNetworkStatus( "test_net", (int)m_status ); -+} -+ -+QColor TestService::toQColor( NetworkStatus::Status st ) -+{ -+ QColor col; -+ switch ( st ) { -+ case NetworkStatus::NoNetworks: -+ col = Qt::darkGray; -+ break; -+ case NetworkStatus::Unreachable: -+ col = Qt::darkMagenta; -+ break; -+ case NetworkStatus::OfflineDisconnected: -+ col = Qt::blue; -+ break; -+ case NetworkStatus::OfflineFailed: -+ col = Qt::darkRed; -+ break; -+ case NetworkStatus::ShuttingDown: -+ col = Qt::darkYellow; -+ break; -+ case NetworkStatus::Offline: -+ col = Qt::blue; -+ break; -+ case NetworkStatus::Establishing: -+ col = Qt::yellow; -+ break; -+ case NetworkStatus::Online: -+ col = Qt::green; -+ break; -+ } -+ return col; -+} -+ -+static const char description[] = -+ I18N_NOOP("Test Service for Network Status kded module"); -+ -+static const char version[] = "v0.1"; -+ -+static KCmdLineOptions options[] = -+{ -+ KCmdLineLastOption -+}; -+ -+int main( int argc, char** argv ) -+{ -+ KAboutData about("KNetworkStatusTestService", I18N_NOOP("knetworkstatustestservice"), version, description, KAboutData::License_GPL, "(C) 2007 Will Stephenson", 0, 0, "wstephenson@kde.org"); -+ about.addAuthor( "Will Stephenson", 0, "wstephenson@kde.org" ); -+ KCmdLineArgs::init(argc, argv, &about); -+ KCmdLineArgs::addCmdLineOptions(options); -+ KApplication app; -+ -+ TestService * test = new TestService; -+ test->show(); -+ return app.exec(); -+} -+ -+#include "testservice.moc" -Index: networkstatus/testservice.h -=================================================================== ---- /dev/null -+++ networkstatus/testservice.h -@@ -0,0 +1,60 @@ -+/* This file is part of kdepim. -+ -+ Copyright (C) 2005,2007 Will Stephenson -+ -+ This program is free software; you can redistribute it and/or modify -+ it under the terms of the GNU General Public License as published by -+ the Free Software Foundation; either version 2 of the License, or -+ (at your option) any later version. -+ -+ This program is distributed in the hope that it will be useful, -+ but WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ GNU General Public License for more details. -+ -+ You should have received a copy of the GNU General Public License -+ along with this program; if not, write to the Free Software -+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -+ -+ As a special exception, permission is given to link this program -+ with any edition of Qt, and distribute the resulting executable, -+ without including the source code for Qt in the source distribution. -+*/ -+ -+#ifndef _TEST_NETWORKSTATUS_SERVICE_H -+#define _TEST_NETWORKSTATUS_SERVICE_H -+ -+#include -+ -+#include "networkstatuscommon.h" -+ -+class NetworkStatusIface_stub; -+class TestServiceView; -+ -+class TestService : public KMainWindow { -+Q_OBJECT -+public: -+ TestService(); -+ virtual ~TestService(); -+ int status( const QString & network ); -+ int establish( const QString & network ); -+ int shutdown( const QString & network ); -+ void simulateFailure(); -+ void simulateDisconnect(); -+protected slots: -+ void changeComboActivated( int index ); -+ void registeredToDCOP( const QCString& appId ); -+ -+ void changeButtonClicked(); -+ -+ void slotStatusChange(); -+private: -+ void registerService(); -+ static QColor toQColor( NetworkStatus::Status ); -+ NetworkStatusIface_stub * m_service; -+ NetworkStatus::Status m_status; -+ NetworkStatus::Status m_nextStatus; -+ TestServiceView * m_view; -+}; -+ -+#endif -Index: networkstatus/testserviceview.ui -=================================================================== ---- /dev/null -+++ networkstatus/testserviceview.ui -@@ -0,0 +1,181 @@ -+ -+TestServiceView -+ -+ -+ TestServiceView -+ -+ -+ -+ 0 -+ 0 -+ 367 -+ 132 -+ -+ -+ -+ Form1 -+ -+ -+ -+ unnamed -+ -+ -+ -+ textLabel4 -+ -+ -+ <font size="+2"><b>Service for KDE 3 Offline Mode</b></font> -+ -+ -+ AlignVCenter -+ -+ -+ -+ -+ layout2 -+ -+ -+ -+ unnamed -+ -+ -+ -+ textLabel1 -+ -+ -+ Status: -+ -+ -+ -+ -+ statusLabel -+ -+ -+ -+ 0 -+ 255 -+ 0 -+ -+ -+ -+ StyledPanel -+ -+ -+ STATUS -+ -+ -+ AlignCenter -+ -+ -+ -+ -+ -+ -+ layout3 -+ -+ -+ -+ unnamed -+ -+ -+ -+ textLabel3 -+ -+ -+ Change to: -+ -+ -+ -+ -+ -+ Offline Disconnected -+ -+ -+ -+ -+ Offline Failed -+ -+ -+ -+ -+ Shutting Down -+ -+ -+ -+ -+ Offline -+ -+ -+ -+ -+ Establishing -+ -+ -+ -+ -+ Online -+ -+ -+ -+ changeCombo -+ -+ -+ -+ -+ -+ -+ layout1 -+ -+ -+ -+ unnamed -+ -+ -+ -+ spacer1 -+ -+ -+ Horizontal -+ -+ -+ Expanding -+ -+ -+ -+ 51 -+ 20 -+ -+ -+ -+ -+ -+ changeButton -+ -+ -+ Do change -+ -+ -+ -+ -+ spacer2 -+ -+ -+ Horizontal -+ -+ -+ Expanding -+ -+ -+ -+ 41 -+ 20 -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ diff --git a/opensuse/tdelibs/no-debug-by-default.diff b/opensuse/tdelibs/no-debug-by-default.diff deleted file mode 100644 index 5b1440970..000000000 --- a/opensuse/tdelibs/no-debug-by-default.diff +++ /dev/null @@ -1,158 +0,0 @@ -Index: kdecore/kdebug.cpp -=================================================================== ---- kdecore/kdebug.cpp.orig -+++ kdecore/kdebug.cpp -@@ -170,7 +170,7 @@ static KStaticDeleter pcd - static KStaticDeleter dcopsd; - static KDebugDCOPIface* kDebugDCOPIface = 0; - --static void kDebugBackend( unsigned short nLevel, unsigned int nArea, const char *data) -+static void kDebugInitBackend(unsigned int nArea) - { - if ( !kDebug_data ) - { -@@ -205,40 +205,46 @@ static void kDebugBackend( unsigned shor - if ( KGlobal::_instance ) - kDebug_data->aAreaName = KGlobal::instance()->instanceName(); - } -+} - -- int nPriority = 0; -- QString aCaption; -- -- /* Determine output */ -+static short kDebugAreaOutput(unsigned short nLevel, unsigned int nArea) -+{ -+ kDebugInitBackend (nArea); - -+ /* Determine output */ - QString key; - switch( nLevel ) - { - case KDEBUG_INFO: - key = "InfoOutput"; -- aCaption = "Info"; -- nPriority = LOG_INFO; - break; - case KDEBUG_WARN: - key = "WarnOutput"; -- aCaption = "Warning"; -- nPriority = LOG_WARNING; - break; - case KDEBUG_FATAL: - key = "FatalOutput"; -- aCaption = "Fatal Error"; -- nPriority = LOG_CRIT; - break; - case KDEBUG_ERROR: - default: - /* Programmer error, use "Error" as default */ - key = "ErrorOutput"; -- aCaption = "Error"; -- nPriority = LOG_ERR; - break; - } - -- short nOutput = kDebug_data->config ? kDebug_data->config->readNumEntry(key, 2) : 2; -+ return kDebug_data->config ? kDebug_data->config->readNumEntry(key, 4) : 4; -+} -+ -+ -+bool kDebugAreaEnabled(unsigned short nLevel, unsigned int nArea) -+{ -+ return kDebugAreaOutput(nLevel, nArea) != 4; -+} -+ -+static void kDebugBackend( unsigned short nLevel, unsigned int nArea, const char *data) -+{ -+ kDebugInitBackend (nArea); -+ -+ short nOutput = kDebugAreaOutput(nLevel, nArea); - - // If the application doesn't have a QApplication object it can't use - // a messagebox. -@@ -247,6 +253,32 @@ static void kDebugBackend( unsigned shor - else if ( nOutput == 4 && nLevel != KDEBUG_FATAL ) - return; - -+ int nPriority = 0; -+ QString aCaption; -+ switch( nLevel ) -+ { -+ case KDEBUG_INFO: -+ aCaption = "Info"; -+ nPriority = LOG_INFO; -+ break; -+ case KDEBUG_WARN: -+ aCaption = "Warning"; -+ nPriority = LOG_WARNING; -+ break; -+ case KDEBUG_FATAL: -+ aCaption = "Fatal Error"; -+ nPriority = LOG_CRIT; -+ break; -+ case KDEBUG_ERROR: -+ default: -+ /* Programmer error, use "Error" as default */ -+ aCaption = "Error"; -+ nPriority = LOG_ERR; -+ break; -+ } -+ -+ -+ - const int BUFSIZE = 4096; - char buf[BUFSIZE]; - if ( !kDebug_data->aAreaName.isEmpty() ) { -@@ -314,13 +346,25 @@ static void kDebugBackend( unsigned shor - } - - kdbgstream &perror( kdbgstream &s) { return s << QString::fromLocal8Bit(strerror(errno)); } --kdbgstream kdDebug(int area) { return kdbgstream(area, KDEBUG_INFO); } --kdbgstream kdDebug(bool cond, int area) { if (cond) return kdbgstream(area, KDEBUG_INFO); else return kdbgstream(0, 0, false); } -+kdbgstream kdDebug(int area) { return kdbgstream(area, KDEBUG_INFO, kDebugAreaEnabled(KDEBUG_INFO, area)); } -+kdbgstream kdDebug(bool cond, int area) { if (cond) return kdbgstream(area, KDEBUG_INFO, kDebugAreaEnabled(KDEBUG_INFO, area)); else return kdbgstream(0, 0, false); } - - kdbgstream kdError(int area) { return kdbgstream("ERROR: ", area, KDEBUG_ERROR); } - kdbgstream kdError(bool cond, int area) { if (cond) return kdbgstream("ERROR: ", area, KDEBUG_ERROR); else return kdbgstream(0,0,false); } --kdbgstream kdWarning(int area) { return kdbgstream("WARNING: ", area, KDEBUG_WARN); } --kdbgstream kdWarning(bool cond, int area) { if (cond) return kdbgstream("WARNING: ", area, KDEBUG_WARN); else return kdbgstream(0,0,false); } -+ -+kdbgstream kdWarning(int area) -+{ -+ return kdbgstream("WARNING: ", area, KDEBUG_WARN, kDebugAreaEnabled(KDEBUG_WARN, area)); -+} -+ -+kdbgstream kdWarning(bool cond, int area) -+{ -+ if (cond) -+ return kdbgstream("WARNING: ", area, KDEBUG_WARN, kDebugAreaEnabled(KDEBUG_WARN, area)); -+ else -+ return kdbgstream(0,0,false); -+} -+ - kdbgstream kdFatal(int area) { return kdbgstream("FATAL: ", area, KDEBUG_FATAL); } - kdbgstream kdFatal(bool cond, int area) { if (cond) return kdbgstream("FATAL: ", area, KDEBUG_FATAL); else return kdbgstream(0,0,false); } - -@@ -331,9 +375,10 @@ kdbgstream::kdbgstream(kdbgstream &str) - } - - void kdbgstream::flush() { -- if (output.isEmpty() || !print) -+ if (output.isEmpty()) - return; -- kDebugBackend( level, area, output.local8Bit().data() ); -+ if (print) -+ kDebugBackend( level, area, output.local8Bit().data() ); - output = QString::null; - } - -@@ -349,7 +394,7 @@ kdbgstream &kdbgstream::form(const char - } - - kdbgstream::~kdbgstream() { -- if (!output.isEmpty()) { -+ if (print && !output.isEmpty()) { - fprintf(stderr, "ASSERT: debug output not ended with \\n\n"); - fprintf(stderr, "%s", kdBacktrace().latin1()); - *this << "\n"; diff --git a/opensuse/tdelibs/no-progress-for-beagle-status-query.diff b/opensuse/tdelibs/no-progress-for-beagle-status-query.diff deleted file mode 100644 index 4d9ae1a84..000000000 --- a/opensuse/tdelibs/no-progress-for-beagle-status-query.diff +++ /dev/null @@ -1,13 +0,0 @@ -Index: kio/kio/netaccess.cpp -=================================================================== ---- kio/kio/netaccess.cpp.orig -+++ kio/kio/netaccess.cpp -@@ -337,7 +337,7 @@ bool NetAccess::statInternal( const KURL - QWidget* window ) - { - bJobOK = true; // success unless further error occurs -- KIO::StatJob * job = KIO::stat( url, !url.isLocalFile() ); -+ KIO::StatJob * job = KIO::stat( url, !url.isLocalFile() && !url.url().startsWith("beagle:?") ); - job->setWindow (window); - job->setDetails( details ); - job->setSide( source ); diff --git a/opensuse/tdelibs/noauto-package.diff b/opensuse/tdelibs/noauto-package.diff deleted file mode 100644 index 9eec14ab3..000000000 --- a/opensuse/tdelibs/noauto-package.diff +++ /dev/null @@ -1,13 +0,0 @@ -Index: configure.in.in -=================================================================== ---- configure.in.in.orig -+++ configure.in.in -@@ -17,7 +17,7 @@ AC_CANONICAL_SYSTEM - AC_ARG_PROGRAM - - dnl Automake doc recommends to do this only here. (Janos) --AM_INIT_AUTOMAKE(@MODULENAME@, @VERSION@) dnl searches for some needed programs -+AM_INIT_AUTOMAKE("kdelibs", @VERSION@) dnl searches for some needed programs - - AC_PROG_INSTALL - diff --git a/opensuse/tdelibs/oom_score_adj.patch b/opensuse/tdelibs/oom_score_adj.patch deleted file mode 100644 index f7a929f3f..000000000 --- a/opensuse/tdelibs/oom_score_adj.patch +++ /dev/null @@ -1,36 +0,0 @@ -Index: kdelibs-3.5.10/kinit/start_kdeinit.c -=================================================================== ---- kdelibs-3.5.10.orig/kinit/start_kdeinit.c -+++ kdelibs-3.5.10/kinit/start_kdeinit.c -@@ -44,11 +44,30 @@ static int set_protection( pid_t pid, in - { - char buf[ 1024 ]; - int procfile; -+ struct stat st; -+ -+ /* Newer kernels (noticed in 2.6.36) */ -+ sprintf( buf, "/proc/%d/oom_score_adj", pid ); -+ if ( lstat (buf, &st) == 0) { -+ if( !enable ) { -+ /* Be paranoid and check that the pid we got from the pipe -+ belongs to this user. */ -+ if( st.st_uid != getuid()) -+ return 0; -+ } -+ procfile = open(buf, O_WRONLY); -+ if( enable ) -+ write( procfile, "-300", sizeof( "-300" )); -+ else -+ write( procfile, "0", sizeof( "0" )); -+ close( procfile ); -+ return 1; -+ } -+ - sprintf( buf, "/proc/%d/stat", pid ); - if( !enable ) { - /* Be paranoid and check that the pid we got from the pipe - belongs to this user. */ -- struct stat st; - if( lstat( buf, &st ) < 0 || st.st_uid != getuid()) - return 0; - } diff --git a/opensuse/tdelibs/patch-mimetype-iconnames.diff b/opensuse/tdelibs/patch-mimetype-iconnames.diff deleted file mode 100644 index 6874162ae..000000000 --- a/opensuse/tdelibs/patch-mimetype-iconnames.diff +++ /dev/null @@ -1,39 +0,0 @@ -Index: mimetypes/application/vnd.oasis.opendocument.formula.desktop -=================================================================== ---- mimetypes/application/vnd.oasis.opendocument.formula.desktop.orig -+++ mimetypes/application/vnd.oasis.opendocument.formula.desktop -@@ -2,7 +2,7 @@ - Type=MimeType - MimeType=application/vnd.oasis.opendocument.formula - Patterns=*.odf;*.ODF --Icon=formula -+Icon=kformula_kfo - Comment=OASIS OpenDocument Formula - Comment[af]=OASIS Oop Dokument formule - Comment[be]=Формула OASIS OpenDocument -Index: mimetypes/application/vnd.sun.xml.base.desktop -=================================================================== ---- mimetypes/application/vnd.sun.xml.base.desktop.orig -+++ mimetypes/application/vnd.sun.xml.base.desktop -@@ -67,7 +67,7 @@ Comment[vi]=CÆ¡ sở dữ liệu OpenOff - Comment[zh_CN]=OpenOffice.org æ•°æ®åº“ - Comment[zh_HK]=OpenOffice.org 資料庫 - Comment[zh_TW]=OpenOffice.org 資料庫 --Icon=spreadsheet -+Icon=database - Type=MimeType - Patterns=*.odb;*.ODB; - MimeType=application/vnd.sun.xml.base -Index: mimetypes/text/rtf.desktop -=================================================================== ---- mimetypes/text/rtf.desktop.orig -+++ mimetypes/text/rtf.desktop -@@ -77,7 +77,7 @@ Comment[wa]=Documint RTF - Comment[zh_CN]=RTF 文档 - Comment[zh_HK]=RTF 文件 - Comment[zh_TW]=RTF 文件 --Icon=wordprocessing -+Icon=rtf - Type=MimeType - Patterns=*.rtf;*.RTF; - [Property::X-KDE-text] diff --git a/opensuse/tdelibs/prefer_distribution_settings.dif b/opensuse/tdelibs/prefer_distribution_settings.dif deleted file mode 100644 index 655788807..000000000 --- a/opensuse/tdelibs/prefer_distribution_settings.dif +++ /dev/null @@ -1,13 +0,0 @@ -Index: kdecore/kstandarddirs.cpp -=================================================================== ---- kdecore/kstandarddirs.cpp.orig -+++ kdecore/kstandarddirs.cpp -@@ -1290,6 +1290,8 @@ void KStandardDirs::addKDEDefaults() - } - } - -+ kdedirList.append("/etc/opt/kde3"); -+ - #ifndef Q_OS_WIN //no default KDEDIR on win32 defined - kdedirList.append(KDEDIR); - #endif diff --git a/opensuse/tdelibs/printpreview.patch b/opensuse/tdelibs/printpreview.patch deleted file mode 100644 index ef3de21a4..000000000 --- a/opensuse/tdelibs/printpreview.patch +++ /dev/null @@ -1,14 +0,0 @@ -Index: kdeprint/kprintpreview.cpp -=================================================================== ---- kdeprint/kprintpreview.cpp.orig -+++ kdeprint/kprintpreview.cpp -@@ -108,6 +108,9 @@ static KLibFactory* componentFactory() - { - kdDebug(500) << "kdeprint: querying trader for 'application/postscript' service" << endl; - KLibFactory *factory(0); -+ factory = KLibLoader::self()->factory("libkghostviewpart"); -+ if( factory ) -+ return factory; - KTrader::OfferList offers = KTrader::self()->query(QString::fromLatin1("application/postscript"), QString::fromLatin1("KParts/ReadOnlyPart"), QString::null, QString::null); - for (KTrader::OfferList::ConstIterator it = offers.begin(); it != offers.end(); ++it) - { diff --git a/opensuse/tdelibs/r874968-ebay-crash.diff b/opensuse/tdelibs/r874968-ebay-crash.diff deleted file mode 100644 index 44dfb6eb4..000000000 --- a/opensuse/tdelibs/r874968-ebay-crash.diff +++ /dev/null @@ -1,24 +0,0 @@ -Index: khtml/rendering/table_layout.cpp -=================================================================== ---- khtml/rendering/table_layout.cpp.orig -+++ khtml/rendering/table_layout.cpp -@@ -297,7 +297,8 @@ void FixedTableLayout::layout() - #endif - for ( int i = 0; available > 0 && i < nEffCols; i++ ) { - if ( width[i].isPercent() ) { -- int w = base * width[i].value() / totalPercent; -+ // totalPercent may be 0 below if all %-width specifed are 0%. (#172557) -+ int w = totalPercent ? base * width[i].value() / totalPercent : 0; - available -= w; - calcWidth[i] = w; - } -@@ -313,7 +314,8 @@ void FixedTableLayout::layout() - - for ( int i = 0; available > 0 && i < nEffCols; i++ ) { - if ( width[i].isVariable() ) { -- int w = available / totalVariable; -+ // totalVariable may be 0 below if all the variable widths specified are 0. -+ int w = totalVariable ? available / totalVariable : 0; - available -= w; - calcWidth[i] = w; - totalVariable--; diff --git a/opensuse/tdelibs/rubberband-selection.diff b/opensuse/tdelibs/rubberband-selection.diff deleted file mode 100644 index d2b75f17c..000000000 --- a/opensuse/tdelibs/rubberband-selection.diff +++ /dev/null @@ -1,380 +0,0 @@ -Index: kdefx/kstyle.cpp -=================================================================== ---- kdefx/kstyle.cpp.orig -+++ kdefx/kstyle.cpp -@@ -154,6 +154,7 @@ struct KStylePrivate - bool menuAltKeyNavigation : 1; - bool menuDropShadow : 1; - bool sloppySubMenus : 1; -+ bool semiTransparentRubberband : 1; - int popupMenuDelay; - float menuOpacity; - -@@ -187,6 +188,7 @@ KStyle::KStyle( KStyleFlags flags, KStyl - d->menuAltKeyNavigation = settings.readBoolEntry("/KStyle/Settings/MenuAltKeyNavigation", true); - d->scrollablePopupmenus = settings.readBoolEntry("/KStyle/Settings/ScrollablePopupMenus", false); - d->menuDropShadow = settings.readBoolEntry("/KStyle/Settings/MenuDropShadow", false); -+ d->semiTransparentRubberband = settings.readBoolEntry("/KStyle/Settings/SemiTransparentRubberband", false); - d->menuHandler = NULL; - - if (useMenuTransparency) { -@@ -553,7 +555,57 @@ void KStyle::drawPrimitive( PrimitiveEle - else - // General handle, probably a kicker applet handle. - drawKStylePrimitive( KPE_GeneralHandle, p, widget, r, cg, flags, opt ); -- -+#if QT_VERSION >= 0x030300 -+#ifdef HAVE_XRENDER -+ } else if ( d->semiTransparentRubberband && pe == QStyle::PE_RubberBand ) { -+ QRect rect = r.normalize(); -+ QPoint point; -+ point = p->xForm( point ); -+ -+ static XRenderColor clr = { 0, 0, 0, 0 }; -+ static unsigned long fillColor = 0; -+ if ( fillColor != cg.highlight().rgb() ) { -+ fillColor = cg.highlight().rgb(); -+ -+ unsigned long color = fillColor << 8 | 0x40; -+ -+ int red = (color >> 24) & 0xff; -+ int green = (color >> 16) & 0xff; -+ int blue = (color >> 8) & 0xff; -+ int alpha = (color >> 0) & 0xff; -+ -+ red = red * alpha / 255; -+ green = green * alpha / 255; -+ blue = blue * alpha / 255; -+ -+ clr.red = (red << 8) + red; -+ clr.green = (green << 8) + green; -+ clr.blue = (blue << 8) + blue; -+ clr.alpha = (alpha << 8) + alpha; -+ } -+ -+ XRenderFillRectangle( -+ p->device()->x11Display(), -+ PictOpOver, -+ p->device()->x11RenderHandle(), -+ &clr, -+ rect.x() + point.x(), -+ rect.y() + point.y(), -+ rect.width(), -+ rect.height() ); -+ -+ p->save(); -+ p->setRasterOp( Qt::CopyROP ); -+ p->setPen( QPen( cg.highlight().dark( 160 ), 1 ) ); -+ p->setBrush( NoBrush ); -+ p->drawRect( -+ rect.x() + point.x(), -+ rect.y() + point.y(), -+ rect.width(), -+ rect.height() ); -+ p->restore(); -+#endif -+#endif - } else - QCommonStyle::drawPrimitive( pe, p, r, cg, flags, opt ); - } -Index: kdeui/kiconview.cpp -=================================================================== ---- kdeui/kiconview.cpp.orig -+++ kdeui/kiconview.cpp -@@ -548,7 +548,7 @@ void KIconViewItem::calcRect( const QStr - r = m_wordWrap->boundingRect(); - - int realWidth = QMAX( QMIN( r.width() + 4, tw ), fm->width( "X" ) ); -- itemTextRect.setWidth( realWidth ); -+ itemTextRect.setWidth( realWidth + 4 ); - itemTextRect.setHeight( r.height() ); - - int w = 0; int h = 0; int y = 0; -@@ -699,11 +699,13 @@ void KIconViewItem::paintPixmap( QPainte - - void KIconViewItem::paintText( QPainter *p, const QColorGroup &cg ) - { -- int textX = textRect( false ).x() + 2; -+ int textX = textRect( false ).x() + 4; - int textY = textRect( false ).y(); - - if ( isSelected() ) { -- p->fillRect( textRect( false ), cg.highlight() ); -+ p->setBrush(QBrush(cg.highlight())); -+ p->setPen(QPen(cg.highlight())); -+ p->drawRoundRect( textRect( false ) ,1000/textRect(false).width(),1000/textRect(false).height() ); - p->setPen( QPen( cg.highlightedText() ) ); - } else { - if ( iconView()->itemTextBackground() != NoBrush ) -Index: kdeui/kjanuswidget.cpp -=================================================================== ---- kdeui/kjanuswidget.cpp.orig -+++ kdeui/kjanuswidget.cpp -@@ -49,16 +49,19 @@ class KJanusWidget::IconListItem : publi - { - public: - IconListItem( QListBox *listbox, const QPixmap &pixmap, -- const QString &text ); -+ const QString &text ); - virtual int height( const QListBox *lb ) const; - virtual int width( const QListBox *lb ) const; - int expandMinimumWidth( int width ); -+ void highlight( bool erase ); - - protected: - const QPixmap &defaultPixmap(); - void paint( QPainter *painter ); -- -+ - private: -+ void paintContents( QPainter *painter ); -+ - QPixmap mPixmap; - int mMinimumWidth; - }; -@@ -141,6 +144,8 @@ KJanusWidget::KJanusWidget( QWidget *par - - mIconList->verticalScrollBar()->installEventFilter( this ); - connect( mIconList, SIGNAL(selectionChanged()), SLOT(slotShowPage())); -+ connect( mIconList, SIGNAL(onItem(QListBoxItem *)), SLOT(slotOnItem(QListBoxItem *))); -+ - hbox->addSpacing( KDialog::marginHint() ); - page = new QFrame( this ); - hbox->addWidget( page, 10 ); -@@ -259,7 +264,7 @@ void KJanusWidget::slotReopen( QListView - } - - QFrame *KJanusWidget::addPage( const QString &itemName, const QString &header, -- const QPixmap &pixmap ) -+ const QPixmap &pixmap ) - { - QStringList items; - items << itemName; -@@ -269,8 +274,8 @@ QFrame *KJanusWidget::addPage( const QSt - - - QVBox *KJanusWidget::addVBoxPage( const QStringList &items, -- const QString &header, -- const QPixmap &pixmap ) -+ const QString &header, -+ const QPixmap &pixmap ) - { - if( !mValid ) - { -@@ -721,6 +726,12 @@ void KJanusWidget::slotItemClicked(QList - it->setOpen(!it->isOpen()); - } - -+// hack because qt does not support Q_OBJECT in nested classes -+void KJanusWidget::slotOnItem(QListBoxItem *qitem) -+{ -+ mIconList->slotOnItem( qitem ); -+} -+ - void KJanusWidget::setFocus() - { - if( !mValid ) { return; } -@@ -929,11 +940,11 @@ bool KJanusWidget::eventFilter( QObject - KJanusWidget::IconListBox::IconListBox( QWidget *parent, const char *name, - WFlags f ) - :KListBox( parent, name, f ), mShowAll(false), mHeightValid(false), -- mWidthValid(false) -+ mWidthValid(false), -+ mOldItem(0) - { - } - -- - void KJanusWidget::IconListBox::updateMinimumHeight() - { - if( mShowAll && !mHeightValid ) -@@ -995,6 +1006,45 @@ void KJanusWidget::IconListBox::setShowA - } - - -+void KJanusWidget::IconListBox::leaveEvent( QEvent *ev ) -+{ -+ KListBox::leaveEvent( ev ); -+ -+ if ( mOldItem && !mOldItem->isSelected() ) -+ { -+ ((KJanusWidget::IconListItem *) mOldItem)->highlight( true ); -+ mOldItem = 0; -+ } -+} -+ -+// hack because qt does not support Q_OBJECT in nested classes -+void KJanusWidget::IconListBox::slotOnItem(QListBoxItem *qitem) -+{ -+ KListBox::slotOnItem( qitem ); -+ -+ if ( qitem == mOldItem ) -+ { -+ return; -+ } -+ -+ if ( mOldItem && !mOldItem->isSelected() ) -+ { -+ ((KJanusWidget::IconListItem *) mOldItem)->highlight( true ); -+ } -+ -+ KJanusWidget::IconListItem *item = dynamic_cast< KJanusWidget::IconListItem * >( qitem ); -+ if ( item && !item->isSelected() ) -+ { -+ item->highlight( false ); -+ mOldItem = item; -+ } -+ else -+ { -+ mOldItem = 0; -+ } -+} -+ -+ - - KJanusWidget::IconListItem::IconListItem( QListBox *listbox, const QPixmap &pixmap, - const QString &text ) -@@ -1006,6 +1056,7 @@ KJanusWidget::IconListItem::IconListItem - mPixmap = defaultPixmap(); - } - setText( text ); -+ setCustomHighlighting( true ); - mMinimumWidth = 0; - } - -@@ -1017,6 +1068,36 @@ int KJanusWidget::IconListItem::expandMi - } - - -+void KJanusWidget::IconListItem::highlight( bool erase ) -+{ -+ QRect r = listBox()->itemRect( this ); -+ r.addCoords( 1, 1, -1, -1 ); -+ -+ QPainter p( listBox()->viewport() ); -+ p.setClipRegion( r ); -+ -+ const QColorGroup &cg = listBox()->colorGroup(); -+ if ( erase ) -+ { -+ p.setPen( cg.base() ); -+ p.setBrush( cg.base() ); -+ p.drawRect( r ); -+ } -+ else -+ { -+ p.setBrush( cg.highlight().light( 120 ) ); -+ p.drawRect( r ); -+ -+ p.setPen( cg.highlight().dark( 140 ) ); -+ p.drawRect( r ); -+ } -+ -+ p.setPen( cg.foreground() ); -+ p.translate( r.x() - 1, r.y() - 1 ); -+ paintContents( &p ); -+} -+ -+ - const QPixmap &KJanusWidget::IconListItem::defaultPixmap() - { - static QPixmap *pix=0; -@@ -1044,15 +1125,34 @@ const QPixmap &KJanusWidget::IconListIte - - void KJanusWidget::IconListItem::paint( QPainter *painter ) - { -+ QRect itemPaintRegion( listBox()->itemRect( this ) ); -+ QRect r( 1, 1, itemPaintRegion.width() - 2, itemPaintRegion.height() - 2); -+ -+ if ( isSelected() ) -+ { -+ painter->eraseRect( r ); -+ -+ painter->save(); -+ painter->setPen( listBox()->colorGroup().highlight().dark( 160 ) ); -+ painter->drawRect( r ); -+ painter->restore(); -+ } -+ -+ paintContents( painter ); -+} -+ -+ -+void KJanusWidget::IconListItem::paintContents( QPainter *painter ) -+{ - QFontMetrics fm = painter->fontMetrics(); - int ht = fm.boundingRect( 0, 0, 0, 0, Qt::AlignCenter, text() ).height(); - int wp = mPixmap.width(); - int hp = mPixmap.height(); -+ painter->drawPixmap( (mMinimumWidth - wp) / 2, 5, mPixmap ); - -- painter->drawPixmap( (mMinimumWidth-wp)/2, 5, mPixmap ); - if( !text().isEmpty() ) - { -- painter->drawText( 0, hp+7, mMinimumWidth, ht, Qt::AlignCenter, text() ); -+ painter->drawText( 1, hp + 7, mMinimumWidth - 2, ht, Qt::AlignCenter, text() ); - } - } - -@@ -1082,6 +1182,7 @@ int KJanusWidget::IconListItem::width( c - void KJanusWidget::virtual_hook( int, void* ) - { /*BASE::virtual_hook( id, data );*/ } - -+ - // TODO: In TreeList, if the last child of a node is removed, and there is no corrsponding widget for that node, allow the caller to - // delete the node. - void KJanusWidget::removePage( QWidget *page ) -@@ -1129,6 +1230,7 @@ void KJanusWidget::removePage( QWidget * - } - } - -+ - QString KJanusWidget::pageTitle(int index) const - { - if (!d || !d->mIntToTitle.contains(index)) -@@ -1137,6 +1239,7 @@ QString KJanusWidget::pageTitle(int inde - return d->mIntToTitle[index]; - } - -+ - QWidget *KJanusWidget::pageWidget(int index) const - { - if (!d || !d->mIntToPage.contains(index)) -Index: kdeui/kjanuswidget.h -=================================================================== ---- kdeui/kjanuswidget.h.orig -+++ kdeui/kjanuswidget.h -@@ -71,6 +71,8 @@ class KDEUI_EXPORT KJanusWidget : public - private: - class IconListBox : public KListBox - { -+ friend class KJanusWidget; -+ - public: - IconListBox( QWidget *parent=0, const char *name=0, WFlags f=0 ); - void updateMinimumHeight(); -@@ -79,10 +81,15 @@ class KDEUI_EXPORT KJanusWidget : public - void invalidateWidth(); - void setShowAll( bool showAll ); - -+ protected: -+ void slotOnItem( QListBoxItem *item ); -+ virtual void leaveEvent( QEvent * ); -+ - private: - bool mShowAll; - bool mHeightValid; - bool mWidthValid; -+ QListBoxItem *mOldItem; - }; - - public: -@@ -558,6 +565,8 @@ class KDEUI_EXPORT KJanusWidget : public - private slots: - bool slotShowPage(); - void slotFontChanged(); -+ -+ void slotOnItem(QListBoxItem *item); - void slotItemClicked(QListViewItem *it); - void pageGone(QObject *obj); // signal from the added page's "destroyed" signal - void slotReopen(QListViewItem *item); diff --git a/opensuse/tdelibs/show-distribution.diff b/opensuse/tdelibs/show-distribution.diff deleted file mode 100644 index 6906ed0a4..000000000 --- a/opensuse/tdelibs/show-distribution.diff +++ /dev/null @@ -1,21 +0,0 @@ -Index: kdeui/kaboutdialog.cpp -=================================================================== ---- kdeui/kaboutdialog.cpp.orig -+++ kdeui/kaboutdialog.cpp -@@ -40,6 +40,7 @@ - #include - #include - #include -+#include - - //MOC_SKIP_BEGIN - template class QPtrList; -@@ -702,7 +703,7 @@ void KAboutContainerBase::setProduct( co - kdDebug(291) << "no kapp" << endl; - - const QString msg1 = i18n("%1 %2 (Using KDE %3)").arg(appName).arg(version). -- arg(QString::fromLatin1(KDE_VERSION_STRING)); -+ arg(QString::fromLatin1(KDE_VERSION_STRING) + " " + QString::fromLatin1(KDE_DISTRIBUTION_TEXT)); - const QString msg2 = !year.isEmpty() ? i18n("%1 %2, %3").arg('©').arg(year). - arg(author) : QString::fromLatin1(""); - diff --git a/opensuse/tdelibs/silence.diff b/opensuse/tdelibs/silence.diff deleted file mode 100644 index 7dbbbb997..000000000 --- a/opensuse/tdelibs/silence.diff +++ /dev/null @@ -1,13 +0,0 @@ -Index: kded/kbuildservicefactory.cpp -=================================================================== ---- kded/kbuildservicefactory.cpp.orig -+++ kded/kbuildservicefactory.cpp -@@ -158,7 +158,7 @@ KBuildServiceFactory::saveOfferList(QDat - KServiceType::Ptr serviceType = KServiceType::serviceType(*it); - if (!serviceType) - { -- kdWarning() << "'"<< service->desktopEntryPath() << "' specifies undefined mimetype/servicetype '"<< (*it) << "'" << endl; -+ kdDebug() << "'"<< service->desktopEntryPath() << "' specifies undefined mimetype/servicetype '"<< (*it) << "'" << endl; - continue; - } - serviceTypes.append(serviceType); diff --git a/opensuse/tdelibs/smooth-scrolling.diff b/opensuse/tdelibs/smooth-scrolling.diff deleted file mode 100644 index b369a6146..000000000 --- a/opensuse/tdelibs/smooth-scrolling.diff +++ /dev/null @@ -1,267 +0,0 @@ -Index: khtml/khtmlview.cpp -=================================================================== ---- khtml/khtmlview.cpp.orig -+++ khtml/khtmlview.cpp -@@ -151,6 +151,9 @@ public: - - KHTMLViewPrivate() - : underMouse( 0 ), underMouseNonShared( 0 ), visibleWidgets( 107 ) -+#ifndef NO_SMOOTH_SCROLL_HACK -+ , dx(0), dy(0), ddx(0), ddy(0), rdx(0), rdy(0), scrolling(false) -+#endif - { - #ifndef KHTML_NO_CARET - m_caretViewContext = 0; -@@ -396,6 +399,17 @@ public: - short m_mouseScroll_byY; - QTimer *m_mouseScrollTimer; - QWidget *m_mouseScrollIndicator; -+#ifndef NO_SMOOTH_SCROLL_HACK -+ QTimer timer2; -+ int dx; -+ int dy; -+ // Step size * 16 and residual to avoid huge difference between 1px/step and 2px/step -+ int ddx; -+ int ddy; -+ int rdx; -+ int rdy; -+ bool scrolling; -+#endif - }; - - #ifndef QT_NO_TOOLTIP -@@ -504,6 +518,11 @@ KHTMLView::KHTMLView( KHTMLPart *part, Q - init(); - - viewport()->show(); -+#ifndef NO_SMOOTH_SCROLL_HACK -+#define timer timer2 -+ connect(&d->timer, SIGNAL(timeout()), this, SLOT(scrollTick())); -+#undef timer -+#endif - } - - KHTMLView::~KHTMLView() -@@ -1544,7 +1563,7 @@ void KHTMLView::keyPressEvent( QKeyEvent - case Key_Down: - case Key_J: - if (!d->scrollTimerId || d->scrollSuspended) -- scrollBy( 0, 10 ); -+ scrollBy( 0, 10 * _ke->count() ); - if (d->scrollTimerId) - d->newScrollTimer(this, 0); - break; -@@ -1559,7 +1578,7 @@ void KHTMLView::keyPressEvent( QKeyEvent - case Key_Up: - case Key_K: - if (!d->scrollTimerId || d->scrollSuspended) -- scrollBy( 0, -10 ); -+ scrollBy( 0, -10 * _ke->count()); - if (d->scrollTimerId) - d->newScrollTimer(this, 0); - break; -@@ -1572,14 +1591,14 @@ void KHTMLView::keyPressEvent( QKeyEvent - case Key_Right: - case Key_L: - if (!d->scrollTimerId || d->scrollSuspended) -- scrollBy( 10, 0 ); -+ scrollBy( 10 * _ke->count(), 0 ); - if (d->scrollTimerId) - d->newScrollTimer(this, 0); - break; - case Key_Left: - case Key_H: - if (!d->scrollTimerId || d->scrollSuspended) -- scrollBy( -10, 0 ); -+ scrollBy( -10 * _ke->count(), 0 ); - if (d->scrollTimerId) - d->newScrollTimer(this, 0); - break; -@@ -1712,8 +1731,16 @@ void KHTMLView::keyReleaseEvent(QKeyEven - d->scrollSuspendPreActivate = false; - if( _ke->key() == Key_Shift && d->scrollSuspendPreActivate && _ke->state() == Qt::ShiftButton - && !(KApplication::keyboardMouseState() & Qt::ShiftButton)) -+ { - if (d->scrollTimerId) -- d->scrollSuspended = !d->scrollSuspended; -+ { -+ d->scrollSuspended = !d->scrollSuspended; -+#ifndef NO_SMOOTH_SCROLL_HACK -+ if( d->scrollSuspended ) -+ stopScrolling(); -+#endif -+ } -+ } - - if (d->accessKeysEnabled) - { -@@ -3259,7 +3286,11 @@ void KHTMLView::viewportWheelEvent(QWhee - else - { - d->scrollBarMoved = true; -+#ifndef NO_SMOOTH_SCROLL_HACK -+ scrollViewWheelEvent( e ); -+#else - QScrollView::viewportWheelEvent( e ); -+#endif - - QMouseEvent *tempEvent = new QMouseEvent( QEvent::MouseMove, QPoint(-1,-1), QPoint(-1,-1), Qt::NoButton, e->state() ); - emit viewportMouseMoveEvent ( tempEvent ); -@@ -4462,4 +4493,117 @@ void KHTMLView::moveCaretToLineEnd() - - #endif // KHTML_NO_CARET - -+#ifndef NO_SMOOTH_SCROLL_HACK -+#define timer timer2 -+ -+// All scrolls must be completed within 240ms of last keypress -+static const int SCROLL_TIME = 240; -+// Each step is 20 ms == 50 frames/second -+static const int SCROLL_TICK = 20; -+ -+void KHTMLView::scrollBy(int dx, int dy) -+{ -+ KConfigGroup cfg( KGlobal::config(), "KDE" ); -+ if( !cfg.readBoolEntry( "SmoothScrolling", true )) { -+ QScrollView::scrollBy( dx, dy ); -+ return; -+ } -+ // scrolling destination -+ int full_dx = d->dx + dx; -+ int full_dy = d->dy + dy; -+ -+ // scrolling speed -+ int ddx = 0; -+ int ddy = 0; -+ -+ int steps = SCROLL_TIME/SCROLL_TICK; -+ -+ ddx = (full_dx*16)/steps; -+ ddy = (full_dy*16)/steps; -+ -+ // don't go under 1px/step -+ if (ddx > 0 && ddx < 16) ddx = 16; -+ if (ddy > 0 && ddy < 16) ddy = 16; -+ if (ddx < 0 && ddx > -16) ddx = -16; -+ if (ddy < 0 && ddy > -16) ddy = -16; -+ -+ d->dx = full_dx; -+ d->dy = full_dy; -+ d->ddx = ddx; -+ d->ddy = ddy; -+ -+ if (!d->scrolling) { -+ scrollTick(); -+ startScrolling(); -+ } -+} -+ -+void KHTMLView::scrollTick() { -+ if (d->dx == 0 && d->dy == 0) { -+ stopScrolling(); -+ return; -+ } -+ -+ int tddx = d->ddx + d->rdx; -+ int tddy = d->ddy + d->rdy; -+ -+ int ddx = tddx / 16; -+ int ddy = tddy / 16; -+ d->rdx = tddx % 16; -+ d->rdy = tddy % 16; -+ -+ if (d->dx > 0 && ddx > d->dx) ddx = d->dx; -+ else -+ if (d->dx < 0 && ddx < d->dx) ddx = d->dx; -+ -+ if (d->dy > 0 && ddy > d->dy) ddy = d->dy; -+ else -+ if (d->dy < 0 && ddy < d->dy) ddy = d->dy; -+ -+ d->dx -= ddx; -+ d->dy -= ddy; -+ -+// QScrollView::setContentsPos( contentsX() + ddx, contentsY() + ddy); -+ kapp->syncX(); -+ QScrollView::scrollBy(ddx, ddy); -+// Unaccelerated X can get seriously overloaded by scrolling and for some reason -+// will send KeyPress events only infrequently. This should help to reduce -+// the load. -+ kapp->syncX(); -+} -+ -+void KHTMLView::startScrolling() -+{ -+ d->scrolling = true; -+ d->timer.start(SCROLL_TICK, false); -+} -+ -+void KHTMLView::stopScrolling() -+{ -+ d->timer.stop(); -+ d->dx = d->dy = 0; -+ d->scrolling = false; -+} -+ -+// Overloaded from QScrollView and QScrollBar -+void KHTMLView::scrollViewWheelEvent( QWheelEvent *e ) -+{ -+ int pageStep = verticalScrollBar()->pageStep(); -+ int lineStep = verticalScrollBar()->lineStep(); -+ int step = QMIN( QApplication::wheelScrollLines()*lineStep, pageStep ); -+ if ( ( e->state() & ControlButton ) || ( e->state() & ShiftButton ) ) -+ step = pageStep; -+ -+ if(e->orientation() == Horizontal) -+ scrollBy(-((e->delta()*step)/120), 0); -+ else if(e->orientation() == Vertical) -+ scrollBy(0,-((e->delta()*step)/120)); -+ -+ e->accept(); -+} -+ -+#undef timer -+ -+#endif // NO_SMOOTH_SCROLL_HACK -+ - #undef DEBUG_CARETMODE -Index: khtml/khtmlview.h -=================================================================== ---- khtml/khtmlview.h.orig -+++ khtml/khtmlview.h -@@ -181,6 +181,11 @@ signals: - void hideAccessKeys(); - void repaintAccessKeys(); - void findAheadActive( bool ); -+//#define NO_SMOOTH_SCROLL_HACK -+#ifndef NO_SMOOTH_SCROLL_HACK -+public slots: -+ void scrollBy(int dx, int dy); -+#endif - - protected: - void clear(); -@@ -211,9 +216,23 @@ protected: - void contentsContextMenuEvent ( QContextMenuEvent *_ce ); - void doAutoScroll(); - void timerEvent ( QTimerEvent * ); -+ -+#ifndef NO_SMOOTH_SCROLL_HACK -+ void startScrolling(); -+ void stopScrolling(); -+#ifndef QT_NO_WHEELEVENT -+ void scrollViewWheelEvent( QWheelEvent* e ); -+#endif -+#endif -+ - protected slots: - void slotPaletteChanged(); - void slotScrollBarMoved(); -+#ifndef NO_SMOOTH_SCROLL_HACK -+ void scrollTick(); -+#else -+ void scrollTick() {}; // moc cannot handle #if -+#endif - - private slots: - void tripleClickTimeout(); diff --git a/opensuse/tdelibs/spellcheck-default-utf8.diff b/opensuse/tdelibs/spellcheck-default-utf8.diff deleted file mode 100644 index e663bdc69..000000000 --- a/opensuse/tdelibs/spellcheck-default-utf8.diff +++ /dev/null @@ -1,26 +0,0 @@ -Index: kdeui/ksconfig.cpp -=================================================================== ---- kdeui/ksconfig.cpp.orig -+++ kdeui/ksconfig.cpp -@@ -187,7 +187,7 @@ KSpellConfig::readGlobalSettings() - setRunTogether ( kc->readNumEntry("KSpell_RunTogether", 0) ); - setDictionary ( kc->readEntry("KSpell_Dictionary") ); - setDictFromList ( kc->readNumEntry("KSpell_DictFromList", false) ); -- setEncoding ( kc->readNumEntry ("KSpell_Encoding", KS_E_ASCII) ); -+ setEncoding ( kc->readNumEntry ("KSpell_Encoding", KS_E_UTF8) ); - setClient ( kc->readNumEntry ("KSpell_Client", KS_CLIENT_ISPELL) ); - - return true; -Index: kdeui/ksyntaxhighlighter.cpp -=================================================================== ---- kdeui/ksyntaxhighlighter.cpp.orig -+++ kdeui/ksyntaxhighlighter.cpp -@@ -551,7 +551,7 @@ QString KDictSpellingHighlighter::spellK - key += '/'; - key += QString::number( config->readNumEntry( "KSpell_DictFromList", false )); - key += '/'; -- key += QString::number( config->readNumEntry( "KSpell_Encoding", KS_E_ASCII )); -+ key += QString::number( config->readNumEntry( "KSpell_Encoding", KS_E_UTF8 )); - key += '/'; - key += QString::number( config->readNumEntry( "KSpell_Client", KS_CLIENT_ISPELL )); - return key; diff --git a/opensuse/tdelibs/stat-on-media.diff b/opensuse/tdelibs/stat-on-media.diff deleted file mode 100644 index c8f25a9c8..000000000 --- a/opensuse/tdelibs/stat-on-media.diff +++ /dev/null @@ -1,14 +0,0 @@ -Index: kio/kio/kdirwatch.cpp -=================================================================== ---- kio/kio/kdirwatch.cpp.orig -+++ kio/kio/kdirwatch.cpp -@@ -743,7 +743,8 @@ bool KDirWatchPrivate::useINotify( Entry - - bool KDirWatchPrivate::useStat(Entry* e) - { -- if (KIO::probably_slow_mounted(e->path)) -+ if ( e->path.startsWith("/media/") || (e->path == "/media") -+ || (KIO::probably_slow_mounted(e->path)) ) - useFreq(e, m_nfsPollInterval); - else - useFreq(e, m_PollInterval); diff --git a/opensuse/tdelibs/tdelibs-devel-doc.changes b/opensuse/tdelibs/tdelibs-devel-doc.changes deleted file mode 100644 index 91e32f703..000000000 --- a/opensuse/tdelibs/tdelibs-devel-doc.changes +++ /dev/null @@ -1,2956 +0,0 @@ -------------------------------------------------------------------- -Wed Aug 20 18:43:12 CEST 2008 - coolo@suse.de - -- update to KDE 3.5.10 - * translation updates - * bugfixes - * desktop files validate - -------------------------------------------------------------------- -Mon Nov 5 14:46:16 CET 2007 - dmueller@suse.de - -- remove nosource tag - -------------------------------------------------------------------- -Tue Oct 9 10:53:20 CEST 2007 - stbinner@suse.de - -- update to KDE 3.5.8 - -------------------------------------------------------------------- -Wed May 23 13:54:36 CEST 2007 - stbinner@suse.de - -- use %fdupes - -------------------------------------------------------------------- -Mon May 14 22:13:16 CEST 2007 - stbinner@suse.de - -- update to KDE 3.5.7 - -------------------------------------------------------------------- -Tue Oct 3 10:23:35 CEST 2006 - stbinner@suse.de - -- update to KDE 3.5.5 - -------------------------------------------------------------------- -Sun Jul 23 21:32:19 CEST 2006 - coolo@suse.de - -- update to KDE 3.5.4 - -------------------------------------------------------------------- -Mon May 29 09:39:14 CEST 2006 - stbinner@suse.de - -- fix build of kdelibs3-devel-doc - -------------------------------------------------------------------- -Wed May 24 09:53:23 CEST 2006 - stbinner@suse.de - -- update to KDE 3.5.3 - -------------------------------------------------------------------- -Mon Mar 20 13:31:55 CET 2006 - stbinner@suse.de - -- update to KDE 3.5.2 - -------------------------------------------------------------------- -Tue Mar 7 12:21:56 CET 2006 - coolo@suse.de - -- require qt3-devel-doc - -------------------------------------------------------------------- -Wed Mar 1 09:52:03 CET 2006 - coolo@suse.de - -- point apidox.sh to the right Qt location (#135850) - -------------------------------------------------------------------- -Fri Jan 27 01:55:42 CET 2006 - mls@suse.de - -- converted neededforbuild to BuildRequires - -------------------------------------------------------------------- -Sat Jan 21 20:23:19 CET 2006 - coolo@suse.de - -- update to KDE 3.5.1 - -------------------------------------------------------------------- -Wed Dec 21 14:57:44 CET 2005 - dmueller@suse.de - -- merge with kdelibs3 source dir - -------------------------------------------------------------------- -Mon Dec 19 16:49:10 CET 2005 - dmueller@suse.de - -- fix file list - -------------------------------------------------------------------- -Mon Nov 28 14:18:52 CET 2005 - dmueller@suse.de - -- update to 3.5.0 - -------------------------------------------------------------------- -Mon Nov 21 15:14:45 CET 2005 - stbinner@suse.de - -- update to 3.5 RC 2 - -------------------------------------------------------------------- -Tue Nov 15 11:17:33 CET 2005 - dmueller@suse.de - -- hack to avoid a kdelibs3 update today - -------------------------------------------------------------------- -Mon Nov 14 11:23:56 CET 2005 - dmueller@suse.de - -- update to 3.5.0 - -------------------------------------------------------------------- -Fri Oct 14 18:59:10 CEST 2005 - dmueller@suse.de - -- update to 3.4.92 - -------------------------------------------------------------------- -Thu Sep 29 16:54:50 CEST 2005 - coolo@suse.de - -- simplifying build a lot - -------------------------------------------------------------------- -Wed Sep 28 13:36:53 CEST 2005 - dmueller@suse.de - -- fix build - -------------------------------------------------------------------- -Tue Sep 27 15:20:28 CEST 2005 - dmueller@suse.de - -- fix build on 64 bit platforms - -------------------------------------------------------------------- -Tue Sep 27 13:42:22 CEST 2005 - dmueller@suse.de - -- and again.. - -------------------------------------------------------------------- -Tue Sep 27 02:49:09 CEST 2005 - ro@suse.de - -- fix build again - -------------------------------------------------------------------- -Sat Sep 24 12:31:03 CEST 2005 - dmueller@suse.de - -- build.. - -------------------------------------------------------------------- -Fri Sep 23 19:27:46 CEST 2005 - dmuelle@suse.de - -- fixed typo in specfile - -------------------------------------------------------------------- -Fri Sep 23 15:17:49 CEST 2005 - dmueller@suse.de - -- update to 3.4.91 - -------------------------------------------------------------------- -Mon Sep 12 13:24:55 CEST 2005 - dmueller@suse.de - -- Fix /opt/kde3/share/doc/HTML/en/common/* conflicts - -------------------------------------------------------------------- -Sat Sep 10 18:25:34 CEST 2005 - aj@suse.de - -- Remove wrong requires/provides/obsoletes. - -------------------------------------------------------------------- -Sat Sep 10 10:52:48 CEST 2005 - aj@suse.de - -- Fix package build. - -------------------------------------------------------------------- -Fri Sep 9 16:45:30 CEST 2005 - dmueller@suse.de - -- split kdelibs3 into a noarch subpackage devel-docs - -------------------------------------------------------------------- -Thu Sep 8 13:05:04 CEST 2005 - bg@suse.de - -- disable --as-needed for hppa (does not build with that option) - -------------------------------------------------------------------- -Thu Sep 8 08:04:42 CEST 2005 - coolo@suse.de - -- let the icon loader find the suse specials independent on the theme - (#115139 and others) - -------------------------------------------------------------------- -Wed Sep 7 21:37:08 CEST 2005 - dmueller@suse.de - -- fix kwallet wizard being 3000px in size (#114954) - -------------------------------------------------------------------- -Wed Sep 7 19:52:20 CEST 2005 - dmueller@suse.de - -- fix kpdf embedding crashes (#114724) -- add forgotten patch for mozilla/dragonegg integration - -------------------------------------------------------------------- -Wed Sep 7 16:05:58 CEST 2005 - dmueller@suse.de - -- improve TIFF detection (#114319) - -------------------------------------------------------------------- -Tue Sep 6 19:53:03 CEST 2005 - dmueller@suse.de - -- fix JPEG2000 support in KImgio (#115324) - -------------------------------------------------------------------- -Tue Aug 23 15:35:24 CEST 2005 - coolo@suse.de - -- add mimetype for OOo base (#72285) - -------------------------------------------------------------------- -Tue Aug 23 13:26:36 CEST 2005 - coolo@suse.de - -- don't play around with xauth when the host name changes - (#98627) - -------------------------------------------------------------------- -Tue Aug 23 03:54:04 CEST 2005 - dmueller@suse.de - -- fix novell.com language selector (#106008) - -------------------------------------------------------------------- -Mon Aug 22 14:20:42 CEST 2005 - coolo@suse.de - -- don't put libkdeinit_*.so in -devel - -------------------------------------------------------------------- -Sun Aug 21 11:42:34 CEST 2005 - coolo@suse.de - -- update from 3.4 branch to fix endless kio_http loop -- fix DPMS check in admin (broke with --enable-new-ldflags) - -------------------------------------------------------------------- -Sat Aug 20 16:06:01 CEST 2005 - coolo@suse.de - -- update from 3.4 branch -- pleasing the libtool check - -------------------------------------------------------------------- -Fri Aug 19 14:12:41 CEST 2005 - adrian@suse.de - -- fix endless loop, if no KDEMM backend can get found (#105772) - -------------------------------------------------------------------- -Fri Aug 19 10:22:14 CEST 2005 - llunak@suse.cz - -- Fix QXEmbed to have focus working properly in yast+kcontrol - (#46495). - -------------------------------------------------------------------- -Thu Aug 18 17:15:40 CEST 2005 - adrian@suse.de - -- do not use KLIRRRRR sound on popular request ... - -------------------------------------------------------------------- -Thu Aug 18 10:18:54 CEST 2005 - coolo@suse.de - -- extend kde_post_install of common_options - -------------------------------------------------------------------- -Wed Aug 17 16:20:44 CEST 2005 - adrian@suse.de - -- move arts dependency to -arts package -- clean up really all SimplePlayers in knotify, might cause a crash - which needs to be debugged - -------------------------------------------------------------------- -Mon Aug 15 04:25:38 CEST 2005 - dmueller@suse.de - -- fix horizontal scrolling in KHTML broken by the smooth scrolling - patch (#76565). - -------------------------------------------------------------------- -Sat Aug 13 16:03:17 CEST 2005 - adrian@suse.de - -- fix memory/handle leak in knotify while playing sound via kdemm - knotify can still hang, if all alsa channels are used. (#97588) -- install icons for BitTorrent MimeType - -------------------------------------------------------------------- -Thu Aug 11 15:58:43 CEST 2005 - coolo@suse.de - -- removing all of the extraicons patch, it doesn't work at all anymore - so we need a new solution (also #85839 I guess) -- updated 3.4 branch to get a fix for a crashing dcopserver and - hanging mounts (#102564) - -------------------------------------------------------------------- -Thu Aug 4 13:33:12 CEST 2005 - sbrabec@suse.cz - -- Removed share/pixmaps links from crystalsvg (#85839). - -------------------------------------------------------------------- -Mon Aug 1 18:37:53 CEST 2005 - coolo@suse.de - -- 3.4 update replacing custom patches - -------------------------------------------------------------------- -Fri Jul 29 17:31:21 CEST 2005 - dmueller@suse.de - -- Update admin tarball to include -Wno-non-virtual-dtor flag -- Fix PIE detection (#98889) -- Fix visibility support - -------------------------------------------------------------------- -Tue Jul 26 11:45:19 CEST 2005 - llunak@suse.cz - -- Fix #96594 (knotify logout timeout) - -------------------------------------------------------------------- -Fri Jul 22 10:51:28 CEST 2005 - coolo@suse.de - -- update to version 3.4.2 - -------------------------------------------------------------------- -Mon May 30 16:19:20 CEST 2005 - adrian@suse.de - -- fix build for released distributions - -------------------------------------------------------------------- -Tue May 24 11:54:02 CEST 2005 - adrian@suse.de - -- update to version 3.4.1 -- set level back to "a" - -------------------------------------------------------------------- -Fri May 13 21:49:46 CEST 2005 - coolo@suse.de - -- init variable - -------------------------------------------------------------------- -Tue Apr 19 10:21:55 CEST 2005 - coolo@suse.de - -- update admin for gcc4 - -------------------------------------------------------------------- -Thu Apr 14 17:17:06 CEST 2005 - sbrabec@suse.cz - -- Added audiofile-devel to neededforbuild. - -------------------------------------------------------------------- -Thu Apr 14 12:07:18 CEST 2005 - adrian@suse.de - -- update to current 3_4_BRANCH - * parallel build order fix -- do not export kdemm video player api, it will not get any - implementation in this way - -------------------------------------------------------------------- -Wed Apr 13 11:34:45 CEST 2005 - adrian@suse.de - -- update to current 3_4_BRANCH -- increase patch Level to "c" -- export kdemm mixer interface - -------------------------------------------------------------------- -Fri Apr 8 11:46:38 CEST 2005 - adrian@suse.de - -- port kfilepreview to kdemm -- extra arts subpackages, aRts is optional now ! -- add DNS resolver fix from 3_4_BRANCH - -------------------------------------------------------------------- -Mon Apr 4 14:42:49 CEST 2005 - adrian@suse.de - -- add missing #include to fix compile of kdemm players - -------------------------------------------------------------------- -Mon Apr 4 11:01:08 CEST 2005 - coolo@suse.de - -- enable features for new ld - -------------------------------------------------------------------- -Fri Apr 1 11:54:56 CEST 2005 - adrian@suse.de - -- fix build with gcc 4, exporting kdemm classes - -------------------------------------------------------------------- -Thu Mar 31 13:46:09 CEST 2005 - adrian@suse.de - -- first steps to make arts optional: - * add experimental kdemm support for post 9.3 - * use kdemm instead of arts in knotify - * TODO: port kfileaudiopreview to kdemm -- do not overrule CFLAGS from spec files - -------------------------------------------------------------------- -Wed Mar 30 16:10:39 CEST 2005 - coolo@suse.de - -- disable visibility when compiled with debug (for testkhtml) - -------------------------------------------------------------------- -Mon Mar 28 18:46:22 CEST 2005 - schwab@suse.de - -- common_options: also set CFLAGS. - -------------------------------------------------------------------- -Sat Mar 19 14:54:24 CET 2005 - aj@suse.de - -- Integrate patch from Waldo Bastian for #71888 to fix - accessing of Netscape bookmarks in konqueror. - -------------------------------------------------------------------- -Fri Mar 18 13:40:41 CET 2005 - adrian@suse.de - -- fix aspell support -- fixes from 3_4_BRANCH - * toolbar configuration fix (#73662) - * IPv6 blacklist io-slave fix - * a khtml crash fix with innerweb - * redirection fix to uppercase written top level domains - -------------------------------------------------------------------- -Tue Mar 15 13:30:48 CET 2005 - adrian@suse.de - -- fix kspell recursion, visible in kbabel (#72773 by Waldo) - -------------------------------------------------------------------- -Mon Mar 14 15:32:48 CET 2005 - coolo@suse.de - -- take susetranslations.mo into account for translations - -------------------------------------------------------------------- -Mon Mar 14 14:01:15 CET 2005 - coolo@suse.de - -- fix smoothscrolling patch (Lubos) -- adding some more kate fixes from branch - -------------------------------------------------------------------- -Fri Mar 11 14:55:14 CET 2005 - coolo@suse.de - -- some more fixes from 3_4_BRANCH - -------------------------------------------------------------------- -Tue Mar 8 13:47:31 CET 2005 - adrian@suse.de - -- various updates from cvs - * missing kate initialising (Lubos) - * kcmmodule crash fixed (Waldo) - * khtml fixes - -------------------------------------------------------------------- -Mon Mar 7 16:55:17 CET 2005 - adrian@suse.de - -- fix progress bar (from KDE cvs) - -------------------------------------------------------------------- -Mon Mar 7 14:32:27 CET 2005 - coolo@suse.de - -- add fix for broken webdav URLs (#59203) - -------------------------------------------------------------------- -Sat Mar 5 10:19:48 CET 2005 - adrian@suse.de - -- fixes from KDE cvs: - * support Netware based ftp servers in kio_ftp - * fix proxy socks support - -------------------------------------------------------------------- -Sat Mar 5 09:22:49 CET 2005 - adrian@suse.de - -- update to version 3.4 final (not final try) - -------------------------------------------------------------------- -Wed Mar 2 10:01:46 CET 2005 - adrian@suse.de - -- update scrollview patch to BC version -- move Requires: kdelibs3_doc to kdebase3 - -------------------------------------------------------------------- -Sat Feb 26 10:34:21 CET 2005 - adrian@suse.de - -- update to 3.4.0 RC1 - -------------------------------------------------------------------- -Thu Feb 24 13:16:10 CET 2005 - adrian@suse.de - -- update to version 3.4.0 RC1 try 1 - -------------------------------------------------------------------- -Tue Feb 22 16:51:01 CET 2005 - adrian@suse.de - -- update to current CVS -- add soft scrolling patch from Allan Sandfeld - -------------------------------------------------------------------- -Tue Feb 22 10:47:34 CET 2005 - adrian@suse.de - -- remove secure ICE patch again, it is part of CVS now - -------------------------------------------------------------------- -Mon Feb 21 11:26:34 CET 2005 - adrian@suse.de - -- update to current CVS - -------------------------------------------------------------------- -Fri Feb 18 11:18:03 CET 2005 - adrian@suse.de - -- update to current CVS - -------------------------------------------------------------------- -Wed Feb 16 17:53:31 CET 2005 - adrian@suse.de - -- remove floppy:/ from file dialog again, media:/ is enough - -------------------------------------------------------------------- -Mon Feb 14 14:41:13 CET 2005 - adrian@suse.de - -- update from CVS -- add rubberband patch from Andre Moreira Magalhaes, disabled by - default - -------------------------------------------------------------------- -Mon Feb 14 11:49:33 CET 2005 - adrian@suse.de - -- make it possible to disable IDN support via KDE_NO_IDN enviroment - variable - -------------------------------------------------------------------- -Sun Feb 13 10:26:22 CET 2005 - coolo@suse.de - -- fix do_make -j15 - -------------------------------------------------------------------- -Fri Feb 11 10:29:44 CET 2005 - adrian@suse.de - -- update from CVS - -------------------------------------------------------------------- -Wed Feb 9 15:57:01 CET 2005 - adrian@suse.de - -- apply patch from Waldo to set ICE sockets to 0700 permissions - -------------------------------------------------------------------- -Mon Feb 7 11:28:36 CET 2005 - adrian@suse.de - -- update to beta 2 - -------------------------------------------------------------------- -Sat Jan 29 10:59:09 CET 2005 - coolo@suse.de - -- fix --no-unsermake - -------------------------------------------------------------------- -Fri Jan 28 16:53:21 CET 2005 - meissner@suse.de - -- removed setuid root binary kgrantpty which is not needed - since 8.1... - -------------------------------------------------------------------- -Fri Jan 28 15:11:47 CET 2005 - adrian@suse.de - -- update to current snapshot -- use external unsermake now - -------------------------------------------------------------------- -Tue Jan 25 15:41:07 CET 2005 - adrian@suse.de - -- adapt file dialog for media slave and remove floppy icon - -------------------------------------------------------------------- -Mon Jan 24 21:05:47 CET 2005 - coolo@suse.de - -- update to current snapshot (for testkhtml) - -------------------------------------------------------------------- -Thu Jan 20 16:53:31 CET 2005 - adrian@suse.de - -- update to current snapshot - -------------------------------------------------------------------- -Sat Jan 15 21:05:52 CET 2005 - schwab@suse.de - -- Use : in permissions file. - -------------------------------------------------------------------- -Fri Jan 14 14:58:39 CET 2005 - adrian@suse.de - -- update to current HEAD -- disable limit-image-size patch, since it got also disabled in qt - -------------------------------------------------------------------- -Thu Jan 13 15:05:49 CET 2005 - coolo@suse.de - -- update to HEAD to get kdebase HEAD compiled - -------------------------------------------------------------------- -Mon Jan 10 11:56:08 CET 2005 - adrian@suse.de - -- fix kprinter.h header, this fixes the build of kdebindings - -------------------------------------------------------------------- -Mon Jan 10 09:37:17 CET 2005 - coolo@suse.de - -- fix permissions of do_make - -------------------------------------------------------------------- -Sun Jan 9 10:01:53 CET 2005 - adrian@suse.de - -- final 3.4 beta 1 - -------------------------------------------------------------------- -Tue Jan 4 11:49:56 CET 2005 - coolo@suse.de - -- update to 3.4 beta 1 (first snapshot) - -------------------------------------------------------------------- -Fri Dec 17 09:24:58 CET 2004 - coolo@suse.de - -- let -Wl, pass in $LDFLAGS -- fix quoting in make wrapper - -------------------------------------------------------------------- -Thu Dec 16 21:32:19 CET 2004 - hvogel@suse.de - -- change icon to about_kde. go comes from another package and - we dont want kdelibs require kdebase - -------------------------------------------------------------------- -Wed Dec 15 12:44:48 CET 2004 - coolo@suse.de - -- make the unsermake/automake switch more clever - -------------------------------------------------------------------- -Tue Dec 14 11:11:05 CET 2004 - coolo@suse.de - -- fix unsermake $PATH for packages that build several sources - -------------------------------------------------------------------- -Mon Dec 13 14:56:19 CET 2004 - coolo@suse.de - -- remove debug flag from configure -- replaced unsermake with latest greatest - -------------------------------------------------------------------- -Wed Dec 8 13:25:36 CET 2004 - adrian@suse.de - -- update to official 3.4 alpha 1 - -------------------------------------------------------------------- -Mon Dec 6 15:17:54 CET 2004 - adrian@suse.de - -- update to KDE head snapshot - -------------------------------------------------------------------- -Fri Dec 3 15:19:22 CET 2004 - adrian@suse.de - -- update to the final tar bal of 3.3.2 - -------------------------------------------------------------------- -Mon Nov 29 20:29:55 CET 2004 - adrian@suse.de - -- update to version 3.3.2 - -------------------------------------------------------------------- -Fri Nov 26 15:57:47 CET 2004 - adrian@suse.de - -- extend KDE_VERSION_STRING with extra Level information to tell - information about applied patches -- extend distribution string with distribution version -- show distribution version in about dialog - -------------------------------------------------------------------- -Thu Nov 25 11:44:39 CET 2004 - adrian@suse.de - -- correct gnome icon path to hicolor - -------------------------------------------------------------------- -Wed Nov 24 13:49:09 CET 2004 - adrian@suse.de - -- accept also Python 2.4 in configure checks - -------------------------------------------------------------------- -Thu Nov 18 15:38:38 CET 2004 - ro@suse.de - -- use kerberos-devel-packages - -------------------------------------------------------------------- -Mon Nov 15 15:37:37 CET 2004 - adrian@suse.de - -- include /opt/kde3/share/icons/crystalsvg/22x22/apps path - -------------------------------------------------------------------- -Wed Nov 10 12:52:20 CET 2004 - ro@suse.de - -- permission handling fixes - -------------------------------------------------------------------- -Wed Nov 10 11:14:50 CET 2004 - coolo@suse.de - -- moving khtml 3.3 diff in a seperate diff (now that the 3.3 branch - contains a lot of updates for it) - -------------------------------------------------------------------- -Mon Nov 8 16:33:07 CET 2004 - coolo@suse.de - -- renable patch to limit image size (#43841) - -------------------------------------------------------------------- -Wed Nov 3 15:19:43 CET 2004 - coolo@suse.de - -- updated khtml again to fix compilation problem with gcc 4 - -------------------------------------------------------------------- -Wed Nov 3 11:12:57 CET 2004 - coolo@suse.de - -- use HTML rendering engine from CVS head (preparing backport for - 3.3.2) - -------------------------------------------------------------------- -Tue Oct 12 11:25:02 CEST 2004 - adrian@suse.de - -- update to version 3.3.1 - -------------------------------------------------------------------- -Wed Oct 6 14:30:24 CEST 2004 - adrian@suse.de - -- fix crash in libkabc, when importing an ldif file (#46882) - -------------------------------------------------------------------- -Tue Oct 5 10:17:05 CEST 2004 - adrian@suse.de - -- do also find gnome pages when using "en_*" locale, instead of - "C" or "en" (#45480) - -------------------------------------------------------------------- -Sat Oct 2 08:40:00 CEST 2004 - adrian@suse.de - -- try to avoid klauncher registration with a wrong dcop name. - this can happen, if two KDE application gets started at the - same time, without having running kdeinit before. - patch by Waldo and solves problems in Gnome hopefully (#46355) -- khtml rendering fix for nvidia.com - -------------------------------------------------------------------- -Fri Oct 1 16:58:11 CEST 2004 - adrian@suse.de - -- fix html frame parent problem, fixes www.map24.de (#44156) - -------------------------------------------------------------------- -Thu Sep 30 09:09:07 CEST 2004 - adrian@suse.de - -- fix nasty error startup messages -- fix two minor javascript bugs -- fix Netscape bookmarks wrapping (by Waldo, #45917) - -------------------------------------------------------------------- -Sun Sep 26 18:04:31 CEST 2004 - adrian@suse.de - -- update to current 3_3_BRANCH - * translation updates - * kpart handling fixes - -------------------------------------------------------------------- -Mon Sep 20 10:07:28 CEST 2004 - adrian@suse.de - -- update to current 3_3_BRANCH -- add fix for KDE file dialog on 64bit - (crash when called by 32bit application, by Waldo #44995) - -------------------------------------------------------------------- -Thu Sep 16 17:11:22 CEST 2004 - adrian@suse.de - -- use kwallet fix from Arvin - (update external hash keys immediatly #43973) - -------------------------------------------------------------------- -Wed Sep 15 17:18:45 CEST 2004 - adrian@suse.de - -- disable kwallet fix, it is known to create a memory leak - -------------------------------------------------------------------- -Tue Sep 14 15:23:11 CEST 2004 - adrian@suse.de - -- update to current branch - * khtml fixes - -------------------------------------------------------------------- -Fri Sep 10 13:47:48 CEST 2004 - adrian@suse.de - -- update to current branch -- apply fix for kwallet from HEAD, needed for kinternet - -------------------------------------------------------------------- -Tue Sep 7 11:28:30 CEST 2004 - adrian@suse.de - -- update to current BRANCH -- more silence during kbuildsycoca run -- disable default unsermake in beta -- remove mad from nfb - -------------------------------------------------------------------- -Fri Sep 3 17:29:22 CEST 2004 - coolo@suse.de - -- fixing the fix ;( - -------------------------------------------------------------------- -Fri Sep 3 14:20:15 CEST 2004 - coolo@suse.de - -- unsermake: do not remove the .deps file before regenerating it to - avoid make races - -------------------------------------------------------------------- -Mon Aug 30 08:36:57 CEST 2004 - adrian@suse.de - -- compile with explicit --disable-debug to get rid off asserts - -------------------------------------------------------------------- -Sat Aug 28 08:22:23 CEST 2004 - adrian@suse.de - -- update to current BRANCH -- add gnome help page support for khelpcenter(by clahey, #44061) - -------------------------------------------------------------------- -Mon Aug 23 16:31:13 CEST 2004 - adrian@suse.de - -- disable patch to limit image sizes in khtml, it causes crashes - atm - -------------------------------------------------------------------- -Fri Aug 20 13:02:26 CEST 2004 - adrian@suse.de - -- update to current 3_3_BRANCH -- add patch from clahey to support gnome help pages better in khelpcenter - -------------------------------------------------------------------- -Wed Aug 18 12:15:58 CEST 2004 - adrian@suse.de - -- move debug mode switch to common_options - -------------------------------------------------------------------- -Tue Aug 17 08:12:49 CEST 2004 - adrian@suse.de - -- add patch from Waldo to make it possible to limit the max image - size within QImage. (#43841) - -------------------------------------------------------------------- -Mon Aug 16 15:32:44 CEST 2004 - adrian@suse.de - -- update to version 3.3.0 final - -------------------------------------------------------------------- -Mon Aug 16 15:32:44 CEST 2004 - adrian@suse.de - -- update to version 3.3.0 final -- use "make compile" - -------------------------------------------------------------------- -Fri Aug 13 10:37:43 CEST 2004 - coolo@suse.de - -- removed 3_2_BRANCH.diff -- build with unsermake - -------------------------------------------------------------------- -Tue Aug 10 08:58:24 CEST 2004 - adrian@suse.de - -- update to version 3.3.0 RC2 -- split doc tools into subpackage to make it possible to use - a different theming for special products - -------------------------------------------------------------------- -Mon Aug 2 09:21:16 CEST 2004 - adrian@suse.de - -- accept automake 1.9 - -------------------------------------------------------------------- -Mon Jul 19 10:35:33 CEST 2004 - adrian@suse.de - -- update to version 3.2.92 (KDE 3.3 beta 2) - -------------------------------------------------------------------- -Tue Jun 29 12:01:28 CEST 2004 - adrian@suse.de - -- do not remove .cpp/.h files, if they are not really generated - by uic - -------------------------------------------------------------------- -Mon Jun 28 22:32:49 CEST 2004 - adrian@suse.de - -- enable OpenEXR support - -------------------------------------------------------------------- -Mon Jun 28 09:30:57 CEST 2004 - adrian@suse.de - -- update to version 3.3 beta 1 - * usual patch cleanup - -------------------------------------------------------------------- -Mon May 31 20:29:40 CEST 2004 - adrian@suse.de - -- update to version 3.2.3 - * remove obsolete patches - -------------------------------------------------------------------- -Wed May 12 09:21:00 CEST 2004 - adrian@suse.de - -- update user_profile patch -- add 3.3 button layout patch - -------------------------------------------------------------------- -Thu Apr 29 08:59:13 CEST 2004 - coolo@suse.de - -- let unsermake rewrite install rules with $DESTDIR -- use unsermake for kdelibs and parallel build - -------------------------------------------------------------------- -Sat Apr 24 18:17:07 CEST 2004 - sndirsch@suse.de - -- use xorg-x11 packages - -------------------------------------------------------------------- -Tue Apr 20 14:12:35 CEST 2004 - adrian@suse.de - -- use admin tar ball from HEAD -- extend kde-config to export library suffix and check for it in - configure -- add user profiles patch from Waldo - -------------------------------------------------------------------- -Sun Apr 18 14:56:17 CEST 2004 - coolo@suse.de - -- updated unsermake - -------------------------------------------------------------------- -Wed Apr 14 11:16:33 CEST 2004 - adrian@suse.de - -- update to version 3.2.2 - -------------------------------------------------------------------- -Tue Apr 13 17:16:34 CEST 2004 - adrian@suse.de - -- adding utempter to neededforbuild. (#38833) - (this does not lead into a new runtime requirement) - -------------------------------------------------------------------- -Sun Apr 4 21:08:43 CEST 2004 - adrian@suse.de - -- do only show important items in file dialog (#38269) - -------------------------------------------------------------------- -Thu Apr 1 10:39:59 CEST 2004 - coolo@suse.de - -- replacing brute force shut up with a real log file in kconf_update - (Waldo) - -------------------------------------------------------------------- -Wed Mar 31 16:40:14 CEST 2004 - adrian@suse.de - -- fix 3_2_BRANCH patch - -------------------------------------------------------------------- -Tue Mar 30 17:43:16 CEST 2004 - adrian@suse.de - -- enable incremental sycoca creation again - -------------------------------------------------------------------- -Tue Mar 30 10:45:07 CEST 2004 - coolo@suse.de - -- fix desktop icon renaming (Waldo) -- fixing kconf_update for kwin (Waldo,#36682) - -------------------------------------------------------------------- -Mon Mar 29 10:19:55 CEST 2004 - coolo@suse.de - -- handle cups printers that insist on being different (#37011) - -------------------------------------------------------------------- -Sat Mar 27 09:53:52 CET 2004 - adrian@suse.de - -- fix regression in khtml parser with latest update (by coolo) - -------------------------------------------------------------------- -Fri Mar 26 16:47:48 CET 2004 - adrian@suse.de - -- more silence (Waldo, Dirk and Adrian) -- apply fix for possible hanging library unloading (Lubos) -- fix regression in khtml parser with latest update (coolo) -- fix for hidden cookie windows below main windows (Lubos) -- fix icons in kcontrol - -------------------------------------------------------------------- -Tue Mar 23 08:06:52 CET 2004 - adrian@suse.de - -- update to current 3_2_BRANCH - * khtml fixes - o recursion protection - o official patch for kio urls - o crash fix (happened with Quanta) - o urls with trailing / are handled as directories - o fix for some flash enabled sites (#36656) -- fix fileshare.diff, make us compatible to KDE again -- call %run_permissions -- apply fix for utf8 localisation problem in kdehelp (coolo, #36681) -- adjust yast icon path to the new location -- fix missing include in fontconfig-reverse-lookup patch -- remove special settings for s390 and alpha - (leaded into new problems like implicit declarations of functions) - -------------------------------------------------------------------- -Mon Mar 22 13:22:57 CET 2004 - adrian@suse.de - -- update to current 3_2_BRANCH - * fixes security leak in kdeprint (#36663) -- add patch from Waldo to disallow kio urls in khtml - -------------------------------------------------------------------- -Sun Mar 21 21:32:47 CET 2004 - adrian@suse.de - -- do not trigger mount with konq view of /media/ (by Lubos) - -------------------------------------------------------------------- -Sun Mar 21 11:08:11 CET 2004 - adrian@suse.de - -- update to current 3_2_BRANCH - * fixed linebreak patch -- fix deactivated patches and remove obsolete ones -- suppress sycoca warnings about missing mimetypes - -------------------------------------------------------------------- -Mon Mar 15 16:46:24 CET 2004 - coolo@suse.de - -- another update to 3_2_BRANCH (kdeprint layout fixes and kate repaint problems) - -------------------------------------------------------------------- -Sat Mar 13 12:50:59 CET 2004 - coolo@suse.de - -- adding patch to force line breaks in translation of desktop files - (Arbeits-\nplatz) - -------------------------------------------------------------------- -Wed Mar 10 23:28:21 CET 2004 - coolo@suse.de - -- kill dcopserver explicitly - -------------------------------------------------------------------- -Wed Mar 10 10:39:42 CET 2004 - coolo@suse.de - -- use current 3_2_BRANCH (#35070) - -------------------------------------------------------------------- -Mon Mar 8 11:20:24 CET 2004 - adrian@suse.de - -- use current 3_2_BRANCH -- disable debug mode -- find YaST icons - -------------------------------------------------------------------- -Sun Mar 7 13:06:48 CET 2004 - coolo@suse.de - -- fixing pnome -> gnome typo -- adding libidn-devel as requirement for devel subpackage - -------------------------------------------------------------------- -Sat Mar 6 12:46:33 CET 2004 - coolo@suse.de - -- older distributions have different layouts for gnome. Avoid - dangling symlinks - -------------------------------------------------------------------- -Fri Mar 5 16:35:39 CET 2004 - coolo@suse.de - -- fixing build - -------------------------------------------------------------------- -Fri Mar 5 14:53:16 CET 2004 - coolo@suse.de - -- restart cups through rcscripts instead of kill magic (#32787) -- final update for 3.2.1 - -------------------------------------------------------------------- -Thu Mar 4 14:45:52 CET 2004 - coolo@suse.de - -- require libidn hard to avoid problems e.g. on lib64 - -------------------------------------------------------------------- -Wed Mar 3 18:26:46 CET 2004 - adrian@suse.de - -- removed gnome packages from neededforbuild - -------------------------------------------------------------------- -Tue Mar 2 10:25:48 CET 2004 - coolo@suse.de - -- update tarball again for khtml regression fixes - -------------------------------------------------------------------- -Tue Mar 2 10:23:33 CET 2004 - coolo@suse.de - -- fix build - -------------------------------------------------------------------- -Mon Mar 1 10:34:30 CET 2004 - coolo@suse.de - -- update to version 3.2.1 - -------------------------------------------------------------------- -Mon Mar 1 10:34:30 CET 2004 - coolo@suse.de - -- update to version 3.2.1 -- reworked build process - -------------------------------------------------------------------- -Wed Feb 25 22:01:46 CET 2004 - adrian@suse.de - -- update to current 3_2_BRANCH -- add -g as compiler option for beta test - -------------------------------------------------------------------- -Wed Feb 25 20:42:15 CET 2004 - adrian@suse.de - -- do not build on slow architectures - -------------------------------------------------------------------- -Mon Feb 23 15:40:21 CET 2004 - adrian@suse.de - -- do not use DNotify or FAM on /media -- long poll intervall for /media -- include GnomeCrystal icons and general pixmaps path - -------------------------------------------------------------------- -Mon Feb 23 08:05:47 CET 2004 - coolo@suse.de - -- initial package - -------------------------------------------------------------------- -Mon Feb 23 08:05:26 CET 2004 - coolo@suse.de - -- update 3_2_BRANCH -- update HEAD khtml -- adding testkhtml.spec - -------------------------------------------------------------------- -Sat Feb 21 18:35:28 CET 2004 - adrian@suse.de - -- add gnome and default icon pathes -- fix ssh.protcol installation -- fix syntax error in common_options - -------------------------------------------------------------------- -Fri Feb 20 09:29:56 CET 2004 - coolo@suse.de - -- use khtml from HEAD (to be backported) -- update admin tar ball -- take out testing khtml from the main page - -------------------------------------------------------------------- -Wed Feb 18 17:40:33 CET 2004 - adrian@suse.de - -- update to current 3_2_BRANCH - * ssh support to ktelnetservice -- remove pcsc-lite from neededforbuild -- disable test_regression for now - -------------------------------------------------------------------- -Wed Feb 11 08:50:03 CET 2004 - coolo@suse.de - -- fixing build on s390 - -------------------------------------------------------------------- -Wed Feb 11 08:06:07 CET 2004 - adrian@suse.de - -- update to current 3_2_BRANCH - -------------------------------------------------------------------- -Thu Jan 29 14:06:43 CET 2004 - adrian@suse.de - -- apply fix for printing with QT 3.3 - -------------------------------------------------------------------- -Mon Jan 26 23:25:56 CET 2004 - adrian@suse.de - -- update to version 3.2.0 final - -------------------------------------------------------------------- -Fri Jan 23 18:44:08 CET 2004 - adrian@suse.de - -- update to current 3_2_BRANCH - -------------------------------------------------------------------- -Wed Jan 21 17:28:14 CET 2004 - adrian@suse.de - -- disable sse and mmx usage on 9.0 (compiler bug) -- remove autom4te.cache during update_admin - (automake 2.8 can run into error with <2.8 cache data) - -------------------------------------------------------------------- -Wed Jan 21 12:14:49 CET 2004 - adrian@suse.de - -- update to current BRANCH to get various khtml fixes - -------------------------------------------------------------------- -Sun Jan 18 21:43:52 CET 2004 - adrian@suse.de - -- update to version 3.1.95 ( KDE 3.2 RC1 ) - -------------------------------------------------------------------- -Fri Jan 16 17:10:30 CET 2004 - adrian@suse.de - -- implement short menus again - -------------------------------------------------------------------- -Tue Jan 13 13:32:16 CET 2004 - adrian@suse.de - -- update to snapshot 2004011309 -- disable debug - -------------------------------------------------------------------- -Tue Jan 6 19:20:55 CET 2004 - adrian@suse.de - -- update to snapshot 2004010618 -- add kde_post_install function to common_options -- remove pregenerated files from uic during update_admin - -------------------------------------------------------------------- -Thu Dec 18 14:12:16 CET 2003 - adrian@suse.de - -- update to snapshot 2003121718 - -------------------------------------------------------------------- -Mon Dec 15 14:18:36 CET 2003 - adrian@suse.de - -- update to snapshot 2003121511 -- accept automake 1.8 - -------------------------------------------------------------------- -Wed Dec 10 14:30:45 CET 2003 - adrian@suse.de - -- update to snapshot 2003121013 - -------------------------------------------------------------------- -Tue Dec 9 13:40:37 CET 2003 - adrian@suse.de - -- package test_regression for testing in khtmltest package - -------------------------------------------------------------------- -Tue Dec 2 11:10:27 CET 2003 - adrian@suse.de - -- use beta2, take two tar ball - -------------------------------------------------------------------- -Mon Dec 1 22:00:31 CET 2003 - adrian@suse.de - -- update to 3.1.94 ( KDE 3.2 beta 2 ) - -------------------------------------------------------------------- -Sun Nov 23 20:44:24 CET 2003 - adrian@suse.de - -- update to snapshot 2003112315 - * build again with alsa 1.0 - -------------------------------------------------------------------- -Thu Nov 13 23:14:30 CET 2003 - adrian@suse.de - -- update to new snapshot from 2003102409 -- add jasper (JPEG2000) support - -------------------------------------------------------------------- -Wed Oct 29 09:59:01 CET 2003 - adrian@suse.de - -- update to KDE 3.2 beta1 - -------------------------------------------------------------------- -Tue Oct 21 09:34:51 CEST 2003 - adrian@suse.de - -- update to snapshot 2003102008 - -------------------------------------------------------------------- -Sun Oct 5 14:31:09 CEST 2003 - adrian@suse.de - -- update to snapshot 2003100510 - -------------------------------------------------------------------- -Wed Oct 1 09:59:21 CEST 2003 - adrian@suse.de - -- update to snapshot 3.1.92_2003093021 - * should fix building of KDE 2.2 documents in other packages - -------------------------------------------------------------------- -Mon Sep 29 15:59:09 CEST 2003 - adrian@suse.de - -- update to version 1.1.92 (KDE 3.2 alpha 2) - -------------------------------------------------------------------- -Tue Sep 23 09:42:45 CEST 2003 - adrian@suse.de - -- apply crash fix (happens in kdesktop) from Marcus Meissner - happened with a (most likely broken) Windows Driver CD (#31568) - -------------------------------------------------------------------- -Tue Sep 16 11:40:25 CEST 2003 - adrian@suse.de - -- fix application/x-ogg icon - -------------------------------------------------------------------- -Sat Sep 13 10:37:36 CEST 2003 - adrian@suse.de - -- fix Unimportant routines really finaly -- Require pcre-devel only for > 8.2 -- make menu sorting a routine which can be called from kicker -- hide Documents folder entry in kfiledialog for > 8.2 - -------------------------------------------------------------------- -Fri Sep 12 13:51:12 CEST 2003 - coolo@suse.de - -- add requirement on pcre-devel as libkhtml.la contains a reference - to /usr/lib/libpcreposix.la - -------------------------------------------------------------------- -Thu Sep 11 15:50:09 CEST 2003 - coolo@suse.de - -- give a more correct error message (as good as we can get it out - of cups) for forbidden actions (#29225) - -------------------------------------------------------------------- -Thu Sep 11 09:20:07 CEST 2003 - adrian@suse.de - -- use updated 3.1.4 tar ball - * certifcate dialog will reappear after typing wrong password -- add BRANCH patch to fix kdesktop icon name renaming and a crash fix -- honor caching in KServiceGroup::SuSEchildCount() - -------------------------------------------------------------------- -Tue Sep 9 02:59:23 CEST 2003 - adrian@suse.de - -- add YaST icon path - -------------------------------------------------------------------- -Tue Sep 9 00:14:46 CEST 2003 - adrian@suse.de - -- update to version 3.1.4 - -------------------------------------------------------------------- -Mon Sep 8 15:27:08 CEST 2003 - adrian@suse.de - -- implement KServiceGroup::SuSEchildCount() to ignore - X-SuSE-Unimportant entries - -------------------------------------------------------------------- -Fri Sep 5 12:10:12 CEST 2003 - adrian@suse.de - -- add check for SuSE-Unimportant also in kservicegroup class -- add support for X-SuSE-GeneralDescription and ShortMenu -- update 3_1_BRANCH -- add kmimelist application for debugging -- add optioninal X-KDE-InitialPreference Tag, if we want - different settings in Gnome - -------------------------------------------------------------------- -Wed Sep 3 17:44:28 CEST 2003 - adrian@suse.de - -- update xdg patch from Waldo to get compatible with 3.2 again -- update 3_1_BRANCH to get klistview fixes - -------------------------------------------------------------------- -Tue Sep 2 12:52:02 CEST 2003 - adrian@suse.de - -- include default pixmaps path -- drop broken styles, which will also disappear in KDE 3.2 -- add shut up patch from coolo - -------------------------------------------------------------------- -Mon Sep 1 14:38:52 CEST 2003 - adrian@suse.de - -- update to current 3_1_BRANCH -- implement X-SuSE-Unimportant support - -------------------------------------------------------------------- -Fri Aug 29 17:24:16 CEST 2003 - adrian@suse.de - -- update to current 3_1_BRANCH for qt 3.2.1 fixes - -------------------------------------------------------------------- -Tue Aug 26 08:16:04 CEST 2003 - adrian@suse.de - -- apply fix from Lubos for maximised windows of GTK apps - -------------------------------------------------------------------- -Sun Aug 24 23:06:19 CEST 2003 - adrian@suse.de - -- redo last fix in a more often working way. - but maybe we try to fix support for broken svg's atm ... - -------------------------------------------------------------------- -Sun Aug 24 12:14:29 CEST 2003 - adrian@suse.de - -- fix svgicon engine to render karbon svg's. -- install ksvgiconengine with header(internal) to get used by - svg thumbnail generator - -------------------------------------------------------------------- -Sat Aug 23 22:34:40 CEST 2003 - adrian@suse.de - -- update to 3_1_BRANCH - -------------------------------------------------------------------- -Wed Aug 20 17:19:57 CEST 2003 - schwab@suse.de - -- Fix weird character in common_options script. - -------------------------------------------------------------------- -Wed Aug 20 15:56:59 CEST 2003 - adrian@suse.de - -- small bugfix from Waldo for XDG - -------------------------------------------------------------------- -Tue Aug 19 12:15:18 CEST 2003 - adrian@suse.de - -- fix compile with gcc 3.3.1 - -------------------------------------------------------------------- -Wed Aug 13 11:34:11 CEST 2003 - adrian@suse.de - -- fix lib64 plugin support -- use current 3_1_BRANCH -- clean up spec file -- package /opt/kde3/include in main package - -------------------------------------------------------------------- -Tue Aug 12 13:25:32 CEST 2003 - adrian@suse.de - -- update XDG patch (yep, popup's are still disabled ;) - -------------------------------------------------------------------- -Fri Aug 8 21:58:06 CEST 2003 - adrian@suse.de - -- disable popup in kbuildsycoca run again - -------------------------------------------------------------------- -Thu Aug 7 15:25:02 CEST 2003 - adrian@suse.de - -- new XDG code from Waldo to support kmenuedit - -------------------------------------------------------------------- -Tue Aug 5 08:25:26 CEST 2003 - adrian@suse.de - -- disable popup in kbuildsycoca run - -------------------------------------------------------------------- -Fri Aug 1 16:54:16 CEST 2003 - adrian@suse.de - -- disable shadow patch at all again -- update 3_1_BRANCH diff - * first fixes for Qt 3.2 -- update kdelibs-menus stuff - * Waldo: Less buggy, with prefix support and with a working - - -------------------------------------------------------------------- -Wed Jul 30 17:52:37 CEST 2003 - adrian@suse.de - -- update kdelibs-menus-kded tar ball to new version from Waldo, - to get the kbuildsycoca --menutest function -- merge kdelibs3-cups back to kdelibs3 - -------------------------------------------------------------------- -Mon Jul 28 15:11:15 CEST 2003 - adrian@suse.de - -- update to current 3_1_BRANCH - -------------------------------------------------------------------- -Wed Jul 23 08:55:42 CEST 2003 - adrian@suse.de - -- use another new 3.1.3 tar ball with further security fix - (cookie handling) -- add needed files for XDG support - -------------------------------------------------------------------- -Tue Jul 22 13:12:02 CEST 2003 - coolo@suse.de - -- remove CVS conflict files from admin -- make common_options a %config (for consistency) - -------------------------------------------------------------------- -Mon Jul 21 12:00:42 CEST 2003 - adrian@suse.de - -- fix build for 7.x distributions - -------------------------------------------------------------------- -Fri Jul 18 17:02:43 CEST 2003 - adrian@suse.de - -- third version of 3.1.3 tar ball - (security fix for cookie handling) -- add backported patch from 3.2 for shadow text on icons. - (written by Laur Ivan ) -- accept Qt 3.2 also, when "#MIN_CONFIG(3)" is used -- fix build for lib64 - -------------------------------------------------------------------- -Fri Jul 18 10:01:44 CEST 2003 - adrian@suse.de - -- fix owner ship of files -- add XDG support from Waldo from KDE 3.2 - -------------------------------------------------------------------- -Wed Jul 16 12:14:55 CEST 2003 - adrian@suse.de - -- use new 3.1.3 tar ball - -------------------------------------------------------------------- -Wed Jul 16 01:11:51 CEST 2003 - adrian@suse.de - -- update to 3.1.3 - -------------------------------------------------------------------- -Tue Jun 24 10:52:19 CEST 2003 - coolo@suse.de - -- update 3.1 branch (heading 3.1.3) - -------------------------------------------------------------------- -Wed Jun 11 11:54:55 CEST 2003 - kukuk@suse.de - -- Add missing directories to filelist - -------------------------------------------------------------------- -Sat Jun 7 22:10:12 CEST 2003 - coolo@suse.de - -- remove libtool update code completly -- don't create stale symlinks for < 820 -- create the gnome icons symlink only for < 829 - (moved to gnome packages, where they can't dangle) - -------------------------------------------------------------------- -Fri May 30 14:55:49 CEST 2003 - adrian@suse.de - -- fix file conflict and disable libtool update again - -------------------------------------------------------------------- -Thu May 29 10:51:54 CEST 2003 - adrian@suse.de - -- tune some minor bits of coolo's changes - (a minor side effect is that we are able to build KDE packages again) - -------------------------------------------------------------------- -Wed May 28 15:05:30 CEST 2003 - coolo@suse.de - -- put the configure work around in update_admin too - -------------------------------------------------------------------- -Tue May 27 14:08:45 CEST 2003 - coolo@suse.de - -- updating 3_1_BRANCH.diff (to get it working without --enable-final) -- build --enable-final in beta too -- update libtool files from system (experimental) - -------------------------------------------------------------------- -Mon May 26 15:03:34 CEST 2003 - adrian@suse.de - -- define and use $INSTALL_TARGET in common_options -- set to "install" (not "install-strip") for now - -------------------------------------------------------------------- -Mon May 19 09:41:44 CEST 2003 - adrian@suse.de - -- apply 3_1_BRANCH.diff (fix build for Qt 3.2b1) - -------------------------------------------------------------------- -Fri May 16 13:34:52 CEST 2003 - coolo@suse.de - -- remove the right CVS subdir - -------------------------------------------------------------------- -Fri May 16 07:54:36 CEST 2003 - coolo@suse.de - -- remove CVS subdir - -------------------------------------------------------------------- -Thu May 8 09:05:49 CEST 2003 - adrian@suse.de - -- new 3.1.2 tar ball (try2) - -------------------------------------------------------------------- -Wed May 7 08:58:28 CEST 2003 - adrian@suse.de - -- update to version 3.1.2 -- cleanup/drop patches -- update admin tar ball and apply changes via a patch -- require correct arts version (1.1 at least) - -------------------------------------------------------------------- -Fri Apr 18 15:02:41 CEST 2003 - adrian@suse.de - -- merge 8.2 changes with 8.3 -- remove libaps from neededforbuild - -------------------------------------------------------------------- -Mon Apr 7 15:49:35 CEST 2003 - adrian@suse.de - -- security fix from 3.0.5b - * run ghostscript in safe mode -- add patch from Uwe Gansert to support the new fileshare tool -- add crash fix from 3_1_BRANCH for khtml on www.w3.org/QA/ -- do reverse font lookup in kfontcombobox and kaction for - fontconfig based distributions (#25725) - -------------------------------------------------------------------- -Thu Apr 3 18:26:13 CEST 2003 - adrian@suse.de - -- fix possible crash in kprinter on cups server misbehaviour -- add gnome help pages support for khelpcenter. - -------------------------------------------------------------------- -Fri Mar 21 12:56:36 CET 2003 - adrian@suse.de - -- apply fix https over proxy - -------------------------------------------------------------------- -Sat Mar 15 21:40:57 CET 2003 - adrian@suse.de - -- fix kmid crash in libkmid (#24820) -- .exe files have a correct icon now -- remove unused mimelnk tar ball - -------------------------------------------------------------------- -Wed Mar 12 09:49:01 CET 2003 - adrian@suse.de - -- disable kbuildsycoca speed up patch from last check-in again - -------------------------------------------------------------------- -Tue Mar 11 11:47:19 CET 2003 - adrian@suse.de - -- update to 3.1.1 tar ball, second try - * memory leak in dcopclient - * kate crash and syntax highlighting fixes - * do not let two running kbuildsycoca conflict - * keramik pixmapCache conflict fix - * some session management fixes -- add patch from Lubos to fix further session management problems - with preloaded konq -- fix api documentation -- remove SuSEconfig.susewm-kbuildsycoca again - (initial created by susewm now) - -------------------------------------------------------------------- -Thu Mar 6 10:34:33 CET 2003 - coolo@suse.de - -- updating the admin tar ball to 3.1.1 too - -------------------------------------------------------------------- -Mon Mar 3 11:36:11 CET 2003 - adrian@suse.de - -- update to version 3.1.1 - * fixed alphablended background images in khtml - * crash fix after destructed documents - * additional syntax highlight descriptions for kate -- xrandr fixes from Lubos to initialize the display correct on login - -------------------------------------------------------------------- -Thu Feb 27 23:50:42 CET 2003 - adrian@suse.de - -- update 3_1_BRANCH -- remove wrong Obsoletes again -- drop preload.desktop in autostart and use improved patch from - Lubos instead -- comment out some noise in .xsession-errors - -------------------------------------------------------------------- -Wed Feb 26 21:49:06 CET 2003 - adrian@suse.de - -- fixing kded startup with DNOTIFY enabled and lots of files - -------------------------------------------------------------------- -Wed Feb 26 10:35:49 CET 2003 - adrian@suse.de - -- update 3_1_BRANCH -- add ksycoca-global patch from Waldo -- add SuSEconfig.susewm-kbuildsycoca -- add Obsolete and Conflict tags with kde2 packages - -------------------------------------------------------------------- -Mon Feb 24 18:42:15 CET 2003 - adrian@suse.de - -- update 3_1_BRANCH -- enable-dnotify - -------------------------------------------------------------------- -Mon Feb 24 09:10:42 CET 2003 - coolo@suse.de - -- fixing kups (#24084) - -------------------------------------------------------------------- -Fri Feb 14 12:04:25 CET 2003 - adrian@suse.de - -- update 3_1_BRANCH -- allow setgid for man -- add gnome icon path - -------------------------------------------------------------------- -Wed Feb 12 22:46:37 CET 2003 - adrian@suse.de - -- update 3_1_BRANCH -- add preloaded konq patches from Lubos -- move kde-config back to main package - -------------------------------------------------------------------- -Wed Feb 5 02:26:15 CET 2003 - adrian@suse.de - -- update 3_1_BRANCH again for more aliasing fixes from Dirk -- remove fallback patch and implement a real media detection instead - of that - -------------------------------------------------------------------- -Tue Feb 4 10:06:14 CET 2003 - coolo@suse.de - -- updating to newer 3_1_BRANCH that is gcc 3.3 compliant - -------------------------------------------------------------------- -Mon Feb 3 16:57:38 CET 2003 - adrian@suse.de - -- add -fno-cse-follow-jumps -fno-cse-skip-blocks to work around - compiler bug - -------------------------------------------------------------------- -Mon Feb 3 11:52:53 CET 2003 - adrian@suse.de - -- update 3_1_BRANCH patch -- use --enable-final again - -------------------------------------------------------------------- -Sat Feb 1 16:38:48 CET 2003 - adrian@suse.de - -- remove ppc64 special compile options - -------------------------------------------------------------------- -Tue Jan 28 17:46:03 CET 2003 - adrian@suse.de - -- follow changed QDesktopWidget::resized API - -------------------------------------------------------------------- -Tue Jan 28 00:31:12 CET 2003 - adrian@suse.de - -- add BRANCH patches -- add libart_lgpl-devel to Requires from -devel package - -------------------------------------------------------------------- -Fri Jan 24 12:16:47 CET 2003 - adrian@suse.de - -- apply fix for resized desktop for menubar from Seli - -------------------------------------------------------------------- -Thu Jan 23 09:58:07 CET 2003 - adrian@suse.de - -- ha ! RC7-try5, security relevant again - -------------------------------------------------------------------- -Wed Jan 22 07:17:29 CET 2003 - adrian@suse.de - -- RC7-try4. last one ? - -------------------------------------------------------------------- -Tue Jan 21 12:59:35 CET 2003 - adrian@suse.de - -- RC7-try3. last one. - -------------------------------------------------------------------- -Fri Jan 17 14:36:40 CET 2003 - adrian@suse.de - -- use RC7-try2 tar balls - -------------------------------------------------------------------- -Wed Jan 15 16:10:17 CET 2003 - adrian@suse.de - -- use cyrus-sasl2 - -------------------------------------------------------------------- -Tue Jan 14 17:26:02 CET 2003 - adrian@suse.de - -- update to version RC7. -- kdelibs3-devel requires now fam-devel on > 8.1 - -------------------------------------------------------------------- -Wed Jan 8 12:50:01 CET 2003 - adrian@suse.de - -- add fam-devel to neededforbuild - -------------------------------------------------------------------- -Wed Jan 8 11:12:50 CET 2003 - adrian@suse.de - -- fix build with new alsa. works hopefully also with old versions - -------------------------------------------------------------------- -Tue Jan 7 15:08:32 CET 2003 - adrian@suse.de - -- update to RC6 (newer than the last 3.1 final try ;) - -------------------------------------------------------------------- -Wed Dec 18 11:39:30 CET 2002 - coolo@suse.de - -- updating the admin tar ball to find out about possible problems - -------------------------------------------------------------------- -Mon Dec 16 14:28:39 CET 2002 - coolo@suse.de - -- updating to latest branch. - -------------------------------------------------------------------- -Tue Dec 10 14:55:41 CET 2002 - coolo@suse.de - -- adding a check to kdeinit that checks for KDE_IS_PRELINKED and - is not using dlopen then - -------------------------------------------------------------------- -Tue Dec 3 09:57:31 CET 2002 - coolo@suse.de - -- trying to fix SSL check for lib64 - -------------------------------------------------------------------- -Sat Nov 30 21:48:04 CET 2002 - adrian@suse.de - -- next try of RC5 tar ball. BRANCH fixes are again disabled - -------------------------------------------------------------------- -Thu Nov 28 13:01:54 CET 2002 - adrian@suse.de - -- apply 3_1_BRANCH fixes -- fix build for lib64 - -------------------------------------------------------------------- -Mon Nov 25 10:46:04 CET 2002 - adrian@suse.de - -- update to RC5. -- do not use --enable-final on beta (gcc 3.3) - -------------------------------------------------------------------- -Mon Nov 25 01:03:39 CET 2002 - ro@suse.de - -- added openldap2-client to neededforbuild - -------------------------------------------------------------------- -Sat Nov 23 16:24:50 CET 2002 - adrian@suse.de - -- enable openldap support -- clean up #neededforbuild - -------------------------------------------------------------------- -Wed Nov 20 15:02:54 CET 2002 - coolo@suse.de - -- adding fix for admin dir which should unbreak packages having problems - with autoconf 2.56 - -------------------------------------------------------------------- -Wed Nov 20 13:00:30 CET 2002 - adrian@suse.de - -- disable hotfix again (it is inside the new tar ball) - -------------------------------------------------------------------- -Wed Nov 20 11:13:49 CET 2002 - adrian@suse.de - -- update to version 3.1-RC4 (final ?) - -------------------------------------------------------------------- -Tue Nov 12 17:00:38 CET 2002 - coolo@suse.de - -- another snapshot with even more last minute fixes ;( - -------------------------------------------------------------------- -Tue Nov 12 09:14:09 CET 2002 - coolo@suse.de - -- apply the lib64 patch correctly (in updating to a source without - the patch pre-applied) - -------------------------------------------------------------------- -Mon Nov 11 16:14:44 CET 2002 - coolo@suse.de - -- update to newer snapshot and sort out patches - -------------------------------------------------------------------- -Wed Nov 6 17:35:47 CET 2002 - adrian@suse.de - -- update to snapshot 3.0.8.20021106 (fix file conflicts) - -------------------------------------------------------------------- -Sun Nov 3 13:16:21 CET 2002 - adrian@suse.de - -- update to version 1.1.0.20021030 ~= RC1 - -------------------------------------------------------------------- -Tue Oct 8 21:19:44 CEST 2002 - adrian@suse.de - -- update to version 3.0.4 -- disable topMenu patch again - -------------------------------------------------------------------- -Tue Sep 24 09:05:13 CEST 2002 - froh@suse.de - -- %-ifarch'ed Requires: alsa-devel for all but s390 and s390x (#18647) - -------------------------------------------------------------------- -Sun Sep 8 19:48:06 CEST 2002 - adrian@suse.de - -- cross side scripting check fix from Dirk Mueller - -------------------------------------------------------------------- -Sun Sep 8 15:53:37 CEST 2002 - adrian@suse.de - -- .exe files are handled now as files for wine and not direct executable - -------------------------------------------------------------------- -Thu Sep 5 14:11:22 CEST 2002 - adrian@suse.de - -- add fix from mana for libkmid, to get alsa sequenzer working again - -------------------------------------------------------------------- -Wed Sep 4 13:16:24 MEST 2002 - coolo@suse.de - -- fix the PNM mimetypes, so that digital cameras work - -------------------------------------------------------------------- -Sat Aug 31 23:49:25 CEST 2002 - adrian@suse.de - -- default to lib64 pathes in admin/* on lib64 systems. - (fix link error, when lib32 enviroment is installed) - -------------------------------------------------------------------- -Fri Aug 30 12:07:35 CEST 2002 - adrian@suse.de - -- use most current 3_0_BRANCH patches - * fix for crash in khtml with enabled java from Seli - * layout fix in kcombobox from gis - * kcombobox fix from dfaure for oversized box in koffice - * kjs date fixes from dfaure - * ksycoca, illegal object fix from Waldo - * kcompletion box fix for Xinerama setup, reviewed by gis - * do not loop on unexpected EOF in kio_khtml from Waldo - * newline handling fix in khtml from dirk - * disable tiff write support, since it is not implemented (coolo) - * translations - -------------------------------------------------------------------- -Mon Aug 26 14:55:32 CEST 2002 - adrian@suse.de - -- install plugins on lib64 into /opt/kde3/lib. so we do not need - different plugin path definitions -- add missing dependencies to -devel packages -- add some selected fix from 3_0_BRANCH - -------------------------------------------------------------------- -Tue Aug 20 10:28:25 CEST 2002 - adrian@suse.de - -- fix build for lib64 really :( - -------------------------------------------------------------------- -Tue Aug 20 08:51:21 CEST 2002 - adrian@suse.de - -- fix build for lib64 -- move designer plugins into -devel package - -------------------------------------------------------------------- -Tue Aug 20 00:41:40 CEST 2002 - adrian@suse.de - -- follow change qt plugin path patch (using implicit subdir on lib64) - -------------------------------------------------------------------- -Fri Aug 16 12:12:54 CEST 2002 - adrian@suse.de - -- update to current 3_0_BRANCH - * include dirk's khtml glitch fix - -------------------------------------------------------------------- -Wed Aug 14 16:08:17 CEST 2002 - coolo@suse.de - -- don't strip on debug-i386 -- fixing lib64 path for plugins - -------------------------------------------------------------------- -Tue Aug 13 15:29:12 CEST 2002 - coolo@suse.de - -- prefer settings in /etc/opt/kde3 over /opt/kde, so that UL - settings can overwrite standard KDE settings - -------------------------------------------------------------------- -Tue Aug 13 12:42:46 CEST 2002 - adrian@suse.de - -- update to 3.0.3 tar ball, second try - (includes security fix for KSSL) - -------------------------------------------------------------------- -Tue Aug 13 10:30:30 CEST 2002 - coolo@suse.de - -- alsadev -> alsa-devel - -------------------------------------------------------------------- -Mon Aug 12 17:08:37 CEST 2002 - coolo@suse.de - -- the x86_64 bug is fixed now - -------------------------------------------------------------------- -Sun Aug 11 12:54:06 CEST 2002 - coolo@suse.de - -- changing admin.tar.bz2 to work around automake crap not beeing - able to get kdemultimedia compiled -- update 3.0 branch patch again - -------------------------------------------------------------------- -Thu Aug 8 00:44:30 CEST 2002 - adrian@suse.de - -- update to 3.0.3 -- add 3_0_BRANCH fix for ksycoca recreation by Waldo - -------------------------------------------------------------------- -Mon Aug 5 10:43:16 CEST 2002 - adrian@suse.de - -- update 3_0_BRANCH.dif -- add some mimetypes -- apply patch to support a fallback on mounting devices -- fix PreRequires -- update admin.tar - -------------------------------------------------------------------- -Sun Aug 4 22:35:24 CEST 2002 - adrian@suse.de - -- finaly fix build for hammer - (yes, even tested this time) - -------------------------------------------------------------------- -Sun Aug 4 11:33:29 CEST 2002 - adrian@suse.de - -- fix the second typo in one line :( - -------------------------------------------------------------------- -Fri Aug 2 15:56:03 CEST 2002 - coolo@suse.de - -- adding a patch that hopefully fixes the very large tip of the konsole - window - -------------------------------------------------------------------- -Thu Aug 1 15:58:11 CEST 2002 - adrian@suse.de - -- and fix the typo in last patch - -------------------------------------------------------------------- -Thu Aug 1 15:47:00 CEST 2002 - adrian@suse.de - -- add workaround for x86_64 compiler bug - -------------------------------------------------------------------- -Thu Aug 1 09:24:45 CEST 2002 - coolo@suse.de - -- updating the branch patch for a possible fix to kukuk's - bugzilla crash :) - -------------------------------------------------------------------- -Wed Jul 31 15:58:12 CEST 2002 - adrian@suse.de - -- add missing directorys applnk/* - -------------------------------------------------------------------- -Tue Jul 30 12:00:25 CEST 2002 - coolo@suse.de - -- don't use SuSEconfig for the KDE api, but a dedicated script - in %post -- don't install a susehelp config file anymore, but let susehelp - handle it itself -- handle the new location for api docu - -------------------------------------------------------------------- -Fri Jul 26 20:37:03 CEST 2002 - adrian@suse.de - -- fix neededforbuild - -------------------------------------------------------------------- -Fri Jul 26 19:44:39 CEST 2002 - adrian@suse.de - -- disable fast-malloc, since it is in qt now - -------------------------------------------------------------------- -Tue Jul 23 16:02:01 CEST 2002 - coolo@suse.de - -- also install the qt.tag file -- remove configure option removed long ago - -------------------------------------------------------------------- -Tue Jul 23 09:05:40 CEST 2002 - coolo@suse.de - -- don't let the Makefile guess the package name. it will guess the - wrong thing - -------------------------------------------------------------------- -Fri Jul 19 10:57:12 CEST 2002 - adrian@suse.de - -- use the kpart for rpm mimetype (if installed) - -------------------------------------------------------------------- -Thu Jul 18 16:53:37 CEST 2002 - coolo@suse.de - -- use doxygen for docu -- backport admin fixes from HEAD branch -- removed neededforbuilds that look like stuff not needed for build - (since KDE 2.1) -- moved API docu (back) into /opt/kde3 -- updated 3.0 branch diff - -------------------------------------------------------------------- -Fri Jul 12 17:12:27 CEST 2002 - adrian@suse.de - -- add topMenu definition - -------------------------------------------------------------------- -Fri Jul 12 14:21:11 CEST 2002 - adrian@suse.de - -- use current 3_0_BRANCH - * includes the fix for the famous CSS/JS segfault in konqueror - -------------------------------------------------------------------- -Thu Jul 11 13:10:17 CEST 2002 - adrian@suse.de - -- fix build for lib64 -- use patch from coolo to disable g3 file support (libtiff is broken) - -------------------------------------------------------------------- -Mon Jul 8 13:04:10 CEST 2002 - adrian@suse.de - -- fix file list - -------------------------------------------------------------------- -Fri Jul 5 14:00:14 CEST 2002 - adrian@suse.de - -- add missing icon directorys -- split cups support into own package for 8.1 -- s,i386,%ix86, - -------------------------------------------------------------------- -Thu Jun 27 21:57:40 CEST 2002 - adrian@suse.de - -- add %run_ldconfig in %post -- use --disable-final on ppc64 -- disable more debug messages - -------------------------------------------------------------------- -Wed Jun 26 10:55:26 CEST 2002 - adrian@suse.de - -- update to the second try of 3.0.2 tar ball - -------------------------------------------------------------------- -Mon Jun 24 22:29:07 CEST 2002 - adrian@suse.de - -- udpate to version 3.0.2 - -------------------------------------------------------------------- -Wed Jun 19 18:12:46 CEST 2002 - uli@suse.de - -- disable-final on ARM - -------------------------------------------------------------------- -Wed Jun 12 10:44:09 CEST 2002 - adrian@suse.de - -- update to current 3_0_BRANCH (large kjs updates) -- clean #neededforbuild -- do only warn on missing admin directory in update_admin -- remove old common_compile_options file - -------------------------------------------------------------------- -Fri Jun 7 13:55:25 CEST 2002 - adrian@suse.de - -- using fixed libtool for -m32/-m64 in admin (fixed by matz) -- replace admin with the content from admin.tar.bz2 - -------------------------------------------------------------------- -Thu Jun 6 15:45:24 CEST 2002 - adrian@suse.de - -- export kde_styledir and kde_widgetdir to follow the plugins* - directory name from Qt. - -------------------------------------------------------------------- -Wed Jun 5 15:59:29 CEST 2002 - adrian@suse.de - -- go back to 1.316 for am_edit - (no unsermake support, but generates moc files with --enable-final) - -------------------------------------------------------------------- -Tue Jun 4 10:39:02 CEST 2002 - coolo@suse.de - -- adding /sbin:/usr/sbin to the PATH if kdesu is used to become root. - Work around for flaws in setup tools (#11362) - -------------------------------------------------------------------- -Mon Jun 3 15:03:11 CEST 2002 - coolo@suse.de - -- removing test programs that cause problems with automake 1.6.1 - -------------------------------------------------------------------- -Mon Jun 3 12:34:41 CEST 2002 - adrian@suse.de - -- update to inofficial version 3.0.1a - * include bug/security fix for file uploads -- fix for broken png's in khtml in some cases - -------------------------------------------------------------------- -Mon May 27 12:02:26 CEST 2002 - adrian@suse.de - -- fix for 7.0 distribution - -------------------------------------------------------------------- -Thu May 23 18:35:17 CEST 2002 - ro@suse.de - -- fix admin extraction - -------------------------------------------------------------------- -Thu May 23 16:43:13 CEST 2002 - adrian@suse.de - -- Obsolete/provide kups and add start script - -------------------------------------------------------------------- -Thu May 23 14:48:35 CEST 2002 - coolo@suse.de - -- adding a update_admin snippet here too, so we can fix kde 3 - apps the same way as kde 2 apps - -------------------------------------------------------------------- -Wed May 22 01:18:18 CEST 2002 - adrian@suse.de - -- use coolo's famous common_options config file format - old common_compile_options file is not disabled for now -- use explicit --enable-debug=full if RPM_OPT_FLAGS~=-g - -------------------------------------------------------------------- -Tue May 21 16:28:23 CEST 2002 - adrian@suse.de - -- use Dirk's official post-3.0.1 patch and disable our former ones - * includes a security fix for khtml, known as "Opera exploit" - * fix "arts not starting realtime" problem (typo in reading config -variable). - * fix crashing kbuildsycoca when it hits an unreadable directory - * fix a text selection problem for KMail. - * fix a problem where (i)frame's accidently were not resized correctly. - * fix mime-detection of koffice post v1.1 documents - * urgent fixes in kfiledialog - -------------------------------------------------------------------- -Fri May 17 15:09:31 CEST 2002 - adrian@suse.de - -- fix dieing kio slave on https connections - -------------------------------------------------------------------- -Fri May 17 14:09:44 CEST 2002 - adrian@suse.de - -- reduce noise on stdout from khtml (extend shut_up.dif) - -------------------------------------------------------------------- -Tue May 14 11:42:25 CEST 2002 - adrian@suse.de - -- use updated 3.0.1 tar ball include crash fixes (esp. for kmail) - -------------------------------------------------------------------- -Mon May 13 14:46:46 CEST 2002 - adrian@suse.de - -- set requirement back to qt-3.0.3 version - -------------------------------------------------------------------- -Fri May 10 16:11:58 CEST 2002 - adrian@suse.de - -- workaround rpm parse bug for old distributions - -------------------------------------------------------------------- -Fri May 10 13:29:58 CEST 2002 - adrian@suse.de - -- update to version 3.0.1 and remove obsolete patches - -------------------------------------------------------------------- -Tue May 7 12:49:37 CEST 2002 - meissner@suse.de - -- %_lib fixes inside the .cpp files (should now find SSL libraries) - -------------------------------------------------------------------- -Mon May 6 16:33:47 CEST 2002 - meissner@suse.de - -- %_lib fixes - -------------------------------------------------------------------- -Tue Apr 16 14:58:17 CEST 2002 - adrian@suse.de - -- Require spell (either ispell or aspell) > 8.0 only -- use --disable-final and -O0 on mips - -------------------------------------------------------------------- -Fri Apr 12 15:53:49 MEST 2002 - adrian@suse.de - -- set --enable-mt. Not needed for kdelibs3, but it should be - in the common compiler flags for some other applications with - older admin folder - -------------------------------------------------------------------- -Tue Apr 9 14:12:43 CEST 2002 - adrian@suse.de - -- fix kde api generation for 7.1, 7.2 and 7.3 based distributions - -------------------------------------------------------------------- -Tue Mar 26 00:14:11 CET 2002 - adrian@suse.de - -- update to new 3.0 final version. the last one. sure. -- comment out last harmless warning message from kdelibs - -------------------------------------------------------------------- -Mon Mar 25 20:31:47 CET 2002 - adrian@suse.de - -- update 3.0 final tar ball -- 2 urgent fixes ( kdirlister ) - -------------------------------------------------------------------- -Mon Mar 25 10:45:55 CET 2002 - adrian@suse.de - -- update to 3.0 final (everything is wonderfull version) -- switch from /etc/X11/kde3 to /etc/opt/kde3 to be FHS compliant -- add /etc/kde3rc with prefix, so we do not need $KDEDIRS anymore - -------------------------------------------------------------------- -Thu Mar 21 19:05:29 CET 2002 - adrian@suse.de - -- use kdoc to generate api-documentation again - (makes the class browser of kdevelop happy) - -------------------------------------------------------------------- -Thu Mar 21 16:55:43 CET 2002 - adrian@suse.de - -- update to 3.0rc3 - -------------------------------------------------------------------- -Sun Mar 10 17:03:38 CET 2002 - adrian@suse.de - -- update to 3.0rc2 - -------------------------------------------------------------------- -Mon Mar 4 17:31:55 CET 2002 - adrian@suse.de - -- update to 3.0rc1 - -------------------------------------------------------------------- -Mon Feb 25 19:09:57 CET 2002 - adrian@suse.de - -- update to snapshot 2.92.2002022512 - -------------------------------------------------------------------- -Mon Feb 18 20:55:08 CET 2002 - adrian@suse.de - -- update to snapshot 2.92.2002021810 - -------------------------------------------------------------------- -Thu Feb 14 23:26:36 CET 2002 - adrian@suse.de - -- update to snapshot 2.92.2002021421 -- split kdelibs3-artsd package into arts and arts-devel -- add Doug Lea's fast threaded malloc function from glibc 2.3 - * prepared by Lubos Lunak - * integrated into libkdecore - * add dummy library to make it configurable via libKmalloc.so link - * disabled by default - -------------------------------------------------------------------- -Mon Feb 11 15:07:20 CET 2002 - adrian@suse.de - -- update to snapshot 2.92.2002021111 - -------------------------------------------------------------------- -Mon Feb 4 23:51:35 CET 2002 - adrian@suse.de - -- update to 2.92 (KDE 3.0 beta 2) -- create common_compile_flags file - -------------------------------------------------------------------- -Fri Feb 1 00:26:05 CET 2002 - ro@suse.de - -- changed neededforbuild to - -------------------------------------------------------------------- -Mon Jan 28 14:49:00 CET 2002 - adrian@suse.de - -- update to snapshot from 2.91.2002012811 - -------------------------------------------------------------------- -Wed Jan 23 01:50:51 CET 2002 - adrian@suse.de - -- add missing header files - -------------------------------------------------------------------- -Wed Jan 23 00:31:21 CET 2002 - adrian@suse.de - -- update to snapshot 2.91.2002012221 - -------------------------------------------------------------------- -Tue Jan 15 18:24:51 CET 2002 - adrian@suse.de - -- update to snapshot 2.91.2002011511 - -------------------------------------------------------------------- -Sat Jan 5 18:28:06 CET 2002 - adrian@suse.de - -- update to recent/todays snapshot -- disable rpath for SuSE > 7.3 - (/opt/kde3/lib is in ld.so.conf) -- add Requires: line for at least Qt 3.0.1 - -------------------------------------------------------------------- -Mon Dec 17 15:58:49 CET 2001 - adrian@suse.de - -- fix compile on s390 -- add fix for khtml seg fault -- do not build documentation for <7.3 distributions until kdoc - is fixed - -------------------------------------------------------------------- -Wed Dec 12 17:02:34 CET 2001 - adrian@suse.de - -- update to KDE 3.0 Beta 1 - -------------------------------------------------------------------- -Tue Dec 4 20:13:20 CET 2001 - adrian@suse.de - -- use current CVS snapshot - -------------------------------------------------------------------- -Fri Nov 2 12:30:45 CET 2001 - adrian@suse.de - -- using cvs snapshot from 01 Nov 2001 - -------------------------------------------------------------------- -Sat Oct 20 17:57:21 CEST 2001 - adrian@suse.de - -- using newer cvs-snapshot - (compiles again with qt 3 final) - -------------------------------------------------------------------- -Tue Oct 9 11:55:41 CEST 2001 - adrian@suse.de - -- branch to first kdelibs 3 (alpha 1) - -------------------------------------------------------------------- -Mon Sep 24 01:40:05 CEST 2001 - adrian@suse.de - -- add security fix for peer-ssl from Dirk -- add fix to make it possible to allow JS from local pages - -------------------------------------------------------------------- -Fri Sep 21 22:51:53 CEST 2001 - adrian@suse.de - -- add fix for kbuildsycoca --incremental from Waldo - (changed files (due to updated packages or a SuSEconfig run for - example) do not lead anymore to an incorrect ksycoca database. - -------------------------------------------------------------------- -Tue Sep 18 08:55:26 CEST 2001 - adrian@suse.de - -- add symbolic link to /opt/kde2/doc/HTML/en/kdeapi -- #neededforbuild cups -> cups-libs - -------------------------------------------------------------------- -Sat Sep 15 19:13:06 CEST 2001 - adrian@suse.de - -- add klineedit fix -- add warning that kdDebug function is disabled (except for ppc) -- fix kdelibs-2.2.1.dif (do not apply patch for ppc-only global) - -------------------------------------------------------------------- -Thu Sep 13 09:36:06 CEST 2001 - adrian@suse.de - -- add fix for kjs (octal parsing) -- add fix icondialog (custom icon directorys) -- fix ia64 patch - -------------------------------------------------------------------- -Tue Sep 11 10:54:21 CEST 2001 - adrian@suse.de - -- add security fixes for kssl (do not save keys on disk) -- add Qt API to the API index page - -------------------------------------------------------------------- -Mon Sep 10 14:41:23 CEST 2001 - adrian@suse.de - -- update to to second try of kdelibs 2.2.1 tar ball - * JavaScript fixes -- fix ia64 workarounds to build on older distris - -------------------------------------------------------------------- -Sun Sep 9 17:57:01 CEST 2001 - schwab@suse.de - -- Fix specfile for ia64 workarounds. - -------------------------------------------------------------------- -Sat Sep 8 20:40:27 CEST 2001 - adrian@suse.de - -- updating to final 2.2.1 tar ball - -------------------------------------------------------------------- -Sun Sep 2 09:59:21 CEST 2001 - adrian@suse.de - -- update to KDE_2_2_BRANCH from 02.09.2001 - * compile fixes - * KFile crash fix - * KDockWidget crash fix, caused crash in quanta - * fix login with chars in password >127 - * load charsets file on demand - * kxmlgui fixed to read really the complete xml file. -- drop -cups package, the cups libs are now splitted from the cups - package. -- add kmimetype hack to get a fallback application for device icons -- make KDE quiet by default (kdDebug default value is 4 now) - -------------------------------------------------------------------- -Tue Aug 28 15:53:23 CEST 2001 - adrian@suse.de - -- update to KDE_2_2_BRANCH from 28.08.2001 - * fix kspell for iso 13 languages - * fix $PATH for kdesu - * check the preview action in setPreviewWidget() - * check for aborted save - * official patch for kbuildsycoca - * kfile fixes - * crash fixes in userstylesheets - * large file system support fix - * crash fix in kbugreport -- removed patches for kbuildsycoca and large file support - -------------------------------------------------------------------- -Sat Aug 25 09:49:21 CEST 2001 - adrian@suse.de - -- update to KDE_2_2_BRANCH from 25.08.2001 - * khtml supports - * kded updates - * translation updates -- kbuildsycoca speed optimisation - (original patch from Lubos Lunak, reworked to be BC) - -------------------------------------------------------------------- -Tue Aug 21 12:25:49 CEST 2001 - adrian@suse.de - -- using KDE_2_2_BRANCH from 21.08.2001 - * html parser fixes - * artsd fixes - * ... -- disable FAM by default, it can be enabled with - export USE_FAM=1 -- disable and obsolete -i686 package, until the number of problems - are solved - -------------------------------------------------------------------- -Mon Aug 6 23:55:17 CEST 2001 - adrian@suse.de - -- add assert into khtml/misc/loader.cpp as recomended by Dirk -- switch on SSE support in i386 architecture - (arts has a runtime checking) -- clean up file list -- ia64 workarounds - -------------------------------------------------------------------- -Mon Aug 6 10:59:49 CEST 2001 - adrian@suse.de - -- update to final 2.2 - -------------------------------------------------------------------- -Wed Aug 1 15:57:30 CEST 2001 - adrian@suse.de - -- update to 2.2rc1 - -------------------------------------------------------------------- -Fri Jul 6 11:53:42 CEST 2001 - adrian@suse.de - -- generate API documentation - (no need to install kdevelop for api docu anymore) - -------------------------------------------------------------------- -Fri Jun 29 15:39:12 CEST 2001 - adrian@suse.de - -- 2.2beta1 - -------------------------------------------------------------------- -Mon May 28 10:39:18 CEST 2001 - adrian@suse.de - -- 2.2alpha2 - -------------------------------------------------------------------- -Mon Apr 16 22:02:33 CEST 2001 - adrian@suse.de - -- 2.2alpha1 - -------------------------------------------------------------------- -Fri Apr 13 12:54:18 CEST 2001 - adrian@suse.de - -- add currency symbol to KFontDialog preview for testing purposes - -------------------------------------------------------------------- -Tue Apr 10 20:49:07 CEST 2001 - adrian@suse.de - -- revert also kdeinit changes (compile fix) -- add fixes for javascript from CVS -- add fixes for font name mapping from CVS -- add kdeinit_shutdown patch from Waldo - -------------------------------------------------------------------- -Tue Apr 10 01:01:16 MEST 2001 - adrian@suse.de - -- minor fix, but hopefully fix linker problems on all P-II systems - -------------------------------------------------------------------- -Mon Apr 9 11:24:07 CEST 2001 - adrian@suse.de - -- disable alsa for 7.0-ppc - -------------------------------------------------------------------- -Fri Apr 6 11:01:59 CEST 2001 - adrian@suse.de - -- drop the -nostdlib flag during linking. this causes problems - (since not all need libs are used) on some architectures -- -O2 for axp - -------------------------------------------------------------------- -Thu Apr 5 08:56:33 CEST 2001 - adrian@suse.de - -- update to 2_1_BRANCH. - this fixes the proxy server authentication problem - -------------------------------------------------------------------- -Wed Mar 28 18:28:29 CEST 2001 - adrian@suse.de - -- disable ssl support for 7.0-ppc - (problems with the compiler and linker, which can not be fixed - without to loss the BC) - -------------------------------------------------------------------- -Tue Mar 27 12:08:53 CEST 2001 - ro@suse.de - -- changed neededforbuild to - -------------------------------------------------------------------- -Tue Mar 20 21:58:31 CET 2001 - adrian@suse.de - -- enable -O2 for ppc - using inline gcc bug workaround for ia64 - -------------------------------------------------------------------- -Tue Mar 20 18:53:42 CET 2001 - adrian@suse.de - -- update to 2.1.1 (official tar ball) - -------------------------------------------------------------------- -Mon Mar 19 22:03:49 CET 2001 - adrian@suse.de - -- update to current 2_1_BRANCH - we have kde-config as executable binary back - (lots of configure scripts test this) - -------------------------------------------------------------------- -Mon Mar 19 15:39:26 CET 2001 - adrian@suse.de - -- add cyrus-sassl to #neededforbuild - -------------------------------------------------------------------- -Sat Mar 17 21:38:50 CET 2001 - adrian@suse.de - -- added missing packages in #neededforbuild - -------------------------------------------------------------------- -Sat Mar 17 13:32:29 CET 2001 - adrian@suse.de - -- fix CATALOG for distributions <7.2 - update to current 2_1_0_TAG - -------------------------------------------------------------------- -Tue Mar 13 14:29:16 CET 2001 - ro@suse.de - -- added CATALOG for docbook_3 - -------------------------------------------------------------------- -Tue Mar 13 01:12:30 CET 2001 - ro@suse.de - -- changed neededforbuild to - -------------------------------------------------------------------- -Thu Feb 22 19:22:17 CET 2001 - adrian@suse.de - -- the final final 2.1.0 tar ball ... - -------------------------------------------------------------------- -Wed Feb 21 22:42:47 CET 2001 - adrian@suse.de - -- use the right KDE BRANCH (not my fault ;-) - -------------------------------------------------------------------- -Wed Feb 21 17:16:51 CET 2001 - adrian@suse.de - -- update to final 2.1.0 - -------------------------------------------------------------------- -Wed Feb 14 17:04:08 CET 2001 - adrian@suse.de - -- update to 2.1 post beta 2 - -------------------------------------------------------------------- -Mon Jan 22 14:44:41 CET 2001 - stepan@suse.de - -- alpha axp compile fixes for gcc 2.95.2 - -------------------------------------------------------------------- -Tue Jan 16 12:05:26 CET 2001 - adrian@suse.de - -- add a check of return value in kprocess. - Hopefully no crashes anymore. - -------------------------------------------------------------------- -Mon Jan 15 22:13:16 CET 2001 - adrian@suse.de - -- disable --enable-final until the glibc/compiler problem in - kprocess is fixed - -------------------------------------------------------------------- -Mon Jan 15 14:01:38 CET 2001 - adrian@suse.de - -- fix index.desktop for distris <7.1 - -------------------------------------------------------------------- -Sat Jan 13 18:49:40 CET 2001 - adrian@suse.de - -- fix local support in kicker. native language again in menus - this fix does not work for chinese people - fix index.desktop in highcolor, 22x22 actions icons can be loaded - again - -------------------------------------------------------------------- -Fri Jan 12 00:02:33 CET 2001 - adrian@suse.de - -- create some links to see the konqueror gear again - fix hicolor index file - -------------------------------------------------------------------- -Tue Jan 9 22:07:19 CET 2001 - adrian@suse.de - -- added security fix for kdesu from Waldo - -------------------------------------------------------------------- -Mon Jan 8 15:43:09 CET 2001 - adrian@suse.de - -- fix SuSE icon description - -------------------------------------------------------------------- -Sun Jan 7 15:56:58 CET 2001 - adrian@suse.de - -- use additional pathes, to not conflict with older pathes - -------------------------------------------------------------------- -Sun Jan 7 14:24:01 CET 2001 - adrian@suse.de - -- new icon handling. much more clean now and the - dependencie to icons is not needed anymore - -------------------------------------------------------------------- -Sat Jan 6 17:15:51 CET 2001 - adrian@suse.de - -- fix locale support. - LANG=de_DE or LANG=de_DE.utf-8 is working now. - -------------------------------------------------------------------- -Tue Jan 2 21:51:19 CET 2001 - adrian@suse.de - -- added a fix for font handling, if antialising is used - (Thanks Kurt) - -------------------------------------------------------------------- -Mon Jan 1 22:16:48 CET 2001 - adrian@suse.de - -- remove charset for german. this confuses the font handling - added fix for stalled, but broken connections; thanks waldo - -------------------------------------------------------------------- -Sat Dec 30 21:22:21 CET 2000 - adrian@suse.de - -- extend rpm mimelnk for *.spm files - disabled threading - -------------------------------------------------------------------- -Wed Dec 27 18:33:15 CET 2000 - adrian@suse.de - -- drop message in kdeinit, which produce a lot of invalid bugzilla entrys - -------------------------------------------------------------------- -Wed Dec 20 10:38:25 CET 2000 - adrian@suse.de - -- added openssl-devel for #neededforbuild - -------------------------------------------------------------------- -Sun Dec 17 15:55:15 CET 2000 - adrian@suse.de - -- moved icon links back to kdelibs :-( - -------------------------------------------------------------------- -Sun Dec 17 12:54:19 CET 2000 - adrian@suse.de - -- moved icon links from this package to kdebase - -------------------------------------------------------------------- -Fri Dec 15 14:35:38 CET 2000 - adrian@suse.de - -- brown paper bag fix ... I spend Rudi a beer ... - -------------------------------------------------------------------- -Fri Dec 15 12:02:02 CET 2000 - adrian@suse.de - -- added icon packages to #neededforbuild - -------------------------------------------------------------------- -Thu Dec 14 12:38:23 CET 2000 - adrian@suse.de - -- fixed specfile - -------------------------------------------------------------------- -Wed Dec 13 19:22:39 CET 2000 - adrian@suse.de - -- fixed icon links - -------------------------------------------------------------------- -Wed Dec 13 16:52:23 CET 2000 - adrian@suse.de - -- update to current 2_0_BRANCH - -------------------------------------------------------------------- -Wed Nov 29 14:25:31 CET 2000 - adrian@suse.de - -- update to 2.0.1 - -------------------------------------------------------------------- -Wed Nov 22 02:01:26 CET 2000 - ro@suse.de - -- remove penguin.png (in kdebase) - -------------------------------------------------------------------- -Tue Nov 21 15:07:15 CET 2000 - adrian@suse.de - -- fixed /etc/kderc - -------------------------------------------------------------------- -Tue Nov 21 00:08:08 CET 2000 - adrian@suse.de - -- added icon support for non kde icons - added /etc/kderc - ~/Desktop -> ~/KDesktop - -------------------------------------------------------------------- -Thu Nov 16 15:46:49 CET 2000 - adrian@suse.de - -- update to newer snapshot from KDE_2_0_BRANCH - fixed sgml catalog file for our sgml enviroment - -------------------------------------------------------------------- -Fri Nov 3 08:45:45 CET 2000 - adrian@suse.de - -- fixed needed for build - -------------------------------------------------------------------- -Thu Nov 2 20:35:30 CET 2000 - adrian@suse.de - -- fixed file list - -------------------------------------------------------------------- -Tue Oct 17 04:52:05 CEST 2000 - adrian@suse.de - -- update to 2.0.0 -- changed default for ~/.kde to ~/.kde2 -- dropped klibs2i and klibs2cr again -- splitted package in - * kdelibs - * kdelibs-devel - -------------------------------------------------------------------- -Wed Sep 20 11:29:35 CEST 2000 - adrian@suse.de - -- the last fix :-( - -------------------------------------------------------------------- -Sun Sep 17 00:27:08 CEST 2000 - adrian@suse.de - -- splited klibs2 into klibs2, klibs2i (international version - without crypt support) and klibs2cr (crypt version) - -------------------------------------------------------------------- -Sat Sep 16 15:17:06 CEST 2000 - adrian@suse.de - -- removed ssl/ssh support - added big endian fix in KPixmap - -------------------------------------------------------------------- -Tue Sep 12 11:49:35 MEST 2000 - adrian@suse.de - -- changed to -O0 for ppc and alpha - -------------------------------------------------------------------- -Tue Sep 12 08:56:11 CEST 2000 - adrian@suse.de - -- update to RC 1 - -------------------------------------------------------------------- -Mon Aug 21 14:04:31 CEST 2000 - adrian@suse.de - -- update to beta 4 - -------------------------------------------------------------------- -Mon Jul 24 17:46:04 CEST 2000 - adrian@suse.de - -- update to second version of beta 3 - -------------------------------------------------------------------- -Fri Jul 21 22:39:53 CEST 2000 - adrian@suse.de - -- update to beta 3 - -------------------------------------------------------------------- -Mon Jul 17 19:24:01 CEST 2000 - adrian@suse.de - -- update to snapshot from 17.07.2000 - -------------------------------------------------------------------- -Thu Jul 6 19:48:47 CEST 2000 - adrian@suse.de - -- Spec file created from kdelibs-1.91.20000706.tar.gz by autospec - - -------------------------------------------------------------------- -Fri Jun 9 17:15:52 CEST 2000 - adrian@suse.de - -- correct neededforbuild and updated khtml - -------------------------------------------------------------------- -Fri Jun 9 02:35:16 CEST 2000 - adrian@suse.de - -- update to 1.91; beta 2 - -------------------------------------------------------------------- -Tue Jun 6 01:29:47 CEST 2000 - adrian@suse.de - -- snapshot from 06.06.2000 - -------------------------------------------------------------------- -Sun May 28 09:22:23 CEST 2000 - adrian@suse.de - -- snapshot from 28.05.2000 - new type of spec file - -------------------------------------------------------------------- -Fri May 12 13:29:41 CEST 2000 - adrian@suse.de - -- update to KDE 1.90 - -------------------------------------------------------------------- -Thu Apr 27 17:45:45 CEST 2000 - adrian@suse.de - -- snapshot from 25.04.2000 - -------------------------------------------------------------------- -Thu Apr 20 14:27:28 CEST 2000 - adrian@suse.de - -- fixed file list - -------------------------------------------------------------------- -Wed Apr 19 17:17:42 CEST 2000 - adrian@suse.de - -- snapshot from 17.04.2000 - -------------------------------------------------------------------- -Thu Apr 6 19:21:15 CEST 2000 - adrian@suse.de - -- snapshot from 06.04.2000 - -------------------------------------------------------------------- -Thu Mar 30 18:44:11 CEST 2000 - adrian@suse.de - -- first KDE libs 2 package. PRE 1.90 Version - diff --git a/opensuse/tdelibs/tdelibs-devel-doc.spec b/opensuse/tdelibs/tdelibs-devel-doc.spec deleted file mode 100644 index cf74b334f..000000000 --- a/opensuse/tdelibs/tdelibs-devel-doc.spec +++ /dev/null @@ -1,115 +0,0 @@ -# -# spec file for package tdelibs-devel-doc -# -# Copyright (c) 2011 the Trinity Project (opensuse). -# -# All modifications and additions to the file contributed by third parties -# remain the property of their copyright owners, unless otherwise agreed -# upon. The license for this file, and modifications and additions to the -# file, is the same license as for the pristine package itself (unless the -# license for the pristine package is not an Open Source License, in which -# case the license is the MIT License). An "Open Source License" is a -# license that conforms to the Open Source Definition (Version 1.9) -# published by the Open Source Initiative. - -# Please submit bugfixes or comments via http://bugs.trinitydesktop.org/ -# - -# norootforbuild - - -Name: tdelibs-devel-doc -BuildRequires: OpenEXR-devel aspell-devel cups-devel db-devel doxygen graphviz tdelibs-devel krb5-devel libjasper libsndfile openldap2-devel qt3-devel-doc libtqt4-devel tde-filesystem utempter xorg-x11-fonts-100dpi xorg-x11-fonts-75dpi xorg-x11-fonts-scalable -BuildRequires: avahi-compat-mDNSResponder-devel fdupes -URL: http://www.trinitydesktop.org -License: GPLv2+ -Group: Documentation/HTML -BuildRoot: %{_tmppath}/%{name}-%{version}-build -Summary: Additional Package Documentation -Version: 3.5.12.99 -Release: 1 -%define tdelibs_patch_level b -BuildArch: noarch -Requires: tdelibs qt3-devel-doc -Source0: kdelibs-%{version}.tar.bz2 -Source1: create-kdeapi -Source4: api_docu_description - -%description -This package contains a generated API documentation for all library -classes provided by tdelibs. The index page for all TDE API functions -is: - -file:/usr/share/doc/TDE-API/index.html - - - -Authors: --------- - The KDE Team - -%prep - echo %suse_version -%setup -q -n kdelibs-%{version} - -%build -%if %is_plus - # supplementary package - DISTRI="openSUSE $BUILD_DISTRIBUTION_VERSION UNSUPPORTED" -%else - # official build on released and maintained products - DISTRI="openSUSE $BUILD_DISTRIBUTION_VERSION" -%endif -export QTDOCDIR=/usr/share/doc/packages/qt3/html -%cmake_tde -d build -- -DKDE_DISTRIBUTION="$DISTRI" -%make_tde -d build -- apidox - -%install - list=`find . -name Makefile.am | xargs grep Doxy | sed -e "s,/Makefile.am.*,," | sort -u ` - for i in $list; do %makeinstall_tde -d build -- -C $i DESTDIR=$RPM_BUILD_ROOT install-apidox || true; done - # The modern way, with kdevelop-incompatible api documentation :/ - mkdir -p $RPM_BUILD_ROOT/usr/share/doc/TDE-API/ - # *** everytime you edit the following line, you made a mistake. Update macros.tde - # *** version instead - KDEDOCDIR=%{_tde_htmldir}/en/kdelibs-apidocs - # this is forgotten, but kdevelop needs it - mkdir -p $RPM_BUILD_ROOT/$KDEDOCDIR - if test -d apidocs/qt; then - cp -a apidocs/qt $RPM_BUILD_ROOT/$KDEDOCDIR - fi - set +x - exitc=0 - for i in `ls -1 $RPM_BUILD_ROOT/$KDEDOCDIR/*/html/index.html`; do - lib=`echo $i | sed -e 's,/html/index.html,,; s,.*/\([^/]*\)$,\1,'` - if ! egrep "^$lib:" %SOURCE4 ; then - echo "ERROR: no description for library $lib" - exitc=1 - fi - sed -n -e 's@'"${lib}"':\(.*\)@\1@p' %SOURCE4 > ${RPM_BUILD_ROOT}/${KDEDOCDIR}/${lib}/description.SuSE - echo "kdelibs" > ${RPM_BUILD_ROOT}/${KDEDOCDIR}/${lib}/package.SuSE - done - if test "$exitc" != 0; then - exit $exitc - fi - ln -s $KDEDOCDIR/index.html $RPM_BUILD_ROOT/usr/share/doc/TDE-API/index.html - rm -rf ${RPM_BUILD_ROOT}/%{_tde_datadir} - mkdir -p $RPM_BUILD_ROOT/%{_tde_datadir}/tdelibs - install -m 0755 %SOURCE1 $RPM_BUILD_ROOT/%{_tde_datadir}/tdelibs/ - %fdupes -s $RPM_BUILD_ROOT - -%post -%{_tde_datadir}/tdelibs/create-kdeapi - -%clean - rm -rf ${RPM_BUILD_ROOT} - -%files -%defattr(-,root,root) -%dir %{_tde_sharedir} -%dir %{_tde_datadir} -%dir %{_tde_datadir}/tdelibs -/usr/share/doc/TDE-API -%{_tde_datadir}/tdelibs/create-kdeapi -%{_tde_docdir} - -%changelog diff --git a/opensuse/tdelibs/tdelibs.changes b/opensuse/tdelibs/tdelibs.changes deleted file mode 100644 index ac5164f07..000000000 --- a/opensuse/tdelibs/tdelibs.changes +++ /dev/null @@ -1,4301 +0,0 @@ -------------------------------------------------------------------- -Sat Aug 13 21:19:53 UTC 2011 - rxu@lincomlinux.org - -- initial conversion to Trinity - -------------------------------------------------------------------- -Fri Jun 17 09:55:54 UTC 2011 - aj@suse.de - -- Add /etc/ld.so.conf.d/kdelibs3.conf (bnc#671725). - -------------------------------------------------------------------- -Sat May 7 19:49:45 UTC 2011 - anixx@opensuse.org - -- added patch for scrollbars in light style v2 to prevent appearance of garbage - -------------------------------------------------------------------- -Mon Feb 21 10:37:20 UTC 2011 - aj@suse.de - -- Use /proc//oom_score_adj if available as new interface. - -------------------------------------------------------------------- -Mon Apr 19 18:49:44 UTC 2010 - tittiatcoke@gmail.com - -- apply patch to enable build with openssl 1.0 - -------------------------------------------------------------------- -Sun Feb 21 09:50:18 UTC 2010 - coolo@novell.com - -- apply patch from fedora to support autoconf >= 2.64 - -------------------------------------------------------------------- -Wed Jan 13 16:04:24 CET 2010 - dmueller@suse.de - -- fix build against gcc 4.5 - -------------------------------------------------------------------- -Sun Jan 10 14:50:34 CET 2010 - ro@suse.de - -- include cstring in fakes.c to fix build - -------------------------------------------------------------------- -Thu Dec 24 12:58:07 UTC 2009 - aj@suse.de - -- Only remove file from catalog if it disappeared. - -- Do not use release numbers for catalog, they're not needed anymore. - -------------------------------------------------------------------- -Fri Dec 18 22:59:57 CET 2009 - jengelh@medozas.de - -- add baselibs.conf as a source - -------------------------------------------------------------------- -Fri Dec 11 15:32:20 UTC 2009 - llunak@novell.com - -- fix XMLHttpRequest vulnerability (bnc#550618) - -------------------------------------------------------------------- -Mon Nov 23 15:51:20 CET 2009 - llunak@novell.com - -- fix array overrun (CVE-2009-0689) (bnc#557126) - -------------------------------------------------------------------- -Sat Nov 7 07:03:01 UTC 2009 - beineri@opensuse.org - -- ignore inline attribute in applications.menu (bnc#529057) - -------------------------------------------------------------------- -Fri Nov 6 14:43:13 CET 2009 - dmueller@suse.de - -- fix buildrequires - -------------------------------------------------------------------- -Sun Aug 30 09:28:35 CEST 2009 - llunak@novell.com - -- fix macmenu - -------------------------------------------------------------------- -Thu Aug 20 10:55:42 CEST 2009 - beineri@opensuse.org - -- own files previously ghosted by desktop-file-utils (bnc#531122) - -------------------------------------------------------------------- -Mon Jun 15 10:23:45 CEST 2009 - coolo@novell.com - -- do take all autotool versions - -------------------------------------------------------------------- -Fri May 29 13:18:23 CEST 2009 - llunak@suse.cz - -- build with gcc 4.4 - -------------------------------------------------------------------- -Sat Apr 4 17:28:09 CEST 2009 - coolo@suse.de - -- refresh all patches to fix build - -------------------------------------------------------------------- -Fri Feb 13 18:33:23 CET 2009 - coolo@suse.de - -- move sr@Latn away in kde_post_install - -------------------------------------------------------------------- -Mon Feb 9 14:57:47 CET 2009 - coolo@suse.de - -- only take the first part of the release into kdeversion - -------------------------------------------------------------------- -Sat Feb 7 20:39:18 CET 2009 - coolo@suse.de - -- skip the build counter in the kdeversion.h - -------------------------------------------------------------------- -Wed Dec 10 12:34:56 CET 2008 - olh@suse.de - -- use Obsoletes: -XXbit only for ppc64 to help solver during distupgrade - (bnc#437293) - -------------------------------------------------------------------- -Thu Dec 4 12:34:56 CET 2008 - olh@suse.de - -- obsolete old -XXbit packages (bnc#437293) - -------------------------------------------------------------------- -Mon Nov 17 10:28:56 CET 2008 - stbinner@suse.de - -- Fix crash when fixed-layout tables specify all % width as 0 - (affects new ebay myebay version) (bnc#437318) - -------------------------------------------------------------------- -Thu Nov 6 21:22:53 CET 2008 - dmueller@suse.de - -- fix desktop translations after update-translations changes - -------------------------------------------------------------------- -Sun Nov 2 19:05:31 CET 2008 - coolo@suse.de - -- pass a --project to suse_desktop_files (quite a hack as we can't - use rpm macros in here) - -------------------------------------------------------------------- -Fri Oct 17 12:56:14 CEST 2008 - stbinner@suse.de - -- make a png non-executable (bnc#433749) - -------------------------------------------------------------------- -Wed Sep 24 20:45:39 CEST 2008 - wstephenson@suse.de - -- Fix vcard encoding issue (bnc#382959) - -------------------------------------------------------------------- -Wed Sep 10 13:02:23 CEST 2008 - dmueller@suse.de - -- fix m4 macro nesting -- fix build of inotify stuff for SLE10 - -------------------------------------------------------------------- -Tue Sep 9 11:52:53 CEST 2008 - dmueller@suse.de - -- update admin tarball for python 2.6 support - -------------------------------------------------------------------- -Mon Sep 8 22:34:30 CEST 2008 - dmueller@suse.de - -- fix inotify support with 2.6.27 (fixes build) - -------------------------------------------------------------------- -Wed Aug 20 18:43:12 CEST 2008 - coolo@suse.de - -- update to KDE 3.5.10 - * translation updates - * bugfixes - * desktop files validate - * removed patches upstreamed - -------------------------------------------------------------------- -Mon Jul 28 17:20:28 CEST 2008 - llunak@suse.cz - -- return kdesu password timeout back to 2 hours (bnc#404521) - -------------------------------------------------------------------- -Thu Jul 3 07:14:37 CEST 2008 - dmueller@suse.de - -- fix ftp protocol overwriting existing files during rename (bnc#399296) - -------------------------------------------------------------------- -Tue Jun 3 14:46:25 CEST 2008 - stbinner@suse.de - -- fix Desktop and Network icons missing in kcontrol (bnc#396153) - -------------------------------------------------------------------- -Tue May 27 10:42:55 CEST 2008 - llunak@suse.cz - -- fix kdesu not defaulting to sudo anymore (bnc#216796) - -------------------------------------------------------------------- -Tue May 20 18:00:29 CEST 2008 - llunak@suse.cz - -- do not always default to kdesu remembering password (bnc#386531) - -------------------------------------------------------------------- -Mon May 19 21:21:40 CEST 2008 - llunak@suse.cz - -- fix useless and potentionally even harmful usage of kde3 wrapper - -------------------------------------------------------------------- -Fri May 9 10:35:21 CEST 2008 - dmueller@suse.de - -- 3_5_BRANCH.diff update: - * translation fixes - * fix kdesu -t splitting lines (bnc#335507) - -------------------------------------------------------------------- -Sat Apr 26 02:07:41 CEST 2008 - dmueller@suse.de - -- fix start_kdeinit vulnerability (CVE-2008-1671, bnc#382618) - -------------------------------------------------------------------- -Fri Apr 25 18:00:19 CEST 2008 - llunak@suse.cz - -- change kdesu defaults to keeping a password for 5min (bnc#216796) - -------------------------------------------------------------------- -Wed Apr 23 13:40:22 CEST 2008 - llunak@suse.cz - -- 3_5_BRANCH.diff update to remove fsync() causing bad I/O - performance - -------------------------------------------------------------------- -Thu Apr 10 16:22:10 CEST 2008 - stbinner@suse.de - -- don't dump mime types of KDE4 apps but give it only low priority - -------------------------------------------------------------------- -Thu Apr 10 12:54:45 CEST 2008 - ro@suse.de - -- added baselibs.conf file to build xxbit packages - for multilib support - -------------------------------------------------------------------- -Mon Apr 7 14:24:56 CEST 2008 - dmueller@suse.de - -- remove ispell_dictionary as it breaks locale selection (bnc#204734) - -------------------------------------------------------------------- -Wed Mar 12 15:07:19 CET 2008 - dmueller@suse.de - -- 3_5_BRANCH.diff update to fix media manager autostart in KDE4 - -------------------------------------------------------------------- -Wed Feb 13 19:52:59 CET 2008 - dmueller@suse.de - -- update to 3.5.9: - * 9th bugfix release of KDE 3.5 - * remove patches that are already upstream - -------------------------------------------------------------------- -Fri Feb 8 22:18:23 CET 2008 - stbinner@suse.de - -- prevent autostarted application crashes under KDE4 (bnc#359800) - -------------------------------------------------------------------- -Thu Jan 10 14:11:25 CET 2008 - dmueller@suse.de - -- branch update (#334277, #348088) - -------------------------------------------------------------------- -Wed Jan 2 08:32:09 CET 2008 - stbinner@suse.de - -- update 3_5_BRANCH.diff to pick up some qxembed fixes - -------------------------------------------------------------------- -Wed Nov 14 13:08:53 CET 2007 - dmueller@suse.de - -- add 3_5_BRANCH.diff to fix the latest gcc 4.3 build - problem of the day - -------------------------------------------------------------------- -Mon Nov 5 15:50:12 CET 2007 - dmueller@suse.de - -- remove nosource tag from kdelib3-devel-doc - -------------------------------------------------------------------- -Tue Oct 9 10:53:35 CEST 2007 - stbinner@suse.de - -- update to KDE 3.5.8: - * small performance improvements in core libs - * bugfixes in core libs, http ioslave, khtml and kjs -- fix problem with focus when mailing link from Konqueror (#333386) -- fix non-KDE X-KDE-SubstituteUID apps not starting (#325633) -- fix WINE menu entries not being shown in the menu (#331598) - -------------------------------------------------------------------- -Mon Oct 1 14:00:49 CEST 2007 - stbinner@suse.de - -- SVN commit 717341: Revert r707381 which broke http-headers, and - add a bit more buffer to handle long http-headers like X-JSON - -------------------------------------------------------------------- -Thu Sep 27 15:31:48 CEST 2007 - dmueller@suse.de - -- drop -Bdirect - -------------------------------------------------------------------- -Mon Sep 17 13:59:30 CEST 2007 - stbinner@suse.de - -- fix build for < 10.3 -- fix bug 301648: Cannot select "remote charset" in Konqueror - -------------------------------------------------------------------- -Fri Sep 14 16:48:24 CEST 2007 - dmueller@suse.de - -- fix crash in kded on shutdown (#304640) -- fix addressbook ressource saving refcount bug -- fix konqueror slowdown on Qt API documentation -- fix cross domain cookie injection (kde bug #134421) -- http kioslave fixes to make it work with big and chunked - http response headers -- fix addressbar spoofing (#298707, #298736, CVE-2007-4224, - CVE-2007-4225, CVE-2007-3820) - -------------------------------------------------------------------- -Tue Sep 11 18:31:27 CEST 2007 - stbinner@suse.de - -- add mime-type definitions for Open XML docx, pptx & xlsx (#307159) - -------------------------------------------------------------------- -Tue Sep 11 14:59:41 CEST 2007 - stbinner@suse.de - -- fix kde4 application may get started instead of user substituded - kde3 application (#309044) - -------------------------------------------------------------------- -Tue Sep 11 13:45:02 CEST 2007 - tpatzig@suse.de - -- fix kded destructor to delete all loaded modules (#228865) - -------------------------------------------------------------------- -Tue Sep 11 10:51:13 CEST 2007 - stbinner@suse.de - -- only check for mime type starting with ""Shockwave Flash" (#304999) - -------------------------------------------------------------------- -Mon Sep 10 14:14:18 CEST 2007 - dmueller@suse.de - -- apply susetranslations in kbuildsycoca (#196855) - -------------------------------------------------------------------- -Mon Sep 3 15:08:18 CEST 2007 - stbinner@suse.de - -- search for locale and help also in /opt/kde3/share/locale-bundle, - /opt/kde3/share/doc-bundle & /usr/share/gnome/help-bundle (#302270) - -------------------------------------------------------------------- -Thu Aug 30 17:36:31 CEST 2007 - dmueller@suse.de - -- fix kdebug assertions on suppressed output - -------------------------------------------------------------------- -Wed Aug 29 14:27:01 CEST 2007 - stbinner@suse.de - -- get a missing Flash plugin not from Adobe but non-oss (#304999) - -------------------------------------------------------------------- -Fri Aug 24 18:28:42 CEST 2007 - dmueller@suse.de - -- disable kdDebug by default (#304173) - -------------------------------------------------------------------- -Fri Aug 10 18:56:56 CEST 2007 - dmueller@suse.de - -- add workaround for kernel garbling environ in kdeinit (#298943) - -------------------------------------------------------------------- -Sat Aug 4 18:38:32 CEST 2007 - stbinner@suse.de - -- update 3_5_BRANCH.diff: - * make KAcceleratorManager automanage popups - * fix kiconloader to scale if possible rather than return unknown - -------------------------------------------------------------------- -Fri Aug 3 13:16:55 CEST 2007 - stbinner@suse.de - -- split off libkdefx and Plastik into default-style sub-package - -------------------------------------------------------------------- -Sun Jul 22 07:27:46 CEST 2007 - coolo@suse.de - -- remove patch that conflicts with the 3.5 update because - it went upstream too - -------------------------------------------------------------------- -Fri Jul 20 14:57:35 CEST 2007 - llunak@suse.cz - -- update 3_5_BRANCH.diff to include bugfixes (#293424) - -------------------------------------------------------------------- -Mon Jul 16 13:46:19 CEST 2007 - stbinner@suse.de - -- ensure that correct kcmshell is called (#277292) - -------------------------------------------------------------------- -Fri Jul 13 11:41:55 CEST 2007 - stbinner@suse.de - -- add text completion editor to khtml forms and KHistoryCombo - -------------------------------------------------------------------- -Mon Jul 9 13:29:02 CEST 2007 - dmueller@suse.de - -- add patch for being able to open kwallet via DCOP - -------------------------------------------------------------------- -Thu Jun 28 15:03:28 CEST 2007 - wstephenson@suse.de - -- allow http to contact localhost when in offline mode - -------------------------------------------------------------------- -Tue Jun 19 23:58:03 CEST 2007 - dmueller@suse.de - -- update 3_5_BRANCH.diff to fix various 3.5.7 regressions - -------------------------------------------------------------------- -Sun Jun 10 13:38:14 CEST 2007 - stbinner@suse.de - -- brand default user agent like done in Firefox - -------------------------------------------------------------------- -Fri Jun 8 12:05:40 CEST 2007 - dmueller@suse.de - -- fix quoting in desktop-translations hook - -------------------------------------------------------------------- -Tue Jun 5 09:28:56 CEST 2007 - stbinner@suse.de - -- add Provides: kdepim3-networkstatus -- restore binary compatibility in network status patch (#279884) -- update common_options_legacy from common_options - -------------------------------------------------------------------- -Fri Jun 1 17:33:17 CEST 2007 - dmueller@suse.de - -- update to current 3_5_BRANCH: - * removes patches that went upstream - * adds kinit wrapper for OOM protection - -------------------------------------------------------------------- -Wed May 30 18:45:10 CEST 2007 - wstephenson@suse.de - -- Update Obsoletes: as networkstatus was moved into libs - -------------------------------------------------------------------- -Tue May 29 19:44:47 CEST 2007 - dmueller@suse.de - -- fix kde_post_install to also find desktop files in - other subdirectories under /opt/kde3/share -- use kde_post_install -- drop obsolete patch - -------------------------------------------------------------------- -Thu May 24 21:26:16 CEST 2007 - wstephenson@suse.de - -- Revised offline mode infrastructure (#237274) - -------------------------------------------------------------------- -Wed May 23 13:55:04 CEST 2007 - stbinner@suse.de - -- use %fdupes -- add missing ldconfig calls - -------------------------------------------------------------------- -Mon May 14 22:10:06 CEST 2007 - stbinner@suse.de - -- update to 3.5.7 - * several bugfixes in khtml, kjs and katepart -- add khtml patch to fix Google Mail - -------------------------------------------------------------------- -Mon May 7 15:36:45 CEST 2007 - stbinner@suse.de - -- X-KDE-AutoEmbed=false for Java applications (#210967) - -------------------------------------------------------------------- -Thu Apr 26 14:55:36 CEST 2007 - dmueller@suse.de - -- fix avahi daemon detection (#264233) - -------------------------------------------------------------------- -Mon Apr 23 16:45:29 CEST 2007 - stbinner@suse.de - -- don't start randomly KDE4 when a KDE3 app exists via mini-cli -- interpret OnlyShowIn=KDE of KDE4 applications as NotShowIn - -------------------------------------------------------------------- -Fri Apr 20 16:43:44 CEST 2007 - stbinner@suse.de - -- ignore mime types of kde4 applications and mark them in menus - -------------------------------------------------------------------- -Fri Apr 20 10:14:20 CEST 2007 - nadvornik@suse.cz - -- adjusted BuildRequires for libjasper-devel - -------------------------------------------------------------------- -Mon Apr 16 17:59:08 CEST 2007 - dmueller@suse.de - -- add unzip to buildrequires for the java checker - -------------------------------------------------------------------- -Thu Apr 12 13:37:13 CEST 2007 - stbinner@suse.de - -- default to UTF-8 encoding for spellchecking (#261217) - -------------------------------------------------------------------- -Tue Apr 3 22:56:10 CEST 2007 - stbinner@suse.de - -- update 3_5_BRANCH diff to fix build of kde3-i18n -- fix compiler options for gcc on < 10.3 - -------------------------------------------------------------------- -Mon Apr 2 18:13:42 CEST 2007 - dmueller@suse.de - -- update 3_5_BRANCH diff to include fix for - * possible utf8 overlong decoding issue in kjs (#259187) - * crash during ftp PASV scanning (#257045) - * possible XSS in title tags (#238377) - -------------------------------------------------------------------- -Mon Mar 26 22:31:33 CEST 2007 - dmueller@suse.de - -- add libbz2-devel build requires - -------------------------------------------------------------------- -Thu Mar 22 19:36:19 CET 2007 - stbinner@suse.de - -- adapt lpoptions config file position for CUPS 1.2 (#252947) - -------------------------------------------------------------------- -Tue Mar 20 18:26:03 CET 2007 - dmueller@suse.de - -- fix typo in xauth localhostname patch which inverts the logic - -------------------------------------------------------------------- -Mon Mar 19 13:35:16 CET 2007 - dmueller@suse.de - -- update 3_5_BRANCH.diff (#255753) - -------------------------------------------------------------------- -Mon Mar 12 11:04:05 CET 2007 - stbinner@suse.de - -- update 3_5_BRANCH.diff to fix katepart selection problems - -------------------------------------------------------------------- -Fri Mar 9 16:30:35 CET 2007 - dmueller@suse.de - -- apply 3_5_BRANCH.diff to fix build with Qt 3.3.8 - -------------------------------------------------------------------- -Fri Mar 9 14:19:43 CET 2007 - stbinner@suse.de - -- install kttds icon to hicolor/apps/ instead of crystalsvg/apps/ - -------------------------------------------------------------------- -Thu Mar 8 11:45:07 CET 2007 - stbinner@suse.de - -- adapt fix-gnome-help-support.diff to GNOME prefix move (#247434) - -------------------------------------------------------------------- -Thu Feb 22 13:38:59 CET 2007 - stbinner@suse.de - -- make previous changes block only active for > 10.2 - -------------------------------------------------------------------- -Wed Feb 21 16:57:10 CET 2007 - dobey@suse.de - -- Remove hicolor scalable sizes patch - Remove the kdelibs installed hicolor index.theme - Require hicolor-icon-theme - Fixes https://bugzilla.novell.com/show_bug.cgi?id=247278 - -------------------------------------------------------------------- -Tue Feb 6 17:49:52 CET 2007 - dmueller@suse.de - -- update 3_5_BRANCH to include latest fixes - -------------------------------------------------------------------- -Fri Feb 2 17:59:42 CET 2007 - stbinner@suse.de - -- fix changes file not incremental - -------------------------------------------------------------------- -Wed Jan 24 11:45:53 CET 2007 - stbinner@suse.de - -- update to fixed 3.5.6 tarball (bubble notification problem) - -------------------------------------------------------------------- -Mon Jan 22 10:57:54 CET 2007 - stbinner@suse.de - -- update to 3.5.6 release: - * khtml: - - implement CSS3 extension text-overflow: ellipsis. - - implement overflow-x/y as many websites use it now. - - several incorrect painting and crash bug fixes - * katepart: - - add actionscript highlighting. - - add some pseudo-elements that khtml supports, but FireFox doesn't. - * kdefx: change asterisks on passwords to bullets. - * several bugfixes within kdeprint, kio and kjs - -------------------------------------------------------------------- -Sun Jan 21 19:48:03 CET 2007 - dmueller@suse.de - -- fix build - -------------------------------------------------------------------- -Sat Jan 20 09:13:18 CET 2007 - aj@suse.de - -- Use avahi. - -------------------------------------------------------------------- -Wed Jan 3 19:51:47 CET 2007 - stbinner@suse.de - -- fix kickoff-drop-shadow.diff to not show drop shadows for all - widgets of application after the first where it really should - -------------------------------------------------------------------- -Mon Dec 11 16:19:56 CET 2006 - dmueller@suse.de - -- fix print dialog size in nondefault configuration (#227465) - -------------------------------------------------------------------- -Fri Nov 24 11:39:22 CET 2006 - dmueller@suse.de - -- fix ktip icon hack breaking translations (#221177) - -------------------------------------------------------------------- -Thu Nov 23 16:01:43 CET 2006 - dmueller@suse.de - -- fix cups only accepting localhost as ipp:// hostname (#222938) -- fix samba sharing dialog accessible even though samba not running - (#159223) - -------------------------------------------------------------------- -Wed Nov 22 20:53:12 CET 2006 - stbinner@suse.de - -- fix kdesu resets locale (#222728) - -------------------------------------------------------------------- -Mon Nov 20 17:18:52 CET 2006 - dmueller@suse.de - -- workaround gdb issue with backtraces in drkonqi (#211982) - -------------------------------------------------------------------- -Sat Nov 18 18:35:12 CET 2006 - stbinner@suse.de - -- fix branch kjs crash regression (kde #137518 & #137358), r602712 - -------------------------------------------------------------------- -Wed Nov 15 23:03:23 CET 2006 - dmueller@suse.de - -- run permissions in %post (#221138) - -------------------------------------------------------------------- -Wed Nov 8 16:47:11 CET 2006 - stbinner@suse.de - -- remove historic "Provides:" (#218798) - -------------------------------------------------------------------- -Mon Nov 6 20:53:48 CET 2006 - dmueller@suse.de - -- add patch for drop shadows in kickoff - -------------------------------------------------------------------- -Sun Nov 5 01:22:15 CET 2006 - stbinner@suse.de - -- fix dnd-utf8-fix.diff - -------------------------------------------------------------------- -Sat Nov 4 19:26:38 CET 2006 - stbinner@suse.de - -- fix drag & drop print with utf-8 name (#194400) - -------------------------------------------------------------------- -Fri Nov 3 15:32:59 CET 2006 - stbinner@suse.de - -- also search $XDG_DATA_DIRS/pixmaps for icons for now (#209385) - -------------------------------------------------------------------- -Tue Oct 31 16:52:52 CET 2006 - coolo@suse.de - -- update 3_5_BRANCH.diff - - even more KHTML fixes - -------------------------------------------------------------------- -Fri Oct 27 09:24:47 CEST 2006 - coolo@suse.de - -- update 3_5_BRANCH diff: - * fix severe kde bug 127662, which made working with KDE so much - less fun - -------------------------------------------------------------------- -Fri Oct 20 14:05:57 CEST 2006 - stbinner@suse.de - -- don't show progress when stating kio_beagle for beagle status - -------------------------------------------------------------------- -Thu Oct 19 12:20:58 CEST 2006 - dmueller@suse.de - -- update admin tarball - -------------------------------------------------------------------- -Tue Oct 17 11:05:20 CEST 2006 - dmueller@suse.de - -- update to 3_5_BRANCH.diff to add workaround - for gdb being unable to produce a valid backtrace - -------------------------------------------------------------------- -Mon Oct 16 00:55:23 CEST 2006 - schwab@suse.de - -- Make sure config.rpath is present. -- Update automake version test. - -------------------------------------------------------------------- -Wed Oct 11 22:47:10 CEST 2006 - stbinner@suse.de - -- update 3_5_BRANCH diff: - * fix crash when scheduling job for an invalid URL (#211541) - * fix cstyle indenter regression in Kate - -------------------------------------------------------------------- -Tue Oct 10 14:42:44 CEST 2006 - dmueller@suse.de - -- update 3_5_BRANCH to fix cups connect timeout (#210260) - -------------------------------------------------------------------- -Sat Oct 7 19:48:38 CEST 2006 - stbinner@suse.de - -- update to the next 3.5.5 release tarball - - fixes a crash in Kate when selecting or undoing - - some safe khtml crash fixes - -------------------------------------------------------------------- -Fri Oct 6 14:17:49 CEST 2006 - coolo@suse.de - -- update to the next 3.5.5 release tarball - - fixes for the kdesu show stopper bug - -------------------------------------------------------------------- -Tue Oct 3 21:03:03 CEST 2006 - dmueller@suse.de - -- update admin tarball (fixes kdelibs3-devel-doc) -- fix rejects in testkhtml (fixes testkhtml build) -- update 3_5_BRANCH to include kdesu fixes (#208272) - -------------------------------------------------------------------- -Tue Oct 3 10:08:35 CEST 2006 - stbinner@suse.de - -- update to 3.5.5 release tarball (no crypto changes) - -------------------------------------------------------------------- -Sun Oct 1 18:38:22 CEST 2006 - stbinner@suse.de - -- update 3.5 branch diff: - fixes in knewstuff, khtml and kjs (date object), kio, kate, - kdecore (iconloader, viewport) and kdeprint (cups) - -------------------------------------------------------------------- -Wed Sep 27 12:41:40 CEST 2006 - dmueller@suse.de - -- move ktradertest to kdelibs3 subpackage - -------------------------------------------------------------------- -Tue Sep 26 13:04:08 CEST 2006 - dmueller@suse.de - -- require sudo for 10.2 (#207884) - -------------------------------------------------------------------- -Wed Sep 20 19:23:05 CEST 2006 - dmueller@suse.de - -- add patch for CUPS 1.2.x support (#204453) -- add Viewport support to KWinModule - -------------------------------------------------------------------- -Tue Sep 19 22:53:21 CEST 2006 - dmueller@suse.de - -- add workaround for Xvfb bug in Xorg 7.1 in testkhtml -- fix kdelibs3-devel-doc build -- use sudo for kdesu authentication - -------------------------------------------------------------------- -Thu Sep 14 14:03:31 CEST 2006 - coolo@suse.de - -- update admin tar ball for python 2.5 -- update 3.5 branch diff: - - khtml, kjs fixes - - QXIMInputContext crash workaround - - cups 1.2: also support unix sockets and IPv6 - - protect urls in kdeprint interface - -------------------------------------------------------------------- -Wed Sep 13 11:29:09 CEST 2006 - stbinner@suse.de - -- fix build for < 10.1 - -------------------------------------------------------------------- -Mon Sep 11 16:28:48 CEST 2006 - ltinkl@suse.cz - -- fix #187601 - Swedish characters doesn't display right using fish in Konqueror - to access another computer over the network -- fix #204734 - recommend ispell, ispell_dictionary and enscript in kdelibs3 - -------------------------------------------------------------------- -Thu Sep 7 18:23:20 CEST 2006 - coolo@suse.de - -- update to 3_5_BRANCH to get latest API additions -- remove meaningless "level a" from the version to report and - use the kdelibs3 release number - -------------------------------------------------------------------- -Sun Sep 3 08:49:51 CEST 2006 - stbinner@suse.de - -- fix build - -------------------------------------------------------------------- -Fri Sep 1 17:24:04 CEST 2006 - llunak@suse.cz - -- Add patches with Xinerama improvements -- show Beagle kfile sidebar entry only if daemon is running - -------------------------------------------------------------------- -Fri Sep 1 14:12:38 CEST 2006 - coolo@suse.de - -- dropped unused patch (which required a suseconfig script anyway) -- updated 3_5_BRANCH to pickup random fixes (kate, khtml) - -------------------------------------------------------------------- -Fri Aug 25 00:40:12 CEST 2006 - dmueller@suse.de - -- build - -------------------------------------------------------------------- -Thu Aug 24 17:40:51 CEST 2006 - llunak@suse.cz - -- Search also $XDG_DATA_DIRS for icons (#192460). - -------------------------------------------------------------------- -Wed Aug 23 10:48:23 CEST 2006 - stbinner@suse.de - -- update 3_5_BRANCH (kate, khtml and translation improvements) - -------------------------------------------------------------------- -Mon Aug 14 11:12:09 CEST 2006 - coolo@suse.de - -- update 3_5_BRANCH.diff to fix "kcmshell background" if both GNOME - and KDE are installed - -------------------------------------------------------------------- -Fri Aug 11 15:54:40 CEST 2006 - dmueller@suse.de - -- update 3_5_BRANCH.diff to include fix for SSL issues - -------------------------------------------------------------------- -Mon Aug 7 16:34:42 CEST 2006 - coolo@suse.de - -- update 3_5_BRANCH.diff to include favicon drawing fix - -------------------------------------------------------------------- -Fri Aug 4 15:19:31 CEST 2006 - stbinner@suse.de - -- #define KDELIBS_SUSE in kdeversion.h -- patch kfile for better beagle:/ support -- fix new X.org font paths for testkhtml - -------------------------------------------------------------------- -Sun Jul 23 21:31:55 CEST 2006 - coolo@suse.de - -- update to KDE 3.5.4: - * several katepart, khtml and kjs fixes - * increased usability of KIO KSSL dialog - * allow KLineEdit show a hint message when empy and not focussed - * update the whitelist of IDNs: add gr, is and org - * kprocess/kcrash: add safety checks for set*uid return values - * kdirwatch: fix crashes caused by inotify code - -------------------------------------------------------------------- -Mon Jul 10 08:45:00 CEST 2006 - stbinner@suse.de - -- fix kdelibs3-devel-doc build - -------------------------------------------------------------------- -Sun Jul 9 21:29:14 CEST 2006 - stbinner@suse.de - -- fix duplicate parameter name in kdemm (#189860) - -------------------------------------------------------------------- -Fri Jun 30 11:32:36 CEST 2006 - dmueller@suse.de - -- update 3_5_BRANCH.diff to include KSSL changes for testing - -------------------------------------------------------------------- -Wed Jun 28 21:38:15 CEST 2006 - dmueller@suse.de - -- update admin tarball for autoconf 2.60 support - -------------------------------------------------------------------- -Tue Jun 27 11:29:39 CEST 2006 - stbinner@suse.de - -- update 3_5_BRANCH.diff for KDirWatch fixes (#188527) - -------------------------------------------------------------------- -Mon Jun 19 11:32:35 CEST 2006 - stbinner@suse.de - -- update 3_5_BRANCH.diff for KLineEdit::setClickMessage(QString) - -------------------------------------------------------------------- -Mon Jun 19 07:57:13 CEST 2006 - coolo@suse.de - -- fix 3.5.3 regression: show football news on spiegel.de - again (KDE #128944) - -------------------------------------------------------------------- -Fri Jun 16 09:02:59 CEST 2006 - coolo@suse.de - -- fix requires for older distributions (#185403) - -------------------------------------------------------------------- -Mon Jun 12 15:39:14 CEST 2006 - stbinner@suse.de - -- Add 3_5_BRANCH.diff update to fix openEXR configure check - -------------------------------------------------------------------- -Mon Jun 12 11:06:33 CEST 2006 - dmueller@suse.de - -- Update admin tarball from SVN - -------------------------------------------------------------------- -Fri Jun 9 17:03:58 CEST 2006 - dmueller@suse.de - -- reenable -Wl,as-needed - -------------------------------------------------------------------- -Fri Jun 2 03:45:05 CEST 2006 - dmueller@suse.de - -- disable -Wl,as-needed as long as binutils are not fixed - -------------------------------------------------------------------- -Mon May 29 09:38:58 CEST 2006 - stbinner@suse.de - -- fix build of kdelibs3-devel-doc - -------------------------------------------------------------------- -Wed May 24 09:50:37 CEST 2006 - stbinner@suse.de - -- update to KDE 3.5.3 - * several fixes to khtml, kio, kdeprint, kdeui and io-slaves - -------------------------------------------------------------------- -Tue May 23 14:51:11 CEST 2006 - ltinkl@suse.cz - -- integrate print preview patch (#133246) - -------------------------------------------------------------------- -Sat May 20 15:11:26 CEST 2006 - adrian@suse.de - -- do not require libdrm-devel for < 10.1 - -------------------------------------------------------------------- -Fri May 19 10:57:01 CEST 2006 - stbinner@suse.de - -- make khtml smooth scrolling acceptable (#175741) - -------------------------------------------------------------------- -Wed May 17 17:31:40 CEST 2006 - dmueller@suse.de - -- fix kerberos handling in kprinter (#154334) - -------------------------------------------------------------------- -Mon May 15 16:49:14 CEST 2006 - stbinner@suse.de - -- update to KDE 3.5.2 and 3_5_BRANCH.diff - * fixes to Kate - * khtml: fixes and performance improvements - * kjs: fixes and performance improvements - -------------------------------------------------------------------- -Mon May 15 11:17:39 CEST 2006 - stbinner@suse.de - -- complete OpenDocument mime type icons (#166917) - -------------------------------------------------------------------- -Tue May 2 10:19:34 CEST 2006 - coolo@suse.de - -- only show kresources in KDE (#170681) - -------------------------------------------------------------------- -Thu Apr 13 16:09:03 CEST 2006 - dmueller@suse.de - -- add dbus-1-qt3-devel to kdelibs3-devel dependencies - -------------------------------------------------------------------- -Thu Apr 13 14:35:49 CEST 2006 - dmueller@suse.de - -- implement mediamanager/hal-unmount support in KIO (#160654) - -------------------------------------------------------------------- -Wed Apr 12 20:42:37 CEST 2006 - dobey@suse.de - -- Add patch to improve default svg sizes in hicolor index.theme - Partial fix of https://bugzilla.novell.com/show_bug.cgi?id=162222 - If kdelibs3 is installed as well and the user uses gnome, this is - needed to prevent breaking the sizes in upstream hicolor which is - included in the gnome-icon-theme package - -------------------------------------------------------------------- -Fri Apr 7 14:57:03 CEST 2006 - dmueller@suse.de - -- fix media:/ urls in kfiledialog -- fix kdirwatch inducted memory corruption, often seen - as kate crashing during save. - -------------------------------------------------------------------- -Mon Apr 3 12:10:17 CEST 2006 - dmueller@suse.de - -- don't package xx locale - -------------------------------------------------------------------- -Tue Mar 28 16:49:08 CEST 2006 - dmueller@suse.de - -- fix xauth being garbled during hostname changes (#147691) -- fix tar extraction error for certain archives (#161312) - -------------------------------------------------------------------- -Tue Mar 28 16:44:52 CEST 2006 - ro@suse.de - -- kdelibs3-devel req: replace mDNSResponder by mDNSResponder-devel - -------------------------------------------------------------------- -Tue Mar 28 10:30:43 CEST 2006 - stbinner@suse.de - -- fix kdesu maybe not working with non-C locale (#152077) - -------------------------------------------------------------------- -Tue Mar 28 01:19:28 CEST 2006 - ro@suse.de - -- fix last patch to apply - -------------------------------------------------------------------- -Mon Mar 27 19:13:24 CEST 2006 - dmueller@suse.de - -- don't rely on KApplication still being there for KMessagebox (#160396) - -------------------------------------------------------------------- -Mon Mar 27 15:34:43 CEST 2006 - coolo@suse.de - -- only assume all KIO protocols if the desktop file specifies KDE - category (#160777) - -------------------------------------------------------------------- -Fri Mar 24 13:38:24 CET 2006 - dmueller@suse.de - -- reduce BuildRequires -- fix pasting of files with name collissions (#160581) - -------------------------------------------------------------------- -Tue Mar 21 17:05:55 CET 2006 - stbinner@suse.de - -- add support for login part of fdo autostart spec draft (#159395) - -------------------------------------------------------------------- -Tue Mar 21 14:49:14 CET 2006 - dmueller@suse.de - -- fix window titles in non-utf8 locale (#131287) -- drop gcc 4.1 miscompile workaround patch - -------------------------------------------------------------------- -Tue Mar 21 11:18:27 CET 2006 - dmueller@suse.de - -- fix pixmap leak in khtml - -------------------------------------------------------------------- -Mon Mar 13 18:59:51 CET 2006 - wstephenson@suse.de - -- add offline mode for http - -------------------------------------------------------------------- -Mon Mar 13 13:01:33 CET 2006 - dmueller@suse.de - -- reduce KDirWatch noiselevel (#157523) - -------------------------------------------------------------------- -Sun Mar 12 13:54:52 CET 2006 - coolo@suse.de - -- fix execution of desktop files without urls (#157130) - -------------------------------------------------------------------- -Tue Mar 7 11:43:24 CET 2006 - wstephenson@suse.de - -- Make sure that if a filesystem is not mounted with acl support, but the - acl support is compiled in, the metadata for acl setting is not set, - thus preventing and error on save, and as a result of that failure to - set permissions for all but the first file (in the multiple files case). - -------------------------------------------------------------------- -Tue Mar 7 09:40:50 CET 2006 - coolo@suse.de - -- pass windows in KRun (#155355) - -------------------------------------------------------------------- -Sat Mar 4 21:04:29 CET 2006 - coolo@suse.de - -- fix application themed icons (k3b toolbar) - -------------------------------------------------------------------- -Wed Mar 1 09:01:33 CET 2006 - coolo@suse.de - -- let kdelibs3-arts recommend kdemultimedia3-arts as it avoids crashes - (#115245) - -------------------------------------------------------------------- -Tue Feb 28 16:59:40 CET 2006 - coolo@suse.de - -- let crystalsvg inherit suseadds, so that we take the gnome and yast - icons in account (#154062) - -------------------------------------------------------------------- -Tue Feb 28 11:52:28 CET 2006 - stbinner@suse.de - -- degrade (untranslatable) kimproxy messagebox to warning - -------------------------------------------------------------------- -Tue Feb 21 12:11:49 CET 2006 - dmueller@suse.de - -- -fPIE is needed for s390x - -------------------------------------------------------------------- -Fri Feb 17 11:53:43 CET 2006 - coolo@suse.de - -- avoid breaking translations (show-distribution.diff) - -------------------------------------------------------------------- -Thu Feb 16 20:06:27 CET 2006 - coolo@suse.de - -- fix encoding problems with kprinter (mangled UTF-8) - -------------------------------------------------------------------- -Wed Feb 15 16:33:37 CET 2006 - ltinkl@suse.cz - -- fix #148215 - kde colorchooser won't save user defined colors -- fix #143263 - [gtk-qt] GTK+ scrollbars have several rendering issues - -------------------------------------------------------------------- -Tue Feb 7 16:02:33 CET 2006 - stbinner@suse.de - -- use XAUTHLOCALHOSTNAME as host name, patch by Lubos (#147691) - -------------------------------------------------------------------- -Mon Feb 6 22:43:23 CET 2006 - dmueller@suse.de - -- lookup desktop translations in desktop_translations catalogue - -------------------------------------------------------------------- -Mon Feb 6 13:27:32 CET 2006 - stbinner@suse.de - -- don't require libdrm-devel for older than SUSE Linux 10.1 - -------------------------------------------------------------------- -Fri Feb 3 13:57:49 CET 2006 - coolo@suse.de - -- add patch to fix KLocale warnings (#146525) - -------------------------------------------------------------------- -Fri Feb 3 12:05:20 CET 2006 - coolo@suse.de - -- update clever menu patch to fix #74524 (by Lubos) - -------------------------------------------------------------------- -Fri Feb 3 12:03:17 CET 2006 - coolo@suse.de - -- replace our own kdontchangethehostname with upstream fix -- debug output corrections - -------------------------------------------------------------------- -Thu Feb 2 09:37:18 CET 2006 - coolo@suse.de - -- fix requires for older distributions -- remove %ifs for < 920 - -------------------------------------------------------------------- -Wed Feb 1 16:36:38 CET 2006 - coolo@suse.de - -- translate servicemenus as they are used now for the medianotifier - (most of them will already have upstream translations) - -------------------------------------------------------------------- -Wed Feb 1 15:10:57 CET 2006 - stbinner@suse.de - -- fix tiny clickable areas of status icons in Konqueror (#146500) - -------------------------------------------------------------------- -Mon Jan 30 11:35:14 CET 2006 - stbinner@suse.de - -- update to 3.5 branch (changes to kprocess, khtml and kate) - -------------------------------------------------------------------- -Sat Jan 28 15:24:20 CET 2006 - coolo@suse.de - -- look for wallpapers into /usr/share/wallpapers - -------------------------------------------------------------------- -Fri Jan 27 20:23:49 CET 2006 - dmueller@suse.de - -- workaround gcc 4.1 miscompile - -------------------------------------------------------------------- -Fri Jan 27 09:29:19 CET 2006 - coolo@suse.de - -- fix patch conflict - -------------------------------------------------------------------- -Fri Jan 27 01:55:42 CET 2006 - mls@suse.de - -- converted neededforbuild to BuildRequires - -------------------------------------------------------------------- -Tue Jan 24 08:23:55 CET 2006 - coolo@suse.de - -- update to 3.5 branch for inotify fixes -- fix the kde_post_install translations - -------------------------------------------------------------------- -Mon Jan 23 16:10:12 CET 2006 - coolo@suse.de - -- translate more files in kde_post_install -- some khtml fixes for 3.5 branch -- disable preview for media:/ content - -------------------------------------------------------------------- -Sat Jan 21 20:23:19 CET 2006 - coolo@suse.de - -- update to KDE 3.5.1 - -------------------------------------------------------------------- -Thu Jan 19 17:35:48 CET 2006 - dmueller@suse.de - -- disable dnotify, we want inotify - -------------------------------------------------------------------- -Wed Jan 11 22:55:02 CET 2006 - stbinner@suse.de - -- update to 3_5_BRANCH (kdirwatch and kio_thumbnail fixes) - -------------------------------------------------------------------- -Mon Jan 9 15:45:42 CET 2006 - mls@suse.de - -- add kde3-devel-packages to devel package, obsoletes macro - -------------------------------------------------------------------- -Sun Jan 8 21:26:58 CET 2006 - stbinner@suse.de - -- update to 3_5_BRANCH (disable inotify on old broken kernels) - -------------------------------------------------------------------- -Thu Jan 5 15:16:40 CET 2006 - llunak@suse.cz - -- update performance patches, use same names like in kdebase-SuSE - -------------------------------------------------------------------- -Tue Dec 20 13:57:48 CET 2005 - dmueller@suse.de - -- add doc/HTML/* to filelist - -------------------------------------------------------------------- -Mon Dec 19 18:34:10 CET 2005 - dmueller@suse.de - -- add locale directories to the file list - -------------------------------------------------------------------- -Mon Dec 19 12:11:20 CET 2005 - coolo@suse.de - -- fix file list - -------------------------------------------------------------------- -Thu Dec 15 11:54:41 CET 2005 - coolo@suse.de - -- update to 3_5_BRANCH for strict aliasing fixes - -------------------------------------------------------------------- -Sun Dec 11 17:11:01 CET 2005 - stbinner@suse.de - -- update to 3_5_BRANCH (KDE #116156 and others) - -------------------------------------------------------------------- -Thu Dec 8 13:05:18 CET 2005 - coolo@suse.de - -- remove work around as binutils were fixed - -------------------------------------------------------------------- -Mon Dec 5 21:59:29 CET 2005 - coolo@suse.de - -- update to 3.5 branch -- add work around for better -Bdirect support - -------------------------------------------------------------------- -Sat Dec 3 15:07:43 CET 2005 - coolo@suse.de - -- build with -Bdirect if available - -------------------------------------------------------------------- -Fri Dec 2 15:00:57 CET 2005 - dmueller@suse.de - -- remove inotify patch, upstream now - -------------------------------------------------------------------- -Fri Dec 2 11:08:51 CET 2005 - dmueller@suse.de - -- create locolor icon dirs as well - -------------------------------------------------------------------- -Thu Dec 1 10:33:17 CET 2005 - dmueller@suse.de - -- create hicolor icon dirs and add them to the file list - -------------------------------------------------------------------- -Wed Nov 30 12:20:10 CET 2005 - coolo@suse.de - -- update to 3.5 branch -- update startup improvement patches -- remove the -O1 LDFLAGS for now - -------------------------------------------------------------------- -Sat Nov 26 10:10:03 CET 2005 - coolo@suse.de - -- update to 3.5.0 - -------------------------------------------------------------------- -Wed Nov 23 18:37:07 CET 2005 - coolo@suse.de - -- update to 3.5 branch - -------------------------------------------------------------------- -Tue Nov 22 08:46:49 CET 2005 - stbinner@suse.de - -- fix testkhtml build - -------------------------------------------------------------------- -Mon Nov 21 15:04:22 CET 2005 - stbinner@suse.de - -- update to 3.5 RC 2 - -------------------------------------------------------------------- -Wed Nov 16 17:41:03 CET 2005 - stbinner@suse.de - -- fix iconloader to not load icons from wrong inherited icon set - -------------------------------------------------------------------- -Wed Nov 16 11:49:43 CET 2005 - uli@suse.de - -- fixed to build on ARM (don't understand why it didn't fail - on other archs, though) - -------------------------------------------------------------------- -Sat Nov 12 11:45:13 CET 2005 - stbinner@suse.de - -- updated admin.tar.bz2 -- no dependency on kdelibs3-arts on older distributions - -------------------------------------------------------------------- -Sat Nov 12 01:33:22 CET 2005 - dmueller@suse.de - -- link with -O1 - -------------------------------------------------------------------- -Thu Nov 10 11:50:37 CET 2005 - stbinner@suse.de - -- update to 3.5 RC 1 - -------------------------------------------------------------------- -Thu Nov 10 00:22:48 CET 2005 - dmueller@suse.de - -- update inotify patch to current branch - -------------------------------------------------------------------- -Fri Nov 4 16:43:20 CET 2005 - coolo@suse.de - -- adding patch to rework autostart handling - -------------------------------------------------------------------- -Tue Oct 18 13:12:42 CEST 2005 - dmueller@suse.de - -- don't filter include hints for BETA -- update 3_5_BRANCH - -------------------------------------------------------------------- -Mon Oct 17 18:08:08 CEST 2005 - dmueller@suse.de - -- reduce debug output in kdelibs-inotify patch - -------------------------------------------------------------------- -Mon Oct 17 14:29:39 CEST 2005 - ke@suse.de - -- Fix xml encoding in contributor entities. - -------------------------------------------------------------------- -Mon Oct 17 11:06:42 CEST 2005 - dmueller@suse.de - -- update admin tarball to fix version number of packages - -------------------------------------------------------------------- -Fri Oct 14 19:06:23 CEST 2005 - dmueller@suse.de - -- add inotify support patch (experimental) - -------------------------------------------------------------------- -Wed Oct 12 11:07:53 CEST 2005 - stbinner@suse.de - -- update to version 3.4.92 (3.5 Beta 2) - -------------------------------------------------------------------- -Mon Oct 10 11:31:20 CEST 2005 - dmueller@suse.de - -- remove includehints from .ui files to fix Qt 3.3.5-caused build - failures - -------------------------------------------------------------------- -Thu Oct 6 12:38:46 CEST 2005 - stbinner@suse.de - -- added flac and flac-devel to neededforbuild (required by the new - libsndfile) - -------------------------------------------------------------------- -Wed Oct 5 18:31:30 CEST 2005 - stbinner@suse.de - -- adapt patches after update to 3.5 branch - -------------------------------------------------------------------- -Wed Oct 5 10:44:54 CEST 2005 - coolo@suse.de - -- update to 3.5 branch for various fixes -- adding inotify support to kdirwatch (kde4 backport) - -------------------------------------------------------------------- -Sat Oct 1 16:43:36 CEST 2005 - coolo@suse.de - -- fix VERBOSE=1 - -------------------------------------------------------------------- -Fri Sep 30 16:08:08 CEST 2005 - coolo@suse.de - -- fix start without sycoca - -------------------------------------------------------------------- -Thu Sep 29 09:01:45 CEST 2005 - dmueller@suse.de - -- ACL support only if > 10.0 - -------------------------------------------------------------------- -Thu Sep 29 01:41:21 CEST 2005 - dmueller@suse.de - -- fix kde_post_install to be robust against errors - -------------------------------------------------------------------- -Wed Sep 28 22:55:46 CEST 2005 - dmueller@suse.de - -- build with ACL support -- use unsermake with VERBOSE=1 to have useful logs - -------------------------------------------------------------------- -Tue Sep 27 16:22:13 CEST 2005 - stbinner@suse.de - -- add patch to allow and use no icon fallback if an icon is missing -- add upstream patch fixing common khtml crash (KDE #112905) - -------------------------------------------------------------------- -Tue Sep 27 14:50:08 CEST 2005 - dmueller@suse.de - -- fix kde_post_install to not abort when no icon is there - -------------------------------------------------------------------- -Tue Sep 27 09:10:19 CEST 2005 - adrian@suse.de - -- do not require mDNSResponder for 9.2 and before - -------------------------------------------------------------------- -Thu Sep 22 14:18:50 CEST 2005 - dmueller@suse.de - -- fix autobuild - -------------------------------------------------------------------- -Wed Sep 21 23:01:32 CEST 2005 - ke@suse.de - -- Add KDE docbook customizations to the SGML resp. XML catalog system [# - 113080]. - -------------------------------------------------------------------- -Wed Sep 21 09:37:16 CEST 2005 - coolo@suse.de - -- fix file file -- fix --no-unsermake support - -------------------------------------------------------------------- -Mon Sep 19 16:38:53 CEST 2005 - stbinner@suse.de - -- update to version 3.4.91 (3.5 Beta) - -------------------------------------------------------------------- -Mon Sep 12 11:01:52 CEST 2005 - stbinner@suse.de - -- fix missing images in ktip (#115954) - -------------------------------------------------------------------- -Fri Sep 9 16:36:53 CEST 2005 - dmueller@suse.de - -- split -devel-docs into a separate noarch package - -------------------------------------------------------------------- -Thu Sep 8 13:05:04 CEST 2005 - bg@suse.de - -- disable --as-needed for hppa (does not build with that option) - -------------------------------------------------------------------- -Thu Sep 8 08:04:42 CEST 2005 - coolo@suse.de - -- let the icon loader find the suse specials independent on the theme - (#115139 and others) - -------------------------------------------------------------------- -Wed Sep 7 21:37:08 CEST 2005 - dmueller@suse.de - -- fix kwallet wizard being 3000px in size (#114954) - -------------------------------------------------------------------- -Wed Sep 7 19:52:20 CEST 2005 - dmueller@suse.de - -- fix kpdf embedding crashes (#114724) -- add forgotten patch for mozilla/dragonegg integration - -------------------------------------------------------------------- -Wed Sep 7 16:05:58 CEST 2005 - dmueller@suse.de - -- improve TIFF detection (#114319) - -------------------------------------------------------------------- -Tue Sep 6 19:53:03 CEST 2005 - dmueller@suse.de - -- fix JPEG2000 support in KImgio (#115324) - -------------------------------------------------------------------- -Tue Aug 23 15:35:24 CEST 2005 - coolo@suse.de - -- add mimetype for OOo base (#72285) - -------------------------------------------------------------------- -Tue Aug 23 13:26:36 CEST 2005 - coolo@suse.de - -- don't play around with xauth when the host name changes - (#98627) - -------------------------------------------------------------------- -Tue Aug 23 03:54:04 CEST 2005 - dmueller@suse.de - -- fix novell.com language selector (#106008) - -------------------------------------------------------------------- -Mon Aug 22 14:20:42 CEST 2005 - coolo@suse.de - -- don't put libkdeinit_*.so in -devel - -------------------------------------------------------------------- -Sun Aug 21 11:42:34 CEST 2005 - coolo@suse.de - -- update from 3.4 branch to fix endless kio_http loop -- fix DPMS check in admin (broke with --enable-new-ldflags) - -------------------------------------------------------------------- -Sat Aug 20 16:06:01 CEST 2005 - coolo@suse.de - -- update from 3.4 branch -- pleasing the libtool check - -------------------------------------------------------------------- -Fri Aug 19 14:12:41 CEST 2005 - adrian@suse.de - -- fix endless loop, if no KDEMM backend can get found (#105772) - -------------------------------------------------------------------- -Fri Aug 19 10:22:14 CEST 2005 - llunak@suse.cz - -- Fix QXEmbed to have focus working properly in yast+kcontrol - (#46495). - -------------------------------------------------------------------- -Thu Aug 18 17:15:40 CEST 2005 - adrian@suse.de - -- do not use KLIRRRRR sound on popular request ... - -------------------------------------------------------------------- -Thu Aug 18 10:18:54 CEST 2005 - coolo@suse.de - -- extend kde_post_install of common_options - -------------------------------------------------------------------- -Wed Aug 17 16:20:44 CEST 2005 - adrian@suse.de - -- move arts dependency to -arts package -- clean up really all SimplePlayers in knotify, might cause a crash - which needs to be debugged - -------------------------------------------------------------------- -Mon Aug 15 04:25:38 CEST 2005 - dmueller@suse.de - -- fix horizontal scrolling in KHTML broken by the smooth scrolling - patch (#76565). - -------------------------------------------------------------------- -Sat Aug 13 16:03:17 CEST 2005 - adrian@suse.de - -- fix memory/handle leak in knotify while playing sound via kdemm - knotify can still hang, if all alsa channels are used. (#97588) -- install icons for BitTorrent MimeType - -------------------------------------------------------------------- -Thu Aug 11 15:58:43 CEST 2005 - coolo@suse.de - -- removing all of the extraicons patch, it doesn't work at all anymore - so we need a new solution (also #85839 I guess) -- updated 3.4 branch to get a fix for a crashing dcopserver and - hanging mounts (#102564) - -------------------------------------------------------------------- -Thu Aug 4 13:33:12 CEST 2005 - sbrabec@suse.cz - -- Removed share/pixmaps links from crystalsvg (#85839). - -------------------------------------------------------------------- -Mon Aug 1 18:37:53 CEST 2005 - coolo@suse.de - -- 3.4 update replacing custom patches - -------------------------------------------------------------------- -Fri Jul 29 17:31:21 CEST 2005 - dmueller@suse.de - -- Update admin tarball to include -Wno-non-virtual-dtor flag -- Fix PIE detection (#98889) -- Fix visibility support - -------------------------------------------------------------------- -Tue Jul 26 11:45:19 CEST 2005 - llunak@suse.cz - -- Fix #96594 (knotify logout timeout) - -------------------------------------------------------------------- -Fri Jul 22 10:51:28 CEST 2005 - coolo@suse.de - -- update to version 3.4.2 - -------------------------------------------------------------------- -Mon May 30 16:19:20 CEST 2005 - adrian@suse.de - -- fix build for released distributions - -------------------------------------------------------------------- -Tue May 24 11:54:02 CEST 2005 - adrian@suse.de - -- update to version 3.4.1 -- set level back to "a" - -------------------------------------------------------------------- -Fri May 13 21:49:46 CEST 2005 - coolo@suse.de - -- init variable - -------------------------------------------------------------------- -Tue Apr 19 10:21:55 CEST 2005 - coolo@suse.de - -- update admin for gcc4 - -------------------------------------------------------------------- -Thu Apr 14 17:17:06 CEST 2005 - sbrabec@suse.cz - -- Added audiofile-devel to neededforbuild. - -------------------------------------------------------------------- -Thu Apr 14 12:07:18 CEST 2005 - adrian@suse.de - -- update to current 3_4_BRANCH - * parallel build order fix -- do not export kdemm video player api, it will not get any - implementation in this way - -------------------------------------------------------------------- -Wed Apr 13 11:34:45 CEST 2005 - adrian@suse.de - -- update to current 3_4_BRANCH -- increase patch Level to "c" -- export kdemm mixer interface - -------------------------------------------------------------------- -Fri Apr 8 11:46:38 CEST 2005 - adrian@suse.de - -- port kfilepreview to kdemm -- extra arts subpackages, aRts is optional now ! -- add DNS resolver fix from 3_4_BRANCH - -------------------------------------------------------------------- -Mon Apr 4 14:42:49 CEST 2005 - adrian@suse.de - -- add missing #include to fix compile of kdemm players - -------------------------------------------------------------------- -Mon Apr 4 11:01:08 CEST 2005 - coolo@suse.de - -- enable features for new ld - -------------------------------------------------------------------- -Fri Apr 1 11:54:56 CEST 2005 - adrian@suse.de - -- fix build with gcc 4, exporting kdemm classes - -------------------------------------------------------------------- -Thu Mar 31 13:46:09 CEST 2005 - adrian@suse.de - -- first steps to make arts optional: - * add experimental kdemm support for post 9.3 - * use kdemm instead of arts in knotify - * TODO: port kfileaudiopreview to kdemm -- do not overrule CFLAGS from spec files - -------------------------------------------------------------------- -Wed Mar 30 16:10:39 CEST 2005 - coolo@suse.de - -- disable visibility when compiled with debug (for testkhtml) - -------------------------------------------------------------------- -Mon Mar 28 18:46:22 CEST 2005 - schwab@suse.de - -- common_options: also set CFLAGS. - -------------------------------------------------------------------- -Sat Mar 19 14:54:24 CET 2005 - aj@suse.de - -- Integrate patch from Waldo Bastian for #71888 to fix - accessing of Netscape bookmarks in konqueror. - -------------------------------------------------------------------- -Fri Mar 18 13:40:41 CET 2005 - adrian@suse.de - -- fix aspell support -- fixes from 3_4_BRANCH - * toolbar configuration fix (#73662) - * IPv6 blacklist io-slave fix - * a khtml crash fix with innerweb - * redirection fix to uppercase written top level domains - -------------------------------------------------------------------- -Tue Mar 15 13:30:48 CET 2005 - adrian@suse.de - -- fix kspell recursion, visible in kbabel (#72773 by Waldo) - -------------------------------------------------------------------- -Mon Mar 14 15:32:48 CET 2005 - coolo@suse.de - -- take susetranslations.mo into account for translations - -------------------------------------------------------------------- -Mon Mar 14 14:01:15 CET 2005 - coolo@suse.de - -- fix smoothscrolling patch (Lubos) -- adding some more kate fixes from branch - -------------------------------------------------------------------- -Fri Mar 11 14:55:14 CET 2005 - coolo@suse.de - -- some more fixes from 3_4_BRANCH - -------------------------------------------------------------------- -Tue Mar 8 13:47:31 CET 2005 - adrian@suse.de - -- various updates from cvs - * missing kate initialising (Lubos) - * kcmmodule crash fixed (Waldo) - * khtml fixes - -------------------------------------------------------------------- -Mon Mar 7 16:55:17 CET 2005 - adrian@suse.de - -- fix progress bar (from KDE cvs) - -------------------------------------------------------------------- -Mon Mar 7 14:32:27 CET 2005 - coolo@suse.de - -- add fix for broken webdav URLs (#59203) - -------------------------------------------------------------------- -Sat Mar 5 10:19:48 CET 2005 - adrian@suse.de - -- fixes from KDE cvs: - * support Netware based ftp servers in kio_ftp - * fix proxy socks support - -------------------------------------------------------------------- -Sat Mar 5 09:22:49 CET 2005 - adrian@suse.de - -- update to version 3.4 final (not final try) - -------------------------------------------------------------------- -Wed Mar 2 10:01:46 CET 2005 - adrian@suse.de - -- update scrollview patch to BC version -- move Requires: kdelibs3_doc to kdebase3 - -------------------------------------------------------------------- -Sat Feb 26 10:34:21 CET 2005 - adrian@suse.de - -- update to 3.4.0 RC1 - -------------------------------------------------------------------- -Thu Feb 24 13:16:10 CET 2005 - adrian@suse.de - -- update to version 3.4.0 RC1 try 1 - -------------------------------------------------------------------- -Tue Feb 22 16:51:01 CET 2005 - adrian@suse.de - -- update to current CVS -- add soft scrolling patch from Allan Sandfeld - -------------------------------------------------------------------- -Tue Feb 22 10:47:34 CET 2005 - adrian@suse.de - -- remove secure ICE patch again, it is part of CVS now - -------------------------------------------------------------------- -Mon Feb 21 11:26:34 CET 2005 - adrian@suse.de - -- update to current CVS - -------------------------------------------------------------------- -Fri Feb 18 11:18:03 CET 2005 - adrian@suse.de - -- update to current CVS - -------------------------------------------------------------------- -Wed Feb 16 17:53:31 CET 2005 - adrian@suse.de - -- remove floppy:/ from file dialog again, media:/ is enough - -------------------------------------------------------------------- -Mon Feb 14 14:41:13 CET 2005 - adrian@suse.de - -- update from CVS -- add rubberband patch from Andre Moreira Magalhaes, disabled by - default - -------------------------------------------------------------------- -Mon Feb 14 11:49:33 CET 2005 - adrian@suse.de - -- make it possible to disable IDN support via KDE_NO_IDN enviroment - variable - -------------------------------------------------------------------- -Sun Feb 13 10:26:22 CET 2005 - coolo@suse.de - -- fix do_make -j15 - -------------------------------------------------------------------- -Fri Feb 11 10:29:44 CET 2005 - adrian@suse.de - -- update from CVS - -------------------------------------------------------------------- -Wed Feb 9 15:57:01 CET 2005 - adrian@suse.de - -- apply patch from Waldo to set ICE sockets to 0700 permissions - -------------------------------------------------------------------- -Mon Feb 7 11:28:36 CET 2005 - adrian@suse.de - -- update to beta 2 - -------------------------------------------------------------------- -Sat Jan 29 10:59:09 CET 2005 - coolo@suse.de - -- fix --no-unsermake - -------------------------------------------------------------------- -Fri Jan 28 16:53:21 CET 2005 - meissner@suse.de - -- removed setuid root binary kgrantpty which is not needed - since 8.1... - -------------------------------------------------------------------- -Fri Jan 28 15:11:47 CET 2005 - adrian@suse.de - -- update to current snapshot -- use external unsermake now - -------------------------------------------------------------------- -Tue Jan 25 15:41:07 CET 2005 - adrian@suse.de - -- adapt file dialog for media slave and remove floppy icon - -------------------------------------------------------------------- -Mon Jan 24 21:05:47 CET 2005 - coolo@suse.de - -- update to current snapshot (for testkhtml) - -------------------------------------------------------------------- -Thu Jan 20 16:53:31 CET 2005 - adrian@suse.de - -- update to current snapshot - -------------------------------------------------------------------- -Sat Jan 15 21:05:52 CET 2005 - schwab@suse.de - -- Use : in permissions file. - -------------------------------------------------------------------- -Fri Jan 14 14:58:39 CET 2005 - adrian@suse.de - -- update to current HEAD -- disable limit-image-size patch, since it got also disabled in qt - -------------------------------------------------------------------- -Thu Jan 13 15:05:49 CET 2005 - coolo@suse.de - -- update to HEAD to get kdebase HEAD compiled - -------------------------------------------------------------------- -Mon Jan 10 11:56:08 CET 2005 - adrian@suse.de - -- fix kprinter.h header, this fixes the build of kdebindings - -------------------------------------------------------------------- -Mon Jan 10 09:37:17 CET 2005 - coolo@suse.de - -- fix permissions of do_make - -------------------------------------------------------------------- -Sun Jan 9 10:01:53 CET 2005 - adrian@suse.de - -- final 3.4 beta 1 - -------------------------------------------------------------------- -Tue Jan 4 11:49:56 CET 2005 - coolo@suse.de - -- update to 3.4 beta 1 (first snapshot) - -------------------------------------------------------------------- -Fri Dec 17 09:24:58 CET 2004 - coolo@suse.de - -- let -Wl, pass in $LDFLAGS -- fix quoting in make wrapper - -------------------------------------------------------------------- -Thu Dec 16 21:32:19 CET 2004 - hvogel@suse.de - -- change icon to about_kde. go comes from another package and - we dont want kdelibs require kdebase - -------------------------------------------------------------------- -Wed Dec 15 12:44:48 CET 2004 - coolo@suse.de - -- make the unsermake/automake switch more clever - -------------------------------------------------------------------- -Tue Dec 14 11:11:05 CET 2004 - coolo@suse.de - -- fix unsermake $PATH for packages that build several sources - -------------------------------------------------------------------- -Mon Dec 13 14:56:19 CET 2004 - coolo@suse.de - -- remove debug flag from configure -- replaced unsermake with latest greatest - -------------------------------------------------------------------- -Wed Dec 8 13:25:36 CET 2004 - adrian@suse.de - -- update to official 3.4 alpha 1 - -------------------------------------------------------------------- -Mon Dec 6 15:17:54 CET 2004 - adrian@suse.de - -- update to KDE head snapshot - -------------------------------------------------------------------- -Fri Dec 3 15:19:22 CET 2004 - adrian@suse.de - -- update to the final tar bal of 3.3.2 - -------------------------------------------------------------------- -Mon Nov 29 20:29:55 CET 2004 - adrian@suse.de - -- update to version 3.3.2 - -------------------------------------------------------------------- -Fri Nov 26 15:57:47 CET 2004 - adrian@suse.de - -- extend KDE_VERSION_STRING with extra Level information to tell - information about applied patches -- extend distribution string with distribution version -- show distribution version in about dialog - -------------------------------------------------------------------- -Thu Nov 25 11:44:39 CET 2004 - adrian@suse.de - -- correct gnome icon path to hicolor - -------------------------------------------------------------------- -Wed Nov 24 13:49:09 CET 2004 - adrian@suse.de - -- accept also Python 2.4 in configure checks - -------------------------------------------------------------------- -Thu Nov 18 15:38:38 CET 2004 - ro@suse.de - -- use kerberos-devel-packages - -------------------------------------------------------------------- -Mon Nov 15 15:37:37 CET 2004 - adrian@suse.de - -- include /opt/kde3/share/icons/crystalsvg/22x22/apps path - -------------------------------------------------------------------- -Wed Nov 10 12:52:20 CET 2004 - ro@suse.de - -- permission handling fixes - -------------------------------------------------------------------- -Wed Nov 10 11:14:50 CET 2004 - coolo@suse.de - -- moving khtml 3.3 diff in a seperate diff (now that the 3.3 branch - contains a lot of updates for it) - -------------------------------------------------------------------- -Mon Nov 8 16:33:07 CET 2004 - coolo@suse.de - -- renable patch to limit image size (#43841) - -------------------------------------------------------------------- -Wed Nov 3 15:19:43 CET 2004 - coolo@suse.de - -- updated khtml again to fix compilation problem with gcc 4 - -------------------------------------------------------------------- -Wed Nov 3 11:12:57 CET 2004 - coolo@suse.de - -- use HTML rendering engine from CVS head (preparing backport for - 3.3.2) - -------------------------------------------------------------------- -Tue Oct 12 11:25:02 CEST 2004 - adrian@suse.de - -- update to version 3.3.1 - -------------------------------------------------------------------- -Wed Oct 6 14:30:24 CEST 2004 - adrian@suse.de - -- fix crash in libkabc, when importing an ldif file (#46882) - -------------------------------------------------------------------- -Tue Oct 5 10:17:05 CEST 2004 - adrian@suse.de - -- do also find gnome pages when using "en_*" locale, instead of - "C" or "en" (#45480) - -------------------------------------------------------------------- -Sat Oct 2 08:40:00 CEST 2004 - adrian@suse.de - -- try to avoid klauncher registration with a wrong dcop name. - this can happen, if two KDE application gets started at the - same time, without having running kdeinit before. - patch by Waldo and solves problems in Gnome hopefully (#46355) -- khtml rendering fix for nvidia.com - -------------------------------------------------------------------- -Fri Oct 1 16:58:11 CEST 2004 - adrian@suse.de - -- fix html frame parent problem, fixes www.map24.de (#44156) - -------------------------------------------------------------------- -Thu Sep 30 09:09:07 CEST 2004 - adrian@suse.de - -- fix nasty error startup messages -- fix two minor javascript bugs -- fix Netscape bookmarks wrapping (by Waldo, #45917) - -------------------------------------------------------------------- -Sun Sep 26 18:04:31 CEST 2004 - adrian@suse.de - -- update to current 3_3_BRANCH - * translation updates - * kpart handling fixes - -------------------------------------------------------------------- -Mon Sep 20 10:07:28 CEST 2004 - adrian@suse.de - -- update to current 3_3_BRANCH -- add fix for KDE file dialog on 64bit - (crash when called by 32bit application, by Waldo #44995) - -------------------------------------------------------------------- -Thu Sep 16 17:11:22 CEST 2004 - adrian@suse.de - -- use kwallet fix from Arvin - (update external hash keys immediatly #43973) - -------------------------------------------------------------------- -Wed Sep 15 17:18:45 CEST 2004 - adrian@suse.de - -- disable kwallet fix, it is known to create a memory leak - -------------------------------------------------------------------- -Tue Sep 14 15:23:11 CEST 2004 - adrian@suse.de - -- update to current branch - * khtml fixes - -------------------------------------------------------------------- -Fri Sep 10 13:47:48 CEST 2004 - adrian@suse.de - -- update to current branch -- apply fix for kwallet from HEAD, needed for kinternet - -------------------------------------------------------------------- -Tue Sep 7 11:28:30 CEST 2004 - adrian@suse.de - -- update to current BRANCH -- more silence during kbuildsycoca run -- disable default unsermake in beta -- remove mad from nfb - -------------------------------------------------------------------- -Fri Sep 3 17:29:22 CEST 2004 - coolo@suse.de - -- fixing the fix ;( - -------------------------------------------------------------------- -Fri Sep 3 14:20:15 CEST 2004 - coolo@suse.de - -- unsermake: do not remove the .deps file before regenerating it to - avoid make races - -------------------------------------------------------------------- -Mon Aug 30 08:36:57 CEST 2004 - adrian@suse.de - -- compile with explicit --disable-debug to get rid off asserts - -------------------------------------------------------------------- -Sat Aug 28 08:22:23 CEST 2004 - adrian@suse.de - -- update to current BRANCH -- add gnome help page support for khelpcenter(by clahey, #44061) - -------------------------------------------------------------------- -Mon Aug 23 16:31:13 CEST 2004 - adrian@suse.de - -- disable patch to limit image sizes in khtml, it causes crashes - atm - -------------------------------------------------------------------- -Fri Aug 20 13:02:26 CEST 2004 - adrian@suse.de - -- update to current 3_3_BRANCH -- add patch from clahey to support gnome help pages better in khelpcenter - -------------------------------------------------------------------- -Wed Aug 18 12:15:58 CEST 2004 - adrian@suse.de - -- move debug mode switch to common_options - -------------------------------------------------------------------- -Tue Aug 17 08:12:49 CEST 2004 - adrian@suse.de - -- add patch from Waldo to make it possible to limit the max image - size within QImage. (#43841) - -------------------------------------------------------------------- -Mon Aug 16 15:32:44 CEST 2004 - adrian@suse.de - -- update to version 3.3.0 final - -------------------------------------------------------------------- -Mon Aug 16 15:32:44 CEST 2004 - adrian@suse.de - -- update to version 3.3.0 final -- use "make compile" - -------------------------------------------------------------------- -Fri Aug 13 10:37:43 CEST 2004 - coolo@suse.de - -- removed 3_2_BRANCH.diff -- build with unsermake - -------------------------------------------------------------------- -Tue Aug 10 08:58:24 CEST 2004 - adrian@suse.de - -- update to version 3.3.0 RC2 -- split doc tools into subpackage to make it possible to use - a different theming for special products - -------------------------------------------------------------------- -Mon Aug 2 09:21:16 CEST 2004 - adrian@suse.de - -- accept automake 1.9 - -------------------------------------------------------------------- -Mon Jul 19 10:35:33 CEST 2004 - adrian@suse.de - -- update to version 3.2.92 (KDE 3.3 beta 2) - -------------------------------------------------------------------- -Tue Jun 29 12:01:28 CEST 2004 - adrian@suse.de - -- do not remove .cpp/.h files, if they are not really generated - by uic - -------------------------------------------------------------------- -Mon Jun 28 22:32:49 CEST 2004 - adrian@suse.de - -- enable OpenEXR support - -------------------------------------------------------------------- -Mon Jun 28 09:30:57 CEST 2004 - adrian@suse.de - -- update to version 3.3 beta 1 - * usual patch cleanup - -------------------------------------------------------------------- -Mon May 31 20:29:40 CEST 2004 - adrian@suse.de - -- update to version 3.2.3 - * remove obsolete patches - -------------------------------------------------------------------- -Wed May 12 09:21:00 CEST 2004 - adrian@suse.de - -- update user_profile patch -- add 3.3 button layout patch - -------------------------------------------------------------------- -Thu Apr 29 08:59:13 CEST 2004 - coolo@suse.de - -- let unsermake rewrite install rules with $DESTDIR -- use unsermake for kdelibs and parallel build - -------------------------------------------------------------------- -Sat Apr 24 18:17:07 CEST 2004 - sndirsch@suse.de - -- use xorg-x11 packages - -------------------------------------------------------------------- -Tue Apr 20 14:12:35 CEST 2004 - adrian@suse.de - -- use admin tar ball from HEAD -- extend kde-config to export library suffix and check for it in - configure -- add user profiles patch from Waldo - -------------------------------------------------------------------- -Sun Apr 18 14:56:17 CEST 2004 - coolo@suse.de - -- updated unsermake - -------------------------------------------------------------------- -Wed Apr 14 11:16:33 CEST 2004 - adrian@suse.de - -- update to version 3.2.2 - -------------------------------------------------------------------- -Tue Apr 13 17:16:34 CEST 2004 - adrian@suse.de - -- adding utempter to neededforbuild. (#38833) - (this does not lead into a new runtime requirement) - -------------------------------------------------------------------- -Sun Apr 4 21:08:43 CEST 2004 - adrian@suse.de - -- do only show important items in file dialog (#38269) - -------------------------------------------------------------------- -Thu Apr 1 10:39:59 CEST 2004 - coolo@suse.de - -- replacing brute force shut up with a real log file in kconf_update - (Waldo) - -------------------------------------------------------------------- -Wed Mar 31 16:40:14 CEST 2004 - adrian@suse.de - -- fix 3_2_BRANCH patch - -------------------------------------------------------------------- -Tue Mar 30 17:43:16 CEST 2004 - adrian@suse.de - -- enable incremental sycoca creation again - -------------------------------------------------------------------- -Tue Mar 30 10:45:07 CEST 2004 - coolo@suse.de - -- fix desktop icon renaming (Waldo) -- fixing kconf_update for kwin (Waldo,#36682) - -------------------------------------------------------------------- -Mon Mar 29 10:19:55 CEST 2004 - coolo@suse.de - -- handle cups printers that insist on being different (#37011) - -------------------------------------------------------------------- -Sat Mar 27 09:53:52 CET 2004 - adrian@suse.de - -- fix regression in khtml parser with latest update (by coolo) - -------------------------------------------------------------------- -Fri Mar 26 16:47:48 CET 2004 - adrian@suse.de - -- more silence (Waldo, Dirk and Adrian) -- apply fix for possible hanging library unloading (Lubos) -- fix regression in khtml parser with latest update (coolo) -- fix for hidden cookie windows below main windows (Lubos) -- fix icons in kcontrol - -------------------------------------------------------------------- -Tue Mar 23 08:06:52 CET 2004 - adrian@suse.de - -- update to current 3_2_BRANCH - * khtml fixes - o recursion protection - o official patch for kio urls - o crash fix (happened with Quanta) - o urls with trailing / are handled as directories - o fix for some flash enabled sites (#36656) -- fix fileshare.diff, make us compatible to KDE again -- call %run_permissions -- apply fix for utf8 localisation problem in kdehelp (coolo, #36681) -- adjust yast icon path to the new location -- fix missing include in fontconfig-reverse-lookup patch -- remove special settings for s390 and alpha - (leaded into new problems like implicit declarations of functions) - -------------------------------------------------------------------- -Mon Mar 22 13:22:57 CET 2004 - adrian@suse.de - -- update to current 3_2_BRANCH - * fixes security leak in kdeprint (#36663) -- add patch from Waldo to disallow kio urls in khtml - -------------------------------------------------------------------- -Sun Mar 21 21:32:47 CET 2004 - adrian@suse.de - -- do not trigger mount with konq view of /media/ (by Lubos) - -------------------------------------------------------------------- -Sun Mar 21 11:08:11 CET 2004 - adrian@suse.de - -- update to current 3_2_BRANCH - * fixed linebreak patch -- fix deactivated patches and remove obsolete ones -- suppress sycoca warnings about missing mimetypes - -------------------------------------------------------------------- -Mon Mar 15 16:46:24 CET 2004 - coolo@suse.de - -- another update to 3_2_BRANCH (kdeprint layout fixes and kate repaint problems) - -------------------------------------------------------------------- -Sat Mar 13 12:50:59 CET 2004 - coolo@suse.de - -- adding patch to force line breaks in translation of desktop files - (Arbeits-\nplatz) - -------------------------------------------------------------------- -Wed Mar 10 23:28:21 CET 2004 - coolo@suse.de - -- kill dcopserver explicitly - -------------------------------------------------------------------- -Wed Mar 10 10:39:42 CET 2004 - coolo@suse.de - -- use current 3_2_BRANCH (#35070) - -------------------------------------------------------------------- -Mon Mar 8 11:20:24 CET 2004 - adrian@suse.de - -- use current 3_2_BRANCH -- disable debug mode -- find YaST icons - -------------------------------------------------------------------- -Sun Mar 7 13:06:48 CET 2004 - coolo@suse.de - -- fixing pnome -> gnome typo -- adding libidn-devel as requirement for devel subpackage - -------------------------------------------------------------------- -Sat Mar 6 12:46:33 CET 2004 - coolo@suse.de - -- older distributions have different layouts for gnome. Avoid - dangling symlinks - -------------------------------------------------------------------- -Fri Mar 5 16:35:39 CET 2004 - coolo@suse.de - -- fixing build - -------------------------------------------------------------------- -Fri Mar 5 14:53:16 CET 2004 - coolo@suse.de - -- restart cups through rcscripts instead of kill magic (#32787) -- final update for 3.2.1 - -------------------------------------------------------------------- -Thu Mar 4 14:45:52 CET 2004 - coolo@suse.de - -- require libidn hard to avoid problems e.g. on lib64 - -------------------------------------------------------------------- -Wed Mar 3 18:26:46 CET 2004 - adrian@suse.de - -- removed gnome packages from neededforbuild - -------------------------------------------------------------------- -Tue Mar 2 10:25:48 CET 2004 - coolo@suse.de - -- update tarball again for khtml regression fixes - -------------------------------------------------------------------- -Tue Mar 2 10:23:33 CET 2004 - coolo@suse.de - -- fix build - -------------------------------------------------------------------- -Mon Mar 1 10:34:30 CET 2004 - coolo@suse.de - -- update to version 3.2.1 -- reworked build process - -------------------------------------------------------------------- -Mon Mar 1 10:34:30 CET 2004 - coolo@suse.de - -- update to version 3.2.1 - -------------------------------------------------------------------- -Wed Feb 25 22:01:46 CET 2004 - adrian@suse.de - -- update to current 3_2_BRANCH -- add -g as compiler option for beta test - -------------------------------------------------------------------- -Wed Feb 25 20:42:15 CET 2004 - adrian@suse.de - -- do not build on slow architectures - -------------------------------------------------------------------- -Mon Feb 23 15:40:21 CET 2004 - adrian@suse.de - -- do not use DNotify or FAM on /media -- long poll intervall for /media -- include GnomeCrystal icons and general pixmaps path - -------------------------------------------------------------------- -Mon Feb 23 08:05:47 CET 2004 - coolo@suse.de - -- initial package - -------------------------------------------------------------------- -Mon Feb 23 08:05:26 CET 2004 - coolo@suse.de - -- update 3_2_BRANCH -- update HEAD khtml -- adding testkhtml.spec - -------------------------------------------------------------------- -Sat Feb 21 18:35:28 CET 2004 - adrian@suse.de - -- add gnome and default icon pathes -- fix ssh.protcol installation -- fix syntax error in common_options - -------------------------------------------------------------------- -Fri Feb 20 09:29:56 CET 2004 - coolo@suse.de - -- use khtml from HEAD (to be backported) -- update admin tar ball -- take out testing khtml from the main page - -------------------------------------------------------------------- -Wed Feb 18 17:40:33 CET 2004 - adrian@suse.de - -- update to current 3_2_BRANCH - * ssh support to ktelnetservice -- remove pcsc-lite from neededforbuild -- disable test_regression for now - -------------------------------------------------------------------- -Wed Feb 11 08:50:03 CET 2004 - coolo@suse.de - -- fixing build on s390 - -------------------------------------------------------------------- -Wed Feb 11 08:06:07 CET 2004 - adrian@suse.de - -- update to current 3_2_BRANCH - -------------------------------------------------------------------- -Thu Jan 29 14:06:43 CET 2004 - adrian@suse.de - -- apply fix for printing with QT 3.3 - -------------------------------------------------------------------- -Mon Jan 26 23:25:56 CET 2004 - adrian@suse.de - -- update to version 3.2.0 final - -------------------------------------------------------------------- -Fri Jan 23 18:44:08 CET 2004 - adrian@suse.de - -- update to current 3_2_BRANCH - -------------------------------------------------------------------- -Wed Jan 21 17:28:14 CET 2004 - adrian@suse.de - -- disable sse and mmx usage on 9.0 (compiler bug) -- remove autom4te.cache during update_admin - (automake 2.8 can run into error with <2.8 cache data) - -------------------------------------------------------------------- -Wed Jan 21 12:14:49 CET 2004 - adrian@suse.de - -- update to current BRANCH to get various khtml fixes - -------------------------------------------------------------------- -Sun Jan 18 21:43:52 CET 2004 - adrian@suse.de - -- update to version 3.1.95 ( KDE 3.2 RC1 ) - -------------------------------------------------------------------- -Fri Jan 16 17:10:30 CET 2004 - adrian@suse.de - -- implement short menus again - -------------------------------------------------------------------- -Tue Jan 13 13:32:16 CET 2004 - adrian@suse.de - -- update to snapshot 2004011309 -- disable debug - -------------------------------------------------------------------- -Tue Jan 6 19:20:55 CET 2004 - adrian@suse.de - -- update to snapshot 2004010618 -- add kde_post_install function to common_options -- remove pregenerated files from uic during update_admin - -------------------------------------------------------------------- -Thu Dec 18 14:12:16 CET 2003 - adrian@suse.de - -- update to snapshot 2003121718 - -------------------------------------------------------------------- -Mon Dec 15 14:18:36 CET 2003 - adrian@suse.de - -- update to snapshot 2003121511 -- accept automake 1.8 - -------------------------------------------------------------------- -Wed Dec 10 14:30:45 CET 2003 - adrian@suse.de - -- update to snapshot 2003121013 - -------------------------------------------------------------------- -Tue Dec 9 13:40:37 CET 2003 - adrian@suse.de - -- package test_regression for testing in khtmltest package - -------------------------------------------------------------------- -Tue Dec 2 11:10:27 CET 2003 - adrian@suse.de - -- use beta2, take two tar ball - -------------------------------------------------------------------- -Mon Dec 1 22:00:31 CET 2003 - adrian@suse.de - -- update to 3.1.94 ( KDE 3.2 beta 2 ) - -------------------------------------------------------------------- -Sun Nov 23 20:44:24 CET 2003 - adrian@suse.de - -- update to snapshot 2003112315 - * build again with alsa 1.0 - -------------------------------------------------------------------- -Thu Nov 13 23:14:30 CET 2003 - adrian@suse.de - -- update to new snapshot from 2003102409 -- add jasper (JPEG2000) support - -------------------------------------------------------------------- -Wed Oct 29 09:59:01 CET 2003 - adrian@suse.de - -- update to KDE 3.2 beta1 - -------------------------------------------------------------------- -Tue Oct 21 09:34:51 CEST 2003 - adrian@suse.de - -- update to snapshot 2003102008 - -------------------------------------------------------------------- -Sun Oct 5 14:31:09 CEST 2003 - adrian@suse.de - -- update to snapshot 2003100510 - -------------------------------------------------------------------- -Wed Oct 1 09:59:21 CEST 2003 - adrian@suse.de - -- update to snapshot 3.1.92_2003093021 - * should fix building of KDE 2.2 documents in other packages - -------------------------------------------------------------------- -Mon Sep 29 15:59:09 CEST 2003 - adrian@suse.de - -- update to version 1.1.92 (KDE 3.2 alpha 2) - -------------------------------------------------------------------- -Tue Sep 23 09:42:45 CEST 2003 - adrian@suse.de - -- apply crash fix (happens in kdesktop) from Marcus Meissner - happened with a (most likely broken) Windows Driver CD (#31568) - -------------------------------------------------------------------- -Tue Sep 16 11:40:25 CEST 2003 - adrian@suse.de - -- fix application/x-ogg icon - -------------------------------------------------------------------- -Sat Sep 13 10:37:36 CEST 2003 - adrian@suse.de - -- fix Unimportant routines really finaly -- Require pcre-devel only for > 8.2 -- make menu sorting a routine which can be called from kicker -- hide Documents folder entry in kfiledialog for > 8.2 - -------------------------------------------------------------------- -Fri Sep 12 13:51:12 CEST 2003 - coolo@suse.de - -- add requirement on pcre-devel as libkhtml.la contains a reference - to /usr/lib/libpcreposix.la - -------------------------------------------------------------------- -Thu Sep 11 15:50:09 CEST 2003 - coolo@suse.de - -- give a more correct error message (as good as we can get it out - of cups) for forbidden actions (#29225) - -------------------------------------------------------------------- -Thu Sep 11 09:20:07 CEST 2003 - adrian@suse.de - -- use updated 3.1.4 tar ball - * certifcate dialog will reappear after typing wrong password -- add BRANCH patch to fix kdesktop icon name renaming and a crash fix -- honor caching in KServiceGroup::SuSEchildCount() - -------------------------------------------------------------------- -Tue Sep 9 02:59:23 CEST 2003 - adrian@suse.de - -- add YaST icon path - -------------------------------------------------------------------- -Tue Sep 9 00:14:46 CEST 2003 - adrian@suse.de - -- update to version 3.1.4 - -------------------------------------------------------------------- -Mon Sep 8 15:27:08 CEST 2003 - adrian@suse.de - -- implement KServiceGroup::SuSEchildCount() to ignore - X-SuSE-Unimportant entries - -------------------------------------------------------------------- -Fri Sep 5 12:10:12 CEST 2003 - adrian@suse.de - -- add check for SuSE-Unimportant also in kservicegroup class -- add support for X-SuSE-GeneralDescription and ShortMenu -- update 3_1_BRANCH -- add kmimelist application for debugging -- add optioninal X-KDE-InitialPreference Tag, if we want - different settings in Gnome - -------------------------------------------------------------------- -Wed Sep 3 17:44:28 CEST 2003 - adrian@suse.de - -- update xdg patch from Waldo to get compatible with 3.2 again -- update 3_1_BRANCH to get klistview fixes - -------------------------------------------------------------------- -Tue Sep 2 12:52:02 CEST 2003 - adrian@suse.de - -- include default pixmaps path -- drop broken styles, which will also disappear in KDE 3.2 -- add shut up patch from coolo - -------------------------------------------------------------------- -Mon Sep 1 14:38:52 CEST 2003 - adrian@suse.de - -- update to current 3_1_BRANCH -- implement X-SuSE-Unimportant support - -------------------------------------------------------------------- -Fri Aug 29 17:24:16 CEST 2003 - adrian@suse.de - -- update to current 3_1_BRANCH for qt 3.2.1 fixes - -------------------------------------------------------------------- -Tue Aug 26 08:16:04 CEST 2003 - adrian@suse.de - -- apply fix from Lubos for maximised windows of GTK apps - -------------------------------------------------------------------- -Sun Aug 24 23:06:19 CEST 2003 - adrian@suse.de - -- redo last fix in a more often working way. - but maybe we try to fix support for broken svg's atm ... - -------------------------------------------------------------------- -Sun Aug 24 12:14:29 CEST 2003 - adrian@suse.de - -- fix svgicon engine to render karbon svg's. -- install ksvgiconengine with header(internal) to get used by - svg thumbnail generator - -------------------------------------------------------------------- -Sat Aug 23 22:34:40 CEST 2003 - adrian@suse.de - -- update to 3_1_BRANCH - -------------------------------------------------------------------- -Wed Aug 20 17:19:57 CEST 2003 - schwab@suse.de - -- Fix weird character in common_options script. - -------------------------------------------------------------------- -Wed Aug 20 15:56:59 CEST 2003 - adrian@suse.de - -- small bugfix from Waldo for XDG - -------------------------------------------------------------------- -Tue Aug 19 12:15:18 CEST 2003 - adrian@suse.de - -- fix compile with gcc 3.3.1 - -------------------------------------------------------------------- -Wed Aug 13 11:34:11 CEST 2003 - adrian@suse.de - -- fix lib64 plugin support -- use current 3_1_BRANCH -- clean up spec file -- package /opt/kde3/include in main package - -------------------------------------------------------------------- -Tue Aug 12 13:25:32 CEST 2003 - adrian@suse.de - -- update XDG patch (yep, popup's are still disabled ;) - -------------------------------------------------------------------- -Fri Aug 8 21:58:06 CEST 2003 - adrian@suse.de - -- disable popup in kbuildsycoca run again - -------------------------------------------------------------------- -Thu Aug 7 15:25:02 CEST 2003 - adrian@suse.de - -- new XDG code from Waldo to support kmenuedit - -------------------------------------------------------------------- -Tue Aug 5 08:25:26 CEST 2003 - adrian@suse.de - -- disable popup in kbuildsycoca run - -------------------------------------------------------------------- -Fri Aug 1 16:54:16 CEST 2003 - adrian@suse.de - -- disable shadow patch at all again -- update 3_1_BRANCH diff - * first fixes for Qt 3.2 -- update kdelibs-menus stuff - * Waldo: Less buggy, with prefix support and with a working - - -------------------------------------------------------------------- -Wed Jul 30 17:52:37 CEST 2003 - adrian@suse.de - -- update kdelibs-menus-kded tar ball to new version from Waldo, - to get the kbuildsycoca --menutest function -- merge kdelibs3-cups back to kdelibs3 - -------------------------------------------------------------------- -Mon Jul 28 15:11:15 CEST 2003 - adrian@suse.de - -- update to current 3_1_BRANCH - -------------------------------------------------------------------- -Wed Jul 23 08:55:42 CEST 2003 - adrian@suse.de - -- use another new 3.1.3 tar ball with further security fix - (cookie handling) -- add needed files for XDG support - -------------------------------------------------------------------- -Tue Jul 22 13:12:02 CEST 2003 - coolo@suse.de - -- remove CVS conflict files from admin -- make common_options a %config (for consistency) - -------------------------------------------------------------------- -Mon Jul 21 12:00:42 CEST 2003 - adrian@suse.de - -- fix build for 7.x distributions - -------------------------------------------------------------------- -Fri Jul 18 17:02:43 CEST 2003 - adrian@suse.de - -- third version of 3.1.3 tar ball - (security fix for cookie handling) -- add backported patch from 3.2 for shadow text on icons. - (written by Laur Ivan ) -- accept Qt 3.2 also, when "#MIN_CONFIG(3)" is used -- fix build for lib64 - -------------------------------------------------------------------- -Fri Jul 18 10:01:44 CEST 2003 - adrian@suse.de - -- fix owner ship of files -- add XDG support from Waldo from KDE 3.2 - -------------------------------------------------------------------- -Wed Jul 16 12:14:55 CEST 2003 - adrian@suse.de - -- use new 3.1.3 tar ball - -------------------------------------------------------------------- -Wed Jul 16 01:11:51 CEST 2003 - adrian@suse.de - -- update to 3.1.3 - -------------------------------------------------------------------- -Tue Jun 24 10:52:19 CEST 2003 - coolo@suse.de - -- update 3.1 branch (heading 3.1.3) - -------------------------------------------------------------------- -Wed Jun 11 11:54:55 CEST 2003 - kukuk@suse.de - -- Add missing directories to filelist - -------------------------------------------------------------------- -Sat Jun 7 22:10:12 CEST 2003 - coolo@suse.de - -- remove libtool update code completly -- don't create stale symlinks for < 820 -- create the gnome icons symlink only for < 829 - (moved to gnome packages, where they can't dangle) - -------------------------------------------------------------------- -Fri May 30 14:55:49 CEST 2003 - adrian@suse.de - -- fix file conflict and disable libtool update again - -------------------------------------------------------------------- -Thu May 29 10:51:54 CEST 2003 - adrian@suse.de - -- tune some minor bits of coolo's changes - (a minor side effect is that we are able to build KDE packages again) - -------------------------------------------------------------------- -Wed May 28 15:05:30 CEST 2003 - coolo@suse.de - -- put the configure work around in update_admin too - -------------------------------------------------------------------- -Tue May 27 14:08:45 CEST 2003 - coolo@suse.de - -- updating 3_1_BRANCH.diff (to get it working without --enable-final) -- build --enable-final in beta too -- update libtool files from system (experimental) - -------------------------------------------------------------------- -Mon May 26 15:03:34 CEST 2003 - adrian@suse.de - -- define and use $INSTALL_TARGET in common_options -- set to "install" (not "install-strip") for now - -------------------------------------------------------------------- -Mon May 19 09:41:44 CEST 2003 - adrian@suse.de - -- apply 3_1_BRANCH.diff (fix build for Qt 3.2b1) - -------------------------------------------------------------------- -Fri May 16 13:34:52 CEST 2003 - coolo@suse.de - -- remove the right CVS subdir - -------------------------------------------------------------------- -Fri May 16 07:54:36 CEST 2003 - coolo@suse.de - -- remove CVS subdir - -------------------------------------------------------------------- -Thu May 8 09:05:49 CEST 2003 - adrian@suse.de - -- new 3.1.2 tar ball (try2) - -------------------------------------------------------------------- -Wed May 7 08:58:28 CEST 2003 - adrian@suse.de - -- update to version 3.1.2 -- cleanup/drop patches -- update admin tar ball and apply changes via a patch -- require correct arts version (1.1 at least) - -------------------------------------------------------------------- -Fri Apr 18 15:02:41 CEST 2003 - adrian@suse.de - -- merge 8.2 changes with 8.3 -- remove libaps from neededforbuild - -------------------------------------------------------------------- -Mon Apr 7 15:49:35 CEST 2003 - adrian@suse.de - -- security fix from 3.0.5b - * run ghostscript in safe mode -- add patch from Uwe Gansert to support the new fileshare tool -- add crash fix from 3_1_BRANCH for khtml on www.w3.org/QA/ -- do reverse font lookup in kfontcombobox and kaction for - fontconfig based distributions (#25725) - -------------------------------------------------------------------- -Thu Apr 3 18:26:13 CEST 2003 - adrian@suse.de - -- fix possible crash in kprinter on cups server misbehaviour -- add gnome help pages support for khelpcenter. - -------------------------------------------------------------------- -Fri Mar 21 12:56:36 CET 2003 - adrian@suse.de - -- apply fix https over proxy - -------------------------------------------------------------------- -Sat Mar 15 21:40:57 CET 2003 - adrian@suse.de - -- fix kmid crash in libkmid (#24820) -- .exe files have a correct icon now -- remove unused mimelnk tar ball - -------------------------------------------------------------------- -Wed Mar 12 09:49:01 CET 2003 - adrian@suse.de - -- disable kbuildsycoca speed up patch from last check-in again - -------------------------------------------------------------------- -Tue Mar 11 11:47:19 CET 2003 - adrian@suse.de - -- update to 3.1.1 tar ball, second try - * memory leak in dcopclient - * kate crash and syntax highlighting fixes - * do not let two running kbuildsycoca conflict - * keramik pixmapCache conflict fix - * some session management fixes -- add patch from Lubos to fix further session management problems - with preloaded konq -- fix api documentation -- remove SuSEconfig.susewm-kbuildsycoca again - (initial created by susewm now) - -------------------------------------------------------------------- -Thu Mar 6 10:34:33 CET 2003 - coolo@suse.de - -- updating the admin tar ball to 3.1.1 too - -------------------------------------------------------------------- -Mon Mar 3 11:36:11 CET 2003 - adrian@suse.de - -- update to version 3.1.1 - * fixed alphablended background images in khtml - * crash fix after destructed documents - * additional syntax highlight descriptions for kate -- xrandr fixes from Lubos to initialize the display correct on login - -------------------------------------------------------------------- -Thu Feb 27 23:50:42 CET 2003 - adrian@suse.de - -- update 3_1_BRANCH -- remove wrong Obsoletes again -- drop preload.desktop in autostart and use improved patch from - Lubos instead -- comment out some noise in .xsession-errors - -------------------------------------------------------------------- -Wed Feb 26 21:49:06 CET 2003 - adrian@suse.de - -- fixing kded startup with DNOTIFY enabled and lots of files - -------------------------------------------------------------------- -Wed Feb 26 10:35:49 CET 2003 - adrian@suse.de - -- update 3_1_BRANCH -- add ksycoca-global patch from Waldo -- add SuSEconfig.susewm-kbuildsycoca -- add Obsolete and Conflict tags with kde2 packages - -------------------------------------------------------------------- -Mon Feb 24 18:42:15 CET 2003 - adrian@suse.de - -- update 3_1_BRANCH -- enable-dnotify - -------------------------------------------------------------------- -Mon Feb 24 09:10:42 CET 2003 - coolo@suse.de - -- fixing kups (#24084) - -------------------------------------------------------------------- -Fri Feb 14 12:04:25 CET 2003 - adrian@suse.de - -- update 3_1_BRANCH -- allow setgid for man -- add gnome icon path - -------------------------------------------------------------------- -Wed Feb 12 22:46:37 CET 2003 - adrian@suse.de - -- update 3_1_BRANCH -- add preloaded konq patches from Lubos -- move kde-config back to main package - -------------------------------------------------------------------- -Wed Feb 5 02:26:15 CET 2003 - adrian@suse.de - -- update 3_1_BRANCH again for more aliasing fixes from Dirk -- remove fallback patch and implement a real media detection instead - of that - -------------------------------------------------------------------- -Tue Feb 4 10:06:14 CET 2003 - coolo@suse.de - -- updating to newer 3_1_BRANCH that is gcc 3.3 compliant - -------------------------------------------------------------------- -Mon Feb 3 16:57:38 CET 2003 - adrian@suse.de - -- add -fno-cse-follow-jumps -fno-cse-skip-blocks to work around - compiler bug - -------------------------------------------------------------------- -Mon Feb 3 11:52:53 CET 2003 - adrian@suse.de - -- update 3_1_BRANCH patch -- use --enable-final again - -------------------------------------------------------------------- -Sat Feb 1 16:38:48 CET 2003 - adrian@suse.de - -- remove ppc64 special compile options - -------------------------------------------------------------------- -Tue Jan 28 17:46:03 CET 2003 - adrian@suse.de - -- follow changed QDesktopWidget::resized API - -------------------------------------------------------------------- -Tue Jan 28 00:31:12 CET 2003 - adrian@suse.de - -- add BRANCH patches -- add libart_lgpl-devel to Requires from -devel package - -------------------------------------------------------------------- -Fri Jan 24 12:16:47 CET 2003 - adrian@suse.de - -- apply fix for resized desktop for menubar from Seli - -------------------------------------------------------------------- -Thu Jan 23 09:58:07 CET 2003 - adrian@suse.de - -- ha ! RC7-try5, security relevant again - -------------------------------------------------------------------- -Wed Jan 22 07:17:29 CET 2003 - adrian@suse.de - -- RC7-try4. last one ? - -------------------------------------------------------------------- -Tue Jan 21 12:59:35 CET 2003 - adrian@suse.de - -- RC7-try3. last one. - -------------------------------------------------------------------- -Fri Jan 17 14:36:40 CET 2003 - adrian@suse.de - -- use RC7-try2 tar balls - -------------------------------------------------------------------- -Wed Jan 15 16:10:17 CET 2003 - adrian@suse.de - -- use cyrus-sasl2 - -------------------------------------------------------------------- -Tue Jan 14 17:26:02 CET 2003 - adrian@suse.de - -- update to version RC7. -- kdelibs3-devel requires now fam-devel on > 8.1 - -------------------------------------------------------------------- -Wed Jan 8 12:50:01 CET 2003 - adrian@suse.de - -- add fam-devel to neededforbuild - -------------------------------------------------------------------- -Wed Jan 8 11:12:50 CET 2003 - adrian@suse.de - -- fix build with new alsa. works hopefully also with old versions - -------------------------------------------------------------------- -Tue Jan 7 15:08:32 CET 2003 - adrian@suse.de - -- update to RC6 (newer than the last 3.1 final try ;) - -------------------------------------------------------------------- -Wed Dec 18 11:39:30 CET 2002 - coolo@suse.de - -- updating the admin tar ball to find out about possible problems - -------------------------------------------------------------------- -Mon Dec 16 14:28:39 CET 2002 - coolo@suse.de - -- updating to latest branch. - -------------------------------------------------------------------- -Tue Dec 10 14:55:41 CET 2002 - coolo@suse.de - -- adding a check to kdeinit that checks for KDE_IS_PRELINKED and - is not using dlopen then - -------------------------------------------------------------------- -Tue Dec 3 09:57:31 CET 2002 - coolo@suse.de - -- trying to fix SSL check for lib64 - -------------------------------------------------------------------- -Sat Nov 30 21:48:04 CET 2002 - adrian@suse.de - -- next try of RC5 tar ball. BRANCH fixes are again disabled - -------------------------------------------------------------------- -Thu Nov 28 13:01:54 CET 2002 - adrian@suse.de - -- apply 3_1_BRANCH fixes -- fix build for lib64 - -------------------------------------------------------------------- -Mon Nov 25 10:46:04 CET 2002 - adrian@suse.de - -- update to RC5. -- do not use --enable-final on beta (gcc 3.3) - -------------------------------------------------------------------- -Mon Nov 25 01:03:39 CET 2002 - ro@suse.de - -- added openldap2-client to neededforbuild - -------------------------------------------------------------------- -Sat Nov 23 16:24:50 CET 2002 - adrian@suse.de - -- enable openldap support -- clean up #neededforbuild - -------------------------------------------------------------------- -Wed Nov 20 15:02:54 CET 2002 - coolo@suse.de - -- adding fix for admin dir which should unbreak packages having problems - with autoconf 2.56 - -------------------------------------------------------------------- -Wed Nov 20 13:00:30 CET 2002 - adrian@suse.de - -- disable hotfix again (it is inside the new tar ball) - -------------------------------------------------------------------- -Wed Nov 20 11:13:49 CET 2002 - adrian@suse.de - -- update to version 3.1-RC4 (final ?) - -------------------------------------------------------------------- -Tue Nov 12 17:00:38 CET 2002 - coolo@suse.de - -- another snapshot with even more last minute fixes ;( - -------------------------------------------------------------------- -Tue Nov 12 09:14:09 CET 2002 - coolo@suse.de - -- apply the lib64 patch correctly (in updating to a source without - the patch pre-applied) - -------------------------------------------------------------------- -Mon Nov 11 16:14:44 CET 2002 - coolo@suse.de - -- update to newer snapshot and sort out patches - -------------------------------------------------------------------- -Wed Nov 6 17:35:47 CET 2002 - adrian@suse.de - -- update to snapshot 3.0.8.20021106 (fix file conflicts) - -------------------------------------------------------------------- -Sun Nov 3 13:16:21 CET 2002 - adrian@suse.de - -- update to version 1.1.0.20021030 ~= RC1 - -------------------------------------------------------------------- -Tue Oct 8 21:19:44 CEST 2002 - adrian@suse.de - -- update to version 3.0.4 -- disable topMenu patch again - -------------------------------------------------------------------- -Tue Sep 24 09:05:13 CEST 2002 - froh@suse.de - -- %-ifarch'ed Requires: alsa-devel for all but s390 and s390x (#18647) - -------------------------------------------------------------------- -Sun Sep 8 19:48:06 CEST 2002 - adrian@suse.de - -- cross side scripting check fix from Dirk Mueller - -------------------------------------------------------------------- -Sun Sep 8 15:53:37 CEST 2002 - adrian@suse.de - -- .exe files are handled now as files for wine and not direct executable - -------------------------------------------------------------------- -Thu Sep 5 14:11:22 CEST 2002 - adrian@suse.de - -- add fix from mana for libkmid, to get alsa sequenzer working again - -------------------------------------------------------------------- -Wed Sep 4 13:16:24 MEST 2002 - coolo@suse.de - -- fix the PNM mimetypes, so that digital cameras work - -------------------------------------------------------------------- -Sat Aug 31 23:49:25 CEST 2002 - adrian@suse.de - -- default to lib64 pathes in admin/* on lib64 systems. - (fix link error, when lib32 enviroment is installed) - -------------------------------------------------------------------- -Fri Aug 30 12:07:35 CEST 2002 - adrian@suse.de - -- use most current 3_0_BRANCH patches - * fix for crash in khtml with enabled java from Seli - * layout fix in kcombobox from gis - * kcombobox fix from dfaure for oversized box in koffice - * kjs date fixes from dfaure - * ksycoca, illegal object fix from Waldo - * kcompletion box fix for Xinerama setup, reviewed by gis - * do not loop on unexpected EOF in kio_khtml from Waldo - * newline handling fix in khtml from dirk - * disable tiff write support, since it is not implemented (coolo) - * translations - -------------------------------------------------------------------- -Mon Aug 26 14:55:32 CEST 2002 - adrian@suse.de - -- install plugins on lib64 into /opt/kde3/lib. so we do not need - different plugin path definitions -- add missing dependencies to -devel packages -- add some selected fix from 3_0_BRANCH - -------------------------------------------------------------------- -Tue Aug 20 10:28:25 CEST 2002 - adrian@suse.de - -- fix build for lib64 really :( - -------------------------------------------------------------------- -Tue Aug 20 08:51:21 CEST 2002 - adrian@suse.de - -- fix build for lib64 -- move designer plugins into -devel package - -------------------------------------------------------------------- -Tue Aug 20 00:41:40 CEST 2002 - adrian@suse.de - -- follow change qt plugin path patch (using implicit subdir on lib64) - -------------------------------------------------------------------- -Fri Aug 16 12:12:54 CEST 2002 - adrian@suse.de - -- update to current 3_0_BRANCH - * include dirk's khtml glitch fix - -------------------------------------------------------------------- -Wed Aug 14 16:08:17 CEST 2002 - coolo@suse.de - -- don't strip on debug-i386 -- fixing lib64 path for plugins - -------------------------------------------------------------------- -Tue Aug 13 15:29:12 CEST 2002 - coolo@suse.de - -- prefer settings in /etc/opt/kde3 over /opt/kde, so that UL - settings can overwrite standard KDE settings - -------------------------------------------------------------------- -Tue Aug 13 12:42:46 CEST 2002 - adrian@suse.de - -- update to 3.0.3 tar ball, second try - (includes security fix for KSSL) - -------------------------------------------------------------------- -Tue Aug 13 10:30:30 CEST 2002 - coolo@suse.de - -- alsadev -> alsa-devel - -------------------------------------------------------------------- -Mon Aug 12 17:08:37 CEST 2002 - coolo@suse.de - -- the x86_64 bug is fixed now - -------------------------------------------------------------------- -Sun Aug 11 12:54:06 CEST 2002 - coolo@suse.de - -- changing admin.tar.bz2 to work around automake crap not beeing - able to get kdemultimedia compiled -- update 3.0 branch patch again - -------------------------------------------------------------------- -Thu Aug 8 00:44:30 CEST 2002 - adrian@suse.de - -- update to 3.0.3 -- add 3_0_BRANCH fix for ksycoca recreation by Waldo - -------------------------------------------------------------------- -Mon Aug 5 10:43:16 CEST 2002 - adrian@suse.de - -- update 3_0_BRANCH.dif -- add some mimetypes -- apply patch to support a fallback on mounting devices -- fix PreRequires -- update admin.tar - -------------------------------------------------------------------- -Sun Aug 4 22:35:24 CEST 2002 - adrian@suse.de - -- finaly fix build for hammer - (yes, even tested this time) - -------------------------------------------------------------------- -Sun Aug 4 11:33:29 CEST 2002 - adrian@suse.de - -- fix the second typo in one line :( - -------------------------------------------------------------------- -Fri Aug 2 15:56:03 CEST 2002 - coolo@suse.de - -- adding a patch that hopefully fixes the very large tip of the konsole - window - -------------------------------------------------------------------- -Thu Aug 1 15:58:11 CEST 2002 - adrian@suse.de - -- and fix the typo in last patch - -------------------------------------------------------------------- -Thu Aug 1 15:47:00 CEST 2002 - adrian@suse.de - -- add workaround for x86_64 compiler bug - -------------------------------------------------------------------- -Thu Aug 1 09:24:45 CEST 2002 - coolo@suse.de - -- updating the branch patch for a possible fix to kukuk's - bugzilla crash :) - -------------------------------------------------------------------- -Wed Jul 31 15:58:12 CEST 2002 - adrian@suse.de - -- add missing directorys applnk/* - -------------------------------------------------------------------- -Tue Jul 30 12:00:25 CEST 2002 - coolo@suse.de - -- don't use SuSEconfig for the KDE api, but a dedicated script - in %post -- don't install a susehelp config file anymore, but let susehelp - handle it itself -- handle the new location for api docu - -------------------------------------------------------------------- -Fri Jul 26 20:37:03 CEST 2002 - adrian@suse.de - -- fix neededforbuild - -------------------------------------------------------------------- -Fri Jul 26 19:44:39 CEST 2002 - adrian@suse.de - -- disable fast-malloc, since it is in qt now - -------------------------------------------------------------------- -Tue Jul 23 16:02:01 CEST 2002 - coolo@suse.de - -- also install the qt.tag file -- remove configure option removed long ago - -------------------------------------------------------------------- -Tue Jul 23 09:05:40 CEST 2002 - coolo@suse.de - -- don't let the Makefile guess the package name. it will guess the - wrong thing - -------------------------------------------------------------------- -Fri Jul 19 10:57:12 CEST 2002 - adrian@suse.de - -- use the kpart for rpm mimetype (if installed) - -------------------------------------------------------------------- -Thu Jul 18 16:53:37 CEST 2002 - coolo@suse.de - -- use doxygen for docu -- backport admin fixes from HEAD branch -- removed neededforbuilds that look like stuff not needed for build - (since KDE 2.1) -- moved API docu (back) into /opt/kde3 -- updated 3.0 branch diff - -------------------------------------------------------------------- -Fri Jul 12 17:12:27 CEST 2002 - adrian@suse.de - -- add topMenu definition - -------------------------------------------------------------------- -Fri Jul 12 14:21:11 CEST 2002 - adrian@suse.de - -- use current 3_0_BRANCH - * includes the fix for the famous CSS/JS segfault in konqueror - -------------------------------------------------------------------- -Thu Jul 11 13:10:17 CEST 2002 - adrian@suse.de - -- fix build for lib64 -- use patch from coolo to disable g3 file support (libtiff is broken) - -------------------------------------------------------------------- -Mon Jul 8 13:04:10 CEST 2002 - adrian@suse.de - -- fix file list - -------------------------------------------------------------------- -Fri Jul 5 14:00:14 CEST 2002 - adrian@suse.de - -- add missing icon directorys -- split cups support into own package for 8.1 -- s,i386,%ix86, - -------------------------------------------------------------------- -Thu Jun 27 21:57:40 CEST 2002 - adrian@suse.de - -- add %run_ldconfig in %post -- use --disable-final on ppc64 -- disable more debug messages - -------------------------------------------------------------------- -Wed Jun 26 10:55:26 CEST 2002 - adrian@suse.de - -- update to the second try of 3.0.2 tar ball - -------------------------------------------------------------------- -Mon Jun 24 22:29:07 CEST 2002 - adrian@suse.de - -- udpate to version 3.0.2 - -------------------------------------------------------------------- -Wed Jun 19 18:12:46 CEST 2002 - uli@suse.de - -- disable-final on ARM - -------------------------------------------------------------------- -Wed Jun 12 10:44:09 CEST 2002 - adrian@suse.de - -- update to current 3_0_BRANCH (large kjs updates) -- clean #neededforbuild -- do only warn on missing admin directory in update_admin -- remove old common_compile_options file - -------------------------------------------------------------------- -Fri Jun 7 13:55:25 CEST 2002 - adrian@suse.de - -- using fixed libtool for -m32/-m64 in admin (fixed by matz) -- replace admin with the content from admin.tar.bz2 - -------------------------------------------------------------------- -Thu Jun 6 15:45:24 CEST 2002 - adrian@suse.de - -- export kde_styledir and kde_widgetdir to follow the plugins* - directory name from Qt. - -------------------------------------------------------------------- -Wed Jun 5 15:59:29 CEST 2002 - adrian@suse.de - -- go back to 1.316 for am_edit - (no unsermake support, but generates moc files with --enable-final) - -------------------------------------------------------------------- -Tue Jun 4 10:39:02 CEST 2002 - coolo@suse.de - -- adding /sbin:/usr/sbin to the PATH if kdesu is used to become root. - Work around for flaws in setup tools (#11362) - -------------------------------------------------------------------- -Mon Jun 3 15:03:11 CEST 2002 - coolo@suse.de - -- removing test programs that cause problems with automake 1.6.1 - -------------------------------------------------------------------- -Mon Jun 3 12:34:41 CEST 2002 - adrian@suse.de - -- update to inofficial version 3.0.1a - * include bug/security fix for file uploads -- fix for broken png's in khtml in some cases - -------------------------------------------------------------------- -Mon May 27 12:02:26 CEST 2002 - adrian@suse.de - -- fix for 7.0 distribution - -------------------------------------------------------------------- -Thu May 23 18:35:17 CEST 2002 - ro@suse.de - -- fix admin extraction - -------------------------------------------------------------------- -Thu May 23 16:43:13 CEST 2002 - adrian@suse.de - -- Obsolete/provide kups and add start script - -------------------------------------------------------------------- -Thu May 23 14:48:35 CEST 2002 - coolo@suse.de - -- adding a update_admin snippet here too, so we can fix kde 3 - apps the same way as kde 2 apps - -------------------------------------------------------------------- -Wed May 22 01:18:18 CEST 2002 - adrian@suse.de - -- use coolo's famous common_options config file format - old common_compile_options file is not disabled for now -- use explicit --enable-debug=full if RPM_OPT_FLAGS~=-g - -------------------------------------------------------------------- -Tue May 21 16:28:23 CEST 2002 - adrian@suse.de - -- use Dirk's official post-3.0.1 patch and disable our former ones - * includes a security fix for khtml, known as "Opera exploit" - * fix "arts not starting realtime" problem (typo in reading config -variable). - * fix crashing kbuildsycoca when it hits an unreadable directory - * fix a text selection problem for KMail. - * fix a problem where (i)frame's accidently were not resized correctly. - * fix mime-detection of koffice post v1.1 documents - * urgent fixes in kfiledialog - -------------------------------------------------------------------- -Fri May 17 15:09:31 CEST 2002 - adrian@suse.de - -- fix dieing kio slave on https connections - -------------------------------------------------------------------- -Fri May 17 14:09:44 CEST 2002 - adrian@suse.de - -- reduce noise on stdout from khtml (extend shut_up.dif) - -------------------------------------------------------------------- -Tue May 14 11:42:25 CEST 2002 - adrian@suse.de - -- use updated 3.0.1 tar ball include crash fixes (esp. for kmail) - -------------------------------------------------------------------- -Mon May 13 14:46:46 CEST 2002 - adrian@suse.de - -- set requirement back to qt-3.0.3 version - -------------------------------------------------------------------- -Fri May 10 16:11:58 CEST 2002 - adrian@suse.de - -- workaround rpm parse bug for old distributions - -------------------------------------------------------------------- -Fri May 10 13:29:58 CEST 2002 - adrian@suse.de - -- update to version 3.0.1 and remove obsolete patches - -------------------------------------------------------------------- -Tue May 7 12:49:37 CEST 2002 - meissner@suse.de - -- %_lib fixes inside the .cpp files (should now find SSL libraries) - -------------------------------------------------------------------- -Mon May 6 16:33:47 CEST 2002 - meissner@suse.de - -- %_lib fixes - -------------------------------------------------------------------- -Tue Apr 16 14:58:17 CEST 2002 - adrian@suse.de - -- Require spell (either ispell or aspell) > 8.0 only -- use --disable-final and -O0 on mips - -------------------------------------------------------------------- -Fri Apr 12 15:53:49 MEST 2002 - adrian@suse.de - -- set --enable-mt. Not needed for kdelibs3, but it should be - in the common compiler flags for some other applications with - older admin folder - -------------------------------------------------------------------- -Tue Apr 9 14:12:43 CEST 2002 - adrian@suse.de - -- fix kde api generation for 7.1, 7.2 and 7.3 based distributions - -------------------------------------------------------------------- -Tue Mar 26 00:14:11 CET 2002 - adrian@suse.de - -- update to new 3.0 final version. the last one. sure. -- comment out last harmless warning message from kdelibs - -------------------------------------------------------------------- -Mon Mar 25 20:31:47 CET 2002 - adrian@suse.de - -- update 3.0 final tar ball -- 2 urgent fixes ( kdirlister ) - -------------------------------------------------------------------- -Mon Mar 25 10:45:55 CET 2002 - adrian@suse.de - -- update to 3.0 final (everything is wonderfull version) -- switch from /etc/X11/kde3 to /etc/opt/kde3 to be FHS compliant -- add /etc/kde3rc with prefix, so we do not need $KDEDIRS anymore - -------------------------------------------------------------------- -Thu Mar 21 19:05:29 CET 2002 - adrian@suse.de - -- use kdoc to generate api-documentation again - (makes the class browser of kdevelop happy) - -------------------------------------------------------------------- -Thu Mar 21 16:55:43 CET 2002 - adrian@suse.de - -- update to 3.0rc3 - -------------------------------------------------------------------- -Sun Mar 10 17:03:38 CET 2002 - adrian@suse.de - -- update to 3.0rc2 - -------------------------------------------------------------------- -Mon Mar 4 17:31:55 CET 2002 - adrian@suse.de - -- update to 3.0rc1 - -------------------------------------------------------------------- -Mon Feb 25 19:09:57 CET 2002 - adrian@suse.de - -- update to snapshot 2.92.2002022512 - -------------------------------------------------------------------- -Mon Feb 18 20:55:08 CET 2002 - adrian@suse.de - -- update to snapshot 2.92.2002021810 - -------------------------------------------------------------------- -Thu Feb 14 23:26:36 CET 2002 - adrian@suse.de - -- update to snapshot 2.92.2002021421 -- split kdelibs3-artsd package into arts and arts-devel -- add Doug Lea's fast threaded malloc function from glibc 2.3 - * prepared by Lubos Lunak - * integrated into libkdecore - * add dummy library to make it configurable via libKmalloc.so link - * disabled by default - -------------------------------------------------------------------- -Mon Feb 11 15:07:20 CET 2002 - adrian@suse.de - -- update to snapshot 2.92.2002021111 - -------------------------------------------------------------------- -Mon Feb 4 23:51:35 CET 2002 - adrian@suse.de - -- update to 2.92 (KDE 3.0 beta 2) -- create common_compile_flags file - -------------------------------------------------------------------- -Fri Feb 1 00:26:05 CET 2002 - ro@suse.de - -- changed neededforbuild to - -------------------------------------------------------------------- -Mon Jan 28 14:49:00 CET 2002 - adrian@suse.de - -- update to snapshot from 2.91.2002012811 - -------------------------------------------------------------------- -Wed Jan 23 01:50:51 CET 2002 - adrian@suse.de - -- add missing header files - -------------------------------------------------------------------- -Wed Jan 23 00:31:21 CET 2002 - adrian@suse.de - -- update to snapshot 2.91.2002012221 - -------------------------------------------------------------------- -Tue Jan 15 18:24:51 CET 2002 - adrian@suse.de - -- update to snapshot 2.91.2002011511 - -------------------------------------------------------------------- -Sat Jan 5 18:28:06 CET 2002 - adrian@suse.de - -- update to recent/todays snapshot -- disable rpath for SuSE > 7.3 - (/opt/kde3/lib is in ld.so.conf) -- add Requires: line for at least Qt 3.0.1 - -------------------------------------------------------------------- -Mon Dec 17 15:58:49 CET 2001 - adrian@suse.de - -- fix compile on s390 -- add fix for khtml seg fault -- do not build documentation for <7.3 distributions until kdoc - is fixed - -------------------------------------------------------------------- -Wed Dec 12 17:02:34 CET 2001 - adrian@suse.de - -- update to KDE 3.0 Beta 1 - -------------------------------------------------------------------- -Tue Dec 4 20:13:20 CET 2001 - adrian@suse.de - -- use current CVS snapshot - -------------------------------------------------------------------- -Fri Nov 2 12:30:45 CET 2001 - adrian@suse.de - -- using cvs snapshot from 01 Nov 2001 - -------------------------------------------------------------------- -Sat Oct 20 17:57:21 CEST 2001 - adrian@suse.de - -- using newer cvs-snapshot - (compiles again with qt 3 final) - -------------------------------------------------------------------- -Tue Oct 9 11:55:41 CEST 2001 - adrian@suse.de - -- branch to first kdelibs 3 (alpha 1) - -------------------------------------------------------------------- -Mon Sep 24 01:40:05 CEST 2001 - adrian@suse.de - -- add security fix for peer-ssl from Dirk -- add fix to make it possible to allow JS from local pages - -------------------------------------------------------------------- -Fri Sep 21 22:51:53 CEST 2001 - adrian@suse.de - -- add fix for kbuildsycoca --incremental from Waldo - (changed files (due to updated packages or a SuSEconfig run for - example) do not lead anymore to an incorrect ksycoca database. - -------------------------------------------------------------------- -Tue Sep 18 08:55:26 CEST 2001 - adrian@suse.de - -- add symbolic link to /opt/kde2/doc/HTML/en/kdeapi -- #neededforbuild cups -> cups-libs - -------------------------------------------------------------------- -Sat Sep 15 19:13:06 CEST 2001 - adrian@suse.de - -- add klineedit fix -- add warning that kdDebug function is disabled (except for ppc) -- fix kdelibs-2.2.1.dif (do not apply patch for ppc-only global) - -------------------------------------------------------------------- -Thu Sep 13 09:36:06 CEST 2001 - adrian@suse.de - -- add fix for kjs (octal parsing) -- add fix icondialog (custom icon directorys) -- fix ia64 patch - -------------------------------------------------------------------- -Tue Sep 11 10:54:21 CEST 2001 - adrian@suse.de - -- add security fixes for kssl (do not save keys on disk) -- add Qt API to the API index page - -------------------------------------------------------------------- -Mon Sep 10 14:41:23 CEST 2001 - adrian@suse.de - -- update to to second try of kdelibs 2.2.1 tar ball - * JavaScript fixes -- fix ia64 workarounds to build on older distris - -------------------------------------------------------------------- -Sun Sep 9 17:57:01 CEST 2001 - schwab@suse.de - -- Fix specfile for ia64 workarounds. - -------------------------------------------------------------------- -Sat Sep 8 20:40:27 CEST 2001 - adrian@suse.de - -- updating to final 2.2.1 tar ball - -------------------------------------------------------------------- -Sun Sep 2 09:59:21 CEST 2001 - adrian@suse.de - -- update to KDE_2_2_BRANCH from 02.09.2001 - * compile fixes - * KFile crash fix - * KDockWidget crash fix, caused crash in quanta - * fix login with chars in password >127 - * load charsets file on demand - * kxmlgui fixed to read really the complete xml file. -- drop -cups package, the cups libs are now splitted from the cups - package. -- add kmimetype hack to get a fallback application for device icons -- make KDE quiet by default (kdDebug default value is 4 now) - -------------------------------------------------------------------- -Tue Aug 28 15:53:23 CEST 2001 - adrian@suse.de - -- update to KDE_2_2_BRANCH from 28.08.2001 - * fix kspell for iso 13 languages - * fix $PATH for kdesu - * check the preview action in setPreviewWidget() - * check for aborted save - * official patch for kbuildsycoca - * kfile fixes - * crash fixes in userstylesheets - * large file system support fix - * crash fix in kbugreport -- removed patches for kbuildsycoca and large file support - -------------------------------------------------------------------- -Sat Aug 25 09:49:21 CEST 2001 - adrian@suse.de - -- update to KDE_2_2_BRANCH from 25.08.2001 - * khtml supports - * kded updates - * translation updates -- kbuildsycoca speed optimisation - (original patch from Lubos Lunak, reworked to be BC) - -------------------------------------------------------------------- -Tue Aug 21 12:25:49 CEST 2001 - adrian@suse.de - -- using KDE_2_2_BRANCH from 21.08.2001 - * html parser fixes - * artsd fixes - * ... -- disable FAM by default, it can be enabled with - export USE_FAM=1 -- disable and obsolete -i686 package, until the number of problems - are solved - -------------------------------------------------------------------- -Mon Aug 6 23:55:17 CEST 2001 - adrian@suse.de - -- add assert into khtml/misc/loader.cpp as recomended by Dirk -- switch on SSE support in i386 architecture - (arts has a runtime checking) -- clean up file list -- ia64 workarounds - -------------------------------------------------------------------- -Mon Aug 6 10:59:49 CEST 2001 - adrian@suse.de - -- update to final 2.2 - -------------------------------------------------------------------- -Wed Aug 1 15:57:30 CEST 2001 - adrian@suse.de - -- update to 2.2rc1 - -------------------------------------------------------------------- -Fri Jul 6 11:53:42 CEST 2001 - adrian@suse.de - -- generate API documentation - (no need to install kdevelop for api docu anymore) - -------------------------------------------------------------------- -Fri Jun 29 15:39:12 CEST 2001 - adrian@suse.de - -- 2.2beta1 - -------------------------------------------------------------------- -Mon May 28 10:39:18 CEST 2001 - adrian@suse.de - -- 2.2alpha2 - -------------------------------------------------------------------- -Mon Apr 16 22:02:33 CEST 2001 - adrian@suse.de - -- 2.2alpha1 - -------------------------------------------------------------------- -Fri Apr 13 12:54:18 CEST 2001 - adrian@suse.de - -- add currency symbol to KFontDialog preview for testing purposes - -------------------------------------------------------------------- -Tue Apr 10 20:49:07 CEST 2001 - adrian@suse.de - -- revert also kdeinit changes (compile fix) -- add fixes for javascript from CVS -- add fixes for font name mapping from CVS -- add kdeinit_shutdown patch from Waldo - -------------------------------------------------------------------- -Tue Apr 10 01:01:16 MEST 2001 - adrian@suse.de - -- minor fix, but hopefully fix linker problems on all P-II systems - -------------------------------------------------------------------- -Mon Apr 9 11:24:07 CEST 2001 - adrian@suse.de - -- disable alsa for 7.0-ppc - -------------------------------------------------------------------- -Fri Apr 6 11:01:59 CEST 2001 - adrian@suse.de - -- drop the -nostdlib flag during linking. this causes problems - (since not all need libs are used) on some architectures -- -O2 for axp - -------------------------------------------------------------------- -Thu Apr 5 08:56:33 CEST 2001 - adrian@suse.de - -- update to 2_1_BRANCH. - this fixes the proxy server authentication problem - -------------------------------------------------------------------- -Wed Mar 28 18:28:29 CEST 2001 - adrian@suse.de - -- disable ssl support for 7.0-ppc - (problems with the compiler and linker, which can not be fixed - without to loss the BC) - -------------------------------------------------------------------- -Tue Mar 27 12:08:53 CEST 2001 - ro@suse.de - -- changed neededforbuild to - -------------------------------------------------------------------- -Tue Mar 20 21:58:31 CET 2001 - adrian@suse.de - -- enable -O2 for ppc - using inline gcc bug workaround for ia64 - -------------------------------------------------------------------- -Tue Mar 20 18:53:42 CET 2001 - adrian@suse.de - -- update to 2.1.1 (official tar ball) - -------------------------------------------------------------------- -Mon Mar 19 22:03:49 CET 2001 - adrian@suse.de - -- update to current 2_1_BRANCH - we have kde-config as executable binary back - (lots of configure scripts test this) - -------------------------------------------------------------------- -Mon Mar 19 15:39:26 CET 2001 - adrian@suse.de - -- add cyrus-sassl to #neededforbuild - -------------------------------------------------------------------- -Sat Mar 17 21:38:50 CET 2001 - adrian@suse.de - -- added missing packages in #neededforbuild - -------------------------------------------------------------------- -Sat Mar 17 13:32:29 CET 2001 - adrian@suse.de - -- fix CATALOG for distributions <7.2 - update to current 2_1_0_TAG - -------------------------------------------------------------------- -Tue Mar 13 14:29:16 CET 2001 - ro@suse.de - -- added CATALOG for docbook_3 - -------------------------------------------------------------------- -Tue Mar 13 01:12:30 CET 2001 - ro@suse.de - -- changed neededforbuild to - -------------------------------------------------------------------- -Thu Feb 22 19:22:17 CET 2001 - adrian@suse.de - -- the final final 2.1.0 tar ball ... - -------------------------------------------------------------------- -Wed Feb 21 22:42:47 CET 2001 - adrian@suse.de - -- use the right KDE BRANCH (not my fault ;-) - -------------------------------------------------------------------- -Wed Feb 21 17:16:51 CET 2001 - adrian@suse.de - -- update to final 2.1.0 - -------------------------------------------------------------------- -Wed Feb 14 17:04:08 CET 2001 - adrian@suse.de - -- update to 2.1 post beta 2 - -------------------------------------------------------------------- -Mon Jan 22 14:44:41 CET 2001 - stepan@suse.de - -- alpha axp compile fixes for gcc 2.95.2 - -------------------------------------------------------------------- -Tue Jan 16 12:05:26 CET 2001 - adrian@suse.de - -- add a check of return value in kprocess. - Hopefully no crashes anymore. - -------------------------------------------------------------------- -Mon Jan 15 22:13:16 CET 2001 - adrian@suse.de - -- disable --enable-final until the glibc/compiler problem in - kprocess is fixed - -------------------------------------------------------------------- -Mon Jan 15 14:01:38 CET 2001 - adrian@suse.de - -- fix index.desktop for distris <7.1 - -------------------------------------------------------------------- -Sat Jan 13 18:49:40 CET 2001 - adrian@suse.de - -- fix local support in kicker. native language again in menus - this fix does not work for chinese people - fix index.desktop in highcolor, 22x22 actions icons can be loaded - again - -------------------------------------------------------------------- -Fri Jan 12 00:02:33 CET 2001 - adrian@suse.de - -- create some links to see the konqueror gear again - fix hicolor index file - -------------------------------------------------------------------- -Tue Jan 9 22:07:19 CET 2001 - adrian@suse.de - -- added security fix for kdesu from Waldo - -------------------------------------------------------------------- -Mon Jan 8 15:43:09 CET 2001 - adrian@suse.de - -- fix SuSE icon description - -------------------------------------------------------------------- -Sun Jan 7 15:56:58 CET 2001 - adrian@suse.de - -- use additional pathes, to not conflict with older pathes - -------------------------------------------------------------------- -Sun Jan 7 14:24:01 CET 2001 - adrian@suse.de - -- new icon handling. much more clean now and the - dependencie to icons is not needed anymore - -------------------------------------------------------------------- -Sat Jan 6 17:15:51 CET 2001 - adrian@suse.de - -- fix locale support. - LANG=de_DE or LANG=de_DE.utf-8 is working now. - -------------------------------------------------------------------- -Tue Jan 2 21:51:19 CET 2001 - adrian@suse.de - -- added a fix for font handling, if antialising is used - (Thanks Kurt) - -------------------------------------------------------------------- -Mon Jan 1 22:16:48 CET 2001 - adrian@suse.de - -- remove charset for german. this confuses the font handling - added fix for stalled, but broken connections; thanks waldo - -------------------------------------------------------------------- -Sat Dec 30 21:22:21 CET 2000 - adrian@suse.de - -- extend rpm mimelnk for *.spm files - disabled threading - -------------------------------------------------------------------- -Wed Dec 27 18:33:15 CET 2000 - adrian@suse.de - -- drop message in kdeinit, which produce a lot of invalid bugzilla entrys - -------------------------------------------------------------------- -Wed Dec 20 10:38:25 CET 2000 - adrian@suse.de - -- added openssl-devel for #neededforbuild - -------------------------------------------------------------------- -Sun Dec 17 15:55:15 CET 2000 - adrian@suse.de - -- moved icon links back to kdelibs :-( - -------------------------------------------------------------------- -Sun Dec 17 12:54:19 CET 2000 - adrian@suse.de - -- moved icon links from this package to kdebase - -------------------------------------------------------------------- -Fri Dec 15 14:35:38 CET 2000 - adrian@suse.de - -- brown paper bag fix ... I spend Rudi a beer ... - -------------------------------------------------------------------- -Fri Dec 15 12:02:02 CET 2000 - adrian@suse.de - -- added icon packages to #neededforbuild - -------------------------------------------------------------------- -Thu Dec 14 12:38:23 CET 2000 - adrian@suse.de - -- fixed specfile - -------------------------------------------------------------------- -Wed Dec 13 19:22:39 CET 2000 - adrian@suse.de - -- fixed icon links - -------------------------------------------------------------------- -Wed Dec 13 16:52:23 CET 2000 - adrian@suse.de - -- update to current 2_0_BRANCH - -------------------------------------------------------------------- -Wed Nov 29 14:25:31 CET 2000 - adrian@suse.de - -- update to 2.0.1 - -------------------------------------------------------------------- -Wed Nov 22 02:01:26 CET 2000 - ro@suse.de - -- remove penguin.png (in kdebase) - -------------------------------------------------------------------- -Tue Nov 21 15:07:15 CET 2000 - adrian@suse.de - -- fixed /etc/kderc - -------------------------------------------------------------------- -Tue Nov 21 00:08:08 CET 2000 - adrian@suse.de - -- added icon support for non kde icons - added /etc/kderc - ~/Desktop -> ~/KDesktop - -------------------------------------------------------------------- -Thu Nov 16 15:46:49 CET 2000 - adrian@suse.de - -- update to newer snapshot from KDE_2_0_BRANCH - fixed sgml catalog file for our sgml enviroment - -------------------------------------------------------------------- -Fri Nov 3 08:45:45 CET 2000 - adrian@suse.de - -- fixed needed for build - -------------------------------------------------------------------- -Thu Nov 2 20:35:30 CET 2000 - adrian@suse.de - -- fixed file list - -------------------------------------------------------------------- -Tue Oct 17 04:52:05 CEST 2000 - adrian@suse.de - -- update to 2.0.0 -- changed default for ~/.kde to ~/.kde2 -- dropped klibs2i and klibs2cr again -- splitted package in - * kdelibs - * kdelibs-devel - -------------------------------------------------------------------- -Wed Sep 20 11:29:35 CEST 2000 - adrian@suse.de - -- the last fix :-( - -------------------------------------------------------------------- -Sun Sep 17 00:27:08 CEST 2000 - adrian@suse.de - -- splited klibs2 into klibs2, klibs2i (international version - without crypt support) and klibs2cr (crypt version) - -------------------------------------------------------------------- -Sat Sep 16 15:17:06 CEST 2000 - adrian@suse.de - -- removed ssl/ssh support - added big endian fix in KPixmap - -------------------------------------------------------------------- -Tue Sep 12 11:49:35 MEST 2000 - adrian@suse.de - -- changed to -O0 for ppc and alpha - -------------------------------------------------------------------- -Tue Sep 12 08:56:11 CEST 2000 - adrian@suse.de - -- update to RC 1 - -------------------------------------------------------------------- -Mon Aug 21 14:04:31 CEST 2000 - adrian@suse.de - -- update to beta 4 - -------------------------------------------------------------------- -Mon Jul 24 17:46:04 CEST 2000 - adrian@suse.de - -- update to second version of beta 3 - -------------------------------------------------------------------- -Fri Jul 21 22:39:53 CEST 2000 - adrian@suse.de - -- update to beta 3 - -------------------------------------------------------------------- -Mon Jul 17 19:24:01 CEST 2000 - adrian@suse.de - -- update to snapshot from 17.07.2000 - -------------------------------------------------------------------- -Thu Jul 6 19:48:47 CEST 2000 - adrian@suse.de - -- Spec file created from kdelibs-1.91.20000706.tar.gz by autospec - - -------------------------------------------------------------------- -Fri Jun 9 17:15:52 CEST 2000 - adrian@suse.de - -- correct neededforbuild and updated khtml - -------------------------------------------------------------------- -Fri Jun 9 02:35:16 CEST 2000 - adrian@suse.de - -- update to 1.91; beta 2 - -------------------------------------------------------------------- -Tue Jun 6 01:29:47 CEST 2000 - adrian@suse.de - -- snapshot from 06.06.2000 - -------------------------------------------------------------------- -Sun May 28 09:22:23 CEST 2000 - adrian@suse.de - -- snapshot from 28.05.2000 - new type of spec file - -------------------------------------------------------------------- -Fri May 12 13:29:41 CEST 2000 - adrian@suse.de - -- update to KDE 1.90 - -------------------------------------------------------------------- -Thu Apr 27 17:45:45 CEST 2000 - adrian@suse.de - -- snapshot from 25.04.2000 - -------------------------------------------------------------------- -Thu Apr 20 14:27:28 CEST 2000 - adrian@suse.de - -- fixed file list - -------------------------------------------------------------------- -Wed Apr 19 17:17:42 CEST 2000 - adrian@suse.de - -- snapshot from 17.04.2000 - -------------------------------------------------------------------- -Thu Apr 6 19:21:15 CEST 2000 - adrian@suse.de - -- snapshot from 06.04.2000 - -------------------------------------------------------------------- -Thu Mar 30 18:44:11 CEST 2000 - adrian@suse.de - -- first KDE libs 2 package. PRE 1.90 Version - diff --git a/opensuse/tdelibs/tdelibs.spec b/opensuse/tdelibs/tdelibs.spec deleted file mode 100644 index 4e238d06f..000000000 --- a/opensuse/tdelibs/tdelibs.spec +++ /dev/null @@ -1,825 +0,0 @@ -# -# spec file for package tdelibs -# -# Copyright (c) 2011 the Trinity Project (opensuse). -# -# All modifications and additions to the file contributed by third parties -# remain the property of their copyright owners, unless otherwise agreed -# upon. The license for this file, and modifications and additions to the -# file, is the same license as for the pristine package itself (unless the -# license for the pristine package is not an Open Source License, in which -# case the license is the MIT License). An "Open Source License" is a -# license that conforms to the Open Source Definition (Version 1.9) -# published by the Open Source Initiative. - -# Please submit bugfixes or comments via http://bugs.trinitydesktop.org/ -# - -# norootforbuild - - -Name: tdelibs -BuildRequires: OpenEXR-devel arts-devel aspell-devel cups-devel fam-devel flac-devel krb5-devel -BuildRequires: libart_lgpl-devel libidn-devel libsndfile libtiff-devel -BuildRequires: libxslt-devel openldap2-devel pcre-devel libtqt4-devel sgml-skel -BuildRequires: db-devel libacl-devel libattr-devel unsermake update-desktop-files utempter -BuildRequires: unzip -BuildRequires: avahi-compat-mDNSResponder-devel fdupes libbz2-devel libjasper-devel -BuildRequires: libdrm-devel tde-filesystem cmake -URL: http://www.trinitydesktop.org -License: BSD3c(or similar) ; GPLv2+ ; LGPLv2.1+ -Group: System/GUI/TDE -BuildRoot: %{_tmppath}/%{name}-%{version}-build -Summary: Trinity Base Libraries -Version: 3.5.12.99 -Release: 1 -Provides: kups keramik tdelibs-cups tdelibs-33addons tdepim-networkstatus -Provides: kdelibs3_base = 3.3 -Requires: libtqt4 >= %( echo `rpm -q --queryformat '%{VERSION}' libtqt4`) -Requires: openssl tdelibs-default-style -Requires: hicolor-icon-theme -Recommends: ispell enscript -Requires: sudo -Source0: kdelibs-%{version}.tar.bz2 -Source3: baselibs.conf -Source4: api_docu_description -Source6: tderc -# svn export svn://anonsvn.kde.org/home/kde/branches/KDE/3.5/kde-common/admin -Source8: admin.tar.bz2 -Source9: cr16-filesys-file_broken.png -Source10: kdemm-20050330.tar.bz2 -Source11: 10888-bt.tar.gz -Source12: mimetype-icons.tar.bz2 -Source14: vnd.openxmlformats-officedocument.wordprocessingml.document.desktop -Source15: vnd.openxmlformats-officedocument.presentationml.presentation.desktop -Source16: vnd.openxmlformats-officedocument.spreadsheetml.sheet.desktop -Patch0: 3_5_BRANCH.diff -Patch1: kdeversion.diff -Patch2: admin.diff -Patch3: show-distribution.diff -Patch5: applications.menu-fallback.diff -Patch7: stat-on-media.diff -Patch8: kmimelist.diff -Patch9: x-kde-InitialPreference.diff -Patch10: disable-idn-support.diff -Patch11: silence.diff -Patch12: smooth-scrolling.diff -Patch13: rubberband-selection.diff -Patch15: add-suse-translations.diff -Patch16: kde3rc.dif -Patch17: artwork.diff -Patch26: mimetype-changes.diff -Patch27: noauto-package.diff -Patch29: prefer_distribution_settings.dif -Patch34: allow-man-setgid.diff -Patch40: clever-menu.diff -Patch43: fileshare.diff -Patch44: fontconfig-reverse-lookup.diff -Patch45: limit-max-image-size.diff -Patch50: fix-gnome-help-support.diff -Patch950: fix-gnome-help-support_legacy.diff -Patch52: kdeprint-restart-cupsd.diff -Patch54: kdemm.diff -Patch55: fix-kdemm-build.diff -Patch56: fix-dcopidlng-within-kdelibs-build.diff -Patch57: kdemm-filepreview.diff -Patch60: fix-qxembed.diff -Patch65: integrate-global-pixmaps-new.diff -Patch66: integrate-global-pixmaps-10.1.diff -Patch70: ktip-icon-hack.diff -Patch80: CATALOG.kdelibs3.diff -Patch81: xml-catalog.diff -Patch83: kdelibs3-gcc-4.1-miscompile.diff -Patch85: desktop-translations.diff -Patch86: use-xauthlocalhostname.diff -Patch88: mozilla-sliders.patch -Patch89: kdeprint-utf8.diff -Patch90: kimproxy-warning.diff -Patch95: kdelibs_networkstatus_branch2.diff -Patch97: autostart-spec.diff -Patch105: kdelibs3-hicolor-scalable-sizes.patch -Patch106: use-mediamanager.diff -Patch108: patch-mimetype-iconnames.diff -Patch109: fix-kerberos-printing.diff -Patch110: printpreview.patch -Patch111: kfile-beagle.diff -Patch112: xinerama.patch -Patch113: kremoteencoding-utf8.diff -Patch114: no-progress-for-beagle-status-query.diff -Patch117: kickoff-drop-shadow.diff -Patch122: disable-samba-dialog-without-smb.diff -Patch123: lpoptions-cups-1.2.diff -Patch124: spellcheck-default-utf8.diff -Patch125: kde4-applications.diff -Patch126: avahi-pidfile.diff -Patch127: x-jar-desktop.diff -Patch128: google-mail.diff -Patch129: default-useragent.diff -Patch130: kwalletd-try-open.diff -Patch131: textcompletion-editor.diff -Patch132: no-debug-by-default.diff -Patch133: flash-player-non-oss.diff -Patch134: bundle-locale-help.diff -Patch149: networkstatus.diff -Patch150: kdesu-settings.diff -Patch152: bug-399296_ftphandling-fix.diff -Patch153: bug-382959_kabc_fix_vcardparser.patch -Patch154: r874968-ebay-crash.diff -Patch155: gcc44.diff -Patch156: fix-macmenu.patch -Patch157: ignore-inline-menu.diff -Patch158: bnc557126.diff -Patch159: xmlhttprequest_3.x.diff -Patch160: kdecode_fakes_include.diff -Patch161: gcc45.diff -Patch162: arts-acinclude.patch -Patch163: kdelibs-3.5.10-ossl-1.x.patch -Patch164: light_v_2_scrollbar_patch.patch - -Patch201: kdelibs-3.5.4-CVE-2009-1690.patch -Patch203: kdelibs-3.5.10-latex-syntax-kile-2.0.3.patch -Patch204: kdelibs-3.5.10-CVE-2009-2702.patch -Patch205: kdelibs-3.5.10-cve-2009-2537-select-length.patch -Patch206: kdelibs-3.5.10-cve-2009-1725.patch -Patch207: kdelibs-3.5.10-cve-2009-1698.patch - -Patch210: kdelibs-3.5.10-kio.patch -Patch211: oom_score_adj.patch -Patch212: kcontrol_crash_patch.diff - -%description -This package contains tdelibs, one of the basic packages of the Trinity -Desktop Environment. It contains the necessary libraries for the Trinity -desktop. - -This package is absolutely necessary for using TDE. - -%package arts -License: BSD3c(or similar) ; GPLv2+ ; LGPLv2.1+ -Summary: TDE aRts support -Group: System/GUI/TDE -Provides: tdelibs:/opt/tde/bin/artsmessage -Requires: arts >= %( echo `rpm -q --queryformat '%{VERSION}' arts`) -Recommends: tdemultimedia-arts - -%description arts -This package contains bindings and gui elements for using aRts sound -daemon. - -%package default-style -License: BSD3c(or similar) ; GPLv2+ ; LGPLv2.1+ -Summary: The default TDE style -Group: System/GUI/TDE -Provides: tdelibs:/opt/tde/%_lib/libkdefx.so.4 - -%description default-style -This package contains the Plastik widget style and libkdefx. It only -depends on TQt, not the KDE libraries. - -%package doc -License: BSD3c(or similar) ; GPLv2+ ; LGPLv2.1+ -Summary: Documentation for TDE Base Libraries -Group: System/GUI/TDE -Provides: tdelibs:/opt/tde/share/apps/ksgmltools2 -Provides: tdelibs_doc -Requires: sgml-skel libxml2 -%define regcat /usr/bin/sgml-register-catalog -PreReq: %{regcat} /usr/bin/xmlcatalog /usr/bin/edit-xml-catalog -PreReq: sed grep awk - -%description doc -This package contains the core environment and templates for the Trinity -help system. - -%package devel -License: BSD3c(or similar) ; GPLv2+ ; LGPLv2.1+ -# usefiles /opt/tde/bin/dcopidl /opt/tde/bin/dcopidl2cpp /opt/tde/bin/kdb2html /opt/tde/bin/preparetips -Requires: libtqt4-devel libvorbis-devel tdelibs = %version autoconf automake libxslt-devel libxml2-devel libart_lgpl-devel libjpeg-devel tde-filesystem -# next line from tde-devel-packages macro -Requires: tdelibs-doc libtiff-devel openssl-devel update-desktop-files -Requires: libdrm-devel dbus-1-tqt-devel -Requires: libattr-devel libacl-devel -Requires: tdelibs-arts -Summary: Trinity Base Package: Build Environment -Group: System/GUI/TDE -Requires: fam-devel pcre-devel libidn-devel arts-devel - -%description devel -This package contains all necessary include files and libraries needed -to develop applications that require these. - -%prep - echo %suse_version -%setup -q -n kdelibs-%{version} -%patch0 -%patch1 -%patch3 -%patch5 -%patch7 -%patch10 -%patch11 -%patch12 -%patch13 -%patch15 -%patch16 -%patch17 -%patch26 -%patch27 -%patch29 -#%patch43 -#disable it because of BIC -#%patch45 -%if %suse_version > 1020 -%patch50 -%else -%patch950 -%endif -%patch52 -%patch34 -%patch44 -%patch40 -%patch8 -%patch9 -tar xfvj %SOURCE10 -# TODO! -%patch54 -%patch55 -%patch56 -%patch57 -%patch60 -# 10.2 goes back to the version without suseadds -%if %suse_version > 1010 -%patch65 -%else -%if %suse_version > 1000 -%patch66 -%else -%patch65 -%endif -%endif -%patch70 -rm -rf admin -bunzip2 -cd %{SOURCE8} | tar xfv - --exclude=.cvsignore --exclude=CVS -install -m 755 %{SOURCE2} admin -%patch2 -%patch80 -p 1 -%patch81 -%if %suse_version > 1000 -%patch83 -%endif -%patch85 -%patch86 -%patch88 -%patch89 -%patch90 -%patch95 -%patch97 -%if %suse_version < 1030 -%patch105 -p 1 -%endif -%patch106 -%patch108 -%patch109 -%patch110 -%patch111 -%patch112 -%patch113 -%patch114 -%patch117 -%patch122 -%if %suse_version > 1010 -%patch123 -%endif -%patch124 -%patch125 -%patch126 -%patch127 -%patch128 -%patch129 -%patch130 -%patch131 -%patch132 -%if %suse_version > 1020 -%patch133 -%patch134 -%endif -%patch149 -%patch150 -%patch152 -%patch153 -%patch154 -%patch155 -%patch156 -%if %suse_version > 1110 -%patch157 -%endif -%patch158 -%patch159 -%patch160 -%patch161 -%patch162 -p1 -%patch163 -p1 -%patch164 -p1 -%patch201 -p1 -%patch203 -p1 -%patch204 -p1 -%patch205 -p1 -%patch206 -%patch207 -p1 -%patch210 -p1 -%patch211 -p1 -%patch212 - -tar xfvj %SOURCE12 -# -# define KDE version exactly -# -myrelease=$(echo %release | cut -d. -f-1) -sed 's,#define KDE_VERSION_STRING "\(.*\)",#define KDE_VERSION_STRING "\1 \\"release '$myrelease'\\"",' kdecore/kdeversion.h > kdecore/kdeversion.h_ && mv kdecore/kdeversion.h_ kdecore/kdeversion.h -# -# create build enviroment -# -#UNSERMAKE=yes make -f admin/Makefile.common cvs - -%build -export PATH=$PWD/admin/:$PATH -FINAL="--enable-final" -CFLAGS="$CFLAGS -fno-strict-aliasing" -CXXFLAGS="$CXXFLAGS -fno-strict-aliasing" - -# common_options and do_make have been obsoleted by tde-filesystem - - export path_sudo=/usr/bin/sudo - # - # define the distribution exactly - # - test -e /.buildenv && . /.buildenv -%if %is_plus - # supplementary package - DISTRI="openSUSE $BUILD_DISTRIBUTION_VERSION UNSUPPORTED" -%else - # official build on released and maintained products - DISTRI="openSUSE $BUILD_DISTRIBUTION_VERSION" -%endif - sed 's,#define KDE_VERSION_STRING "\(.*\)",#define KDE_VERSION_STRING "\1 '"$ADD_VERSION"'",' kdecore/kdeversion.h > kdecore/kdeversion.h_ && mv kdecore/kdeversion.h_ kdecore/kdeversion.h - # find MIT kerberos - export PATH=/usr/lib/mit/bin:$PATH - # fast-malloc is not needed anymore - -%cmake_tde -d build \ - -DKDE_MALLOC_FULL=OFF \ - -DKDE_MALLOC=OFF \ - -DKDE_DISTRIBUTION="$DISTRI" \ - -DSSL_INSTALL_DIR=/usr/ssl \ - -DPCSC_INSTALL_DIR=/usr \ - %if %is_plus - -DENABLE_DNOFIFY=ON \ - %endif - -%make_tde -d build - -# -xmlcatbin=/usr/bin/xmlcatalog -# CATALOG=docbook-simple.xml -# $xmlcatbin --noout --create $CATALOG -# $xmlcatbin --noout --add "public" \ -# "-//OASIS//DTD Simplified DocBook XML V1.0//EN" \ -# "file://%{xml_mod_dtd_dir}/sdocbook.dtd" $CATALOG -# $xmlcatbin --noout --add "system" \ -# "http://www.oasis-open.org/docbook/xml/simple/1.0/sdocbook.dtd" \ -# "file://%{xml_mod_dtd_dir}/sdocbook.dtd" $CATALOG -%define FOR_ROOT_CAT for-catalog-%{name}-%{version}.xml -CATALOG=%{_tde_prefix}/share/apps/ksgmltools2/customization/catalog.xml -rm -f %{FOR_ROOT_CAT}.tmp -$xmlcatbin --noout --create %{FOR_ROOT_CAT}.tmp -# $xmlcatbin --noout --add "delegateSystem" \ -# "http://www.oasis-open.org/docbook/xml/simple/" \ -# "file:///$CATALOG" %{FOR_ROOT_CAT}.tmp -$xmlcatbin --noout --add "delegatePublic" \ - "-//KDE//DTD DocBook XML V4.2" \ - "file://$CATALOG" %{FOR_ROOT_CAT}.tmp -$xmlcatbin --noout --add "delegatePublic" \ - "-//KDE//ELEMENTS" \ - "file://$CATALOG" %{FOR_ROOT_CAT}.tmp -$xmlcatbin --noout --add "delegatePublic" \ - "-//KDE//ENTITIES" \ - "file://$CATALOG" %{FOR_ROOT_CAT}.tmp -# Create tag -sed '/ -/<\/catalog/i\ - ' \ - %{FOR_ROOT_CAT}.tmp > %{FOR_ROOT_CAT} - -%install - %makeinstall_tde -d build - mkdir -p $RPM_BUILD_ROOT/%{_tde_configkcfgdir} - install -D %SOURCE9 $RPM_BUILD_ROOT/%{_tde_icondir}/crystalsvg/16x16/filesystems/file_broken.png - mv $RPM_BUILD_ROOT/etc/xdg/menus/applications.menu \ - $RPM_BUILD_ROOT/etc/xdg/menus/applications.menu.kde - # - # lib64 compatibility symlink - # -%ifarch x86_64 ppc64 s390x mips64 sparc64 - mkdir -p $RPM_BUILD_ROOT/%{_tde_prefix}/lib/kde3/ - ln -sf ../../lib64/kde3/plugins \ - $RPM_BUILD_ROOT/%{_tde_prefix}/lib/kde3/plugins-lib64 -%endif - # - # add missing directories - # - for i in Applications Development Editors Edutainment Games Graphics Internet Multimedia Office Settings System Toys Utilities WordProcessing; do - install -d -m 0755 $RPM_BUILD_ROOT/%{_tde_appsdir}/$i - done - rm -f locale.list - for i in $(find /usr/share/locale -mindepth 1 -maxdepth 1 -type d | sed 's:/usr/share/locale/::'); do - install -d -m 755 $RPM_BUILD_ROOT/%{_tde_locale}/$i - install -d -m 755 $RPM_BUILD_ROOT/%{_tde_locale}/$i/LC_MESSAGES - install -d -m 755 $RPM_BUILD_ROOT/%{_tde_htmldir}/$i - echo "%lang($i) %doc %{_tde_locale}/$i" >> locale.list - done - %suse_update_desktop_file kresources X-KDE-settings-desktop - # unlike with other modules, tde_post_install shouldn't - # be put at the end of %install - %tde_post_install - # now create a filesystem layer - for theme in hicolor locolor; do - for j in actions apps filesystems mimetypes; do - for i in 16 22 32 48 64 128; do - install -d -m 0755 $RPM_BUILD_ROOT/%{_tde_icondir}/${theme}/${i}x${i}/${j} - done - install -d -m 0755 $RPM_BUILD_ROOT/%{_tde_icondir}/${theme}/scalable/${j} - done - done - install -d -m 0755 $RPM_BUILD_ROOT/etc/%{_tde_libdir} - install -d -m 0755 $RPM_BUILD_ROOT/etc/%{_tde_configdir} - install -d -m 0755 $RPM_BUILD_ROOT/%{_tde_datadir}/kdelibs/ - install -m 0644 %SOURCE6 $RPM_BUILD_ROOT/etc/ - rm -f $RPM_BUILD_ROOT/%{_tde_libdir}/libkdeinit_*.la - # - # add additional icon path (not needed anymore? we use cmake) - # - #mkdir -p ${RPM_BUILD_ROOT}/%{_tde_datadir}/kdelibs - #rm -f admin/*.orig - #cp -a admin ${RPM_BUILD_ROOT}/%{_tde_datadir}/kdelibs/ - # This is not needed on SUSE Linux! - Marcus Meissner - rm $RPM_BUILD_ROOT/%{_tde_bindir}/kgrantpty - # - # our version is in kdebase3 - # - rm -f $RPM_BUILD_ROOT/%{_tde_bindir}/fileshare* - # - # no sources for man pages - # - rm -f $RPM_BUILD_ROOT/%{_tde_htmldir}/en/kdelibs/man-* - # - # install BitTorrent icons - # - tar xfvz %SOURCE11 - for i in 16x16 22x22 32x32 48x48 64x64 128x128 ; do - install -m 0644 bt/$i/mimetypes/bt.png \ - $RPM_BUILD_ROOT/%{_tde_icondir}/crystalsvg/$i/mimetypes/torrent.png - done - cp CATALOG.%{name} catalog.xml ${RPM_BUILD_ROOT}/%{_tde_datadir}/ksgmltools2/customization/ - mkdir -p ${RPM_BUILD_ROOT}%{_sysconfdir}/xml - cp %{FOR_ROOT_CAT} ${RPM_BUILD_ROOT}%{_sysconfdir}/xml -# rm -f $RPM_BUILD_ROOT/%{_tde_libdir}/libkdefakes.la -# rm -f $RPM_BUILD_ROOT/%{_tde_libdir}/libkjava.la -rm -f $RPM_BUILD_ROOT/%{_tde_icondir}/hicolor/index.theme - # .desktop files in kdeaccessibility3 require the kttsd icon - for i in {16x16,22x22,32x32,48x48,64x64,128x128,scalable}; do mv $RPM_BUILD_ROOT/%{_tde_icondir}/crystalsvg/$i/apps/kttsd.* $RPM_BUILD_ROOT/%{_tde_icondir}/hicolor/$i/apps/;done - install -m 0644 %SOURCE14 $RPM_BUILD_ROOT/%{_tde_mimedir}/application/ - install -m 0644 %SOURCE15 $RPM_BUILD_ROOT/%{_tde_mimedir}/application/ - install -m 0644 %SOURCE16 $RPM_BUILD_ROOT/%{_tde_mimedir}/application/ - # fix bnc#396153 - for i in 16x16 22x22 32x32 48x48 64x64 128x128; do - ln -s %{_tde_icondir}/crystalsvg/$i/filesystems/network.png $RPM_BUILD_ROOT/%{_tde_icondir}/crystalsvg/$i/filesystems/preferences-system-network.png - ln -s %{_tde_icondir}/crystalsvg/$i/filesystems/desktop.png $RPM_BUILD_ROOT/%{_tde_icondir}/crystalsvg/$i/filesystems/preferences-desktop.png - done - chmod a-x $RPM_BUILD_ROOT/%{_tde_icondir}/crystalsvg/16x16/filesystems/file_broken.png - %fdupes -s $RPM_BUILD_ROOT - mkdir -p $RPM_BUILD_ROOT/etc/%{_tde_applicationsdir} - touch $RPM_BUILD_ROOT/etc/%{_tde_applicationsdir}/mimeinfo.cache - mkdir -p $RPM_BUILD_ROOT/%{_tde_applicationsdir} - touch $RPM_BUILD_ROOT/%{_tde_applicationsdir}/mimeinfo.cache -# Create /etc/ld.so.conf.d/kdelibs3.conf -mkdir -p $RPM_BUILD_ROOT/etc/ld.so.conf.d -cat > $RPM_BUILD_ROOT/etc/ld.so.conf.d/tdelibs.conf </dev/null 2>&1 - fi - if [ -x /usr/bin/edit-xml-catalog ]; then - edit-xml-catalog --group --catalog /etc/xml/suse-catalog.xml \ - --add /etc/xml/%{FOR_ROOT_CAT} - fi - -%postun doc - if [ "$1" = "0" -a -x %{regcat} ]; then - %{regcat} -r %{_tde_datadir}/ksgmltools2/customization/CATALOG.%{name} >/dev/null 2>&1 - fi - # remove entries only on removal of file - if [ ! -f %{xml_sysconf_dir}/%{FOR_ROOT_CAT} -a -x /usr/bin/edit-xml-catalog ] ; then - edit-xml-catalog --group --catalog /etc/xml/suse-catalog.xml \ - --del %{name}-%{version} - fi - exit 0 - -%clean - rm -rf ${RPM_BUILD_ROOT} - -%files default-style -%defattr(-,root,root) -%doc AUTHORS COPYING COPYING.BSD COPYING.LIB NAMING README -%{_tde_libdir}/libkdefx.so.* -%{_tde_libdir}/kde3/plugins/styles/plastik.* - -%files -%defattr(-,root,root) -%doc AUTHORS COPYING COPYING.BSD COPYING.LIB NAMING README -/etc/ld.so.conf.d/tdelibs.conf -%dir /etc/%{_tde_prefix} -%dir %{_tde_prefix} -%dir %{_tde_bindir} -%dir %{_tde_includedir} -%dir %{_tde_sharedir} -%dir %{_tde_configkcfgdir} -%_mandir/man*/* -%{_tde_bindir}/checkXML -%{_tde_bindir}/dcop -%{_tde_bindir}/dcopclient -%{_tde_bindir}/dcopfind -%{_tde_bindir}/dcopobject -%{_tde_bindir}/dcopref -%{_tde_bindir}/dcops* -%{_tde_bindir}/dcopquit -%{_tde_bindir}/imagetops -%{_tde_bindir}/ka* -%{_tde_bindir}/kbuildsycoca -%{_tde_bindir}/kco* -%{_tde_bindir}/kcmshell -%{_tde_bindir}/kded -%{_tde_bindir}/kdeinit* -%{_tde_bindir}/start_kdeinit -%{_tde_bindir}/start_kdeinit_wrapper -%{_tde_bindir}/kde-config -%{_tde_bindir}/kde-menu -%{_tde_bindir}/kdesu_stub -%{_tde_bindir}/kdontchangethehostname -%{_tde_bindir}/kfile -%{_tde_bindir}/ki* -%{_tde_bindir}/kfmexec -%{_tde_bindir}/klauncher -%{_tde_bindir}/kmailservice -%{_tde_bindir}/ktradertest -%{_tde_bindir}/knotify -%{_tde_bindir}/kstartupconfig -%{_tde_bindir}/kdostartupconfig -%verify(not mode) %{_tde_bindir}/kpac_dhcp_helper -%{_tde_bindir}/ksendbugmail -%{_tde_bindir}/kshell -%{_tde_bindir}/ktelnetservice -%{_tde_bindir}/kwrapper -%{_tde_bindir}/lnusertemp -%{_tde_bindir}/make_driver_db_lpr -%{_tde_bindir}/khotnewstuff -%{_tde_bindir}/makekdewidgets -%dir %{_tde_libdir} -%dir %{_tde_libdir}/kde3 -%{_tde_libdir}/kde3/dcopserver.* -%{_tde_libdir}/kde3/kaddprinterwizard.* -%{_tde_libdir}/kde3/kbuildsycoca.* -%{_tde_libdir}/kde3/kcmshell.* -%{_tde_libdir}/kde3/kcm_kresources.* -%{_tde_libdir}/kde3/kconf_update.* -%{_tde_libdir}/kde3/kcookiejar.* -%{_tde_libdir}/kde3/kded.* -%{_tde_libdir}/kde3/kded_proxyscout.* -%{_tde_libdir}/kde3/kfileaudiopreview.* -%{_tde_libdir}/kde3/klauncher.* -%{_tde_libdir}/kde3/knotify.* -%{_tde_libdir}/kde3/kabc* -%{_tde_libdir}/kde3/kbzip2filter.* -%{_tde_libdir}/kde3/kded_k* -%{_tde_libdir}/kde3/kdeprint_ext.* -%{_tde_libdir}/kde3/kdeprint_lp* -%{_tde_libdir}/kde3/kdeprint_rlpr.* -%{_tde_libdir}/kde3/kdeprint_tool_escputil.* -%{_tde_libdir}/kde3/kgzipfilter.* -%{_tde_libdir}/kde3/khtmlimagepart.* -%{_tde_libdir}/kde3/ki* -%{_tde_libdir}/kde3/kjavaappletviewer.* -%{_tde_libdir}/kde3/ktexteditor_* -%{_tde_libdir}/kde3/libk* -%{_tde_libdir}/kde3/kspell_* -%{_tde_libdir}/kde3/kstyle_plastik_config.* -%{_tde_libdir}/kde3/kstyle_highcontrast_config.* -%{_tde_libdir}/kde3/libshellscript.* -%exclude %{_tde_libdir}/kde3/plugins/styles/plastik.* -%{_tde_libdir}/kde3/plugins -%{_tde_libdir}/libDCOP.so.* -%exclude %{_tde_libdir}/libkdefx.so.* -%{_tde_libdir}/libk*.so.* -%{_tde_libdir}/libvcard.so.* -%{_tde_libdir}/libkdeinit*.so -%{_tde_libdir}/libnetworkstatus.so.* -%{_tde_libdir}/libconnectionmanager.so.* -%{_tde_libdir}/kde3/kded_networkstatus.* -%{_tde_appsdir} -%dir %{_tde_datadir} -%{_tde_datadir}/LICENSES -%{_tde_datadir}/ka* -%{_tde_datadir}/kc* -%dir %{_tde_datadir}/kdeprint -%{_tde_datadir}/kdeprint/apsdriver* -%{_tde_datadir}/kdeprint/filters -%{_tde_datadir}/kdeprint/icons -%{_tde_datadir}/kdeprint/lprngtooldriver1 -%{_tde_datadir}/kdeprint/pics -%dir %{_tde_datadir}/kdeprint/plugins -%{_tde_datadir}/kdeprint/plugins/ext.print -%{_tde_datadir}/kdeprint/plugins/lp*.print -%{_tde_datadir}/kdeprint/plugins/rlpr.print -%{_tde_datadir}/kdeprint/s* -%{_tde_datadir}/kdeprint/t* -%{_tde_datadir}/kdeui -%{_tde_datadir}/kdewidgets -%{_tde_datadir}/khtml -%{_tde_datadir}/kio_uiserver -%{_tde_datadir}/kjava -%{_tde_datadir}/knotify -%{_tde_datadir}/kssl -%{_tde_datadir}/kstyle -%{_tde_datadir}/ktexteditor_* -%{_tde_datadir}/proxyscout -%{_tde_datadir}/knewstuff -%{_tde_sharedir}/autostart -%{_tde_configdir} -%{_tde_sharedir}/emoticons -%{_tde_icondir}/icons -%{_tde_locale}/locale -%{_tde_mimedir}/mimelnk -%{_tde_sharedir}/service* -%config /etc/tderc -%{_tde_applicationsdir} -%{_tde_bindir}/cupsd* -%{_tde_bindir}/make_driver_db_cups -%{_tde_libdir}/kde3/kdeprint_cups.* -%{_tde_libdir}/kde3/cupsdconf.* -%{_tde_datadir}/kdeprint/cups* -%{_tde_datadir}/kdeprint/kde_logo.png -%{_tde_datadir}/kdeprint/plugins/cups.print -%{_tde_datadir}/kdeprint/preview* -%ifarch x86_64 ppc64 s390x mips64 sparc64 -%dir %{_tde_prefix}/lib -%dir %{_tde_prefix}/lib/kde3 -%{_tde_prefix}/lib/kde3/plugins-lib64 -%endif -/etc/xdg/menus -%dir /etc/%{_tde_prefix} -%dir /etc/%{_tde_sharedir} -%dir /etc/%{_tde_applicationsdir} -%ghost /etc/%{_tde_applicationsdir}/mimeinfo.cache -%dir %{_tde_prefix} -%dir %{_tde_sharedir} -%dir %{_tde_applicationsdir} -%ghost %{_tde_applicationsdir}/mimeinfo.cache - - -%files arts -%defattr(-,root,root) -%{_tde_bindir}/artsmessage -%{_tde_libdir}/libartskde.so.* - -%files doc -%defattr(-,root,root) -%doc %{_tde_docdir} -%{_tde_bindir}/meinproc -%{_tde_datadir}/ksgmltools2 -%config %{_sysconfdir}/xml/%{FOR_ROOT_CAT} - -%files devel -%defattr(-,root,root) -%dir %{_tde_datadir}/kdelibs -%{_tde_bindir}/dcopidl* -%{_tde_bindir}/kmimelist -%{_tde_bindir}/preparetips -%{_tde_bindir}/ksvgtopng -%{_tde_bindir}/kunittestmodrunner -#%{_tde_bindir}/MISC -%{_tde_includedir}/* -%{_tde_datadir}/dcopidlng -%{_tde_datadir}/kdelibs/admin -%{_tde_libdir}/libartskde.la -%{_tde_libdir}/libkunittest.la -%{_tde_libdir}/libkunittest.so -%{_tde_libdir}/libartskde.so -%{_tde_libdir}/libDCOP.so -%{_tde_libdir}/libvcard.so -%{_tde_libdir}/libvcard.la -%{_tde_libdir}/libDCOP.la -%{_tde_libdir}/lib*.a -%{_tde_libdir}/libkabc_dir.la -%{_tde_libdir}/libkabc_dir.so -%{_tde_libdir}/libkabc_file.la -%{_tde_libdir}/libkabc_file.so -%{_tde_libdir}/libkabc.la -%{_tde_libdir}/libkabc_ldapkio.la -%{_tde_libdir}/libkabc_ldapkio.so -%{_tde_libdir}/libkabc.so -%{_tde_libdir}/libkatepartinterfaces.la -%{_tde_libdir}/libkatepartinterfaces.so -%{_tde_libdir}/libkdecore.la -%{_tde_libdir}/libkdecore.so -%{_tde_libdir}/libkdefakes.la -%{_tde_libdir}/libkdefakes.so -%{_tde_libdir}/libkdefx.la -%{_tde_libdir}/libkdefx.so -%{_tde_libdir}/libkdemm.la -%{_tde_libdir}/libkdemm.so -%{_tde_libdir}/libkdeprint.la -%{_tde_libdir}/libkdeprint_management.la -%{_tde_libdir}/libkdeprint_management.so -%{_tde_libdir}/libkdeprint.so -%{_tde_libdir}/libkdesasl.la -%{_tde_libdir}/libkdesasl.so -%{_tde_libdir}/libkdesu.la -%{_tde_libdir}/libkdesu.so -%{_tde_libdir}/libkdeui.la -%{_tde_libdir}/libkdeui.so -%{_tde_libdir}/libkdnssd.la -%{_tde_libdir}/libkdnssd.so -%{_tde_libdir}/libkhtml.la -%{_tde_libdir}/libkhtml.so -%{_tde_libdir}/libkimproxy.la -%{_tde_libdir}/libkimproxy.so -%{_tde_libdir}/libkio.la -%{_tde_libdir}/libkio.so -%{_tde_libdir}/libkjava.la -%{_tde_libdir}/libkjava.so -%{_tde_libdir}/libkjs.la -%{_tde_libdir}/libkjs.so -%{_tde_libdir}/libkmdi2.la -%{_tde_libdir}/libkmdi2.so -%{_tde_libdir}/libkmdi.la -%{_tde_libdir}/libkmdi.so -%{_tde_libdir}/libkmediaplayer.la -%{_tde_libdir}/libkmediaplayer.so -%{_tde_libdir}/libkmid.la -%{_tde_libdir}/libkmid.so -%{_tde_libdir}/libknewstuff.la -%{_tde_libdir}/libknewstuff.so -%{_tde_libdir}/libkntlm.la -%{_tde_libdir}/libkntlm.so -%{_tde_libdir}/libkparts.la -%{_tde_libdir}/libkparts.so -%{_tde_libdir}/libkresources.la -%{_tde_libdir}/libkresources.so -%{_tde_libdir}/libkscreensaver.la -%{_tde_libdir}/libkscreensaver.so -%{_tde_libdir}/libkscript.la -%{_tde_libdir}/libkscript.so -%{_tde_libdir}/libkspell2.la -%{_tde_libdir}/libkspell2.so -%{_tde_libdir}/libkspell.la -%{_tde_libdir}/libkspell.so -%{_tde_libdir}/libktexteditor.la -%{_tde_libdir}/libktexteditor.so -%{_tde_libdir}/libkutils.la -%{_tde_libdir}/libkutils.so -%{_tde_libdir}/libkwalletbackend.la -%{_tde_libdir}/libkwalletbackend.so -%{_tde_libdir}/libkwalletclient.la -%{_tde_libdir}/libkwalletclient.so -%{_tde_libdir}/libnetworkstatus.la -%{_tde_libdir}/libnetworkstatus.so -%{_tde_libdir}/libconnectionmanager.la -%{_tde_libdir}/libconnectionmanager.so - -%changelog diff --git a/opensuse/tdelibs/tderc b/opensuse/tdelibs/tderc deleted file mode 100644 index c98cc4144..000000000 --- a/opensuse/tdelibs/tderc +++ /dev/null @@ -1,11 +0,0 @@ -[Directories] -prefixes=/etc/opt/tde/ -userProfileMapFile=/etc/kde-user-profile -profileDirsPrefix=/var/lib/kde-profiles/ -dir_wallpaper=/usr/share/wallpapers - -[Directories-default] -ProfileDescription=Default Profile -ProfileInstallUser=root -prefixes=/var/lib/kde-profiles/default/ - diff --git a/opensuse/tdelibs/textcompletion-editor.diff b/opensuse/tdelibs/textcompletion-editor.diff deleted file mode 100644 index d14776149..000000000 --- a/opensuse/tdelibs/textcompletion-editor.diff +++ /dev/null @@ -1,344 +0,0 @@ -Index: khtml/khtmlview.h -=================================================================== ---- khtml/khtmlview.h.orig -+++ khtml/khtmlview.h -@@ -314,6 +314,7 @@ private: - QStringList formCompletionItems(const QString &name) const; - void clearCompletionHistory(const QString& name); - void addFormCompletionItem(const QString &name, const QString &value); -+ void removeFormCompletionItem(const QString &name, const QString &value); - - void addNonPasswordStorableSite( const QString& host ); - bool nonPasswordStorableSite( const QString& host ) const; -Index: khtml/khtmlview.cpp -=================================================================== ---- khtml/khtmlview.cpp.orig -+++ khtml/khtmlview.cpp -@@ -3088,6 +3088,16 @@ void KHTMLView::addFormCompletionItem(co - d->formCompletions->writeEntry(name, items); - } - -+void KHTMLView::removeFormCompletionItem(const QString &name, const QString &value) -+{ -+ if (!m_part->settings()->isFormCompletionEnabled()) -+ return; -+ -+ QStringList items = formCompletionItems(name); -+ if (items.remove(value)) -+ d->formCompletions->writeEntry(name, items); -+} -+ - void KHTMLView::addNonPasswordStorableSite(const QString& host) - { - if (!d->formCompletions) { -Index: khtml/rendering/render_form.h -=================================================================== ---- khtml/rendering/render_form.h.orig -+++ khtml/rendering/render_form.h -@@ -272,10 +272,12 @@ private slots: - void spellCheckerMisspelling( const QString &text, const QStringList &, unsigned int pos); - void spellCheckerCorrected( const QString &, const QString &, unsigned int ); - void spellCheckerFinished(); -+ void slotRemoveFromHistory( const QString & ); - - private: - enum LineEditMenuID { -- ClearHistory -+ ClearHistory, -+ EditHistory - }; - DOM::HTMLInputElementImpl* m_input; - KHTMLView* m_view; -Index: khtml/rendering/render_form.cpp -=================================================================== ---- khtml/rendering/render_form.cpp.orig -+++ khtml/rendering/render_form.cpp -@@ -385,7 +385,9 @@ QPopupMenu *LineEditWidget::createPopupM - - if (m_input->autoComplete()) { - popup->insertSeparator(); -- int id = popup->insertItem( SmallIconSet("history_clear"), i18n("Clear &History"), ClearHistory ); -+ int id = popup->insertItem( SmallIconSet("edit"), i18n("&Edit History..."), EditHistory ); -+ popup->setItemEnabled( id, (compObj() && !compObj()->isEmpty()) ); -+ id = popup->insertItem( SmallIconSet("history_clear"), i18n("Clear &History"), ClearHistory ); - popup->setItemEnabled( id, (compObj() && !compObj()->isEmpty()) ); - } - -@@ -409,11 +411,25 @@ void LineEditWidget::extendedMenuActivat - m_view->clearCompletionHistory(m_input->name().string()); - if (compObj()) - compObj()->clear(); -+ case EditHistory: -+ { -+ KHistoryComboEditor dlg( compObj() ? compObj()->items() : QStringList(), this ); -+ connect( &dlg, SIGNAL( removeFromHistory(const QString&) ), SLOT( slotRemoveFromHistory(const QString&)) ); -+ dlg.exec(); -+ } - default: - break; - } - } - -+void LineEditWidget::slotRemoveFromHistory(const QString &entry) -+{ -+ m_view->removeFormCompletionItem(m_input->name().string(), entry); -+ if (compObj()) -+ compObj()->removeItem(entry); -+} -+ -+ - bool LineEditWidget::event( QEvent *e ) - { - if (KLineEdit::event(e)) -Index: kdeui/kcombobox.h -=================================================================== ---- kdeui/kcombobox.h.orig -+++ kdeui/kcombobox.h -@@ -24,8 +24,15 @@ - - #include - #include -+#include -+#include -+#include -+#include -+#include - - #include -+#include -+#include - - class QListBoxItem; - class QPopupMenu; -@@ -669,6 +676,12 @@ public: - */ - void reset() { slotReset(); } - -+ /** -+ * When enabling it you have to connect to "removed" signal and save changes -+ */ -+ void setHistoryEditorEnabled( bool enable ); -+ bool isHistoryEditorEnabled() const; -+ - public slots: - /** - * Adds an item to the end of the history list and to the completion list. -@@ -702,6 +715,8 @@ signals: - */ - void cleared(); - -+ void removed( const QString& item ); -+ - protected: - /** - * Handling key-events, the shortcuts to rotate the items. -@@ -741,10 +756,17 @@ private slots: - void slotClear(); - - /** -+ * Called from the popupmenu, -+ */ -+ void slotEdit(); -+ -+ /** - * Appends our own context menu entry. - */ - void addContextMenuItems( QPopupMenu* ); - -+ void slotRemoveFromHistory( const QString & ); -+ - private: - void init( bool useCompletion ); - void rotateUp(); -@@ -774,6 +796,30 @@ private: - KHistoryComboPrivate* const d; - }; - -+class KDEUI_EXPORT KHistoryComboEditor : public KDialogBase -+{ -+ Q_OBJECT -+ -+public: -+ KHistoryComboEditor( const QStringList& entries, QWidget *parent = 0L ); -+ ~KHistoryComboEditor(); -+ -+signals: -+ void removeFromHistory( const QString& ); -+ -+protected slots: -+ virtual void slotUser1(); // User1 is "Delete Entry" button -+ void slotSelectionChanged( QListViewItem * item ); -+ -+protected: -+ virtual void virtual_hook( int id, void* data ); -+ -+private: -+ KListView *m_pListView; -+ -+ class KHistoryComboEditorPrivate; -+ KHistoryComboEditorPrivate* const d; -+}; - - #endif - -Index: kdeui/kcombobox.cpp -=================================================================== ---- kdeui/kcombobox.cpp.orig -+++ kdeui/kcombobox.cpp -@@ -29,6 +29,7 @@ - #include - #include - #include -+#include - #include - #include - #include -@@ -343,10 +344,22 @@ void KComboBox::lineEditDeleted() - // ********************************************************************* - // ********************************************************************* - -+class KHistoryCombo::KHistoryComboPrivate -+{ -+public: -+ KHistoryComboPrivate() : bHistoryEditorEnabled(false) -+ { -+ } -+ ~KHistoryComboPrivate() -+ { -+ } -+ -+ bool bHistoryEditorEnabled; -+}; - - // we are always read-write - KHistoryCombo::KHistoryCombo( QWidget *parent, const char *name ) -- : KComboBox( true, parent, name ), d(0) -+ : KComboBox( true, parent, name ), d(new KHistoryComboPrivate) - { - init( true ); // using completion - } -@@ -354,7 +367,7 @@ KHistoryCombo::KHistoryCombo( QWidget *p - // we are always read-write - KHistoryCombo::KHistoryCombo( bool useCompletion, - QWidget *parent, const char *name ) -- : KComboBox( true, parent, name ), d(0) -+ : KComboBox( true, parent, name ), d(new KHistoryComboPrivate) - { - init( useCompletion ); - } -@@ -441,6 +454,10 @@ void KHistoryCombo::addContextMenuItems( - if ( menu ) - { - menu->insertSeparator(); -+ if (d->bHistoryEditorEnabled) { -+ int idedit = menu->insertItem( SmallIconSet("edit"), i18n("&Edit History..."), this, SLOT( slotEdit()) ); -+ menu->setItemEnabled(idedit, count()); -+ } - int id = menu->insertItem( SmallIconSet("history_clear"), i18n("Clear &History"), this, SLOT( slotClear())); - if (!count()) - menu->setItemEnabled(id, false); -@@ -677,10 +694,104 @@ void KHistoryCombo::slotClear() - emit cleared(); - } - -+void KHistoryCombo::slotEdit() -+{ -+ KHistoryComboEditor dlg( historyItems(), this ); -+ connect( &dlg, SIGNAL( removeFromHistory(const QString&) ), SLOT( slotRemoveFromHistory(const QString&)) ); -+ dlg.exec(); -+} -+ -+void KHistoryCombo::slotRemoveFromHistory(const QString &entry) -+{ -+ removeFromHistory(entry); -+ emit removed(entry); -+} -+ -+void KHistoryCombo::setHistoryEditorEnabled( bool enable ) -+{ -+ d->bHistoryEditorEnabled = enable; -+} -+ -+bool KHistoryCombo::isHistoryEditorEnabled() const -+{ -+ return d->bHistoryEditorEnabled; -+} -+ - void KComboBox::virtual_hook( int id, void* data ) - { KCompletionBase::virtual_hook( id, data ); } - - void KHistoryCombo::virtual_hook( int id, void* data ) - { KComboBox::virtual_hook( id, data ); } - -+void KHistoryComboEditor::virtual_hook( int id, void* data ) -+{ KDialogBase::virtual_hook( id, data ); } -+ -+KHistoryComboEditor::KHistoryComboEditor( const QStringList& entries, QWidget *parent ) -+: KDialogBase( parent, "khistorycomboeditor", true, i18n( "History Editor" ), -+ KDialogBase::Close | KDialogBase::User1, KDialogBase::User1, true, -+ KGuiItem( i18n( "&Delete Entry" ), "editdelete") ), d(0) -+{ -+ QVBox* box = new QVBox( this ); -+ box->setSpacing( KDialog::spacingHint() ); -+ setMainWidget( box ); -+ -+ new QLabel( i18n( "This dialog allows you to delete unwanted history items." ), box ); -+ -+ // Add searchline -+ QHBox* searchbox = new QHBox( box ); -+ searchbox->setSpacing( KDialog::spacingHint() ); -+ -+ QToolButton *clearSearch = new QToolButton(searchbox); -+ clearSearch->setTextLabel(i18n("Clear Search"), true); -+ clearSearch->setIconSet(SmallIconSet(QApplication::reverseLayout() ? "clear_left" : "locationbar_erase")); -+ QLabel* slbl = new QLabel(i18n("&Search:"), searchbox); -+ KListViewSearchLine* listViewSearch = new KListViewSearchLine(searchbox); -+ slbl->setBuddy(listViewSearch); -+ connect(clearSearch, SIGNAL(pressed()), listViewSearch, SLOT(clear())); -+ -+ // Add ListView -+ m_pListView = new KListView( box ); -+ listViewSearch->setListView(m_pListView); -+ m_pListView->setAllColumnsShowFocus(true); -+ m_pListView->header()->hide(); -+ m_pListView->addColumn(""); -+ m_pListView->setRenameable( 0 ); -+ -+ box->setStretchFactor( m_pListView, 1 ); -+ -+ QStringList newlist = entries; -+ for ( QStringList::Iterator it = newlist.begin(); it != newlist.end(); ++it ) { -+ new QListViewItem( m_pListView, *it ); -+ } -+ -+ m_pListView->setMinimumSize( m_pListView->sizeHint() ); -+ -+ connect( m_pListView, SIGNAL( selectionChanged( QListViewItem * ) ), -+ this, SLOT( slotSelectionChanged( QListViewItem * ) ) ); -+ -+ enableButton( KDialogBase::User1, false ); -+ -+ resize( sizeHint() ); -+} -+ -+KHistoryComboEditor::~KHistoryComboEditor() -+{ -+} -+ -+void KHistoryComboEditor::slotUser1() // Delete button -+{ -+ QListViewItem *item = m_pListView->selectedItem(); -+ -+ if ( item ) { -+ emit removeFromHistory( item->text(0) ); -+ m_pListView->takeItem( item ); -+ enableButton( KDialogBase::User1, false ); -+ } -+} -+ -+void KHistoryComboEditor::slotSelectionChanged( QListViewItem * item ) -+{ -+ enableButton( KDialogBase::User1, item ); -+} -+ - #include "kcombobox.moc" diff --git a/opensuse/tdelibs/use-mediamanager.diff b/opensuse/tdelibs/use-mediamanager.diff deleted file mode 100644 index 007c40bd0..000000000 --- a/opensuse/tdelibs/use-mediamanager.diff +++ /dev/null @@ -1,44 +0,0 @@ -Index: kioslave/file/file.cc -=================================================================== ---- kioslave/file/file.cc.orig -+++ kioslave/file/file.cc -@@ -69,6 +69,7 @@ - #include - #include - -+#include - #include - #include - #include -@@ -1609,6 +1610,31 @@ void FileProtocol::unmount( const QStrin - #endif /* HAVE_VOLMGT */ - - err = testLogFile( tmp ); -+ -+ if (err.contains("fstab") || err.contains("root")) { -+ QString olderr; -+ err = QString::null; -+ -+ DCOPRef d("kded", "mediamanager"); -+ d.setDCOPClient ( dcopClient() ); -+ DCOPReply reply = d.call("properties", _point); -+ QString udi; -+ -+ if ( reply.isValid() ) { -+ QStringList list = reply; -+ if (list.size()) -+ udi = list[0]; -+ } -+ -+ if (!udi.isEmpty()) -+ reply = d.call("unmount", udi); -+ -+ if (udi.isEmpty() || !reply.isValid()) -+ err = olderr; -+ else if (reply.isValid()) -+ reply.get(err); -+ } -+ - if ( err.isEmpty() ) - finished(); - else diff --git a/opensuse/tdelibs/use-xauthlocalhostname.diff b/opensuse/tdelibs/use-xauthlocalhostname.diff deleted file mode 100644 index 42ef39b9c..000000000 --- a/opensuse/tdelibs/use-xauthlocalhostname.diff +++ /dev/null @@ -1,240 +0,0 @@ -Index: kinit/wrapper.c -=================================================================== ---- kinit/wrapper.c.orig -+++ kinit/wrapper.c -@@ -164,7 +164,9 @@ static int openSocket() - sock_file[strlen(sock_file)-1] = 0; - - strncat(sock_file, "/socket-", MAX_SOCK_FILE - strlen(sock_file)); -- if (gethostname(sock_file+strlen(sock_file), MAX_SOCK_FILE - strlen(sock_file) - 1) != 0) -+ if( getenv("XAUTHLOCALHOSTNAME")) -+ strncat(sock_file, getenv("XAUTHLOCALHOSTNAME"), MAX_SOCK_FILE - strlen(sock_file) - 1); -+ else if (gethostname(sock_file+strlen(sock_file), MAX_SOCK_FILE - strlen(sock_file) - 1) != 0) - { - perror("Warning: Could not determine hostname: "); - return -1; -Index: kinit/lnusertemp.c -=================================================================== ---- kinit/lnusertemp.c.orig -+++ kinit/lnusertemp.c -@@ -39,7 +39,7 @@ - - int check_tmp_dir(const char *tmp_dir); - int create_link(const char *file, const char *tmp_dir); --int build_link(const char *tmp_prefix, const char *kde_prefix); -+int build_link(const char *tmp_prefix, const char *kde_prefix, int kdehostname); - - int check_tmp_dir(const char *tmp_dir) - { -@@ -89,7 +89,7 @@ int create_link(const char *file, const - } - - --int build_link(const char *tmp_prefix, const char *kde_prefix) -+int build_link(const char *tmp_prefix, const char *kde_prefix, int kdehostname) - { - struct passwd *pw_ent; - char kde_tmp_dir[PATH_MAX+1]; -@@ -157,10 +157,21 @@ int build_link(const char *tmp_prefix, c - } - - strncat(kde_tmp_dir, kde_prefix, PATH_MAX - strlen(kde_tmp_dir)); -- if (gethostname(kde_tmp_dir+strlen(kde_tmp_dir), PATH_MAX - strlen(kde_tmp_dir) - 1) != 0) -+ -+ if( kdehostname ) -+ { -+ if( getenv("XAUTHLOCALHOSTNAME")) -+ strncat(kde_tmp_dir+strlen(kde_tmp_dir), getenv("XAUTHLOCALHOSTNAME"), PATH_MAX - strlen(kde_tmp_dir) - 1); -+ else -+ return 0; -+ } -+ else - { -- perror("Aborting. Could not determine hostname: "); -- exit(255); -+ if (gethostname(kde_tmp_dir+strlen(kde_tmp_dir), PATH_MAX - strlen(kde_tmp_dir) - 1) != 0) -+ { -+ perror("Could not determine hostname: "); -+ return 1; -+ } - } - kde_tmp_dir[sizeof(kde_tmp_dir)-1] = '\0'; - -@@ -266,7 +277,9 @@ int main(int argc, char **argv) - kde_prefix = "/cache-"; - } - -- res = build_link(tmp_prefix, kde_prefix); -+ res = build_link(tmp_prefix, kde_prefix, 1); -+ if( build_link(tmp_prefix, kde_prefix, 0)) -+ res = 1; - - free(tmp_prefix); - -Index: kdecore/kstandarddirs.cpp -=================================================================== ---- kdecore/kstandarddirs.cpp.orig -+++ kdecore/kstandarddirs.cpp -@@ -719,7 +719,10 @@ void KStandardDirs::createSpecialResourc - { - char hostname[256]; - hostname[0] = 0; -- gethostname(hostname, 255); -+ if( getenv("XAUTHLOCALHOSTNAME")) -+ strlcpy(hostname, getenv("XAUTHLOCALHOSTNAME"), 255 ); -+ else -+ gethostname(hostname, 255); - QString dir = QString("%1%2-%3").arg(localkdedir()).arg(type).arg(hostname); - char link[1024]; - link[1023] = 0; -Index: kdecore/kcrash.cpp -=================================================================== ---- kdecore/kcrash.cpp.orig -+++ kdecore/kcrash.cpp -@@ -466,7 +466,9 @@ static int openSocket() - sock_file[strlen(sock_file)-1] = 0; - - strncat(sock_file, "/socket-", MAX_SOCK_FILE - strlen(sock_file)); -- if (gethostname(sock_file+strlen(sock_file), MAX_SOCK_FILE - strlen(sock_file) - 1) != 0) -+ if( getenv("XAUTHLOCALHOSTNAME")) -+ strncat(sock_file, getenv("XAUTHLOCALHOSTNAME"), MAX_SOCK_FILE - strlen(sock_file) - 1); -+ else if (gethostname(sock_file+strlen(sock_file), MAX_SOCK_FILE - strlen(sock_file) - 1) != 0) - { - perror("Warning: Could not determine hostname: "); - return -1; -Index: dcop/dcopserver_shutdown.c -=================================================================== ---- dcop/dcopserver_shutdown.c.orig -+++ dcop/dcopserver_shutdown.c -@@ -95,7 +95,9 @@ static void getDCOPFile(char *dcop_file, - strncat(dcop_file, "/.DCOPserver_", n); - n -= strlen("/.DCOPserver_"); - -- if (gethostname(dcop_file+strlen(dcop_file), n) != 0) -+ if (getenv("XAUTHLOCALHOSTNAME")) -+ strncat(dcop_file+strlen(dcop_file), getenv("XAUTHLOCALHOSTNAME"), n); -+ else if (gethostname(dcop_file+strlen(dcop_file), n) != 0) - { - perror("Error. Could not determine hostname: "); - dcop_file[0] = '\0'; -Index: dcop/dcopc.c -=================================================================== ---- dcop/dcopc.c.orig -+++ dcop/dcopc.c -@@ -684,7 +684,9 @@ dcop_connect() - } - - hostName[0] = '\0'; -- if (gethostname(hostName, sizeof(hostName))) -+ if (getenv("XAUTHLOCALHOSTNAME")) -+ strlcpy(hostName, getenv("XAUTHLOCALHOSTNAME"),sizeof(hostName)-1); -+ else if (gethostname(hostName, sizeof(hostName))) - strcpy(hostName, "localhost"); - else - hostName[sizeof(hostName)-1] = '\0'; -Index: dcop/dcopclient.cpp -=================================================================== ---- dcop/dcopclient.cpp.orig -+++ dcop/dcopclient.cpp -@@ -277,7 +277,9 @@ static QCString dcopServerFile(const QCS - { - char hostName[256]; - hostName[0] = '\0'; -- if (gethostname(hostName, sizeof(hostName))) -+ if (getenv("XAUTHLOCALHOSTNAME")) -+ fName += getenv("XAUTHLOCALHOSTNAME"); -+ else if (gethostname(hostName, sizeof(hostName))) - { - fName += "localhost"; - } -Index: dcop/KDE-ICE/Xtranssock.c -=================================================================== ---- dcop/KDE-ICE/Xtranssock.c.orig -+++ dcop/KDE-ICE/Xtranssock.c -@@ -1444,6 +1444,7 @@ UnixHostReallyLocal (char *host) - - { - char hostnamebuf[256]; -+ char* xauthlocalname = getenv("XAUTHLOCALHOSTNAME"); - - TRANS(GetHostname) (hostnamebuf, sizeof (hostnamebuf)); - -@@ -1451,6 +1452,10 @@ UnixHostReallyLocal (char *host) - { - return (1); - } -+ else if(xauthlocalname && strcmp (xauthlocalname, host) == 0) -+ { -+ return (1); -+ } - else - { - /* -Index: kded/khostname.cpp -=================================================================== ---- kded/khostname.cpp.orig -+++ kded/khostname.cpp -@@ -111,7 +111,8 @@ static QCStringList split(const QCString - - void KHostName::changeX() - { -- QString cmd = "xauth list"; -+ const char* xauthlocalhostname = getenv("XAUTHLOCALHOSTNAME"); -+ QString cmd = "xauth -n list"; - FILE *xFile = popen(QFile::encodeName(cmd), "r"); - if (!xFile) - { -@@ -123,6 +124,7 @@ void KHostName::changeX() - char buf[1024+1]; - while (!feof(xFile)) - { -+ buf[1024]='\0'; - QCString line = fgets(buf, 1024, xFile); - if (line.length()) - line.truncate(line.length()-1); // Strip LF. -@@ -157,12 +159,17 @@ void KHostName::changeX() - QCString newNetId = newName+netId.mid(i); - QCString oldNetId = netId.left(i); - -- if(oldNetId != oldName) -- continue; -+ if(oldNetId != oldName -+ && (!xauthlocalhostname || strcmp(xauthlocalhostname, oldNetId.data()) != 0)) -+ continue; - -- cmd = "xauth remove "+KProcess::quote(netId); -- system(QFile::encodeName(cmd)); -- cmd = "xauth add "; -+ // don't nuke the xauth when XAUTHLOCALHOSTNAME points to it -+ if (!xauthlocalhostname || oldNetId != xauthlocalhostname) -+ { -+ cmd = "xauth -n remove "+KProcess::quote(netId); -+ system(QFile::encodeName(cmd)); -+ } -+ cmd = "xauth -n add "; - cmd += KProcess::quote(newNetId); - cmd += " "; - cmd += KProcess::quote(authName); -@@ -276,7 +283,10 @@ void KHostName::changeDcop() - } - } - -- // Remove old entries -+ // Remove old entries, but only if XAUTHLOCALHOSTNAME doesn't point -+ // to it -+ char* xauthlocalhostname = getenv("XAUTHLOCALHOSTNAME"); -+ if (!xauthlocalhostname || !oldNetId.contains(xauthlocalhostname)) - { - QString cmd = "iceauth remove "+KProcess::quote("netid="+oldNetId); - system(QFile::encodeName(cmd)); -@@ -368,9 +378,7 @@ int main(int argc, char **argv) - - KHostName hn; - -- if(!getenv("XAUTHLOCALHOSTNAME")) -- hn.changeX(); -- -+ hn.changeX(); - hn.changeDcop(); - hn.changeStdDirs("socket"); - hn.changeStdDirs("tmp"); diff --git a/opensuse/tdelibs/vnd.openxmlformats-officedocument.presentationml.presentation.desktop b/opensuse/tdelibs/vnd.openxmlformats-officedocument.presentationml.presentation.desktop deleted file mode 100644 index 80856ff95..000000000 --- a/opensuse/tdelibs/vnd.openxmlformats-officedocument.presentationml.presentation.desktop +++ /dev/null @@ -1,10 +0,0 @@ -[Desktop Entry] -Encoding=UTF-8 -Type=MimeType -MimeType=application/vnd.openxmlformats-officedocument.presentationml.presentation -Patterns=*.pptx;*.PPTX -Icon=presentation -Comment=Open XML Presentation Document -[Property::X-KDE-NativeExtension] -Type=QString -Value=.pptx diff --git a/opensuse/tdelibs/vnd.openxmlformats-officedocument.spreadsheetml.sheet.desktop b/opensuse/tdelibs/vnd.openxmlformats-officedocument.spreadsheetml.sheet.desktop deleted file mode 100644 index e138deae4..000000000 --- a/opensuse/tdelibs/vnd.openxmlformats-officedocument.spreadsheetml.sheet.desktop +++ /dev/null @@ -1,10 +0,0 @@ -[Desktop Entry] -Encoding=UTF-8 -Type=MimeType -MimeType=application/vnd.openxmlformats-officedocument.spreadsheetml.sheet -Patterns=*.xlsx;*.XLSX -Icon=spreadsheet -Comment=Open XML Spreadsheet Document -[Property::X-KDE-NativeExtension] -Type=QString -Value=.xlsx diff --git a/opensuse/tdelibs/vnd.openxmlformats-officedocument.wordprocessingml.document.desktop b/opensuse/tdelibs/vnd.openxmlformats-officedocument.wordprocessingml.document.desktop deleted file mode 100644 index cf0e677b2..000000000 --- a/opensuse/tdelibs/vnd.openxmlformats-officedocument.wordprocessingml.document.desktop +++ /dev/null @@ -1,10 +0,0 @@ -[Desktop Entry] -Encoding=UTF-8 -Type=MimeType -MimeType=application/vnd.openxmlformats-officedocument.wordprocessingml.document -Patterns=*.docx;*.DOCX -Icon=wordprocessing -Comment=Open XML Word Processing Document -[Property::X-KDE-NativeExtension] -Type=QString -Value=.docx diff --git a/opensuse/tdelibs/x-jar-desktop.diff b/opensuse/tdelibs/x-jar-desktop.diff deleted file mode 100644 index 1e68b1af4..000000000 --- a/opensuse/tdelibs/x-jar-desktop.diff +++ /dev/null @@ -1,10 +0,0 @@ -Index: mimetypes/application/x-jar.desktop -=================================================================== ---- mimetypes/application/x-jar.desktop.orig -+++ mimetypes/application/x-jar.desktop -@@ -87,4 +87,4 @@ Comment[zh_CN]=Java å½’æ¡£ - Comment[zh_HK]=Java 壓縮檔 - Comment[zh_TW]=Java 壓縮檔案 - Comment[zu]=Umqulu we-Java --X-KDE-AutoEmbed=true -+X-KDE-AutoEmbed=false diff --git a/opensuse/tdelibs/x-kde-InitialPreference.diff b/opensuse/tdelibs/x-kde-InitialPreference.diff deleted file mode 100644 index d95df7a2c..000000000 --- a/opensuse/tdelibs/x-kde-InitialPreference.diff +++ /dev/null @@ -1,16 +0,0 @@ -Index: kio/kio/kservice.cpp -=================================================================== ---- kio/kio/kservice.cpp.orig -+++ kio/kio/kservice.cpp -@@ -249,7 +249,10 @@ KService::init( KDesktopFile *config ) - m_bAllowAsDefault = config->readBoolEntry( "AllowDefault", true ); - entryMap.remove("AllowDefault"); - -- m_initialPreference = config->readNumEntry( "InitialPreference", 1 ); -+ m_initialPreference = config->readNumEntry( "X-KDE-InitialPreference", 1 ); -+ entryMap.remove("X-KDE-InitialPreference"); -+ if ( m_initialPreference == 1 ) -+ m_initialPreference = config->readNumEntry( "InitialPreference", 1 ); - entryMap.remove("InitialPreference"); - - // Store all additional entries in the property map. diff --git a/opensuse/tdelibs/xinerama.patch b/opensuse/tdelibs/xinerama.patch deleted file mode 100644 index dec878b40..000000000 --- a/opensuse/tdelibs/xinerama.patch +++ /dev/null @@ -1,543 +0,0 @@ -Index: kio/kio/krun.h -=================================================================== ---- kio/kio/krun.h.orig -+++ kio/kio/krun.h -@@ -111,6 +111,8 @@ public: - */ - KRun( const KURL& url, QWidget* window, mode_t mode = 0, - bool isLocalFile = false, bool showProgressInfo = true ); -+ KRun( const KURL& url, QWidget* window, const QCString& asn, mode_t mode = 0, -+ bool isLocalFile = false, bool showProgressInfo = true ); - - /** - * Destructor. Don't call it yourself, since a KRun object auto-deletes -@@ -210,6 +212,8 @@ public: - * @since 3.5.2 - */ - static pid_t run( const KService& _service, const KURL::List& _urls, QWidget* window, bool tempFiles = false ); -+ static pid_t run( const KService& _service, const KURL::List& _urls, QWidget* window, -+ const QCString& asn, bool tempFiles = false ); - /** - * Open a list of URLs with a certain service (application). - * -@@ -226,6 +230,8 @@ public: - /// @since 3.5.3 - /// @internal - static pid_t run( const KService& _service, const KURL::List& _urls, QWidget* window, bool tempFiles, const QString& suggestedFileName ); -+ static pid_t run( const KService& _service, const KURL::List& _urls, QWidget* window, -+ const QCString& asn, bool tempFiles, const QString& suggestedFileName ); - - /** - * Open a list of URLs with. -@@ -269,6 +275,7 @@ public: - static pid_t runURL( const KURL& _url, const QString& _mimetype ); - /// @since 3.5.3 - /// @internal -+ static pid_t runURL( const KURL& _url, const QString& _mimetype, QWidget* window, const QCString& asn, bool tempFile, bool runExecutables, const QString& suggestedFileName ); - static pid_t runURL( const KURL& _url, const QString& _mimetype, bool tempFile, bool runExecutables, const QString& suggestedFileName ); - - /** -@@ -299,6 +306,8 @@ public: - * of running command) if command was unsafe for map notification. - */ - static pid_t runCommand( const QString& cmd, const QString & execName, const QString & icon ); -+ static pid_t runCommand( const QString& cmd, const QString & execName, const QString & icon, -+ QWidget* window, const QCString& asn ); - - /** - * Display the Open-With dialog for those URLs, and run the chosen application. -@@ -438,7 +447,7 @@ protected: - virtual void virtual_hook( int id, void* data ); - - private: -- void init (const KURL& url, QWidget* window, mode_t mode, -+ void init (const KURL& url, QWidget* window, const QCString& asn, mode_t mode, - bool isLocalFile, bool showProgressInfo); - private: - class KRunPrivate; -Index: kio/kio/krun.cpp -=================================================================== ---- kio/kio/krun.cpp.orig -+++ kio/kio/krun.cpp -@@ -77,6 +77,7 @@ public: - QString m_localPath; - QString m_suggestedFileName; - QGuardedPtr m_window; -+ QCString m_asn; - }; - - pid_t KRun::runURL( const KURL& u, const QString& _mimetype ) -@@ -109,14 +110,20 @@ bool KRun::isExecutableFile( const KURL& - return false; - } - --// This is called by foundMimeType, since it knows the mimetype of the URL - pid_t KRun::runURL( const KURL& u, const QString& _mimetype, bool tempFile, bool runExecutables, const QString& suggestedFileName ) - { -+ return runURL( u, _mimetype, NULL, "", tempFile, runExecutables, suggestedFileName ); -+} -+ -+// This is called by foundMimeType, since it knows the mimetype of the URL -+pid_t KRun::runURL( const KURL& u, const QString& _mimetype, QWidget* window, const QCString& asn, -+ bool tempFile, bool runExecutables, const QString& suggestedFileName ) -+{ - bool noRun = false; - bool noAuth = false; - if ( _mimetype == "inode/directory-locked" ) - { -- KMessageBoxWrapper::error( 0L, -+ KMessageBoxWrapper::error( window, - i18n("Unable to enter %1.\nYou do not have access rights to this location.").arg(u.htmlURL()) ); - return 0; - } -@@ -133,7 +140,7 @@ pid_t KRun::runURL( const KURL& u, const - { - QString path = u.path(); - shellQuote( path ); -- return (KRun::runCommand(path)); // just execute the url as a command -+ return (KRun::runCommand(path, QString::null, QString::null, window, asn)); // just execute the url as a command - // ## TODO implement deleting the file if tempFile==true - } - else -@@ -155,14 +162,14 @@ pid_t KRun::runURL( const KURL& u, const - - if ( noRun ) - { -- KMessageBox::sorry( 0L, -+ KMessageBox::sorry( window, - i18n("The file %1 is an executable program. " - "For safety it will not be started.").arg(u.htmlURL())); - return 0; - } - if ( noAuth ) - { -- KMessageBoxWrapper::error( 0L, -+ KMessageBoxWrapper::error( window, - i18n("You do not have permission to run %1.").arg(u.htmlURL()) ); - return 0; - } -@@ -182,7 +189,7 @@ pid_t KRun::runURL( const KURL& u, const - return displayOpenWithDialog( lst, tempFile, suggestedFileName ); - } - -- return KRun::run( *offer, lst, 0 /*window*/, tempFile, suggestedFileName ); -+ return KRun::run( *offer, lst, window, asn, tempFile, suggestedFileName ); - } - - bool KRun::displayOpenWithDialog( const KURL::List& lst ) -@@ -536,13 +543,13 @@ QString KRun::binaryName( const QString - } - - static pid_t runCommandInternal( KProcess* proc, const KService* service, const QString& binName, -- const QString &execName, const QString & iconName ) -+ const QString &execName, const QString & iconName, QWidget* window, QCString asn ) - { - if (service && !service->desktopEntryPath().isEmpty() - && !KDesktopFile::isAuthorizedDesktopFile( service->desktopEntryPath() )) - { - kdWarning() << "No authorization to execute " << service->desktopEntryPath() << endl; -- KMessageBox::sorry(0, i18n("You are not authorized to execute this file.")); -+ KMessageBox::sorry(window, i18n("You are not authorized to execute this file.")); - return 0; - } - QString bin = KRun::binaryName( binName, true ); -@@ -550,10 +557,10 @@ static pid_t runCommandInternal( KProces - bool silent; - QCString wmclass; - KStartupInfoId id; -- bool startup_notify = KRun::checkStartupNotify( binName, service, &silent, &wmclass ); -+ bool startup_notify = ( asn != "0" && KRun::checkStartupNotify( binName, service, &silent, &wmclass )); - if( startup_notify ) - { -- id.initId(); -+ id.initId( asn ); - id.setupStartupEnv(); - KStartupInfoData data; - data.setHostname(); -@@ -572,6 +579,8 @@ static pid_t runCommandInternal( KProces - if( silent ) - data.setSilent( KStartupInfoData::Yes ); - data.setDesktop( KWin::currentDesktop()); -+ if( window ) -+ data.setLaunchedBy( window->winId()); - KStartupInfo::sendStartup( id, data ); - } - pid_t pid = KProcessRunner::run( proc, binName, id ); -@@ -635,7 +644,8 @@ bool KRun::checkStartupNotify( const QSt - return true; - } - --static pid_t runTempService( const KService& _service, const KURL::List& _urls, bool tempFiles, const QString& suggestedFileName ) -+static pid_t runTempService( const KService& _service, const KURL::List& _urls, QWidget* window, -+ const QCString& asn, bool tempFiles, const QString& suggestedFileName ) - { - if (!_urls.isEmpty()) { - kdDebug(7010) << "runTempService: first url " << _urls.first().url() << endl; -@@ -654,7 +664,7 @@ static pid_t runTempService( const KServ - { - KURL::List singleUrl; - singleUrl.append(*it); -- runTempService( _service, singleUrl, tempFiles, suggestedFileName ); -+ runTempService( _service, singleUrl, window, "", tempFiles, suggestedFileName ); - } - KURL::List singleUrl; - singleUrl.append(_urls.first()); -@@ -673,7 +683,7 @@ static pid_t runTempService( const KServ - proc->setWorkingDirectory(_service.path()); - - return runCommandInternal( proc, &_service, KRun::binaryName( _service.exec(), false ), -- _service.name(), _service.icon() ); -+ _service.name(), _service.icon(), window, asn ); - } - - // WARNING: don't call this from processDesktopExec, since klauncher uses that too... -@@ -734,11 +744,22 @@ pid_t KRun::run( const KService& _servic - - pid_t KRun::run( const KService& _service, const KURL::List& _urls, QWidget* window, bool tempFiles ) - { -- return run( _service, _urls, window, tempFiles, QString::null ); -+ return run( _service, _urls, window, "", tempFiles, QString::null ); -+} -+ -+pid_t KRun::run( const KService& _service, const KURL::List& _urls, QWidget* window, const QCString& asn, bool tempFiles ) -+{ -+ return run( _service, _urls, window, asn, tempFiles, QString::null ); - } - - pid_t KRun::run( const KService& _service, const KURL::List& _urls, QWidget* window, bool tempFiles, const QString& suggestedFileName ) - { -+ return run( _service, _urls, window, "", tempFiles, suggestedFileName ); -+} -+ -+pid_t KRun::run( const KService& _service, const KURL::List& _urls, QWidget* window, const QCString& asn, -+ bool tempFiles, const QString& suggestedFileName ) -+{ - if (!_service.desktopEntryPath().isEmpty() && - !KDesktopFile::isAuthorizedDesktopFile( _service.desktopEntryPath())) - { -@@ -759,7 +780,7 @@ pid_t KRun::run( const KService& _servic - - if ( tempFiles || _service.desktopEntryPath().isEmpty() || !suggestedFileName.isEmpty() ) - { -- return runTempService(_service, _urls, tempFiles, suggestedFileName); -+ return runTempService(_service, _urls, window, asn, tempFiles, suggestedFileName); - } - - kdDebug(7010) << "KRun::run " << _service.desktopEntryPath() << endl; -@@ -773,9 +794,25 @@ pid_t KRun::run( const KService& _servic - - QString error; - int pid = 0; -- -+ -+ QCString myasn = asn; -+ // startServiceByDesktopPath() doesn't take QWidget*, add it to the startup info now -+ if( window != NULL ) -+ { -+ if( myasn.isEmpty()) -+ myasn = KStartupInfo::createNewStartupId(); -+ if( myasn != "0" ) -+ { -+ KStartupInfoId id; -+ id.initId( myasn ); -+ KStartupInfoData data; -+ data.setLaunchedBy( window->winId()); -+ KStartupInfo::sendChange( id, data ); -+ } -+ } -+ - int i = KApplication::startServiceByDesktopPath( -- _service.desktopEntryPath(), urls.toStringList(), &error, 0L, &pid -+ _service.desktopEntryPath(), urls.toStringList(), &error, 0L, &pid, myasn - ); - - if (i != 0) -@@ -800,33 +837,47 @@ pid_t KRun::run( const QString& _exec, c - - pid_t KRun::runCommand( QString cmd ) - { -- return KRun::runCommand( cmd, QString::null, QString::null ); -+ return KRun::runCommand( cmd, QString::null, QString::null, NULL, "" ); - } - - pid_t KRun::runCommand( const QString& cmd, const QString &execName, const QString & iconName ) - { -+ return KRun::runCommand( cmd, execName, iconName, NULL, "" ); -+} -+ -+pid_t KRun::runCommand( const QString& cmd, const QString &execName, const QString & iconName, -+ QWidget* window, const QCString& asn ) -+{ - kdDebug(7010) << "runCommand " << cmd << "," << execName << endl; - KProcess * proc = new KProcess; - proc->setUseShell(true); - *proc << cmd; - KService::Ptr service = KService::serviceByDesktopName( binaryName( execName, true ) ); -- return runCommandInternal( proc, service.data(), binaryName( execName, false ), execName, iconName ); -+ return runCommandInternal( proc, service.data(), binaryName( execName, false ), execName, iconName, -+ window, asn ); - } - - KRun::KRun( const KURL& url, mode_t mode, bool isLocalFile, bool showProgressInfo ) - :m_timer(0,"KRun::timer") - { -- init (url, 0, mode, isLocalFile, showProgressInfo); -+ init (url, 0, "", mode, isLocalFile, showProgressInfo); - } - - KRun::KRun( const KURL& url, QWidget* window, mode_t mode, bool isLocalFile, - bool showProgressInfo ) - :m_timer(0,"KRun::timer") - { -- init (url, window, mode, isLocalFile, showProgressInfo); -+ init (url, window, "", mode, isLocalFile, showProgressInfo); -+} -+ -+KRun::KRun( const KURL& url, QWidget* window, const QCString& asn, mode_t mode, bool isLocalFile, -+ bool showProgressInfo ) -+ :m_timer(0,"KRun::timer") -+{ -+ init (url, window, asn, mode, isLocalFile, showProgressInfo); - } - --void KRun::init ( const KURL& url, QWidget* window, mode_t mode, bool isLocalFile, -+void KRun::init ( const KURL& url, QWidget* window, const QCString& asn, mode_t mode, bool isLocalFile, - bool showProgressInfo ) - { - m_bFault = false; -@@ -842,6 +893,7 @@ void KRun::init ( const KURL& url, QWidg - d = new KRunPrivate; - d->m_runExecutables = true; - d->m_window = window; -+ d->m_asn = asn; - setEnableExternalBrowser(true); - - // Start the timer. This means we will return to the event -@@ -942,7 +994,7 @@ void KRun::init() - KService::Ptr service = KService::serviceByStorageId( exec ); - if (service) - { -- run( *service, urls ); -+ run( *service, urls, d->m_window, d->m_asn ); - ok = true; - } - } -@@ -1235,7 +1287,7 @@ void KRun::foundMimeType( const QString& - { - KURL::List lst; - lst.append( m_strURL ); -- m_bFinished = KRun::run( *serv, lst ); -+ m_bFinished = KRun::run( *serv, lst, d->m_window, d->m_asn ); - /// Note: the line above means that if that service failed, we'll - /// go to runURL to maybe find another service, even though a dialog - /// box was displayed. That's good if runURL tries another service, -@@ -1250,7 +1302,7 @@ void KRun::foundMimeType( const QString& - m_strURL.setPath( d->m_localPath ); - } - -- if (!m_bFinished && KRun::runURL( m_strURL, type, false, d->m_runExecutables, d->m_suggestedFileName )){ -+ if (!m_bFinished && KRun::runURL( m_strURL, type, d->m_window, d->m_asn, false, d->m_runExecutables, d->m_suggestedFileName )){ - m_bFinished = true; - } - else{ -Index: kdecore/kstartupinfo.cpp -=================================================================== ---- kdecore/kstartupinfo.cpp.orig -+++ kdecore/kstartupinfo.cpp -@@ -1109,7 +1109,7 @@ unsigned long KStartupInfoId::timestamp( - struct KStartupInfoDataPrivate - { - KStartupInfoDataPrivate() : desktop( 0 ), wmclass( "" ), hostname( "" ), -- silent( KStartupInfoData::Unknown ), timestamp( -1U ), screen( -1 ) {} -+ silent( KStartupInfoData::Unknown ), timestamp( -1U ), screen( -1 ), xinerama( -1 ), launched_by( 0 ) {} - QString bin; - QString name; - QString description; -@@ -1121,6 +1121,8 @@ struct KStartupInfoDataPrivate - KStartupInfoData::TriState silent; - unsigned long timestamp; - int screen; -+ int xinerama; -+ WId launched_by; - }; - - QString KStartupInfoData::to_text() const -@@ -1151,6 +1153,10 @@ QString KStartupInfoData::to_text() cons - ret += QString::fromLatin1( " TIMESTAMP=%1" ).arg( d->timestamp ); - if( d->screen != -1 ) - ret += QString::fromLatin1( " SCREEN=%1" ).arg( d->screen ); -+ if( d->xinerama != -1 ) -+ ret += QString::fromLatin1( " XINERAMA=%1" ).arg( d->xinerama ); -+ if( d->launched_by != 0 ) -+ ret += QString::fromLatin1( " LAUNCHED_BY=%1" ).arg( d->launched_by ); - return ret; - } - -@@ -1169,6 +1175,8 @@ KStartupInfoData::KStartupInfoData( cons - const QString silent_str = QString::fromLatin1( "SILENT=" ); - const QString timestamp_str = QString::fromLatin1( "TIMESTAMP=" ); - const QString screen_str = QString::fromLatin1( "SCREEN=" ); -+ const QString xinerama_str = QString::fromLatin1( "XINERAMA=" ); -+ const QString launched_by_str = QString::fromLatin1( "LAUNCHED_BY=" ); - for( QStringList::Iterator it = items.begin(); - it != items.end(); - ++it ) -@@ -1199,6 +1207,10 @@ KStartupInfoData::KStartupInfoData( cons - d->timestamp = get_unum( *it ); - else if( ( *it ).startsWith( screen_str )) - d->screen = get_num( *it ); -+ else if( ( *it ).startsWith( xinerama_str )) -+ d->xinerama = get_num( *it ); -+ else if( ( *it ).startsWith( launched_by_str )) -+ d->launched_by = get_num( *it ); - } - } - -@@ -1242,6 +1254,10 @@ void KStartupInfoData::update( const KSt - d->timestamp = data_P.timestamp(); - if( data_P.screen() != -1 ) - d->screen = data_P.screen(); -+ if( data_P.xinerama() != -1 && xinerama() != -1 ) // don't overwrite -+ d->xinerama = data_P.xinerama(); -+ if( data_P.launchedBy() != 0 && launchedBy() != 0 ) // don't overwrite -+ d->launched_by = data_P.launchedBy(); - } - - KStartupInfoData::KStartupInfoData() -@@ -1412,6 +1428,26 @@ int KStartupInfoData::screen() const - return d->screen; - } - -+void KStartupInfoData::setXinerama( int xinerama ) -+ { -+ d->xinerama = xinerama; -+ } -+ -+int KStartupInfoData::xinerama() const -+ { -+ return d->xinerama; -+ } -+ -+void KStartupInfoData::setLaunchedBy( WId window ) -+ { -+ d->launched_by = window; -+ } -+ -+WId KStartupInfoData::launchedBy() const -+ { -+ return d->launched_by; -+ } -+ - static - long get_num( const QString& item_P ) - { -Index: kdecore/netwm_def.h -=================================================================== ---- kdecore/netwm_def.h.orig -+++ kdecore/netwm_def.h -@@ -610,6 +610,7 @@ public: - WM2WindowRole = 1<<11, ///< @since 3.3 - WM2ClientMachine = 1<<12, ///< @since 3.3 - WM2ShowingDesktop = 1<<13, ///< @since 3.5 -+ WM2FullPlacement = 1<<14, - WM2DesktopLayout = 1<<15 ///< @since 3.5.8 - }; - -Index: kdecore/netwm.cpp -=================================================================== ---- kdecore/netwm.cpp.orig -+++ kdecore/netwm.cpp -@@ -145,6 +145,9 @@ static Atom net_wm_state_stays_on_top = - // used to determine whether application window is managed or not - static Atom xa_wm_state = 0; - -+// ability flags -+static Atom net_wm_full_placement = 0; -+ - static Bool netwm_atoms_created = False; - const unsigned long netwm_sendevent_mask = (SubstructureRedirectMask| - SubstructureNotifyMask); -@@ -236,7 +239,7 @@ static int wcmp(const void *a, const voi - } - - --static const int netAtomCount = 84; -+static const int netAtomCount = 85; - static void create_atoms(Display *d) { - static const char * const names[netAtomCount] = - { -@@ -330,7 +333,9 @@ static void create_atoms(Display *d) { - "_KDE_NET_WM_TEMPORARY_RULES", - - "WM_STATE", -- "WM_PROTOCOLS" -+ "WM_PROTOCOLS", -+ -+ "_NET_WM_FULL_PLACEMENT" - }; - - Atom atoms[netAtomCount], *atomsp[netAtomCount] = -@@ -425,7 +430,9 @@ static void create_atoms(Display *d) { - &kde_net_wm_temporary_rules, - - &xa_wm_state, -- &wm_protocols -+ &wm_protocols, -+ -+ &net_wm_full_placement - }; - - assert( !netwm_atoms_created ); -@@ -1355,6 +1362,8 @@ void NETRootInfo::setSupported() { - - if (p->properties[ PROTOCOLS2 ] & WM2KDETemporaryRules) - atoms[pnum++] = kde_net_wm_temporary_rules; -+ if (p->properties[ PROTOCOLS2 ] & WM2FullPlacement) -+ atoms[pnum++] = net_wm_full_placement; - - XChangeProperty(p->display, p->root, net_supported, XA_ATOM, 32, - PropModeReplace, (unsigned char *) atoms, pnum); -@@ -1587,6 +1596,8 @@ void NETRootInfo::updateSupportedPropert - - else if( atom == kde_net_wm_temporary_rules ) - p->properties[ PROTOCOLS2 ] |= WM2KDETemporaryRules; -+ else if( atom == net_wm_full_placement ) -+ p->properties[ PROTOCOLS2 ] |= WM2FullPlacement; - } - - extern Time qt_x_user_time; -Index: kdecore/kstartupinfo.h -=================================================================== ---- kdecore/kstartupinfo.h.orig -+++ kdecore/kstartupinfo.h -@@ -635,6 +635,30 @@ class KDECORE_EXPORT KStartupInfoData - * This is usually not necessary to set, as it's set by default to qt_xscreen(). - */ - void setScreen( int screen ); -+ -+ /** -+ * The Xinerama screen for the startup notification, -1 if unknown. -+ */ -+ int xinerama() const; -+ -+ /** -+ * Sets the Xinerama screen for the startup notification ( i.e. the screeen on which -+ * the starting application should appear ). -+ * @param xinerama the Xinerama screen for the startup notification -+ */ -+ void setXinerama( int xinerama ); -+ -+ /** -+ * The toplevel window of the application that caused this startup notification, -+ * 0 if unknown. -+ */ -+ WId launchedBy() const; -+ -+ /** -+ * Sets the toplevel window of the application that caused this startup notification. -+ * @param window window ID of the toplevel window that is responsible for this startup -+ */ -+ void setLaunchedBy( WId window ); - - /** - * Updates the notification data from the given data. Some data, such as the desktop diff --git a/opensuse/tdelibs/xml-catalog.diff b/opensuse/tdelibs/xml-catalog.diff deleted file mode 100644 index 0abaefec2..000000000 --- a/opensuse/tdelibs/xml-catalog.diff +++ /dev/null @@ -1,44 +0,0 @@ -Index: catalog.xml -=================================================================== ---- /dev/null -+++ catalog.xml -@@ -0,0 +1,39 @@ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ -+ diff --git a/opensuse/tdelibs/xmlhttprequest_3.x.diff b/opensuse/tdelibs/xmlhttprequest_3.x.diff deleted file mode 100644 index 822a8870b..000000000 --- a/opensuse/tdelibs/xmlhttprequest_3.x.diff +++ /dev/null @@ -1,47 +0,0 @@ -http://www.kde.org/info/security/advisory-20091027-1.txt - -Index: xmlhttprequest.cpp -=================================================================== ---- khtml/ecma/xmlhttprequest.cpp (revision 954808) -+++ khtml/ecma/xmlhttprequest.cpp (working copy) -@@ -342,17 +342,17 @@ - { - aborted = false; - -+ const QString protocol = url.protocol().lower(); -+ // Abandon the request when the protocol is other than "http", -+ // instead of blindly doing a KIO::get on other protocols like file:/. -+ if (!protocol.startsWith("http") && !protocol.startsWith("webdav")) -+ { -+ abort(); -+ return; -+ } -+ - if (method == "post") { -- QString protocol = url.protocol().lower(); - -- // Abondon the request when the protocol is other than "http", -- // instead of blindly changing it to a "get" request. -- if (!protocol.startsWith("http") && !protocol.startsWith("webdav")) -- { -- abort(); -- return; -- } -- - // FIXME: determine post encoding correctly by looking in headers - // for charset. - QByteArray buf; -@@ -763,11 +763,11 @@ - if (obj.isValid() && obj.inherits(&DOMDocument::info)) { - DOM::Node docNode = static_cast(obj.imp())->toNode(); - DOM::DocumentImpl *doc = static_cast(docNode.handle()); -- -+ - try { - body = doc->toString().string(); - // FIXME: also need to set content type, including encoding! -- -+ - } catch(DOM::DOMException& e) { - Object err = Error::create(exec, GeneralError, "Exception serializing document"); - exec->setException(err); -- cgit v1.2.3 From cd1f97695be1245ab19058d4fbc34e5697cc5383 Mon Sep 17 00:00:00 2001 From: Robert Xu Date: Sat, 12 Nov 2011 18:13:39 -0500 Subject: fix up tdebase and add qt3 --- opensuse/core/qt3/0001-dnd_optimization.patch | 180 + opensuse/core/qt3/0002-dnd_active_window_fix.patch | 162 + opensuse/core/qt3/0005-qpixmap_mitshm.patch | 569 + opensuse/core/qt3/0007-qpixmap_constants.patch | 384 + .../qt3/0038-dragobject-dont-prefer-unknown.patch | 19 + opensuse/core/qt3/0047-fix-kmenu-width.diff | 23 + opensuse/core/qt3/0048-qclipboard_hack_80072.patch | 51 + opensuse/core/qt3/0055-qtextedit_zoom.patch | 39 + opensuse/core/qt3/0056-khotkeys_input_84434.patch | 22 + opensuse/core/qt3/0059-qpopup_has_mouse.patch | 69 + .../core/qt3/0060-qpopup_ignore_mousepos.patch | 60 + opensuse/core/qt3/0079-compositing-types.patch | 413 + opensuse/core/qt3/0080-net-wm-sync-request.patch | 301 + opensuse/core/qt3/0085-fix-buildkey.diff | 22 + opensuse/core/qt3/add_qexport_visibility.patch | 63 + opensuse/core/qt3/aliasing.diff | 11 + opensuse/core/qt3/assistant3.desktop | 10 + opensuse/core/qt3/assistant3.png | Bin 0 -> 2353 bytes opensuse/core/qt3/attributes | 72 + opensuse/core/qt3/baselibs.conf | 12 + opensuse/core/qt3/build_script.sh | 99 + opensuse/core/qt3/designer.desktop | 11 + opensuse/core/qt3/designer.png | Bin 0 -> 324 bytes opensuse/core/qt3/enable-designer-plugins.diff | 11 + opensuse/core/qt3/external-libs.diff | 78 + opensuse/core/qt3/fix-GL-loading.diff | 44 + opensuse/core/qt3/fix-accessible.diff | 10 + opensuse/core/qt3/fix-assistant-path.patch | 11 + .../core/qt3/fix-key-release-event-with-imm.diff | 55 + opensuse/core/qt3/fix-qtranslator-crash.diff | 11 + .../core/qt3/fix-xinerama-dialog-placement.diff | 13 + opensuse/core/qt3/fix-xinput-clash.diff | 37 + opensuse/core/qt3/gcc46.diff | 56 + opensuse/core/qt3/head.diff | 60 + opensuse/core/qt3/kmenu-search-fix.diff | 10 + opensuse/core/qt3/lib64-plugin-support.diff | 12 + opensuse/core/qt3/limit-image-size.diff | 103 + opensuse/core/qt3/linguist.desktop | 11 + opensuse/core/qt3/linguist.png | Bin 0 -> 1936 bytes opensuse/core/qt3/mng-reading-fix.patch | 30 + opensuse/core/qt3/no-rpath.dif | 21 + opensuse/core/qt3/parseFontName.diff | 18 + opensuse/core/qt3/pluginmanager-fix.diff | 11 + opensuse/core/qt3/popen-leak-fix.diff | 10 + opensuse/core/qt3/pre_checkin.sh | 14 + opensuse/core/qt3/qcstring-format-warnings.diff | 15 + opensuse/core/qt3/qt-3.3.8c.diff | 58 + opensuse/core/qt3/qt-transparency.patch | 49 + opensuse/core/qt3/qt-x11-free-3.3.8b.tar.bz2 | Bin 0 -> 14344869 bytes .../qt-x11-immodule-unified-qt3.3.8-20060318.diff | 16169 +++++++++++++++++++ opensuse/core/qt3/qt.patch | 270 + opensuse/core/qt3/qt3-3.3.8b-translations.tar.bz2 | Bin 0 -> 19248 bytes opensuse/core/qt3/qt3-arm-gcc4.patch | 22 + opensuse/core/qt3/qt3-devel-doc.changes | 2475 +++ opensuse/core/qt3/qt3-devel-doc.spec | 297 + opensuse/core/qt3/qt3-devel-doc.spec.in | 93 + opensuse/core/qt3/qt3-extensions.changes | 2475 +++ opensuse/core/qt3/qt3-extensions.spec | 477 + opensuse/core/qt3/qt3-extensions.spec.in | 358 + opensuse/core/qt3/qt3-fix-cast.diff | 13 + opensuse/core/qt3/qt3-libpng14.diff | 22 + opensuse/core/qt3/qt3-never-strip.diff | 11 + opensuse/core/qt3/qt3-no-date.diff | 65 + opensuse/core/qt3/qt3-warnings.diff | 13 + opensuse/core/qt3/qt3.changes | 2475 +++ opensuse/core/qt3/qt3.csh | 2 + opensuse/core/qt3/qt3.sh | 6 + opensuse/core/qt3/qt3.spec | 415 + opensuse/core/qt3/qtconfig3.desktop | 10 + opensuse/core/qt3/qtimer-debug.diff | 48 + opensuse/core/qt3/qtkdeintegration_x11.cpp | 242 + opensuse/core/qt3/qtkdeintegration_x11_p.h | 59 + opensuse/core/qt3/qtrc | 28 + opensuse/core/qt3/qtrc-path.diff | 47 + opensuse/core/qt3/revert-qt-3.3.8-khmer-fix.diff | 36 + opensuse/core/qt3/rubberband.diff | 339 + opensuse/core/qt3/shut-up.diff | 45 + opensuse/core/qt3/update_spec.pl | 106 + opensuse/core/qt3/use-xrandr-1.2.diff | 106 + opensuse/core/qt3/xinerama-qpopupmenu.diff | 104 + opensuse/core/qt3/xinerama.patch | 49 + opensuse/core/tde-filesystem/macros.tde | 4 +- opensuse/core/tdebase/tdebase.spec | 2060 ++- opensuse/core/tdelibs/tdelibs.spec | 6 +- opensuse/grabtarball | 20 + 85 files changed, 31177 insertions(+), 1130 deletions(-) create mode 100644 opensuse/core/qt3/0001-dnd_optimization.patch create mode 100644 opensuse/core/qt3/0002-dnd_active_window_fix.patch create mode 100644 opensuse/core/qt3/0005-qpixmap_mitshm.patch create mode 100644 opensuse/core/qt3/0007-qpixmap_constants.patch create mode 100644 opensuse/core/qt3/0038-dragobject-dont-prefer-unknown.patch create mode 100644 opensuse/core/qt3/0047-fix-kmenu-width.diff create mode 100644 opensuse/core/qt3/0048-qclipboard_hack_80072.patch create mode 100644 opensuse/core/qt3/0055-qtextedit_zoom.patch create mode 100644 opensuse/core/qt3/0056-khotkeys_input_84434.patch create mode 100644 opensuse/core/qt3/0059-qpopup_has_mouse.patch create mode 100644 opensuse/core/qt3/0060-qpopup_ignore_mousepos.patch create mode 100644 opensuse/core/qt3/0079-compositing-types.patch create mode 100644 opensuse/core/qt3/0080-net-wm-sync-request.patch create mode 100644 opensuse/core/qt3/0085-fix-buildkey.diff create mode 100644 opensuse/core/qt3/add_qexport_visibility.patch create mode 100644 opensuse/core/qt3/aliasing.diff create mode 100644 opensuse/core/qt3/assistant3.desktop create mode 100644 opensuse/core/qt3/assistant3.png create mode 100644 opensuse/core/qt3/attributes create mode 100644 opensuse/core/qt3/baselibs.conf create mode 100644 opensuse/core/qt3/build_script.sh create mode 100644 opensuse/core/qt3/designer.desktop create mode 100644 opensuse/core/qt3/designer.png create mode 100644 opensuse/core/qt3/enable-designer-plugins.diff create mode 100644 opensuse/core/qt3/external-libs.diff create mode 100644 opensuse/core/qt3/fix-GL-loading.diff create mode 100644 opensuse/core/qt3/fix-accessible.diff create mode 100644 opensuse/core/qt3/fix-assistant-path.patch create mode 100644 opensuse/core/qt3/fix-key-release-event-with-imm.diff create mode 100644 opensuse/core/qt3/fix-qtranslator-crash.diff create mode 100644 opensuse/core/qt3/fix-xinerama-dialog-placement.diff create mode 100644 opensuse/core/qt3/fix-xinput-clash.diff create mode 100644 opensuse/core/qt3/gcc46.diff create mode 100644 opensuse/core/qt3/head.diff create mode 100644 opensuse/core/qt3/kmenu-search-fix.diff create mode 100644 opensuse/core/qt3/lib64-plugin-support.diff create mode 100644 opensuse/core/qt3/limit-image-size.diff create mode 100644 opensuse/core/qt3/linguist.desktop create mode 100644 opensuse/core/qt3/linguist.png create mode 100644 opensuse/core/qt3/mng-reading-fix.patch create mode 100644 opensuse/core/qt3/no-rpath.dif create mode 100644 opensuse/core/qt3/parseFontName.diff create mode 100644 opensuse/core/qt3/pluginmanager-fix.diff create mode 100644 opensuse/core/qt3/popen-leak-fix.diff create mode 100644 opensuse/core/qt3/pre_checkin.sh create mode 100644 opensuse/core/qt3/qcstring-format-warnings.diff create mode 100644 opensuse/core/qt3/qt-3.3.8c.diff create mode 100644 opensuse/core/qt3/qt-transparency.patch create mode 100644 opensuse/core/qt3/qt-x11-free-3.3.8b.tar.bz2 create mode 100644 opensuse/core/qt3/qt-x11-immodule-unified-qt3.3.8-20060318.diff create mode 100644 opensuse/core/qt3/qt.patch create mode 100644 opensuse/core/qt3/qt3-3.3.8b-translations.tar.bz2 create mode 100644 opensuse/core/qt3/qt3-arm-gcc4.patch create mode 100644 opensuse/core/qt3/qt3-devel-doc.changes create mode 100644 opensuse/core/qt3/qt3-devel-doc.spec create mode 100644 opensuse/core/qt3/qt3-devel-doc.spec.in create mode 100644 opensuse/core/qt3/qt3-extensions.changes create mode 100644 opensuse/core/qt3/qt3-extensions.spec create mode 100644 opensuse/core/qt3/qt3-extensions.spec.in create mode 100644 opensuse/core/qt3/qt3-fix-cast.diff create mode 100644 opensuse/core/qt3/qt3-libpng14.diff create mode 100644 opensuse/core/qt3/qt3-never-strip.diff create mode 100644 opensuse/core/qt3/qt3-no-date.diff create mode 100644 opensuse/core/qt3/qt3-warnings.diff create mode 100644 opensuse/core/qt3/qt3.changes create mode 100644 opensuse/core/qt3/qt3.csh create mode 100644 opensuse/core/qt3/qt3.sh create mode 100644 opensuse/core/qt3/qt3.spec create mode 100644 opensuse/core/qt3/qtconfig3.desktop create mode 100644 opensuse/core/qt3/qtimer-debug.diff create mode 100644 opensuse/core/qt3/qtkdeintegration_x11.cpp create mode 100644 opensuse/core/qt3/qtkdeintegration_x11_p.h create mode 100644 opensuse/core/qt3/qtrc create mode 100644 opensuse/core/qt3/qtrc-path.diff create mode 100644 opensuse/core/qt3/revert-qt-3.3.8-khmer-fix.diff create mode 100644 opensuse/core/qt3/rubberband.diff create mode 100644 opensuse/core/qt3/shut-up.diff create mode 100644 opensuse/core/qt3/update_spec.pl create mode 100644 opensuse/core/qt3/use-xrandr-1.2.diff create mode 100644 opensuse/core/qt3/xinerama-qpopupmenu.diff create mode 100644 opensuse/core/qt3/xinerama.patch create mode 100644 opensuse/grabtarball diff --git a/opensuse/core/qt3/0001-dnd_optimization.patch b/opensuse/core/qt3/0001-dnd_optimization.patch new file mode 100644 index 000000000..a464765cd --- /dev/null +++ b/opensuse/core/qt3/0001-dnd_optimization.patch @@ -0,0 +1,180 @@ +--- src/kernel/qdnd_x11.cpp ++++ src/kernel/qdnd_x11.cpp +@@ -49,13 +49,15 @@ + #include "qdragobject.h" + #include "qobjectlist.h" + #include "qcursor.h" ++#include "qbitmap.h" ++#include "qpainter.h" + + #include "qt_x11_p.h" + + // conflict resolution + +-// unused, may be used again later: const int XKeyPress = KeyPress; +-// unused, may be used again later: const int XKeyRelease = KeyRelease; ++const int XKeyPress = KeyPress; ++const int XKeyRelease = KeyRelease; + #undef KeyPress + #undef KeyRelease + +@@ -252,20 +254,47 @@ + public: + QShapedPixmapWidget(int screen = -1) : + QWidget(QApplication::desktop()->screen( screen ), +- 0, WStyle_Customize | WStyle_Tool | WStyle_NoBorder | WX11BypassWM ) ++ 0, WStyle_Customize | WStyle_Tool | WStyle_NoBorder | WX11BypassWM ), oldpmser( 0 ), oldbmser( 0 ) + { + } + +- void setPixmap(QPixmap pm) ++ void setPixmap(QPixmap pm, QPoint hot) + { +- if ( pm.mask() ) { ++ int bmser = pm.mask() ? pm.mask()->serialNumber() : 0; ++ if( oldpmser == pm.serialNumber() && oldbmser == bmser ++ && oldhot == hot ) ++ return; ++ oldpmser = pm.serialNumber(); ++ oldbmser = bmser; ++ oldhot = hot; ++ bool hotspot_in = !(hot.x() < 0 || hot.y() < 0 || hot.x() >= pm.width() || hot.y() >= pm.height()); ++// if the pixmap has hotspot in its area, make a "hole" in it at that position ++// this will allow XTranslateCoordinates() to find directly the window below the cursor instead ++// of finding this pixmap, and therefore there won't be needed any (slow) search for the window ++// using findRealWindow() ++ if( hotspot_in ) { ++ QBitmap mask = pm.mask() ? *pm.mask() : QBitmap( pm.width(), pm.height()); ++ if( !pm.mask()) ++ mask.fill( Qt::color1 ); ++ QPainter p( &mask ); ++ p.setPen( Qt::color0 ); ++ p.drawPoint( hot.x(), hot.y()); ++ p.end(); ++ pm.setMask( mask ); ++ setMask( mask ); ++ } else if ( pm.mask() ) { + setMask( *pm.mask() ); + } else { + clearMask(); + } + resize(pm.width(),pm.height()); + setErasePixmap(pm); ++ erase(); + } ++private: ++ int oldpmser; ++ int oldbmser; ++ QPoint oldhot; + }; + + static QShapedPixmapWidget * qt_xdnd_deco = 0; +@@ -862,6 +891,45 @@ + move( QCursor::pos() ); + } + ++static bool qt_xdnd_was_move = false; ++static bool qt_xdnd_found = false; ++// check whole incoming X queue for move events ++// checking whole queue is done by always returning False in the predicate ++// if there's another move event in the queue, and there's not a mouse button ++// or keyboard or ClientMessage event before it, the current move event ++// may be safely discarded ++// this helps avoiding being overloaded by being flooded from many events ++// from the XServer ++static ++Bool qt_xdnd_predicate( Display*, XEvent* ev, XPointer ) ++{ ++ if( qt_xdnd_found ) ++ return False; ++ if( ev->type == MotionNotify ) ++ { ++ qt_xdnd_was_move = true; ++ qt_xdnd_found = true; ++ } ++ if( ev->type == ButtonPress || ev->type == ButtonRelease ++ || ev->type == XKeyPress || ev->type == XKeyRelease ++ || ev->type == ClientMessage ) ++ { ++ qt_xdnd_was_move = false; ++ qt_xdnd_found = true; ++ } ++ return False; ++} ++ ++static ++bool qt_xdnd_another_movement() ++{ ++ qt_xdnd_was_move = false; ++ qt_xdnd_found = false; ++ XEvent dummy; ++ XCheckIfEvent( qt_xdisplay(), &dummy, qt_xdnd_predicate, NULL ); ++ return qt_xdnd_was_move; ++} ++ + bool QDragManager::eventFilter( QObject * o, QEvent * e) + { + if ( beingCancelled ) { +@@ -884,8 +952,10 @@ + + if ( e->type() == QEvent::MouseMove ) { + QMouseEvent* me = (QMouseEvent *)e; +- updateMode(me->stateAfter()); +- move( me->globalPos() ); ++ if( !qt_xdnd_another_movement()) { ++ updateMode(me->stateAfter()); ++ move( me->globalPos() ); ++ } + return TRUE; + } else if ( e->type() == QEvent::MouseButtonRelease ) { + qApp->removeEventFilter( this ); +@@ -1126,7 +1196,7 @@ + qt_xdnd_deco->grabMouse(); + } + } +- updatePixmap(); ++ updatePixmap( globalPos ); + + if ( qt_xdnd_source_sameanswer.contains( globalPos ) && + qt_xdnd_source_sameanswer.isValid() ) { +@@ -1717,7 +1787,7 @@ + // qt_xdnd_source_object persists until we get an xdnd_finish message + } + +-void QDragManager::updatePixmap() ++void QDragManager::updatePixmap( const QPoint& cursorPos ) + { + if ( qt_xdnd_deco ) { + QPixmap pm; +@@ -1732,9 +1802,8 @@ + defaultPm = new QPixmap(default_pm); + pm = *defaultPm; + } +- qt_xdnd_deco->setPixmap(pm); +- qt_xdnd_deco->move(QCursor::pos()-pm_hot); +- qt_xdnd_deco->repaint(FALSE); ++ qt_xdnd_deco->setPixmap(pm, pm_hot); ++ qt_xdnd_deco->move(cursorPos-pm_hot); + //if ( willDrop ) { + qt_xdnd_deco->show(); + //} else { +@@ -1743,4 +1812,9 @@ + } + } + ++void QDragManager::updatePixmap() ++{ ++ updatePixmap( QCursor::pos()); ++} ++ + #endif // QT_NO_DRAGANDDROP +--- src/kernel/qdragobject.h ++++ src/kernel/qdragobject.h +@@ -245,6 +245,7 @@ + void move( const QPoint & ); + void drop(); + void updatePixmap(); ++ void updatePixmap( const QPoint& cursorPos ); + + private: + QDragObject * object; diff --git a/opensuse/core/qt3/0002-dnd_active_window_fix.patch b/opensuse/core/qt3/0002-dnd_active_window_fix.patch new file mode 100644 index 000000000..417c313e1 --- /dev/null +++ b/opensuse/core/qt3/0002-dnd_active_window_fix.patch @@ -0,0 +1,162 @@ +--- src/kernel/qapplication_x11.cpp ++++ src/kernel/qapplication_x11.cpp +@@ -3972,7 +3972,7 @@ + // Keyboard event translation + // + +-static int translateButtonState( int s ) ++int qt_x11_translateButtonState( int s ) + { + int bst = 0; + if ( s & Button1Mask ) +@@ -4038,7 +4038,7 @@ + pos.ry() = lastMotion.y; + globalPos.rx() = lastMotion.x_root; + globalPos.ry() = lastMotion.y_root; +- state = translateButtonState( lastMotion.state ); ++ state = qt_x11_translateButtonState( lastMotion.state ); + if ( qt_button_down && (state & (LeftButton | + MidButton | + RightButton ) ) == 0 ) +@@ -4062,7 +4062,7 @@ + pos.ry() = xevent->xcrossing.y; + globalPos.rx() = xevent->xcrossing.x_root; + globalPos.ry() = xevent->xcrossing.y_root; +- state = translateButtonState( xevent->xcrossing.state ); ++ state = qt_x11_translateButtonState( xevent->xcrossing.state ); + if ( qt_button_down && (state & (LeftButton | + MidButton | + RightButton ) ) == 0 ) +@@ -4074,7 +4074,7 @@ + pos.ry() = event->xbutton.y; + globalPos.rx() = event->xbutton.x_root; + globalPos.ry() = event->xbutton.y_root; +- state = translateButtonState( event->xbutton.state ); ++ state = qt_x11_translateButtonState( event->xbutton.state ); + switch ( event->xbutton.button ) { + case Button1: button = LeftButton; break; + case Button2: button = MidButton; break; +@@ -5020,7 +5020,7 @@ + XKeyEvent xkeyevent = event->xkey; + + // save the modifier state, we will use the keystate uint later by passing +- // it to translateButtonState ++ // it to qt_x11_translateButtonState + uint keystate = event->xkey.state; + // remove the modifiers where mode_switch exists... HPUX machines seem + // to have alt *AND* mode_switch both in Mod1Mask, which causes +@@ -5134,7 +5134,7 @@ + } + #endif // !QT_NO_XIM + +- state = translateButtonState( keystate ); ++ state = qt_x11_translateButtonState( keystate ); + + static int directionKeyEvent = 0; + if ( qt_use_rtl_extensions && type == QEvent::KeyRelease ) { +--- src/kernel/qdnd_x11.cpp ++++ src/kernel/qdnd_x11.cpp +@@ -115,6 +115,8 @@ + Atom qt_xdnd_type_list; + const int qt_xdnd_version = 4; + ++extern int qt_x11_translateButtonState( int s ); ++ + // Actions + // + // The Xdnd spec allows for user-defined actions. This could be implemented +@@ -199,6 +201,8 @@ + static int qt_xdnd_current_screen = -1; + // state of dragging... true if dragging, false if not + bool qt_xdnd_dragging = FALSE; ++// need to check state of keyboard modifiers ++static bool need_modifiers_check = FALSE; + + // dict of payload data, sorted by type atom + static QIntDict * qt_xdnd_target_data = 0; +@@ -887,8 +891,20 @@ + + void QDragManager::timerEvent( QTimerEvent* e ) + { +- if ( e->timerId() == heartbeat && qt_xdnd_source_sameanswer.isNull() ) +- move( QCursor::pos() ); ++ if ( e->timerId() == heartbeat ) { ++ if( need_modifiers_check ) { ++ Window root, child; ++ int root_x, root_y, win_x, win_y; ++ unsigned int mask; ++ XQueryPointer( qt_xdisplay(), qt_xrootwin( qt_xdnd_current_screen ), ++ &root, &child, &root_x, &root_y, &win_x, &win_y, &mask ); ++ if( updateMode( (ButtonState)qt_x11_translateButtonState( mask ))) ++ qt_xdnd_source_sameanswer = QRect(); // force move ++ } ++ need_modifiers_check = TRUE; ++ if( qt_xdnd_source_sameanswer.isNull() ) ++ move( QCursor::pos() ); ++ } + } + + static bool qt_xdnd_was_move = false; +@@ -956,6 +972,7 @@ + updateMode(me->stateAfter()); + move( me->globalPos() ); + } ++ need_modifiers_check = FALSE; + return TRUE; + } else if ( e->type() == QEvent::MouseButtonRelease ) { + qApp->removeEventFilter( this ); +@@ -994,9 +1011,11 @@ + beingCancelled = FALSE; + qApp->exit_loop(); + } else { +- updateMode(ke->stateAfter()); +- qt_xdnd_source_sameanswer = QRect(); // force move +- move( QCursor::pos() ); ++ if( updateMode(ke->stateAfter())) { ++ qt_xdnd_source_sameanswer = QRect(); // force move ++ move( QCursor::pos() ); ++ } ++ need_modifiers_check = FALSE; + } + return TRUE; // Eat all key events + } +@@ -1023,10 +1042,10 @@ + + + static Qt::ButtonState oldstate; +-void QDragManager::updateMode( ButtonState newstate ) ++bool QDragManager::updateMode( ButtonState newstate ) + { + if ( newstate == oldstate ) +- return; ++ return false; + const int both = ShiftButton|ControlButton; + if ( (newstate & both) == both ) { + global_requested_action = QDropEvent::Link; +@@ -1050,6 +1069,7 @@ + } + } + oldstate = newstate; ++ return true; + } + + +@@ -1754,6 +1774,7 @@ + qt_xdnd_source_sameanswer = QRect(); + move(QCursor::pos()); + heartbeat = startTimer(200); ++ need_modifiers_check = FALSE; + + #ifndef QT_NO_CURSOR + qApp->setOverrideCursor( arrowCursor ); +--- src/kernel/qdragobject.h ++++ src/kernel/qdragobject.h +@@ -249,7 +249,7 @@ + + private: + QDragObject * object; +- void updateMode( ButtonState newstate ); ++ bool updateMode( ButtonState newstate ); + void updateCursor(); + #if defined(Q_WS_X11) + void createCursors(); diff --git a/opensuse/core/qt3/0005-qpixmap_mitshm.patch b/opensuse/core/qt3/0005-qpixmap_mitshm.patch new file mode 100644 index 000000000..e6683f726 --- /dev/null +++ b/opensuse/core/qt3/0005-qpixmap_mitshm.patch @@ -0,0 +1,569 @@ +qt-bugs@ issue : 11790 (part of) +applied: no +author: Lubos Lunak + +NOTE: Needs #define QT_MITSHM in the matching qplatformdefs.h file. This + patch does so only for linux-g++ and linux-g++-distcc platforms. + +MITSHM extension support for QPixmap<->QImage conversions. + +Hello, + + the review and apply the attached patches that improve performance of +QImage->QPixmap conversions. They should be applied in order +'mitshm','more_local' and 'fast', but they're independent from each other +(well, besides merging problems). + + Mitshm patch adds MITSHM extension support for both +QPixmap::convertFromImage() and QPixmap::convertToImage(). I've noticed there +was some MITSHM support already, turned off by default, but it was used only +for QPixmap::xForm() , and it used shared pixmaps (and I'd bet nobody uses +it). My patch adds shared ximages support for faster pixmap<->image +conversions. Since I don't understand the xForm() code much, and I didn't +want to do anything with it, I added three #define's: + - QT_MITSHM generally enabling MITSHM support, which should be set in +qplatformsdefs.h (or wherever you setup platform specific stuff), it can be +enabled at least on Linux + - QT_MITSHM_CONVERSIONS - this is for my new code + - QT_MITSHM_XFORM - this is for the xForm() code + There's one more #define, QT_MITSHM_RMID_IGNORES_REFCOUNT. Glibc +documentation of shmctl( ... IPC_RMID ) quite clearly says that the memory +segment is freed only after the refcount increased by shmat() and decreased +by shmdt() is 0. However, at least according to +http://bugs.kde.org/show_bug.cgi?id=27517 , this doesn't happen on other +platforms for some strange reason. Such platforms should have this #define if +you ever consider supporting MITSHM on them. + + The lower limit for using MITSHM for the image is about 8KiB +(width*height*depth > 100*100*32 ). Also, BestOptim in such case doesn't keep +the ximage, as the shared ximage is always freed before the function returns +(I don't know if it's worth copying it). + + The second patch ('more_local'), in short, does nothing. Besides improving +performance by about 10% by making variables more "local", making few of them +const, and also making some of them unsigned (this help gcc for some reason). + + The last one, 'fast', moves some if's out of the loops, and handles some most +common case specially (15bpp, 16bpp and 32bpp ximage depths). 32bpp case, if +the endianess matches, is simply uses memcpy(), for the 15/16bpp depth, +variables are replaced directly by matching values, statements are a bit +reordered and merged when suitable, and again, in case endianess matches, +pixels are written simply as Q_INT16. Most probably it would also help to +process two pixels at once and write them as Q_INT32, but I didn't want to +complicate the code too much (later >;) ). + + The last snippet of 'fast' handles case when xi->bytes_per_line is not equal +to width for 8bpp ximage. I'm not actually sure if that can ever happen, but +since I've already written it *shrug*. + + The 'more_local' and 'fast' patches change only convertFromImage(), as I +don't think convertToImage() is that performance critical (but it's as +unoptimized as convertFromImage() was). + + Maybe some numbers. The difference is of course mainly visible with larger +pixmaps. The two optimizations alone reduce the time to 50% for 32bpp, to 70% +for 16bpp. The MITSHM support, when other patches are already applied too, +for 32bpp images saves about 33%. Together, the total time is reduced to +about 40% for 32bpp. Imlib probably still beats that, but at least this +obsoletes KPixmapIO. + + +--- src/kernel/qpixmap_x11.cpp ++++ src/kernel/qpixmap_x11.cpp +@@ -37,7 +37,19 @@ + + // NOT REVISED + ++#include "qplatformdefs.h" ++ ++#if defined(Q_OS_WIN32) && defined(QT_MITSHM) ++#undef QT_MITSHM ++#endif ++ ++#ifdef QT_MITSHM ++ ++// Use the MIT Shared Memory extension for pixmap<->image conversions ++#define QT_MITSHM_CONVERSIONS ++ + // Uncomment the next line to enable the MIT Shared Memory extension ++// for QPixmap::xForm() + // + // WARNING: This has some problems: + // +@@ -45,14 +57,13 @@ + // 2. Qt does not handle the ShmCompletion message, so you will + // get strange effects if you xForm() repeatedly. + // +-// #define QT_MITSHM ++// #define QT_MITSHM_XFORM + +-#if defined(Q_OS_WIN32) && defined(QT_MITSHM) +-#undef QT_MITSHM ++#else ++#undef QT_MITSHM_CONVERSIONS ++#undef QT_MITSHM_XFORM + #endif + +-#include "qplatformdefs.h" +- + #include "qbitmap.h" + #include "qpaintdevicemetrics.h" + #include "qimage.h" +@@ -91,7 +102,7 @@ inline static void qSafeXDestroyImage( X + MIT Shared Memory Extension support: makes xForm noticeably (~20%) faster. + *****************************************************************************/ + +-#if defined(QT_MITSHM) ++#if defined(QT_MITSHM_XFORM) + + static bool xshminit = FALSE; + static XShmSegmentInfo xshminfo; +@@ -173,8 +184,100 @@ static bool qt_create_mitshm_buffer( con + // return FALSE; + // } + +-#endif // QT_MITSHM ++#endif // QT_MITSHM_XFORM ++ ++#ifdef QT_MITSHM_CONVERSIONS ++ ++static bool qt_mitshm_error = false; ++static int qt_mitshm_errorhandler( Display*, XErrorEvent* ) ++{ ++ qt_mitshm_error = true; ++ return 0; ++} ++ ++static XImage* qt_XShmCreateImage( Display* dpy, Visual* visual, unsigned int depth, ++ int format, int /*offset*/, char* /*data*/, unsigned int width, unsigned int height, ++ int /*bitmap_pad*/, int /*bytes_per_line*/, XShmSegmentInfo* shminfo ) ++{ ++ if( width * height * depth < 100*100*32 ) ++ return NULL; ++ static int shm_inited = -1; ++ if( shm_inited == -1 ) { ++ if( XShmQueryExtension( dpy )) ++ shm_inited = 1; ++ else ++ shm_inited = 0; ++ } ++ if( shm_inited == 0 ) ++ return NULL; ++ XImage* xi = XShmCreateImage( dpy, visual, depth, format, NULL, shminfo, width, ++ height ); ++ if( xi == NULL ) ++ return NULL; ++ shminfo->shmid = shmget( IPC_PRIVATE, xi->bytes_per_line * xi->height, ++ IPC_CREAT|0600); ++ if( shminfo->shmid < 0 ) { ++ XDestroyImage( xi ); ++ return NULL; ++ } ++ shminfo->readOnly = False; ++ shminfo->shmaddr = (char*)shmat( shminfo->shmid, 0, 0 ); ++ if( shminfo->shmaddr == (char*)-1 ) { ++ XDestroyImage( xi ); ++ shmctl( shminfo->shmid, IPC_RMID, 0 ); ++ return NULL; ++ } ++ xi->data = shminfo->shmaddr; ++#ifndef QT_MITSHM_RMID_IGNORES_REFCOUNT ++ // mark as deleted to automatically free the memory in case ++ // of a crash (but this doesn't work e.g. on Solaris) ++ shmctl( shminfo->shmid, IPC_RMID, 0 ); ++#endif ++ if( shm_inited == 1 ) { // first time ++ XErrorHandler old_h = XSetErrorHandler( qt_mitshm_errorhandler ); ++ XShmAttach( dpy, shminfo ); ++ shm_inited = 2; ++ XSync( dpy, False ); ++ XSetErrorHandler( old_h ); ++ if( qt_mitshm_error ) { // oops ... perhaps we are remote? ++ shm_inited = 0; ++ XDestroyImage( xi ); ++ shmdt( shminfo->shmaddr ); ++#ifdef QT_MITSHM_RMID_IGNORES_REFCOUNT ++ shmctl( shminfo->shmid, IPC_RMID, 0 ); ++#endif ++ return NULL; ++ } ++ } else ++ XShmAttach( dpy, shminfo ); ++ return xi; ++} ++ ++static void qt_XShmDestroyImage( XImage* xi, XShmSegmentInfo* shminfo ) ++{ ++ XShmDetach( QPaintDevice::x11AppDisplay(), shminfo ); ++ XDestroyImage( xi ); ++ shmdt( shminfo->shmaddr ); ++#ifdef QT_MITSHM_RMID_IGNORES_REFCOUNT ++ shmctl( shminfo->shmid, IPC_RMID, 0 ); ++#endif ++} ++ ++static XImage* qt_XShmGetImage( const QPixmap* pix, int format, ++ XShmSegmentInfo* shminfo ) ++{ ++ XImage* xi = qt_XShmCreateImage( pix->x11Display(), (Visual*)pix->x11Visual(), ++ pix->depth(), format, 0, 0, pix->width(), pix->height(), 32, 0, shminfo ); ++ if( xi == NULL ) ++ return NULL; ++ if( XShmGetImage( pix->x11Display(), pix->handle(), xi, 0, 0, AllPlanes ) == False ) { ++ qt_XShmDestroyImage( xi, shminfo ); ++ return NULL; ++ } ++ return xi; ++} + ++#endif // QT_MITSHM_CONVERSIONS + + /***************************************************************************** + Internal functions +@@ -627,9 +730,20 @@ QImage QPixmap::convertToImage() const + d = 32; // > 8 ==> 32 + + XImage *xi = (XImage *)data->ximage; // any cached ximage? +- if ( !xi ) // fetch data from X server ++#ifdef QT_MITSHM_CONVERSIONS ++ bool mitshm_ximage = false; ++ XShmSegmentInfo shminfo; ++#endif ++ if ( !xi ) { // fetch data from X server ++#ifdef QT_MITSHM_CONVERSIONS ++ xi = qt_XShmGetImage( this, mono ? XYPixmap : ZPixmap, &shminfo ); ++ if( xi ) { ++ mitshm_ximage = true; ++ } else ++#endif + xi = XGetImage( x11Display(), hd, 0, 0, w, h, AllPlanes, + mono ? XYPixmap : ZPixmap ); ++ } + Q_CHECK_PTR( xi ); + if (!xi) + return image; // null image +@@ -640,15 +754,31 @@ QImage QPixmap::convertToImage() const + QImage::LittleEndian : QImage::BigEndian; + } + image.create( w, h, d, 0, bitOrder ); +- if ( image.isNull() ) // could not create image ++ if ( image.isNull() ) { // could not create image ++#ifdef QT_MITSHM_CONVERSIONS ++ if( mitshm_ximage ) ++ qt_XShmDestroyImage( xi, &shminfo ); ++ else ++#endif ++ qSafeXDestroyImage( xi ); + return image; ++ } + + const QPixmap* msk = mask(); + const QPixmap *alf = data->alphapm; + + QImage alpha; + if (alf) { +- XImage *axi = XGetImage(x11Display(), alf->hd, 0, 0, w, h, AllPlanes, ZPixmap); ++ XImage* axi; ++#ifdef QT_MITSHM_CONVERSIONS ++ bool mitshm_aximage = false; ++ XShmSegmentInfo ashminfo; ++ axi = qt_XShmGetImage( alf, ZPixmap, &ashminfo ); ++ if( axi ) { ++ mitshm_aximage = true; ++ } else ++#endif ++ axi = XGetImage(x11Display(), alf->hd, 0, 0, w, h, AllPlanes, ZPixmap); + + if (axi) { + image.setAlphaBuffer( TRUE ); +@@ -662,6 +792,11 @@ QImage QPixmap::convertToImage() const + src += axi->bytes_per_line; + } + ++#ifdef QT_MITSHM_CONVERSIONS ++ if( mitshm_aximage ) ++ qt_XShmDestroyImage( axi, &ashminfo ); ++ else ++#endif + qSafeXDestroyImage( axi ); + } + } else if (msk) { +@@ -804,6 +939,12 @@ QImage QPixmap::convertToImage() const + xi->bits_per_pixel ); + #endif + image.reset(); ++#ifdef QT_MITSHM_CONVERSIONS ++ if( mitshm_ximage ) ++ qt_XShmDestroyImage( xi, &shminfo ); ++ else ++#endif ++ qSafeXDestroyImage( xi ); + return image; + } + +@@ -909,10 +1050,22 @@ QImage QPixmap::convertToImage() const + delete [] carr; + } + if ( data->optim != BestOptim ) { // throw away image data ++#ifdef QT_MITSHM_CONVERSIONS ++ if( mitshm_ximage ) ++ qt_XShmDestroyImage( xi, &shminfo ); ++ else ++#endif + qSafeXDestroyImage( xi ); + ((QPixmap*)this)->data->ximage = 0; +- } else // keep ximage data ++ } else { // keep ximage data ++#ifdef QT_MITSHM_CONVERSIONS ++ if( mitshm_ximage ) { // copy the XImage? ++ qt_XShmDestroyImage( xi, &shminfo ); ++ xi = 0; ++ } ++#endif + ((QPixmap*)this)->data->ximage = xi; ++ } + + return image; + } +@@ -1085,6 +1238,11 @@ bool QPixmap::convertFromImage( const QI + bool trucol = (visual->c_class == TrueColor || visual->c_class == DirectColor); + int nbytes = image.numBytes(); + uchar *newbits= 0; ++ int newbits_size = 0; ++#ifdef QT_MITSHM_CONVERSIONS ++ bool mitshm_ximage = false; ++ XShmSegmentInfo shminfo; ++#endif + + if ( trucol ) { // truecolor display + QRgb pix[256]; // pixel translation table +@@ -1113,10 +1271,18 @@ bool QPixmap::convertFromImage( const QI + } + } + ++#ifdef QT_MITSHM_CONVERSIONS ++ xi = qt_XShmCreateImage( dpy, visual, dd, ZPixmap, 0, 0, w, h, 32, 0, &shminfo ); ++ if( xi != NULL ) { ++ mitshm_ximage = true; ++ newbits = (uchar*)xi->data; ++ } ++ else ++#endif + xi = XCreateImage( dpy, visual, dd, ZPixmap, 0, 0, w, h, 32, 0 ); +- Q_CHECK_PTR( xi ); + if (!xi) + return false; ++ if( newbits == NULL ) + newbits = (uchar *)malloc( xi->bytes_per_line*h ); + Q_CHECK_PTR( newbits ); + if ( !newbits ) // no memory +@@ -1323,6 +1489,7 @@ bool QPixmap::convertFromImage( const QI + } + + newbits = (uchar *)malloc( nbytes ); // copy image into newbits ++ newbits_size = nbytes; + Q_CHECK_PTR( newbits ); + if ( !newbits ) // no memory + return FALSE; +@@ -1440,11 +1607,18 @@ bool QPixmap::convertFromImage( const QI + } + + if ( !xi ) { // X image not created ++#ifdef QT_MITSHM_CONVERSIONS ++ xi = qt_XShmCreateImage( dpy, visual, dd, ZPixmap, 0, 0, w, h, 32, 0, &shminfo ); ++ if( xi != NULL ) ++ mitshm_ximage = true; ++ else ++#endif + xi = XCreateImage( dpy, visual, dd, ZPixmap, 0, 0, w, h, 32, 0 ); + if ( xi->bits_per_pixel == 16 ) { // convert 8 bpp ==> 16 bpp + ushort *p2; + int p2inc = xi->bytes_per_line/sizeof(ushort); + ushort *newerbits = (ushort *)malloc( xi->bytes_per_line * h ); ++ newbits_size = xi->bytes_per_line * h; + Q_CHECK_PTR( newerbits ); + if ( !newerbits ) // no memory + return FALSE; +@@ -1462,6 +1636,14 @@ bool QPixmap::convertFromImage( const QI + "(bpp=%d)", xi->bits_per_pixel ); + #endif + } ++#ifdef QT_MITSHM_CONVERSIONS ++ if( newbits_size > 0 && mitshm_ximage ) { // need to copy to shared memory ++ memcpy( xi->data, newbits, newbits_size ); ++ free( newbits ); ++ newbits = (uchar*)xi->data; ++ } ++ else ++#endif + xi->data = (char *)newbits; + } + +@@ -1495,19 +1677,24 @@ bool QPixmap::convertFromImage( const QI + + } + ++#ifdef QT_MITSHM_CONVERSIONS ++ if( mitshm_ximage ) ++ XShmPutImage( dpy, hd, qt_xget_readonly_gc( x11Screen(), FALSE ), ++ xi, 0, 0, 0, 0, w, h, False ); ++ else ++#endif + XPutImage( dpy, hd, qt_xget_readonly_gc( x11Screen(), FALSE ), + xi, 0, 0, 0, 0, w, h ); + +- if ( data->optim != BestOptim ) { // throw away image +- qSafeXDestroyImage( xi ); +- data->ximage = 0; +- } else { // keep ximage that we created +- data->ximage = xi; +- } + data->w = w; + data->h = h; + data->d = dd; + ++ XImage* axi = NULL; ++#ifdef QT_MITSHM_CONVERSIONS ++ bool mitshm_aximage = false; ++ XShmSegmentInfo ashminfo; ++#endif + if ( image.hasAlphaBuffer() ) { + QBitmap m; + m = image.createAlphaMask( conversion_flags ); +@@ -1543,13 +1730,22 @@ bool QPixmap::convertFromImage( const QI + data->alphapm->rendhd = + (HANDLE) XftDrawCreateAlpha( x11Display(), data->alphapm->hd, 8 ); + +- XImage *axi = XCreateImage(x11Display(), (Visual *) x11Visual(), ++#ifdef QT_MITSHM_CONVERSIONS ++ axi = qt_XShmCreateImage( x11Display(), (Visual*)x11Visual(), ++ 8, ZPixmap, 0, 0, w, h, 8, 0, &ashminfo ); ++ if( axi != NULL ) ++ mitshm_aximage = true; ++ else ++#endif ++ axi = XCreateImage(x11Display(), (Visual *) x11Visual(), + 8, ZPixmap, 0, 0, w, h, 8, 0); + + if (axi) { ++ if( axi->data==NULL ) { + // the data is deleted by qSafeXDestroyImage + axi->data = (char *) malloc(h * axi->bytes_per_line); + Q_CHECK_PTR( axi->data ); ++ } + char *aptr = axi->data; + + if (image.depth() == 32) { +@@ -1567,14 +1763,48 @@ bool QPixmap::convertFromImage( const QI + } + + GC gc = XCreateGC(x11Display(), data->alphapm->hd, 0, 0); ++ #ifdef QT_MITSHM_CONVERSIONS ++ if( mitshm_aximage ) ++ XShmPutImage( dpy, data->alphapm->hd, gc, axi, 0, 0, 0, 0, w, h, False ); ++ else ++#endif + XPutImage(dpy, data->alphapm->hd, gc, axi, 0, 0, 0, 0, w, h); + XFreeGC(x11Display(), gc); +- qSafeXDestroyImage(axi); + } + } + #endif // QT_NO_XFTFREETYPE + } + ++#ifdef QT_MITSHM_CONVERSIONS ++ if( mitshm_ximage || mitshm_aximage ) ++ XSync( x11Display(), False ); // wait until processed ++#endif ++ ++ if ( data->optim != BestOptim ) { // throw away image ++#ifdef QT_MITSHM_CONVERSIONS ++ if( mitshm_ximage ) ++ qt_XShmDestroyImage( xi, &shminfo ); ++ else ++#endif ++ qSafeXDestroyImage( xi ); ++ data->ximage = 0; ++ } else { // keep ximage that we created ++#ifdef QT_MITSHM_CONVERSIONS ++ if( mitshm_ximage ) { // copy the XImage? ++ qt_XShmDestroyImage( xi, &shminfo ); ++ xi = 0; ++ } ++#endif ++ data->ximage = xi; ++ } ++ if( axi ) { ++#ifdef QT_MITSHM_CONVERSIONS ++ if( mitshm_aximage ) ++ qt_XShmDestroyImage( axi, &ashminfo ); ++ else ++#endif ++ qSafeXDestroyImage(axi); ++ } + return TRUE; + } + +@@ -1737,7 +1967,7 @@ QPixmap QPixmap::xForm( const QWMatrix & + return pm; + } + +-#if defined(QT_MITSHM) ++#if defined(QT_MITSHM_XFORM) + static bool try_once = TRUE; + if (try_once) { + try_once = FALSE; +@@ -1770,7 +2000,7 @@ QPixmap QPixmap::xForm( const QWMatrix & + dbpl = ((w*bpp+31)/32)*4; + dbytes = dbpl*h; + +-#if defined(QT_MITSHM) ++#if defined(QT_MITSHM_XFORM) + if ( use_mitshm ) { + dptr = (uchar *)xshmimg->data; + uchar fillbyte = bpp == 8 ? white.pixel() : 0xff; +@@ -1786,7 +2016,7 @@ QPixmap QPixmap::xForm( const QWMatrix & + memset( dptr, Qt::white.pixel( x11Screen() ), dbytes ); + else + memset( dptr, 0xff, dbytes ); +-#if defined(QT_MITSHM) ++#if defined(QT_MITSHM_XFORM) + } + #endif + +@@ -1817,7 +2047,7 @@ QPixmap QPixmap::xForm( const QWMatrix & + } else { + xbpl = (w*bpp)/8; + p_inc = dbpl - xbpl; +-#if defined(QT_MITSHM) ++#if defined(QT_MITSHM_XFORM) + if ( use_mitshm ) + p_inc = xshmimg->bytes_per_line - xbpl; + #endif +@@ -1854,7 +2084,7 @@ QPixmap QPixmap::xForm( const QWMatrix & + QPixmap pm( w, h ); + pm.data->uninit = FALSE; + pm.x11SetScreen( x11Screen() ); +-#if defined(QT_MITSHM) ++#if defined(QT_MITSHM_XFORM) + if ( use_mitshm ) { + XCopyArea( dpy, xshmpm, pm.handle(), gc, 0, 0, w, h, 0, 0 ); + } else { +@@ -1863,7 +2093,7 @@ QPixmap QPixmap::xForm( const QWMatrix & + ZPixmap, 0, (char *)dptr, w, h, 32, 0 ); + XPutImage( dpy, pm.handle(), gc, xi, 0, 0, 0, 0, w, h); + qSafeXDestroyImage( xi ); +-#if defined(QT_MITSHM) ++#if defined(QT_MITSHM_XFORM) + } + #endif + +--- mkspecs/linux-g++/qplatformdefs.h ++++ mkspecs/linux-g++/qplatformdefs.h +@@ -102,5 +102,6 @@ + #define QT_VSNPRINTF ::vsnprintf + #endif + ++#define QT_MITSHM + + #endif // QPLATFORMDEFS_H diff --git a/opensuse/core/qt3/0007-qpixmap_constants.patch b/opensuse/core/qt3/0007-qpixmap_constants.patch new file mode 100644 index 000000000..65f9cd64b --- /dev/null +++ b/opensuse/core/qt3/0007-qpixmap_constants.patch @@ -0,0 +1,384 @@ +qt-bugs@ issue : 11790 (part of) +applied: no +author: Lubos Lunak + +See 0005-qpixmap_mitshm.patch for details. + + +--- src/kernel/qpixmap_x11.cpp ++++ src/kernel/qpixmap_x11.cpp +@@ -1123,9 +1123,6 @@ bool QPixmap::convertFromImage( const QI + return FALSE; + int bppc = xi->bits_per_pixel; + +- if ( bppc > 8 && xi->byte_order == LSBFirst ) +- bppc++; +- + bool contig_bits = n_bits(red_mask) == rbits && + n_bits(green_mask) == gbits && + n_bits(blue_mask) == bbits; +@@ -1174,32 +1171,70 @@ bool QPixmap::convertFromImage( const QI + } + init=TRUE; + } ++ ++ enum { BPP8, ++ BPP16_8_3_M3, BPP16_7_2_M3, BPP16_MSB, BPP16_LSB, ++ BPP24_MSB, BPP24_LSB, ++ BPP32_16_8_0, BPP32_MSB, BPP32_LSB ++ } mode = BPP8; + +- for ( uint y=0; ybytes_per_line*y; +- QRgb* p = (QRgb *)src; ++ if ( bppc > 8 && xi->byte_order == LSBFirst ) ++ bppc++; + +-#define GET_RGB \ +- int r = qRed ( *p ); \ +- int g = qGreen( *p ); \ +- int b = qBlue ( *p++ ); \ +- r = red_shift > 0 \ +- ? r << red_shift : r >> -red_shift; \ +- g = green_shift > 0 \ +- ? g << green_shift : g >> -green_shift; \ +- b = blue_shift > 0 \ +- ? b << blue_shift : b >> -blue_shift; ++ int wordsize; ++ bool bigendian; ++ qSysInfo( &wordsize, &bigendian ); ++ bool same_msb_lsb = ( xi->byte_order == MSBFirst ) == ( bigendian ); ++ ++ if( bppc == 8 ) // 8 bit ++ mode = BPP8; ++ else if( bppc == 16 || bppc == 17 ) { // 16 bit MSB/LSB ++ if( red_shift == 8 && green_shift == 3 && blue_shift == -3 ++ && !d8 && same_msb_lsb ) ++ mode = BPP16_8_3_M3; ++ else if( red_shift == 7 && green_shift == 2 && blue_shift == -3 ++ && !d8 && same_msb_lsb ) ++ mode = BPP16_7_2_M3; ++ else ++ mode = bppc == 17 ? BPP16_LSB : BPP16_MSB; ++ } else if( bppc == 24 || bppc == 25 ) { // 24 bit MSB/LSB ++ mode = bppc == 25 ? BPP24_LSB : BPP24_MSB; ++ } else if( bppc == 32 || bppc == 33 ) { // 32 bit MSB/LSB ++ if( red_shift == 16 && green_shift == 8 && blue_shift == 0 ++ && !d8 && same_msb_lsb ) ++ mode = BPP32_16_8_0; ++ else ++ mode = bppc == 33 ? BPP32_LSB : BPP32_MSB; ++ } else ++ qFatal("Logic error 3"); + + #define GET_PIXEL \ + int pixel; \ + if ( d8 ) pixel = pix[*src++]; \ + else { \ +- GET_RGB \ +- pixel = (b & blue_mask)|(g & green_mask) | (r & red_mask) \ ++ int r = qRed ( *p ); \ ++ int g = qGreen( *p ); \ ++ int b = qBlue ( *p++ ); \ ++ r = red_shift > 0 \ ++ ? r << red_shift : r >> -red_shift; \ ++ g = green_shift > 0 \ ++ ? g << green_shift : g >> -green_shift; \ ++ b = blue_shift > 0 \ ++ ? b << blue_shift : b >> -blue_shift; \ ++ pixel = (r & red_mask)|(g & green_mask) | (b & blue_mask) \ + | ~(blue_mask | green_mask | red_mask); \ + } + ++// optimized case - no d8 case, shift only once instead of twice, mask only once instead of twice, ++// use direct values instead of variables, and use only one statement ++// (*p >> 16), (*p >> 8 ) and (*p) are qRed(),qGreen() and qBlue() without masking ++// shifts have to be passed including the shift operator (e.g. '>>3'), because of the direction ++#define GET_PIXEL_OPT(red_shift,green_shift,blue_shift,red_mask,green_mask,blue_mask) \ ++ int pixel = ((( *p >> 16 ) red_shift ) & red_mask ) \ ++ | ((( *p >> 8 ) green_shift ) & green_mask ) \ ++ | ((( *p ) blue_shift ) & blue_mask ); \ ++ ++p; ++ + #define GET_PIXEL_DITHER_TC \ + int r = qRed ( *p ); \ + int g = qGreen( *p ); \ +@@ -1220,91 +1255,177 @@ bool QPixmap::convertFromImage( const QI + ? g << green_shift : g >> -green_shift; \ + b = blue_shift > 0 \ + ? b << blue_shift : b >> -blue_shift; \ +- int pixel = (b & blue_mask)|(g & green_mask) | (r & red_mask); ++ int pixel = (r & red_mask)|(g & green_mask) | (b & blue_mask); + +- if ( dither_tc ) { +- uint x; +- switch ( bppc ) { +- case 16: // 16 bit MSB +- for ( x=0; x> 8); +- *dst++ = pixel; +- } ++// again, optimized case ++// can't be optimized that much :( ++#define GET_PIXEL_DITHER_TC_OPT(red_shift,green_shift,blue_shift,red_mask,green_mask,blue_mask, \ ++ rbits,gbits,bbits) \ ++ const int thres = D[x%16][y%16]; \ ++ int r = qRed ( *p ); \ ++ if ( r <= (255-(1<<(8-rbits))) && ((r< thres) \ ++ r += (1<<(8-rbits)); \ ++ int g = qGreen( *p ); \ ++ if ( g <= (255-(1<<(8-gbits))) && ((g< thres) \ ++ g += (1<<(8-gbits)); \ ++ int b = qBlue ( *p++ ); \ ++ if ( b <= (255-(1<<(8-bbits))) && ((b< thres) \ ++ b += (1<<(8-bbits)); \ ++ int pixel = (( r red_shift ) & red_mask ) \ ++ | (( g green_shift ) & green_mask ) \ ++ | (( b blue_shift ) & blue_mask ); ++ ++#define CYCLE(body) \ ++ for ( uint y=0; ybytes_per_line*y; \ ++ QRgb* p = (QRgb *)src; \ ++ body \ ++ } ++ ++ if ( dither_tc ) { ++ switch ( mode ) { ++ case BPP16_8_3_M3: ++ CYCLE( ++ Q_INT16* dst16 = (Q_INT16*)dst; ++ for ( uint x=0; x>3,0xf800,0x7e0,0x1f,5,6,5) ++ *dst16++ = pixel; ++ } ++ ) + break; +- case 17: // 16 bit LSB +- for ( x=0; x> 8; +- } ++ case BPP16_7_2_M3: ++ CYCLE( ++ Q_INT16* dst16 = (Q_INT16*)dst; ++ for ( uint x=0; x>3,0x7c00,0x3e0,0x1f,5,5,5) ++ *dst16++ = pixel; ++ } ++ ) ++ break; ++ case BPP16_MSB: // 16 bit MSB ++ CYCLE( ++ for ( uint x=0; x> 8); ++ *dst++ = pixel; ++ } ++ ) ++ break; ++ case BPP16_LSB: // 16 bit LSB ++ CYCLE( ++ for ( uint x=0; x> 8; ++ } ++ ) + break; + default: + qFatal("Logic error"); + } +- } else { +- uint x; +- switch ( bppc ) { +- case 8: // 8 bit +- for ( x=0; x> 8); +- *dst++ = pixel; +- } ++ case BPP16_8_3_M3: ++ CYCLE( ++ Q_INT16* dst16 = (Q_INT16*)dst; ++ for ( uint x=0; x>3,0xf800,0x7e0,0x1f) ++ *dst16++ = pixel; ++ } ++ ) + break; +- case 17: // 16 bit LSB +- for ( x=0; x> 8; +- } ++ case BPP16_7_2_M3: ++ CYCLE( ++ Q_INT16* dst16 = (Q_INT16*)dst; ++ for ( uint x=0; x>3,0x7c00,0x3e0,0x1f) ++ *dst16++ = pixel; ++ } ++ ) + break; +- case 24: // 24 bit MSB +- for ( x=0; x> 16; +- *dst++ = pixel >> 8; +- *dst++ = pixel; +- } ++ case BPP16_MSB: // 16 bit MSB ++ CYCLE( ++ for ( uint x=0; x> 8); ++ *dst++ = pixel; ++ } ++ ) + break; +- case 25: // 24 bit LSB +- for ( x=0; x> 8; +- *dst++ = pixel >> 16; +- } ++ case BPP16_LSB: // 16 bit LSB ++ CYCLE( ++ for ( uint x=0; x> 8; ++ } ++ ) + break; +- case 32: // 32 bit MSB +- for ( x=0; x> 24; +- *dst++ = pixel >> 16; +- *dst++ = pixel >> 8; +- *dst++ = pixel; +- } ++ case BPP24_MSB: // 24 bit MSB ++ CYCLE( ++ for ( uint x=0; x> 16; ++ *dst++ = pixel >> 8; ++ *dst++ = pixel; ++ } ++ ) + break; +- case 33: // 32 bit LSB +- for ( x=0; x> 8; +- *dst++ = pixel >> 16; +- *dst++ = pixel >> 24; +- } ++ case BPP24_LSB: // 24 bit LSB ++ CYCLE( ++ for ( uint x=0; x> 8; ++ *dst++ = pixel >> 16; ++ } ++ ) + break; +- default: +- qFatal("Logic error 2"); +- } +- } +- } +- xi->data = (char *)newbits; ++ case BPP32_16_8_0: ++ CYCLE( ++ memcpy( dst, p, w * 4 ); ++ ) ++ break; ++ case BPP32_MSB: // 32 bit MSB ++ CYCLE( ++ for ( uint x=0; x> 24; ++ *dst++ = pixel >> 16; ++ *dst++ = pixel >> 8; ++ *dst++ = pixel; ++ } ++ ) ++ break; ++ case BPP32_LSB: // 32 bit LSB ++ CYCLE( ++ for ( uint x=0; x> 8; ++ *dst++ = pixel >> 16; ++ *dst++ = pixel >> 24; ++ } ++ ) ++ break; ++ default: ++ qFatal("Logic error 2"); ++ } ++ } ++ xi->data = (char *)newbits; + } + + if ( d == 8 && !trucol ) { // 8 bit pixmap +@@ -1554,15 +1675,24 @@ bool QPixmap::convertFromImage( const QI + + if (image.depth() == 32) { + const int *iptr = (const int *) image.bits(); +- int max = w * h; +- while (max--) +- *aptr++ = *iptr++ >> 24; // squirt ++ if( axi->bytes_per_line == (int)w ) { ++ int max = w * h; ++ while (max--) ++ *aptr++ = *iptr++ >> 24; // squirt ++ } else { ++ for (uint i = 0; i < h; ++i ) { ++ for (uint j = 0; j < w; ++j ) ++ *aptr++ = *iptr++ >> 24; // squirt ++ aptr += ( axi->bytes_per_line - w ); ++ } ++ } + } else if (image.depth() == 8) { + const QRgb * const rgb = image.colorTable(); + for (uint y = 0; y < h; ++y) { + const uchar *iptr = image.scanLine(y); + for (uint x = 0; x < w; ++x) + *aptr++ = qAlpha(rgb[*iptr++]); ++ aptr += ( axi->bytes_per_line - w ); + } + } + diff --git a/opensuse/core/qt3/0038-dragobject-dont-prefer-unknown.patch b/opensuse/core/qt3/0038-dragobject-dont-prefer-unknown.patch new file mode 100644 index 000000000..d9a7275e9 --- /dev/null +++ b/opensuse/core/qt3/0038-dragobject-dont-prefer-unknown.patch @@ -0,0 +1,19 @@ +--- src/kernel/qdragobject.cpp ++++ src/kernel/qdragobject.cpp +@@ -893,6 +893,16 @@ + { + if(!e) + return FALSE; ++ ++ // when subtype is not specified, try text/plain first, otherwise this may read ++ // things like text/x-moz-url even though better targets are available ++ if( subtype.isNull()) { ++ QCString subtmp = "plain"; ++ if( decode( e, str, subtmp )) { ++ subtype = subtmp; ++ return true; ++ } ++ } + + if ( e->cacheType == QMimeSource::Text ) { + str = *e->cache.txt.str; diff --git a/opensuse/core/qt3/0047-fix-kmenu-width.diff b/opensuse/core/qt3/0047-fix-kmenu-width.diff new file mode 100644 index 000000000..398ca0cc4 --- /dev/null +++ b/opensuse/core/qt3/0047-fix-kmenu-width.diff @@ -0,0 +1,23 @@ +qt-bugs@ issue: N46882 +bugs.kde.org number: 77545 +applied: no +author: Stephan Binner + +Fix wrong K menu width for the case of enabled side pixmap and a menu title +(like "Recently Used Applications") being longer than every other entry. + +Solution: Respect PanelKMenu::setMaximumSize() as up to Qt 3.2.3 + +Index: src/widgets/qpopupmenu.cpp +================================================================================ +--- src/widgets/qpopupmenu.cpp ++++ src/widgets/qpopupmenu.cpp +@@ -2530,7 +2530,7 @@ + constPolish(); + QPopupMenu* that = (QPopupMenu*) this; + //We do not need a resize here, just the sizeHint.. +- return that->updateSize(FALSE, FALSE).expandedTo( QApplication::globalStrut() ); ++ return that->updateSize(FALSE).expandedTo( QApplication::globalStrut() ); + } + + diff --git a/opensuse/core/qt3/0048-qclipboard_hack_80072.patch b/opensuse/core/qt3/0048-qclipboard_hack_80072.patch new file mode 100644 index 000000000..2f508019b --- /dev/null +++ b/opensuse/core/qt3/0048-qclipboard_hack_80072.patch @@ -0,0 +1,51 @@ +qt-bugs@ issue : none, probably even won't be +bugs.kde.org number : 80072 +applied: no +author: Lubos Lunak + +A crude hack for KDE #80072. No good idea how to fix it properly yet :(. + +================================================================================ +Index: src/kernel/qclipboard_x11.cpp +=================================================================== +--- src/kernel/qclipboard_x11.cpp.orig ++++ src/kernel/qclipboard_x11.cpp +@@ -112,6 +112,7 @@ static int pending_timer_id = 0; + static bool pending_clipboard_changed = FALSE; + static bool pending_selection_changed = FALSE; + ++Q_EXPORT bool qt_qclipboard_bailout_hack = false; + + // event capture mechanism for qt_xclb_wait_for_event + static bool waiting_for_data = FALSE; +@@ -464,6 +465,15 @@ static Bool checkForClipboardEvents(Disp + || e->xselectionclear.selection == qt_xa_clipboard))); + } + ++static bool selection_request_pending = false; ++ ++static Bool check_selection_request_pending( Display*, XEvent* e, XPointer ) ++ { ++ if( e->type == SelectionRequest && e->xselectionrequest.owner == owner->winId()) ++ selection_request_pending = true; ++ return False; ++ } ++ + bool qt_xclb_wait_for_event( Display *dpy, Window win, int type, XEvent *event, + int timeout ) + { +@@ -515,6 +525,14 @@ bool qt_xclb_wait_for_event( Display *dp + do { + if ( XCheckTypedWindowEvent(dpy,win,type,event) ) + return TRUE; ++ if( qt_qclipboard_bailout_hack ) { ++ XEvent dummy; ++ selection_request_pending = false; ++ if ( owner != NULL ) ++ XCheckIfEvent(dpy,&dummy,check_selection_request_pending,NULL); ++ if( selection_request_pending ) ++ return TRUE; ++ } + + // process other clipboard events, since someone is probably requesting data from us + XEvent e; diff --git a/opensuse/core/qt3/0055-qtextedit_zoom.patch b/opensuse/core/qt3/0055-qtextedit_zoom.patch new file mode 100644 index 000000000..ad4174a1f --- /dev/null +++ b/opensuse/core/qt3/0055-qtextedit_zoom.patch @@ -0,0 +1,39 @@ +qt-bugs@ issue : +bugs.kde.org number : +applied: yes +author: Waldo Bastian + +QTextEdit::zoomIn /QTextEdit::zoomOut does not work if the original +font had its size specified in pixels instead of points. +pointSize() returns 0 in such case. + +Index: widgets/qtextedit.cpp +================================================================================ +--- src/widgets/qtextedit.cpp ++++ src/widgets/qtextedit.cpp +@@ -5767,7 +5767,11 @@ + void QTextEdit::zoomIn( int range ) + { + QFont f( QScrollView::font() ); +- f.setPointSize( QFontInfo(f).pointSize() + range ); ++ QFontInfo fi(f); ++ if (fi.pointSize() <= 0) ++ f.setPixelSize( fi.pixelSize() + range ); ++ else ++ f.setPointSize( fi.pointSize() + range ); + setFont( f ); + } + +@@ -5782,7 +5786,11 @@ + void QTextEdit::zoomOut( int range ) + { + QFont f( QScrollView::font() ); +- f.setPointSize( QMAX( 1, QFontInfo(f).pointSize() - range ) ); ++ QFontInfo fi(f); ++ if (fi.pointSize() <= 0) ++ f.setPixelSize( QMAX( 1, fi.pixelSize() - range ) ); ++ else ++ f.setPointSize( QMAX( 1, fi.pointSize() - range ) ); + setFont( f ); + } + diff --git a/opensuse/core/qt3/0056-khotkeys_input_84434.patch b/opensuse/core/qt3/0056-khotkeys_input_84434.patch new file mode 100644 index 000000000..d6092c3e9 --- /dev/null +++ b/opensuse/core/qt3/0056-khotkeys_input_84434.patch @@ -0,0 +1,22 @@ +qt-bugs@ issue : 58251 +bugs.kde.org number : 84434 +applied: no +author: Lubos Lunak + +Fixes keyboard input action in KHotKeys (see bug #84434). + +================================================================================ +--- src/kernel/qapplication_x11.cpp ++++ src/kernel/qapplication_x11.cpp +@@ -5401,8 +5401,10 @@ + qt_auto_repeat_data *d = (qt_auto_repeat_data *) arg; + if (d->error || + event->xkey.window != d->window || +- event->xkey.keycode != d->keycode) ++ event->xkey.keycode != d->keycode) { ++ d->error = TRUE; + return FALSE; ++ } + + if (event->type == XKeyPress) { + d->error = (! d->release || event->xkey.time - d->timestamp > 10); diff --git a/opensuse/core/qt3/0059-qpopup_has_mouse.patch b/opensuse/core/qt3/0059-qpopup_has_mouse.patch new file mode 100644 index 000000000..18ae0081d --- /dev/null +++ b/opensuse/core/qt3/0059-qpopup_has_mouse.patch @@ -0,0 +1,69 @@ +qt-bugs@ issue : 49417 +bugs.kde.org number : 58719 +applied: no +author: Lubos Lunak + +Hello, + + please consider applying the two attached QPopupMenu patches fixing KDE bugs + #58719 and #74778 (http://bugs.kde.org/show_bug.cgi?id=58719, + http://bugs.kde.org/show_bug.cgi?id=74778), which complain about keyboard + navigation in popup menus being very uncomfortable because of being affected + by mouse position despite mouse not being used at all. + + - hasmouse.patch - (#58719) - use keyboard to open and navigate in any popup + menu and "accidentally" hit your mouse. Depending on the mouse cursor + position either no popup entry is selected or the random popup entry + happening to be at the cursor position becomes highlighted. The patch + basically copies the 'hasmouse' code from QMenuBar which prevents the mouse + having any effect on the popup if it's outside the popup geometry. + + [ ... #74778 ... ] + +================================================================================ +--- src/widgets/qpopupmenu.cpp ++++ src/widgets/qpopupmenu.cpp +@@ -253,6 +253,7 @@ + } scroll; + QSize calcSize; + QRegion mouseMoveBuffer; ++ uint hasmouse : 1; + }; + + static QPopupMenu* active_popup_menu = 0; +@@ -272,6 +273,7 @@ + d->scroll.scrollableSize = d->scroll.topScrollableIndex = 0; + d->scroll.scrollable = QPopupMenuPrivate::Scroll::ScrollNone; + d->scroll.scrolltimer = 0; ++ d->hasmouse = 0; + isPopupMenu = TRUE; + #ifndef QT_NO_ACCEL + autoaccel = 0; +@@ -1741,6 +1743,11 @@ + + int item = itemAtPos( e->pos() ); + if ( item == -1 ) { // no valid item ++ if( !d->hasmouse ) { ++ tryMenuBar( e ); ++ return; ++ } ++ d->hasmouse = 0; + int lastActItem = actItem; + actItem = -1; + if ( lastActItem >= 0 ) +@@ -1752,6 +1759,7 @@ + } + } else { // mouse on valid item + // but did not register mouse press ++ d->hasmouse = 1; + if ( (e->state() & Qt::MouseButtonMask) && !mouseBtDn ) + mouseBtDn = TRUE; // so mouseReleaseEvent will pop down + +@@ -2160,6 +2168,7 @@ + */ + void QPopupMenu::leaveEvent( QEvent * ) + { ++ d->hasmouse = 0; + if ( testWFlags( WStyle_Tool ) && style().styleHint(QStyle::SH_PopupMenu_MouseTracking, this) ) { + int lastActItem = actItem; + actItem = -1; diff --git a/opensuse/core/qt3/0060-qpopup_ignore_mousepos.patch b/opensuse/core/qt3/0060-qpopup_ignore_mousepos.patch new file mode 100644 index 000000000..50d48bd35 --- /dev/null +++ b/opensuse/core/qt3/0060-qpopup_ignore_mousepos.patch @@ -0,0 +1,60 @@ +qt-bugs@ issue : 49417 +bugs.kde.org number : 74778 +applied: no +author: Lubos Lunak + + Hello, + + please consider applying the two attached QPopupMenu patches fixing KDE bugs + #58719 and #74778 (http://bugs.kde.org/show_bug.cgi?id=58719, + http://bugs.kde.org/show_bug.cgi?id=74778), which complain about keyboard + navigation in popup menus being very uncomfortable because of being affected + by mouse position despite mouse not being used at all. + + [... #58719 ... ] + + - ignoremousepos.patch - (#74778) - use keyboard to open some popup which + doesn't show up at mouse position (e.g. Alt+F3 with KWin or the context menu + key with some file selected in Konqueror). If the mouse is positioned in the + area where the popup shows, the random entry happening to be at the cursor + position becomes highlighted. + The patch fixes this by ignoring mouse events that happen at mouse position + which was current when the popup was shown, i.e. all mouse move events that + actually aren't triggered by mouse move are ignored. I first wanted to ignore + only the very first mouse move event (which should be caused by EnterNotify + for the popup) but I realized that Qt's event handling causes the popup to + possibly get more than just one initial move event, caused by LeaveNotify + events for normal widgets being transformed to mouse move events for the + popup, so I have no better idea how to solve this problem. + +================================================================================ +--- src/widgets/qpopupmenu.cpp ++++ src/widgets/qpopupmenu.cpp +@@ -254,6 +254,7 @@ + QSize calcSize; + QRegion mouseMoveBuffer; + uint hasmouse : 1; ++ QPoint ignoremousepos; + }; + + static QPopupMenu* active_popup_menu = 0; +@@ -1356,6 +1357,7 @@ + popupActive = -1; + if(style().styleHint(QStyle::SH_PopupMenu_SubMenuPopupDelay, this)) + d->mouseMoveBuffer = QRegion(); ++ d->ignoremousepos = QCursor::pos(); + } + + /*! +@@ -1703,6 +1705,11 @@ + + void QPopupMenu::mouseMoveEvent( QMouseEvent *e ) + { ++ if( e->globalPos() == d->ignoremousepos ) { ++ return; ++ } ++ d->ignoremousepos = QPoint(); ++ + motion++; + + if ( parentMenu && parentMenu->isPopupMenu ) { diff --git a/opensuse/core/qt3/0079-compositing-types.patch b/opensuse/core/qt3/0079-compositing-types.patch new file mode 100644 index 000000000..7899cf584 --- /dev/null +++ b/opensuse/core/qt3/0079-compositing-types.patch @@ -0,0 +1,413 @@ +qt-bugs@ issue : none +bugs.kde.org number : none +applied: no +author: Lubos Lunak + +This patch adds support for window types used for compositing (popup menu, dropdown menu, +tooltip, combobox, dnd). + +--- src/kernel/qdnd_x11.cpp.sav 2007-05-25 18:56:23.000000000 +0200 ++++ src/kernel/qdnd_x11.cpp 2007-05-31 10:30:58.000000000 +0200 +@@ -261,6 +261,7 @@ public: + QWidget(QApplication::desktop()->screen( screen ), + 0, WStyle_Customize | WStyle_Tool | WStyle_NoBorder | WX11BypassWM ), oldpmser( 0 ), oldbmser( 0 ) + { ++ x11SetWindowType( X11WindowTypeDND ); + } + + void setPixmap(QPixmap pm, QPoint hot) +@@ -1221,6 +1222,7 @@ void QDragManager::move( const QPoint & + // recreate the pixmap on the new screen... + delete qt_xdnd_deco; + qt_xdnd_deco = new QShapedPixmapWidget( screen ); ++ qt_xdnd_deco->x11SetWindowTransient( dragSource->topLevelWidget()); + if (!QWidget::mouseGrabber()) { + updatePixmap(); + qt_xdnd_deco->grabMouse(); +@@ -1774,6 +1776,7 @@ bool QDragManager::drag( QDragObject * o + + dragSource = (QWidget *)(object->parent()); + ++ qt_xdnd_deco->x11SetWindowTransient( dragSource->topLevelWidget()); + qApp->installEventFilter( this ); + qt_xdnd_source_current_time = qt_x_time; + XSetSelectionOwner( QPaintDevice::x11AppDisplay(), qt_xdnd_selection, +--- src/kernel/qapplication_x11.cpp.sav 2007-05-29 16:24:58.000000000 +0200 ++++ src/kernel/qapplication_x11.cpp 2007-05-31 10:30:58.000000000 +0200 +@@ -268,6 +268,11 @@ Atom qt_net_wm_window_type_menu = 0; + Atom qt_net_wm_window_type_utility = 0; + Atom qt_net_wm_window_type_splash = 0; + Atom qt_net_wm_window_type_override = 0; // KDE extension ++Atom qt_net_wm_window_type_dropdown_menu = 0; ++Atom qt_net_wm_window_type_popup_menu = 0; ++Atom qt_net_wm_window_type_tooltip = 0; ++Atom qt_net_wm_window_type_combo = 0; ++Atom qt_net_wm_window_type_dnd = 0; + Atom qt_net_wm_frame_strut = 0; // KDE extension + Atom qt_net_wm_state_stays_on_top = 0; // KDE extension + Atom qt_net_wm_pid = 0; +@@ -1920,6 +1925,11 @@ void qt_init_internal( int *argcptr, cha + qt_x11_intern_atom( "_NET_WM_WINDOW_TYPE_UTILITY", &qt_net_wm_window_type_utility ); + qt_x11_intern_atom( "_NET_WM_WINDOW_TYPE_SPLASH", &qt_net_wm_window_type_splash ); + qt_x11_intern_atom( "_KDE_NET_WM_WINDOW_TYPE_OVERRIDE", &qt_net_wm_window_type_override ); ++ qt_x11_intern_atom( "_NET_WM_WINDOW_TYPE_DROPDOWN_MENU", &qt_net_wm_window_type_dropdown_menu ); ++ qt_x11_intern_atom( "_NET_WM_WINDOW_TYPE_POPUP_MENU", &qt_net_wm_window_type_popup_menu ); ++ qt_x11_intern_atom( "_NET_WM_WINDOW_TYPE_TOOLTIP", &qt_net_wm_window_type_tooltip ); ++ qt_x11_intern_atom( "_NET_WM_WINDOW_TYPE_COMBO", &qt_net_wm_window_type_combo ); ++ qt_x11_intern_atom( "_NET_WM_WINDOW_TYPE_DND", &qt_net_wm_window_type_dnd ); + qt_x11_intern_atom( "_KDE_NET_WM_FRAME_STRUT", &qt_net_wm_frame_strut ); + qt_x11_intern_atom( "_NET_WM_STATE_STAYS_ON_TOP", + &qt_net_wm_state_stays_on_top ); +--- src/kernel/qwidget_x11.cpp.sav 2007-05-25 18:56:23.000000000 +0200 ++++ src/kernel/qwidget_x11.cpp 2007-05-31 10:30:58.000000000 +0200 +@@ -125,6 +125,11 @@ extern Atom qt_net_wm_window_type_menu; + extern Atom qt_net_wm_window_type_utility; + extern Atom qt_net_wm_window_type_splash; + extern Atom qt_net_wm_window_type_override; ++extern Atom qt_net_wm_window_type_dropdown_menu; ++extern Atom qt_net_wm_window_type_popup_menu; ++extern Atom qt_net_wm_window_type_combo; ++extern Atom qt_net_wm_window_type_dnd; ++extern Atom qt_net_wm_window_type_tooltip; + extern Atom qt_net_wm_pid; + extern Atom qt_net_wm_user_time; + extern Atom qt_enlightenment_desktop; +@@ -448,10 +453,6 @@ void QWidget::create( WId window, bool i + x11Colormap() ); + #endif // QT_NO_XFTFREETYPE + +- // NET window types +- long net_wintypes[7] = { 0, 0, 0, 0, 0, 0, 0 }; +- int curr_wintype = 0; +- + // NET window states + long net_winstates[6] = { 0, 0, 0, 0, 0, 0 }; + int curr_winstate = 0; +@@ -473,7 +474,6 @@ void QWidget::create( WId window, bool i + if ( testWFlags(WStyle_Splash) ) { + if (qt_net_supports(qt_net_wm_window_type_splash)) { + clearWFlags( WX11BypassWM ); +- net_wintypes[curr_wintype++] = qt_net_wm_window_type_splash; + } else { + setWFlags( WX11BypassWM | WStyle_Tool | WStyle_NoBorder ); + } +@@ -482,27 +482,22 @@ void QWidget::create( WId window, bool i + mwmhints.decorations = 0L; + mwmhints.flags |= (1L << 1); // MWM_HINTS_DECORATIONS + +- if ( testWFlags( WStyle_NoBorder ) ) { +- // override netwm type - quick and easy for KDE noborder +- net_wintypes[curr_wintype++] = qt_net_wm_window_type_override; +- } else { +- if ( testWFlags( WStyle_NormalBorder | WStyle_DialogBorder ) ) { +- mwmhints.decorations |= (1L << 1); // MWM_DECOR_BORDER +- mwmhints.decorations |= (1L << 2); // MWM_DECOR_RESIZEH +- } ++ if ( testWFlags( WStyle_NormalBorder | WStyle_DialogBorder ) ) { ++ mwmhints.decorations |= (1L << 1); // MWM_DECOR_BORDER ++ mwmhints.decorations |= (1L << 2); // MWM_DECOR_RESIZEH ++ } + +- if ( testWFlags( WStyle_Title ) ) +- mwmhints.decorations |= (1L << 3); // MWM_DECOR_TITLE ++ if ( testWFlags( WStyle_Title ) ) ++ mwmhints.decorations |= (1L << 3); // MWM_DECOR_TITLE + +- if ( testWFlags( WStyle_SysMenu ) ) +- mwmhints.decorations |= (1L << 4); // MWM_DECOR_MENU ++ if ( testWFlags( WStyle_SysMenu ) ) ++ mwmhints.decorations |= (1L << 4); // MWM_DECOR_MENU + +- if ( testWFlags( WStyle_Minimize ) ) +- mwmhints.decorations |= (1L << 5); // MWM_DECOR_MINIMIZE ++ if ( testWFlags( WStyle_Minimize ) ) ++ mwmhints.decorations |= (1L << 5); // MWM_DECOR_MINIMIZE + +- if ( testWFlags( WStyle_Maximize ) ) +- mwmhints.decorations |= (1L << 6); // MWM_DECOR_MAXIMIZE +- } ++ if ( testWFlags( WStyle_Maximize ) ) ++ mwmhints.decorations |= (1L << 6); // MWM_DECOR_MAXIMIZE + + if (testWFlags(WStyle_Tool)) { + wsa.save_under = True; +@@ -522,23 +517,6 @@ void QWidget::create( WId window, bool i + } + } + +- // ### need a better way to do this +- if (inherits("QPopupMenu")) { +- // menu netwm type +- net_wintypes[curr_wintype++] = qt_net_wm_window_type_menu; +- } else if (inherits("QToolBar")) { +- // toolbar netwm type +- net_wintypes[curr_wintype++] = qt_net_wm_window_type_toolbar; +- } else if (testWFlags(WStyle_Customize) && testWFlags(WStyle_Tool)) { +- // utility netwm type +- net_wintypes[curr_wintype++] = qt_net_wm_window_type_utility; +- } +- +- if (dialog) // dialog netwm type +- net_wintypes[curr_wintype++] = qt_net_wm_window_type_dialog; +- // normal netwm type - default +- net_wintypes[curr_wintype++] = qt_net_wm_window_type_normal; +- + // stays on top + if (testWFlags(WStyle_StaysOnTop)) { + net_winstates[curr_winstate++] = qt_net_wm_state_above; +@@ -573,6 +551,7 @@ void QWidget::create( WId window, bool i + wsa.save_under = True; + XChangeWindowAttributes( dpy, id, CWOverrideRedirect | CWSaveUnder, + &wsa ); ++ x11SetWindowType(); + } else if ( topLevel && !desktop ) { // top-level widget + QWidget *p = parentWidget(); // real parent + if (p) +@@ -632,12 +611,7 @@ void QWidget::create( WId window, bool i + else + XDeleteProperty(dpy, id, qt_xa_motif_wm_hints); + +- // set _NET_WM_WINDOW_TYPE +- if (curr_wintype > 0) +- XChangeProperty(dpy, id, qt_net_wm_window_type, XA_ATOM, 32, PropModeReplace, +- (unsigned char *) net_wintypes, curr_wintype); +- else +- XDeleteProperty(dpy, id, qt_net_wm_window_type); ++ x11SetWindowType(); + + // set _NET_WM_WINDOW_STATE + if (curr_winstate > 0) +@@ -896,6 +870,64 @@ void QWidget::reparentSys( QWidget *pare + setMouseTracking(mouse_tracking); + } + ++// Sets the EWMH (netwm) window type. Needed as a separate function ++// because create() may be too soon in some cases. ++void QWidget::x11SetWindowType( X11WindowType type ) ++{ ++ // NET window types ++ long net_wintypes[7] = { 0, 0, 0, 0, 0, 0, 0 }; ++ int curr_wintype = 0; ++ if( testWFlags(WType_Desktop)) ++ return; ++ if( type == X11WindowTypeSelect ) { ++ if ( testWFlags(WStyle_Splash)) { ++ if (qt_net_supports(qt_net_wm_window_type_splash)) { ++ net_wintypes[curr_wintype++] = qt_net_wm_window_type_splash; ++ } ++ } else if (inherits("QToolBar")) { ++ // toolbar netwm type ++ net_wintypes[curr_wintype++] = qt_net_wm_window_type_toolbar; ++ } else if (testWFlags(WStyle_Customize) && testWFlags(WStyle_Tool)) { ++ // utility netwm type ++ net_wintypes[curr_wintype++] = qt_net_wm_window_type_utility; ++ } else if (testWFlags(WType_Dialog)) { ++ // dialog netwm type ++ net_wintypes[curr_wintype++] = qt_net_wm_window_type_dialog; ++ } ++ } else if( type == X11WindowTypeCombo ) { ++ // combo netwm type ++ net_wintypes[curr_wintype++] = qt_net_wm_window_type_combo; ++ } else if( type == X11WindowTypeDND ) { ++ // dnd netwm type ++ net_wintypes[curr_wintype++] = qt_net_wm_window_type_dnd; ++ } else if( type == X11WindowTypeDropdown ) { ++ // dropdown netwm type ++ net_wintypes[curr_wintype++] = qt_net_wm_window_type_dropdown_menu; ++ } else if( type == X11WindowTypePopup ) { ++ // popup netwm type ++ net_wintypes[curr_wintype++] = qt_net_wm_window_type_popup_menu; ++ } else if( type == X11WindowTypeMenu ) { ++ // menu netwm type ++ net_wintypes[curr_wintype++] = qt_net_wm_window_type_menu; ++ } else if( type == X11WindowTypeTooltip ) { ++ // tooltip netwm type ++ net_wintypes[curr_wintype++] = qt_net_wm_window_type_tooltip; ++ } ++ ++ // normal netwm type - default ++ net_wintypes[curr_wintype++] = qt_net_wm_window_type_normal; ++ // set _NET_WM_WINDOW_TYPE ++ if (curr_wintype > 0) ++ XChangeProperty(x11Display(), winId(), qt_net_wm_window_type, XA_ATOM, 32, PropModeReplace, ++ (unsigned char *) net_wintypes, curr_wintype); ++ else ++ XDeleteProperty(x11Display(), winId(), qt_net_wm_window_type); ++} ++ ++void QWidget::x11SetWindowTransient( QWidget* parent ) ++{ ++ XSetTransientForHint( x11Display(), winId(), parent->winId()); ++} + + /*! + Translates the widget coordinate \a pos to global screen +--- src/kernel/qwidget.h.sav 2007-05-25 18:56:23.000000000 +0200 ++++ src/kernel/qwidget.h 2007-05-31 10:30:58.000000000 +0200 +@@ -464,7 +464,19 @@ public: + CGContextRef macCGContext(bool clipped=TRUE) const; + #endif + #endif +- ++#if defined(Q_WS_X11) ++ enum X11WindowType { ++ X11WindowTypeSelect, ++ X11WindowTypeCombo, ++ X11WindowTypeDND, ++ X11WindowTypeTooltip, ++ X11WindowTypeMenu, // torn-off ++ X11WindowTypeDropdown, ++ X11WindowTypePopup ++ }; ++ void x11SetWindowType( X11WindowType type = X11WindowTypeSelect ); ++ void x11SetWindowTransient( QWidget* parent ); ++#endif + void setWindowOpacity(double level); + double windowOpacity() const; + +--- src/dialogs/qdialog.cpp.sav 2007-05-25 18:56:23.000000000 +0200 ++++ src/dialogs/qdialog.cpp 2007-05-31 10:30:58.000000000 +0200 +@@ -705,7 +701,7 @@ void QDialog::show() + && qApp->mainWidget() && qApp->mainWidget()->isVisible() + && !qApp->mainWidget()->isMinimized()) { + // make sure the transient for hint is set properly for modal dialogs +- XSetTransientForHint( x11Display(), winId(), qApp->mainWidget()->winId() ); ++ x11SetWindowTransient( qApp->mainWidget()); + } + #endif // Q_WS_X11 + +--- src/widgets/qtooltip.cpp.sav 2007-05-25 18:56:23.000000000 +0200 ++++ src/widgets/qtooltip.cpp 2007-05-31 10:30:58.000000000 +0200 +@@ -72,6 +72,7 @@ public: + polish(); + setText(text); + adjustSize(); ++ x11SetWindowType( X11WindowTypeTooltip ); + } + void setWidth( int w ) { resize( sizeForWidth( w ) ); } + }; +@@ -528,6 +529,10 @@ void QTipManager::showTip() + if (!widget) + return; + ++#ifdef Q_WS_X11 ++ label->x11SetWindowTransient( widget->topLevelWidget()); ++#endif ++ + #ifdef Q_WS_MAC + QRect screen = QApplication::desktop()->availableGeometry( scr ); + #else +--- src/widgets/qcombobox.cpp.sav 2007-05-25 18:56:23.000000000 +0200 ++++ src/widgets/qcombobox.cpp 2007-05-31 10:49:13.000000000 +0200 +@@ -389,12 +389,8 @@ public: + inline QListBox * listBox() { return lBox; } + inline QComboBoxPopup * popup() { return pop; } + void updateLinedGeometry(); +- +- void setListBox( QListBox *l ) { lBox = l ; usingLBox = TRUE; +- l->setMouseTracking( TRUE );} +- +- void setPopupMenu( QComboBoxPopup * pm, bool isPopup=TRUE ) +- { pop = pm; if(isPopup) usingLBox = FALSE; } ++ void setListBox( QListBox *l ); ++ void setPopupMenu( QComboBoxPopup * pm, bool isPopup=TRUE ); + + int current; + int maxCount; +@@ -440,6 +436,30 @@ void QComboBoxData::updateLinedGeometry( + ed->setGeometry( r ); + } + ++void QComboBoxData::setListBox( QListBox *l ) ++{ ++ lBox = l; ++ usingLBox = TRUE; ++ l->setMouseTracking( TRUE ); ++#ifdef Q_WS_X11 ++ l->x11SetWindowType( QWidget::X11WindowTypeCombo ); ++ l->x11SetWindowTransient( combo->topLevelWidget()); ++#endif ++} ++ ++void QComboBoxData::setPopupMenu( QComboBoxPopup * pm, bool isPopup ) ++{ ++ pop = pm; ++ if(isPopup) ++ usingLBox = FALSE; ++#ifdef Q_WS_X11 ++ if( pm ) { ++ pm->x11SetWindowType( QWidget::X11WindowTypeCombo ); ++ pm->x11SetWindowTransient( combo->topLevelWidget()); ++ } ++#endif ++} ++ + static inline bool checkInsertIndex( const char *method, const char * name, + int count, int *index) + { +--- src/widgets/qpopupmenu.cpp.sav 2007-05-25 18:56:23.000000000 +0200 ++++ src/widgets/qpopupmenu.cpp 2007-05-31 11:09:22.000000000 +0200 +@@ -298,6 +298,9 @@ QPopupMenu::QPopupMenu( QWidget *parent, + connectModalRecursionSafety = 0; + + setFocusPolicy( StrongFocus ); ++#ifdef Q_WS_X11 ++ x11SetWindowType( X11WindowTypePopup ); ++#endif + } + + /*! +@@ -537,6 +540,29 @@ void QPopupMenu::popup( const QPoint &po + emit aboutToShow(); + updateSize(TRUE); + } ++#ifdef Q_WS_X11 ++#ifndef QT_NO_MENUBAR ++ QMenuData *top = this; // find top level ++ while ( top->parentMenu ) ++ top = top->parentMenu; ++ if( top->isMenuBar ) ++ x11SetWindowType( X11WindowTypeDropdown ); ++ if( parentMenu && parentMenu->isMenuBar ) ++ x11SetWindowTransient( static_cast< QMenuBar* >( parentMenu )->topLevelWidget()); ++#endif ++ if( parentMenu && !parentMenu->isMenuBar ) ++ x11SetWindowTransient( static_cast< QPopupMenu* >( parentMenu )); ++ if( !parentMenu ) { ++ // hackish ... try to find the main window related to this popup ++ QWidget* parent = parentWidget() ? parentWidget()->topLevelWidget() : NULL; ++ if( parent == NULL ) ++ parent = QApplication::widgetAt( pos ); ++ if( parent == NULL ) ++ parent = qApp->activeWindow(); ++ if( parent != NULL ) ++ x11SetWindowTransient( parent ); ++ } ++#endif + + int sw = screen.width(); // screen width + int sh = screen.height(); // screen height +@@ -1390,6 +1416,13 @@ void QPopupMenu::hide() + #if defined(QT_ACCESSIBILITY_SUPPORT) + QAccessible::updateAccessibility( this, 0, QAccessible::PopupMenuEnd ); + #endif ++#ifndef QT_NO_MENUBAR ++ QMenuData *top = this; // find top level ++ while ( top->parentMenu ) ++ top = top->parentMenu; ++ if( top->isMenuBar ) ++ x11SetWindowType( X11WindowTypePopup ); // reset ++#endif + parentMenu = 0; + hidePopups(); + QWidget::hide(); +@@ -2713,6 +2746,9 @@ void QPopupMenu::toggleTearOff() + geometry().topLeft(), FALSE ); + p->mitems->setAutoDelete( FALSE ); + p->tornOff = TRUE; ++#ifdef Q_WS_X11 ++ p->x11SetWindowType( X11WindowTypeMenu ); ++#endif + for ( QMenuItemListIt it( *mitems ); it.current(); ++it ) { + if ( it.current()->id() != QMenuData::d->aInt && !it.current()->widget() ) + p->mitems->append( it.current() ); diff --git a/opensuse/core/qt3/0080-net-wm-sync-request.patch b/opensuse/core/qt3/0080-net-wm-sync-request.patch new file mode 100644 index 000000000..b3e23cd13 --- /dev/null +++ b/opensuse/core/qt3/0080-net-wm-sync-request.patch @@ -0,0 +1,301 @@ +This qt-copy patch has been slightly modified to apply to the SUSE package +(does not apply directly because of the immodule patch). + +--- src/kernel/qwidget_x11.cpp.sav 2007-08-29 15:04:42.000000000 +0200 ++++ src/kernel/qwidget_x11.cpp 2007-08-29 15:06:17.000000000 +0200 +@@ -85,6 +85,12 @@ static QWidget *keyboardGrb = 0; + extern Time qt_x_time; + extern Time qt_x_user_time; + ++#ifndef QT_NO_XSYNC ++extern Atom qt_net_wm_sync_request_counter; ++extern Atom qt_net_wm_sync_request; ++extern bool qt_use_xsync; ++#endif ++ + // defined in qfont_x11.cpp + extern bool qt_has_xft; + +@@ -593,11 +599,14 @@ void QWidget::create( WId window, bool i + + XResizeWindow( dpy, id, crect.width(), crect.height() ); + XStoreName( dpy, id, qAppName() ); +- Atom protocols[4]; ++ Atom protocols[5]; + int n = 0; + protocols[n++] = qt_wm_delete_window; // support del window protocol + protocols[n++] = qt_wm_take_focus; // support take focus window protocol + protocols[n++] = qt_net_wm_ping; // support _NET_WM_PING protocol ++#ifndef QT_NO_XSYNC ++ protocols[n++] = qt_net_wm_sync_request;// support the _NET_WM_SYNC_REQUEST protocol ++#endif + if ( testWFlags( WStyle_ContextHelp ) ) + protocols[n++] = qt_net_wm_context_help; + XSetWMProtocols( dpy, id, protocols, n ); +@@ -623,6 +632,14 @@ void QWidget::create( WId window, bool i + XChangeProperty(dpy, id, qt_net_wm_pid, XA_CARDINAL, 32, PropModeReplace, + (unsigned char *) &curr_pid, 1); + ++#ifndef QT_NO_XSYNC ++ // set _NET_WM_SYNC_COUNTER ++ createSyncCounter(); ++ long counterVal = topData()->syncCounter; ++ XChangeProperty( dpy, id, qt_net_wm_sync_request_counter, XA_CARDINAL, 32, PropModeReplace, ++ (unsigned char*) &counterVal, 1); ++#endif ++ + // when we create a toplevel widget, the frame strut should be dirty + fstrut_dirty = 1; + +@@ -722,6 +739,9 @@ void QWidget::destroy( bool destroyWindo + if ( destroyWindow ) + qt_XDestroyWindow( this, x11Display(), winid ); + } ++#ifndef QT_NO_XSYNC ++ destroySyncCounter(); ++#endif + setWinId( 0 ); + + extern void qPRCleanup( QWidget *widget ); // from qapplication_x11.cpp +@@ -781,6 +801,10 @@ void QWidget::reparentSys( QWidget *pare + destroyInputContext(); + } + ++#ifndef QT_NO_XSYNC ++ destroySyncCounter(); ++#endif ++ + if ( isTopLevel() || !parent ) // we are toplevel, or reparenting to toplevel + topData()->parentWinId = 0; + +@@ -2464,6 +2488,11 @@ void QWidget::createTLSysExtra() + // created lazily + extra->topextra->xic = 0; + #endif ++#ifndef QT_NO_XSYNC ++ extra->topextra->syncCounter = 0; ++ extra->topextra->syncRequestValue[0] = 0; ++ extra->topextra->syncRequestValue[1] = 0; ++#endif + } + + void QWidget::deleteTLSysExtra() +@@ -2510,6 +2539,51 @@ void QWidget::checkChildrenDnd() + } + } + ++ ++#ifndef QT_NO_XSYNC ++// create a window's XSyncCounter ++void QWidget::createSyncCounter() ++{ ++ if( !qt_use_xsync || !isTopLevel() || topData()->syncCounter ) ++ return; ++ XSyncValue zero; ++ XSyncIntToValue( &zero, 0 ); ++ topData()->syncCounter = XSyncCreateCounter( x11Display(), zero ); ++} ++ ++// destroy a window's XSyncCounter ++void QWidget::destroySyncCounter() ++{ ++ if( !qt_use_xsync || !extra || !extra->topextra ++ || !extra->topextra->syncCounter ) ++ return; ++ XSyncDestroyCounter( x11Display(), extra->topextra->syncCounter ); ++ extra->topextra->syncCounter = 0; ++} ++ ++// increment a window's XSyncCounter ++void QWidget::incrementSyncCounter() ++{ ++ if( qt_use_xsync && topData()->syncCounter && ++ !(topData()->syncRequestValue[0] == 0 && ++ topData()->syncRequestValue[1] == 0) ) { ++ XSyncValue val; ++ XSyncIntsToValue( &val, topData()->syncRequestValue[ 0 ], topData()->syncRequestValue[ 1 ] ); ++ XSyncSetCounter( x11Display(), topData()->syncCounter, val ); ++ topData()->syncRequestValue[0] = topData()->syncRequestValue[1] = 0; ++ } ++} ++ ++// handle _NET_WM_SYNC_REQUEST ++void QWidget::handleSyncRequest( void* ev ) ++{ ++ XEvent* xev = (XEvent*)ev; ++ topData()->syncRequestValue[ 0 ] = xev->xclient.data.l[ 2 ]; ++ topData()->syncRequestValue[ 1 ] = xev->xclient.data.l[ 3 ]; ++} ++#endif // QT_NO_XSYNC ++ ++ + /*! + \property QWidget::acceptDrops + \brief whether drop events are enabled for this widget +--- src/kernel/qt_x11_p.h.sav 2007-08-29 15:04:42.000000000 +0200 ++++ src/kernel/qt_x11_p.h 2007-08-29 15:05:27.000000000 +0200 +@@ -174,6 +174,11 @@ extern "C" { + #endif // QT_NO_XRENDER + + ++#ifndef QT_NO_XSYNC ++# include ++#endif // QT_NO_XSYNC ++ ++ + #ifndef QT_NO_XKB + # include + #endif // QT_NO_XKB +--- src/kernel/qwidget.h.sav 2007-08-29 15:04:42.000000000 +0200 ++++ src/kernel/qwidget.h 2007-08-29 15:05:52.000000000 +0200 +@@ -605,6 +605,14 @@ private: + void focusInputContext(); + void unfocusInputContext(); + void checkChildrenDnd(); ++ ++#ifndef QT_NO_XSYNC ++ void createSyncCounter(); ++ void destroySyncCounter(); ++ void incrementSyncCounter(); ++ void handleSyncRequest( void* ev ); ++#endif ++ + #elif defined(Q_WS_MAC) + uint own_id : 1, macDropEnabled : 1; + EventHandlerRef window_event; +@@ -986,6 +994,10 @@ struct Q_EXPORT QTLWExtra { + #if defined(QT_NO_IM_EXTENSIONS) + void *xic; // Input Context + #endif ++#ifndef QT_NO_XSYNC ++ ulong syncCounter; ++ uint syncRequestValue[2]; ++#endif + #endif + #if defined(Q_WS_MAC) + WindowGroupRef group; +--- src/kernel/qapplication_x11.cpp.sav 2007-08-29 15:04:42.000000000 +0200 ++++ src/kernel/qapplication_x11.cpp 2007-08-29 15:05:27.000000000 +0200 +@@ -288,6 +288,11 @@ Atom *qt_net_supported_list = 0; + Window *qt_net_virtual_root_list = 0; + + ++// X11 SYNC support ++#ifndef QT_NO_XSYNC ++Atom qt_net_wm_sync_request_counter = 0; ++Atom qt_net_wm_sync_request = 0; ++#endif + + // client leader window + Window qt_x11_wm_client_leader = 0; +@@ -312,6 +317,13 @@ static int xrandr_eventbase; + // Display + Q_EXPORT bool qt_use_xrender = FALSE; + ++#ifndef QT_NO_XSYNC ++// True if SYNC extension exists on the connected display ++bool qt_use_xsync = FALSE; ++static int xsync_eventbase; ++static int xsync_errorbase; ++#endif ++ + // modifier masks for alt/meta - detected when the application starts + static long qt_alt_mask = 0; + static long qt_meta_mask = 0; +@@ -2007,6 +2019,11 @@ void qt_init_internal( int *argcptr, cha + qt_x11_intern_atom( "UTF8_STRING", &qt_utf8_string ); + qt_x11_intern_atom( "_SGI_DESKS_MANAGER", &qt_sgi_desks_manager ); + ++#ifndef QT_NO_XSYNC ++ qt_x11_intern_atom( "_NET_WM_SYNC_REQUEST_COUNTER", &qt_net_wm_sync_request_counter ); ++ qt_x11_intern_atom( "_NET_WM_SYNC_REQUEST", &qt_net_wm_sync_request ); ++#endif ++ + qt_xdnd_setup(); + qt_x11_motifdnd_init(); + +@@ -2043,6 +2060,15 @@ void qt_init_internal( int *argcptr, cha + } + #endif // QT_NO_XRENDER + ++#ifndef QT_NO_XSYNC ++ // Try to initialize SYNC extension on the connected display ++ int xsync_major, xsync_minor; ++ if ( XSyncQueryExtension( appDpy, &xsync_eventbase, &xsync_errorbase ) && ++ XSyncInitialize( appDpy, &xsync_major, &xsync_minor ) ) { ++ qt_use_xsync = TRUE; ++ } ++#endif ++ + #ifndef QT_NO_XKB + // If XKB is detected, set the GrabsUseXKBState option so input method + // compositions continue to work (ie. deadkeys) +@@ -3196,6 +3222,10 @@ int QApplication::x11ClientMessage(QWidg + XSendEvent( event->xclient.display, event->xclient.window, + False, SubstructureNotifyMask|SubstructureRedirectMask, event ); + } ++#ifndef QT_NO_XSYNC ++ } else if (a == qt_net_wm_sync_request ) { ++ widget->handleSyncRequest( event ); ++#endif + } + } else if ( event->xclient.message_type == qt_qt_scrolldone ) { + widget->translateScrollDoneEvent(event); +@@ -5818,6 +5848,21 @@ bool QETWidget::translateScrollDoneEvent + return FALSE; + } + ++#if defined(Q_C_CALLBACKS) ++extern "C" { ++#endif ++#ifndef QT_NO_XSYNC ++static Bool qt_net_wm_sync_request_scanner(Display*, XEvent* event, XPointer arg) ++{ ++ return (event->type == ClientMessage && event->xclient.window == *(Window*)arg ++ && event->xclient.message_type == qt_wm_protocols ++ && event->xclient.data.l[ 0 ] == qt_net_wm_sync_request ); ++} ++#endif ++ ++#if defined(Q_C_CALLBACKS) ++} ++#endif + + // + // ConfigureNotify (window move and resize) event translation +@@ -5849,6 +5894,7 @@ bool QETWidget::translateConfigEvent( co + if (! extra || extra->compress_events) { + // ConfigureNotify compression for faster opaque resizing + XEvent otherEvent; ++ int compressed_configs = 0; + while ( XCheckTypedWindowEvent( x11Display(), winId(), ConfigureNotify, + &otherEvent ) ) { + if ( qt_x11EventFilter( &otherEvent ) ) +@@ -5869,7 +5915,18 @@ bool QETWidget::translateConfigEvent( co + newCPos.ry() = otherEvent.xconfigure.y + + otherEvent.xconfigure.border_width; + } ++ ++compressed_configs; ++ } ++#ifndef QT_NO_XSYNC ++ // _NET_WM_SYNC_REQUEST compression ++ Window wid = winId(); ++ while ( compressed_configs && ++ XCheckIfEvent( x11Display(), &otherEvent, ++ qt_net_wm_sync_request_scanner, (XPointer)&wid ) ) { ++ handleSyncRequest( (void*)&otherEvent ); ++ --compressed_configs; + } ++#endif + } + + QRect cr ( geometry() ); +@@ -5923,6 +5980,8 @@ bool QETWidget::translateConfigEvent( co + repaint( !testWFlags(WResizeNoErase) || transbg ); + } + ++ incrementSyncCounter(); ++ + return TRUE; + } + diff --git a/opensuse/core/qt3/0085-fix-buildkey.diff b/opensuse/core/qt3/0085-fix-buildkey.diff new file mode 100644 index 000000000..5891d6144 --- /dev/null +++ b/opensuse/core/qt3/0085-fix-buildkey.diff @@ -0,0 +1,22 @@ +--- configure ++++ configure +@@ -3140,15 +3140,15 @@ case "$COMPILER" in + g++*) + # GNU C++ + QMAKE_CONF_COMPILER=`grep "QMAKE_CXX[^_A-Z0-9a-z]" $QMAKESPEC/qmake.conf | sed "s,.* *= *\(.*\)$,\1,"` +- COMPILER_VERSION=`${QMAKE_CONF_COMPILER} --version 2>/dev/null` ++ COMPILER_VERSION=`${QMAKE_CONF_COMPILER} --version 2>/dev/null | sed 's,^[^0-9]*,,g'` + case "$COMPILER_VERSION" in +- *2.95.*) ++ 2.95.*) + COMPILER_VERSION="2.95.*" + ;; +- *3.*) ++ 3.*) + COMPILER_VERSION="3.*" + ;; +- *4.*) ++ 4.*) + COMPILER_VERSION="4" + ;; + *) diff --git a/opensuse/core/qt3/add_qexport_visibility.patch b/opensuse/core/qt3/add_qexport_visibility.patch new file mode 100644 index 000000000..da256192c --- /dev/null +++ b/opensuse/core/qt3/add_qexport_visibility.patch @@ -0,0 +1,63 @@ +Index: src/kernel/qgplugin.h +================================================================================ +--- src/kernel/qgplugin.h ++++ src/kernel/qgplugin.h +@@ -90,35 +90,19 @@ + return i->iface(); \ + } + +-# ifdef Q_WS_WIN +-# ifdef Q_CC_BOR +-# define Q_EXPORT_PLUGIN(PLUGIN) \ +- Q_PLUGIN_VERIFICATION_DATA \ +- Q_EXTERN_C __declspec(dllexport) \ +- const char * __stdcall qt_ucm_query_verification_data() \ +- { return qt_ucm_verification_data; } \ +- Q_EXTERN_C __declspec(dllexport) QUnknownInterface* \ +- __stdcall ucm_instantiate() \ +- Q_PLUGIN_INSTANTIATE( PLUGIN ) +-# else +-# define Q_EXPORT_PLUGIN(PLUGIN) \ +- Q_PLUGIN_VERIFICATION_DATA \ +- Q_EXTERN_C __declspec(dllexport) \ +- const char *qt_ucm_query_verification_data() \ +- { return qt_ucm_verification_data; } \ +- Q_EXTERN_C __declspec(dllexport) QUnknownInterface* ucm_instantiate() \ +- Q_PLUGIN_INSTANTIATE( PLUGIN ) +-# endif +-# else +-# define Q_EXPORT_PLUGIN(PLUGIN) \ ++#if defined(Q_WS_WIN) && defined(Q_CC_BOR) ++# define Q_STDCALL __stdcall ++#else ++# define Q_STDCALL ++#endif ++ ++#define Q_EXPORT_PLUGIN(PLUGIN) \ + Q_PLUGIN_VERIFICATION_DATA \ +- Q_EXTERN_C \ +- const char *qt_ucm_query_verification_data() \ ++ Q_EXTERN_C Q_EXPORT \ ++ const char * Q_STDCALL qt_ucm_query_verification_data() \ + { return qt_ucm_verification_data; } \ +- Q_EXTERN_C QUnknownInterface* ucm_instantiate() \ ++ Q_EXTERN_C Q_EXPORT QUnknownInterface* Q_STDCALL ucm_instantiate() \ + Q_PLUGIN_INSTANTIATE( PLUGIN ) +-# endif +- + #endif + + struct QUnknownInterface; +--- src/tools/qglobal.h ++++ src/tools/qglobal.h +@@ -882,6 +882,10 @@ + # define Q_TEMPLATE_EXTERN + # undef Q_DISABLE_COPY /* avoid unresolved externals */ + # endif ++#elif defined(Q_CC_GNU) && __GNUC__ - 0 >= 4 ++# define Q_EXPORT __attribute__((visibility("default"))) ++# undef QT_MAKEDLL /* ignore these for other platforms */ ++# undef QT_DLL + #else + # undef QT_MAKEDLL /* ignore these for other platforms */ + # undef QT_DLL diff --git a/opensuse/core/qt3/aliasing.diff b/opensuse/core/qt3/aliasing.diff new file mode 100644 index 000000000..88ef366b5 --- /dev/null +++ b/opensuse/core/qt3/aliasing.diff @@ -0,0 +1,11 @@ +--- src/qt.pro ++++ src/qt.pro +@@ -40,6 +40,8 @@ + XML_CPP = xml + STYLES_CPP = styles + EMBEDDED_CPP = embedded ++QMAKE_CFLAGS += -fno-strict-aliasing ++QMAKE_CFLAGS_MT += -fno-strict-aliasing + + win32 { + contains(QT_PRODUCT,qt-internal) { diff --git a/opensuse/core/qt3/assistant3.desktop b/opensuse/core/qt3/assistant3.desktop new file mode 100644 index 000000000..8cb79809c --- /dev/null +++ b/opensuse/core/qt3/assistant3.desktop @@ -0,0 +1,10 @@ +[Desktop Entry] +Categories=Qt;Development; +Encoding=UTF-8 +Exec=/usr/lib/qt3/bin/assistant +Name=Qt Assistant +GenericName=Document Browser +X-KDE-StartupNotify=true +Icon=assistant3 +Terminal=false +Type=Application diff --git a/opensuse/core/qt3/assistant3.png b/opensuse/core/qt3/assistant3.png new file mode 100644 index 000000000..a50dc9ccb Binary files /dev/null and b/opensuse/core/qt3/assistant3.png differ diff --git a/opensuse/core/qt3/attributes b/opensuse/core/qt3/attributes new file mode 100644 index 000000000..d43c40132 --- /dev/null +++ b/opensuse/core/qt3/attributes @@ -0,0 +1,72 @@ +summary.qt3 A library for developing applications with graphical user interfaces +summary.qt3-devel Include Files and Libraries mandatory for Development +summary.qt3-devel-doc Documentation for the Qt 3 Development Kit +summary.qt3-devel-examples Programming Examples for Qt 3 +summary.qt3-devel-tools User Interface Builder and other tools (designer, assistant, linguist) +summary.qt3-extensions Qt3 Extensions +summary.qt3-man Qt 3 Man Pages +summary.qt3-mysql MySQL Plug-In for Qt +summary.qt3-postgresql A PostgreSQL Plug-In for Qt +summary.qt3-sqlite SQLite Database Plug-In for Qt +summary.qt3-unixODBC A UnixODBC Plug-In for Qt ++description.qt3 +Qt is a program library for developing applications with graphical user +interfaces. It allows you to rapidly develop professional programs. The +Qt library is available not only for Linux but for a great number of +Unices and even for Windows. Thus it is possible to write programs that +may be easily ported to those platforms. + +You need a license for using Qt with a non-GPL application, which can +be acquired from sales@trolltech.com. + +See /usr/share/doc/packages/qt3 for details about the new features of +the current Qt library! +-description.qt3 ++description.qt3-devel +You need this package if you want to compile programs with Qt 3. It +contains the "Qt Crossplatform Development Kit 2". Under /usr/lib/qt3 +you will find include files. + +You need a license for using Qt with a non-GPL application. A license +can be acquired at sales@trolltech.com. +-description.qt3-devel ++description.qt3-devel-doc +This package contains the documentation for the Qt 3 Development Kit. + +You will find documentation, precompiled examples, and a tutorial for +getting started with Qt in /usr/lib/qt3/doc. +-description.qt3-devel-doc ++description.qt3-devel-examples +This package contains small executables with code to demonstrate Qt +programming. + +Have a look in /usr/share/doc/packages/qt3/examples/. +-description.qt3-devel-examples ++description.qt3-devel-tools +The designer creates .ui files. The uic generates C++ code from these +files. The package also contains the Qt Assistant (Qt documentation +browser) and the Qt Linguist (for translations). +-description.qt3-devel-tools ++description.qt3-extensions +This package contains extension libraries for Qt 3, such as the +Netscape plug-in modules. +-description.qt3-extensions ++description.qt3-man +This package contains all the man pages for all the Qt 3 classes. +-description.qt3-man ++description.qt3-mysql +Plug-in for using the MySQL database with the generic Qt database +interface. +-description.qt3-mysql ++description.qt3-postgresql +A Plug-in for using the PostgreSQL database with the generic Qt +database interface. +-description.qt3-postgresql ++description.qt3-sqlite +The Qt database supports SQLite with this plug-in. (No configured and +running daemon is required.) +-description.qt3-sqlite ++description.qt3-unixODBC +A plug-in for using UnixODBC supported databases with the generic Qt +database interface. +-description.qt3-unixODBC diff --git a/opensuse/core/qt3/baselibs.conf b/opensuse/core/qt3/baselibs.conf new file mode 100644 index 000000000..5f7a62512 --- /dev/null +++ b/opensuse/core/qt3/baselibs.conf @@ -0,0 +1,12 @@ +qt3 +qt3-devel +arch ppc package qt3-devel-doc +arch sparcv9 package qt3-devel-doc +arch ppc package qt3-devel-tools +arch sparcv9 package qt3-devel-tools +arch ppc package qt3-mysql +arch sparcv9 package qt3-mysql +arch ppc package qt3-postgresql +arch sparcv9 package qt3-postgresql +arch ppc package qt3-unixODBC +arch sparcv9 package qt3-unixODBC diff --git a/opensuse/core/qt3/build_script.sh b/opensuse/core/qt3/build_script.sh new file mode 100644 index 000000000..e9c47db13 --- /dev/null +++ b/opensuse/core/qt3/build_script.sh @@ -0,0 +1,99 @@ + +function fix_qconfig_h { + mv include/qconfig.h include/qconfig.h.orig + sed -e '1i\ +#ifndef SuSE_QCONFIG_ALREADY_INCLUDED \ +#define SuSE_QCONFIG_ALREADY_INCLUDED 1 \ +#define PLUGIN_PATH_EXTENSION "'$PLUGIN_PATH'" \ + ' -e s@${RPM_BUILD_ROOT}@/@ -e '$a\ +#endif' include/qconfig.h.orig \ + > include/qconfig.h + +} + +function call_configure { + EXTRA_OPTIONS=$@ + OPENGL="-dlopen-opengl" + case $EXTRA_OPTIONS in + *-static*) + OPENGL="-no-dlopen-opengl" + ;; + *) + ;; + esac + + [ "$WLIB" == "lib64" ] && PLATFORM=linux-g++-64 || PLATFORM=linux-g++ + LARGEFILE="-largefile" + XCURSOR="-xcursor" + XFT="-xft -xrender -I/usr/include/freetype2/ " + [ -e /usr/$WLIB/libmng.so ] && LIBMNG="-system-libmng -plugin-imgfmt-mng" || LIBMNG="-qt-libmng " + PGSQL="-plugin-sql-psql -I/usr/include -I/usr/include/pgsql/ -I/usr/include/pgsql/server" + ODBC="-plugin-sql-odbc" + + if [ -f /.buildenv ] && grep -q BUILD_BASENAME=beta- /.buildenv ; then + export NO_BRP_STRIP_DEBUG=true + export DEBUG="-debug" + else + export DEBUG="-release" + fi + + PREFIX=/usr/lib/qt3/ + export LD_LIBRARY_PATH="/${PWD}/lib/" + ORACLE="/opt/oracle/product/8.1.6/rdbms/demo/" + [ -d $ORACLE ] && \ + ORACLE="-plugin-sql-oci -I$ORACLE" || \ + ORACLE="" + + for i in mkspecs/linux-*/qmake.conf ; do + sed \ +-e "s,QMAKE_CFLAGS_RELEASE[\t ]*=.*,QMAKE_CFLAGS_RELEASE = $RPM_OPT_FLAGS," \ +-e "s,QMAKE_CFLAGS[\t ]*=.*,QMAKE_CFLAGS = -pipe $RPM_OPT_FLAGS," \ +-e "s,QMAKE_INCDIR[\t ]*=.*,QMAKE_INCDIR = /usr/include/," \ +-e "s,QMAKE_LIBDIR[\t ]*=.*,QMAKE_LIBDIR = /usr/$WLIB/," \ +-e "s,QMAKE_LIBDIR_X11[\t ]*=.*,QMAKE_LIBDIR_X11 = /usr/X11R6/$WLIB/," \ +-e "s,QMAKE_LIBDIR_QT[\t ]*=.*,QMAKE_LIBDIR_QT = \$(QTDIR)/$WLIB/," \ +-e "s,QMAKE_INCDIR_OPENGL[\t ]*=.*,QMAKE_INCDIR_OPENGL = /usr/include/," \ +-e "s,QMAKE_LIBDIR_OPENGL[\t ]*=.*,QMAKE_LIBDIR_OPENGL = /usr/$WLIB/," \ + $i > ${i}.new &&\ + mv ${i}.new $i + done + sed -e "s/^CXXFLAGS=/CXXFLAGS= $RPM_OPT_FLAGS/" < qmake/Makefile.unix > qmake/Makefile.unix.tmp && mv qmake/Makefile.unix.tmp qmake/Makefile.unix +# ld -Bsymbolic-functions -v >& /dev/null && perl -pi -e 's/^QMAKE_VARS=$/QMAKE_VARS="QMAKE_LFLAGS=-Wl,-Bdirect QMAKE_LFLAGS+=-Wl,-Bsymbolic-functions"/' configure + +# png is direct linked, other picture formats are loaded at runtime + OPTIONS="-platform $PLATFORM -qt-gif -stl $DEBUG \ + -system-zlib -system-libjpeg -system-libpng \ + -plugin-imgfmt-jpeg -inputmethod \ + -nis -cups -ipv6 $OPENGL \ + -xkb $LIBMNG -no-g++-exceptions $LARGEFILE $XCURSOR \ + $XFT $XINERAMA -sm -L/usr/$WLIB -L/usr/X11R6/$WLIB \ + -plugin-sql-mysql -I/usr/include/mysql/ \ + -tablet $ORACLE $PGSQL $ODBC -plugin-sql-sqlite $NEWABI \ + -prefix $PREFIX -libdir $PREFIX/$WLIB" + +# use styles as plugins, beside platinum. leave windowsxp disabled +# nice idea, but too many dumb apps have a hardcoded style list :( +# for i in plugins/src/styles/* ; do +# if [ -d $i -a ${i##*/} != "platinum" -a ${i##*/} != "windowsxp" ] +# then OPTIONS="$OPTIONS -plugin-style-${i##*/}" +# fi +# done + + [ -e /usr/$WLIB/mysql/ ] && OPTIONS="$OPTIONS -L/usr/$WLIB/mysql/" + +# get sure we use the lib from the system + rm -rf src/3rdparty/{libjpeg,libmng,libpng,sqlite,zlib} + + export PATH=$PWD/bin:$PATH + echo yes|./configure $OPTIONS $EXTRA_OPTIONS + +# make sure we don't have a crippled qt + grep -q "full-config\"" include/qconfig.h || { echo "build key is wrong"; exit 42; } +} + +function post_install { + if echo $RPM_OPT_FLAGS | grep -q -- -g ; then + export NO_BRP_STRIP_DEBUG=true + fi +} + diff --git a/opensuse/core/qt3/designer.desktop b/opensuse/core/qt3/designer.desktop new file mode 100644 index 000000000..e0026aef9 --- /dev/null +++ b/opensuse/core/qt3/designer.desktop @@ -0,0 +1,11 @@ +[Desktop Entry] +Encoding=UTF-8 +Exec=designer +Name=Qt Designer +GenericName=Interface Designer +X-KDE-StartupNotify=true +MimeType=application/x-designer; +Icon=designer +Terminal=false +Type=Application + diff --git a/opensuse/core/qt3/designer.png b/opensuse/core/qt3/designer.png new file mode 100644 index 000000000..3f6fa7a10 Binary files /dev/null and b/opensuse/core/qt3/designer.png differ diff --git a/opensuse/core/qt3/enable-designer-plugins.diff b/opensuse/core/qt3/enable-designer-plugins.diff new file mode 100644 index 000000000..41147984d --- /dev/null +++ b/opensuse/core/qt3/enable-designer-plugins.diff @@ -0,0 +1,11 @@ +--- tools/designer/plugins/plugins.pro ++++ tools/designer/plugins/plugins.pro +@@ -4,6 +4,7 @@ + dlg \ + glade \ + rc \ +- kdevdlg ++ kdevdlg \ ++ glade + shared:SUBDIRS *= $$PLUGIN_DIRS + dll:SUBDIRS *= $$PLUGIN_DIRS diff --git a/opensuse/core/qt3/external-libs.diff b/opensuse/core/qt3/external-libs.diff new file mode 100644 index 000000000..dcf7f04ae --- /dev/null +++ b/opensuse/core/qt3/external-libs.diff @@ -0,0 +1,78 @@ +--- plugins/src/sqldrivers/sqlite/sqlite.pro ++++ plugins/src/sqldrivers/sqlite/sqlite.pro +@@ -10,6 +10,9 @@ + + unix { + OBJECTS_DIR = .obj ++ !contains( LIBS, .*sqlite.* ) { ++ LIBS *= -lsqlite ++ } + } + + win32 { +@@ -23,54 +26,6 @@ + # } + } + +-!contains( LIBS, .*sqlite.* ) { +- INCLUDEPATH += ../../../../src/3rdparty/sqlite +- +- HEADERS += ../../../../src/3rdparty/sqlite/btree.h \ +- ../../../../src/3rdparty/sqlite/config.h \ +- ../../../../src/3rdparty/sqlite/hash.h \ +- ../../../../src/3rdparty/sqlite/opcodes.h \ +- ../../../../src/3rdparty/sqlite/os.h \ +- ../../../../src/3rdparty/sqlite/pager.h \ +- ../../../../src/3rdparty/sqlite/parse.h \ +- ../../../../src/3rdparty/sqlite/sqlite.h \ +- ../../../../src/3rdparty/sqlite/sqliteInt.h \ +- ../../../../src/3rdparty/sqlite/vdbe.h \ +- ../../../../src/3rdparty/sqlite/vdbeInt.h +- +- SOURCES += ../../../../src/3rdparty/sqlite/attach.c \ +- ../../../../src/3rdparty/sqlite/auth.c \ +- ../../../../src/3rdparty/sqlite/btree.c \ +- ../../../../src/3rdparty/sqlite/btree_rb.c \ +- ../../../../src/3rdparty/sqlite/build.c \ +- ../../../../src/3rdparty/sqlite/copy.c \ +- ../../../../src/3rdparty/sqlite/date.c \ +- ../../../../src/3rdparty/sqlite/delete.c \ +- ../../../../src/3rdparty/sqlite/expr.c \ +- ../../../../src/3rdparty/sqlite/func.c \ +- ../../../../src/3rdparty/sqlite/hash.c \ +- ../../../../src/3rdparty/sqlite/insert.c \ +- ../../../../src/3rdparty/sqlite/main.c \ +- ../../../../src/3rdparty/sqlite/opcodes.c \ +- ../../../../src/3rdparty/sqlite/os.c \ +- ../../../../src/3rdparty/sqlite/pager.c \ +- ../../../../src/3rdparty/sqlite/parse.c \ +- ../../../../src/3rdparty/sqlite/pragma.c \ +- ../../../../src/3rdparty/sqlite/printf.c \ +- ../../../../src/3rdparty/sqlite/random.c \ +- ../../../../src/3rdparty/sqlite/select.c \ +- ../../../../src/3rdparty/sqlite/shell.c \ +- ../../../../src/3rdparty/sqlite/table.c \ +- ../../../../src/3rdparty/sqlite/tokenize.c \ +- ../../../../src/3rdparty/sqlite/trigger.c \ +- ../../../../src/3rdparty/sqlite/update.c \ +- ../../../../src/3rdparty/sqlite/util.c \ +- ../../../../src/3rdparty/sqlite/vacuum.c \ +- ../../../../src/3rdparty/sqlite/vdbe.c \ +- ../../../../src/3rdparty/sqlite/vdbeaux.c \ +- ../../../../src/3rdparty/sqlite/where.c +-} +- + REQUIRES = sql + + target.path += $$plugins.path/sqldrivers +--- src/tools/qcstring.cpp ++++ src/tools/qcstring.cpp +@@ -50,7 +50,7 @@ + #include + #include + #ifndef QT_NO_COMPRESS +-#include "../3rdparty/zlib/zlib.h" ++#include + #endif + + /***************************************************************************** diff --git a/opensuse/core/qt3/fix-GL-loading.diff b/opensuse/core/qt3/fix-GL-loading.diff new file mode 100644 index 000000000..61c2f379a --- /dev/null +++ b/opensuse/core/qt3/fix-GL-loading.diff @@ -0,0 +1,44 @@ +--- src/opengl/qgl_x11.cpp ++++ src/opengl/qgl_x11.cpp 2004/04/13 14:56:00 +@@ -267,7 +267,7 @@ + typedef Status (*_XmuLookupStandardColormap)( Display *dpy, int screen, VisualID visualid, unsigned int depth, + Atom property, Bool replace, Bool retain ); + _XmuLookupStandardColormap qt_XmuLookupStandardColormap; +- qt_XmuLookupStandardColormap = (_XmuLookupStandardColormap) QLibrary::resolve("Xmu", "XmuLookupStandardColormap"); ++ qt_XmuLookupStandardColormap = (_XmuLookupStandardColormap) QLibrary::resolve("Xmu.so.6", "XmuLookupStandardColormap"); + if (!qt_XmuLookupStandardColormap) + qFatal("Unable to resolve Xmu symbols - please check your Xmu library installation."); + #define XmuLookupStandardColormap qt_XmuLookupStandardColormap +Index: src/tools/qlibrary.cpp +=================================================================== +RCS file: /home/kde/qt-copy/src/tools/qlibrary.cpp,v +retrieving revision 1.26 +diff -u -3 -p -r1.26 qlibrary.cpp +--- src/tools/qlibrary.cpp 4 Feb 2004 14:25:02 -0000 1.26 ++++ src/tools/qlibrary.cpp 2 Jun 2004 08:26:21 -0000 +@@ -424,7 +424,8 @@ QString QLibrary::library() const + } else { + tmpfilename = QString( "lib%1" ).arg( filename ); + } +- tmpfilename += filter; ++ if ( !filename.contains(".so") ) ++ tmpfilename += filter; + if(QFile::exists(tmpfilename) || it == filters.end()) { + filename = tmpfilename; + break; +Index: src/opengl/qgl_x11.cpp +=================================================================== +RCS file: /home/kde/qt-copy/src/opengl/qgl_x11.cpp,v +retrieving revision 1.34 +diff -u -3 -p -r1.34 qgl_x11.cpp +--- src/opengl/qgl_x11.cpp 21 Dec 2003 00:48:09 -0000 1.34 ++++ src/opengl/qgl_x11.cpp 2 Jun 2004 08:26:21 -0000 +@@ -116,7 +116,7 @@ bool qt_resolve_gl_symbols(bool fatal) + if (gl_syms_resolved) + return TRUE; + +- QLibrary gl("GL"); ++ QLibrary gl("GL.so.1"); + gl.setAutoUnload(FALSE); + + qt_glCallLists = (_glCallLists) gl.resolve("glCallLists"); diff --git a/opensuse/core/qt3/fix-accessible.diff b/opensuse/core/qt3/fix-accessible.diff new file mode 100644 index 000000000..9b0aca13b --- /dev/null +++ b/opensuse/core/qt3/fix-accessible.diff @@ -0,0 +1,10 @@ +--- plugins/src/accessible/widgets/widgets.pro ++++ plugins/src/accessible/widgets/widgets.pro +@@ -13,3 +13,7 @@ + + HEADERS += qaccessiblewidget.h \ + qaccessiblemenu.h ++ ++target.path += $$plugins.path/accessible ++INSTALLS += target ++ diff --git a/opensuse/core/qt3/fix-assistant-path.patch b/opensuse/core/qt3/fix-assistant-path.patch new file mode 100644 index 000000000..3f30e7013 --- /dev/null +++ b/opensuse/core/qt3/fix-assistant-path.patch @@ -0,0 +1,11 @@ +--- tools/assistant/lib/qassistantclient.cpp ++++ tools/assistant/lib/qassistantclient.cpp +@@ -128,7 +128,7 @@ + : QObject( parent, name ), host ( "localhost" ) + { + if ( path.isEmpty() ) +- assistantCommand = "assistant"; ++ assistantCommand = "/usr/lib/qt3/bin/assistant"; + else { + QFileInfo fi( path ); + if ( fi.isDir() ) diff --git a/opensuse/core/qt3/fix-key-release-event-with-imm.diff b/opensuse/core/qt3/fix-key-release-event-with-imm.diff new file mode 100644 index 000000000..3bd1b8da2 --- /dev/null +++ b/opensuse/core/qt3/fix-key-release-event-with-imm.diff @@ -0,0 +1,55 @@ +--- src/kernel/qapplication_x11.cpp ++++ src/kernel/qapplication_x11.cpp +@@ -3294,11 +3294,7 @@ + // filtering opportunity first to ensure all input methods work + // properly regardless of application design. + +-#ifndef QT_NO_IM_EXTENSIONS + if( keywidget && keywidget->isEnabled() && keywidget->isInputMethodEnabled() ) { +-#else +- if( keywidget && keywidget->isEnabled() ) { +-#endif + if( ( event->type==XKeyPress || event->type==XKeyRelease ) && + sm_blockUserInput ) // block user interaction during session management + return TRUE; +@@ -5220,11 +5216,12 @@ + } else { + key = (int)(long)keyDict->find( keycode ); + if ( key ) +- if( !willRepeat ) // Take out key of dictionary only if this call. ++ if( !willRepeat && statefulTranslation ) // Take out key of dictionary only if this call. + keyDict->take( keycode ); + long s = (long)textDict->find( keycode ); + if ( s ) { +- textDict->take( keycode ); ++ if( statefulTranslation ) ++ textDict->take( keycode ); + ascii = (char)(s-256); + } + } +--- src/kernel/qwidget_x11.cpp ++++ src/kernel/qwidget_x11.cpp +@@ -2699,11 +2699,10 @@ + { + QInputContext *qic = 0; + +-#if !defined(QT_NO_IM_EXTENSIONS) + if ( isInputMethodEnabled() ) { ++#if !defined(QT_NO_IM_EXTENSIONS) + qic = icHolderWidget()->ic; + #else +- { + // icHolderWidget is always topLevelWidget + QTLWExtra *topdata = icHolderWidget()->topData(); + qic = (QInputContext *)topdata->xic; +@@ -2754,10 +2753,8 @@ + */ + void QWidget::createInputContext() + { +-#if !defined(QT_NO_IM_EXTENSIONS) + if( !isInputMethodEnabled() || QApplication::closingDown() ) + return; +-#endif + + QWidget *icWidget = icHolderWidget(); + #ifndef QT_NO_IM diff --git a/opensuse/core/qt3/fix-qtranslator-crash.diff b/opensuse/core/qt3/fix-qtranslator-crash.diff new file mode 100644 index 000000000..e28d7126a --- /dev/null +++ b/opensuse/core/qt3/fix-qtranslator-crash.diff @@ -0,0 +1,11 @@ +--- src/kernel/qtranslator.cpp ++++ src/kernel/qtranslator.cpp +@@ -1012,7 +1012,7 @@ + char con[256]; + for ( ;; ) { + t >> len; +- if ( len == 0 ) ++ if ( len == 0 || t.atEnd()) + return QTranslatorMessage(); + t.readRawBytes( con, len ); + con[len] = '\0'; diff --git a/opensuse/core/qt3/fix-xinerama-dialog-placement.diff b/opensuse/core/qt3/fix-xinerama-dialog-placement.diff new file mode 100644 index 000000000..26ca37c16 --- /dev/null +++ b/opensuse/core/qt3/fix-xinerama-dialog-placement.diff @@ -0,0 +1,13 @@ +--- src/dialogs/qdialog.cpp ++++ src/dialogs/qdialog.cpp +@@ -803,7 +803,9 @@ + w = w->topLevelWidget(); + QRect desk; + if ( w ) { +- scrn = QApplication::desktop()->screenNumber( w ); ++ // Use mapToGlobal rather than geometry() in case w might ++ // be embedded in another application ++ scrn = QApplication::desktop()->screenNumber( w->mapToGlobal( QPoint(0,0) ) ); + } else if ( QApplication::desktop()->isVirtualDesktop() ) { + scrn = QApplication::desktop()->screenNumber( QCursor::pos() ); + } else { diff --git a/opensuse/core/qt3/fix-xinput-clash.diff b/opensuse/core/qt3/fix-xinput-clash.diff new file mode 100644 index 000000000..2a7011681 --- /dev/null +++ b/opensuse/core/qt3/fix-xinput-clash.diff @@ -0,0 +1,37 @@ +--- src/kernel/qtaddons_x11.cpp ++++ src/kernel/qtaddons_x11.cpp +@@ -22,6 +22,10 @@ + * PERFORMANCE OF THIS SOFTWARE. + */ + ++#ifndef QT_CLEAN_NAMESPACE ++#define QT_CLEAN_NAMESPACE ++#endif ++ + #include "qt_x11_p.h" + + #if !defined(QT_NO_XFTFREETYPE) && !defined(QT_XFT2) +--- src/kernel/qt_x11_p.h ++++ src/kernel/qt_x11_p.h +@@ -86,7 +86,7 @@ + + + // the wacom tablet (currently just the IRIX version) +-#if defined (QT_TABLET_SUPPORT) ++#if defined (QT_TABLET_SUPPORT) && defined (QT_CLEAN_NAMESPACE) + # include + #if defined (Q_OS_IRIX) + # include // wacom driver defines for IRIX (quite handy) +--- src/kernel/qwidget_x11.cpp ++++ src/kernel/qwidget_x11.cpp +@@ -38,6 +38,10 @@ + ** + **********************************************************************/ + ++#ifndef QT_CLEAN_NAMESPACE ++#define QT_CLEAN_NAMESPACE ++#endif ++ + #include "qapplication.h" + #include "qapplication_p.h" + #include "qnamespace.h" diff --git a/opensuse/core/qt3/gcc46.diff b/opensuse/core/qt3/gcc46.diff new file mode 100644 index 000000000..beae96ff2 --- /dev/null +++ b/opensuse/core/qt3/gcc46.diff @@ -0,0 +1,56 @@ +Index: src/tools/qvaluelist.h +=================================================================== +--- src/tools/qvaluelist.h.orig 2011-03-31 20:14:47.200973928 +0200 ++++ src/tools/qvaluelist.h 2011-03-31 20:14:55.352615654 +0200 +@@ -50,6 +50,7 @@ + #ifndef QT_NO_STL + #include + #include ++#include + #endif + + //#define QT_CHECK_VALUELIST_RANGE +Index: src/tools/qvaluevector.h +=================================================================== +--- src/tools/qvaluevector.h.orig 2008-01-15 20:09:13.000000000 +0100 ++++ src/tools/qvaluevector.h 2011-03-31 20:15:15.904712567 +0200 +@@ -244,7 +244,7 @@ public: + typedef const value_type& const_reference; + typedef size_t size_type; + #ifndef QT_NO_STL +- typedef ptrdiff_t difference_type; ++ typedef std::ptrdiff_t difference_type; + #else + typedef int difference_type; + #endif +Index: src/tools/qmap.h +=================================================================== +--- src/tools/qmap.h.orig 2008-01-15 20:09:13.000000000 +0100 ++++ src/tools/qmap.h 2011-03-31 20:24:35.802101605 +0200 +@@ -107,7 +107,7 @@ class QMapIterator + #endif + typedef T value_type; + #ifndef QT_NO_STL +- typedef ptrdiff_t difference_type; ++ typedef std::ptrdiff_t difference_type; + #else + typedef int difference_type; + #endif +@@ -223,7 +223,7 @@ class QMapConstIterator + #endif + typedef T value_type; + #ifndef QT_NO_STL +- typedef ptrdiff_t difference_type; ++ typedef std::ptrdiff_t difference_type; + #else + typedef int difference_type; + #endif +@@ -604,7 +604,7 @@ public: + typedef value_type& reference; + typedef const value_type& const_reference; + #ifndef QT_NO_STL +- typedef ptrdiff_t difference_type; ++ typedef std::ptrdiff_t difference_type; + #else + typedef int difference_type; + #endif diff --git a/opensuse/core/qt3/head.diff b/opensuse/core/qt3/head.diff new file mode 100644 index 000000000..ccc2da0f5 --- /dev/null +++ b/opensuse/core/qt3/head.diff @@ -0,0 +1,60 @@ +--- src/3rdparty/libmng/aclocal.m4 ++++ src/3rdparty/libmng/aclocal.m4 +@@ -1607,7 +1607,7 @@ + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is. + # If DATA tags from a recent dlltool are present, honour them! +- archive_expsym_cmds='if test "x`head -1 $export_symbols`" = xEXPORTS; then ++ archive_expsym_cmds='if test "x`head -n 1 $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname-def; + else + echo EXPORTS > $output_objdir/$soname-def; +@@ -3546,7 +3546,7 @@ + lt_cv_file_magic_cmd='/usr/bin/file -L' + case "$host_os" in + rhapsody* | darwin1.[[012]]) +- lt_cv_file_magic_test_file=`echo /System/Library/Frameworks/System.framework/Versions/*/System | head -1` ++ lt_cv_file_magic_test_file=`echo /System/Library/Frameworks/System.framework/Versions/*/System | head -n 1` + ;; + *) # Darwin 1.3 on + lt_cv_file_magic_test_file='/usr/lib/libSystem.dylib' +--- src/3rdparty/libmng/config.guess ++++ src/3rdparty/libmng/config.guess +@@ -319,7 +319,7 @@ + echo m68k-sun-sunos${UNAME_RELEASE} + exit 0 ;; + sun*:*:4.2BSD:*) +- UNAME_RELEASE=`(head -1 /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` ++ UNAME_RELEASE=`(head -n 1 /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` + test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 + case "`/bin/arch`" in + sun3) +@@ -506,7 +506,7 @@ + fi + exit 0 ;; + *:AIX:*:[45]) +- IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | head -1 | awk '{ print $1 }'` ++ IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | head -n 1 | awk '{ print $1 }'` + if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then + IBM_ARCH=rs6000 + else +--- src/3rdparty/libmng/configure ++++ src/3rdparty/libmng/configure +@@ -1956,7 +1956,7 @@ + lt_cv_file_magic_cmd='/usr/bin/file -L' + case "$host_os" in + rhapsody* | darwin1.[012]) +- lt_cv_file_magic_test_file=`echo /System/Library/Frameworks/System.framework/Versions/*/System | head -1` ++ lt_cv_file_magic_test_file=`echo /System/Library/Frameworks/System.framework/Versions/*/System | head -n 1` + ;; + *) # Darwin 1.3 on + lt_cv_file_magic_test_file='/usr/lib/libSystem.dylib' +@@ -3433,7 +3433,7 @@ + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is. + # If DATA tags from a recent dlltool are present, honour them! +- archive_expsym_cmds='if test "x`head -1 $export_symbols`" = xEXPORTS; then ++ archive_expsym_cmds='if test "x`head -n 1 $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname-def; + else + echo EXPORTS > $output_objdir/$soname-def; diff --git a/opensuse/core/qt3/kmenu-search-fix.diff b/opensuse/core/qt3/kmenu-search-fix.diff new file mode 100644 index 000000000..8aff068ad --- /dev/null +++ b/opensuse/core/qt3/kmenu-search-fix.diff @@ -0,0 +1,10 @@ +--- src/widgets/qpopupmenu.cpp ++++ src/widgets/qpopupmenu.cpp +@@ -1354,6 +1354,7 @@ + performDelayedChanges(); + updateSize(TRUE); + QWidget::show(); ++ updateSize(); + popupActive = -1; + if(style().styleHint(QStyle::SH_PopupMenu_SubMenuPopupDelay, this)) + d->mouseMoveBuffer = QRegion(); diff --git a/opensuse/core/qt3/lib64-plugin-support.diff b/opensuse/core/qt3/lib64-plugin-support.diff new file mode 100644 index 000000000..384673269 --- /dev/null +++ b/opensuse/core/qt3/lib64-plugin-support.diff @@ -0,0 +1,12 @@ +--- src/tools/qgpluginmanager.cpp ++++ src/tools/qgpluginmanager.cpp 2004/09/25 11:46:41 +@@ -377,6 +377,9 @@ + QString basename = (*git).left( (*git).find( QChar(0xfffd) ) ); + ++git; + ++ // WARNING: this line should only exist on lib64 systems ! ++ basename += ".lib64"; ++ + QStringList sameBasename; + while( git != group.end() && + basename == (*git).left( (*git).find( QChar(0xfffd) ) ) ) { diff --git a/opensuse/core/qt3/limit-image-size.diff b/opensuse/core/qt3/limit-image-size.diff new file mode 100644 index 000000000..dcf8d6f21 --- /dev/null +++ b/opensuse/core/qt3/limit-image-size.diff @@ -0,0 +1,103 @@ +Index: kernel/qasyncimageio.cpp +================================================================================ +--- src/kernel/qasyncimageio.cpp ++++ src/kernel/qasyncimageio.cpp +@@ -901,7 +901,12 @@ + sheight = newtop + newheight; + + if (img.isNull()) { +- img.create(swidth, sheight, 32); ++ bool ok = img.create(swidth, sheight, 32); ++ if (!ok) ++ { ++ state = Error; ++ break; ++ } + memset( img.bits(), 0, img.numBytes() ); + if (consumer) consumer->setSize(swidth, sheight); + } +@@ -956,9 +961,15 @@ + if (backingstore.width() < w + || backingstore.height() < h) { + // We just use the backing store as a byte array +- backingstore.create( QMAX(backingstore.width(), w), ++ bool ok = backingstore.create( ++ QMAX(backingstore.width(), w), + QMAX(backingstore.height(), h), + 32); ++ if (!ok) ++ { ++ state = Error; ++ break; ++ } + memset( img.bits(), 0, img.numBytes() ); + } + for (int ln=0; lnalpha = enable; + } + ++QSize QImage::maxImageSize() ++{ ++ if (!qt_max_image_height || !qt_max_image_width) ++ return QSize(); ++ return QSize(qt_max_image_height, qt_max_image_width); ++} ++ ++void QImage::setMaxImageSize(const QSize &size) ++{ ++ if (size.isValid()) ++ { ++ qt_max_image_height = size.height(); ++ qt_max_image_width = size.width(); ++ } ++ else ++ { ++ qt_max_image_height = 0; ++ qt_max_image_width = 0; ++ } ++} ++ ++ + + /*! + Sets the image \a width, \a height, \a depth, its number of colors +@@ -1230,6 +1254,14 @@ + reset(); // reset old data + if ( width <= 0 || height <= 0 || depth <= 0 || numColors < 0 ) + return FALSE; // invalid parameter(s) ++ if ( qt_max_image_height && (height > qt_max_image_height * 4)) ++ return FALSE; // Too high ++ if ( qt_max_image_width && (width > qt_max_image_width * 4)) ++ return FALSE; // Too wide ++ if ( qt_max_image_height && qt_max_image_width && ++ (height * width > qt_max_image_height * qt_max_image_width)) ++ return FALSE; // Too large ++ + if ( depth == 1 && bitOrder == IgnoreEndian ) { + #if defined(QT_CHECK_RANGE) + qWarning( "QImage::create: Bit order is required for 1 bpp images" ); +--- src/kernel/qimage.h ++++ src/kernel/qimage.h +@@ -194,6 +194,10 @@ + int quality=-1 ) const; + bool save( QIODevice * device, const char* format, + int quality=-1 ) const; ++ ++#define QT_HAVE_MAX_IMAGE_SIZE ++ static QSize maxImageSize(); ++ static void setMaxImageSize(const QSize &size); + #endif //QT_NO_IMAGEIO + + bool valid( int x, int y ) const; diff --git a/opensuse/core/qt3/linguist.desktop b/opensuse/core/qt3/linguist.desktop new file mode 100644 index 000000000..7cfb9d093 --- /dev/null +++ b/opensuse/core/qt3/linguist.desktop @@ -0,0 +1,11 @@ +[Desktop Entry] +Encoding=UTF-8 +Exec=linguist +Name=Qt Linguist +GenericName=Translation Tool +X-KDE-StartupNotify=true +MimeType=application/x-linguist; +Terminal=false +Type=Application +Icon=linguist + diff --git a/opensuse/core/qt3/linguist.png b/opensuse/core/qt3/linguist.png new file mode 100644 index 000000000..90e143b65 Binary files /dev/null and b/opensuse/core/qt3/linguist.png differ diff --git a/opensuse/core/qt3/mng-reading-fix.patch b/opensuse/core/qt3/mng-reading-fix.patch new file mode 100644 index 000000000..f0582ac6c --- /dev/null +++ b/opensuse/core/qt3/mng-reading-fix.patch @@ -0,0 +1,30 @@ +--- src/kernel/qmngio.cpp.sav 2007-02-23 14:01:19.000000000 +0100 ++++ src/kernel/qmngio.cpp 2007-08-28 15:27:28.000000000 +0200 +@@ -411,8 +411,11 @@ int QMNGFormat::decode( QImage& img, QIm + } + + losttime += losingtimer.elapsed(); +- if ( ndata || !length ) +- mng_display_resume(handle); ++ bool needmore = false; ++ if ( ndata ) { ++ mng_retcode r = mng_display_resume(handle); ++ needmore = ( r == MNG_NEEDMOREDATA ); ++ } + losingtimer.start(); + + image = 0; +@@ -422,6 +425,13 @@ int QMNGFormat::decode( QImage& img, QIm + // Move back unused tail + memcpy(buffer,buffer+ubuffer,nbuffer); + } ++ // "The function should return without processing all the data if it reaches the end of a frame in the input." ++ if( ndata && !needmore ) { ++ length -= ndata; ++ ndata = 0; ++ if( length == 0 ) // 0 means done, process at least one byte ++ length = ndata = 1; ++ } + if ( ndata ) { + // Not all used. + enlargeBuffer(nbuffer+ndata); diff --git a/opensuse/core/qt3/no-rpath.dif b/opensuse/core/qt3/no-rpath.dif new file mode 100644 index 000000000..fa4a88215 --- /dev/null +++ b/opensuse/core/qt3/no-rpath.dif @@ -0,0 +1,21 @@ +--- mkspecs/linux-g++-64/qmake.conf ++++ mkspecs/linux-g++-64/qmake.conf +@@ -58,7 +58,7 @@ + QMAKE_LFLAGS_PLUGIN = $$QMAKE_LFLAGS_SHLIB + QMAKE_LFLAGS_SONAME = -Wl,-soname, + QMAKE_LFLAGS_THREAD = +-QMAKE_RPATH = -Wl,-rpath, ++QMAKE_RPATH = + + QMAKE_LIBS = + QMAKE_LIBS_DYNLOAD = -ldl +--- mkspecs/linux-g++/qmake.conf ++++ mkspecs/linux-g++/qmake.conf +@@ -55,7 +55,6 @@ + QMAKE_LFLAGS_PLUGIN = $$QMAKE_LFLAGS_SHLIB + QMAKE_LFLAGS_SONAME = -Wl,-soname, + QMAKE_LFLAGS_THREAD = +-QMAKE_RPATH = -Wl,-rpath, + + QMAKE_LIBS = + QMAKE_LIBS_DYNLOAD = -ldl diff --git a/opensuse/core/qt3/parseFontName.diff b/opensuse/core/qt3/parseFontName.diff new file mode 100644 index 000000000..eb0c6cbea --- /dev/null +++ b/opensuse/core/qt3/parseFontName.diff @@ -0,0 +1,18 @@ +--- src/kernel/qfontdatabase.cpp ++++ src/kernel/qfontdatabase.cpp +@@ -2470,11 +2470,14 @@ void QFontDatabase::parseFontName(const + int i = name.find('['); + int li = name.findRev(']'); + +- if (i < li) { ++ if (i > 0 && i + 1 < li) { + foundry = name.mid(i + 1, li - i - 1); + if (name[i - 1] == ' ') + i--; + family = name.left(i); ++ } else { ++ foundry = QString::null; ++ family = name; + } + } else { + foundry = QString::null; diff --git a/opensuse/core/qt3/pluginmanager-fix.diff b/opensuse/core/qt3/pluginmanager-fix.diff new file mode 100644 index 000000000..88ad08ae4 --- /dev/null +++ b/opensuse/core/qt3/pluginmanager-fix.diff @@ -0,0 +1,11 @@ +--- src/tools/qgpluginmanager.cpp ++++ src/tools/qgpluginmanager.cpp +@@ -383,6 +383,8 @@ + sameBasename << (*git).mid( (*git).find( QChar(0xfffd) ) + 1 ); + ++git; + } ++ if( !sameBasename.isEmpty()) ++ sameBasename.prepend( lib ); + + if ( sameBasename.isEmpty() ) { + that->addLibrary( new QComLibrary( lib ) ); diff --git a/opensuse/core/qt3/popen-leak-fix.diff b/opensuse/core/qt3/popen-leak-fix.diff new file mode 100644 index 000000000..a00ab02a5 --- /dev/null +++ b/opensuse/core/qt3/popen-leak-fix.diff @@ -0,0 +1,10 @@ +--- tools/linguist/shared/proparser.cpp ++++ tools/linguist/shared/proparser.cpp +@@ -207,6 +207,7 @@ QMap proFileTagMap( const QString& text ) + buff[read_in] = '\0'; + after += buff; + } ++ pclose( proc ); + (*it).replace( i, callToSystem.matchedLength(), after ); + i += after.length(); + } diff --git a/opensuse/core/qt3/pre_checkin.sh b/opensuse/core/qt3/pre_checkin.sh new file mode 100644 index 000000000..fd6f089b5 --- /dev/null +++ b/opensuse/core/qt3/pre_checkin.sh @@ -0,0 +1,14 @@ +#!/bin/bash +# This script is called automatically during autobuild checkin. + +cp -fl qt3.changes qt3-extensions.changes +cp -fl qt3.changes qt3-devel-doc.changes + +for spec in qt3-extensions.spec qt3-devel-doc.spec; do +{ sed -n -e '1,/COMMON-BEGIN/p' $spec.in + sed -n -e '/COMMON-BEGIN/,/COMMON-END/p' qt3.spec + sed -n -e '/COMMON-END/,$p' $spec.in; } > $spec.tmp && perl update_spec.pl $spec.tmp attributes > $spec && rm $spec.tmp +done + + +osc service localrun format_spec_file diff --git a/opensuse/core/qt3/qcstring-format-warnings.diff b/opensuse/core/qt3/qcstring-format-warnings.diff new file mode 100644 index 000000000..a597dc578 --- /dev/null +++ b/opensuse/core/qt3/qcstring-format-warnings.diff @@ -0,0 +1,15 @@ +--- src/tools/qcstring.h (revision 658213) ++++ src/tools/qcstring.h (working copy) +@@ -161,7 +161,11 @@ public: + + QCString copy() const; + +- QCString &sprintf( const char *format, ... ); ++ QCString &sprintf( const char *format, ... ) ++#if defined(Q_CC_GNU) && !defined(__INSURE__) ++ __attribute__ ((format (printf, 2, 3))) ++#endif ++ ; + + int find( char c, int index=0, bool cs=TRUE ) const; + int find( const char *str, int index=0, bool cs=TRUE ) const; diff --git a/opensuse/core/qt3/qt-3.3.8c.diff b/opensuse/core/qt3/qt-3.3.8c.diff new file mode 100644 index 000000000..860e99e4b --- /dev/null +++ b/opensuse/core/qt3/qt-3.3.8c.diff @@ -0,0 +1,58 @@ +--- src/kernel/qobject.cpp ++++ src/kernel/qobject.cpp +@@ -360,6 +360,30 @@ + } + } + ++/*! \internal ++ TQt compatibility function ++*/ ++QObjectList QObject::childrenListObject() { ++ if (children()) return *(children()); ++ else return QObjectList(); ++} ++ ++/*! \internal ++ TQt compatibility function ++*/ ++const QObjectList QObject::childrenListObject() const { ++ if (children()) return *(children()); ++ else return QObjectList(); ++} ++ ++/*! \internal ++ TQt compatibility function ++*/ ++const QObjectList QObject::objectTreesListObject() { ++ if (objectTrees()) return *(objectTrees()); ++ else return QObjectList(); ++} ++ + + /***************************************************************************** + QObject member functions +--- src/kernel/qobject.h ++++ src/kernel/qobject.h +@@ -101,8 +101,11 @@ + + QObject *child( const char *objName, const char *inheritsClass = 0, bool recursiveSearch = TRUE ); //### const in 4.0 + const QObjectList *children() const { return childObjects; } ++ QObjectList childrenListObject(); ++ const QObjectList childrenListObject() const; + + static const QObjectList *objectTrees(); ++ static const QObjectList objectTreesListObject(); + + QObjectList *queryList( const char *inheritsClass = 0, + const char *objName = 0, +--- src/tools/qglobal.h ++++ src/tools/qglobal.h +@@ -41,7 +41,7 @@ + #ifndef QGLOBAL_H + #define QGLOBAL_H + +-#define QT_VERSION_STR "3.3.8b" ++#define QT_VERSION_STR "3.3.8c" + /* + QT_VERSION is (major << 16) + (minor << 8) + patch. + */ diff --git a/opensuse/core/qt3/qt-transparency.patch b/opensuse/core/qt3/qt-transparency.patch new file mode 100644 index 000000000..d2de72f0d --- /dev/null +++ b/opensuse/core/qt3/qt-transparency.patch @@ -0,0 +1,49 @@ +--- src/kernel/qapplication.cpp ++++ src/kernel/qapplication.cpp +@@ -317,6 +317,7 @@ + void qt_cleanup(); + #if defined(Q_WS_X11) + void qt_init( Display* dpy, Qt::HANDLE, Qt::HANDLE ); ++void qt_init( int *, char **, Display* dpy, Qt::HANDLE, Qt::HANDLE ); + #endif + Q_EXPORT bool qt_tryModalHelper( QWidget *widget, QWidget **rettop ); + +@@ -905,7 +906,7 @@ + + qt_init( &argc, argv, GuiClient ); + } else { +- qt_init(dpy, visual, colormap); ++ qt_init( &argc, argv, dpy, visual, colormap); + } + + process_cmdline( &argc, argv ); +--- src/kernel/qapplication_x11.cpp ++++ src/kernel/qapplication_x11.cpp +@@ -197,6 +197,7 @@ + static Display *appDpy = 0; // X11 application display + static char *appDpyName = 0; // X11 display name + static bool appForeignDpy = FALSE; // we didn't create display ++Q_EXPORT bool qt_no_foreign_hack = false; + static bool appSync = FALSE; // X11 synchronization + #if defined(QT_DEBUG) + static bool appNoGrab = FALSE; // X11 grabbing enabled +@@ -1610,7 +1611,7 @@ + setlocale( LC_ALL, "" ); // use correct char set mapping + setlocale( LC_NUMERIC, "C" ); // make sprintf()/scanf() work + +- if ( display ) { ++ if ( display && ! qt_no_foreign_hack ) { + // Qt part of other application + + appForeignDpy = TRUE; +@@ -2390,6 +2391,10 @@ + qt_init_internal( 0, 0, display, visual, colormap ); + } + ++void qt_init( int *argcptr, char **argv, Display *display, Qt::HANDLE visual, Qt::HANDLE colormap ) ++{ ++ qt_init_internal( argcptr, argv, display, visual, colormap ); ++} + + /***************************************************************************** + qt_cleanup() - cleans up when the application is finished diff --git a/opensuse/core/qt3/qt-x11-free-3.3.8b.tar.bz2 b/opensuse/core/qt3/qt-x11-free-3.3.8b.tar.bz2 new file mode 100644 index 000000000..44e17d392 Binary files /dev/null and b/opensuse/core/qt3/qt-x11-free-3.3.8b.tar.bz2 differ diff --git a/opensuse/core/qt3/qt-x11-immodule-unified-qt3.3.8-20060318.diff b/opensuse/core/qt3/qt-x11-immodule-unified-qt3.3.8-20060318.diff new file mode 100644 index 000000000..c1ac18de3 --- /dev/null +++ b/opensuse/core/qt3/qt-x11-immodule-unified-qt3.3.8-20060318.diff @@ -0,0 +1,16169 @@ +--- ChangeLog.immodule ++++ ChangeLog.immodule +@@ -0,0 +1,2027 @@ ++2004-09-10 YamaKen ++ ++ * changes.immodule ++ - Describe a bugfix ++ ++2004-09-10 YamaKen ++ ++ * src/inputmethod/qinputcontextinterface_p.h ++ - Update UUID of QInputContextFactory in accordance with API change ++ of QInputContext to avoid loading old invalid plugins ++ ++2004-09-10 YamaKen ++ ++ * README.immodule ++ - Add 'About this release' section ++ - Update version information ++ - Update to follow the change of configure options ++ - Modify some English expressions ++ ++ * changes.immodule ++ - Move release information to README.immodule ++ - Add differences from previous release ++ - Add description about incremental change indication ++ ++ * ChangeLog.immodule ++ - Update ++ ++2004-09-09 YamaKen ++ ++ * src/kernel/qapplication.cpp ++ - (removePostedEvents): ++ * Fix infinite loop condition ++ * delete receiver->postedEvents if the list has been empty ++ ++2004-09-09 YamaKen ++ ++ * This commit backports some code fragments from Qt4 branch to make ++ input method plugins source compatible with Qt4. ++ ++ * src/kernel/qinputcontext.cpp ++ - (QInputContext): Add 'parent' arg ++ ++ * src/kernel/qinputcontext.h ++ - Exclude qptrlist.h when compile with Qt4 ++ - (struct QInputContextMenu): Exclude member variables when compile ++ with Qt4 ++ - (QInputContext): Add 'parent' arg ++ - (addActionsTo): New function for Qt4 ++ ++2004-09-08 YamaKen ++ ++ * This commit renames input method module from 'input' to 'inputmehod' ++ because the name 'input' is too generic to indicate its function ++ ++ * configure ++ - Replace configuration options '-im' and '-im-ext' with ++ '-inputmethod' and '-inputmethod-ext' to be consistent with the ++ name of input method module subdirectory 'inputmethod' ++ - Rename the module name 'input' with 'inputmethod' ++ ++ * src/qt.pro ++ - Rename the module name 'input' with 'inputmethod' ++ - Rename some variable names inaccordance with the renaming of the ++ module ++ - Replace 'qt_input.pri' with 'qt_inputmethod.pri' in accordance ++ with the renaming of the file ++ ++ * src/inputmethod/qt_input.pri ++ - Rename to qt_inputmethod.pri ++ * src/inputmethod/qt_input.pri ++ - Renamed from qt_input.pri ++ - Replace module names ++ - Rename some variable names inaccordance with the renaming of the ++ module ++ ++2004-09-08 YamaKen ++ ++ * Rename input module subdirectory from "input" to "inputmethod" ++ ++2004-09-08 YamaKen ++ ++ * This commit contains following issues ++ - An API change. Return type of QInputContext::identifierName and ++ QInputContext::language has been changed from QCString which is ++ deprecated in Qt4 to QString to make plugins source compatible ++ with Qt4. ++ - Other backports from Qt4 branch ++ - Fix event receiving order inversion between QKeyEvent and ++ QIMEvent. The code is implemented based on Cougar's and ++ Kazuki's. Thank you the efforts. See following discussion for ++ further information. ++ http://freedesktop.org/pipermail/immodule-qt/2004-September/000447.html ++ http://freedesktop.org/pipermail/immodule-qt/2004-September/000497.html ++ ++ * src/kernel/qinputcontext.h ++ - (identifierName, language): Change return type from QCString to QString ++ - (addMenusTo): Make Qt3 specific ++ * src/kernel/qinputcontext.cpp ++ - (identifierName): ++ * Change return type from QCString to QString ++ * Modify the function description comment ++ - (language): Change return type from QCString to QString ++ ++ * src/kernel/qwidget.cpp ++ - (clearFocus): Enclose immodule specific code by #if ++ defined(Q_WS_X11) ++ ++ * src/kernel/qapplication.h ++ - Add 'class QIMEvent' declaration ++ - (removePostedEvents): New overriding function ++ * src/kernel/qapplication_x11.cpp ++ - Remove redundant 'class QInputContext' declaration ++ - (postIMEvent): Fix the event receiving order inversion problem ++ - (x11_apply_settings): Replace QString::find() which is deprecated ++ in Qt4 with QString::startsWith() ++ - (postEvent): Fix invalid QIMEvent compression that ignores IMStart ++ boundary ++ - (removePostedEvents): Original version of the function. Replace ++ the implementation with 2-args version. The behavior is not ++ changed ++ - (removePostedEvents): New overriding function. This function only ++ removes events that has specified event type. The implementation ++ is copied from original version of the function and modified to ++ accept event_type. This function is required by postIMEvent() ++ - (setActiveWindow): Enclose immodule specific code by #if ++ defined(Q_WS_X11) ++ ++ * src/input/qinputcontextinterface_p.h ++ - Modify a coding style to follow Trolltech's one for Qt3 ++ ++ * src/input/qinputcontextplugin.h ++ - Fix typos in comment ++ * src/input/qinputcontextplugin.cpp ++ - (keys, QInputContextPlugin, ~QInputContextPlugin): Modify the ++ function description comment ++ ++ * src/input/qinputcontextfactory.h ++ - Remove #include "qinputcontext.h" to reduce compilation dependency ++ - Add 'class QWidget' declaration ++ - Remove inappropriate #ifndef QT_NO_STRINGLIST. QStringList is now ++ required feature for immodule. See also changes of qfeatures.h ++ * src/input/qinputcontextfactory.cpp ++ - Add #include "qinputcontext.h" ++ - Remove unnecessary #include "qpopupmenu.h" ++ - Remove inappropriate #ifndef QT_NO_STRINGLIST. QStringList is now ++ required feature for immodule. See also changes of qfeatures.h ++ ++ * src/tools/qfeatures.h ++ - Define QT_NO_IM if QT_NO_STRINGLIST is defined ++ - Define QT_NO_IM_EXTENSIONS if QT_NO_IM or QT_NO_STRINGLIST is ++ defined ++ ++ * plugins/src/inputmethods/inputmethods.pro ++ - Rename conditional configuration symbol from "im" to "inputmethod" ++ inaccordance with chanege of configure script ++ ++ * plugins/src/inputmethods/simple/qsimpleinputcontext.h ++ * plugins/src/inputmethods/simple/qsimpleinputcontext.cpp ++ * plugins/src/inputmethods/imsw-multi/qmultiinputcontext.h ++ - (identifierName, language): Change return type from QCString to ++ QString ++ ++ * plugins/src/inputmethods/imsw-multi/qmultiinputcontext.cpp ++ - (identifierName, language): Change return type from QCString to ++ QString ++ - (createImSelPopup): Replace QString::find() which is deprecated in ++ Qt4 with QString::startsWith() ++ ++ * plugins/src/inputmethods/imsw-none/qnoneinputcontextplugin.cpp ++ - (create): Replace QString::find() which is deprecated in Qt4 with ++ QString::startsWith() ++ ++ * plugins/src/inputmethods/xim/qximinputcontext.h ++ - (language): Change return type from QCString to QString ++ - (identifierName): ++ * Change return type from QCString to QString ++ * Move inline implementation to qximinputcontext_x11.cpp ++ * plugins/src/inputmethods/xim/qximinputcontext_x11.cpp ++ - (language): Change return type from QCString to QString ++ - (identifierName): ++ * Change return type from QCString to QString ++ * Move implementation from qximinputcontext.h ++ - (language): Replace QString::find() which is deprecated in Qt4 with ++ QString::startsWith() ++ ++2004-08-19 YamaKen ++ ++ * src/input/qinputcontextfactory.cpp ++ - (keys): Modify the function description comment ++ ++2004-08-18 YamaKen ++ ++ * src/input/qinputcontextfactory.cpp ++ - (create_manager): Fix plugin directory from "/input" to "/inputmethods" ++ ++2004-08-18 YamaKen ++ ++ * src/kernel/qapplication_x11.cpp ++ - (KeyTbl): Add translations for Japanese and Korean alias keys ++ ++2004-08-18 YamaKen ++ ++ * This commit disables default IM configuration feature using qtrc and ++ qtconfig in BC mode. See following discussion for further ++ information. ++ http://freedesktop.org/pipermail/immodule-qt/2004-August/000416.html ++ ++ * src/kernel/qapplication_x11.cpp ++ - (x11_apply_settings): ++ * Move immodule handling into #ifndef QT_NO_IM rather than QT_NO_XIM ++ * Move qtrc handling into #ifndef QT_NO_IM_EXTENSIONS ++ ++ * src/inputmethods/imsw-multi/qmultiinputcontext.cpp ++ - (QMultiInputContext): Move qtrc handling into #ifndef ++ QT_NO_IM_EXTENSIONS ++ ++ * tools/qtconfig/mainwindow.cpp ++ - (MainWindow): Move qtrc handling into #ifndef QT_NO_IM_EXTENSIONS ++ ++ * src/kernel/qt_x11.pri ++ - Remove unnecessary configuration ++ ++2004-08-18 YamaKen ++ ++ Merge differences between qt-x11-free-3.3.2 and qt-x11-free-3.3.3 ++ ++2004-08-18 YamaKen ++ ++ * plugins/src/inputmethods/imsw-multi/imsw-multi.pro ++ * plugins/src/inputmethods/simple/simple.pro ++ * plugins/src/inputmethods/imsw-none/imsw-none.pro ++ * plugins/src/inputmethods/xim/xim.pro ++ - Remove inappropriate 'thread' from CONFIG. Thanks to Takumi ++ Asaki for reporting ++ ++2004-08-18 YamaKen ++ ++ * tools/qtconfig/mainwindow.cpp ++ - (MainWindow): Modify a comment ++ - (fileSave): Fix inappropriate /qt/DefaultInputMethodSwitcher ++ overwriting. Thanks Takumi Asaki for the reporting ++ ++2004-08-17 YamaKen ++ ++ * plugins/src/inputmethods/imsw-multi/imsw-multi.pro ++ * plugins/src/inputmethods/simple/simple.pro ++ * plugins/src/inputmethods/imsw-none/imsw-none.pro ++ * plugins/src/inputmethods/xim/xim.pro ++ - Change plugin directory from $QTDIR/plugins/input/ to ++ $QTDIR/plugins/inputmethods/ ++ * changes.immodule ++ - Add a description for the change of plugin directory ++ ++2004-08-17 YamaKen ++ ++ * src/kernel/qnamespace.h ++ - (Qt::Key) Add a comment about Korean-specific keyboard ++ support based on the information from Choe Hwanjin. Thanks ++ for the information. See following discussion for further ++ information ++ http://freedesktop.org/pipermail/immodule-qt/2004-August/000402.html ++ - (Qt::Key) Comment out some Korean-specific keys that has an ++ equivalent generic key ++ ++2004-08-14 YamaKen ++ ++ * This is preparation for qt-x11-immodule-unified-qt3.3.2-20040814 ++ ++ * ChangeLog.immodule ++ - Update ++ ++2004-08-14 YamaKen ++ ++ * changes.immodule ++ - Add and modify some descriptions ++ ++ * configure ++ - Rewrite some codes to avoid patch rejection against Qt ++ 3.3.3. Logically equivalent. ++ * src/widgets/qtextedit.cpp ++ - Rewrite some codes to avoid patch rejection against Qt ++ 3.3.3. Logically equivalent. ++ * src/widgets/qlineedit.cpp ++ - Rewrite some codes to avoid patch rejection against Qt ++ 3.3.3. Logically equivalent. ++ ++2004-08-13 LiuCougar ++ ++ cleanup: get rid of some warnings ++2004-08-12 YamaKen ++ ++ * changes.immodule ++ - New file. This file has been written for both users and ++ developers to inform important changes ++ ++2004-08-12 YamaKen ++ ++ * This is preparation for qt-x11-immodule-unified-qt3.3.2-20040812 ++ ++ * ChangeLog.immodule ++ - Update ++ ++2004-08-12 YamaKen ++ ++ * src/kernel/qwidget_x11.cpp ++ - (changeInputContext, createInputContext): Fix qic location ++ - (destroyInputContext): Add safety check ++ ++2004-08-12 YamaKen ++ ++ * configure ++ - Fix incomplete qconfig configuratoin about QT_NO_IM and ++ QT_NO_IM_EXTENSIONS ++ ++ * src/kernel/qwidget_x11.cpp ++ - (changeInputContext, createInputContext, destroyInputContext): Fix ++ invalid pointer reference ++ ++2004-08-12 LiuCougar ++ ++ fixed a compile issue in my gentoo box (gcc 3.3.3, glibc 2.3.3 ++2004-08-12 YamaKen ++ ++ * configure ++ - Fix option consistency handling between '-im' and '-im-ext' ++ ++ * README.immodule ++ - Fix a typo ++ ++2004-08-11 YamaKen ++ ++ * README.immodule ++ - Modify a little ++ ++2004-08-11 YamaKen ++ ++ * README.immodule ++ - New file. Some explanation has been described ++ ++ * ChangeLog.immodule ++ - New file ++ ++2004-08-11 YamaKen ++ ++ * plugins/src/inputmethods/xim/qximinputcontext_x11.cpp ++ - (language): Remove QLocale dependency to be compiled on Qt 3.2.x ++ or earlier ++ ++2004-08-11 YamaKen ++ ++ * This commit merges 'Binary Compatible branch' into the trunk to ++ reduce maintenance cost. Now binary compatibility is ++ configurable. Binary incompatible features are surrounded by ++ #ifndef QT_NO_IM_EXTENSIONS ++ ++ * configure ++ - Add '-im' option to enable immodule feature (default yes). ++ - Add '-im-ext' option to enable more immodule extensions (default ++ no). Specify this option 'no' to keep binary compatibility with ++ standard Qt3 ++ ++ * src/kernel/qt_x11.pri ++ - Add conditional QT_NO_IM and QT_NO_IM_EXTENSIONS definition in ++ accordance with '-im' and '-im-ext' options ++ ++ * src/kernel/qwidget.h ++ - (icHolderWidget): New function for QT_NO_IM_EXTENSIONS ++ - (ic): Add #ifndef QT_NO_IM_EXTENSIONS for binary incompatible ++ variable ++ - (xic): Add #ifdef QT_NO_IM_EXTENSIONS for binary compatible ++ variable ++ * src/kernel/qwidget_x11.cpp ++ - (create): Add #ifndef QT_NO_IM_EXTENSIONS ++ - (destroy): Make some codes QT_NO_IM_EXTENSIONS independent ++ - (createTLSysExtra): Add a code fragment for QT_NO_IM_EXTENSIONS ++ - (deleteTLSysExtra): Modify a comment ++ - (getInputContext, changeInputContext, createInputContext, ++ destroyInputContext): Merge code fragments for QT_NO_IM_EXTENSIONS ++ - (deleteExtra): Merge a comment for QT_NO_IM_EXTENSIONS ++ ++ * src/kernel/qapplication.h ++ - (locateICHolderWidget, icHolderWidgets, create_xim, close_xim): ++ New functions for QT_NO_IM_EXTENSIONS ++ * src/kernel/qapplication_x11.cpp ++ - (create_im, close_im): Add #ifndef QT_NO_IM_EXTENSIONS ++ - (create_xim, close_xim): Merge functions for QT_NO_IM_EXTENSIONS ++ - (qt_init_internal, qt_cleanup): Merge code fragments for ++ QT_NO_IM_EXTENSIONS ++ ++ * plugins/src/inputmethods/inputmethods.pro ++ - Make plugin compilations configurable with '-im' option ++ ++2004-08-11 YamaKen ++ ++ * plugins/src/inputmethods/xim/qximinputcontext.h ++ - Replace QXIMINPUTCONTEXT_P_H with QXIMINPUTCONTEXT_H ++ ++ * src/widgets/qlineedit.cpp ++ - (QLineEditPrivate::updateMicroFocusHint): Modify the comment a ++ little ++ ++2004-08-11 YamaKen ++ ++ * This commit is participating with recent 'keyword static of C++' ++ discussion. See ++ http://freedesktop.org/pipermail/immodule-qt/2004-August/000344.html ++ for further information ++ ++ * src/kernel/qapplication_x11.cpp ++ - (QETWidget::translateKeyEventInternal): Prevent interwidget key ++ state transition about RTL extensions. This code had been written ++ by Daisuke Kameda in qt-x11-immodule-all-qt3.3.1-20040316.diff ++ ++ * src/widgets/qlineedit.cpp ++ - (QLineEditPrivate::updateMicroFocusHint): Add a comment that ++ explains that old rect variable is intentionally static ++ ++2004-08-11 YamaKen ++ ++ * This commit turns the argument of QInputContext::filterEvent() into ++ const. See ++ http://freedesktop.org/pipermail/immodule-qt/2004-August/000335.html ++ for further information ++ ++ * src/kernel/qinputcontext.h ++ - (filterEvent): Follow the API change ++ * src/kernel/qinputcontext.cpp ++ - (filterEvent): Follow the API change ++ ++ * plugins/src/inputmethods/simple/qsimpleinputcontext.h ++ - (filterEvent): Follow the API change ++ * plugins/src/inputmethods/simple/qsimpleinputcontext.cpp ++ - (filterEvent): Follow the API change ++ * plugins/src/inputmethods/imsw-multi/qmultiinputcontext.h ++ - (filterEvent): Follow the API change ++ * plugins/src/inputmethods/imsw-multi/qmultiinputcontext.cpp ++ - (filterEvent): Follow the API change ++ ++2004-08-10 YamaKen ++ ++ * plugins/src/inputmethods/simple/xcompose2q.rb ++ - Update to accept Compose flie of X.org's X11R6.7.0 ++ - Accept 'XCOMM' as comment sign to accept raw source file ++ - Accept both " " and "\"" as valid RHS ++ * plugins/src/inputmethods/simple/composetable.cpp ++ - Update Compose table from XFree86 4.3.0 to X.org's X11R6.7.0 ++ ++2004-08-10 YamaKen ++ ++ * This commit replaces the invalid header words 'This file is ++ part of the kernel module' of following files with 'This file ++ is part of the input method module' ++ ++ * plugins/src/inputmethods/imsw-multi/qmultiinputcontextplugin.cpp ++ * plugins/src/inputmethods/imsw-multi/qmultiinputcontext.cpp ++ * plugins/src/inputmethods/imsw-multi/qmultiinputcontextplugin.h ++ * plugins/src/inputmethods/imsw-multi/qmultiinputcontext.h ++ * plugins/src/inputmethods/simple/qsimpleinputcontextplugin.cpp ++ * plugins/src/inputmethods/simple/qsimpleinputcontext.cpp ++ * plugins/src/inputmethods/simple/qsimpleinputcontextplugin.h ++ * plugins/src/inputmethods/simple/qsimpleinputcontext.h ++ * plugins/src/inputmethods/simple/composetable.cpp ++ * plugins/src/inputmethods/imsw-none/qnoneinputcontextplugin.cpp ++ * plugins/src/inputmethods/imsw-none/qnoneinputcontextplugin.h ++ * plugins/src/inputmethods/xim/qximinputcontextplugin.cpp ++ * plugins/src/inputmethods/xim/qximinputcontextplugin.h ++ * plugins/src/inputmethods/xim/qximinputcontext.h ++ * plugins/src/inputmethods/xim/qximinputcontext_x11.cpp ++ ++2004-08-10 YamaKen ++ ++ * plugins/src/inputmethods/simple/xcompose2q.rb ++ - Fix broken translation entries for most ASCII characters ++ * plugins/src/inputmethods/simple/composetable.cpp ++ - Translate again with fixed xcompose2q.rb. This fixes many ++ translation entries involving ascii character such as ++ " " ++ ++2004-08-10 YamaKen ++ ++ * plugins/src/inputmethods/simple/xcompose2q.rb ++ - New file. This script is used for translating X's Compose ++ table into QSimpleInputContext's table ++ - Some bugs included ++ - Although I had released previous versions of this script ++ under GPL, I have released this version under another ++ license. See header ++ ++2004-08-10 YamaKen ++ ++ * plugins/src/inputmethods/simple/qsimpleinputcontext.h ++ - Follow Trolltech's coding style for Qt3 ++ - Remove unnecessary headers ++ - (UNITIZE): Moved from qsimpleinputcontext.cpp. QT_ prefix is not ++ required since a macro does not pollute symbol space ++ - (struct _ComposeTableElement): Rename to QComposeTableElement ++ - (struct QComposeTableElement): Renamed from _ComposeTableElement ++ - (struct _ComposeTable): Rename to QComposeTable ++ - (struct QComposeTable): Renamed from _ComposeTable ++ - (isPreeditRelocationEnabled): Remove unnecessary overloading ++ function ++ - (isPreeditPreservationEnabled): Remove unnecessary function ++ - (checkComposeTable): Follow the renaming of the types of args ++ - (defaultComposeTable): New static member variable ++ ++ * plugins/src/inputmethods/simple/qsimpleinputcontext.cpp ++ - Separate composing table definition to composetable.cpp ++ - Remove unnecessary headers ++ - Replace 'true' and 'false' with 'TRUE' and 'FALSE' to follow ++ Trolltech's coding style for Qt3 ++ - Replace _ComposeTableElement with QComposeTableElement to follow ++ the renaming ++ - Replace ComposeTable with QComposeTable to follow the renaming ++ - (UNITIZE): Move to qsimpleinputcontext.h ++ - (defaultTable): Move to composetable.cpp ++ - (qtComposeTable): Move to composetable.cpp as defaultComposeTable ++ - (filterEvent): ++ * Clean up ++ * Add a comment about key compression ++ * replace qtComposeTable with defaultComposeTable to follow the ++ renaming ++ - (unsetFocus): Remove unnecessary isPreeditPreservationEnabled() ++ check ++ - (identifierName): Remove 'FIXME' comment ++ - (isPreeditRelocationEnabled): Remove unnecessary overloading ++ function ++ - (isPreeditPreservationEnabled): Remove unnecessary function ++ ++ * plugins/src/inputmethods/simple/composetable.cpp ++ - New file. This file has been separated from ++ qsimpleinputcontext.cpp to achieve following issues ++ * increase table maintenance ability ++ * ease editing code part of QSimpleInputContext ++ * ease development log tracking ++ * ease copyright tracking ++ * enclose UTF-8 comments into this file only ++ - Add original header from Compose file of XFree86 4.3.0 ++ - (defaultTable) Moved from qsimpleinputcontext.cpp ++ - (defaultComposeTable): New variable definition ++ ++ * plugins/src/inputmethods/simple/simple.pro ++ - Add composetable.cpp to SOURCES ++ ++ * plugins/src/inputmethods/simple/qsimpleinputcontextplugin.cpp ++ - (displayName, description): Modify the descriptions appropriately ++ ++2004-08-10 YamaKen ++ ++ * plugins/src/inputmethods/xim/qximinputcontext_x11.cpp ++ - Replace #include "qximinputcontext_p.h" with ++ "qximinputcontext.h". XIM plugin is now working properly ++ ++2004-08-10 YamaKen ++ ++ * This commit changes the XIM input method into plugin. A little ++ modification is still required to work. See next commit information ++ ++ * src/input/qinputcontextfactory.cpp ++ - Remove XIM dependency ++ - (create, keys): Remove XIM dependent codes ++ ++ * src/input/qt_input.pri ++ - Remove QXIMInputContext entries ++ * src/input/qximinputcontext_p.h ++ - Moved to plugins/src/inputmethods/xim/qximinputcontext.h ++ * src/input/qximinputcontext_x11.cpp ++ - Moved to plugins/src/inputmethods/xim/qximinputcontext_x11.cpp ++ ++ * plugins/src/inputmethods/inputmethods.pro ++ - Add xim to SUBDIRS ++ * plugins/src/inputmethods/xim ++ - New directory ++ * plugins/src/inputmethods/xim/xim.pro ++ - New file ++ * plugins/src/inputmethods/xim/qximinputcontextplugin.h ++ - New file ++ - (class QXIMInputContextPlugin): New class ++ - (QXIMInputContextPlugin, ~QXIMInputContextPlugin, keys, create, ++ languages, displayName, description): New function ++ * plugins/src/inputmethods/xim/qximinputcontextplugin.cpp ++ - New file ++ * plugins/src/inputmethods/xim/qximinputcontext.h ++ - Moved from src/input/qximinputcontext_p.h. No code changes have ++ been applied. A little modification is required to work. See next ++ commit information ++ * plugins/src/inputmethods/xim/qximinputcontext_x11.cpp ++ - Moved from src/input/qximinputcontext_x11.cpp. No code changes have ++ been applied ++ ++2004-08-10 YamaKen ++ ++ * src/input/qximinputcontext_p.h ++ - (QXIMInputContext): Remove the arg 'widget' to conform to standard ++ QInputContext API ++ * src/input/qximinputcontext_x11.cpp ++ - (QXIMInputContext): Remove the arg 'widget' to conform to standard ++ QInputContext API ++ - (setHolderWidget): Add QInputContext::setHolderWidget() to fix ++ inproper overriding ++ * src/input/qinputcontextfactory.cpp ++ - (create): Remove the arg from QXIMInputContext() ++ ++2004-08-10 YamaKen ++ ++ * src/input/qximinputcontext_p.h ++ - (setHolderWidget): New override function ++ * src/input/qximinputcontext_x11.cpp ++ - (QXIMInputContext): Split most part of the initialization code ++ into setHolderWidget() to allow null widget. This is required to ++ make imsw-none working properly ++ - (setHolderWidget): New function ++ ++2004-08-10 YamaKen ++ ++ * src/kernel/qapplication_x11.cpp ++ - (x11_apply_settings): Restrict defaultIM to be an IM-switcher. An ++ IM-switcher has a 'imsw-' prefix ++ ++2004-08-10 YamaKen ++ ++ * This commit adds imsw-none IM-switcher plugin according to ++ following discussion with Takumi Asaki. Thanks for the opinion. ++ http://freedesktop.org/pipermail/immodule-qt/2004-August/000320.html ++ ++ * plugins/src/inputmethods/inputmethods.pro ++ - Add imsw-none to SUBDIRS ++ * plugins/src/inputmethods/imsw-none/imsw-none.pro ++ - New file ++ * plugins/src/inputmethods/imsw-none/qnoneinputcontextplugin.h ++ - New file ++ - (class QNoneInputContextPlugin): New class ++ * plugins/src/inputmethods/imsw-none/qnoneinputcontextplugin.cpp ++ - New file ++ - (QNoneInputContextPlugin, ~QNoneInputContextPlugin, keys, ++ languages, displayName, description): New function ++ - (create): New function. Read key from QT_IM_MODULE or ++ /qt/DefaultInputMethod of qtrc and creates input context with the ++ key ++ ++2004-08-10 YamaKen ++ ++ * Rename input method plugin names to accord with other plugin names ++ ++ * plugins/src/inputmethods/imsw-multi/imsw-multi.pro ++ - Rename plugin name to qimsw-multi from qmultiinputcontextplugin ++ * plugins/src/inputmethods/simple/simple.pro ++ - Rename plugin name to qsimple from qsimpleinputcontextplugin ++ ++2004-08-10 YamaKen ++ ++ * plugins/src/inputmethods/imsw-multi/multi.pro ++ - Move to imsw-multi.pro ++ * plugins/src/inputmethods/imsw-multi/imsw-multi.pro ++ - Move from multi.pro ++ ++2004-08-10 YamaKen ++ ++ * plugins/src/inputmethods/multi ++ - Move to imsw-multi ++ * plugins/src/inputmethods/imsw-multi ++ - Move from multi ++ * plugins/src/inputmethods/inputmethods.pro ++ - Replace 'multi' with 'imsw-multi' in SUBDIRS ++ ++2004-08-10 Kazuki Ohta ++ ++ * plugins/src/inputmethods/simple/qsimpleinputcontext.cpp ++ - add full dead/multi key entries ++ - fix some bugs ++ ++2004-08-10 YamaKen ++ ++ * This commit changes pluggable popup menu API in accordance with ++ following discussion with Lars Knoll. Thanks for the advice. ++ http://freedesktop.org/pipermail/immodule-qt/2004-August/000300.html ++ ++ * src/kernel/qinputcontext.cpp ++ - (actions): New function ++ - (exportMenusInto): Remove to rename to addMenusTo() ++ - (addMenusTo): ++ * New function. Renamed from exportMenusInto() ++ * Follow introduction of enum QInputContextMenu::Action ++ * Add an explanation for this utility function to the function ++ description ++ ++ * src/kernel/qinputcontext.h ++ - (QInputContextMenu::Action): New enum ++ - (menus): Restrict to use with Qt3 only ++ - (qt4menus): Remove to replace with actions() ++ - (actions): New function for Qt4 ++ ++ * src/widgets/qtextedit.cpp ++ - (createPopupMenu): Replace exportMenusInto() with addMenusTo() ++ * src/widgets/qlineedit.cpp ++ - (createPopupMenu): Replace exportMenusInto() with addMenusTo() ++ ++2004-08-10 YamaKen ++ ++ * This commit changes the two input methods into plugin ++ ++ * src/input/qt_input.pri ++ - Remove QSimpleInputContext and QMultiInputContext entries ++ * src/input/qmultiinputcontext.h ++ - Moved to plugins/src/inputmethods/multi/qmultiinputcontext.h ++ * src/input/qmultiinputcontext.cpp ++ - Moved to plugins/src/inputmethods/multi/qmultiinputcontext.cpp ++ * src/input/qsimpleinputcontext.h ++ - Moved to plugins/src/inputmethods/simple/qsimpleinputcontext.h ++ * src/input/qsimpleinputcontext.cpp ++ - Moved to plugins/src/inputmethods/simple/qsimpleinputcontext.cpp ++ ++ * plugins/src/src.pro ++ - Add 'inputmethods' to SUBDIRS. The directory name 'inputmethods' ++ is intended to be compatible with Qt/Embedded. Install directory ++ name is still kept as 'input' for backward compatibility ++ * plugins/src/inputmethods/inputmethods.pro ++ - New file ++ ++ * plugins/src/inputmethods/multi/multi.pro ++ - New file ++ * plugins/src/inputmethods/multi/qmultiinputcontextplugin.h ++ - New file ++ * plugins/src/inputmethods/multi/qmultiinputcontextplugin.cpp ++ - New file ++ * plugins/src/inputmethods/multi/qmultiinputcontext.h ++ - Moved from src/input/qmultiinputcontext.h. No code changes have ++ been applied ++ * plugins/src/inputmethods/multi/qmultiinputcontext.cpp ++ - Moved from src/input/qmultiinputcontext.cpp. No code changes have ++ been applied ++ ++ * plugins/src/inputmethods/simple/simple.pro ++ - New file ++ * plugins/src/inputmethods/simple/qsimpleinputcontextplugin.h ++ - New file ++ * plugins/src/inputmethods/simple/qsimpleinputcontextplugin.cpp ++ - New file ++ * plugins/src/inputmethods/simple/qsimpleinputcontext.h ++ - Moved from src/input/qsimpleinputcontext.h. No code changes have ++ been applied ++ * plugins/src/inputmethods/simple/qsimpleinputcontext.cpp ++ - Moved from src/input/qsimpleinputcontext.cpp. No code changes have ++ been applied ++ ++ * src/input/qinputcontextfactory.cpp ++ - (create): Remove dedicated instantiation handling for ++ QSimpleInputContext and QMultiInputContext ++ ++ * tools/qtconfig/mainwindow.h ++ - (inputMethodIdentifiers): New member variable ++ * tools/qtconfig/mainwindow.cpp ++ - (MainWindow): ++ * Replace identifier name of input methods with displaynames ++ * Add filtering out process for IM-switchers that has "imsw-" ++ prefix ++ * Disable sorting for input method names ++ * Modify some comments ++ * Simplify setCurrentItem() handling for inputMethodCombo widget ++ * Add recorded input method name to the display name of unknown ++ input method ++ * Save recorded input method name even if unknown input method ++ - (fileSave): ++ * Save /qt/DefaultInputMethodSwitcher with default value ++ "imsw-multi" ++ * Save identifier name of the input method rather than display name ++ ++ * src/kernel/qinputcontext.cpp ++ - (class QInputContext): Update the class description comment ++ ++ * src/input/qinputcontextplugin.cpp ++ - (class QInputContextPlugin): Update the class description comment ++ - (keys): Update the function description comment ++ - (languages, displayName, description): Add the function ++ description comment ++ ++ ++2004-08-05 YamaKen ++ ++ * This commit adds generic pluggable popup menu feature. See ++ http://freedesktop.org/pipermail/immodule-qt/2004-August/000266.html ++ for further information. The implementation may be altered in ++ accordance with discussion in the list. ++ ++ * src/kernel/qinputcontext.h ++ - (struct QInputContextMenu): New struct ++ - (qt4menus): New function. Just a placeholder for now ++ - (menus): New function ++ - (exportMenusInto): New function ++ * src/kernel/qinputcontext.cpp ++ - (class QInputContext): Add 'Text widget implementor's guide' ++ section to the class description comment ++ - (menus): New function ++ - (exportMenusInto): New function ++ ++ * src/input/qmultiinputcontext.h ++ - (qt4menus): New function. Just a placeholder for now ++ - (menus): New function ++ * src/input/qmultiinputcontext.cpp ++ - (menus): ++ * New function to follow new API. The function merges slave menus ++ and QMultiInputContext's own 'Select Input Method' menu ++ * The functionality is ported from QLineEdit::createPopupMenu() ++ * An accelerator has been added as 'Select Input &Method' ++ ++ * src/widgets/qtextedit.cpp ++ - Remove QMultiInputContext dependency ++ - (createPopupMenu): Replace QMultiInputContext dependent submenu ++ handling with the pluggable popup menu ++ * src/widgets/qlineedit.cpp ++ - Remove QMultiInputContext dependency ++ - (createPopupMenu): Replace QMultiInputContext dependent submenu ++ handling with the pluggable popup menu ++ ++ * src/kernel/qwidget.h ++ - Remove #include "qinputcontext.h" to reduce compile time when we ++ hacked qinputcontext.h ++ ++2004-08-04 Kazuki Ohta ++ ++ * src/input/qmultiinputcontext.cpp ++ - use QInputContextFactory::description and set whatsthis help ++ ++2004-08-03 YamaKen ++ ++ * This commit adds QInputContextFactory::description() feature ++ ++ * src/input/qinputcontextinterface_p.h ++ - Update the UUID because the interface has been changed ++ - (description): New function ++ ++ * src/input/qinputcontextplugin.h ++ - (description): New function ++ ++ * src/input/qinputcontextfactory.h ++ - (description): New function ++ - (QInputContextPluginPrivate::description): New function ++ * src/input/qinputcontextfactory.cpp ++ - (description): New function ++ - (displayName): Replace fallback value with empty string instead of ++ null ++ ++2004-08-03 YamaKen ++ ++ * This commit alters the configuration convention about ++ IM-switcher. See ++ http://freedesktop.org/pipermail/immodule-qt/2004-August/000232.html ++ for further information. The implementation may be altered in ++ accordance with discussion in the list. ++ ++ * src/kernel/qapplication_x11.cpp ++ - (defaultIM): Replace "xim" with "imsw-multi" ++ - (x11_apply_settings): ++ * Replace the environment variable name QT_IM_MODULE with ++ QT_IM_SWITCHER ++ * Replace the qtrc variable name /qt/DefaultInputMethod with ++ /qt/DefaultInputMethodSwitcher ++ * Replace "xim" with "imsw-multi" for default plugin ++ ++ * src/input/qmultiinputcontext.h ++ - (lastCreatedIMKey): Remove to rename to currentIMKey ++ - (currentIMKey): New member variable. Renamed from lastCreatedIMKey ++ because the semantics of the variable has been changed by ++ introduction of QT_IM_SWITCHER ++ ++ * src/input/qmultiinputcontext.cpp ++ - Replace lastCreatedIMKey with currentIMKey ++ - (QMultiInputContext): Add default input method specification ++ feature using QT_IM_MODULE and /qt/DefaultInputMethod ++ - (createImSelPopup): ++ * Add IM-switcher plugin elimination feature using "imsw-" prefix ++ * Add dispName.isNull() checking ++ * Apply some rewriting without altering logic for human readability ++ ++ * src/input/qinputcontextfactory.cpp ++ - (create): Replace the identifier name "multi" with "imsw-multi" ++ ++2004-08-03 Kazuki Ohta ++ ++ * This commit implements table searching suite ++ ++ - QKeyEvent::text() is restricted to only one character, ++ so qsimpleic use QChar::unicode() value in case keys are ++ pressed otherwise composing keys are pressed. ++ ++ - Composing Table is temporally deleted for testing. ++ Need to prepare proper entries. ++ Now qsimpleic can deal with capital letter more cleaner way ++ ++ * Next, I introduce X's composing parser to qsimpleic ++ ++2004-08-02 YamaKen ++ ++ * src/kernel/qapplication_x11.cpp ++ - (x11_apply_settings): Merge the comment about defaultIM ++ overwritten by r52 from r45 ++ ++2004-07-31 LiuCougar ++ ++ new environment variable QT_IM_MODULE to overwrite the default inputmethod plugin ++2004-07-31 LiuCougar ++ ++ "deleteLater" is safer then "delete" QObject directly ++2004-07-30 YamaKen ++ ++ * src/kernel/qnamespace.h ++ - (Qt::Key): ++ * Replace dead key values with new one to avoid keycode conflict ++ * Add a comment about the latin 1 keycodes ++ * Add some comments about the offset for keycode from X keycode ++ * src/kernel/qevent.cpp ++ - (key): Add a comment about latin 1 keycodes to the function ++ description. ++ ++ * src/kernel/qapplication_x11.cpp ++ - Define define XK_XKB_KEYS to include dead key definitions from ++ keysymdef.h ++ - Remove XK_dead_ keys definition ++ ++2004-07-29 Kazuki Ohta ++ ++ * Change to use displayName() in IM-Switch Popupmenu ++ ++ * src/input/qmultiinputcontext.h ++ - (keyDict): new variable ++ * src/input/qmultiinputcontext.cpp ++ - (createImSelPopup): use displanName() on popup and store key in keyDict ++ - (changeInputMethodWithMenuId): find key from using keyDict ++ ++ * Problem * ++ - if key=="XIM", displayName(key) is QString::null ++ * Wish * ++ - add "virtual QString description( const QString &key ) = 0;" for showing the description of IM on PopupMenu as a whatsthis help ++ ++2004-07-28 YamaKen ++ ++ * src/input/qinputcontextinterface_p.h ++ - Update the UUID because the interface has been changed ++ - (languages): New function ++ - (displayName): New function ++ ++ * src/input/qinputcontextplugin.h ++ - (languages): New function ++ - (displayName): New function ++ * src/input/qinputcontextplugin.cpp ++ - (QInputContextPluginPrivate::languages): New function ++ - (QInputContextPluginPrivate::displayName): New function ++ ++ * src/input/qinputcontextfactory.h ++ - (languages): New function ++ - (displayName): New function ++ * src/input/qinputcontextfactory.cpp ++ - (languages): New function ++ - (displayName): New function ++ ++2004-07-27 YamaKen ++ ++ * src/kernel/qinputcontext.h ++ - (deletionRequested): New signal. Added for fatal error handling ++ * src/kernel/qinputcontext.cpp ++ - (deletionRequested): Add the function description comment ++ * src/kernel/qwidget.h ++ - (destroyInputContext): Change ordinary function to slot to receive ++ the signal QInputContext::deletionRequested() ++ * src/kernel/qwidget_x11.cpp ++ - (changeInputContext, createInputContext): ++ * Connect deletionRequested() signal of qic to destroyInputContext() ++ * Follow renaming of QApplication::imEventReceived() to postIMEvent() ++ - (destroyInputContext): Modify the function description comment ++ ++ * src/input/qximinputcontext_p.h ++ - (close): New function ++ * src/input/qximinputcontext_x11.cpp ++ - (close_xim): ++ * Remove invalid QApplication::close_im() invocation ++ * Add proper finalization using deletionRequested() signal ++ - (close): New function ++ ++ * src/kernel/qapplication.h ++ - (imEventReceived): Remove this inappropriate name to rename to ++ postIMEvent() ++ - (postIMEvent): New slot. Renamed from imEventReceived() ++ * src/kernel/qapplication_x11.cpp ++ - (imEventReceived): Remove this inappropriate name to rename to ++ postIMEvent() ++ - (postIMEvent): New slot. Renamed from imEventReceived() ++ - (close_im): Remove unused commented out code. The code had already ++ been moved to qximinputcontext.cpp ++ ++ * src/input/qmultiinputcontext.h ++ - (destroyInputContext): New slot ++ - (imEventReceived): Remove this inappropriate name to rename to ++ postIMEvent() ++ - (postIMEvent): New slot. Renamed from imEventReceived() ++ * src/input/qmultiinputcontext.cpp ++ - (QT_NO_IM_QMULTIINPUTCONTEXT_IMINDEX): New macro. Defined as default ++ - (filterEvent): Insert #ifdef QT_NO_IM_QMULTIINPUTCONTEXT_IMINDEX ++ - (destroyInputContext): New slot. Processes deletionRequested from slave ++ - (imEventReceived): Remove this inappropriate name to rename to ++ postIMEvent() ++ - (postIMEvent): New slot. Renamed from imEventReceived() ++ - (slave): ++ * Add proper instanciation code for popup menu mode ++ * Insert #ifdef QT_NO_IM_QMULTIINPUTCONTEXT_IMINDEX ++ - (changeInputMethod(int)): ++ * Add error handling for no available input methods ++ * Insert #ifdef QT_NO_IM_QMULTIINPUTCONTEXT_IMINDEX ++ - (changeInputMethod(QString)): ++ * Add error handling for no available input methods ++ * Add default selection for null key ++ * Connect deletionRequested() signal ++ * Fix debug message ++ * src/widgets/qtextedit.cpp ++ - (createPopupMenu): ++ * Add NULL check for input context ++ * Replace the label "SelectInputMethod" with "Select Input Method" ++ * src/widgets/qlineedit.cpp ++ - (createPopupMenu): ++ * Add NULL check for input context ++ * Replace the label "SelectInputMethod" with "Select Input Method" ++ ++2004-07-27 YamaKen ++ ++ * src/kernel/qwidget_x11.cpp ++ - (changeInputContext): ++ * Remove unnecessary createInputContext() ++ * Reorder the code fragments to reduce temporal memory consumption ++ ++2004-07-27 YamaKen ++ ++ * This commit is a comment and variable name update. No actual code is ++ modified. ++ ++ * src/kernel/qinputcontext.cpp ++ - (class QInputContext): Modify the class description comment ++ - (filterEvent): Mark the argument as /* const */ to make it const ++ in future ++ - (reset): Add a requirement to the function description comment for ++ reimplementation ++ ++ * src/kernel/qapplication_x11.cpp ++ - (locateICHolderWidget, icHolderWidgets, changeAllInputContext): ++ Modify the function description comment ++ ++ * src/kernel/qwidget_x11.cpp ++ - (changeInputContext): ++ * Rename 'name' with 'identifierName' to eliminate the ambiguity ++ * Modify the function description comment ++ * Modify a comment ++ * Follow Trolltech's coding style ++ - (createInputContext): ++ * Modify the function description comment ++ * Modify a comment ++ - (resetInputContext): Modify the function description comment ++ ++ * src/kernel/qapplication_x11.cpp ++ - (defaultIM): Modify the comment ++ - (changeAllInputContext): ++ * Rename 'name' with 'identifierName' to eliminate the ambiguity ++ * Follow Trolltech's coding style ++ - (defaultInputMethod): Modify the function description comment ++ - (x11_apply_settings): Modify a comment ++ ++ * src/input/qinputcontextplugin.cpp ++ - (class QInputContextPlugin): Modify the class description comment ++ - (create): Modify the function description comment ++ ++ * src/input/qinputcontextfactory.cpp ++ - (create): Modify the function description comment ++ ++2004-07-24 YamaKen ++ ++ * src/kernel/qinputcontext.cpp ++ - Add #if defined(Q_WS_X11) around X11 platform specific ++ functions. these functions cannot be moved to ++ qinputcontext_x11.cpp at now since the QInputContextPrivate is ++ defined in qinputcontext.cpp. This will be fixed in porting to ++ Qt4. ++ - (filterEvent): Add the function description comment according ++ with the Simplified API (filtering precedence, key compression) ++ ++ * src/kernel/qapplication_x11.cpp ++ - (locateICHolderWidget, icHolderWidgets, changeAllInputContext): ++ Modify the function description comment ++ ++2004-07-24 YamaKen ++ ++ * This commit is a comment update. No code is modified. ++ ++ * src/kernel/qinputcontext.cpp ++ - (class QInputContext): Add the class description comment according ++ with the Simplified API (preedit relocation is done, not entirely ++ completed yet) ++ ++2004-07-24 YamaKen ++ ++ * This commit contains the fixes in response to Lars Knoll's ++ advice. Thanks for the advice. ++ ++ * src/kernel/qapplication_x11.cpp ++ - (x11_apply_settings): Remove trUtf8() from "xim" to specify the ++ default input method ++ ++ * src/kernel/qapplication_x11.cpp, src/input/qximinputcontext_x11.cpp ++ - (ximServer, xim_preferred_style, composingKeycode, input_mapper): ++ Add qt_ prefix to avoid symbol space pollution ++ - (qt_ximServer, qt_xim_preferred_style, qt_ximComposingKeycode, ++ qt_input_mapper): Renamed from above one ++ ++2004-07-24 YamaKen ++ ++ * This commit is a comment update. No code is modified. ++ ++ * src/kernel/qinputcontext.cpp ++ - (class QInputContext): Modify several expressions ++ ++2004-07-23 YamaKen ++ ++ * This commit is a comment update. No code is modified. ++ ++ * src/kernel/qinputcontext.cpp ++ - (class QInputContext): Add the class description comment according ++ with the Simplified API (preedit preservation is done, not ++ entirely completed yet) ++ - (QInputContext, focusWidget, setFocusWidget, isComposing, ++ setFocus, unsetFocus): Modify a typo in the function description ++ comment ++ ++2004-07-23 YamaKen ++ ++ * src/input/qsimpleinputcontext.cpp ++ - Modify the file header description ++ * src/input/qmultiinputcontext.cpp ++ - Modify the file header description ++ * src/input/qsimpleinputcontext.h ++ - Modify the file header description ++ * src/input/qmultiinputcontext.h ++ - Modify the file header description ++ ++2004-07-23 YamaKen ++ ++ * src/input/qsimpleinputcontext.h ++ - Add a copyright and license header ++ ++ * src/input/qsimpleinputcontext.cpp ++ - Add a copyright and license header ++ ++2004-07-23 YamaKen ++ ++ * This commit is a comment update. No code is modified. ++ ++ * src/kernel/qinputcontext.cpp ++ - (class QInputContext): Add the class description comment according ++ with the Simplified API (not completed yet) ++ - (QInputContext): Modify a expression in the function description ++ comment ++ - (sendIMEventInternal, font): Modify a typo in the function ++ description comment ++ ++2004-07-23 Kazuki Ohta ++ ++ * src/input/qsimpleinputcontext.cpp ++ - OOps. fix typo. ++ ++2004-07-23 Kazuki Ohta ++ ++ * src/input/qsimpleinputcontext.cpp ++ - follow Qt coding rule ++ - more valid capitalize case ++ ++2004-07-23 Kazuki Ohta ++ ++ * src/input/qinputcontextfactory.cpp ++ - enable QSimpleInputContext by specifying in qtrc "DefaultInputMethod=simple" ++ ++2004-07-23 Kazuki Ohta ++ ++ * This commit add simple table based InputContext for dead/multi key support ++ ++ * src/input/qsimpleinputcontext.h, src/input/qsimpleinputcontext.cpp ++ - simple table based InputContext ++ ++2004-07-22 Kazuki Ohta ++ ++ * kernel/qapplication_x11.cpp, kernel/qnamespace.h ++ - add dead key entries ++ ++2004-07-22 YamaKen ++ ++ * This commit is a comment update. No code is modified. ++ ++ * src/kernel/qinputcontext.cpp ++ - (holderWidget, setHolderWidget, focusWidget, setFocusWidget, ++ releaseComposingWidget, isPreeditRelocationEnabled, isComposing, ++ sendIMEventInternal, sendIMEvent): Add the function description comment ++ according with the Simplified API ++ - (QInputContext, setFocus, unsetFocus): Update the function ++ description comment according with the Simplified API ++ - (~QInputContext, imEventGenerated): Add the function description ++ comment ++ - (reset, identifierName, language, filterEvent): Update the ++ function description comment ++ - (setMicroFocus, mouseHandler, reset, identifierName, language): ++ Modify a expression in the function description comment ++ ++ * src/kernel/qwidget_x11.cpp ++ - (icHolderWidget, resetInputContext, focusInputContext, ++ unfocusInputContext, sendMouseEventToInputContext): Update the ++ function description comment ++ ++ * src/kernel/qapplication_x11.cpp ++ - (imEventReceived): Update the function description comment ++ ++2004-07-21 Kazuki Ohta ++ ++ * src/input/qmultiinputcontext.h ++ - (createImSelPopup): new function ++ - (changeInputMethodWithMenuId): new slot ++ - (changeInputMethod(QString)): new function ++ - (popup): new variable ++ - (lastCreatedIMKey): new variable ++ ++ * src/input/qmultiinputcontext.cpp ++ - add #ifndef QT_NO_IM ++ - (createImSelPopup): create QPopupMenu object which can switch IM. ++ Currently selected IM is marked as checked. ++ ++ * src/input/qinputcontextfactory.h ++ - remove "class QPopupMenu" ++ ++ * src/widget/qtextedit.cpp ++ - add im-switch popup to the menu which is shown when widget is right-clicked. ++ ++ * src/widget/qlineedit.cpp ++ - add im-switch popup to the menu which is shown when widget is right-clicked. ++ ++2004-07-21 YamaKen ++ ++ * src/kernel/qinputcontext.cpp ++ - (filterEvent, setMicroFocus, mouseHandler): Update the function ++ description comment according with the Simplified API ++ - (reset, identifierName, language): Update the function description ++ comment ++ ++2004-07-20 YamaKen ++ ++ * src/input/qmultiinputcontext.cpp ++ - (changeInputMethod): Fix invalid imIndex circulation. Thanks ++ to Kazuki for reporting ++ ++2004-07-20 YamaKen ++ ++ * This commit enables a flexible signal connection ++ configuration. Default behavior is based on Cougar's ++ suggestion. Thanks. ++ ++ * src/input/qmultiinputcontext.h ++ - (beIndirectlyConnected): New instance variable ++ ++ * src/input/qmultiinputcontext.cpp ++ - (QMultiInputContext): Add beIndirectlyConnected to initializer list ++ - (imEventReceived): Add a function description comment ++ - (changeInputMethod): Connect imEventGenerated signal of slave ++ according with beIndirectlyConnected. The default behavior is ++ changed as directly connected to imEventGenerated signal of this ++ ++2004-07-20 YamaKen ++ ++ * src/kernel/qwidget_x11.cpp ++ - (setMicroFocusHint): Update the comment about XIM handling ++ - (focusInputContextunfocusInputContext, ++ sendMouseEventToInputContext): Add the function description comment ++ ++ * src/kernel/qinputcontext_x11.cpp ++ - (x11FilterEvent): Update the function description comment ++ according with the Simplified API ++ ++2004-07-20 YamaKen ++ ++ * src/input/qmultiinputcontext.cpp ++ - (changeInputMethod): Fix the conversion to const char * from ++ identifierName() ++ ++2004-07-20 YamaKen ++ ++ * src/input/qximinputcontext_p.h ++ - (identifierName): Replace the result "XIM" with "xim" to be ++ consistent with corresponding immodule of GTK+ ++ ++ * src/kernel/qapplication_x11.cpp ++ - (defaultIM, x11_apply_settings): Replace "XIM" with "xim" ++ ++ * src/input/qinputcontextfactory.cpp ++ - (create, keys): Replace "XIM" with "xim" ++ ++ * tools/qtconfig/mainwindow.cpp ++ - (MainWindow): Replace "XIM" with "xim" ++ ++2004-07-20 YamaKen ++ ++ * This commit enables QInputContext proxying, and provide an ++ experimental immodule-switcher QMultiInputContext as its ++ examples. The changes is following. ++ ++ 1. Use signal to deliver QIMEvent instead of explicit ++ postEvent(). This enables QIMEvent proxying and better platform ++ abstraction. Corresponding slot is created as ++ QApplication::imEventReceived(). ++ ++ 2. Move some methods of QInputContext to public from protected or ++ private. This enables that proxy-IM can access slave methods. ++ ++ 3. Make some methods of QInputContext virtual. This enables ++ overriding the methods as proxy ++ ++ 4. Rename QInputContext::name() to identifierName() to avoid ++ conflicting with QObject::name() ++ ++ This patch does not break binary compatibility from vanilla Qt3. ++ But it costs immodule developer small modification. ++ ++ * src/kernel/qinputcontext.h ++ - (class QInputContext): Inherit QObject and add Q_OBJECT macro ++ - (name): Remove to rename to identifierName() to avoid conflicting ++ with QObject::name() ++ - (identifierName): New function. Renamed from name() ++ - (isComposing, isPreeditRelocationEnabled): Move to public from ++ protected to allow proxying ++ - (setFocusWidget,setHolderWidget, releaseComposingWidget): Move to ++ public from private to allow proxying ++ - (focusWidget, holderWidget): ++ * Make public from protected ++ * Make virtual to allow overriding the method as proxy ++ - (imEventGenerated): New signal ++ ++ * src/kernel/qinputcontext.cpp ++ - (QInputContext): Add QObject() to initializer list ++ - (sendIMEventInternal): Replace QApplication::postEvent with signal ++ emitting according to the change ++ - (name): Remove to rename to identifierName() to avoid conflicting ++ with QObject::name() ++ - (identifierName): ++ * New function. Renamed from name() ++ * Return type has changed to QCString from QString to avoid using ++ of i18n string and confusing this with display name for endusers ++ ++ * src/kernel/qwidget_x11.cpp ++ - (changeInputContext): Add QObject::connect() to follow the change ++ of IMEvent flow ++ - (createInputContext): Add QObject::connect() to follow the change ++ of IMEvent flow ++ ++ * src/kernel/qapplication.h ++ - (imEventReceived): New slot ++ * src/kernel/qapplication_x11.cpp ++ - (imEventReceived): New slot to relay QIMEvent to event queue using ++ postEvent() ++ ++ * src/input/qmultiinputcontext.h ++ - New file. Copyright and licensing information is temporarily ++ adapted to our cirmumstances ++ - (QMultiInputContext): New class ++ - (QMultiInputContext): New function ++ - (~QMultiInputContext): New function ++ - (identifierName): New function ++ - (language): New function ++ - (x11FilterEvent): New function. Added based on Cougar's ++ advice. Thanks ++ - (filterEvent): New function ++ - (reset): New function ++ - (setFocus): New function ++ - (unsetFocus): New function ++ - (setMicroFocus): New function ++ - (mouseHandler): New function ++ - (font): New function ++ - (isComposing): New function ++ - (isPreeditRelocationEnabled): New function ++ - (focusWidget): New function ++ - (holderWidget): New function ++ - (setFocusWidget): New function ++ - (setHolderWidget): New function ++ - (releaseComposingWidget): New function ++ - (slave): New function ++ - (slave): New function (const QInputContext *slave() const) ++ - (changeInputMethod): New function ++ - (imEventReceived): New slot ++ * src/input/qmultiinputcontext.cpp ++ - New file. Copyright and licensing information is temporarily ++ adapted to our cirmumstances ++ - (QMultiInputContext): New function ++ - (~QMultiInputContext): New function ++ - (identifierName): New function ++ - (language): New function ++ - (x11FilterEvent): New function. Added based on Cougar's ++ advice. Thanks ++ - (filterEvent): New function. Filters Control+Alt+Key_Down and ++ Control+Alt+Key_Up as IM selection keys as temporary ++ implementation. We should show popup menu ++ - (reset): New function ++ - (setFocus): New function ++ - (unsetFocus): New function ++ - (setMicroFocus): New function ++ - (mouseHandler): New function ++ - (font): New function ++ - (isComposing): New function ++ - (isPreeditRelocationEnabled): New function ++ - (focusWidget): New function ++ - (holderWidget): New function ++ - (setFocusWidget): New function ++ - (setHolderWidget): New function ++ - (releaseComposingWidget): New function ++ - (slave): New function ++ - (slave): New function (const QInputContext *slave() const) ++ - (changeInputMethod): New function ++ - (imEventReceived): New slot ++ * src/input/qinputcontextfactory.cpp ++ - (create): Add QMultiInputContext instanciation. Use the name ++ "multi" to specify it ++ * src/input/qinputcontextfactory.h ++ - Add #include "qinputcontext.h" to avoid compilation error ++ ++ * src/input/qximinputcontext_p.h ++ - (class QXIMInputContext): Add Q_OBJECT macro to follow the API change ++ - (name): Remove to follow the API change ++ - (identifierName): ++ * New function. Renamed from name() ++ * Return type has changed to QCString from QString to follow the ++ API change ++ - (isPreeditRelocationEnabled): Move to public from protected to ++ follow the API change ++ - (isComposing): Remove unnecessary access permission breaker ++ because QInputContext::isComposing() have made public ++ * src/input/qximinputcontext_x11.cpp ++ - (isComposing): Remove unnecessary access permission breaker ++ because QInputContext::isComposing() have made public ++ ++ * src/input/qt_input.pri ++ - Add qmultiinputcontext.h and multiinputcontext.cpp ++ ++2004-07-18 LiuCougar ++ ++ use virtual insert version to make subclasses work as expected (merged from bc-branch r19) ++2004-07-16 Kazuki Ohta ++ ++ * src/input/qinputcontextfactory.h: not the definition of QInputContextPlugin ++ ++2004-07-13 YamaKen ++ ++ * src/kernel/qapplication_x11.cpp ++ - (x11ProcessEvent): Add comment for key event filtering considerations ++ - (QETWidget::translateKeyEvent): Add comment for key compression ++ considerations ++ ++2004-07-11 YamaKen ++ ++ * src/kernel/qwidget.h ++ - (sendMouseEventToInputContext): Move into #if defined(Q_WS_X11) ++ because it is not implemented in other platforms ++ ++2004-07-11 YamaKen ++ ++ * This commit fixes a mismerge with my Simplified API patches ++ ++ * src/kernel/qwidget_x11.cpp ++ - (destroyInputContext): Replace the code with original Simplified ++ API patch. See the comment to recognize the original intention ++ - (focusInputContext): Fix a condition to call qic->setFocus() as ++ originally written. See added comment to recognize the original ++ intention ++ ++ * src/kernel/qwidget.h ++ - (changeInputContext): Move into #if defined(Q_WS_X11) as ++ originally written because it is not implemented in other ++ platforms ++ ++ * src/input/qximinputcontext_p.h ++ - (mouseHandler): Fix a typo as originally written ++ ++ * src/input/qximinputcontext_x11.cpp ++ - Fix a comment location to express original intention ++ ++2004-07-08 LiuCougar ++ ++ replace sendEvent with postEvent in qinputcontext to improve the process performance of IMCompose events ++2004-07-08 YamaKen ++ ++ * Insert the comment 'UPDATED COMMENT REQUIRED' into some places for future ++ modifications ++ * Modify some comments ++ * Replace 'InputMethod' in some comments with 'input method' ++ * Replace 'InputContext' in some comments with 'input context' ++ ++ * src/kernel/qinputcontext.h ++ - Move description of QInputContext to qinputcontext.cpp ++ * src/kernel/qinputcontext.cpp ++ - Move description of QInputContext from qinputcontext.h ++ ++2004-07-07 Daisuke Kameda ++ ++ Adding the function which realize mapping arbitrary input context and widget: ++ QApplication::locateICHolderWidget() ++ QApplication::icHolderWidgets() ++ QWidget::icHolderWidget() ++ QWidget::getInputContext() ++ ++ Adding the function which changes input method: ++ QApplication::changeAllInputContext() ++ QWidget::changeInputContext() ++ QApplication::defaultInputMethod() ++ ++ change QApplication::create_xim() to QApplication::create_im() ++ change QApplication::close_xim() to QApplication::close_im() ++ ++ ++2004-07-06 Daisuke Kameda ++ ++ "QLineEdit should only setMicroFocus if the cursorRect has changed" by cougar ++ ++2004-07-06 Daisuke Kameda ++ ++ Re-Creating immodule for Qt/X11 trunk ++ ++2004-06-22 YamaKen ++ ++ * src/kernel/qinputcontext.h ++ - (sendIMEvent): Private version of sendIMEvent(). Remove to ++ rename to sendIMEventInternal ++ - (sendIMEventInternal): Rename from sendIMEvent and accept ++ discrete variables rather than QEvent *e to be adaptable ++ to Qt/Embedded ++ * src/kernel/qinputcontext.cpp ++ - (sendIMEvent): Protected version of sendIMEvent(). Move ++ QEvent construction to sendIMEventInternal() ++ - (sendIMEvent): Private version of sendIMEvent(). Remove to ++ rename to sendIMEventInternal ++ - (sendIMEventInternal): ++ * Rename from sendIMEvent ++ * accept discrete variables rather than QEvent *e to be ++ adaptable to Qt/Embedded ++ * Add placeholder for Qt/Embedded ++ - (setFocusWidget): Follow specification change of sendIMEvent() ++ ++2004-06-20 YamaKen ++ ++ * src/kernel/qevent.h ++ - (class QIMError): Remove to rename to QIMErrorEvent ++ - (class QIMErrorEvent): Rename from QIMError ++ - (QIMErrorEvent::isDeleteIC): Remove to rename to isDeletionRequest ++ - (QIMErrorEvent::isDeletionRequest): Rename from isDelete ++ ++ * src/kernel/qwidget.h ++ - (imErrorEvent): Follow renaming of QIMError ++ * src/kernel/qwidget.cpp ++ - (imErrorEvent): Follow renaming of QIMError and ++ QIMError::isDeleteIC() ++ - (event): Follow renaming of QIMError ++ ++ * src/kernel/qinputcontext.h ++ - (ownerWidget): Remove to rename to holderWidget ++ - (holderWidget): Rename from ownerWidget ++ - (setOwnerWidget): Remove to rename to setHolderWidget ++ - (setHolderWidget): Rename from setOwnerWidget ++ - (releaseComposingWidget): New function. ++ * src/kernel/qinputcontext.cpp ++ - (class QInputContextPrivate): Rename ownerWidget to holderWidget ++ - (ownerWidget): Remove to rename to holderWidget ++ - (holderWidget): Rename from ownerWidget ++ - (setOwnerWidget): Remove to rename to setHolderWidget ++ - (setHolderWidget): Rename from setOwnerWidget ++ - (sendIMError): Follow renaming of QIMError and ++ QIMError::isDeleteIC() ++ - (releaseComposingWidget): New function. ++ ++ * src/input/qinputcontextfactory.cpp ++ - (create): Follow renaming of QInputContext::setOwnerWidget() ++ ++ * src/kernel/qwidget_x11.cpp ++ - (destroy): Add qic->releaseComposingWidget() to reset ++ preserved composing information involving this widget ++ ++2004-06-15 YamaKen ++ ++ * src/kernel/qwidget_x11.cpp ++ - (setMicroFocusHint): Replace relative coordinate with ++ global one for qic->setMicroFocus(). This is required to ++ share particular IM plugin code with Qt/Embedded ++ ++ * src/widgets/qlineedit.cpp ++ - (sendMouseEventToInputContext): Add button event sending ++ when clicking on out of preedit ++ ++ * src/widgets/qtextedit.cpp ++ - (sendMouseEventToInputContext): Add button event sending ++ when clicking on out of preedit ++ ++ * src/input/qximinputcontext_p.h ++ - (isComposing): New function ++ - (composing, cpos, sellen): Remove to follow API change ++ - (isPreeditRelocationEnabled): New overriding function to ++ follow API change ++ - (isPreeditPreservationEnabled): New function ++ ++ * src/input/qximinputcontext_x11.cpp ++ - (xic_start_callback, xic_draw_callback, xic_done_callback, ++ x11FilterEvent, reset): Replace qic->composing with ++ qic->isComposing() to use automatic compose state tracking ++ of QInputContext ++ - (QXIMInputContext): Remove composing, cpos, sellen from ++ initializer list ++ - (sendIMEvent): Remove remembering of cpos, sellen ++ - (reset): Replace IMEnd event sending with ++ QInputContext::reset() ++ - (resetClientState): Remove cpos, sellen, composing ++ - (isComposing): Exported interface for xic callbacks to ++ access protected QInputContext::isComposing() ++ - (setMicroFocus): Follow API change that replaces relative ++ coordinate with global one ++ - (mouseHandler): Add approprate reset on clicking ++ - (setFocus, unsetFocus): Remove preedit preservation and ++ relocation to follow API change. They are moved to ++ QInputContext as generarization ++ - (isPreeditRelocationEnabled): New function to follow API ++ change. ++ - (isPreeditPreservationEnabled): New function. This ++ indicates that whether preedit state should be preserved ++ or not when focusing out the widget ++ ++2004-06-14 YamaKen ++ ++ * src/kernel/qinputcontext.h ++ - (setFocus): Remove hasPreservedPreedit arg ++ - (unsetFocus): Remove preservePreedit arg ++ - (isPreeditRelocationEnabled): New function ++ - (isComposing): New function ++ ++ * src/kernel/qinputcontext.cpp ++ - (class QInputContextPrivate): Reorganize variables for ++ preedit relocation ++ - (QInputContextPrivate::resetComposingState): New function ++ - (QInputContextPrivate::updateComposingState): New function ++ - (setFocusWidget): Add preedit relocation support. Preedit ++ state is relocated to another text widget when the shared ++ context has focused on the another text widget. This ++ feature is mainly used by Japanese input methods ++ - (isPreeditRelocationEnabled): New function. Preedit ++ relocation is enabled only if this function returned TRUE. ++ - (isComposing): New function. Returns current composing ++ state as result of automatic compose state tracking ++ through sendIMEvent(). The function is for used by ++ subclass of QInputContext to know preedit state of the ++ widget. Although QWidget and QInputContextFactory can ++ access to the function as friend, they must not use the ++ function to know composing state of contexts. Keep less ++ relationship to simplify input method development ++ - (sendIMEvent): New 1-arg overloaded function. The function ++ encupsulates platform-dependent IMEvent sending. Only ++ Q_WS_X11 is supported for now. Q_WS_QWS should be supported ++ - (sendIMEvent): ++ * 4-args version of the overloaded function ++ * Isolate platform-dependent event sending process to ++ separated function ++ * Add preedit relocation support ++ * Add compose state tracking support ++ - (unsetFocus): Add reset() for simple ephemeral input ++ contexts ++ - (mouseHandler): Add reset() when clicking for simple ++ ephemeral input contexts ++ - (reset): Add preedit finalization code. Overriding ++ function should call this function to ensure proper ++ preedit state ++ ++2004-06-11 YamaKen ++ ++ * src/kernel/qlineedit.cpp ++ - (QLineEditPrivate::xToPosInternal, QLineEditPrivate::xToPos): ++ Fix loose placement to tail when clicking beyond the string ++ ++2004-06-10 YamaKen ++ ++ * src/kernel/qinputcontext.h ++ - Remove several pointers to QWidget to share concrete IM ++ implementation code with Qt/Embedded. The IM model of ++ Qt/Embedded requires that widgets and input contexts are ++ existing in another process ++ - (QInputContext): Remove the QWidget * arg ++ - (focusWidget, ownerWidget): ++ * Move to protected and unrecommended ++ * Move the inline function definition to qinputcontext.cpp ++ - (filterEvent): Remove unnecessary keywidget ++ - (setFocus): ++ * Remove newFocusWidget arg ++ * Add hasPreservedPreedit arg ++ - (unsetFocus): Add preservePreedit arg ++ - (sendIMError): New function to hide ownerWidget from ++ derived QInputContext ++ - (composingWidget, setComposingWidget): New function to support ++ preedit relocation of shared context on focus transition ++ - (setFocusWidget, setOwnerWidget): New function to ++ implement internal functionality on Qt/X11 platform ++ - (d): New variable to hide ABI change ++ - (QInputContext, operator=): New function to disable copy ++ constructor and operator= ++ ++ * src/kernel/qinputcontext.cpp ++ - (class QInputContextPrivate): New class to hide ABI change ++ - (QInputContext): ++ * Follow API change ++ * Follow introducing QInputContextPrivate ++ - (~QInputContext): Follow introducing QInputContextPrivate ++ - (ownerWidget): ++ * Move from qinputcontext.h ++ * Follow introducing QInputContextPrivate ++ - (setOwnerWidget): New function to complement removal of ++ the arg of QInputContext constructor ++ - (composingWidget, setComposingWidget): New function. These ++ functions are participating with preedit relocation of shared ++ context on focus transition ++ - (focusWidget): ++ * Move from qinputcontext.h ++ * Follow introducing QInputContextPrivate ++ * Follow introducing composingWidget ++ - (setFocusWidget): New function to complement removal of ++ the QWidget * arg of setFocus() ++ - (filterEvent): Follow API change of removal of keywidget ++ - (sendIMEvent): Add #ifdef to isolate Qt/X11 dependent code ++ - (sendIMError): New function to hide ownerWidget() from ++ derived QInputContext. This is required to share particular ++ IM plugin code with Qt/Embedded ++ - (setFocus, unsetFocus): Follow API change ++ ++ * src/input/qinputcontextfactory.cpp ++ - (create): Add ownerWidget initialization for new context ++ ++ * src/kernel/qwidget.cpp ++ - (setFocus): Remove unnecessary shared input context ++ checking ++ ++ * src/kernel/qwidget_x11.cpp ++ - (setActiveWindow): Replace duplicated code with ++ focusInputContext() ++ - (getInputContext): Return input context only if ++ isInputMethodEnabled() widget, otherwise returns 0. This ++ is required for proper focus transition handling ++ - (unfocusInputContext): Follow API change of ++ QInputContext::unsetFocus() ++ ++ * src/kernel/qapplication.cpp ++ - (setActiveWindow): Follow change of QWidget::unfocusInputContext() ++ ++ * src/kernel/qapplication_x11.cpp ++ - (x11ProcessEvent): Follow API change of ++ QInputContext::filterEvent() ++ ++ * src/input/qximinputcontext_p.h ++ - (setFocus, unsetFocus): Follow API Change ++ - (hasFocus): New function ++ - (close): New function ++ ++ * src/input/qximinputcontext.cpp ++ - Remove unrecommended focusWidget() and ownerWidget() ++ - (ximWidgetList): Remove to replace with ximContextList ++ - (ximContextList): New variable ++ - (xic_draw_callback): Replace focusWidget() with hasFocus() ++ to follow API Change ++ - (QXIMInputContext): ++ * Follow API change ++ * Follow replacing to ximContextList ++ - (~QXIMInputContext): ++ * Follow replacing to ximContextList ++ * Remove unnecessary QInputContext::unsetFocus() ++ - (close_xim): ++ * Follow replacing to ximContextList ++ * Follow API change ++ - (close, hasFocus): New function. Exported interface for ++ xic_draw_callback to access protected features ++ - (setFocus, unsetFocus): Follow API change ++ ++2004-06-09 YamaKen ++ ++ * src/kernel/qwidget.cpp ++ ++ - (hide): Remove unfocusInputContext(). This caused ++ excessive invalid QInputContext::unsetFocus(). ++ QWidget::deactivateWidgetCleanup() handles ++ unfocusInputContext() appropriately via ++ qApp->setActiveWindow( 0 ). ++ ++2004-06-08 YamaKen ++ ++ * src/kernel/qrichtext_p.h ++ - (QTextCursor::place): New 5-args overloaded function ++ - (QTextCursor::place): 3-args version of the function is ++ reimplemented as inline function using new 5-args one. ++ * src/kernel/qrichtext.cpp ++ - (QTextCursor::place): Remove 3-args version of the function ++ - (QTextCursor::place): New 5-args overloaded function. This ++ is copied from 3-args one and added new args loosePlacing ++ and matchBetweenCharacters ++ ++ * src/widgets/qtextedit.cpp ++ - (sendMouseEventToInputContext): Send mouse event when only ++ mouse cursor is placed within preedit area. This is ++ accomplished by new 5-args QTextCursor::place() ++ - (contentsContextMenuEvent): Disable context menu when in ++ IM composing state ++ - (drawContents): Add updateMicroFocusHint() to follow ++ dragging of active window by the showed candidate window ++ - (contentsMouseMoveEvent): Fix cursor vanishing on IM ++ composing state ++ ++ * src/kernel/qlineedit.cpp ++ - (sendMouseEventToInputContext): Exclude character at ++ preedit[preeditLength] from being handled as preedit ++ - (contextMenuEvent): Disable context menu when in IM ++ composing state ++ - (focusInEvent): Fix invalid MicroFocusHint position which ++ caused that candidate window is always showed at end of ++ the preedit when active window is show() back ++ ++2004-06-07 YamaKen ++ ++ * src/kernel/qwidget_x11.cpp ++ - (reparentSys): Fix an invalid assumption about input ++ context location involving destroyInputContext() ++ - (deleteTLSysExtra): Remove destroyInputContext() because ++ the input context is not a extra data and should be ++ destroyed in QWidget::destroy() ++ - (destroyInputContext): Remove icHolderWidget() because ++ this function is called to destroy the input context that ++ belongs to the widget itself ++ - (destroy): Replace 'this->ic' with 'ic' ++ - (create): Replace 'this->ic' with 'ic' ++ ++ * src/kernel/qwidget.cpp ++ - (hide): Add unfocusInputContext() ++ ++ * src/kernel/qapplication.cpp ++ - (setActiveWindow): Add unfocusInputContext() ++ ++ * src/kernel/qlineedit.cpp ++ - (QLineEditPrivate::xToPosInternal): New function. Copied ++ from xToPos and Remove the safety limiter. ++ - (QLineEditPrivate::xToPos): Reimprement using xToPosInternal ++ - (sendMouseEventToInputContext): ++ * Fix position boundary as matching with character ++ boundary rather than center of character ++ * Send mouse event when only mouse cursor is placed within ++ preedit area. This is accomplished by replacing xToPos() ++ with xToPosInternal() ++ ++2004-06-04 YamaKen ++ ++ * src/kernel/qinputcontext.h ++ - (font): New function. Returns the font of focusWidget() ++ * src/kernel/qinputcontext.cpp ++ - (font): New function ++ ++ * src/kernel/qwidget_x11.cpp ++ - (setActiveWindow, focusInputContext): Avoid calling ++ qic->setFocus() if the target is identical widget ++ - (setMicroFocusHint, setActiveWindow, createInputContext, ++ destroyInputContext, resetInputContext, ++ focusInputContext): Remove obsolete comment around qic ++ retrieving ++ ++ * src/input/qximinputcontext_x11.cpp ++ - (language): Return Chinese languages appropriately (such ++ as "zh_CN") ++ ++2004-06-03 YamaKen ++ ++ * src/kernel/qinputcontext.h ++ - (getOwnerWidget): Remove to rename to ownerWidget ++ - (ownerWidget): New function. Rename from getOwnerWidget to ++ be consistent with the name focusWidget ++ - (focusWidget): New function. Add to make IM-related ++ communication with focusWidget easy. The name is imported ++ from QApplication::focusWidget to be supposed same role ++ - (language): Change return type to QCString from const char * ++ - (filterEvent): Change args. Passes QEvent *event rather than ++ preexpanded key event values. This is intended to pass other ++ IM-related events in future. The IM-related events are ++ supposed as QWheelEvent, QTabletEvent and so on ++ - (setFocusHint): Remove to be appropriate name ++ - (setMicroFocus): ++ * Rename from setFocusHint to be appropriate name. This ++ function instructs 'MicroFocus' rect within a widget that ++ is different to normal focus for widgets, so the name ++ 'setFocus' is invalid. And 'Hint' is a concept for the ++ manager of this class and loses the meaning when passed to ++ this class. The passed values are not a hint but have ++ well-defined actual effect, so the name 'Hint' is ++ invalid. Finally, Qt/Embedded 2.3.7 has a samely named ++ method in QWSInputMethod ++ * Remove the arg 'widget' to consistent with the new ++ focusWidget() method ++ - (mouseHandler): New function. The method interface is ++ imported from QWSInputMethod::mouseHandler() of Qt/Embedded ++ 2.3.7 and extended for desktop system ++ - (sendIMEvent): New function. Conventional function to send ++ QIMEvent to appropriate widget using focusWidget(). IM ++ developers can send IMEvents without tracking focuswidget by ++ themself ++ - (ownerWidget): Remove to Rename to _ownerWidget ++ - (_ownerWidget): New variable. Renamed from ownerWidget to ++ avoid name conflict with ownerWidget() ++ - (_focusWidget): New variable. ++ * src/kernel/qinputcontext.cpp ++ - (QInputContext): Follow API change ++ - (~QInputContext): Clean up ++ - (filterEvent): Follow API change ++ - (sendIMEvent): New function. ++ - (setFocusHint): Remove to follow new API ++ - (setMicroFocus): copied from setFocusHint and reimplement to ++ follow new API ++ - (mouseHandler): New function ++ - (language): Follow API change ++ ++ * src/kernel/qwidget.h ++ - (sendMouseEventToInputContext): New function ++ - (unfocusInputContext): New function ++ ++ * src/kernel/qwidget.cpp ++ - (setFocus): Invoke unfocusInputContext() with previous ++ focus widget to delegate reset responsibility to input ++ context instead of resetInputContext() directly. See also ++ comment for further information ++ - (clearFocus): Add unfocusInputContext(); ++ - (event): Delegate reset responsibility to input context ++ instead of resetInputContext() directly. See also comment ++ for further information ++ ++ * src/kernel/qwidget_x11.cpp ++ - (setMicroFocusHint): Modify to follow API change ++ - (setActiveWindow): Modify to follow API change ++ - (focusInputContext): Modify to follow API change ++ - (unfocusInputContext): New function ++ - (sendMouseEventToInputContext): New function ++ ++ * src/kernel/qapplication_x11.cpp ++ - (class QETWidget): Change translateKeyEventInternal definition ++ - (x11ProcessEvent): Change QInputContext::filterEvent() ++ invocation to follow API change ++ - (translateKeyEventInternal): ++ * Add new arg statefulTranslation to enable duplicate call ++ within single event loop. This is required to support both ++ QInputContext::filterEvent() and RTL extensions ++ * Restore accidencially omitted qt_mode_switch_remove_mask ++ handling ++ ++ * src/input/qximinputcontext_p.h ++ - (class QXIMInputContext): Follow API change of QInputContext ++ - (language): Change return type to follow new API ++ - (setFocus): Change arg to follow new API ++ - (setFocusHint): Remove to follow new API ++ - (setMicroFocus): New method to follow new API ++ - (mouseHandler): New method to follow new API ++ - (sendIMEvent): New method (reimp) ++ - (focusWidget): Remove to follow new API ++ - (cpos): New variable ++ - (sellen): New variable ++ * src/input/qximinputcontext_x11.cpp ++ - (qt_compose_emptied): Remove as result of optimization. It ++ has become unnecessary now ++ - (xic_start_callback): Add IMStart event sending as ++ result of optimization ++ - (xic_draw_callback): Optimize state management for IMEvent ++ sending, and simplify using sendIMEvent() ++ - (xic_done_callback): Simplify using sendIMEvent() ++ - (QXIMInputContext): ++ * Follow class definition change ++ * Follow API change ++ - (~QXIMInputContext): Modify to follow API change ++ - (x11FilterEvent): Optimize state management for IMEvent ++ sending, and simplify using sendIMEvent() ++ - (sendIMEvent): New function. Implement to remember last ++ IMEvent information ++ - (reset): Simplify using sendIMEvent() ++ - (resetClientState): Follow class definition change ++ - (setFocusHint): Remove to follow new API ++ - (setMicroFocus): copied from setFocusHint and modified to ++ follow new API ++ - (mouseHandler): New function. Implemented to reset the ++ context on MouseButtonPress except for Japanese IM. See ++ also comment for further information ++ - (setFocus): Reimplement to follow new API. Automatically ++ handles appropriate IMEvent sending on focus transition ++ - (unsetFocus): Reimplement to follow new API. Implemented to ++ reset the context on FocusOut except for Japanese IM. See ++ also comment for further information ++ ++ * src/widgets/qlineedit.h ++ - (sendMouseEventToInputContext): New function ++ * src/widgets/qlineedit.cpp ++ - (QLineEditPrivate::composeMode): New function ++ - (QLineEditPrivate::hasIMSelection): New function ++ - (QLineEditPrivate::preeditLength): New function ++ - (QLineEditPrivate::imSelectionLength): New function ++ - (mousePressEvent, mouseMoveEvent, mouseReleaseEvent, ++ mouseDoubleClickEvent): Support QInputContext::mouseHandler() ++ - (sendMouseEventToInputContext): New function. Retrieve the ++ position and call QWidget::sendMouseEventToInputContext() ++ - (drawContents): Follow API change ++ ++ * src/widgets/qtextedit.h ++ - (sendMouseEventToInputContext): New function ++ * src/widgets/qtextedit.cpp ++ - (QTextEditPrivate::composeMode): New function ++ - (sendMouseEventToInputContext): New function. Retrieve the ++ position and call QWidget::sendMouseEventToInputContext() ++ - (imComposeEvent, imEndEvent): Clean up with composeMode() ++ - (contentsMousePressEvent, contentsMouseMoveEvent, ++ contentsMouseReleaseEvent, contentsMouseDoubleClickEvent): ++ Support QInputContext::mouseHandler() ++ ++2004-06-01 YamaKen ++ ++ * src/input/qximinputcontext_x11.cpp (x11FilterEvent): Fix ++ commit problem except for on-the-spot style ++ ++2004-05-31 YamaKen ++ ++ * First 'Simplified API' patch. A lot of changes to be described ++ ++2004-03-16 Daisuke Kameda ++ ++ * A lot of changes to be described before this date. Almost ++ of code are written by Daisuke Kameda +--- changes.immodule ++++ changes.immodule +@@ -0,0 +1,248 @@ ++This file describes significant change from ++qt-x11-immodule-bc-qt3.3.2-20040623. ++ ++Differences from previous release ++(qt-x11-immodule-unified-qt3.3.3-20040819) are itemized with '+' ++sign. Search it to track incremental change. ++ ++**************************************************************************** ++* For users * ++**************************************************************************** ++ ++General ++------- ++ +++ A strange character inversion problem on some input methods has been ++ fixed ++ ++ ++Input methods ++------------- ++ ++- Added "simple" input method which provides dead/multi key composing ++ for latin languages ++ ++ ++User Interface ++-------------- ++ ++- Added input method selection menu in the context menu of text ++ widgets ++ ++ ++Configuration ++------------- ++ +++ default IM configuration feature of qtconfig has been disabled in BC ++ mode. This is a political change to avoid the confusion about input ++ method configuration in accordance with GTK+ environment. ++ ++ See following discussion for further information. ++ ++ http://freedesktop.org/pipermail/immodule-qt/2004-August/000416.html ++ ++- Added new environment variables QT_IM_SWITCHER and QT_IM_MODULE to ++ set user's favorite input method as default. See README.immodule for ++ examples. ++ ++ ++Build & Install ++--------------- ++ +++ configure options have been changed for internal reasons. See 'How ++ to install' section of README.immodule ++ ++- This version of immodule requires corresponding version of each ++ input method plugins (i.e. update your additional input method ++ plugins) ++ ++- Plugin directory has been changed from $QTDIR/plugins/input/ to ++ $QTDIR/plugins/inputmethods/. Delete old directory. ++ ++- Some codes have been changed to allow compiling against Qt 3.2.x or ++ earlier. ++ ++ ++**************************************************************************** ++* For develpers * ++**************************************************************************** ++ ++Documents ++--------- ++ ++- Almost description of QInputContext and QInputContextPlugin has been ++ filled. Feel free to ask obscure things at our mailinglist. ++ ++ ++New features ++------------ ++ ++- Pluggable input method switcher ++ ++ Now we can write input method switcher as an ordinary input method ++ plugin. The two plugins 'imsw-multi' and 'imsw-none' are provided as ++ default. But the architecture needs more discussion about whether ++ the design is right or not. Join the discussion. ++ ++- Pluggable popup menu ++ ++ Any input method can provide its own popup menu. See ++ http://freedesktop.org/pipermail/immodule-qt/2004-August/000266.html ++ for further information. ++ ++- QInputContext proxying ++ ++ Some methods of QInputContext have been changed to enable ++ QInputContext proxying. This feature is required to implement ++ pluggable input method switcher. ++ ++ ++General ++------- ++ +++ QInputContext has been source compatible with Qt4 version. Basic ++ input method plugin can be source compatible without #ifdef. Only ++ pluggable popup menu requires #ifdef'ed different code. In addition, ++ be careful about use of classes that is deprecated in Qt4. ++ ++- Our two development tree for Qt3 'Binary Compatible' and 'ALL' have ++ been merged into this unified source tree. The source tree is called ++ 'Unified' patch. ++ ++- 'dead keys' for latin languages have been added into Qt::Key ++ ++- Added plugins/src/inputmethods directory to build input method ++ plugins within the Qt source tree. The directory name 'inputmethods' ++ is intended to be compatible with Qt/Embedded. Install directory ++ name is still kept as 'input' for backward compatibility ++ ++- Changed XIM input method to a plugin instead of directly link into ++ libqt ++ ++- Plugin directory has been changed from $QTDIR/plugins/input/ to ++ $QTDIR/plugins/inputmethods/. Replace install directory with new ++ one. ++ ++- Fixed some bugs in previous qt-x11-immodule-bc-qt3.3.2-20040623. See ++ following log for more detail. ++ ++ * src/kernel/qwidget_x11.cpp ++ - (destroyInputContext): Replace the code with original Simplified ++ API patch. See the comment to recognize the original intention ++ - (focusInputContext): Fix a condition to call qic->setFocus() as ++ originally written. See added comment to recognize the original ++ intention ++ ++- QLocale dependency has been removed to be compiled on Qt 3.2.x or ++ earlier ++ ++- Many internal improvements and cleanups ++ ++ ++API Changes in qt-x11-immodule-unified-qt3.3.3-20040910 ++------------------------------------------------------- +++ QInputContext ++ ++ * QInputContext() ++ ++ Added 'parent' arg to be compatible with Qt4. Since the arg ++ defaults to 0, no modification of plugins are required. ++ ++ * language() ++ * identifierName() ++ ++ Return type of these two methods have been changed from QCString ++ which is deprecated in Qt4 to QString to make plugins source ++ compatible with Qt4. ++ ++ * addActionsTo() ++ ++ New method for Qt4 text widget developer ++ ++ ++API Changes in qt-x11-immodule-unified-qt3.3.3-20040812 ++------------------------------------------------------- ++ ++- QInputContext proxying ++ ++ QInputContext have been changed as follows to enable QInputContext ++ proxying. ++ ++ 1. Use signal to deliver QIMEvent instead of explicit ++ postEvent(). This enables QIMEvent proxying and better platform ++ abstraction. Corresponding slot is created as ++ QApplication::imEventReceived(). ++ ++ 2. Move some methods of QInputContext to public from protected or ++ private. This enables that proxy-IM can access slave methods. ++ ++ 3. Make some methods of QInputContext virtual. This enables ++ overriding the methods as proxy ++ ++ 4. Rename QInputContext::name() to identifierName() to avoid ++ conflicting with QObject::name() ++ ++ ++- QInputContext ++ ++ * language() ++ ++ New method to indicate current language ++ ++ * menus() ++ ++ New method for the pluggable popup menu feature ++ ++ * addMenusTo() ++ ++ New method for text widget developer ++ ++ * deletionRequested() ++ ++ New signal to request deletion of this instance. This is added for ++ fatal error handling ++ ++ * identifierName() ++ ++ This replaces name() of previous API to avoid conflicting with ++ QObject::name(), and to distinguish the role from displayName() ++ ++ * filterEvent() ++ ++ Turn the argument into const. See ++ http://freedesktop.org/pipermail/immodule-qt/2004-August/000335.html ++ for further information ++ ++ * isComposing ++ * isPreeditRelocationEnabled ++ ++ Move to public from protected to allow proxying ++ ++ * setFocusWidget ++ * setHolderWidget ++ * releaseComposingWidget ++ ++ Move to public from private to allow proxying ++ ++ * focusWidget ++ * holderWidget ++ ++ - Make public from protected to allow proxying ++ - Make virtual to allow overriding the method as proxy ++ ++- QInputContextPlugin ++ ++ * languages() ++ ++ New method which returns what languages are supported by the ++ QInputContext instance ++ ++ * displayName() ++ ++ New method which returns a user friendly i18n-ized name of the ++ QInputContext instance ++ ++ * description() ++ ++ New method which returns a i18n-ized brief description of the ++ QInputContext instance +--- configure ++++ configure +@@ -223,7 +223,7 @@ + fi + + # licensed modules depend on type of commercial license +-MODULES="styles tools kernel widgets dialogs iconview workspace" ++MODULES="styles tools kernel widgets dialogs iconview workspace inputmethod" + [ "$PLATFORM_QWS" = "yes" ] && [ "$Products" = "qt-professional" ] && MODULES="$MODULES network" + [ "$Products" != "qt-professional" ] && MODULES="$MODULES network canvas table xml opengl sql" + CFG_MODULES_AVAILABLE=$MODULES +@@ -270,6 +270,9 @@ + CFG_SQL_AUTODETECTED= + CFG_GFX_AVAILABLE= + CFG_STYLE_AVAILABLE= ++#Keep this position for CFG_IM* to avoid patch rejection ++CFG_IM=yes ++CFG_IM_EXT=no + CFG_TABLET=auto + CFG_XKB=auto + CFG_NIS=auto +@@ -401,6 +404,12 @@ + VAR=fatal_error + VAL=no + ;; ++ #Qt style yes options for immodule ++ #Keep this place to avoid patch rejection ++ -inputmethod|-inputmethod-ext) ++ VAR=`echo $1 | sed "s,^-\(.*\),\1,"` ++ VAL=yes ++ ;; + -embedded) + VAR=embedded + # this option may or may not be followed by an argument +@@ -1020,6 +1029,20 @@ + dlopen-opengl) + CFG_DLOPEN_OPENGL="$VAL" + ;; ++ inputmethod) ++ if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then ++ CFG_IM="$VAL" ++ else ++ UNKNOWN_OPT=yes ++ fi ++ ;; ++ inputmethod-ext) ++ if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then ++ CFG_IM_EXT="$VAL" ++ else ++ UNKNOWN_OPT=yes ++ fi ++ ;; + *) + UNKNOWN_OPT=yes + ;; +@@ -1899,6 +1922,13 @@ + CFG_GFX_AVAILABLE=`echo $CFG_GFX_AVAILABLE` + fi + ++# immodule extensions ++if [ "$CFG_IM" = "no" ]; then ++ CFG_IM_EXT=no ++fi ++if [ "$CFG_IM_EXT" = "yes" ]; then ++ CFG_IM=yes ++fi + + #------------------------------------------------------------------------------- + # help - interactive parts of the script _after_ this section please +@@ -2206,6 +2236,20 @@ + XKY="*" + XKN=" " + fi ++ if [ "$CFG_IM" = "no" ]; then ++ IMY=" " ++ IMN="*" ++ else ++ IMY="*" ++ IMN=" " ++ fi ++ if [ "$CFG_IM_EXT" = "no" ]; then ++ IXY=" " ++ IXN="*" ++ else ++ IXY="*" ++ IXN=" " ++ fi + cat << EOF + + Qt/X11 only: +@@ -2254,6 +2298,14 @@ + -dlopen-opengl ..... Qt uses dlopen(3) to resolve OpenGL functions + (instead of linking with OpenGL libraries directly). + ++ $IMN -no-inputmethod .... Do not compile immodule (extensible input method) ++ support. ++ $IMY -inputmethod ....... Compile immodule support. ++ ++ $IXN -no-inputmethod-ext Do not compile more immodule extensions support. ++ $IXY -inputmethod-ext ... Compile more immodule extensions support. ++ (breaks ABI with standard Qt3). ++ + EOF + fi + +@@ -2983,6 +3035,16 @@ + if [ "$CFG_XKB" = "yes" ]; then + QMAKE_CONFIG="$QMAKE_CONFIG xkb" + fi ++ if [ "$CFG_IM" = "yes" ]; then ++ QMAKE_CONFIG="$QMAKE_CONFIG inputmethod" ++ elif [ "$CFG_IM" = "no" ]; then ++ QCONFIG_FLAGS="$QCONFIG_FLAGS QT_NO_IM" ++ fi ++ if [ "$CFG_IM_EXT" = "yes" ]; then ++ QMAKE_CONFIG="$QMAKE_CONFIG inputmethod-ext" ++ elif [ "$CFG_IM_EXT" = "no" ]; then ++ QCONFIG_FLAGS="$QCONFIG_FLAGS QT_NO_IM_EXTENSIONS" ++ fi + elif [ "$PLATFORM_MAC" = "yes" ]; then + if [ "$CFG_TABLET" = "yes" ]; then + QMAKE_CONFIG="$QMAKE_CONFIG tablet" +@@ -3107,7 +3169,7 @@ + # minimal-config small-config medium-config large-config full-config + # + # Modules: +-# styles tools kernel widgets dialogs iconview workspace ++# styles tools kernel widgets dialogs iconview workspace inputmethod + # + # Enterprise/Open Source edition modules: + # network canvas table xml opengl sql +@@ -3115,6 +3177,8 @@ + # Options: + # stl + # ++# X11 : inputmethod-ext ++# + # Things that do not affect the Qt API/ABI: + # system-jpeg no-jpeg jpeg + # system-mng no-mng mng +@@ -3136,10 +3200,10 @@ + # tablet + # ipv6 + # +-# X11 : xftnameunparse x11sm xinerama xcursor xrandr xrender xftfreetype xkb ++# X11 : xftnameunparse x11sm xinerama xcursor xrandr xrender xftfreetype xkb inputmethod + # Embedded: embedded ft + # +-ALL_OPTIONS="styles tools kernel widgets dialogs iconview workspace network canvas table xml opengl sql stl" ++ALL_OPTIONS="styles tools kernel widgets dialogs iconview workspace inputmethod network canvas table xml opengl sql stl" + BUILD_CONFIG= + BUILD_OPTIONS= + +@@ -3153,7 +3217,7 @@ + BUILD_CONFIG="$config_option" + ;; + +- styles|tools|kernel|widgets|dialogs|iconview|workspace|network|canvas|table|xml|opengl|sql|stl) ++ styles|tools|kernel|widgets|dialogs|iconview|workspace|inputmethod|network|canvas|table|xml|opengl|sql|stl) + # these config options affect the Qt API/ABI. they should influence + # the generation of the buildkey, so we don't skip them + SKIP="no" +@@ -3500,6 +3564,8 @@ + echo "XRender support ..... $CFG_XRENDER" + echo "Xft support ......... $CFG_FREETYPE" + echo "XKB Support ......... $CFG_XKB" ++ echo "immodule support .... $CFG_IM" ++ echo "immodule ext support $CFG_IM_EXT" + elif [ "$PLATFORM_MAC" = "yes" ]; then + echo "Accessibility ....... $CFG_ACCESSIBILITY" + echo "Tablet support ...... $CFG_TABLET" +--- make-symlinks.sh ++++ make-symlinks.sh +@@ -0,0 +1,12 @@ ++#!/bin/sh ++cd include ++rm -f q*.h ++ln -s ../src/*/q*.h . ++ln -s ../extensions/*/src/q*.h . ++ln -s ../tools/assistant/lib/qassistantclient.h . ++ln -s ../tools/designer/uilib/qwidgetfactory.h . ++rm -f q*_p.h ++cd private ++rm -f q*_p.h ++ln -s ../../src/*/q*_p.h . ++ +--- plugins/src/inputmethods/imsw-multi/imsw-multi.pro ++++ plugins/src/inputmethods/imsw-multi/imsw-multi.pro +@@ -0,0 +1,14 @@ ++TEMPLATE = lib ++TARGET = qimsw-multi ++DESTDIR = ../../../inputmethods ++ ++INCLUDEPATH += . ++CONFIG += qt warn_on debug plugin ++target.path += $$plugins.path/inputmethods ++INSTALLS += target ++ ++# Input ++HEADERS += qmultiinputcontext.h \ ++ qmultiinputcontextplugin.h ++SOURCES += qmultiinputcontext.cpp \ ++ qmultiinputcontextplugin.cpp +--- plugins/src/inputmethods/imsw-multi/qmultiinputcontext.cpp ++++ plugins/src/inputmethods/imsw-multi/qmultiinputcontext.cpp +@@ -0,0 +1,379 @@ ++/**************************************************************************** ++** $Id$ ++** ++** Implementation of QMultiInputContext class ++** ++** Copyright (C) 2004 immodule for Qt Project. All rights reserved. ++** ++** This file is written to contribute to Trolltech AS under their own ++** licence. You may use this file under your Qt license. Following ++** description is copied from their original file headers. Contact ++** immodule-qt@freedesktop.org if any conditions of this licensing are ++** not clear to you. ++** ++** ++** This file is part of the input method module of the Qt GUI Toolkit. ++** ++** This file may be distributed under the terms of the Q Public License ++** as defined by Trolltech AS of Norway and appearing in the file ++** LICENSE.QPL included in the packaging of this file. ++** ++** This file may be distributed and/or modified under the terms of the ++** GNU General Public License version 2 as published by the Free Software ++** Foundation and appearing in the file LICENSE.GPL included in the ++** packaging of this file. ++** ++** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition ++** licenses may use this file in accordance with the Qt Commercial License ++** Agreement provided with the Software. ++** ++** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ++** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ++** ++** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for ++** information about Qt Commercial License Agreements. ++** See http://www.trolltech.com/qpl/ for QPL licensing information. ++** See http://www.trolltech.com/gpl/ for GPL licensing information. ++** ++** Contact info@trolltech.com if any conditions of this licensing are ++** not clear to you. ++** ++**********************************************************************/ ++ ++#ifndef QT_NO_IM ++#include "qmultiinputcontext.h" ++#include ++#include ++#include ++#ifndef QT_NO_IM_EXTENSIONS ++#include ++#endif ++ ++#include ++ ++#define QT_NO_IM_QMULTIINPUTCONTEXT_IMINDEX ++ ++QMultiInputContext::QMultiInputContext() ++ : QInputContext(), _slave( 0 ), imIndex( 0 ), cachedFocus( FALSE ), ++ cachedFocusWidget( 0 ), cachedHolderWidget( 0 ), ++ beIndirectlyConnected( FALSE ), popup( NULL ), currentIMKey( QString::null ) ++{ ++ keyDict.setAutoDelete( true ); ++ keyDict.clear(); ++ ++ if ( getenv( "QT_IM_MODULE" ) ) { ++ currentIMKey = getenv( "QT_IM_MODULE" ); ++ } else { ++#ifndef QT_NO_IM_EXTENSIONS ++ QSettings settings; ++ currentIMKey = settings.readEntry( "/qt/DefaultInputMethod", "xim" ); ++#else ++ currentIMKey = "xim"; ++#endif ++ } ++} ++ ++QMultiInputContext::~QMultiInputContext() ++{ ++ keyDict.clear(); ++} ++ ++ ++QString QMultiInputContext::identifierName() ++{ ++ return ( slave() ) ? slave()->identifierName() : ""; ++} ++ ++QString QMultiInputContext::language() ++{ ++ return ( slave() ) ? slave()->language() : ""; ++} ++ ++ ++#if defined(Q_WS_X11) ++bool QMultiInputContext::x11FilterEvent( QWidget *keywidget, XEvent *event ) ++{ ++ return ( slave() ) ? slave()->x11FilterEvent( keywidget, event ) : FALSE; ++} ++#endif // Q_WS_X11 ++ ++ ++bool QMultiInputContext::filterEvent( const QEvent *event ) ++{ ++#if !defined(QT_NO_IM_QMULTIINPUTCONTEXT_IMINDEX) ++ if ( event->type() == QEvent::KeyPress ) { ++ QKeyEvent *keyevent = (QKeyEvent *)event; ++ ++ // filter selection key ++ // Control+Alt+Key_Down: change to next input method ++ // Control+Alt+Key_Up: change to previous input method ++ if ( ( keyevent->state() & Qt::ControlButton ) && ++ ( keyevent->state() & Qt::AltButton ) ) { ++ if ( keyevent->key() == Qt::Key_Up ) { ++ changeInputMethod( --imIndex ); ++ return TRUE; ++ } else if ( keyevent->key() == Qt::Key_Down ) { ++ changeInputMethod( ++imIndex ); ++ return TRUE; ++ } ++ } ++ } ++#endif ++ ++ return ( slave() ) ? slave()->filterEvent( event ) : FALSE; ++} ++ ++void QMultiInputContext::reset() ++{ ++ if ( slave() ) ++ slave()->reset(); ++} ++ ++ ++void QMultiInputContext::setFocus() ++{ ++ cachedFocus = TRUE; ++ if ( slave() ) ++ slave()->setFocus(); ++} ++ ++void QMultiInputContext::unsetFocus() ++{ ++ cachedFocus = FALSE; ++ if ( slave() ) ++ slave()->unsetFocus(); ++} ++ ++void QMultiInputContext::setMicroFocus( int x, int y, int w, int h, QFont *f ) ++{ ++ if ( slave() ) ++ slave()->setMicroFocus( x, y, w, h, f ); ++} ++ ++void QMultiInputContext::mouseHandler( int x, QEvent::Type type, ++ Qt::ButtonState button, ++ Qt::ButtonState state ) ++{ ++ if ( slave() ) ++ slave()->mouseHandler( x, type, button, state ); ++} ++ ++QFont QMultiInputContext::font() const ++{ ++ return ( slave() ) ? slave()->font() : QInputContext::font(); ++} ++ ++void QMultiInputContext::destroyInputContext() ++{ ++ if ( _slave ) { ++ // _slave->reset() may not properly work in the case, so we ++ // manually resets the composing state of text widget ++ if ( _slave->focusWidget() ) { ++ QIMEvent *terminator = new QIMEvent( QEvent::IMEnd, QString::null, -1 ); ++ emit imEventGenerated( _slave->focusWidget(), terminator ); ++ } ++ _slave->deleteLater(); ++ _slave = 0; ++ } ++} ++ ++ ++/*! ++ This function is a placeholder for future experiment or extension ++ such as commit string snooping. set beIndirectlyConnected = TRUE ++ to activate this virtual function. ++*/ ++void QMultiInputContext::postIMEvent( QObject *receiver, QIMEvent *event ) ++{ ++ emit imEventGenerated( receiver, event ); ++} ++ ++ ++#if defined(Q_WS_X11) ++QWidget *QMultiInputContext::focusWidget() const ++{ ++ return ( slave() ) ? slave()->focusWidget() : 0; ++} ++ ++QWidget *QMultiInputContext::holderWidget() const ++{ ++ return ( slave() ) ? slave()->holderWidget() : 0; ++} ++ ++ ++void QMultiInputContext::setFocusWidget( QWidget *w ) ++{ ++ cachedFocusWidget = w; ++ if ( slave() ) ++ slave()->setFocusWidget( w ); ++} ++ ++void QMultiInputContext::setHolderWidget( QWidget *w ) ++{ ++ cachedHolderWidget = w; ++ if ( slave() ) ++ slave()->setHolderWidget( w ); ++} ++ ++void QMultiInputContext::releaseComposingWidget( QWidget *w ) ++{ ++ if ( slave() ) ++ slave()->releaseComposingWidget( w ); ++} ++ ++#endif ++ ++bool QMultiInputContext::isComposing() const ++{ ++ return ( slave() ) ? slave()->isComposing() : FALSE; ++} ++ ++bool QMultiInputContext::isPreeditRelocationEnabled() ++{ ++ return ( slave() ) ? slave()->isPreeditRelocationEnabled() : FALSE; ++} ++ ++QInputContext *QMultiInputContext::slave() ++{ ++ if ( ! _slave ) { ++#if !defined(QT_NO_IM_QMULTIINPUTCONTEXT_IMINDEX) ++ changeInputMethod( imIndex ); ++#else ++ changeInputMethod( currentIMKey ); ++#endif ++ } ++ ++ return _slave; ++} ++ ++const QInputContext *QMultiInputContext::slave() const ++{ ++ return _slave; ++} ++ ++void QMultiInputContext::changeInputMethod( int newIndex ) ++{ ++#if !defined(QT_NO_IM_QMULTIINPUTCONTEXT_IMINDEX) ++ QStringList keys = QInputContextFactory::keys(); ++ if ( keys.size() == 0 ) ++ return; ++ ++ if ( newIndex >= (int)keys.size() ) { ++ imIndex = 0; ++ } else if ( newIndex < 0 ) { ++ imIndex = keys.size() - 1; ++ } else { ++ imIndex = newIndex; ++ } ++ ++ changeInputMethod( keys[imIndex] ); ++#endif ++} ++ ++void QMultiInputContext::changeInputMethod( QString key ) ++{ ++ QStringList keys = QInputContextFactory::keys(); ++ if ( keys.size() == 0 ) ++ return; ++ ++ if ( key.isEmpty() ) ++ key = keys[0]; ++ ++ if ( _slave ) { ++ _slave->reset(); ++ delete _slave; ++ } ++ ++ _slave = QInputContextFactory::create( key, cachedHolderWidget ); ++ if ( _slave ) { ++ insertChild( _slave ); ++ ++ const char *method; ++ if ( beIndirectlyConnected ) { ++ method = SLOT(imEventReceived(QObject *,QIMEvent *)); ++ } else { ++ method = SIGNAL(imEventGenerated(QObject *,QIMEvent *)); ++ } ++ connect( _slave, SIGNAL(imEventGenerated(QObject *,QIMEvent *)), ++ this, method ); ++ connect( _slave, SIGNAL(deletionRequested()), ++ this, SLOT(destroyInputContext()) ); ++ ++ if ( cachedFocus ) { ++ _slave->setFocus(); ++ _slave->setFocusWidget( cachedFocusWidget ); ++ } ++ ++ currentIMKey = key; ++ ++ //qDebug( "QMultiInputContext::changeInputMethod(): index=%d, slave=%s", ++ // imIndex, (const char *)_slave->identifierName() ); ++ } ++} ++ ++QPtrList *QMultiInputContext::menus() ++{ ++ QInputContextMenu *imSelMenu = new QInputContextMenu; ++ imSelMenu->title = tr( "Select Input &Method" ); ++ imSelMenu->popup = createImSelPopup(); ++ ++ QPtrList *result = new QPtrList; ++ result->append( imSelMenu ); ++ ++ QPtrList *slaveMenus = ( slave() ) ? slave()->menus() : 0; ++ if ( slaveMenus ) { ++ for ( QPtrList::Iterator it = slaveMenus->begin(); ++ it != slaveMenus->end(); ++ ++it ) { ++ QInputContextMenu *slaveMenu = *it; ++ result->append( slaveMenu ); ++ } ++ delete slaveMenus; ++ } ++ ++ return result; ++} ++ ++QPopupMenu *QMultiInputContext::createImSelPopup() ++{ ++ if ( popup ) ++ delete popup; ++ ++ popup = new QPopupMenu(); ++ keyDict.clear(); ++ ++ QStringList keys = QInputContextFactory::keys(); ++ for ( uint i=0; i < keys.size(); i++ ) { ++ QString idName = keys[i]; ++ bool isIMSwitcher = idName.startsWith( "imsw-" ); ++ ++ if ( ! isIMSwitcher ) { ++ QString dispName = QInputContextFactory::displayName( idName ); ++ if ( dispName.isEmpty() ) ++ dispName = idName; ++ ++ int id = popup->insertItem( dispName ); ++ keyDict.insert( (long)id, new QString( idName ) ); ++ ++ if ( idName == currentIMKey ) ++ popup->setItemChecked( id, true ); ++ ++ QString descriptionStr = QInputContextFactory::description( idName ); ++ if ( ! descriptionStr.isEmpty() ) ++ popup->setWhatsThis( id, descriptionStr ); ++ } ++ } ++ ++ QObject::connect( popup, SIGNAL(activated(int)), ++ this, SLOT(changeInputMethodWithMenuId(int)) ); ++ ++ return popup; ++} ++ ++void QMultiInputContext::changeInputMethodWithMenuId( int menuid ) ++{ ++ QString *key = keyDict.find( (long)menuid ); ++ changeInputMethod( (*key) ); ++} ++ ++#endif +--- plugins/src/inputmethods/imsw-multi/qmultiinputcontext.h ++++ plugins/src/inputmethods/imsw-multi/qmultiinputcontext.h +@@ -0,0 +1,124 @@ ++/**************************************************************************** ++** $Id$ ++** ++** Definition of QMultiInputContext class ++** ++** Copyright (C) 2004 immodule for Qt Project. All rights reserved. ++** ++** This file is written to contribute to Trolltech AS under their own ++** licence. You may use this file under your Qt license. Following ++** description is copied from their original file headers. Contact ++** immodule-qt@freedesktop.org if any conditions of this licensing are ++** not clear to you. ++** ++** ++** This file is part of the input method module of the Qt GUI Toolkit. ++** ++** This file may be distributed under the terms of the Q Public License ++** as defined by Trolltech AS of Norway and appearing in the file ++** LICENSE.QPL included in the packaging of this file. ++** ++** This file may be distributed and/or modified under the terms of the ++** GNU General Public License version 2 as published by the Free Software ++** Foundation and appearing in the file LICENSE.GPL included in the ++** packaging of this file. ++** ++** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition ++** licenses may use this file in accordance with the Qt Commercial License ++** Agreement provided with the Software. ++** ++** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ++** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ++** ++** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for ++** information about Qt Commercial License Agreements. ++** See http://www.trolltech.com/qpl/ for QPL licensing information. ++** See http://www.trolltech.com/gpl/ for GPL licensing information. ++** ++** Contact info@trolltech.com if any conditions of this licensing are ++** not clear to you. ++** ++**********************************************************************/ ++ ++#ifndef QMULTIINPUTCONTEXT_H ++#define QMULTIINPUTCONTEXT_H ++ ++#ifndef QT_NO_IM ++ ++#include ++#include ++#include ++#include ++#include ++ ++class QPopupMenu; ++ ++class QMultiInputContext : public QInputContext ++{ ++ Q_OBJECT ++public: ++ QMultiInputContext(); ++ ~QMultiInputContext(); ++ ++ QString identifierName(); ++ QString language(); ++ ++#if defined(Q_WS_X11) ++ bool x11FilterEvent( QWidget *keywidget, XEvent *event ); ++#endif // Q_WS_X11 ++ bool filterEvent( const QEvent *event ); ++ void reset(); ++ ++ void setFocus(); ++ void unsetFocus(); ++ void setMicroFocus( int x, int y, int w, int h, QFont *f = 0 ); ++ void mouseHandler( int x, QEvent::Type type, ++ Qt::ButtonState button, Qt::ButtonState state ); ++ QFont font() const; ++ bool isComposing() const; ++ bool isPreeditRelocationEnabled(); ++ ++#if (QT_VERSION-0 >= 0x040000) ++ QPtrList *qt4menus(); ++#endif ++ QPtrList *menus(); ++ QPopupMenu *createImSelPopup(); ++ ++#if defined(Q_WS_X11) ++ QWidget *focusWidget() const; ++ QWidget *holderWidget() const; ++ ++ void setFocusWidget( QWidget *w ); ++ void setHolderWidget( QWidget *w ); ++ void releaseComposingWidget( QWidget *w ); ++#endif ++ ++public slots: ++ virtual void destroyInputContext(); ++ virtual void postIMEvent( QObject *receiver, QIMEvent *event ); ++ ++protected slots: ++ void changeInputMethodWithMenuId( int menuid ); ++ ++protected: ++ QInputContext *slave(); ++ const QInputContext *slave() const; ++ ++ void changeInputMethod( int newIndex ); ++ void changeInputMethod( QString name ); ++ ++ QInputContext *_slave; ++ int imIndex; ++ bool cachedFocus; ++ QWidget *cachedFocusWidget; ++ QWidget *cachedHolderWidget; ++ bool beIndirectlyConnected; ++ ++ QIntDict keyDict; ++ QGuardedPtr popup; ++ QString currentIMKey; ++}; ++ ++#endif //Q_NO_IM ++ ++#endif // QMULTIINPUTCONTEXT_H +--- plugins/src/inputmethods/imsw-multi/qmultiinputcontextplugin.cpp ++++ plugins/src/inputmethods/imsw-multi/qmultiinputcontextplugin.cpp +@@ -0,0 +1,88 @@ ++/**************************************************************************** ++** $Id$ ++** ++** Implementation of QMultiInputContextPlugin class ++** ++** Copyright (C) 2004 immodule for Qt Project. All rights reserved. ++** ++** This file is written to contribute to Trolltech AS under their own ++** licence. You may use this file under your Qt license. Following ++** description is copied from their original file headers. Contact ++** immodule-qt@freedesktop.org if any conditions of this licensing are ++** not clear to you. ++** ++** ++** This file is part of the input method module of the Qt GUI Toolkit. ++** ++** This file may be distributed under the terms of the Q Public License ++** as defined by Trolltech AS of Norway and appearing in the file ++** LICENSE.QPL included in the packaging of this file. ++** ++** This file may be distributed and/or modified under the terms of the ++** GNU General Public License version 2 as published by the Free Software ++** Foundation and appearing in the file LICENSE.GPL included in the ++** packaging of this file. ++** ++** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition ++** licenses may use this file in accordance with the Qt Commercial License ++** Agreement provided with the Software. ++** ++** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ++** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ++** ++** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for ++** information about Qt Commercial License Agreements. ++** See http://www.trolltech.com/qpl/ for QPL licensing information. ++** See http://www.trolltech.com/gpl/ for GPL licensing information. ++** ++** Contact info@trolltech.com if any conditions of this licensing are ++** not clear to you. ++** ++**********************************************************************/ ++ ++#ifndef QT_NO_IM ++#include "qmultiinputcontext.h" ++#include "qmultiinputcontextplugin.h" ++#include ++#include ++ ++ ++QMultiInputContextPlugin::QMultiInputContextPlugin() ++{ ++} ++ ++QMultiInputContextPlugin::~QMultiInputContextPlugin() ++{ ++} ++ ++QStringList QMultiInputContextPlugin::keys() const ++{ ++ // input method switcher should named with "imsw-" prefix to ++ // prevent to be listed in ordinary input method list. ++ return QStringList( "imsw-multi" ); ++} ++ ++QInputContext *QMultiInputContextPlugin::create( const QString &key ) ++{ ++ return new QMultiInputContext; ++} ++ ++QStringList QMultiInputContextPlugin::languages( const QString &key ) ++{ ++ return QStringList( "" ); ++} ++ ++QString QMultiInputContextPlugin::displayName( const QString &key ) ++{ ++ return tr( "Multiple Input Method Switcher" ); ++} ++ ++QString QMultiInputContextPlugin::description( const QString &key ) ++{ ++ return tr( "Multiple input method switcher that uses the context menu of the text widgets" ); ++} ++ ++ ++Q_EXPORT_PLUGIN( QMultiInputContextPlugin ) ++ ++#endif +--- plugins/src/inputmethods/imsw-multi/qmultiinputcontextplugin.h ++++ plugins/src/inputmethods/imsw-multi/qmultiinputcontextplugin.h +@@ -0,0 +1,63 @@ ++/**************************************************************************** ++** $Id$ ++** ++** Definition of QMultiInputContextPlugin class ++** ++** Copyright (C) 2004 immodule for Qt Project. All rights reserved. ++** ++** This file is written to contribute to Trolltech AS under their own ++** licence. You may use this file under your Qt license. Following ++** description is copied from their original file headers. Contact ++** immodule-qt@freedesktop.org if any conditions of this licensing are ++** not clear to you. ++** ++** ++** This file is part of the input method module of the Qt GUI Toolkit. ++** ++** This file may be distributed under the terms of the Q Public License ++** as defined by Trolltech AS of Norway and appearing in the file ++** LICENSE.QPL included in the packaging of this file. ++** ++** This file may be distributed and/or modified under the terms of the ++** GNU General Public License version 2 as published by the Free Software ++** Foundation and appearing in the file LICENSE.GPL included in the ++** packaging of this file. ++** ++** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition ++** licenses may use this file in accordance with the Qt Commercial License ++** Agreement provided with the Software. ++** ++** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ++** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ++** ++** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for ++** information about Qt Commercial License Agreements. ++** See http://www.trolltech.com/qpl/ for QPL licensing information. ++** See http://www.trolltech.com/gpl/ for GPL licensing information. ++** ++** Contact info@trolltech.com if any conditions of this licensing are ++** not clear to you. ++** ++**********************************************************************/ ++ ++#ifndef QT_NO_IM ++#include "qmultiinputcontext.h" ++#include ++#include ++ ++ ++class QMultiInputContextPlugin : public QInputContextPlugin ++{ ++ Q_OBJECT ++public: ++ QMultiInputContextPlugin(); ++ ~QMultiInputContextPlugin(); ++ ++ QStringList keys() const; ++ QInputContext *create( const QString &key ); ++ QStringList languages( const QString &key ); ++ QString displayName( const QString &key ); ++ QString description( const QString &key ); ++}; ++ ++#endif +--- plugins/src/inputmethods/imsw-none/imsw-none.pro ++++ plugins/src/inputmethods/imsw-none/imsw-none.pro +@@ -0,0 +1,12 @@ ++TEMPLATE = lib ++TARGET = qimsw-none ++DESTDIR = ../../../inputmethods ++ ++INCLUDEPATH += . ++CONFIG += qt warn_on debug plugin ++target.path += $$plugins.path/inputmethods ++INSTALLS += target ++ ++# Input ++HEADERS += qnoneinputcontextplugin.h ++SOURCES += qnoneinputcontextplugin.cpp +--- plugins/src/inputmethods/imsw-none/qnoneinputcontextplugin.cpp ++++ plugins/src/inputmethods/imsw-none/qnoneinputcontextplugin.cpp +@@ -0,0 +1,101 @@ ++/**************************************************************************** ++** $Id$ ++** ++** Implementation of QNoneInputContextPlugin class ++** ++** Copyright (C) 2004 immodule for Qt Project. All rights reserved. ++** ++** This file is written to contribute to Trolltech AS under their own ++** licence. You may use this file under your Qt license. Following ++** description is copied from their original file headers. Contact ++** immodule-qt@freedesktop.org if any conditions of this licensing are ++** not clear to you. ++** ++** ++** This file is part of the input method module of the Qt GUI Toolkit. ++** ++** This file may be distributed under the terms of the Q Public License ++** as defined by Trolltech AS of Norway and appearing in the file ++** LICENSE.QPL included in the packaging of this file. ++** ++** This file may be distributed and/or modified under the terms of the ++** GNU General Public License version 2 as published by the Free Software ++** Foundation and appearing in the file LICENSE.GPL included in the ++** packaging of this file. ++** ++** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition ++** licenses may use this file in accordance with the Qt Commercial License ++** Agreement provided with the Software. ++** ++** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ++** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ++** ++** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for ++** information about Qt Commercial License Agreements. ++** See http://www.trolltech.com/qpl/ for QPL licensing information. ++** See http://www.trolltech.com/gpl/ for GPL licensing information. ++** ++** Contact info@trolltech.com if any conditions of this licensing are ++** not clear to you. ++** ++**********************************************************************/ ++ ++#ifndef QT_NO_IM ++#include "qnoneinputcontextplugin.h" ++#include ++#include ++#include ++ ++ ++QNoneInputContextPlugin::QNoneInputContextPlugin() ++{ ++} ++ ++QNoneInputContextPlugin::~QNoneInputContextPlugin() ++{ ++} ++ ++QStringList QNoneInputContextPlugin::keys() const ++{ ++ // input method switcher should named with "imsw-" prefix to ++ // prevent to be listed in ordinary input method list. ++ return QStringList( "imsw-none" ); ++} ++ ++QInputContext *QNoneInputContextPlugin::create( const QString &key ) ++{ ++ QString actuallySpecifiedKey; ++ ++ bool isIMSwitcher = key.startsWith( "imsw-" ); ++ if ( ! isIMSwitcher ) ++ return 0; ++ ++ if ( getenv( "QT_IM_MODULE" ) ) { ++ actuallySpecifiedKey = getenv( "QT_IM_MODULE" ); ++ } else { ++ QSettings settings; ++ actuallySpecifiedKey = settings.readEntry( "/qt/DefaultInputMethod", "xim" ); ++ } ++ ++ return QInputContextFactory::create( actuallySpecifiedKey, 0 ); ++} ++ ++QStringList QNoneInputContextPlugin::languages( const QString &key ) ++{ ++ return QStringList( "" ); ++} ++ ++QString QNoneInputContextPlugin::displayName( const QString &key ) ++{ ++ return tr( "Dummy Input Method Switcher" ); ++} ++ ++QString QNoneInputContextPlugin::description( const QString &key ) ++{ ++ return tr( "Dummy input method switcher that uses the context menu of the text widgets" ); ++} ++ ++ ++Q_EXPORT_PLUGIN( QNoneInputContextPlugin ) ++ ++#endif +--- plugins/src/inputmethods/imsw-none/qnoneinputcontextplugin.h ++++ plugins/src/inputmethods/imsw-none/qnoneinputcontextplugin.h +@@ -0,0 +1,62 @@ ++/**************************************************************************** ++** $Id$ ++** ++** Definition of QNoneInputContextPlugin class ++** ++** Copyright (C) 2004 immodule for Qt Project. All rights reserved. ++** ++** This file is written to contribute to Trolltech AS under their own ++** licence. You may use this file under your Qt license. Following ++** description is copied from their original file headers. Contact ++** immodule-qt@freedesktop.org if any conditions of this licensing are ++** not clear to you. ++** ++** ++** This file is part of the input method module of the Qt GUI Toolkit. ++** ++** This file may be distributed under the terms of the Q Public License ++** as defined by Trolltech AS of Norway and appearing in the file ++** LICENSE.QPL included in the packaging of this file. ++** ++** This file may be distributed and/or modified under the terms of the ++** GNU General Public License version 2 as published by the Free Software ++** Foundation and appearing in the file LICENSE.GPL included in the ++** packaging of this file. ++** ++** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition ++** licenses may use this file in accordance with the Qt Commercial License ++** Agreement provided with the Software. ++** ++** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ++** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ++** ++** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for ++** information about Qt Commercial License Agreements. ++** See http://www.trolltech.com/qpl/ for QPL licensing information. ++** See http://www.trolltech.com/gpl/ for GPL licensing information. ++** ++** Contact info@trolltech.com if any conditions of this licensing are ++** not clear to you. ++** ++**********************************************************************/ ++ ++#ifndef QT_NO_IM ++#include ++#include ++ ++ ++class QNoneInputContextPlugin : public QInputContextPlugin ++{ ++ Q_OBJECT ++public: ++ QNoneInputContextPlugin(); ++ ~QNoneInputContextPlugin(); ++ ++ QStringList keys() const; ++ QInputContext *create( const QString &key ); ++ QStringList languages( const QString &key ); ++ QString displayName( const QString &key ); ++ QString description( const QString &key ); ++}; ++ ++#endif +--- plugins/src/inputmethods/inputmethods.pro ++++ plugins/src/inputmethods/inputmethods.pro +@@ -0,0 +1,11 @@ ++TEMPLATE = subdirs ++ ++unix { ++ !embedded:!mac:CONFIG += x11 ++} ++# XIM should be enabled only for X11 platform, but following ++# configuration is not working properly yet ++#im:x11:SUBDIRS += xim ++ ++inputmethod:SUBDIRS += imsw-none imsw-multi simple ++inputmethod:SUBDIRS += xim +--- plugins/src/inputmethods/simple/composetable.cpp ++++ plugins/src/inputmethods/simple/composetable.cpp +@@ -0,0 +1,5605 @@ ++/**************************************************************************** ++** $Id$ ++** ++** Compose table for QSimpleInputContext class ++** ++** Copyright (C) 2004 immodule for Qt Project. All rights reserved. ++** ++** This file is written to contribute to Trolltech AS under their own ++** licence. You may use this file under your Qt license. Following ++** description is copied from their original file headers. Contact ++** immodule-qt@freedesktop.org if any conditions of this licensing are ++** not clear to you. ++** ++** ++** This file is part of the input method module of the Qt GUI Toolkit. ++** ++** This file may be distributed under the terms of the Q Public License ++** as defined by Trolltech AS of Norway and appearing in the file ++** LICENSE.QPL included in the packaging of this file. ++** ++** This file may be distributed and/or modified under the terms of the ++** GNU General Public License version 2 as published by the Free Software ++** Foundation and appearing in the file LICENSE.GPL included in the ++** packaging of this file. ++** ++** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition ++** licenses may use this file in accordance with the Qt Commercial License ++** Agreement provided with the Software. ++** ++** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ++** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ++** ++** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for ++** information about Qt Commercial License Agreements. ++** See http://www.trolltech.com/qpl/ for QPL licensing information. ++** See http://www.trolltech.com/gpl/ for GPL licensing information. ++** ++** Contact info@trolltech.com if any conditions of this licensing are ++** not clear to you. ++** ++**********************************************************************/ ++ ++// The compose table included in file is converted from a Compose file ++// of X.org's X11R6.7.0. Original header is follows ++ ++// UTF-8 (Unicode) compose sequence ++// David.Monniaux@ens.fr ++// ++// $XFree86: xc/nls/Compose/en_US.UTF-8,v 1.11 2004/01/06 13:14:04 pascal Exp $ ++ ++ ++#include "qsimpleinputcontext.h" ++ ++#include ++ ++static const QComposeTableElement defaultTable[] = { ++// /* broken */ { {0x0000, 0x0000, 0, 0, 0, 0}, 0x1eda }, // U1EDA # LATIN CAPITAL LETTER O WITH HORN AND ACUTE ++// /* broken */ { {0x0000, 0x0000, 0, 0, 0, 0}, 0x1edb }, // U1EDB # LATIN SMALL LETTER O WITH HORN AND ACUTE ++// /* broken */ { {0x0000, 0x0000, 0, 0, 0, 0}, 0x1edc }, // U1EDC # LATIN CAPITAL LETTER O WITH HORN AND GRAVE ++// /* broken */ { {0x0000, 0x0000, 0, 0, 0, 0}, 0x1edd }, // U1EDD # LATIN SMALL LETTER O WITH HORN AND GRAVE ++// /* broken */ { {0x0000, 0x0000, 0, 0, 0, 0}, 0x1ede }, // U1EDE # LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE ++// /* broken */ { {0x0000, 0x0000, 0, 0, 0, 0}, 0x1edf }, // U1EDF # LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE ++// /* broken */ { {0x0000, 0x0000, 0, 0, 0, 0}, 0x1ee3 }, // U1EE3 # LATIN SMALL LETTER O WITH HORN AND DOT BELOW ++// /* broken */ { {0x0000, 0x0000, 0, 0, 0, 0}, 0x1ee1 }, // U1EE1 # LATIN SMALL LETTER O WITH HORN AND TILDE ++// /* broken */ { {0x0000, 0x0000, 0, 0, 0, 0}, 0x1ee2 }, // U1EE2 # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW ++// /* broken */ { {0x0000, 0x0000, 0, 0, 0, 0}, 0x1ef1 }, // U1EF1 # LATIN SMALL LETTER U WITH HORN AND DOT BELOW ++// /* broken */ { {0x0000, 0x0000, 0, 0, 0, 0}, 0x1ef0 }, // U1EF0 # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW ++// /* broken */ { {0x0000, 0x0000, 0, 0, 0, 0}, 0x1eef }, // U1EEF # LATIN SMALL LETTER U WITH HORN AND TILDE ++// /* broken */ { {0x0000, 0x0000, 0, 0, 0, 0}, 0x1eee }, // U1EEE # LATIN CAPITAL LETTER U WITH HORN AND TILDE ++// /* broken */ { {0x0000, 0x0000, 0, 0, 0, 0}, 0x1eed }, // U1EED # LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE ++// /* broken */ { {0x0000, 0x0000, 0, 0, 0, 0}, 0x1eec }, // U1EEC # LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE ++// /* broken */ { {0x0000, 0x0000, 0, 0, 0, 0}, 0x1eeb }, // U1EEB # LATIN SMALL LETTER U WITH HORN AND GRAVE ++// /* broken */ { {0x0000, 0x0000, 0, 0, 0, 0}, 0x1eea }, // U1EEA # LATIN CAPITAL LETTER U WITH HORN AND GRAVE ++// /* broken */ { {0x0000, 0x0000, 0, 0, 0, 0}, 0x1ee9 }, // U1EE9 # LATIN SMALL LETTER U WITH HORN AND ACUTE ++// /* broken */ { {0x0000, 0x0000, 0, 0, 0, 0}, 0x1ee8 }, // U1EE8 # LATIN CAPITAL LETTER U WITH HORN AND ACUTE ++// /* broken */ { {0x0000, 0x0000, 0, 0, 0, 0}, 0x1ee0 }, // U1EE0 # LATIN CAPITAL LETTER O WITH HORN AND TILDE ++// /* broken */ { {0x0000, 0x0000, 0x004f, 0, 0, 0}, 0x1e4c }, // U1E4C # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE ++// /* broken */ { {0x0000, 0x0000, 0x0055, 0, 0, 0}, 0x1e78 }, // U1E78 # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE ++// /* broken */ { {0x0000, 0x0000, 0x006f, 0, 0, 0}, 0x1e4d }, // U1E4D # LATIN SMALL LETTER O WITH TILDE AND ACUTE ++// /* broken */ { {0x0000, 0x0000, 0x0075, 0, 0, 0}, 0x1e79 }, // U1E79 # LATIN SMALL LETTER U WITH TILDE AND ACUTE ++// /* broken */ { {0x0000, 0x0041, 0, 0, 0, 0}, 0x00c1 }, // U00C1 # LATIN CAPITAL LETTER A WITH ACUTE ++// /* broken */ { {0x0000, 0x0041, 0, 0, 0, 0}, 0x00c0 }, // U00C0 # LATIN CAPITAL LETTER A WITH GRAVE ++// /* broken */ { {0x0000, 0x0041, 0, 0, 0, 0}, 0x00c3 }, // U00C3 # LATIN CAPITAL LETTER A WITH TILDE ++// /* broken */ { {0x0000, 0x0041, 0, 0, 0, 0}, 0x1ea2 }, // U1EA2 # LATIN CAPITAL LETTER A WITH HOOK ABOVE ++// /* broken */ { {0x0000, 0x0041, 0, 0, 0, 0}, 0x1ea0 }, // U1EA0 # LATIN CAPITAL LETTER A WITH DOT BELOW ++// /* broken */ { {0x0000, 0x0042, 0, 0, 0, 0}, 0x1e04 }, // U1E04 # LATIN CAPITAL LETTER B WITH DOT BELOW ++// /* broken */ { {0x0000, 0x0043, 0, 0, 0, 0}, 0x0106 }, // U0106 # LATIN CAPITAL LETTER C WITH ACUTE ++// /* broken */ { {0x0000, 0x0044, 0, 0, 0, 0}, 0x1e0c }, // U1E0C # LATIN CAPITAL LETTER D WITH DOT BELOW ++// /* broken */ { {0x0000, 0x0045, 0, 0, 0, 0}, 0x1ebc }, // U1EBC # LATIN CAPITAL LETTER E WITH TILDE ++// /* broken */ { {0x0000, 0x0045, 0, 0, 0, 0}, 0x1eb8 }, // U1EB8 # LATIN CAPITAL LETTER E WITH DOT BELOW ++// /* broken */ { {0x0000, 0x0045, 0, 0, 0, 0}, 0x00c9 }, // U00C9 # LATIN CAPITAL LETTER E WITH ACUTE ++// /* broken */ { {0x0000, 0x0045, 0, 0, 0, 0}, 0x00c8 }, // U00C8 # LATIN CAPITAL LETTER E WITH GRAVE ++// /* broken */ { {0x0000, 0x0045, 0, 0, 0, 0}, 0x1eba }, // U1EBA # LATIN CAPITAL LETTER E WITH HOOK ABOVE ++// /* broken */ { {0x0000, 0x0047, 0, 0, 0, 0}, 0x01f4 }, // U01F4 # LATIN CAPITAL LETTER G WITH ACUTE ++// /* broken */ { {0x0000, 0x0048, 0, 0, 0, 0}, 0x1e24 }, // U1E24 # LATIN CAPITAL LETTER H WITH DOT BELOW ++// /* broken */ { {0x0000, 0x0049, 0, 0, 0, 0}, 0x00cd }, // U00CD # LATIN CAPITAL LETTER I WITH ACUTE ++// /* broken */ { {0x0000, 0x0049, 0, 0, 0, 0}, 0x00cc }, // U00CC # LATIN CAPITAL LETTER I WITH GRAVE ++// /* broken */ { {0x0000, 0x0049, 0, 0, 0, 0}, 0x1ec8 }, // U1EC8 # LATIN CAPITAL LETTER I WITH HOOK ABOVE ++// /* broken */ { {0x0000, 0x0049, 0, 0, 0, 0}, 0x0128 }, // U0128 # LATIN CAPITAL LETTER I WITH TILDE ++// /* broken */ { {0x0000, 0x0049, 0, 0, 0, 0}, 0x1eca }, // U1ECA # LATIN CAPITAL LETTER I WITH DOT BELOW ++// /* broken */ { {0x0000, 0x004b, 0, 0, 0, 0}, 0x1e30 }, // U1E30 # LATIN CAPITAL LETTER K WITH ACUTE ++// /* broken */ { {0x0000, 0x004b, 0, 0, 0, 0}, 0x1e32 }, // U1E32 # LATIN CAPITAL LETTER K WITH DOT BELOW ++// /* broken */ { {0x0000, 0x004c, 0, 0, 0, 0}, 0x0139 }, // U0139 # LATIN CAPITAL LETTER L WITH ACUTE ++// /* broken */ { {0x0000, 0x004c, 0, 0, 0, 0}, 0x1e36 }, // U1E36 # LATIN CAPITAL LETTER L WITH DOT BELOW ++// /* broken */ { {0x0000, 0x004d, 0, 0, 0, 0}, 0x1e42 }, // U1E42 # LATIN CAPITAL LETTER M WITH DOT BELOW ++// /* broken */ { {0x0000, 0x004d, 0, 0, 0, 0}, 0x1e3e }, // U1E3E # LATIN CAPITAL LETTER M WITH ACUTE ++// /* broken */ { {0x0000, 0x004e, 0, 0, 0, 0}, 0x1e46 }, // U1E46 # LATIN CAPITAL LETTER N WITH DOT BELOW ++// /* broken */ { {0x0000, 0x004e, 0, 0, 0, 0}, 0x0143 }, // U0143 # LATIN CAPITAL LETTER N WITH ACUTE ++// /* broken */ { {0x0000, 0x004e, 0, 0, 0, 0}, 0x01f8 }, // U01F8 # LATIN CAPITAL LETTER N WITH GRAVE ++// /* broken */ { {0x0000, 0x004e, 0, 0, 0, 0}, 0x00d1 }, // U00D1 # LATIN CAPITAL LETTER N WITH TILDE ++// /* broken */ { {0x0000, 0x004f, 0, 0, 0, 0}, 0x00d5 }, // U00D5 # LATIN CAPITAL LETTER O WITH TILDE ++// /* broken */ { {0x0000, 0x004f, 0, 0, 0, 0}, 0x00d3 }, // U00D3 # LATIN CAPITAL LETTER O WITH ACUTE ++// /* broken */ { {0x0000, 0x004f, 0, 0, 0, 0}, 0x1ecc }, // U1ECC # LATIN CAPITAL LETTER O WITH DOT BELOW ++// /* broken */ { {0x0000, 0x004f, 0, 0, 0, 0}, 0x00d2 }, // U00D2 # LATIN CAPITAL LETTER O WITH GRAVE ++// /* broken */ { {0x0000, 0x004f, 0, 0, 0, 0}, 0x1ece }, // U1ECE # LATIN CAPITAL LETTER O WITH HOOK ABOVE ++// /* broken */ { {0x0000, 0x0050, 0, 0, 0, 0}, 0x1e54 }, // U1E54 # LATIN CAPITAL LETTER P WITH ACUTE ++// /* broken */ { {0x0000, 0x0052, 0, 0, 0, 0}, 0x1e5a }, // U1E5A # LATIN CAPITAL LETTER R WITH DOT BELOW ++// /* broken */ { {0x0000, 0x0052, 0, 0, 0, 0}, 0x0154 }, // U0154 # LATIN CAPITAL LETTER R WITH ACUTE ++// /* broken */ { {0x0000, 0x0053, 0, 0, 0, 0}, 0x015a }, // U015A # LATIN CAPITAL LETTER S WITH ACUTE ++// /* broken */ { {0x0000, 0x0053, 0, 0, 0, 0}, 0x1e62 }, // U1E62 # LATIN CAPITAL LETTER S WITH DOT BELOW ++// /* broken */ { {0x0000, 0x0054, 0, 0, 0, 0}, 0x1e6c }, // U1E6C # LATIN CAPITAL LETTER T WITH DOT BELOW ++// /* broken */ { {0x0000, 0x0055, 0, 0, 0, 0}, 0x00da }, // U00DA # LATIN CAPITAL LETTER U WITH ACUTE ++// /* broken */ { {0x0000, 0x0055, 0, 0, 0, 0}, 0x00d9 }, // U00D9 # LATIN CAPITAL LETTER U WITH GRAVE ++// /* broken */ { {0x0000, 0x0055, 0, 0, 0, 0}, 0x0168 }, // U0168 # LATIN CAPITAL LETTER U WITH TILDE ++// /* broken */ { {0x0000, 0x0055, 0, 0, 0, 0}, 0x1ee4 }, // U1EE4 # LATIN CAPITAL LETTER U WITH DOT BELOW ++// /* broken */ { {0x0000, 0x0055, 0, 0, 0, 0}, 0x1ee6 }, // U1EE6 # LATIN CAPITAL LETTER U WITH HOOK ABOVE ++// /* broken */ { {0x0000, 0x0056, 0, 0, 0, 0}, 0x1e7e }, // U1E7E # LATIN CAPITAL LETTER V WITH DOT BELOW ++// /* broken */ { {0x0000, 0x0056, 0, 0, 0, 0}, 0x1e7c }, // U1E7C # LATIN CAPITAL LETTER V WITH TILDE ++// /* broken */ { {0x0000, 0x0057, 0, 0, 0, 0}, 0x1e82 }, // U1E82 # LATIN CAPITAL LETTER W WITH ACUTE ++// /* broken */ { {0x0000, 0x0057, 0, 0, 0, 0}, 0x1e88 }, // U1E88 # LATIN CAPITAL LETTER W WITH DOT BELOW ++// /* broken */ { {0x0000, 0x0057, 0, 0, 0, 0}, 0x1e80 }, // U1E80 # LATIN CAPITAL LETTER W WITH GRAVE ++// /* broken */ { {0x0000, 0x0059, 0, 0, 0, 0}, 0x1ef8 }, // U1EF8 # LATIN CAPITAL LETTER Y WITH TILDE ++// /* broken */ { {0x0000, 0x0059, 0, 0, 0, 0}, 0x1ef2 }, // U1EF2 # LATIN CAPITAL LETTER Y WITH GRAVE ++// /* broken */ { {0x0000, 0x0059, 0, 0, 0, 0}, 0x00dd }, // U00DD # LATIN CAPITAL LETTER Y WITH ACUTE ++// /* broken */ { {0x0000, 0x0059, 0, 0, 0, 0}, 0x1ef6 }, // U1EF6 # LATIN CAPITAL LETTER Y WITH HOOK ABOVE ++// /* broken */ { {0x0000, 0x0059, 0, 0, 0, 0}, 0x1ef4 }, // U1EF4 # LATIN CAPITAL LETTER Y WITH DOT BELOW ++// /* broken */ { {0x0000, 0x005a, 0, 0, 0, 0}, 0x0179 }, // U0179 # LATIN CAPITAL LETTER Z WITH ACUTE ++// /* broken */ { {0x0000, 0x005a, 0, 0, 0, 0}, 0x1e92 }, // U1E92 # LATIN CAPITAL LETTER Z WITH DOT BELOW ++// /* broken */ { {0x0000, 0x0061, 0, 0, 0, 0}, 0x1ea1 }, // U1EA1 # LATIN SMALL LETTER A WITH DOT BELOW ++// /* broken */ { {0x0000, 0x0061, 0, 0, 0, 0}, 0x1ea3 }, // U1EA3 # LATIN SMALL LETTER A WITH HOOK ABOVE ++// /* broken */ { {0x0000, 0x0061, 0, 0, 0, 0}, 0x00e0 }, // U00E0 # LATIN SMALL LETTER A WITH GRAVE ++// /* broken */ { {0x0000, 0x0061, 0, 0, 0, 0}, 0x00e3 }, // U00E3 # LATIN SMALL LETTER A WITH TILDE ++// /* broken */ { {0x0000, 0x0061, 0, 0, 0, 0}, 0x00e1 }, // U00E1 # LATIN SMALL LETTER A WITH ACUTE ++// /* broken */ { {0x0000, 0x0062, 0, 0, 0, 0}, 0x1e05 }, // U1E05 # LATIN SMALL LETTER B WITH DOT BELOW ++// /* broken */ { {0x0000, 0x0063, 0, 0, 0, 0}, 0x0107 }, // U0107 # LATIN SMALL LETTER C WITH ACUTE ++// /* broken */ { {0x0000, 0x0064, 0, 0, 0, 0}, 0x1e0d }, // U1E0D # LATIN SMALL LETTER D WITH DOT BELOW ++// /* broken */ { {0x0000, 0x0065, 0, 0, 0, 0}, 0x00e8 }, // U00E8 # LATIN SMALL LETTER E WITH GRAVE ++// /* broken */ { {0x0000, 0x0065, 0, 0, 0, 0}, 0x1ebb }, // U1EBB # LATIN SMALL LETTER E WITH HOOK ABOVE ++// /* broken */ { {0x0000, 0x0065, 0, 0, 0, 0}, 0x1eb9 }, // U1EB9 # LATIN SMALL LETTER E WITH DOT BELOW ++// /* broken */ { {0x0000, 0x0065, 0, 0, 0, 0}, 0x00e9 }, // U00E9 # LATIN SMALL LETTER E WITH ACUTE ++// /* broken */ { {0x0000, 0x0065, 0, 0, 0, 0}, 0x1ebd }, // U1EBD # LATIN SMALL LETTER E WITH TILDE ++// /* broken */ { {0x0000, 0x0067, 0, 0, 0, 0}, 0x01f5 }, // U01F5 # LATIN SMALL LETTER G WITH ACUTE ++// /* broken */ { {0x0000, 0x0068, 0, 0, 0, 0}, 0x1e25 }, // U1E25 # LATIN SMALL LETTER H WITH DOT BELOW ++// /* broken */ { {0x0000, 0x0069, 0, 0, 0, 0}, 0x00ec }, // U00EC # LATIN SMALL LETTER I WITH GRAVE ++// /* broken */ { {0x0000, 0x0069, 0, 0, 0, 0}, 0x0129 }, // U0129 # LATIN SMALL LETTER I WITH TILDE ++// /* broken */ { {0x0000, 0x0069, 0, 0, 0, 0}, 0x1ecb }, // U1ECB # LATIN SMALL LETTER I WITH DOT BELOW ++// /* broken */ { {0x0000, 0x0069, 0, 0, 0, 0}, 0x00ed }, // U00ED # LATIN SMALL LETTER I WITH ACUTE ++// /* broken */ { {0x0000, 0x0069, 0, 0, 0, 0}, 0x1ec9 }, // U1EC9 # LATIN SMALL LETTER I WITH HOOK ABOVE ++// /* broken */ { {0x0000, 0x006b, 0, 0, 0, 0}, 0x1e33 }, // U1E33 # LATIN SMALL LETTER K WITH DOT BELOW ++// /* broken */ { {0x0000, 0x006b, 0, 0, 0, 0}, 0x1e31 }, // U1E31 # LATIN SMALL LETTER K WITH ACUTE ++// /* broken */ { {0x0000, 0x006c, 0, 0, 0, 0}, 0x1e37 }, // U1E37 # LATIN SMALL LETTER L WITH DOT BELOW ++// /* broken */ { {0x0000, 0x006c, 0, 0, 0, 0}, 0x013a }, // U013A # LATIN SMALL LETTER L WITH ACUTE ++// /* broken */ { {0x0000, 0x006d, 0, 0, 0, 0}, 0x1e43 }, // U1E43 # LATIN SMALL LETTER M WITH DOT BELOW ++// /* broken */ { {0x0000, 0x006d, 0, 0, 0, 0}, 0x1e3f }, // U1E3F # LATIN SMALL LETTER M WITH ACUTE ++// /* broken */ { {0x0000, 0x006e, 0, 0, 0, 0}, 0x00f1 }, // U00F1 # LATIN SMALL LETTER N WITH TILDE ++// /* broken */ { {0x0000, 0x006e, 0, 0, 0, 0}, 0x0144 }, // U0144 # LATIN SMALL LETTER N WITH ACUTE ++// /* broken */ { {0x0000, 0x006e, 0, 0, 0, 0}, 0x01f9 }, // U01F9 # LATIN SMALL LETTER N WITH GRAVE ++// /* broken */ { {0x0000, 0x006e, 0, 0, 0, 0}, 0x1e47 }, // U1E47 # LATIN SMALL LETTER N WITH DOT BELOW ++// /* broken */ { {0x0000, 0x006f, 0, 0, 0, 0}, 0x00f5 }, // U00F5 # LATIN SMALL LETTER O WITH TILDE ++// /* broken */ { {0x0000, 0x006f, 0, 0, 0, 0}, 0x00f2 }, // U00F2 # LATIN SMALL LETTER O WITH GRAVE ++// /* broken */ { {0x0000, 0x006f, 0, 0, 0, 0}, 0x1ecf }, // U1ECF # LATIN SMALL LETTER O WITH HOOK ABOVE ++// /* broken */ { {0x0000, 0x006f, 0, 0, 0, 0}, 0x00f3 }, // U00F3 # LATIN SMALL LETTER O WITH ACUTE ++// /* broken */ { {0x0000, 0x006f, 0, 0, 0, 0}, 0x1ecd }, // U1ECD # LATIN SMALL LETTER O WITH DOT BELOW ++// /* broken */ { {0x0000, 0x0070, 0, 0, 0, 0}, 0x1e55 }, // U1E55 # LATIN SMALL LETTER P WITH ACUTE ++// /* broken */ { {0x0000, 0x0072, 0, 0, 0, 0}, 0x0155 }, // U0155 # LATIN SMALL LETTER R WITH ACUTE ++// /* broken */ { {0x0000, 0x0072, 0, 0, 0, 0}, 0x1e5b }, // U1E5B # LATIN SMALL LETTER R WITH DOT BELOW ++// /* broken */ { {0x0000, 0x0073, 0, 0, 0, 0}, 0x1e63 }, // U1E63 # LATIN SMALL LETTER S WITH DOT BELOW ++// /* broken */ { {0x0000, 0x0073, 0, 0, 0, 0}, 0x015b }, // U015B # LATIN SMALL LETTER S WITH ACUTE ++// /* broken */ { {0x0000, 0x0074, 0, 0, 0, 0}, 0x1e6d }, // U1E6D # LATIN SMALL LETTER T WITH DOT BELOW ++// /* broken */ { {0x0000, 0x0075, 0, 0, 0, 0}, 0x0169 }, // U0169 # LATIN SMALL LETTER U WITH TILDE ++// /* broken */ { {0x0000, 0x0075, 0, 0, 0, 0}, 0x1ee7 }, // U1EE7 # LATIN SMALL LETTER U WITH HOOK ABOVE ++// /* broken */ { {0x0000, 0x0075, 0, 0, 0, 0}, 0x00f9 }, // U00F9 # LATIN SMALL LETTER U WITH GRAVE ++// /* broken */ { {0x0000, 0x0075, 0, 0, 0, 0}, 0x00fa }, // U00FA # LATIN SMALL LETTER U WITH ACUTE ++// /* broken */ { {0x0000, 0x0075, 0, 0, 0, 0}, 0x1ee5 }, // U1EE5 # LATIN SMALL LETTER U WITH DOT BELOW ++// /* broken */ { {0x0000, 0x0076, 0, 0, 0, 0}, 0x1e7d }, // U1E7D # LATIN SMALL LETTER V WITH TILDE ++// /* broken */ { {0x0000, 0x0076, 0, 0, 0, 0}, 0x1e7f }, // U1E7F # LATIN SMALL LETTER V WITH DOT BELOW ++// /* broken */ { {0x0000, 0x0077, 0, 0, 0, 0}, 0x1e81 }, // U1E81 # LATIN SMALL LETTER W WITH GRAVE ++// /* broken */ { {0x0000, 0x0077, 0, 0, 0, 0}, 0x1e83 }, // U1E83 # LATIN SMALL LETTER W WITH ACUTE ++// /* broken */ { {0x0000, 0x0077, 0, 0, 0, 0}, 0x1e89 }, // U1E89 # LATIN SMALL LETTER W WITH DOT BELOW ++// /* broken */ { {0x0000, 0x0079, 0, 0, 0, 0}, 0x1ef5 }, // U1EF5 # LATIN SMALL LETTER Y WITH DOT BELOW ++// /* broken */ { {0x0000, 0x0079, 0, 0, 0, 0}, 0x1ef9 }, // U1EF9 # LATIN SMALL LETTER Y WITH TILDE ++// /* broken */ { {0x0000, 0x0079, 0, 0, 0, 0}, 0x1ef7 }, // U1EF7 # LATIN SMALL LETTER Y WITH HOOK ABOVE ++// /* broken */ { {0x0000, 0x0079, 0, 0, 0, 0}, 0x1ef3 }, // U1EF3 # LATIN SMALL LETTER Y WITH GRAVE ++// /* broken */ { {0x0000, 0x0079, 0, 0, 0, 0}, 0x00fd }, // U00FD # LATIN SMALL LETTER Y WITH ACUTE ++// /* broken */ { {0x0000, 0x007a, 0, 0, 0, 0}, 0x1e93 }, // U1E93 # LATIN SMALL LETTER Z WITH DOT BELOW ++// /* broken */ { {0x0000, 0x007a, 0, 0, 0, 0}, 0x017a }, // U017A # LATIN SMALL LETTER Z WITH ACUTE ++// /* broken */ { {0x0000, 0x00c2, 0, 0, 0, 0}, 0x1ea6 }, // U1EA6 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE ++// /* broken */ { {0x0000, 0x00c2, 0, 0, 0, 0}, 0x1ea8 }, // U1EA8 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE ++// /* broken */ { {0x0000, 0x00c2, 0, 0, 0, 0}, 0x1eaa }, // U1EAA # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE ++// /* broken */ { {0x0000, 0x00c2, 0, 0, 0, 0}, 0x1ea4 }, // U1EA4 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE ++// /* broken */ { {0x0000, 0x00c5, 0, 0, 0, 0}, 0x01fa }, // U01FA # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE ++// /* broken */ { {0x0000, 0x00c6, 0, 0, 0, 0}, 0x01fc }, // U01FC # LATIN CAPITAL LETTER AE WITH ACUTE ++// /* broken */ { {0x0000, 0x00c7, 0, 0, 0, 0}, 0x1e08 }, // U1E08 # LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE ++// /* broken */ { {0x0000, 0x00ca, 0, 0, 0, 0}, 0x1ec0 }, // U1EC0 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE ++// /* broken */ { {0x0000, 0x00ca, 0, 0, 0, 0}, 0x1ebe }, // U1EBE # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE ++// /* broken */ { {0x0000, 0x00ca, 0, 0, 0, 0}, 0x1ec2 }, // U1EC2 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE ++// /* broken */ { {0x0000, 0x00ca, 0, 0, 0, 0}, 0x1ec4 }, // U1EC4 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE ++// /* broken */ { {0x0000, 0x00cf, 0, 0, 0, 0}, 0x1e2e }, // U1E2E # LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE ++// /* broken */ { {0x0000, 0x00d4, 0, 0, 0, 0}, 0x1ed4 }, // U1ED4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE ++// /* broken */ { {0x0000, 0x00d4, 0, 0, 0, 0}, 0x1ed0 }, // U1ED0 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE ++// /* broken */ { {0x0000, 0x00d4, 0, 0, 0, 0}, 0x1ed2 }, // U1ED2 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE ++// /* broken */ { {0x0000, 0x00d4, 0, 0, 0, 0}, 0x1ed6 }, // U1ED6 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE ++// /* broken */ { {0x0000, 0x00d5, 0, 0, 0, 0}, 0x1e4c }, // U1E4C # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE ++// /* broken */ { {0x0000, 0x00d8, 0, 0, 0, 0}, 0x01fe }, // U01FE # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE ++// /* broken */ { {0x0000, 0x00dc, 0, 0, 0, 0}, 0x01d7 }, // U01D7 # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE ++// /* broken */ { {0x0000, 0x00dc, 0, 0, 0, 0}, 0x01db }, // U01DB # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE ++// /* broken */ { {0x0000, 0x00e2, 0, 0, 0, 0}, 0x1eab }, // U1EAB # LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE ++// /* broken */ { {0x0000, 0x00e2, 0, 0, 0, 0}, 0x1ea5 }, // U1EA5 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE ++// /* broken */ { {0x0000, 0x00e2, 0, 0, 0, 0}, 0x1ea9 }, // U1EA9 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE ++// /* broken */ { {0x0000, 0x00e2, 0, 0, 0, 0}, 0x1ea7 }, // U1EA7 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE ++// /* broken */ { {0x0000, 0x00e5, 0, 0, 0, 0}, 0x01fb }, // U01FB # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE ++// /* broken */ { {0x0000, 0x00e6, 0, 0, 0, 0}, 0x01fd }, // U01FD # LATIN SMALL LETTER AE WITH ACUTE ++// /* broken */ { {0x0000, 0x00e7, 0, 0, 0, 0}, 0x1e09 }, // U1E09 # LATIN SMALL LETTER C WITH CEDILLA AND ACUTE ++// /* broken */ { {0x0000, 0x00ea, 0, 0, 0, 0}, 0x1ec5 }, // U1EC5 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE ++// /* broken */ { {0x0000, 0x00ea, 0, 0, 0, 0}, 0x1ec1 }, // U1EC1 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE ++// /* broken */ { {0x0000, 0x00ea, 0, 0, 0, 0}, 0x1ec3 }, // U1EC3 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE ++// /* broken */ { {0x0000, 0x00ea, 0, 0, 0, 0}, 0x1ebf }, // U1EBF # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE ++// /* broken */ { {0x0000, 0x00ef, 0, 0, 0, 0}, 0x1e2f }, // U1E2F # LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE ++// /* broken */ { {0x0000, 0x00f4, 0, 0, 0, 0}, 0x1ed3 }, // U1ED3 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE ++// /* broken */ { {0x0000, 0x00f4, 0, 0, 0, 0}, 0x1ed1 }, // U1ED1 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE ++// /* broken */ { {0x0000, 0x00f4, 0, 0, 0, 0}, 0x1ed5 }, // U1ED5 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE ++// /* broken */ { {0x0000, 0x00f4, 0, 0, 0, 0}, 0x1ed7 }, // U1ED7 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE ++// /* broken */ { {0x0000, 0x00f5, 0, 0, 0, 0}, 0x1e4d }, // U1E4D # LATIN SMALL LETTER O WITH TILDE AND ACUTE ++// /* broken */ { {0x0000, 0x00f8, 0, 0, 0, 0}, 0x01ff }, // U01FF # LATIN SMALL LETTER O WITH STROKE AND ACUTE ++// /* broken */ { {0x0000, 0x00fc, 0, 0, 0, 0}, 0x01dc }, // U01DC # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE ++// /* broken */ { {0x0000, 0x00fc, 0, 0, 0, 0}, 0x01d8 }, // U01D8 # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE ++// /* broken */ { {0x0000, 0x0102, 0, 0, 0, 0}, 0x1eb0 }, // U1EB0 # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE ++// /* broken */ { {0x0000, 0x0102, 0, 0, 0, 0}, 0x1eb4 }, // U1EB4 # LATIN CAPITAL LETTER A WITH BREVE AND TILDE ++// /* broken */ { {0x0000, 0x0102, 0, 0, 0, 0}, 0x1eb2 }, // U1EB2 # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE ++// /* broken */ { {0x0000, 0x0102, 0, 0, 0, 0}, 0x1eae }, // U1EAE # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE ++// /* broken */ { {0x0000, 0x0103, 0, 0, 0, 0}, 0x1eb5 }, // U1EB5 # LATIN SMALL LETTER A WITH BREVE AND TILDE ++// /* broken */ { {0x0000, 0x0103, 0, 0, 0, 0}, 0x1eaf }, // U1EAF # LATIN SMALL LETTER A WITH BREVE AND ACUTE ++// /* broken */ { {0x0000, 0x0103, 0, 0, 0, 0}, 0x1eb3 }, // U1EB3 # LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE ++// /* broken */ { {0x0000, 0x0103, 0, 0, 0, 0}, 0x1eb1 }, // U1EB1 # LATIN SMALL LETTER A WITH BREVE AND GRAVE ++// /* broken */ { {0x0000, 0x0112, 0, 0, 0, 0}, 0x1e16 }, // U1E16 # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE ++// /* broken */ { {0x0000, 0x0112, 0, 0, 0, 0}, 0x1e14 }, // U1E14 # LATIN CAPITAL LETTER E WITH MACRON AND GRAVE ++// /* broken */ { {0x0000, 0x0113, 0, 0, 0, 0}, 0x1e15 }, // U1E15 # LATIN SMALL LETTER E WITH MACRON AND GRAVE ++// /* broken */ { {0x0000, 0x0113, 0, 0, 0, 0}, 0x1e17 }, // U1E17 # LATIN SMALL LETTER E WITH MACRON AND ACUTE ++// /* broken */ { {0x0000, 0x014c, 0, 0, 0, 0}, 0x1e52 }, // U1E52 # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE ++// /* broken */ { {0x0000, 0x014c, 0, 0, 0, 0}, 0x1e50 }, // U1E50 # LATIN CAPITAL LETTER O WITH MACRON AND GRAVE ++// /* broken */ { {0x0000, 0x014d, 0, 0, 0, 0}, 0x1e51 }, // U1E51 # LATIN SMALL LETTER O WITH MACRON AND GRAVE ++// /* broken */ { {0x0000, 0x014d, 0, 0, 0, 0}, 0x1e53 }, // U1E53 # LATIN SMALL LETTER O WITH MACRON AND ACUTE ++// /* broken */ { {0x0000, 0x0168, 0, 0, 0, 0}, 0x1e78 }, // U1E78 # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE ++// /* broken */ { {0x0000, 0x0169, 0, 0, 0, 0}, 0x1e79 }, // U1E79 # LATIN SMALL LETTER U WITH TILDE AND ACUTE ++// /* broken */ { {0x0000, 0x0313, 0x0391, 0, 0, 0}, 0x1f0a }, // U1F0A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA ++// /* broken */ { {0x0000, 0x0313, 0x0391, 0, 0, 0}, 0x1f0c }, // U1F0C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA ++// /* broken */ { {0x0000, 0x0313, 0x0395, 0, 0, 0}, 0x1f1a }, // U1F1A # GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA ++// /* broken */ { {0x0000, 0x0313, 0x0395, 0, 0, 0}, 0x1f1c }, // U1F1C # GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA ++// /* broken */ { {0x0000, 0x0313, 0x0397, 0, 0, 0}, 0x1f2c }, // U1F2C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA ++// /* broken */ { {0x0000, 0x0313, 0x0397, 0, 0, 0}, 0x1f2a }, // U1F2A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA ++// /* broken */ { {0x0000, 0x0313, 0x0399, 0, 0, 0}, 0x1f3c }, // U1F3C # GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA ++// /* broken */ { {0x0000, 0x0313, 0x0399, 0, 0, 0}, 0x1f3a }, // U1F3A # GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA ++// /* broken */ { {0x0000, 0x0313, 0x039f, 0, 0, 0}, 0x1f4a }, // U1F4A # GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA ++// /* broken */ { {0x0000, 0x0313, 0x039f, 0, 0, 0}, 0x1f4c }, // U1F4C # GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA ++// /* broken */ { {0x0000, 0x0313, 0x03a9, 0, 0, 0}, 0x1f6a }, // U1F6A # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA ++// /* broken */ { {0x0000, 0x0313, 0x03a9, 0, 0, 0}, 0x1f6c }, // U1F6C # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA ++// /* broken */ { {0x0000, 0x0313, 0x03b1, 0, 0, 0}, 0x1f04 }, // U1F04 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA ++// /* broken */ { {0x0000, 0x0313, 0x03b1, 0, 0, 0}, 0x1f02 }, // U1F02 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA ++// /* broken */ { {0x0000, 0x0313, 0x03b5, 0, 0, 0}, 0x1f14 }, // U1F14 # GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA ++// /* broken */ { {0x0000, 0x0313, 0x03b5, 0, 0, 0}, 0x1f12 }, // U1F12 # GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA ++// /* broken */ { {0x0000, 0x0313, 0x03b7, 0, 0, 0}, 0x1f24 }, // U1F24 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA ++// /* broken */ { {0x0000, 0x0313, 0x03b7, 0, 0, 0}, 0x1f22 }, // U1F22 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA ++// /* broken */ { {0x0000, 0x0313, 0x03b9, 0, 0, 0}, 0x1f32 }, // U1F32 # GREEK SMALL LETTER IOTA WITH PSILI AND VARIA ++// /* broken */ { {0x0000, 0x0313, 0x03b9, 0, 0, 0}, 0x1f34 }, // U1F34 # GREEK SMALL LETTER IOTA WITH PSILI AND OXIA ++// /* broken */ { {0x0000, 0x0313, 0x03bf, 0, 0, 0}, 0x1f42 }, // U1F42 # GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA ++// /* broken */ { {0x0000, 0x0313, 0x03bf, 0, 0, 0}, 0x1f44 }, // U1F44 # GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA ++// /* broken */ { {0x0000, 0x0313, 0x03c5, 0, 0, 0}, 0x1f52 }, // U1F52 # GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA ++// /* broken */ { {0x0000, 0x0313, 0x03c5, 0, 0, 0}, 0x1f54 }, // U1F54 # GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA ++// /* broken */ { {0x0000, 0x0313, 0x03c9, 0, 0, 0}, 0x1f62 }, // U1F62 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA ++// /* broken */ { {0x0000, 0x0313, 0x03c9, 0, 0, 0}, 0x1f64 }, // U1F64 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA ++// /* broken */ { {0x0000, 0x0314, 0x0391, 0, 0, 0}, 0x1f0b }, // U1F0B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA ++// /* broken */ { {0x0000, 0x0314, 0x0391, 0, 0, 0}, 0x1f0d }, // U1F0D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA ++// /* broken */ { {0x0000, 0x0314, 0x0395, 0, 0, 0}, 0x1f1d }, // U1F1D # GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA ++// /* broken */ { {0x0000, 0x0314, 0x0395, 0, 0, 0}, 0x1f1b }, // U1F1B # GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA ++// /* broken */ { {0x0000, 0x0314, 0x0397, 0, 0, 0}, 0x1f2d }, // U1F2D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA ++// /* broken */ { {0x0000, 0x0314, 0x0397, 0, 0, 0}, 0x1f2b }, // U1F2B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA ++// /* broken */ { {0x0000, 0x0314, 0x0399, 0, 0, 0}, 0x1f3b }, // U1F3B # GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA ++// /* broken */ { {0x0000, 0x0314, 0x0399, 0, 0, 0}, 0x1f3d }, // U1F3D # GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA ++// /* broken */ { {0x0000, 0x0314, 0x039f, 0, 0, 0}, 0x1f4b }, // U1F4B # GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA ++// /* broken */ { {0x0000, 0x0314, 0x039f, 0, 0, 0}, 0x1f4d }, // U1F4D # GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA ++// /* broken */ { {0x0000, 0x0314, 0x03a5, 0, 0, 0}, 0x1f5b }, // U1F5B # GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA ++// /* broken */ { {0x0000, 0x0314, 0x03a5, 0, 0, 0}, 0x1f5d }, // U1F5D # GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA ++// /* broken */ { {0x0000, 0x0314, 0x03a9, 0, 0, 0}, 0x1f6d }, // U1F6D # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA ++// /* broken */ { {0x0000, 0x0314, 0x03a9, 0, 0, 0}, 0x1f6b }, // U1F6B # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA ++// /* broken */ { {0x0000, 0x0314, 0x03b1, 0, 0, 0}, 0x1f03 }, // U1F03 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA ++// /* broken */ { {0x0000, 0x0314, 0x03b1, 0, 0, 0}, 0x1f05 }, // U1F05 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA ++// /* broken */ { {0x0000, 0x0314, 0x03b5, 0, 0, 0}, 0x1f13 }, // U1F13 # GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA ++// /* broken */ { {0x0000, 0x0314, 0x03b5, 0, 0, 0}, 0x1f15 }, // U1F15 # GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA ++// /* broken */ { {0x0000, 0x0314, 0x03b7, 0, 0, 0}, 0x1f23 }, // U1F23 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA ++// /* broken */ { {0x0000, 0x0314, 0x03b7, 0, 0, 0}, 0x1f25 }, // U1F25 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA ++// /* broken */ { {0x0000, 0x0314, 0x03b9, 0, 0, 0}, 0x1f33 }, // U1F33 # GREEK SMALL LETTER IOTA WITH DASIA AND VARIA ++// /* broken */ { {0x0000, 0x0314, 0x03b9, 0, 0, 0}, 0x1f35 }, // U1F35 # GREEK SMALL LETTER IOTA WITH DASIA AND OXIA ++// /* broken */ { {0x0000, 0x0314, 0x03bf, 0, 0, 0}, 0x1f45 }, // U1F45 # GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA ++// /* broken */ { {0x0000, 0x0314, 0x03bf, 0, 0, 0}, 0x1f43 }, // U1F43 # GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA ++// /* broken */ { {0x0000, 0x0314, 0x03c5, 0, 0, 0}, 0x1f53 }, // U1F53 # GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA ++// /* broken */ { {0x0000, 0x0314, 0x03c5, 0, 0, 0}, 0x1f55 }, // U1F55 # GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA ++// /* broken */ { {0x0000, 0x0314, 0x03c9, 0, 0, 0}, 0x1f63 }, // U1F63 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA ++// /* broken */ { {0x0000, 0x0314, 0x03c9, 0, 0, 0}, 0x1f65 }, // U1F65 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA ++// /* broken */ { {0x0000, 0x0391, 0, 0, 0, 0}, 0x0386 }, // U0386 # GREEK CAPITAL LETTER ALPHA WITH TONOS ++// /* broken */ { {0x0000, 0x0391, 0, 0, 0, 0}, 0x1fba }, // U1FBA # GREEK CAPITAL LETTER ALPHA WITH VARIA ++// /* broken */ { {0x0000, 0x0395, 0, 0, 0, 0}, 0x0388 }, // U0388 # GREEK CAPITAL LETTER EPSILON WITH TONOS ++// /* broken */ { {0x0000, 0x0395, 0, 0, 0, 0}, 0x1fc8 }, // U1FC8 # GREEK CAPITAL LETTER EPSILON WITH VARIA ++// /* broken */ { {0x0000, 0x0397, 0, 0, 0, 0}, 0x1fca }, // U1FCA # GREEK CAPITAL LETTER ETA WITH VARIA ++// /* broken */ { {0x0000, 0x0397, 0, 0, 0, 0}, 0x0389 }, // U0389 # GREEK CAPITAL LETTER ETA WITH TONOS ++// /* broken */ { {0x0000, 0x0399, 0, 0, 0, 0}, 0x038a }, // U038A # GREEK CAPITAL LETTER IOTA WITH TONOS ++// /* broken */ { {0x0000, 0x0399, 0, 0, 0, 0}, 0x1fda }, // U1FDA # GREEK CAPITAL LETTER IOTA WITH VARIA ++// /* broken */ { {0x0000, 0x039f, 0, 0, 0, 0}, 0x038c }, // U038C # GREEK CAPITAL LETTER OMICRON WITH TONOS ++// /* broken */ { {0x0000, 0x039f, 0, 0, 0, 0}, 0x1ff8 }, // U1FF8 # GREEK CAPITAL LETTER OMICRON WITH VARIA ++// /* broken */ { {0x0000, 0x03a5, 0, 0, 0, 0}, 0x038e }, // U038E # GREEK CAPITAL LETTER UPSILON WITH TONOS ++// /* broken */ { {0x0000, 0x03a5, 0, 0, 0, 0}, 0x1fea }, // U1FEA # GREEK CAPITAL LETTER UPSILON WITH VARIA ++// /* broken */ { {0x0000, 0x03a9, 0, 0, 0, 0}, 0x038f }, // U038F # GREEK CAPITAL LETTER OMEGA WITH TONOS ++// /* broken */ { {0x0000, 0x03a9, 0, 0, 0, 0}, 0x1ffa }, // U1FFA # GREEK CAPITAL LETTER OMEGA WITH VARIA ++// /* broken */ { {0x0000, 0x03b1, 0, 0, 0, 0}, 0x03ac }, // U03AC # GREEK SMALL LETTER ALPHA WITH TONOS ++// /* broken */ { {0x0000, 0x03b1, 0, 0, 0, 0}, 0x1f70 }, // U1F70 # GREEK SMALL LETTER ALPHA WITH VARIA ++// /* broken */ { {0x0000, 0x03b5, 0, 0, 0, 0}, 0x03ad }, // U03AD # GREEK SMALL LETTER EPSILON WITH TONOS ++// /* broken */ { {0x0000, 0x03b5, 0, 0, 0, 0}, 0x1f72 }, // U1F72 # GREEK SMALL LETTER EPSILON WITH VARIA ++// /* broken */ { {0x0000, 0x03b7, 0, 0, 0, 0}, 0x03ae }, // U03AE # GREEK SMALL LETTER ETA WITH TONOS ++// /* broken */ { {0x0000, 0x03b7, 0, 0, 0, 0}, 0x1f74 }, // U1F74 # GREEK SMALL LETTER ETA WITH VARIA ++// /* broken */ { {0x0000, 0x03b9, 0, 0, 0, 0}, 0x03af }, // U03AF # GREEK SMALL LETTER IOTA WITH TONOS ++// /* broken */ { {0x0000, 0x03b9, 0, 0, 0, 0}, 0x1f76 }, // U1F76 # GREEK SMALL LETTER IOTA WITH VARIA ++// /* broken */ { {0x0000, 0x03bf, 0, 0, 0, 0}, 0x03cc }, // U03CC # GREEK SMALL LETTER OMICRON WITH TONOS ++// /* broken */ { {0x0000, 0x03bf, 0, 0, 0, 0}, 0x1f78 }, // U1F78 # GREEK SMALL LETTER OMICRON WITH VARIA ++// /* broken */ { {0x0000, 0x03c5, 0, 0, 0, 0}, 0x03cd }, // U03CD # GREEK SMALL LETTER UPSILON WITH TONOS ++// /* broken */ { {0x0000, 0x03c5, 0, 0, 0, 0}, 0x1f7a }, // U1F7A # GREEK SMALL LETTER UPSILON WITH VARIA ++// /* broken */ { {0x0000, 0x03c9, 0, 0, 0, 0}, 0x03ce }, // U03CE # GREEK SMALL LETTER OMEGA WITH TONOS ++// /* broken */ { {0x0000, 0x03c9, 0, 0, 0, 0}, 0x1f7c }, // U1F7C # GREEK SMALL LETTER OMEGA WITH VARIA ++// /* broken */ { {0x0000, 0x03ca, 0, 0, 0, 0}, 0x0390 }, // U0390 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS ++// /* broken */ { {0x0000, 0x03ca, 0, 0, 0, 0}, 0x1fd2 }, // U1FD2 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA ++// /* broken */ { {0x0000, 0x03cb, 0, 0, 0, 0}, 0x1fe2 }, // U1FE2 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA ++// /* broken */ { {0x0000, 0x03cb, 0, 0, 0, 0}, 0x03b0 }, // U03B0 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS ++// /* broken */ { {0x0000, 0x0413, 0, 0, 0, 0}, 0x0403 }, // U0403 # CYRILLIC CAPITAL LETTER GJE ++// /* broken */ { {0x0000, 0x0415, 0, 0, 0, 0}, 0x0400 }, // U0400 # CYRILLIC CAPITAL LETTER IE WITH GRAVE ++// /* broken */ { {0x0000, 0x0418, 0, 0, 0, 0}, 0x040d }, // U040D # CYRILLIC CAPITAL LETTER I WITH GRAVE ++// /* broken */ { {0x0000, 0x041a, 0, 0, 0, 0}, 0x040c }, // U040C # CYRILLIC CAPITAL LETTER KJE ++// /* broken */ { {0x0000, 0x0433, 0, 0, 0, 0}, 0x0453 }, // U0453 # CYRILLIC SMALL LETTER GJE ++// /* broken */ { {0x0000, 0x0435, 0, 0, 0, 0}, 0x0450 }, // U0450 # CYRILLIC SMALL LETTER IE WITH GRAVE ++// /* broken */ { {0x0000, 0x0438, 0, 0, 0, 0}, 0x045d }, // U045D # CYRILLIC SMALL LETTER I WITH GRAVE ++// /* broken */ { {0x0000, 0x043a, 0, 0, 0, 0}, 0x045c }, // U045C # CYRILLIC SMALL LETTER KJE ++// /* broken */ { {0x0000, 0x1f00, 0, 0, 0, 0}, 0x1f02 }, // U1F02 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA ++// /* broken */ { {0x0000, 0x1f00, 0, 0, 0, 0}, 0x1f04 }, // U1F04 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA ++// /* broken */ { {0x0000, 0x1f01, 0, 0, 0, 0}, 0x1f03 }, // U1F03 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA ++// /* broken */ { {0x0000, 0x1f01, 0, 0, 0, 0}, 0x1f05 }, // U1F05 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA ++// /* broken */ { {0x0000, 0x1f08, 0, 0, 0, 0}, 0x1f0c }, // U1F0C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA ++// /* broken */ { {0x0000, 0x1f08, 0, 0, 0, 0}, 0x1f0a }, // U1F0A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA ++// /* broken */ { {0x0000, 0x1f09, 0, 0, 0, 0}, 0x1f0b }, // U1F0B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA ++// /* broken */ { {0x0000, 0x1f09, 0, 0, 0, 0}, 0x1f0d }, // U1F0D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA ++// /* broken */ { {0x0000, 0x1f10, 0, 0, 0, 0}, 0x1f12 }, // U1F12 # GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA ++// /* broken */ { {0x0000, 0x1f10, 0, 0, 0, 0}, 0x1f14 }, // U1F14 # GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA ++// /* broken */ { {0x0000, 0x1f11, 0, 0, 0, 0}, 0x1f13 }, // U1F13 # GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA ++// /* broken */ { {0x0000, 0x1f11, 0, 0, 0, 0}, 0x1f15 }, // U1F15 # GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA ++// /* broken */ { {0x0000, 0x1f18, 0, 0, 0, 0}, 0x1f1c }, // U1F1C # GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA ++// /* broken */ { {0x0000, 0x1f18, 0, 0, 0, 0}, 0x1f1a }, // U1F1A # GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA ++// /* broken */ { {0x0000, 0x1f19, 0, 0, 0, 0}, 0x1f1b }, // U1F1B # GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA ++// /* broken */ { {0x0000, 0x1f19, 0, 0, 0, 0}, 0x1f1d }, // U1F1D # GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA ++// /* broken */ { {0x0000, 0x1f20, 0, 0, 0, 0}, 0x1f22 }, // U1F22 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA ++// /* broken */ { {0x0000, 0x1f20, 0, 0, 0, 0}, 0x1f24 }, // U1F24 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA ++// /* broken */ { {0x0000, 0x1f21, 0, 0, 0, 0}, 0x1f23 }, // U1F23 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA ++// /* broken */ { {0x0000, 0x1f21, 0, 0, 0, 0}, 0x1f25 }, // U1F25 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA ++// /* broken */ { {0x0000, 0x1f28, 0, 0, 0, 0}, 0x1f2a }, // U1F2A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA ++// /* broken */ { {0x0000, 0x1f28, 0, 0, 0, 0}, 0x1f2c }, // U1F2C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA ++// /* broken */ { {0x0000, 0x1f29, 0, 0, 0, 0}, 0x1f2d }, // U1F2D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA ++// /* broken */ { {0x0000, 0x1f29, 0, 0, 0, 0}, 0x1f2b }, // U1F2B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA ++// /* broken */ { {0x0000, 0x1f30, 0, 0, 0, 0}, 0x1f32 }, // U1F32 # GREEK SMALL LETTER IOTA WITH PSILI AND VARIA ++// /* broken */ { {0x0000, 0x1f30, 0, 0, 0, 0}, 0x1f34 }, // U1F34 # GREEK SMALL LETTER IOTA WITH PSILI AND OXIA ++// /* broken */ { {0x0000, 0x1f31, 0, 0, 0, 0}, 0x1f33 }, // U1F33 # GREEK SMALL LETTER IOTA WITH DASIA AND VARIA ++// /* broken */ { {0x0000, 0x1f31, 0, 0, 0, 0}, 0x1f35 }, // U1F35 # GREEK SMALL LETTER IOTA WITH DASIA AND OXIA ++// /* broken */ { {0x0000, 0x1f38, 0, 0, 0, 0}, 0x1f3a }, // U1F3A # GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA ++// /* broken */ { {0x0000, 0x1f38, 0, 0, 0, 0}, 0x1f3c }, // U1F3C # GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA ++// /* broken */ { {0x0000, 0x1f39, 0, 0, 0, 0}, 0x1f3b }, // U1F3B # GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA ++// /* broken */ { {0x0000, 0x1f39, 0, 0, 0, 0}, 0x1f3d }, // U1F3D # GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA ++// /* broken */ { {0x0000, 0x1f40, 0, 0, 0, 0}, 0x1f44 }, // U1F44 # GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA ++// /* broken */ { {0x0000, 0x1f40, 0, 0, 0, 0}, 0x1f42 }, // U1F42 # GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA ++// /* broken */ { {0x0000, 0x1f41, 0, 0, 0, 0}, 0x1f43 }, // U1F43 # GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA ++// /* broken */ { {0x0000, 0x1f41, 0, 0, 0, 0}, 0x1f45 }, // U1F45 # GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA ++// /* broken */ { {0x0000, 0x1f48, 0, 0, 0, 0}, 0x1f4a }, // U1F4A # GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA ++// /* broken */ { {0x0000, 0x1f48, 0, 0, 0, 0}, 0x1f4c }, // U1F4C # GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA ++// /* broken */ { {0x0000, 0x1f49, 0, 0, 0, 0}, 0x1f4d }, // U1F4D # GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA ++// /* broken */ { {0x0000, 0x1f49, 0, 0, 0, 0}, 0x1f4b }, // U1F4B # GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA ++// /* broken */ { {0x0000, 0x1f50, 0, 0, 0, 0}, 0x1f52 }, // U1F52 # GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA ++// /* broken */ { {0x0000, 0x1f50, 0, 0, 0, 0}, 0x1f54 }, // U1F54 # GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA ++// /* broken */ { {0x0000, 0x1f51, 0, 0, 0, 0}, 0x1f53 }, // U1F53 # GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA ++// /* broken */ { {0x0000, 0x1f51, 0, 0, 0, 0}, 0x1f55 }, // U1F55 # GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA ++// /* broken */ { {0x0000, 0x1f59, 0, 0, 0, 0}, 0x1f5b }, // U1F5B # GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA ++// /* broken */ { {0x0000, 0x1f59, 0, 0, 0, 0}, 0x1f5d }, // U1F5D # GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA ++// /* broken */ { {0x0000, 0x1f60, 0, 0, 0, 0}, 0x1f64 }, // U1F64 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA ++// /* broken */ { {0x0000, 0x1f60, 0, 0, 0, 0}, 0x1f62 }, // U1F62 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA ++// /* broken */ { {0x0000, 0x1f61, 0, 0, 0, 0}, 0x1f63 }, // U1F63 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA ++// /* broken */ { {0x0000, 0x1f61, 0, 0, 0, 0}, 0x1f65 }, // U1F65 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA ++// /* broken */ { {0x0000, 0x1f68, 0, 0, 0, 0}, 0x1f6a }, // U1F6A # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA ++// /* broken */ { {0x0000, 0x1f68, 0, 0, 0, 0}, 0x1f6c }, // U1F6C # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA ++// /* broken */ { {0x0000, 0x1f69, 0, 0, 0, 0}, 0x1f6b }, // U1F6B # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA ++// /* broken */ { {0x0000, 0x1f69, 0, 0, 0, 0}, 0x1f6d }, // U1F6D # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0000, 0x004f, 0, 0}, 0x01fe }, // U01FE # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0000, 0x006f, 0, 0}, 0x01ff }, // U01FF # LATIN SMALL LETTER O WITH STROKE AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0049, 0, 0}, 0x1e2e }, // U1E2E # LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0055, 0, 0}, 0x01d7 }, // U01D7 # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0055, 0, 0}, 0x01db }, // U01DB # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0069, 0, 0}, 0x1e2f }, // U1E2F # LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0075, 0, 0}, 0x01dc }, // U01DC # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0075, 0, 0}, 0x01d8 }, // U01D8 # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0022, 0x03b9, 0, 0}, 0x1fd2 }, // U1FD2 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0022, 0x03b9, 0, 0}, 0x0390 }, // U0390 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0022, 0x03c5, 0, 0}, 0x1fe2 }, // U1FE2 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0022, 0x03c5, 0, 0}, 0x03b0 }, // U03B0 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0391, 0, 0}, 0x1f0b }, // U1F0B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0391, 0, 0}, 0x1f0d }, // U1F0D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0395, 0, 0}, 0x1f1d }, // U1F1D # GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0395, 0, 0}, 0x1f1b }, // U1F1B # GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0397, 0, 0}, 0x1f2b }, // U1F2B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0397, 0, 0}, 0x1f2d }, // U1F2D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0399, 0, 0}, 0x1f3b }, // U1F3B # GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0399, 0, 0}, 0x1f3d }, // U1F3D # GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x039f, 0, 0}, 0x1f4b }, // U1F4B # GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x039f, 0, 0}, 0x1f4d }, // U1F4D # GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03a5, 0, 0}, 0x1f5b }, // U1F5B # GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03a5, 0, 0}, 0x1f5d }, // U1F5D # GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03a9, 0, 0}, 0x1f6d }, // U1F6D # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03a9, 0, 0}, 0x1f6b }, // U1F6B # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b1, 0, 0}, 0x1f03 }, // U1F03 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b1, 0, 0}, 0x1f05 }, // U1F05 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b5, 0, 0}, 0x1f15 }, // U1F15 # GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b5, 0, 0}, 0x1f13 }, // U1F13 # GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b7, 0, 0}, 0x1f23 }, // U1F23 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b7, 0, 0}, 0x1f25 }, // U1F25 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b9, 0, 0}, 0x1f35 }, // U1F35 # GREEK SMALL LETTER IOTA WITH DASIA AND OXIA ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b9, 0, 0}, 0x1f33 }, // U1F33 # GREEK SMALL LETTER IOTA WITH DASIA AND VARIA ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03bf, 0, 0}, 0x1f45 }, // U1F45 # GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03bf, 0, 0}, 0x1f43 }, // U1F43 # GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03c5, 0, 0}, 0x1f55 }, // U1F55 # GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03c5, 0, 0}, 0x1f53 }, // U1F53 # GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03c9, 0, 0}, 0x1f65 }, // U1F65 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03c9, 0, 0}, 0x1f63 }, // U1F63 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0391, 0, 0}, 0x1f0c }, // U1F0C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0391, 0, 0}, 0x1f0a }, // U1F0A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0395, 0, 0}, 0x1f1c }, // U1F1C # GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0395, 0, 0}, 0x1f1a }, // U1F1A # GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0397, 0, 0}, 0x1f2c }, // U1F2C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0397, 0, 0}, 0x1f2a }, // U1F2A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0399, 0, 0}, 0x1f3c }, // U1F3C # GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0399, 0, 0}, 0x1f3a }, // U1F3A # GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x039f, 0, 0}, 0x1f4c }, // U1F4C # GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x039f, 0, 0}, 0x1f4a }, // U1F4A # GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03a9, 0, 0}, 0x1f6c }, // U1F6C # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03a9, 0, 0}, 0x1f6a }, // U1F6A # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b1, 0, 0}, 0x1f04 }, // U1F04 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b1, 0, 0}, 0x1f02 }, // U1F02 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b5, 0, 0}, 0x1f12 }, // U1F12 # GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b5, 0, 0}, 0x1f14 }, // U1F14 # GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b7, 0, 0}, 0x1f22 }, // U1F22 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b7, 0, 0}, 0x1f24 }, // U1F24 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b9, 0, 0}, 0x1f32 }, // U1F32 # GREEK SMALL LETTER IOTA WITH PSILI AND VARIA ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b9, 0, 0}, 0x1f34 }, // U1F34 # GREEK SMALL LETTER IOTA WITH PSILI AND OXIA ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03bf, 0, 0}, 0x1f44 }, // U1F44 # GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03bf, 0, 0}, 0x1f42 }, // U1F42 # GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03c5, 0, 0}, 0x1f54 }, // U1F54 # GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03c5, 0, 0}, 0x1f52 }, // U1F52 # GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03c9, 0, 0}, 0x1f64 }, // U1F64 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03c9, 0, 0}, 0x1f62 }, // U1F62 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x002b, 0x004f, 0, 0}, 0x1ee0 }, // U1EE0 # LATIN CAPITAL LETTER O WITH HORN AND TILDE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x002b, 0x004f, 0, 0}, 0x1ede }, // U1EDE # LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x002b, 0x004f, 0, 0}, 0x1ee2 }, // U1EE2 # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x002b, 0x004f, 0, 0}, 0x1eda }, // U1EDA # LATIN CAPITAL LETTER O WITH HORN AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x002b, 0x004f, 0, 0}, 0x1edc }, // U1EDC # LATIN CAPITAL LETTER O WITH HORN AND GRAVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x002b, 0x0055, 0, 0}, 0x1eea }, // U1EEA # LATIN CAPITAL LETTER U WITH HORN AND GRAVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x002b, 0x0055, 0, 0}, 0x1ef0 }, // U1EF0 # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x002b, 0x0055, 0, 0}, 0x1eee }, // U1EEE # LATIN CAPITAL LETTER U WITH HORN AND TILDE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x002b, 0x0055, 0, 0}, 0x1ee8 }, // U1EE8 # LATIN CAPITAL LETTER U WITH HORN AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x002b, 0x0055, 0, 0}, 0x1eec }, // U1EEC # LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x002b, 0x006f, 0, 0}, 0x1edb }, // U1EDB # LATIN SMALL LETTER O WITH HORN AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x002b, 0x006f, 0, 0}, 0x1ee1 }, // U1EE1 # LATIN SMALL LETTER O WITH HORN AND TILDE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x002b, 0x006f, 0, 0}, 0x1edf }, // U1EDF # LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x002b, 0x006f, 0, 0}, 0x1ee3 }, // U1EE3 # LATIN SMALL LETTER O WITH HORN AND DOT BELOW ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x002b, 0x006f, 0, 0}, 0x1edd }, // U1EDD # LATIN SMALL LETTER O WITH HORN AND GRAVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x002b, 0x0075, 0, 0}, 0x1eeb }, // U1EEB # LATIN SMALL LETTER U WITH HORN AND GRAVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x002b, 0x0075, 0, 0}, 0x1ef1 }, // U1EF1 # LATIN SMALL LETTER U WITH HORN AND DOT BELOW ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x002b, 0x0075, 0, 0}, 0x1eed }, // U1EED # LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x002b, 0x0075, 0, 0}, 0x1ee9 }, // U1EE9 # LATIN SMALL LETTER U WITH HORN AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x002b, 0x0075, 0, 0}, 0x1eef }, // U1EEF # LATIN SMALL LETTER U WITH HORN AND TILDE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x002c, 0x0043, 0, 0}, 0x1e08 }, // U1E08 # LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x002c, 0x0063, 0, 0}, 0x1e09 }, // U1E09 # LATIN SMALL LETTER C WITH CEDILLA AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x002f, 0x004f, 0, 0}, 0x01fe }, // U01FE # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x002f, 0x006f, 0, 0}, 0x01ff }, // U01FF # LATIN SMALL LETTER O WITH STROKE AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0041, 0, 0}, 0x1eb2 }, // U1EB2 # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0041, 0, 0}, 0x1eb4 }, // U1EB4 # LATIN CAPITAL LETTER A WITH BREVE AND TILDE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0041, 0, 0}, 0x1eae }, // U1EAE # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0041, 0, 0}, 0x1eb0 }, // U1EB0 # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0061, 0, 0}, 0x1eb5 }, // U1EB5 # LATIN SMALL LETTER A WITH BREVE AND TILDE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0061, 0, 0}, 0x1eaf }, // U1EAF # LATIN SMALL LETTER A WITH BREVE AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0061, 0, 0}, 0x1eb3 }, // U1EB3 # LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0061, 0, 0}, 0x1eb1 }, // U1EB1 # LATIN SMALL LETTER A WITH BREVE AND GRAVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0041, 0, 0}, 0x1ea8 }, // U1EA8 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0041, 0, 0}, 0x1ea6 }, // U1EA6 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0041, 0, 0}, 0x1eaa }, // U1EAA # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0041, 0, 0}, 0x1ea4 }, // U1EA4 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0045, 0, 0}, 0x1ec4 }, // U1EC4 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0045, 0, 0}, 0x1ec2 }, // U1EC2 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0045, 0, 0}, 0x1ec0 }, // U1EC0 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0045, 0, 0}, 0x1ebe }, // U1EBE # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005e, 0x004f, 0, 0}, 0x1ed6 }, // U1ED6 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005e, 0x004f, 0, 0}, 0x1ed4 }, // U1ED4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005e, 0x004f, 0, 0}, 0x1ed0 }, // U1ED0 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005e, 0x004f, 0, 0}, 0x1ed2 }, // U1ED2 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0061, 0, 0}, 0x1ea9 }, // U1EA9 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0061, 0, 0}, 0x1ea7 }, // U1EA7 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0061, 0, 0}, 0x1ea5 }, // U1EA5 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0061, 0, 0}, 0x1eab }, // U1EAB # LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0065, 0, 0}, 0x1ec5 }, // U1EC5 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0065, 0, 0}, 0x1ec1 }, // U1EC1 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0065, 0, 0}, 0x1ebf }, // U1EBF # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0065, 0, 0}, 0x1ec3 }, // U1EC3 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005e, 0x006f, 0, 0}, 0x1ed7 }, // U1ED7 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005e, 0x006f, 0, 0}, 0x1ed5 }, // U1ED5 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005e, 0x006f, 0, 0}, 0x1ed1 }, // U1ED1 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005e, 0x006f, 0, 0}, 0x1ed3 }, // U1ED3 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0045, 0, 0}, 0x1e16 }, // U1E16 # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0045, 0, 0}, 0x1e14 }, // U1E14 # LATIN CAPITAL LETTER E WITH MACRON AND GRAVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005f, 0x004f, 0, 0}, 0x1e52 }, // U1E52 # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005f, 0x004f, 0, 0}, 0x1e50 }, // U1E50 # LATIN CAPITAL LETTER O WITH MACRON AND GRAVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0065, 0, 0}, 0x1e15 }, // U1E15 # LATIN SMALL LETTER E WITH MACRON AND GRAVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0065, 0, 0}, 0x1e17 }, // U1E17 # LATIN SMALL LETTER E WITH MACRON AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005f, 0x006f, 0, 0}, 0x1e51 }, // U1E51 # LATIN SMALL LETTER O WITH MACRON AND GRAVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005f, 0x006f, 0, 0}, 0x1e53 }, // U1E53 # LATIN SMALL LETTER O WITH MACRON AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0041, 0, 0}, 0x1eae }, // U1EAE # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0041, 0, 0}, 0x1eb4 }, // U1EB4 # LATIN CAPITAL LETTER A WITH BREVE AND TILDE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0041, 0, 0}, 0x1eb0 }, // U1EB0 # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0041, 0, 0}, 0x1eb2 }, // U1EB2 # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0061, 0, 0}, 0x1eb1 }, // U1EB1 # LATIN SMALL LETTER A WITH BREVE AND GRAVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0061, 0, 0}, 0x1eaf }, // U1EAF # LATIN SMALL LETTER A WITH BREVE AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0061, 0, 0}, 0x1eb5 }, // U1EB5 # LATIN SMALL LETTER A WITH BREVE AND TILDE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0061, 0, 0}, 0x1eb3 }, // U1EB3 # LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x006f, 0x0041, 0, 0}, 0x01fa }, // U01FA # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x006f, 0x0061, 0, 0}, 0x01fb }, // U01FB # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x007e, 0x004f, 0, 0}, 0x1e4c }, // U1E4C # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0055, 0, 0}, 0x1e78 }, // U1E78 # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x007e, 0x006f, 0, 0}, 0x1e4d }, // U1E4D # LATIN SMALL LETTER O WITH TILDE AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0075, 0, 0}, 0x1e79 }, // U1E79 # LATIN SMALL LETTER U WITH TILDE AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0045, 0, 0}, 0x1e16 }, // U1E16 # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0045, 0, 0}, 0x1e14 }, // U1E14 # LATIN CAPITAL LETTER E WITH MACRON AND GRAVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x00af, 0x004f, 0, 0}, 0x1e52 }, // U1E52 # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x00af, 0x004f, 0, 0}, 0x1e50 }, // U1E50 # LATIN CAPITAL LETTER O WITH MACRON AND GRAVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0065, 0, 0}, 0x1e15 }, // U1E15 # LATIN SMALL LETTER E WITH MACRON AND GRAVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0065, 0, 0}, 0x1e17 }, // U1E17 # LATIN SMALL LETTER E WITH MACRON AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x00af, 0x006f, 0, 0}, 0x1e53 }, // U1E53 # LATIN SMALL LETTER O WITH MACRON AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x00af, 0x006f, 0, 0}, 0x1e51 }, // U1E51 # LATIN SMALL LETTER O WITH MACRON AND GRAVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Circumflex), 0x0041, 0, 0, 0}, 0x1eaa }, // U1EAA # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Circumflex), 0x0041, 0, 0, 0}, 0x1ea6 }, // U1EA6 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Circumflex), 0x0041, 0, 0, 0}, 0x1ea4 }, // U1EA4 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Circumflex), 0x0041, 0, 0, 0}, 0x1ea8 }, // U1EA8 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Circumflex), 0x0045, 0, 0, 0}, 0x1ec4 }, // U1EC4 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Circumflex), 0x0045, 0, 0, 0}, 0x1ec0 }, // U1EC0 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Circumflex), 0x0045, 0, 0, 0}, 0x1ec2 }, // U1EC2 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Circumflex), 0x0045, 0, 0, 0}, 0x1ebe }, // U1EBE # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Circumflex), 0x004f, 0, 0, 0}, 0x1ed0 }, // U1ED0 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Circumflex), 0x004f, 0, 0, 0}, 0x1ed2 }, // U1ED2 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Circumflex), 0x004f, 0, 0, 0}, 0x1ed4 }, // U1ED4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Circumflex), 0x004f, 0, 0, 0}, 0x1ed6 }, // U1ED6 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Circumflex), 0x0061, 0, 0, 0}, 0x1eab }, // U1EAB # LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Circumflex), 0x0061, 0, 0, 0}, 0x1ea5 }, // U1EA5 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Circumflex), 0x0061, 0, 0, 0}, 0x1ea9 }, // U1EA9 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Circumflex), 0x0061, 0, 0, 0}, 0x1ea7 }, // U1EA7 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Circumflex), 0x0065, 0, 0, 0}, 0x1ebf }, // U1EBF # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Circumflex), 0x0065, 0, 0, 0}, 0x1ec3 }, // U1EC3 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Circumflex), 0x0065, 0, 0, 0}, 0x1ec1 }, // U1EC1 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Circumflex), 0x0065, 0, 0, 0}, 0x1ec5 }, // U1EC5 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Circumflex), 0x006f, 0, 0, 0}, 0x1ed3 }, // U1ED3 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Circumflex), 0x006f, 0, 0, 0}, 0x1ed7 }, // U1ED7 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Circumflex), 0x006f, 0, 0, 0}, 0x1ed1 }, // U1ED1 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Circumflex), 0x006f, 0, 0, 0}, 0x1ed5 }, // U1ED5 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Tilde), 0x004f, 0, 0, 0}, 0x1e4c }, // U1E4C # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Tilde), 0x0055, 0, 0, 0}, 0x1e78 }, // U1E78 # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Tilde), 0x006f, 0, 0, 0}, 0x1e4d }, // U1E4D # LATIN SMALL LETTER O WITH TILDE AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Tilde), 0x0075, 0, 0, 0}, 0x1e79 }, // U1E79 # LATIN SMALL LETTER U WITH TILDE AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Macron), 0x0045, 0, 0, 0}, 0x1e16 }, // U1E16 # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Macron), 0x0045, 0, 0, 0}, 0x1e14 }, // U1E14 # LATIN CAPITAL LETTER E WITH MACRON AND GRAVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Macron), 0x004f, 0, 0, 0}, 0x1e52 }, // U1E52 # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Macron), 0x004f, 0, 0, 0}, 0x1e50 }, // U1E50 # LATIN CAPITAL LETTER O WITH MACRON AND GRAVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Macron), 0x0065, 0, 0, 0}, 0x1e17 }, // U1E17 # LATIN SMALL LETTER E WITH MACRON AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Macron), 0x0065, 0, 0, 0}, 0x1e15 }, // U1E15 # LATIN SMALL LETTER E WITH MACRON AND GRAVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Macron), 0x006f, 0, 0, 0}, 0x1e53 }, // U1E53 # LATIN SMALL LETTER O WITH MACRON AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Macron), 0x006f, 0, 0, 0}, 0x1e51 }, // U1E51 # LATIN SMALL LETTER O WITH MACRON AND GRAVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Breve), 0x0041, 0, 0, 0}, 0x1eb4 }, // U1EB4 # LATIN CAPITAL LETTER A WITH BREVE AND TILDE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Breve), 0x0041, 0, 0, 0}, 0x1eb0 }, // U1EB0 # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Breve), 0x0041, 0, 0, 0}, 0x1eae }, // U1EAE # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Breve), 0x0041, 0, 0, 0}, 0x1eb2 }, // U1EB2 # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Breve), 0x0061, 0, 0, 0}, 0x1eb1 }, // U1EB1 # LATIN SMALL LETTER A WITH BREVE AND GRAVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Breve), 0x0061, 0, 0, 0}, 0x1eb3 }, // U1EB3 # LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Breve), 0x0061, 0, 0, 0}, 0x1eaf }, // U1EAF # LATIN SMALL LETTER A WITH BREVE AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Breve), 0x0061, 0, 0, 0}, 0x1eb5 }, // U1EB5 # LATIN SMALL LETTER A WITH BREVE AND TILDE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Diaeresis), 0x0049, 0, 0, 0}, 0x1e2e }, // U1E2E # LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Diaeresis), 0x0055, 0, 0, 0}, 0x01db }, // U01DB # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Diaeresis), 0x0055, 0, 0, 0}, 0x01d7 }, // U01D7 # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Diaeresis), 0x0069, 0, 0, 0}, 0x1e2f }, // U1E2F # LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Diaeresis), 0x0075, 0, 0, 0}, 0x01dc }, // U01DC # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Diaeresis), 0x0075, 0, 0, 0}, 0x01d8 }, // U01D8 # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Diaeresis), 0x03b9, 0, 0, 0}, 0x0390 }, // U0390 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Diaeresis), 0x03b9, 0, 0, 0}, 0x1fd2 }, // U1FD2 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Diaeresis), 0x03c5, 0, 0, 0}, 0x1fe2 }, // U1FE2 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Diaeresis), 0x03c5, 0, 0, 0}, 0x03b0 }, // U03B0 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Abovering), 0x0041, 0, 0, 0}, 0x01fa }, // U01FA # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Abovering), 0x0061, 0, 0, 0}, 0x01fb }, // U01FB # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Cedilla), 0x0043, 0, 0, 0}, 0x1e08 }, // U1E08 # LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Cedilla), 0x0063, 0, 0, 0}, 0x1e09 }, // U1E09 # LATIN SMALL LETTER C WITH CEDILLA AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Horn), 0x004f, 0, 0, 0}, 0x1ede }, // U1EDE # LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Horn), 0x004f, 0, 0, 0}, 0x1ee2 }, // U1EE2 # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Horn), 0x004f, 0, 0, 0}, 0x1edc }, // U1EDC # LATIN CAPITAL LETTER O WITH HORN AND GRAVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Horn), 0x004f, 0, 0, 0}, 0x1ee0 }, // U1EE0 # LATIN CAPITAL LETTER O WITH HORN AND TILDE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Horn), 0x004f, 0, 0, 0}, 0x1eda }, // U1EDA # LATIN CAPITAL LETTER O WITH HORN AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Horn), 0x0055, 0, 0, 0}, 0x1eea }, // U1EEA # LATIN CAPITAL LETTER U WITH HORN AND GRAVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Horn), 0x0055, 0, 0, 0}, 0x1ee8 }, // U1EE8 # LATIN CAPITAL LETTER U WITH HORN AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Horn), 0x0055, 0, 0, 0}, 0x1ef0 }, // U1EF0 # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Horn), 0x0055, 0, 0, 0}, 0x1eec }, // U1EEC # LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Horn), 0x0055, 0, 0, 0}, 0x1eee }, // U1EEE # LATIN CAPITAL LETTER U WITH HORN AND TILDE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Horn), 0x006f, 0, 0, 0}, 0x1edf }, // U1EDF # LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Horn), 0x006f, 0, 0, 0}, 0x1ee3 }, // U1EE3 # LATIN SMALL LETTER O WITH HORN AND DOT BELOW ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Horn), 0x006f, 0, 0, 0}, 0x1edd }, // U1EDD # LATIN SMALL LETTER O WITH HORN AND GRAVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Horn), 0x006f, 0, 0, 0}, 0x1edb }, // U1EDB # LATIN SMALL LETTER O WITH HORN AND ACUTE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Horn), 0x006f, 0, 0, 0}, 0x1ee1 }, // U1EE1 # LATIN SMALL LETTER O WITH HORN AND TILDE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Horn), 0x0075, 0, 0, 0}, 0x1eed }, // U1EED # LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Horn), 0x0075, 0, 0, 0}, 0x1eef }, // U1EEF # LATIN SMALL LETTER U WITH HORN AND TILDE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Horn), 0x0075, 0, 0, 0}, 0x1ef1 }, // U1EF1 # LATIN SMALL LETTER U WITH HORN AND DOT BELOW ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Horn), 0x0075, 0, 0, 0}, 0x1eeb }, // U1EEB # LATIN SMALL LETTER U WITH HORN AND GRAVE ++// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Horn), 0x0075, 0, 0, 0}, 0x1ee9 }, // U1EE9 # LATIN SMALL LETTER U WITH HORN AND ACUTE ++ { {0x030f, 0x0041, 0, 0, 0, 0}, 0x0200 }, // U0200 # LATIN CAPITAL LETTER A WITH DOUBLE GRAVE ++ { {0x030f, 0x0045, 0, 0, 0, 0}, 0x0204 }, // U0204 # LATIN CAPITAL LETTER E WITH DOUBLE GRAVE ++ { {0x030f, 0x0049, 0, 0, 0, 0}, 0x0208 }, // U0208 # LATIN CAPITAL LETTER I WITH DOUBLE GRAVE ++ { {0x030f, 0x004f, 0, 0, 0, 0}, 0x020c }, // U020C # LATIN CAPITAL LETTER O WITH DOUBLE GRAVE ++ { {0x030f, 0x0052, 0, 0, 0, 0}, 0x0210 }, // U0210 # LATIN CAPITAL LETTER R WITH DOUBLE GRAVE ++ { {0x030f, 0x0055, 0, 0, 0, 0}, 0x0214 }, // U0214 # LATIN CAPITAL LETTER U WITH DOUBLE GRAVE ++ { {0x030f, 0x0061, 0, 0, 0, 0}, 0x0201 }, // U0201 # LATIN SMALL LETTER A WITH DOUBLE GRAVE ++ { {0x030f, 0x0065, 0, 0, 0, 0}, 0x0205 }, // U0205 # LATIN SMALL LETTER E WITH DOUBLE GRAVE ++ { {0x030f, 0x0069, 0, 0, 0, 0}, 0x0209 }, // U0209 # LATIN SMALL LETTER I WITH DOUBLE GRAVE ++ { {0x030f, 0x006f, 0, 0, 0, 0}, 0x020d }, // U020D # LATIN SMALL LETTER O WITH DOUBLE GRAVE ++ { {0x030f, 0x0072, 0, 0, 0, 0}, 0x0211 }, // U0211 # LATIN SMALL LETTER R WITH DOUBLE GRAVE ++ { {0x030f, 0x0075, 0, 0, 0, 0}, 0x0215 }, // U0215 # LATIN SMALL LETTER U WITH DOUBLE GRAVE ++ { {0x030f, 0x0474, 0, 0, 0, 0}, 0x0476 }, // U0476 # CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT ++ { {0x030f, 0x0475, 0, 0, 0, 0}, 0x0477 }, // U0477 # CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT ++ { {0x0311, 0x0041, 0, 0, 0, 0}, 0x0202 }, // U0202 # LATIN CAPITAL LETTER A WITH INVERTED BREVE ++ { {0x0311, 0x0045, 0, 0, 0, 0}, 0x0206 }, // U0206 # LATIN CAPITAL LETTER E WITH INVERTED BREVE ++ { {0x0311, 0x0049, 0, 0, 0, 0}, 0x020a }, // U020A # LATIN CAPITAL LETTER I WITH INVERTED BREVE ++ { {0x0311, 0x004f, 0, 0, 0, 0}, 0x020e }, // U020E # LATIN CAPITAL LETTER O WITH INVERTED BREVE ++ { {0x0311, 0x0052, 0, 0, 0, 0}, 0x0212 }, // U0212 # LATIN CAPITAL LETTER R WITH INVERTED BREVE ++ { {0x0311, 0x0055, 0, 0, 0, 0}, 0x0216 }, // U0216 # LATIN CAPITAL LETTER U WITH INVERTED BREVE ++ { {0x0311, 0x0061, 0, 0, 0, 0}, 0x0203 }, // U0203 # LATIN SMALL LETTER A WITH INVERTED BREVE ++ { {0x0311, 0x0065, 0, 0, 0, 0}, 0x0207 }, // U0207 # LATIN SMALL LETTER E WITH INVERTED BREVE ++ { {0x0311, 0x0069, 0, 0, 0, 0}, 0x020b }, // U020B # LATIN SMALL LETTER I WITH INVERTED BREVE ++ { {0x0311, 0x006f, 0, 0, 0, 0}, 0x020f }, // U020F # LATIN SMALL LETTER O WITH INVERTED BREVE ++ { {0x0311, 0x0072, 0, 0, 0, 0}, 0x0213 }, // U0213 # LATIN SMALL LETTER R WITH INVERTED BREVE ++ { {0x0311, 0x0075, 0, 0, 0, 0}, 0x0217 }, // U0217 # LATIN SMALL LETTER U WITH INVERTED BREVE ++ { {0x0313, 0x0391, 0, 0, 0, 0}, 0x1f08 }, // U1F08 # GREEK CAPITAL LETTER ALPHA WITH PSILI ++ { {0x0313, 0x0395, 0, 0, 0, 0}, 0x1f18 }, // U1F18 # GREEK CAPITAL LETTER EPSILON WITH PSILI ++ { {0x0313, 0x0397, 0, 0, 0, 0}, 0x1f28 }, // U1F28 # GREEK CAPITAL LETTER ETA WITH PSILI ++ { {0x0313, 0x0399, 0, 0, 0, 0}, 0x1f38 }, // U1F38 # GREEK CAPITAL LETTER IOTA WITH PSILI ++ { {0x0313, 0x039f, 0, 0, 0, 0}, 0x1f48 }, // U1F48 # GREEK CAPITAL LETTER OMICRON WITH PSILI ++ { {0x0313, 0x03a9, 0, 0, 0, 0}, 0x1f68 }, // U1F68 # GREEK CAPITAL LETTER OMEGA WITH PSILI ++ { {0x0313, 0x03b1, 0, 0, 0, 0}, 0x1f00 }, // U1F00 # GREEK SMALL LETTER ALPHA WITH PSILI ++ { {0x0313, 0x03b5, 0, 0, 0, 0}, 0x1f10 }, // U1F10 # GREEK SMALL LETTER EPSILON WITH PSILI ++ { {0x0313, 0x03b7, 0, 0, 0, 0}, 0x1f20 }, // U1F20 # GREEK SMALL LETTER ETA WITH PSILI ++ { {0x0313, 0x03b9, 0, 0, 0, 0}, 0x1f30 }, // U1F30 # GREEK SMALL LETTER IOTA WITH PSILI ++ { {0x0313, 0x03bf, 0, 0, 0, 0}, 0x1f40 }, // U1F40 # GREEK SMALL LETTER OMICRON WITH PSILI ++ { {0x0313, 0x03c1, 0, 0, 0, 0}, 0x1fe4 }, // U1FE4 # GREEK SMALL LETTER RHO WITH PSILI ++ { {0x0313, 0x03c5, 0, 0, 0, 0}, 0x1f50 }, // U1F50 # GREEK SMALL LETTER UPSILON WITH PSILI ++ { {0x0313, 0x03c9, 0, 0, 0, 0}, 0x1f60 }, // U1F60 # GREEK SMALL LETTER OMEGA WITH PSILI ++ { {0x0314, 0x0391, 0, 0, 0, 0}, 0x1f09 }, // U1F09 # GREEK CAPITAL LETTER ALPHA WITH DASIA ++ { {0x0314, 0x0395, 0, 0, 0, 0}, 0x1f19 }, // U1F19 # GREEK CAPITAL LETTER EPSILON WITH DASIA ++ { {0x0314, 0x0397, 0, 0, 0, 0}, 0x1f29 }, // U1F29 # GREEK CAPITAL LETTER ETA WITH DASIA ++ { {0x0314, 0x0399, 0, 0, 0, 0}, 0x1f39 }, // U1F39 # GREEK CAPITAL LETTER IOTA WITH DASIA ++ { {0x0314, 0x039f, 0, 0, 0, 0}, 0x1f49 }, // U1F49 # GREEK CAPITAL LETTER OMICRON WITH DASIA ++ { {0x0314, 0x03a1, 0, 0, 0, 0}, 0x1fec }, // U1FEC # GREEK CAPITAL LETTER RHO WITH DASIA ++ { {0x0314, 0x03a5, 0, 0, 0, 0}, 0x1f59 }, // U1F59 # GREEK CAPITAL LETTER UPSILON WITH DASIA ++ { {0x0314, 0x03a9, 0, 0, 0, 0}, 0x1f69 }, // U1F69 # GREEK CAPITAL LETTER OMEGA WITH DASIA ++ { {0x0314, 0x03b1, 0, 0, 0, 0}, 0x1f01 }, // U1F01 # GREEK SMALL LETTER ALPHA WITH DASIA ++ { {0x0314, 0x03b5, 0, 0, 0, 0}, 0x1f11 }, // U1F11 # GREEK SMALL LETTER EPSILON WITH DASIA ++ { {0x0314, 0x03b7, 0, 0, 0, 0}, 0x1f21 }, // U1F21 # GREEK SMALL LETTER ETA WITH DASIA ++ { {0x0314, 0x03b9, 0, 0, 0, 0}, 0x1f31 }, // U1F31 # GREEK SMALL LETTER IOTA WITH DASIA ++ { {0x0314, 0x03bf, 0, 0, 0, 0}, 0x1f41 }, // U1F41 # GREEK SMALL LETTER OMICRON WITH DASIA ++ { {0x0314, 0x03c1, 0, 0, 0, 0}, 0x1fe5 }, // U1FE5 # GREEK SMALL LETTER RHO WITH DASIA ++ { {0x0314, 0x03c5, 0, 0, 0, 0}, 0x1f51 }, // U1F51 # GREEK SMALL LETTER UPSILON WITH DASIA ++ { {0x0314, 0x03c9, 0, 0, 0, 0}, 0x1f61 }, // U1F61 # GREEK SMALL LETTER OMEGA WITH DASIA ++ { {0x0324, 0x0055, 0, 0, 0, 0}, 0x1e72 }, // U1E72 # LATIN CAPITAL LETTER U WITH DIAERESIS BELOW ++ { {0x0324, 0x0075, 0, 0, 0, 0}, 0x1e73 }, // U1E73 # LATIN SMALL LETTER U WITH DIAERESIS BELOW ++ { {0x0325, 0x0041, 0, 0, 0, 0}, 0x1e00 }, // U1E00 # LATIN CAPITAL LETTER A WITH RING BELOW ++ { {0x0325, 0x0061, 0, 0, 0, 0}, 0x1e01 }, // U1E01 # LATIN SMALL LETTER A WITH RING BELOW ++ { {0x0326, 0x0053, 0, 0, 0, 0}, 0x0218 }, // U0218 # LATIN CAPITAL LETTER S WITH COMMA BELOW ++ { {0x0326, 0x0054, 0, 0, 0, 0}, 0x021a }, // U021A # LATIN CAPITAL LETTER T WITH COMMA BELOW ++ { {0x0326, 0x0073, 0, 0, 0, 0}, 0x0219 }, // U0219 # LATIN SMALL LETTER S WITH COMMA BELOW ++ { {0x0326, 0x0074, 0, 0, 0, 0}, 0x021b }, // U021B # LATIN SMALL LETTER T WITH COMMA BELOW ++ { {0x032d, 0x0044, 0, 0, 0, 0}, 0x1e12 }, // U1E12 # LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW ++ { {0x032d, 0x0045, 0, 0, 0, 0}, 0x1e18 }, // U1E18 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW ++ { {0x032d, 0x004c, 0, 0, 0, 0}, 0x1e3c }, // U1E3C # LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW ++ { {0x032d, 0x004e, 0, 0, 0, 0}, 0x1e4a }, // U1E4A # LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW ++ { {0x032d, 0x0054, 0, 0, 0, 0}, 0x1e70 }, // U1E70 # LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW ++ { {0x032d, 0x0055, 0, 0, 0, 0}, 0x1e76 }, // U1E76 # LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW ++ { {0x032d, 0x0064, 0, 0, 0, 0}, 0x1e13 }, // U1E13 # LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW ++ { {0x032d, 0x0065, 0, 0, 0, 0}, 0x1e19 }, // U1E19 # LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW ++ { {0x032d, 0x006c, 0, 0, 0, 0}, 0x1e3d }, // U1E3D # LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW ++ { {0x032d, 0x006e, 0, 0, 0, 0}, 0x1e4b }, // U1E4B # LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW ++ { {0x032d, 0x0074, 0, 0, 0, 0}, 0x1e71 }, // U1E71 # LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW ++ { {0x032d, 0x0075, 0, 0, 0, 0}, 0x1e77 }, // U1E77 # LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW ++ { {0x032e, 0x0048, 0, 0, 0, 0}, 0x1e2a }, // U1E2A # LATIN CAPITAL LETTER H WITH BREVE BELOW ++ { {0x032e, 0x0068, 0, 0, 0, 0}, 0x1e2b }, // U1E2B # LATIN SMALL LETTER H WITH BREVE BELOW ++ { {0x0330, 0x0045, 0, 0, 0, 0}, 0x1e1a }, // U1E1A # LATIN CAPITAL LETTER E WITH TILDE BELOW ++ { {0x0330, 0x0049, 0, 0, 0, 0}, 0x1e2c }, // U1E2C # LATIN CAPITAL LETTER I WITH TILDE BELOW ++ { {0x0330, 0x0055, 0, 0, 0, 0}, 0x1e74 }, // U1E74 # LATIN CAPITAL LETTER U WITH TILDE BELOW ++ { {0x0330, 0x0065, 0, 0, 0, 0}, 0x1e1b }, // U1E1B # LATIN SMALL LETTER E WITH TILDE BELOW ++ { {0x0330, 0x0069, 0, 0, 0, 0}, 0x1e2d }, // U1E2D # LATIN SMALL LETTER I WITH TILDE BELOW ++ { {0x0330, 0x0075, 0, 0, 0, 0}, 0x1e75 }, // U1E75 # LATIN SMALL LETTER U WITH TILDE BELOW ++ { {0x0331, 0x0042, 0, 0, 0, 0}, 0x1e06 }, // U1E06 # LATIN CAPITAL LETTER B WITH LINE BELOW ++ { {0x0331, 0x0044, 0, 0, 0, 0}, 0x1e0e }, // U1E0E # LATIN CAPITAL LETTER D WITH LINE BELOW ++ { {0x0331, 0x004b, 0, 0, 0, 0}, 0x1e34 }, // U1E34 # LATIN CAPITAL LETTER K WITH LINE BELOW ++ { {0x0331, 0x004c, 0, 0, 0, 0}, 0x1e3a }, // U1E3A # LATIN CAPITAL LETTER L WITH LINE BELOW ++ { {0x0331, 0x004e, 0, 0, 0, 0}, 0x1e48 }, // U1E48 # LATIN CAPITAL LETTER N WITH LINE BELOW ++ { {0x0331, 0x0052, 0, 0, 0, 0}, 0x1e5e }, // U1E5E # LATIN CAPITAL LETTER R WITH LINE BELOW ++ { {0x0331, 0x0054, 0, 0, 0, 0}, 0x1e6e }, // U1E6E # LATIN CAPITAL LETTER T WITH LINE BELOW ++ { {0x0331, 0x005a, 0, 0, 0, 0}, 0x1e94 }, // U1E94 # LATIN CAPITAL LETTER Z WITH LINE BELOW ++ { {0x0331, 0x0062, 0, 0, 0, 0}, 0x1e07 }, // U1E07 # LATIN SMALL LETTER B WITH LINE BELOW ++ { {0x0331, 0x0064, 0, 0, 0, 0}, 0x1e0f }, // U1E0F # LATIN SMALL LETTER D WITH LINE BELOW ++ { {0x0331, 0x0068, 0, 0, 0, 0}, 0x1e96 }, // U1E96 # LATIN SMALL LETTER H WITH LINE BELOW ++ { {0x0331, 0x006b, 0, 0, 0, 0}, 0x1e35 }, // U1E35 # LATIN SMALL LETTER K WITH LINE BELOW ++ { {0x0331, 0x006c, 0, 0, 0, 0}, 0x1e3b }, // U1E3B # LATIN SMALL LETTER L WITH LINE BELOW ++ { {0x0331, 0x006e, 0, 0, 0, 0}, 0x1e49 }, // U1E49 # LATIN SMALL LETTER N WITH LINE BELOW ++ { {0x0331, 0x0072, 0, 0, 0, 0}, 0x1e5f }, // U1E5F # LATIN SMALL LETTER R WITH LINE BELOW ++ { {0x0331, 0x0074, 0, 0, 0, 0}, 0x1e6f }, // U1E6F # LATIN SMALL LETTER T WITH LINE BELOW ++ { {0x0331, 0x007a, 0, 0, 0, 0}, 0x1e95 }, // U1E95 # LATIN SMALL LETTER Z WITH LINE BELOW ++ { {0x0342, 0x0313, 0x0391, 0, 0, 0}, 0x1f0e }, // U1F0E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI ++ { {0x0342, 0x0313, 0x0397, 0, 0, 0}, 0x1f2e }, // U1F2E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI ++ { {0x0342, 0x0313, 0x0399, 0, 0, 0}, 0x1f3e }, // U1F3E # GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI ++ { {0x0342, 0x0313, 0x03a9, 0, 0, 0}, 0x1f6e }, // U1F6E # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI ++ { {0x0342, 0x0313, 0x03b1, 0, 0, 0}, 0x1f06 }, // U1F06 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI ++ { {0x0342, 0x0313, 0x03b7, 0, 0, 0}, 0x1f26 }, // U1F26 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI ++ { {0x0342, 0x0313, 0x03b9, 0, 0, 0}, 0x1f36 }, // U1F36 # GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI ++ { {0x0342, 0x0313, 0x03c5, 0, 0, 0}, 0x1f56 }, // U1F56 # GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI ++ { {0x0342, 0x0313, 0x03c9, 0, 0, 0}, 0x1f66 }, // U1F66 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI ++ { {0x0342, 0x0314, 0x0391, 0, 0, 0}, 0x1f0f }, // U1F0F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI ++ { {0x0342, 0x0314, 0x0397, 0, 0, 0}, 0x1f2f }, // U1F2F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI ++ { {0x0342, 0x0314, 0x0399, 0, 0, 0}, 0x1f3f }, // U1F3F # GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI ++ { {0x0342, 0x0314, 0x03a5, 0, 0, 0}, 0x1f5f }, // U1F5F # GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI ++ { {0x0342, 0x0314, 0x03a9, 0, 0, 0}, 0x1f6f }, // U1F6F # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI ++ { {0x0342, 0x0314, 0x03b1, 0, 0, 0}, 0x1f07 }, // U1F07 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI ++ { {0x0342, 0x0314, 0x03b7, 0, 0, 0}, 0x1f27 }, // U1F27 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI ++ { {0x0342, 0x0314, 0x03b9, 0, 0, 0}, 0x1f37 }, // U1F37 # GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI ++ { {0x0342, 0x0314, 0x03c5, 0, 0, 0}, 0x1f57 }, // U1F57 # GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI ++ { {0x0342, 0x0314, 0x03c9, 0, 0, 0}, 0x1f67 }, // U1F67 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI ++ { {0x0342, 0x03b1, 0, 0, 0, 0}, 0x1fb6 }, // U1FB6 # GREEK SMALL LETTER ALPHA WITH PERISPOMENI ++ { {0x0342, 0x03b7, 0, 0, 0, 0}, 0x1fc6 }, // U1FC6 # GREEK SMALL LETTER ETA WITH PERISPOMENI ++ { {0x0342, 0x03b9, 0, 0, 0, 0}, 0x1fd6 }, // U1FD6 # GREEK SMALL LETTER IOTA WITH PERISPOMENI ++ { {0x0342, 0x03c5, 0, 0, 0, 0}, 0x1fe6 }, // U1FE6 # GREEK SMALL LETTER UPSILON WITH PERISPOMENI ++ { {0x0342, 0x03c9, 0, 0, 0, 0}, 0x1ff6 }, // U1FF6 # GREEK SMALL LETTER OMEGA WITH PERISPOMENI ++ { {0x0342, 0x03ca, 0, 0, 0, 0}, 0x1fd7 }, // U1FD7 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI ++ { {0x0342, 0x03cb, 0, 0, 0, 0}, 0x1fe7 }, // U1FE7 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI ++ { {0x0342, 0x1f00, 0, 0, 0, 0}, 0x1f06 }, // U1F06 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI ++ { {0x0342, 0x1f01, 0, 0, 0, 0}, 0x1f07 }, // U1F07 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI ++ { {0x0342, 0x1f08, 0, 0, 0, 0}, 0x1f0e }, // U1F0E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI ++ { {0x0342, 0x1f09, 0, 0, 0, 0}, 0x1f0f }, // U1F0F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI ++ { {0x0342, 0x1f20, 0, 0, 0, 0}, 0x1f26 }, // U1F26 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI ++ { {0x0342, 0x1f21, 0, 0, 0, 0}, 0x1f27 }, // U1F27 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI ++ { {0x0342, 0x1f28, 0, 0, 0, 0}, 0x1f2e }, // U1F2E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI ++ { {0x0342, 0x1f29, 0, 0, 0, 0}, 0x1f2f }, // U1F2F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI ++ { {0x0342, 0x1f30, 0, 0, 0, 0}, 0x1f36 }, // U1F36 # GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI ++ { {0x0342, 0x1f31, 0, 0, 0, 0}, 0x1f37 }, // U1F37 # GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI ++ { {0x0342, 0x1f38, 0, 0, 0, 0}, 0x1f3e }, // U1F3E # GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI ++ { {0x0342, 0x1f39, 0, 0, 0, 0}, 0x1f3f }, // U1F3F # GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI ++ { {0x0342, 0x1f50, 0, 0, 0, 0}, 0x1f56 }, // U1F56 # GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI ++ { {0x0342, 0x1f51, 0, 0, 0, 0}, 0x1f57 }, // U1F57 # GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI ++ { {0x0342, 0x1f59, 0, 0, 0, 0}, 0x1f5f }, // U1F5F # GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI ++ { {0x0342, 0x1f60, 0, 0, 0, 0}, 0x1f66 }, // U1F66 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI ++ { {0x0342, 0x1f61, 0, 0, 0, 0}, 0x1f67 }, // U1F67 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI ++ { {0x0342, 0x1f68, 0, 0, 0, 0}, 0x1f6e }, // U1F6E # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI ++ { {0x0342, 0x1f69, 0, 0, 0, 0}, 0x1f6f }, // U1F6F # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI ++ { {0x0342, UNITIZE(Qt::Key_Multi_key), 0x0022, 0x03b9, 0, 0}, 0x1fd7 }, // U1FD7 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI ++ { {0x0342, UNITIZE(Qt::Key_Multi_key), 0x0022, 0x03c5, 0, 0}, 0x1fe7 }, // U1FE7 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI ++ { {0x0342, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0391, 0, 0}, 0x1f0f }, // U1F0F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI ++ { {0x0342, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0397, 0, 0}, 0x1f2f }, // U1F2F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI ++ { {0x0342, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0399, 0, 0}, 0x1f3f }, // U1F3F # GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI ++ { {0x0342, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03a5, 0, 0}, 0x1f5f }, // U1F5F # GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI ++ { {0x0342, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03a9, 0, 0}, 0x1f6f }, // U1F6F # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI ++ { {0x0342, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b1, 0, 0}, 0x1f07 }, // U1F07 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI ++ { {0x0342, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b7, 0, 0}, 0x1f27 }, // U1F27 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI ++ { {0x0342, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b9, 0, 0}, 0x1f37 }, // U1F37 # GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI ++ { {0x0342, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03c5, 0, 0}, 0x1f57 }, // U1F57 # GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI ++ { {0x0342, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03c9, 0, 0}, 0x1f67 }, // U1F67 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI ++ { {0x0342, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0391, 0, 0}, 0x1f0e }, // U1F0E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI ++ { {0x0342, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0397, 0, 0}, 0x1f2e }, // U1F2E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI ++ { {0x0342, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0399, 0, 0}, 0x1f3e }, // U1F3E # GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI ++ { {0x0342, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03a9, 0, 0}, 0x1f6e }, // U1F6E # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI ++ { {0x0342, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b1, 0, 0}, 0x1f06 }, // U1F06 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI ++ { {0x0342, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b7, 0, 0}, 0x1f26 }, // U1F26 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI ++ { {0x0342, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b9, 0, 0}, 0x1f36 }, // U1F36 # GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI ++ { {0x0342, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03c5, 0, 0}, 0x1f56 }, // U1F56 # GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI ++ { {0x0342, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03c9, 0, 0}, 0x1f66 }, // U1F66 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI ++ { {0x0342, UNITIZE(Qt::Key_Dead_Diaeresis), 0x03b9, 0, 0, 0}, 0x1fd7 }, // U1FD7 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI ++ { {0x0342, UNITIZE(Qt::Key_Dead_Diaeresis), 0x03c5, 0, 0, 0}, 0x1fe7 }, // U1FE7 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0000, 0x0044, 0, 0, 0}, 0x0110 }, // U0110 # LATIN CAPITAL LETTER D WITH STROKE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0000, 0x0047, 0, 0, 0}, 0x01e4 }, // U01E4 # LATIN CAPITAL LETTER G WITH STROKE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0000, 0x0048, 0, 0, 0}, 0x0126 }, // U0126 # LATIN CAPITAL LETTER H WITH STROKE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0000, 0x0049, 0, 0, 0}, 0x0197 }, // U0197 # LATIN CAPITAL LETTER I WITH STROKE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0000, 0x004c, 0, 0, 0}, 0x0141 }, // U0141 # LATIN CAPITAL LETTER L WITH STROKE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0000, 0x004f, 0, 0, 0}, 0x00d8 }, // U00D8 # LATIN CAPITAL LETTER O WITH STROKE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0000, 0x0054, 0, 0, 0}, 0x0166 }, // U0166 # LATIN CAPITAL LETTER T WITH STROKE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0000, 0x005a, 0, 0, 0}, 0x01b5 }, // U01B5 # LATIN CAPITAL LETTER Z WITH STROKE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0000, 0x0062, 0, 0, 0}, 0x0180 }, // U0180 # LATIN SMALL LETTER B WITH STROKE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0000, 0x0064, 0, 0, 0}, 0x0111 }, // U0111 # LATIN SMALL LETTER D WITH STROKE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0000, 0x0067, 0, 0, 0}, 0x01e5 }, // U01E5 # LATIN SMALL LETTER G WITH STROKE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0000, 0x0068, 0, 0, 0}, 0x0127 }, // U0127 # LATIN SMALL LETTER H WITH STROKE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0000, 0x0069, 0, 0, 0}, 0x0268 }, // U0268 # LATIN SMALL LETTER I WITH STROKE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0000, 0x006c, 0, 0, 0}, 0x0142 }, // U0142 # LATIN SMALL LETTER L WITH STROKE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0000, 0x006f, 0, 0, 0}, 0x00f8 }, // U00F8 # LATIN SMALL LETTER O WITH STROKE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0000, 0x0074, 0, 0, 0}, 0x0167 }, // U0167 # LATIN SMALL LETTER T WITH STROKE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0000, 0x007a, 0, 0, 0}, 0x01b6 }, // U01B6 # LATIN SMALL LETTER Z WITH STROKE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0000, 0x0294, 0, 0, 0}, 0x02a1 }, // U02A1 # LATIN LETTER GLOTTAL STOP WITH STROKE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0000, 0x0338, 0, 0, 0}, 0x2260 }, // U2260 # NOT EQUAL TO ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0000, 0x0413, 0, 0, 0}, 0x0492 }, // U0492 # CYRILLIC CAPITAL LETTER GHE WITH STROKE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0000, 0x041a, 0, 0, 0}, 0x049e }, // U049E # CYRILLIC CAPITAL LETTER KA WITH STROKE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0000, 0x0433, 0, 0, 0}, 0x0493 }, // U0493 # CYRILLIC SMALL LETTER GHE WITH STROKE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0000, 0x043a, 0, 0, 0}, 0x049f }, // U049F # CYRILLIC SMALL LETTER KA WITH STROKE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0000, 0x04ae, 0, 0, 0}, 0x04b0 }, // U04B0 # CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0000, 0x04af, 0, 0, 0}, 0x04b1 }, // U04B1 # CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0000, 0x2190, 0, 0, 0}, 0x219a }, // U219A # LEFTWARDS ARROW WITH STROKE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0000, 0x2192, 0, 0, 0}, 0x219b }, // U219B # RIGHTWARDS ARROW WITH STROKE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0000, 0x2194, 0, 0, 0}, 0x21ae }, // U21AE # LEFT RIGHT ARROW WITH STROKE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0020, 0x0020, 0, 0, 0}, 0x00a0 }, // nobreakspace # NO-BREAK SPACE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0020, 0x0027, 0, 0, 0}, 0x0027 }, // apostrophe ++ { {UNITIZE(Qt::Key_Multi_key), 0x0020, 0x002c, 0, 0, 0}, 0x00b8 }, // cedilla ++ { {UNITIZE(Qt::Key_Multi_key), 0x0020, 0x002d, 0, 0, 0}, 0x007e }, // asciitilde ++ { {UNITIZE(Qt::Key_Multi_key), 0x0020, 0x002e, 0, 0, 0}, 0x2008 }, // U2008 # PUNCTUATION SPACE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0020, 0x003e, 0, 0, 0}, 0x005e }, // asciicircum ++ { {UNITIZE(Qt::Key_Multi_key), 0x0020, 0x005e, 0, 0, 0}, 0x005e }, // asciicircum ++ { {UNITIZE(Qt::Key_Multi_key), 0x0020, 0x0060, 0, 0, 0}, 0x0060 }, // grave ++ { {UNITIZE(Qt::Key_Multi_key), 0x0020, 0x007e, 0, 0, 0}, 0x007e }, // asciitilde ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0000, 0, 0, 0}, 0x1ef0 }, // U1EF0 # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0000, 0, 0, 0}, 0x1ee3 }, // U1EE3 # LATIN SMALL LETTER O WITH HORN AND DOT BELOW ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0000, 0, 0, 0}, 0x1ee2 }, // U1EE2 # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0000, 0, 0, 0}, 0x1ef1 }, // U1EF1 # LATIN SMALL LETTER U WITH HORN AND DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0021, 0, 0, 0}, 0x00a1 }, // exclamdown ++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x002b, 0x004f, 0, 0}, 0x1ee2 }, // U1EE2 # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x002b, 0x0055, 0, 0}, 0x1ef0 }, // U1EF0 # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x002b, 0x006f, 0, 0}, 0x1ee3 }, // U1EE3 # LATIN SMALL LETTER O WITH HORN AND DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x002b, 0x0075, 0, 0}, 0x1ef1 }, // U1EF1 # LATIN SMALL LETTER U WITH HORN AND DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0041, 0, 0, 0}, 0x1ea0 }, // U1EA0 # LATIN CAPITAL LETTER A WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0042, 0, 0, 0}, 0x1e04 }, // U1E04 # LATIN CAPITAL LETTER B WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0044, 0, 0, 0}, 0x1e0c }, // U1E0C # LATIN CAPITAL LETTER D WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0045, 0, 0, 0}, 0x1eb8 }, // U1EB8 # LATIN CAPITAL LETTER E WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0048, 0, 0, 0}, 0x1e24 }, // U1E24 # LATIN CAPITAL LETTER H WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0049, 0, 0, 0}, 0x1eca }, // U1ECA # LATIN CAPITAL LETTER I WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x004b, 0, 0, 0}, 0x1e32 }, // U1E32 # LATIN CAPITAL LETTER K WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x004c, 0, 0, 0}, 0x1e36 }, // U1E36 # LATIN CAPITAL LETTER L WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x004d, 0, 0, 0}, 0x1e42 }, // U1E42 # LATIN CAPITAL LETTER M WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x004e, 0, 0, 0}, 0x1e46 }, // U1E46 # LATIN CAPITAL LETTER N WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x004f, 0, 0, 0}, 0x1ecc }, // U1ECC # LATIN CAPITAL LETTER O WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0052, 0, 0, 0}, 0x1e5a }, // U1E5A # LATIN CAPITAL LETTER R WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0053, 0, 0, 0}, 0x1e62 }, // U1E62 # LATIN CAPITAL LETTER S WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0054, 0, 0, 0}, 0x1e6c }, // U1E6C # LATIN CAPITAL LETTER T WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0055, 0, 0, 0}, 0x1ee4 }, // U1EE4 # LATIN CAPITAL LETTER U WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0056, 0, 0, 0}, 0x1e7e }, // U1E7E # LATIN CAPITAL LETTER V WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0057, 0, 0, 0}, 0x1e88 }, // U1E88 # LATIN CAPITAL LETTER W WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0059, 0, 0, 0}, 0x1ef4 }, // U1EF4 # LATIN CAPITAL LETTER Y WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x005a, 0, 0, 0}, 0x1e92 }, // U1E92 # LATIN CAPITAL LETTER Z WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x005e, 0, 0, 0}, 0x00a6 }, // brokenbar ++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0061, 0, 0, 0}, 0x1ea1 }, // U1EA1 # LATIN SMALL LETTER A WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0062, 0, 0, 0}, 0x1e05 }, // U1E05 # LATIN SMALL LETTER B WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0064, 0, 0, 0}, 0x1e0d }, // U1E0D # LATIN SMALL LETTER D WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0065, 0, 0, 0}, 0x1eb9 }, // U1EB9 # LATIN SMALL LETTER E WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0068, 0, 0, 0}, 0x1e25 }, // U1E25 # LATIN SMALL LETTER H WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0069, 0, 0, 0}, 0x1ecb }, // U1ECB # LATIN SMALL LETTER I WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x006b, 0, 0, 0}, 0x1e33 }, // U1E33 # LATIN SMALL LETTER K WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x006c, 0, 0, 0}, 0x1e37 }, // U1E37 # LATIN SMALL LETTER L WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x006d, 0, 0, 0}, 0x1e43 }, // U1E43 # LATIN SMALL LETTER M WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x006e, 0, 0, 0}, 0x1e47 }, // U1E47 # LATIN SMALL LETTER N WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x006f, 0, 0, 0}, 0x1ecd }, // U1ECD # LATIN SMALL LETTER O WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0072, 0, 0, 0}, 0x1e5b }, // U1E5B # LATIN SMALL LETTER R WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0073, 0, 0, 0}, 0x1e63 }, // U1E63 # LATIN SMALL LETTER S WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0074, 0, 0, 0}, 0x1e6d }, // U1E6D # LATIN SMALL LETTER T WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0075, 0, 0, 0}, 0x1ee5 }, // U1EE5 # LATIN SMALL LETTER U WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0076, 0, 0, 0}, 0x1e7f }, // U1E7F # LATIN SMALL LETTER V WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0077, 0, 0, 0}, 0x1e89 }, // U1E89 # LATIN SMALL LETTER W WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0079, 0, 0, 0}, 0x1ef5 }, // U1EF5 # LATIN SMALL LETTER Y WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x007a, 0, 0, 0}, 0x1e93 }, // U1E93 # LATIN SMALL LETTER Z WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, UNITIZE(Qt::Key_Dead_Horn), 0x004f, 0, 0}, 0x1ee2 }, // U1EE2 # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, UNITIZE(Qt::Key_Dead_Horn), 0x0055, 0, 0}, 0x1ef0 }, // U1EF0 # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, UNITIZE(Qt::Key_Dead_Horn), 0x006f, 0, 0}, 0x1ee3 }, // U1EE3 # LATIN SMALL LETTER O WITH HORN AND DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0021, UNITIZE(Qt::Key_Dead_Horn), 0x0075, 0, 0}, 0x1ef1 }, // U1EF1 # LATIN SMALL LETTER U WITH HORN AND DOT BELOW ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0000, 0, 0, 0}, 0x0344 }, // U0344 # COMBINING GREEK DIALYTIKA TONOS ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0000, 0x004f, 0, 0}, 0x1e4e }, // U1E4E # LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0000, 0x006f, 0, 0}, 0x1e4f }, // U1E4F # LATIN SMALL LETTER O WITH TILDE AND DIAERESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0027, 0, 0, 0}, 0x0344 }, // U0344 # COMBINING GREEK DIALYTIKA TONOS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x002c, 0, 0, 0}, 0x201e }, // U201e # DOUBLE LOW-9 QUOTATION MARK ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x002f, 0, 0, 0}, 0x301e }, // U301e # DOUBLE PRIME QUOTATION MARK ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x003c, 0, 0, 0}, 0x201c }, // U201c # LEFT DOUBLE QUOTATION MARK ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x003e, 0, 0, 0}, 0x201d }, // U201d # RIGHT DOUBLE QUOTATION MARK ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0041, 0, 0, 0}, 0x00c4 }, // U00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0045, 0, 0, 0}, 0x00cb }, // U00CB # LATIN CAPITAL LETTER E WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0048, 0, 0, 0}, 0x1e26 }, // U1E26 # LATIN CAPITAL LETTER H WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0049, 0, 0, 0}, 0x00cf }, // U00CF # LATIN CAPITAL LETTER I WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x004f, 0, 0, 0}, 0x00d6 }, // U00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0055, 0, 0, 0}, 0x00dc }, // U00DC # LATIN CAPITAL LETTER U WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0057, 0, 0, 0}, 0x1e84 }, // U1E84 # LATIN CAPITAL LETTER W WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0058, 0, 0, 0}, 0x1e8c }, // U1E8C # LATIN CAPITAL LETTER X WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0059, 0, 0, 0}, 0x0178 }, // U0178 # LATIN CAPITAL LETTER Y WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x005c, 0, 0, 0}, 0x301d }, // U301d # REVERSED DOUBLE PRIME QUOTATION MARK ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x005f, 0x0055, 0, 0}, 0x1e7a }, // U1E7A # LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x005f, 0x0075, 0, 0}, 0x1e7b }, // U1E7B # LATIN SMALL LETTER U WITH MACRON AND DIAERESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0061, 0, 0, 0}, 0x00e4 }, // U00E4 # LATIN SMALL LETTER A WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0065, 0, 0, 0}, 0x00eb }, // U00EB # LATIN SMALL LETTER E WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0068, 0, 0, 0}, 0x1e27 }, // U1E27 # LATIN SMALL LETTER H WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0069, 0, 0, 0}, 0x00ef }, // U00EF # LATIN SMALL LETTER I WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x006f, 0, 0, 0}, 0x00f6 }, // U00F6 # LATIN SMALL LETTER O WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0074, 0, 0, 0}, 0x1e97 }, // U1E97 # LATIN SMALL LETTER T WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0075, 0, 0, 0}, 0x00fc }, // U00FC # LATIN SMALL LETTER U WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0077, 0, 0, 0}, 0x1e85 }, // U1E85 # LATIN SMALL LETTER W WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0078, 0, 0, 0}, 0x1e8d }, // U1E8D # LATIN SMALL LETTER X WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0079, 0, 0, 0}, 0x00ff }, // U00FF # LATIN SMALL LETTER Y WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x007e, 0x004f, 0, 0}, 0x1e4e }, // U1E4E # LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x007e, 0x006f, 0, 0}, 0x1e4f }, // U1E4F # LATIN SMALL LETTER O WITH TILDE AND DIAERESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x00af, 0x0055, 0, 0}, 0x1e7a }, // U1E7A # LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x00af, 0x0075, 0, 0}, 0x1e7b }, // U1E7B # LATIN SMALL LETTER U WITH MACRON AND DIAERESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x00b4, 0, 0, 0}, 0x0344 }, // U0344 # COMBINING GREEK DIALYTIKA TONOS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x00d5, 0, 0, 0}, 0x1e4e }, // U1E4E # LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x00f5, 0, 0, 0}, 0x1e4f }, // U1E4F # LATIN SMALL LETTER O WITH TILDE AND DIAERESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x016a, 0, 0, 0}, 0x1e7a }, // U1E7A # LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x016b, 0, 0, 0}, 0x1e7b }, // U1E7B # LATIN SMALL LETTER U WITH MACRON AND DIAERESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0399, 0, 0, 0}, 0x03aa }, // U03AA # GREEK CAPITAL LETTER IOTA WITH DIALYTIKA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x03a5, 0, 0, 0}, 0x03ab }, // U03AB # GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x03b9, 0, 0, 0}, 0x03ca }, // U03CA # GREEK SMALL LETTER IOTA WITH DIALYTIKA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x03c5, 0, 0, 0}, 0x03cb }, // U03CB # GREEK SMALL LETTER UPSILON WITH DIALYTIKA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x03d2, 0, 0, 0}, 0x03d4 }, // U03D4 # GREEK UPSILON WITH DIAERESIS AND HOOK SYMBOL ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0406, 0, 0, 0}, 0x0407 }, // U0407 # CYRILLIC CAPITAL LETTER YI ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0410, 0, 0, 0}, 0x04d2 }, // U04D2 # CYRILLIC CAPITAL LETTER A WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0415, 0, 0, 0}, 0x0401 }, // U0401 # CYRILLIC CAPITAL LETTER IO ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0416, 0, 0, 0}, 0x04dc }, // U04DC # CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0417, 0, 0, 0}, 0x04de }, // U04DE # CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0418, 0, 0, 0}, 0x04e4 }, // U04E4 # CYRILLIC CAPITAL LETTER I WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x041e, 0, 0, 0}, 0x04e6 }, // U04E6 # CYRILLIC CAPITAL LETTER O WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0423, 0, 0, 0}, 0x04f0 }, // U04F0 # CYRILLIC CAPITAL LETTER U WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0427, 0, 0, 0}, 0x04f4 }, // U04F4 # CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x042b, 0, 0, 0}, 0x04f8 }, // U04F8 # CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x042d, 0, 0, 0}, 0x04ec }, // U04EC # CYRILLIC CAPITAL LETTER E WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0430, 0, 0, 0}, 0x04d3 }, // U04D3 # CYRILLIC SMALL LETTER A WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0435, 0, 0, 0}, 0x0451 }, // U0451 # CYRILLIC SMALL LETTER IO ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0436, 0, 0, 0}, 0x04dd }, // U04DD # CYRILLIC SMALL LETTER ZHE WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0437, 0, 0, 0}, 0x04df }, // U04DF # CYRILLIC SMALL LETTER ZE WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0438, 0, 0, 0}, 0x04e5 }, // U04E5 # CYRILLIC SMALL LETTER I WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x043e, 0, 0, 0}, 0x04e7 }, // U04E7 # CYRILLIC SMALL LETTER O WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0443, 0, 0, 0}, 0x04f1 }, // U04F1 # CYRILLIC SMALL LETTER U WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0447, 0, 0, 0}, 0x04f5 }, // U04F5 # CYRILLIC SMALL LETTER CHE WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x044b, 0, 0, 0}, 0x04f9 }, // U04F9 # CYRILLIC SMALL LETTER YERU WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x044d, 0, 0, 0}, 0x04ed }, // U04ED # CYRILLIC SMALL LETTER E WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0456, 0, 0, 0}, 0x0457 }, // U0457 # CYRILLIC SMALL LETTER YI ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x04d8, 0, 0, 0}, 0x04da }, // U04DA # CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x04d9, 0, 0, 0}, 0x04db }, // U04DB # CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x04e8, 0, 0, 0}, 0x04ea }, // U04EA # CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x04e9, 0, 0, 0}, 0x04eb }, // U04EB # CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, UNITIZE(Qt::Key_Dead_Acute), 0, 0, 0}, 0x0344 }, // U0344 # COMBINING GREEK DIALYTIKA TONOS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, UNITIZE(Qt::Key_Dead_Tilde), 0x004f, 0, 0}, 0x1e4e }, // U1E4E # LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, UNITIZE(Qt::Key_Dead_Tilde), 0x006f, 0, 0}, 0x1e4f }, // U1E4F # LATIN SMALL LETTER O WITH TILDE AND DIAERESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, UNITIZE(Qt::Key_Dead_Macron), 0x0055, 0, 0}, 0x1e7a }, // U1E7A # LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0022, UNITIZE(Qt::Key_Dead_Macron), 0x0075, 0, 0}, 0x1e7b }, // U1E7B # LATIN SMALL LETTER U WITH MACRON AND DIAERESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0023, 0x0023, 0, 0, 0}, 0x266f }, // U266f # MUSIC SHARP SIGN ++ { {UNITIZE(Qt::Key_Multi_key), 0x0023, 0x0062, 0, 0, 0}, 0x266d }, // U266d # MUSIC FLAT SIGN ++ { {UNITIZE(Qt::Key_Multi_key), 0x0023, 0x0066, 0, 0, 0}, 0x266e }, // U266e # MUSIC NATURAL SIGN ++ { {UNITIZE(Qt::Key_Multi_key), 0x0025, 0x006f, 0, 0, 0}, 0x2030 }, // U2030 # PER MILLE SIGN ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0000, 0, 0, 0}, 0x1eda }, // U1EDA # LATIN CAPITAL LETTER O WITH HORN AND ACUTE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0000, 0, 0, 0}, 0x1ee9 }, // U1EE9 # LATIN SMALL LETTER U WITH HORN AND ACUTE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0000, 0, 0, 0}, 0x1ee8 }, // U1EE8 # LATIN CAPITAL LETTER U WITH HORN AND ACUTE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0000, 0, 0, 0}, 0x1edb }, // U1EDB # LATIN SMALL LETTER O WITH HORN AND ACUTE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0000, 0x004f, 0, 0}, 0x1e4c }, // U1E4C # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0000, 0x004f, 0, 0}, 0x01fe }, // U01FE # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0000, 0x0055, 0, 0}, 0x1e78 }, // U1E78 # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0000, 0x006f, 0, 0}, 0x1e4d }, // U1E4D # LATIN SMALL LETTER O WITH TILDE AND ACUTE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0000, 0x006f, 0, 0}, 0x01ff }, // U01FF # LATIN SMALL LETTER O WITH STROKE AND ACUTE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0000, 0x0075, 0, 0}, 0x1e79 }, // U1E79 # LATIN SMALL LETTER U WITH TILDE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0020, 0, 0, 0}, 0x0027 }, // apostrophe ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0022, 0x0049, 0, 0}, 0x1e2e }, // U1E2E # LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0022, 0x0055, 0, 0}, 0x01d7 }, // U01D7 # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0022, 0x0069, 0, 0}, 0x1e2f }, // U1E2F # LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0022, 0x0075, 0, 0}, 0x01d8 }, // U01D8 # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0022, 0x03b9, 0, 0}, 0x0390 }, // U0390 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0022, 0x03c5, 0, 0}, 0x03b0 }, // U03B0 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0028, 0x0391, 0, 0}, 0x1f0d }, // U1F0D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0028, 0x0395, 0, 0}, 0x1f1d }, // U1F1D # GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0028, 0x0397, 0, 0}, 0x1f2d }, // U1F2D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0028, 0x0399, 0, 0}, 0x1f3d }, // U1F3D # GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0028, 0x039f, 0, 0}, 0x1f4d }, // U1F4D # GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0028, 0x03a5, 0, 0}, 0x1f5d }, // U1F5D # GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0028, 0x03a9, 0, 0}, 0x1f6d }, // U1F6D # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0028, 0x03b1, 0, 0}, 0x1f05 }, // U1F05 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0028, 0x03b5, 0, 0}, 0x1f15 }, // U1F15 # GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0028, 0x03b7, 0, 0}, 0x1f25 }, // U1F25 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0028, 0x03b9, 0, 0}, 0x1f35 }, // U1F35 # GREEK SMALL LETTER IOTA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0028, 0x03bf, 0, 0}, 0x1f45 }, // U1F45 # GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0028, 0x03c5, 0, 0}, 0x1f55 }, // U1F55 # GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0028, 0x03c9, 0, 0}, 0x1f65 }, // U1F65 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0029, 0x0391, 0, 0}, 0x1f0c }, // U1F0C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0029, 0x0395, 0, 0}, 0x1f1c }, // U1F1C # GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0029, 0x0397, 0, 0}, 0x1f2c }, // U1F2C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0029, 0x0399, 0, 0}, 0x1f3c }, // U1F3C # GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0029, 0x039f, 0, 0}, 0x1f4c }, // U1F4C # GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0029, 0x03a9, 0, 0}, 0x1f6c }, // U1F6C # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0029, 0x03b1, 0, 0}, 0x1f04 }, // U1F04 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0029, 0x03b5, 0, 0}, 0x1f14 }, // U1F14 # GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0029, 0x03b7, 0, 0}, 0x1f24 }, // U1F24 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0029, 0x03b9, 0, 0}, 0x1f34 }, // U1F34 # GREEK SMALL LETTER IOTA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0029, 0x03bf, 0, 0}, 0x1f44 }, // U1F44 # GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0029, 0x03c5, 0, 0}, 0x1f54 }, // U1F54 # GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0029, 0x03c9, 0, 0}, 0x1f64 }, // U1F64 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x002b, 0x004f, 0, 0}, 0x1eda }, // U1EDA # LATIN CAPITAL LETTER O WITH HORN AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x002b, 0x0055, 0, 0}, 0x1ee8 }, // U1EE8 # LATIN CAPITAL LETTER U WITH HORN AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x002b, 0x006f, 0, 0}, 0x1edb }, // U1EDB # LATIN SMALL LETTER O WITH HORN AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x002b, 0x0075, 0, 0}, 0x1ee9 }, // U1EE9 # LATIN SMALL LETTER U WITH HORN AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x002c, 0, 0, 0}, 0x201a }, // U201a # SINGLE LOW-9 QUOTATION MARK ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x002c, 0x0043, 0, 0}, 0x1e08 }, // U1E08 # LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x002c, 0x0063, 0, 0}, 0x1e09 }, // U1E09 # LATIN SMALL LETTER C WITH CEDILLA AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x002f, 0x004f, 0, 0}, 0x01fe }, // U01FE # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x002f, 0x006f, 0, 0}, 0x01ff }, // U01FF # LATIN SMALL LETTER O WITH STROKE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x003c, 0, 0, 0}, 0x2018 }, // U2018 # LEFT SINGLE QUOTATION MARK ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x003e, 0, 0, 0}, 0x2019 }, // U2019 # RIGHT SINGLE QUOTATION MARK ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0041, 0, 0, 0}, 0x00c1 }, // U00C1 # LATIN CAPITAL LETTER A WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0043, 0, 0, 0}, 0x0106 }, // U0106 # LATIN CAPITAL LETTER C WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0045, 0, 0, 0}, 0x00c9 }, // U00C9 # LATIN CAPITAL LETTER E WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0047, 0, 0, 0}, 0x01f4 }, // U01F4 # LATIN CAPITAL LETTER G WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0049, 0, 0, 0}, 0x00cd }, // U00CD # LATIN CAPITAL LETTER I WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x004b, 0, 0, 0}, 0x1e30 }, // U1E30 # LATIN CAPITAL LETTER K WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x004c, 0, 0, 0}, 0x0139 }, // U0139 # LATIN CAPITAL LETTER L WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x004d, 0, 0, 0}, 0x1e3e }, // U1E3E # LATIN CAPITAL LETTER M WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x004e, 0, 0, 0}, 0x0143 }, // U0143 # LATIN CAPITAL LETTER N WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x004f, 0, 0, 0}, 0x00d3 }, // U00D3 # LATIN CAPITAL LETTER O WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0050, 0, 0, 0}, 0x1e54 }, // U1E54 # LATIN CAPITAL LETTER P WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0052, 0, 0, 0}, 0x0154 }, // U0154 # LATIN CAPITAL LETTER R WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0053, 0, 0, 0}, 0x015a }, // U015A # LATIN CAPITAL LETTER S WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0055, 0, 0, 0}, 0x00da }, // U00DA # LATIN CAPITAL LETTER U WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0055, 0x0041, 0, 0}, 0x1eae }, // U1EAE # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0055, 0x0061, 0, 0}, 0x1eaf }, // U1EAF # LATIN SMALL LETTER A WITH BREVE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0057, 0, 0, 0}, 0x1e82 }, // U1E82 # LATIN CAPITAL LETTER W WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0059, 0, 0, 0}, 0x00dd }, // U00DD # LATIN CAPITAL LETTER Y WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x005a, 0, 0, 0}, 0x0179 }, // U0179 # LATIN CAPITAL LETTER Z WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x005e, 0x0041, 0, 0}, 0x1ea4 }, // U1EA4 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x005e, 0x0045, 0, 0}, 0x1ebe }, // U1EBE # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x005e, 0x004f, 0, 0}, 0x1ed0 }, // U1ED0 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x005e, 0x0061, 0, 0}, 0x1ea5 }, // U1EA5 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x005e, 0x0065, 0, 0}, 0x1ebf }, // U1EBF # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x005e, 0x006f, 0, 0}, 0x1ed1 }, // U1ED1 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x005f, 0x0045, 0, 0}, 0x1e16 }, // U1E16 # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x005f, 0x004f, 0, 0}, 0x1e52 }, // U1E52 # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x005f, 0x0065, 0, 0}, 0x1e17 }, // U1E17 # LATIN SMALL LETTER E WITH MACRON AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x005f, 0x006f, 0, 0}, 0x1e53 }, // U1E53 # LATIN SMALL LETTER O WITH MACRON AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0061, 0, 0, 0}, 0x00e1 }, // U00E1 # LATIN SMALL LETTER A WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0062, 0x0041, 0, 0}, 0x1eae }, // U1EAE # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0062, 0x0061, 0, 0}, 0x1eaf }, // U1EAF # LATIN SMALL LETTER A WITH BREVE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0063, 0, 0, 0}, 0x0107 }, // U0107 # LATIN SMALL LETTER C WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0065, 0, 0, 0}, 0x00e9 }, // U00E9 # LATIN SMALL LETTER E WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0067, 0, 0, 0}, 0x01f5 }, // U01F5 # LATIN SMALL LETTER G WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0069, 0, 0, 0}, 0x00ed }, // U00ED # LATIN SMALL LETTER I WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x006b, 0, 0, 0}, 0x1e31 }, // U1E31 # LATIN SMALL LETTER K WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x006c, 0, 0, 0}, 0x013a }, // U013A # LATIN SMALL LETTER L WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x006d, 0, 0, 0}, 0x1e3f }, // U1E3F # LATIN SMALL LETTER M WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x006e, 0, 0, 0}, 0x0144 }, // U0144 # LATIN SMALL LETTER N WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x006f, 0, 0, 0}, 0x00f3 }, // U00F3 # LATIN SMALL LETTER O WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0070, 0, 0, 0}, 0x1e55 }, // U1E55 # LATIN SMALL LETTER P WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0072, 0, 0, 0}, 0x0155 }, // U0155 # LATIN SMALL LETTER R WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0073, 0, 0, 0}, 0x015b }, // U015B # LATIN SMALL LETTER S WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0075, 0, 0, 0}, 0x00fa }, // U00FA # LATIN SMALL LETTER U WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0077, 0, 0, 0}, 0x1e83 }, // U1E83 # LATIN SMALL LETTER W WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0079, 0, 0, 0}, 0x00fd }, // U00FD # LATIN SMALL LETTER Y WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x007a, 0, 0, 0}, 0x017a }, // U017A # LATIN SMALL LETTER Z WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x007e, 0x004f, 0, 0}, 0x1e4c }, // U1E4C # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x007e, 0x0055, 0, 0}, 0x1e78 }, // U1E78 # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x007e, 0x006f, 0, 0}, 0x1e4d }, // U1E4D # LATIN SMALL LETTER O WITH TILDE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x007e, 0x0075, 0, 0}, 0x1e79 }, // U1E79 # LATIN SMALL LETTER U WITH TILDE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x00af, 0x0045, 0, 0}, 0x1e16 }, // U1E16 # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x00af, 0x004f, 0, 0}, 0x1e52 }, // U1E52 # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x00af, 0x0065, 0, 0}, 0x1e17 }, // U1E17 # LATIN SMALL LETTER E WITH MACRON AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x00af, 0x006f, 0, 0}, 0x1e53 }, // U1E53 # LATIN SMALL LETTER O WITH MACRON AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x00c2, 0, 0, 0}, 0x1ea4 }, // U1EA4 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x00c5, 0, 0, 0}, 0x01fa }, // U01FA # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x00c6, 0, 0, 0}, 0x01fc }, // U01FC # LATIN CAPITAL LETTER AE WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x00c7, 0, 0, 0}, 0x1e08 }, // U1E08 # LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x00ca, 0, 0, 0}, 0x1ebe }, // U1EBE # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x00cf, 0, 0, 0}, 0x1e2e }, // U1E2E # LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x00d4, 0, 0, 0}, 0x1ed0 }, // U1ED0 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x00d5, 0, 0, 0}, 0x1e4c }, // U1E4C # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x00d8, 0, 0, 0}, 0x01fe }, // U01FE # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x00dc, 0, 0, 0}, 0x01d7 }, // U01D7 # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x00e2, 0, 0, 0}, 0x1ea5 }, // U1EA5 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x00e5, 0, 0, 0}, 0x01fb }, // U01FB # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x00e6, 0, 0, 0}, 0x01fd }, // U01FD # LATIN SMALL LETTER AE WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x00e7, 0, 0, 0}, 0x1e09 }, // U1E09 # LATIN SMALL LETTER C WITH CEDILLA AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x00ea, 0, 0, 0}, 0x1ebf }, // U1EBF # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x00ef, 0, 0, 0}, 0x1e2f }, // U1E2F # LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x00f4, 0, 0, 0}, 0x1ed1 }, // U1ED1 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x00f5, 0, 0, 0}, 0x1e4d }, // U1E4D # LATIN SMALL LETTER O WITH TILDE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x00f8, 0, 0, 0}, 0x01ff }, // U01FF # LATIN SMALL LETTER O WITH STROKE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x00fc, 0, 0, 0}, 0x01d8 }, // U01D8 # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0102, 0, 0, 0}, 0x1eae }, // U1EAE # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0103, 0, 0, 0}, 0x1eaf }, // U1EAF # LATIN SMALL LETTER A WITH BREVE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0112, 0, 0, 0}, 0x1e16 }, // U1E16 # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0113, 0, 0, 0}, 0x1e17 }, // U1E17 # LATIN SMALL LETTER E WITH MACRON AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x014c, 0, 0, 0}, 0x1e52 }, // U1E52 # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x014d, 0, 0, 0}, 0x1e53 }, // U1E53 # LATIN SMALL LETTER O WITH MACRON AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0168, 0, 0, 0}, 0x1e78 }, // U1E78 # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0169, 0, 0, 0}, 0x1e79 }, // U1E79 # LATIN SMALL LETTER U WITH TILDE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0313, 0x0391, 0, 0}, 0x1f0c }, // U1F0C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0313, 0x0395, 0, 0}, 0x1f1c }, // U1F1C # GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0313, 0x0397, 0, 0}, 0x1f2c }, // U1F2C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0313, 0x0399, 0, 0}, 0x1f3c }, // U1F3C # GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0313, 0x039f, 0, 0}, 0x1f4c }, // U1F4C # GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0313, 0x03a9, 0, 0}, 0x1f6c }, // U1F6C # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0313, 0x03b1, 0, 0}, 0x1f04 }, // U1F04 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0313, 0x03b5, 0, 0}, 0x1f14 }, // U1F14 # GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0313, 0x03b7, 0, 0}, 0x1f24 }, // U1F24 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0313, 0x03b9, 0, 0}, 0x1f34 }, // U1F34 # GREEK SMALL LETTER IOTA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0313, 0x03bf, 0, 0}, 0x1f44 }, // U1F44 # GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0313, 0x03c5, 0, 0}, 0x1f54 }, // U1F54 # GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0313, 0x03c9, 0, 0}, 0x1f64 }, // U1F64 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0314, 0x0391, 0, 0}, 0x1f0d }, // U1F0D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0314, 0x0395, 0, 0}, 0x1f1d }, // U1F1D # GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0314, 0x0397, 0, 0}, 0x1f2d }, // U1F2D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0314, 0x0399, 0, 0}, 0x1f3d }, // U1F3D # GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0314, 0x039f, 0, 0}, 0x1f4d }, // U1F4D # GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0314, 0x03a5, 0, 0}, 0x1f5d }, // U1F5D # GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0314, 0x03a9, 0, 0}, 0x1f6d }, // U1F6D # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0314, 0x03b1, 0, 0}, 0x1f05 }, // U1F05 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0314, 0x03b5, 0, 0}, 0x1f15 }, // U1F15 # GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0314, 0x03b7, 0, 0}, 0x1f25 }, // U1F25 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0314, 0x03b9, 0, 0}, 0x1f35 }, // U1F35 # GREEK SMALL LETTER IOTA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0314, 0x03bf, 0, 0}, 0x1f45 }, // U1F45 # GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0314, 0x03c5, 0, 0}, 0x1f55 }, // U1F55 # GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0314, 0x03c9, 0, 0}, 0x1f65 }, // U1F65 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0391, 0, 0, 0}, 0x0386 }, // U0386 # GREEK CAPITAL LETTER ALPHA WITH TONOS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0395, 0, 0, 0}, 0x0388 }, // U0388 # GREEK CAPITAL LETTER EPSILON WITH TONOS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0397, 0, 0, 0}, 0x0389 }, // U0389 # GREEK CAPITAL LETTER ETA WITH TONOS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0399, 0, 0, 0}, 0x038a }, // U038A # GREEK CAPITAL LETTER IOTA WITH TONOS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x039f, 0, 0, 0}, 0x038c }, // U038C # GREEK CAPITAL LETTER OMICRON WITH TONOS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x03a5, 0, 0, 0}, 0x038e }, // U038E # GREEK CAPITAL LETTER UPSILON WITH TONOS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x03a9, 0, 0, 0}, 0x038f }, // U038F # GREEK CAPITAL LETTER OMEGA WITH TONOS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x03b1, 0, 0, 0}, 0x03ac }, // U03AC # GREEK SMALL LETTER ALPHA WITH TONOS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x03b5, 0, 0, 0}, 0x03ad }, // U03AD # GREEK SMALL LETTER EPSILON WITH TONOS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x03b7, 0, 0, 0}, 0x03ae }, // U03AE # GREEK SMALL LETTER ETA WITH TONOS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x03b9, 0, 0, 0}, 0x03af }, // U03AF # GREEK SMALL LETTER IOTA WITH TONOS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x03bf, 0, 0, 0}, 0x03cc }, // U03CC # GREEK SMALL LETTER OMICRON WITH TONOS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x03c5, 0, 0, 0}, 0x03cd }, // U03CD # GREEK SMALL LETTER UPSILON WITH TONOS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x03c9, 0, 0, 0}, 0x03ce }, // U03CE # GREEK SMALL LETTER OMEGA WITH TONOS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x03ca, 0, 0, 0}, 0x0390 }, // U0390 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x03cb, 0, 0, 0}, 0x03b0 }, // U03B0 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x03d2, 0, 0, 0}, 0x03d3 }, // U03D3 # GREEK UPSILON WITH ACUTE AND HOOK SYMBOL ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0413, 0, 0, 0}, 0x0403 }, // U0403 # CYRILLIC CAPITAL LETTER GJE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x041a, 0, 0, 0}, 0x040c }, // U040C # CYRILLIC CAPITAL LETTER KJE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0433, 0, 0, 0}, 0x0453 }, // U0453 # CYRILLIC SMALL LETTER GJE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x043a, 0, 0, 0}, 0x045c }, // U045C # CYRILLIC SMALL LETTER KJE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f00, 0, 0, 0}, 0x1f04 }, // U1F04 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f01, 0, 0, 0}, 0x1f05 }, // U1F05 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f08, 0, 0, 0}, 0x1f0c }, // U1F0C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f09, 0, 0, 0}, 0x1f0d }, // U1F0D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f10, 0, 0, 0}, 0x1f14 }, // U1F14 # GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f11, 0, 0, 0}, 0x1f15 }, // U1F15 # GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f18, 0, 0, 0}, 0x1f1c }, // U1F1C # GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f19, 0, 0, 0}, 0x1f1d }, // U1F1D # GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f20, 0, 0, 0}, 0x1f24 }, // U1F24 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f21, 0, 0, 0}, 0x1f25 }, // U1F25 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f28, 0, 0, 0}, 0x1f2c }, // U1F2C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f29, 0, 0, 0}, 0x1f2d }, // U1F2D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f30, 0, 0, 0}, 0x1f34 }, // U1F34 # GREEK SMALL LETTER IOTA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f31, 0, 0, 0}, 0x1f35 }, // U1F35 # GREEK SMALL LETTER IOTA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f38, 0, 0, 0}, 0x1f3c }, // U1F3C # GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f39, 0, 0, 0}, 0x1f3d }, // U1F3D # GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f40, 0, 0, 0}, 0x1f44 }, // U1F44 # GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f41, 0, 0, 0}, 0x1f45 }, // U1F45 # GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f48, 0, 0, 0}, 0x1f4c }, // U1F4C # GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f49, 0, 0, 0}, 0x1f4d }, // U1F4D # GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f50, 0, 0, 0}, 0x1f54 }, // U1F54 # GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f51, 0, 0, 0}, 0x1f55 }, // U1F55 # GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f59, 0, 0, 0}, 0x1f5d }, // U1F5D # GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f60, 0, 0, 0}, 0x1f64 }, // U1F64 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f61, 0, 0, 0}, 0x1f65 }, // U1F65 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f68, 0, 0, 0}, 0x1f6c }, // U1F6C # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f69, 0, 0, 0}, 0x1f6d }, // U1F6D # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Circumflex), 0x0041, 0, 0}, 0x1ea4 }, // U1EA4 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Circumflex), 0x0045, 0, 0}, 0x1ebe }, // U1EBE # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Circumflex), 0x004f, 0, 0}, 0x1ed0 }, // U1ED0 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Circumflex), 0x0061, 0, 0}, 0x1ea5 }, // U1EA5 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Circumflex), 0x0065, 0, 0}, 0x1ebf }, // U1EBF # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Circumflex), 0x006f, 0, 0}, 0x1ed1 }, // U1ED1 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Tilde), 0x004f, 0, 0}, 0x1e4c }, // U1E4C # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Tilde), 0x0055, 0, 0}, 0x1e78 }, // U1E78 # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Tilde), 0x006f, 0, 0}, 0x1e4d }, // U1E4D # LATIN SMALL LETTER O WITH TILDE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Tilde), 0x0075, 0, 0}, 0x1e79 }, // U1E79 # LATIN SMALL LETTER U WITH TILDE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Macron), 0x0045, 0, 0}, 0x1e16 }, // U1E16 # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Macron), 0x004f, 0, 0}, 0x1e52 }, // U1E52 # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Macron), 0x0065, 0, 0}, 0x1e17 }, // U1E17 # LATIN SMALL LETTER E WITH MACRON AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Macron), 0x006f, 0, 0}, 0x1e53 }, // U1E53 # LATIN SMALL LETTER O WITH MACRON AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Breve), 0x0041, 0, 0}, 0x1eae }, // U1EAE # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Breve), 0x0061, 0, 0}, 0x1eaf }, // U1EAF # LATIN SMALL LETTER A WITH BREVE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Diaeresis), 0x0049, 0, 0}, 0x1e2e }, // U1E2E # LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Diaeresis), 0x0055, 0, 0}, 0x01d7 }, // U01D7 # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Diaeresis), 0x0069, 0, 0}, 0x1e2f }, // U1E2F # LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Diaeresis), 0x0075, 0, 0}, 0x01d8 }, // U01D8 # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Diaeresis), 0x03b9, 0, 0}, 0x0390 }, // U0390 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Diaeresis), 0x03c5, 0, 0}, 0x03b0 }, // U03B0 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Abovering), 0x0041, 0, 0}, 0x01fa }, // U01FA # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Abovering), 0x0061, 0, 0}, 0x01fb }, // U01FB # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Cedilla), 0x0043, 0, 0}, 0x1e08 }, // U1E08 # LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Cedilla), 0x0063, 0, 0}, 0x1e09 }, // U1E09 # LATIN SMALL LETTER C WITH CEDILLA AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Horn), 0x004f, 0, 0}, 0x1eda }, // U1EDA # LATIN CAPITAL LETTER O WITH HORN AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Horn), 0x0055, 0, 0}, 0x1ee8 }, // U1EE8 # LATIN CAPITAL LETTER U WITH HORN AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Horn), 0x006f, 0, 0}, 0x1edb }, // U1EDB # LATIN SMALL LETTER O WITH HORN AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Horn), 0x0075, 0, 0}, 0x1ee9 }, // U1EE9 # LATIN SMALL LETTER U WITH HORN AND ACUTE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x246b }, // U246B # CIRCLED NUMBER TWELVE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x32b7 }, // U32B7 # CIRCLED NUMBER FORTY TWO ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x3253 }, // U3253 # CIRCLED NUMBER TWENTY THREE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x3252 }, // U3252 # CIRCLED NUMBER TWENTY TWO ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x3253 }, // U3253 # CIRCLED NUMBER TWENTY THREE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x2473 }, // U2473 # CIRCLED NUMBER TWENTY ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x32b2 }, // U32B2 # CIRCLED NUMBER THIRTY SEVEN ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x32b7 }, // U32B7 # CIRCLED NUMBER FORTY TWO ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x3252 }, // U3252 # CIRCLED NUMBER TWENTY TWO ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x246d }, // U246D # CIRCLED NUMBER FOURTEEN ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x32be }, // U32BE # CIRCLED NUMBER FORTY NINE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x3254 }, // U3254 # CIRCLED NUMBER TWENTY FOUR ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x2470 }, // U2470 # CIRCLED NUMBER SEVENTEEN ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x3252 }, // U3252 # CIRCLED NUMBER TWENTY TWO ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x32bc }, // U32BC # CIRCLED NUMBER FORTY SEVEN ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x3254 }, // U3254 # CIRCLED NUMBER TWENTY FOUR ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x246f }, // U246F # CIRCLED NUMBER SIXTEEN ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x3252 }, // U3252 # CIRCLED NUMBER TWENTY TWO ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x32bb }, // U32BB # CIRCLED NUMBER FORTY SIX ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x32b3 }, // U32B3 # CIRCLED NUMBER THIRTY EIGHT ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x32b6 }, // U32B6 # CIRCLED NUMBER FORTY ONE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x2469 }, // U2469 # CIRCLED NUMBER TEN ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x3255 }, // U3255 # CIRCLED NUMBER TWENTY FIVE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x3251 }, // U3251 # CIRCLED NUMBER TWENTY ONE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x3257 }, // U3257 # CIRCLED NUMBER TWENTY SEVEN ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x3255 }, // U3255 # CIRCLED NUMBER TWENTY FIVE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x325f }, // U325F # CIRCLED NUMBER THIRTY FIVE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x325e }, // U325E # CIRCLED NUMBER THIRTY FOUR ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x3251 }, // U3251 # CIRCLED NUMBER TWENTY ONE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x32b8 }, // U32B8 # CIRCLED NUMBER FORTY THREE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x32b1 }, // U32B1 # CIRCLED NUMBER THIRTY SIX ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x325d }, // U325D # CIRCLED NUMBER THIRTY THREE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x2471 }, // U2471 # CIRCLED NUMBER EIGHTEEN ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x325c }, // U325C # CIRCLED NUMBER THIRTY TWO ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x3256 }, // U3256 # CIRCLED NUMBER TWENTY SIX ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x325c }, // U325C # CIRCLED NUMBER THIRTY TWO ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x3256 }, // U3256 # CIRCLED NUMBER TWENTY SIX ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x325b }, // U325B # CIRCLED NUMBER THIRTY ONE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x2473 }, // U2473 # CIRCLED NUMBER TWENTY ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x2472 }, // U2472 # CIRCLED NUMBER NINETEEN ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x246c }, // U246C # CIRCLED NUMBER THIRTEEN ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x32b9 }, // U32B9 # CIRCLED NUMBER FORTY FOUR ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x32ba }, // U32BA # CIRCLED NUMBER FORTY FIVE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x325a }, // U325A # CIRCLED NUMBER THIRTY ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x32b5 }, // U32B5 # CIRCLED NUMBER FORTY ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x3257 }, // U3257 # CIRCLED NUMBER TWENTY SEVEN ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x3259 }, // U3259 # CIRCLED NUMBER TWENTY NINE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x3259 }, // U3259 # CIRCLED NUMBER TWENTY NINE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x32b4 }, // U32B4 # CIRCLED NUMBER THIRTY NINE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x3258 }, // U3258 # CIRCLED NUMBER TWENTY EIGHT ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x3258 }, // U3258 # CIRCLED NUMBER TWENTY EIGHT ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x246b }, // U246B # CIRCLED NUMBER TWELVE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x246a }, // U246A # CIRCLED NUMBER ELEVEN ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x246e }, // U246E # CIRCLED NUMBER FIFTEEN ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x32bd }, // U32BD # CIRCLED NUMBER FORTY EIGHT ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x32bf }, // U32BF # CIRCLED NUMBER FIFTY ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0029, 0, 0}, 0x2461 }, // U2461 # CIRCLED DIGIT TWO ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0029, 0, 0}, 0x2461 }, // U2461 # CIRCLED DIGIT TWO ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0029, 0, 0}, 0x2462 }, // U2462 # CIRCLED DIGIT THREE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0029, 0, 0}, 0x2468 }, // U2468 # CIRCLED DIGIT NINE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0029, 0, 0}, 0x2463 }, // U2463 # CIRCLED DIGIT FOUR ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0029, 0, 0}, 0x2460 }, // U2460 # CIRCLED DIGIT ONE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0029, 0, 0}, 0x2467 }, // U2467 # CIRCLED DIGIT EIGHT ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0029, 0, 0}, 0x24ea }, // U24EA # CIRCLED DIGIT ZERO ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0029, 0, 0}, 0x2466 }, // U2466 # CIRCLED DIGIT SEVEN ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0029, 0, 0}, 0x2465 }, // U2465 # CIRCLED DIGIT SIX ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0029, 0, 0}, 0x2464 }, // U2464 # CIRCLED DIGIT FIVE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0030, 0x0029, 0}, 0x32b5 }, // U32B5 # CIRCLED NUMBER FORTY ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0030, 0x0029, 0}, 0x2473 }, // U2473 # CIRCLED NUMBER TWENTY ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0030, 0x0029, 0}, 0x2469 }, // U2469 # CIRCLED NUMBER TEN ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0030, 0x0029, 0}, 0x32bf }, // U32BF # CIRCLED NUMBER FIFTY ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0030, 0x0029, 0}, 0x325a }, // U325A # CIRCLED NUMBER THIRTY ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0030, 0x0029, 0}, 0x2473 }, // U2473 # CIRCLED NUMBER TWENTY ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0031, 0x0029, 0}, 0x32b6 }, // U32B6 # CIRCLED NUMBER FORTY ONE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0031, 0x0029, 0}, 0x246a }, // U246A # CIRCLED NUMBER ELEVEN ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0031, 0x0029, 0}, 0x3251 }, // U3251 # CIRCLED NUMBER TWENTY ONE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0031, 0x0029, 0}, 0x325b }, // U325B # CIRCLED NUMBER THIRTY ONE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0031, 0x0029, 0}, 0x3251 }, // U3251 # CIRCLED NUMBER TWENTY ONE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0032, 0x0029, 0}, 0x3252 }, // U3252 # CIRCLED NUMBER TWENTY TWO ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0032, 0x0029, 0}, 0x32b7 }, // U32B7 # CIRCLED NUMBER FORTY TWO ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0032, 0x0029, 0}, 0x246b }, // U246B # CIRCLED NUMBER TWELVE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0032, 0x0029, 0}, 0x325c }, // U325C # CIRCLED NUMBER THIRTY TWO ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0032, 0x0029, 0}, 0x3252 }, // U3252 # CIRCLED NUMBER TWENTY TWO ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0033, 0x0029, 0}, 0x246c }, // U246C # CIRCLED NUMBER THIRTEEN ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0033, 0x0029, 0}, 0x3253 }, // U3253 # CIRCLED NUMBER TWENTY THREE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0033, 0x0029, 0}, 0x325d }, // U325D # CIRCLED NUMBER THIRTY THREE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0033, 0x0029, 0}, 0x32b8 }, // U32B8 # CIRCLED NUMBER FORTY THREE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0033, 0x0029, 0}, 0x3253 }, // U3253 # CIRCLED NUMBER TWENTY THREE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0034, 0x0029, 0}, 0x246d }, // U246D # CIRCLED NUMBER FOURTEEN ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0034, 0x0029, 0}, 0x3254 }, // U3254 # CIRCLED NUMBER TWENTY FOUR ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0034, 0x0029, 0}, 0x32b9 }, // U32B9 # CIRCLED NUMBER FORTY FOUR ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0034, 0x0029, 0}, 0x3254 }, // U3254 # CIRCLED NUMBER TWENTY FOUR ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0034, 0x0029, 0}, 0x325e }, // U325E # CIRCLED NUMBER THIRTY FOUR ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0035, 0x0029, 0}, 0x3255 }, // U3255 # CIRCLED NUMBER TWENTY FIVE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0035, 0x0029, 0}, 0x325f }, // U325F # CIRCLED NUMBER THIRTY FIVE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0035, 0x0029, 0}, 0x32ba }, // U32BA # CIRCLED NUMBER FORTY FIVE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0035, 0x0029, 0}, 0x3255 }, // U3255 # CIRCLED NUMBER TWENTY FIVE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0035, 0x0029, 0}, 0x246e }, // U246E # CIRCLED NUMBER FIFTEEN ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0036, 0x0029, 0}, 0x3256 }, // U3256 # CIRCLED NUMBER TWENTY SIX ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0036, 0x0029, 0}, 0x32bb }, // U32BB # CIRCLED NUMBER FORTY SIX ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0036, 0x0029, 0}, 0x32b1 }, // U32B1 # CIRCLED NUMBER THIRTY SIX ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0036, 0x0029, 0}, 0x246f }, // U246F # CIRCLED NUMBER SIXTEEN ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0036, 0x0029, 0}, 0x3256 }, // U3256 # CIRCLED NUMBER TWENTY SIX ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0037, 0x0029, 0}, 0x32bc }, // U32BC # CIRCLED NUMBER FORTY SEVEN ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0037, 0x0029, 0}, 0x3257 }, // U3257 # CIRCLED NUMBER TWENTY SEVEN ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0037, 0x0029, 0}, 0x32b2 }, // U32B2 # CIRCLED NUMBER THIRTY SEVEN ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0037, 0x0029, 0}, 0x2470 }, // U2470 # CIRCLED NUMBER SEVENTEEN ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0037, 0x0029, 0}, 0x3257 }, // U3257 # CIRCLED NUMBER TWENTY SEVEN ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0038, 0x0029, 0}, 0x2471 }, // U2471 # CIRCLED NUMBER EIGHTEEN ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0038, 0x0029, 0}, 0x32b3 }, // U32B3 # CIRCLED NUMBER THIRTY EIGHT ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0038, 0x0029, 0}, 0x32bd }, // U32BD # CIRCLED NUMBER FORTY EIGHT ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0038, 0x0029, 0}, 0x3258 }, // U3258 # CIRCLED NUMBER TWENTY EIGHT ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0038, 0x0029, 0}, 0x3258 }, // U3258 # CIRCLED NUMBER TWENTY EIGHT ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0039, 0x0029, 0}, 0x32b4 }, // U32B4 # CIRCLED NUMBER THIRTY NINE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0039, 0x0029, 0}, 0x3259 }, // U3259 # CIRCLED NUMBER TWENTY NINE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0039, 0x0029, 0}, 0x32be }, // U32BE # CIRCLED NUMBER FORTY NINE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0039, 0x0029, 0}, 0x3259 }, // U3259 # CIRCLED NUMBER TWENTY NINE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0039, 0x0029, 0}, 0x2472 }, // U2472 # CIRCLED NUMBER NINETEEN ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0028, 0, 0, 0}, 0x005b }, // bracketleft ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x002d, 0, 0, 0}, 0x007b }, // braceleft ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0030, 0x0029, 0, 0}, 0x24ea }, // U24EA # CIRCLED DIGIT ZERO ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0031, 0x0000, 0x0029, 0}, 0x2472 }, // U2472 # CIRCLED NUMBER NINETEEN ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0031, 0x0000, 0x0029, 0}, 0x246e }, // U246E # CIRCLED NUMBER FIFTEEN ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0031, 0x0000, 0x0029, 0}, 0x2469 }, // U2469 # CIRCLED NUMBER TEN ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0031, 0x0000, 0x0029, 0}, 0x246c }, // U246C # CIRCLED NUMBER THIRTEEN ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0031, 0x0000, 0x0029, 0}, 0x246b }, // U246B # CIRCLED NUMBER TWELVE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0031, 0x0000, 0x0029, 0}, 0x2470 }, // U2470 # CIRCLED NUMBER SEVENTEEN ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0031, 0x0000, 0x0029, 0}, 0x246a }, // U246A # CIRCLED NUMBER ELEVEN ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0031, 0x0000, 0x0029, 0}, 0x246d }, // U246D # CIRCLED NUMBER FOURTEEN ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0031, 0x0000, 0x0029, 0}, 0x2471 }, // U2471 # CIRCLED NUMBER EIGHTEEN ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0031, 0x0000, 0x0029, 0}, 0x246f }, // U246F # CIRCLED NUMBER SIXTEEN ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0031, 0x0000, 0x0029, 0}, 0x246b }, // U246B # CIRCLED NUMBER TWELVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0031, 0x0029, 0, 0}, 0x2460 }, // U2460 # CIRCLED DIGIT ONE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0031, 0x0030, 0x0029, 0}, 0x2469 }, // U2469 # CIRCLED NUMBER TEN ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0031, 0x0031, 0x0029, 0}, 0x246a }, // U246A # CIRCLED NUMBER ELEVEN ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0031, 0x0032, 0x0029, 0}, 0x246b }, // U246B # CIRCLED NUMBER TWELVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0031, 0x0033, 0x0029, 0}, 0x246c }, // U246C # CIRCLED NUMBER THIRTEEN ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0031, 0x0034, 0x0029, 0}, 0x246d }, // U246D # CIRCLED NUMBER FOURTEEN ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0031, 0x0035, 0x0029, 0}, 0x246e }, // U246E # CIRCLED NUMBER FIFTEEN ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0031, 0x0036, 0x0029, 0}, 0x246f }, // U246F # CIRCLED NUMBER SIXTEEN ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0031, 0x0037, 0x0029, 0}, 0x2470 }, // U2470 # CIRCLED NUMBER SEVENTEEN ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0031, 0x0038, 0x0029, 0}, 0x2471 }, // U2471 # CIRCLED NUMBER EIGHTEEN ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0031, 0x0039, 0x0029, 0}, 0x2472 }, // U2472 # CIRCLED NUMBER NINETEEN ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0032, 0x0000, 0x0029, 0}, 0x2473 }, // U2473 # CIRCLED NUMBER TWENTY ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0032, 0x0000, 0x0029, 0}, 0x3257 }, // U3257 # CIRCLED NUMBER TWENTY SEVEN ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0032, 0x0000, 0x0029, 0}, 0x3259 }, // U3259 # CIRCLED NUMBER TWENTY NINE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0032, 0x0000, 0x0029, 0}, 0x3258 }, // U3258 # CIRCLED NUMBER TWENTY EIGHT ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0032, 0x0000, 0x0029, 0}, 0x3253 }, // U3253 # CIRCLED NUMBER TWENTY THREE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0032, 0x0000, 0x0029, 0}, 0x3255 }, // U3255 # CIRCLED NUMBER TWENTY FIVE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0032, 0x0000, 0x0029, 0}, 0x3252 }, // U3252 # CIRCLED NUMBER TWENTY TWO ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0032, 0x0000, 0x0029, 0}, 0x3256 }, // U3256 # CIRCLED NUMBER TWENTY SIX ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0032, 0x0000, 0x0029, 0}, 0x3251 }, // U3251 # CIRCLED NUMBER TWENTY ONE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0032, 0x0000, 0x0029, 0}, 0x3252 }, // U3252 # CIRCLED NUMBER TWENTY TWO ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0032, 0x0000, 0x0029, 0}, 0x3254 }, // U3254 # CIRCLED NUMBER TWENTY FOUR ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0032, 0x0029, 0, 0}, 0x2461 }, // U2461 # CIRCLED DIGIT TWO ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0032, 0x0030, 0x0029, 0}, 0x2473 }, // U2473 # CIRCLED NUMBER TWENTY ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0032, 0x0031, 0x0029, 0}, 0x3251 }, // U3251 # CIRCLED NUMBER TWENTY ONE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0032, 0x0032, 0x0029, 0}, 0x3252 }, // U3252 # CIRCLED NUMBER TWENTY TWO ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0032, 0x0033, 0x0029, 0}, 0x3253 }, // U3253 # CIRCLED NUMBER TWENTY THREE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0032, 0x0034, 0x0029, 0}, 0x3254 }, // U3254 # CIRCLED NUMBER TWENTY FOUR ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0032, 0x0035, 0x0029, 0}, 0x3255 }, // U3255 # CIRCLED NUMBER TWENTY FIVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0032, 0x0036, 0x0029, 0}, 0x3256 }, // U3256 # CIRCLED NUMBER TWENTY SIX ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0032, 0x0037, 0x0029, 0}, 0x3257 }, // U3257 # CIRCLED NUMBER TWENTY SEVEN ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0032, 0x0038, 0x0029, 0}, 0x3258 }, // U3258 # CIRCLED NUMBER TWENTY EIGHT ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0032, 0x0039, 0x0029, 0}, 0x3259 }, // U3259 # CIRCLED NUMBER TWENTY NINE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0033, 0x0000, 0x0029, 0}, 0x32b4 }, // U32B4 # CIRCLED NUMBER THIRTY NINE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0033, 0x0000, 0x0029, 0}, 0x325a }, // U325A # CIRCLED NUMBER THIRTY ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0033, 0x0000, 0x0029, 0}, 0x325b }, // U325B # CIRCLED NUMBER THIRTY ONE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0033, 0x0000, 0x0029, 0}, 0x32b3 }, // U32B3 # CIRCLED NUMBER THIRTY EIGHT ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0033, 0x0000, 0x0029, 0}, 0x32b2 }, // U32B2 # CIRCLED NUMBER THIRTY SEVEN ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0033, 0x0000, 0x0029, 0}, 0x325c }, // U325C # CIRCLED NUMBER THIRTY TWO ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0033, 0x0000, 0x0029, 0}, 0x325c }, // U325C # CIRCLED NUMBER THIRTY TWO ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0033, 0x0000, 0x0029, 0}, 0x325f }, // U325F # CIRCLED NUMBER THIRTY FIVE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0033, 0x0000, 0x0029, 0}, 0x325e }, // U325E # CIRCLED NUMBER THIRTY FOUR ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0033, 0x0000, 0x0029, 0}, 0x32b1 }, // U32B1 # CIRCLED NUMBER THIRTY SIX ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0033, 0x0000, 0x0029, 0}, 0x325d }, // U325D # CIRCLED NUMBER THIRTY THREE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0033, 0x0029, 0, 0}, 0x2462 }, // U2462 # CIRCLED DIGIT THREE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0033, 0x0030, 0x0029, 0}, 0x325a }, // U325A # CIRCLED NUMBER THIRTY ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0033, 0x0031, 0x0029, 0}, 0x325b }, // U325B # CIRCLED NUMBER THIRTY ONE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0033, 0x0032, 0x0029, 0}, 0x325c }, // U325C # CIRCLED NUMBER THIRTY TWO ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0033, 0x0033, 0x0029, 0}, 0x325d }, // U325D # CIRCLED NUMBER THIRTY THREE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0033, 0x0034, 0x0029, 0}, 0x325e }, // U325E # CIRCLED NUMBER THIRTY FOUR ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0033, 0x0035, 0x0029, 0}, 0x325f }, // U325F # CIRCLED NUMBER THIRTY FIVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0033, 0x0036, 0x0029, 0}, 0x32b1 }, // U32B1 # CIRCLED NUMBER THIRTY SIX ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0033, 0x0037, 0x0029, 0}, 0x32b2 }, // U32B2 # CIRCLED NUMBER THIRTY SEVEN ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0033, 0x0038, 0x0029, 0}, 0x32b3 }, // U32B3 # CIRCLED NUMBER THIRTY EIGHT ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0033, 0x0039, 0x0029, 0}, 0x32b4 }, // U32B4 # CIRCLED NUMBER THIRTY NINE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0034, 0x0000, 0x0029, 0}, 0x32b7 }, // U32B7 # CIRCLED NUMBER FORTY TWO ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0034, 0x0000, 0x0029, 0}, 0x32b5 }, // U32B5 # CIRCLED NUMBER FORTY ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0034, 0x0000, 0x0029, 0}, 0x32b6 }, // U32B6 # CIRCLED NUMBER FORTY ONE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0034, 0x0000, 0x0029, 0}, 0x32bc }, // U32BC # CIRCLED NUMBER FORTY SEVEN ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0034, 0x0000, 0x0029, 0}, 0x32b7 }, // U32B7 # CIRCLED NUMBER FORTY TWO ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0034, 0x0000, 0x0029, 0}, 0x32b9 }, // U32B9 # CIRCLED NUMBER FORTY FOUR ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0034, 0x0000, 0x0029, 0}, 0x32b8 }, // U32B8 # CIRCLED NUMBER FORTY THREE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0034, 0x0000, 0x0029, 0}, 0x32bb }, // U32BB # CIRCLED NUMBER FORTY SIX ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0034, 0x0000, 0x0029, 0}, 0x32be }, // U32BE # CIRCLED NUMBER FORTY NINE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0034, 0x0000, 0x0029, 0}, 0x32ba }, // U32BA # CIRCLED NUMBER FORTY FIVE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0034, 0x0000, 0x0029, 0}, 0x32bd }, // U32BD # CIRCLED NUMBER FORTY EIGHT ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0034, 0x0029, 0, 0}, 0x2463 }, // U2463 # CIRCLED DIGIT FOUR ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0034, 0x0030, 0x0029, 0}, 0x32b5 }, // U32B5 # CIRCLED NUMBER FORTY ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0034, 0x0031, 0x0029, 0}, 0x32b6 }, // U32B6 # CIRCLED NUMBER FORTY ONE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0034, 0x0032, 0x0029, 0}, 0x32b7 }, // U32B7 # CIRCLED NUMBER FORTY TWO ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0034, 0x0033, 0x0029, 0}, 0x32b8 }, // U32B8 # CIRCLED NUMBER FORTY THREE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0034, 0x0034, 0x0029, 0}, 0x32b9 }, // U32B9 # CIRCLED NUMBER FORTY FOUR ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0034, 0x0035, 0x0029, 0}, 0x32ba }, // U32BA # CIRCLED NUMBER FORTY FIVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0034, 0x0036, 0x0029, 0}, 0x32bb }, // U32BB # CIRCLED NUMBER FORTY SIX ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0034, 0x0037, 0x0029, 0}, 0x32bc }, // U32BC # CIRCLED NUMBER FORTY SEVEN ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0034, 0x0038, 0x0029, 0}, 0x32bd }, // U32BD # CIRCLED NUMBER FORTY EIGHT ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0034, 0x0039, 0x0029, 0}, 0x32be }, // U32BE # CIRCLED NUMBER FORTY NINE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0035, 0x0000, 0x0029, 0}, 0x32bf }, // U32BF # CIRCLED NUMBER FIFTY ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0035, 0x0029, 0, 0}, 0x2464 }, // U2464 # CIRCLED DIGIT FIVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0035, 0x0030, 0x0029, 0}, 0x32bf }, // U32BF # CIRCLED NUMBER FIFTY ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0036, 0x0029, 0, 0}, 0x2465 }, // U2465 # CIRCLED DIGIT SIX ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0037, 0x0029, 0, 0}, 0x2466 }, // U2466 # CIRCLED DIGIT SEVEN ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0038, 0x0029, 0, 0}, 0x2467 }, // U2467 # CIRCLED DIGIT EIGHT ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0039, 0x0029, 0, 0}, 0x2468 }, // U2468 # CIRCLED DIGIT NINE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0041, 0x0029, 0, 0}, 0x24b6 }, // U24B6 # CIRCLED LATIN CAPITAL LETTER A ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0042, 0x0029, 0, 0}, 0x24b7 }, // U24B7 # CIRCLED LATIN CAPITAL LETTER B ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0043, 0x0029, 0, 0}, 0x24b8 }, // U24B8 # CIRCLED LATIN CAPITAL LETTER C ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0044, 0x0029, 0, 0}, 0x24b9 }, // U24B9 # CIRCLED LATIN CAPITAL LETTER D ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0045, 0x0029, 0, 0}, 0x24ba }, // U24BA # CIRCLED LATIN CAPITAL LETTER E ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0046, 0x0029, 0, 0}, 0x24bb }, // U24BB # CIRCLED LATIN CAPITAL LETTER F ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0047, 0x0029, 0, 0}, 0x24bc }, // U24BC # CIRCLED LATIN CAPITAL LETTER G ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0048, 0x0029, 0, 0}, 0x24bd }, // U24BD # CIRCLED LATIN CAPITAL LETTER H ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0049, 0x0029, 0, 0}, 0x24be }, // U24BE # CIRCLED LATIN CAPITAL LETTER I ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x004a, 0x0029, 0, 0}, 0x24bf }, // U24BF # CIRCLED LATIN CAPITAL LETTER J ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x004b, 0x0029, 0, 0}, 0x24c0 }, // U24C0 # CIRCLED LATIN CAPITAL LETTER K ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x004c, 0x0029, 0, 0}, 0x24c1 }, // U24C1 # CIRCLED LATIN CAPITAL LETTER L ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x004d, 0x0029, 0, 0}, 0x24c2 }, // U24C2 # CIRCLED LATIN CAPITAL LETTER M ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x004e, 0x0029, 0, 0}, 0x24c3 }, // U24C3 # CIRCLED LATIN CAPITAL LETTER N ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x004f, 0x0029, 0, 0}, 0x24c4 }, // U24C4 # CIRCLED LATIN CAPITAL LETTER O ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0050, 0x0029, 0, 0}, 0x24c5 }, // U24C5 # CIRCLED LATIN CAPITAL LETTER P ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0051, 0x0029, 0, 0}, 0x24c6 }, // U24C6 # CIRCLED LATIN CAPITAL LETTER Q ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0052, 0x0029, 0, 0}, 0x24c7 }, // U24C7 # CIRCLED LATIN CAPITAL LETTER R ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0053, 0x0029, 0, 0}, 0x24c8 }, // U24C8 # CIRCLED LATIN CAPITAL LETTER S ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0054, 0x0029, 0, 0}, 0x24c9 }, // U24C9 # CIRCLED LATIN CAPITAL LETTER T ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0055, 0x0029, 0, 0}, 0x24ca }, // U24CA # CIRCLED LATIN CAPITAL LETTER U ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0056, 0x0029, 0, 0}, 0x24cb }, // U24CB # CIRCLED LATIN CAPITAL LETTER V ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0057, 0x0029, 0, 0}, 0x24cc }, // U24CC # CIRCLED LATIN CAPITAL LETTER W ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0058, 0x0029, 0, 0}, 0x24cd }, // U24CD # CIRCLED LATIN CAPITAL LETTER X ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0059, 0x0029, 0, 0}, 0x24ce }, // U24CE # CIRCLED LATIN CAPITAL LETTER Y ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x005a, 0x0029, 0, 0}, 0x24cf }, // U24CF # CIRCLED LATIN CAPITAL LETTER Z ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0061, 0x0029, 0, 0}, 0x24d0 }, // U24D0 # CIRCLED LATIN SMALL LETTER A ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0062, 0x0029, 0, 0}, 0x24d1 }, // U24D1 # CIRCLED LATIN SMALL LETTER B ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0063, 0x0029, 0, 0}, 0x24d2 }, // U24D2 # CIRCLED LATIN SMALL LETTER C ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0064, 0x0029, 0, 0}, 0x24d3 }, // U24D3 # CIRCLED LATIN SMALL LETTER D ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0065, 0x0029, 0, 0}, 0x24d4 }, // U24D4 # CIRCLED LATIN SMALL LETTER E ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0066, 0x0029, 0, 0}, 0x24d5 }, // U24D5 # CIRCLED LATIN SMALL LETTER F ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0067, 0x0029, 0, 0}, 0x24d6 }, // U24D6 # CIRCLED LATIN SMALL LETTER G ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0068, 0x0029, 0, 0}, 0x24d7 }, // U24D7 # CIRCLED LATIN SMALL LETTER H ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0069, 0x0029, 0, 0}, 0x24d8 }, // U24D8 # CIRCLED LATIN SMALL LETTER I ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x006a, 0x0029, 0, 0}, 0x24d9 }, // U24D9 # CIRCLED LATIN SMALL LETTER J ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x006b, 0x0029, 0, 0}, 0x24da }, // U24DA # CIRCLED LATIN SMALL LETTER K ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x006c, 0x0029, 0, 0}, 0x24db }, // U24DB # CIRCLED LATIN SMALL LETTER L ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x006d, 0x0029, 0, 0}, 0x24dc }, // U24DC # CIRCLED LATIN SMALL LETTER M ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x006e, 0x0029, 0, 0}, 0x24dd }, // U24DD # CIRCLED LATIN SMALL LETTER N ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x006f, 0x0029, 0, 0}, 0x24de }, // U24DE # CIRCLED LATIN SMALL LETTER O ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0070, 0x0029, 0, 0}, 0x24df }, // U24DF # CIRCLED LATIN SMALL LETTER P ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0071, 0x0029, 0, 0}, 0x24e0 }, // U24E0 # CIRCLED LATIN SMALL LETTER Q ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0072, 0x0029, 0, 0}, 0x24e1 }, // U24E1 # CIRCLED LATIN SMALL LETTER R ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0073, 0x0029, 0, 0}, 0x24e2 }, // U24E2 # CIRCLED LATIN SMALL LETTER S ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0074, 0x0029, 0, 0}, 0x24e3 }, // U24E3 # CIRCLED LATIN SMALL LETTER T ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0075, 0x0029, 0, 0}, 0x24e4 }, // U24E4 # CIRCLED LATIN SMALL LETTER U ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0076, 0x0029, 0, 0}, 0x24e5 }, // U24E5 # CIRCLED LATIN SMALL LETTER V ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0077, 0x0029, 0, 0}, 0x24e6 }, // U24E6 # CIRCLED LATIN SMALL LETTER W ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0078, 0x0029, 0, 0}, 0x24e7 }, // U24E7 # CIRCLED LATIN SMALL LETTER X ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0079, 0x0029, 0, 0}, 0x24e8 }, // U24E8 # CIRCLED LATIN SMALL LETTER Y ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x007a, 0x0029, 0, 0}, 0x24e9 }, // U24E9 # CIRCLED LATIN SMALL LETTER Z ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0391, 0, 0, 0}, 0x1f09 }, // U1F09 # GREEK CAPITAL LETTER ALPHA WITH DASIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0395, 0, 0, 0}, 0x1f19 }, // U1F19 # GREEK CAPITAL LETTER EPSILON WITH DASIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0397, 0, 0, 0}, 0x1f29 }, // U1F29 # GREEK CAPITAL LETTER ETA WITH DASIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0399, 0, 0, 0}, 0x1f39 }, // U1F39 # GREEK CAPITAL LETTER IOTA WITH DASIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x039f, 0, 0, 0}, 0x1f49 }, // U1F49 # GREEK CAPITAL LETTER OMICRON WITH DASIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03a1, 0, 0, 0}, 0x1fec }, // U1FEC # GREEK CAPITAL LETTER RHO WITH DASIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03a5, 0, 0, 0}, 0x1f59 }, // U1F59 # GREEK CAPITAL LETTER UPSILON WITH DASIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03a9, 0, 0, 0}, 0x1f69 }, // U1F69 # GREEK CAPITAL LETTER OMEGA WITH DASIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b1, 0, 0, 0}, 0x1f01 }, // U1F01 # GREEK SMALL LETTER ALPHA WITH DASIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b5, 0, 0, 0}, 0x1f11 }, // U1F11 # GREEK SMALL LETTER EPSILON WITH DASIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b7, 0, 0, 0}, 0x1f21 }, // U1F21 # GREEK SMALL LETTER ETA WITH DASIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b9, 0, 0, 0}, 0x1f31 }, // U1F31 # GREEK SMALL LETTER IOTA WITH DASIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03bf, 0, 0, 0}, 0x1f41 }, // U1F41 # GREEK SMALL LETTER OMICRON WITH DASIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03c1, 0, 0, 0}, 0x1fe5 }, // U1FE5 # GREEK SMALL LETTER RHO WITH DASIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03c5, 0, 0, 0}, 0x1f51 }, // U1F51 # GREEK SMALL LETTER UPSILON WITH DASIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03c9, 0, 0, 0}, 0x1f61 }, // U1F61 # GREEK SMALL LETTER OMEGA WITH DASIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x1100, 0x0029, 0, 0}, 0x3260 }, // U3260 # CIRCLED HANGUL KIYEOK ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x1100, 0x1161, 0x0029, 0}, 0x326e }, // U326E # CIRCLED HANGUL KIYEOK A ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x1102, 0x0029, 0, 0}, 0x3261 }, // U3261 # CIRCLED HANGUL NIEUN ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x1102, 0x1161, 0x0029, 0}, 0x326f }, // U326F # CIRCLED HANGUL NIEUN A ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x1103, 0x0029, 0, 0}, 0x3262 }, // U3262 # CIRCLED HANGUL TIKEUT ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x1103, 0x1161, 0x0029, 0}, 0x3270 }, // U3270 # CIRCLED HANGUL TIKEUT A ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x1105, 0x0029, 0, 0}, 0x3263 }, // U3263 # CIRCLED HANGUL RIEUL ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x1105, 0x1161, 0x0029, 0}, 0x3271 }, // U3271 # CIRCLED HANGUL RIEUL A ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x1106, 0x0029, 0, 0}, 0x3264 }, // U3264 # CIRCLED HANGUL MIEUM ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x1106, 0x1161, 0x0029, 0}, 0x3272 }, // U3272 # CIRCLED HANGUL MIEUM A ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x1107, 0x0029, 0, 0}, 0x3265 }, // U3265 # CIRCLED HANGUL PIEUP ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x1107, 0x1161, 0x0029, 0}, 0x3273 }, // U3273 # CIRCLED HANGUL PIEUP A ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x1109, 0x0029, 0, 0}, 0x3266 }, // U3266 # CIRCLED HANGUL SIOS ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x1109, 0x1161, 0x0029, 0}, 0x3274 }, // U3274 # CIRCLED HANGUL SIOS A ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x110b, 0x0029, 0, 0}, 0x3267 }, // U3267 # CIRCLED HANGUL IEUNG ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x110b, 0x1161, 0x0029, 0}, 0x3275 }, // U3275 # CIRCLED HANGUL IEUNG A ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x110c, 0x0029, 0, 0}, 0x3268 }, // U3268 # CIRCLED HANGUL CIEUC ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x110c, 0x1161, 0x0029, 0}, 0x3276 }, // U3276 # CIRCLED HANGUL CIEUC A ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x110e, 0x0029, 0, 0}, 0x3269 }, // U3269 # CIRCLED HANGUL CHIEUCH ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x110e, 0x1161, 0x0029, 0}, 0x3277 }, // U3277 # CIRCLED HANGUL CHIEUCH A ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x110f, 0x0029, 0, 0}, 0x326a }, // U326A # CIRCLED HANGUL KHIEUKH ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x110f, 0x1161, 0x0029, 0}, 0x3278 }, // U3278 # CIRCLED HANGUL KHIEUKH A ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x1110, 0x0029, 0, 0}, 0x326b }, // U326B # CIRCLED HANGUL THIEUTH ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x1110, 0x1161, 0x0029, 0}, 0x3279 }, // U3279 # CIRCLED HANGUL THIEUTH A ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x1111, 0x0029, 0, 0}, 0x326c }, // U326C # CIRCLED HANGUL PHIEUPH ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x1111, 0x1161, 0x0029, 0}, 0x327a }, // U327A # CIRCLED HANGUL PHIEUPH A ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x1112, 0x0029, 0, 0}, 0x326d }, // U326D # CIRCLED HANGUL HIEUH ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x1112, 0x1161, 0x0029, 0}, 0x327b }, // U327B # CIRCLED HANGUL HIEUH A ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30a2, 0x0029, 0, 0}, 0x32d0 }, // U32D0 # CIRCLED KATAKANA A ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30a4, 0x0029, 0, 0}, 0x32d1 }, // U32D1 # CIRCLED KATAKANA I ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30a6, 0x0029, 0, 0}, 0x32d2 }, // U32D2 # CIRCLED KATAKANA U ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30a8, 0x0029, 0, 0}, 0x32d3 }, // U32D3 # CIRCLED KATAKANA E ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30aa, 0x0029, 0, 0}, 0x32d4 }, // U32D4 # CIRCLED KATAKANA O ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30ab, 0x0029, 0, 0}, 0x32d5 }, // U32D5 # CIRCLED KATAKANA KA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30ad, 0x0029, 0, 0}, 0x32d6 }, // U32D6 # CIRCLED KATAKANA KI ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30af, 0x0029, 0, 0}, 0x32d7 }, // U32D7 # CIRCLED KATAKANA KU ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30b1, 0x0029, 0, 0}, 0x32d8 }, // U32D8 # CIRCLED KATAKANA KE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30b3, 0x0029, 0, 0}, 0x32d9 }, // U32D9 # CIRCLED KATAKANA KO ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30b5, 0x0029, 0, 0}, 0x32da }, // U32DA # CIRCLED KATAKANA SA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30b7, 0x0029, 0, 0}, 0x32db }, // U32DB # CIRCLED KATAKANA SI ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30b9, 0x0029, 0, 0}, 0x32dc }, // U32DC # CIRCLED KATAKANA SU ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30bb, 0x0029, 0, 0}, 0x32dd }, // U32DD # CIRCLED KATAKANA SE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30bd, 0x0029, 0, 0}, 0x32de }, // U32DE # CIRCLED KATAKANA SO ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30bf, 0x0029, 0, 0}, 0x32df }, // U32DF # CIRCLED KATAKANA TA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30c1, 0x0029, 0, 0}, 0x32e0 }, // U32E0 # CIRCLED KATAKANA TI ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30c4, 0x0029, 0, 0}, 0x32e1 }, // U32E1 # CIRCLED KATAKANA TU ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30c6, 0x0029, 0, 0}, 0x32e2 }, // U32E2 # CIRCLED KATAKANA TE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30c8, 0x0029, 0, 0}, 0x32e3 }, // U32E3 # CIRCLED KATAKANA TO ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30ca, 0x0029, 0, 0}, 0x32e4 }, // U32E4 # CIRCLED KATAKANA NA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30cb, 0x0029, 0, 0}, 0x32e5 }, // U32E5 # CIRCLED KATAKANA NI ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30cc, 0x0029, 0, 0}, 0x32e6 }, // U32E6 # CIRCLED KATAKANA NU ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30cd, 0x0029, 0, 0}, 0x32e7 }, // U32E7 # CIRCLED KATAKANA NE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30ce, 0x0029, 0, 0}, 0x32e8 }, // U32E8 # CIRCLED KATAKANA NO ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30cf, 0x0029, 0, 0}, 0x32e9 }, // U32E9 # CIRCLED KATAKANA HA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30d2, 0x0029, 0, 0}, 0x32ea }, // U32EA # CIRCLED KATAKANA HI ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30d5, 0x0029, 0, 0}, 0x32eb }, // U32EB # CIRCLED KATAKANA HU ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30d8, 0x0029, 0, 0}, 0x32ec }, // U32EC # CIRCLED KATAKANA HE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30db, 0x0029, 0, 0}, 0x32ed }, // U32ED # CIRCLED KATAKANA HO ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30de, 0x0029, 0, 0}, 0x32ee }, // U32EE # CIRCLED KATAKANA MA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30df, 0x0029, 0, 0}, 0x32ef }, // U32EF # CIRCLED KATAKANA MI ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30e0, 0x0029, 0, 0}, 0x32f0 }, // U32F0 # CIRCLED KATAKANA MU ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30e1, 0x0029, 0, 0}, 0x32f1 }, // U32F1 # CIRCLED KATAKANA ME ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30e2, 0x0029, 0, 0}, 0x32f2 }, // U32F2 # CIRCLED KATAKANA MO ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30e4, 0x0029, 0, 0}, 0x32f3 }, // U32F3 # CIRCLED KATAKANA YA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30e6, 0x0029, 0, 0}, 0x32f4 }, // U32F4 # CIRCLED KATAKANA YU ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30e8, 0x0029, 0, 0}, 0x32f5 }, // U32F5 # CIRCLED KATAKANA YO ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30e9, 0x0029, 0, 0}, 0x32f6 }, // U32F6 # CIRCLED KATAKANA RA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30ea, 0x0029, 0, 0}, 0x32f7 }, // U32F7 # CIRCLED KATAKANA RI ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30eb, 0x0029, 0, 0}, 0x32f8 }, // U32F8 # CIRCLED KATAKANA RU ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30ec, 0x0029, 0, 0}, 0x32f9 }, // U32F9 # CIRCLED KATAKANA RE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30ed, 0x0029, 0, 0}, 0x32fa }, // U32FA # CIRCLED KATAKANA RO ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30ef, 0x0029, 0, 0}, 0x32fb }, // U32FB # CIRCLED KATAKANA WA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30f0, 0x0029, 0, 0}, 0x32fc }, // U32FC # CIRCLED KATAKANA WI ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30f1, 0x0029, 0, 0}, 0x32fd }, // U32FD # CIRCLED KATAKANA WE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30f2, 0x0029, 0, 0}, 0x32fe }, // U32FE # CIRCLED KATAKANA WO ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x4e00, 0x0029, 0, 0}, 0x3280 }, // U3280 # CIRCLED IDEOGRAPH ONE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x4e03, 0x0029, 0, 0}, 0x3286 }, // U3286 # CIRCLED IDEOGRAPH SEVEN ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x4e09, 0x0029, 0, 0}, 0x3282 }, // U3282 # CIRCLED IDEOGRAPH THREE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x4e0a, 0x0029, 0, 0}, 0x32a4 }, // U32A4 # CIRCLED IDEOGRAPH HIGH ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x4e0b, 0x0029, 0, 0}, 0x32a6 }, // U32A6 # CIRCLED IDEOGRAPH LOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x4e2d, 0x0029, 0, 0}, 0x32a5 }, // U32A5 # CIRCLED IDEOGRAPH CENTRE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x4e5d, 0x0029, 0, 0}, 0x3288 }, // U3288 # CIRCLED IDEOGRAPH NINE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x4e8c, 0x0029, 0, 0}, 0x3281 }, // U3281 # CIRCLED IDEOGRAPH TWO ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x4e94, 0x0029, 0, 0}, 0x3284 }, // U3284 # CIRCLED IDEOGRAPH FIVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x4f01, 0x0029, 0, 0}, 0x32ad }, // U32AD # CIRCLED IDEOGRAPH ENTERPRISE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x4f11, 0x0029, 0, 0}, 0x32a1 }, // U32A1 # CIRCLED IDEOGRAPH REST ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x512a, 0x0029, 0, 0}, 0x329d }, // U329D # CIRCLED IDEOGRAPH EXCELLENT ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x516b, 0x0029, 0, 0}, 0x3287 }, // U3287 # CIRCLED IDEOGRAPH EIGHT ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x516d, 0x0029, 0, 0}, 0x3285 }, // U3285 # CIRCLED IDEOGRAPH SIX ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x5199, 0x0029, 0, 0}, 0x32a2 }, // U32A2 # CIRCLED IDEOGRAPH COPY ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x52b4, 0x0029, 0, 0}, 0x3298 }, // U3298 # CIRCLED IDEOGRAPH LABOR ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x533b, 0x0029, 0, 0}, 0x32a9 }, // U32A9 # CIRCLED IDEOGRAPH MEDICINE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x5341, 0x0029, 0, 0}, 0x3289 }, // U3289 # CIRCLED IDEOGRAPH TEN ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x5354, 0x0029, 0, 0}, 0x32af }, // U32AF # CIRCLED IDEOGRAPH ALLIANCE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x5370, 0x0029, 0, 0}, 0x329e }, // U329E # CIRCLED IDEOGRAPH PRINT ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x53f3, 0x0029, 0, 0}, 0x32a8 }, // U32A8 # CIRCLED IDEOGRAPH RIGHT ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x540d, 0x0029, 0, 0}, 0x3294 }, // U3294 # CIRCLED IDEOGRAPH NAME ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x56db, 0x0029, 0, 0}, 0x3283 }, // U3283 # CIRCLED IDEOGRAPH FOUR ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x571f, 0x0029, 0, 0}, 0x328f }, // U328F # CIRCLED IDEOGRAPH EARTH ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x591c, 0x0029, 0, 0}, 0x32b0 }, // U32B0 # CIRCLED IDEOGRAPH NIGHT ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x5973, 0x0029, 0, 0}, 0x329b }, // U329B # CIRCLED IDEOGRAPH FEMALE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x5b66, 0x0029, 0, 0}, 0x32ab }, // U32AB # CIRCLED IDEOGRAPH STUDY ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x5b97, 0x0029, 0, 0}, 0x32aa }, // U32AA # CIRCLED IDEOGRAPH RELIGION ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x5de6, 0x0029, 0, 0}, 0x32a7 }, // U32A7 # CIRCLED IDEOGRAPH LEFT ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x65e5, 0x0029, 0, 0}, 0x3290 }, // U3290 # CIRCLED IDEOGRAPH SUN ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x6708, 0x0029, 0, 0}, 0x328a }, // U328A # CIRCLED IDEOGRAPH MOON ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x6709, 0x0029, 0, 0}, 0x3292 }, // U3292 # CIRCLED IDEOGRAPH HAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x6728, 0x0029, 0, 0}, 0x328d }, // U328D # CIRCLED IDEOGRAPH WOOD ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x682a, 0x0029, 0, 0}, 0x3291 }, // U3291 # CIRCLED IDEOGRAPH STOCK ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x6b63, 0x0029, 0, 0}, 0x32a3 }, // U32A3 # CIRCLED IDEOGRAPH CORRECT ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x6c34, 0x0029, 0, 0}, 0x328c }, // U328C # CIRCLED IDEOGRAPH WATER ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x6ce8, 0x0029, 0, 0}, 0x329f }, // U329F # CIRCLED IDEOGRAPH ATTENTION ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x706b, 0x0029, 0, 0}, 0x328b }, // U328B # CIRCLED IDEOGRAPH FIRE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x7279, 0x0029, 0, 0}, 0x3295 }, // U3295 # CIRCLED IDEOGRAPH SPECIAL ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x7537, 0x0029, 0, 0}, 0x329a }, // U329A # CIRCLED IDEOGRAPH MALE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x76e3, 0x0029, 0, 0}, 0x32ac }, // U32AC # CIRCLED IDEOGRAPH SUPERVISE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x793e, 0x0029, 0, 0}, 0x3293 }, // U3293 # CIRCLED IDEOGRAPH SOCIETY ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x795d, 0x0029, 0, 0}, 0x3297 }, // U3297 # CIRCLED IDEOGRAPH CONGRATULATION ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x79d8, 0x0029, 0, 0}, 0x3299 }, // U3299 # CIRCLED IDEOGRAPH SECRET ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x8ca1, 0x0029, 0, 0}, 0x3296 }, // U3296 # CIRCLED IDEOGRAPH FINANCIAL ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x8cc7, 0x0029, 0, 0}, 0x32ae }, // U32AE # CIRCLED IDEOGRAPH RESOURCE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x9069, 0x0029, 0, 0}, 0x329c }, // U329C # CIRCLED IDEOGRAPH SUITABLE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x91d1, 0x0029, 0, 0}, 0x328e }, // U328E # CIRCLED IDEOGRAPH METAL ++ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x9805, 0x0029, 0, 0}, 0x32a0 }, // U32A0 # CIRCLED IDEOGRAPH ITEM ++ { {UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0029, 0, 0, 0}, 0x005d }, // bracketright ++ { {UNITIZE(Qt::Key_Multi_key), 0x0029, 0x002d, 0, 0, 0}, 0x007d }, // braceright ++ { {UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0391, 0, 0, 0}, 0x1f08 }, // U1F08 # GREEK CAPITAL LETTER ALPHA WITH PSILI ++ { {UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0395, 0, 0, 0}, 0x1f18 }, // U1F18 # GREEK CAPITAL LETTER EPSILON WITH PSILI ++ { {UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0397, 0, 0, 0}, 0x1f28 }, // U1F28 # GREEK CAPITAL LETTER ETA WITH PSILI ++ { {UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0399, 0, 0, 0}, 0x1f38 }, // U1F38 # GREEK CAPITAL LETTER IOTA WITH PSILI ++ { {UNITIZE(Qt::Key_Multi_key), 0x0029, 0x039f, 0, 0, 0}, 0x1f48 }, // U1F48 # GREEK CAPITAL LETTER OMICRON WITH PSILI ++ { {UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03a9, 0, 0, 0}, 0x1f68 }, // U1F68 # GREEK CAPITAL LETTER OMEGA WITH PSILI ++ { {UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b1, 0, 0, 0}, 0x1f00 }, // U1F00 # GREEK SMALL LETTER ALPHA WITH PSILI ++ { {UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b5, 0, 0, 0}, 0x1f10 }, // U1F10 # GREEK SMALL LETTER EPSILON WITH PSILI ++ { {UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b7, 0, 0, 0}, 0x1f20 }, // U1F20 # GREEK SMALL LETTER ETA WITH PSILI ++ { {UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b9, 0, 0, 0}, 0x1f30 }, // U1F30 # GREEK SMALL LETTER IOTA WITH PSILI ++ { {UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03bf, 0, 0, 0}, 0x1f40 }, // U1F40 # GREEK SMALL LETTER OMICRON WITH PSILI ++ { {UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03c1, 0, 0, 0}, 0x1fe4 }, // U1FE4 # GREEK SMALL LETTER RHO WITH PSILI ++ { {UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03c5, 0, 0, 0}, 0x1f50 }, // U1F50 # GREEK SMALL LETTER UPSILON WITH PSILI ++ { {UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03c9, 0, 0, 0}, 0x1f60 }, // U1F60 # GREEK SMALL LETTER OMEGA WITH PSILI ++ { {UNITIZE(Qt::Key_Multi_key), 0x002b, 0x002b, 0, 0, 0}, 0x0023 }, // numbersign ++ { {UNITIZE(Qt::Key_Multi_key), 0x002b, 0x002d, 0, 0, 0}, 0x00b1 }, // plusminus ++ { {UNITIZE(Qt::Key_Multi_key), 0x002b, 0x004f, 0, 0, 0}, 0x01a0 }, // U01A0 # LATIN CAPITAL LETTER O WITH HORN ++ { {UNITIZE(Qt::Key_Multi_key), 0x002b, 0x0055, 0, 0, 0}, 0x01af }, // U01AF # LATIN CAPITAL LETTER U WITH HORN ++ { {UNITIZE(Qt::Key_Multi_key), 0x002b, 0x006f, 0, 0, 0}, 0x01a1 }, // U01A1 # LATIN SMALL LETTER O WITH HORN ++ { {UNITIZE(Qt::Key_Multi_key), 0x002b, 0x0075, 0, 0, 0}, 0x01b0 }, // U01B0 # LATIN SMALL LETTER U WITH HORN ++ { {UNITIZE(Qt::Key_Multi_key), 0x002c, 0x0020, 0, 0, 0}, 0x00b8 }, // cedilla ++ { {UNITIZE(Qt::Key_Multi_key), 0x002c, 0x0022, 0, 0, 0}, 0x201e }, // U201e # DOUBLE LOW-9 QUOTATION MARK ++ { {UNITIZE(Qt::Key_Multi_key), 0x002c, 0x0027, 0, 0, 0}, 0x201a }, // U201a # SINGLE LOW-9 QUOTATION MARK ++ { {UNITIZE(Qt::Key_Multi_key), 0x002c, 0x002d, 0, 0, 0}, 0x00ac }, // U00AC # NOT SIGN ++ { {UNITIZE(Qt::Key_Multi_key), 0x002c, 0x0043, 0, 0, 0}, 0x00c7 }, // U00C7 # LATIN CAPITAL LETTER C WITH CEDILLA ++ { {UNITIZE(Qt::Key_Multi_key), 0x002c, 0x0044, 0, 0, 0}, 0x1e10 }, // U1E10 # LATIN CAPITAL LETTER D WITH CEDILLA ++ { {UNITIZE(Qt::Key_Multi_key), 0x002c, 0x0045, 0, 0, 0}, 0x0228 }, // U0228 # LATIN CAPITAL LETTER E WITH CEDILLA ++ { {UNITIZE(Qt::Key_Multi_key), 0x002c, 0x0047, 0, 0, 0}, 0x0122 }, // U0122 # LATIN CAPITAL LETTER G WITH CEDILLA ++ { {UNITIZE(Qt::Key_Multi_key), 0x002c, 0x0048, 0, 0, 0}, 0x1e28 }, // U1E28 # LATIN CAPITAL LETTER H WITH CEDILLA ++ { {UNITIZE(Qt::Key_Multi_key), 0x002c, 0x004b, 0, 0, 0}, 0x0136 }, // U0136 # LATIN CAPITAL LETTER K WITH CEDILLA ++ { {UNITIZE(Qt::Key_Multi_key), 0x002c, 0x004c, 0, 0, 0}, 0x013b }, // U013B # LATIN CAPITAL LETTER L WITH CEDILLA ++ { {UNITIZE(Qt::Key_Multi_key), 0x002c, 0x004e, 0, 0, 0}, 0x0145 }, // U0145 # LATIN CAPITAL LETTER N WITH CEDILLA ++ { {UNITIZE(Qt::Key_Multi_key), 0x002c, 0x0052, 0, 0, 0}, 0x0156 }, // U0156 # LATIN CAPITAL LETTER R WITH CEDILLA ++ { {UNITIZE(Qt::Key_Multi_key), 0x002c, 0x0053, 0, 0, 0}, 0x015e }, // U015E # LATIN CAPITAL LETTER S WITH CEDILLA ++ { {UNITIZE(Qt::Key_Multi_key), 0x002c, 0x0054, 0, 0, 0}, 0x0162 }, // U0162 # LATIN CAPITAL LETTER T WITH CEDILLA ++ { {UNITIZE(Qt::Key_Multi_key), 0x002c, 0x0063, 0, 0, 0}, 0x00e7 }, // U00E7 # LATIN SMALL LETTER C WITH CEDILLA ++ { {UNITIZE(Qt::Key_Multi_key), 0x002c, 0x0064, 0, 0, 0}, 0x1e11 }, // U1E11 # LATIN SMALL LETTER D WITH CEDILLA ++ { {UNITIZE(Qt::Key_Multi_key), 0x002c, 0x0065, 0, 0, 0}, 0x0229 }, // U0229 # LATIN SMALL LETTER E WITH CEDILLA ++ { {UNITIZE(Qt::Key_Multi_key), 0x002c, 0x0067, 0, 0, 0}, 0x0123 }, // U0123 # LATIN SMALL LETTER G WITH CEDILLA ++ { {UNITIZE(Qt::Key_Multi_key), 0x002c, 0x0068, 0, 0, 0}, 0x1e29 }, // U1E29 # LATIN SMALL LETTER H WITH CEDILLA ++ { {UNITIZE(Qt::Key_Multi_key), 0x002c, 0x006b, 0, 0, 0}, 0x0137 }, // U0137 # LATIN SMALL LETTER K WITH CEDILLA ++ { {UNITIZE(Qt::Key_Multi_key), 0x002c, 0x006c, 0, 0, 0}, 0x013c }, // U013C # LATIN SMALL LETTER L WITH CEDILLA ++ { {UNITIZE(Qt::Key_Multi_key), 0x002c, 0x006e, 0, 0, 0}, 0x0146 }, // U0146 # LATIN SMALL LETTER N WITH CEDILLA ++ { {UNITIZE(Qt::Key_Multi_key), 0x002c, 0x0072, 0, 0, 0}, 0x0157 }, // U0157 # LATIN SMALL LETTER R WITH CEDILLA ++ { {UNITIZE(Qt::Key_Multi_key), 0x002c, 0x0073, 0, 0, 0}, 0x015f }, // U015F # LATIN SMALL LETTER S WITH CEDILLA ++ { {UNITIZE(Qt::Key_Multi_key), 0x002c, 0x0074, 0, 0, 0}, 0x0163 }, // U0163 # LATIN SMALL LETTER T WITH CEDILLA ++ { {UNITIZE(Qt::Key_Multi_key), 0x002d, 0x0020, 0, 0, 0}, 0x007e }, // asciitilde ++ { {UNITIZE(Qt::Key_Multi_key), 0x002d, 0x0028, 0, 0, 0}, 0x007b }, // braceleft ++ { {UNITIZE(Qt::Key_Multi_key), 0x002d, 0x0029, 0, 0, 0}, 0x007d }, // braceright ++ { {UNITIZE(Qt::Key_Multi_key), 0x002d, 0x002c, 0, 0, 0}, 0x00ac }, // U00AC # NOT SIGN ++ { {UNITIZE(Qt::Key_Multi_key), 0x002d, 0x002d, 0x002d, 0, 0}, 0x2014 }, // U2014 # EM DASH ++ { {UNITIZE(Qt::Key_Multi_key), 0x002d, 0x002d, 0x002e, 0, 0}, 0x2013 }, // U2013 # EN DASH ++ { {UNITIZE(Qt::Key_Multi_key), 0x002d, 0x003a, 0, 0, 0}, 0x00f7 }, // U00F7 # DIVISION SIGN ++ { {UNITIZE(Qt::Key_Multi_key), 0x002d, 0x0044, 0, 0, 0}, 0x0110 }, // Dstroke ++ { {UNITIZE(Qt::Key_Multi_key), 0x002d, 0x004c, 0, 0, 0}, 0x00a3 }, // U00a3 # POUND SIGN ++ { {UNITIZE(Qt::Key_Multi_key), 0x002d, 0x0064, 0, 0, 0}, 0x0111 }, // dstroke ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0000, 0x0053, 0, 0}, 0x1e68 }, // U1E68 # LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0000, 0x0053, 0, 0}, 0x1e64 }, // U1E64 # LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0000, 0x0073, 0, 0}, 0x1e69 }, // U1E69 # LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0000, 0x0073, 0, 0}, 0x1e65 }, // U1E65 # LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0021, 0x0053, 0, 0}, 0x1e68 }, // U1E68 # LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0021, 0x0073, 0, 0}, 0x1e69 }, // U1E69 # LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0027, 0x0053, 0, 0}, 0x1e64 }, // U1E64 # LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0027, 0x0073, 0, 0}, 0x1e65 }, // U1E65 # LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x002e, 0, 0, 0}, 0x00b7 }, // U00B7 ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x003c, 0, 0, 0}, 0x2039 }, // U2039 ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x003e, 0, 0, 0}, 0x203a }, // U203a ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0041, 0, 0, 0}, 0x0226 }, // U0226 # LATIN CAPITAL LETTER A WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0042, 0, 0, 0}, 0x1e02 }, // U1E02 # LATIN CAPITAL LETTER B WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0043, 0, 0, 0}, 0x010a }, // U010A # LATIN CAPITAL LETTER C WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0044, 0, 0, 0}, 0x1e0a }, // U1E0A # LATIN CAPITAL LETTER D WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0045, 0, 0, 0}, 0x0116 }, // U0116 # LATIN CAPITAL LETTER E WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0046, 0, 0, 0}, 0x1e1e }, // U1E1E # LATIN CAPITAL LETTER F WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0047, 0, 0, 0}, 0x0120 }, // U0120 # LATIN CAPITAL LETTER G WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0048, 0, 0, 0}, 0x1e22 }, // U1E22 # LATIN CAPITAL LETTER H WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0049, 0, 0, 0}, 0x0130 }, // U0130 # LATIN CAPITAL LETTER I WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x004d, 0, 0, 0}, 0x1e40 }, // U1E40 # LATIN CAPITAL LETTER M WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x004e, 0, 0, 0}, 0x1e44 }, // U1E44 # LATIN CAPITAL LETTER N WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x004f, 0, 0, 0}, 0x022e }, // U022E # LATIN CAPITAL LETTER O WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0050, 0, 0, 0}, 0x1e56 }, // U1E56 # LATIN CAPITAL LETTER P WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0052, 0, 0, 0}, 0x1e58 }, // U1E58 # LATIN CAPITAL LETTER R WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0053, 0, 0, 0}, 0x1e60 }, // U1E60 # LATIN CAPITAL LETTER S WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0054, 0, 0, 0}, 0x1e6a }, // U1E6A # LATIN CAPITAL LETTER T WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0057, 0, 0, 0}, 0x1e86 }, // U1E86 # LATIN CAPITAL LETTER W WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0058, 0, 0, 0}, 0x1e8a }, // U1E8A # LATIN CAPITAL LETTER X WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0059, 0, 0, 0}, 0x1e8e }, // U1E8E # LATIN CAPITAL LETTER Y WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x005a, 0, 0, 0}, 0x017b }, // U017B # LATIN CAPITAL LETTER Z WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0061, 0, 0, 0}, 0x0227 }, // U0227 # LATIN SMALL LETTER A WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0062, 0, 0, 0}, 0x1e03 }, // U1E03 # LATIN SMALL LETTER B WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0063, 0, 0, 0}, 0x010b }, // U010B # LATIN SMALL LETTER C WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0063, 0x0053, 0, 0}, 0x1e66 }, // U1E66 # LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0063, 0x0073, 0, 0}, 0x1e67 }, // U1E67 # LATIN SMALL LETTER S WITH CARON AND DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0064, 0, 0, 0}, 0x1e0b }, // U1E0B # LATIN SMALL LETTER D WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0065, 0, 0, 0}, 0x0117 }, // U0117 # LATIN SMALL LETTER E WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0066, 0, 0, 0}, 0x1e1f }, // U1E1F # LATIN SMALL LETTER F WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0067, 0, 0, 0}, 0x0121 }, // U0121 # LATIN SMALL LETTER G WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0068, 0, 0, 0}, 0x1e23 }, // U1E23 # LATIN SMALL LETTER H WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x006d, 0, 0, 0}, 0x1e41 }, // U1E41 # LATIN SMALL LETTER M WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x006e, 0, 0, 0}, 0x1e45 }, // U1E45 # LATIN SMALL LETTER N WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x006f, 0, 0, 0}, 0x022f }, // U022F # LATIN SMALL LETTER O WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0070, 0, 0, 0}, 0x1e57 }, // U1E57 # LATIN SMALL LETTER P WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0072, 0, 0, 0}, 0x1e59 }, // U1E59 # LATIN SMALL LETTER R WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0073, 0, 0, 0}, 0x1e61 }, // U1E61 # LATIN SMALL LETTER S WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0074, 0, 0, 0}, 0x1e6b }, // U1E6B # LATIN SMALL LETTER T WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0077, 0, 0, 0}, 0x1e87 }, // U1E87 # LATIN SMALL LETTER W WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0078, 0, 0, 0}, 0x1e8b }, // U1E8B # LATIN SMALL LETTER X WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0079, 0, 0, 0}, 0x1e8f }, // U1E8F # LATIN SMALL LETTER Y WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x007a, 0, 0, 0}, 0x017c }, // U017C # LATIN SMALL LETTER Z WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x00b4, 0x0053, 0, 0}, 0x1e64 }, // U1E64 # LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x00b4, 0x0073, 0, 0}, 0x1e65 }, // U1E65 # LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x015a, 0, 0, 0}, 0x1e64 }, // U1E64 # LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x015b, 0, 0, 0}, 0x1e65 }, // U1E65 # LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0160, 0, 0, 0}, 0x1e66 }, // U1E66 # LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0161, 0, 0, 0}, 0x1e67 }, // U1E67 # LATIN SMALL LETTER S WITH CARON AND DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x017f, 0, 0, 0}, 0x1e9b }, // U1E9B # LATIN SMALL LETTER LONG S WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x1e62, 0, 0, 0}, 0x1e68 }, // U1E68 # LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x1e63, 0, 0, 0}, 0x1e69 }, // U1E69 # LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, UNITIZE(Qt::Key_Dead_Acute), 0x0053, 0, 0}, 0x1e64 }, // U1E64 # LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, UNITIZE(Qt::Key_Dead_Acute), 0x0073, 0, 0}, 0x1e65 }, // U1E65 # LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, UNITIZE(Qt::Key_Dead_Caron), 0x0053, 0, 0}, 0x1e66 }, // U1E66 # LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, UNITIZE(Qt::Key_Dead_Caron), 0x0073, 0, 0}, 0x1e67 }, // U1E67 # LATIN SMALL LETTER S WITH CARON AND DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, UNITIZE(Qt::Key_Dead_Belowdot), 0x0053, 0, 0}, 0x1e68 }, // U1E68 # LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002e, UNITIZE(Qt::Key_Dead_Belowdot), 0x0073, 0, 0}, 0x1e69 }, // U1E69 # LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x002f, 0, 0, 0}, 0x005c }, // backslash ++ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x003c, 0, 0, 0}, 0x005c }, // backslash ++ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x0043, 0, 0, 0}, 0x20a1 }, // U20a1 # COLON SIGN ++ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x0043, 0, 0, 0}, 0x00a2 }, // U00A2 # CENT SIGN ++ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x0044, 0, 0, 0}, 0x0110 }, // U0110 # LATIN CAPITAL LETTER D WITH STROKE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x0047, 0, 0, 0}, 0x01e4 }, // U01E4 # LATIN CAPITAL LETTER G WITH STROKE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x0048, 0, 0, 0}, 0x0126 }, // U0126 # LATIN CAPITAL LETTER H WITH STROKE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x0049, 0, 0, 0}, 0x0197 }, // U0197 # LATIN CAPITAL LETTER I WITH STROKE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x004c, 0, 0, 0}, 0x0141 }, // U0141 # LATIN CAPITAL LETTER L WITH STROKE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x004f, 0, 0, 0}, 0x00d8 }, // U00D8 # LATIN CAPITAL LETTER O WITH STROKE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x0054, 0, 0, 0}, 0x0166 }, // U0166 # LATIN CAPITAL LETTER T WITH STROKE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x005a, 0, 0, 0}, 0x01b5 }, // U01B5 # LATIN CAPITAL LETTER Z WITH STROKE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x005e, 0, 0, 0}, 0x007c }, // bar ++ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x0062, 0, 0, 0}, 0x0180 }, // U0180 # LATIN SMALL LETTER B WITH STROKE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x0063, 0, 0, 0}, 0x00a2 }, // U00A2 # CENT SIGN ++ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x0064, 0, 0, 0}, 0x0111 }, // U0111 # LATIN SMALL LETTER D WITH STROKE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x0067, 0, 0, 0}, 0x01e5 }, // U01E5 # LATIN SMALL LETTER G WITH STROKE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x0068, 0, 0, 0}, 0x0127 }, // U0127 # LATIN SMALL LETTER H WITH STROKE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x0069, 0, 0, 0}, 0x0268 }, // U0268 # LATIN SMALL LETTER I WITH STROKE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x006c, 0, 0, 0}, 0x0142 }, // U0142 # LATIN SMALL LETTER L WITH STROKE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x006d, 0, 0, 0}, 0x20a5 }, // U20a5 # MILL SIGN ++ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x006f, 0, 0, 0}, 0x00f8 }, // U00F8 # LATIN SMALL LETTER O WITH STROKE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x0074, 0, 0, 0}, 0x0167 }, // U0167 # LATIN SMALL LETTER T WITH STROKE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x007a, 0, 0, 0}, 0x01b6 }, // U01B6 # LATIN SMALL LETTER Z WITH STROKE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x0294, 0, 0, 0}, 0x02a1 }, // U02A1 # LATIN LETTER GLOTTAL STOP WITH STROKE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x0413, 0, 0, 0}, 0x0492 }, // U0492 # CYRILLIC CAPITAL LETTER GHE WITH STROKE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x041a, 0, 0, 0}, 0x049e }, // U049E # CYRILLIC CAPITAL LETTER KA WITH STROKE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x0433, 0, 0, 0}, 0x0493 }, // U0493 # CYRILLIC SMALL LETTER GHE WITH STROKE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x043a, 0, 0, 0}, 0x049f }, // U049F # CYRILLIC SMALL LETTER KA WITH STROKE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x04ae, 0, 0, 0}, 0x04b0 }, // U04B0 # CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x04af, 0, 0, 0}, 0x04b1 }, // U04B1 # CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x2190, 0, 0, 0}, 0x219a }, // U219A # LEFTWARDS ARROW WITH STROKE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x2192, 0, 0, 0}, 0x219b }, // U219B # RIGHTWARDS ARROW WITH STROKE ++ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x2194, 0, 0, 0}, 0x21ae }, // U21AE # LEFT RIGHT ARROW WITH STROKE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0031, 0x0032, 0, 0, 0}, 0x00bd }, // U00BD # VULGAR FRACTION ONE HALF ++ { {UNITIZE(Qt::Key_Multi_key), 0x0031, 0x0034, 0, 0, 0}, 0x00bc }, // U00BC # VULGAR FRACTION ONE QUARTER ++ { {UNITIZE(Qt::Key_Multi_key), 0x0033, 0x0034, 0, 0, 0}, 0x00be }, // U00BE # VULGAR FRACTION THREE QUARTERS ++ { {UNITIZE(Qt::Key_Multi_key), 0x003a, 0x002d, 0, 0, 0}, 0x00f7 }, // U00F7 # DIVISION SIGN ++ { {UNITIZE(Qt::Key_Multi_key), 0x003b, 0x0041, 0, 0, 0}, 0x0104 }, // U0104 # LATIN CAPITAL LETTER A WITH OGONEK ++ { {UNITIZE(Qt::Key_Multi_key), 0x003b, 0x0045, 0, 0, 0}, 0x0118 }, // U0118 # LATIN CAPITAL LETTER E WITH OGONEK ++ { {UNITIZE(Qt::Key_Multi_key), 0x003b, 0x0049, 0, 0, 0}, 0x012e }, // U012E # LATIN CAPITAL LETTER I WITH OGONEK ++ { {UNITIZE(Qt::Key_Multi_key), 0x003b, 0x004f, 0, 0, 0}, 0x01ea }, // U01EA # LATIN CAPITAL LETTER O WITH OGONEK ++ { {UNITIZE(Qt::Key_Multi_key), 0x003b, 0x0055, 0, 0, 0}, 0x0172 }, // U0172 # LATIN CAPITAL LETTER U WITH OGONEK ++ { {UNITIZE(Qt::Key_Multi_key), 0x003b, 0x0061, 0, 0, 0}, 0x0105 }, // U0105 # LATIN SMALL LETTER A WITH OGONEK ++ { {UNITIZE(Qt::Key_Multi_key), 0x003b, 0x0065, 0, 0, 0}, 0x0119 }, // U0119 # LATIN SMALL LETTER E WITH OGONEK ++ { {UNITIZE(Qt::Key_Multi_key), 0x003b, 0x0069, 0, 0, 0}, 0x012f }, // U012F # LATIN SMALL LETTER I WITH OGONEK ++ { {UNITIZE(Qt::Key_Multi_key), 0x003b, 0x006f, 0, 0, 0}, 0x01eb }, // U01EB # LATIN SMALL LETTER O WITH OGONEK ++ { {UNITIZE(Qt::Key_Multi_key), 0x003b, 0x0075, 0, 0, 0}, 0x0173 }, // U0173 # LATIN SMALL LETTER U WITH OGONEK ++ { {UNITIZE(Qt::Key_Multi_key), 0x003c, 0x0022, 0, 0, 0}, 0x201c }, // U201c # LEFT DOUBLE QUOTATION MARK ++ { {UNITIZE(Qt::Key_Multi_key), 0x003c, 0x0027, 0, 0, 0}, 0x2018 }, // U2018 # LEFT SINGLE QUOTATION MARK ++ { {UNITIZE(Qt::Key_Multi_key), 0x003c, 0x002f, 0, 0, 0}, 0x005c }, // backslash ++ { {UNITIZE(Qt::Key_Multi_key), 0x003c, 0x003c, 0, 0, 0}, 0x00ab }, // guillemotleft # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK ++ { {UNITIZE(Qt::Key_Multi_key), 0x003c, 0x0338, 0, 0, 0}, 0x226e }, // U226E # NOT LESS-THAN ++ { {UNITIZE(Qt::Key_Multi_key), 0x003c, 0x0338, 0, 0, 0}, 0x226e }, // U226E # NOT LESS-THAN ++ { {UNITIZE(Qt::Key_Multi_key), 0x003d, 0x0043, 0, 0, 0}, 0x20ac }, // EuroSign # EURO SIGN ++ { {UNITIZE(Qt::Key_Multi_key), 0x003d, 0x0045, 0, 0, 0}, 0x20ac }, // EuroSign # EURO SIGN ++ { {UNITIZE(Qt::Key_Multi_key), 0x003d, 0x004c, 0, 0, 0}, 0x20a4 }, // U20a4 # LIRA SIGN ++ { {UNITIZE(Qt::Key_Multi_key), 0x003d, 0x004e, 0, 0, 0}, 0x20a6 }, // U20a6 # NAIRA SIGN ++ { {UNITIZE(Qt::Key_Multi_key), 0x003d, 0x004f, 0, 0, 0}, 0x0150 }, // U0150 # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x003d, 0x0055, 0, 0, 0}, 0x0170 }, // U0170 # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x003d, 0x0057, 0, 0, 0}, 0x20a9 }, // U20a9 # WON SIGN ++ { {UNITIZE(Qt::Key_Multi_key), 0x003d, 0x0059, 0, 0, 0}, 0x00a5 }, // yen ++ { {UNITIZE(Qt::Key_Multi_key), 0x003d, 0x006f, 0, 0, 0}, 0x0151 }, // U0151 # LATIN SMALL LETTER O WITH DOUBLE ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x003d, 0x0075, 0, 0, 0}, 0x0171 }, // U0171 # LATIN SMALL LETTER U WITH DOUBLE ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x003d, 0x0338, 0, 0, 0}, 0x2260 }, // U2260 # NOT EQUAL TO ++ { {UNITIZE(Qt::Key_Multi_key), 0x003d, 0x0423, 0, 0, 0}, 0x04f2 }, // U04F2 # CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x003d, 0x0443, 0, 0, 0}, 0x04f3 }, // U04F3 # CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x003e, 0x0020, 0, 0, 0}, 0x005e }, // asciicircum ++ { {UNITIZE(Qt::Key_Multi_key), 0x003e, 0x0022, 0, 0, 0}, 0x201d }, // U201d # RIGHT DOUBLE QUOTATION MARK ++ { {UNITIZE(Qt::Key_Multi_key), 0x003e, 0x0027, 0, 0, 0}, 0x2019 }, // U2019 # RIGHT SINGLE QUOTATION MARK ++ { {UNITIZE(Qt::Key_Multi_key), 0x003e, 0x003e, 0, 0, 0}, 0x00bb }, // guillemotright # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK ++ { {UNITIZE(Qt::Key_Multi_key), 0x003e, 0x0338, 0, 0, 0}, 0x226f }, // U226F # NOT GREATER-THAN ++ { {UNITIZE(Qt::Key_Multi_key), 0x003e, 0x0338, 0, 0, 0}, 0x226f }, // U226F # NOT GREATER-THAN ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x0000, 0, 0, 0}, 0x1eed }, // U1EED # LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x0000, 0, 0, 0}, 0x1eec }, // U1EEC # LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x0000, 0, 0, 0}, 0x1edf }, // U1EDF # LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x0000, 0, 0, 0}, 0x1ede }, // U1EDE # LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x002b, 0x004f, 0, 0}, 0x1ede }, // U1EDE # LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x002b, 0x0055, 0, 0}, 0x1eec }, // U1EEC # LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x002b, 0x006f, 0, 0}, 0x1edf }, // U1EDF # LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x002b, 0x0075, 0, 0}, 0x1eed }, // U1EED # LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x003f, 0, 0, 0}, 0x00bf }, // questiondown ++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x0041, 0, 0, 0}, 0x1ea2 }, // U1EA2 # LATIN CAPITAL LETTER A WITH HOOK ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x0045, 0, 0, 0}, 0x1eba }, // U1EBA # LATIN CAPITAL LETTER E WITH HOOK ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x0049, 0, 0, 0}, 0x1ec8 }, // U1EC8 # LATIN CAPITAL LETTER I WITH HOOK ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x004f, 0, 0, 0}, 0x1ece }, // U1ECE # LATIN CAPITAL LETTER O WITH HOOK ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x0055, 0, 0, 0}, 0x1ee6 }, // U1EE6 # LATIN CAPITAL LETTER U WITH HOOK ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x0055, 0x0041, 0, 0}, 0x1eb2 }, // U1EB2 # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x0055, 0x0061, 0, 0}, 0x1eb3 }, // U1EB3 # LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x0059, 0, 0, 0}, 0x1ef6 }, // U1EF6 # LATIN CAPITAL LETTER Y WITH HOOK ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x005e, 0x0041, 0, 0}, 0x1ea8 }, // U1EA8 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x005e, 0x0045, 0, 0}, 0x1ec2 }, // U1EC2 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x005e, 0x004f, 0, 0}, 0x1ed4 }, // U1ED4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x005e, 0x0061, 0, 0}, 0x1ea9 }, // U1EA9 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x005e, 0x0065, 0, 0}, 0x1ec3 }, // U1EC3 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x005e, 0x006f, 0, 0}, 0x1ed5 }, // U1ED5 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x0061, 0, 0, 0}, 0x1ea3 }, // U1EA3 # LATIN SMALL LETTER A WITH HOOK ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x0062, 0x0041, 0, 0}, 0x1eb2 }, // U1EB2 # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x0062, 0x0061, 0, 0}, 0x1eb3 }, // U1EB3 # LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x0065, 0, 0, 0}, 0x1ebb }, // U1EBB # LATIN SMALL LETTER E WITH HOOK ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x0069, 0, 0, 0}, 0x1ec9 }, // U1EC9 # LATIN SMALL LETTER I WITH HOOK ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x006f, 0, 0, 0}, 0x1ecf }, // U1ECF # LATIN SMALL LETTER O WITH HOOK ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x0075, 0, 0, 0}, 0x1ee7 }, // U1EE7 # LATIN SMALL LETTER U WITH HOOK ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x0079, 0, 0, 0}, 0x1ef7 }, // U1EF7 # LATIN SMALL LETTER Y WITH HOOK ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x00c2, 0, 0, 0}, 0x1ea8 }, // U1EA8 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x00ca, 0, 0, 0}, 0x1ec2 }, // U1EC2 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x00d4, 0, 0, 0}, 0x1ed4 }, // U1ED4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x00e2, 0, 0, 0}, 0x1ea9 }, // U1EA9 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x00ea, 0, 0, 0}, 0x1ec3 }, // U1EC3 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x00f4, 0, 0, 0}, 0x1ed5 }, // U1ED5 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x0102, 0, 0, 0}, 0x1eb2 }, // U1EB2 # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x0103, 0, 0, 0}, 0x1eb3 }, // U1EB3 # LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, UNITIZE(Qt::Key_Dead_Circumflex), 0x0041, 0, 0}, 0x1ea8 }, // U1EA8 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, UNITIZE(Qt::Key_Dead_Circumflex), 0x0045, 0, 0}, 0x1ec2 }, // U1EC2 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, UNITIZE(Qt::Key_Dead_Circumflex), 0x004f, 0, 0}, 0x1ed4 }, // U1ED4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, UNITIZE(Qt::Key_Dead_Circumflex), 0x0061, 0, 0}, 0x1ea9 }, // U1EA9 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, UNITIZE(Qt::Key_Dead_Circumflex), 0x0065, 0, 0}, 0x1ec3 }, // U1EC3 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, UNITIZE(Qt::Key_Dead_Circumflex), 0x006f, 0, 0}, 0x1ed5 }, // U1ED5 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, UNITIZE(Qt::Key_Dead_Breve), 0x0041, 0, 0}, 0x1eb2 }, // U1EB2 # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, UNITIZE(Qt::Key_Dead_Breve), 0x0061, 0, 0}, 0x1eb3 }, // U1EB3 # LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, UNITIZE(Qt::Key_Dead_Horn), 0x004f, 0, 0}, 0x1ede }, // U1EDE # LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, UNITIZE(Qt::Key_Dead_Horn), 0x0055, 0, 0}, 0x1eec }, // U1EEC # LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, UNITIZE(Qt::Key_Dead_Horn), 0x006f, 0, 0}, 0x1edf }, // U1EDF # LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x003f, UNITIZE(Qt::Key_Dead_Horn), 0x0075, 0, 0}, 0x1eed }, // U1EED # LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0041, 0x0045, 0, 0, 0}, 0x00c6 }, // AE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0041, 0x0054, 0, 0, 0}, 0x0040 }, // at ++ { {UNITIZE(Qt::Key_Multi_key), 0x0043, 0x002f, 0, 0, 0}, 0x20a1 }, // U20a1 # COLON SIGN ++ { {UNITIZE(Qt::Key_Multi_key), 0x0043, 0x002f, 0, 0, 0}, 0x00a2 }, // U00A2 # CENT SIGN ++ { {UNITIZE(Qt::Key_Multi_key), 0x0043, 0x003d, 0, 0, 0}, 0x20ac }, // EuroSign # EURO SIGN ++ { {UNITIZE(Qt::Key_Multi_key), 0x0043, 0x0045, 0, 0, 0}, 0x20a0 }, // U20a0 # EURO-CURRENCY SIGN ++ { {UNITIZE(Qt::Key_Multi_key), 0x0043, 0x0072, 0, 0, 0}, 0x20a2 }, // U20a2 # CRUZEIRO SIGN ++ { {UNITIZE(Qt::Key_Multi_key), 0x0043, 0x007c, 0, 0, 0}, 0x00a2 }, // U00A2 # CENT SIGN ++ { {UNITIZE(Qt::Key_Multi_key), 0x0044, 0x0048, 0, 0, 0}, 0x00d0 }, // U00D0 # LATIN CAPITAL LETTER ETH ++ { {UNITIZE(Qt::Key_Multi_key), 0x0045, 0x003d, 0, 0, 0}, 0x20ac }, // EuroSign # EURO SIGN ++ { {UNITIZE(Qt::Key_Multi_key), 0x0046, 0x0072, 0, 0, 0}, 0x20a3 }, // U20a3 # FRENCH FRANC SIGN ++ { {UNITIZE(Qt::Key_Multi_key), 0x004c, 0x002d, 0, 0, 0}, 0x00a3 }, // U00a3 # POUND SIGN ++ { {UNITIZE(Qt::Key_Multi_key), 0x004c, 0x003d, 0, 0, 0}, 0x20a4 }, // U20a4 # LIRA SIGN ++ { {UNITIZE(Qt::Key_Multi_key), 0x004c, 0x0056, 0, 0, 0}, 0x007c }, // bar ++ { {UNITIZE(Qt::Key_Multi_key), 0x004e, 0x003d, 0, 0, 0}, 0x20a6 }, // U20a6 # NAIRA SIGN ++ { {UNITIZE(Qt::Key_Multi_key), 0x004e, 0x0047, 0, 0, 0}, 0x014a }, // U014A # LATIN CAPITAL LETTER ENG ++ { {UNITIZE(Qt::Key_Multi_key), 0x004f, 0x0043, 0, 0, 0}, 0x00a9 }, // copyright ++ { {UNITIZE(Qt::Key_Multi_key), 0x004f, 0x0045, 0, 0, 0}, 0x0152 }, // OE ++ { {UNITIZE(Qt::Key_Multi_key), 0x004f, 0x0052, 0, 0, 0}, 0x00ae }, // registered ++ { {UNITIZE(Qt::Key_Multi_key), 0x004f, 0x0063, 0, 0, 0}, 0x00a9 }, // copyright ++ { {UNITIZE(Qt::Key_Multi_key), 0x004f, 0x0072, 0, 0, 0}, 0x00ae }, // registered ++ { {UNITIZE(Qt::Key_Multi_key), 0x0050, 0x0021, 0, 0, 0}, 0x00b6 }, // paragraph ++ { {UNITIZE(Qt::Key_Multi_key), 0x0050, 0x0050, 0, 0, 0}, 0x00b6 }, // paragraph # PILCROW SIGN (PARAGRAPH SIGN) ++ { {UNITIZE(Qt::Key_Multi_key), 0x0050, 0x0074, 0, 0, 0}, 0x20a7 }, // U20a7 # PESETA SIGN ++ { {UNITIZE(Qt::Key_Multi_key), 0x0052, 0x0073, 0, 0, 0}, 0x20a8 }, // U20a8 # RUPEE SIGN ++ { {UNITIZE(Qt::Key_Multi_key), 0x0054, 0x0048, 0, 0, 0}, 0x00de }, // U00DE # LATIN CAPITAL LETTER THORN ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0000, 0x0041, 0, 0}, 0x1eb6 }, // U1EB6 # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0000, 0x0061, 0, 0}, 0x1eb7 }, // U1EB7 # LATIN SMALL LETTER A WITH BREVE AND DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0021, 0x0041, 0, 0}, 0x1eb6 }, // U1EB6 # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0021, 0x0061, 0, 0}, 0x1eb7 }, // U1EB7 # LATIN SMALL LETTER A WITH BREVE AND DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x002c, 0x0045, 0, 0}, 0x1e1c }, // U1E1C # LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x002c, 0x0065, 0, 0}, 0x1e1d }, // U1E1D # LATIN SMALL LETTER E WITH CEDILLA AND BREVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0041, 0, 0, 0}, 0x0102 }, // U0102 # LATIN CAPITAL LETTER A WITH BREVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0045, 0, 0, 0}, 0x0114 }, // U0114 # LATIN CAPITAL LETTER E WITH BREVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0047, 0, 0, 0}, 0x011e }, // U011E # LATIN CAPITAL LETTER G WITH BREVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0049, 0, 0, 0}, 0x012c }, // U012C # LATIN CAPITAL LETTER I WITH BREVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x004f, 0, 0, 0}, 0x014e }, // U014E # LATIN CAPITAL LETTER O WITH BREVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0055, 0, 0, 0}, 0x016c }, // U016C # LATIN CAPITAL LETTER U WITH BREVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0061, 0, 0, 0}, 0x0103 }, // U0103 # LATIN SMALL LETTER A WITH BREVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0065, 0, 0, 0}, 0x0115 }, // U0115 # LATIN SMALL LETTER E WITH BREVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0067, 0, 0, 0}, 0x011f }, // U011F # LATIN SMALL LETTER G WITH BREVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0069, 0, 0, 0}, 0x012d }, // U012D # LATIN SMALL LETTER I WITH BREVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x006f, 0, 0, 0}, 0x014f }, // U014F # LATIN SMALL LETTER O WITH BREVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0075, 0, 0, 0}, 0x016d }, // U016D # LATIN SMALL LETTER U WITH BREVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0228, 0, 0, 0}, 0x1e1c }, // U1E1C # LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0229, 0, 0, 0}, 0x1e1d }, // U1E1D # LATIN SMALL LETTER E WITH CEDILLA AND BREVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0391, 0, 0, 0}, 0x1fb8 }, // U1FB8 # GREEK CAPITAL LETTER ALPHA WITH VRACHY ++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0399, 0, 0, 0}, 0x1fd8 }, // U1FD8 # GREEK CAPITAL LETTER IOTA WITH VRACHY ++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x03a5, 0, 0, 0}, 0x1fe8 }, // U1FE8 # GREEK CAPITAL LETTER UPSILON WITH VRACHY ++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x03b1, 0, 0, 0}, 0x1fb0 }, // U1FB0 # GREEK SMALL LETTER ALPHA WITH VRACHY ++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x03b9, 0, 0, 0}, 0x1fd0 }, // U1FD0 # GREEK SMALL LETTER IOTA WITH VRACHY ++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x03c5, 0, 0, 0}, 0x1fe0 }, // U1FE0 # GREEK SMALL LETTER UPSILON WITH VRACHY ++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0410, 0, 0, 0}, 0x04d0 }, // U04D0 # CYRILLIC CAPITAL LETTER A WITH BREVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0415, 0, 0, 0}, 0x04d6 }, // U04D6 # CYRILLIC CAPITAL LETTER IE WITH BREVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0416, 0, 0, 0}, 0x04c1 }, // U04C1 # CYRILLIC CAPITAL LETTER ZHE WITH BREVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0418, 0, 0, 0}, 0x0419 }, // U0419 # CYRILLIC CAPITAL LETTER SHORT I ++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0423, 0, 0, 0}, 0x040e }, // U040E # CYRILLIC CAPITAL LETTER SHORT U ++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0430, 0, 0, 0}, 0x04d1 }, // U04D1 # CYRILLIC SMALL LETTER A WITH BREVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0435, 0, 0, 0}, 0x04d7 }, // U04D7 # CYRILLIC SMALL LETTER IE WITH BREVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0436, 0, 0, 0}, 0x04c2 }, // U04C2 # CYRILLIC SMALL LETTER ZHE WITH BREVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0438, 0, 0, 0}, 0x0439 }, // U0439 # CYRILLIC SMALL LETTER SHORT I ++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0443, 0, 0, 0}, 0x045e }, // U045E # CYRILLIC SMALL LETTER SHORT U ++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x1ea0, 0, 0, 0}, 0x1eb6 }, // U1EB6 # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x1ea1, 0, 0, 0}, 0x1eb7 }, // U1EB7 # LATIN SMALL LETTER A WITH BREVE AND DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, UNITIZE(Qt::Key_Dead_Cedilla), 0x0045, 0, 0}, 0x1e1c }, // U1E1C # LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, UNITIZE(Qt::Key_Dead_Cedilla), 0x0065, 0, 0}, 0x1e1d }, // U1E1D # LATIN SMALL LETTER E WITH CEDILLA AND BREVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, UNITIZE(Qt::Key_Dead_Belowdot), 0x0041, 0, 0}, 0x1eb6 }, // U1EB6 # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0055, UNITIZE(Qt::Key_Dead_Belowdot), 0x0061, 0, 0}, 0x1eb7 }, // U1EB7 # LATIN SMALL LETTER A WITH BREVE AND DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0056, 0x004c, 0, 0, 0}, 0x007c }, // bar ++ { {UNITIZE(Qt::Key_Multi_key), 0x0057, 0x003d, 0, 0, 0}, 0x20a9 }, // U20a9 # WON SIGN ++ { {UNITIZE(Qt::Key_Multi_key), 0x0059, 0x003d, 0, 0, 0}, 0x00a5 }, // yen ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0000, 0, 0, 0}, 0x00b2 }, // U00B2 # SUPERSCRIPT TWO ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0000, 0, 0, 0}, 0x2076 }, // U2076 # SUPERSCRIPT SIX ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0000, 0, 0, 0}, 0x2070 }, // U2070 # SUPERSCRIPT ZERO ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0000, 0, 0, 0}, 0x00b9 }, // U00B9 # SUPERSCRIPT ONE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0000, 0, 0, 0}, 0x2078 }, // U2078 # SUPERSCRIPT EIGHT ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0000, 0, 0, 0}, 0x2074 }, // U2074 # SUPERSCRIPT FOUR ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0000, 0, 0, 0}, 0x00b3 }, // U00B3 # SUPERSCRIPT THREE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0000, 0, 0, 0}, 0x2077 }, // U2077 # SUPERSCRIPT SEVEN ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0000, 0, 0, 0}, 0x207c }, // U207C # SUPERSCRIPT EQUALS SIGN ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0000, 0, 0, 0}, 0x207a }, // U207A # SUPERSCRIPT PLUS SIGN ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0000, 0, 0, 0}, 0x00b2 }, // U00B2 # SUPERSCRIPT TWO ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0000, 0, 0, 0}, 0x2079 }, // U2079 # SUPERSCRIPT NINE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0000, 0, 0, 0}, 0x2075 }, // U2075 # SUPERSCRIPT FIVE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0000, 0x0041, 0, 0}, 0x1eac }, // U1EAC # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0000, 0x0045, 0, 0}, 0x1ec6 }, // U1EC6 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0000, 0x004f, 0, 0}, 0x1ed8 }, // U1ED8 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0000, 0x0061, 0, 0}, 0x1ead }, // U1EAD # LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0000, 0x0065, 0, 0}, 0x1ec7 }, // U1EC7 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0000, 0x006f, 0, 0}, 0x1ed9 }, // U1ED9 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0020, 0, 0, 0}, 0x005e }, // asciicircum ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0021, 0x0041, 0, 0}, 0x1eac }, // U1EAC # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0021, 0x0045, 0, 0}, 0x1ec6 }, // U1EC6 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0021, 0x004f, 0, 0}, 0x1ed8 }, // U1ED8 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0021, 0x0061, 0, 0}, 0x1ead }, // U1EAD # LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0021, 0x0065, 0, 0}, 0x1ec7 }, // U1EC7 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0021, 0x006f, 0, 0}, 0x1ed9 }, // U1ED9 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0028, 0, 0, 0}, 0x207d }, // U207D # SUPERSCRIPT LEFT PARENTHESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0029, 0, 0, 0}, 0x207e }, // U207E # SUPERSCRIPT RIGHT PARENTHESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x002b, 0, 0, 0}, 0x207a }, // U207A # SUPERSCRIPT PLUS SIGN ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x002f, 0, 0, 0}, 0x007c }, // bar ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0030, 0, 0, 0}, 0x2070 }, // U2070 # SUPERSCRIPT ZERO ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0031, 0, 0, 0}, 0x00b9 }, // U00B9 # SUPERSCRIPT ONE ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0032, 0, 0, 0}, 0x00b2 }, // U00B2 # SUPERSCRIPT TWO ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0033, 0, 0, 0}, 0x00b3 }, // U00B3 # SUPERSCRIPT THREE ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0034, 0, 0, 0}, 0x2074 }, // U2074 # SUPERSCRIPT FOUR ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0035, 0, 0, 0}, 0x2075 }, // U2075 # SUPERSCRIPT FIVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0036, 0, 0, 0}, 0x2076 }, // U2076 # SUPERSCRIPT SIX ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0037, 0, 0, 0}, 0x2077 }, // U2077 # SUPERSCRIPT SEVEN ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0038, 0, 0, 0}, 0x2078 }, // U2078 # SUPERSCRIPT EIGHT ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0039, 0, 0, 0}, 0x2079 }, // U2079 # SUPERSCRIPT NINE ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x003d, 0, 0, 0}, 0x207c }, // U207C # SUPERSCRIPT EQUALS SIGN ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0041, 0, 0, 0}, 0x00c2 }, // U00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0043, 0, 0, 0}, 0x0108 }, // U0108 # LATIN CAPITAL LETTER C WITH CIRCUMFLEX ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0045, 0, 0, 0}, 0x00ca }, // U00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0047, 0, 0, 0}, 0x011c }, // U011C # LATIN CAPITAL LETTER G WITH CIRCUMFLEX ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0048, 0, 0, 0}, 0x0124 }, // U0124 # LATIN CAPITAL LETTER H WITH CIRCUMFLEX ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0049, 0, 0, 0}, 0x00ce }, // U00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x004a, 0, 0, 0}, 0x0134 }, // U0134 # LATIN CAPITAL LETTER J WITH CIRCUMFLEX ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x004f, 0, 0, 0}, 0x00d4 }, // U00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0053, 0, 0, 0}, 0x015c }, // U015C # LATIN CAPITAL LETTER S WITH CIRCUMFLEX ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0053, 0x004d, 0, 0}, 0x2120 }, // U2120 # SERVICE MARK ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0054, 0x004d, 0, 0}, 0x2122 }, // U2122 # TRADE MARK SIGN ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0055, 0, 0, 0}, 0x00db }, // U00DB # LATIN CAPITAL LETTER U WITH CIRCUMFLEX ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0057, 0, 0, 0}, 0x0174 }, // U0174 # LATIN CAPITAL LETTER W WITH CIRCUMFLEX ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0059, 0, 0, 0}, 0x0176 }, // U0176 # LATIN CAPITAL LETTER Y WITH CIRCUMFLEX ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005a, 0, 0, 0}, 0x1e90 }, // U1E90 # LATIN CAPITAL LETTER Z WITH CIRCUMFLEX ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x0061, 0, 0}, 0x00aa }, // U00AA # FEMININE ORDINAL INDICATOR ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x0061, 0, 0}, 0x00aa }, // U00AA # FEMININE ORDINAL INDICATOR ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x0068, 0, 0}, 0x02b0 }, // U02B0 # MODIFIER LETTER SMALL H ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x0068, 0, 0}, 0x02b0 }, // U02B0 # MODIFIER LETTER SMALL H ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x0069, 0, 0}, 0x2071 }, // U2071 # SUPERSCRIPT LATIN SMALL LETTER I ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x0069, 0, 0}, 0x2071 }, // U2071 # SUPERSCRIPT LATIN SMALL LETTER I ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x006a, 0, 0}, 0x02b2 }, // U02B2 # MODIFIER LETTER SMALL J ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x006a, 0, 0}, 0x02b2 }, // U02B2 # MODIFIER LETTER SMALL J ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x006c, 0, 0}, 0x02e1 }, // U02E1 # MODIFIER LETTER SMALL L ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x006c, 0, 0}, 0x02e1 }, // U02E1 # MODIFIER LETTER SMALL L ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x006e, 0, 0}, 0x207f }, // U207F # SUPERSCRIPT LATIN SMALL LETTER N ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x006e, 0, 0}, 0x207f }, // U207F # SUPERSCRIPT LATIN SMALL LETTER N ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x006f, 0, 0}, 0x00ba }, // U00BA # MASCULINE ORDINAL INDICATOR ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x006f, 0, 0}, 0x00ba }, // U00BA # MASCULINE ORDINAL INDICATOR ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x0072, 0, 0}, 0x02b3 }, // U02B3 # MODIFIER LETTER SMALL R ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x0072, 0, 0}, 0x02b3 }, // U02B3 # MODIFIER LETTER SMALL R ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x0073, 0, 0}, 0x02e2 }, // U02E2 # MODIFIER LETTER SMALL S ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x0073, 0, 0}, 0x02e2 }, // U02E2 # MODIFIER LETTER SMALL S ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x0077, 0, 0}, 0x02b7 }, // U02B7 # MODIFIER LETTER SMALL W ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x0077, 0, 0}, 0x02b7 }, // U02B7 # MODIFIER LETTER SMALL W ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x0078, 0, 0}, 0x02e3 }, // U02E3 # MODIFIER LETTER SMALL X ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x0078, 0, 0}, 0x02e3 }, // U02E3 # MODIFIER LETTER SMALL X ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x0079, 0, 0}, 0x02b8 }, // U02B8 # MODIFIER LETTER SMALL Y ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x0079, 0, 0}, 0x02b8 }, // U02B8 # MODIFIER LETTER SMALL Y ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x0263, 0, 0}, 0x02e0 }, // U02E0 # MODIFIER LETTER SMALL GAMMA ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x0263, 0, 0}, 0x02e0 }, // U02E0 # MODIFIER LETTER SMALL GAMMA ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x0266, 0, 0}, 0x02b1 }, // U02B1 # MODIFIER LETTER SMALL H WITH HOOK ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x0266, 0, 0}, 0x02b1 }, // U02B1 # MODIFIER LETTER SMALL H WITH HOOK ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x0279, 0, 0}, 0x02b4 }, // U02B4 # MODIFIER LETTER SMALL TURNED R ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x0279, 0, 0}, 0x02b4 }, // U02B4 # MODIFIER LETTER SMALL TURNED R ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x027b, 0, 0}, 0x02b5 }, // U02B5 # MODIFIER LETTER SMALL TURNED R WITH HOOK ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x027b, 0, 0}, 0x02b5 }, // U02B5 # MODIFIER LETTER SMALL TURNED R WITH HOOK ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x0281, 0, 0}, 0x02b6 }, // U02B6 # MODIFIER LETTER SMALL CAPITAL INVERTED R ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x0281, 0, 0}, 0x02b6 }, // U02B6 # MODIFIER LETTER SMALL CAPITAL INVERTED R ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x0295, 0, 0}, 0x02e4 }, // U02E4 # MODIFIER LETTER SMALL REVERSED GLOTTAL STOP ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x0295, 0, 0}, 0x02e4 }, // U02E4 # MODIFIER LETTER SMALL REVERSED GLOTTAL STOP ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0061, 0, 0, 0}, 0x00e2 }, // U00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0063, 0, 0, 0}, 0x0109 }, // U0109 # LATIN SMALL LETTER C WITH CIRCUMFLEX ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0065, 0, 0, 0}, 0x00ea }, // U00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0067, 0, 0, 0}, 0x011d }, // U011D # LATIN SMALL LETTER G WITH CIRCUMFLEX ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0068, 0, 0, 0}, 0x0125 }, // U0125 # LATIN SMALL LETTER H WITH CIRCUMFLEX ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0069, 0, 0, 0}, 0x00ee }, // U00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x006a, 0, 0, 0}, 0x0135 }, // U0135 # LATIN SMALL LETTER J WITH CIRCUMFLEX ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x006f, 0, 0, 0}, 0x00f4 }, // U00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0073, 0, 0, 0}, 0x015d }, // U015D # LATIN SMALL LETTER S WITH CIRCUMFLEX ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0075, 0, 0, 0}, 0x00fb }, // U00FB # LATIN SMALL LETTER U WITH CIRCUMFLEX ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0077, 0, 0, 0}, 0x0175 }, // U0175 # LATIN SMALL LETTER W WITH CIRCUMFLEX ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0079, 0, 0, 0}, 0x0177 }, // U0177 # LATIN SMALL LETTER Y WITH CIRCUMFLEX ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x007a, 0, 0, 0}, 0x1e91 }, // U1E91 # LATIN SMALL LETTER Z WITH CIRCUMFLEX ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x1ea0, 0, 0, 0}, 0x1eac }, // U1EAC # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x1ea1, 0, 0, 0}, 0x1ead }, // U1EAD # LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x1eb8, 0, 0, 0}, 0x1ec6 }, // U1EC6 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x1eb9, 0, 0, 0}, 0x1ec7 }, // U1EC7 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x1ecc, 0, 0, 0}, 0x1ed8 }, // U1ED8 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x1ecd, 0, 0, 0}, 0x1ed9 }, // U1ED9 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x2212, 0, 0, 0}, 0x207b }, // U207B # SUPERSCRIPT MINUS ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x4e00, 0, 0, 0}, 0x3192 }, // U3192 # IDEOGRAPHIC ANNOTATION ONE MARK ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x4e01, 0, 0, 0}, 0x319c }, // U319C # IDEOGRAPHIC ANNOTATION FOURTH MARK ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x4e09, 0, 0, 0}, 0x3194 }, // U3194 # IDEOGRAPHIC ANNOTATION THREE MARK ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x4e0a, 0, 0, 0}, 0x3196 }, // U3196 # IDEOGRAPHIC ANNOTATION TOP MARK ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x4e0b, 0, 0, 0}, 0x3198 }, // U3198 # IDEOGRAPHIC ANNOTATION BOTTOM MARK ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x4e19, 0, 0, 0}, 0x319b }, // U319B # IDEOGRAPHIC ANNOTATION THIRD MARK ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x4e2d, 0, 0, 0}, 0x3197 }, // U3197 # IDEOGRAPHIC ANNOTATION MIDDLE MARK ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x4e59, 0, 0, 0}, 0x319a }, // U319A # IDEOGRAPHIC ANNOTATION SECOND MARK ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x4e8c, 0, 0, 0}, 0x3193 }, // U3193 # IDEOGRAPHIC ANNOTATION TWO MARK ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x4eba, 0, 0, 0}, 0x319f }, // U319F # IDEOGRAPHIC ANNOTATION MAN MARK ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x56db, 0, 0, 0}, 0x3195 }, // U3195 # IDEOGRAPHIC ANNOTATION FOUR MARK ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x5730, 0, 0, 0}, 0x319e }, // U319E # IDEOGRAPHIC ANNOTATION EARTH MARK ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x5929, 0, 0, 0}, 0x319d }, // U319D # IDEOGRAPHIC ANNOTATION HEAVEN MARK ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x7532, 0, 0, 0}, 0x3199 }, // U3199 # IDEOGRAPHIC ANNOTATION FIRST MARK ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, UNITIZE(Qt::Key_Dead_Belowdot), 0x0041, 0, 0}, 0x1eac }, // U1EAC # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, UNITIZE(Qt::Key_Dead_Belowdot), 0x0045, 0, 0}, 0x1ec6 }, // U1EC6 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, UNITIZE(Qt::Key_Dead_Belowdot), 0x004f, 0, 0}, 0x1ed8 }, // U1ED8 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, UNITIZE(Qt::Key_Dead_Belowdot), 0x0061, 0, 0}, 0x1ead }, // U1EAD # LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, UNITIZE(Qt::Key_Dead_Belowdot), 0x0065, 0, 0}, 0x1ec7 }, // U1EC7 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x005e, UNITIZE(Qt::Key_Dead_Belowdot), 0x006f, 0, 0}, 0x1ed9 }, // U1ED9 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0, 0, 0}, 0x2085 }, // U2085 # SUBSCRIPT FIVE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0, 0, 0}, 0x2087 }, // U2087 # SUBSCRIPT SEVEN ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0, 0, 0}, 0x2082 }, // U2082 # SUBSCRIPT TWO ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0, 0, 0}, 0x2085 }, // U2085 # SUBSCRIPT FIVE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0, 0, 0}, 0x2084 }, // U2084 # SUBSCRIPT FOUR ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0, 0, 0}, 0x2084 }, // U2084 # SUBSCRIPT FOUR ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0, 0, 0}, 0x2086 }, // U2086 # SUBSCRIPT SIX ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0, 0, 0}, 0x2081 }, // U2081 # SUBSCRIPT ONE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0, 0, 0}, 0x208a }, // U208A # SUBSCRIPT PLUS SIGN ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0, 0, 0}, 0x2088 }, // U2088 # SUBSCRIPT EIGHT ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0, 0, 0}, 0x2087 }, // U2087 # SUBSCRIPT SEVEN ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0, 0, 0}, 0x208a }, // U208A # SUBSCRIPT PLUS SIGN ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0, 0, 0}, 0x2080 }, // U2080 # SUBSCRIPT ZERO ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0, 0, 0}, 0x2083 }, // U2083 # SUBSCRIPT THREE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0, 0, 0}, 0x2082 }, // U2082 # SUBSCRIPT TWO ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0, 0, 0}, 0x2083 }, // U2083 # SUBSCRIPT THREE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0, 0, 0}, 0x2086 }, // U2086 # SUBSCRIPT SIX ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0, 0, 0}, 0x2088 }, // U2088 # SUBSCRIPT EIGHT ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0, 0, 0}, 0x2089 }, // U2089 # SUBSCRIPT NINE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0, 0, 0}, 0x2089 }, // U2089 # SUBSCRIPT NINE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0, 0, 0}, 0x2080 }, // U2080 # SUBSCRIPT ZERO ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0, 0, 0}, 0x2082 }, // U2082 # SUBSCRIPT TWO ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0, 0, 0}, 0x2081 }, // U2081 # SUBSCRIPT ONE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0, 0, 0}, 0x2082 }, // U2082 # SUBSCRIPT TWO ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0, 0, 0}, 0x208c }, // U208C # SUBSCRIPT EQUALS SIGN ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0, 0, 0}, 0x208c }, // U208C # SUBSCRIPT EQUALS SIGN ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0x004c, 0, 0}, 0x1e38 }, // U1E38 # LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0x004f, 0, 0}, 0x022c }, // U022C # LATIN CAPITAL LETTER O WITH TILDE AND MACRON ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0x0052, 0, 0}, 0x1e5c }, // U1E5C # LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0x006c, 0, 0}, 0x1e39 }, // U1E39 # LATIN SMALL LETTER L WITH DOT BELOW AND MACRON ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0x006f, 0, 0}, 0x022d }, // U022D # LATIN SMALL LETTER O WITH TILDE AND MACRON ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0x0072, 0, 0}, 0x1e5d }, // U1E5D # LATIN SMALL LETTER R WITH DOT BELOW AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0021, 0x004c, 0, 0}, 0x1e38 }, // U1E38 # LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0021, 0x0052, 0, 0}, 0x1e5c }, // U1E5C # LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0021, 0x006c, 0, 0}, 0x1e39 }, // U1E39 # LATIN SMALL LETTER L WITH DOT BELOW AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0021, 0x0072, 0, 0}, 0x1e5d }, // U1E5D # LATIN SMALL LETTER R WITH DOT BELOW AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0022, 0x0041, 0, 0}, 0x01de }, // U01DE # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0022, 0x004f, 0, 0}, 0x022a }, // U022A # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0022, 0x0055, 0, 0}, 0x01d5 }, // U01D5 # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0022, 0x0061, 0, 0}, 0x01df }, // U01DF # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0022, 0x006f, 0, 0}, 0x022b }, // U022B # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0022, 0x0075, 0, 0}, 0x01d6 }, // U01D6 # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0028, 0, 0, 0}, 0x208d }, // U208D # SUBSCRIPT LEFT PARENTHESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0028, 0, 0, 0}, 0x208d }, // U208D # SUBSCRIPT LEFT PARENTHESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0029, 0, 0, 0}, 0x208e }, // U208E # SUBSCRIPT RIGHT PARENTHESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0029, 0, 0, 0}, 0x208e }, // U208E # SUBSCRIPT RIGHT PARENTHESIS ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x002b, 0, 0, 0}, 0x208a }, // U208A # SUBSCRIPT PLUS SIGN ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x002b, 0, 0, 0}, 0x208a }, // U208A # SUBSCRIPT PLUS SIGN ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x002e, 0x0041, 0, 0}, 0x01e0 }, // U01E0 # LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x002e, 0x004f, 0, 0}, 0x0230 }, // U0230 # LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x002e, 0x0061, 0, 0}, 0x01e1 }, // U01E1 # LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x002e, 0x006f, 0, 0}, 0x0231 }, // U0231 # LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0030, 0, 0, 0}, 0x2080 }, // U2080 # SUBSCRIPT ZERO ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0030, 0, 0, 0}, 0x2080 }, // U2080 # SUBSCRIPT ZERO ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0031, 0, 0, 0}, 0x2081 }, // U2081 # SUBSCRIPT ONE ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0031, 0, 0, 0}, 0x2081 }, // U2081 # SUBSCRIPT ONE ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0032, 0, 0, 0}, 0x2082 }, // U2082 # SUBSCRIPT TWO ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0032, 0, 0, 0}, 0x2082 }, // U2082 # SUBSCRIPT TWO ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0033, 0, 0, 0}, 0x2083 }, // U2083 # SUBSCRIPT THREE ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0033, 0, 0, 0}, 0x2083 }, // U2083 # SUBSCRIPT THREE ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0034, 0, 0, 0}, 0x2084 }, // U2084 # SUBSCRIPT FOUR ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0034, 0, 0, 0}, 0x2084 }, // U2084 # SUBSCRIPT FOUR ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0035, 0, 0, 0}, 0x2085 }, // U2085 # SUBSCRIPT FIVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0035, 0, 0, 0}, 0x2085 }, // U2085 # SUBSCRIPT FIVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0036, 0, 0, 0}, 0x2086 }, // U2086 # SUBSCRIPT SIX ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0036, 0, 0, 0}, 0x2086 }, // U2086 # SUBSCRIPT SIX ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0037, 0, 0, 0}, 0x2087 }, // U2087 # SUBSCRIPT SEVEN ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0037, 0, 0, 0}, 0x2087 }, // U2087 # SUBSCRIPT SEVEN ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0038, 0, 0, 0}, 0x2088 }, // U2088 # SUBSCRIPT EIGHT ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0038, 0, 0, 0}, 0x2088 }, // U2088 # SUBSCRIPT EIGHT ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0039, 0, 0, 0}, 0x2089 }, // U2089 # SUBSCRIPT NINE ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0039, 0, 0, 0}, 0x2089 }, // U2089 # SUBSCRIPT NINE ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x003b, 0x004f, 0, 0}, 0x01ec }, // U01EC # LATIN CAPITAL LETTER O WITH OGONEK AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x003b, 0x006f, 0, 0}, 0x01ed }, // U01ED # LATIN SMALL LETTER O WITH OGONEK AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x003d, 0, 0, 0}, 0x208c }, // U208C # SUBSCRIPT EQUALS SIGN ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x003d, 0, 0, 0}, 0x208c }, // U208C # SUBSCRIPT EQUALS SIGN ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0041, 0, 0, 0}, 0x0100 }, // U0100 # LATIN CAPITAL LETTER A WITH MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0045, 0, 0, 0}, 0x0112 }, // U0112 # LATIN CAPITAL LETTER E WITH MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0047, 0, 0, 0}, 0x1e20 }, // U1E20 # LATIN CAPITAL LETTER G WITH MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0049, 0, 0, 0}, 0x012a }, // U012A # LATIN CAPITAL LETTER I WITH MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x004f, 0, 0, 0}, 0x014c }, // U014C # LATIN CAPITAL LETTER O WITH MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0055, 0, 0, 0}, 0x016a }, // U016A # LATIN CAPITAL LETTER U WITH MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0059, 0, 0, 0}, 0x0232 }, // U0232 # LATIN CAPITAL LETTER Y WITH MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0061, 0, 0, 0}, 0x0101 }, // U0101 # LATIN SMALL LETTER A WITH MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0065, 0, 0, 0}, 0x0113 }, // U0113 # LATIN SMALL LETTER E WITH MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0067, 0, 0, 0}, 0x1e21 }, // U1E21 # LATIN SMALL LETTER G WITH MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0069, 0, 0, 0}, 0x012b }, // U012B # LATIN SMALL LETTER I WITH MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x006f, 0, 0, 0}, 0x014d }, // U014D # LATIN SMALL LETTER O WITH MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0075, 0, 0, 0}, 0x016b }, // U016B # LATIN SMALL LETTER U WITH MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0079, 0, 0, 0}, 0x0233 }, // U0233 # LATIN SMALL LETTER Y WITH MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x007e, 0x004f, 0, 0}, 0x022c }, // U022C # LATIN CAPITAL LETTER O WITH TILDE AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x007e, 0x006f, 0, 0}, 0x022d }, // U022D # LATIN SMALL LETTER O WITH TILDE AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x00c4, 0, 0, 0}, 0x01de }, // U01DE # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x00c6, 0, 0, 0}, 0x01e2 }, // U01E2 # LATIN CAPITAL LETTER AE WITH MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x00d5, 0, 0, 0}, 0x022c }, // U022C # LATIN CAPITAL LETTER O WITH TILDE AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x00d6, 0, 0, 0}, 0x022a }, // U022A # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x00dc, 0, 0, 0}, 0x01d5 }, // U01D5 # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x00e4, 0, 0, 0}, 0x01df }, // U01DF # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x00e6, 0, 0, 0}, 0x01e3 }, // U01E3 # LATIN SMALL LETTER AE WITH MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x00f5, 0, 0, 0}, 0x022d }, // U022D # LATIN SMALL LETTER O WITH TILDE AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x00f6, 0, 0, 0}, 0x022b }, // U022B # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x00fc, 0, 0, 0}, 0x01d6 }, // U01D6 # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x01ea, 0, 0, 0}, 0x01ec }, // U01EC # LATIN CAPITAL LETTER O WITH OGONEK AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x01eb, 0, 0, 0}, 0x01ed }, // U01ED # LATIN SMALL LETTER O WITH OGONEK AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0226, 0, 0, 0}, 0x01e0 }, // U01E0 # LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0227, 0, 0, 0}, 0x01e1 }, // U01E1 # LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x022e, 0, 0, 0}, 0x0230 }, // U0230 # LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x022f, 0, 0, 0}, 0x0231 }, // U0231 # LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0391, 0, 0, 0}, 0x1fb9 }, // U1FB9 # GREEK CAPITAL LETTER ALPHA WITH MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0399, 0, 0, 0}, 0x1fd9 }, // U1FD9 # GREEK CAPITAL LETTER IOTA WITH MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x03a5, 0, 0, 0}, 0x1fe9 }, // U1FE9 # GREEK CAPITAL LETTER UPSILON WITH MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x03b1, 0, 0, 0}, 0x1fb1 }, // U1FB1 # GREEK SMALL LETTER ALPHA WITH MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x03b9, 0, 0, 0}, 0x1fd1 }, // U1FD1 # GREEK SMALL LETTER IOTA WITH MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x03c5, 0, 0, 0}, 0x1fe1 }, // U1FE1 # GREEK SMALL LETTER UPSILON WITH MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0418, 0, 0, 0}, 0x04e2 }, // U04E2 # CYRILLIC CAPITAL LETTER I WITH MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0423, 0, 0, 0}, 0x04ee }, // U04EE # CYRILLIC CAPITAL LETTER U WITH MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0438, 0, 0, 0}, 0x04e3 }, // U04E3 # CYRILLIC SMALL LETTER I WITH MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0443, 0, 0, 0}, 0x04ef }, // U04EF # CYRILLIC SMALL LETTER U WITH MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x1e36, 0, 0, 0}, 0x1e38 }, // U1E38 # LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x1e37, 0, 0, 0}, 0x1e39 }, // U1E39 # LATIN SMALL LETTER L WITH DOT BELOW AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x1e5a, 0, 0, 0}, 0x1e5c }, // U1E5C # LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x1e5b, 0, 0, 0}, 0x1e5d }, // U1E5D # LATIN SMALL LETTER R WITH DOT BELOW AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x2212, 0, 0, 0}, 0x208b }, // U208B # SUBSCRIPT MINUS ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x2212, 0, 0, 0}, 0x208b }, // U208B # SUBSCRIPT MINUS ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, UNITIZE(Qt::Key_Dead_Tilde), 0x004f, 0, 0}, 0x022c }, // U022C # LATIN CAPITAL LETTER O WITH TILDE AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, UNITIZE(Qt::Key_Dead_Tilde), 0x006f, 0, 0}, 0x022d }, // U022D # LATIN SMALL LETTER O WITH TILDE AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, UNITIZE(Qt::Key_Dead_Abovedot), 0x0041, 0, 0}, 0x01e0 }, // U01E0 # LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, UNITIZE(Qt::Key_Dead_Abovedot), 0x004f, 0, 0}, 0x0230 }, // U0230 # LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, UNITIZE(Qt::Key_Dead_Abovedot), 0x0061, 0, 0}, 0x01e1 }, // U01E1 # LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, UNITIZE(Qt::Key_Dead_Abovedot), 0x006f, 0, 0}, 0x0231 }, // U0231 # LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, UNITIZE(Qt::Key_Dead_Diaeresis), 0x0041, 0, 0}, 0x01de }, // U01DE # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, UNITIZE(Qt::Key_Dead_Diaeresis), 0x004f, 0, 0}, 0x022a }, // U022A # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, UNITIZE(Qt::Key_Dead_Diaeresis), 0x0055, 0, 0}, 0x01d5 }, // U01D5 # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, UNITIZE(Qt::Key_Dead_Diaeresis), 0x0061, 0, 0}, 0x01df }, // U01DF # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, UNITIZE(Qt::Key_Dead_Diaeresis), 0x006f, 0, 0}, 0x022b }, // U022B # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, UNITIZE(Qt::Key_Dead_Diaeresis), 0x0075, 0, 0}, 0x01d6 }, // U01D6 # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, UNITIZE(Qt::Key_Dead_Ogonek), 0x004f, 0, 0}, 0x01ec }, // U01EC # LATIN CAPITAL LETTER O WITH OGONEK AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, UNITIZE(Qt::Key_Dead_Ogonek), 0x006f, 0, 0}, 0x01ed }, // U01ED # LATIN SMALL LETTER O WITH OGONEK AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, UNITIZE(Qt::Key_Dead_Belowdot), 0x004c, 0, 0}, 0x1e38 }, // U1E38 # LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, UNITIZE(Qt::Key_Dead_Belowdot), 0x0052, 0, 0}, 0x1e5c }, // U1E5C # LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, UNITIZE(Qt::Key_Dead_Belowdot), 0x006c, 0, 0}, 0x1e39 }, // U1E39 # LATIN SMALL LETTER L WITH DOT BELOW AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x005f, UNITIZE(Qt::Key_Dead_Belowdot), 0x0072, 0, 0}, 0x1e5d }, // U1E5D # LATIN SMALL LETTER R WITH DOT BELOW AND MACRON ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0000, 0, 0, 0}, 0x1edd }, // U1EDD # LATIN SMALL LETTER O WITH HORN AND GRAVE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0000, 0, 0, 0}, 0x1eea }, // U1EEA # LATIN CAPITAL LETTER U WITH HORN AND GRAVE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0000, 0, 0, 0}, 0x1edc }, // U1EDC # LATIN CAPITAL LETTER O WITH HORN AND GRAVE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0000, 0, 0, 0}, 0x1eeb }, // U1EEB # LATIN SMALL LETTER U WITH HORN AND GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0020, 0, 0, 0}, 0x0060 }, // grave ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0022, 0x0055, 0, 0}, 0x01db }, // U01DB # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0022, 0x0075, 0, 0}, 0x01dc }, // U01DC # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0022, 0x03b9, 0, 0}, 0x1fd2 }, // U1FD2 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0022, 0x03c5, 0, 0}, 0x1fe2 }, // U1FE2 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0028, 0x0391, 0, 0}, 0x1f0b }, // U1F0B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0028, 0x0395, 0, 0}, 0x1f1b }, // U1F1B # GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0028, 0x0397, 0, 0}, 0x1f2b }, // U1F2B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0028, 0x0399, 0, 0}, 0x1f3b }, // U1F3B # GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0028, 0x039f, 0, 0}, 0x1f4b }, // U1F4B # GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0028, 0x03a5, 0, 0}, 0x1f5b }, // U1F5B # GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0028, 0x03a9, 0, 0}, 0x1f6b }, // U1F6B # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0028, 0x03b1, 0, 0}, 0x1f03 }, // U1F03 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0028, 0x03b5, 0, 0}, 0x1f13 }, // U1F13 # GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0028, 0x03b7, 0, 0}, 0x1f23 }, // U1F23 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0028, 0x03b9, 0, 0}, 0x1f33 }, // U1F33 # GREEK SMALL LETTER IOTA WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0028, 0x03bf, 0, 0}, 0x1f43 }, // U1F43 # GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0028, 0x03c5, 0, 0}, 0x1f53 }, // U1F53 # GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0028, 0x03c9, 0, 0}, 0x1f63 }, // U1F63 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0029, 0x0391, 0, 0}, 0x1f0a }, // U1F0A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0029, 0x0395, 0, 0}, 0x1f1a }, // U1F1A # GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0029, 0x0397, 0, 0}, 0x1f2a }, // U1F2A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0029, 0x0399, 0, 0}, 0x1f3a }, // U1F3A # GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0029, 0x039f, 0, 0}, 0x1f4a }, // U1F4A # GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0029, 0x03a9, 0, 0}, 0x1f6a }, // U1F6A # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0029, 0x03b1, 0, 0}, 0x1f02 }, // U1F02 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0029, 0x03b5, 0, 0}, 0x1f12 }, // U1F12 # GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0029, 0x03b7, 0, 0}, 0x1f22 }, // U1F22 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0029, 0x03b9, 0, 0}, 0x1f32 }, // U1F32 # GREEK SMALL LETTER IOTA WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0029, 0x03bf, 0, 0}, 0x1f42 }, // U1F42 # GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0029, 0x03c5, 0, 0}, 0x1f52 }, // U1F52 # GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0029, 0x03c9, 0, 0}, 0x1f62 }, // U1F62 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x002b, 0x004f, 0, 0}, 0x1edc }, // U1EDC # LATIN CAPITAL LETTER O WITH HORN AND GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x002b, 0x0055, 0, 0}, 0x1eea }, // U1EEA # LATIN CAPITAL LETTER U WITH HORN AND GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x002b, 0x006f, 0, 0}, 0x1edd }, // U1EDD # LATIN SMALL LETTER O WITH HORN AND GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x002b, 0x0075, 0, 0}, 0x1eeb }, // U1EEB # LATIN SMALL LETTER U WITH HORN AND GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0041, 0, 0, 0}, 0x00c0 }, // U00C0 # LATIN CAPITAL LETTER A WITH GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0045, 0, 0, 0}, 0x00c8 }, // U00C8 # LATIN CAPITAL LETTER E WITH GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0049, 0, 0, 0}, 0x00cc }, // U00CC # LATIN CAPITAL LETTER I WITH GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x004e, 0, 0, 0}, 0x01f8 }, // U01F8 # LATIN CAPITAL LETTER N WITH GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x004f, 0, 0, 0}, 0x00d2 }, // U00D2 # LATIN CAPITAL LETTER O WITH GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0055, 0, 0, 0}, 0x00d9 }, // U00D9 # LATIN CAPITAL LETTER U WITH GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0055, 0x0041, 0, 0}, 0x1eb0 }, // U1EB0 # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0055, 0x0061, 0, 0}, 0x1eb1 }, // U1EB1 # LATIN SMALL LETTER A WITH BREVE AND GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0057, 0, 0, 0}, 0x1e80 }, // U1E80 # LATIN CAPITAL LETTER W WITH GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0059, 0, 0, 0}, 0x1ef2 }, // U1EF2 # LATIN CAPITAL LETTER Y WITH GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x005e, 0x0041, 0, 0}, 0x1ea6 }, // U1EA6 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x005e, 0x0045, 0, 0}, 0x1ec0 }, // U1EC0 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x005e, 0x004f, 0, 0}, 0x1ed2 }, // U1ED2 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x005e, 0x0061, 0, 0}, 0x1ea7 }, // U1EA7 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x005e, 0x0065, 0, 0}, 0x1ec1 }, // U1EC1 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x005e, 0x006f, 0, 0}, 0x1ed3 }, // U1ED3 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x005f, 0x0045, 0, 0}, 0x1e14 }, // U1E14 # LATIN CAPITAL LETTER E WITH MACRON AND GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x005f, 0x004f, 0, 0}, 0x1e50 }, // U1E50 # LATIN CAPITAL LETTER O WITH MACRON AND GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x005f, 0x0065, 0, 0}, 0x1e15 }, // U1E15 # LATIN SMALL LETTER E WITH MACRON AND GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x005f, 0x006f, 0, 0}, 0x1e51 }, // U1E51 # LATIN SMALL LETTER O WITH MACRON AND GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0061, 0, 0, 0}, 0x00e0 }, // U00E0 # LATIN SMALL LETTER A WITH GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0062, 0x0041, 0, 0}, 0x1eb0 }, // U1EB0 # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0062, 0x0061, 0, 0}, 0x1eb1 }, // U1EB1 # LATIN SMALL LETTER A WITH BREVE AND GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0065, 0, 0, 0}, 0x00e8 }, // U00E8 # LATIN SMALL LETTER E WITH GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0069, 0, 0, 0}, 0x00ec }, // U00EC # LATIN SMALL LETTER I WITH GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x006e, 0, 0, 0}, 0x01f9 }, // U01F9 # LATIN SMALL LETTER N WITH GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x006f, 0, 0, 0}, 0x00f2 }, // U00F2 # LATIN SMALL LETTER O WITH GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0075, 0, 0, 0}, 0x00f9 }, // U00F9 # LATIN SMALL LETTER U WITH GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0077, 0, 0, 0}, 0x1e81 }, // U1E81 # LATIN SMALL LETTER W WITH GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0079, 0, 0, 0}, 0x1ef3 }, // U1EF3 # LATIN SMALL LETTER Y WITH GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x00af, 0x0045, 0, 0}, 0x1e14 }, // U1E14 # LATIN CAPITAL LETTER E WITH MACRON AND GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x00af, 0x004f, 0, 0}, 0x1e50 }, // U1E50 # LATIN CAPITAL LETTER O WITH MACRON AND GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x00af, 0x0065, 0, 0}, 0x1e15 }, // U1E15 # LATIN SMALL LETTER E WITH MACRON AND GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x00af, 0x006f, 0, 0}, 0x1e51 }, // U1E51 # LATIN SMALL LETTER O WITH MACRON AND GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x00c2, 0, 0, 0}, 0x1ea6 }, // U1EA6 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x00ca, 0, 0, 0}, 0x1ec0 }, // U1EC0 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x00d4, 0, 0, 0}, 0x1ed2 }, // U1ED2 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x00dc, 0, 0, 0}, 0x01db }, // U01DB # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x00e2, 0, 0, 0}, 0x1ea7 }, // U1EA7 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x00ea, 0, 0, 0}, 0x1ec1 }, // U1EC1 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x00f4, 0, 0, 0}, 0x1ed3 }, // U1ED3 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x00fc, 0, 0, 0}, 0x01dc }, // U01DC # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0102, 0, 0, 0}, 0x1eb0 }, // U1EB0 # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0103, 0, 0, 0}, 0x1eb1 }, // U1EB1 # LATIN SMALL LETTER A WITH BREVE AND GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0112, 0, 0, 0}, 0x1e14 }, // U1E14 # LATIN CAPITAL LETTER E WITH MACRON AND GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0113, 0, 0, 0}, 0x1e15 }, // U1E15 # LATIN SMALL LETTER E WITH MACRON AND GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x014c, 0, 0, 0}, 0x1e50 }, // U1E50 # LATIN CAPITAL LETTER O WITH MACRON AND GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x014d, 0, 0, 0}, 0x1e51 }, // U1E51 # LATIN SMALL LETTER O WITH MACRON AND GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0313, 0x0391, 0, 0}, 0x1f0a }, // U1F0A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0313, 0x0395, 0, 0}, 0x1f1a }, // U1F1A # GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0313, 0x0397, 0, 0}, 0x1f2a }, // U1F2A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0313, 0x0399, 0, 0}, 0x1f3a }, // U1F3A # GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0313, 0x039f, 0, 0}, 0x1f4a }, // U1F4A # GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0313, 0x03a9, 0, 0}, 0x1f6a }, // U1F6A # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0313, 0x03b1, 0, 0}, 0x1f02 }, // U1F02 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0313, 0x03b5, 0, 0}, 0x1f12 }, // U1F12 # GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0313, 0x03b7, 0, 0}, 0x1f22 }, // U1F22 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0313, 0x03b9, 0, 0}, 0x1f32 }, // U1F32 # GREEK SMALL LETTER IOTA WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0313, 0x03bf, 0, 0}, 0x1f42 }, // U1F42 # GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0313, 0x03c5, 0, 0}, 0x1f52 }, // U1F52 # GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0313, 0x03c9, 0, 0}, 0x1f62 }, // U1F62 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0314, 0x0391, 0, 0}, 0x1f0b }, // U1F0B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0314, 0x0395, 0, 0}, 0x1f1b }, // U1F1B # GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0314, 0x0397, 0, 0}, 0x1f2b }, // U1F2B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0314, 0x0399, 0, 0}, 0x1f3b }, // U1F3B # GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0314, 0x039f, 0, 0}, 0x1f4b }, // U1F4B # GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0314, 0x03a5, 0, 0}, 0x1f5b }, // U1F5B # GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0314, 0x03a9, 0, 0}, 0x1f6b }, // U1F6B # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0314, 0x03b1, 0, 0}, 0x1f03 }, // U1F03 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0314, 0x03b5, 0, 0}, 0x1f13 }, // U1F13 # GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0314, 0x03b7, 0, 0}, 0x1f23 }, // U1F23 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0314, 0x03b9, 0, 0}, 0x1f33 }, // U1F33 # GREEK SMALL LETTER IOTA WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0314, 0x03bf, 0, 0}, 0x1f43 }, // U1F43 # GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0314, 0x03c5, 0, 0}, 0x1f53 }, // U1F53 # GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0314, 0x03c9, 0, 0}, 0x1f63 }, // U1F63 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0391, 0, 0, 0}, 0x1fba }, // U1FBA # GREEK CAPITAL LETTER ALPHA WITH VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0395, 0, 0, 0}, 0x1fc8 }, // U1FC8 # GREEK CAPITAL LETTER EPSILON WITH VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0397, 0, 0, 0}, 0x1fca }, // U1FCA # GREEK CAPITAL LETTER ETA WITH VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0399, 0, 0, 0}, 0x1fda }, // U1FDA # GREEK CAPITAL LETTER IOTA WITH VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x039f, 0, 0, 0}, 0x1ff8 }, // U1FF8 # GREEK CAPITAL LETTER OMICRON WITH VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x03a5, 0, 0, 0}, 0x1fea }, // U1FEA # GREEK CAPITAL LETTER UPSILON WITH VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x03a9, 0, 0, 0}, 0x1ffa }, // U1FFA # GREEK CAPITAL LETTER OMEGA WITH VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x03b1, 0, 0, 0}, 0x1f70 }, // U1F70 # GREEK SMALL LETTER ALPHA WITH VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x03b5, 0, 0, 0}, 0x1f72 }, // U1F72 # GREEK SMALL LETTER EPSILON WITH VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x03b7, 0, 0, 0}, 0x1f74 }, // U1F74 # GREEK SMALL LETTER ETA WITH VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x03b9, 0, 0, 0}, 0x1f76 }, // U1F76 # GREEK SMALL LETTER IOTA WITH VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x03bf, 0, 0, 0}, 0x1f78 }, // U1F78 # GREEK SMALL LETTER OMICRON WITH VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x03c5, 0, 0, 0}, 0x1f7a }, // U1F7A # GREEK SMALL LETTER UPSILON WITH VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x03c9, 0, 0, 0}, 0x1f7c }, // U1F7C # GREEK SMALL LETTER OMEGA WITH VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x03ca, 0, 0, 0}, 0x1fd2 }, // U1FD2 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x03cb, 0, 0, 0}, 0x1fe2 }, // U1FE2 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0415, 0, 0, 0}, 0x0400 }, // U0400 # CYRILLIC CAPITAL LETTER IE WITH GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0418, 0, 0, 0}, 0x040d }, // U040D # CYRILLIC CAPITAL LETTER I WITH GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0435, 0, 0, 0}, 0x0450 }, // U0450 # CYRILLIC SMALL LETTER IE WITH GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0438, 0, 0, 0}, 0x045d }, // U045D # CYRILLIC SMALL LETTER I WITH GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f00, 0, 0, 0}, 0x1f02 }, // U1F02 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f01, 0, 0, 0}, 0x1f03 }, // U1F03 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f08, 0, 0, 0}, 0x1f0a }, // U1F0A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f09, 0, 0, 0}, 0x1f0b }, // U1F0B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f10, 0, 0, 0}, 0x1f12 }, // U1F12 # GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f11, 0, 0, 0}, 0x1f13 }, // U1F13 # GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f18, 0, 0, 0}, 0x1f1a }, // U1F1A # GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f19, 0, 0, 0}, 0x1f1b }, // U1F1B # GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f20, 0, 0, 0}, 0x1f22 }, // U1F22 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f21, 0, 0, 0}, 0x1f23 }, // U1F23 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f28, 0, 0, 0}, 0x1f2a }, // U1F2A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f29, 0, 0, 0}, 0x1f2b }, // U1F2B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f30, 0, 0, 0}, 0x1f32 }, // U1F32 # GREEK SMALL LETTER IOTA WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f31, 0, 0, 0}, 0x1f33 }, // U1F33 # GREEK SMALL LETTER IOTA WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f38, 0, 0, 0}, 0x1f3a }, // U1F3A # GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f39, 0, 0, 0}, 0x1f3b }, // U1F3B # GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f40, 0, 0, 0}, 0x1f42 }, // U1F42 # GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f41, 0, 0, 0}, 0x1f43 }, // U1F43 # GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f48, 0, 0, 0}, 0x1f4a }, // U1F4A # GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f49, 0, 0, 0}, 0x1f4b }, // U1F4B # GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f50, 0, 0, 0}, 0x1f52 }, // U1F52 # GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f51, 0, 0, 0}, 0x1f53 }, // U1F53 # GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f59, 0, 0, 0}, 0x1f5b }, // U1F5B # GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f60, 0, 0, 0}, 0x1f62 }, // U1F62 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f61, 0, 0, 0}, 0x1f63 }, // U1F63 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f68, 0, 0, 0}, 0x1f6a }, // U1F6A # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f69, 0, 0, 0}, 0x1f6b }, // U1F6B # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, UNITIZE(Qt::Key_Dead_Circumflex), 0x0041, 0, 0}, 0x1ea6 }, // U1EA6 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, UNITIZE(Qt::Key_Dead_Circumflex), 0x0045, 0, 0}, 0x1ec0 }, // U1EC0 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, UNITIZE(Qt::Key_Dead_Circumflex), 0x004f, 0, 0}, 0x1ed2 }, // U1ED2 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, UNITIZE(Qt::Key_Dead_Circumflex), 0x0061, 0, 0}, 0x1ea7 }, // U1EA7 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, UNITIZE(Qt::Key_Dead_Circumflex), 0x0065, 0, 0}, 0x1ec1 }, // U1EC1 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, UNITIZE(Qt::Key_Dead_Circumflex), 0x006f, 0, 0}, 0x1ed3 }, // U1ED3 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, UNITIZE(Qt::Key_Dead_Macron), 0x0045, 0, 0}, 0x1e14 }, // U1E14 # LATIN CAPITAL LETTER E WITH MACRON AND GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, UNITIZE(Qt::Key_Dead_Macron), 0x004f, 0, 0}, 0x1e50 }, // U1E50 # LATIN CAPITAL LETTER O WITH MACRON AND GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, UNITIZE(Qt::Key_Dead_Macron), 0x0065, 0, 0}, 0x1e15 }, // U1E15 # LATIN SMALL LETTER E WITH MACRON AND GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, UNITIZE(Qt::Key_Dead_Macron), 0x006f, 0, 0}, 0x1e51 }, // U1E51 # LATIN SMALL LETTER O WITH MACRON AND GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, UNITIZE(Qt::Key_Dead_Breve), 0x0041, 0, 0}, 0x1eb0 }, // U1EB0 # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, UNITIZE(Qt::Key_Dead_Breve), 0x0061, 0, 0}, 0x1eb1 }, // U1EB1 # LATIN SMALL LETTER A WITH BREVE AND GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, UNITIZE(Qt::Key_Dead_Diaeresis), 0x0055, 0, 0}, 0x01db }, // U01DB # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, UNITIZE(Qt::Key_Dead_Diaeresis), 0x0075, 0, 0}, 0x01dc }, // U01DC # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, UNITIZE(Qt::Key_Dead_Diaeresis), 0x03b9, 0, 0}, 0x1fd2 }, // U1FD2 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, UNITIZE(Qt::Key_Dead_Diaeresis), 0x03c5, 0, 0}, 0x1fe2 }, // U1FE2 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, UNITIZE(Qt::Key_Dead_Horn), 0x004f, 0, 0}, 0x1edc }, // U1EDC # LATIN CAPITAL LETTER O WITH HORN AND GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, UNITIZE(Qt::Key_Dead_Horn), 0x0055, 0, 0}, 0x1eea }, // U1EEA # LATIN CAPITAL LETTER U WITH HORN AND GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, UNITIZE(Qt::Key_Dead_Horn), 0x006f, 0, 0}, 0x1edd }, // U1EDD # LATIN SMALL LETTER O WITH HORN AND GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0060, UNITIZE(Qt::Key_Dead_Horn), 0x0075, 0, 0}, 0x1eeb }, // U1EEB # LATIN SMALL LETTER U WITH HORN AND GRAVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0061, 0x0065, 0, 0, 0}, 0x00e6 }, // ae ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0000, 0x0041, 0, 0}, 0x1eb6 }, // U1EB6 # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0000, 0x0061, 0, 0}, 0x1eb7 }, // U1EB7 # LATIN SMALL LETTER A WITH BREVE AND DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0021, 0x0041, 0, 0}, 0x1eb6 }, // U1EB6 # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0021, 0x0061, 0, 0}, 0x1eb7 }, // U1EB7 # LATIN SMALL LETTER A WITH BREVE AND DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x002c, 0x0045, 0, 0}, 0x1e1c }, // U1E1C # LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x002c, 0x0065, 0, 0}, 0x1e1d }, // U1E1D # LATIN SMALL LETTER E WITH CEDILLA AND BREVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0041, 0, 0, 0}, 0x0102 }, // U0102 # LATIN CAPITAL LETTER A WITH BREVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0045, 0, 0, 0}, 0x0114 }, // U0114 # LATIN CAPITAL LETTER E WITH BREVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0047, 0, 0, 0}, 0x011e }, // U011E # LATIN CAPITAL LETTER G WITH BREVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0049, 0, 0, 0}, 0x012c }, // U012C # LATIN CAPITAL LETTER I WITH BREVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x004f, 0, 0, 0}, 0x014e }, // U014E # LATIN CAPITAL LETTER O WITH BREVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0055, 0, 0, 0}, 0x016c }, // U016C # LATIN CAPITAL LETTER U WITH BREVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0061, 0, 0, 0}, 0x0103 }, // U0103 # LATIN SMALL LETTER A WITH BREVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0065, 0, 0, 0}, 0x0115 }, // U0115 # LATIN SMALL LETTER E WITH BREVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0067, 0, 0, 0}, 0x011f }, // U011F # LATIN SMALL LETTER G WITH BREVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0069, 0, 0, 0}, 0x012d }, // U012D # LATIN SMALL LETTER I WITH BREVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x006f, 0, 0, 0}, 0x014f }, // U014F # LATIN SMALL LETTER O WITH BREVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0075, 0, 0, 0}, 0x016d }, // U016D # LATIN SMALL LETTER U WITH BREVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0228, 0, 0, 0}, 0x1e1c }, // U1E1C # LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0229, 0, 0, 0}, 0x1e1d }, // U1E1D # LATIN SMALL LETTER E WITH CEDILLA AND BREVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0391, 0, 0, 0}, 0x1fb8 }, // U1FB8 # GREEK CAPITAL LETTER ALPHA WITH VRACHY ++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0399, 0, 0, 0}, 0x1fd8 }, // U1FD8 # GREEK CAPITAL LETTER IOTA WITH VRACHY ++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x03a5, 0, 0, 0}, 0x1fe8 }, // U1FE8 # GREEK CAPITAL LETTER UPSILON WITH VRACHY ++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x03b1, 0, 0, 0}, 0x1fb0 }, // U1FB0 # GREEK SMALL LETTER ALPHA WITH VRACHY ++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x03b9, 0, 0, 0}, 0x1fd0 }, // U1FD0 # GREEK SMALL LETTER IOTA WITH VRACHY ++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x03c5, 0, 0, 0}, 0x1fe0 }, // U1FE0 # GREEK SMALL LETTER UPSILON WITH VRACHY ++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0410, 0, 0, 0}, 0x04d0 }, // U04D0 # CYRILLIC CAPITAL LETTER A WITH BREVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0415, 0, 0, 0}, 0x04d6 }, // U04D6 # CYRILLIC CAPITAL LETTER IE WITH BREVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0416, 0, 0, 0}, 0x04c1 }, // U04C1 # CYRILLIC CAPITAL LETTER ZHE WITH BREVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0418, 0, 0, 0}, 0x0419 }, // U0419 # CYRILLIC CAPITAL LETTER SHORT I ++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0423, 0, 0, 0}, 0x040e }, // U040E # CYRILLIC CAPITAL LETTER SHORT U ++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0430, 0, 0, 0}, 0x04d1 }, // U04D1 # CYRILLIC SMALL LETTER A WITH BREVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0435, 0, 0, 0}, 0x04d7 }, // U04D7 # CYRILLIC SMALL LETTER IE WITH BREVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0436, 0, 0, 0}, 0x04c2 }, // U04C2 # CYRILLIC SMALL LETTER ZHE WITH BREVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0438, 0, 0, 0}, 0x0439 }, // U0439 # CYRILLIC SMALL LETTER SHORT I ++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0443, 0, 0, 0}, 0x045e }, // U045E # CYRILLIC SMALL LETTER SHORT U ++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x1ea0, 0, 0, 0}, 0x1eb6 }, // U1EB6 # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x1ea1, 0, 0, 0}, 0x1eb7 }, // U1EB7 # LATIN SMALL LETTER A WITH BREVE AND DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, UNITIZE(Qt::Key_Dead_Cedilla), 0x0045, 0, 0}, 0x1e1c }, // U1E1C # LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, UNITIZE(Qt::Key_Dead_Cedilla), 0x0065, 0, 0}, 0x1e1d }, // U1E1D # LATIN SMALL LETTER E WITH CEDILLA AND BREVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, UNITIZE(Qt::Key_Dead_Belowdot), 0x0041, 0, 0}, 0x1eb6 }, // U1EB6 # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0062, UNITIZE(Qt::Key_Dead_Belowdot), 0x0061, 0, 0}, 0x1eb7 }, // U1EB7 # LATIN SMALL LETTER A WITH BREVE AND DOT BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x0022, 0x0055, 0, 0}, 0x01d9 }, // U01D9 # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON ++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x0022, 0x0075, 0, 0}, 0x01da }, // U01DA # LATIN SMALL LETTER U WITH DIAERESIS AND CARON ++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x002f, 0, 0, 0}, 0x00a2 }, // U00A2 # CENT SIGN ++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x0041, 0, 0, 0}, 0x01cd }, // U01CD # LATIN CAPITAL LETTER A WITH CARON ++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x0043, 0, 0, 0}, 0x010c }, // U010C # LATIN CAPITAL LETTER C WITH CARON ++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x0044, 0, 0, 0}, 0x010e }, // U010E # LATIN CAPITAL LETTER D WITH CARON ++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x0045, 0, 0, 0}, 0x011a }, // U011A # LATIN CAPITAL LETTER E WITH CARON ++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x0047, 0, 0, 0}, 0x01e6 }, // U01E6 # LATIN CAPITAL LETTER G WITH CARON ++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x0048, 0, 0, 0}, 0x021e }, // U021E # LATIN CAPITAL LETTER H WITH CARON ++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x0049, 0, 0, 0}, 0x01cf }, // U01CF # LATIN CAPITAL LETTER I WITH CARON ++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x004b, 0, 0, 0}, 0x01e8 }, // U01E8 # LATIN CAPITAL LETTER K WITH CARON ++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x004c, 0, 0, 0}, 0x013d }, // U013D # LATIN CAPITAL LETTER L WITH CARON ++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x004e, 0, 0, 0}, 0x0147 }, // U0147 # LATIN CAPITAL LETTER N WITH CARON ++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x004f, 0, 0, 0}, 0x01d1 }, // U01D1 # LATIN CAPITAL LETTER O WITH CARON ++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x0052, 0, 0, 0}, 0x0158 }, // U0158 # LATIN CAPITAL LETTER R WITH CARON ++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x0053, 0, 0, 0}, 0x0160 }, // U0160 # LATIN CAPITAL LETTER S WITH CARON ++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x0054, 0, 0, 0}, 0x0164 }, // U0164 # LATIN CAPITAL LETTER T WITH CARON ++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x0055, 0, 0, 0}, 0x01d3 }, // U01D3 # LATIN CAPITAL LETTER U WITH CARON ++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x005a, 0, 0, 0}, 0x017d }, // U017D # LATIN CAPITAL LETTER Z WITH CARON ++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x0061, 0, 0, 0}, 0x01ce }, // U01CE # LATIN SMALL LETTER A WITH CARON ++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x0063, 0, 0, 0}, 0x010d }, // U010D # LATIN SMALL LETTER C WITH CARON ++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x0064, 0, 0, 0}, 0x010f }, // U010F # LATIN SMALL LETTER D WITH CARON ++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x0065, 0, 0, 0}, 0x011b }, // U011B # LATIN SMALL LETTER E WITH CARON ++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x0067, 0, 0, 0}, 0x01e7 }, // U01E7 # LATIN SMALL LETTER G WITH CARON ++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x0068, 0, 0, 0}, 0x021f }, // U021F # LATIN SMALL LETTER H WITH CARON ++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x0069, 0, 0, 0}, 0x01d0 }, // U01D0 # LATIN SMALL LETTER I WITH CARON ++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x006a, 0, 0, 0}, 0x01f0 }, // U01F0 # LATIN SMALL LETTER J WITH CARON ++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x006b, 0, 0, 0}, 0x01e9 }, // U01E9 # LATIN SMALL LETTER K WITH CARON ++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x006c, 0, 0, 0}, 0x013e }, // U013E # LATIN SMALL LETTER L WITH CARON ++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x006e, 0, 0, 0}, 0x0148 }, // U0148 # LATIN SMALL LETTER N WITH CARON ++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x006f, 0, 0, 0}, 0x01d2 }, // U01D2 # LATIN SMALL LETTER O WITH CARON ++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x0072, 0, 0, 0}, 0x0159 }, // U0159 # LATIN SMALL LETTER R WITH CARON ++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x0073, 0, 0, 0}, 0x0161 }, // U0161 # LATIN SMALL LETTER S WITH CARON ++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x0074, 0, 0, 0}, 0x0165 }, // U0165 # LATIN SMALL LETTER T WITH CARON ++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x0075, 0, 0, 0}, 0x01d4 }, // U01D4 # LATIN SMALL LETTER U WITH CARON ++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x007a, 0, 0, 0}, 0x017e }, // U017E # LATIN SMALL LETTER Z WITH CARON ++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x007c, 0, 0, 0}, 0x00a2 }, // U00A2 # CENT SIGN ++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x00dc, 0, 0, 0}, 0x01d9 }, // U01D9 # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON ++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x00fc, 0, 0, 0}, 0x01da }, // U01DA # LATIN SMALL LETTER U WITH DIAERESIS AND CARON ++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x01b7, 0, 0, 0}, 0x01ee }, // U01EE # LATIN CAPITAL LETTER EZH WITH CARON ++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x0292, 0, 0, 0}, 0x01ef }, // U01EF # LATIN SMALL LETTER EZH WITH CARON ++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, UNITIZE(Qt::Key_Dead_Diaeresis), 0x0055, 0, 0}, 0x01d9 }, // U01D9 # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON ++ { {UNITIZE(Qt::Key_Multi_key), 0x0063, UNITIZE(Qt::Key_Dead_Diaeresis), 0x0075, 0, 0}, 0x01da }, // U01DA # LATIN SMALL LETTER U WITH DIAERESIS AND CARON ++ { {UNITIZE(Qt::Key_Multi_key), 0x0064, 0x002d, 0, 0, 0}, 0x20ab }, // U20ab # DONG SIGN ++ { {UNITIZE(Qt::Key_Multi_key), 0x0064, 0x0068, 0, 0, 0}, 0x00f0 }, // U00F0 # LATIN SMALL LETTER ETH ++ { {UNITIZE(Qt::Key_Multi_key), 0x0065, 0x0065, 0, 0, 0}, 0x0259 }, // U0259 # LATIN SMALL LETTER SCHWA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0066, 0x0053, 0, 0, 0}, 0x017f }, // U017f # LONG S ++ { {UNITIZE(Qt::Key_Multi_key), 0x0066, 0x0073, 0, 0, 0}, 0x017f }, // U017f # LONG S ++ { {UNITIZE(Qt::Key_Multi_key), 0x0069, 0x002e, 0, 0, 0}, 0x0131 }, // U0131 # LATIN SMALL LETTER DOTLESS I ++ { {UNITIZE(Qt::Key_Multi_key), 0x006b, 0x006b, 0, 0, 0}, 0x0138 }, // U0138 # LATIN SMALL LETTER KRA ++ { {UNITIZE(Qt::Key_Multi_key), 0x006c, 0x0076, 0, 0, 0}, 0x007c }, // bar ++ { {UNITIZE(Qt::Key_Multi_key), 0x006d, 0x002f, 0, 0, 0}, 0x20a5 }, // U20a5 # MILL SIGN ++ { {UNITIZE(Qt::Key_Multi_key), 0x006d, 0x0075, 0, 0, 0}, 0x00b5 }, // U00B5 # MICRO SIGN ++ { {UNITIZE(Qt::Key_Multi_key), 0x006e, 0x0067, 0, 0, 0}, 0x014b }, // U014B # LATIN SMALL LETTER ENG ++ { {UNITIZE(Qt::Key_Multi_key), 0x006f, 0x0027, 0x0041, 0, 0}, 0x01fa }, // U01FA # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x006f, 0x0027, 0x0061, 0, 0}, 0x01fb }, // U01FB # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x006f, 0x0041, 0, 0, 0}, 0x00c5 }, // U00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x006f, 0x0043, 0, 0, 0}, 0x00a9 }, // copyright ++ { {UNITIZE(Qt::Key_Multi_key), 0x006f, 0x0052, 0, 0, 0}, 0x00ae }, // registered ++ { {UNITIZE(Qt::Key_Multi_key), 0x006f, 0x0055, 0, 0, 0}, 0x016e }, // U016E # LATIN CAPITAL LETTER U WITH RING ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x006f, 0x0061, 0, 0, 0}, 0x00e5 }, // U00E5 # LATIN SMALL LETTER A WITH RING ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x006f, 0x0063, 0, 0, 0}, 0x00a9 }, // copyright ++ { {UNITIZE(Qt::Key_Multi_key), 0x006f, 0x0065, 0, 0, 0}, 0x0153 }, // oe ++ { {UNITIZE(Qt::Key_Multi_key), 0x006f, 0x006f, 0, 0, 0}, 0x00b0 }, // degree # ^0 already taken ++ { {UNITIZE(Qt::Key_Multi_key), 0x006f, 0x0072, 0, 0, 0}, 0x00ae }, // registered ++ { {UNITIZE(Qt::Key_Multi_key), 0x006f, 0x0073, 0, 0, 0}, 0x00a7 }, // section # SECTION SIGN ++ { {UNITIZE(Qt::Key_Multi_key), 0x006f, 0x0075, 0, 0, 0}, 0x016f }, // U016F # LATIN SMALL LETTER U WITH RING ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x006f, 0x0077, 0, 0, 0}, 0x1e98 }, // U1E98 # LATIN SMALL LETTER W WITH RING ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x006f, 0x0078, 0, 0, 0}, 0x00a4 }, // currency ++ { {UNITIZE(Qt::Key_Multi_key), 0x006f, 0x0079, 0, 0, 0}, 0x1e99 }, // U1E99 # LATIN SMALL LETTER Y WITH RING ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0070, 0x0021, 0, 0, 0}, 0x00b6 }, // paragraph ++ { {UNITIZE(Qt::Key_Multi_key), 0x0073, 0x006f, 0, 0, 0}, 0x00a7 }, // section # SECTION SIGN ++ { {UNITIZE(Qt::Key_Multi_key), 0x0073, 0x0073, 0, 0, 0}, 0x00df }, // ssharp ++ { {UNITIZE(Qt::Key_Multi_key), 0x0074, 0x0068, 0, 0, 0}, 0x00fe }, // U00FE # LATIN SMALL LETTER THORN ++ { {UNITIZE(Qt::Key_Multi_key), 0x0076, 0x006c, 0, 0, 0}, 0x007c }, // bar ++ { {UNITIZE(Qt::Key_Multi_key), 0x0078, 0x006f, 0, 0, 0}, 0x00a4 }, // currency ++ { {UNITIZE(Qt::Key_Multi_key), 0x0078, 0x0078, 0, 0, 0}, 0x00d7 }, // U00D7 # MULTIPLICATION SIGN ++ { {UNITIZE(Qt::Key_Multi_key), 0x007c, 0x0043, 0, 0, 0}, 0x00a2 }, // U00A2 # CENT SIGN ++ { {UNITIZE(Qt::Key_Multi_key), 0x007c, 0x0063, 0, 0, 0}, 0x00a2 }, // U00A2 # CENT SIGN ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0000, 0, 0, 0}, 0x1eee }, // U1EEE # LATIN CAPITAL LETTER U WITH HORN AND TILDE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0000, 0, 0, 0}, 0x1ee1 }, // U1EE1 # LATIN SMALL LETTER O WITH HORN AND TILDE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0000, 0, 0, 0}, 0x1eef }, // U1EEF # LATIN SMALL LETTER U WITH HORN AND TILDE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0000, 0, 0, 0}, 0x1ee0 }, // U1EE0 # LATIN CAPITAL LETTER O WITH HORN AND TILDE ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0020, 0, 0, 0}, 0x007e }, // asciitilde ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0022, 0x03b9, 0, 0}, 0x1fd7 }, // U1FD7 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0022, 0x03c5, 0, 0}, 0x1fe7 }, // U1FE7 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0028, 0x0391, 0, 0}, 0x1f0f }, // U1F0F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0028, 0x0397, 0, 0}, 0x1f2f }, // U1F2F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0028, 0x0399, 0, 0}, 0x1f3f }, // U1F3F # GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0028, 0x03a5, 0, 0}, 0x1f5f }, // U1F5F # GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0028, 0x03a9, 0, 0}, 0x1f6f }, // U1F6F # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0028, 0x03b1, 0, 0}, 0x1f07 }, // U1F07 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0028, 0x03b7, 0, 0}, 0x1f27 }, // U1F27 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0028, 0x03b9, 0, 0}, 0x1f37 }, // U1F37 # GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0028, 0x03c5, 0, 0}, 0x1f57 }, // U1F57 # GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0028, 0x03c9, 0, 0}, 0x1f67 }, // U1F67 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0029, 0x0391, 0, 0}, 0x1f0e }, // U1F0E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0029, 0x0397, 0, 0}, 0x1f2e }, // U1F2E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0029, 0x0399, 0, 0}, 0x1f3e }, // U1F3E # GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0029, 0x03a9, 0, 0}, 0x1f6e }, // U1F6E # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0029, 0x03b1, 0, 0}, 0x1f06 }, // U1F06 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0029, 0x03b7, 0, 0}, 0x1f26 }, // U1F26 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0029, 0x03b9, 0, 0}, 0x1f36 }, // U1F36 # GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0029, 0x03c5, 0, 0}, 0x1f56 }, // U1F56 # GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0029, 0x03c9, 0, 0}, 0x1f66 }, // U1F66 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x002b, 0x004f, 0, 0}, 0x1ee0 }, // U1EE0 # LATIN CAPITAL LETTER O WITH HORN AND TILDE ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x002b, 0x0055, 0, 0}, 0x1eee }, // U1EEE # LATIN CAPITAL LETTER U WITH HORN AND TILDE ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x002b, 0x006f, 0, 0}, 0x1ee1 }, // U1EE1 # LATIN SMALL LETTER O WITH HORN AND TILDE ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x002b, 0x0075, 0, 0}, 0x1eef }, // U1EEF # LATIN SMALL LETTER U WITH HORN AND TILDE ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0041, 0, 0, 0}, 0x00c3 }, // U00C3 # LATIN CAPITAL LETTER A WITH TILDE ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0045, 0, 0, 0}, 0x1ebc }, // U1EBC # LATIN CAPITAL LETTER E WITH TILDE ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0049, 0, 0, 0}, 0x0128 }, // U0128 # LATIN CAPITAL LETTER I WITH TILDE ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x004e, 0, 0, 0}, 0x00d1 }, // U00D1 # LATIN CAPITAL LETTER N WITH TILDE ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x004f, 0, 0, 0}, 0x00d5 }, // U00D5 # LATIN CAPITAL LETTER O WITH TILDE ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0055, 0, 0, 0}, 0x0168 }, // U0168 # LATIN CAPITAL LETTER U WITH TILDE ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0055, 0x0041, 0, 0}, 0x1eb4 }, // U1EB4 # LATIN CAPITAL LETTER A WITH BREVE AND TILDE ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0055, 0x0061, 0, 0}, 0x1eb5 }, // U1EB5 # LATIN SMALL LETTER A WITH BREVE AND TILDE ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0056, 0, 0, 0}, 0x1e7c }, // U1E7C # LATIN CAPITAL LETTER V WITH TILDE ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0059, 0, 0, 0}, 0x1ef8 }, // U1EF8 # LATIN CAPITAL LETTER Y WITH TILDE ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x005e, 0x0041, 0, 0}, 0x1eaa }, // U1EAA # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x005e, 0x0045, 0, 0}, 0x1ec4 }, // U1EC4 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x005e, 0x004f, 0, 0}, 0x1ed6 }, // U1ED6 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x005e, 0x0061, 0, 0}, 0x1eab }, // U1EAB # LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x005e, 0x0065, 0, 0}, 0x1ec5 }, // U1EC5 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x005e, 0x006f, 0, 0}, 0x1ed7 }, // U1ED7 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0061, 0, 0, 0}, 0x00e3 }, // U00E3 # LATIN SMALL LETTER A WITH TILDE ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0062, 0x0041, 0, 0}, 0x1eb4 }, // U1EB4 # LATIN CAPITAL LETTER A WITH BREVE AND TILDE ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0062, 0x0061, 0, 0}, 0x1eb5 }, // U1EB5 # LATIN SMALL LETTER A WITH BREVE AND TILDE ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0065, 0, 0, 0}, 0x1ebd }, // U1EBD # LATIN SMALL LETTER E WITH TILDE ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0069, 0, 0, 0}, 0x0129 }, // U0129 # LATIN SMALL LETTER I WITH TILDE ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x006e, 0, 0, 0}, 0x00f1 }, // U00F1 # LATIN SMALL LETTER N WITH TILDE ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x006f, 0, 0, 0}, 0x00f5 }, // U00F5 # LATIN SMALL LETTER O WITH TILDE ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0075, 0, 0, 0}, 0x0169 }, // U0169 # LATIN SMALL LETTER U WITH TILDE ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0076, 0, 0, 0}, 0x1e7d }, // U1E7D # LATIN SMALL LETTER V WITH TILDE ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0079, 0, 0, 0}, 0x1ef9 }, // U1EF9 # LATIN SMALL LETTER Y WITH TILDE ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x00c2, 0, 0, 0}, 0x1eaa }, // U1EAA # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x00ca, 0, 0, 0}, 0x1ec4 }, // U1EC4 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x00d4, 0, 0, 0}, 0x1ed6 }, // U1ED6 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x00e2, 0, 0, 0}, 0x1eab }, // U1EAB # LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x00ea, 0, 0, 0}, 0x1ec5 }, // U1EC5 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x00f4, 0, 0, 0}, 0x1ed7 }, // U1ED7 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0102, 0, 0, 0}, 0x1eb4 }, // U1EB4 # LATIN CAPITAL LETTER A WITH BREVE AND TILDE ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0103, 0, 0, 0}, 0x1eb5 }, // U1EB5 # LATIN SMALL LETTER A WITH BREVE AND TILDE ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0313, 0x0391, 0, 0}, 0x1f0e }, // U1F0E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0313, 0x0397, 0, 0}, 0x1f2e }, // U1F2E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0313, 0x0399, 0, 0}, 0x1f3e }, // U1F3E # GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0313, 0x03a9, 0, 0}, 0x1f6e }, // U1F6E # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0313, 0x03b1, 0, 0}, 0x1f06 }, // U1F06 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0313, 0x03b7, 0, 0}, 0x1f26 }, // U1F26 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0313, 0x03b9, 0, 0}, 0x1f36 }, // U1F36 # GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0313, 0x03c5, 0, 0}, 0x1f56 }, // U1F56 # GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0313, 0x03c9, 0, 0}, 0x1f66 }, // U1F66 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0314, 0x0391, 0, 0}, 0x1f0f }, // U1F0F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0314, 0x0397, 0, 0}, 0x1f2f }, // U1F2F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0314, 0x0399, 0, 0}, 0x1f3f }, // U1F3F # GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0314, 0x03a5, 0, 0}, 0x1f5f }, // U1F5F # GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0314, 0x03a9, 0, 0}, 0x1f6f }, // U1F6F # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0314, 0x03b1, 0, 0}, 0x1f07 }, // U1F07 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0314, 0x03b7, 0, 0}, 0x1f27 }, // U1F27 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0314, 0x03b9, 0, 0}, 0x1f37 }, // U1F37 # GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0314, 0x03c5, 0, 0}, 0x1f57 }, // U1F57 # GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0314, 0x03c9, 0, 0}, 0x1f67 }, // U1F67 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x03b1, 0, 0, 0}, 0x1fb6 }, // U1FB6 # GREEK SMALL LETTER ALPHA WITH PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x03b7, 0, 0, 0}, 0x1fc6 }, // U1FC6 # GREEK SMALL LETTER ETA WITH PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x03b9, 0, 0, 0}, 0x1fd6 }, // U1FD6 # GREEK SMALL LETTER IOTA WITH PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x03c5, 0, 0, 0}, 0x1fe6 }, // U1FE6 # GREEK SMALL LETTER UPSILON WITH PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x03c9, 0, 0, 0}, 0x1ff6 }, // U1FF6 # GREEK SMALL LETTER OMEGA WITH PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x03ca, 0, 0, 0}, 0x1fd7 }, // U1FD7 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x03cb, 0, 0, 0}, 0x1fe7 }, // U1FE7 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f00, 0, 0, 0}, 0x1f06 }, // U1F06 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f01, 0, 0, 0}, 0x1f07 }, // U1F07 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f08, 0, 0, 0}, 0x1f0e }, // U1F0E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f09, 0, 0, 0}, 0x1f0f }, // U1F0F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f20, 0, 0, 0}, 0x1f26 }, // U1F26 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f21, 0, 0, 0}, 0x1f27 }, // U1F27 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f28, 0, 0, 0}, 0x1f2e }, // U1F2E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f29, 0, 0, 0}, 0x1f2f }, // U1F2F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f30, 0, 0, 0}, 0x1f36 }, // U1F36 # GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f31, 0, 0, 0}, 0x1f37 }, // U1F37 # GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f38, 0, 0, 0}, 0x1f3e }, // U1F3E # GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f39, 0, 0, 0}, 0x1f3f }, // U1F3F # GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f50, 0, 0, 0}, 0x1f56 }, // U1F56 # GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f51, 0, 0, 0}, 0x1f57 }, // U1F57 # GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f59, 0, 0, 0}, 0x1f5f }, // U1F5F # GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f60, 0, 0, 0}, 0x1f66 }, // U1F66 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f61, 0, 0, 0}, 0x1f67 }, // U1F67 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f68, 0, 0, 0}, 0x1f6e }, // U1F6E # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f69, 0, 0, 0}, 0x1f6f }, // U1F6F # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, UNITIZE(Qt::Key_Dead_Circumflex), 0x0041, 0, 0}, 0x1eaa }, // U1EAA # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, UNITIZE(Qt::Key_Dead_Circumflex), 0x0045, 0, 0}, 0x1ec4 }, // U1EC4 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, UNITIZE(Qt::Key_Dead_Circumflex), 0x004f, 0, 0}, 0x1ed6 }, // U1ED6 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, UNITIZE(Qt::Key_Dead_Circumflex), 0x0061, 0, 0}, 0x1eab }, // U1EAB # LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, UNITIZE(Qt::Key_Dead_Circumflex), 0x0065, 0, 0}, 0x1ec5 }, // U1EC5 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, UNITIZE(Qt::Key_Dead_Circumflex), 0x006f, 0, 0}, 0x1ed7 }, // U1ED7 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, UNITIZE(Qt::Key_Dead_Breve), 0x0041, 0, 0}, 0x1eb4 }, // U1EB4 # LATIN CAPITAL LETTER A WITH BREVE AND TILDE ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, UNITIZE(Qt::Key_Dead_Breve), 0x0061, 0, 0}, 0x1eb5 }, // U1EB5 # LATIN SMALL LETTER A WITH BREVE AND TILDE ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, UNITIZE(Qt::Key_Dead_Diaeresis), 0x03b9, 0, 0}, 0x1fd7 }, // U1FD7 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, UNITIZE(Qt::Key_Dead_Diaeresis), 0x03c5, 0, 0}, 0x1fe7 }, // U1FE7 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, UNITIZE(Qt::Key_Dead_Horn), 0x004f, 0, 0}, 0x1ee0 }, // U1EE0 # LATIN CAPITAL LETTER O WITH HORN AND TILDE ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, UNITIZE(Qt::Key_Dead_Horn), 0x0055, 0, 0}, 0x1eee }, // U1EEE # LATIN CAPITAL LETTER U WITH HORN AND TILDE ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, UNITIZE(Qt::Key_Dead_Horn), 0x006f, 0, 0}, 0x1ee1 }, // U1EE1 # LATIN SMALL LETTER O WITH HORN AND TILDE ++ { {UNITIZE(Qt::Key_Multi_key), 0x007e, UNITIZE(Qt::Key_Dead_Horn), 0x0075, 0, 0}, 0x1eef }, // U1EEF # LATIN SMALL LETTER U WITH HORN AND TILDE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x00a8, 0x0000, 0, 0, 0}, 0x0385 }, // U0385 # GREEK DIALYTIKA TONOS ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x00a8, 0x0000, 0, 0, 0}, 0x1fed }, // U1FED # GREEK DIALYTIKA AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00a8, 0x0027, 0, 0, 0}, 0x0385 }, // U0385 # GREEK DIALYTIKA TONOS ++ { {UNITIZE(Qt::Key_Multi_key), 0x00a8, 0x0060, 0, 0, 0}, 0x1fed }, // U1FED # GREEK DIALYTIKA AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00a8, 0x007e, 0, 0, 0}, 0x1fc1 }, // U1FC1 # GREEK DIALYTIKA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x00a8, 0x00b4, 0, 0, 0}, 0x0385 }, // U0385 # GREEK DIALYTIKA TONOS ++ { {UNITIZE(Qt::Key_Multi_key), 0x00a8, 0x0342, 0, 0, 0}, 0x1fc1 }, // U1FC1 # GREEK DIALYTIKA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x00a8, UNITIZE(Qt::Key_Dead_Grave), 0, 0, 0}, 0x1fed }, // U1FED # GREEK DIALYTIKA AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00a8, UNITIZE(Qt::Key_Dead_Acute), 0, 0, 0}, 0x0385 }, // U0385 # GREEK DIALYTIKA TONOS ++ { {UNITIZE(Qt::Key_Multi_key), 0x00a8, UNITIZE(Qt::Key_Dead_Tilde), 0, 0, 0}, 0x1fc1 }, // U1FC1 # GREEK DIALYTIKA AND PERISPOMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0000, 0x004c, 0, 0}, 0x1e38 }, // U1E38 # LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0000, 0x004f, 0, 0}, 0x022c }, // U022C # LATIN CAPITAL LETTER O WITH TILDE AND MACRON ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0000, 0x0052, 0, 0}, 0x1e5c }, // U1E5C # LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0000, 0x006c, 0, 0}, 0x1e39 }, // U1E39 # LATIN SMALL LETTER L WITH DOT BELOW AND MACRON ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0000, 0x006f, 0, 0}, 0x022d }, // U022D # LATIN SMALL LETTER O WITH TILDE AND MACRON ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0000, 0x0072, 0, 0}, 0x1e5d }, // U1E5D # LATIN SMALL LETTER R WITH DOT BELOW AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0021, 0x004c, 0, 0}, 0x1e38 }, // U1E38 # LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0021, 0x0052, 0, 0}, 0x1e5c }, // U1E5C # LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0021, 0x006c, 0, 0}, 0x1e39 }, // U1E39 # LATIN SMALL LETTER L WITH DOT BELOW AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0021, 0x0072, 0, 0}, 0x1e5d }, // U1E5D # LATIN SMALL LETTER R WITH DOT BELOW AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0022, 0x0041, 0, 0}, 0x01de }, // U01DE # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0022, 0x004f, 0, 0}, 0x022a }, // U022A # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0022, 0x0055, 0, 0}, 0x01d5 }, // U01D5 # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0022, 0x0061, 0, 0}, 0x01df }, // U01DF # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0022, 0x006f, 0, 0}, 0x022b }, // U022B # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0022, 0x0075, 0, 0}, 0x01d6 }, // U01D6 # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x002e, 0x0041, 0, 0}, 0x01e0 }, // U01E0 # LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x002e, 0x004f, 0, 0}, 0x0230 }, // U0230 # LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x002e, 0x0061, 0, 0}, 0x01e1 }, // U01E1 # LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x002e, 0x006f, 0, 0}, 0x0231 }, // U0231 # LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x003b, 0x004f, 0, 0}, 0x01ec }, // U01EC # LATIN CAPITAL LETTER O WITH OGONEK AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x003b, 0x006f, 0, 0}, 0x01ed }, // U01ED # LATIN SMALL LETTER O WITH OGONEK AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0041, 0, 0, 0}, 0x0100 }, // U0100 # LATIN CAPITAL LETTER A WITH MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0045, 0, 0, 0}, 0x0112 }, // U0112 # LATIN CAPITAL LETTER E WITH MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0047, 0, 0, 0}, 0x1e20 }, // U1E20 # LATIN CAPITAL LETTER G WITH MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0049, 0, 0, 0}, 0x012a }, // U012A # LATIN CAPITAL LETTER I WITH MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x004f, 0, 0, 0}, 0x014c }, // U014C # LATIN CAPITAL LETTER O WITH MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0055, 0, 0, 0}, 0x016a }, // U016A # LATIN CAPITAL LETTER U WITH MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0059, 0, 0, 0}, 0x0232 }, // U0232 # LATIN CAPITAL LETTER Y WITH MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0061, 0, 0, 0}, 0x0101 }, // U0101 # LATIN SMALL LETTER A WITH MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0065, 0, 0, 0}, 0x0113 }, // U0113 # LATIN SMALL LETTER E WITH MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0067, 0, 0, 0}, 0x1e21 }, // U1E21 # LATIN SMALL LETTER G WITH MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0069, 0, 0, 0}, 0x012b }, // U012B # LATIN SMALL LETTER I WITH MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x006f, 0, 0, 0}, 0x014d }, // U014D # LATIN SMALL LETTER O WITH MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0075, 0, 0, 0}, 0x016b }, // U016B # LATIN SMALL LETTER U WITH MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0079, 0, 0, 0}, 0x0233 }, // U0233 # LATIN SMALL LETTER Y WITH MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x007e, 0x004f, 0, 0}, 0x022c }, // U022C # LATIN CAPITAL LETTER O WITH TILDE AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x007e, 0x006f, 0, 0}, 0x022d }, // U022D # LATIN SMALL LETTER O WITH TILDE AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x00c4, 0, 0, 0}, 0x01de }, // U01DE # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x00c6, 0, 0, 0}, 0x01e2 }, // U01E2 # LATIN CAPITAL LETTER AE WITH MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x00d5, 0, 0, 0}, 0x022c }, // U022C # LATIN CAPITAL LETTER O WITH TILDE AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x00d6, 0, 0, 0}, 0x022a }, // U022A # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x00dc, 0, 0, 0}, 0x01d5 }, // U01D5 # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x00e4, 0, 0, 0}, 0x01df }, // U01DF # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x00e6, 0, 0, 0}, 0x01e3 }, // U01E3 # LATIN SMALL LETTER AE WITH MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x00f5, 0, 0, 0}, 0x022d }, // U022D # LATIN SMALL LETTER O WITH TILDE AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x00f6, 0, 0, 0}, 0x022b }, // U022B # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x00fc, 0, 0, 0}, 0x01d6 }, // U01D6 # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x01ea, 0, 0, 0}, 0x01ec }, // U01EC # LATIN CAPITAL LETTER O WITH OGONEK AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x01eb, 0, 0, 0}, 0x01ed }, // U01ED # LATIN SMALL LETTER O WITH OGONEK AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0226, 0, 0, 0}, 0x01e0 }, // U01E0 # LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0227, 0, 0, 0}, 0x01e1 }, // U01E1 # LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x022e, 0, 0, 0}, 0x0230 }, // U0230 # LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x022f, 0, 0, 0}, 0x0231 }, // U0231 # LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0391, 0, 0, 0}, 0x1fb9 }, // U1FB9 # GREEK CAPITAL LETTER ALPHA WITH MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0399, 0, 0, 0}, 0x1fd9 }, // U1FD9 # GREEK CAPITAL LETTER IOTA WITH MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x03a5, 0, 0, 0}, 0x1fe9 }, // U1FE9 # GREEK CAPITAL LETTER UPSILON WITH MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x03b1, 0, 0, 0}, 0x1fb1 }, // U1FB1 # GREEK SMALL LETTER ALPHA WITH MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x03b9, 0, 0, 0}, 0x1fd1 }, // U1FD1 # GREEK SMALL LETTER IOTA WITH MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x03c5, 0, 0, 0}, 0x1fe1 }, // U1FE1 # GREEK SMALL LETTER UPSILON WITH MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0418, 0, 0, 0}, 0x04e2 }, // U04E2 # CYRILLIC CAPITAL LETTER I WITH MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0423, 0, 0, 0}, 0x04ee }, // U04EE # CYRILLIC CAPITAL LETTER U WITH MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0438, 0, 0, 0}, 0x04e3 }, // U04E3 # CYRILLIC SMALL LETTER I WITH MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0443, 0, 0, 0}, 0x04ef }, // U04EF # CYRILLIC SMALL LETTER U WITH MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x1e36, 0, 0, 0}, 0x1e38 }, // U1E38 # LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x1e37, 0, 0, 0}, 0x1e39 }, // U1E39 # LATIN SMALL LETTER L WITH DOT BELOW AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x1e5a, 0, 0, 0}, 0x1e5c }, // U1E5C # LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x1e5b, 0, 0, 0}, 0x1e5d }, // U1E5D # LATIN SMALL LETTER R WITH DOT BELOW AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, UNITIZE(Qt::Key_Dead_Tilde), 0x004f, 0, 0}, 0x022c }, // U022C # LATIN CAPITAL LETTER O WITH TILDE AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, UNITIZE(Qt::Key_Dead_Tilde), 0x006f, 0, 0}, 0x022d }, // U022D # LATIN SMALL LETTER O WITH TILDE AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, UNITIZE(Qt::Key_Dead_Abovedot), 0x0041, 0, 0}, 0x01e0 }, // U01E0 # LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, UNITIZE(Qt::Key_Dead_Abovedot), 0x004f, 0, 0}, 0x0230 }, // U0230 # LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, UNITIZE(Qt::Key_Dead_Abovedot), 0x0061, 0, 0}, 0x01e1 }, // U01E1 # LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, UNITIZE(Qt::Key_Dead_Abovedot), 0x006f, 0, 0}, 0x0231 }, // U0231 # LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, UNITIZE(Qt::Key_Dead_Diaeresis), 0x0041, 0, 0}, 0x01de }, // U01DE # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, UNITIZE(Qt::Key_Dead_Diaeresis), 0x004f, 0, 0}, 0x022a }, // U022A # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, UNITIZE(Qt::Key_Dead_Diaeresis), 0x0055, 0, 0}, 0x01d5 }, // U01D5 # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, UNITIZE(Qt::Key_Dead_Diaeresis), 0x0061, 0, 0}, 0x01df }, // U01DF # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, UNITIZE(Qt::Key_Dead_Diaeresis), 0x006f, 0, 0}, 0x022b }, // U022B # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, UNITIZE(Qt::Key_Dead_Diaeresis), 0x0075, 0, 0}, 0x01d6 }, // U01D6 # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, UNITIZE(Qt::Key_Dead_Ogonek), 0x004f, 0, 0}, 0x01ec }, // U01EC # LATIN CAPITAL LETTER O WITH OGONEK AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, UNITIZE(Qt::Key_Dead_Ogonek), 0x006f, 0, 0}, 0x01ed }, // U01ED # LATIN SMALL LETTER O WITH OGONEK AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, UNITIZE(Qt::Key_Dead_Belowdot), 0x004c, 0, 0}, 0x1e38 }, // U1E38 # LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, UNITIZE(Qt::Key_Dead_Belowdot), 0x0052, 0, 0}, 0x1e5c }, // U1E5C # LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, UNITIZE(Qt::Key_Dead_Belowdot), 0x006c, 0, 0}, 0x1e39 }, // U1E39 # LATIN SMALL LETTER L WITH DOT BELOW AND MACRON ++ { {UNITIZE(Qt::Key_Multi_key), 0x00af, UNITIZE(Qt::Key_Dead_Belowdot), 0x0072, 0, 0}, 0x1e5d }, // U1E5D # LATIN SMALL LETTER R WITH DOT BELOW AND MACRON ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0000, 0, 0, 0}, 0x1edb }, // U1EDB # LATIN SMALL LETTER O WITH HORN AND ACUTE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0000, 0, 0, 0}, 0x1ee9 }, // U1EE9 # LATIN SMALL LETTER U WITH HORN AND ACUTE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0000, 0, 0, 0}, 0x1ee8 }, // U1EE8 # LATIN CAPITAL LETTER U WITH HORN AND ACUTE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0000, 0, 0, 0}, 0x1eda }, // U1EDA # LATIN CAPITAL LETTER O WITH HORN AND ACUTE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0000, 0x004f, 0, 0}, 0x01fe }, // U01FE # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0000, 0x004f, 0, 0}, 0x1e4c }, // U1E4C # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0000, 0x0055, 0, 0}, 0x1e78 }, // U1E78 # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0000, 0x006f, 0, 0}, 0x01ff }, // U01FF # LATIN SMALL LETTER O WITH STROKE AND ACUTE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0000, 0x006f, 0, 0}, 0x1e4d }, // U1E4D # LATIN SMALL LETTER O WITH TILDE AND ACUTE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0000, 0x0075, 0, 0}, 0x1e79 }, // U1E79 # LATIN SMALL LETTER U WITH TILDE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0022, 0x0049, 0, 0}, 0x1e2e }, // U1E2E # LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0022, 0x0055, 0, 0}, 0x01d7 }, // U01D7 # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0022, 0x0069, 0, 0}, 0x1e2f }, // U1E2F # LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0022, 0x0075, 0, 0}, 0x01d8 }, // U01D8 # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0022, 0x03b9, 0, 0}, 0x0390 }, // U0390 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0022, 0x03c5, 0, 0}, 0x03b0 }, // U03B0 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0028, 0x0391, 0, 0}, 0x1f0d }, // U1F0D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0028, 0x0395, 0, 0}, 0x1f1d }, // U1F1D # GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0028, 0x0397, 0, 0}, 0x1f2d }, // U1F2D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0028, 0x0399, 0, 0}, 0x1f3d }, // U1F3D # GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0028, 0x039f, 0, 0}, 0x1f4d }, // U1F4D # GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0028, 0x03a5, 0, 0}, 0x1f5d }, // U1F5D # GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0028, 0x03a9, 0, 0}, 0x1f6d }, // U1F6D # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0028, 0x03b1, 0, 0}, 0x1f05 }, // U1F05 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0028, 0x03b5, 0, 0}, 0x1f15 }, // U1F15 # GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0028, 0x03b7, 0, 0}, 0x1f25 }, // U1F25 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0028, 0x03b9, 0, 0}, 0x1f35 }, // U1F35 # GREEK SMALL LETTER IOTA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0028, 0x03bf, 0, 0}, 0x1f45 }, // U1F45 # GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0028, 0x03c5, 0, 0}, 0x1f55 }, // U1F55 # GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0028, 0x03c9, 0, 0}, 0x1f65 }, // U1F65 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0029, 0x0391, 0, 0}, 0x1f0c }, // U1F0C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0029, 0x0395, 0, 0}, 0x1f1c }, // U1F1C # GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0029, 0x0397, 0, 0}, 0x1f2c }, // U1F2C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0029, 0x0399, 0, 0}, 0x1f3c }, // U1F3C # GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0029, 0x039f, 0, 0}, 0x1f4c }, // U1F4C # GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0029, 0x03a9, 0, 0}, 0x1f6c }, // U1F6C # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0029, 0x03b1, 0, 0}, 0x1f04 }, // U1F04 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0029, 0x03b5, 0, 0}, 0x1f14 }, // U1F14 # GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0029, 0x03b7, 0, 0}, 0x1f24 }, // U1F24 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0029, 0x03b9, 0, 0}, 0x1f34 }, // U1F34 # GREEK SMALL LETTER IOTA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0029, 0x03bf, 0, 0}, 0x1f44 }, // U1F44 # GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0029, 0x03c5, 0, 0}, 0x1f54 }, // U1F54 # GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0029, 0x03c9, 0, 0}, 0x1f64 }, // U1F64 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x002b, 0x004f, 0, 0}, 0x1eda }, // U1EDA # LATIN CAPITAL LETTER O WITH HORN AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x002b, 0x0055, 0, 0}, 0x1ee8 }, // U1EE8 # LATIN CAPITAL LETTER U WITH HORN AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x002b, 0x006f, 0, 0}, 0x1edb }, // U1EDB # LATIN SMALL LETTER O WITH HORN AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x002b, 0x0075, 0, 0}, 0x1ee9 }, // U1EE9 # LATIN SMALL LETTER U WITH HORN AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x002c, 0x0043, 0, 0}, 0x1e08 }, // U1E08 # LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x002c, 0x0063, 0, 0}, 0x1e09 }, // U1E09 # LATIN SMALL LETTER C WITH CEDILLA AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x002f, 0x004f, 0, 0}, 0x01fe }, // U01FE # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x002f, 0x006f, 0, 0}, 0x01ff }, // U01FF # LATIN SMALL LETTER O WITH STROKE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0041, 0, 0, 0}, 0x00c1 }, // U00C1 # LATIN CAPITAL LETTER A WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0043, 0, 0, 0}, 0x0106 }, // U0106 # LATIN CAPITAL LETTER C WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0045, 0, 0, 0}, 0x00c9 }, // U00C9 # LATIN CAPITAL LETTER E WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0047, 0, 0, 0}, 0x01f4 }, // U01F4 # LATIN CAPITAL LETTER G WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0049, 0, 0, 0}, 0x00cd }, // U00CD # LATIN CAPITAL LETTER I WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x004b, 0, 0, 0}, 0x1e30 }, // U1E30 # LATIN CAPITAL LETTER K WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x004c, 0, 0, 0}, 0x0139 }, // U0139 # LATIN CAPITAL LETTER L WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x004d, 0, 0, 0}, 0x1e3e }, // U1E3E # LATIN CAPITAL LETTER M WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x004e, 0, 0, 0}, 0x0143 }, // U0143 # LATIN CAPITAL LETTER N WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x004f, 0, 0, 0}, 0x00d3 }, // U00D3 # LATIN CAPITAL LETTER O WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0050, 0, 0, 0}, 0x1e54 }, // U1E54 # LATIN CAPITAL LETTER P WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0052, 0, 0, 0}, 0x0154 }, // U0154 # LATIN CAPITAL LETTER R WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0053, 0, 0, 0}, 0x015a }, // U015A # LATIN CAPITAL LETTER S WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0055, 0, 0, 0}, 0x00da }, // U00DA # LATIN CAPITAL LETTER U WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0055, 0x0041, 0, 0}, 0x1eae }, // U1EAE # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0055, 0x0061, 0, 0}, 0x1eaf }, // U1EAF # LATIN SMALL LETTER A WITH BREVE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0057, 0, 0, 0}, 0x1e82 }, // U1E82 # LATIN CAPITAL LETTER W WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0059, 0, 0, 0}, 0x00dd }, // U00DD # LATIN CAPITAL LETTER Y WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x005a, 0, 0, 0}, 0x0179 }, // U0179 # LATIN CAPITAL LETTER Z WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x005e, 0x0041, 0, 0}, 0x1ea4 }, // U1EA4 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x005e, 0x0045, 0, 0}, 0x1ebe }, // U1EBE # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x005e, 0x004f, 0, 0}, 0x1ed0 }, // U1ED0 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x005e, 0x0061, 0, 0}, 0x1ea5 }, // U1EA5 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x005e, 0x0065, 0, 0}, 0x1ebf }, // U1EBF # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x005e, 0x006f, 0, 0}, 0x1ed1 }, // U1ED1 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x005f, 0x0045, 0, 0}, 0x1e16 }, // U1E16 # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x005f, 0x004f, 0, 0}, 0x1e52 }, // U1E52 # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x005f, 0x0065, 0, 0}, 0x1e17 }, // U1E17 # LATIN SMALL LETTER E WITH MACRON AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x005f, 0x006f, 0, 0}, 0x1e53 }, // U1E53 # LATIN SMALL LETTER O WITH MACRON AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0061, 0, 0, 0}, 0x00e1 }, // U00E1 # LATIN SMALL LETTER A WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0062, 0x0041, 0, 0}, 0x1eae }, // U1EAE # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0062, 0x0061, 0, 0}, 0x1eaf }, // U1EAF # LATIN SMALL LETTER A WITH BREVE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0063, 0, 0, 0}, 0x0107 }, // U0107 # LATIN SMALL LETTER C WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0065, 0, 0, 0}, 0x00e9 }, // U00E9 # LATIN SMALL LETTER E WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0067, 0, 0, 0}, 0x01f5 }, // U01F5 # LATIN SMALL LETTER G WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0069, 0, 0, 0}, 0x00ed }, // U00ED # LATIN SMALL LETTER I WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x006b, 0, 0, 0}, 0x1e31 }, // U1E31 # LATIN SMALL LETTER K WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x006c, 0, 0, 0}, 0x013a }, // U013A # LATIN SMALL LETTER L WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x006d, 0, 0, 0}, 0x1e3f }, // U1E3F # LATIN SMALL LETTER M WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x006e, 0, 0, 0}, 0x0144 }, // U0144 # LATIN SMALL LETTER N WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x006f, 0, 0, 0}, 0x00f3 }, // U00F3 # LATIN SMALL LETTER O WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x006f, 0x0041, 0, 0}, 0x01fa }, // U01FA # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x006f, 0x0061, 0, 0}, 0x01fb }, // U01FB # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0070, 0, 0, 0}, 0x1e55 }, // U1E55 # LATIN SMALL LETTER P WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0072, 0, 0, 0}, 0x0155 }, // U0155 # LATIN SMALL LETTER R WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0073, 0, 0, 0}, 0x015b }, // U015B # LATIN SMALL LETTER S WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0075, 0, 0, 0}, 0x00fa }, // U00FA # LATIN SMALL LETTER U WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0077, 0, 0, 0}, 0x1e83 }, // U1E83 # LATIN SMALL LETTER W WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0079, 0, 0, 0}, 0x00fd }, // U00FD # LATIN SMALL LETTER Y WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x007a, 0, 0, 0}, 0x017a }, // U017A # LATIN SMALL LETTER Z WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x007e, 0x004f, 0, 0}, 0x1e4c }, // U1E4C # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x007e, 0x0055, 0, 0}, 0x1e78 }, // U1E78 # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x007e, 0x006f, 0, 0}, 0x1e4d }, // U1E4D # LATIN SMALL LETTER O WITH TILDE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x007e, 0x0075, 0, 0}, 0x1e79 }, // U1E79 # LATIN SMALL LETTER U WITH TILDE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x00af, 0x0045, 0, 0}, 0x1e16 }, // U1E16 # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x00af, 0x004f, 0, 0}, 0x1e52 }, // U1E52 # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x00af, 0x0065, 0, 0}, 0x1e17 }, // U1E17 # LATIN SMALL LETTER E WITH MACRON AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x00af, 0x006f, 0, 0}, 0x1e53 }, // U1E53 # LATIN SMALL LETTER O WITH MACRON AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x00c2, 0, 0, 0}, 0x1ea4 }, // U1EA4 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x00c5, 0, 0, 0}, 0x01fa }, // U01FA # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x00c6, 0, 0, 0}, 0x01fc }, // U01FC # LATIN CAPITAL LETTER AE WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x00c7, 0, 0, 0}, 0x1e08 }, // U1E08 # LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x00ca, 0, 0, 0}, 0x1ebe }, // U1EBE # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x00cf, 0, 0, 0}, 0x1e2e }, // U1E2E # LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x00d4, 0, 0, 0}, 0x1ed0 }, // U1ED0 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x00d5, 0, 0, 0}, 0x1e4c }, // U1E4C # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x00d8, 0, 0, 0}, 0x01fe }, // U01FE # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x00dc, 0, 0, 0}, 0x01d7 }, // U01D7 # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x00e2, 0, 0, 0}, 0x1ea5 }, // U1EA5 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x00e5, 0, 0, 0}, 0x01fb }, // U01FB # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x00e6, 0, 0, 0}, 0x01fd }, // U01FD # LATIN SMALL LETTER AE WITH ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x00e7, 0, 0, 0}, 0x1e09 }, // U1E09 # LATIN SMALL LETTER C WITH CEDILLA AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x00ea, 0, 0, 0}, 0x1ebf }, // U1EBF # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x00ef, 0, 0, 0}, 0x1e2f }, // U1E2F # LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x00f4, 0, 0, 0}, 0x1ed1 }, // U1ED1 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x00f5, 0, 0, 0}, 0x1e4d }, // U1E4D # LATIN SMALL LETTER O WITH TILDE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x00f8, 0, 0, 0}, 0x01ff }, // U01FF # LATIN SMALL LETTER O WITH STROKE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x00fc, 0, 0, 0}, 0x01d8 }, // U01D8 # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0102, 0, 0, 0}, 0x1eae }, // U1EAE # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0103, 0, 0, 0}, 0x1eaf }, // U1EAF # LATIN SMALL LETTER A WITH BREVE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0112, 0, 0, 0}, 0x1e16 }, // U1E16 # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0113, 0, 0, 0}, 0x1e17 }, // U1E17 # LATIN SMALL LETTER E WITH MACRON AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x014c, 0, 0, 0}, 0x1e52 }, // U1E52 # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x014d, 0, 0, 0}, 0x1e53 }, // U1E53 # LATIN SMALL LETTER O WITH MACRON AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0168, 0, 0, 0}, 0x1e78 }, // U1E78 # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0169, 0, 0, 0}, 0x1e79 }, // U1E79 # LATIN SMALL LETTER U WITH TILDE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0313, 0x0391, 0, 0}, 0x1f0c }, // U1F0C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0313, 0x0395, 0, 0}, 0x1f1c }, // U1F1C # GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0313, 0x0397, 0, 0}, 0x1f2c }, // U1F2C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0313, 0x0399, 0, 0}, 0x1f3c }, // U1F3C # GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0313, 0x039f, 0, 0}, 0x1f4c }, // U1F4C # GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0313, 0x03a9, 0, 0}, 0x1f6c }, // U1F6C # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0313, 0x03b1, 0, 0}, 0x1f04 }, // U1F04 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0313, 0x03b5, 0, 0}, 0x1f14 }, // U1F14 # GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0313, 0x03b7, 0, 0}, 0x1f24 }, // U1F24 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0313, 0x03b9, 0, 0}, 0x1f34 }, // U1F34 # GREEK SMALL LETTER IOTA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0313, 0x03bf, 0, 0}, 0x1f44 }, // U1F44 # GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0313, 0x03c5, 0, 0}, 0x1f54 }, // U1F54 # GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0313, 0x03c9, 0, 0}, 0x1f64 }, // U1F64 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0314, 0x0391, 0, 0}, 0x1f0d }, // U1F0D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0314, 0x0395, 0, 0}, 0x1f1d }, // U1F1D # GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0314, 0x0397, 0, 0}, 0x1f2d }, // U1F2D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0314, 0x0399, 0, 0}, 0x1f3d }, // U1F3D # GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0314, 0x039f, 0, 0}, 0x1f4d }, // U1F4D # GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0314, 0x03a5, 0, 0}, 0x1f5d }, // U1F5D # GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0314, 0x03a9, 0, 0}, 0x1f6d }, // U1F6D # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0314, 0x03b1, 0, 0}, 0x1f05 }, // U1F05 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0314, 0x03b5, 0, 0}, 0x1f15 }, // U1F15 # GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0314, 0x03b7, 0, 0}, 0x1f25 }, // U1F25 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0314, 0x03b9, 0, 0}, 0x1f35 }, // U1F35 # GREEK SMALL LETTER IOTA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0314, 0x03bf, 0, 0}, 0x1f45 }, // U1F45 # GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0314, 0x03c5, 0, 0}, 0x1f55 }, // U1F55 # GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0314, 0x03c9, 0, 0}, 0x1f65 }, // U1F65 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0391, 0, 0, 0}, 0x0386 }, // U0386 # GREEK CAPITAL LETTER ALPHA WITH TONOS ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0395, 0, 0, 0}, 0x0388 }, // U0388 # GREEK CAPITAL LETTER EPSILON WITH TONOS ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0397, 0, 0, 0}, 0x0389 }, // U0389 # GREEK CAPITAL LETTER ETA WITH TONOS ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0399, 0, 0, 0}, 0x038a }, // U038A # GREEK CAPITAL LETTER IOTA WITH TONOS ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x039f, 0, 0, 0}, 0x038c }, // U038C # GREEK CAPITAL LETTER OMICRON WITH TONOS ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x03a5, 0, 0, 0}, 0x038e }, // U038E # GREEK CAPITAL LETTER UPSILON WITH TONOS ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x03a9, 0, 0, 0}, 0x038f }, // U038F # GREEK CAPITAL LETTER OMEGA WITH TONOS ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x03b1, 0, 0, 0}, 0x03ac }, // U03AC # GREEK SMALL LETTER ALPHA WITH TONOS ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x03b5, 0, 0, 0}, 0x03ad }, // U03AD # GREEK SMALL LETTER EPSILON WITH TONOS ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x03b7, 0, 0, 0}, 0x03ae }, // U03AE # GREEK SMALL LETTER ETA WITH TONOS ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x03b9, 0, 0, 0}, 0x03af }, // U03AF # GREEK SMALL LETTER IOTA WITH TONOS ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x03bf, 0, 0, 0}, 0x03cc }, // U03CC # GREEK SMALL LETTER OMICRON WITH TONOS ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x03c5, 0, 0, 0}, 0x03cd }, // U03CD # GREEK SMALL LETTER UPSILON WITH TONOS ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x03c9, 0, 0, 0}, 0x03ce }, // U03CE # GREEK SMALL LETTER OMEGA WITH TONOS ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x03ca, 0, 0, 0}, 0x0390 }, // U0390 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x03cb, 0, 0, 0}, 0x03b0 }, // U03B0 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x03d2, 0, 0, 0}, 0x03d3 }, // U03D3 # GREEK UPSILON WITH ACUTE AND HOOK SYMBOL ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0413, 0, 0, 0}, 0x0403 }, // U0403 # CYRILLIC CAPITAL LETTER GJE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x041a, 0, 0, 0}, 0x040c }, // U040C # CYRILLIC CAPITAL LETTER KJE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0433, 0, 0, 0}, 0x0453 }, // U0453 # CYRILLIC SMALL LETTER GJE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x043a, 0, 0, 0}, 0x045c }, // U045C # CYRILLIC SMALL LETTER KJE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f00, 0, 0, 0}, 0x1f04 }, // U1F04 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f01, 0, 0, 0}, 0x1f05 }, // U1F05 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f08, 0, 0, 0}, 0x1f0c }, // U1F0C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f09, 0, 0, 0}, 0x1f0d }, // U1F0D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f10, 0, 0, 0}, 0x1f14 }, // U1F14 # GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f11, 0, 0, 0}, 0x1f15 }, // U1F15 # GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f18, 0, 0, 0}, 0x1f1c }, // U1F1C # GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f19, 0, 0, 0}, 0x1f1d }, // U1F1D # GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f20, 0, 0, 0}, 0x1f24 }, // U1F24 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f21, 0, 0, 0}, 0x1f25 }, // U1F25 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f28, 0, 0, 0}, 0x1f2c }, // U1F2C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f29, 0, 0, 0}, 0x1f2d }, // U1F2D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f30, 0, 0, 0}, 0x1f34 }, // U1F34 # GREEK SMALL LETTER IOTA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f31, 0, 0, 0}, 0x1f35 }, // U1F35 # GREEK SMALL LETTER IOTA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f38, 0, 0, 0}, 0x1f3c }, // U1F3C # GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f39, 0, 0, 0}, 0x1f3d }, // U1F3D # GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f40, 0, 0, 0}, 0x1f44 }, // U1F44 # GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f41, 0, 0, 0}, 0x1f45 }, // U1F45 # GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f48, 0, 0, 0}, 0x1f4c }, // U1F4C # GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f49, 0, 0, 0}, 0x1f4d }, // U1F4D # GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f50, 0, 0, 0}, 0x1f54 }, // U1F54 # GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f51, 0, 0, 0}, 0x1f55 }, // U1F55 # GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f59, 0, 0, 0}, 0x1f5d }, // U1F5D # GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f60, 0, 0, 0}, 0x1f64 }, // U1F64 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f61, 0, 0, 0}, 0x1f65 }, // U1F65 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f68, 0, 0, 0}, 0x1f6c }, // U1F6C # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f69, 0, 0, 0}, 0x1f6d }, // U1F6D # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Circumflex), 0x0041, 0, 0}, 0x1ea4 }, // U1EA4 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Circumflex), 0x0045, 0, 0}, 0x1ebe }, // U1EBE # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Circumflex), 0x004f, 0, 0}, 0x1ed0 }, // U1ED0 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Circumflex), 0x0061, 0, 0}, 0x1ea5 }, // U1EA5 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Circumflex), 0x0065, 0, 0}, 0x1ebf }, // U1EBF # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Circumflex), 0x006f, 0, 0}, 0x1ed1 }, // U1ED1 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Tilde), 0x004f, 0, 0}, 0x1e4c }, // U1E4C # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Tilde), 0x0055, 0, 0}, 0x1e78 }, // U1E78 # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Tilde), 0x006f, 0, 0}, 0x1e4d }, // U1E4D # LATIN SMALL LETTER O WITH TILDE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Tilde), 0x0075, 0, 0}, 0x1e79 }, // U1E79 # LATIN SMALL LETTER U WITH TILDE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Macron), 0x0045, 0, 0}, 0x1e16 }, // U1E16 # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Macron), 0x004f, 0, 0}, 0x1e52 }, // U1E52 # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Macron), 0x0065, 0, 0}, 0x1e17 }, // U1E17 # LATIN SMALL LETTER E WITH MACRON AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Macron), 0x006f, 0, 0}, 0x1e53 }, // U1E53 # LATIN SMALL LETTER O WITH MACRON AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Breve), 0x0041, 0, 0}, 0x1eae }, // U1EAE # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Breve), 0x0061, 0, 0}, 0x1eaf }, // U1EAF # LATIN SMALL LETTER A WITH BREVE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Diaeresis), 0x0049, 0, 0}, 0x1e2e }, // U1E2E # LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Diaeresis), 0x0055, 0, 0}, 0x01d7 }, // U01D7 # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Diaeresis), 0x0069, 0, 0}, 0x1e2f }, // U1E2F # LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Diaeresis), 0x0075, 0, 0}, 0x01d8 }, // U01D8 # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Diaeresis), 0x03b9, 0, 0}, 0x0390 }, // U0390 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Diaeresis), 0x03c5, 0, 0}, 0x03b0 }, // U03B0 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Abovering), 0x0041, 0, 0}, 0x01fa }, // U01FA # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Abovering), 0x0061, 0, 0}, 0x01fb }, // U01FB # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Cedilla), 0x0043, 0, 0}, 0x1e08 }, // U1E08 # LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Cedilla), 0x0063, 0, 0}, 0x1e09 }, // U1E09 # LATIN SMALL LETTER C WITH CEDILLA AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Horn), 0x004f, 0, 0}, 0x1eda }, // U1EDA # LATIN CAPITAL LETTER O WITH HORN AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Horn), 0x0055, 0, 0}, 0x1ee8 }, // U1EE8 # LATIN CAPITAL LETTER U WITH HORN AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Horn), 0x006f, 0, 0}, 0x1edb }, // U1EDB # LATIN SMALL LETTER O WITH HORN AND ACUTE ++ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Horn), 0x0075, 0, 0}, 0x1ee9 }, // U1EE9 # LATIN SMALL LETTER U WITH HORN AND ACUTE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0028, 0x0391, 0}, 0x1f8d }, // U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0028, 0x0391, 0}, 0x1f8b }, // U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0028, 0x0397, 0}, 0x1f9b }, // U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0028, 0x0397, 0}, 0x1f9d }, // U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0028, 0x03a9, 0}, 0x1fab }, // U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0028, 0x03a9, 0}, 0x1fad }, // U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0028, 0x03b1, 0}, 0x1f85 }, // U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0028, 0x03b1, 0}, 0x1f83 }, // U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0028, 0x03b7, 0}, 0x1f93 }, // U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0028, 0x03b7, 0}, 0x1f95 }, // U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0028, 0x03c9, 0}, 0x1fa3 }, // U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0028, 0x03c9, 0}, 0x1fa5 }, // U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0029, 0x0391, 0}, 0x1f8c }, // U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0029, 0x0391, 0}, 0x1f8a }, // U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0029, 0x0397, 0}, 0x1f9c }, // U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0029, 0x0397, 0}, 0x1f9a }, // U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0029, 0x03a9, 0}, 0x1faa }, // U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0029, 0x03a9, 0}, 0x1fac }, // U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0029, 0x03b1, 0}, 0x1f84 }, // U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0029, 0x03b1, 0}, 0x1f82 }, // U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0029, 0x03b7, 0}, 0x1f92 }, // U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0029, 0x03b7, 0}, 0x1f94 }, // U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0029, 0x03c9, 0}, 0x1fa4 }, // U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0029, 0x03c9, 0}, 0x1fa2 }, // U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0313, 0x0391, 0}, 0x1f8c }, // U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0313, 0x0391, 0}, 0x1f8a }, // U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0313, 0x0397, 0}, 0x1f9a }, // U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0313, 0x0397, 0}, 0x1f9c }, // U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0313, 0x03a9, 0}, 0x1faa }, // U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0313, 0x03a9, 0}, 0x1fac }, // U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0313, 0x03b1, 0}, 0x1f82 }, // U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0313, 0x03b1, 0}, 0x1f84 }, // U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0313, 0x03b7, 0}, 0x1f92 }, // U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0313, 0x03b7, 0}, 0x1f94 }, // U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0313, 0x03c9, 0}, 0x1fa4 }, // U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0313, 0x03c9, 0}, 0x1fa2 }, // U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0314, 0x0391, 0}, 0x1f8b }, // U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0314, 0x0391, 0}, 0x1f8d }, // U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0314, 0x0397, 0}, 0x1f9b }, // U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0314, 0x0397, 0}, 0x1f9d }, // U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0314, 0x03a9, 0}, 0x1fab }, // U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0314, 0x03a9, 0}, 0x1fad }, // U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0314, 0x03b1, 0}, 0x1f85 }, // U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0314, 0x03b1, 0}, 0x1f83 }, // U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0314, 0x03b7, 0}, 0x1f95 }, // U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0314, 0x03b7, 0}, 0x1f93 }, // U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0314, 0x03c9, 0}, 0x1fa5 }, // U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0314, 0x03c9, 0}, 0x1fa3 }, // U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x03b1, 0, 0}, 0x1fb4 }, // U1FB4 # GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x03b1, 0, 0}, 0x1fb2 }, // U1FB2 # GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x03b7, 0, 0}, 0x1fc4 }, // U1FC4 # GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x03b7, 0, 0}, 0x1fc2 }, // U1FC2 # GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x03c9, 0, 0}, 0x1ff4 }, // U1FF4 # GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x03c9, 0, 0}, 0x1ff2 }, // U1FF2 # GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x1f00, 0, 0}, 0x1f84 }, // U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x1f00, 0, 0}, 0x1f82 }, // U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x1f01, 0, 0}, 0x1f83 }, // U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x1f01, 0, 0}, 0x1f85 }, // U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x1f08, 0, 0}, 0x1f8c }, // U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x1f08, 0, 0}, 0x1f8a }, // U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x1f09, 0, 0}, 0x1f8b }, // U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x1f09, 0, 0}, 0x1f8d }, // U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x1f20, 0, 0}, 0x1f92 }, // U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x1f20, 0, 0}, 0x1f94 }, // U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x1f21, 0, 0}, 0x1f93 }, // U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x1f21, 0, 0}, 0x1f95 }, // U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x1f28, 0, 0}, 0x1f9c }, // U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x1f28, 0, 0}, 0x1f9a }, // U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x1f29, 0, 0}, 0x1f9b }, // U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x1f29, 0, 0}, 0x1f9d }, // U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x1f60, 0, 0}, 0x1fa2 }, // U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x1f60, 0, 0}, 0x1fa4 }, // U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x1f61, 0, 0}, 0x1fa5 }, // U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x1f61, 0, 0}, 0x1fa3 }, // U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x1f68, 0, 0}, 0x1fac }, // U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x1f68, 0, 0}, 0x1faa }, // U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x1f69, 0, 0}, 0x1fad }, // U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x1f69, 0, 0}, 0x1fab }, // U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x0028, 0x0391, 0}, 0x1f8d }, // U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x0028, 0x0397, 0}, 0x1f9d }, // U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x0028, 0x03a9, 0}, 0x1fad }, // U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x0028, 0x03b1, 0}, 0x1f85 }, // U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x0028, 0x03b7, 0}, 0x1f95 }, // U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x0028, 0x03c9, 0}, 0x1fa5 }, // U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x0029, 0x0391, 0}, 0x1f8c }, // U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x0029, 0x0397, 0}, 0x1f9c }, // U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x0029, 0x03a9, 0}, 0x1fac }, // U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x0029, 0x03b1, 0}, 0x1f84 }, // U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x0029, 0x03b7, 0}, 0x1f94 }, // U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x0029, 0x03c9, 0}, 0x1fa4 }, // U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x0313, 0x0391, 0}, 0x1f8c }, // U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x0313, 0x0397, 0}, 0x1f9c }, // U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x0313, 0x03a9, 0}, 0x1fac }, // U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x0313, 0x03b1, 0}, 0x1f84 }, // U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x0313, 0x03b7, 0}, 0x1f94 }, // U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x0313, 0x03c9, 0}, 0x1fa4 }, // U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x0314, 0x0391, 0}, 0x1f8d }, // U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x0314, 0x0397, 0}, 0x1f9d }, // U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x0314, 0x03a9, 0}, 0x1fad }, // U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x0314, 0x03b1, 0}, 0x1f85 }, // U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x0314, 0x03b7, 0}, 0x1f95 }, // U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x0314, 0x03c9, 0}, 0x1fa5 }, // U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x03b1, 0, 0}, 0x1fb4 }, // U1FB4 # GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x03b7, 0, 0}, 0x1fc4 }, // U1FC4 # GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x03c9, 0, 0}, 0x1ff4 }, // U1FF4 # GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x1f00, 0, 0}, 0x1f84 }, // U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x1f01, 0, 0}, 0x1f85 }, // U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x1f08, 0, 0}, 0x1f8c }, // U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x1f09, 0, 0}, 0x1f8d }, // U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x1f20, 0, 0}, 0x1f94 }, // U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x1f21, 0, 0}, 0x1f95 }, // U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x1f28, 0, 0}, 0x1f9c }, // U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x1f29, 0, 0}, 0x1f9d }, // U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x1f60, 0, 0}, 0x1fa4 }, // U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x1f61, 0, 0}, 0x1fa5 }, // U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x1f68, 0, 0}, 0x1fac }, // U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x1f69, 0, 0}, 0x1fad }, // U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0028, 0x0391, 0, 0}, 0x1f89 }, // U1F89 # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0028, 0x0397, 0, 0}, 0x1f99 }, // U1F99 # GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0028, 0x03a9, 0, 0}, 0x1fa9 }, // U1FA9 # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0028, 0x03b1, 0, 0}, 0x1f81 }, // U1F81 # GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0028, 0x03b7, 0, 0}, 0x1f91 }, // U1F91 # GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0028, 0x03c9, 0, 0}, 0x1fa1 }, // U1FA1 # GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0029, 0x0391, 0, 0}, 0x1f88 }, // U1F88 # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0029, 0x0397, 0, 0}, 0x1f98 }, // U1F98 # GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0029, 0x03a9, 0, 0}, 0x1fa8 }, // U1FA8 # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0029, 0x03b1, 0, 0}, 0x1f80 }, // U1F80 # GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0029, 0x03b7, 0, 0}, 0x1f90 }, // U1F90 # GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0029, 0x03c9, 0, 0}, 0x1fa0 }, // U1FA0 # GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x0028, 0x0391, 0}, 0x1f8b }, // U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x0028, 0x0397, 0}, 0x1f9b }, // U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x0028, 0x03a9, 0}, 0x1fab }, // U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x0028, 0x03b1, 0}, 0x1f83 }, // U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x0028, 0x03b7, 0}, 0x1f93 }, // U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x0028, 0x03c9, 0}, 0x1fa3 }, // U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x0029, 0x0391, 0}, 0x1f8a }, // U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x0029, 0x0397, 0}, 0x1f9a }, // U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x0029, 0x03a9, 0}, 0x1faa }, // U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x0029, 0x03b1, 0}, 0x1f82 }, // U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x0029, 0x03b7, 0}, 0x1f92 }, // U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x0029, 0x03c9, 0}, 0x1fa2 }, // U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x0313, 0x0391, 0}, 0x1f8a }, // U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x0313, 0x0397, 0}, 0x1f9a }, // U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x0313, 0x03a9, 0}, 0x1faa }, // U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x0313, 0x03b1, 0}, 0x1f82 }, // U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x0313, 0x03b7, 0}, 0x1f92 }, // U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x0313, 0x03c9, 0}, 0x1fa2 }, // U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x0314, 0x0391, 0}, 0x1f8b }, // U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x0314, 0x0397, 0}, 0x1f9b }, // U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x0314, 0x03a9, 0}, 0x1fab }, // U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x0314, 0x03b1, 0}, 0x1f83 }, // U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x0314, 0x03b7, 0}, 0x1f93 }, // U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x0314, 0x03c9, 0}, 0x1fa3 }, // U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x03b1, 0, 0}, 0x1fb2 }, // U1FB2 # GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x03b7, 0, 0}, 0x1fc2 }, // U1FC2 # GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x03c9, 0, 0}, 0x1ff2 }, // U1FF2 # GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x1f00, 0, 0}, 0x1f82 }, // U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x1f01, 0, 0}, 0x1f83 }, // U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x1f08, 0, 0}, 0x1f8a }, // U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x1f09, 0, 0}, 0x1f8b }, // U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x1f20, 0, 0}, 0x1f92 }, // U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x1f21, 0, 0}, 0x1f93 }, // U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x1f28, 0, 0}, 0x1f9a }, // U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x1f29, 0, 0}, 0x1f9b }, // U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x1f60, 0, 0}, 0x1fa2 }, // U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x1f61, 0, 0}, 0x1fa3 }, // U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x1f68, 0, 0}, 0x1faa }, // U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x1f69, 0, 0}, 0x1fab }, // U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x0028, 0x0391, 0}, 0x1f8f }, // U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x0028, 0x0397, 0}, 0x1f9f }, // U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x0028, 0x03a9, 0}, 0x1faf }, // U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x0028, 0x03b1, 0}, 0x1f87 }, // U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x0028, 0x03b7, 0}, 0x1f97 }, // U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x0028, 0x03c9, 0}, 0x1fa7 }, // U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x0029, 0x0391, 0}, 0x1f8e }, // U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x0029, 0x0397, 0}, 0x1f9e }, // U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x0029, 0x03a9, 0}, 0x1fae }, // U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x0029, 0x03b1, 0}, 0x1f86 }, // U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x0029, 0x03b7, 0}, 0x1f96 }, // U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x0029, 0x03c9, 0}, 0x1fa6 }, // U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x0313, 0x0391, 0}, 0x1f8e }, // U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x0313, 0x0397, 0}, 0x1f9e }, // U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x0313, 0x03a9, 0}, 0x1fae }, // U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x0313, 0x03b1, 0}, 0x1f86 }, // U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x0313, 0x03b7, 0}, 0x1f96 }, // U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x0313, 0x03c9, 0}, 0x1fa6 }, // U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x0314, 0x0391, 0}, 0x1f8f }, // U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x0314, 0x0397, 0}, 0x1f9f }, // U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x0314, 0x03a9, 0}, 0x1faf }, // U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x0314, 0x03b1, 0}, 0x1f87 }, // U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x0314, 0x03b7, 0}, 0x1f97 }, // U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x0314, 0x03c9, 0}, 0x1fa7 }, // U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x03b1, 0, 0}, 0x1fb7 }, // U1FB7 # GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x03b7, 0, 0}, 0x1fc7 }, // U1FC7 # GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x03c9, 0, 0}, 0x1ff7 }, // U1FF7 # GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x1f00, 0, 0}, 0x1f86 }, // U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x1f01, 0, 0}, 0x1f87 }, // U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x1f08, 0, 0}, 0x1f8e }, // U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x1f09, 0, 0}, 0x1f8f }, // U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x1f20, 0, 0}, 0x1f96 }, // U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x1f21, 0, 0}, 0x1f97 }, // U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x1f28, 0, 0}, 0x1f9e }, // U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x1f29, 0, 0}, 0x1f9f }, // U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x1f60, 0, 0}, 0x1fa6 }, // U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x1f61, 0, 0}, 0x1fa7 }, // U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x1f68, 0, 0}, 0x1fae }, // U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x1f69, 0, 0}, 0x1faf }, // U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x0028, 0x0391, 0}, 0x1f8d }, // U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x0028, 0x0397, 0}, 0x1f9d }, // U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x0028, 0x03a9, 0}, 0x1fad }, // U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x0028, 0x03b1, 0}, 0x1f85 }, // U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x0028, 0x03b7, 0}, 0x1f95 }, // U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x0028, 0x03c9, 0}, 0x1fa5 }, // U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x0029, 0x0391, 0}, 0x1f8c }, // U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x0029, 0x0397, 0}, 0x1f9c }, // U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x0029, 0x03a9, 0}, 0x1fac }, // U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x0029, 0x03b1, 0}, 0x1f84 }, // U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x0029, 0x03b7, 0}, 0x1f94 }, // U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x0029, 0x03c9, 0}, 0x1fa4 }, // U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x0313, 0x0391, 0}, 0x1f8c }, // U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x0313, 0x0397, 0}, 0x1f9c }, // U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x0313, 0x03a9, 0}, 0x1fac }, // U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x0313, 0x03b1, 0}, 0x1f84 }, // U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x0313, 0x03b7, 0}, 0x1f94 }, // U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x0313, 0x03c9, 0}, 0x1fa4 }, // U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x0314, 0x0391, 0}, 0x1f8d }, // U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x0314, 0x0397, 0}, 0x1f9d }, // U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x0314, 0x03a9, 0}, 0x1fad }, // U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x0314, 0x03b1, 0}, 0x1f85 }, // U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x0314, 0x03b7, 0}, 0x1f95 }, // U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x0314, 0x03c9, 0}, 0x1fa5 }, // U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x03b1, 0, 0}, 0x1fb4 }, // U1FB4 # GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x03b7, 0, 0}, 0x1fc4 }, // U1FC4 # GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x03c9, 0, 0}, 0x1ff4 }, // U1FF4 # GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x1f00, 0, 0}, 0x1f84 }, // U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x1f01, 0, 0}, 0x1f85 }, // U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x1f08, 0, 0}, 0x1f8c }, // U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x1f09, 0, 0}, 0x1f8d }, // U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x1f20, 0, 0}, 0x1f94 }, // U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x1f21, 0, 0}, 0x1f95 }, // U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x1f28, 0, 0}, 0x1f9c }, // U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x1f29, 0, 0}, 0x1f9d }, // U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x1f60, 0, 0}, 0x1fa4 }, // U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x1f61, 0, 0}, 0x1fa5 }, // U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x1f68, 0, 0}, 0x1fac }, // U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x1f69, 0, 0}, 0x1fad }, // U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0313, 0x0391, 0, 0}, 0x1f88 }, // U1F88 # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0313, 0x0397, 0, 0}, 0x1f98 }, // U1F98 # GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0313, 0x03a9, 0, 0}, 0x1fa8 }, // U1FA8 # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0313, 0x03b1, 0, 0}, 0x1f80 }, // U1F80 # GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0313, 0x03b7, 0, 0}, 0x1f90 }, // U1F90 # GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0313, 0x03c9, 0, 0}, 0x1fa0 }, // U1FA0 # GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0314, 0x0391, 0, 0}, 0x1f89 }, // U1F89 # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0314, 0x0397, 0, 0}, 0x1f99 }, // U1F99 # GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0314, 0x03a9, 0, 0}, 0x1fa9 }, // U1FA9 # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0314, 0x03b1, 0, 0}, 0x1f81 }, // U1F81 # GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0314, 0x03b7, 0, 0}, 0x1f91 }, // U1F91 # GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0314, 0x03c9, 0, 0}, 0x1fa1 }, // U1FA1 # GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x0028, 0x0391, 0}, 0x1f8f }, // U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x0028, 0x0397, 0}, 0x1f9f }, // U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x0028, 0x03a9, 0}, 0x1faf }, // U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x0028, 0x03b1, 0}, 0x1f87 }, // U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x0028, 0x03b7, 0}, 0x1f97 }, // U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x0028, 0x03c9, 0}, 0x1fa7 }, // U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x0029, 0x0391, 0}, 0x1f8e }, // U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x0029, 0x0397, 0}, 0x1f9e }, // U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x0029, 0x03a9, 0}, 0x1fae }, // U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x0029, 0x03b1, 0}, 0x1f86 }, // U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x0029, 0x03b7, 0}, 0x1f96 }, // U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x0029, 0x03c9, 0}, 0x1fa6 }, // U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x0313, 0x0391, 0}, 0x1f8e }, // U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x0313, 0x0397, 0}, 0x1f9e }, // U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x0313, 0x03a9, 0}, 0x1fae }, // U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x0313, 0x03b1, 0}, 0x1f86 }, // U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x0313, 0x03b7, 0}, 0x1f96 }, // U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x0313, 0x03c9, 0}, 0x1fa6 }, // U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x0314, 0x0391, 0}, 0x1f8f }, // U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x0314, 0x0397, 0}, 0x1f9f }, // U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x0314, 0x03a9, 0}, 0x1faf }, // U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x0314, 0x03b1, 0}, 0x1f87 }, // U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x0314, 0x03b7, 0}, 0x1f97 }, // U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x0314, 0x03c9, 0}, 0x1fa7 }, // U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x03b1, 0, 0}, 0x1fb7 }, // U1FB7 # GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x03b7, 0, 0}, 0x1fc7 }, // U1FC7 # GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x03c9, 0, 0}, 0x1ff7 }, // U1FF7 # GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x1f00, 0, 0}, 0x1f86 }, // U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x1f01, 0, 0}, 0x1f87 }, // U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x1f08, 0, 0}, 0x1f8e }, // U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x1f09, 0, 0}, 0x1f8f }, // U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x1f20, 0, 0}, 0x1f96 }, // U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x1f21, 0, 0}, 0x1f97 }, // U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x1f28, 0, 0}, 0x1f9e }, // U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x1f29, 0, 0}, 0x1f9f }, // U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x1f60, 0, 0}, 0x1fa6 }, // U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x1f61, 0, 0}, 0x1fa7 }, // U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x1f68, 0, 0}, 0x1fae }, // U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x1f69, 0, 0}, 0x1faf }, // U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0391, 0, 0, 0}, 0x1fbc }, // U1FBC # GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0397, 0, 0, 0}, 0x1fcc }, // U1FCC # GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x03a9, 0, 0, 0}, 0x1ffc }, // U1FFC # GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x03ac, 0, 0, 0}, 0x1fb4 }, // U1FB4 # GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x03ae, 0, 0, 0}, 0x1fc4 }, // U1FC4 # GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x03b1, 0, 0, 0}, 0x1fb3 }, // U1FB3 # GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x03b7, 0, 0, 0}, 0x1fc3 }, // U1FC3 # GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x03c9, 0, 0, 0}, 0x1ff3 }, // U1FF3 # GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x03ce, 0, 0, 0}, 0x1ff4 }, // U1FF4 # GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f00, 0, 0, 0}, 0x1f80 }, // U1F80 # GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f01, 0, 0, 0}, 0x1f81 }, // U1F81 # GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f02, 0, 0, 0}, 0x1f82 }, // U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f03, 0, 0, 0}, 0x1f83 }, // U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f04, 0, 0, 0}, 0x1f84 }, // U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f05, 0, 0, 0}, 0x1f85 }, // U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f06, 0, 0, 0}, 0x1f86 }, // U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f07, 0, 0, 0}, 0x1f87 }, // U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f08, 0, 0, 0}, 0x1f88 }, // U1F88 # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f09, 0, 0, 0}, 0x1f89 }, // U1F89 # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f0a, 0, 0, 0}, 0x1f8a }, // U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f0b, 0, 0, 0}, 0x1f8b }, // U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f0c, 0, 0, 0}, 0x1f8c }, // U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f0d, 0, 0, 0}, 0x1f8d }, // U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f0e, 0, 0, 0}, 0x1f8e }, // U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f0f, 0, 0, 0}, 0x1f8f }, // U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f20, 0, 0, 0}, 0x1f90 }, // U1F90 # GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f21, 0, 0, 0}, 0x1f91 }, // U1F91 # GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f22, 0, 0, 0}, 0x1f92 }, // U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f23, 0, 0, 0}, 0x1f93 }, // U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f24, 0, 0, 0}, 0x1f94 }, // U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f25, 0, 0, 0}, 0x1f95 }, // U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f26, 0, 0, 0}, 0x1f96 }, // U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f27, 0, 0, 0}, 0x1f97 }, // U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f28, 0, 0, 0}, 0x1f98 }, // U1F98 # GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f29, 0, 0, 0}, 0x1f99 }, // U1F99 # GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f2a, 0, 0, 0}, 0x1f9a }, // U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f2b, 0, 0, 0}, 0x1f9b }, // U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f2c, 0, 0, 0}, 0x1f9c }, // U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f2d, 0, 0, 0}, 0x1f9d }, // U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f2e, 0, 0, 0}, 0x1f9e }, // U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f2f, 0, 0, 0}, 0x1f9f }, // U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f60, 0, 0, 0}, 0x1fa0 }, // U1FA0 # GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f61, 0, 0, 0}, 0x1fa1 }, // U1FA1 # GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f62, 0, 0, 0}, 0x1fa2 }, // U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f63, 0, 0, 0}, 0x1fa3 }, // U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f64, 0, 0, 0}, 0x1fa4 }, // U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f65, 0, 0, 0}, 0x1fa5 }, // U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f66, 0, 0, 0}, 0x1fa6 }, // U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f67, 0, 0, 0}, 0x1fa7 }, // U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f68, 0, 0, 0}, 0x1fa8 }, // U1FA8 # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f69, 0, 0, 0}, 0x1fa9 }, // U1FA9 # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f6a, 0, 0, 0}, 0x1faa }, // U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f6b, 0, 0, 0}, 0x1fab }, // U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f6c, 0, 0, 0}, 0x1fac }, // U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f6d, 0, 0, 0}, 0x1fad }, // U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f6e, 0, 0, 0}, 0x1fae }, // U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f6f, 0, 0, 0}, 0x1faf }, // U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f70, 0, 0, 0}, 0x1fb2 }, // U1FB2 # GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f74, 0, 0, 0}, 0x1fc2 }, // U1FC2 # GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f7c, 0, 0, 0}, 0x1ff2 }, // U1FF2 # GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1fb6, 0, 0, 0}, 0x1fb7 }, // U1FB7 # GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1fc6, 0, 0, 0}, 0x1fc7 }, // U1FC7 # GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1ff6, 0, 0, 0}, 0x1ff7 }, // U1FF7 # GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x0028, 0x0391, 0}, 0x1f8b }, // U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x0028, 0x0397, 0}, 0x1f9b }, // U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x0028, 0x03a9, 0}, 0x1fab }, // U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x0028, 0x03b1, 0}, 0x1f83 }, // U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x0028, 0x03b7, 0}, 0x1f93 }, // U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x0028, 0x03c9, 0}, 0x1fa3 }, // U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x0029, 0x0391, 0}, 0x1f8a }, // U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x0029, 0x0397, 0}, 0x1f9a }, // U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x0029, 0x03a9, 0}, 0x1faa }, // U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x0029, 0x03b1, 0}, 0x1f82 }, // U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x0029, 0x03b7, 0}, 0x1f92 }, // U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x0029, 0x03c9, 0}, 0x1fa2 }, // U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x0313, 0x0391, 0}, 0x1f8a }, // U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x0313, 0x0397, 0}, 0x1f9a }, // U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x0313, 0x03a9, 0}, 0x1faa }, // U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x0313, 0x03b1, 0}, 0x1f82 }, // U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x0313, 0x03b7, 0}, 0x1f92 }, // U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x0313, 0x03c9, 0}, 0x1fa2 }, // U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x0314, 0x0391, 0}, 0x1f8b }, // U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x0314, 0x0397, 0}, 0x1f9b }, // U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x0314, 0x03a9, 0}, 0x1fab }, // U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x0314, 0x03b1, 0}, 0x1f83 }, // U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x0314, 0x03b7, 0}, 0x1f93 }, // U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x0314, 0x03c9, 0}, 0x1fa3 }, // U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x03b1, 0, 0}, 0x1fb2 }, // U1FB2 # GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x03b7, 0, 0}, 0x1fc2 }, // U1FC2 # GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x03c9, 0, 0}, 0x1ff2 }, // U1FF2 # GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x1f00, 0, 0}, 0x1f82 }, // U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x1f01, 0, 0}, 0x1f83 }, // U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x1f08, 0, 0}, 0x1f8a }, // U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x1f09, 0, 0}, 0x1f8b }, // U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x1f20, 0, 0}, 0x1f92 }, // U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x1f21, 0, 0}, 0x1f93 }, // U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x1f28, 0, 0}, 0x1f9a }, // U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x1f29, 0, 0}, 0x1f9b }, // U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x1f60, 0, 0}, 0x1fa2 }, // U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x1f61, 0, 0}, 0x1fa3 }, // U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x1f68, 0, 0}, 0x1faa }, // U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x1f69, 0, 0}, 0x1fab }, // U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x0028, 0x0391, 0}, 0x1f8d }, // U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x0028, 0x0397, 0}, 0x1f9d }, // U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x0028, 0x03a9, 0}, 0x1fad }, // U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x0028, 0x03b1, 0}, 0x1f85 }, // U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x0028, 0x03b7, 0}, 0x1f95 }, // U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x0028, 0x03c9, 0}, 0x1fa5 }, // U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x0029, 0x0391, 0}, 0x1f8c }, // U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x0029, 0x0397, 0}, 0x1f9c }, // U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x0029, 0x03a9, 0}, 0x1fac }, // U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x0029, 0x03b1, 0}, 0x1f84 }, // U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x0029, 0x03b7, 0}, 0x1f94 }, // U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x0029, 0x03c9, 0}, 0x1fa4 }, // U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x0313, 0x0391, 0}, 0x1f8c }, // U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x0313, 0x0397, 0}, 0x1f9c }, // U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x0313, 0x03a9, 0}, 0x1fac }, // U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x0313, 0x03b1, 0}, 0x1f84 }, // U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x0313, 0x03b7, 0}, 0x1f94 }, // U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x0313, 0x03c9, 0}, 0x1fa4 }, // U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x0314, 0x0391, 0}, 0x1f8d }, // U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x0314, 0x0397, 0}, 0x1f9d }, // U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x0314, 0x03a9, 0}, 0x1fad }, // U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x0314, 0x03b1, 0}, 0x1f85 }, // U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x0314, 0x03b7, 0}, 0x1f95 }, // U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x0314, 0x03c9, 0}, 0x1fa5 }, // U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x03b1, 0, 0}, 0x1fb4 }, // U1FB4 # GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x03b7, 0, 0}, 0x1fc4 }, // U1FC4 # GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x03c9, 0, 0}, 0x1ff4 }, // U1FF4 # GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x1f00, 0, 0}, 0x1f84 }, // U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x1f01, 0, 0}, 0x1f85 }, // U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x1f08, 0, 0}, 0x1f8c }, // U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x1f09, 0, 0}, 0x1f8d }, // U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x1f20, 0, 0}, 0x1f94 }, // U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x1f21, 0, 0}, 0x1f95 }, // U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x1f28, 0, 0}, 0x1f9c }, // U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x1f29, 0, 0}, 0x1f9d }, // U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x1f60, 0, 0}, 0x1fa4 }, // U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x1f61, 0, 0}, 0x1fa5 }, // U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x1f68, 0, 0}, 0x1fac }, // U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x1f69, 0, 0}, 0x1fad }, // U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x0028, 0x0391, 0}, 0x1f8f }, // U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x0028, 0x0397, 0}, 0x1f9f }, // U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x0028, 0x03a9, 0}, 0x1faf }, // U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x0028, 0x03b1, 0}, 0x1f87 }, // U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x0028, 0x03b7, 0}, 0x1f97 }, // U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x0028, 0x03c9, 0}, 0x1fa7 }, // U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x0029, 0x0391, 0}, 0x1f8e }, // U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x0029, 0x0397, 0}, 0x1f9e }, // U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x0029, 0x03a9, 0}, 0x1fae }, // U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x0029, 0x03b1, 0}, 0x1f86 }, // U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x0029, 0x03b7, 0}, 0x1f96 }, // U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x0029, 0x03c9, 0}, 0x1fa6 }, // U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x0313, 0x0391, 0}, 0x1f8e }, // U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x0313, 0x0397, 0}, 0x1f9e }, // U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x0313, 0x03a9, 0}, 0x1fae }, // U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x0313, 0x03b1, 0}, 0x1f86 }, // U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x0313, 0x03b7, 0}, 0x1f96 }, // U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x0313, 0x03c9, 0}, 0x1fa6 }, // U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x0314, 0x0391, 0}, 0x1f8f }, // U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x0314, 0x0397, 0}, 0x1f9f }, // U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x0314, 0x03a9, 0}, 0x1faf }, // U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x0314, 0x03b1, 0}, 0x1f87 }, // U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x0314, 0x03b7, 0}, 0x1f97 }, // U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x0314, 0x03c9, 0}, 0x1fa7 }, // U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x03b1, 0, 0}, 0x1fb7 }, // U1FB7 # GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x03b7, 0, 0}, 0x1fc7 }, // U1FC7 # GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x03c9, 0, 0}, 0x1ff7 }, // U1FF7 # GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x1f00, 0, 0}, 0x1f86 }, // U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x1f01, 0, 0}, 0x1f87 }, // U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x1f08, 0, 0}, 0x1f8e }, // U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x1f09, 0, 0}, 0x1f8f }, // U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x1f20, 0, 0}, 0x1f96 }, // U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x1f21, 0, 0}, 0x1f97 }, // U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x1f28, 0, 0}, 0x1f9e }, // U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x1f29, 0, 0}, 0x1f9f }, // U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x1f60, 0, 0}, 0x1fa6 }, // U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x1f61, 0, 0}, 0x1fa7 }, // U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x1f68, 0, 0}, 0x1fae }, // U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x1f69, 0, 0}, 0x1faf }, // U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x05b4, 0x05d9, 0, 0, 0}, 0xfb1d }, // UFB1D # HEBREW LETTER YOD WITH HIRIQ ++ { {UNITIZE(Qt::Key_Multi_key), 0x05b7, 0x05d0, 0, 0, 0}, 0xfb2e }, // UFB2E # HEBREW LETTER ALEF WITH PATAH ++ { {UNITIZE(Qt::Key_Multi_key), 0x05b7, 0x05f2, 0, 0, 0}, 0xfb1f }, // UFB1F # HEBREW LIGATURE YIDDISH YOD YOD PATAH ++ { {UNITIZE(Qt::Key_Multi_key), 0x05b8, 0x05d0, 0, 0, 0}, 0xfb2f }, // UFB2F # HEBREW LETTER ALEF WITH QAMATS ++ { {UNITIZE(Qt::Key_Multi_key), 0x05b9, 0x05d5, 0, 0, 0}, 0xfb4b }, // UFB4B # HEBREW LETTER VAV WITH HOLAM ++ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05d0, 0, 0, 0}, 0xfb30 }, // UFB30 # HEBREW LETTER ALEF WITH MAPIQ ++ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05d1, 0, 0, 0}, 0xfb31 }, // UFB31 # HEBREW LETTER BET WITH DAGESH ++ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05d1, 0, 0, 0}, 0xfb31 }, // UFB31 # HEBREW LETTER BET WITH DAGESH ++ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05d2, 0, 0, 0}, 0xfb32 }, // UFB32 # HEBREW LETTER GIMEL WITH DAGESH ++ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05d2, 0, 0, 0}, 0xfb32 }, // UFB32 # HEBREW LETTER GIMEL WITH DAGESH ++ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05d3, 0, 0, 0}, 0xfb33 }, // UFB33 # HEBREW LETTER DALET WITH DAGESH ++ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05d3, 0, 0, 0}, 0xfb33 }, // UFB33 # HEBREW LETTER DALET WITH DAGESH ++ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05d4, 0, 0, 0}, 0xfb34 }, // UFB34 # HEBREW LETTER HE WITH MAPIQ ++ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05d5, 0, 0, 0}, 0xfb35 }, // UFB35 # HEBREW LETTER VAV WITH DAGESH ++ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05d6, 0, 0, 0}, 0xfb36 }, // UFB36 # HEBREW LETTER ZAYIN WITH DAGESH ++ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05d6, 0, 0, 0}, 0xfb36 }, // UFB36 # HEBREW LETTER ZAYIN WITH DAGESH ++ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05d8, 0, 0, 0}, 0xfb38 }, // UFB38 # HEBREW LETTER TET WITH DAGESH ++ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05d8, 0, 0, 0}, 0xfb38 }, // UFB38 # HEBREW LETTER TET WITH DAGESH ++ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05d9, 0, 0, 0}, 0xfb39 }, // UFB39 # HEBREW LETTER YOD WITH DAGESH ++ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05da, 0, 0, 0}, 0xfb3a }, // UFB3A # HEBREW LETTER FINAL KAF WITH DAGESH ++ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05db, 0, 0, 0}, 0xfb3b }, // UFB3B # HEBREW LETTER KAF WITH DAGESH ++ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05dc, 0, 0, 0}, 0xfb3c }, // UFB3C # HEBREW LETTER LAMED WITH DAGESH ++ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05de, 0, 0, 0}, 0xfb3e }, // UFB3E # HEBREW LETTER MEM WITH DAGESH ++ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05e0, 0, 0, 0}, 0xfb40 }, // UFB40 # HEBREW LETTER NUN WITH DAGESH ++ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05e1, 0, 0, 0}, 0xfb41 }, // UFB41 # HEBREW LETTER SAMEKH WITH DAGESH ++ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05e1, 0, 0, 0}, 0xfb41 }, // UFB41 # HEBREW LETTER SAMEKH WITH DAGESH ++ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05e3, 0, 0, 0}, 0xfb43 }, // UFB43 # HEBREW LETTER FINAL PE WITH DAGESH ++ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05e4, 0, 0, 0}, 0xfb44 }, // UFB44 # HEBREW LETTER PE WITH DAGESH ++ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05e6, 0, 0, 0}, 0xfb46 }, // UFB46 # HEBREW LETTER TSADI WITH DAGESH ++ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05e6, 0, 0, 0}, 0xfb46 }, // UFB46 # HEBREW LETTER TSADI WITH DAGESH ++ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05e7, 0, 0, 0}, 0xfb47 }, // UFB47 # HEBREW LETTER QOF WITH DAGESH ++ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05e7, 0, 0, 0}, 0xfb47 }, // UFB47 # HEBREW LETTER QOF WITH DAGESH ++ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05e8, 0, 0, 0}, 0xfb48 }, // UFB48 # HEBREW LETTER RESH WITH DAGESH ++ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05e9, 0, 0, 0}, 0xfb49 }, // UFB49 # HEBREW LETTER SHIN WITH DAGESH ++ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05ea, 0, 0, 0}, 0xfb4a }, // UFB4A # HEBREW LETTER TAV WITH DAGESH ++ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05ea, 0, 0, 0}, 0xfb4a }, // UFB4A # HEBREW LETTER TAV WITH DAGESH ++ { {UNITIZE(Qt::Key_Multi_key), 0x05bf, 0x05d1, 0, 0, 0}, 0xfb4c }, // UFB4C # HEBREW LETTER BET WITH RAFE ++ { {UNITIZE(Qt::Key_Multi_key), 0x05bf, 0x05d1, 0, 0, 0}, 0xfb4c }, // UFB4C # HEBREW LETTER BET WITH RAFE ++ { {UNITIZE(Qt::Key_Multi_key), 0x05bf, 0x05db, 0, 0, 0}, 0xfb4d }, // UFB4D # HEBREW LETTER KAF WITH RAFE ++ { {UNITIZE(Qt::Key_Multi_key), 0x05bf, 0x05e4, 0, 0, 0}, 0xfb4e }, // UFB4E # HEBREW LETTER PE WITH RAFE ++ { {UNITIZE(Qt::Key_Multi_key), 0x05c1, 0x05bc, 0x05e9, 0, 0}, 0xfb2c }, // UFB2C # HEBREW LETTER SHIN WITH DAGESH AND SHIN DOT ++ { {UNITIZE(Qt::Key_Multi_key), 0x05c1, 0x05e9, 0, 0, 0}, 0xfb2a }, // UFB2A # HEBREW LETTER SHIN WITH SHIN DOT ++ { {UNITIZE(Qt::Key_Multi_key), 0x05c1, 0xfb49, 0, 0, 0}, 0xfb2c }, // UFB2C # HEBREW LETTER SHIN WITH DAGESH AND SHIN DOT ++ { {UNITIZE(Qt::Key_Multi_key), 0x05c2, 0x05bc, 0x05e9, 0, 0}, 0xfb2d }, // UFB2D # HEBREW LETTER SHIN WITH DAGESH AND SIN DOT ++ { {UNITIZE(Qt::Key_Multi_key), 0x05c2, 0x05e9, 0, 0, 0}, 0xfb2b }, // UFB2B # HEBREW LETTER SHIN WITH SIN DOT ++ { {UNITIZE(Qt::Key_Multi_key), 0x05c2, 0xfb49, 0, 0, 0}, 0xfb2d }, // UFB2D # HEBREW LETTER SHIN WITH DAGESH AND SIN DOT ++ { {UNITIZE(Qt::Key_Multi_key), 0x0653, 0x0627, 0, 0, 0}, 0x0622 }, // U0622 # ARABIC LETTER ALEF WITH MADDA ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0654, 0x0627, 0, 0, 0}, 0x0623 }, // U0623 # ARABIC LETTER ALEF WITH HAMZA ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0654, 0x0648, 0, 0, 0}, 0x0624 }, // U0624 # ARABIC LETTER WAW WITH HAMZA ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0654, 0x064a, 0, 0, 0}, 0x0626 }, // U0626 # ARABIC LETTER YEH WITH HAMZA ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0654, 0x06c1, 0, 0, 0}, 0x06c2 }, // U06C2 # ARABIC LETTER HEH GOAL WITH HAMZA ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0654, 0x06d2, 0, 0, 0}, 0x06d3 }, // U06D3 # ARABIC LETTER YEH BARREE WITH HAMZA ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0654, 0x06d5, 0, 0, 0}, 0x06c0 }, // U06C0 # ARABIC LETTER HEH WITH YEH ABOVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0655, 0x0627, 0, 0, 0}, 0x0625 }, // U0625 # ARABIC LETTER ALEF WITH HAMZA BELOW ++ { {UNITIZE(Qt::Key_Multi_key), 0x093c, 0x0915, 0, 0, 0}, 0x0958 }, // U0958 # DEVANAGARI LETTER QA ++ { {UNITIZE(Qt::Key_Multi_key), 0x093c, 0x0916, 0, 0, 0}, 0x0959 }, // U0959 # DEVANAGARI LETTER KHHA ++ { {UNITIZE(Qt::Key_Multi_key), 0x093c, 0x0917, 0, 0, 0}, 0x095a }, // U095A # DEVANAGARI LETTER GHHA ++ { {UNITIZE(Qt::Key_Multi_key), 0x093c, 0x091c, 0, 0, 0}, 0x095b }, // U095B # DEVANAGARI LETTER ZA ++ { {UNITIZE(Qt::Key_Multi_key), 0x093c, 0x0921, 0, 0, 0}, 0x095c }, // U095C # DEVANAGARI LETTER DDDHA ++ { {UNITIZE(Qt::Key_Multi_key), 0x093c, 0x0922, 0, 0, 0}, 0x095d }, // U095D # DEVANAGARI LETTER RHA ++ { {UNITIZE(Qt::Key_Multi_key), 0x093c, 0x0928, 0, 0, 0}, 0x0929 }, // U0929 # DEVANAGARI LETTER NNNA ++ { {UNITIZE(Qt::Key_Multi_key), 0x093c, 0x092b, 0, 0, 0}, 0x095e }, // U095E # DEVANAGARI LETTER FA ++ { {UNITIZE(Qt::Key_Multi_key), 0x093c, 0x092f, 0, 0, 0}, 0x095f }, // U095F # DEVANAGARI LETTER YYA ++ { {UNITIZE(Qt::Key_Multi_key), 0x093c, 0x0930, 0, 0, 0}, 0x0931 }, // U0931 # DEVANAGARI LETTER RRA ++ { {UNITIZE(Qt::Key_Multi_key), 0x093c, 0x0933, 0, 0, 0}, 0x0934 }, // U0934 # DEVANAGARI LETTER LLLA ++ { {UNITIZE(Qt::Key_Multi_key), 0x09bc, 0x09a1, 0, 0, 0}, 0x09dc }, // U09DC # BENGALI LETTER RRA ++ { {UNITIZE(Qt::Key_Multi_key), 0x09bc, 0x09a2, 0, 0, 0}, 0x09dd }, // U09DD # BENGALI LETTER RHA ++ { {UNITIZE(Qt::Key_Multi_key), 0x09bc, 0x09af, 0, 0, 0}, 0x09df }, // U09DF # BENGALI LETTER YYA ++ { {UNITIZE(Qt::Key_Multi_key), 0x09c7, 0x09be, 0, 0, 0}, 0x09cb }, // U09CB # BENGALI VOWEL SIGN O ++ { {UNITIZE(Qt::Key_Multi_key), 0x09c7, 0x09d7, 0, 0, 0}, 0x09cc }, // U09CC # BENGALI VOWEL SIGN AU ++ { {UNITIZE(Qt::Key_Multi_key), 0x0a3c, 0x0a16, 0, 0, 0}, 0x0a59 }, // U0A59 # GURMUKHI LETTER KHHA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0a3c, 0x0a17, 0, 0, 0}, 0x0a5a }, // U0A5A # GURMUKHI LETTER GHHA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0a3c, 0x0a1c, 0, 0, 0}, 0x0a5b }, // U0A5B # GURMUKHI LETTER ZA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0a3c, 0x0a2b, 0, 0, 0}, 0x0a5e }, // U0A5E # GURMUKHI LETTER FA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0a3c, 0x0a32, 0, 0, 0}, 0x0a33 }, // U0A33 # GURMUKHI LETTER LLA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0a3c, 0x0a38, 0, 0, 0}, 0x0a36 }, // U0A36 # GURMUKHI LETTER SHA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0b3c, 0x0b21, 0, 0, 0}, 0x0b5c }, // U0B5C # ORIYA LETTER RRA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0b3c, 0x0b22, 0, 0, 0}, 0x0b5d }, // U0B5D # ORIYA LETTER RHA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0b47, 0x0b3e, 0, 0, 0}, 0x0b4b }, // U0B4B # ORIYA VOWEL SIGN O ++ { {UNITIZE(Qt::Key_Multi_key), 0x0b47, 0x0b56, 0, 0, 0}, 0x0b48 }, // U0B48 # ORIYA VOWEL SIGN AI ++ { {UNITIZE(Qt::Key_Multi_key), 0x0b47, 0x0b57, 0, 0, 0}, 0x0b4c }, // U0B4C # ORIYA VOWEL SIGN AU ++ { {UNITIZE(Qt::Key_Multi_key), 0x0bc6, 0x0bbe, 0, 0, 0}, 0x0bca }, // U0BCA # TAMIL VOWEL SIGN O ++ { {UNITIZE(Qt::Key_Multi_key), 0x0bc6, 0x0bd7, 0, 0, 0}, 0x0bcc }, // U0BCC # TAMIL VOWEL SIGN AU ++ { {UNITIZE(Qt::Key_Multi_key), 0x0bc7, 0x0bbe, 0, 0, 0}, 0x0bcb }, // U0BCB # TAMIL VOWEL SIGN OO ++ { {UNITIZE(Qt::Key_Multi_key), 0x0bd7, 0x0b92, 0, 0, 0}, 0x0b94 }, // U0B94 # TAMIL LETTER AU ++ { {UNITIZE(Qt::Key_Multi_key), 0x0c46, 0x0c56, 0, 0, 0}, 0x0c48 }, // U0C48 # TELUGU VOWEL SIGN AI ++ { {UNITIZE(Qt::Key_Multi_key), 0x0cbf, 0x0cd5, 0, 0, 0}, 0x0cc0 }, // U0CC0 # KANNADA VOWEL SIGN II ++ { {UNITIZE(Qt::Key_Multi_key), 0x0cc6, 0x0cc2, 0, 0, 0}, 0x0cca }, // U0CCA # KANNADA VOWEL SIGN O ++ { {UNITIZE(Qt::Key_Multi_key), 0x0cc6, 0x0cc2, 0x0cd5, 0, 0}, 0x0ccb }, // U0CCB # KANNADA VOWEL SIGN OO ++ { {UNITIZE(Qt::Key_Multi_key), 0x0cc6, 0x0cd5, 0, 0, 0}, 0x0cc7 }, // U0CC7 # KANNADA VOWEL SIGN EE ++ { {UNITIZE(Qt::Key_Multi_key), 0x0cc6, 0x0cd6, 0, 0, 0}, 0x0cc8 }, // U0CC8 # KANNADA VOWEL SIGN AI ++ { {UNITIZE(Qt::Key_Multi_key), 0x0cca, 0x0cd5, 0, 0, 0}, 0x0ccb }, // U0CCB # KANNADA VOWEL SIGN OO ++ { {UNITIZE(Qt::Key_Multi_key), 0x0d46, 0x0d3e, 0, 0, 0}, 0x0d4a }, // U0D4A # MALAYALAM VOWEL SIGN O ++ { {UNITIZE(Qt::Key_Multi_key), 0x0d46, 0x0d57, 0, 0, 0}, 0x0d4c }, // U0D4C # MALAYALAM VOWEL SIGN AU ++ { {UNITIZE(Qt::Key_Multi_key), 0x0d47, 0x0d3e, 0, 0, 0}, 0x0d4b }, // U0D4B # MALAYALAM VOWEL SIGN OO ++ { {UNITIZE(Qt::Key_Multi_key), 0x0dd9, 0x0dca, 0, 0, 0}, 0x0dda }, // U0DDA # SINHALA VOWEL SIGN DIGA KOMBUVA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0dd9, 0x0dcf, 0, 0, 0}, 0x0ddc }, // U0DDC # SINHALA VOWEL SIGN KOMBUVA HAA AELA-PILLA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0dd9, 0x0dcf, 0x0dca, 0, 0}, 0x0ddd }, // U0DDD # SINHALA VOWEL SIGN KOMBUVA HAA DIGA AELA-PILLA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0dd9, 0x0ddf, 0, 0, 0}, 0x0dde }, // U0DDE # SINHALA VOWEL SIGN KOMBUVA HAA GAYANUKITTA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0ddc, 0x0dca, 0, 0, 0}, 0x0ddd }, // U0DDD # SINHALA VOWEL SIGN KOMBUVA HAA DIGA AELA-PILLA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0f71, 0x0f72, 0, 0, 0}, 0x0f73 }, // U0F73 # TIBETAN VOWEL SIGN II ++ { {UNITIZE(Qt::Key_Multi_key), 0x0f71, 0x0f74, 0, 0, 0}, 0x0f75 }, // U0F75 # TIBETAN VOWEL SIGN UU ++ { {UNITIZE(Qt::Key_Multi_key), 0x0f71, 0x0f80, 0, 0, 0}, 0x0f81 }, // U0F81 # TIBETAN VOWEL SIGN REVERSED II ++ { {UNITIZE(Qt::Key_Multi_key), 0x0f90, 0x0fb5, 0, 0, 0}, 0x0fb9 }, // U0FB9 # TIBETAN SUBJOINED LETTER KSSA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0f92, 0x0fb7, 0, 0, 0}, 0x0f93 }, // U0F93 # TIBETAN SUBJOINED LETTER GHA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0f9c, 0x0fb7, 0, 0, 0}, 0x0f9d }, // U0F9D # TIBETAN SUBJOINED LETTER DDHA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0fa1, 0x0fb7, 0, 0, 0}, 0x0fa2 }, // U0FA2 # TIBETAN SUBJOINED LETTER DHA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0fa6, 0x0fb7, 0, 0, 0}, 0x0fa7 }, // U0FA7 # TIBETAN SUBJOINED LETTER BHA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0fab, 0x0fb7, 0, 0, 0}, 0x0fac }, // U0FAC # TIBETAN SUBJOINED LETTER DZHA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0fb2, 0x0f80, 0, 0, 0}, 0x0f76 }, // U0F76 # TIBETAN VOWEL SIGN VOCALIC R ++ { {UNITIZE(Qt::Key_Multi_key), 0x0fb3, 0x0f80, 0, 0, 0}, 0x0f78 }, // U0F78 # TIBETAN VOWEL SIGN VOCALIC L ++ { {UNITIZE(Qt::Key_Multi_key), 0x0fb5, 0x0f40, 0, 0, 0}, 0x0f69 }, // U0F69 # TIBETAN LETTER KSSA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0fb7, 0x0f42, 0, 0, 0}, 0x0f43 }, // U0F43 # TIBETAN LETTER GHA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0fb7, 0x0f4c, 0, 0, 0}, 0x0f4d }, // U0F4D # TIBETAN LETTER DDHA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0fb7, 0x0f51, 0, 0, 0}, 0x0f52 }, // U0F52 # TIBETAN LETTER DHA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0fb7, 0x0f56, 0, 0, 0}, 0x0f57 }, // U0F57 # TIBETAN LETTER BHA ++ { {UNITIZE(Qt::Key_Multi_key), 0x0fb7, 0x0f5b, 0, 0, 0}, 0x0f5c }, // U0F5C # TIBETAN LETTER DZHA ++ { {UNITIZE(Qt::Key_Multi_key), 0x102e, 0x1025, 0, 0, 0}, 0x1026 }, // U1026 # MYANMAR LETTER UU ++ { {UNITIZE(Qt::Key_Multi_key), 0x1100, 0x1100, 0, 0, 0}, 0x1101 }, // U1101 # àà àà = áà ++ { {UNITIZE(Qt::Key_Multi_key), 0x1102, 0x1100, 0, 0, 0}, 0x1113 }, // U1113 # âà àà = óà ++ { {UNITIZE(Qt::Key_Multi_key), 0x1102, 0x1102, 0, 0, 0}, 0x1114 }, // U1114 # âà âà = ôà ++ { {UNITIZE(Qt::Key_Multi_key), 0x1102, 0x1103, 0, 0, 0}, 0x1115 }, // U1115 # âà ãà = õà ++ { {UNITIZE(Qt::Key_Multi_key), 0x1102, 0x1107, 0, 0, 0}, 0x1116 }, // U1116 # âà çà = öà ++ { {UNITIZE(Qt::Key_Multi_key), 0x1103, 0x1100, 0, 0, 0}, 0x1117 }, // U1117 # ãà àà = ÷à ++ { {UNITIZE(Qt::Key_Multi_key), 0x1103, 0x1103, 0, 0, 0}, 0x1104 }, // U1104 # ãà ãà = äà ++ { {UNITIZE(Qt::Key_Multi_key), 0x1105, 0x1102, 0, 0, 0}, 0x1118 }, // U1118 # åà âà = øà ++ { {UNITIZE(Qt::Key_Multi_key), 0x1105, 0x1105, 0, 0, 0}, 0x1119 }, // U1119 # åà åà = ùà ++ { {UNITIZE(Qt::Key_Multi_key), 0x1105, 0x110b, 0, 0, 0}, 0x111b }, // U111b # åà ëà = ûà ++ { {UNITIZE(Qt::Key_Multi_key), 0x1105, 0x1112, 0, 0, 0}, 0x111a }, // U111a # åà òà = úà ++ { {UNITIZE(Qt::Key_Multi_key), 0x1106, 0x1107, 0, 0, 0}, 0x111c }, // U111c # æà çà = üà ++ { {UNITIZE(Qt::Key_Multi_key), 0x1106, 0x110b, 0, 0, 0}, 0x111d }, // U111d # æà ëà = ýà ++ { {UNITIZE(Qt::Key_Multi_key), 0x1107, 0x1100, 0, 0, 0}, 0x111e }, // U111e # çà àà = þà ++ { {UNITIZE(Qt::Key_Multi_key), 0x1107, 0x1102, 0, 0, 0}, 0x111f }, // U111f # çà âà = ÿà ++ { {UNITIZE(Qt::Key_Multi_key), 0x1107, 0x1103, 0, 0, 0}, 0x1120 }, // U1120 # çà ãà =  à ++ { {UNITIZE(Qt::Key_Multi_key), 0x1107, 0x1107, 0, 0, 0}, 0x1108 }, // U1108 # çà çà = èà ++ { {UNITIZE(Qt::Key_Multi_key), 0x1107, 0x1107, 0x110b, 0, 0}, 0x112c }, // U112c # çà çà ëà = ¬à ++ { {UNITIZE(Qt::Key_Multi_key), 0x1107, 0x1109, 0, 0, 0}, 0x1121 }, // U1121 # çà éà = ¡à ++ { {UNITIZE(Qt::Key_Multi_key), 0x1107, 0x1109, 0x1100, 0, 0}, 0x1122 }, // U1122 # çà éà àà = ¢à ++ { {UNITIZE(Qt::Key_Multi_key), 0x1107, 0x1109, 0x1103, 0, 0}, 0x1123 }, // U1123 # çà éà ãà = £à ++ { {UNITIZE(Qt::Key_Multi_key), 0x1107, 0x1109, 0x1107, 0, 0}, 0x1124 }, // U1124 # çà éà çà = ¤à ++ { {UNITIZE(Qt::Key_Multi_key), 0x1107, 0x1109, 0x1109, 0, 0}, 0x1125 }, // U1125 # çà éà éà = ¥à ++ { {UNITIZE(Qt::Key_Multi_key), 0x1107, 0x1109, 0x110c, 0, 0}, 0x1126 }, // U1126 # çà éà ìà = ¦à ++ { {UNITIZE(Qt::Key_Multi_key), 0x1107, 0x110a, 0, 0, 0}, 0x1125 }, // U1125 # çà êà = ¥à ++ { {UNITIZE(Qt::Key_Multi_key), 0x1107, 0x110b, 0, 0, 0}, 0x112b }, // U112b # çà ëà = «à ++ { {UNITIZE(Qt::Key_Multi_key), 0x1107, 0x110c, 0, 0, 0}, 0x1127 }, // U1127 # çà ìà = §à ++ { {UNITIZE(Qt::Key_Multi_key), 0x1107, 0x110e, 0, 0, 0}, 0x1128 }, // U1128 # çà îà = ¨à ++ { {UNITIZE(Qt::Key_Multi_key), 0x1107, 0x1110, 0, 0, 0}, 0x1129 }, // U1129 # çà ðà = ©à ++ { {UNITIZE(Qt::Key_Multi_key), 0x1107, 0x1111, 0, 0, 0}, 0x112a }, // U112a # çà ñà = ªà ++ { {UNITIZE(Qt::Key_Multi_key), 0x1107, 0x112b, 0, 0, 0}, 0x112c }, // U112c # çà «à = ¬à ++ { {UNITIZE(Qt::Key_Multi_key), 0x1107, 0x112d, 0, 0, 0}, 0x1122 }, // U1122 # çà ­à = ¢à ++ { {UNITIZE(Qt::Key_Multi_key), 0x1107, 0x112f, 0, 0, 0}, 0x1123 }, // U1123 # çà ¯à = £à ++ { {UNITIZE(Qt::Key_Multi_key), 0x1107, 0x1132, 0, 0, 0}, 0x1124 }, // U1124 # çà ²à = ¤à ++ { {UNITIZE(Qt::Key_Multi_key), 0x1107, 0x1136, 0, 0, 0}, 0x1126 }, // U1126 # çà ¶à = ¦à ++ { {UNITIZE(Qt::Key_Multi_key), 0x1108, 0x110b, 0, 0, 0}, 0x112c }, // U112c # èà ëà = ¬à ++ { {UNITIZE(Qt::Key_Multi_key), 0x1109, 0x1100, 0, 0, 0}, 0x112d }, // U112d # éà àà = ­à ++ { {UNITIZE(Qt::Key_Multi_key), 0x1109, 0x1102, 0, 0, 0}, 0x112e }, // U112e # éà âà = ®à ++ { {UNITIZE(Qt::Key_Multi_key), 0x1109, 0x1103, 0, 0, 0}, 0x112f }, // U112f # éà ãà = ¯à ++ { {UNITIZE(Qt::Key_Multi_key), 0x1109, 0x1105, 0, 0, 0}, 0x1130 }, // U1130 # éà åà = °à ++ { {UNITIZE(Qt::Key_Multi_key), 0x1109, 0x1106, 0, 0, 0}, 0x1131 }, // U1131 # éà æà = ±à ++ { {UNITIZE(Qt::Key_Multi_key), 0x1109, 0x1107, 0, 0, 0}, 0x1132 }, // U1132 # éà çà = ²à ++ { {UNITIZE(Qt::Key_Multi_key), 0x1109, 0x1107, 0x1100, 0, 0}, 0x1133 }, // U1133 # éà çà àà = ³à ++ { {UNITIZE(Qt::Key_Multi_key), 0x1109, 0x1109, 0, 0, 0}, 0x110a }, // U110a # éà éà = êà ++ { {UNITIZE(Qt::Key_Multi_key), 0x1109, 0x1109, 0x1109, 0, 0}, 0x1134 }, // U1134 # éà éà éà = ´à ++ { {UNITIZE(Qt::Key_Multi_key), 0x1109, 0x110a, 0, 0, 0}, 0x1134 }, // U1134 # éà êà = ´à ++ { {UNITIZE(Qt::Key_Multi_key), 0x1109, 0x110b, 0, 0, 0}, 0x1135 }, // U1135 # éà ëà = µà ++ { {UNITIZE(Qt::Key_Multi_key), 0x1109, 0x110c, 0, 0, 0}, 0x1136 }, // U1136 # éà ìà = ¶à ++ { {UNITIZE(Qt::Key_Multi_key), 0x1109, 0x110e, 0, 0, 0}, 0x1137 }, // U1137 # éà îà = ·à ++ { {UNITIZE(Qt::Key_Multi_key), 0x1109, 0x110f, 0, 0, 0}, 0x1138 }, // U1138 # éà ïà = ¸à ++ { {UNITIZE(Qt::Key_Multi_key), 0x1109, 0x1110, 0, 0, 0}, 0x1139 }, // U1139 # éà ðà = ¹à ++ { {UNITIZE(Qt::Key_Multi_key), 0x1109, 0x1111, 0, 0, 0}, 0x113a }, // U113a # éà ñà = ºà ++ { {UNITIZE(Qt::Key_Multi_key), 0x1109, 0x1112, 0, 0, 0}, 0x113b }, // U113b # éà òà = »à ++ { {UNITIZE(Qt::Key_Multi_key), 0x1109, 0x111e, 0, 0, 0}, 0x1133 }, // U1133 # éà þà = ³à ++ { {UNITIZE(Qt::Key_Multi_key), 0x110a, 0x1109, 0, 0, 0}, 0x1134 }, // U1134 # êà éà = ´à ++ { {UNITIZE(Qt::Key_Multi_key), 0x110b, 0x1100, 0, 0, 0}, 0x1141 }, // U1141 # ëà àà = Áà ++ { {UNITIZE(Qt::Key_Multi_key), 0x110b, 0x1103, 0, 0, 0}, 0x1142 }, // U1142 # ëà ãà = Âà ++ { {UNITIZE(Qt::Key_Multi_key), 0x110b, 0x1106, 0, 0, 0}, 0x1143 }, // U1143 # ëà æà = Ãà ++ { {UNITIZE(Qt::Key_Multi_key), 0x110b, 0x1107, 0, 0, 0}, 0x1144 }, // U1144 # ëà çà = Äà ++ { {UNITIZE(Qt::Key_Multi_key), 0x110b, 0x1109, 0, 0, 0}, 0x1145 }, // U1145 # ëà éà = Åà ++ { {UNITIZE(Qt::Key_Multi_key), 0x110b, 0x110b, 0, 0, 0}, 0x1147 }, // U1147 # ëà ëà = Çà ++ { {UNITIZE(Qt::Key_Multi_key), 0x110b, 0x110c, 0, 0, 0}, 0x1148 }, // U1148 # ëà ìà = Èà ++ { {UNITIZE(Qt::Key_Multi_key), 0x110b, 0x110e, 0, 0, 0}, 0x1149 }, // U1149 # ëà îà = Éà ++ { {UNITIZE(Qt::Key_Multi_key), 0x110b, 0x1110, 0, 0, 0}, 0x114a }, // U114a # ëà ðà = Êà ++ { {UNITIZE(Qt::Key_Multi_key), 0x110b, 0x1111, 0, 0, 0}, 0x114b }, // U114b # ëà ñà = Ëà ++ { {UNITIZE(Qt::Key_Multi_key), 0x110b, 0x1140, 0, 0, 0}, 0x1146 }, // U1146 # ëà Àà = Æà ++ { {UNITIZE(Qt::Key_Multi_key), 0x110c, 0x110b, 0, 0, 0}, 0x114d }, // U114d # ìà ëà = Íà ++ { {UNITIZE(Qt::Key_Multi_key), 0x110c, 0x110c, 0, 0, 0}, 0x110d }, // U110d # ìà ìà = íà ++ { {UNITIZE(Qt::Key_Multi_key), 0x110e, 0x110f, 0, 0, 0}, 0x1152 }, // U1152 # îà ïà = Òà ++ { {UNITIZE(Qt::Key_Multi_key), 0x110e, 0x1112, 0, 0, 0}, 0x1153 }, // U1153 # îà òà = Óà ++ { {UNITIZE(Qt::Key_Multi_key), 0x1111, 0x1107, 0, 0, 0}, 0x1156 }, // U1156 # ñà çà = Öà ++ { {UNITIZE(Qt::Key_Multi_key), 0x1111, 0x110b, 0, 0, 0}, 0x1157 }, // U1157 # ñà ëà = ×à ++ { {UNITIZE(Qt::Key_Multi_key), 0x1112, 0x1112, 0, 0, 0}, 0x1158 }, // U1158 # òà òà = Øà ++ { {UNITIZE(Qt::Key_Multi_key), 0x1121, 0x1100, 0, 0, 0}, 0x1122 }, // U1122 # ¡à àà = ¢à ++ { {UNITIZE(Qt::Key_Multi_key), 0x1121, 0x1103, 0, 0, 0}, 0x1123 }, // U1123 # ¡à ãà = £à ++ { {UNITIZE(Qt::Key_Multi_key), 0x1121, 0x1107, 0, 0, 0}, 0x1124 }, // U1124 # ¡à çà = ¤à ++ { {UNITIZE(Qt::Key_Multi_key), 0x1121, 0x1109, 0, 0, 0}, 0x1125 }, // U1125 # ¡à éà = ¥à ++ { {UNITIZE(Qt::Key_Multi_key), 0x1121, 0x110c, 0, 0, 0}, 0x1126 }, // U1126 # ¡à ìà = ¦à ++ { {UNITIZE(Qt::Key_Multi_key), 0x1132, 0x1100, 0, 0, 0}, 0x1133 }, // U1133 # ²à àà = ³à ++ { {UNITIZE(Qt::Key_Multi_key), 0x113c, 0x113c, 0, 0, 0}, 0x113d }, // U113d # ¼à ¼à = ½à ++ { {UNITIZE(Qt::Key_Multi_key), 0x113e, 0x113e, 0, 0, 0}, 0x113f }, // U113f # ¾à ¾à = ¿à ++ { {UNITIZE(Qt::Key_Multi_key), 0x114e, 0x114e, 0, 0, 0}, 0x114f }, // U114f # Îà Îà = Ïà ++ { {UNITIZE(Qt::Key_Multi_key), 0x1150, 0x1150, 0, 0, 0}, 0x1151 }, // U1151 # Ðà Ðà = Ñà ++ { {UNITIZE(Qt::Key_Multi_key), 0x1161, 0x1169, 0, 0, 0}, 0x1176 }, // U1176 # ßá ßé = ßö ++ { {UNITIZE(Qt::Key_Multi_key), 0x1161, 0x116e, 0, 0, 0}, 0x1177 }, // U1177 # ßá ßî = ß÷ ++ { {UNITIZE(Qt::Key_Multi_key), 0x1161, 0x1175, 0, 0, 0}, 0x1162 }, // U1162 # ßá ßõ = ßâ ++ { {UNITIZE(Qt::Key_Multi_key), 0x1163, 0x1169, 0, 0, 0}, 0x1178 }, // U1178 # ßã ßé = ßø ++ { {UNITIZE(Qt::Key_Multi_key), 0x1163, 0x116d, 0, 0, 0}, 0x1179 }, // U1179 # ßã ßí = ßù ++ { {UNITIZE(Qt::Key_Multi_key), 0x1163, 0x1175, 0, 0, 0}, 0x1164 }, // U1164 # ßã ßõ = ßä ++ { {UNITIZE(Qt::Key_Multi_key), 0x1165, 0x1169, 0, 0, 0}, 0x117a }, // U117a # ßå ßé = ßú ++ { {UNITIZE(Qt::Key_Multi_key), 0x1165, 0x116e, 0, 0, 0}, 0x117b }, // U117b # ßå ßî = ßû ++ { {UNITIZE(Qt::Key_Multi_key), 0x1165, 0x1173, 0, 0, 0}, 0x117c }, // U117c # ßå ßó = ßü ++ { {UNITIZE(Qt::Key_Multi_key), 0x1165, 0x1175, 0, 0, 0}, 0x1166 }, // U1166 # ßå ßõ = ßæ ++ { {UNITIZE(Qt::Key_Multi_key), 0x1167, 0x1169, 0, 0, 0}, 0x117d }, // U117d # ßç ßé = ßý ++ { {UNITIZE(Qt::Key_Multi_key), 0x1167, 0x116e, 0, 0, 0}, 0x117e }, // U117e # ßç ßî = ßþ ++ { {UNITIZE(Qt::Key_Multi_key), 0x1167, 0x1175, 0, 0, 0}, 0x1168 }, // U1168 # ßç ßõ = ßè ++ { {UNITIZE(Qt::Key_Multi_key), 0x1169, 0x1161, 0, 0, 0}, 0x116a }, // U116a # ßé ßá = ßê ++ { {UNITIZE(Qt::Key_Multi_key), 0x1169, 0x1161, 0x1175, 0, 0}, 0x116b }, // U116b # ßé ßá ßõ = ßë ++ { {UNITIZE(Qt::Key_Multi_key), 0x1169, 0x1162, 0, 0, 0}, 0x116b }, // U116b # ßé ßâ = ßë ++ { {UNITIZE(Qt::Key_Multi_key), 0x1169, 0x1165, 0, 0, 0}, 0x117f }, // U117f # ßé ßå = ßÿ ++ { {UNITIZE(Qt::Key_Multi_key), 0x1169, 0x1166, 0, 0, 0}, 0x1180 }, // U1180 # ßé ßæ = ß  ++ { {UNITIZE(Qt::Key_Multi_key), 0x1169, 0x1168, 0, 0, 0}, 0x1181 }, // U1181 # ßé ßè = ß¡ ++ { {UNITIZE(Qt::Key_Multi_key), 0x1169, 0x1169, 0, 0, 0}, 0x1182 }, // U1182 # ßé ßé = ߢ ++ { {UNITIZE(Qt::Key_Multi_key), 0x1169, 0x116e, 0, 0, 0}, 0x1183 }, // U1183 # ßé ßî = ߣ ++ { {UNITIZE(Qt::Key_Multi_key), 0x1169, 0x1175, 0, 0, 0}, 0x116c }, // U116c # ßé ßõ = ßì ++ { {UNITIZE(Qt::Key_Multi_key), 0x116a, 0x1175, 0, 0, 0}, 0x116b }, // U116b # ßê ßõ = ßë ++ { {UNITIZE(Qt::Key_Multi_key), 0x116d, 0x1163, 0, 0, 0}, 0x1184 }, // U1184 # ßí ßã = ߤ ++ { {UNITIZE(Qt::Key_Multi_key), 0x116d, 0x1164, 0, 0, 0}, 0x1185 }, // U1185 # ßí ßä = ߥ ++ { {UNITIZE(Qt::Key_Multi_key), 0x116d, 0x1167, 0, 0, 0}, 0x1186 }, // U1186 # ßí ßç = ߦ ++ { {UNITIZE(Qt::Key_Multi_key), 0x116d, 0x1169, 0, 0, 0}, 0x1187 }, // U1187 # ßí ßé = ߧ ++ { {UNITIZE(Qt::Key_Multi_key), 0x116d, 0x1175, 0, 0, 0}, 0x1188 }, // U1188 # ßí ßõ = ߨ ++ { {UNITIZE(Qt::Key_Multi_key), 0x116e, 0x1161, 0, 0, 0}, 0x1189 }, // U1189 # ßî ßá = ß© ++ { {UNITIZE(Qt::Key_Multi_key), 0x116e, 0x1162, 0, 0, 0}, 0x118a }, // U118a # ßî ßâ = ߪ ++ { {UNITIZE(Qt::Key_Multi_key), 0x116e, 0x1165, 0, 0, 0}, 0x116f }, // U116f # ßî ßå = ßï ++ { {UNITIZE(Qt::Key_Multi_key), 0x116e, 0x1165, 0x1173, 0, 0}, 0x118b }, // U118b # ßî ßå ßó = ß« ++ { {UNITIZE(Qt::Key_Multi_key), 0x116e, 0x1165, 0x1175, 0, 0}, 0x1170 }, // U1170 # ßî ßå ßõ = ßð ++ { {UNITIZE(Qt::Key_Multi_key), 0x116e, 0x1166, 0, 0, 0}, 0x1170 }, // U1170 # ßî ßæ = ßð ++ { {UNITIZE(Qt::Key_Multi_key), 0x116e, 0x1168, 0, 0, 0}, 0x118c }, // U118c # ßî ßè = ߬ ++ { {UNITIZE(Qt::Key_Multi_key), 0x116e, 0x116e, 0, 0, 0}, 0x118d }, // U118d # ßî ßî = ß­ ++ { {UNITIZE(Qt::Key_Multi_key), 0x116e, 0x1175, 0, 0, 0}, 0x1171 }, // U1171 # ßî ßõ = ßñ ++ { {UNITIZE(Qt::Key_Multi_key), 0x116e, 0x117c, 0, 0, 0}, 0x118b }, // U118b # ßî ßü = ß« ++ { {UNITIZE(Qt::Key_Multi_key), 0x116f, 0x1173, 0, 0, 0}, 0x118b }, // U118b # ßï ßó = ß« ++ { {UNITIZE(Qt::Key_Multi_key), 0x116f, 0x1175, 0, 0, 0}, 0x1170 }, // U1170 # ßï ßõ = ßð ++ { {UNITIZE(Qt::Key_Multi_key), 0x1172, 0x1161, 0, 0, 0}, 0x118e }, // U118e # ßò ßá = ß® ++ { {UNITIZE(Qt::Key_Multi_key), 0x1172, 0x1165, 0, 0, 0}, 0x118f }, // U118f # ßò ßå = ߯ ++ { {UNITIZE(Qt::Key_Multi_key), 0x1172, 0x1166, 0, 0, 0}, 0x1190 }, // U1190 # ßò ßæ = ß° ++ { {UNITIZE(Qt::Key_Multi_key), 0x1172, 0x1167, 0, 0, 0}, 0x1191 }, // U1191 # ßò ßç = ß± ++ { {UNITIZE(Qt::Key_Multi_key), 0x1172, 0x1168, 0, 0, 0}, 0x1192 }, // U1192 # ßò ßè = ß² ++ { {UNITIZE(Qt::Key_Multi_key), 0x1172, 0x116e, 0, 0, 0}, 0x1193 }, // U1193 # ßò ßî = ß³ ++ { {UNITIZE(Qt::Key_Multi_key), 0x1172, 0x1175, 0, 0, 0}, 0x1194 }, // U1194 # ßò ßõ = ß´ ++ { {UNITIZE(Qt::Key_Multi_key), 0x1173, 0x116e, 0, 0, 0}, 0x1195 }, // U1195 # ßó ßî = ßµ ++ { {UNITIZE(Qt::Key_Multi_key), 0x1173, 0x1173, 0, 0, 0}, 0x1196 }, // U1196 # ßó ßó = ߶ ++ { {UNITIZE(Qt::Key_Multi_key), 0x1173, 0x1175, 0, 0, 0}, 0x1174 }, // U1174 # ßó ßõ = ßô ++ { {UNITIZE(Qt::Key_Multi_key), 0x1174, 0x116e, 0, 0, 0}, 0x1197 }, // U1197 # ßô ßî = ß· ++ { {UNITIZE(Qt::Key_Multi_key), 0x1175, 0x1161, 0, 0, 0}, 0x1198 }, // U1198 # ßõ ßá = ߸ ++ { {UNITIZE(Qt::Key_Multi_key), 0x1175, 0x1163, 0, 0, 0}, 0x1199 }, // U1199 # ßõ ßã = ß¹ ++ { {UNITIZE(Qt::Key_Multi_key), 0x1175, 0x1169, 0, 0, 0}, 0x119a }, // U119a # ßõ ßé = ߺ ++ { {UNITIZE(Qt::Key_Multi_key), 0x1175, 0x116e, 0, 0, 0}, 0x119b }, // U119b # ßõ ßî = ß» ++ { {UNITIZE(Qt::Key_Multi_key), 0x1175, 0x1173, 0, 0, 0}, 0x119c }, // U119c # ßõ ßó = ß¼ ++ { {UNITIZE(Qt::Key_Multi_key), 0x1175, 0x119e, 0, 0, 0}, 0x119d }, // U119d # ßõ ß¾ = ß½ ++ { {UNITIZE(Qt::Key_Multi_key), 0x119e, 0x1165, 0, 0, 0}, 0x119f }, // U119f # ß¾ ßå = ß¿ ++ { {UNITIZE(Qt::Key_Multi_key), 0x119e, 0x116e, 0, 0, 0}, 0x11a0 }, // U11a0 # ß¾ ßî = ßÀ ++ { {UNITIZE(Qt::Key_Multi_key), 0x119e, 0x1175, 0, 0, 0}, 0x11a1 }, // U11a1 # ß¾ ßõ = ßÁ ++ { {UNITIZE(Qt::Key_Multi_key), 0x119e, 0x119e, 0, 0, 0}, 0x11a2 }, // U11a2 # ß¾ ß¾ = ß ++ { {UNITIZE(Qt::Key_Multi_key), 0x11a8, 0x11a8, 0, 0, 0}, 0x11a9 }, // U11a9 # ßàÈ ßàÈ = ßàÉ ++ { {UNITIZE(Qt::Key_Multi_key), 0x11a8, 0x11af, 0, 0, 0}, 0x11c3 }, // U11c3 # ßàÈ ßàÏ = ßàã ++ { {UNITIZE(Qt::Key_Multi_key), 0x11a8, 0x11ba, 0, 0, 0}, 0x11aa }, // U11aa # ßàÈ ßàÚ = ßàÊ ++ { {UNITIZE(Qt::Key_Multi_key), 0x11a8, 0x11ba, 0x11a8, 0, 0}, 0x11c4 }, // U11c4 # ßàÈ ßàÚ ßàÈ = ßàä ++ { {UNITIZE(Qt::Key_Multi_key), 0x11a8, 0x11e7, 0, 0, 0}, 0x11c4 }, // U11c4 # ßàÈ ßৠ= ßàä ++ { {UNITIZE(Qt::Key_Multi_key), 0x11aa, 0x11a8, 0, 0, 0}, 0x11c4 }, // U11c4 # ßàÊ ßàÈ = ßàä ++ { {UNITIZE(Qt::Key_Multi_key), 0x11ab, 0x11a8, 0, 0, 0}, 0x11c5 }, // U11c5 # ßàË ßàÈ = ßàå ++ { {UNITIZE(Qt::Key_Multi_key), 0x11ab, 0x11ae, 0, 0, 0}, 0x11c6 }, // U11c6 # ßàË ßàÎ = ßàæ ++ { {UNITIZE(Qt::Key_Multi_key), 0x11ab, 0x11ba, 0, 0, 0}, 0x11c7 }, // U11c7 # ßàË ßàÚ = ßàç ++ { {UNITIZE(Qt::Key_Multi_key), 0x11ab, 0x11bd, 0, 0, 0}, 0x11ac }, // U11ac # ßàË ßàÝ = ßàÌ ++ { {UNITIZE(Qt::Key_Multi_key), 0x11ab, 0x11c0, 0, 0, 0}, 0x11c9 }, // U11c9 # ßàË ßàà = ßàé ++ { {UNITIZE(Qt::Key_Multi_key), 0x11ab, 0x11c2, 0, 0, 0}, 0x11ad }, // U11ad # ßàË ßàâ = ßàÍ ++ { {UNITIZE(Qt::Key_Multi_key), 0x11ab, 0x11eb, 0, 0, 0}, 0x11c8 }, // U11c8 # ßàË ßà« = ßàè ++ { {UNITIZE(Qt::Key_Multi_key), 0x11ae, 0x11a8, 0, 0, 0}, 0x11ca }, // U11ca # ßàÎ ßàÈ = ßàê ++ { {UNITIZE(Qt::Key_Multi_key), 0x11ae, 0x11af, 0, 0, 0}, 0x11cb }, // U11cb # ßàÎ ßàÏ = ßàë ++ { {UNITIZE(Qt::Key_Multi_key), 0x11af, 0x11a8, 0, 0, 0}, 0x11b0 }, // U11b0 # ßàÏ ßàÈ = ßàÐ ++ { {UNITIZE(Qt::Key_Multi_key), 0x11af, 0x11a8, 0x11ba, 0, 0}, 0x11cc }, // U11cc # ßàÏ ßàÈ ßàÚ = ßàì ++ { {UNITIZE(Qt::Key_Multi_key), 0x11af, 0x11aa, 0, 0, 0}, 0x11cc }, // U11cc # ßàÏ ßàÊ = ßàì ++ { {UNITIZE(Qt::Key_Multi_key), 0x11af, 0x11ab, 0, 0, 0}, 0x11cd }, // U11cd # ßàÏ ßàË = ßàí ++ { {UNITIZE(Qt::Key_Multi_key), 0x11af, 0x11ae, 0, 0, 0}, 0x11ce }, // U11ce # ßàÏ ßàÎ = ßàî ++ { {UNITIZE(Qt::Key_Multi_key), 0x11af, 0x11ae, 0x11c2, 0, 0}, 0x11cf }, // U11cf # ßàÏ ßàÎ ßàâ = ßàï ++ { {UNITIZE(Qt::Key_Multi_key), 0x11af, 0x11af, 0, 0, 0}, 0x11d0 }, // U11d0 # ßàÏ ßàÏ = ßàð ++ { {UNITIZE(Qt::Key_Multi_key), 0x11af, 0x11b7, 0, 0, 0}, 0x11b1 }, // U11b1 # ßàÏ ßà× = ßàÑ ++ { {UNITIZE(Qt::Key_Multi_key), 0x11af, 0x11b7, 0x11a8, 0, 0}, 0x11d1 }, // U11d1 # ßàÏ ßà× ßàÈ = ßàñ ++ { {UNITIZE(Qt::Key_Multi_key), 0x11af, 0x11b7, 0x11ba, 0, 0}, 0x11d2 }, // U11d2 # ßàÏ ßà× ßàÚ = ßàò ++ { {UNITIZE(Qt::Key_Multi_key), 0x11af, 0x11b8, 0, 0, 0}, 0x11b2 }, // U11b2 # ßàÏ ßàØ = ßàÒ ++ { {UNITIZE(Qt::Key_Multi_key), 0x11af, 0x11b8, 0x11ba, 0, 0}, 0x11d3 }, // U11d3 # ßàÏ ßàØ ßàÚ = ßàó ++ { {UNITIZE(Qt::Key_Multi_key), 0x11af, 0x11b8, 0x11bc, 0, 0}, 0x11d5 }, // U11d5 # ßàÏ ßàØ ßàÜ = ßàõ ++ { {UNITIZE(Qt::Key_Multi_key), 0x11af, 0x11b8, 0x11c2, 0, 0}, 0x11d4 }, // U11d4 # ßàÏ ßàØ ßàâ = ßàô ++ { {UNITIZE(Qt::Key_Multi_key), 0x11af, 0x11b9, 0, 0, 0}, 0x11d3 }, // U11d3 # ßàÏ ßàÙ = ßàó ++ { {UNITIZE(Qt::Key_Multi_key), 0x11af, 0x11ba, 0, 0, 0}, 0x11b3 }, // U11b3 # ßàÏ ßàÚ = ßàÓ ++ { {UNITIZE(Qt::Key_Multi_key), 0x11af, 0x11ba, 0x11ba, 0, 0}, 0x11d6 }, // U11d6 # ßàÏ ßàÚ ßàÚ = ßàö ++ { {UNITIZE(Qt::Key_Multi_key), 0x11af, 0x11bb, 0, 0, 0}, 0x11d6 }, // U11d6 # ßàÏ ßàÛ = ßàö ++ { {UNITIZE(Qt::Key_Multi_key), 0x11af, 0x11bf, 0, 0, 0}, 0x11d8 }, // U11d8 # ßàÏ ßàß = ßàø ++ { {UNITIZE(Qt::Key_Multi_key), 0x11af, 0x11c0, 0, 0, 0}, 0x11b4 }, // U11b4 # ßàÏ ßàà = ßàÔ ++ { {UNITIZE(Qt::Key_Multi_key), 0x11af, 0x11c1, 0, 0, 0}, 0x11b5 }, // U11b5 # ßàÏ ßàá = ßàÕ ++ { {UNITIZE(Qt::Key_Multi_key), 0x11af, 0x11c2, 0, 0, 0}, 0x11b6 }, // U11b6 # ßàÏ ßàâ = ßàÖ ++ { {UNITIZE(Qt::Key_Multi_key), 0x11af, 0x11da, 0, 0, 0}, 0x11d1 }, // U11d1 # ßàÏ ßàú = ßàñ ++ { {UNITIZE(Qt::Key_Multi_key), 0x11af, 0x11dd, 0, 0, 0}, 0x11d2 }, // U11d2 # ßàÏ ßàý = ßàò ++ { {UNITIZE(Qt::Key_Multi_key), 0x11af, 0x11e5, 0, 0, 0}, 0x11d4 }, // U11d4 # ßàÏ ßॠ= ßàô ++ { {UNITIZE(Qt::Key_Multi_key), 0x11af, 0x11e6, 0, 0, 0}, 0x11d5 }, // U11d5 # ßàÏ ßঠ= ßàõ ++ { {UNITIZE(Qt::Key_Multi_key), 0x11af, 0x11eb, 0, 0, 0}, 0x11d7 }, // U11d7 # ßàÏ ßà« = ßà÷ ++ { {UNITIZE(Qt::Key_Multi_key), 0x11af, 0x11f9, 0, 0, 0}, 0x11d9 }, // U11d9 # ßàÏ ß๠= ßàù ++ { {UNITIZE(Qt::Key_Multi_key), 0x11b0, 0x11ba, 0, 0, 0}, 0x11cc }, // U11cc # ßàÐ ßàÚ = ßàì ++ { {UNITIZE(Qt::Key_Multi_key), 0x11b1, 0x11a8, 0, 0, 0}, 0x11d1 }, // U11d1 # ßàÑ ßàÈ = ßàñ ++ { {UNITIZE(Qt::Key_Multi_key), 0x11b1, 0x11ba, 0, 0, 0}, 0x11d2 }, // U11d2 # ßàÑ ßàÚ = ßàò ++ { {UNITIZE(Qt::Key_Multi_key), 0x11b2, 0x11ba, 0, 0, 0}, 0x11d3 }, // U11d3 # ßàÒ ßàÚ = ßàó ++ { {UNITIZE(Qt::Key_Multi_key), 0x11b2, 0x11bc, 0, 0, 0}, 0x11d5 }, // U11d5 # ßàÒ ßàÜ = ßàõ ++ { {UNITIZE(Qt::Key_Multi_key), 0x11b2, 0x11c2, 0, 0, 0}, 0x11d4 }, // U11d4 # ßàÒ ßàâ = ßàô ++ { {UNITIZE(Qt::Key_Multi_key), 0x11b3, 0x11ba, 0, 0, 0}, 0x11d6 }, // U11d6 # ßàÓ ßàÚ = ßàö ++ { {UNITIZE(Qt::Key_Multi_key), 0x11b7, 0x11a8, 0, 0, 0}, 0x11da }, // U11da # ßà× ßàÈ = ßàú ++ { {UNITIZE(Qt::Key_Multi_key), 0x11b7, 0x11af, 0, 0, 0}, 0x11db }, // U11db # ßà× ßàÏ = ßàû ++ { {UNITIZE(Qt::Key_Multi_key), 0x11b7, 0x11b8, 0, 0, 0}, 0x11dc }, // U11dc # ßà× ßàØ = ßàü ++ { {UNITIZE(Qt::Key_Multi_key), 0x11b7, 0x11ba, 0, 0, 0}, 0x11dd }, // U11dd # ßà× ßàÚ = ßàý ++ { {UNITIZE(Qt::Key_Multi_key), 0x11b7, 0x11ba, 0x11ba, 0, 0}, 0x11de }, // U11de # ßà× ßàÚ ßàÚ = ßàþ ++ { {UNITIZE(Qt::Key_Multi_key), 0x11b7, 0x11bb, 0, 0, 0}, 0x11de }, // U11de # ßà× ßàÛ = ßàþ ++ { {UNITIZE(Qt::Key_Multi_key), 0x11b7, 0x11bc, 0, 0, 0}, 0x11e2 }, // U11e2 # ßà× ßàÜ = ßࢠ++ { {UNITIZE(Qt::Key_Multi_key), 0x11b7, 0x11be, 0, 0, 0}, 0x11e0 }, // U11e0 # ßà× ßàÞ = ßà  ++ { {UNITIZE(Qt::Key_Multi_key), 0x11b7, 0x11c2, 0, 0, 0}, 0x11e1 }, // U11e1 # ßà× ßàâ = ßà¡ ++ { {UNITIZE(Qt::Key_Multi_key), 0x11b7, 0x11eb, 0, 0, 0}, 0x11df }, // U11df # ßà× ßà« = ßàÿ ++ { {UNITIZE(Qt::Key_Multi_key), 0x11b8, 0x11af, 0, 0, 0}, 0x11e3 }, // U11e3 # ßàØ ßàÏ = ß࣠++ { {UNITIZE(Qt::Key_Multi_key), 0x11b8, 0x11ba, 0, 0, 0}, 0x11b9 }, // U11b9 # ßàØ ßàÚ = ßàÙ ++ { {UNITIZE(Qt::Key_Multi_key), 0x11b8, 0x11bc, 0, 0, 0}, 0x11e6 }, // U11e6 # ßàØ ßàÜ = ßঠ++ { {UNITIZE(Qt::Key_Multi_key), 0x11b8, 0x11c1, 0, 0, 0}, 0x11e4 }, // U11e4 # ßàØ ßàá = ßठ++ { {UNITIZE(Qt::Key_Multi_key), 0x11b8, 0x11c2, 0, 0, 0}, 0x11e5 }, // U11e5 # ßàØ ßàâ = ßॠ++ { {UNITIZE(Qt::Key_Multi_key), 0x11ba, 0x11a8, 0, 0, 0}, 0x11e7 }, // U11e7 # ßàÚ ßàÈ = ßৠ++ { {UNITIZE(Qt::Key_Multi_key), 0x11ba, 0x11ae, 0, 0, 0}, 0x11e8 }, // U11e8 # ßàÚ ßàÎ = ßਠ++ { {UNITIZE(Qt::Key_Multi_key), 0x11ba, 0x11af, 0, 0, 0}, 0x11e9 }, // U11e9 # ßàÚ ßàÏ = ßà© ++ { {UNITIZE(Qt::Key_Multi_key), 0x11ba, 0x11b8, 0, 0, 0}, 0x11ea }, // U11ea # ßàÚ ßàØ = ßઠ++ { {UNITIZE(Qt::Key_Multi_key), 0x11ba, 0x11ba, 0, 0, 0}, 0x11bb }, // U11bb # ßàÚ ßàÚ = ßàÛ ++ { {UNITIZE(Qt::Key_Multi_key), 0x11bc, 0x11a8, 0, 0, 0}, 0x11ec }, // U11ec # ßàÜ ßàÈ = ßଠ++ { {UNITIZE(Qt::Key_Multi_key), 0x11bc, 0x11a8, 0x11a8, 0, 0}, 0x11ed }, // U11ed # ßàÜ ßàÈ ßàÈ = ßà­ ++ { {UNITIZE(Qt::Key_Multi_key), 0x11bc, 0x11a9, 0, 0, 0}, 0x11ed }, // U11ed # ßàÜ ßàÉ = ßà­ ++ { {UNITIZE(Qt::Key_Multi_key), 0x11bc, 0x11bc, 0, 0, 0}, 0x11ee }, // U11ee # ßàÜ ßàÜ = ßà® ++ { {UNITIZE(Qt::Key_Multi_key), 0x11bc, 0x11bf, 0, 0, 0}, 0x11ef }, // U11ef # ßàÜ ßàß = ß௠++ { {UNITIZE(Qt::Key_Multi_key), 0x11c1, 0x11b8, 0, 0, 0}, 0x11f3 }, // U11f3 # ßàá ßàØ = ßà³ ++ { {UNITIZE(Qt::Key_Multi_key), 0x11c1, 0x11bc, 0, 0, 0}, 0x11f4 }, // U11f4 # ßàá ßàÜ = ßà´ ++ { {UNITIZE(Qt::Key_Multi_key), 0x11c2, 0x11ab, 0, 0, 0}, 0x11f5 }, // U11f5 # ßàâ ßàË = ßൠ++ { {UNITIZE(Qt::Key_Multi_key), 0x11c2, 0x11af, 0, 0, 0}, 0x11f6 }, // U11f6 # ßàâ ßàÏ = ßච++ { {UNITIZE(Qt::Key_Multi_key), 0x11c2, 0x11b7, 0, 0, 0}, 0x11f7 }, // U11f7 # ßàâ ßà× = ßà· ++ { {UNITIZE(Qt::Key_Multi_key), 0x11c2, 0x11b8, 0, 0, 0}, 0x11f8 }, // U11f8 # ßàâ ßàØ = ßภ++ { {UNITIZE(Qt::Key_Multi_key), 0x11ce, 0x11c2, 0, 0, 0}, 0x11cf }, // U11cf # ßàî ßàâ = ßàï ++ { {UNITIZE(Qt::Key_Multi_key), 0x11dd, 0x11ba, 0, 0, 0}, 0x11de }, // U11de # ßàý ßàÚ = ßàþ ++ { {UNITIZE(Qt::Key_Multi_key), 0x11ec, 0x11a8, 0, 0, 0}, 0x11ed }, // U11ed # ßଠßàÈ = ßà­ ++ { {UNITIZE(Qt::Key_Multi_key), 0x11f0, 0x11ba, 0, 0, 0}, 0x11f1 }, // U11f1 # ßà° ßàÚ = ßà± ++ { {UNITIZE(Qt::Key_Multi_key), 0x11f0, 0x11eb, 0, 0, 0}, 0x11f2 }, // U11f2 # ßà° ßà« = ßಠ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x1d157, 0x1d165, 0, 0, 0}, 0xd15e }, // U1D15E # MUSICAL SYMBOL HALF NOTE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x1d158, 0x1d165, 0, 0, 0}, 0xd15f }, // U1D15F # MUSICAL SYMBOL QUARTER NOTE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x1d158, 0x1d165, 0x1d16e, 0, 0}, 0xd160 }, // U1D160 # MUSICAL SYMBOL EIGHTH NOTE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x1d158, 0x1d165, 0x1d16f, 0, 0}, 0xd161 }, // U1D161 # MUSICAL SYMBOL SIXTEENTH NOTE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x1d158, 0x1d165, 0x1d170, 0, 0}, 0xd162 }, // U1D162 # MUSICAL SYMBOL THIRTY-SECOND NOTE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x1d158, 0x1d165, 0x1d171, 0, 0}, 0xd163 }, // U1D163 # MUSICAL SYMBOL SIXTY-FOURTH NOTE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x1d158, 0x1d165, 0x1d172, 0, 0}, 0xd164 }, // U1D164 # MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x1d15f, 0x1d16e, 0, 0, 0}, 0xd160 }, // U1D160 # MUSICAL SYMBOL EIGHTH NOTE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x1d15f, 0x1d16f, 0, 0, 0}, 0xd161 }, // U1D161 # MUSICAL SYMBOL SIXTEENTH NOTE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x1d15f, 0x1d170, 0, 0, 0}, 0xd162 }, // U1D162 # MUSICAL SYMBOL THIRTY-SECOND NOTE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x1d15f, 0x1d171, 0, 0, 0}, 0xd163 }, // U1D163 # MUSICAL SYMBOL SIXTY-FOURTH NOTE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x1d15f, 0x1d172, 0, 0, 0}, 0xd164 }, // U1D164 # MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x1d1b9, 0x1d165, 0, 0, 0}, 0xd1bb }, // U1D1BB # MUSICAL SYMBOL MINIMA ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x1d1b9, 0x1d165, 0x1d16e, 0, 0}, 0xd1bd }, // U1D1BD # MUSICAL SYMBOL SEMIMINIMA WHITE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x1d1b9, 0x1d165, 0x1d16f, 0, 0}, 0xd1bf }, // U1D1BF # MUSICAL SYMBOL FUSA WHITE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x1d1ba, 0x1d165, 0, 0, 0}, 0xd1bc }, // U1D1BC # MUSICAL SYMBOL MINIMA BLACK ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x1d1ba, 0x1d165, 0x1d16e, 0, 0}, 0xd1be }, // U1D1BE # MUSICAL SYMBOL SEMIMINIMA BLACK ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x1d1ba, 0x1d165, 0x1d16f, 0, 0}, 0xd1c0 }, // U1D1C0 # MUSICAL SYMBOL FUSA BLACK ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x1d1bb, 0x1d16e, 0, 0, 0}, 0xd1bd }, // U1D1BD # MUSICAL SYMBOL SEMIMINIMA WHITE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x1d1bb, 0x1d16f, 0, 0, 0}, 0xd1bf }, // U1D1BF # MUSICAL SYMBOL FUSA WHITE ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x1d1bc, 0x1d16e, 0, 0, 0}, 0xd1be }, // U1D1BE # MUSICAL SYMBOL SEMIMINIMA BLACK ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x1d1bc, 0x1d16f, 0, 0, 0}, 0xd1c0 }, // U1D1C0 # MUSICAL SYMBOL FUSA BLACK ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x1fbf, 0x0000, 0, 0, 0}, 0x1fcd }, // U1FCD # GREEK PSILI AND VARIA ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x1fbf, 0x0000, 0, 0, 0}, 0x1fce }, // U1FCE # GREEK PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x1fbf, 0x0027, 0, 0, 0}, 0x1fce }, // U1FCE # GREEK PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x1fbf, 0x0060, 0, 0, 0}, 0x1fcd }, // U1FCD # GREEK PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x1fbf, 0x007e, 0, 0, 0}, 0x1fcf }, // U1FCF # GREEK PSILI AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x1fbf, 0x00b4, 0, 0, 0}, 0x1fce }, // U1FCE # GREEK PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x1fbf, 0x0342, 0, 0, 0}, 0x1fcf }, // U1FCF # GREEK PSILI AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x1fbf, UNITIZE(Qt::Key_Dead_Grave), 0, 0, 0}, 0x1fcd }, // U1FCD # GREEK PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x1fbf, UNITIZE(Qt::Key_Dead_Acute), 0, 0, 0}, 0x1fce }, // U1FCE # GREEK PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x1fbf, UNITIZE(Qt::Key_Dead_Tilde), 0, 0, 0}, 0x1fcf }, // U1FCF # GREEK PSILI AND PERISPOMENI ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x1ffe, 0x0000, 0, 0, 0}, 0x1fdd }, // U1FDD # GREEK DASIA AND VARIA ++// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x1ffe, 0x0000, 0, 0, 0}, 0x1fde }, // U1FDE # GREEK DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x1ffe, 0x0027, 0, 0, 0}, 0x1fde }, // U1FDE # GREEK DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x1ffe, 0x0060, 0, 0, 0}, 0x1fdd }, // U1FDD # GREEK DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x1ffe, 0x007e, 0, 0, 0}, 0x1fdf }, // U1FDF # GREEK DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x1ffe, 0x00b4, 0, 0, 0}, 0x1fde }, // U1FDE # GREEK DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x1ffe, 0x0342, 0, 0, 0}, 0x1fdf }, // U1FDF # GREEK DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x1ffe, UNITIZE(Qt::Key_Dead_Grave), 0, 0, 0}, 0x1fdd }, // U1FDD # GREEK DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x1ffe, UNITIZE(Qt::Key_Dead_Acute), 0, 0, 0}, 0x1fde }, // U1FDE # GREEK DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Multi_key), 0x1ffe, UNITIZE(Qt::Key_Dead_Tilde), 0, 0, 0}, 0x1fdf }, // U1FDF # GREEK DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Multi_key), 0x2203, 0x0338, 0, 0, 0}, 0x2204 }, // U2204 # THERE DOES NOT EXIST ++ { {UNITIZE(Qt::Key_Multi_key), 0x2208, 0x0338, 0, 0, 0}, 0x2209 }, // U2209 # NOT AN ELEMENT OF ++ { {UNITIZE(Qt::Key_Multi_key), 0x220b, 0x0338, 0, 0, 0}, 0x220c }, // U220C # DOES NOT CONTAIN AS MEMBER ++ { {UNITIZE(Qt::Key_Multi_key), 0x2223, 0x0338, 0, 0, 0}, 0x2224 }, // U2224 # DOES NOT DIVIDE ++ { {UNITIZE(Qt::Key_Multi_key), 0x2225, 0x0338, 0, 0, 0}, 0x2226 }, // U2226 # NOT PARALLEL TO ++ { {UNITIZE(Qt::Key_Multi_key), 0x223c, 0x0338, 0, 0, 0}, 0x2241 }, // U2241 # NOT TILDE ++ { {UNITIZE(Qt::Key_Multi_key), 0x223c, 0x0338, 0, 0, 0}, 0x2247 }, // U2247 # NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO ++ { {UNITIZE(Qt::Key_Multi_key), 0x2243, 0x0338, 0, 0, 0}, 0x2244 }, // U2244 # NOT ASYMPTOTICALLY EQUAL TO ++ { {UNITIZE(Qt::Key_Multi_key), 0x2248, 0x0338, 0, 0, 0}, 0x2249 }, // U2249 # NOT ALMOST EQUAL TO ++ { {UNITIZE(Qt::Key_Multi_key), 0x224d, 0x0338, 0, 0, 0}, 0x226d }, // U226D # NOT EQUIVALENT TO ++ { {UNITIZE(Qt::Key_Multi_key), 0x2261, 0x0338, 0, 0, 0}, 0x2262 }, // U2262 # NOT IDENTICAL TO ++ { {UNITIZE(Qt::Key_Multi_key), 0x2264, 0x0338, 0, 0, 0}, 0x2270 }, // U2270 # NEITHER LESS-THAN NOR EQUAL TO ++ { {UNITIZE(Qt::Key_Multi_key), 0x2265, 0x0338, 0, 0, 0}, 0x2271 }, // U2271 # NEITHER GREATER-THAN NOR EQUAL TO ++ { {UNITIZE(Qt::Key_Multi_key), 0x2272, 0x0338, 0, 0, 0}, 0x2274 }, // U2274 # NEITHER LESS-THAN NOR EQUIVALENT TO ++ { {UNITIZE(Qt::Key_Multi_key), 0x2273, 0x0338, 0, 0, 0}, 0x2275 }, // U2275 # NEITHER GREATER-THAN NOR EQUIVALENT TO ++ { {UNITIZE(Qt::Key_Multi_key), 0x2276, 0x0338, 0, 0, 0}, 0x2278 }, // U2278 # NEITHER LESS-THAN NOR GREATER-THAN ++ { {UNITIZE(Qt::Key_Multi_key), 0x2277, 0x0338, 0, 0, 0}, 0x2279 }, // U2279 # NEITHER GREATER-THAN NOR LESS-THAN ++ { {UNITIZE(Qt::Key_Multi_key), 0x227a, 0x0338, 0, 0, 0}, 0x2280 }, // U2280 # DOES NOT PRECEDE ++ { {UNITIZE(Qt::Key_Multi_key), 0x227b, 0x0338, 0, 0, 0}, 0x2281 }, // U2281 # DOES NOT SUCCEED ++ { {UNITIZE(Qt::Key_Multi_key), 0x227c, 0x0338, 0, 0, 0}, 0x22e0 }, // U22E0 # DOES NOT PRECEDE OR EQUAL ++ { {UNITIZE(Qt::Key_Multi_key), 0x227d, 0x0338, 0, 0, 0}, 0x22e1 }, // U22E1 # DOES NOT SUCCEED OR EQUAL ++ { {UNITIZE(Qt::Key_Multi_key), 0x2282, 0x0338, 0, 0, 0}, 0x2284 }, // U2284 # NOT A SUBSET OF ++ { {UNITIZE(Qt::Key_Multi_key), 0x2282, 0x0338, 0, 0, 0}, 0x2284 }, // U2284 # NOT A SUBSET OF ++ { {UNITIZE(Qt::Key_Multi_key), 0x2283, 0x0338, 0, 0, 0}, 0x2285 }, // U2285 # NOT A SUPERSET OF ++ { {UNITIZE(Qt::Key_Multi_key), 0x2283, 0x0338, 0, 0, 0}, 0x2285 }, // U2285 # NOT A SUPERSET OF ++ { {UNITIZE(Qt::Key_Multi_key), 0x2286, 0x0338, 0, 0, 0}, 0x2288 }, // U2288 # NEITHER A SUBSET OF NOR EQUAL TO ++ { {UNITIZE(Qt::Key_Multi_key), 0x2287, 0x0338, 0, 0, 0}, 0x2289 }, // U2289 # NEITHER A SUPERSET OF NOR EQUAL TO ++ { {UNITIZE(Qt::Key_Multi_key), 0x2291, 0x0338, 0, 0, 0}, 0x22e2 }, // U22E2 # NOT SQUARE IMAGE OF OR EQUAL TO ++ { {UNITIZE(Qt::Key_Multi_key), 0x2292, 0x0338, 0, 0, 0}, 0x22e3 }, // U22E3 # NOT SQUARE ORIGINAL OF OR EQUAL TO ++ { {UNITIZE(Qt::Key_Multi_key), 0x22a3, 0x0338, 0, 0, 0}, 0x22ac }, // U22AC # DOES NOT PROVE ++ { {UNITIZE(Qt::Key_Multi_key), 0x22a8, 0x0338, 0, 0, 0}, 0x22ad }, // U22AD # NOT TRUE ++ { {UNITIZE(Qt::Key_Multi_key), 0x22a9, 0x0338, 0, 0, 0}, 0x22ae }, // U22AE # DOES NOT FORCE ++ { {UNITIZE(Qt::Key_Multi_key), 0x22ab, 0x0338, 0, 0, 0}, 0x22af }, // U22AF # NEGATED DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE ++ { {UNITIZE(Qt::Key_Multi_key), 0x22b2, 0x0338, 0, 0, 0}, 0x22ea }, // U22EA # NOT NORMAL SUBGROUP OF ++ { {UNITIZE(Qt::Key_Multi_key), 0x22b3, 0x0338, 0, 0, 0}, 0x22eb }, // U22EB # DOES NOT CONTAIN AS NORMAL SUBGROUP ++ { {UNITIZE(Qt::Key_Multi_key), 0x22b4, 0x0338, 0, 0, 0}, 0x22ec }, // U22EC # NOT NORMAL SUBGROUP OF OR EQUAL TO ++ { {UNITIZE(Qt::Key_Multi_key), 0x22b5, 0x0338, 0, 0, 0}, 0x22ed }, // U22ED # DOES NOT CONTAIN AS NORMAL SUBGROUP OR EQUAL ++ { {UNITIZE(Qt::Key_Multi_key), 0x2add, 0x0338, 0, 0, 0}, 0x2adc }, // U2ADC # FORKING ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Grave), 0x0000, 0, 0, 0, 0}, 0x1eeb }, // U1EEB # LATIN SMALL LETTER U WITH HORN AND GRAVE ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Grave), 0x0000, 0, 0, 0, 0}, 0x1edd }, // U1EDD # LATIN SMALL LETTER O WITH HORN AND GRAVE ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Grave), 0x0000, 0, 0, 0, 0}, 0x1edc }, // U1EDC # LATIN CAPITAL LETTER O WITH HORN AND GRAVE ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Grave), 0x0000, 0, 0, 0, 0}, 0x1eea }, // U1EEA # LATIN CAPITAL LETTER U WITH HORN AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0020, 0, 0, 0, 0}, 0x0060 }, // grave ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0041, 0, 0, 0, 0}, 0x00c0 }, // U00C0 # LATIN CAPITAL LETTER A WITH GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0045, 0, 0, 0, 0}, 0x00c8 }, // U00C8 # LATIN CAPITAL LETTER E WITH GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0049, 0, 0, 0, 0}, 0x00cc }, // U00CC # LATIN CAPITAL LETTER I WITH GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x004e, 0, 0, 0, 0}, 0x01f8 }, // U01F8 # LATIN CAPITAL LETTER N WITH GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x004f, 0, 0, 0, 0}, 0x00d2 }, // U00D2 # LATIN CAPITAL LETTER O WITH GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0055, 0, 0, 0, 0}, 0x00d9 }, // U00D9 # LATIN CAPITAL LETTER U WITH GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0057, 0, 0, 0, 0}, 0x1e80 }, // U1E80 # LATIN CAPITAL LETTER W WITH GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0059, 0, 0, 0, 0}, 0x1ef2 }, // U1EF2 # LATIN CAPITAL LETTER Y WITH GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0061, 0, 0, 0, 0}, 0x00e0 }, // U00E0 # LATIN SMALL LETTER A WITH GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0065, 0, 0, 0, 0}, 0x00e8 }, // U00E8 # LATIN SMALL LETTER E WITH GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0069, 0, 0, 0, 0}, 0x00ec }, // U00EC # LATIN SMALL LETTER I WITH GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x006e, 0, 0, 0, 0}, 0x01f9 }, // U01F9 # LATIN SMALL LETTER N WITH GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x006f, 0, 0, 0, 0}, 0x00f2 }, // U00F2 # LATIN SMALL LETTER O WITH GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0075, 0, 0, 0, 0}, 0x00f9 }, // U00F9 # LATIN SMALL LETTER U WITH GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0077, 0, 0, 0, 0}, 0x1e81 }, // U1E81 # LATIN SMALL LETTER W WITH GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0079, 0, 0, 0, 0}, 0x1ef3 }, // U1EF3 # LATIN SMALL LETTER Y WITH GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x00c2, 0, 0, 0, 0}, 0x1ea6 }, // U1EA6 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x00ca, 0, 0, 0, 0}, 0x1ec0 }, // U1EC0 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x00d4, 0, 0, 0, 0}, 0x1ed2 }, // U1ED2 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x00dc, 0, 0, 0, 0}, 0x01db }, // U01DB # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x00e2, 0, 0, 0, 0}, 0x1ea7 }, // U1EA7 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x00ea, 0, 0, 0, 0}, 0x1ec1 }, // U1EC1 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x00f4, 0, 0, 0, 0}, 0x1ed3 }, // U1ED3 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x00fc, 0, 0, 0, 0}, 0x01dc }, // U01DC # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0102, 0, 0, 0, 0}, 0x1eb0 }, // U1EB0 # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0103, 0, 0, 0, 0}, 0x1eb1 }, // U1EB1 # LATIN SMALL LETTER A WITH BREVE AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0112, 0, 0, 0, 0}, 0x1e14 }, // U1E14 # LATIN CAPITAL LETTER E WITH MACRON AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0113, 0, 0, 0, 0}, 0x1e15 }, // U1E15 # LATIN SMALL LETTER E WITH MACRON AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x014c, 0, 0, 0, 0}, 0x1e50 }, // U1E50 # LATIN CAPITAL LETTER O WITH MACRON AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x014d, 0, 0, 0, 0}, 0x1e51 }, // U1E51 # LATIN SMALL LETTER O WITH MACRON AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x01A0, 0, 0, 0, 0}, 0x1edc }, // U1EDC # LATIN CAPITAL LETTER O WITH HORN AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x01A1, 0, 0, 0, 0}, 0x1edd }, // U1EDD # LATIN SMALL LETTER O WITH HORN AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x01AF, 0, 0, 0, 0}, 0x1eea }, // U1EEA # LATIN CAPITAL LETTER U WITH HORN AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x01B0, 0, 0, 0, 0}, 0x1eeb }, // U1EEB # LATIN SMALL LETTER U WITH HORN AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0313, 0x0391, 0, 0, 0}, 0x1f0a }, // U1F0A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0313, 0x0395, 0, 0, 0}, 0x1f1a }, // U1F1A # GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0313, 0x0397, 0, 0, 0}, 0x1f2a }, // U1F2A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0313, 0x0399, 0, 0, 0}, 0x1f3a }, // U1F3A # GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0313, 0x039f, 0, 0, 0}, 0x1f4a }, // U1F4A # GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0313, 0x03a9, 0, 0, 0}, 0x1f6a }, // U1F6A # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0313, 0x03b1, 0, 0, 0}, 0x1f02 }, // U1F02 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0313, 0x03b5, 0, 0, 0}, 0x1f12 }, // U1F12 # GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0313, 0x03b7, 0, 0, 0}, 0x1f22 }, // U1F22 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0313, 0x03b9, 0, 0, 0}, 0x1f32 }, // U1F32 # GREEK SMALL LETTER IOTA WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0313, 0x03bf, 0, 0, 0}, 0x1f42 }, // U1F42 # GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0313, 0x03c5, 0, 0, 0}, 0x1f52 }, // U1F52 # GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0313, 0x03c9, 0, 0, 0}, 0x1f62 }, // U1F62 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0314, 0x0391, 0, 0, 0}, 0x1f0b }, // U1F0B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0314, 0x0395, 0, 0, 0}, 0x1f1b }, // U1F1B # GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0314, 0x0397, 0, 0, 0}, 0x1f2b }, // U1F2B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0314, 0x0399, 0, 0, 0}, 0x1f3b }, // U1F3B # GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0314, 0x039f, 0, 0, 0}, 0x1f4b }, // U1F4B # GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0314, 0x03a5, 0, 0, 0}, 0x1f5b }, // U1F5B # GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0314, 0x03a9, 0, 0, 0}, 0x1f6b }, // U1F6B # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0314, 0x03b1, 0, 0, 0}, 0x1f03 }, // U1F03 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0314, 0x03b5, 0, 0, 0}, 0x1f13 }, // U1F13 # GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0314, 0x03b7, 0, 0, 0}, 0x1f23 }, // U1F23 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0314, 0x03b9, 0, 0, 0}, 0x1f33 }, // U1F33 # GREEK SMALL LETTER IOTA WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0314, 0x03bf, 0, 0, 0}, 0x1f43 }, // U1F43 # GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0314, 0x03c5, 0, 0, 0}, 0x1f53 }, // U1F53 # GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0314, 0x03c9, 0, 0, 0}, 0x1f63 }, // U1F63 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0391, 0, 0, 0, 0}, 0x1fba }, // U1FBA # GREEK CAPITAL LETTER ALPHA WITH VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0395, 0, 0, 0, 0}, 0x1fc8 }, // U1FC8 # GREEK CAPITAL LETTER EPSILON WITH VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0397, 0, 0, 0, 0}, 0x1fca }, // U1FCA # GREEK CAPITAL LETTER ETA WITH VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0399, 0, 0, 0, 0}, 0x1fda }, // U1FDA # GREEK CAPITAL LETTER IOTA WITH VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x039f, 0, 0, 0, 0}, 0x1ff8 }, // U1FF8 # GREEK CAPITAL LETTER OMICRON WITH VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x03a5, 0, 0, 0, 0}, 0x1fea }, // U1FEA # GREEK CAPITAL LETTER UPSILON WITH VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x03a9, 0, 0, 0, 0}, 0x1ffa }, // U1FFA # GREEK CAPITAL LETTER OMEGA WITH VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x03b1, 0, 0, 0, 0}, 0x1f70 }, // U1F70 # GREEK SMALL LETTER ALPHA WITH VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x03b5, 0, 0, 0, 0}, 0x1f72 }, // U1F72 # GREEK SMALL LETTER EPSILON WITH VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x03b7, 0, 0, 0, 0}, 0x1f74 }, // U1F74 # GREEK SMALL LETTER ETA WITH VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x03b9, 0, 0, 0, 0}, 0x1f76 }, // U1F76 # GREEK SMALL LETTER IOTA WITH VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x03bf, 0, 0, 0, 0}, 0x1f78 }, // U1F78 # GREEK SMALL LETTER OMICRON WITH VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x03c5, 0, 0, 0, 0}, 0x1f7a }, // U1F7A # GREEK SMALL LETTER UPSILON WITH VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x03c9, 0, 0, 0, 0}, 0x1f7c }, // U1F7C # GREEK SMALL LETTER OMEGA WITH VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x03ca, 0, 0, 0, 0}, 0x1fd2 }, // U1FD2 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x03cb, 0, 0, 0, 0}, 0x1fe2 }, // U1FE2 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0415, 0, 0, 0, 0}, 0x0400 }, // U0400 # CYRILLIC CAPITAL LETTER IE WITH GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0418, 0, 0, 0, 0}, 0x040d }, // U040D # CYRILLIC CAPITAL LETTER I WITH GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0435, 0, 0, 0, 0}, 0x0450 }, // U0450 # CYRILLIC SMALL LETTER IE WITH GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x0438, 0, 0, 0, 0}, 0x045d }, // U045D # CYRILLIC SMALL LETTER I WITH GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x1f00, 0, 0, 0, 0}, 0x1f02 }, // U1F02 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x1f01, 0, 0, 0, 0}, 0x1f03 }, // U1F03 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x1f08, 0, 0, 0, 0}, 0x1f0a }, // U1F0A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x1f09, 0, 0, 0, 0}, 0x1f0b }, // U1F0B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x1f10, 0, 0, 0, 0}, 0x1f12 }, // U1F12 # GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x1f11, 0, 0, 0, 0}, 0x1f13 }, // U1F13 # GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x1f18, 0, 0, 0, 0}, 0x1f1a }, // U1F1A # GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x1f19, 0, 0, 0, 0}, 0x1f1b }, // U1F1B # GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x1f20, 0, 0, 0, 0}, 0x1f22 }, // U1F22 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x1f21, 0, 0, 0, 0}, 0x1f23 }, // U1F23 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x1f28, 0, 0, 0, 0}, 0x1f2a }, // U1F2A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x1f29, 0, 0, 0, 0}, 0x1f2b }, // U1F2B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x1f30, 0, 0, 0, 0}, 0x1f32 }, // U1F32 # GREEK SMALL LETTER IOTA WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x1f31, 0, 0, 0, 0}, 0x1f33 }, // U1F33 # GREEK SMALL LETTER IOTA WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x1f38, 0, 0, 0, 0}, 0x1f3a }, // U1F3A # GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x1f39, 0, 0, 0, 0}, 0x1f3b }, // U1F3B # GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x1f40, 0, 0, 0, 0}, 0x1f42 }, // U1F42 # GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x1f41, 0, 0, 0, 0}, 0x1f43 }, // U1F43 # GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x1f48, 0, 0, 0, 0}, 0x1f4a }, // U1F4A # GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x1f49, 0, 0, 0, 0}, 0x1f4b }, // U1F4B # GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x1f50, 0, 0, 0, 0}, 0x1f52 }, // U1F52 # GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x1f51, 0, 0, 0, 0}, 0x1f53 }, // U1F53 # GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x1f59, 0, 0, 0, 0}, 0x1f5b }, // U1F5B # GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x1f60, 0, 0, 0, 0}, 0x1f62 }, // U1F62 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x1f61, 0, 0, 0, 0}, 0x1f63 }, // U1F63 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x1f68, 0, 0, 0, 0}, 0x1f6a }, // U1F6A # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), 0x1f69, 0, 0, 0, 0}, 0x1f6b }, // U1F6B # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0055, 0, 0}, 0x01db }, // U01DB # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0075, 0, 0}, 0x01dc }, // U01DC # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0022, 0x03b9, 0, 0}, 0x1fd2 }, // U1FD2 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0022, 0x03c5, 0, 0}, 0x1fe2 }, // U1FE2 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0391, 0, 0}, 0x1f0b }, // U1F0B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0395, 0, 0}, 0x1f1b }, // U1F1B # GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0397, 0, 0}, 0x1f2b }, // U1F2B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0399, 0, 0}, 0x1f3b }, // U1F3B # GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x039f, 0, 0}, 0x1f4b }, // U1F4B # GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03a5, 0, 0}, 0x1f5b }, // U1F5B # GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03a9, 0, 0}, 0x1f6b }, // U1F6B # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b1, 0, 0}, 0x1f03 }, // U1F03 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b5, 0, 0}, 0x1f13 }, // U1F13 # GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b7, 0, 0}, 0x1f23 }, // U1F23 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b9, 0, 0}, 0x1f33 }, // U1F33 # GREEK SMALL LETTER IOTA WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03bf, 0, 0}, 0x1f43 }, // U1F43 # GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03c5, 0, 0}, 0x1f53 }, // U1F53 # GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03c9, 0, 0}, 0x1f63 }, // U1F63 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0391, 0, 0}, 0x1f0a }, // U1F0A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0395, 0, 0}, 0x1f1a }, // U1F1A # GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0397, 0, 0}, 0x1f2a }, // U1F2A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0399, 0, 0}, 0x1f3a }, // U1F3A # GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x039f, 0, 0}, 0x1f4a }, // U1F4A # GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03a9, 0, 0}, 0x1f6a }, // U1F6A # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b1, 0, 0}, 0x1f02 }, // U1F02 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b5, 0, 0}, 0x1f12 }, // U1F12 # GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b7, 0, 0}, 0x1f22 }, // U1F22 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b9, 0, 0}, 0x1f32 }, // U1F32 # GREEK SMALL LETTER IOTA WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03bf, 0, 0}, 0x1f42 }, // U1F42 # GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03c5, 0, 0}, 0x1f52 }, // U1F52 # GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03c9, 0, 0}, 0x1f62 }, // U1F62 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x002b, 0x004f, 0, 0}, 0x1edc }, // U1EDC # LATIN CAPITAL LETTER O WITH HORN AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x002b, 0x0055, 0, 0}, 0x1eea }, // U1EEA # LATIN CAPITAL LETTER U WITH HORN AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x002b, 0x006f, 0, 0}, 0x1edd }, // U1EDD # LATIN SMALL LETTER O WITH HORN AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x002b, 0x0075, 0, 0}, 0x1eeb }, // U1EEB # LATIN SMALL LETTER U WITH HORN AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0041, 0, 0}, 0x1eb0 }, // U1EB0 # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0061, 0, 0}, 0x1eb1 }, // U1EB1 # LATIN SMALL LETTER A WITH BREVE AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0041, 0, 0}, 0x1ea6 }, // U1EA6 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0045, 0, 0}, 0x1ec0 }, // U1EC0 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x005e, 0x004f, 0, 0}, 0x1ed2 }, // U1ED2 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0061, 0, 0}, 0x1ea7 }, // U1EA7 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0065, 0, 0}, 0x1ec1 }, // U1EC1 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x005e, 0x006f, 0, 0}, 0x1ed3 }, // U1ED3 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0045, 0, 0}, 0x1e14 }, // U1E14 # LATIN CAPITAL LETTER E WITH MACRON AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x004f, 0, 0}, 0x1e50 }, // U1E50 # LATIN CAPITAL LETTER O WITH MACRON AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0065, 0, 0}, 0x1e15 }, // U1E15 # LATIN SMALL LETTER E WITH MACRON AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x006f, 0, 0}, 0x1e51 }, // U1E51 # LATIN SMALL LETTER O WITH MACRON AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0041, 0, 0}, 0x1eb0 }, // U1EB0 # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0061, 0, 0}, 0x1eb1 }, // U1EB1 # LATIN SMALL LETTER A WITH BREVE AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0045, 0, 0}, 0x1e14 }, // U1E14 # LATIN CAPITAL LETTER E WITH MACRON AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x00af, 0x004f, 0, 0}, 0x1e50 }, // U1E50 # LATIN CAPITAL LETTER O WITH MACRON AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0065, 0, 0}, 0x1e15 }, // U1E15 # LATIN SMALL LETTER E WITH MACRON AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x00af, 0x006f, 0, 0}, 0x1e51 }, // U1E51 # LATIN SMALL LETTER O WITH MACRON AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Dead_Grave), 0, 0, 0, 0}, 0x0060 }, // grave ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Dead_Circumflex), 0x0041, 0, 0, 0}, 0x1ea6 }, // U1EA6 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Dead_Circumflex), 0x0045, 0, 0, 0}, 0x1ec0 }, // U1EC0 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Dead_Circumflex), 0x004f, 0, 0, 0}, 0x1ed2 }, // U1ED2 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Dead_Circumflex), 0x0061, 0, 0, 0}, 0x1ea7 }, // U1EA7 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Dead_Circumflex), 0x0065, 0, 0, 0}, 0x1ec1 }, // U1EC1 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Dead_Circumflex), 0x006f, 0, 0, 0}, 0x1ed3 }, // U1ED3 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Dead_Macron), 0x0045, 0, 0, 0}, 0x1e14 }, // U1E14 # LATIN CAPITAL LETTER E WITH MACRON AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Dead_Macron), 0x004f, 0, 0, 0}, 0x1e50 }, // U1E50 # LATIN CAPITAL LETTER O WITH MACRON AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Dead_Macron), 0x0065, 0, 0, 0}, 0x1e15 }, // U1E15 # LATIN SMALL LETTER E WITH MACRON AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Dead_Macron), 0x006f, 0, 0, 0}, 0x1e51 }, // U1E51 # LATIN SMALL LETTER O WITH MACRON AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Dead_Breve), 0x0041, 0, 0, 0}, 0x1eb0 }, // U1EB0 # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Dead_Breve), 0x0061, 0, 0, 0}, 0x1eb1 }, // U1EB1 # LATIN SMALL LETTER A WITH BREVE AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Dead_Diaeresis), 0x0055, 0, 0, 0}, 0x01db }, // U01DB # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Dead_Diaeresis), 0x0075, 0, 0, 0}, 0x01dc }, // U01DC # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Dead_Diaeresis), 0x03b9, 0, 0, 0}, 0x1fd2 }, // U1FD2 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Dead_Diaeresis), 0x03c5, 0, 0, 0}, 0x1fe2 }, // U1FE2 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Dead_Horn), 0x004f, 0, 0, 0}, 0x1edc }, // U1EDC # LATIN CAPITAL LETTER O WITH HORN AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Dead_Horn), 0x0055, 0, 0, 0}, 0x1eea }, // U1EEA # LATIN CAPITAL LETTER U WITH HORN AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Dead_Horn), 0x006f, 0, 0, 0}, 0x1edd }, // U1EDD # LATIN SMALL LETTER O WITH HORN AND GRAVE ++ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Dead_Horn), 0x0075, 0, 0, 0}, 0x1eeb }, // U1EEB # LATIN SMALL LETTER U WITH HORN AND GRAVE ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Acute), 0x0000, 0, 0, 0, 0}, 0x1eda }, // U1EDA # LATIN CAPITAL LETTER O WITH HORN AND ACUTE ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Acute), 0x0000, 0, 0, 0, 0}, 0x1ee9 }, // U1EE9 # LATIN SMALL LETTER U WITH HORN AND ACUTE ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Acute), 0x0000, 0, 0, 0, 0}, 0x1edb }, // U1EDB # LATIN SMALL LETTER O WITH HORN AND ACUTE ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Acute), 0x0000, 0, 0, 0, 0}, 0x1ee8 }, // U1EE8 # LATIN CAPITAL LETTER U WITH HORN AND ACUTE ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Acute), 0x0000, 0x004f, 0, 0, 0}, 0x1e4c }, // U1E4C # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Acute), 0x0000, 0x0055, 0, 0, 0}, 0x1e78 }, // U1E78 # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Acute), 0x0000, 0x006f, 0, 0, 0}, 0x1e4d }, // U1E4D # LATIN SMALL LETTER O WITH TILDE AND ACUTE ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Acute), 0x0000, 0x0075, 0, 0, 0}, 0x1e79 }, // U1E79 # LATIN SMALL LETTER U WITH TILDE AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0020, 0, 0, 0, 0}, 0x0027 }, // apostrophe ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0041, 0, 0, 0, 0}, 0x00c1 }, // U00C1 # LATIN CAPITAL LETTER A WITH ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0043, 0, 0, 0, 0}, 0x0106 }, // U0106 # LATIN CAPITAL LETTER C WITH ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0045, 0, 0, 0, 0}, 0x00c9 }, // U00C9 # LATIN CAPITAL LETTER E WITH ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0047, 0, 0, 0, 0}, 0x01f4 }, // U01F4 # LATIN CAPITAL LETTER G WITH ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0049, 0, 0, 0, 0}, 0x00cd }, // U00CD # LATIN CAPITAL LETTER I WITH ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x004b, 0, 0, 0, 0}, 0x1e30 }, // U1E30 # LATIN CAPITAL LETTER K WITH ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x004c, 0, 0, 0, 0}, 0x0139 }, // U0139 # LATIN CAPITAL LETTER L WITH ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x004d, 0, 0, 0, 0}, 0x1e3e }, // U1E3E # LATIN CAPITAL LETTER M WITH ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x004e, 0, 0, 0, 0}, 0x0143 }, // U0143 # LATIN CAPITAL LETTER N WITH ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x004f, 0, 0, 0, 0}, 0x00d3 }, // U00D3 # LATIN CAPITAL LETTER O WITH ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0050, 0, 0, 0, 0}, 0x1e54 }, // U1E54 # LATIN CAPITAL LETTER P WITH ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0052, 0, 0, 0, 0}, 0x0154 }, // U0154 # LATIN CAPITAL LETTER R WITH ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0053, 0, 0, 0, 0}, 0x015a }, // U015A # LATIN CAPITAL LETTER S WITH ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0055, 0, 0, 0, 0}, 0x00da }, // U00DA # LATIN CAPITAL LETTER U WITH ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0057, 0, 0, 0, 0}, 0x1e82 }, // U1E82 # LATIN CAPITAL LETTER W WITH ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0059, 0, 0, 0, 0}, 0x00dd }, // U00DD # LATIN CAPITAL LETTER Y WITH ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x005a, 0, 0, 0, 0}, 0x0179 }, // U0179 # LATIN CAPITAL LETTER Z WITH ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0061, 0, 0, 0, 0}, 0x00e1 }, // U00E1 # LATIN SMALL LETTER A WITH ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0063, 0, 0, 0, 0}, 0x0107 }, // U0107 # LATIN SMALL LETTER C WITH ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0065, 0, 0, 0, 0}, 0x00e9 }, // U00E9 # LATIN SMALL LETTER E WITH ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0067, 0, 0, 0, 0}, 0x01f5 }, // U01F5 # LATIN SMALL LETTER G WITH ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0069, 0, 0, 0, 0}, 0x00ed }, // U00ED # LATIN SMALL LETTER I WITH ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x006b, 0, 0, 0, 0}, 0x1e31 }, // U1E31 # LATIN SMALL LETTER K WITH ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x006c, 0, 0, 0, 0}, 0x013a }, // U013A # LATIN SMALL LETTER L WITH ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x006d, 0, 0, 0, 0}, 0x1e3f }, // U1E3F # LATIN SMALL LETTER M WITH ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x006e, 0, 0, 0, 0}, 0x0144 }, // U0144 # LATIN SMALL LETTER N WITH ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x006f, 0, 0, 0, 0}, 0x00f3 }, // U00F3 # LATIN SMALL LETTER O WITH ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0070, 0, 0, 0, 0}, 0x1e55 }, // U1E55 # LATIN SMALL LETTER P WITH ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0072, 0, 0, 0, 0}, 0x0155 }, // U0155 # LATIN SMALL LETTER R WITH ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0073, 0, 0, 0, 0}, 0x015b }, // U015B # LATIN SMALL LETTER S WITH ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0075, 0, 0, 0, 0}, 0x00fa }, // U00FA # LATIN SMALL LETTER U WITH ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0077, 0, 0, 0, 0}, 0x1e83 }, // U1E83 # LATIN SMALL LETTER W WITH ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0079, 0, 0, 0, 0}, 0x00fd }, // U00FD # LATIN SMALL LETTER Y WITH ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x007a, 0, 0, 0, 0}, 0x017a }, // U017A # LATIN SMALL LETTER Z WITH ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x00c2, 0, 0, 0, 0}, 0x1ea4 }, // U1EA4 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x00c5, 0, 0, 0, 0}, 0x01fa }, // U01FA # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x00c6, 0, 0, 0, 0}, 0x01fc }, // U01FC # LATIN CAPITAL LETTER AE WITH ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x00c7, 0, 0, 0, 0}, 0x1e08 }, // U1E08 # LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x00ca, 0, 0, 0, 0}, 0x1ebe }, // U1EBE # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x00cf, 0, 0, 0, 0}, 0x1e2e }, // U1E2E # LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x00d4, 0, 0, 0, 0}, 0x1ed0 }, // U1ED0 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x00d5, 0, 0, 0, 0}, 0x1e4c }, // U1E4C # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x00d8, 0, 0, 0, 0}, 0x01fe }, // U01FE # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x00dc, 0, 0, 0, 0}, 0x01d7 }, // U01D7 # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x00e2, 0, 0, 0, 0}, 0x1ea5 }, // U1EA5 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x00e5, 0, 0, 0, 0}, 0x01fb }, // U01FB # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x00e6, 0, 0, 0, 0}, 0x01fd }, // U01FD # LATIN SMALL LETTER AE WITH ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x00e7, 0, 0, 0, 0}, 0x1e09 }, // U1E09 # LATIN SMALL LETTER C WITH CEDILLA AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x00ea, 0, 0, 0, 0}, 0x1ebf }, // U1EBF # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x00ef, 0, 0, 0, 0}, 0x1e2f }, // U1E2F # LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x00f4, 0, 0, 0, 0}, 0x1ed1 }, // U1ED1 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x00f5, 0, 0, 0, 0}, 0x1e4d }, // U1E4D # LATIN SMALL LETTER O WITH TILDE AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x00f8, 0, 0, 0, 0}, 0x01ff }, // U01FF # LATIN SMALL LETTER O WITH STROKE AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x00fc, 0, 0, 0, 0}, 0x01d8 }, // U01D8 # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0102, 0, 0, 0, 0}, 0x1eae }, // U1EAE # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0103, 0, 0, 0, 0}, 0x1eaf }, // U1EAF # LATIN SMALL LETTER A WITH BREVE AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0112, 0, 0, 0, 0}, 0x1e16 }, // U1E16 # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0113, 0, 0, 0, 0}, 0x1e17 }, // U1E17 # LATIN SMALL LETTER E WITH MACRON AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x014c, 0, 0, 0, 0}, 0x1e52 }, // U1E52 # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x014d, 0, 0, 0, 0}, 0x1e53 }, // U1E53 # LATIN SMALL LETTER O WITH MACRON AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0168, 0, 0, 0, 0}, 0x1e78 }, // U1E78 # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0169, 0, 0, 0, 0}, 0x1e79 }, // U1E79 # LATIN SMALL LETTER U WITH TILDE AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x01A0, 0, 0, 0, 0}, 0x1eda }, // U1EDA # LATIN CAPITAL LETTER O WITH HORN AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x01A1, 0, 0, 0, 0}, 0x1edb }, // U1EDB # LATIN SMALL LETTER O WITH HORN AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x01AF, 0, 0, 0, 0}, 0x1ee8 }, // U1EE8 # LATIN CAPITAL LETTER U WITH HORN AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x01B0, 0, 0, 0, 0}, 0x1ee9 }, // U1EE9 # LATIN SMALL LETTER U WITH HORN AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0313, 0x0391, 0, 0, 0}, 0x1f0c }, // U1F0C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0313, 0x0395, 0, 0, 0}, 0x1f1c }, // U1F1C # GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0313, 0x0397, 0, 0, 0}, 0x1f2c }, // U1F2C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0313, 0x0399, 0, 0, 0}, 0x1f3c }, // U1F3C # GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0313, 0x039f, 0, 0, 0}, 0x1f4c }, // U1F4C # GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0313, 0x03a9, 0, 0, 0}, 0x1f6c }, // U1F6C # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0313, 0x03b1, 0, 0, 0}, 0x1f04 }, // U1F04 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0313, 0x03b5, 0, 0, 0}, 0x1f14 }, // U1F14 # GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0313, 0x03b7, 0, 0, 0}, 0x1f24 }, // U1F24 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0313, 0x03b9, 0, 0, 0}, 0x1f34 }, // U1F34 # GREEK SMALL LETTER IOTA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0313, 0x03bf, 0, 0, 0}, 0x1f44 }, // U1F44 # GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0313, 0x03c5, 0, 0, 0}, 0x1f54 }, // U1F54 # GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0313, 0x03c9, 0, 0, 0}, 0x1f64 }, // U1F64 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0314, 0x0391, 0, 0, 0}, 0x1f0d }, // U1F0D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0314, 0x0395, 0, 0, 0}, 0x1f1d }, // U1F1D # GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0314, 0x0397, 0, 0, 0}, 0x1f2d }, // U1F2D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0314, 0x0399, 0, 0, 0}, 0x1f3d }, // U1F3D # GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0314, 0x039f, 0, 0, 0}, 0x1f4d }, // U1F4D # GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0314, 0x03a5, 0, 0, 0}, 0x1f5d }, // U1F5D # GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0314, 0x03a9, 0, 0, 0}, 0x1f6d }, // U1F6D # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0314, 0x03b1, 0, 0, 0}, 0x1f05 }, // U1F05 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0314, 0x03b5, 0, 0, 0}, 0x1f15 }, // U1F15 # GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0314, 0x03b7, 0, 0, 0}, 0x1f25 }, // U1F25 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0314, 0x03b9, 0, 0, 0}, 0x1f35 }, // U1F35 # GREEK SMALL LETTER IOTA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0314, 0x03bf, 0, 0, 0}, 0x1f45 }, // U1F45 # GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0314, 0x03c5, 0, 0, 0}, 0x1f55 }, // U1F55 # GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0314, 0x03c9, 0, 0, 0}, 0x1f65 }, // U1F65 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0391, 0, 0, 0, 0}, 0x0386 }, // U0386 # GREEK CAPITAL LETTER ALPHA WITH TONOS ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0395, 0, 0, 0, 0}, 0x0388 }, // U0388 # GREEK CAPITAL LETTER EPSILON WITH TONOS ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0397, 0, 0, 0, 0}, 0x0389 }, // U0389 # GREEK CAPITAL LETTER ETA WITH TONOS ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0399, 0, 0, 0, 0}, 0x038a }, // U038A # GREEK CAPITAL LETTER IOTA WITH TONOS ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x039f, 0, 0, 0, 0}, 0x038c }, // U038C # GREEK CAPITAL LETTER OMICRON WITH TONOS ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x03a5, 0, 0, 0, 0}, 0x038e }, // U038E # GREEK CAPITAL LETTER UPSILON WITH TONOS ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x03a9, 0, 0, 0, 0}, 0x038f }, // U038F # GREEK CAPITAL LETTER OMEGA WITH TONOS ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x03b1, 0, 0, 0, 0}, 0x03ac }, // U03AC # GREEK SMALL LETTER ALPHA WITH TONOS ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x03b5, 0, 0, 0, 0}, 0x03ad }, // U03AD # GREEK SMALL LETTER EPSILON WITH TONOS ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x03b7, 0, 0, 0, 0}, 0x03ae }, // U03AE # GREEK SMALL LETTER ETA WITH TONOS ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x03b9, 0, 0, 0, 0}, 0x03af }, // U03AF # GREEK SMALL LETTER IOTA WITH TONOS ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x03bf, 0, 0, 0, 0}, 0x03cc }, // U03CC # GREEK SMALL LETTER OMICRON WITH TONOS ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x03c5, 0, 0, 0, 0}, 0x03cd }, // U03CD # GREEK SMALL LETTER UPSILON WITH TONOS ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x03c9, 0, 0, 0, 0}, 0x03ce }, // U03CE # GREEK SMALL LETTER OMEGA WITH TONOS ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x03ca, 0, 0, 0, 0}, 0x0390 }, // U0390 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x03cb, 0, 0, 0, 0}, 0x03b0 }, // U03B0 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0413, 0, 0, 0, 0}, 0x0403 }, // U0403 # CYRILLIC CAPITAL LETTER GJE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x041a, 0, 0, 0, 0}, 0x040c }, // U040C # CYRILLIC CAPITAL LETTER KJE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x0433, 0, 0, 0, 0}, 0x0453 }, // U0453 # CYRILLIC SMALL LETTER GJE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x043a, 0, 0, 0, 0}, 0x045c }, // U045C # CYRILLIC SMALL LETTER KJE ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x1f00, 0, 0, 0, 0}, 0x1f04 }, // U1F04 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x1f01, 0, 0, 0, 0}, 0x1f05 }, // U1F05 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x1f08, 0, 0, 0, 0}, 0x1f0c }, // U1F0C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x1f09, 0, 0, 0, 0}, 0x1f0d }, // U1F0D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x1f10, 0, 0, 0, 0}, 0x1f14 }, // U1F14 # GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x1f11, 0, 0, 0, 0}, 0x1f15 }, // U1F15 # GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x1f18, 0, 0, 0, 0}, 0x1f1c }, // U1F1C # GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x1f19, 0, 0, 0, 0}, 0x1f1d }, // U1F1D # GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x1f20, 0, 0, 0, 0}, 0x1f24 }, // U1F24 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x1f21, 0, 0, 0, 0}, 0x1f25 }, // U1F25 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x1f28, 0, 0, 0, 0}, 0x1f2c }, // U1F2C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x1f29, 0, 0, 0, 0}, 0x1f2d }, // U1F2D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x1f30, 0, 0, 0, 0}, 0x1f34 }, // U1F34 # GREEK SMALL LETTER IOTA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x1f31, 0, 0, 0, 0}, 0x1f35 }, // U1F35 # GREEK SMALL LETTER IOTA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x1f38, 0, 0, 0, 0}, 0x1f3c }, // U1F3C # GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x1f39, 0, 0, 0, 0}, 0x1f3d }, // U1F3D # GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x1f40, 0, 0, 0, 0}, 0x1f44 }, // U1F44 # GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x1f41, 0, 0, 0, 0}, 0x1f45 }, // U1F45 # GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x1f48, 0, 0, 0, 0}, 0x1f4c }, // U1F4C # GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x1f49, 0, 0, 0, 0}, 0x1f4d }, // U1F4D # GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x1f50, 0, 0, 0, 0}, 0x1f54 }, // U1F54 # GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x1f51, 0, 0, 0, 0}, 0x1f55 }, // U1F55 # GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x1f59, 0, 0, 0, 0}, 0x1f5d }, // U1F5D # GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x1f60, 0, 0, 0, 0}, 0x1f64 }, // U1F64 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x1f61, 0, 0, 0, 0}, 0x1f65 }, // U1F65 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x1f68, 0, 0, 0, 0}, 0x1f6c }, // U1F6C # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), 0x1f69, 0, 0, 0, 0}, 0x1f6d }, // U1F6D # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0000, 0x004f, 0, 0}, 0x01fe }, // U01FE # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0000, 0x006f, 0, 0}, 0x01ff }, // U01FF # LATIN SMALL LETTER O WITH STROKE AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0049, 0, 0}, 0x1e2e }, // U1E2E # LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0055, 0, 0}, 0x01d7 }, // U01D7 # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0069, 0, 0}, 0x1e2f }, // U1E2F # LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0075, 0, 0}, 0x01d8 }, // U01D8 # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0022, 0x03b9, 0, 0}, 0x0390 }, // U0390 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0022, 0x03c5, 0, 0}, 0x03b0 }, // U03B0 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0391, 0, 0}, 0x1f0d }, // U1F0D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0395, 0, 0}, 0x1f1d }, // U1F1D # GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0397, 0, 0}, 0x1f2d }, // U1F2D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0399, 0, 0}, 0x1f3d }, // U1F3D # GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x039f, 0, 0}, 0x1f4d }, // U1F4D # GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03a5, 0, 0}, 0x1f5d }, // U1F5D # GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03a9, 0, 0}, 0x1f6d }, // U1F6D # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b1, 0, 0}, 0x1f05 }, // U1F05 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b5, 0, 0}, 0x1f15 }, // U1F15 # GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b7, 0, 0}, 0x1f25 }, // U1F25 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b9, 0, 0}, 0x1f35 }, // U1F35 # GREEK SMALL LETTER IOTA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03bf, 0, 0}, 0x1f45 }, // U1F45 # GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03c5, 0, 0}, 0x1f55 }, // U1F55 # GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03c9, 0, 0}, 0x1f65 }, // U1F65 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0391, 0, 0}, 0x1f0c }, // U1F0C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0395, 0, 0}, 0x1f1c }, // U1F1C # GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0397, 0, 0}, 0x1f2c }, // U1F2C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0399, 0, 0}, 0x1f3c }, // U1F3C # GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x039f, 0, 0}, 0x1f4c }, // U1F4C # GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03a9, 0, 0}, 0x1f6c }, // U1F6C # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b1, 0, 0}, 0x1f04 }, // U1F04 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b5, 0, 0}, 0x1f14 }, // U1F14 # GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b7, 0, 0}, 0x1f24 }, // U1F24 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b9, 0, 0}, 0x1f34 }, // U1F34 # GREEK SMALL LETTER IOTA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03bf, 0, 0}, 0x1f44 }, // U1F44 # GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03c5, 0, 0}, 0x1f54 }, // U1F54 # GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03c9, 0, 0}, 0x1f64 }, // U1F64 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x002b, 0x004f, 0, 0}, 0x1eda }, // U1EDA # LATIN CAPITAL LETTER O WITH HORN AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x002b, 0x0055, 0, 0}, 0x1ee8 }, // U1EE8 # LATIN CAPITAL LETTER U WITH HORN AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x002b, 0x006f, 0, 0}, 0x1edb }, // U1EDB # LATIN SMALL LETTER O WITH HORN AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x002b, 0x0075, 0, 0}, 0x1ee9 }, // U1EE9 # LATIN SMALL LETTER U WITH HORN AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x002c, 0x0043, 0, 0}, 0x1e08 }, // U1E08 # LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x002c, 0x0063, 0, 0}, 0x1e09 }, // U1E09 # LATIN SMALL LETTER C WITH CEDILLA AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x002f, 0x004f, 0, 0}, 0x01fe }, // U01FE # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x002f, 0x006f, 0, 0}, 0x01ff }, // U01FF # LATIN SMALL LETTER O WITH STROKE AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0041, 0, 0}, 0x1eae }, // U1EAE # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0061, 0, 0}, 0x1eaf }, // U1EAF # LATIN SMALL LETTER A WITH BREVE AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0041, 0, 0}, 0x1ea4 }, // U1EA4 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0045, 0, 0}, 0x1ebe }, // U1EBE # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x005e, 0x004f, 0, 0}, 0x1ed0 }, // U1ED0 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0061, 0, 0}, 0x1ea5 }, // U1EA5 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0065, 0, 0}, 0x1ebf }, // U1EBF # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x005e, 0x006f, 0, 0}, 0x1ed1 }, // U1ED1 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0045, 0, 0}, 0x1e16 }, // U1E16 # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x004f, 0, 0}, 0x1e52 }, // U1E52 # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0065, 0, 0}, 0x1e17 }, // U1E17 # LATIN SMALL LETTER E WITH MACRON AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x006f, 0, 0}, 0x1e53 }, // U1E53 # LATIN SMALL LETTER O WITH MACRON AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0041, 0, 0}, 0x1eae }, // U1EAE # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0061, 0, 0}, 0x1eaf }, // U1EAF # LATIN SMALL LETTER A WITH BREVE AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x006f, 0x0041, 0, 0}, 0x01fa }, // U01FA # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x006f, 0x0061, 0, 0}, 0x01fb }, // U01FB # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x004f, 0, 0}, 0x1e4c }, // U1E4C # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0055, 0, 0}, 0x1e78 }, // U1E78 # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x006f, 0, 0}, 0x1e4d }, // U1E4D # LATIN SMALL LETTER O WITH TILDE AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0075, 0, 0}, 0x1e79 }, // U1E79 # LATIN SMALL LETTER U WITH TILDE AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0045, 0, 0}, 0x1e16 }, // U1E16 # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x00af, 0x004f, 0, 0}, 0x1e52 }, // U1E52 # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0065, 0, 0}, 0x1e17 }, // U1E17 # LATIN SMALL LETTER E WITH MACRON AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x00af, 0x006f, 0, 0}, 0x1e53 }, // U1E53 # LATIN SMALL LETTER O WITH MACRON AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Acute), 0, 0, 0, 0}, 0x00b4 }, // acute ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Circumflex), 0x0041, 0, 0, 0}, 0x1ea4 }, // U1EA4 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Circumflex), 0x0045, 0, 0, 0}, 0x1ebe }, // U1EBE # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Circumflex), 0x004f, 0, 0, 0}, 0x1ed0 }, // U1ED0 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Circumflex), 0x0061, 0, 0, 0}, 0x1ea5 }, // U1EA5 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Circumflex), 0x0065, 0, 0, 0}, 0x1ebf }, // U1EBF # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Circumflex), 0x006f, 0, 0, 0}, 0x1ed1 }, // U1ED1 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Tilde), 0x004f, 0, 0, 0}, 0x1e4c }, // U1E4C # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Tilde), 0x0055, 0, 0, 0}, 0x1e78 }, // U1E78 # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Tilde), 0x006f, 0, 0, 0}, 0x1e4d }, // U1E4D # LATIN SMALL LETTER O WITH TILDE AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Tilde), 0x0075, 0, 0, 0}, 0x1e79 }, // U1E79 # LATIN SMALL LETTER U WITH TILDE AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Macron), 0x0045, 0, 0, 0}, 0x1e16 }, // U1E16 # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Macron), 0x004f, 0, 0, 0}, 0x1e52 }, // U1E52 # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Macron), 0x0065, 0, 0, 0}, 0x1e17 }, // U1E17 # LATIN SMALL LETTER E WITH MACRON AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Macron), 0x006f, 0, 0, 0}, 0x1e53 }, // U1E53 # LATIN SMALL LETTER O WITH MACRON AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Breve), 0x0041, 0, 0, 0}, 0x1eae }, // U1EAE # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Breve), 0x0061, 0, 0, 0}, 0x1eaf }, // U1EAF # LATIN SMALL LETTER A WITH BREVE AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Diaeresis), 0x0049, 0, 0, 0}, 0x1e2e }, // U1E2E # LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Diaeresis), 0x0055, 0, 0, 0}, 0x01d7 }, // U01D7 # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Diaeresis), 0x0069, 0, 0, 0}, 0x1e2f }, // U1E2F # LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Diaeresis), 0x0075, 0, 0, 0}, 0x01d8 }, // U01D8 # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Diaeresis), 0x03b9, 0, 0, 0}, 0x0390 }, // U0390 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Diaeresis), 0x03c5, 0, 0, 0}, 0x03b0 }, // U03B0 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Abovering), 0x0041, 0, 0, 0}, 0x01fa }, // U01FA # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Abovering), 0x0061, 0, 0, 0}, 0x01fb }, // U01FB # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Cedilla), 0x0043, 0, 0, 0}, 0x1e08 }, // U1E08 # LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Cedilla), 0x0063, 0, 0, 0}, 0x1e09 }, // U1E09 # LATIN SMALL LETTER C WITH CEDILLA AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Horn), 0x004f, 0, 0, 0}, 0x1eda }, // U1EDA # LATIN CAPITAL LETTER O WITH HORN AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Horn), 0x0055, 0, 0, 0}, 0x1ee8 }, // U1EE8 # LATIN CAPITAL LETTER U WITH HORN AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Horn), 0x006f, 0, 0, 0}, 0x1edb }, // U1EDB # LATIN SMALL LETTER O WITH HORN AND ACUTE ++ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Horn), 0x0075, 0, 0, 0}, 0x1ee9 }, // U1EE9 # LATIN SMALL LETTER U WITH HORN AND ACUTE ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0000, 0, 0, 0, 0}, 0x207a }, // U207A # SUPERSCRIPT PLUS SIGN ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0000, 0, 0, 0, 0}, 0x207c }, // U207C # SUPERSCRIPT EQUALS SIGN ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0000, 0, 0, 0, 0}, 0x00b2 }, // U00B2 # SUPERSCRIPT TWO ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0000, 0, 0, 0, 0}, 0x2079 }, // U2079 # SUPERSCRIPT NINE ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0000, 0, 0, 0, 0}, 0x00b3 }, // U00B3 # SUPERSCRIPT THREE ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0000, 0, 0, 0, 0}, 0x00b9 }, // U00B9 # SUPERSCRIPT ONE ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0000, 0, 0, 0, 0}, 0x2070 }, // U2070 # SUPERSCRIPT ZERO ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0000, 0, 0, 0, 0}, 0x2078 }, // U2078 # SUPERSCRIPT EIGHT ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0000, 0, 0, 0, 0}, 0x2074 }, // U2074 # SUPERSCRIPT FOUR ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0000, 0, 0, 0, 0}, 0x2075 }, // U2075 # SUPERSCRIPT FIVE ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0000, 0, 0, 0, 0}, 0x2077 }, // U2077 # SUPERSCRIPT SEVEN ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0000, 0, 0, 0, 0}, 0x00b2 }, // U00B2 # SUPERSCRIPT TWO ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0000, 0, 0, 0, 0}, 0x2076 }, // U2076 # SUPERSCRIPT SIX ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0000, 0x0041, 0, 0, 0}, 0x1eac }, // U1EAC # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0000, 0x0045, 0, 0, 0}, 0x1ec6 }, // U1EC6 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0000, 0x004f, 0, 0, 0}, 0x1ed8 }, // U1ED8 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0000, 0x0061, 0, 0, 0}, 0x1ead }, // U1EAD # LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0000, 0x0065, 0, 0, 0}, 0x1ec7 }, // U1EC7 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0000, 0x006f, 0, 0, 0}, 0x1ed9 }, // U1ED9 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0020, 0, 0, 0, 0}, 0x005e }, // asciicircum ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0028, 0, 0, 0, 0}, 0x207d }, // U207D # SUPERSCRIPT LEFT PARENTHESIS ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0029, 0, 0, 0, 0}, 0x207e }, // U207E # SUPERSCRIPT RIGHT PARENTHESIS ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x002b, 0, 0, 0, 0}, 0x207a }, // U207A # SUPERSCRIPT PLUS SIGN ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0030, 0, 0, 0, 0}, 0x2070 }, // U2070 # SUPERSCRIPT ZERO ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0031, 0, 0, 0, 0}, 0x00b9 }, // U00B9 # SUPERSCRIPT ONE ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0032, 0, 0, 0, 0}, 0x00b2 }, // U00B2 # SUPERSCRIPT TWO ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0033, 0, 0, 0, 0}, 0x00b3 }, // U00B3 # SUPERSCRIPT THREE ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0034, 0, 0, 0, 0}, 0x2074 }, // U2074 # SUPERSCRIPT FOUR ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0035, 0, 0, 0, 0}, 0x2075 }, // U2075 # SUPERSCRIPT FIVE ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0036, 0, 0, 0, 0}, 0x2076 }, // U2076 # SUPERSCRIPT SIX ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0037, 0, 0, 0, 0}, 0x2077 }, // U2077 # SUPERSCRIPT SEVEN ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0038, 0, 0, 0, 0}, 0x2078 }, // U2078 # SUPERSCRIPT EIGHT ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0039, 0, 0, 0, 0}, 0x2079 }, // U2079 # SUPERSCRIPT NINE ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x003d, 0, 0, 0, 0}, 0x207c }, // U207C # SUPERSCRIPT EQUALS SIGN ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0041, 0, 0, 0, 0}, 0x00c2 }, // U00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0043, 0, 0, 0, 0}, 0x0108 }, // U0108 # LATIN CAPITAL LETTER C WITH CIRCUMFLEX ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0045, 0, 0, 0, 0}, 0x00ca }, // U00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0047, 0, 0, 0, 0}, 0x011c }, // U011C # LATIN CAPITAL LETTER G WITH CIRCUMFLEX ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0048, 0, 0, 0, 0}, 0x0124 }, // U0124 # LATIN CAPITAL LETTER H WITH CIRCUMFLEX ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0049, 0, 0, 0, 0}, 0x00ce }, // U00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x004a, 0, 0, 0, 0}, 0x0134 }, // U0134 # LATIN CAPITAL LETTER J WITH CIRCUMFLEX ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x004f, 0, 0, 0, 0}, 0x00d4 }, // U00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0053, 0, 0, 0, 0}, 0x015c }, // U015C # LATIN CAPITAL LETTER S WITH CIRCUMFLEX ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0055, 0, 0, 0, 0}, 0x00db }, // U00DB # LATIN CAPITAL LETTER U WITH CIRCUMFLEX ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0057, 0, 0, 0, 0}, 0x0174 }, // U0174 # LATIN CAPITAL LETTER W WITH CIRCUMFLEX ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0059, 0, 0, 0, 0}, 0x0176 }, // U0176 # LATIN CAPITAL LETTER Y WITH CIRCUMFLEX ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x005a, 0, 0, 0, 0}, 0x1e90 }, // U1E90 # LATIN CAPITAL LETTER Z WITH CIRCUMFLEX ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0061, 0, 0, 0, 0}, 0x00e2 }, // U00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0063, 0, 0, 0, 0}, 0x0109 }, // U0109 # LATIN SMALL LETTER C WITH CIRCUMFLEX ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0065, 0, 0, 0, 0}, 0x00ea }, // U00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0067, 0, 0, 0, 0}, 0x011d }, // U011D # LATIN SMALL LETTER G WITH CIRCUMFLEX ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0068, 0, 0, 0, 0}, 0x0125 }, // U0125 # LATIN SMALL LETTER H WITH CIRCUMFLEX ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0069, 0, 0, 0, 0}, 0x00ee }, // U00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x006a, 0, 0, 0, 0}, 0x0135 }, // U0135 # LATIN SMALL LETTER J WITH CIRCUMFLEX ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x006f, 0, 0, 0, 0}, 0x00f4 }, // U00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0073, 0, 0, 0, 0}, 0x015d }, // U015D # LATIN SMALL LETTER S WITH CIRCUMFLEX ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0075, 0, 0, 0, 0}, 0x00fb }, // U00FB # LATIN SMALL LETTER U WITH CIRCUMFLEX ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0077, 0, 0, 0, 0}, 0x0175 }, // U0175 # LATIN SMALL LETTER W WITH CIRCUMFLEX ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0079, 0, 0, 0, 0}, 0x0177 }, // U0177 # LATIN SMALL LETTER Y WITH CIRCUMFLEX ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x007a, 0, 0, 0, 0}, 0x1e91 }, // U1E91 # LATIN SMALL LETTER Z WITH CIRCUMFLEX ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x1ea0, 0, 0, 0, 0}, 0x1eac }, // U1EAC # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x1ea1, 0, 0, 0, 0}, 0x1ead }, // U1EAD # LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x1eb8, 0, 0, 0, 0}, 0x1ec6 }, // U1EC6 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x1eb9, 0, 0, 0, 0}, 0x1ec7 }, // U1EC7 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x1ecc, 0, 0, 0, 0}, 0x1ed8 }, // U1ED8 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x1ecd, 0, 0, 0, 0}, 0x1ed9 }, // U1ED9 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x2212, 0, 0, 0, 0}, 0x207b }, // U207B # SUPERSCRIPT MINUS ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x4e00, 0, 0, 0, 0}, 0x3192 }, // U3192 # IDEOGRAPHIC ANNOTATION ONE MARK ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x4e01, 0, 0, 0, 0}, 0x319c }, // U319C # IDEOGRAPHIC ANNOTATION FOURTH MARK ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x4e09, 0, 0, 0, 0}, 0x3194 }, // U3194 # IDEOGRAPHIC ANNOTATION THREE MARK ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x4e0a, 0, 0, 0, 0}, 0x3196 }, // U3196 # IDEOGRAPHIC ANNOTATION TOP MARK ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x4e0b, 0, 0, 0, 0}, 0x3198 }, // U3198 # IDEOGRAPHIC ANNOTATION BOTTOM MARK ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x4e19, 0, 0, 0, 0}, 0x319b }, // U319B # IDEOGRAPHIC ANNOTATION THIRD MARK ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x4e2d, 0, 0, 0, 0}, 0x3197 }, // U3197 # IDEOGRAPHIC ANNOTATION MIDDLE MARK ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x4e59, 0, 0, 0, 0}, 0x319a }, // U319A # IDEOGRAPHIC ANNOTATION SECOND MARK ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x4e8c, 0, 0, 0, 0}, 0x3193 }, // U3193 # IDEOGRAPHIC ANNOTATION TWO MARK ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x4eba, 0, 0, 0, 0}, 0x319f }, // U319F # IDEOGRAPHIC ANNOTATION MAN MARK ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x56db, 0, 0, 0, 0}, 0x3195 }, // U3195 # IDEOGRAPHIC ANNOTATION FOUR MARK ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x5730, 0, 0, 0, 0}, 0x319e }, // U319E # IDEOGRAPHIC ANNOTATION EARTH MARK ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x5929, 0, 0, 0, 0}, 0x319d }, // U319D # IDEOGRAPHIC ANNOTATION HEAVEN MARK ++ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x7532, 0, 0, 0, 0}, 0x3199 }, // U3199 # IDEOGRAPHIC ANNOTATION FIRST MARK ++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0041, 0, 0}, 0x1eac }, // U1EAC # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0045, 0, 0}, 0x1ec6 }, // U1EC6 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x0021, 0x004f, 0, 0}, 0x1ed8 }, // U1ED8 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0061, 0, 0}, 0x1ead }, // U1EAD # LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0065, 0, 0}, 0x1ec7 }, // U1EC7 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x0021, 0x006f, 0, 0}, 0x1ed9 }, // U1ED9 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x0053, 0x004d, 0, 0}, 0x2120 }, // U2120 # SERVICE MARK ++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x0054, 0x004d, 0, 0}, 0x2122 }, // U2122 # TRADE MARK SIGN ++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0061, 0, 0}, 0x00aa }, // U00AA # FEMININE ORDINAL INDICATOR ++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0061, 0, 0}, 0x00aa }, // U00AA # FEMININE ORDINAL INDICATOR ++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0068, 0, 0}, 0x02b0 }, // U02B0 # MODIFIER LETTER SMALL H ++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0068, 0, 0}, 0x02b0 }, // U02B0 # MODIFIER LETTER SMALL H ++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0069, 0, 0}, 0x2071 }, // U2071 # SUPERSCRIPT LATIN SMALL LETTER I ++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0069, 0, 0}, 0x2071 }, // U2071 # SUPERSCRIPT LATIN SMALL LETTER I ++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x006a, 0, 0}, 0x02b2 }, // U02B2 # MODIFIER LETTER SMALL J ++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x006a, 0, 0}, 0x02b2 }, // U02B2 # MODIFIER LETTER SMALL J ++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x006c, 0, 0}, 0x02e1 }, // U02E1 # MODIFIER LETTER SMALL L ++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x006c, 0, 0}, 0x02e1 }, // U02E1 # MODIFIER LETTER SMALL L ++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x006e, 0, 0}, 0x207f }, // U207F # SUPERSCRIPT LATIN SMALL LETTER N ++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x006e, 0, 0}, 0x207f }, // U207F # SUPERSCRIPT LATIN SMALL LETTER N ++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x006f, 0, 0}, 0x00ba }, // U00BA # MASCULINE ORDINAL INDICATOR ++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x006f, 0, 0}, 0x00ba }, // U00BA # MASCULINE ORDINAL INDICATOR ++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0072, 0, 0}, 0x02b3 }, // U02B3 # MODIFIER LETTER SMALL R ++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0072, 0, 0}, 0x02b3 }, // U02B3 # MODIFIER LETTER SMALL R ++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0073, 0, 0}, 0x02e2 }, // U02E2 # MODIFIER LETTER SMALL S ++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0073, 0, 0}, 0x02e2 }, // U02E2 # MODIFIER LETTER SMALL S ++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0077, 0, 0}, 0x02b7 }, // U02B7 # MODIFIER LETTER SMALL W ++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0077, 0, 0}, 0x02b7 }, // U02B7 # MODIFIER LETTER SMALL W ++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0078, 0, 0}, 0x02e3 }, // U02E3 # MODIFIER LETTER SMALL X ++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0078, 0, 0}, 0x02e3 }, // U02E3 # MODIFIER LETTER SMALL X ++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0079, 0, 0}, 0x02b8 }, // U02B8 # MODIFIER LETTER SMALL Y ++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0079, 0, 0}, 0x02b8 }, // U02B8 # MODIFIER LETTER SMALL Y ++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0263, 0, 0}, 0x02e0 }, // U02E0 # MODIFIER LETTER SMALL GAMMA ++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0263, 0, 0}, 0x02e0 }, // U02E0 # MODIFIER LETTER SMALL GAMMA ++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0266, 0, 0}, 0x02b1 }, // U02B1 # MODIFIER LETTER SMALL H WITH HOOK ++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0266, 0, 0}, 0x02b1 }, // U02B1 # MODIFIER LETTER SMALL H WITH HOOK ++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0279, 0, 0}, 0x02b4 }, // U02B4 # MODIFIER LETTER SMALL TURNED R ++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0279, 0, 0}, 0x02b4 }, // U02B4 # MODIFIER LETTER SMALL TURNED R ++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x027b, 0, 0}, 0x02b5 }, // U02B5 # MODIFIER LETTER SMALL TURNED R WITH HOOK ++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x027b, 0, 0}, 0x02b5 }, // U02B5 # MODIFIER LETTER SMALL TURNED R WITH HOOK ++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0281, 0, 0}, 0x02b6 }, // U02B6 # MODIFIER LETTER SMALL CAPITAL INVERTED R ++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0281, 0, 0}, 0x02b6 }, // U02B6 # MODIFIER LETTER SMALL CAPITAL INVERTED R ++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0295, 0, 0}, 0x02e4 }, // U02E4 # MODIFIER LETTER SMALL REVERSED GLOTTAL STOP ++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0295, 0, 0}, 0x02e4 }, // U02E4 # MODIFIER LETTER SMALL REVERSED GLOTTAL STOP ++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Dead_Circumflex), 0, 0, 0, 0}, 0x005e }, // asciicircum ++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Dead_Belowdot), 0x0041, 0, 0, 0}, 0x1eac }, // U1EAC # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Dead_Belowdot), 0x0045, 0, 0, 0}, 0x1ec6 }, // U1EC6 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Dead_Belowdot), 0x004f, 0, 0, 0}, 0x1ed8 }, // U1ED8 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Dead_Belowdot), 0x0061, 0, 0, 0}, 0x1ead }, // U1EAD # LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Dead_Belowdot), 0x0065, 0, 0, 0}, 0x1ec7 }, // U1EC7 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Dead_Belowdot), 0x006f, 0, 0, 0}, 0x1ed9 }, // U1ED9 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0000, 0, 0, 0, 0}, 0x1ee0 }, // U1EE0 # LATIN CAPITAL LETTER O WITH HORN AND TILDE ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0000, 0, 0, 0, 0}, 0x1eee }, // U1EEE # LATIN CAPITAL LETTER U WITH HORN AND TILDE ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0000, 0, 0, 0, 0}, 0x1eef }, // U1EEF # LATIN SMALL LETTER U WITH HORN AND TILDE ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0000, 0, 0, 0, 0}, 0x1ee1 }, // U1EE1 # LATIN SMALL LETTER O WITH HORN AND TILDE ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0020, 0, 0, 0, 0}, 0x007e }, // asciitilde ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0041, 0, 0, 0, 0}, 0x00c3 }, // U00C3 # LATIN CAPITAL LETTER A WITH TILDE ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0045, 0, 0, 0, 0}, 0x1ebc }, // U1EBC # LATIN CAPITAL LETTER E WITH TILDE ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0049, 0, 0, 0, 0}, 0x0128 }, // U0128 # LATIN CAPITAL LETTER I WITH TILDE ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x004e, 0, 0, 0, 0}, 0x00d1 }, // U00D1 # LATIN CAPITAL LETTER N WITH TILDE ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x004f, 0, 0, 0, 0}, 0x00d5 }, // U00D5 # LATIN CAPITAL LETTER O WITH TILDE ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0055, 0, 0, 0, 0}, 0x0168 }, // U0168 # LATIN CAPITAL LETTER U WITH TILDE ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0056, 0, 0, 0, 0}, 0x1e7c }, // U1E7C # LATIN CAPITAL LETTER V WITH TILDE ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0059, 0, 0, 0, 0}, 0x1ef8 }, // U1EF8 # LATIN CAPITAL LETTER Y WITH TILDE ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0061, 0, 0, 0, 0}, 0x00e3 }, // U00E3 # LATIN SMALL LETTER A WITH TILDE ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0065, 0, 0, 0, 0}, 0x1ebd }, // U1EBD # LATIN SMALL LETTER E WITH TILDE ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0069, 0, 0, 0, 0}, 0x0129 }, // U0129 # LATIN SMALL LETTER I WITH TILDE ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x006e, 0, 0, 0, 0}, 0x00f1 }, // U00F1 # LATIN SMALL LETTER N WITH TILDE ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x006f, 0, 0, 0, 0}, 0x00f5 }, // U00F5 # LATIN SMALL LETTER O WITH TILDE ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0075, 0, 0, 0, 0}, 0x0169 }, // U0169 # LATIN SMALL LETTER U WITH TILDE ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0076, 0, 0, 0, 0}, 0x1e7d }, // U1E7D # LATIN SMALL LETTER V WITH TILDE ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0079, 0, 0, 0, 0}, 0x1ef9 }, // U1EF9 # LATIN SMALL LETTER Y WITH TILDE ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x00c2, 0, 0, 0, 0}, 0x1eaa }, // U1EAA # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x00ca, 0, 0, 0, 0}, 0x1ec4 }, // U1EC4 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x00d4, 0, 0, 0, 0}, 0x1ed6 }, // U1ED6 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x00e2, 0, 0, 0, 0}, 0x1eab }, // U1EAB # LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x00ea, 0, 0, 0, 0}, 0x1ec5 }, // U1EC5 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x00f4, 0, 0, 0, 0}, 0x1ed7 }, // U1ED7 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0102, 0, 0, 0, 0}, 0x1eb4 }, // U1EB4 # LATIN CAPITAL LETTER A WITH BREVE AND TILDE ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0103, 0, 0, 0, 0}, 0x1eb5 }, // U1EB5 # LATIN SMALL LETTER A WITH BREVE AND TILDE ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x01A0, 0, 0, 0, 0}, 0x1ee0 }, // U1EE0 # LATIN CAPITAL LETTER O WITH HORN AND TILDE ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x01A1, 0, 0, 0, 0}, 0x1ee1 }, // U1EE1 # LATIN SMALL LETTER O WITH HORN AND TILDE ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x01AF, 0, 0, 0, 0}, 0x1eee }, // U1EEE # LATIN CAPITAL LETTER U WITH HORN AND TILDE ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x01B0, 0, 0, 0, 0}, 0x1eef }, // U1EEF # LATIN SMALL LETTER U WITH HORN AND TILDE ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0313, 0x0391, 0, 0, 0}, 0x1f0e }, // U1F0E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0313, 0x0397, 0, 0, 0}, 0x1f2e }, // U1F2E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0313, 0x0399, 0, 0, 0}, 0x1f3e }, // U1F3E # GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0313, 0x03a9, 0, 0, 0}, 0x1f6e }, // U1F6E # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0313, 0x03b1, 0, 0, 0}, 0x1f06 }, // U1F06 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0313, 0x03b7, 0, 0, 0}, 0x1f26 }, // U1F26 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0313, 0x03b9, 0, 0, 0}, 0x1f36 }, // U1F36 # GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0313, 0x03c5, 0, 0, 0}, 0x1f56 }, // U1F56 # GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0313, 0x03c9, 0, 0, 0}, 0x1f66 }, // U1F66 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0314, 0x0391, 0, 0, 0}, 0x1f0f }, // U1F0F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0314, 0x0397, 0, 0, 0}, 0x1f2f }, // U1F2F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0314, 0x0399, 0, 0, 0}, 0x1f3f }, // U1F3F # GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0314, 0x03a5, 0, 0, 0}, 0x1f5f }, // U1F5F # GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0314, 0x03a9, 0, 0, 0}, 0x1f6f }, // U1F6F # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0314, 0x03b1, 0, 0, 0}, 0x1f07 }, // U1F07 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0314, 0x03b7, 0, 0, 0}, 0x1f27 }, // U1F27 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0314, 0x03b9, 0, 0, 0}, 0x1f37 }, // U1F37 # GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0314, 0x03c5, 0, 0, 0}, 0x1f57 }, // U1F57 # GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0314, 0x03c9, 0, 0, 0}, 0x1f67 }, // U1F67 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x03b1, 0, 0, 0, 0}, 0x1fb6 }, // U1FB6 # GREEK SMALL LETTER ALPHA WITH PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x03b7, 0, 0, 0, 0}, 0x1fc6 }, // U1FC6 # GREEK SMALL LETTER ETA WITH PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x03b9, 0, 0, 0, 0}, 0x1fd6 }, // U1FD6 # GREEK SMALL LETTER IOTA WITH PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x03c5, 0, 0, 0, 0}, 0x1fe6 }, // U1FE6 # GREEK SMALL LETTER UPSILON WITH PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x03c9, 0, 0, 0, 0}, 0x1ff6 }, // U1FF6 # GREEK SMALL LETTER OMEGA WITH PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x03ca, 0, 0, 0, 0}, 0x1fd7 }, // U1FD7 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x03cb, 0, 0, 0, 0}, 0x1fe7 }, // U1FE7 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x1f00, 0, 0, 0, 0}, 0x1f06 }, // U1F06 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x1f01, 0, 0, 0, 0}, 0x1f07 }, // U1F07 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x1f08, 0, 0, 0, 0}, 0x1f0e }, // U1F0E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x1f09, 0, 0, 0, 0}, 0x1f0f }, // U1F0F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x1f20, 0, 0, 0, 0}, 0x1f26 }, // U1F26 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x1f21, 0, 0, 0, 0}, 0x1f27 }, // U1F27 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x1f28, 0, 0, 0, 0}, 0x1f2e }, // U1F2E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x1f29, 0, 0, 0, 0}, 0x1f2f }, // U1F2F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x1f30, 0, 0, 0, 0}, 0x1f36 }, // U1F36 # GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x1f31, 0, 0, 0, 0}, 0x1f37 }, // U1F37 # GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x1f38, 0, 0, 0, 0}, 0x1f3e }, // U1F3E # GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x1f39, 0, 0, 0, 0}, 0x1f3f }, // U1F3F # GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x1f50, 0, 0, 0, 0}, 0x1f56 }, // U1F56 # GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x1f51, 0, 0, 0, 0}, 0x1f57 }, // U1F57 # GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x1f59, 0, 0, 0, 0}, 0x1f5f }, // U1F5F # GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x1f60, 0, 0, 0, 0}, 0x1f66 }, // U1F66 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x1f61, 0, 0, 0, 0}, 0x1f67 }, // U1F67 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x1f68, 0, 0, 0, 0}, 0x1f6e }, // U1F6E # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), 0x1f69, 0, 0, 0, 0}, 0x1f6f }, // U1F6F # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0022, 0x03b9, 0, 0}, 0x1fd7 }, // U1FD7 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0022, 0x03c5, 0, 0}, 0x1fe7 }, // U1FE7 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0391, 0, 0}, 0x1f0f }, // U1F0F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0397, 0, 0}, 0x1f2f }, // U1F2F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0399, 0, 0}, 0x1f3f }, // U1F3F # GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03a5, 0, 0}, 0x1f5f }, // U1F5F # GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03a9, 0, 0}, 0x1f6f }, // U1F6F # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b1, 0, 0}, 0x1f07 }, // U1F07 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b7, 0, 0}, 0x1f27 }, // U1F27 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b9, 0, 0}, 0x1f37 }, // U1F37 # GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03c5, 0, 0}, 0x1f57 }, // U1F57 # GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03c9, 0, 0}, 0x1f67 }, // U1F67 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0391, 0, 0}, 0x1f0e }, // U1F0E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0397, 0, 0}, 0x1f2e }, // U1F2E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0399, 0, 0}, 0x1f3e }, // U1F3E # GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03a9, 0, 0}, 0x1f6e }, // U1F6E # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b1, 0, 0}, 0x1f06 }, // U1F06 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b7, 0, 0}, 0x1f26 }, // U1F26 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b9, 0, 0}, 0x1f36 }, // U1F36 # GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03c5, 0, 0}, 0x1f56 }, // U1F56 # GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03c9, 0, 0}, 0x1f66 }, // U1F66 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x002b, 0x004f, 0, 0}, 0x1ee0 }, // U1EE0 # LATIN CAPITAL LETTER O WITH HORN AND TILDE ++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x002b, 0x0055, 0, 0}, 0x1eee }, // U1EEE # LATIN CAPITAL LETTER U WITH HORN AND TILDE ++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x002b, 0x006f, 0, 0}, 0x1ee1 }, // U1EE1 # LATIN SMALL LETTER O WITH HORN AND TILDE ++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x002b, 0x0075, 0, 0}, 0x1eef }, // U1EEF # LATIN SMALL LETTER U WITH HORN AND TILDE ++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0041, 0, 0}, 0x1eb4 }, // U1EB4 # LATIN CAPITAL LETTER A WITH BREVE AND TILDE ++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0061, 0, 0}, 0x1eb5 }, // U1EB5 # LATIN SMALL LETTER A WITH BREVE AND TILDE ++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0041, 0, 0}, 0x1eaa }, // U1EAA # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE ++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0045, 0, 0}, 0x1ec4 }, // U1EC4 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE ++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x005e, 0x004f, 0, 0}, 0x1ed6 }, // U1ED6 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE ++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0061, 0, 0}, 0x1eab }, // U1EAB # LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE ++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0065, 0, 0}, 0x1ec5 }, // U1EC5 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE ++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x005e, 0x006f, 0, 0}, 0x1ed7 }, // U1ED7 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE ++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0041, 0, 0}, 0x1eb4 }, // U1EB4 # LATIN CAPITAL LETTER A WITH BREVE AND TILDE ++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0061, 0, 0}, 0x1eb5 }, // U1EB5 # LATIN SMALL LETTER A WITH BREVE AND TILDE ++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Dead_Circumflex), 0x0041, 0, 0, 0}, 0x1eaa }, // U1EAA # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE ++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Dead_Circumflex), 0x0045, 0, 0, 0}, 0x1ec4 }, // U1EC4 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE ++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Dead_Circumflex), 0x004f, 0, 0, 0}, 0x1ed6 }, // U1ED6 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE ++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Dead_Circumflex), 0x0061, 0, 0, 0}, 0x1eab }, // U1EAB # LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE ++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Dead_Circumflex), 0x0065, 0, 0, 0}, 0x1ec5 }, // U1EC5 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE ++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Dead_Circumflex), 0x006f, 0, 0, 0}, 0x1ed7 }, // U1ED7 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE ++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Dead_Tilde), 0, 0, 0, 0}, 0x007e }, // asciitilde ++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Dead_Breve), 0x0041, 0, 0, 0}, 0x1eb4 }, // U1EB4 # LATIN CAPITAL LETTER A WITH BREVE AND TILDE ++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Dead_Breve), 0x0061, 0, 0, 0}, 0x1eb5 }, // U1EB5 # LATIN SMALL LETTER A WITH BREVE AND TILDE ++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Dead_Diaeresis), 0x03b9, 0, 0, 0}, 0x1fd7 }, // U1FD7 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Dead_Diaeresis), 0x03c5, 0, 0, 0}, 0x1fe7 }, // U1FE7 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI ++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Dead_Horn), 0x004f, 0, 0, 0}, 0x1ee0 }, // U1EE0 # LATIN CAPITAL LETTER O WITH HORN AND TILDE ++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Dead_Horn), 0x0055, 0, 0, 0}, 0x1eee }, // U1EEE # LATIN CAPITAL LETTER U WITH HORN AND TILDE ++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Dead_Horn), 0x006f, 0, 0, 0}, 0x1ee1 }, // U1EE1 # LATIN SMALL LETTER O WITH HORN AND TILDE ++ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Dead_Horn), 0x0075, 0, 0, 0}, 0x1eef }, // U1EEF # LATIN SMALL LETTER U WITH HORN AND TILDE ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Macron), 0x0000, 0x004c, 0, 0, 0}, 0x1e38 }, // U1E38 # LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Macron), 0x0000, 0x004f, 0, 0, 0}, 0x022c }, // U022C # LATIN CAPITAL LETTER O WITH TILDE AND MACRON ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Macron), 0x0000, 0x0052, 0, 0, 0}, 0x1e5c }, // U1E5C # LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Macron), 0x0000, 0x006c, 0, 0, 0}, 0x1e39 }, // U1E39 # LATIN SMALL LETTER L WITH DOT BELOW AND MACRON ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Macron), 0x0000, 0x006f, 0, 0, 0}, 0x022d }, // U022D # LATIN SMALL LETTER O WITH TILDE AND MACRON ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Macron), 0x0000, 0x0072, 0, 0, 0}, 0x1e5d }, // U1E5D # LATIN SMALL LETTER R WITH DOT BELOW AND MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), 0x0020, 0, 0, 0, 0}, 0x00af }, // macron ++ { {UNITIZE(Qt::Key_Dead_Macron), 0x0041, 0, 0, 0, 0}, 0x0100 }, // U0100 # LATIN CAPITAL LETTER A WITH MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), 0x0045, 0, 0, 0, 0}, 0x0112 }, // U0112 # LATIN CAPITAL LETTER E WITH MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), 0x0047, 0, 0, 0, 0}, 0x1e20 }, // U1E20 # LATIN CAPITAL LETTER G WITH MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), 0x0049, 0, 0, 0, 0}, 0x012a }, // U012A # LATIN CAPITAL LETTER I WITH MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), 0x004f, 0, 0, 0, 0}, 0x014c }, // U014C # LATIN CAPITAL LETTER O WITH MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), 0x0055, 0, 0, 0, 0}, 0x016a }, // U016A # LATIN CAPITAL LETTER U WITH MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), 0x0059, 0, 0, 0, 0}, 0x0232 }, // U0232 # LATIN CAPITAL LETTER Y WITH MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), 0x0061, 0, 0, 0, 0}, 0x0101 }, // U0101 # LATIN SMALL LETTER A WITH MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), 0x0065, 0, 0, 0, 0}, 0x0113 }, // U0113 # LATIN SMALL LETTER E WITH MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), 0x0067, 0, 0, 0, 0}, 0x1e21 }, // U1E21 # LATIN SMALL LETTER G WITH MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), 0x0069, 0, 0, 0, 0}, 0x012b }, // U012B # LATIN SMALL LETTER I WITH MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), 0x006f, 0, 0, 0, 0}, 0x014d }, // U014D # LATIN SMALL LETTER O WITH MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), 0x0075, 0, 0, 0, 0}, 0x016b }, // U016B # LATIN SMALL LETTER U WITH MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), 0x0079, 0, 0, 0, 0}, 0x0233 }, // U0233 # LATIN SMALL LETTER Y WITH MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), 0x00c4, 0, 0, 0, 0}, 0x01de }, // U01DE # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), 0x00c6, 0, 0, 0, 0}, 0x01e2 }, // U01E2 # LATIN CAPITAL LETTER AE WITH MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), 0x00d5, 0, 0, 0, 0}, 0x022c }, // U022C # LATIN CAPITAL LETTER O WITH TILDE AND MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), 0x00d6, 0, 0, 0, 0}, 0x022a }, // U022A # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), 0x00dc, 0, 0, 0, 0}, 0x01d5 }, // U01D5 # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), 0x00e4, 0, 0, 0, 0}, 0x01df }, // U01DF # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), 0x00e6, 0, 0, 0, 0}, 0x01e3 }, // U01E3 # LATIN SMALL LETTER AE WITH MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), 0x00f5, 0, 0, 0, 0}, 0x022d }, // U022D # LATIN SMALL LETTER O WITH TILDE AND MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), 0x00f6, 0, 0, 0, 0}, 0x022b }, // U022B # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), 0x00fc, 0, 0, 0, 0}, 0x01d6 }, // U01D6 # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), 0x01ea, 0, 0, 0, 0}, 0x01ec }, // U01EC # LATIN CAPITAL LETTER O WITH OGONEK AND MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), 0x01eb, 0, 0, 0, 0}, 0x01ed }, // U01ED # LATIN SMALL LETTER O WITH OGONEK AND MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), 0x0226, 0, 0, 0, 0}, 0x01e0 }, // U01E0 # LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), 0x0227, 0, 0, 0, 0}, 0x01e1 }, // U01E1 # LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), 0x022e, 0, 0, 0, 0}, 0x0230 }, // U0230 # LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), 0x022f, 0, 0, 0, 0}, 0x0231 }, // U0231 # LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), 0x0391, 0, 0, 0, 0}, 0x1fb9 }, // U1FB9 # GREEK CAPITAL LETTER ALPHA WITH MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), 0x0399, 0, 0, 0, 0}, 0x1fd9 }, // U1FD9 # GREEK CAPITAL LETTER IOTA WITH MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), 0x03a5, 0, 0, 0, 0}, 0x1fe9 }, // U1FE9 # GREEK CAPITAL LETTER UPSILON WITH MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), 0x03b1, 0, 0, 0, 0}, 0x1fb1 }, // U1FB1 # GREEK SMALL LETTER ALPHA WITH MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), 0x03b9, 0, 0, 0, 0}, 0x1fd1 }, // U1FD1 # GREEK SMALL LETTER IOTA WITH MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), 0x03c5, 0, 0, 0, 0}, 0x1fe1 }, // U1FE1 # GREEK SMALL LETTER UPSILON WITH MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), 0x0418, 0, 0, 0, 0}, 0x04e2 }, // U04E2 # CYRILLIC CAPITAL LETTER I WITH MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), 0x0423, 0, 0, 0, 0}, 0x04ee }, // U04EE # CYRILLIC CAPITAL LETTER U WITH MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), 0x0438, 0, 0, 0, 0}, 0x04e3 }, // U04E3 # CYRILLIC SMALL LETTER I WITH MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), 0x0443, 0, 0, 0, 0}, 0x04ef }, // U04EF # CYRILLIC SMALL LETTER U WITH MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), 0x1e36, 0, 0, 0, 0}, 0x1e38 }, // U1E38 # LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), 0x1e37, 0, 0, 0, 0}, 0x1e39 }, // U1E39 # LATIN SMALL LETTER L WITH DOT BELOW AND MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), 0x1e5a, 0, 0, 0, 0}, 0x1e5c }, // U1E5C # LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), 0x1e5b, 0, 0, 0, 0}, 0x1e5d }, // U1E5D # LATIN SMALL LETTER R WITH DOT BELOW AND MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Multi_key), 0x0021, 0x004c, 0, 0}, 0x1e38 }, // U1E38 # LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0052, 0, 0}, 0x1e5c }, // U1E5C # LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Multi_key), 0x0021, 0x006c, 0, 0}, 0x1e39 }, // U1E39 # LATIN SMALL LETTER L WITH DOT BELOW AND MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0072, 0, 0}, 0x1e5d }, // U1E5D # LATIN SMALL LETTER R WITH DOT BELOW AND MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0041, 0, 0}, 0x01de }, // U01DE # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Multi_key), 0x0022, 0x004f, 0, 0}, 0x022a }, // U022A # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0055, 0, 0}, 0x01d5 }, // U01D5 # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0061, 0, 0}, 0x01df }, // U01DF # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Multi_key), 0x0022, 0x006f, 0, 0}, 0x022b }, // U022B # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0075, 0, 0}, 0x01d6 }, // U01D6 # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0041, 0, 0}, 0x01e0 }, // U01E0 # LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Multi_key), 0x002e, 0x004f, 0, 0}, 0x0230 }, // U0230 # LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0061, 0, 0}, 0x01e1 }, // U01E1 # LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Multi_key), 0x002e, 0x006f, 0, 0}, 0x0231 }, // U0231 # LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Multi_key), 0x003b, 0x004f, 0, 0}, 0x01ec }, // U01EC # LATIN CAPITAL LETTER O WITH OGONEK AND MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Multi_key), 0x003b, 0x006f, 0, 0}, 0x01ed }, // U01ED # LATIN SMALL LETTER O WITH OGONEK AND MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x004f, 0, 0}, 0x022c }, // U022C # LATIN CAPITAL LETTER O WITH TILDE AND MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x006f, 0, 0}, 0x022d }, // U022D # LATIN SMALL LETTER O WITH TILDE AND MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Dead_Tilde), 0x004f, 0, 0, 0}, 0x022c }, // U022C # LATIN CAPITAL LETTER O WITH TILDE AND MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Dead_Tilde), 0x006f, 0, 0, 0}, 0x022d }, // U022D # LATIN SMALL LETTER O WITH TILDE AND MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Dead_Macron), 0, 0, 0, 0}, 0x00af }, // macron ++ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Dead_Abovedot), 0x0041, 0, 0, 0}, 0x01e0 }, // U01E0 # LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Dead_Abovedot), 0x004f, 0, 0, 0}, 0x0230 }, // U0230 # LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Dead_Abovedot), 0x0061, 0, 0, 0}, 0x01e1 }, // U01E1 # LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Dead_Abovedot), 0x006f, 0, 0, 0}, 0x0231 }, // U0231 # LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Dead_Diaeresis), 0x0041, 0, 0, 0}, 0x01de }, // U01DE # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Dead_Diaeresis), 0x004f, 0, 0, 0}, 0x022a }, // U022A # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Dead_Diaeresis), 0x0055, 0, 0, 0}, 0x01d5 }, // U01D5 # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Dead_Diaeresis), 0x0061, 0, 0, 0}, 0x01df }, // U01DF # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Dead_Diaeresis), 0x006f, 0, 0, 0}, 0x022b }, // U022B # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Dead_Diaeresis), 0x0075, 0, 0, 0}, 0x01d6 }, // U01D6 # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Dead_Ogonek), 0x004f, 0, 0, 0}, 0x01ec }, // U01EC # LATIN CAPITAL LETTER O WITH OGONEK AND MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Dead_Ogonek), 0x006f, 0, 0, 0}, 0x01ed }, // U01ED # LATIN SMALL LETTER O WITH OGONEK AND MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Dead_Belowdot), 0x004c, 0, 0, 0}, 0x1e38 }, // U1E38 # LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Dead_Belowdot), 0x0052, 0, 0, 0}, 0x1e5c }, // U1E5C # LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Dead_Belowdot), 0x006c, 0, 0, 0}, 0x1e39 }, // U1E39 # LATIN SMALL LETTER L WITH DOT BELOW AND MACRON ++ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Dead_Belowdot), 0x0072, 0, 0, 0}, 0x1e5d }, // U1E5D # LATIN SMALL LETTER R WITH DOT BELOW AND MACRON ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Breve), 0x0000, 0x0041, 0, 0, 0}, 0x1eb6 }, // U1EB6 # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Breve), 0x0000, 0x0061, 0, 0, 0}, 0x1eb7 }, // U1EB7 # LATIN SMALL LETTER A WITH BREVE AND DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Breve), 0x0020, 0, 0, 0, 0}, 0x02d8 }, // breve ++ { {UNITIZE(Qt::Key_Dead_Breve), 0x0041, 0, 0, 0, 0}, 0x0102 }, // U0102 # LATIN CAPITAL LETTER A WITH BREVE ++ { {UNITIZE(Qt::Key_Dead_Breve), 0x0045, 0, 0, 0, 0}, 0x0114 }, // U0114 # LATIN CAPITAL LETTER E WITH BREVE ++ { {UNITIZE(Qt::Key_Dead_Breve), 0x0047, 0, 0, 0, 0}, 0x011e }, // U011E # LATIN CAPITAL LETTER G WITH BREVE ++ { {UNITIZE(Qt::Key_Dead_Breve), 0x0049, 0, 0, 0, 0}, 0x012c }, // U012C # LATIN CAPITAL LETTER I WITH BREVE ++ { {UNITIZE(Qt::Key_Dead_Breve), 0x004f, 0, 0, 0, 0}, 0x014e }, // U014E # LATIN CAPITAL LETTER O WITH BREVE ++ { {UNITIZE(Qt::Key_Dead_Breve), 0x0055, 0, 0, 0, 0}, 0x016c }, // U016C # LATIN CAPITAL LETTER U WITH BREVE ++ { {UNITIZE(Qt::Key_Dead_Breve), 0x0061, 0, 0, 0, 0}, 0x0103 }, // U0103 # LATIN SMALL LETTER A WITH BREVE ++ { {UNITIZE(Qt::Key_Dead_Breve), 0x0065, 0, 0, 0, 0}, 0x0115 }, // U0115 # LATIN SMALL LETTER E WITH BREVE ++ { {UNITIZE(Qt::Key_Dead_Breve), 0x0067, 0, 0, 0, 0}, 0x011f }, // U011F # LATIN SMALL LETTER G WITH BREVE ++ { {UNITIZE(Qt::Key_Dead_Breve), 0x0069, 0, 0, 0, 0}, 0x012d }, // U012D # LATIN SMALL LETTER I WITH BREVE ++ { {UNITIZE(Qt::Key_Dead_Breve), 0x006f, 0, 0, 0, 0}, 0x014f }, // U014F # LATIN SMALL LETTER O WITH BREVE ++ { {UNITIZE(Qt::Key_Dead_Breve), 0x0075, 0, 0, 0, 0}, 0x016d }, // U016D # LATIN SMALL LETTER U WITH BREVE ++ { {UNITIZE(Qt::Key_Dead_Breve), 0x0228, 0, 0, 0, 0}, 0x1e1c }, // U1E1C # LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE ++ { {UNITIZE(Qt::Key_Dead_Breve), 0x0229, 0, 0, 0, 0}, 0x1e1d }, // U1E1D # LATIN SMALL LETTER E WITH CEDILLA AND BREVE ++ { {UNITIZE(Qt::Key_Dead_Breve), 0x0391, 0, 0, 0, 0}, 0x1fb8 }, // U1FB8 # GREEK CAPITAL LETTER ALPHA WITH VRACHY ++ { {UNITIZE(Qt::Key_Dead_Breve), 0x0399, 0, 0, 0, 0}, 0x1fd8 }, // U1FD8 # GREEK CAPITAL LETTER IOTA WITH VRACHY ++ { {UNITIZE(Qt::Key_Dead_Breve), 0x03a5, 0, 0, 0, 0}, 0x1fe8 }, // U1FE8 # GREEK CAPITAL LETTER UPSILON WITH VRACHY ++ { {UNITIZE(Qt::Key_Dead_Breve), 0x03b1, 0, 0, 0, 0}, 0x1fb0 }, // U1FB0 # GREEK SMALL LETTER ALPHA WITH VRACHY ++ { {UNITIZE(Qt::Key_Dead_Breve), 0x03b9, 0, 0, 0, 0}, 0x1fd0 }, // U1FD0 # GREEK SMALL LETTER IOTA WITH VRACHY ++ { {UNITIZE(Qt::Key_Dead_Breve), 0x03c5, 0, 0, 0, 0}, 0x1fe0 }, // U1FE0 # GREEK SMALL LETTER UPSILON WITH VRACHY ++ { {UNITIZE(Qt::Key_Dead_Breve), 0x0410, 0, 0, 0, 0}, 0x04d0 }, // U04D0 # CYRILLIC CAPITAL LETTER A WITH BREVE ++ { {UNITIZE(Qt::Key_Dead_Breve), 0x0415, 0, 0, 0, 0}, 0x04d6 }, // U04D6 # CYRILLIC CAPITAL LETTER IE WITH BREVE ++ { {UNITIZE(Qt::Key_Dead_Breve), 0x0416, 0, 0, 0, 0}, 0x04c1 }, // U04C1 # CYRILLIC CAPITAL LETTER ZHE WITH BREVE ++ { {UNITIZE(Qt::Key_Dead_Breve), 0x0418, 0, 0, 0, 0}, 0x0419 }, // U0419 # CYRILLIC CAPITAL LETTER SHORT I ++ { {UNITIZE(Qt::Key_Dead_Breve), 0x0423, 0, 0, 0, 0}, 0x040e }, // U040E # CYRILLIC CAPITAL LETTER SHORT U ++ { {UNITIZE(Qt::Key_Dead_Breve), 0x0430, 0, 0, 0, 0}, 0x04d1 }, // U04D1 # CYRILLIC SMALL LETTER A WITH BREVE ++ { {UNITIZE(Qt::Key_Dead_Breve), 0x0435, 0, 0, 0, 0}, 0x04d7 }, // U04D7 # CYRILLIC SMALL LETTER IE WITH BREVE ++ { {UNITIZE(Qt::Key_Dead_Breve), 0x0436, 0, 0, 0, 0}, 0x04c2 }, // U04C2 # CYRILLIC SMALL LETTER ZHE WITH BREVE ++ { {UNITIZE(Qt::Key_Dead_Breve), 0x0438, 0, 0, 0, 0}, 0x0439 }, // U0439 # CYRILLIC SMALL LETTER SHORT I ++ { {UNITIZE(Qt::Key_Dead_Breve), 0x0443, 0, 0, 0, 0}, 0x045e }, // U045E # CYRILLIC SMALL LETTER SHORT U ++ { {UNITIZE(Qt::Key_Dead_Breve), 0x1ea0, 0, 0, 0, 0}, 0x1eb6 }, // U1EB6 # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Breve), 0x1ea1, 0, 0, 0, 0}, 0x1eb7 }, // U1EB7 # LATIN SMALL LETTER A WITH BREVE AND DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Breve), UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0041, 0, 0}, 0x1eb6 }, // U1EB6 # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Breve), UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0061, 0, 0}, 0x1eb7 }, // U1EB7 # LATIN SMALL LETTER A WITH BREVE AND DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Breve), UNITIZE(Qt::Key_Multi_key), 0x002c, 0x0045, 0, 0}, 0x1e1c }, // U1E1C # LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE ++ { {UNITIZE(Qt::Key_Dead_Breve), UNITIZE(Qt::Key_Multi_key), 0x002c, 0x0065, 0, 0}, 0x1e1d }, // U1E1D # LATIN SMALL LETTER E WITH CEDILLA AND BREVE ++ { {UNITIZE(Qt::Key_Dead_Breve), UNITIZE(Qt::Key_Dead_Breve), 0, 0, 0, 0}, 0x02d8 }, // breve ++ { {UNITIZE(Qt::Key_Dead_Breve), UNITIZE(Qt::Key_Dead_Cedilla), 0x0045, 0, 0, 0}, 0x1e1c }, // U1E1C # LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE ++ { {UNITIZE(Qt::Key_Dead_Breve), UNITIZE(Qt::Key_Dead_Cedilla), 0x0065, 0, 0, 0}, 0x1e1d }, // U1E1D # LATIN SMALL LETTER E WITH CEDILLA AND BREVE ++ { {UNITIZE(Qt::Key_Dead_Breve), UNITIZE(Qt::Key_Dead_Belowdot), 0x0041, 0, 0, 0}, 0x1eb6 }, // U1EB6 # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Breve), UNITIZE(Qt::Key_Dead_Belowdot), 0x0061, 0, 0, 0}, 0x1eb7 }, // U1EB7 # LATIN SMALL LETTER A WITH BREVE AND DOT BELOW ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0000, 0x0053, 0, 0, 0}, 0x1e64 }, // U1E64 # LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0000, 0x0053, 0, 0, 0}, 0x1e68 }, // U1E68 # LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0000, 0x0073, 0, 0, 0}, 0x1e69 }, // U1E69 # LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0000, 0x0073, 0, 0, 0}, 0x1e65 }, // U1E65 # LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0020, 0, 0, 0, 0}, 0x02d9 }, // abovedot ++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0041, 0, 0, 0, 0}, 0x0226 }, // U0226 # LATIN CAPITAL LETTER A WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0042, 0, 0, 0, 0}, 0x1e02 }, // U1E02 # LATIN CAPITAL LETTER B WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0043, 0, 0, 0, 0}, 0x010a }, // U010A # LATIN CAPITAL LETTER C WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0044, 0, 0, 0, 0}, 0x1e0a }, // U1E0A # LATIN CAPITAL LETTER D WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0045, 0, 0, 0, 0}, 0x0116 }, // U0116 # LATIN CAPITAL LETTER E WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0046, 0, 0, 0, 0}, 0x1e1e }, // U1E1E # LATIN CAPITAL LETTER F WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0047, 0, 0, 0, 0}, 0x0120 }, // U0120 # LATIN CAPITAL LETTER G WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0048, 0, 0, 0, 0}, 0x1e22 }, // U1E22 # LATIN CAPITAL LETTER H WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0049, 0, 0, 0, 0}, 0x0130 }, // U0130 # LATIN CAPITAL LETTER I WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x004d, 0, 0, 0, 0}, 0x1e40 }, // U1E40 # LATIN CAPITAL LETTER M WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x004e, 0, 0, 0, 0}, 0x1e44 }, // U1E44 # LATIN CAPITAL LETTER N WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x004f, 0, 0, 0, 0}, 0x022e }, // U022E # LATIN CAPITAL LETTER O WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0050, 0, 0, 0, 0}, 0x1e56 }, // U1E56 # LATIN CAPITAL LETTER P WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0052, 0, 0, 0, 0}, 0x1e58 }, // U1E58 # LATIN CAPITAL LETTER R WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0053, 0, 0, 0, 0}, 0x1e60 }, // U1E60 # LATIN CAPITAL LETTER S WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0054, 0, 0, 0, 0}, 0x1e6a }, // U1E6A # LATIN CAPITAL LETTER T WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0057, 0, 0, 0, 0}, 0x1e86 }, // U1E86 # LATIN CAPITAL LETTER W WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0058, 0, 0, 0, 0}, 0x1e8a }, // U1E8A # LATIN CAPITAL LETTER X WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0059, 0, 0, 0, 0}, 0x1e8e }, // U1E8E # LATIN CAPITAL LETTER Y WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x005a, 0, 0, 0, 0}, 0x017b }, // U017B # LATIN CAPITAL LETTER Z WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0061, 0, 0, 0, 0}, 0x0227 }, // U0227 # LATIN SMALL LETTER A WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0062, 0, 0, 0, 0}, 0x1e03 }, // U1E03 # LATIN SMALL LETTER B WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0063, 0, 0, 0, 0}, 0x010b }, // U010B # LATIN SMALL LETTER C WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0064, 0, 0, 0, 0}, 0x1e0b }, // U1E0B # LATIN SMALL LETTER D WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0065, 0, 0, 0, 0}, 0x0117 }, // U0117 # LATIN SMALL LETTER E WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0066, 0, 0, 0, 0}, 0x1e1f }, // U1E1F # LATIN SMALL LETTER F WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0067, 0, 0, 0, 0}, 0x0121 }, // U0121 # LATIN SMALL LETTER G WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0068, 0, 0, 0, 0}, 0x1e23 }, // U1E23 # LATIN SMALL LETTER H WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0069, 0, 0, 0, 0}, 0x0131 }, // U0131 # LATIN SMALL LETTER DOTLESS I ++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x006d, 0, 0, 0, 0}, 0x1e41 }, // U1E41 # LATIN SMALL LETTER M WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x006e, 0, 0, 0, 0}, 0x1e45 }, // U1E45 # LATIN SMALL LETTER N WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x006f, 0, 0, 0, 0}, 0x022f }, // U022F # LATIN SMALL LETTER O WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0070, 0, 0, 0, 0}, 0x1e57 }, // U1E57 # LATIN SMALL LETTER P WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0072, 0, 0, 0, 0}, 0x1e59 }, // U1E59 # LATIN SMALL LETTER R WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0073, 0, 0, 0, 0}, 0x1e61 }, // U1E61 # LATIN SMALL LETTER S WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0074, 0, 0, 0, 0}, 0x1e6b }, // U1E6B # LATIN SMALL LETTER T WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0077, 0, 0, 0, 0}, 0x1e87 }, // U1E87 # LATIN SMALL LETTER W WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0078, 0, 0, 0, 0}, 0x1e8b }, // U1E8B # LATIN SMALL LETTER X WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0079, 0, 0, 0, 0}, 0x1e8f }, // U1E8F # LATIN SMALL LETTER Y WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x007a, 0, 0, 0, 0}, 0x017c }, // U017C # LATIN SMALL LETTER Z WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x015a, 0, 0, 0, 0}, 0x1e64 }, // U1E64 # LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x015b, 0, 0, 0, 0}, 0x1e65 }, // U1E65 # LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0160, 0, 0, 0, 0}, 0x1e66 }, // U1E66 # LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0161, 0, 0, 0, 0}, 0x1e67 }, // U1E67 # LATIN SMALL LETTER S WITH CARON AND DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x017f, 0, 0, 0, 0}, 0x1e9b }, // U1E9B # LATIN SMALL LETTER LONG S WITH DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x1e62, 0, 0, 0, 0}, 0x1e68 }, // U1E68 # LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x1e63, 0, 0, 0, 0}, 0x1e69 }, // U1E69 # LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0053, 0, 0}, 0x1e68 }, // U1E68 # LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0073, 0, 0}, 0x1e69 }, // U1E69 # LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0053, 0, 0}, 0x1e64 }, // U1E64 # LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0073, 0, 0}, 0x1e65 }, // U1E65 # LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), UNITIZE(Qt::Key_Multi_key), 0x0063, 0x0053, 0, 0}, 0x1e66 }, // U1E66 # LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), UNITIZE(Qt::Key_Multi_key), 0x0063, 0x0073, 0, 0}, 0x1e67 }, // U1E67 # LATIN SMALL LETTER S WITH CARON AND DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0053, 0, 0}, 0x1e64 }, // U1E64 # LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0073, 0, 0}, 0x1e65 }, // U1E65 # LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), UNITIZE(Qt::Key_Dead_Acute), 0x0053, 0, 0, 0}, 0x1e64 }, // U1E64 # LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), UNITIZE(Qt::Key_Dead_Acute), 0x0073, 0, 0, 0}, 0x1e65 }, // U1E65 # LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), UNITIZE(Qt::Key_Dead_Abovedot), 0, 0, 0, 0}, 0x02d9 }, // abovedot ++ { {UNITIZE(Qt::Key_Dead_Abovedot), UNITIZE(Qt::Key_Dead_Caron), 0x0053, 0, 0, 0}, 0x1e66 }, // U1E66 # LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), UNITIZE(Qt::Key_Dead_Caron), 0x0073, 0, 0, 0}, 0x1e67 }, // U1E67 # LATIN SMALL LETTER S WITH CARON AND DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), UNITIZE(Qt::Key_Dead_Belowdot), 0x0053, 0, 0, 0}, 0x1e68 }, // U1E68 # LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovedot), UNITIZE(Qt::Key_Dead_Belowdot), 0x0073, 0, 0, 0}, 0x1e69 }, // U1E69 # LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0000, 0x004f, 0, 0, 0}, 0x1e4e }, // U1E4E # LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0000, 0x006f, 0, 0, 0}, 0x1e4f }, // U1E4F # LATIN SMALL LETTER O WITH TILDE AND DIAERESIS ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0020, 0, 0, 0, 0}, 0x005c }, // quotedbl ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0027, 0, 0, 0, 0}, 0x0344 }, // U0344 # COMBINING GREEK DIALYTIKA TONOS ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0041, 0, 0, 0, 0}, 0x00c4 }, // U00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0045, 0, 0, 0, 0}, 0x00cb }, // U00CB # LATIN CAPITAL LETTER E WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0048, 0, 0, 0, 0}, 0x1e26 }, // U1E26 # LATIN CAPITAL LETTER H WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0049, 0, 0, 0, 0}, 0x00cf }, // U00CF # LATIN CAPITAL LETTER I WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x004f, 0, 0, 0, 0}, 0x00d6 }, // U00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0055, 0, 0, 0, 0}, 0x00dc }, // U00DC # LATIN CAPITAL LETTER U WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0057, 0, 0, 0, 0}, 0x1e84 }, // U1E84 # LATIN CAPITAL LETTER W WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0058, 0, 0, 0, 0}, 0x1e8c }, // U1E8C # LATIN CAPITAL LETTER X WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0059, 0, 0, 0, 0}, 0x0178 }, // U0178 # LATIN CAPITAL LETTER Y WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0061, 0, 0, 0, 0}, 0x00e4 }, // U00E4 # LATIN SMALL LETTER A WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0065, 0, 0, 0, 0}, 0x00eb }, // U00EB # LATIN SMALL LETTER E WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0068, 0, 0, 0, 0}, 0x1e27 }, // U1E27 # LATIN SMALL LETTER H WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0069, 0, 0, 0, 0}, 0x00ef }, // U00EF # LATIN SMALL LETTER I WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x006f, 0, 0, 0, 0}, 0x00f6 }, // U00F6 # LATIN SMALL LETTER O WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0074, 0, 0, 0, 0}, 0x1e97 }, // U1E97 # LATIN SMALL LETTER T WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0075, 0, 0, 0, 0}, 0x00fc }, // U00FC # LATIN SMALL LETTER U WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0077, 0, 0, 0, 0}, 0x1e85 }, // U1E85 # LATIN SMALL LETTER W WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0078, 0, 0, 0, 0}, 0x1e8d }, // U1E8D # LATIN SMALL LETTER X WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0079, 0, 0, 0, 0}, 0x00ff }, // U00FF # LATIN SMALL LETTER Y WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x00b4, 0, 0, 0, 0}, 0x0344 }, // U0344 # COMBINING GREEK DIALYTIKA TONOS ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x00d5, 0, 0, 0, 0}, 0x1e4e }, // U1E4E # LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x00f5, 0, 0, 0, 0}, 0x1e4f }, // U1E4F # LATIN SMALL LETTER O WITH TILDE AND DIAERESIS ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x016a, 0, 0, 0, 0}, 0x1e7a }, // U1E7A # LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x016b, 0, 0, 0, 0}, 0x1e7b }, // U1E7B # LATIN SMALL LETTER U WITH MACRON AND DIAERESIS ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0399, 0, 0, 0, 0}, 0x03aa }, // U03AA # GREEK CAPITAL LETTER IOTA WITH DIALYTIKA ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x03a5, 0, 0, 0, 0}, 0x03ab }, // U03AB # GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x03b9, 0, 0, 0, 0}, 0x03ca }, // U03CA # GREEK SMALL LETTER IOTA WITH DIALYTIKA ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x03c5, 0, 0, 0, 0}, 0x03cb }, // U03CB # GREEK SMALL LETTER UPSILON WITH DIALYTIKA ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0406, 0, 0, 0, 0}, 0x0407 }, // U0407 # CYRILLIC CAPITAL LETTER YI ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0410, 0, 0, 0, 0}, 0x04d2 }, // U04D2 # CYRILLIC CAPITAL LETTER A WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0415, 0, 0, 0, 0}, 0x0401 }, // U0401 # CYRILLIC CAPITAL LETTER IO ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0416, 0, 0, 0, 0}, 0x04dc }, // U04DC # CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0417, 0, 0, 0, 0}, 0x04de }, // U04DE # CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0418, 0, 0, 0, 0}, 0x04e4 }, // U04E4 # CYRILLIC CAPITAL LETTER I WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x041e, 0, 0, 0, 0}, 0x04e6 }, // U04E6 # CYRILLIC CAPITAL LETTER O WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0423, 0, 0, 0, 0}, 0x04f0 }, // U04F0 # CYRILLIC CAPITAL LETTER U WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0427, 0, 0, 0, 0}, 0x04f4 }, // U04F4 # CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x042b, 0, 0, 0, 0}, 0x04f8 }, // U04F8 # CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x042d, 0, 0, 0, 0}, 0x04ec }, // U04EC # CYRILLIC CAPITAL LETTER E WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0430, 0, 0, 0, 0}, 0x04d3 }, // U04D3 # CYRILLIC SMALL LETTER A WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0435, 0, 0, 0, 0}, 0x0451 }, // U0451 # CYRILLIC SMALL LETTER IO ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0436, 0, 0, 0, 0}, 0x04dd }, // U04DD # CYRILLIC SMALL LETTER ZHE WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0437, 0, 0, 0, 0}, 0x04df }, // U04DF # CYRILLIC SMALL LETTER ZE WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0438, 0, 0, 0, 0}, 0x04e5 }, // U04E5 # CYRILLIC SMALL LETTER I WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x043e, 0, 0, 0, 0}, 0x04e7 }, // U04E7 # CYRILLIC SMALL LETTER O WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0443, 0, 0, 0, 0}, 0x04f1 }, // U04F1 # CYRILLIC SMALL LETTER U WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0447, 0, 0, 0, 0}, 0x04f5 }, // U04F5 # CYRILLIC SMALL LETTER CHE WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x044b, 0, 0, 0, 0}, 0x04f9 }, // U04F9 # CYRILLIC SMALL LETTER YERU WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x044d, 0, 0, 0, 0}, 0x04ed }, // U04ED # CYRILLIC SMALL LETTER E WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0456, 0, 0, 0, 0}, 0x0457 }, // U0457 # CYRILLIC SMALL LETTER YI ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x04d8, 0, 0, 0, 0}, 0x04da }, // U04DA # CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x04d9, 0, 0, 0, 0}, 0x04db }, // U04DB # CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x04e8, 0, 0, 0, 0}, 0x04ea }, // U04EA # CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x04e9, 0, 0, 0, 0}, 0x04eb }, // U04EB # CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0055, 0, 0}, 0x1e7a }, // U1E7A # LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0075, 0, 0}, 0x1e7b }, // U1E7B # LATIN SMALL LETTER U WITH MACRON AND DIAERESIS ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x004f, 0, 0}, 0x1e4e }, // U1E4E # LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x006f, 0, 0}, 0x1e4f }, // U1E4F # LATIN SMALL LETTER O WITH TILDE AND DIAERESIS ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0055, 0, 0}, 0x1e7a }, // U1E7A # LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0075, 0, 0}, 0x1e7b }, // U1E7B # LATIN SMALL LETTER U WITH MACRON AND DIAERESIS ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), UNITIZE(Qt::Key_Dead_Tilde), 0x004f, 0, 0, 0}, 0x1e4e }, // U1E4E # LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), UNITIZE(Qt::Key_Dead_Tilde), 0x006f, 0, 0, 0}, 0x1e4f }, // U1E4F # LATIN SMALL LETTER O WITH TILDE AND DIAERESIS ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), UNITIZE(Qt::Key_Dead_Macron), 0x0055, 0, 0, 0}, 0x1e7a }, // U1E7A # LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), UNITIZE(Qt::Key_Dead_Macron), 0x0075, 0, 0, 0}, 0x1e7b }, // U1E7B # LATIN SMALL LETTER U WITH MACRON AND DIAERESIS ++ { {UNITIZE(Qt::Key_Dead_Diaeresis), UNITIZE(Qt::Key_Dead_Diaeresis), 0, 0, 0, 0}, 0x00a8 }, // diaeresis ++ { {UNITIZE(Qt::Key_Dead_Abovering), 0x0020, 0, 0, 0, 0}, 0x00b0 }, // degree ++ { {UNITIZE(Qt::Key_Dead_Abovering), 0x0041, 0, 0, 0, 0}, 0x00c5 }, // U00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovering), 0x0055, 0, 0, 0, 0}, 0x016e }, // U016E # LATIN CAPITAL LETTER U WITH RING ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovering), 0x0061, 0, 0, 0, 0}, 0x00e5 }, // U00E5 # LATIN SMALL LETTER A WITH RING ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovering), 0x0075, 0, 0, 0, 0}, 0x016f }, // U016F # LATIN SMALL LETTER U WITH RING ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovering), 0x0077, 0, 0, 0, 0}, 0x1e98 }, // U1E98 # LATIN SMALL LETTER W WITH RING ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovering), 0x0079, 0, 0, 0, 0}, 0x1e99 }, // U1E99 # LATIN SMALL LETTER Y WITH RING ABOVE ++ { {UNITIZE(Qt::Key_Dead_Abovering), UNITIZE(Qt::Key_Dead_Abovering), 0, 0, 0, 0}, 0x00b0 }, // degree ++ { {UNITIZE(Qt::Key_Dead_Doubleacute), 0x0020, 0, 0, 0, 0}, 0x02dd }, // U2dd ++ { {UNITIZE(Qt::Key_Dead_Doubleacute), 0x004f, 0, 0, 0, 0}, 0x0150 }, // U0150 # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE ++ { {UNITIZE(Qt::Key_Dead_Doubleacute), 0x0055, 0, 0, 0, 0}, 0x0170 }, // U0170 # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE ++ { {UNITIZE(Qt::Key_Dead_Doubleacute), 0x006f, 0, 0, 0, 0}, 0x0151 }, // U0151 # LATIN SMALL LETTER O WITH DOUBLE ACUTE ++ { {UNITIZE(Qt::Key_Dead_Doubleacute), 0x0075, 0, 0, 0, 0}, 0x0171 }, // U0171 # LATIN SMALL LETTER U WITH DOUBLE ACUTE ++ { {UNITIZE(Qt::Key_Dead_Doubleacute), 0x0423, 0, 0, 0, 0}, 0x04f2 }, // U04F2 # CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE ++ { {UNITIZE(Qt::Key_Dead_Doubleacute), 0x0443, 0, 0, 0, 0}, 0x04f3 }, // U04F3 # CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE ++ { {UNITIZE(Qt::Key_Dead_Doubleacute), UNITIZE(Qt::Key_Dead_Doubleacute), 0, 0, 0, 0}, 0x02dd }, // U2dd ++ { {UNITIZE(Qt::Key_Dead_Caron), 0x0020, 0, 0, 0, 0}, 0x02c7 }, // caron ++ { {UNITIZE(Qt::Key_Dead_Caron), 0x0041, 0, 0, 0, 0}, 0x01cd }, // U01CD # LATIN CAPITAL LETTER A WITH CARON ++ { {UNITIZE(Qt::Key_Dead_Caron), 0x0043, 0, 0, 0, 0}, 0x010c }, // U010C # LATIN CAPITAL LETTER C WITH CARON ++ { {UNITIZE(Qt::Key_Dead_Caron), 0x0044, 0, 0, 0, 0}, 0x010e }, // U010E # LATIN CAPITAL LETTER D WITH CARON ++ { {UNITIZE(Qt::Key_Dead_Caron), 0x0045, 0, 0, 0, 0}, 0x011a }, // U011A # LATIN CAPITAL LETTER E WITH CARON ++ { {UNITIZE(Qt::Key_Dead_Caron), 0x0047, 0, 0, 0, 0}, 0x01e6 }, // U01E6 # LATIN CAPITAL LETTER G WITH CARON ++ { {UNITIZE(Qt::Key_Dead_Caron), 0x0048, 0, 0, 0, 0}, 0x021e }, // U021E # LATIN CAPITAL LETTER H WITH CARON ++ { {UNITIZE(Qt::Key_Dead_Caron), 0x0049, 0, 0, 0, 0}, 0x01cf }, // U01CF # LATIN CAPITAL LETTER I WITH CARON ++ { {UNITIZE(Qt::Key_Dead_Caron), 0x004b, 0, 0, 0, 0}, 0x01e8 }, // U01E8 # LATIN CAPITAL LETTER K WITH CARON ++ { {UNITIZE(Qt::Key_Dead_Caron), 0x004c, 0, 0, 0, 0}, 0x013d }, // U013D # LATIN CAPITAL LETTER L WITH CARON ++ { {UNITIZE(Qt::Key_Dead_Caron), 0x004e, 0, 0, 0, 0}, 0x0147 }, // U0147 # LATIN CAPITAL LETTER N WITH CARON ++ { {UNITIZE(Qt::Key_Dead_Caron), 0x004f, 0, 0, 0, 0}, 0x01d1 }, // U01D1 # LATIN CAPITAL LETTER O WITH CARON ++ { {UNITIZE(Qt::Key_Dead_Caron), 0x0052, 0, 0, 0, 0}, 0x0158 }, // U0158 # LATIN CAPITAL LETTER R WITH CARON ++ { {UNITIZE(Qt::Key_Dead_Caron), 0x0053, 0, 0, 0, 0}, 0x0160 }, // U0160 # LATIN CAPITAL LETTER S WITH CARON ++ { {UNITIZE(Qt::Key_Dead_Caron), 0x0054, 0, 0, 0, 0}, 0x0164 }, // U0164 # LATIN CAPITAL LETTER T WITH CARON ++ { {UNITIZE(Qt::Key_Dead_Caron), 0x0055, 0, 0, 0, 0}, 0x01d3 }, // U01D3 # LATIN CAPITAL LETTER U WITH CARON ++ { {UNITIZE(Qt::Key_Dead_Caron), 0x005a, 0, 0, 0, 0}, 0x017d }, // U017D # LATIN CAPITAL LETTER Z WITH CARON ++ { {UNITIZE(Qt::Key_Dead_Caron), 0x0061, 0, 0, 0, 0}, 0x01ce }, // U01CE # LATIN SMALL LETTER A WITH CARON ++ { {UNITIZE(Qt::Key_Dead_Caron), 0x0063, 0, 0, 0, 0}, 0x010d }, // U010D # LATIN SMALL LETTER C WITH CARON ++ { {UNITIZE(Qt::Key_Dead_Caron), 0x0064, 0, 0, 0, 0}, 0x010f }, // U010F # LATIN SMALL LETTER D WITH CARON ++ { {UNITIZE(Qt::Key_Dead_Caron), 0x0065, 0, 0, 0, 0}, 0x011b }, // U011B # LATIN SMALL LETTER E WITH CARON ++ { {UNITIZE(Qt::Key_Dead_Caron), 0x0067, 0, 0, 0, 0}, 0x01e7 }, // U01E7 # LATIN SMALL LETTER G WITH CARON ++ { {UNITIZE(Qt::Key_Dead_Caron), 0x0068, 0, 0, 0, 0}, 0x021f }, // U021F # LATIN SMALL LETTER H WITH CARON ++ { {UNITIZE(Qt::Key_Dead_Caron), 0x0069, 0, 0, 0, 0}, 0x01d0 }, // U01D0 # LATIN SMALL LETTER I WITH CARON ++ { {UNITIZE(Qt::Key_Dead_Caron), 0x006a, 0, 0, 0, 0}, 0x01f0 }, // U01F0 # LATIN SMALL LETTER J WITH CARON ++ { {UNITIZE(Qt::Key_Dead_Caron), 0x006b, 0, 0, 0, 0}, 0x01e9 }, // U01E9 # LATIN SMALL LETTER K WITH CARON ++ { {UNITIZE(Qt::Key_Dead_Caron), 0x006c, 0, 0, 0, 0}, 0x013e }, // U013E # LATIN SMALL LETTER L WITH CARON ++ { {UNITIZE(Qt::Key_Dead_Caron), 0x006e, 0, 0, 0, 0}, 0x0148 }, // U0148 # LATIN SMALL LETTER N WITH CARON ++ { {UNITIZE(Qt::Key_Dead_Caron), 0x006f, 0, 0, 0, 0}, 0x01d2 }, // U01D2 # LATIN SMALL LETTER O WITH CARON ++ { {UNITIZE(Qt::Key_Dead_Caron), 0x0072, 0, 0, 0, 0}, 0x0159 }, // U0159 # LATIN SMALL LETTER R WITH CARON ++ { {UNITIZE(Qt::Key_Dead_Caron), 0x0073, 0, 0, 0, 0}, 0x0161 }, // U0161 # LATIN SMALL LETTER S WITH CARON ++ { {UNITIZE(Qt::Key_Dead_Caron), 0x0074, 0, 0, 0, 0}, 0x0165 }, // U0165 # LATIN SMALL LETTER T WITH CARON ++ { {UNITIZE(Qt::Key_Dead_Caron), 0x0075, 0, 0, 0, 0}, 0x01d4 }, // U01D4 # LATIN SMALL LETTER U WITH CARON ++ { {UNITIZE(Qt::Key_Dead_Caron), 0x007a, 0, 0, 0, 0}, 0x017e }, // U017E # LATIN SMALL LETTER Z WITH CARON ++ { {UNITIZE(Qt::Key_Dead_Caron), 0x00dc, 0, 0, 0, 0}, 0x01d9 }, // U01D9 # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON ++ { {UNITIZE(Qt::Key_Dead_Caron), 0x00fc, 0, 0, 0, 0}, 0x01da }, // U01DA # LATIN SMALL LETTER U WITH DIAERESIS AND CARON ++ { {UNITIZE(Qt::Key_Dead_Caron), 0x01b7, 0, 0, 0, 0}, 0x01ee }, // U01EE # LATIN CAPITAL LETTER EZH WITH CARON ++ { {UNITIZE(Qt::Key_Dead_Caron), 0x0292, 0, 0, 0, 0}, 0x01ef }, // U01EF # LATIN SMALL LETTER EZH WITH CARON ++ { {UNITIZE(Qt::Key_Dead_Caron), UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0055, 0, 0}, 0x01d9 }, // U01D9 # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON ++ { {UNITIZE(Qt::Key_Dead_Caron), UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0075, 0, 0}, 0x01da }, // U01DA # LATIN SMALL LETTER U WITH DIAERESIS AND CARON ++ { {UNITIZE(Qt::Key_Dead_Caron), UNITIZE(Qt::Key_Dead_Diaeresis), 0x0055, 0, 0, 0}, 0x01d9 }, // U01D9 # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON ++ { {UNITIZE(Qt::Key_Dead_Caron), UNITIZE(Qt::Key_Dead_Diaeresis), 0x0075, 0, 0, 0}, 0x01da }, // U01DA # LATIN SMALL LETTER U WITH DIAERESIS AND CARON ++ { {UNITIZE(Qt::Key_Dead_Caron), UNITIZE(Qt::Key_Dead_Caron), 0, 0, 0, 0}, 0x02c7 }, // caron ++ { {UNITIZE(Qt::Key_Dead_Cedilla), 0x0020, 0, 0, 0, 0}, 0x00b8 }, // cedilla ++ { {UNITIZE(Qt::Key_Dead_Cedilla), 0x0043, 0, 0, 0, 0}, 0x00c7 }, // U00C7 # LATIN CAPITAL LETTER C WITH CEDILLA ++ { {UNITIZE(Qt::Key_Dead_Cedilla), 0x0044, 0, 0, 0, 0}, 0x1e10 }, // U1E10 # LATIN CAPITAL LETTER D WITH CEDILLA ++ { {UNITIZE(Qt::Key_Dead_Cedilla), 0x0045, 0, 0, 0, 0}, 0x0228 }, // U0228 # LATIN CAPITAL LETTER E WITH CEDILLA ++ { {UNITIZE(Qt::Key_Dead_Cedilla), 0x0047, 0, 0, 0, 0}, 0x0122 }, // U0122 # LATIN CAPITAL LETTER G WITH CEDILLA ++ { {UNITIZE(Qt::Key_Dead_Cedilla), 0x0048, 0, 0, 0, 0}, 0x1e28 }, // U1E28 # LATIN CAPITAL LETTER H WITH CEDILLA ++ { {UNITIZE(Qt::Key_Dead_Cedilla), 0x004b, 0, 0, 0, 0}, 0x0136 }, // U0136 # LATIN CAPITAL LETTER K WITH CEDILLA ++ { {UNITIZE(Qt::Key_Dead_Cedilla), 0x004c, 0, 0, 0, 0}, 0x013b }, // U013B # LATIN CAPITAL LETTER L WITH CEDILLA ++ { {UNITIZE(Qt::Key_Dead_Cedilla), 0x004e, 0, 0, 0, 0}, 0x0145 }, // U0145 # LATIN CAPITAL LETTER N WITH CEDILLA ++ { {UNITIZE(Qt::Key_Dead_Cedilla), 0x0052, 0, 0, 0, 0}, 0x0156 }, // U0156 # LATIN CAPITAL LETTER R WITH CEDILLA ++ { {UNITIZE(Qt::Key_Dead_Cedilla), 0x0053, 0, 0, 0, 0}, 0x015e }, // U015E # LATIN CAPITAL LETTER S WITH CEDILLA ++ { {UNITIZE(Qt::Key_Dead_Cedilla), 0x0054, 0, 0, 0, 0}, 0x0162 }, // U0162 # LATIN CAPITAL LETTER T WITH CEDILLA ++ { {UNITIZE(Qt::Key_Dead_Cedilla), 0x0063, 0, 0, 0, 0}, 0x00e7 }, // U00E7 # LATIN SMALL LETTER C WITH CEDILLA ++ { {UNITIZE(Qt::Key_Dead_Cedilla), 0x0064, 0, 0, 0, 0}, 0x1e11 }, // U1E11 # LATIN SMALL LETTER D WITH CEDILLA ++ { {UNITIZE(Qt::Key_Dead_Cedilla), 0x0065, 0, 0, 0, 0}, 0x0229 }, // U0229 # LATIN SMALL LETTER E WITH CEDILLA ++ { {UNITIZE(Qt::Key_Dead_Cedilla), 0x0067, 0, 0, 0, 0}, 0x0123 }, // U0123 # LATIN SMALL LETTER G WITH CEDILLA ++ { {UNITIZE(Qt::Key_Dead_Cedilla), 0x0068, 0, 0, 0, 0}, 0x1e29 }, // U1E29 # LATIN SMALL LETTER H WITH CEDILLA ++ { {UNITIZE(Qt::Key_Dead_Cedilla), 0x006b, 0, 0, 0, 0}, 0x0137 }, // U0137 # LATIN SMALL LETTER K WITH CEDILLA ++ { {UNITIZE(Qt::Key_Dead_Cedilla), 0x006c, 0, 0, 0, 0}, 0x013c }, // U013C # LATIN SMALL LETTER L WITH CEDILLA ++ { {UNITIZE(Qt::Key_Dead_Cedilla), 0x006e, 0, 0, 0, 0}, 0x0146 }, // U0146 # LATIN SMALL LETTER N WITH CEDILLA ++ { {UNITIZE(Qt::Key_Dead_Cedilla), 0x0072, 0, 0, 0, 0}, 0x0157 }, // U0157 # LATIN SMALL LETTER R WITH CEDILLA ++ { {UNITIZE(Qt::Key_Dead_Cedilla), 0x0073, 0, 0, 0, 0}, 0x015f }, // U015F # LATIN SMALL LETTER S WITH CEDILLA ++ { {UNITIZE(Qt::Key_Dead_Cedilla), 0x0074, 0, 0, 0, 0}, 0x0163 }, // U0163 # LATIN SMALL LETTER T WITH CEDILLA ++ { {UNITIZE(Qt::Key_Dead_Cedilla), UNITIZE(Qt::Key_Dead_Cedilla), 0, 0, 0, 0}, 0x00b8 }, // cedilla ++ { {UNITIZE(Qt::Key_Dead_Ogonek), 0x0041, 0, 0, 0, 0}, 0x0104 }, // U0104 # LATIN CAPITAL LETTER A WITH OGONEK ++ { {UNITIZE(Qt::Key_Dead_Ogonek), 0x0045, 0, 0, 0, 0}, 0x0118 }, // U0118 # LATIN CAPITAL LETTER E WITH OGONEK ++ { {UNITIZE(Qt::Key_Dead_Ogonek), 0x0049, 0, 0, 0, 0}, 0x012e }, // U012E # LATIN CAPITAL LETTER I WITH OGONEK ++ { {UNITIZE(Qt::Key_Dead_Ogonek), 0x004f, 0, 0, 0, 0}, 0x01ea }, // U01EA # LATIN CAPITAL LETTER O WITH OGONEK ++ { {UNITIZE(Qt::Key_Dead_Ogonek), 0x0055, 0, 0, 0, 0}, 0x0172 }, // U0172 # LATIN CAPITAL LETTER U WITH OGONEK ++ { {UNITIZE(Qt::Key_Dead_Ogonek), 0x0061, 0, 0, 0, 0}, 0x0105 }, // U0105 # LATIN SMALL LETTER A WITH OGONEK ++ { {UNITIZE(Qt::Key_Dead_Ogonek), 0x0065, 0, 0, 0, 0}, 0x0119 }, // U0119 # LATIN SMALL LETTER E WITH OGONEK ++ { {UNITIZE(Qt::Key_Dead_Ogonek), 0x0069, 0, 0, 0, 0}, 0x012f }, // U012F # LATIN SMALL LETTER I WITH OGONEK ++ { {UNITIZE(Qt::Key_Dead_Ogonek), 0x006f, 0, 0, 0, 0}, 0x01eb }, // U01EB # LATIN SMALL LETTER O WITH OGONEK ++ { {UNITIZE(Qt::Key_Dead_Ogonek), 0x0075, 0, 0, 0, 0}, 0x0173 }, // U0173 # LATIN SMALL LETTER U WITH OGONEK ++ { {UNITIZE(Qt::Key_Dead_Ogonek), UNITIZE(Qt::Key_Dead_Ogonek), 0, 0, 0, 0}, 0x02db }, // ogonek ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Ogonek), dead_space, 0, 0, 0, 0}, 0x02db }, // ogonek ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x0313, 0x0391, 0, 0}, 0x1f8c }, // U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x0313, 0x0391, 0, 0}, 0x1f8a }, // U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x0313, 0x0397, 0, 0}, 0x1f9c }, // U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x0313, 0x0397, 0, 0}, 0x1f9a }, // U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x0313, 0x03a9, 0, 0}, 0x1faa }, // U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x0313, 0x03a9, 0, 0}, 0x1fac }, // U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x0313, 0x03b1, 0, 0}, 0x1f82 }, // U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x0313, 0x03b1, 0, 0}, 0x1f84 }, // U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x0313, 0x03b7, 0, 0}, 0x1f94 }, // U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x0313, 0x03b7, 0, 0}, 0x1f92 }, // U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x0313, 0x03c9, 0, 0}, 0x1fa2 }, // U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x0313, 0x03c9, 0, 0}, 0x1fa4 }, // U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x0314, 0x0391, 0, 0}, 0x1f8b }, // U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x0314, 0x0391, 0, 0}, 0x1f8d }, // U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x0314, 0x0397, 0, 0}, 0x1f9b }, // U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x0314, 0x0397, 0, 0}, 0x1f9d }, // U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x0314, 0x03a9, 0, 0}, 0x1fab }, // U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x0314, 0x03a9, 0, 0}, 0x1fad }, // U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x0314, 0x03b1, 0, 0}, 0x1f83 }, // U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x0314, 0x03b1, 0, 0}, 0x1f85 }, // U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x0314, 0x03b7, 0, 0}, 0x1f95 }, // U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x0314, 0x03b7, 0, 0}, 0x1f93 }, // U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x0314, 0x03c9, 0, 0}, 0x1fa5 }, // U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x0314, 0x03c9, 0, 0}, 0x1fa3 }, // U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x03b1, 0, 0, 0}, 0x1fb4 }, // U1FB4 # GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x03b1, 0, 0, 0}, 0x1fb2 }, // U1FB2 # GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x03b7, 0, 0, 0}, 0x1fc4 }, // U1FC4 # GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x03b7, 0, 0, 0}, 0x1fc2 }, // U1FC2 # GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x03c9, 0, 0, 0}, 0x1ff4 }, // U1FF4 # GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x03c9, 0, 0, 0}, 0x1ff2 }, // U1FF2 # GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x1f00, 0, 0, 0}, 0x1f84 }, // U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x1f00, 0, 0, 0}, 0x1f82 }, // U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x1f01, 0, 0, 0}, 0x1f83 }, // U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x1f01, 0, 0, 0}, 0x1f85 }, // U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x1f08, 0, 0, 0}, 0x1f8a }, // U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x1f08, 0, 0, 0}, 0x1f8c }, // U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x1f09, 0, 0, 0}, 0x1f8b }, // U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x1f09, 0, 0, 0}, 0x1f8d }, // U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x1f20, 0, 0, 0}, 0x1f94 }, // U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x1f20, 0, 0, 0}, 0x1f92 }, // U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x1f21, 0, 0, 0}, 0x1f93 }, // U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x1f21, 0, 0, 0}, 0x1f95 }, // U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x1f28, 0, 0, 0}, 0x1f9c }, // U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x1f28, 0, 0, 0}, 0x1f9a }, // U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x1f29, 0, 0, 0}, 0x1f9d }, // U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x1f29, 0, 0, 0}, 0x1f9b }, // U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x1f60, 0, 0, 0}, 0x1fa2 }, // U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x1f60, 0, 0, 0}, 0x1fa4 }, // U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x1f61, 0, 0, 0}, 0x1fa5 }, // U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x1f61, 0, 0, 0}, 0x1fa3 }, // U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x1f68, 0, 0, 0}, 0x1fac }, // U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x1f68, 0, 0, 0}, 0x1faa }, // U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x1f69, 0, 0, 0}, 0x1fad }, // U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x1f69, 0, 0, 0}, 0x1fab }, // U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0391, 0}, 0x1f8d }, // U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0391, 0}, 0x1f8b }, // U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0397, 0}, 0x1f9d }, // U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0397, 0}, 0x1f9b }, // U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03a9, 0}, 0x1fab }, // U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03a9, 0}, 0x1fad }, // U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b1, 0}, 0x1f85 }, // U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b1, 0}, 0x1f83 }, // U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b7, 0}, 0x1f95 }, // U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b7, 0}, 0x1f93 }, // U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03c9, 0}, 0x1fa3 }, // U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03c9, 0}, 0x1fa5 }, // U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0391, 0}, 0x1f8a }, // U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0391, 0}, 0x1f8c }, // U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0397, 0}, 0x1f9a }, // U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0397, 0}, 0x1f9c }, // U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03a9, 0}, 0x1fac }, // U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03a9, 0}, 0x1faa }, // U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b1, 0}, 0x1f84 }, // U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b1, 0}, 0x1f82 }, // U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b7, 0}, 0x1f94 }, // U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b7, 0}, 0x1f92 }, // U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03c9, 0}, 0x1fa2 }, // U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03c9, 0}, 0x1fa4 }, // U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0313, 0x0391, 0, 0, 0}, 0x1f88 }, // U1F88 # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0313, 0x0397, 0, 0, 0}, 0x1f98 }, // U1F98 # GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0313, 0x03a9, 0, 0, 0}, 0x1fa8 }, // U1FA8 # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0313, 0x03b1, 0, 0, 0}, 0x1f80 }, // U1F80 # GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0313, 0x03b7, 0, 0, 0}, 0x1f90 }, // U1F90 # GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0313, 0x03c9, 0, 0, 0}, 0x1fa0 }, // U1FA0 # GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0314, 0x0391, 0, 0, 0}, 0x1f89 }, // U1F89 # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0314, 0x0397, 0, 0, 0}, 0x1f99 }, // U1F99 # GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0314, 0x03a9, 0, 0, 0}, 0x1fa9 }, // U1FA9 # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0314, 0x03b1, 0, 0, 0}, 0x1f81 }, // U1F81 # GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0314, 0x03b7, 0, 0, 0}, 0x1f91 }, // U1F91 # GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0314, 0x03c9, 0, 0, 0}, 0x1fa1 }, // U1FA1 # GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, 0x0313, 0x0391, 0, 0}, 0x1f8e }, // U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, 0x0313, 0x0397, 0, 0}, 0x1f9e }, // U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, 0x0313, 0x03a9, 0, 0}, 0x1fae }, // U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, 0x0313, 0x03b1, 0, 0}, 0x1f86 }, // U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, 0x0313, 0x03b7, 0, 0}, 0x1f96 }, // U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, 0x0313, 0x03c9, 0, 0}, 0x1fa6 }, // U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, 0x0314, 0x0391, 0, 0}, 0x1f8f }, // U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, 0x0314, 0x0397, 0, 0}, 0x1f9f }, // U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, 0x0314, 0x03a9, 0, 0}, 0x1faf }, // U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, 0x0314, 0x03b1, 0, 0}, 0x1f87 }, // U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, 0x0314, 0x03b7, 0, 0}, 0x1f97 }, // U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, 0x0314, 0x03c9, 0, 0}, 0x1fa7 }, // U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, 0x03b1, 0, 0, 0}, 0x1fb7 }, // U1FB7 # GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, 0x03b7, 0, 0, 0}, 0x1fc7 }, // U1FC7 # GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, 0x03c9, 0, 0, 0}, 0x1ff7 }, // U1FF7 # GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, 0x1f00, 0, 0, 0}, 0x1f86 }, // U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, 0x1f01, 0, 0, 0}, 0x1f87 }, // U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, 0x1f08, 0, 0, 0}, 0x1f8e }, // U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, 0x1f09, 0, 0, 0}, 0x1f8f }, // U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, 0x1f20, 0, 0, 0}, 0x1f96 }, // U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, 0x1f21, 0, 0, 0}, 0x1f97 }, // U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, 0x1f28, 0, 0, 0}, 0x1f9e }, // U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, 0x1f29, 0, 0, 0}, 0x1f9f }, // U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, 0x1f60, 0, 0, 0}, 0x1fa6 }, // U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, 0x1f61, 0, 0, 0}, 0x1fa7 }, // U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, 0x1f68, 0, 0, 0}, 0x1fae }, // U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, 0x1f69, 0, 0, 0}, 0x1faf }, // U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0391, 0}, 0x1f8f }, // U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0397, 0}, 0x1f9f }, // U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03a9, 0}, 0x1faf }, // U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b1, 0}, 0x1f87 }, // U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b7, 0}, 0x1f97 }, // U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03c9, 0}, 0x1fa7 }, // U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0391, 0}, 0x1f8e }, // U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0397, 0}, 0x1f9e }, // U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03a9, 0}, 0x1fae }, // U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b1, 0}, 0x1f86 }, // U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b7, 0}, 0x1f96 }, // U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03c9, 0}, 0x1fa6 }, // U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0391, 0, 0, 0, 0}, 0x1fbc }, // U1FBC # GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x0397, 0, 0, 0, 0}, 0x1fcc }, // U1FCC # GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x03a9, 0, 0, 0, 0}, 0x1ffc }, // U1FFC # GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x03ac, 0, 0, 0, 0}, 0x1fb4 }, // U1FB4 # GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x03ae, 0, 0, 0, 0}, 0x1fc4 }, // U1FC4 # GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x03b1, 0, 0, 0, 0}, 0x1fb3 }, // U1FB3 # GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x03b7, 0, 0, 0, 0}, 0x1fc3 }, // U1FC3 # GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x03c9, 0, 0, 0, 0}, 0x1ff3 }, // U1FF3 # GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x03ce, 0, 0, 0, 0}, 0x1ff4 }, // U1FF4 # GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f00, 0, 0, 0, 0}, 0x1f80 }, // U1F80 # GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f01, 0, 0, 0, 0}, 0x1f81 }, // U1F81 # GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f02, 0, 0, 0, 0}, 0x1f82 }, // U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f03, 0, 0, 0, 0}, 0x1f83 }, // U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f04, 0, 0, 0, 0}, 0x1f84 }, // U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f05, 0, 0, 0, 0}, 0x1f85 }, // U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f06, 0, 0, 0, 0}, 0x1f86 }, // U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f07, 0, 0, 0, 0}, 0x1f87 }, // U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f08, 0, 0, 0, 0}, 0x1f88 }, // U1F88 # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f09, 0, 0, 0, 0}, 0x1f89 }, // U1F89 # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f0a, 0, 0, 0, 0}, 0x1f8a }, // U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f0b, 0, 0, 0, 0}, 0x1f8b }, // U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f0c, 0, 0, 0, 0}, 0x1f8c }, // U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f0d, 0, 0, 0, 0}, 0x1f8d }, // U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f0e, 0, 0, 0, 0}, 0x1f8e }, // U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f0f, 0, 0, 0, 0}, 0x1f8f }, // U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f20, 0, 0, 0, 0}, 0x1f90 }, // U1F90 # GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f21, 0, 0, 0, 0}, 0x1f91 }, // U1F91 # GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f22, 0, 0, 0, 0}, 0x1f92 }, // U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f23, 0, 0, 0, 0}, 0x1f93 }, // U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f24, 0, 0, 0, 0}, 0x1f94 }, // U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f25, 0, 0, 0, 0}, 0x1f95 }, // U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f26, 0, 0, 0, 0}, 0x1f96 }, // U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f27, 0, 0, 0, 0}, 0x1f97 }, // U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f28, 0, 0, 0, 0}, 0x1f98 }, // U1F98 # GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f29, 0, 0, 0, 0}, 0x1f99 }, // U1F99 # GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f2a, 0, 0, 0, 0}, 0x1f9a }, // U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f2b, 0, 0, 0, 0}, 0x1f9b }, // U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f2c, 0, 0, 0, 0}, 0x1f9c }, // U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f2d, 0, 0, 0, 0}, 0x1f9d }, // U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f2e, 0, 0, 0, 0}, 0x1f9e }, // U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f2f, 0, 0, 0, 0}, 0x1f9f }, // U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f60, 0, 0, 0, 0}, 0x1fa0 }, // U1FA0 # GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f61, 0, 0, 0, 0}, 0x1fa1 }, // U1FA1 # GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f62, 0, 0, 0, 0}, 0x1fa2 }, // U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f63, 0, 0, 0, 0}, 0x1fa3 }, // U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f64, 0, 0, 0, 0}, 0x1fa4 }, // U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f65, 0, 0, 0, 0}, 0x1fa5 }, // U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f66, 0, 0, 0, 0}, 0x1fa6 }, // U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f67, 0, 0, 0, 0}, 0x1fa7 }, // U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f68, 0, 0, 0, 0}, 0x1fa8 }, // U1FA8 # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f69, 0, 0, 0, 0}, 0x1fa9 }, // U1FA9 # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f6a, 0, 0, 0, 0}, 0x1faa }, // U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f6b, 0, 0, 0, 0}, 0x1fab }, // U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f6c, 0, 0, 0, 0}, 0x1fac }, // U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f6d, 0, 0, 0, 0}, 0x1fad }, // U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f6e, 0, 0, 0, 0}, 0x1fae }, // U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f6f, 0, 0, 0, 0}, 0x1faf }, // U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f70, 0, 0, 0, 0}, 0x1fb2 }, // U1FB2 # GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f74, 0, 0, 0, 0}, 0x1fc2 }, // U1FC2 # GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f7c, 0, 0, 0, 0}, 0x1ff2 }, // U1FF2 # GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1fb6, 0, 0, 0, 0}, 0x1fb7 }, // U1FB7 # GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1fc6, 0, 0, 0, 0}, 0x1fc7 }, // U1FC7 # GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), 0x1ff6, 0, 0, 0, 0}, 0x1ff7 }, // U1FF7 # GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0028, 0x0391, 0}, 0x1f8d }, // U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0028, 0x0397, 0}, 0x1f9d }, // U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0028, 0x03a9, 0}, 0x1fad }, // U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0028, 0x03b1, 0}, 0x1f85 }, // U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0028, 0x03b7, 0}, 0x1f95 }, // U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0028, 0x03c9, 0}, 0x1fa5 }, // U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0029, 0x0391, 0}, 0x1f8c }, // U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0029, 0x0397, 0}, 0x1f9c }, // U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0029, 0x03a9, 0}, 0x1fac }, // U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0029, 0x03b1, 0}, 0x1f84 }, // U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0029, 0x03b7, 0}, 0x1f94 }, // U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0029, 0x03c9, 0}, 0x1fa4 }, // U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0313, 0x0391, 0}, 0x1f8c }, // U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0313, 0x0397, 0}, 0x1f9c }, // U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0313, 0x03a9, 0}, 0x1fac }, // U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0313, 0x03b1, 0}, 0x1f84 }, // U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0313, 0x03b7, 0}, 0x1f94 }, // U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0313, 0x03c9, 0}, 0x1fa4 }, // U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0314, 0x0391, 0}, 0x1f8d }, // U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0314, 0x0397, 0}, 0x1f9d }, // U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0314, 0x03a9, 0}, 0x1fad }, // U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0314, 0x03b1, 0}, 0x1f85 }, // U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0314, 0x03b7, 0}, 0x1f95 }, // U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0314, 0x03c9, 0}, 0x1fa5 }, // U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x03b1, 0, 0}, 0x1fb4 }, // U1FB4 # GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x03b7, 0, 0}, 0x1fc4 }, // U1FC4 # GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x03c9, 0, 0}, 0x1ff4 }, // U1FF4 # GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f00, 0, 0}, 0x1f84 }, // U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f01, 0, 0}, 0x1f85 }, // U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f08, 0, 0}, 0x1f8c }, // U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f09, 0, 0}, 0x1f8d }, // U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f20, 0, 0}, 0x1f94 }, // U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f21, 0, 0}, 0x1f95 }, // U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f28, 0, 0}, 0x1f9c }, // U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f29, 0, 0}, 0x1f9d }, // U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f60, 0, 0}, 0x1fa4 }, // U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f61, 0, 0}, 0x1fa5 }, // U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f68, 0, 0}, 0x1fac }, // U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f69, 0, 0}, 0x1fad }, // U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0391, 0, 0}, 0x1f89 }, // U1F89 # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0397, 0, 0}, 0x1f99 }, // U1F99 # GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03a9, 0, 0}, 0x1fa9 }, // U1FA9 # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b1, 0, 0}, 0x1f81 }, // U1F81 # GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b7, 0, 0}, 0x1f91 }, // U1F91 # GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03c9, 0, 0}, 0x1fa1 }, // U1FA1 # GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0391, 0, 0}, 0x1f88 }, // U1F88 # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0397, 0, 0}, 0x1f98 }, // U1F98 # GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03a9, 0, 0}, 0x1fa8 }, // U1FA8 # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b1, 0, 0}, 0x1f80 }, // U1F80 # GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b7, 0, 0}, 0x1f90 }, // U1F90 # GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03c9, 0, 0}, 0x1fa0 }, // U1FA0 # GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0028, 0x0391, 0}, 0x1f8b }, // U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0028, 0x0397, 0}, 0x1f9b }, // U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0028, 0x03a9, 0}, 0x1fab }, // U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0028, 0x03b1, 0}, 0x1f83 }, // U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0028, 0x03b7, 0}, 0x1f93 }, // U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0028, 0x03c9, 0}, 0x1fa3 }, // U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0029, 0x0391, 0}, 0x1f8a }, // U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0029, 0x0397, 0}, 0x1f9a }, // U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0029, 0x03a9, 0}, 0x1faa }, // U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0029, 0x03b1, 0}, 0x1f82 }, // U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0029, 0x03b7, 0}, 0x1f92 }, // U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0029, 0x03c9, 0}, 0x1fa2 }, // U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0313, 0x0391, 0}, 0x1f8a }, // U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0313, 0x0397, 0}, 0x1f9a }, // U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0313, 0x03a9, 0}, 0x1faa }, // U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0313, 0x03b1, 0}, 0x1f82 }, // U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0313, 0x03b7, 0}, 0x1f92 }, // U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0313, 0x03c9, 0}, 0x1fa2 }, // U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0314, 0x0391, 0}, 0x1f8b }, // U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0314, 0x0397, 0}, 0x1f9b }, // U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0314, 0x03a9, 0}, 0x1fab }, // U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0314, 0x03b1, 0}, 0x1f83 }, // U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0314, 0x03b7, 0}, 0x1f93 }, // U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0314, 0x03c9, 0}, 0x1fa3 }, // U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x03b1, 0, 0}, 0x1fb2 }, // U1FB2 # GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x03b7, 0, 0}, 0x1fc2 }, // U1FC2 # GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x03c9, 0, 0}, 0x1ff2 }, // U1FF2 # GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f00, 0, 0}, 0x1f82 }, // U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f01, 0, 0}, 0x1f83 }, // U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f08, 0, 0}, 0x1f8a }, // U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f09, 0, 0}, 0x1f8b }, // U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f20, 0, 0}, 0x1f92 }, // U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f21, 0, 0}, 0x1f93 }, // U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f28, 0, 0}, 0x1f9a }, // U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f29, 0, 0}, 0x1f9b }, // U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f60, 0, 0}, 0x1fa2 }, // U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f61, 0, 0}, 0x1fa3 }, // U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f68, 0, 0}, 0x1faa }, // U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f69, 0, 0}, 0x1fab }, // U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0028, 0x0391, 0}, 0x1f8f }, // U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0028, 0x0397, 0}, 0x1f9f }, // U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0028, 0x03a9, 0}, 0x1faf }, // U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0028, 0x03b1, 0}, 0x1f87 }, // U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0028, 0x03b7, 0}, 0x1f97 }, // U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0028, 0x03c9, 0}, 0x1fa7 }, // U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0029, 0x0391, 0}, 0x1f8e }, // U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0029, 0x0397, 0}, 0x1f9e }, // U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0029, 0x03a9, 0}, 0x1fae }, // U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0029, 0x03b1, 0}, 0x1f86 }, // U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0029, 0x03b7, 0}, 0x1f96 }, // U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0029, 0x03c9, 0}, 0x1fa6 }, // U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0313, 0x0391, 0}, 0x1f8e }, // U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0313, 0x0397, 0}, 0x1f9e }, // U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0313, 0x03a9, 0}, 0x1fae }, // U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0313, 0x03b1, 0}, 0x1f86 }, // U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0313, 0x03b7, 0}, 0x1f96 }, // U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0313, 0x03c9, 0}, 0x1fa6 }, // U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0314, 0x0391, 0}, 0x1f8f }, // U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0314, 0x0397, 0}, 0x1f9f }, // U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0314, 0x03a9, 0}, 0x1faf }, // U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0314, 0x03b1, 0}, 0x1f87 }, // U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0314, 0x03b7, 0}, 0x1f97 }, // U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0314, 0x03c9, 0}, 0x1fa7 }, // U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x03b1, 0, 0}, 0x1fb7 }, // U1FB7 # GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x03b7, 0, 0}, 0x1fc7 }, // U1FC7 # GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x03c9, 0, 0}, 0x1ff7 }, // U1FF7 # GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f00, 0, 0}, 0x1f86 }, // U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f01, 0, 0}, 0x1f87 }, // U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f08, 0, 0}, 0x1f8e }, // U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f09, 0, 0}, 0x1f8f }, // U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f20, 0, 0}, 0x1f96 }, // U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f21, 0, 0}, 0x1f97 }, // U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f28, 0, 0}, 0x1f9e }, // U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f29, 0, 0}, 0x1f9f }, // U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f60, 0, 0}, 0x1fa6 }, // U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f61, 0, 0}, 0x1fa7 }, // U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f68, 0, 0}, 0x1fae }, // U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f69, 0, 0}, 0x1faf }, // U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0028, 0x0391, 0}, 0x1f8d }, // U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0028, 0x0397, 0}, 0x1f9d }, // U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0028, 0x03a9, 0}, 0x1fad }, // U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0028, 0x03b1, 0}, 0x1f85 }, // U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0028, 0x03b7, 0}, 0x1f95 }, // U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0028, 0x03c9, 0}, 0x1fa5 }, // U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0029, 0x0391, 0}, 0x1f8c }, // U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0029, 0x0397, 0}, 0x1f9c }, // U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0029, 0x03a9, 0}, 0x1fac }, // U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0029, 0x03b1, 0}, 0x1f84 }, // U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0029, 0x03b7, 0}, 0x1f94 }, // U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0029, 0x03c9, 0}, 0x1fa4 }, // U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0313, 0x0391, 0}, 0x1f8c }, // U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0313, 0x0397, 0}, 0x1f9c }, // U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0313, 0x03a9, 0}, 0x1fac }, // U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0313, 0x03b1, 0}, 0x1f84 }, // U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0313, 0x03b7, 0}, 0x1f94 }, // U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0313, 0x03c9, 0}, 0x1fa4 }, // U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0314, 0x0391, 0}, 0x1f8d }, // U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0314, 0x0397, 0}, 0x1f9d }, // U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0314, 0x03a9, 0}, 0x1fad }, // U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0314, 0x03b1, 0}, 0x1f85 }, // U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0314, 0x03b7, 0}, 0x1f95 }, // U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0314, 0x03c9, 0}, 0x1fa5 }, // U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x03b1, 0, 0}, 0x1fb4 }, // U1FB4 # GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x03b7, 0, 0}, 0x1fc4 }, // U1FC4 # GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x03c9, 0, 0}, 0x1ff4 }, // U1FF4 # GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f00, 0, 0}, 0x1f84 }, // U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f01, 0, 0}, 0x1f85 }, // U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f08, 0, 0}, 0x1f8c }, // U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f09, 0, 0}, 0x1f8d }, // U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f20, 0, 0}, 0x1f94 }, // U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f21, 0, 0}, 0x1f95 }, // U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f28, 0, 0}, 0x1f9c }, // U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f29, 0, 0}, 0x1f9d }, // U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f60, 0, 0}, 0x1fa4 }, // U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f61, 0, 0}, 0x1fa5 }, // U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f68, 0, 0}, 0x1fac }, // U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f69, 0, 0}, 0x1fad }, // U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), 0x0313, 0x0391, 0, 0}, 0x1f8a }, // U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), 0x0313, 0x0397, 0, 0}, 0x1f9a }, // U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), 0x0313, 0x03a9, 0, 0}, 0x1faa }, // U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), 0x0313, 0x03b1, 0, 0}, 0x1f82 }, // U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), 0x0313, 0x03b7, 0, 0}, 0x1f92 }, // U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), 0x0313, 0x03c9, 0, 0}, 0x1fa2 }, // U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), 0x0314, 0x0391, 0, 0}, 0x1f8b }, // U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), 0x0314, 0x0397, 0, 0}, 0x1f9b }, // U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), 0x0314, 0x03a9, 0, 0}, 0x1fab }, // U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), 0x0314, 0x03b1, 0, 0}, 0x1f83 }, // U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), 0x0314, 0x03b7, 0, 0}, 0x1f93 }, // U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), 0x0314, 0x03c9, 0, 0}, 0x1fa3 }, // U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), 0x03b1, 0, 0, 0}, 0x1fb2 }, // U1FB2 # GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), 0x03b7, 0, 0, 0}, 0x1fc2 }, // U1FC2 # GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), 0x03c9, 0, 0, 0}, 0x1ff2 }, // U1FF2 # GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), 0x1f00, 0, 0, 0}, 0x1f82 }, // U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), 0x1f01, 0, 0, 0}, 0x1f83 }, // U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), 0x1f08, 0, 0, 0}, 0x1f8a }, // U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), 0x1f09, 0, 0, 0}, 0x1f8b }, // U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), 0x1f20, 0, 0, 0}, 0x1f92 }, // U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), 0x1f21, 0, 0, 0}, 0x1f93 }, // U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), 0x1f28, 0, 0, 0}, 0x1f9a }, // U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), 0x1f29, 0, 0, 0}, 0x1f9b }, // U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), 0x1f60, 0, 0, 0}, 0x1fa2 }, // U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), 0x1f61, 0, 0, 0}, 0x1fa3 }, // U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), 0x1f68, 0, 0, 0}, 0x1faa }, // U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), 0x1f69, 0, 0, 0}, 0x1fab }, // U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0391, 0}, 0x1f8b }, // U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0397, 0}, 0x1f9b }, // U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03a9, 0}, 0x1fab }, // U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b1, 0}, 0x1f83 }, // U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b7, 0}, 0x1f93 }, // U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03c9, 0}, 0x1fa3 }, // U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0391, 0}, 0x1f8a }, // U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0397, 0}, 0x1f9a }, // U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03a9, 0}, 0x1faa }, // U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b1, 0}, 0x1f82 }, // U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b7, 0}, 0x1f92 }, // U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03c9, 0}, 0x1fa2 }, // U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), 0x0313, 0x0391, 0, 0}, 0x1f8c }, // U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), 0x0313, 0x0397, 0, 0}, 0x1f9c }, // U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), 0x0313, 0x03a9, 0, 0}, 0x1fac }, // U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), 0x0313, 0x03b1, 0, 0}, 0x1f84 }, // U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), 0x0313, 0x03b7, 0, 0}, 0x1f94 }, // U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), 0x0313, 0x03c9, 0, 0}, 0x1fa4 }, // U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), 0x0314, 0x0391, 0, 0}, 0x1f8d }, // U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), 0x0314, 0x0397, 0, 0}, 0x1f9d }, // U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), 0x0314, 0x03a9, 0, 0}, 0x1fad }, // U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), 0x0314, 0x03b1, 0, 0}, 0x1f85 }, // U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), 0x0314, 0x03b7, 0, 0}, 0x1f95 }, // U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), 0x0314, 0x03c9, 0, 0}, 0x1fa5 }, // U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), 0x03b1, 0, 0, 0}, 0x1fb4 }, // U1FB4 # GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), 0x03b7, 0, 0, 0}, 0x1fc4 }, // U1FC4 # GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), 0x03c9, 0, 0, 0}, 0x1ff4 }, // U1FF4 # GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), 0x1f00, 0, 0, 0}, 0x1f84 }, // U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), 0x1f01, 0, 0, 0}, 0x1f85 }, // U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), 0x1f08, 0, 0, 0}, 0x1f8c }, // U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), 0x1f09, 0, 0, 0}, 0x1f8d }, // U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), 0x1f20, 0, 0, 0}, 0x1f94 }, // U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), 0x1f21, 0, 0, 0}, 0x1f95 }, // U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), 0x1f28, 0, 0, 0}, 0x1f9c }, // U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), 0x1f29, 0, 0, 0}, 0x1f9d }, // U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), 0x1f60, 0, 0, 0}, 0x1fa4 }, // U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), 0x1f61, 0, 0, 0}, 0x1fa5 }, // U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), 0x1f68, 0, 0, 0}, 0x1fac }, // U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), 0x1f69, 0, 0, 0}, 0x1fad }, // U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0391, 0}, 0x1f8d }, // U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0397, 0}, 0x1f9d }, // U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03a9, 0}, 0x1fad }, // U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b1, 0}, 0x1f85 }, // U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b7, 0}, 0x1f95 }, // U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03c9, 0}, 0x1fa5 }, // U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0391, 0}, 0x1f8c }, // U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0397, 0}, 0x1f9c }, // U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03a9, 0}, 0x1fac }, // U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b1, 0}, 0x1f84 }, // U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b7, 0}, 0x1f94 }, // U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03c9, 0}, 0x1fa4 }, // U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), 0x0313, 0x0391, 0, 0}, 0x1f8e }, // U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), 0x0313, 0x0397, 0, 0}, 0x1f9e }, // U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), 0x0313, 0x03a9, 0, 0}, 0x1fae }, // U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), 0x0313, 0x03b1, 0, 0}, 0x1f86 }, // U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), 0x0313, 0x03b7, 0, 0}, 0x1f96 }, // U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), 0x0313, 0x03c9, 0, 0}, 0x1fa6 }, // U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), 0x0314, 0x0391, 0, 0}, 0x1f8f }, // U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), 0x0314, 0x0397, 0, 0}, 0x1f9f }, // U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), 0x0314, 0x03a9, 0, 0}, 0x1faf }, // U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), 0x0314, 0x03b1, 0, 0}, 0x1f87 }, // U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), 0x0314, 0x03b7, 0, 0}, 0x1f97 }, // U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), 0x0314, 0x03c9, 0, 0}, 0x1fa7 }, // U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), 0x03b1, 0, 0, 0}, 0x1fb7 }, // U1FB7 # GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), 0x03b7, 0, 0, 0}, 0x1fc7 }, // U1FC7 # GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), 0x03c9, 0, 0, 0}, 0x1ff7 }, // U1FF7 # GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), 0x1f00, 0, 0, 0}, 0x1f86 }, // U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), 0x1f01, 0, 0, 0}, 0x1f87 }, // U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), 0x1f08, 0, 0, 0}, 0x1f8e }, // U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), 0x1f09, 0, 0, 0}, 0x1f8f }, // U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), 0x1f20, 0, 0, 0}, 0x1f96 }, // U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), 0x1f21, 0, 0, 0}, 0x1f97 }, // U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), 0x1f28, 0, 0, 0}, 0x1f9e }, // U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), 0x1f29, 0, 0, 0}, 0x1f9f }, // U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), 0x1f60, 0, 0, 0}, 0x1fa6 }, // U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), 0x1f61, 0, 0, 0}, 0x1fa7 }, // U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), 0x1f68, 0, 0, 0}, 0x1fae }, // U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), 0x1f69, 0, 0, 0}, 0x1faf }, // U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0391, 0}, 0x1f8f }, // U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0397, 0}, 0x1f9f }, // U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03a9, 0}, 0x1faf }, // U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b1, 0}, 0x1f87 }, // U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b7, 0}, 0x1f97 }, // U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03c9, 0}, 0x1fa7 }, // U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0391, 0}, 0x1f8e }, // U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0397, 0}, 0x1f9e }, // U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03a9, 0}, 0x1fae }, // U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b1, 0}, 0x1f86 }, // U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b7, 0}, 0x1f96 }, // U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03c9, 0}, 0x1fa6 }, // U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI ++ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Iota), 0, 0, 0, 0}, 0x037a }, // U37a ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), dead_space, 0, 0, 0, 0}, 0x037a }, // U37a ++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x3046, 0, 0, 0, 0}, 0x3094 }, // U3094 # HIRAGANA LETTER VU ++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x304b, 0, 0, 0, 0}, 0x304c }, // U304C # HIRAGANA LETTER GA ++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x304d, 0, 0, 0, 0}, 0x304e }, // U304E # HIRAGANA LETTER GI ++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x304f, 0, 0, 0, 0}, 0x3050 }, // U3050 # HIRAGANA LETTER GU ++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x3051, 0, 0, 0, 0}, 0x3052 }, // U3052 # HIRAGANA LETTER GE ++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x3053, 0, 0, 0, 0}, 0x3054 }, // U3054 # HIRAGANA LETTER GO ++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x3055, 0, 0, 0, 0}, 0x3056 }, // U3056 # HIRAGANA LETTER ZA ++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x3057, 0, 0, 0, 0}, 0x3058 }, // U3058 # HIRAGANA LETTER ZI ++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x3059, 0, 0, 0, 0}, 0x305a }, // U305A # HIRAGANA LETTER ZU ++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x305b, 0, 0, 0, 0}, 0x305c }, // U305C # HIRAGANA LETTER ZE ++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x305d, 0, 0, 0, 0}, 0x305e }, // U305E # HIRAGANA LETTER ZO ++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x305f, 0, 0, 0, 0}, 0x3060 }, // U3060 # HIRAGANA LETTER DA ++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x3061, 0, 0, 0, 0}, 0x3062 }, // U3062 # HIRAGANA LETTER DI ++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x3064, 0, 0, 0, 0}, 0x3065 }, // U3065 # HIRAGANA LETTER DU ++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x3066, 0, 0, 0, 0}, 0x3067 }, // U3067 # HIRAGANA LETTER DE ++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x3068, 0, 0, 0, 0}, 0x3069 }, // U3069 # HIRAGANA LETTER DO ++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x306f, 0, 0, 0, 0}, 0x3070 }, // U3070 # HIRAGANA LETTER BA ++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x3072, 0, 0, 0, 0}, 0x3073 }, // U3073 # HIRAGANA LETTER BI ++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x3075, 0, 0, 0, 0}, 0x3076 }, // U3076 # HIRAGANA LETTER BU ++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x3078, 0, 0, 0, 0}, 0x3079 }, // U3079 # HIRAGANA LETTER BE ++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x307b, 0, 0, 0, 0}, 0x307c }, // U307C # HIRAGANA LETTER BO ++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x309d, 0, 0, 0, 0}, 0x309e }, // U309E # HIRAGANA VOICED ITERATION MARK ++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x30a6, 0, 0, 0, 0}, 0x30f4 }, // U30F4 # KATAKANA LETTER VU ++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x30ab, 0, 0, 0, 0}, 0x30ac }, // U30AC # KATAKANA LETTER GA ++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x30ad, 0, 0, 0, 0}, 0x30ae }, // U30AE # KATAKANA LETTER GI ++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x30af, 0, 0, 0, 0}, 0x30b0 }, // U30B0 # KATAKANA LETTER GU ++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x30b1, 0, 0, 0, 0}, 0x30b2 }, // U30B2 # KATAKANA LETTER GE ++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x30b3, 0, 0, 0, 0}, 0x30b4 }, // U30B4 # KATAKANA LETTER GO ++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x30b5, 0, 0, 0, 0}, 0x30b6 }, // U30B6 # KATAKANA LETTER ZA ++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x30b7, 0, 0, 0, 0}, 0x30b8 }, // U30B8 # KATAKANA LETTER ZI ++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x30b9, 0, 0, 0, 0}, 0x30ba }, // U30BA # KATAKANA LETTER ZU ++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x30bb, 0, 0, 0, 0}, 0x30bc }, // U30BC # KATAKANA LETTER ZE ++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x30bd, 0, 0, 0, 0}, 0x30be }, // U30BE # KATAKANA LETTER ZO ++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x30bf, 0, 0, 0, 0}, 0x30c0 }, // U30C0 # KATAKANA LETTER DA ++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x30c1, 0, 0, 0, 0}, 0x30c2 }, // U30C2 # KATAKANA LETTER DI ++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x30c4, 0, 0, 0, 0}, 0x30c5 }, // U30C5 # KATAKANA LETTER DU ++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x30c6, 0, 0, 0, 0}, 0x30c7 }, // U30C7 # KATAKANA LETTER DE ++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x30c8, 0, 0, 0, 0}, 0x30c9 }, // U30C9 # KATAKANA LETTER DO ++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x30cf, 0, 0, 0, 0}, 0x30d0 }, // U30D0 # KATAKANA LETTER BA ++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x30d2, 0, 0, 0, 0}, 0x30d3 }, // U30D3 # KATAKANA LETTER BI ++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x30d5, 0, 0, 0, 0}, 0x30d6 }, // U30D6 # KATAKANA LETTER BU ++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x30d8, 0, 0, 0, 0}, 0x30d9 }, // U30D9 # KATAKANA LETTER BE ++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x30db, 0, 0, 0, 0}, 0x30dc }, // U30DC # KATAKANA LETTER BO ++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x30ef, 0, 0, 0, 0}, 0x30f7 }, // U30F7 # KATAKANA LETTER VA ++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x30f0, 0, 0, 0, 0}, 0x30f8 }, // U30F8 # KATAKANA LETTER VI ++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x30f1, 0, 0, 0, 0}, 0x30f9 }, // U30F9 # KATAKANA LETTER VE ++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x30f2, 0, 0, 0, 0}, 0x30fa }, // U30FA # KATAKANA LETTER VO ++ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x30fd, 0, 0, 0, 0}, 0x30fe }, // U30FE # KATAKANA VOICED ITERATION MARK ++ { {UNITIZE(Qt::Key_Dead_Semivoiced_Sound), 0x306f, 0, 0, 0, 0}, 0x3071 }, // U3071 # HIRAGANA LETTER PA ++ { {UNITIZE(Qt::Key_Dead_Semivoiced_Sound), 0x3072, 0, 0, 0, 0}, 0x3074 }, // U3074 # HIRAGANA LETTER PI ++ { {UNITIZE(Qt::Key_Dead_Semivoiced_Sound), 0x3075, 0, 0, 0, 0}, 0x3077 }, // U3077 # HIRAGANA LETTER PU ++ { {UNITIZE(Qt::Key_Dead_Semivoiced_Sound), 0x3078, 0, 0, 0, 0}, 0x307a }, // U307A # HIRAGANA LETTER PE ++ { {UNITIZE(Qt::Key_Dead_Semivoiced_Sound), 0x307b, 0, 0, 0, 0}, 0x307d }, // U307D # HIRAGANA LETTER PO ++ { {UNITIZE(Qt::Key_Dead_Semivoiced_Sound), 0x30cf, 0, 0, 0, 0}, 0x30d1 }, // U30D1 # KATAKANA LETTER PA ++ { {UNITIZE(Qt::Key_Dead_Semivoiced_Sound), 0x30d2, 0, 0, 0, 0}, 0x30d4 }, // U30D4 # KATAKANA LETTER PI ++ { {UNITIZE(Qt::Key_Dead_Semivoiced_Sound), 0x30d5, 0, 0, 0, 0}, 0x30d7 }, // U30D7 # KATAKANA LETTER PU ++ { {UNITIZE(Qt::Key_Dead_Semivoiced_Sound), 0x30d8, 0, 0, 0, 0}, 0x30da }, // U30DA # KATAKANA LETTER PE ++ { {UNITIZE(Qt::Key_Dead_Semivoiced_Sound), 0x30db, 0, 0, 0, 0}, 0x30dd }, // U30DD # KATAKANA LETTER PO ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0000, 0, 0, 0, 0}, 0x1ee2 }, // U1EE2 # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0000, 0, 0, 0, 0}, 0x1ef1 }, // U1EF1 # LATIN SMALL LETTER U WITH HORN AND DOT BELOW ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0000, 0, 0, 0, 0}, 0x1ee3 }, // U1EE3 # LATIN SMALL LETTER O WITH HORN AND DOT BELOW ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0000, 0, 0, 0, 0}, 0x1ef0 }, // U1EF0 # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0041, 0, 0, 0, 0}, 0x1ea0 }, // U1EA0 # LATIN CAPITAL LETTER A WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0042, 0, 0, 0, 0}, 0x1e04 }, // U1E04 # LATIN CAPITAL LETTER B WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0044, 0, 0, 0, 0}, 0x1e0c }, // U1E0C # LATIN CAPITAL LETTER D WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0045, 0, 0, 0, 0}, 0x1eb8 }, // U1EB8 # LATIN CAPITAL LETTER E WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0048, 0, 0, 0, 0}, 0x1e24 }, // U1E24 # LATIN CAPITAL LETTER H WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0049, 0, 0, 0, 0}, 0x1eca }, // U1ECA # LATIN CAPITAL LETTER I WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x004b, 0, 0, 0, 0}, 0x1e32 }, // U1E32 # LATIN CAPITAL LETTER K WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x004c, 0, 0, 0, 0}, 0x1e36 }, // U1E36 # LATIN CAPITAL LETTER L WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x004d, 0, 0, 0, 0}, 0x1e42 }, // U1E42 # LATIN CAPITAL LETTER M WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x004e, 0, 0, 0, 0}, 0x1e46 }, // U1E46 # LATIN CAPITAL LETTER N WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x004f, 0, 0, 0, 0}, 0x1ecc }, // U1ECC # LATIN CAPITAL LETTER O WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0052, 0, 0, 0, 0}, 0x1e5a }, // U1E5A # LATIN CAPITAL LETTER R WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0053, 0, 0, 0, 0}, 0x1e62 }, // U1E62 # LATIN CAPITAL LETTER S WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0054, 0, 0, 0, 0}, 0x1e6c }, // U1E6C # LATIN CAPITAL LETTER T WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0055, 0, 0, 0, 0}, 0x1ee4 }, // U1EE4 # LATIN CAPITAL LETTER U WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0056, 0, 0, 0, 0}, 0x1e7e }, // U1E7E # LATIN CAPITAL LETTER V WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0057, 0, 0, 0, 0}, 0x1e88 }, // U1E88 # LATIN CAPITAL LETTER W WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0059, 0, 0, 0, 0}, 0x1ef4 }, // U1EF4 # LATIN CAPITAL LETTER Y WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x005a, 0, 0, 0, 0}, 0x1e92 }, // U1E92 # LATIN CAPITAL LETTER Z WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0061, 0, 0, 0, 0}, 0x1ea1 }, // U1EA1 # LATIN SMALL LETTER A WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0062, 0, 0, 0, 0}, 0x1e05 }, // U1E05 # LATIN SMALL LETTER B WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0064, 0, 0, 0, 0}, 0x1e0d }, // U1E0D # LATIN SMALL LETTER D WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0065, 0, 0, 0, 0}, 0x1eb9 }, // U1EB9 # LATIN SMALL LETTER E WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0068, 0, 0, 0, 0}, 0x1e25 }, // U1E25 # LATIN SMALL LETTER H WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0069, 0, 0, 0, 0}, 0x1ecb }, // U1ECB # LATIN SMALL LETTER I WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x006b, 0, 0, 0, 0}, 0x1e33 }, // U1E33 # LATIN SMALL LETTER K WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x006c, 0, 0, 0, 0}, 0x1e37 }, // U1E37 # LATIN SMALL LETTER L WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x006d, 0, 0, 0, 0}, 0x1e43 }, // U1E43 # LATIN SMALL LETTER M WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x006e, 0, 0, 0, 0}, 0x1e47 }, // U1E47 # LATIN SMALL LETTER N WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x006f, 0, 0, 0, 0}, 0x1ecd }, // U1ECD # LATIN SMALL LETTER O WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0072, 0, 0, 0, 0}, 0x1e5b }, // U1E5B # LATIN SMALL LETTER R WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0073, 0, 0, 0, 0}, 0x1e63 }, // U1E63 # LATIN SMALL LETTER S WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0074, 0, 0, 0, 0}, 0x1e6d }, // U1E6D # LATIN SMALL LETTER T WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0075, 0, 0, 0, 0}, 0x1ee5 }, // U1EE5 # LATIN SMALL LETTER U WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0076, 0, 0, 0, 0}, 0x1e7f }, // U1E7F # LATIN SMALL LETTER V WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0077, 0, 0, 0, 0}, 0x1e89 }, // U1E89 # LATIN SMALL LETTER W WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0079, 0, 0, 0, 0}, 0x1ef5 }, // U1EF5 # LATIN SMALL LETTER Y WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x007a, 0, 0, 0, 0}, 0x1e93 }, // U1E93 # LATIN SMALL LETTER Z WITH DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x00c2, 0, 0, 0, 0}, 0x1eac }, // U1EAC # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x00ca, 0, 0, 0, 0}, 0x1ec6 }, // U1EC6 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x00d4, 0, 0, 0, 0}, 0x1ed8 }, // U1ED8 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x00e2, 0, 0, 0, 0}, 0x1ead }, // U1EAD # LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x00ea, 0, 0, 0, 0}, 0x1ec7 }, // U1EC7 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x00f4, 0, 0, 0, 0}, 0x1ed9 }, // U1ED9 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0102, 0, 0, 0, 0}, 0x1eb6 }, // U1EB6 # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0103, 0, 0, 0, 0}, 0x1eb7 }, // U1EB7 # LATIN SMALL LETTER A WITH BREVE AND DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x01A0, 0, 0, 0, 0}, 0x1ee2 }, // U1EE2 # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x01A1, 0, 0, 0, 0}, 0x1ee3 }, // U1EE3 # LATIN SMALL LETTER O WITH HORN AND DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x01AF, 0, 0, 0, 0}, 0x1ef0 }, // U1EF0 # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x01B0, 0, 0, 0, 0}, 0x1ef1 }, // U1EF1 # LATIN SMALL LETTER U WITH HORN AND DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Belowdot), UNITIZE(Qt::Key_Multi_key), 0x002b, 0x004f, 0, 0}, 0x1ee2 }, // U1EE2 # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Belowdot), UNITIZE(Qt::Key_Multi_key), 0x002b, 0x0055, 0, 0}, 0x1ef0 }, // U1EF0 # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Belowdot), UNITIZE(Qt::Key_Multi_key), 0x002b, 0x006f, 0, 0}, 0x1ee3 }, // U1EE3 # LATIN SMALL LETTER O WITH HORN AND DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Belowdot), UNITIZE(Qt::Key_Multi_key), 0x002b, 0x0075, 0, 0}, 0x1ef1 }, // U1EF1 # LATIN SMALL LETTER U WITH HORN AND DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Belowdot), UNITIZE(Qt::Key_Dead_Horn), 0x004f, 0, 0, 0}, 0x1ee2 }, // U1EE2 # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Belowdot), UNITIZE(Qt::Key_Dead_Horn), 0x0055, 0, 0, 0}, 0x1ef0 }, // U1EF0 # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Belowdot), UNITIZE(Qt::Key_Dead_Horn), 0x006f, 0, 0, 0}, 0x1ee3 }, // U1EE3 # LATIN SMALL LETTER O WITH HORN AND DOT BELOW ++ { {UNITIZE(Qt::Key_Dead_Belowdot), UNITIZE(Qt::Key_Dead_Horn), 0x0075, 0, 0, 0}, 0x1ef1 }, // U1EF1 # LATIN SMALL LETTER U WITH HORN AND DOT BELOW ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Hook), 0x0000, 0, 0, 0, 0}, 0x1edf }, // U1EDF # LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Hook), 0x0000, 0, 0, 0, 0}, 0x1eec }, // U1EEC # LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Hook), 0x0000, 0, 0, 0, 0}, 0x1eed }, // U1EED # LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE ++// /* broken */ { {UNITIZE(Qt::Key_Dead_Hook), 0x0000, 0, 0, 0, 0}, 0x1ede }, // U1EDE # LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Dead_Hook), 0x0041, 0, 0, 0, 0}, 0x1ea2 }, // U1EA2 # LATIN CAPITAL LETTER A WITH HOOK ABOVE ++ { {UNITIZE(Qt::Key_Dead_Hook), 0x0045, 0, 0, 0, 0}, 0x1eba }, // U1EBA # LATIN CAPITAL LETTER E WITH HOOK ABOVE ++ { {UNITIZE(Qt::Key_Dead_Hook), 0x0049, 0, 0, 0, 0}, 0x1ec8 }, // U1EC8 # LATIN CAPITAL LETTER I WITH HOOK ABOVE ++ { {UNITIZE(Qt::Key_Dead_Hook), 0x004f, 0, 0, 0, 0}, 0x1ece }, // U1ECE # LATIN CAPITAL LETTER O WITH HOOK ABOVE ++ { {UNITIZE(Qt::Key_Dead_Hook), 0x0055, 0, 0, 0, 0}, 0x1ee6 }, // U1EE6 # LATIN CAPITAL LETTER U WITH HOOK ABOVE ++ { {UNITIZE(Qt::Key_Dead_Hook), 0x0059, 0, 0, 0, 0}, 0x1ef6 }, // U1EF6 # LATIN CAPITAL LETTER Y WITH HOOK ABOVE ++ { {UNITIZE(Qt::Key_Dead_Hook), 0x0061, 0, 0, 0, 0}, 0x1ea3 }, // U1EA3 # LATIN SMALL LETTER A WITH HOOK ABOVE ++ { {UNITIZE(Qt::Key_Dead_Hook), 0x0065, 0, 0, 0, 0}, 0x1ebb }, // U1EBB # LATIN SMALL LETTER E WITH HOOK ABOVE ++ { {UNITIZE(Qt::Key_Dead_Hook), 0x0069, 0, 0, 0, 0}, 0x1ec9 }, // U1EC9 # LATIN SMALL LETTER I WITH HOOK ABOVE ++ { {UNITIZE(Qt::Key_Dead_Hook), 0x006f, 0, 0, 0, 0}, 0x1ecf }, // U1ECF # LATIN SMALL LETTER O WITH HOOK ABOVE ++ { {UNITIZE(Qt::Key_Dead_Hook), 0x0075, 0, 0, 0, 0}, 0x1ee7 }, // U1EE7 # LATIN SMALL LETTER U WITH HOOK ABOVE ++ { {UNITIZE(Qt::Key_Dead_Hook), 0x0079, 0, 0, 0, 0}, 0x1ef7 }, // U1EF7 # LATIN SMALL LETTER Y WITH HOOK ABOVE ++ { {UNITIZE(Qt::Key_Dead_Hook), 0x00c2, 0, 0, 0, 0}, 0x1ea8 }, // U1EA8 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Dead_Hook), 0x00ca, 0, 0, 0, 0}, 0x1ec2 }, // U1EC2 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Dead_Hook), 0x00d4, 0, 0, 0, 0}, 0x1ed4 }, // U1ED4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Dead_Hook), 0x00e2, 0, 0, 0, 0}, 0x1ea9 }, // U1EA9 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Dead_Hook), 0x00ea, 0, 0, 0, 0}, 0x1ec3 }, // U1EC3 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Dead_Hook), 0x00f4, 0, 0, 0, 0}, 0x1ed5 }, // U1ED5 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Dead_Hook), 0x0102, 0, 0, 0, 0}, 0x1eb2 }, // U1EB2 # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Dead_Hook), 0x0103, 0, 0, 0, 0}, 0x1eb3 }, // U1EB3 # LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Dead_Hook), 0x01A0, 0, 0, 0, 0}, 0x1ede }, // U1EDE # LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Dead_Hook), 0x01A1, 0, 0, 0, 0}, 0x1edf }, // U1EDF # LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Dead_Hook), 0x01AF, 0, 0, 0, 0}, 0x1eec }, // U1EEC # LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Dead_Hook), 0x01B0, 0, 0, 0, 0}, 0x1eed }, // U1EED # LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Dead_Hook), UNITIZE(Qt::Key_Multi_key), 0x002b, 0x004f, 0, 0}, 0x1ede }, // U1EDE # LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Dead_Hook), UNITIZE(Qt::Key_Multi_key), 0x002b, 0x0055, 0, 0}, 0x1eec }, // U1EEC # LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Dead_Hook), UNITIZE(Qt::Key_Multi_key), 0x002b, 0x006f, 0, 0}, 0x1edf }, // U1EDF # LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Dead_Hook), UNITIZE(Qt::Key_Multi_key), 0x002b, 0x0075, 0, 0}, 0x1eed }, // U1EED # LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Dead_Hook), UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0041, 0, 0}, 0x1eb2 }, // U1EB2 # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Dead_Hook), UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0061, 0, 0}, 0x1eb3 }, // U1EB3 # LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Dead_Hook), UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0041, 0, 0}, 0x1ea8 }, // U1EA8 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Dead_Hook), UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0045, 0, 0}, 0x1ec2 }, // U1EC2 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Dead_Hook), UNITIZE(Qt::Key_Multi_key), 0x005e, 0x004f, 0, 0}, 0x1ed4 }, // U1ED4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Dead_Hook), UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0061, 0, 0}, 0x1ea9 }, // U1EA9 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Dead_Hook), UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0065, 0, 0}, 0x1ec3 }, // U1EC3 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Dead_Hook), UNITIZE(Qt::Key_Multi_key), 0x005e, 0x006f, 0, 0}, 0x1ed5 }, // U1ED5 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Dead_Hook), UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0041, 0, 0}, 0x1eb2 }, // U1EB2 # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Dead_Hook), UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0061, 0, 0}, 0x1eb3 }, // U1EB3 # LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Dead_Hook), UNITIZE(Qt::Key_Dead_Circumflex), 0x0041, 0, 0, 0}, 0x1ea8 }, // U1EA8 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Dead_Hook), UNITIZE(Qt::Key_Dead_Circumflex), 0x0045, 0, 0, 0}, 0x1ec2 }, // U1EC2 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Dead_Hook), UNITIZE(Qt::Key_Dead_Circumflex), 0x004f, 0, 0, 0}, 0x1ed4 }, // U1ED4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Dead_Hook), UNITIZE(Qt::Key_Dead_Circumflex), 0x0061, 0, 0, 0}, 0x1ea9 }, // U1EA9 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Dead_Hook), UNITIZE(Qt::Key_Dead_Circumflex), 0x0065, 0, 0, 0}, 0x1ec3 }, // U1EC3 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Dead_Hook), UNITIZE(Qt::Key_Dead_Circumflex), 0x006f, 0, 0, 0}, 0x1ed5 }, // U1ED5 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Dead_Hook), UNITIZE(Qt::Key_Dead_Breve), 0x0041, 0, 0, 0}, 0x1eb2 }, // U1EB2 # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Dead_Hook), UNITIZE(Qt::Key_Dead_Breve), 0x0061, 0, 0, 0}, 0x1eb3 }, // U1EB3 # LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Dead_Hook), UNITIZE(Qt::Key_Dead_Horn), 0x004f, 0, 0, 0}, 0x1ede }, // U1EDE # LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Dead_Hook), UNITIZE(Qt::Key_Dead_Horn), 0x0055, 0, 0, 0}, 0x1eec }, // U1EEC # LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Dead_Hook), UNITIZE(Qt::Key_Dead_Horn), 0x006f, 0, 0, 0}, 0x1edf }, // U1EDF # LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Dead_Hook), UNITIZE(Qt::Key_Dead_Horn), 0x0075, 0, 0, 0}, 0x1eed }, // U1EED # LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE ++ { {UNITIZE(Qt::Key_Dead_Horn), 0x004f, 0, 0, 0, 0}, 0x01a0 }, // U01A0 # LATIN CAPITAL LETTER O WITH HORN ++ { {UNITIZE(Qt::Key_Dead_Horn), 0x0055, 0, 0, 0, 0}, 0x01af }, // U01AF # LATIN CAPITAL LETTER U WITH HORN ++ { {UNITIZE(Qt::Key_Dead_Horn), 0x006f, 0, 0, 0, 0}, 0x01a1 }, // U01A1 # LATIN SMALL LETTER O WITH HORN ++ { {UNITIZE(Qt::Key_Dead_Horn), 0x0075, 0, 0, 0, 0}, 0x01b0 } // U01B0 # LATIN SMALL LETTER U WITH HORN ++}; ++ ++const QComposeTable QSimpleInputContext::defaultComposeTable = { ++ defaultTable, ++ ( sizeof(defaultTable) / sizeof(QComposeTableElement) ) ++}; +--- plugins/src/inputmethods/simple/qsimpleinputcontext.cpp ++++ plugins/src/inputmethods/simple/qsimpleinputcontext.cpp +@@ -0,0 +1,285 @@ ++/**************************************************************************** ++** $Id$ ++** ++** Implementation of QSimpleInputContext class ++** ++** Copyright (C) 2004 immodule for Qt Project. All rights reserved. ++** ++** This file is written to contribute to Trolltech AS under their own ++** licence. You may use this file under your Qt license. Following ++** description is copied from their original file headers. Contact ++** immodule-qt@freedesktop.org if any conditions of this licensing are ++** not clear to you. ++** ++** ++** This file is part of the input method module of the Qt GUI Toolkit. ++** ++** This file may be distributed under the terms of the Q Public License ++** as defined by Trolltech AS of Norway and appearing in the file ++** LICENSE.QPL included in the packaging of this file. ++** ++** This file may be distributed and/or modified under the terms of the ++** GNU General Public License version 2 as published by the Free Software ++** Foundation and appearing in the file LICENSE.GPL included in the ++** packaging of this file. ++** ++** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition ++** licenses may use this file in accordance with the Qt Commercial License ++** Agreement provided with the Software. ++** ++** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ++** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ++** ++** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for ++** information about Qt Commercial License Agreements. ++** See http://www.trolltech.com/qpl/ for QPL licensing information. ++** See http://www.trolltech.com/gpl/ for GPL licensing information. ++** ++** Contact info@trolltech.com if any conditions of this licensing are ++** not clear to you. ++** ++**********************************************************************/ ++ ++#include "qsimpleinputcontext.h" ++ ++#include ++#include ++#include ++#include ++ ++static const int ignoreKeys[] = { ++ Qt::Key_Shift, ++ Qt::Key_Control, ++ Qt::Key_Meta, ++ Qt::Key_Alt, ++ Qt::Key_CapsLock, ++ Qt::Key_Super_L, ++ Qt::Key_Super_R, ++ Qt::Key_Hyper_L, ++ Qt::Key_Hyper_R, ++ Qt::Key_Mode_switch ++}; ++ ++static const int composingKeys[] = { ++ Qt::Key_Multi_key, ++ Qt::Key_Dead_Grave, ++ Qt::Key_Dead_Acute, ++ Qt::Key_Dead_Circumflex, ++ Qt::Key_Dead_Tilde, ++ Qt::Key_Dead_Macron, ++ Qt::Key_Dead_Breve, ++ Qt::Key_Dead_Abovedot, ++ Qt::Key_Dead_Diaeresis, ++ Qt::Key_Dead_Abovering, ++ Qt::Key_Dead_Doubleacute, ++ Qt::Key_Dead_Caron, ++ Qt::Key_Dead_Cedilla, ++ Qt::Key_Dead_Ogonek, ++ Qt::Key_Dead_Iota, ++ Qt::Key_Dead_Voiced_Sound, ++ Qt::Key_Dead_Semivoiced_Sound, ++ Qt::Key_Dead_Belowdot, ++ Qt::Key_Dead_Hook, ++ Qt::Key_Dead_Horn ++}; ++ ++class Cmp ++{ ++public: ++ bool operator () (const QComposeTableElement &lhs, const QComposeTableElement &rhs) const { ++ for ( size_t i=0; i < QT_KEYSEQUENCE_MAX_LEN; i++ ) { ++ if ( lhs.keys[i] < rhs.keys[i] ) return TRUE; ++ else ++ if ( lhs.keys[i] > rhs.keys[i] ) return FALSE; ++ } ++ return FALSE; ++ } ++ ++ bool operator () (const QComposeTableElement &lhs, const uint rhs[QT_KEYSEQUENCE_MAX_LEN]) const { ++ for ( size_t i=0; i < QT_KEYSEQUENCE_MAX_LEN; i++ ) { ++ if ( lhs.keys[i] < rhs[i] ) return TRUE; ++ else ++ if ( lhs.keys[i] > rhs[i] ) return FALSE; ++ } ++ return FALSE; ++ } ++}; ++ ++QSimpleInputContext::QSimpleInputContext() ++ : QInputContext() ++{ ++ clearComposeBuffer(); ++} ++ ++QSimpleInputContext::~QSimpleInputContext() ++{ ++ clearComposeBuffer(); ++} ++ ++bool QSimpleInputContext::filterEvent( const QEvent *event ) ++{ ++ if ( event->type() != QEvent::KeyPress ) ++ return FALSE; ++ ++ QKeyEvent *keyevent = (QKeyEvent *)event; ++ int keyval = keyevent->key(); ++ int val = 0; ++ ++ if ( isIgnoreKeys( keyval ) ) ++ return FALSE; ++ ++ if ( isComposingKeys( keyval ) ) { ++ // If composing keys are pressed, use keyval directly ++ val = UNITIZE( keyval ); ++ } else { ++ QString text = keyevent->text(); ++ if ( text.isEmpty() ) ++ return FALSE; ++ ++ // If not composing keys are pressed, use the character's unicode value ++ // NOTE : The contents of QKeyEvent::text() is restricted to ++ // only one character. See description of ++ // QInputContext::filterEvent() about key compression. ++ val = text[0].unicode(); ++ qDebug( "str = %s", (const char*)keyevent->text().local8Bit() ); ++ } ++ ++ // Store value ++ int nCompose = 0; ++ while ( composeBuffer[nCompose] != 0 && nCompose < QT_KEYSEQUENCE_MAX_LEN ) ++ nCompose++; ++ ++ if ( nCompose == QT_KEYSEQUENCE_MAX_LEN ) { ++ clearComposeBuffer(); ++ nCompose = 0; ++ } ++ ++ composeBuffer[nCompose] = val; ++ ++ // check sequence ++ if( checkComposeTable( composeBuffer, &defaultComposeTable ) ) ++ return TRUE; ++ ++ return FALSE; ++} ++ ++void QSimpleInputContext::setFocus() ++{ ++ qDebug( "QSimpleInputContext: %p->setFocus(), focusWidget()=%p", ++ this, focusWidget() ); ++} ++ ++void QSimpleInputContext::unsetFocus() ++{ ++ qDebug( "QSimpleInputContext: %p->unsetFocus(), focusWidget()=%p", ++ this, focusWidget() ); ++ reset(); ++} ++ ++void QSimpleInputContext::setMicroFocus( int x, int y, int w, int h, QFont *f ) ++{ ++} ++ ++void QSimpleInputContext::mouseHandler( int x, QEvent::Type type, ++ Qt::ButtonState button, ++ Qt::ButtonState state ) ++{ ++ switch ( type ) { ++ case QEvent::MouseButtonPress: ++ case QEvent::MouseButtonRelease: ++ case QEvent::MouseButtonDblClick: ++ case QEvent::MouseMove: ++ qDebug( "QSimpleInputContext::mouseHandler: " ++ "x=%d, type=%d, button=%d, state=%d", x, type, button, state ); ++ break; ++ default: ++ break; ++ } ++} ++ ++ ++void QSimpleInputContext::reset() ++{ ++ clearComposeBuffer(); ++ QInputContext::reset(); ++} ++ ++QString QSimpleInputContext::identifierName() ++{ ++ return "simple"; ++} ++ ++QString QSimpleInputContext::language() ++{ ++ return ""; // FIXME ++} ++ ++bool QSimpleInputContext::isIgnoreKeys( int keyval ) ++{ ++ for ( uint i = 0; i < (sizeof(ignoreKeys)/sizeof(ignoreKeys[0])); i++ ) ++ if ( keyval == ignoreKeys[i] ) ++ return TRUE; ++ ++ return FALSE; ++} ++ ++bool QSimpleInputContext::isComposingKeys( int keyval ) ++{ ++ for ( uint i = 0; i < (sizeof(composingKeys)/sizeof(composingKeys[0])); i++ ) ++ if ( keyval == composingKeys[i] ) ++ return TRUE; ++ ++ return FALSE; ++} ++ ++bool QSimpleInputContext::checkComposeTable( uint* composeBuffer, const QComposeTable *composeTable ) ++{ ++ const QComposeTableElement *p = std::lower_bound( composeTable->data, ++ composeTable->data + composeTable->size, ++ composeBuffer, ++ Cmp() ); ++ ++ // no entries were found ++ if ( p == composeTable->data + composeTable->size ) { ++ qDebug( "no match" ); ++ clearComposeBuffer(); ++ return FALSE; ++ } ++ ++ // check if compose buffer is matched ++ for ( int i=0; i < QT_KEYSEQUENCE_MAX_LEN; i++ ) { ++ ++ // check if partial match ++ if ( composeBuffer[i] == 0 && p->keys[i] ) { ++ qDebug("partial match"); ++ return TRUE; ++ } ++ ++ if ( composeBuffer[i] != p->keys[i] ) { ++ qDebug("different entry"); ++ clearComposeBuffer(); ++ return i!=0; ++ } ++ } ++ ++ qDebug("match exactly"); ++ ++ // match exactly ++ commitChar( p->value ); ++ clearComposeBuffer(); ++ ++ return TRUE; ++} ++ ++void QSimpleInputContext::commitChar( uint c ) ++{ ++ sendIMEvent( QEvent::IMStart ); ++ sendIMEvent( QEvent::IMEnd, QString(QChar(c)) ); ++} ++ ++void QSimpleInputContext::clearComposeBuffer(void) ++{ ++ for ( uint i=0; i < (sizeof(composeBuffer)/sizeof(int)); i++ ) ++ composeBuffer[i] = 0; ++} ++ +--- plugins/src/inputmethods/simple/qsimpleinputcontext.h ++++ plugins/src/inputmethods/simple/qsimpleinputcontext.h +@@ -0,0 +1,93 @@ ++/**************************************************************************** ++** $Id$ ++** ++** Definition of QSimpleInputContext class ++** ++** Copyright (C) 2004 immodule for Qt Project. All rights reserved. ++** ++** This file is written to contribute to Trolltech AS under their own ++** licence. You may use this file under your Qt license. Following ++** description is copied from their original file headers. Contact ++** immodule-qt@freedesktop.org if any conditions of this licensing are ++** not clear to you. ++** ++** ++** This file is part of the input method module of the Qt GUI Toolkit. ++** ++** This file may be distributed under the terms of the Q Public License ++** as defined by Trolltech AS of Norway and appearing in the file ++** LICENSE.QPL included in the packaging of this file. ++** ++** This file may be distributed and/or modified under the terms of the ++** GNU General Public License version 2 as published by the Free Software ++** Foundation and appearing in the file LICENSE.GPL included in the ++** packaging of this file. ++** ++** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition ++** licenses may use this file in accordance with the Qt Commercial License ++** Agreement provided with the Software. ++** ++** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ++** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ++** ++** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for ++** information about Qt Commercial License Agreements. ++** See http://www.trolltech.com/qpl/ for QPL licensing information. ++** See http://www.trolltech.com/gpl/ for GPL licensing information. ++** ++** Contact info@trolltech.com if any conditions of this licensing are ++** not clear to you. ++** ++**********************************************************************/ ++ ++#ifndef QSIMPLEINPUT_CONTEXT_H ++#define QSIMPLEINPUT_CONTEXT_H ++ ++#include ++#include ++ ++#define QT_KEYSEQUENCE_MAX_LEN 6 ++#define UNITIZE(qkey) (0x02000000|qkey) ++ ++struct QComposeTableElement { ++ uint keys[QT_KEYSEQUENCE_MAX_LEN]; ++ uint value; ++}; ++ ++struct QComposeTable { ++ const QComposeTableElement *data; ++ uint size; ++}; ++ ++ ++class QSimpleInputContext : public QInputContext { ++ Q_OBJECT ++public: ++ QSimpleInputContext(); ++ ~QSimpleInputContext(); ++ ++ virtual QString identifierName(); ++ virtual QString language(); ++ ++ virtual bool filterEvent( const QEvent *event ); ++ virtual void reset(); ++ virtual void setFocus(); ++ virtual void unsetFocus(); ++ virtual void setMicroFocus( int x, int y, int w, int h, QFont *f = 0 ); ++ virtual void mouseHandler( int x, QEvent::Type type, ++ Qt::ButtonState button, Qt::ButtonState state ); ++ ++protected: ++ bool isIgnoreKeys(int keyval ); ++ bool isComposingKeys( int keyval ); ++ bool checkComposeTable( uint composeBuffer[], const QComposeTable *composeTable ); ++ void commitChar( uint c ); ++ ++ void clearComposeBuffer(void); ++ ++protected: ++ uint composeBuffer[QT_KEYSEQUENCE_MAX_LEN + 1]; ++ static const QComposeTable defaultComposeTable; ++}; ++ ++#endif // QSIMPLEINPUT_CONTEXT_H +--- plugins/src/inputmethods/simple/qsimpleinputcontextplugin.cpp ++++ plugins/src/inputmethods/simple/qsimpleinputcontextplugin.cpp +@@ -0,0 +1,86 @@ ++/**************************************************************************** ++** $Id$ ++** ++** Implementation of QSimpleInputContextPlugin class ++** ++** Copyright (C) 2004 immodule for Qt Project. All rights reserved. ++** ++** This file is written to contribute to Trolltech AS under their own ++** licence. You may use this file under your Qt license. Following ++** description is copied from their original file headers. Contact ++** immodule-qt@freedesktop.org if any conditions of this licensing are ++** not clear to you. ++** ++** ++** This file is part of the input method module of the Qt GUI Toolkit. ++** ++** This file may be distributed under the terms of the Q Public License ++** as defined by Trolltech AS of Norway and appearing in the file ++** LICENSE.QPL included in the packaging of this file. ++** ++** This file may be distributed and/or modified under the terms of the ++** GNU General Public License version 2 as published by the Free Software ++** Foundation and appearing in the file LICENSE.GPL included in the ++** packaging of this file. ++** ++** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition ++** licenses may use this file in accordance with the Qt Commercial License ++** Agreement provided with the Software. ++** ++** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ++** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ++** ++** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for ++** information about Qt Commercial License Agreements. ++** See http://www.trolltech.com/qpl/ for QPL licensing information. ++** See http://www.trolltech.com/gpl/ for GPL licensing information. ++** ++** Contact info@trolltech.com if any conditions of this licensing are ++** not clear to you. ++** ++**********************************************************************/ ++ ++#ifndef QT_NO_IM ++#include "qsimpleinputcontext.h" ++#include "qsimpleinputcontextplugin.h" ++#include ++#include ++ ++ ++QSimpleInputContextPlugin::QSimpleInputContextPlugin() ++{ ++} ++ ++QSimpleInputContextPlugin::~QSimpleInputContextPlugin() ++{ ++} ++ ++QStringList QSimpleInputContextPlugin::keys() const ++{ ++ return QStringList( "simple" ); ++} ++ ++QInputContext *QSimpleInputContextPlugin::create( const QString & ) ++{ ++ return new QSimpleInputContext; ++} ++ ++QStringList QSimpleInputContextPlugin::languages( const QString & ) ++{ ++ return QStringList( "" ); ++} ++ ++QString QSimpleInputContextPlugin::displayName( const QString & ) ++{ ++ return tr( "Simple Composing Input Method" ); ++} ++ ++QString QSimpleInputContextPlugin::description( const QString & ) ++{ ++ return tr( "Simple composing input method" ); ++} ++ ++ ++Q_EXPORT_PLUGIN( QSimpleInputContextPlugin ) ++ ++#endif +--- plugins/src/inputmethods/simple/qsimpleinputcontextplugin.h ++++ plugins/src/inputmethods/simple/qsimpleinputcontextplugin.h +@@ -0,0 +1,63 @@ ++/**************************************************************************** ++** $Id$ ++** ++** Definition of QSimpleInputContextPlugin class ++** ++** Copyright (C) 2004 immodule for Qt Project. All rights reserved. ++** ++** This file is written to contribute to Trolltech AS under their own ++** licence. You may use this file under your Qt license. Following ++** description is copied from their original file headers. Contact ++** immodule-qt@freedesktop.org if any conditions of this licensing are ++** not clear to you. ++** ++** ++** This file is part of the input method module of the Qt GUI Toolkit. ++** ++** This file may be distributed under the terms of the Q Public License ++** as defined by Trolltech AS of Norway and appearing in the file ++** LICENSE.QPL included in the packaging of this file. ++** ++** This file may be distributed and/or modified under the terms of the ++** GNU General Public License version 2 as published by the Free Software ++** Foundation and appearing in the file LICENSE.GPL included in the ++** packaging of this file. ++** ++** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition ++** licenses may use this file in accordance with the Qt Commercial License ++** Agreement provided with the Software. ++** ++** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ++** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ++** ++** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for ++** information about Qt Commercial License Agreements. ++** See http://www.trolltech.com/qpl/ for QPL licensing information. ++** See http://www.trolltech.com/gpl/ for GPL licensing information. ++** ++** Contact info@trolltech.com if any conditions of this licensing are ++** not clear to you. ++** ++**********************************************************************/ ++ ++#ifndef QT_NO_IM ++#include "qsimpleinputcontext.h" ++#include ++#include ++ ++ ++class QSimpleInputContextPlugin : public QInputContextPlugin ++{ ++ Q_OBJECT ++public: ++ QSimpleInputContextPlugin(); ++ ~QSimpleInputContextPlugin(); ++ ++ QStringList keys() const; ++ QInputContext *create( const QString &key ); ++ QStringList languages( const QString &key ); ++ QString displayName( const QString &key ); ++ QString description( const QString &key ); ++}; ++ ++#endif +--- plugins/src/inputmethods/simple/simple.pro ++++ plugins/src/inputmethods/simple/simple.pro +@@ -0,0 +1,15 @@ ++TEMPLATE = lib ++TARGET = qsimple ++DESTDIR = ../../../inputmethods ++ ++INCLUDEPATH += . ++CONFIG += qt warn_on debug plugin ++target.path += $$plugins.path/inputmethods ++INSTALLS += target ++ ++# Input ++HEADERS += qsimpleinputcontext.h \ ++ qsimpleinputcontextplugin.h ++SOURCES += qsimpleinputcontext.cpp \ ++ qsimpleinputcontextplugin.cpp \ ++ composetable.cpp +--- plugins/src/inputmethods/simple/xcompose2q.rb ++++ plugins/src/inputmethods/simple/xcompose2q.rb +@@ -0,0 +1,450 @@ ++#!/usr/bin/env ruby ++ ++# xcompose2q.rb: X Compose table to QSimpleInputContext table translator ++# Copyright (C) 2004 immodule for Qt Project. All rights reserved. ++# ++# This file is written to contribute to Trolltech AS under their own ++# licence. You may use this file under your Qt license. Following ++# description is copied from their original file headers. Contact ++# immodule-qt@freedesktop.org if any conditions of this licensing are ++# not clear to you. ++ ++# This file may be distributed under the terms of the Q Public License ++# as defined by Trolltech AS of Norway and appearing in the file ++# LICENSE.QPL included in the packaging of this file. ++# ++# This file may be distributed and/or modified under the terms of the ++# GNU General Public License version 2 as published by the Free Software ++# Foundation and appearing in the file LICENSE.GPL included in the ++# packaging of this file. ++# ++# Licensees holding valid Qt Enterprise Edition or Qt Professional Edition ++# licenses may use this file in accordance with the Qt Commercial License ++# Agreement provided with the Software. ++# ++# This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ++# WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ++# ++# See http://www.trolltech.com/pricing.html or email sales@trolltech.com for ++# information about Qt Commercial License Agreements. ++# See http://www.trolltech.com/qpl/ for QPL licensing information. ++# See http://www.trolltech.com/gpl/ for GPL licensing information. ++# ++# Contact info@trolltech.com if any conditions of this licensing are ++# not clear to you. ++ ++ ++# Usage: ++# xcompose2q.rb /usr/X11R6/lib/X11/locale/en_US.UTF-8/Compose ++ ++require 'uconv' ++ ++# translation table for lazy sorting ++raw2key = { ++ "0y1120" => "UNITIZE(Qt::Key_Multi_key)", ++ "0y1250" => "UNITIZE(Qt::Key_Dead_Grave)", ++ "0y1251" => "UNITIZE(Qt::Key_Dead_Acute)", ++ "0y1252" => "UNITIZE(Qt::Key_Dead_Circumflex)", ++ "0y1253" => "UNITIZE(Qt::Key_Dead_Tilde)", ++ "0y1254" => "UNITIZE(Qt::Key_Dead_Macron)", ++ "0y1255" => "UNITIZE(Qt::Key_Dead_Breve)", ++ "0y1256" => "UNITIZE(Qt::Key_Dead_Abovedot)", ++ "0y1257" => "UNITIZE(Qt::Key_Dead_Diaeresis)", ++ "0y1258" => "UNITIZE(Qt::Key_Dead_Abovering)", ++ "0y1259" => "UNITIZE(Qt::Key_Dead_Doubleacute)", ++ "0y125a" => "UNITIZE(Qt::Key_Dead_Caron)", ++ "0y125b" => "UNITIZE(Qt::Key_Dead_Cedilla)", ++ "0y125c" => "UNITIZE(Qt::Key_Dead_Ogonek)", ++ "0y125d" => "UNITIZE(Qt::Key_Dead_Iota)", ++ "0y125e" => "UNITIZE(Qt::Key_Dead_Voiced_Sound)", ++ "0y125f" => "UNITIZE(Qt::Key_Dead_Semivoiced_Sound)", ++ "0y1260" => "UNITIZE(Qt::Key_Dead_Belowdot)", ++ "0y1261" => "UNITIZE(Qt::Key_Dead_Hook)", ++ "0y1262" => "UNITIZE(Qt::Key_Dead_Horn)", ++} ++ ++# X's KeySym to Unicode translation table. The unicode value is ++# extracted from ++# QETWidget::translateKeyEventInternal(). Translation for some ++# keys are not available ++x2q = { ++ "Multi_key" => "0y1120", ++ "dead_grave" => "0y1250", ++ "dead_acute" => "0y1251", ++ "dead_circumflex" => "0y1252", ++ "dead_tilde" => "0y1253", ++ "dead_macron" => "0y1254", ++ "dead_breve" => "0y1255", ++ "dead_abovedot" => "0y1256", ++ "dead_diaeresis" => "0y1257", ++ "dead_abovering" => "0y1258", ++ "dead_doubleacute" => "0y1259", ++ "dead_caron" => "0y125a", ++ "dead_cedilla" => "0y125b", ++ "dead_ogonek" => "0y125c", ++ "dead_iota" => "0y125d", ++ "dead_voiced_sound" => "0y125e", ++ "dead_semivoiced_sound" => "0y125f", ++ "dead_belowdot" => "0y1260", ++ "dead_hook" => "0y1261", ++ "dead_horn" => "0y1262", ++ ++ "0" => "0x0030", ++ "1" => "0x0031", ++ "2" => "0x0032", ++ "3" => "0x0033", ++ "4" => "0x0034", ++ "5" => "0x0035", ++ "6" => "0x0036", ++ "7" => "0x0037", ++ "8" => "0x0038", ++ "9" => "0x0039", ++ "A" => "0x0041", ++ "AE" => "0x00c6", ++ "Abreve" => "0x0102", ++ "Acircumflex" => "0x00c2", ++ "Adiaeresis" => "0x00c4", ++ "Arabic_alef" => "0x0627", ++ "Arabic_waw" => "0x0648", ++ "Arabic_yeh" => "0x064a", ++ "Aring" => "0x00c5", ++ "B" => "0x0042", ++ "C" => "0x0043", ++ "Ccedilla" => "0x00c7", ++ "Cyrillic_A" => "0x0410", ++ "Cyrillic_CHE" => "0x0427", ++ "Cyrillic_E" => "0x042d", ++ "Cyrillic_GHE" => "0x0413", ++ "Cyrillic_I" => "0x0418", ++ "Cyrillic_IE" => "0x0415", ++ "Cyrillic_KA" => "0x041a", ++ "Cyrillic_O" => "0x041e", ++ "Cyrillic_U" => "0x0423", ++ "Cyrillic_YERU" => "0x042b", ++ "Cyrillic_ZE" => "0x0417", ++ "Cyrillic_ZHE" => "0x0416", ++ "Cyrillic_a" => "0x0430", ++ "Cyrillic_che" => "0x0447", ++ "Cyrillic_e" => "0x044d", ++ "Cyrillic_ghe" => "0x0433", ++ "Cyrillic_i" => "0x0438", ++ "Cyrillic_ie" => "0x0435", ++ "Cyrillic_ka" => "0x043a", ++ "Cyrillic_o" => "0x043e", ++ "Cyrillic_u" => "0x0443", ++ "Cyrillic_yeru" => "0x044b", ++ "Cyrillic_ze" => "0x0437", ++ "Cyrillic_zhe" => "0x0436", ++ "D" => "0x0044", ++ "E" => "0x0045", ++ "Ecircumflex" => "0x00ca", ++ "Emacron" => "0x0112", ++ "F" => "0x0046", ++ "G" => "0x0047", ++ "Greek_ALPHA" => "0x0391", ++ "Greek_EPSILON" => "0x0395", ++ "Greek_ETA" => "0x0397", ++ "Greek_IOTA" => "0x0399", ++ "Greek_OMEGA" => "0x03a9", ++ "Greek_OMICRON" => "0x039f", ++ "Greek_RHO" => "0x03a1", ++ "Greek_UPSILON" => "0x03a5", ++ "Greek_alpha" => "0x03b1", ++ "Greek_alphaaccent" => "0x03ac", ++ "Greek_epsilon" => "0x03b5", ++ "Greek_eta" => "0x03b7", ++ "Greek_etaaccent" => "0x03ae", ++ "Greek_iota" => "0x03b9", ++ "Greek_iotadieresis" => "0x03ca", ++ "Greek_omega" => "0x03c9", ++ "Greek_omegaaccent" => "0x03ce", ++ "Greek_omicron" => "0x03bf", ++ "Greek_rho" => "0x03c1", ++ "Greek_upsilon" => "0x03c5", ++ "Greek_upsilondieresis" => "0x03cb", ++ "H" => "0x0048", ++ "I" => "0x0049", ++ "Idiaeresis" => "0x00cf", ++ "J" => "0x004a", ++ "K" => "0x004b", ++ "KP_0" => "0x0000", ++ "KP_1" => "0x0000", ++ "KP_2" => "0x0000", ++ "KP_3" => "0x0000", ++ "KP_4" => "0x0000", ++ "KP_5" => "0x0000", ++ "KP_6" => "0x0000", ++ "KP_7" => "0x0000", ++ "KP_8" => "0x0000", ++ "KP_9" => "0x0000", ++ "KP_Add" => "0x0000", ++ "KP_Divide" => "0x0000", ++ "KP_Equal" => "0x0000", ++ "KP_Space" => "0x0000", ++ "L" => "0x004c", ++ "M" => "0x004d", ++ "N" => "0x004e", ++ "O" => "0x004f", ++ "Ocircumflex" => "0x00d4", ++ "Odiaeresis" => "0x00d6", ++ "Ohorn" => "0x0000", ++ "Omacron" => "0x014c", ++ "Ooblique" => "0x00d8", ++ "Otilde" => "0x00d5", ++ "P" => "0x0050", ++ "Q" => "0x0051", ++ "R" => "0x0052", ++ "S" => "0x0053", ++ "Sacute" => "0x015a", ++ "Scaron" => "0x0160", ++ "T" => "0x0054", ++ "U" => "0x0055", ++ "Udiaeresis" => "0x00dc", ++ "Uhorn" => "0x0000", ++ "Ukrainian_I" => "0x0406", ++ "Ukrainian_i" => "0x0456", ++ "Umacron" => "0x016a", ++ "Utilde" => "0x0168", ++ "V" => "0x0056", ++ "W" => "0x0057", ++ "X" => "0x0058", ++ "Y" => "0x0059", ++ "Z" => "0x005a", ++ "a" => "0x0061", ++ "abreve" => "0x0103", ++ "acircumflex" => "0x00e2", ++ "acute" => "0x00b4", ++ "adiaeresis" => "0x00e4", ++ "ae" => "0x00e6", ++ "ampersand" => "0x0026", ++ "apostrophe" => "0x0027", ++ "approximate" => "0x223c", ++ "aring" => "0x00e5", ++ "asciicircum" => "0x005e", ++ "asciitilde" => "0x007e", ++ "asterisk" => "0x002a", ++ "at" => "0x0040", ++ "b" => "0x0062", ++ "backslash" => "0x005c", ++ "bar" => "0x007c", ++ "braceleft" => "0x007b", ++ "braceright" => "0x007d", ++ "bracketleft" => "0x005b", ++ "bracketright" => "0x005d", ++ "c" => "0x0063", ++ "ccedilla" => "0x00e7", ++ "colon" => "0x003a", ++ "combining_acute" => "0x0000", ++ "combining_belowdot" => "0x0000", ++ "combining_grave" => "0x0000", ++ "combining_hook" => "0x0000", ++ "combining_tilde" => "0x0000", ++ "comma" => "0x002c", ++ "d" => "0x0064", ++ "diaeresis" => "0x00a8", ++ "dollar" => "0x0024", ++ "e" => "0x0065", ++ "ecircumflex" => "0x00ea", ++ "emacron" => "0x0113", ++ "equal" => "0x003d", ++ "exclam" => "0x0021", ++ "f" => "0x0066", ++ "g" => "0x0067", ++ "grave" => "0x0060", ++ "greater" => "0x003e", ++ "greaterthanequal" => "0x2265", ++ "h" => "0x0068", ++ "hebrew_aleph" => "0x05d0", ++ "hebrew_bet" => "0x05d1", ++ "hebrew_beth" => "0x05d1", ++ "hebrew_dalet" => "0x05d3", ++ "hebrew_daleth" => "0x05d3", ++ "hebrew_finalkaph" => "0x05da", ++ "hebrew_finalpe" => "0x05e3", ++ "hebrew_gimel" => "0x05d2", ++ "hebrew_gimmel" => "0x05d2", ++ "hebrew_he" => "0x05d4", ++ "hebrew_kaph" => "0x05db", ++ "hebrew_kuf" => "0x05e7", ++ "hebrew_lamed" => "0x05dc", ++ "hebrew_mem" => "0x05de", ++ "hebrew_nun" => "0x05e0", ++ "hebrew_pe" => "0x05e4", ++ "hebrew_qoph" => "0x05e7", ++ "hebrew_resh" => "0x05e8", ++ "hebrew_samech" => "0x05e1", ++ "hebrew_samekh" => "0x05e1", ++ "hebrew_shin" => "0x05e9", ++ "hebrew_taf" => "0x05ea", ++ "hebrew_taw" => "0x05ea", ++ "hebrew_tet" => "0x05d8", ++ "hebrew_teth" => "0x05d8", ++ "hebrew_waw" => "0x05d5", ++ "hebrew_yod" => "0x05d9", ++ "hebrew_zade" => "0x05e6", ++ "hebrew_zadi" => "0x05e6", ++ "hebrew_zain" => "0x05d6", ++ "hebrew_zayin" => "0x05d6", ++ "i" => "0x0069", ++ "identical" => "0x2261", ++ "idiaeresis" => "0x00ef", ++ "includedin" => "0x2282", ++ "includes" => "0x2283", ++ "j" => "0x006a", ++ "k" => "0x006b", ++ "kana_A" => "0x30a2", ++ "kana_CHI" => "0x30c1", ++ "kana_E" => "0x30a8", ++ "kana_FU" => "0x30d5", ++ "kana_HA" => "0x30cf", ++ "kana_HE" => "0x30d8", ++ "kana_HI" => "0x30d2", ++ "kana_HO" => "0x30db", ++ "kana_I" => "0x30a4", ++ "kana_KA" => "0x30ab", ++ "kana_KE" => "0x30b1", ++ "kana_KI" => "0x30ad", ++ "kana_KO" => "0x30b3", ++ "kana_KU" => "0x30af", ++ "kana_MA" => "0x30de", ++ "kana_ME" => "0x30e1", ++ "kana_MI" => "0x30df", ++ "kana_MO" => "0x30e2", ++ "kana_MU" => "0x30e0", ++ "kana_NA" => "0x30ca", ++ "kana_NE" => "0x30cd", ++ "kana_NI" => "0x30cb", ++ "kana_NO" => "0x30ce", ++ "kana_NU" => "0x30cc", ++ "kana_O" => "0x30aa", ++ "kana_RA" => "0x30e9", ++ "kana_RE" => "0x30ec", ++ "kana_RI" => "0x30ea", ++ "kana_RO" => "0x30ed", ++ "kana_RU" => "0x30eb", ++ "kana_SA" => "0x30b5", ++ "kana_SE" => "0x30bb", ++ "kana_SHI" => "0x30b7", ++ "kana_SO" => "0x30bd", ++ "kana_SU" => "0x30b9", ++ "kana_TA" => "0x30bf", ++ "kana_TE" => "0x30c6", ++ "kana_TO" => "0x30c8", ++ "kana_TSU" => "0x30c4", ++ "kana_U" => "0x30a6", ++ "kana_WA" => "0x30ef", ++ "kana_WO" => "0x30f2", ++ "kana_YA" => "0x30e4", ++ "kana_YO" => "0x30e8", ++ "kana_YU" => "0x30e6", ++ "l" => "0x006c", ++ "leftarrow" => "0x2190", ++ "leftcaret" => "0x003c", ++ "leftshoe" => "0x2282", ++ "less" => "0x003c", ++ "lessthanequal" => "0x2264", ++ "m" => "0x006d", ++ "macron" => "0x00af", ++ "minus" => "0x002d", ++ "n" => "0x006e", ++ "numbersign" => "0x0023", ++ "o" => "0x006f", ++ "ocircumflex" => "0x00f4", ++ "odiaeresis" => "0x00f6", ++ "ohorn" => "0x0000", ++ "omacron" => "0x014d", ++ "oslash" => "0x00f8", ++ "otilde" => "0x00f5", ++ "p" => "0x0070", ++ "parenleft" => "0x0028", ++ "parenright" => "0x0029", ++ "percent" => "0x0025", ++ "period" => "0x002e", ++ "plus" => "0x002b", ++ "q" => "0x0071", ++ "question" => "0x003f", ++ "quotedbl" => "0x0022", ++ "r" => "0x0072", ++ "rightarrow" => "0x2192", ++ "rightcaret" => "0x003e", ++ "rightshoe" => "0x2283", ++ "righttack" => "0x22a3", ++ "s" => "0x0073", ++ "sacute" => "0x015b", ++ "scaron" => "0x0161", ++ "semicolon" => "0x003b", ++ "slash" => "0x002f", ++ "space" => "0x0020", ++ "t" => "0x0074", ++ "u" => "0x0075", ++ "udiaeresis" => "0x00fc", ++ "uhorn" => "0x0000", ++ "umacron" => "0x016b", ++ "underbar" => "0x005f", ++ "underscore" => "0x005f", ++ "utilde" => "0x0169", ++ "v" => "0x0076", ++ "w" => "0x0077", ++ "x" => "0x0078", ++ "y" => "0x0079", ++ "z" => "0x007a", ++} ++ ++readlines.collect { ++ |line| ++ ++ broken = "" ++ seq = ["0", "0", "0", "0", "0", "0"] ++ index = 0 ++ rhs = "0x0000" ++ comment = "" ++ ++ case line ++ when /^(#|XCOMM)(.*)$/ ++ comment = "// #{$2}\n" ++ rhs = :isCommentLine ++ when /^$/ ++ comment = "\n" ++ rhs = :isCommentLine ++ else ++ line.scan(/<([^>]+)>/) { ++ |args| ++ keysym = args[0] ++ unit = x2q[keysym] || keysym.sub(/^U([\da-fA-F]{4,5})$/, "0x\\1") ++ if (/^(0x(0000|[\da-fA-F]{5,})|dead_space)$/ =~ unit) ++ broken = "// /* broken */" ++ end ++ seq[index] = unit ++ index += 1 ++ } ++ ++ Regexp.new(':\s+"(.+)"\s+(.+)$', nil, 'u') =~ line ++ rhs = Uconv::u8tou16($1).unpack('v')[0] ++ rhs = format("0x%04x", rhs) ++ comment = $2 ++ end ++ ++ entry = { ++ :broken => broken, ++ :seq => seq, ++ :rhs => rhs, ++ :comment => comment ++ } ++}.sort { ++ |entry_a, entry_b| ++ ++ entry_a[:seq] <=> entry_b[:seq] ++}.each { ++ |entry| ++ ++ broken, seq, rhs, comment = entry.values_at(:broken, :seq, :rhs, :comment) ++ if (rhs == :isCommentLine) ++ print comment ++ else ++ seq = seq.collect { ++ |unit| ++ raw2key[unit] || unit ++ } ++ print "#{broken} { {#{seq.join(", ")}}, #{rhs} }, // #{comment}\n" ++ end ++} +--- plugins/src/inputmethods/xim/qximinputcontext.h ++++ plugins/src/inputmethods/xim/qximinputcontext.h +@@ -0,0 +1,130 @@ ++/**************************************************************************** ++** $Id: qximinputcontext_p.h,v 1.6 2004/06/22 06:47:27 daisuke Exp $ ++** ++** Definition of QXIMInputContext ++** ++** Copyright (C) 1992-2002 Trolltech AS. All rights reserved. ++** ++** This file is part of the input method module of the Qt GUI Toolkit. ++** ++** This file may be distributed under the terms of the Q Public License ++** as defined by Trolltech AS of Norway and appearing in the file ++** LICENSE.QPL included in the packaging of this file. ++** ++** This file may be distributed and/or modified under the terms of the ++** GNU General Public License version 2 as published by the Free Software ++** Foundation and appearing in the file LICENSE.GPL included in the ++** packaging of this file. ++** ++** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition ++** licenses may use this file in accordance with the Qt Commercial License ++** Agreement provided with the Software. ++** ++** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ++** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ++** ++** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for ++** information about Qt Commercial License Agreements. ++** See http://www.trolltech.com/qpl/ for QPL licensing information. ++** See http://www.trolltech.com/gpl/ for GPL licensing information. ++** ++** Contact info@trolltech.com if any conditions of this licensing are ++** not clear to you. ++** ++**********************************************************************/ ++ ++#ifndef QXIMINPUTCONTEXT_H ++#define QXIMINPUTCONTEXT_H ++ ++ ++// ++// W A R N I N G ++// ------------- ++// ++// This file is not part of the Qt API. It exists for the convenience ++// of internal files. This header file may change from version to version ++// without notice, or even be removed. ++// ++// We mean it. ++// ++// ++ ++#if !defined(Q_NO_IM) ++ ++#include "qglobal.h" ++#include ++#include ++#include ++ ++class QKeyEvent; ++class QWidget; ++class QFont; ++class QString; ++ ++ ++#ifdef Q_WS_X11 ++#include "qarray.h" ++#include "qwindowdefs.h" ++#include ++#endif ++ ++class QXIMInputContext : public QInputContext ++{ ++ Q_OBJECT ++public: ++#ifdef Q_WS_X11 ++ QXIMInputContext(); ++ ~QXIMInputContext(); ++ ++ QString identifierName(); ++ QString language(); ++ ++ bool x11FilterEvent( QWidget *keywidget, XEvent *event ); ++ void reset(); ++ ++ void setFocus(); ++ void unsetFocus(); ++ void setMicroFocus( int x, int y, int w, int h, QFont *f = 0 ); ++ void mouseHandler( int x, QEvent::Type type, ++ Qt::ButtonState button, Qt::ButtonState state ); ++ bool isPreeditRelocationEnabled(); ++ ++ void setHolderWidget( QWidget *widget ); ++ ++ bool hasFocus() const; ++ void resetClientState(); ++ void close( const QString &errMsg ); ++ ++ void sendIMEvent( QEvent::Type type, ++ const QString &text = QString::null, ++ int cursorPosition = -1, int selLength = 0 ); ++ ++ static void init_xim(); ++ static void create_xim(); ++ static void close_xim(); ++ ++ void *ic; ++ QString composingText; ++ QFont font; ++ XFontSet fontset; ++ QMemArray selectedChars; ++ ++protected: ++ virtual bool isPreeditPreservationEnabled(); // not a QInputContext func ++ ++ QCString _language; ++ ++private: ++ void setComposePosition(int, int); ++ void setComposeArea(int, int, int, int); ++ void setXFontSet(const QFont &); ++ ++ int lookupString(XKeyEvent *, QCString &, KeySym *, Status *) const; ++ ++#endif // Q_WS_X11 ++}; ++ ++ ++#endif //Q_NO_IM ++ ++#endif // QXIMINPUTCONTEXT_H +--- plugins/src/inputmethods/xim/qximinputcontextplugin.cpp ++++ plugins/src/inputmethods/xim/qximinputcontextplugin.cpp +@@ -0,0 +1,86 @@ ++/**************************************************************************** ++** $Id$ ++** ++** Implementation of QXIMInputContextPlugin class ++** ++** Copyright (C) 2004 immodule for Qt Project. All rights reserved. ++** ++** This file is written to contribute to Trolltech AS under their own ++** licence. You may use this file under your Qt license. Following ++** description is copied from their original file headers. Contact ++** immodule-qt@freedesktop.org if any conditions of this licensing are ++** not clear to you. ++** ++** ++** This file is part of the input method module of the Qt GUI Toolkit. ++** ++** This file may be distributed under the terms of the Q Public License ++** as defined by Trolltech AS of Norway and appearing in the file ++** LICENSE.QPL included in the packaging of this file. ++** ++** This file may be distributed and/or modified under the terms of the ++** GNU General Public License version 2 as published by the Free Software ++** Foundation and appearing in the file LICENSE.GPL included in the ++** packaging of this file. ++** ++** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition ++** licenses may use this file in accordance with the Qt Commercial License ++** Agreement provided with the Software. ++** ++** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ++** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ++** ++** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for ++** information about Qt Commercial License Agreements. ++** See http://www.trolltech.com/qpl/ for QPL licensing information. ++** See http://www.trolltech.com/gpl/ for GPL licensing information. ++** ++** Contact info@trolltech.com if any conditions of this licensing are ++** not clear to you. ++** ++**********************************************************************/ ++ ++#ifndef QT_NO_IM ++#include "qximinputcontext.h" ++#include "qximinputcontextplugin.h" ++#include ++#include ++ ++ ++QXIMInputContextPlugin::QXIMInputContextPlugin() ++{ ++} ++ ++QXIMInputContextPlugin::~QXIMInputContextPlugin() ++{ ++} ++ ++QStringList QXIMInputContextPlugin::keys() const ++{ ++ return QStringList( "xim" ); ++} ++ ++QInputContext *QXIMInputContextPlugin::create( const QString & ) ++{ ++ return new QXIMInputContext; ++} ++ ++QStringList QXIMInputContextPlugin::languages( const QString & ) ++{ ++ return QStringList( "" ); ++} ++ ++QString QXIMInputContextPlugin::displayName( const QString & ) ++{ ++ return tr( "XIM" ); ++} ++ ++QString QXIMInputContextPlugin::description( const QString & ) ++{ ++ return tr( "XIM input method" ); ++} ++ ++ ++Q_EXPORT_PLUGIN( QXIMInputContextPlugin ) ++ ++#endif +--- plugins/src/inputmethods/xim/qximinputcontextplugin.h ++++ plugins/src/inputmethods/xim/qximinputcontextplugin.h +@@ -0,0 +1,63 @@ ++/**************************************************************************** ++** $Id$ ++** ++** Definition of QXIMInputContextPlugin class ++** ++** Copyright (C) 2004 immodule for Qt Project. All rights reserved. ++** ++** This file is written to contribute to Trolltech AS under their own ++** licence. You may use this file under your Qt license. Following ++** description is copied from their original file headers. Contact ++** immodule-qt@freedesktop.org if any conditions of this licensing are ++** not clear to you. ++** ++** ++** This file is part of the input method module of the Qt GUI Toolkit. ++** ++** This file may be distributed under the terms of the Q Public License ++** as defined by Trolltech AS of Norway and appearing in the file ++** LICENSE.QPL included in the packaging of this file. ++** ++** This file may be distributed and/or modified under the terms of the ++** GNU General Public License version 2 as published by the Free Software ++** Foundation and appearing in the file LICENSE.GPL included in the ++** packaging of this file. ++** ++** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition ++** licenses may use this file in accordance with the Qt Commercial License ++** Agreement provided with the Software. ++** ++** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ++** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ++** ++** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for ++** information about Qt Commercial License Agreements. ++** See http://www.trolltech.com/qpl/ for QPL licensing information. ++** See http://www.trolltech.com/gpl/ for GPL licensing information. ++** ++** Contact info@trolltech.com if any conditions of this licensing are ++** not clear to you. ++** ++**********************************************************************/ ++ ++#ifndef QT_NO_IM ++#include "qximinputcontext.h" ++#include ++#include ++ ++ ++class QXIMInputContextPlugin : public QInputContextPlugin ++{ ++ Q_OBJECT ++public: ++ QXIMInputContextPlugin(); ++ ~QXIMInputContextPlugin(); ++ ++ QStringList keys() const; ++ QInputContext *create( const QString &key ); ++ QStringList languages( const QString &key ); ++ QString displayName( const QString &key ); ++ QString description( const QString &key ); ++}; ++ ++#endif +--- plugins/src/inputmethods/xim/qximinputcontext_x11.cpp ++++ plugins/src/inputmethods/xim/qximinputcontext_x11.cpp +@@ -0,0 +1,930 @@ ++/**************************************************************************** ++** $Id: qximinputcontext_x11.cpp,v 1.10 2004/06/22 06:47:27 daisuke Exp $ ++** ++** Implementation of QXIMInputContext class ++** ++** Copyright (C) 2000-2003 Trolltech AS. All rights reserved. ++** ++** This file is part of the input method module of the Qt GUI Toolkit. ++** ++** This file may be distributed under the terms of the Q Public License ++** as defined by Trolltech AS of Norway and appearing in the file ++** LICENSE.QPL included in the packaging of this file. ++** ++** This file may be distributed and/or modified under the terms of the ++** GNU General Public License version 2 as published by the Free Software ++** Foundation and appearing in the file LICENSE.GPL included in the ++** packaging of this file. ++** ++** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition ++** licenses for Unix/X11 may use this file in accordance with the Qt Commercial ++** License Agreement provided with the Software. ++** ++** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ++** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ++** ++** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for ++** information about Qt Commercial License Agreements. ++** See http://www.trolltech.com/qpl/ for QPL licensing information. ++** See http://www.trolltech.com/gpl/ for GPL licensing information. ++** ++** Contact info@trolltech.com if any conditions of this licensing are ++** not clear to you. ++** ++**********************************************************************/ ++ ++ ++#include "qximinputcontext.h" ++ ++const int XKeyPress = KeyPress; ++const int XKeyRelease = KeyRelease; ++#undef KeyPress ++#undef KeyRelease ++ ++#if !defined(QT_NO_IM) ++ ++#include "qplatformdefs.h" ++ ++#include "qapplication.h" ++#include "qwidget.h" ++#include "qstring.h" ++#include "qptrlist.h" ++#include "qintdict.h" ++#include "qtextcodec.h" ++ ++#include ++#include ++ ++#if !defined(QT_NO_XIM) ++ ++#define XK_MISCELLANY ++#define XK_LATIN1 ++#include ++ ++// #define QT_XIM_DEBUG ++ ++// from qapplication_x11.cpp ++static XIM qt_xim = 0; ++extern XIMStyle qt_xim_style; ++extern XIMStyle qt_xim_preferred_style; ++extern char *qt_ximServer; ++static bool isInitXIM = FALSE; ++static QPtrList *ximContextList = 0; ++#endif ++extern int qt_ximComposingKeycode; ++extern QTextCodec * qt_input_mapper; ++ ++ ++#if !defined(QT_NO_XIM) ++ ++#if defined(Q_C_CALLBACKS) ++extern "C" { ++#endif // Q_C_CALLBACKS ++ ++#ifdef USE_X11R6_XIM ++ static void xim_create_callback(XIM /*im*/, ++ XPointer /*client_data*/, ++ XPointer /*call_data*/) ++ { ++ // qDebug("xim_create_callback"); ++ QXIMInputContext::create_xim(); ++ } ++ ++ static void xim_destroy_callback(XIM /*im*/, ++ XPointer /*client_data*/, ++ XPointer /*call_data*/) ++ { ++ // qDebug("xim_destroy_callback"); ++ QXIMInputContext::close_xim(); ++ Display *dpy = QPaintDevice::x11AppDisplay(); ++ XRegisterIMInstantiateCallback(dpy, 0, 0, 0, ++ (XIMProc) xim_create_callback, 0); ++ } ++ ++#endif // USE_X11R6_XIM ++ ++#if defined(Q_C_CALLBACKS) ++} ++#endif // Q_C_CALLBACKS ++ ++#endif // QT_NO_XIM ++ ++#ifndef QT_NO_XIM ++ ++/* The cache here is needed, as X11 leaks a few kb for every ++ XFreeFontSet call, so we avoid creating and deletion of fontsets as ++ much as possible ++*/ ++static XFontSet fontsetCache[8] = { 0, 0, 0, 0, 0, 0, 0, 0 }; ++static int fontsetRefCount = 0; ++ ++static const char * const fontsetnames[] = { ++ "-*-fixed-medium-r-*-*-16-*,-*-*-medium-r-*-*-16-*", ++ "-*-fixed-medium-i-*-*-16-*,-*-*-medium-i-*-*-16-*", ++ "-*-fixed-bold-r-*-*-16-*,-*-*-bold-r-*-*-16-*", ++ "-*-fixed-bold-i-*-*-16-*,-*-*-bold-i-*-*-16-*", ++ "-*-fixed-medium-r-*-*-24-*,-*-*-medium-r-*-*-24-*", ++ "-*-fixed-medium-i-*-*-24-*,-*-*-medium-i-*-*-24-*", ++ "-*-fixed-bold-r-*-*-24-*,-*-*-bold-r-*-*-24-*", ++ "-*-fixed-bold-i-*-*-24-*,-*-*-bold-i-*-*-24-*" ++}; ++ ++static XFontSet getFontSet( const QFont &f ) ++{ ++ int i = 0; ++ if (f.italic()) ++ i |= 1; ++ if (f.bold()) ++ i |= 2; ++ ++ if ( f.pointSize() > 20 ) ++ i += 4; ++ ++ if ( !fontsetCache[i] ) { ++ Display* dpy = QPaintDevice::x11AppDisplay(); ++ int missCount; ++ char** missList; ++ fontsetCache[i] = XCreateFontSet(dpy, fontsetnames[i], &missList, &missCount, 0); ++ if(missCount > 0) ++ XFreeStringList(missList); ++ if ( !fontsetCache[i] ) { ++ fontsetCache[i] = XCreateFontSet(dpy, "-*-fixed-*-*-*-*-16-*", &missList, &missCount, 0); ++ if(missCount > 0) ++ XFreeStringList(missList); ++ if ( !fontsetCache[i] ) ++ fontsetCache[i] = (XFontSet)-1; ++ } ++ } ++ return (fontsetCache[i] == (XFontSet)-1) ? 0 : fontsetCache[i]; ++} ++ ++ ++#ifdef Q_C_CALLBACKS ++extern "C" { ++#endif // Q_C_CALLBACKS ++ ++ // These static functions should be rewritten as member of ++ // QXIMInputContext ++ ++ static int xic_start_callback(XIC, XPointer client_data, XPointer) { ++ QXIMInputContext *qic = (QXIMInputContext *) client_data; ++ if (! qic) { ++#ifdef QT_XIM_DEBUG ++ qDebug("compose start: no qic"); ++#endif // QT_XIM_DEBUG ++ ++ return 0; ++ } ++ ++ qic->resetClientState(); ++ qic->sendIMEvent( QEvent::IMStart ); ++ ++#ifdef QT_XIM_DEBUG ++ qDebug("compose start"); ++#endif // QT_XIM_DEBUG ++ ++ return 0; ++ } ++ ++ static int xic_draw_callback(XIC, XPointer client_data, XPointer call_data) { ++ QXIMInputContext *qic = (QXIMInputContext *) client_data; ++ if (! qic) { ++#ifdef QT_XIM_DEBUG ++ qDebug("compose event: invalid compose event %p", qic); ++#endif // QT_XIM_DEBUG ++ ++ return 0; ++ } ++ ++ bool send_imstart = FALSE; ++ if( ! qic->isComposing() && qic->hasFocus() ) { ++ qic->resetClientState(); ++ send_imstart = TRUE; ++ } else if ( ! qic->isComposing() || ! qic->hasFocus() ) { ++#ifdef QT_XIM_DEBUG ++ qDebug( "compose event: invalid compose event composing=%d hasFocus=%d", ++ qic->isComposing(), qic->hasFocus() ); ++#endif // QT_XIM_DEBUG ++ ++ return 0; ++ } ++ ++ if ( send_imstart ) ++ qic->sendIMEvent( QEvent::IMStart ); ++ ++ XIMPreeditDrawCallbackStruct *drawstruct = ++ (XIMPreeditDrawCallbackStruct *) call_data; ++ XIMText *text = (XIMText *) drawstruct->text; ++ int cursor = drawstruct->caret, sellen = 0; ++ ++ if ( ! drawstruct->caret && ! drawstruct->chg_first && ++ ! drawstruct->chg_length && ! text ) { ++ if( qic->composingText.isEmpty() ) { ++#ifdef QT_XIM_DEBUG ++ qDebug( "compose emptied" ); ++#endif // QT_XIM_DEBUG ++ // if the composition string has been emptied, we need ++ // to send an IMEnd event ++ qic->sendIMEvent( QEvent::IMEnd ); ++ qic->resetClientState(); ++ // if the commit string has coming after here, IMStart ++ // will be sent dynamically ++ } ++ return 0; ++ } ++ ++ if (text) { ++ char *str = 0; ++ if (text->encoding_is_wchar) { ++ int l = wcstombs(NULL, text->string.wide_char, text->length); ++ if (l != -1) { ++ str = new char[l + 1]; ++ wcstombs(str, text->string.wide_char, l); ++ str[l] = 0; ++ } ++ } else ++ str = text->string.multi_byte; ++ ++ if (! str) ++ return 0; ++ ++ QString s = QString::fromLocal8Bit(str); ++ ++ if (text->encoding_is_wchar) ++ delete [] str; ++ ++ if (drawstruct->chg_length < 0) ++ qic->composingText.replace(drawstruct->chg_first, UINT_MAX, s); ++ else ++ qic->composingText.replace(drawstruct->chg_first, drawstruct->chg_length, s); ++ ++ if ( qic->selectedChars.size() < qic->composingText.length() ) { ++ // expand the selectedChars array if the compose string is longer ++ uint from = qic->selectedChars.size(); ++ qic->selectedChars.resize( qic->composingText.length() ); ++ for ( uint x = from; from < qic->selectedChars.size(); ++x ) ++ qic->selectedChars[x] = 0; ++ } ++ ++ uint x; ++ bool *p = qic->selectedChars.data() + drawstruct->chg_first; ++ // determine if the changed chars are selected based on text->feedback ++ for ( x = 0; x < s.length(); ++x ) ++ *p++ = ( text->feedback ? ( text->feedback[x] & XIMReverse ) : 0 ); ++ ++ // figure out where the selection starts, and how long it is ++ p = qic->selectedChars.data(); ++ bool started = FALSE; ++ for ( x = 0; x < QMIN(qic->composingText.length(), qic->selectedChars.size()); ++x ) { ++ if ( started ) { ++ if ( *p ) ++sellen; ++ else break; ++ } else { ++ if ( *p ) { ++ cursor = x; ++ started = TRUE; ++ sellen = 1; ++ } ++ } ++ ++p; ++ } ++ } else { ++ if (drawstruct->chg_length == 0) ++ drawstruct->chg_length = -1; ++ ++ qic->composingText.remove(drawstruct->chg_first, drawstruct->chg_length); ++ bool qt_compose_emptied = qic->composingText.isEmpty(); ++ if ( qt_compose_emptied ) { ++#ifdef QT_XIM_DEBUG ++ qDebug( "compose emptied" ); ++#endif // QT_XIM_DEBUG ++ // if the composition string has been emptied, we need ++ // to send an IMEnd event ++ qic->sendIMEvent( QEvent::IMEnd ); ++ qic->resetClientState(); ++ // if the commit string has coming after here, IMStart ++ // will be sent dynamically ++ return 0; ++ } ++ } ++ ++ qic->sendIMEvent( QEvent::IMCompose, ++ qic->composingText, cursor, sellen ); ++ ++ return 0; ++ } ++ ++ static int xic_done_callback(XIC, XPointer client_data, XPointer) { ++ QXIMInputContext *qic = (QXIMInputContext *) client_data; ++ if (! qic) ++ return 0; ++ ++ // Don't send IMEnd here. QXIMInputContext::x11FilterEvent() ++ // handles IMEnd with commit string. ++#if 0 ++ if ( qic->isComposing() ) ++ qic->sendIMEvent( QEvent::IMEnd ); ++ qic->resetClientState(); ++#endif ++ ++ return 0; ++ } ++ ++#ifdef Q_C_CALLBACKS ++} ++#endif // Q_C_CALLBACKS ++ ++#endif // !QT_NO_XIM ++ ++ ++ ++QXIMInputContext::QXIMInputContext() ++ : QInputContext(), ic(0), fontset(0) ++{ ++ if(!isInitXIM) ++ QXIMInputContext::init_xim(); ++} ++ ++ ++void QXIMInputContext::setHolderWidget( QWidget *widget ) ++{ ++ if ( ! widget ) ++ return; ++ ++ QInputContext::setHolderWidget( widget ); ++ ++#if !defined(QT_NO_XIM) ++ fontsetRefCount++; ++ if (! qt_xim) { ++ qWarning("QInputContext: no input method context available"); ++ return; ++ } ++ ++ if (! widget->isTopLevel()) { ++ qWarning("QInputContext: cannot create input context for non-toplevel widgets"); ++ return; ++ } ++ ++ XPoint spot; ++ XRectangle rect; ++ XVaNestedList preedit_attr = 0; ++ XIMCallback startcallback, drawcallback, donecallback; ++ ++ font = widget->font(); ++ fontset = getFontSet( font ); ++ ++ if (qt_xim_style & XIMPreeditArea) { ++ rect.x = 0; ++ rect.y = 0; ++ rect.width = widget->width(); ++ rect.height = widget->height(); ++ ++ preedit_attr = XVaCreateNestedList(0, ++ XNArea, &rect, ++ XNFontSet, fontset, ++ (char *) 0); ++ } else if (qt_xim_style & XIMPreeditPosition) { ++ spot.x = 1; ++ spot.y = 1; ++ ++ preedit_attr = XVaCreateNestedList(0, ++ XNSpotLocation, &spot, ++ XNFontSet, fontset, ++ (char *) 0); ++ } else if (qt_xim_style & XIMPreeditCallbacks) { ++ startcallback.client_data = (XPointer) this; ++ startcallback.callback = (XIMProc) xic_start_callback; ++ drawcallback.client_data = (XPointer) this; ++ drawcallback.callback = (XIMProc)xic_draw_callback; ++ donecallback.client_data = (XPointer) this; ++ donecallback.callback = (XIMProc) xic_done_callback; ++ ++ preedit_attr = XVaCreateNestedList(0, ++ XNPreeditStartCallback, &startcallback, ++ XNPreeditDrawCallback, &drawcallback, ++ XNPreeditDoneCallback, &donecallback, ++ (char *) 0); ++ } ++ ++ if (preedit_attr) { ++ ic = XCreateIC(qt_xim, ++ XNInputStyle, qt_xim_style, ++ XNClientWindow, widget->winId(), ++ XNPreeditAttributes, preedit_attr, ++ (char *) 0); ++ XFree(preedit_attr); ++ } else ++ ic = XCreateIC(qt_xim, ++ XNInputStyle, qt_xim_style, ++ XNClientWindow, widget->winId(), ++ (char *) 0); ++ ++ if (! ic) ++ qFatal("Failed to create XIM input context!"); ++ ++ // when resetting the input context, preserve the input state ++ (void) XSetICValues((XIC) ic, XNResetState, XIMPreserveState, (char *) 0); ++ ++ if( ! ximContextList ) ++ ximContextList = new QPtrList; ++ ximContextList->append( this ); ++#endif // !QT_NO_XIM ++} ++ ++ ++QXIMInputContext::~QXIMInputContext() ++{ ++ ++#if !defined(QT_NO_XIM) ++ if (ic) ++ XDestroyIC((XIC) ic); ++ ++ if ( --fontsetRefCount == 0 ) { ++ Display *dpy = QPaintDevice::x11AppDisplay(); ++ for ( int i = 0; i < 8; i++ ) { ++ if ( fontsetCache[i] && fontsetCache[i] != (XFontSet)-1 ) { ++ XFreeFontSet(dpy, fontsetCache[i]); ++ fontsetCache[i] = 0; ++ } ++ } ++ } ++ ++ if( ximContextList ) { ++ ximContextList->remove( this ); ++ if(ximContextList->isEmpty()) { ++ // Calling XCloseIM gives a Purify FMR error ++ // XCloseIM( qt_xim ); ++ // We prefer a less serious memory leak ++ if( qt_xim ) { ++ qt_xim = 0; ++ isInitXIM = FALSE; ++ } ++ ++ delete ximContextList; ++ ximContextList = 0; ++ } ++ } ++#endif // !QT_NO_XIM ++ ++ ic = 0; ++} ++ ++void QXIMInputContext::init_xim() ++{ ++#ifndef QT_NO_XIM ++ if(!isInitXIM) ++ isInitXIM = TRUE; ++ ++ qt_xim = 0; ++ QString ximServerName(qt_ximServer); ++ if (qt_ximServer) ++ ximServerName.prepend("@im="); ++ else ++ ximServerName = ""; ++ ++ if ( !XSupportsLocale() ) ++ qWarning("Qt: Locales not supported on X server"); ++ ++#ifdef USE_X11R6_XIM ++ else if ( XSetLocaleModifiers (ximServerName.ascii()) == 0 ) ++ qWarning( "Qt: Cannot set locale modifiers: %s", ++ ximServerName.ascii()); ++ else { ++ Display *dpy = QPaintDevice::x11AppDisplay(); ++ XWindowAttributes attr; // XIM unselects all events on the root window ++ XGetWindowAttributes( dpy, QPaintDevice::x11AppRootWindow(),&attr ); ++ XRegisterIMInstantiateCallback(dpy, 0, 0, 0, ++ (XIMProc) xim_create_callback, 0); ++ XSelectInput( dpy, QPaintDevice::x11AppRootWindow(), attr.your_event_mask ); ++ } ++#else // !USE_X11R6_XIM ++ else if ( XSetLocaleModifiers ("") == 0 ) ++ qWarning("Qt: Cannot set locale modifiers"); ++ else ++ QXIMInputContext::create_xim(); ++#endif // USE_X11R6_XIM ++#endif // QT_NO_XIM ++} ++ ++ ++/*! \internal ++ Creates the application input method. ++ */ ++void QXIMInputContext::create_xim() ++{ ++#ifndef QT_NO_XIM ++ Display *appDpy = QPaintDevice::x11AppDisplay(); ++ qt_xim = XOpenIM( appDpy, 0, 0, 0 ); ++ if ( qt_xim ) { ++ ++#ifdef USE_X11R6_XIM ++ XIMCallback destroy; ++ destroy.callback = (XIMProc) xim_destroy_callback; ++ destroy.client_data = 0; ++ if ( XSetIMValues( qt_xim, XNDestroyCallback, &destroy, (char *) 0 ) != 0 ) ++ qWarning( "Xlib doesn't support destroy callback"); ++#endif // USE_X11R6_XIM ++ ++ XIMStyles *styles = 0; ++ XGetIMValues(qt_xim, XNQueryInputStyle, &styles, (char *) 0, (char *) 0); ++ if ( styles ) { ++ int i; ++ for ( i = 0; !qt_xim_style && i < styles->count_styles; i++ ) { ++ if ( styles->supported_styles[i] == qt_xim_preferred_style ) { ++ qt_xim_style = qt_xim_preferred_style; ++ break; ++ } ++ } ++ // if the preferred input style couldn't be found, look for ++ // Nothing ++ for ( i = 0; !qt_xim_style && i < styles->count_styles; i++ ) { ++ if ( styles->supported_styles[i] == (XIMPreeditNothing | ++ XIMStatusNothing) ) { ++ qt_xim_style = XIMPreeditNothing | XIMStatusNothing; ++ break; ++ } ++ } ++ // ... and failing that, None. ++ for ( i = 0; !qt_xim_style && i < styles->count_styles; i++ ) { ++ if ( styles->supported_styles[i] == (XIMPreeditNone | ++ XIMStatusNone) ) { ++ qt_xim_style = XIMPreeditNone | XIMStatusNone; ++ break; ++ } ++ } ++ ++ // qDebug("QApplication: using im style %lx", qt_xim_style); ++ XFree( (char *)styles ); ++ } ++ ++ if ( qt_xim_style ) { ++ ++#ifdef USE_X11R6_XIM ++ XUnregisterIMInstantiateCallback(appDpy, 0, 0, 0, ++ (XIMProc) xim_create_callback, 0); ++#endif // USE_X11R6_XIM ++ ++ } else { ++ // Give up ++ qWarning( "No supported input style found." ++ " See InputMethod documentation."); ++ QXIMInputContext::close_xim(); ++ } ++ } ++#endif // QT_NO_XIM ++} ++ ++ ++/*! \internal ++ Closes the application input method. ++*/ ++void QXIMInputContext::close_xim() ++{ ++#ifndef QT_NO_XIM ++ QString errMsg( "QXIMInputContext::close_xim() has been called" ); ++ ++ // Calling XCloseIM gives a Purify FMR error ++ // XCloseIM( qt_xim ); ++ // We prefer a less serious memory leak ++ ++ qt_xim = 0; ++ if( ximContextList ) { ++ QPtrList contexts( *ximContextList ); ++ QPtrList::Iterator it = contexts.begin(); ++ while( it != contexts.end() ) { ++ (*it)->close( errMsg ); ++ ++it; ++ } ++ // ximContextList will be deleted in ~QXIMInputContext ++ } ++#endif // QT_NO_XIM ++} ++ ++ ++bool QXIMInputContext::x11FilterEvent( QWidget *keywidget, XEvent *event ) ++{ ++#ifndef QT_NO_XIM ++ int xkey_keycode = event->xkey.keycode; ++ if ( XFilterEvent( event, keywidget->topLevelWidget()->winId() ) ) { ++ qt_ximComposingKeycode = xkey_keycode; // ### not documented in xlib ++ ++ // Cancel of the composition is realizable even if ++ // follwing codes don't exist ++#if 0 ++ if ( event->type != XKeyPress || ! (qt_xim_style & XIMPreeditCallbacks) ) ++ return TRUE; ++ ++ /* ++ * The Solaris htt input method will transform a ClientMessage ++ * event into a filtered KeyPress event, in which case our ++ * keywidget is still zero. ++ */ ++ QETWidget *widget = (QETWidget*)QWidget::find( (WId)event->xany.window ); ++ if ( ! keywidget ) { ++ keywidget = (QETWidget*)QWidget::keyboardGrabber(); ++ if ( keywidget ) { ++ grabbed = TRUE; ++ } else { ++ if ( focus_widget ) ++ keywidget = (QETWidget*)focus_widget; ++ if ( !keywidget ) { ++ if ( qApp->inPopupMode() ) // no focus widget, see if we have a popup ++ keywidget = (QETWidget*) qApp->activePopupWidget(); ++ else if ( widget ) ++ keywidget = (QETWidget*)widget->topLevelWidget(); ++ } ++ } ++ } ++ ++ /* ++ if the composition string has been emptied, we need to send ++ an IMEnd event. however, we have no way to tell if the user ++ has cancelled input, or if the user has accepted the ++ composition. ++ ++ so, we have to look for the next keypress and see if it is ++ the 'commit' key press (keycode == 0). if it is, we deliver ++ an IMEnd event with the final text, otherwise we deliver an ++ IMEnd with empty text (meaning the user has cancelled the ++ input). ++ */ ++ if ( composing && focusWidget && qt_compose_emptied ) { ++ XEvent event2; ++ bool found = FALSE; ++ if ( XCheckTypedEvent( QPaintDevice::x11AppDisplay(), ++ XKeyPress, &event2 ) ) { ++ if ( event2.xkey.keycode == 0 ) { ++ // found a key event with the 'commit' string ++ found = TRUE; ++ XPutBackEvent( QPaintDevice::x11AppDisplay(), &event2 ); ++ } ++ } ++ ++ if ( !found ) { ++ // no key event, so the user must have cancelled the composition ++ QIMEvent endevent( QEvent::IMEnd, QString::null, -1 ); ++ QApplication::sendEvent( focusWidget, &endevent ); ++ ++ focusWidget = 0; ++ } ++ ++ qt_compose_emptied = FALSE; ++ } ++#endif ++ return TRUE; ++ } else if ( focusWidget() ) { ++ if ( event->type == XKeyPress && event->xkey.keycode == 0 ) { ++ // input method has sent us a commit string ++ QCString data(513); ++ KeySym sym; // unused ++ Status status; // unused ++ QString inputText; ++ int count = lookupString( &(event->xkey), data, &sym, &status ); ++ if ( count > 0 ) ++ inputText = qt_input_mapper->toUnicode( data, count ); ++ ++ if ( ! ( qt_xim_style & XIMPreeditCallbacks ) || ! isComposing() ) { ++ // there is no composing state ++ sendIMEvent( QEvent::IMStart ); ++ } ++ ++ sendIMEvent( QEvent::IMEnd, inputText ); ++ resetClientState(); ++ ++ return TRUE; ++ } ++ } ++#endif // !QT_NO_XIM ++ ++ return FALSE; ++} ++ ++ ++void QXIMInputContext::sendIMEvent( QEvent::Type type, const QString &text, ++ int cursorPosition, int selLength ) ++{ ++ QInputContext::sendIMEvent( type, text, cursorPosition, selLength ); ++ if ( type == QEvent::IMCompose ) ++ composingText = text; ++} ++ ++ ++void QXIMInputContext::reset() ++{ ++#if !defined(QT_NO_XIM) ++ if ( focusWidget() && isComposing() && ! composingText.isNull() ) { ++#ifdef QT_XIM_DEBUG ++ qDebug("QXIMInputContext::reset: composing - sending IMEnd (empty) to %p", ++ focusWidget() ); ++#endif // QT_XIM_DEBUG ++ ++ QInputContext::reset(); ++ resetClientState(); ++ ++ char *mb = XmbResetIC((XIC) ic); ++ if (mb) ++ XFree(mb); ++ } ++#endif // !QT_NO_XIM ++} ++ ++ ++void QXIMInputContext::resetClientState() ++{ ++#if !defined(QT_NO_XIM) ++ composingText = QString::null; ++ if ( selectedChars.size() < 128 ) ++ selectedChars.resize( 128 ); ++ selectedChars.fill( 0 ); ++#endif // !QT_NO_XIM ++} ++ ++ ++void QXIMInputContext::close( const QString &errMsg ) ++{ ++ qDebug( errMsg ); ++ emit deletionRequested(); ++} ++ ++ ++bool QXIMInputContext::hasFocus() const ++{ ++ return ( focusWidget() != 0 ); ++} ++ ++ ++void QXIMInputContext::setMicroFocus(int x, int y, int, int h, QFont *f) ++{ ++ QWidget *widget = focusWidget(); ++ if ( qt_xim && widget ) { ++ QPoint p( x, y ); ++ QPoint p2 = widget->mapTo( widget->topLevelWidget(), QPoint( 0, 0 ) ); ++ p = widget->topLevelWidget()->mapFromGlobal( p ); ++ setXFontSet( f ? *f : widget->font() ); ++ setComposePosition(p.x(), p.y() + h); ++ setComposeArea(p2.x(), p2.y(), widget->width(), widget->height()); ++ } ++ ++} ++ ++void QXIMInputContext::mouseHandler( int , QEvent::Type type, ++ Qt::ButtonState button, ++ Qt::ButtonState) ++{ ++ if ( type == QEvent::MouseButtonPress || ++ type == QEvent::MouseButtonDblClick ) { ++ // Don't reset Japanese input context here. Japanese input ++ // context sometimes contains a whole paragraph and has ++ // minutes of lifetime different to ephemeral one in other ++ // languages. The input context should be survived until ++ // focused again. ++ if ( ! isPreeditPreservationEnabled() ) ++ reset(); ++ } ++} ++ ++void QXIMInputContext::setComposePosition(int x, int y) ++{ ++#if !defined(QT_NO_XIM) ++ if (qt_xim && ic) { ++ XPoint point; ++ point.x = x; ++ point.y = y; ++ ++ XVaNestedList preedit_attr = ++ XVaCreateNestedList(0, ++ XNSpotLocation, &point, ++ ++ (char *) 0); ++ XSetICValues((XIC) ic, XNPreeditAttributes, preedit_attr, (char *) 0); ++ XFree(preedit_attr); ++ } ++#endif // !QT_NO_XIM ++} ++ ++ ++void QXIMInputContext::setComposeArea(int x, int y, int w, int h) ++{ ++#if !defined(QT_NO_XIM) ++ if (qt_xim && ic) { ++ XRectangle rect; ++ rect.x = x; ++ rect.y = y; ++ rect.width = w; ++ rect.height = h; ++ ++ XVaNestedList preedit_attr = XVaCreateNestedList(0, ++ XNArea, &rect, ++ ++ (char *) 0); ++ XSetICValues((XIC) ic, XNPreeditAttributes, preedit_attr, (char *) 0); ++ XFree(preedit_attr); ++ } ++#endif ++} ++ ++ ++void QXIMInputContext::setXFontSet(const QFont &f) ++{ ++#if !defined(QT_NO_XIM) ++ if (font == f) return; // nothing to do ++ font = f; ++ ++ XFontSet fs = getFontSet(font); ++ if (fontset == fs) return; // nothing to do ++ fontset = fs; ++ ++ XVaNestedList preedit_attr = XVaCreateNestedList(0, XNFontSet, fontset, (char *) 0); ++ XSetICValues((XIC) ic, XNPreeditAttributes, preedit_attr, (char *) 0); ++ XFree(preedit_attr); ++#else ++ Q_UNUSED( f ); ++#endif ++} ++ ++ ++int QXIMInputContext::lookupString(XKeyEvent *event, QCString &chars, ++ KeySym *key, Status *status) const ++{ ++ int count = 0; ++ ++#if !defined(QT_NO_XIM) ++ if (qt_xim && ic) { ++ count = XmbLookupString((XIC) ic, event, chars.data(), ++ chars.size(), key, status); ++ ++ if ((*status) == XBufferOverflow ) { ++ chars.resize(count + 1); ++ count = XmbLookupString((XIC) ic, event, chars.data(), ++ chars.size(), key, status); ++ } ++ } ++ ++#endif // QT_NO_XIM ++ ++ return count; ++} ++ ++void QXIMInputContext::setFocus() ++{ ++#if !defined(QT_NO_XIM) ++ if ( qt_xim && ic ) ++ XSetICFocus((XIC) ic); ++#endif // !QT_NO_XIM ++} ++ ++void QXIMInputContext::unsetFocus() ++{ ++#if !defined(QT_NO_XIM) ++ if (qt_xim && ic) ++ XUnsetICFocus((XIC) ic); ++#endif // !QT_NO_XIM ++ ++ // Don't reset Japanese input context here. Japanese input context ++ // sometimes contains a whole paragraph and has minutes of ++ // lifetime different to ephemeral one in other languages. The ++ // input context should be survived until focused again. ++ if ( ! isPreeditPreservationEnabled() ) ++ reset(); ++} ++ ++ ++bool QXIMInputContext::isPreeditRelocationEnabled() ++{ ++ return ( language() == "ja" ); ++} ++ ++ ++bool QXIMInputContext::isPreeditPreservationEnabled() ++{ ++ return ( language() == "ja" ); ++} ++ ++ ++QString QXIMInputContext::identifierName() ++{ ++ // the name should be "xim" rather than "XIM" to be consistent ++ // with corresponding immodule of GTK+ ++ return "xim"; ++} ++ ++ ++QString QXIMInputContext::language() ++{ ++#if !defined(QT_NO_XIM) ++ if ( qt_xim ) { ++ QString locale( XLocaleOfIM( qt_xim ) ); ++ ++ if ( locale.startsWith( "zh" ) ) { ++ // Chinese language should be formed as "zh_CN", "zh_TW", "zh_HK" ++ _language = locale.left( 5 ); ++ } else { ++ // other languages should be two-letter ISO 639 language code ++ _language = locale.left( 2 ); ++ } ++ } ++#endif ++ return _language; ++} ++ ++#endif //QT_NO_IM +--- plugins/src/inputmethods/xim/xim.pro ++++ plugins/src/inputmethods/xim/xim.pro +@@ -0,0 +1,14 @@ ++TEMPLATE = lib ++TARGET = qxim ++DESTDIR = ../../../inputmethods ++ ++INCLUDEPATH += . ++CONFIG += qt warn_on debug plugin ++target.path += $$plugins.path/inputmethods ++INSTALLS += target ++ ++# Input ++HEADERS += qximinputcontext.h \ ++ qximinputcontextplugin.h ++SOURCES += qximinputcontext_x11.cpp \ ++ qximinputcontextplugin.cpp +--- plugins/src/src.pro ++++ plugins/src/src.pro +@@ -1,10 +1,10 @@ + TEMPLATE = subdirs + + shared { +- SUBDIRS *= accessible codecs imageformats sqldrivers styles ++ SUBDIRS *= accessible codecs imageformats inputmethods sqldrivers styles + embedded:SUBDIRS *= gfxdrivers + } + dll { +- SUBDIRS *= accessible codecs imageformats sqldrivers styles ++ SUBDIRS *= accessible codecs imageformats inputmethods sqldrivers styles + embedded:SUBDIRS *= gfxdrivers + } +--- README.immodule ++++ README.immodule +@@ -0,0 +1,107 @@ ++immodule for Qt ++ ++ ++* What is this? ++ ++ immodule for Qt is a modular, extensible input method subsystem for ++ Qt. ++ ++ This project brings functionality similar to the immodule for GTK+ ++ to the Qt library. The main goal of the project is to extend and ++ enhance the input method support in the Qt library, in order to ++ provide a modern and powerful multi-language input system. Our short ++ term goal is to make Qt (especially Qt/X11) "up-to-date" with other ++ X11-based toolkits such as GTK+. We are also focusing on what the ++ input method API should be for future Qt versions. ++ ++ See our webpage for further information. ++ ++ http://immodule-qt.freedesktop.org/ ++ ++ ++* About this release ++ ++ qt-x11-immodule-unified-qt3.3.3-20040910 is a stable release. Since ++ it breaks backward compatibility (source and binary) about immodule ++ with our previous releases qt-x11-immodule-unified-qt3.3.3-20040819 ++ and qt-x11-immodule-bc-qt3.3.2-20040623, optional immodule plugins ++ must be updated to proper version. See 'Optional immodule plugins' ++ section of our download page. ++ ++ http://immodule-qt.freedesktop.org/Software/ImmoduleQtDownload ++ ++ However, backward compatibility (source and binary) with normal Qt ++ 3.3.3 is kept in 'Binary Compatible' mode. ++ ++ ++* How to install ++ ++ After extract the Qt archive, perform following instructions ++ ++ cd qt-x11-free-3.3.3 ++ patch -p0 < qt-x11-immodule-unified-qt3.3.3-20040910.diff ++ ./make-symlinks.sh ++ ./configure ++ ++ Our patch provides following two configure options. Choose 'Binary ++ Compatible' for normal use. ++ ++ Build Qt with 'Binary Compatible' immodule support (default) ++ ++ configure -inputmethod ++ ++ Build Qt without binary compatibility, but supports more advanced ++ immodule extensions. It cannot be used with ordinary application ++ binaries (i.e. the option is for developers) ++ ++ configure -inputmethod -inputmethod-ext ++ ++ ++* How to use ++ ++ - See users manual of each input method plugins ++ ++ - Run qtconfig to choose your favorite XIM input style ++ ++ ++* Environment variables ++ ++ Some environment variables are available for expert users and system ++ integrators. The specification is preliminary and may be changed ++ without notification. Be careful. ++ ++ See following examples to use the variables. ++ ++ ++ - set "xim" input method as default ++ ++ export QT_IM_MODULE=xim ++ ++ ++ - set "simple" composing input method as default ++ ++ export QT_IM_MODULE=simple ++ ++ ++ - set "xim" input method as default, and disable input method ++ selection menu in the context menu ++ ++ export QT_IM_SWITCHER=imsw-none ++ export QT_IM_MODULE=xim ++ ++ ++ - set "xim" input method as default, and enable input method ++ selection menu in the context menu (default configuration) ++ ++ export QT_IM_SWITCHER=imsw-multi ++ export QT_IM_MODULE=xim ++ ++ ++ - set "iiimqcf" that has its own input method switching framework as ++ default, and disable input method selection menu in the context ++ menu. Such configuration is required by some system integrators to ++ provide unified user interface for global input method switching ++ over the desktop ++ ++ export QT_IM_SWITCHER=imsw-none ++ export QT_IM_MODULE=iiimqcf +--- src/inputmethod/qinputcontextfactory.cpp ++++ src/inputmethod/qinputcontextfactory.cpp +@@ -0,0 +1,186 @@ ++/**************************************************************************** ++** $Id: qinputcontextfactory.cpp,v 1.2 2004/06/20 18:43:11 daisuke Exp $ ++** ++** Implementation of QInputContextFactory class ++** ++** Created : 001103 ++** ++** Copyright (C) 1992-2002 Trolltech AS. All rights reserved. ++** ++** This file is part of the widgets module of the Qt GUI Toolkit. ++** ++** This file may be distributed under the terms of the Q Public License ++** as defined by Trolltech AS of Norway and appearing in the file ++** LICENSE.QPL included in the packaging of this file. ++** ++** This file may be distributed and/or modified under the terms of the ++** GNU General Public License version 2 as published by the Free Software ++** Foundation and appearing in the file LICENSE.GPL included in the ++** packaging of this file. ++** ++** Licensees holding valid Qt Enterprise Edition licenses may use this ++** file in accordance with the Qt Commercial License Agreement provided ++** with the Software. ++** ++** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ++** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ++** ++** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for ++** information about Qt Commercial License Agreements. ++** See http://www.trolltech.com/qpl/ for QPL licensing information. ++** See http://www.trolltech.com/gpl/ for GPL licensing information. ++** ++** Contact info@trolltech.com if any conditions of this licensing are ++** not clear to you. ++** ++**********************************************************************/ ++ ++#include "qinputcontextinterface_p.h" // up here for GCC 2.7.* compatibility ++#include "qinputcontextfactory.h" ++#include "qinputcontext.h" ++ ++#ifndef QT_NO_IM ++ ++#include "qapplication.h" ++ ++#ifdef QT_THREAD_SUPPORT ++#include ++#endif // QT_THREAD_SUPPORT ++ ++#include ++ ++#include "qcleanuphandler.h" ++#include ++#ifndef QT_NO_COMPONENT ++ ++ ++static QPluginManager *manager = 0; ++static QSingleCleanupHandler< QPluginManager > cleanup_manager; ++ ++static void create_manager() ++{ ++ if( manager ) // already created ++ return; ++ ++#ifdef QT_THREAD_SUPPORT ++ // protect manager creation ++ QMutexLocker locker( qt_global_mutexpool ? ++ qt_global_mutexpool->get( &manager ) : 0); ++ ++ // we check the manager pointer again to make sure that another thread ++ // has not created the manager before us. ++ ++ if ( manager ) // already created ++ return; ++#endif ++ ++ manager = new QPluginManager( IID_QInputContextFactory, QApplication::libraryPaths(), "/inputmethods", FALSE ); ++ ++ Q_CHECK_PTR( manager ); ++ cleanup_manager.set( &manager ); ++} ++ ++#endif //QT_NO_COMPONENT ++ ++ ++/*! ++ This function generates the input context that has the identifier ++ name which is in agreement with \a key. \a widget is the client ++ widget of QInputContext. \a widget may be null. ++*/ ++QInputContext *QInputContextFactory::create( const QString& key, QWidget *widget ) ++{ ++ QInputContext *ret = 0; ++ QString inputcontext = key; ++#ifndef QT_NO_COMPONENT ++ // make sure the manager is created ++ create_manager(); ++ ++ QInterfacePtr iface; ++ manager->queryInterface( inputcontext, &iface ); ++ ++ if ( iface ) { ++ ret = iface->create( inputcontext ); ++#ifdef Q_WS_X11 ++ if ( ret ) ++ ret->setHolderWidget( widget ); ++#endif ++ } ++#endif ++ return ret; ++} ++ ++ ++/*! ++ This function returns the list of the names input methods. ++ Only input methods included in default and placed under ++ $QTDIR/plugins/inputmethods are listed. ++*/ ++QStringList QInputContextFactory::keys() ++{ ++ QStringList list; ++#ifndef QT_NO_COMPONENT ++ // make sure the manager is created ++ create_manager(); ++ ++ list = manager->featureList(); ++#endif //QT_NO_COMPONENT ++ ++ return list; ++} ++ ++ ++QStringList QInputContextFactory::languages( const QString &key ) ++{ ++ QStringList result; ++#ifndef QT_NO_COMPONENT ++ // make sure the manager is created ++ create_manager(); ++ ++ QInterfacePtr iface; ++ manager->queryInterface( key, &iface ); ++ ++ if ( iface ) ++ result = iface->languages( key ); ++#endif //QT_NO_COMPONENT ++ ++ return result; ++} ++ ++ ++QString QInputContextFactory::displayName( const QString &key ) ++{ ++ QString result( "" ); ++#ifndef QT_NO_COMPONENT ++ // make sure the manager is created ++ create_manager(); ++ ++ QInterfacePtr iface; ++ manager->queryInterface( key, &iface ); ++ ++ if ( iface ) ++ result = iface->displayName( key ); ++#endif //QT_NO_COMPONENT ++ ++ return result; ++} ++ ++ ++QString QInputContextFactory::description( const QString &key ) ++{ ++ QString result( "" ); ++#ifndef QT_NO_COMPONENT ++ // make sure the manager is created ++ create_manager(); ++ ++ QInterfacePtr iface; ++ manager->queryInterface( key, &iface ); ++ ++ if ( iface ) ++ result = iface->description( key ); ++#endif //QT_NO_COMPONENT ++ ++ return result; ++} ++ ++#endif // QT_NO_IM +--- src/inputmethod/qinputcontextfactory.h ++++ src/inputmethod/qinputcontextfactory.h +@@ -0,0 +1,59 @@ ++/**************************************************************************** ++** $Id: qinputcontextfactory.h,v 1.1.1.1 2004/05/11 11:16:49 daisuke Exp $ ++** ++** Definition of QInputContextFactory class ++** ++** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ++** ++** This file is part of the widgets module of the Qt GUI Toolkit. ++** ++** This file may be distributed under the terms of the Q Public License ++** as defined by Trolltech AS of Norway and appearing in the file ++** LICENSE.QPL included in the packaging of this file. ++** ++** This file may be distributed and/or modified under the terms of the ++** GNU General Public License version 2 as published by the Free Software ++** Foundation and appearing in the file LICENSE.GPL included in the ++** packaging of this file. ++** ++** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition ++** licenses may use this file in accordance with the Qt Commercial License ++** Agreement provided with the Software. ++** ++** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ++** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ++** ++** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for ++** information about Qt Commercial License Agreements. ++** See http://www.trolltech.com/qpl/ for QPL licensing information. ++** See http://www.trolltech.com/gpl/ for GPL licensing information. ++** ++** Contact info@trolltech.com if any conditions of this licensing are ++** not clear to you. ++** ++**********************************************************************/ ++ ++#ifndef QINPUTCONTEXTFACTORY_H ++#define QINPUTCONTEXTFACTORY_H ++ ++#ifndef QT_H ++#include "qstringlist.h" ++#endif // QT_H ++ ++#ifndef QT_NO_IM ++ ++class QInputContext; ++class QWidget; ++ ++class Q_EXPORT QInputContextFactory ++{ ++public: ++ static QStringList keys(); ++ static QInputContext *create( const QString &key, QWidget *widget ); // should be a toplevel widget ++ static QStringList languages( const QString &key ); ++ static QString displayName( const QString &key ); ++ static QString description( const QString &key ); ++}; ++#endif //QT_NO_IM ++ ++#endif //QINPUTCONTEXTFACTORY_H +--- src/inputmethod/qinputcontextinterface_p.h ++++ src/inputmethod/qinputcontextinterface_p.h +@@ -0,0 +1,87 @@ ++/**************************************************************************** ++** $Id: qinputcontextinterface_p.h,v 1.2 2004/06/20 18:43:11 daisuke Exp $ ++** ++** ... ++** ++** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. ++** ++** This file is part of the widgets module of the Qt GUI Toolkit. ++** ++** This file may be distributed under the terms of the Q Public License ++** as defined by Trolltech AS of Norway and appearing in the file ++** LICENSE.QPL included in the packaging of this file. ++** ++** This file may be distributed and/or modified under the terms of the ++** GNU General Public License version 2 as published by the Free Software ++** Foundation and appearing in the file LICENSE.GPL included in the ++** packaging of this file. ++** ++** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition ++** licenses may use this file in accordance with the Qt Commercial License ++** Agreement provided with the Software. ++** ++** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ++** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ++** ++** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for ++** information about Qt Commercial License Agreements. ++** See http://www.trolltech.com/qpl/ for QPL licensing information. ++** See http://www.trolltech.com/gpl/ for GPL licensing information. ++** ++** Contact info@trolltech.com if any conditions of this licensing are ++** not clear to you. ++** ++**********************************************************************/ ++ ++#ifndef QINPUTCONTEXTINTERFACE_P_H ++#define QINPUTCONTEXTINTERFACE_P_H ++ ++// ++// W A R N I N G ++// ------------- ++// ++// This file is not part of the Qt API. This header file may ++// change from version to version without notice, or even be ++// removed. ++// ++// We mean it. ++// ++// ++ ++#ifndef QT_H ++#include ++#endif // QT_H ++ ++#ifndef QT_NO_IM ++#ifndef QT_NO_COMPONENT ++ ++class QWidget; ++class QInputContext; ++ ++// old version interface in qt-x11-immodule-bc-qt3.3.2-20040623.diff: ++// {6C2B9EDE-B63C-14c9-A729-3C7643739C4C} ++// ++// new version interface: ++// {a5f5c63d-e044-11d8-9718-000d6077a78d} ++// {b0bf3e59-e526-11d8-80da-000d6077a78d} ++// {9ef05c7f-0272-11d9-846c-000d6077a78d} ++ ++#ifndef IID_QInputContextFactory ++//#define IID_QInputContextFactory QUuid(0x6c2b9ede, 0xb63c, 0x14c9, 0xa7, 0x29, 0x3c, 0x76, 0x43, 0x73, 0x9c, 0x4c) ++//#define IID_QInputContextFactory QUuid(0xa5f5c63d, 0xe044, 0x11d8, 0x97, 0x18, 0x00, 0x0d, 0x60, 0x77, 0xa7, 0x8d) ++//#define IID_QInputContextFactory QUuid(0xb0bf3e59, 0xe526, 0x11d8, 0x80, 0xda, 0x00, 0x0d, 0x60, 0x77, 0xa7, 0x8d) ++#define IID_QInputContextFactory QUuid(0x9ef05c7f, 0x0272, 0x11d9, 0x84, 0x6c, 0x00, 0x0d, 0x60, 0x77, 0xa7, 0x8d) ++#endif ++ ++struct Q_EXPORT QInputContextFactoryInterface : public QFeatureListInterface ++{ ++ virtual QInputContext *create( const QString &key ) = 0; ++ virtual QStringList languages( const QString &key ) = 0; ++ virtual QString displayName( const QString &key ) = 0; ++ virtual QString description( const QString &key ) = 0; ++}; ++ ++#endif //QT_NO_COMPONENT ++#endif //QT_NO_IM ++ ++#endif //QINPUTCONTEXTINTERFACE_P_H +--- src/inputmethod/qinputcontextplugin.cpp ++++ src/inputmethod/qinputcontextplugin.cpp +@@ -0,0 +1,231 @@ ++/**************************************************************************** ++** $Id: qinputcontextplugin.cpp,v 1.2 2004/06/20 18:43:11 daisuke Exp $ ++** ++** Implementation of QInputContextPlugin class ++** ++** Created : 010920 ++** ++** Copyright (C) 2001 Trolltech AS. All rights reserved. ++** ++** This file is part of the widgets module of the Qt GUI Toolkit. ++** ++** This file may be distributed under the terms of the Q Public License ++** as defined by Trolltech AS of Norway and appearing in the file ++** LICENSE.QPL included in the packaging of this file. ++** ++** This file may be distributed and/or modified under the terms of the ++** GNU General Public License version 2 as published by the Free Software ++** Foundation and appearing in the file LICENSE.GPL included in the ++** packaging of this file. ++** ++** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition ++** licenses may use this file in accordance with the Qt Commercial License ++** Agreement provided with the Software. ++** ++** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ++** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ++** ++** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for ++** information about Qt Commercial License Agreements. ++** See http://www.trolltech.com/qpl/ for QPL licensing information. ++** See http://www.trolltech.com/gpl/ for GPL licensing information. ++** ++** Contact info@trolltech.com if any conditions of this licensing are ++** not clear to you. ++** ++**********************************************************************/ ++ ++#include "qinputcontextplugin.h" ++ ++#ifndef QT_NO_IM ++#ifndef QT_NO_COMPONENT ++ ++#include "qinputcontextinterface_p.h" ++ ++/*! ++ \class QInputContextPlugin qinputcontextplugin.h ++ \brief The QInputContextPlugin class provides an abstract base for custom QInputContext plugins. ++ \reentrant ++ \ingroup plugins ++ ++ The input context plugin is a simple plugin interface that makes it ++ easy to create custom input contexts that can be loaded dynamically ++ into applications. ++ ++ Writing a input context plugin is achieved by subclassing this ++ base class, reimplementing the pure virtual functions keys(), ++ create(), languages(), displayName() description() and exporting ++ the class with the \c Q_EXPORT_PLUGIN macro. See the \link ++ plugins-howto.html Qt Plugins documentation \endlink for details. ++ ++ \sa QInputContext ++*/ ++ ++/*! ++ \fn QStringList QInputContextPlugin::keys() const ++ ++ Returns the list of QInputContext keys this plugin provides. ++ ++ These keys are usually the class names of the custom input context ++ that are implemented in the plugin. ++ ++ Return value is the names to identify and specify input methods ++ for the input method switching mechanism and so on. The names have ++ to be consistent with QInputContext::identifierName(). The names ++ have to consist of ASCII characters only. See also ++ QInputContext::identifierName() for further information. ++ ++ \sa create(), displayName(), QInputContext::identifierName() ++*/ ++ ++/*! ++ \fn QInputContext* QInputContextPlugin::create( const QString& key ) ++ ++ Creates and returns a QInputContext instance for the input context key \a key. ++ The input context key is usually the class name of the required input method. ++ ++ \sa keys() ++*/ ++ ++/*! ++ \fn QStringList languages( const QString &key ) ++ ++ Returns what languages are supported by the QInputContext instance ++ specified by \a key. ++ ++ The languages are expressed as language code (e.g. "zh_CN", ++ "zh_TW", "zh_HK", "ja", "ko", ...). An input context that suports ++ multiple languages can return all supported languages as ++ QStringList. The name has to be consistent with ++ QInputContextPlugin::language(). ++ ++ This information may be used to optimize user interface. ++ ++ \sa QInputContext::language() ++*/ ++ ++/*! ++ \fn QString displayName( const QString &key ) ++ ++ Returns a user friendly i18n-ized name of the QInputContext ++ instance specified by \a key. This string may be appeared in a ++ menu and so on for users. ++ ++ There are two different names with different responsibility in the ++ input method domain. This function returns one of them. Another ++ name is called 'identifier name' to identify and specify input ++ methods for the input method switching mechanism and so on. ++ ++ Although tr( identifierName ) can provide user friendly i18n-ized ++ name without this function, the message catalog have to be managed ++ by Qt in the case. However, some sophisticated input method ++ framework manages their own message catalogs to provide this ++ i18n-ized name string. So we need this function rather than just ++ call tr() for identifier name. ++ ++ \sa keys(), QInputContext::identifierName() ++*/ ++ ++/*! ++ \fn QString description( const QString &key ) ++ ++ Returns a i18n-ized brief description of the QInputContext ++ instance specified by \a key. This string may be appeared in some ++ user interfaces. ++*/ ++ ++ ++ ++class QInputContextPluginPrivate : public QInputContextFactoryInterface ++{ ++public: ++ QInputContextPluginPrivate( QInputContextPlugin *p ) ++ : plugin( p ) ++ { ++ } ++ ++ virtual ~QInputContextPluginPrivate(); ++ ++ QRESULT queryInterface( const QUuid &iid, QUnknownInterface **iface ); ++ Q_REFCOUNT; ++ ++ QStringList featureList() const; ++ QInputContext *create( const QString &key ); ++ QStringList languages( const QString &key ); ++ QString displayName( const QString &key ); ++ QString description( const QString &key ); ++ ++private: ++ QInputContextPlugin *plugin; ++}; ++ ++QRESULT QInputContextPluginPrivate::queryInterface( const QUuid &iid, QUnknownInterface **iface ) ++{ ++ *iface = 0; ++ ++ if ( iid == IID_QUnknown ) ++ *iface = this; ++ else if ( iid == IID_QFeatureList ) ++ *iface = this; ++ else if ( iid == IID_QInputContextFactory ) ++ *iface = this; ++ else ++ return QE_NOINTERFACE; ++ ++ (*iface)->addRef(); ++ return QS_OK; ++} ++ ++QInputContextPluginPrivate::~QInputContextPluginPrivate() ++{ ++ delete plugin; ++} ++ ++QStringList QInputContextPluginPrivate::featureList() const ++{ ++ return plugin->keys(); ++} ++ ++QInputContext *QInputContextPluginPrivate::create( const QString &key ) ++{ ++ return plugin->create( key ); ++} ++ ++QStringList QInputContextPluginPrivate::languages( const QString &key ) ++{ ++ return plugin->languages( key ); ++} ++ ++QString QInputContextPluginPrivate::displayName( const QString &key ) ++{ ++ return plugin->displayName( key ); ++} ++ ++QString QInputContextPluginPrivate::description( const QString &key ) ++{ ++ return plugin->description( key ); ++} ++ ++ ++/*! ++ Constructs a input context plugin. This is invoked automatically by the ++ \c Q_EXPORT_PLUGIN macro. ++*/ ++QInputContextPlugin::QInputContextPlugin() ++ : QGPlugin( d = new QInputContextPluginPrivate( this ) ) ++{ ++} ++ ++/*! ++ Destroys the input context plugin. ++ ++ You never have to call this explicitly. Qt destroys a plugin ++ automatically when it is no longer used. ++*/ ++QInputContextPlugin::~QInputContextPlugin() ++{ ++ // don't delete d, as this is deleted by d ++} ++ ++#endif // QT_NO_COMPONENT ++#endif // QT_NO_IM +--- src/inputmethod/qinputcontextplugin.h ++++ src/inputmethod/qinputcontextplugin.h +@@ -0,0 +1,67 @@ ++/**************************************************************************** ++** $Id: qinputcontextplugin.h,v 1.2 2004/06/20 18:43:11 daisuke Exp $ ++** ++** Definition of QInputContextPlugin class ++** ++** Created : 010920 ++** ++** Copyright (C) 2001 Trolltech AS. All rights reserved. ++** ++** This file is part of the tools module of the Qt GUI Toolkit. ++** ++** This file may be distributed under the terms of the Q Public License ++** as defined by Trolltech AS of Norway and appearing in the file ++** LICENSE.QPL included in the packaging of this file. ++** ++** This file may be distributed and/or modified under the terms of the ++** GNU General Public License version 2 as published by the Free Software ++** Foundation and appearing in the file LICENSE.GPL included in the ++** packaging of this file. ++** ++** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition ++** licenses may use this file in accordance with the Qt Commercial License ++** Agreement provided with the Software. ++** ++** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ++** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ++** ++** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for ++** information about Qt Commercial License Agreements. ++** See http://www.trolltech.com/qpl/ for QPL licensing information. ++** See http://www.trolltech.com/gpl/ for GPL licensing information. ++** ++** Contact info@trolltech.com if any conditions of this licensing are ++** not clear to you. ++** ++**********************************************************************/ ++ ++#ifndef QINPUTCONTEXTPLUGIN_H ++#define QINPUTCONTEXTPLUGIN_H ++ ++#ifndef QT_H ++#include "qgplugin.h" ++#include "qstringlist.h" ++#endif // QT_H ++ ++#ifndef QT_NO_IM ++class QInputContext; ++class QInputContextPluginPrivate; ++ ++class Q_EXPORT QInputContextPlugin : public QGPlugin ++{ ++ Q_OBJECT ++public: ++ QInputContextPlugin(); ++ ~QInputContextPlugin(); ++ ++ virtual QStringList keys() const = 0; ++ virtual QInputContext *create( const QString &key ) = 0; ++ virtual QStringList languages( const QString &key ) = 0; ++ virtual QString displayName( const QString &key ) = 0; ++ virtual QString description( const QString &key ) = 0; ++ ++private: ++ QInputContextPluginPrivate *d; ++}; ++#endif // QT_NO_IM ++#endif // QINPUTCONTEXTPLUGIN_H +--- src/inputmethod/qt_inputmethod.pri ++++ src/inputmethod/qt_inputmethod.pri +@@ -0,0 +1,10 @@ ++# Qt inputmetod module ++ ++inputmethod { ++ INPUTMETHOD_P = inputmethod ++ HEADERS +=$$INPUTMETHOD_H/qinputcontextfactory.h \ ++ $$INPUTMETHOD_P/qinputcontextinterface_p.h \ ++ $$INPUTMETHOD_H/qinputcontextplugin.h ++ SOURCES +=$$INPUTMETHOD_CPP/qinputcontextfactory.cpp \ ++ $$INPUTMETHOD_CPP/qinputcontextplugin.cpp ++} +--- src/kernel/qapplication.cpp ++++ src/kernel/qapplication.cpp +@@ -3161,6 +3161,35 @@ + }; + } + ++#if !defined(QT_NO_IM) ++ // if this is one of the compressible IM events, do compression ++ else if ( event->type() == QEvent::IMCompose ) { ++ l->last(); ++ QPostEvent * cur = 0; ++ for ( ;; ) { ++ while ( (cur=l->current()) != 0 && ++ ( cur->receiver != receiver || ++ cur->event == 0 || ++ cur->event->type() != event->type() || ++ cur->event->type() != QEvent::IMStart ) ) ++ l->prev(); ++ if ( l->current() != 0 ) { ++ // IMCompose must not be compressed with another one ++ // beyond its IMStart boundary ++ if ( cur->event->type() == QEvent::IMStart ) { ++ break; ++ } else if ( cur->event->type() == QEvent::IMCompose ) { ++ QIMComposeEvent * e = (QIMComposeEvent *)(cur->event); ++ *e = *(QIMComposeEvent *)event; ++ delete event; ++ return; ++ } ++ } ++ break; ++ }; ++ } ++#endif ++ + // if no compression could be done, just append something + event->posted = TRUE; + QPostEvent * pe = new QPostEvent( receiver, event ); +@@ -3307,6 +3336,23 @@ + + void QApplication::removePostedEvents( QObject *receiver ) + { ++ removePostedEvents( receiver, 0 ); ++} ++ ++/*! ++ Removes all events that have the event type \a event_type posted ++ using postEvent() for \a receiver. ++ ++ The events are \e not dispatched, instead they are removed from the ++ queue. ++ ++ If \a event_type is 0, all the events are removed from the queue. ++ ++ \threadsafe ++*/ ++ ++void QApplication::removePostedEvents( QObject *receiver, int event_type ) ++{ + if ( !receiver ) + return; + +@@ -3325,18 +3371,24 @@ + // leave the QPostEvent objects; they'll be deleted by + // sendPostedEvents(). + QPostEventList * l = receiver->postedEvents; +- receiver->postedEvents = 0; + l->first(); + QPostEvent * pe; + while( (pe=l->current()) != 0 ) { +- if ( pe->event ) { +- pe->event->posted = FALSE; +- delete pe->event; +- pe->event = 0; ++ if ( !event_type || pe->event->type() == event_type ) { ++ if ( pe->event ) { ++ pe->event->posted = FALSE; ++ delete pe->event; ++ pe->event = 0; ++ } ++ l->remove(); ++ } else { ++ l->next(); + } +- l->remove(); + } +- delete l; ++ if ( !event_type || !l->count() ) { ++ receiver->postedEvents = 0; ++ delete l; ++ } + } + + +@@ -3521,6 +3573,8 @@ + focus_widget = 0; + #ifdef Q_WS_WIN + QInputContext::accept( tmp ); ++#elif defined(Q_WS_X11) ++ tmp->unfocusInputContext(); + #endif + QApplication::sendSpontaneousEvent( tmp, &out ); + } else if ( active_window ) { +--- src/kernel/qapplication.h ++++ src/kernel/qapplication.h +@@ -51,6 +51,9 @@ + class QStyle; + class QTranslator; + class QEventLoop; ++#if defined(Q_WS_X11) ++class QIMEvent; ++#endif + #if defined(Q_WS_QWS) + class QWSDecoration; + #endif +@@ -272,8 +275,19 @@ + virtual void saveState( QSessionManager& sm ); + #endif + #if defined(Q_WS_X11) ++#if !defined(QT_NO_IM_EXTENSIONS) ++ virtual QWidget *locateICHolderWidget( QWidget *w ); ++ virtual QWidgetList *icHolderWidgets(); ++ static void create_im(); ++ static void close_im(); ++#else ++ QWidget *locateICHolderWidget( QWidget *w ); ++ QWidgetList *icHolderWidgets(); + static void create_xim(); + static void close_xim(); ++#endif ++ static QString defaultInputMethod(); ++ void changeAllInputContext( const QString & ); + static bool x11_apply_settings(); + #endif + void wakeUpGuiThread(); +@@ -328,6 +342,12 @@ + friend void qt_init(int *, char **, QApplication::Type); + #endif + ++#if defined(Q_WS_X11) ++private slots: ++ void postIMEvent( QObject *receiver, QIMEvent *event ); ++#endif ++ ++private: + #ifdef QT_THREAD_SUPPORT + static QMutex *qt_mutex; + #endif // QT_THREAD_SUPPORT +@@ -377,9 +397,12 @@ + static QString* session_key; + bool is_session_restored; + #endif +-#if defined(Q_WS_X11) && !defined (QT_NO_STYLE ) ++#if defined(Q_WS_X11) ++#if !defined (QT_NO_STYLE) + static void x11_initialize_style(); + #endif ++ static QString defaultIM; // default input method's name in this application. ++#endif + + static QSize app_strut; + #ifndef QT_NO_COMPONENT +@@ -396,6 +419,7 @@ + + static bool sendSpontaneousEvent( QObject *receiver, QEvent *event ); + static void removePostedEvent( QEvent * ); ++ static void removePostedEvents( QObject *receiver, int event_type ); + + friend class QWidget; + friend class QETWidget; +--- src/kernel/qapplication_x11.cpp ++++ src/kernel/qapplication_x11.cpp +@@ -89,7 +89,9 @@ + #include "qfileinfo.h" + + // Input method stuff - UNFINISHED +-#include "qinputcontext_p.h" ++#ifndef QT_NO_IM ++#include "qinputcontext.h" ++#endif // QT_NO_IM + #include "qinternal_p.h" // shared double buffer cleanup + + #if defined(QT_THREAD_SUPPORT) +@@ -189,10 +191,9 @@ + static const char *mwGeometry = 0; // main widget geometry + static const char *mwTitle = 0; // main widget title + //Ming-Che 10/10 +-static char *ximServer = 0; // XIM Server will connect to ++char *qt_ximServer = 0; // XIM Server will connect to + static bool mwIconic = FALSE; // main widget iconified + //Ming-Che 10/10 +-static bool noxim = FALSE; // connect to xim or not + static Display *appDpy = 0; // X11 application display + static char *appDpyName = 0; // X11 display name + static bool appForeignDpy = FALSE; // we didn't create display +@@ -391,14 +392,14 @@ + + + #if !defined(QT_NO_XIM) +-XIM qt_xim = 0; ++//XIM qt_xim = 0; + XIMStyle qt_xim_style = 0; ++XIMStyle qt_xim_preferred_style = 0; + static XIMStyle xim_default_style = XIMPreeditCallbacks | XIMStatusNothing; +-static XIMStyle xim_preferred_style = 0; + #endif + +-static int composingKeycode=0; +-static QTextCodec * input_mapper = 0; ++int qt_ximComposingKeycode=0; ++QTextCodec * qt_input_mapper = 0; + + Q_EXPORT Time qt_x_time = CurrentTime; + Q_EXPORT Time qt_x_user_time = CurrentTime; +@@ -511,8 +512,7 @@ + void setWFlags( WFlags f ) { QWidget::setWFlags(f); } + void clearWFlags( WFlags f ) { QWidget::clearWFlags(f); } + bool translateMouseEvent( const XEvent * ); +- bool translateKeyEventInternal( const XEvent *, int& count, QString& text, int& state, char& ascii, int &code, +- QEvent::Type &type, bool willRepeat=FALSE ); ++ bool translateKeyEventInternal( const XEvent *, int& count, QString& text, int& state, char& ascii, int &code, QEvent::Type &type, bool willRepeat=FALSE, bool statefulTranslation=TRUE ); + bool translateKeyEvent( const XEvent *, bool grab ); + bool translatePaintEvent( const XEvent * ); + bool translateConfigEvent( const XEvent * ); +@@ -529,114 +529,120 @@ + + + // ************************************************************************ +-// X Input Method support ++// Input Method support + // ************************************************************************ + +-#if !defined(QT_NO_XIM) ++/*! ++ An identifier name of the default input method. ++*/ ++QString QApplication::defaultIM = "imsw-multi"; + +-#if defined(Q_C_CALLBACKS) +-extern "C" { +-#endif // Q_C_CALLBACKS + +-#ifdef USE_X11R6_XIM +- static void xim_create_callback(XIM /*im*/, +- XPointer /*client_data*/, +- XPointer /*call_data*/) +- { +- // qDebug("xim_create_callback"); +- QApplication::create_xim(); +- } ++/*! ++ This function handles the query about location of the widget ++ holding the QInputContext instance for widget \a w. + +- static void xim_destroy_callback(XIM /*im*/, +- XPointer /*client_data*/, +- XPointer /*call_data*/) +- { +- // qDebug("xim_destroy_callback"); +- QApplication::close_xim(); +- XRegisterIMInstantiateCallback(appDpy, 0, 0, 0, +- (XIMProc) xim_create_callback, 0); +- } ++ The input context is used for text input to widget \a w. By ++ default, it returns the top-level widget of \a w. + +-#endif // USE_X11R6_XIM ++ If you want to change the mapping of widget \w to QInputContext ++ instance, reimplement both this function and ++ QApplication::icHolderWidgets(). For example, suppose a tabbed web ++ browser. The browser should allocate a input context per tab ++ widget because users may switch the tabs and input a new text ++ during previous input contexts live. + +-#if defined(Q_C_CALLBACKS) ++ See also 'Sharing input context between text widgets' and 'Preedit ++ preservation' section of the class description of QInputContext. ++ ++ \sa QInputContext, icHolderWidgets() ++*/ ++QWidget *QApplication::locateICHolderWidget( QWidget *w ) ++{ ++ return w->topLevelWidget(); + } +-#endif // Q_C_CALLBACKS + +-#endif // QT_NO_XIM + ++/*! ++ This function returns all widgets holding QInputContext. + +-/*! \internal +- Creates the application input method. +- */ +-void QApplication::create_xim() ++ By default, This function returns top-level widgets. So if you ++ want to change the mapping of a widget to QInputContext instance, ++ you must override this function and locateICHolderWidget(). ++ ++ \sa locateICHolderWidget() ++*/ ++QWidgetList *QApplication::icHolderWidgets() + { +-#ifndef QT_NO_XIM +- qt_xim = XOpenIM( appDpy, 0, 0, 0 ); +- if ( qt_xim ) { ++ return QApplication::topLevelWidgets(); ++} + +-#ifdef USE_X11R6_XIM +- XIMCallback destroy; +- destroy.callback = (XIMProc) xim_destroy_callback; +- destroy.client_data = 0; +- if ( XSetIMValues( qt_xim, XNDestroyCallback, &destroy, (char *) 0 ) != 0 ) +- qWarning( "Xlib dosn't support destroy callback"); +-#endif // USE_X11R6_XIM +- +- XIMStyles *styles = 0; +- XGetIMValues(qt_xim, XNQueryInputStyle, &styles, (char *) 0, (char *) 0); +- if ( styles ) { +- int i; +- for ( i = 0; !qt_xim_style && i < styles->count_styles; i++ ) { +- if ( styles->supported_styles[i] == xim_preferred_style ) { +- qt_xim_style = xim_preferred_style; +- break; +- } +- } +- // if the preferred input style couldn't be found, look for +- // Nothing +- for ( i = 0; !qt_xim_style && i < styles->count_styles; i++ ) { +- if ( styles->supported_styles[i] == (XIMPreeditNothing | +- XIMStatusNothing) ) { +- qt_xim_style = XIMPreeditNothing | XIMStatusNothing; +- break; +- } +- } +- // ... and failing that, None. +- for ( i = 0; !qt_xim_style && i < styles->count_styles; i++ ) { +- if ( styles->supported_styles[i] == (XIMPreeditNone | +- XIMStatusNone) ) { +- qt_xim_style = XIMPreeditNone | XIMStatusNone; +- break; +- } +- } + +- // qDebug("QApplication: using im style %lx", qt_xim_style); +- XFree( (char *)styles ); +- } ++/*! ++ This function replaces all QInputContext instances in the ++ application. The function's argument is the identifier name of ++ the newly selected input method. ++*/ ++void QApplication::changeAllInputContext( const QString &identifierName ) ++{ ++ QWidgetList *list = qApp->icHolderWidgets(); ++ QWidgetListIt it(*list); ++ while(it.current()) { ++ it.current()->changeInputContext( identifierName ); ++ ++it; ++ } ++ delete list; ++ ++ // defaultIM = identifierName ; // Change of defaultIM -- default input method -- may be enabled. ++} + +- if ( qt_xim_style ) { + +-#ifdef USE_X11R6_XIM +- XUnregisterIMInstantiateCallback(appDpy, 0, 0, 0, +- (XIMProc) xim_create_callback, 0); +-#endif // USE_X11R6_XIM +- +- QWidgetList *list= qApp->topLevelWidgets(); +- QWidgetListIt it(*list); +- QWidget * w; +- while( (w=it.current()) != 0 ) { +- ++it; +- w->createTLSysExtra(); +- } +- delete list; +- } else { +- // Give up +- qWarning( "No supported input style found." +- " See InputMethod documentation."); +- close_xim(); +- } ++/*! ++ \internal ++ This is an internal function, you should never call this. ++ ++ \sa QInputContext::imEventGenerated() ++*/ ++void QApplication::postIMEvent( QObject *receiver, QIMEvent *event ) ++{ ++ if ( event->type() == QEvent::IMCompose ) { ++ // enable event compression to reduce preedit flicker on fast ++ // typing ++ postEvent( receiver, event ); ++ } else { ++ // cancel queued preedit update ++ if ( event->type() == QEvent::IMEnd ) ++ removePostedEvents( receiver, QEvent::IMCompose ); ++ ++ // to avoid event receiving order inversion between QKeyEvent ++ // and QIMEvent, we must send IMStart and IMEnd via ++ // sendEvent(). ++ sendEvent( receiver, event ); ++ delete event; + } ++} ++ ++ ++/*! ++ This function returns the identifier name of the default input ++ method in this Application. The value is identical to the value of ++ QApplication::defaultIM. ++*/ ++QString QApplication::defaultInputMethod() ++{ ++ return QApplication::defaultIM; ++} ++ ++ ++#if !defined(QT_NO_IM_EXTENSIONS) ++/*! \internal ++ Creates the application input method. ++*/ ++void QApplication::create_im() ++{ ++#ifndef QT_NO_XIM ++ if ( ! qt_xim_preferred_style ) // no configured input style, use the default ++ qt_xim_preferred_style = xim_default_style; + #endif // QT_NO_XIM + } + +@@ -644,6 +650,43 @@ + /*! \internal + Closes the application input method. + */ ++void QApplication::close_im() ++{ ++ QWidgetList *list = qApp->icHolderWidgets(); ++ QWidgetListIt it(*list); ++ while(it.current()) { ++ it.current()->destroyInputContext(); ++ ++it; ++ } ++ delete list; ++} ++ ++#else ++ ++/*! \internal ++ Creates the application input method. ++*/ ++void QApplication::create_xim() ++{ ++#ifndef QT_NO_XIM ++ if ( ! qt_xim_preferred_style ) // no configured input style, use the default ++ qt_xim_preferred_style = xim_default_style; ++#endif // QT_NO_XIM ++ ++ QWidgetList *list= qApp->topLevelWidgets(); ++ QWidgetListIt it(*list); ++ QWidget * w; ++ while( (w=it.current()) != 0 ) { ++ ++it; ++ w->createTLSysExtra(); ++ } ++ delete list; ++} ++ ++ ++ /*! \internal ++ Closes the application input method. ++ */ + void QApplication::close_xim() + { + #ifndef QT_NO_XIM +@@ -651,7 +694,10 @@ + // XCloseIM( qt_xim ); + // We prefer a less serious memory leak + +- qt_xim = 0; ++ // if ( qt_xim ) ++ // qt_xim = 0; ++ ++#endif // QT_NO_XIM + QWidgetList *list = qApp->topLevelWidgets(); + QWidgetListIt it(*list); + while(it.current()) { +@@ -659,9 +705,8 @@ + ++it; + } + delete list; +-#endif // QT_NO_XIM + } +- ++#endif + + /***************************************************************************** + Default X error handlers +@@ -1032,18 +1077,40 @@ + settings.readBoolEntry("/qt/useRtlExtensions", FALSE); + + #ifndef QT_NO_XIM +- if (xim_preferred_style == 0) { ++ if (qt_xim_preferred_style == 0) { + QString ximInputStyle = + settings.readEntry( "/qt/XIMInputStyle", + QObject::trUtf8( "On The Spot" ) ).lower(); + if ( ximInputStyle == "on the spot" ) +- xim_preferred_style = XIMPreeditCallbacks | XIMStatusNothing; ++ qt_xim_preferred_style = XIMPreeditCallbacks | XIMStatusNothing; + else if ( ximInputStyle == "over the spot" ) +- xim_preferred_style = XIMPreeditPosition | XIMStatusNothing; ++ qt_xim_preferred_style = XIMPreeditPosition | XIMStatusNothing; + else if ( ximInputStyle == "off the spot" ) +- xim_preferred_style = XIMPreeditArea | XIMStatusArea; ++ qt_xim_preferred_style = XIMPreeditArea | XIMStatusArea; + else if ( ximInputStyle == "root" ) +- xim_preferred_style = XIMPreeditNothing | XIMStatusNothing; ++ qt_xim_preferred_style = XIMPreeditNothing | XIMStatusNothing; ++ } ++#endif ++ ++#ifndef QT_NO_IM ++ /* ++ The identifier name of an input method is acquired from the ++ configuration file as a default. If a environment variable ++ "QT_IM_SWITCHER" is not empty it will overwrite the ++ configuration file. The "imsw-multi" becomes the default if the entry ++ is not configured. ++ */ ++ if ( getenv( "QT_IM_SWITCHER" ) ) ++ defaultIM = getenv( "QT_IM_SWITCHER" ); ++#ifndef QT_NO_IM_EXTENSIONS ++ else ++ defaultIM = settings.readEntry( "/qt/DefaultInputMethodSwitcher", "imsw-multi" ); ++#endif ++ ++ // defaultIM is restricted to be an IM-switcher. An IM-switcher ++ // has a 'imsw-' prefix ++ if ( ! defaultIM.startsWith( "imsw-" ) ) { ++ defaultIM = "imsw-multi"; + } + #endif + +@@ -1079,19 +1146,19 @@ + // Always use the locale codec, since we have no examples of non-local + // XIMs, and since we cannot get a sensible answer about the encoding + // from the XIM. +- input_mapper = QTextCodec::codecForLocale(); ++ qt_input_mapper = QTextCodec::codecForLocale(); + + } else { + if ( !qstricmp( data, "locale" ) ) +- input_mapper = QTextCodec::codecForLocale(); ++ qt_input_mapper = QTextCodec::codecForLocale(); + else +- input_mapper = QTextCodec::codecForName( data ); ++ qt_input_mapper = QTextCodec::codecForName( data ); + // make sure we have an input codec +- if( !input_mapper ) +- input_mapper = QTextCodec::codecForName( "ISO 8859-1" ); ++ if( !qt_input_mapper ) ++ qt_input_mapper = QTextCodec::codecForName( "ISO 8859-1" ); + } +- if ( input_mapper->mibEnum() == 11 ) // 8859-8 +- input_mapper = QTextCodec::codecForName( "ISO 8859-8-I"); ++ if ( qt_input_mapper->mibEnum() == 11 ) // 8859-8 ++ qt_input_mapper = QTextCodec::codecForName( "ISO 8859-8-I"); + if( data ) + XFree( (char *)data ); + } +@@ -1529,6 +1596,8 @@ + + #define XK_MISCELLANY + #define XK_LATIN1 ++#define XK_KOREAN ++#define XK_XKB_KEYS + #include + + // ### This should be static but it isn't because of the friend declaration +@@ -1619,10 +1688,7 @@ + //Ming-Che 10/10 + } else if ( arg == "-im" ) { + if ( ++i < argc ) +- ximServer = argv[i]; +- } else if ( arg == "-noxim" ) { +- noxim=TRUE; +- // ++ qt_ximServer = argv[i]; + } else if ( arg == "-iconic" ) { + mwIconic = !mwIconic; + } else if ( arg == "-ncols" ) { // xv and netscape use this name +@@ -1642,17 +1708,17 @@ + if ( ++i < argc ) { + QCString s = QCString(argv[i]).lower(); + if ( s == "onthespot" ) +- xim_preferred_style = XIMPreeditCallbacks | +- XIMStatusNothing; ++ qt_xim_preferred_style = XIMPreeditCallbacks | ++ XIMStatusNothing; + else if ( s == "overthespot" ) +- xim_preferred_style = XIMPreeditPosition | +- XIMStatusNothing; ++ qt_xim_preferred_style = XIMPreeditPosition | ++ XIMStatusNothing; + else if ( s == "offthespot" ) +- xim_preferred_style = XIMPreeditArea | +- XIMStatusArea; ++ qt_xim_preferred_style = XIMPreeditArea | ++ XIMStatusArea; + else if ( s == "root" ) +- xim_preferred_style = XIMPreeditNothing | +- XIMStatusNothing; ++ qt_xim_preferred_style = XIMPreeditNothing | ++ XIMStatusNothing; + } + #endif + } else if ( arg == "-cmap" ) { // xv uses this name +@@ -2100,34 +2166,13 @@ + QApplication::setFont( f ); + } + +-#ifndef QT_NO_XIM +- if ( ! xim_preferred_style ) // no configured input style, use the default +- xim_preferred_style = xim_default_style; +- +- qt_xim = 0; +- QString ximServerName(ximServer); +- if (ximServer) +- ximServerName.prepend("@im="); +- else +- ximServerName = ""; +- +- if ( !XSupportsLocale() ) +- qWarning("Qt: Locales not supported on X server"); +- +-#ifdef USE_X11R6_XIM +- else if ( XSetLocaleModifiers (ximServerName.ascii()) == 0 ) +- qWarning( "Qt: Cannot set locale modifiers: %s", +- ximServerName.ascii()); +- else if (! noxim) +- XRegisterIMInstantiateCallback(appDpy, 0, 0, 0, +- (XIMProc) xim_create_callback, 0); +-#else // !USE_X11R6_XIM +- else if ( XSetLocaleModifiers ("") == 0 ) +- qWarning("Qt: Cannot set locale modifiers"); +- else if (! noxim) +- QApplication::create_xim(); +-#endif // USE_X11R6_XIM +-#endif // QT_NO_XIM ++#if !defined(QT_NO_IM) ++#if !defined(QT_NO_IM_EXTENSIONS) ++ QApplication::create_im(); ++#else ++ QApplication::create_xim(); ++#endif ++#endif + + #if defined (QT_TABLET_SUPPORT) + int ndev, +@@ -2376,9 +2421,12 @@ + XCloseDevice( appDpy, devEraser ); + #endif + +-#if !defined(QT_NO_XIM) +- if ( qt_xim ) +- QApplication::close_xim(); ++#if !defined(QT_NO_IM) ++#if !defined(QT_NO_IM_EXTENSIONS) ++ QApplication::close_im(); ++#else ++ QApplication::close_xim(); ++#endif + #endif + + if ( qt_is_gui_used ) { +@@ -3237,77 +3285,59 @@ + } + } + +- int xkey_keycode = event->xkey.keycode; +- if ( XFilterEvent( event, +- keywidget ? keywidget->topLevelWidget()->winId() : None ) ) { +- if ( keywidget ) +- composingKeycode = xkey_keycode; // ### not documented in xlib +- +-#ifndef QT_NO_XIM +- if ( event->type != XKeyPress || ! (qt_xim_style & XIMPreeditCallbacks) ) +- return 1; +- +- /* +- * The Solaris htt input method will transform a ClientMessage +- * event into a filtered KeyPress event, in which case our +- * keywidget is still zero. +- */ +- if ( ! keywidget ) { +- keywidget = (QETWidget*)QWidget::keyboardGrabber(); +- if ( keywidget ) { +- grabbed = TRUE; +- } else { +- if ( focus_widget ) +- keywidget = (QETWidget*)focus_widget; +- if ( !keywidget ) { +- if ( inPopupMode() ) // no focus widget, see if we have a popup +- keywidget = (QETWidget*) activePopupWidget(); +- else if ( widget ) +- keywidget = (QETWidget*)widget->topLevelWidget(); +- } +- } +- } ++#ifndef QT_NO_IM ++ // Filtering input events by the input context. It has to be taken ++ // place before any other key event consumers such as eventfilters ++ // and accelerators because some input methods require quite ++ // various key combination and sequences. It often conflicts with ++ // accelerators and so on, so we must give the input context the ++ // filtering opportunity first to ensure all input methods work ++ // properly regardless of application design. + +- /* +- if the composition string has been emptied, we need to send +- an IMEnd event. however, we have no way to tell if the user +- has cancelled input, or if the user has accepted the +- composition. +- +- so, we have to look for the next keypress and see if it is +- the 'commit' key press (keycode == 0). if it is, we deliver +- an IMEnd event with the final text, otherwise we deliver an +- IMEnd with empty text (meaning the user has cancelled the +- input). +- */ +- QInputContext *qic = +- (QInputContext *) keywidget->topLevelWidget()->topData()->xic; +- extern bool qt_compose_emptied; // qinputcontext_x11.cpp +- if ( qic && qic->composing && qic->focusWidget && qt_compose_emptied ) { +- XEvent event2; +- bool found = FALSE; +- if ( XCheckTypedEvent( QPaintDevice::x11AppDisplay(), +- XKeyPress, &event2 ) ) { +- if ( event2.xkey.keycode == 0 ) { +- // found a key event with the 'commit' string +- found = TRUE; +- XPutBackEvent( QPaintDevice::x11AppDisplay(), &event2 ); +- } +- } ++#ifndef QT_NO_IM_EXTENSIONS ++ if( keywidget && keywidget->isEnabled() && keywidget->isInputMethodEnabled() ) { ++#else ++ if( keywidget && keywidget->isEnabled() ) { ++#endif ++ if( ( event->type==XKeyPress || event->type==XKeyRelease ) && ++ sm_blockUserInput ) // block user interaction during session management ++ return TRUE; + +- if ( !found ) { +- // no key event, so the user must have cancelled the composition +- QIMEvent endevent( QEvent::IMEnd, QString::null, -1 ); +- QApplication::sendEvent( qic->focusWidget, &endevent ); ++ // for XIM handling ++ QInputContext *qic = keywidget->getInputContext(); ++ if( qic && qic->x11FilterEvent( keywidget, event ) ) ++ return TRUE; + +- qic->focusWidget = 0; +- } ++ // filterEvent() accepts QEvent *event rather than preexpanded key ++ // event attribute values. This is intended to pass other IM-related ++ // events in future. The IM-related events are supposed as ++ // QWheelEvent, QTabletEvent and so on. Other non IM-related events ++ // should not be forwarded to input contexts to prevent weird event ++ // handling. ++ if ( ( event->type == XKeyPress || event->type == XKeyRelease ) ) { ++ int code = -1; ++ int count = 0; ++ int state; ++ char ascii = 0; ++ QEvent::Type type; ++ QString text; ++ ++ keywidget->translateKeyEventInternal( event, count, text, ++ state, ascii, code, type, ++ FALSE, FALSE ); ++ ++ // both key press/release is required for some complex ++ // input methods. don't eliminate anything. ++ QKeyEvent keyevent( type, code, ascii, state, text, FALSE, count ); + +- qt_compose_emptied = FALSE; ++ if( qic && qic->filterEvent( &keyevent ) ) ++ return TRUE; + } +-#endif // QT_NO_XIM +- +- return 1; ++ } else ++#endif // QT_NO_IM ++ { ++ if ( XFilterEvent( event, None ) ) ++ return TRUE; + } + + if ( qt_x11EventFilter(event) ) // send through app filter +@@ -3459,34 +3489,8 @@ + case XKeyRelease: + { + if ( keywidget && keywidget->isEnabled() ) { // should always exist +-#ifndef QT_NO_XIM +- QInputContext *qic = +- (QInputContext *) keywidget->topLevelWidget()->topData()->xic; +- +- if ((qt_xim_style & XIMPreeditCallbacks) && event->xkey.keycode == 0 && +- qic && qic->composing && qic->focusWidget) { +- // input method has sent us a commit string +- QCString data(513); +- KeySym sym; // unused +- Status status; // unused +- QString text; +- int count = qic->lookupString( &(event->xkey), data, +- &sym, &status ); +- if ( count > 0 ) +- text = input_mapper->toUnicode( data, count ); +- +- // qDebug( "sending IMEnd with %d chars", text.length() ); +- QIMEvent endevent( QEvent::IMEnd, text, -1 ); +- QApplication::sendEvent( qic->focusWidget, &endevent ); +- +- qic->focusWidget = 0; +- qic->text = QString::null; +- } else +-#endif // !QT_NO_XIM +- { +- // qDebug( "sending key event" ); +- keywidget->translateKeyEvent( event, grabbed ); +- } ++ // qDebug( "sending key event" ); ++ keywidget->translateKeyEvent( event, grabbed ); + } + break; + } +@@ -4781,6 +4785,92 @@ + 0x1005FF10, Qt::Key_F11, // hardcoded Sun F36 (labeled F11) + 0x1005FF11, Qt::Key_F12, // hardcoded Sun F37 (labeled F12) + ++ // International input method support keys ++ ++ // International & multi-key character composition ++ XK_Multi_key, Qt::Key_Multi_key, ++ XK_Codeinput, Qt::Key_Codeinput, ++ XK_SingleCandidate, Qt::Key_SingleCandidate, ++ XK_MultipleCandidate, Qt::Key_MultipleCandidate, ++ XK_PreviousCandidate, Qt::Key_PreviousCandidate, ++ ++ // Misc Functions ++ XK_Mode_switch, Qt::Key_Mode_switch, ++ //XK_script_switch, Qt::Key_script_switch, ++ XK_script_switch, Qt::Key_Mode_switch, ++ ++ // Japanese keyboard support ++ XK_Kanji, Qt::Key_Kanji, ++ XK_Muhenkan, Qt::Key_Muhenkan, ++ //XK_Henkan_Mode, Qt::Key_Henkan_Mode, ++ XK_Henkan_Mode, Qt::Key_Henkan, ++ XK_Henkan, Qt::Key_Henkan, ++ XK_Romaji, Qt::Key_Romaji, ++ XK_Hiragana, Qt::Key_Hiragana, ++ XK_Katakana, Qt::Key_Katakana, ++ XK_Hiragana_Katakana, Qt::Key_Hiragana_Katakana, ++ XK_Zenkaku, Qt::Key_Zenkaku, ++ XK_Hankaku, Qt::Key_Hankaku, ++ XK_Zenkaku_Hankaku, Qt::Key_Zenkaku_Hankaku, ++ XK_Touroku, Qt::Key_Touroku, ++ XK_Massyo, Qt::Key_Massyo, ++ XK_Kana_Lock, Qt::Key_Kana_Lock, ++ XK_Kana_Shift, Qt::Key_Kana_Shift, ++ XK_Eisu_Shift, Qt::Key_Eisu_Shift, ++ XK_Eisu_toggle, Qt::Key_Eisu_toggle, ++ //XK_Kanji_Bangou, Qt::Key_Kanji_Bangou, ++ //XK_Zen_Koho, Qt::Key_Zen_Koho, ++ //XK_Mae_Koho, Qt::Key_Mae_Koho, ++ XK_Kanji_Bangou, Qt::Key_Codeinput, ++ XK_Zen_Koho, Qt::Key_MultipleCandidate, ++ XK_Mae_Koho, Qt::Key_PreviousCandidate, ++ ++#ifdef XK_KOREAN ++ // Korean keyboard support ++ XK_Hangul, Qt::Key_Hangul, ++ XK_Hangul_Start, Qt::Key_Hangul_Start, ++ XK_Hangul_End, Qt::Key_Hangul_End, ++ XK_Hangul_Hanja, Qt::Key_Hangul_Hanja, ++ XK_Hangul_Jamo, Qt::Key_Hangul_Jamo, ++ XK_Hangul_Romaja, Qt::Key_Hangul_Romaja, ++ //XK_Hangul_Codeinput, Qt::Key_Hangul_Codeinput, ++ XK_Hangul_Codeinput, Qt::Key_Codeinput, ++ XK_Hangul_Jeonja, Qt::Key_Hangul_Jeonja, ++ XK_Hangul_Banja, Qt::Key_Hangul_Banja, ++ XK_Hangul_PreHanja, Qt::Key_Hangul_PreHanja, ++ XK_Hangul_PostHanja, Qt::Key_Hangul_PostHanja, ++ //XK_Hangul_SingleCandidate, Qt::Key_Hangul_SingleCandidate, ++ //XK_Hangul_MultipleCandidate, Qt::Key_Hangul_MultipleCandidate, ++ //XK_Hangul_PreviousCandidate, Qt::Key_Hangul_PreviousCandidate, ++ XK_Hangul_SingleCandidate, Qt::Key_SingleCandidate, ++ XK_Hangul_MultipleCandidate, Qt::Key_MultipleCandidate, ++ XK_Hangul_PreviousCandidate, Qt::Key_PreviousCandidate, ++ XK_Hangul_Special, Qt::Key_Hangul_Special, ++ //XK_Hangul_switch, Qt::Key_Hangul_switch, ++ XK_Hangul_switch, Qt::Key_Mode_switch, ++#endif // XK_KOREAN ++ ++ // dead keys ++ XK_dead_grave, Qt::Key_Dead_Grave, ++ XK_dead_acute, Qt::Key_Dead_Acute, ++ XK_dead_circumflex, Qt::Key_Dead_Circumflex, ++ XK_dead_tilde, Qt::Key_Dead_Tilde, ++ XK_dead_macron, Qt::Key_Dead_Macron, ++ XK_dead_breve, Qt::Key_Dead_Breve, ++ XK_dead_abovedot, Qt::Key_Dead_Abovedot, ++ XK_dead_diaeresis, Qt::Key_Dead_Diaeresis, ++ XK_dead_abovering, Qt::Key_Dead_Abovering, ++ XK_dead_doubleacute, Qt::Key_Dead_Doubleacute, ++ XK_dead_caron, Qt::Key_Dead_Caron, ++ XK_dead_cedilla, Qt::Key_Dead_Cedilla, ++ XK_dead_ogonek, Qt::Key_Dead_Ogonek, ++ XK_dead_iota, Qt::Key_Dead_Iota, ++ XK_dead_voiced_sound, Qt::Key_Dead_Voiced_Sound, ++ XK_dead_semivoiced_sound, Qt::Key_Dead_Semivoiced_Sound, ++ XK_dead_belowdot, Qt::Key_Dead_Belowdot, ++ XK_dead_hook, Qt::Key_Dead_Hook, ++ XK_dead_horn, Qt::Key_Dead_Horn, ++ + // Special multimedia keys + // currently only tested with MS internet keyboard + +@@ -4998,9 +5088,9 @@ + bool QETWidget::translateKeyEventInternal( const XEvent *event, int& count, + QString& text, + int& state, +- char& ascii, int& code, QEvent::Type &type, bool willRepeat ) ++ char& ascii, int& code, QEvent::Type &type, bool willRepeat, bool statefulTranslation ) + { +- QTextCodec *mapper = input_mapper; ++ QTextCodec *mapper = qt_input_mapper; + // some XmbLookupString implementations don't return buffer overflow correctly, + // so we increase the input buffer to allow for long strings... + // 256 chars * 2 bytes + 1 null-term == 513 bytes +@@ -5047,6 +5137,11 @@ + + if ( type == QEvent::KeyPress ) { + bool mb=FALSE; ++ // commit string handling is done by ++ // QXIMInputContext::x11FilterEvent() and are passed to ++ // widgets via QIMEvent regardless of XIM style, so the ++ // following code is commented out. ++#if 0 + if ( qt_xim ) { + QTLWExtra* xd = tlw->topData(); + QInputContext *qic = (QInputContext *) xd->xic; +@@ -5055,13 +5150,14 @@ + count = qic->lookupString(&xkeyevent, chars, &key, &status); + } + } ++#endif + if ( !mb ) { + count = XLookupString( &xkeyevent, + chars.data(), chars.size(), &key, 0 ); + } + if ( count && !keycode ) { +- keycode = composingKeycode; +- composingKeycode = 0; ++ keycode = qt_ximComposingKeycode; ++ qt_ximComposingKeycode = 0; + } + if ( key ) + keyDict->replace( keycode, (void*)key ); +@@ -5138,15 +5234,18 @@ + state = qt_x11_translateButtonState( keystate ); + + static int directionKeyEvent = 0; +- if ( qt_use_rtl_extensions && type == QEvent::KeyRelease ) { ++ static unsigned int lastWinId = 0; ++ if ( qt_use_rtl_extensions && type == QEvent::KeyRelease && statefulTranslation ) { + if (directionKeyEvent == Key_Direction_R || directionKeyEvent == Key_Direction_L ) { + type = QEvent::KeyPress; + code = directionKeyEvent; + chars[0] = 0; + directionKeyEvent = 0; ++ lastWinId = 0; + return TRUE; + } else { + directionKeyEvent = 0; ++ lastWinId = 0; + } + } + +@@ -5156,10 +5255,14 @@ + // (to figure out whether the Ctrl modifier is held while Shift is pressed, + // or Shift is held while Ctrl is pressed) since the 'state' doesn't tell + // us whether the modifier held is Left or Right. +- if (qt_use_rtl_extensions && type == QEvent::KeyPress) ++ if ( qt_use_rtl_extensions && type == QEvent::KeyPress && statefulTranslation ) + if (key == XK_Control_L || key == XK_Control_R || key == XK_Shift_L || key == XK_Shift_R) { +- if (!directionKeyEvent) ++ if (!directionKeyEvent) { + directionKeyEvent = key; ++ // This code exists in order to check that ++ // the event is occurred in the same widget. ++ lastWinId = winId(); ++ } + } else { + // this can no longer be a direction-changing accel. + // if any other key was pressed. +@@ -5173,7 +5276,7 @@ + // Qt keycodes between 128 and 255, but should rather use the + // QKeyEvent::text(). + // +- if ( key < 128 || (key < 256 && (!input_mapper || input_mapper->mibEnum()==4)) ) { ++ if ( key < 128 || (key < 256 && (!qt_input_mapper || qt_input_mapper->mibEnum()==4)) ) { + code = isprint((int)key) ? toupper((int)key) : 0; // upper-case key, if known + } else if ( key >= XK_F1 && key <= XK_F35 ) { + code = Key_F1 + ((int)key - XK_F1); // function keys +@@ -5224,8 +5327,8 @@ + chars[0] = 0; + } + +- if ( qt_use_rtl_extensions && type == QEvent::KeyPress ) { +- if ( directionKeyEvent ) { ++ if ( qt_use_rtl_extensions && type == QEvent::KeyPress && statefulTranslation ) { ++ if ( directionKeyEvent && lastWinId == winId() ) { + if ( key == XK_Shift_L && directionKeyEvent == XK_Control_L || + key == XK_Control_L && directionKeyEvent == XK_Shift_L ) { + directionKeyEvent = Key_Direction_L; +@@ -5403,8 +5506,34 @@ + translateKeyEventInternal( event, count, text, state, ascii, code, type ); + } + ++#ifndef QT_NO_IM ++ QInputContext *qic = getInputContext(); ++#endif ++ + // compress keys + if ( !text.isEmpty() && testWState(WState_CompressKeys) && ++#ifndef QT_NO_IM ++ // Ordinary input methods require discrete key events to work ++ // properly, so key compression has to be disabled when input ++ // context exists. ++ // ++ // And further consideration, some complex input method ++ // require all key press/release events discretely even if ++ // the input method awares of key compression and compressed ++ // keys are ordinary alphabets. For example, the uim project ++ // is planning to implement "combinational shift" feature for ++ // a Japanese input method, uim-skk. It will work as follows. ++ // ++ // 1. press "r" ++ // 2. press "u" ++ // 3. release both "r" and "u" in arbitrary order ++ // 4. above key sequence generates "Ru" ++ // ++ // Of course further consideration about other participants ++ // such as key repeat mechanism is required to implement such ++ // feature. ++ ! qic && ++#endif // QT_NO_IM + // do not compress keys if the key event we just got above matches + // one of the key ranges used to compute stopCompression + ! ( ( code >= Key_Escape && code <= Key_SysReq ) || +@@ -5463,7 +5592,12 @@ + + // autorepeat compression makes sense for all widgets (Windows + // does it automatically .... ) +- if ( event->type == XKeyPress && text.length() <= 1 ) { ++ if ( event->type == XKeyPress && text.length() <= 1 ++#ifndef QT_NO_IM ++ // input methods need discrete key events ++ && ! qic ++#endif// QT_NO_IM ++ ) { + XEvent dummy; + + for (;;) { +--- src/kernel/qevent.cpp ++++ src/kernel/qevent.cpp +@@ -732,6 +732,10 @@ + the result of a known key (e.g. it may be the result of a compose + sequence or a keyboard macro, or due to key event compression). + ++ Applications should not use the Qt latin 1 keycodes between 128 ++ and 255, but should rather use the QKeyEvent::text(). This is ++ mainly for compatibility. ++ + \sa QWidget::setKeyCompression() + */ + +--- src/kernel/qinputcontext.cpp ++++ src/kernel/qinputcontext.cpp +@@ -0,0 +1,856 @@ ++/**************************************************************************** ++** $Id: qinputcontext.cpp,v 1.6 2004/06/22 06:47:30 daisuke Exp $ ++** ++** Implementation of QInputContext class ++** ++** Copyright (C) 2000-2003 Trolltech AS. All rights reserved. ++** ++** This file is part of the kernel module of the Qt GUI Toolkit. ++** ++** This file may be distributed under the terms of the Q Public License ++** as defined by Trolltech AS of Norway and appearing in the file ++** LICENSE.QPL included in the packaging of this file. ++** ++** This file may be distributed and/or modified under the terms of the ++** GNU General Public License version 2 as published by the Free Software ++** Foundation and appearing in the file LICENSE.GPL included in the ++** packaging of this file. ++** ++** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition ++** licenses for Unix/X11 may use this file in accordance with the Qt Commercial ++** License Agreement provided with the Software. ++** ++** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ++** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ++** ++** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for ++** information about Qt Commercial License Agreements. ++** See http://www.trolltech.com/qpl/ for QPL licensing information. ++** See http://www.trolltech.com/gpl/ for GPL licensing information. ++** ++** Contact info@trolltech.com if any conditions of this licensing are ++** not clear to you. ++** ++**********************************************************************/ ++ ++//#define QT_NO_IM_PREEDIT_RELOCATION ++ ++#include "qinputcontext.h" ++ ++#ifndef QT_NO_IM ++ ++#include "qplatformdefs.h" ++ ++#include "qapplication.h" ++#include "qwidget.h" ++#include "qpopupmenu.h" ++ ++#include ++#include ++ ++class QInputContextPrivate ++{ ++public: ++ QInputContextPrivate() ++ : holderWidget( 0 ), composingWidget( 0 ), hasFocus( FALSE ), ++ isComposing( FALSE ) ++#if !defined(QT_NO_IM_PREEDIT_RELOCATION) ++ , preeditString( QString::null ), ++ cursorPosition( -1 ), selLength ( 0 ) ++#endif ++ {} ++ ++ QWidget *holderWidget; // widget to which QInputContext instance belongs. ++ QWidget *composingWidget; ++ bool hasFocus; ++ bool isComposing; ++ ++ void updateComposingState( const QString &text, ++ int newCursorPosition, int newSelLength ) { ++#if !defined(QT_NO_IM_PREEDIT_RELOCATION) ++ preeditString = text; ++ cursorPosition = newCursorPosition; ++ selLength = newSelLength; ++#endif ++ } ++ ++ void resetComposingState() { ++ isComposing = FALSE; ++#if !defined(QT_NO_IM_PREEDIT_RELOCATION) ++ preeditString = QString::null; ++ cursorPosition = -1; ++ selLength = 0; ++#endif ++ } ++ ++#if !defined(QT_NO_IM_PREEDIT_RELOCATION) ++ QString preeditString; ++ int cursorPosition; ++ int selLength; ++#endif ++}; ++ ++ ++// UPDATED COMMENT REQUIRED -- 2004-07-08 YamaKen ++/*! ++ \class QInputContext qinputcontext.h ++ \brief The QInputContext class abstracts the input method dependent data and composing state. ++ ++ \ingroup i18n ++ ++ An input method is responsible to input complex text that cannot ++ be inputted via simple keymap. It converts a sequence of input ++ events (typically key events) into a text string through the input ++ method specific converting process. The class of the processes are ++ widely ranging from simple finite state machine to complex text ++ translator that pools a whole paragraph of a text with text ++ editing capability to perform grammar and semantic analysis. ++ ++ To abstract such different input method specific intermediate ++ information, Qt offers the QInputContext as base class. The ++ concept is well known as 'input context' in the input method ++ domain. an input context is created for a text widget in response ++ to a demand. It is ensured that an input context is prepared for ++ an input method before input to a text widget. ++ ++ Multiple input contexts that is belonging to a single input method ++ may concurrently coexist. Suppose multi-window text editor. Each ++ text widget of window A and B holds different QInputContext ++ instance which contains different state information such as ++ partially composed text. ++ ++ \section1 Groups of functions: ++ ++ \table ++ \header \i Context \i Functions ++ ++ \row \i Receiving information \i ++ x11FilterEvent(), ++ filterEvent(), ++ setMicroFocus(), ++ mouseHandler() ++ ++ \row \i Sending back composed text \i ++ sendIMEvent(), ++ ++ \row \i State change notification \i ++ setFocus(), ++ unsetFocus(), ++ reset() ++ ++ \row \i Context information \i ++ identifierName(), ++ language(), ++ font(), ++ isComposing(), ++ ++ \endtable ++ ++ ++ \section1 Sharing input context between text widgets ++ ++ Any input context can be shared between several text widgets to ++ reduce resource consumption. In ideal case, each text widgets ++ should be allocated dedicated input context. But some complex ++ input contexts require slightly heavy resource such as 100 ++ kilobytes of memory. It prevents quite many text widgets from ++ being used concurrently. ++ ++ To resolve such problem, we can share an input context. There is ++ one 'input context holder widget' per text widgets that shares ++ identical input context. In this model, the holder widget owns the ++ shared input context. Other text widgets access the input context ++ via QApplication::locateICHolderWidget(). But the access ++ convention is transparently hidden into QWidget, so developers are ++ not required to aware of it. ++ ++ What developer should know is only the mapping function ++ QApplication::locateICHolderWidget(). It accepts a widget as ++ argument and returns its holder widget. Default implementation ++ returns the top-level widget of the widget as reasonable ++ assumption. But some applications should reimplement the function ++ to fit application specific usability. See ++ QApplication::locateICHolderWidget() for further information. ++ ++ ++ \section1 Preedit preservation ++ ++ As described above, input contexts have wide variety of amount of ++ the state information in accordance with belonging input ++ method. It is ranging from 2-3 keystrokes of sequence in ++ deterministic input methods to hundreds of keystrokes with ++ semantic text refinement in complex input methods such as ordinary ++ Japanese input method. The difference requires the different reset ++ policies in losing input focus. ++ ++ The former simple input method case, users will prefer resetting ++ the context to back to the neutral state when something ++ happened. Suppose a web browsing. The user scroll the page by ++ scrollbar after he or she has typed a half of the valid key ++ sequence into a text widget. In the case, the input context should ++ be reset in losing focus when he or she has dragged the ++ scrollbar. He or she will be confused if the input context is ++ still preserved until focused back to the text widget because he ++ or she will restart typing with first key of the sequence as a ++ habitual operation. ++ ++ On the other hand, we should choose completely different policy ++ for the latter complex input method case. Suppose same situation ++ as above but he or she is using a complex input method. In the ++ case, he or she will be angry if the input context has been lost ++ when he or she has dragged the scrollbar because the input context ++ contained a valuably composed text made up by considerable input ++ cost. So we should not reset the input context in the case. And ++ the input context should be preserved until focused back to the ++ text widget. This behavior is named as 'preedit preservation'. ++ ++ The two policies can be switched by calling or not calling reset() ++ in unsetFocus(). Default implementation of unsetFocus() calls ++ reset() to fit the simple input methods. The implementation is ++ expressed as 'preedit preservation is disabled'. ++ ++ ++ \section1 Preedit relocation ++ ++ Although the most case of the preedit preservation problem for ++ complex input methods is resolved as described above, there is a ++ special case. Suppose the case that matches all of the following ++ conditions. ++ ++ \list ++ ++ \i a input focus has been moved from a text widget to another text ++ widget directly ++ ++ \i the input context is shared between the two text widgets ++ ++ \i preedit preservation is enabled for the input context ++ ++ \endlist ++ ++ In the case, there are the following two requirements that ++ contradicts each other. The input context sharing causes it. ++ ++ \list ++ ++ \i the input context has to be reset to prepare to input to the ++ newly focused text widget ++ ++ \i the input context has to be preserved until focused back to the ++ previous text widget ++ ++ \endlist ++ ++ A intrinsic feature named 'preedit relocation' is available to ++ compromise the requirements. If the feature is enabled for the ++ input context, it is simply moved to the new text widget with the ++ preedit string. The user continues the input on the new text ++ widget, or relocate it to another text widget. The preedit of ++ previous text widget is automatically cleared to back to the ++ neutral state of the widget. ++ ++ This strange behavior is just a compromise. As described in ++ previous section, complex input method user should not be exposed ++ to the risk losing the input context because it contains valuable ++ long text made up with considerable input cost. The user will ++ immediately focus back to the previous text widget to continue the ++ input in the correct text widget if the preedit relocation ++ occurred. The feature is mainly existing as safety. ++ ++ The feature properly works even if the focus is moved as ++ following. Input method developers are not required to be aware of ++ the relocation protocol since QInputContext transparently handles ++ it. ++ ++ a text widget -> a non-text widget -> another text widget ++ ++ To enable the preedit relocation feature, the input context class ++ have to reimplement isPreeditRelocationEnabled() as returns TRUE. ++ The implementation requires that the preedit preservation is also ++ enabled since preedit relocation is a special case of the preedit ++ preservation. If the preedit relocation is disabled, the input ++ context is simply reset in the relocation case. ++ ++ ++ \section1 Input context instanciation ++ \section1 Input method switching ++ ++ \section1 Text widget implementor's guide ++ ++ Add following code fragment into createPopupMenu() to add input ++ method dependent submenus. ++ ++ \code ++ #ifndef QT_NO_IM ++ QInputContext *qic = getInputContext(); ++ if ( qic ) ++ qic->addMenusTo( popup ); ++ #endif ++ \endcode ++ ++ \sa QInputContextPlugin, QInputContextFactory, QApplication::locateICHolderWidget(), QApplication::defaultInputMethod() ++*/ ++ ++ ++/*! ++ Constructs an input context. ++ ++ holderWidget is set immediately after this constructor has been ++ returned on the X11 platform. ++*/ ++QInputContext::QInputContext( QObject *parent ) ++ : QObject( parent ) ++{ ++ d = new QInputContextPrivate; ++} ++ ++ ++/*! ++ Destroys the input context. ++*/ ++QInputContext::~QInputContext() ++{ ++ delete d; ++} ++ ++#if defined(Q_WS_X11) ++/*! ++ \internal ++ Returns the owner of this input context. Ordinary input methods ++ should not call this function directly to keep platform ++ independence and flexible configuration possibility. ++ ++ The return value may differ from focusWidget() if the input ++ context is shared between several text widgets. ++ ++ \sa setHolderWidget(), focusWidget() ++*/ ++QWidget *QInputContext::holderWidget() const ++{ ++ return d->holderWidget; ++} ++ ++/*! ++ \internal ++ Sets the owner of this input context. Ordinary input methods ++ must not call this function directly. ++ ++ \sa holderWidget() ++*/ ++void QInputContext::setHolderWidget( QWidget *w ) ++{ ++ d->holderWidget = w; ++} ++ ++/*! ++ \internal ++ Returns the widget that has an input focus for this input ++ context. Ordinary input methods should not call this function ++ directly to keep platform independence and flexible configuration ++ possibility. ++ ++ The return value may differ from holderWidget() if the input ++ context is shared between several text widgets. ++ ++ \sa setFocusWidget(), holderWidget() ++*/ ++QWidget *QInputContext::focusWidget() const ++{ ++ return d->hasFocus ? d->composingWidget : 0; ++} ++ ++ ++/*! ++ \internal ++ Sets the widget that has an input focus for this input ++ context. Ordinary input methods must not call this function ++ directly. ++ ++ \sa focusWidget() ++*/ ++void QInputContext::setFocusWidget( QWidget *w ) ++{ ++ if ( w ) { ++ bool isFocusingBack = ( w == d->composingWidget ); ++ bool isPreeditRelocation = ( ! isFocusingBack && isComposing() && ++ d->composingWidget ); ++ // invoke sendIMEventInternal() rather than sendIMEvent() to ++ // avoid altering the composing state ++ if ( isPreeditRelocation == TRUE ) { ++ // clear preedit of previously focused text ++ // widget. preserved preedit may be exist even if ++ // isPreeditRelocationEnabled() == FALSE. ++ sendIMEventInternal( QEvent::IMEnd ); ++ } ++ d->composingWidget = w; // changes recipient of QIMEvent ++ if ( isPreeditRelocation == TRUE ) { ++#if !defined(QT_NO_IM_PREEDIT_RELOCATION) ++ if ( isPreeditRelocationEnabled() ) { ++ // copy preedit state to the widget that gaining focus ++ sendIMEventInternal( QEvent::IMStart ); ++ sendIMEventInternal( QEvent::IMCompose, d->preeditString, ++ d->cursorPosition, d->selLength ); ++ } else ++#endif ++ { ++ // reset input context when the shared context has ++ // focused on another text widget ++ reset(); ++ } ++ } ++ } ++ d->hasFocus = w ? TRUE : FALSE; ++} ++ ++ ++/*! ++ \internal ++ This function is called from QWidget to keep input state ++ consistency. Ordinary input method must not call this function ++ directly. ++*/ ++void QInputContext::releaseComposingWidget( QWidget *w ) ++{ ++ if ( d->composingWidget == w ) { ++ d->composingWidget = 0; ++ d->hasFocus = FALSE; ++ } ++} ++#endif // Q_WS_X11 ++ ++/*! ++ \internal ++ This function can be reimplemented in a subclass as returning TRUE ++ if you want making your input method enable the preedit ++ relocation. See the description for preedit relocation of ++ QInputContext. ++ ++ /sa QInputContext ++*/ ++bool QInputContext::isPreeditRelocationEnabled() ++{ ++ return FALSE; ++} ++ ++/*! ++ This function indicates whether IMStart event had been sent to the ++ text widget. It is ensured that an input context can send IMCompose ++ or IMEnd event safely if this function returned TRUE. ++ ++ The state is automatically being tracked through sendIMEvent(). ++ ++ \sa sendIMEvent() ++*/ ++bool QInputContext::isComposing() const ++{ ++ return d->isComposing; ++} ++ ++ ++/*! ++ This function can be reimplemented in a subclass to filter input ++ events. ++ ++ Return TRUE if the \a event has been consumed. Otherwise, the ++ unfiltered \a event will be forwarded to widgets as ordinary ++ way. Although the input events have accept() and ignore() ++ methods, leave it untouched. ++ ++ \a event is currently restricted to QKeyEvent. But some input ++ method related events such as QWheelEvent or QTabletEvent may be ++ added in future. ++ ++ The filtering opportunity is always given to the input context as ++ soon as possible. It has to be taken place before any other key ++ event consumers such as eventfilters and accelerators because some ++ input methods require quite various key combination and ++ sequences. It often conflicts with accelerators and so on, so we ++ must give the input context the filtering opportunity first to ++ ensure all input methods work properly regardless of application ++ design. ++ ++ Ordinary input methods require discrete key events to work ++ properly, so Qt's key compression is always disabled for any input ++ contexts. ++ ++ \sa QKeyEvent, x11FilterEvent() ++*/ ++bool QInputContext::filterEvent( const QEvent *event ) ++{ ++ return FALSE; ++} ++ ++ ++/*! ++ \fn void QInputContext::deletionRequested() ++ ++ Emit this signal when a fatal error has been caused in the input ++ context. The input context will be deleted by the owner which is ++ usually the holder widget. ++*/ ++ ++/*! ++ \fn void QInputContext::imEventGenerated( QObject *receiver, QIMEvent *e ) ++ ++ \internal ++ This signal is emitted when the user has sent a QIMEvent through ++ sendIMEvent(). Ordinary input methods should not emit this signal ++ directly. ++ ++ \a receiver is a platform dependent destination of the \a e. ++ ++ \sa QIMEvent, sendIMEvent(), sendIMEventInternal(), ++*/ ++ ++/*! ++ \internal ++ Sends a QIMEvent to the client via imEventGenerated() ++ signal. Ordinary input method should not call this function ++ directly. ++ ++ \sa QIMEvent, QIMComposeEvent, sendIMEvent(), imEventGenerated() ++*/ ++void QInputContext::sendIMEventInternal( QEvent::Type type, ++ const QString &text, ++ int cursorPosition, int selLength ) ++{ ++ QObject *receiver = 0; ++ QIMEvent *event = 0; ++ ++#if defined(Q_WS_X11) ++ receiver = d->composingWidget; ++#elif defined(Q_WS_QWS) ++ // just a placeholder ++#endif ++ if ( ! receiver ) ++ return; ++ ++ if ( type == QEvent::IMStart ) { ++ qDebug( "sending IMStart with %d chars to %p", ++ text.length(), receiver ); ++ event = new QIMEvent( type, text, cursorPosition ); ++ } else if ( type == QEvent::IMEnd ) { ++ qDebug( "sending IMEnd with %d chars to %p, text=%s", ++ text.length(), receiver, (const char*)text.local8Bit() ); ++ event = new QIMEvent( type, text, cursorPosition ); ++ } else if ( type == QEvent::IMCompose ) { ++ qDebug( "sending IMCompose to %p with %d chars, cpos=%d, sellen=%d, text=%s", ++ receiver, text.length(), cursorPosition, selLength, ++ (const char*)text.local8Bit() ); ++ event = new QIMComposeEvent( type, text, cursorPosition, selLength ); ++ } ++ ++ if ( event ) ++ emit imEventGenerated( receiver, event ); ++} ++ ++ ++/*! ++ Call this function to send QIMEvent to the text widget. This ++ function constructs a QIMEvent based on the arguments and send it ++ to the appropriate widget. Ordinary input method should not ++ reimplement this function. ++ ++ \a type is either \c QEvent::IMStart or \c QEvent::IMCompose or \c ++ QEvent::IMEnd. You have to send a \c QEvent::IMStart to start ++ composing, then send several \c QEvent::IMCompose to update the ++ preedit of the widget, and finalize the composition with sending ++ \c QEvent::IMEnd. ++ ++ \c QEvent::IMStart should always be sent without arguments as: ++ \code ++ sendIMEvent( QEvent::IMStart ) ++ \endcode ++ ++ And \c QEvent::IMCompose can be sent without cursor: ++ \code ++ sendIMEvent( QEvent::IMCompose, QString( "a text" ) ) ++ \endcode ++ ++ Or optionally with cursor with \a cursorPosition: ++ \code ++ sendIMEvent( QEvent::IMCompose, QString( "a text with cursor" ), 12 ) ++ \endcode ++ Note that \a cursorPosition also specifies microfocus position. ++ ++ Or optionally with selection text: ++ \code ++ sendIMEvent( QEvent::IMCompose, QString( "a text with selection" ), 12, 9 ) ++ \endcode ++ \a cursorPosition and \a selLength must be within the \a text. The ++ \a cursorPosition also specifies microfocus position in the case: ++ ++ \c QEvent::IMEnd can be sent without arguments to terminate the ++ composition with null string: ++ \code ++ sendIMEvent( QEvent::IMEnd ) ++ \endcode ++ ++ Or optionally accepts \a text to commit a string: ++ \code ++ sendIMEvent( QEvent::IMEnd, QString( "a text" ) ) ++ \endcode ++ ++ \sa QIMEvent, QIMComposeEvent, setMicroFocus() ++*/ ++void QInputContext::sendIMEvent( QEvent::Type type, const QString &text, ++ int cursorPosition, int selLength ) ++{ ++#if defined(Q_WS_X11) ++ if ( !focusWidget() ) ++ return; ++#endif ++ ++ if ( type == QEvent::IMStart ) { ++ sendIMEventInternal( type, text, cursorPosition, selLength ); ++ d->isComposing = TRUE; ++ } else if ( type == QEvent::IMEnd ) { ++ d->resetComposingState(); ++ sendIMEventInternal( type, text, cursorPosition, selLength ); ++ } else if ( type == QEvent::IMCompose ) { ++ d->updateComposingState( text, cursorPosition, selLength ); ++ sendIMEventInternal( type, text, cursorPosition, selLength ); ++ } ++} ++ ++ ++/*! ++ This function can be reimplemented in a subclass to detect ++ that the input context has been focused on. ++ ++ The input context will receive input events through ++ x11FilterEvent() and filterEvent() after setFocus() until ++ unsetFocus() has been called. ++ ++ an input context is ensured that setFocus() is called exactly once ++ until unsetFocus() has been called even if preedit relocation has ++ occurred. This means that an input focus will survive between ++ several widgets that sharing the input context. ++ ++ On the X11 platform, focusWidget is already set before this ++ function has been called. ++ ++ \sa unsetFocus() ++*/ ++void QInputContext::setFocus() ++{ ++} ++ ++ ++/*! ++ This function can be reimplemented in a subclass to detect ++ that the input context has lost the focus. ++ ++ an input context is ensured that unsetFocus() is not called during ++ preedit relocation. This means that an input focus will survive ++ between several widgets that sharing the input context. ++ ++ Default implementation that calls reset() is sufficient for simple ++ input methods. You can override this function to alter the ++ behavior. For example, most Japanese input contexts should not be ++ reset on losing focus. The context sometimes contains a whole ++ paragraph and has minutes of lifetime different to ephemeral one ++ in other languages. The piled input context should be survived ++ until focused again since Japanese user naturally expects so. ++ ++ On the X11 platform, focusWidget is valid until this function has ++ been returned. ++ ++ \sa setFocus() ++*/ ++void QInputContext::unsetFocus() ++{ ++ reset(); ++} ++ ++ ++/*! ++ This function can be implemented in a subclass to handle ++ microfocus changes. ++ ++ 'microfocus' stands for the input method focus point in the ++ preedit (XIM "spot" point) for complex language input handling. It ++ can be used to place auxiliary GUI widgets such as candidate ++ selection window. ++ ++ \a x, \a y, \a w and \a h represents the position and size of the ++ cursor in the preedit string. \a f is the font on the location of ++ the cursor. ++*/ ++void QInputContext::setMicroFocus( int x, int y, int w, int h, QFont *f ) ++{ ++} ++ ++ ++/*! ++ This function can be reimplemented in a subclass to handle mouse ++ presses/releases/doubleclicks/moves within the preedit text. You ++ can use the function to implement mouse-oriented user interface ++ such as text selection or popup menu for candidate selection. ++ ++ The parameter \a x is the offset within the string that was sent ++ with the IMCompose event. The alteration boundary of \a x is ++ ensured as character boundary of preedit string accurately. ++ ++ \a type is either \c QEvent::MouseButtonPress or \c ++ QEvent::MouseButtonRelease or \c QEvent::MouseButtonDblClick or \c ++ QEvent::MouseButtonMove. Refer \a button and \a state to determine ++ what operation has performed. ++ ++ The method interface is imported from ++ QWSInputMethod::mouseHandler() of Qt/Embedded 2.3.7 and extended ++ for desktop system. ++ */ ++void QInputContext::mouseHandler( int x, QEvent::Type type, ++ Qt::ButtonState button, ++ Qt::ButtonState state ) ++{ ++ // Default behavior for simple ephemeral input contexts. Some ++ // complex input contexts should not be reset here. ++ if ( type == QEvent::MouseButtonPress || ++ type == QEvent::MouseButtonDblClick ) ++ reset(); ++} ++ ++ ++/*! ++ Returns the font of the current input widget ++ */ ++QFont QInputContext::font() const ++{ ++ if ( !focusWidget() ) ++ return QApplication::font(); //### absolutely last resort ++ ++ return focusWidget()->font(); ++} ++ ++ ++/*! ++ This function can be reimplemented in a subclass to reset the ++ state of the input method. ++ ++ This function is called by several widgets to reset input ++ state. For example, a text widget call this function before ++ inserting a text to make widget ready to accept a text. ++ ++ Default implementation is sufficient for simple input method. You ++ can override this function to reset external input method engines ++ in complex input method. In the case, call QInputContext::reset() ++ to ensure proper termination of inputting. ++ ++ You must not send any QIMEvent except empty IMEnd event using ++ QInputContext::reset() at reimplemented reset(). It will break ++ input state consistency. ++*/ ++void QInputContext::reset() ++{ ++ if ( isComposing() ) ++ sendIMEvent( QEvent::IMEnd ); ++} ++ ++ ++/*! ++ This function must be implemented in any subclasses to return the ++ identifier name of the input method. ++ ++ Return value is the name to identify and specify input methods for ++ the input method switching mechanism and so on. The name has to be ++ consistent with QInputContextPlugin::keys(). The name has to ++ consist of ASCII characters only. ++ ++ There are two different names with different responsibility in the ++ input method domain. This function returns one of them. Another ++ name is called 'display name' that stands for the name for ++ endusers appeared in a menu and so on. ++ ++ \sa QInputContextPlugin::keys(), QInputContextPlugin::displayName() ++*/ ++QString QInputContext::identifierName() ++{ ++ return ""; ++} ++ ++ ++/*! ++ This function must be implemented in any subclasses to return a ++ language code (e.g. "zh_CN", "zh_TW", "zh_HK", "ja", "ko", ...) ++ of the input context. If the input context can handle multiple ++ languages, return the currently used one. The name has to be ++ consistent with QInputContextPlugin::language(). ++ ++ This information will be used by language tagging feature in ++ QIMEvent. It is required to distinguish unified han characters ++ correctly. It enables proper font and character code ++ handling. Suppose CJK-awared multilingual web browser ++ (that automatically modifies fonts in CJK-mixed text) and XML editor ++ (that automatically inserts lang attr). ++ ++ \sa QInputContextPlugin::language() ++*/ ++QString QInputContext::language() ++{ ++ return ""; ++} ++ ++ ++#if (QT_VERSION-0 >= 0x040000) ++/*! ++ This is a preliminary interface for Qt4 ++ */ ++QList QInputContext::actions() ++{ ++} ++#else ++/*! ++ This function can be reimplemented in a subclass to provide input ++ method dependent popup menus. Return 0 if the menus are ++ unnecessary. ++ ++ Ownership of the object and children are transferred to the ++ caller, and the result must not be called ++ setAutoDelete(). QInputContextMenu::title is used for label text ++ of the popup menu as submenu. ++ ++ \sa addMenusTo() ++*/ ++QPtrList *QInputContext::menus() ++{ ++ return 0; ++} ++#endif ++ ++/*! ++ Appends input method dependent submenus into \a popup. A separator ++ is also inserted into \a popup if \a action is InsertSeparator. ++ ++ This is an utility function only for convenience in limited ++ situation. This function is used by input context owner such as ++ text widgets to add the submenus to its own context menu. If you ++ want to insert the submenus in more flexible way, use ++ QInputContext::menus() manually. \a popup is not restricted to ++ context menu of a text widget. For example, the owner may be a ++ input method menu of Qtopia taskbar in Qt/Embedded platform. ++ ++ \sa menus(), QInputContextMenu::Action ++*/ ++void QInputContext::addMenusTo( QPopupMenu *popup, QInputContextMenu::Action action ) ++{ ++ if ( ! popup ) ++ return; ++ ++ QPtrList *imMenus = menus(); ++ if ( imMenus ) { ++ if ( action == QInputContextMenu::InsertSeparator ) ++ popup->insertSeparator(); ++ for ( QPtrList::Iterator it = imMenus->begin(); ++ it != imMenus->end(); ++ ++it ) { ++ QInputContextMenu *imMenu = *it; ++ popup->insertItem( imMenu->title, imMenu->popup ); ++ } ++ imMenus->clear(); ++ delete imMenus; ++ } ++} ++ ++#endif //Q_NO_IM +--- src/kernel/qinputcontext.h ++++ src/kernel/qinputcontext.h +@@ -0,0 +1,143 @@ ++/**************************************************************************** ++** $Id: qinputcontext.h,v 1.8 2004/06/22 06:47:30 daisuke Exp $ ++** ++** Definition of QInputContext ++** ++** Copyright (C) 1992-2002 Trolltech AS. All rights reserved. ++** ++** This file is part of the kernel module of the Qt GUI Toolkit. ++** ++** This file may be distributed under the terms of the Q Public License ++** as defined by Trolltech AS of Norway and appearing in the file ++** LICENSE.QPL included in the packaging of this file. ++** ++** This file may be distributed and/or modified under the terms of the ++** GNU General Public License version 2 as published by the Free Software ++** Foundation and appearing in the file LICENSE.GPL included in the ++** packaging of this file. ++** ++** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition ++** licenses may use this file in accordance with the Qt Commercial License ++** Agreement provided with the Software. ++** ++** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ++** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ++** ++** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for ++** information about Qt Commercial License Agreements. ++** See http://www.trolltech.com/qpl/ for QPL licensing information. ++** See http://www.trolltech.com/gpl/ for GPL licensing information. ++** ++** Contact info@trolltech.com if any conditions of this licensing are ++** not clear to you. ++** ++**********************************************************************/ ++ ++#ifndef QINPUTCONTEXT_H ++#define QINPUTCONTEXT_H ++ ++#ifndef QT_NO_IM ++ ++#ifndef QT_H ++#include "qobject.h" ++#include "qglobal.h" ++#include "qevent.h" ++#include "qstring.h" ++#if (QT_VERSION-0 >= 0x040000) ++#include "qlist.h" ++#include "qaction.h" ++#else ++#include "qptrlist.h" ++#endif ++#endif ++ ++class QWidget; ++class QFont; ++class QPopupMenu; ++class QInputContextPrivate; ++ ++ ++struct QInputContextMenu { ++ enum Action { ++ NoSeparator, ++ InsertSeparator ++ }; ++#if !(QT_VERSION-0 >= 0x040000) ++ QString title; ++ QPopupMenu *popup; ++#endif ++}; ++ ++ ++class QInputContext : public QObject ++{ ++ Q_OBJECT ++public: ++ QInputContext( QObject *parent = 0 ); ++ virtual ~QInputContext(); ++ ++ virtual QString identifierName(); ++ virtual QString language(); ++ ++#if defined(Q_WS_X11) ++ virtual bool x11FilterEvent( QWidget *keywidget, XEvent *event ); ++#endif // Q_WS_X11 ++ virtual bool filterEvent( const QEvent *event ); ++ virtual void reset(); ++ ++ virtual void setFocus(); ++ virtual void unsetFocus(); ++ virtual void setMicroFocus( int x, int y, int w, int h, QFont *f = 0 ); ++ virtual void mouseHandler( int x, QEvent::Type type, ++ Qt::ButtonState button, Qt::ButtonState state ); ++ virtual QFont font() const; ++ virtual bool isComposing() const; ++ virtual bool isPreeditRelocationEnabled(); ++ ++#if (QT_VERSION-0 >= 0x040000) ++ virtual QList actions(); ++ void addActionsTo( QMenu *menu, QInputContextMenu::Action action = QInputContextMenu::InsertSeparator ); ++#else ++ virtual QPtrList *menus(); ++ void addMenusTo( QPopupMenu *popup, QInputContextMenu::Action action = QInputContextMenu::InsertSeparator ); ++#endif ++ ++#if defined(Q_WS_X11) ++ // these functions are not recommended for ordinary use ++ virtual QWidget *focusWidget() const; ++ virtual QWidget *holderWidget() const; ++ ++ // these functions must not be used by ordinary input method ++ virtual void setFocusWidget( QWidget *w ); ++ virtual void setHolderWidget( QWidget *w ); ++ virtual void releaseComposingWidget( QWidget *w ); ++#endif ++ ++signals: ++ void deletionRequested(); ++ void imEventGenerated( QObject *receiver, QIMEvent *e ); ++ ++protected: ++ virtual void sendIMEvent( QEvent::Type type, ++ const QString &text = QString::null, ++ int cursorPosition = -1, int selLength = 0 ); ++ ++private: ++ void sendIMEventInternal( QEvent::Type type, ++ const QString &text = QString::null, ++ int cursorPosition = -1, int selLength = 0 ); ++ ++ QInputContextPrivate *d; ++ ++ friend class QWidget; ++ friend class QInputContextFactory; ++ ++private: // Disabled copy constructor and operator= ++ QInputContext( const QInputContext & ); ++ QInputContext &operator=( const QInputContext & ); ++ ++}; ++ ++#endif //Q_NO_IM ++ ++#endif // QINPUTCONTEXT_H +--- src/kernel/qinputcontext_x11.cpp ++++ src/kernel/qinputcontext_x11.cpp +@@ -33,500 +33,38 @@ + ** + **********************************************************************/ + ++#include "qinputcontext.h" ++ ++#ifndef QT_NO_IM ++ + #include "qplatformdefs.h" + + #include "qapplication.h" + #include "qwidget.h" +-#include "qinputcontext_p.h" +- +-#include +-#include + ++#include "qt_x11_p.h" + +-bool qt_compose_emptied = FALSE; ++/*! ++ This function may be overridden only if input method is depending ++ on X11 and you need raw XEvent. Otherwise, this function must not. + +-#if !defined(QT_NO_XIM) ++ This function is designed to filter raw key events for XIM, but ++ other input methods may use this to implement some special ++ features such as distinguishing Shift_L and Shift_R. + +-#define XK_MISCELLANY +-#define XK_LATIN1 +-#include ++ Return TRUE if the \a event has been consumed. Otherwise, the ++ unfiltered \a event will be translated into QEvent and forwarded ++ to filterEvent(). Filtering at both x11FilterEvent() and ++ filterEvent() in single input method is allowed. + +-// #define QT_XIM_DEBUG ++ \a keywidget is a client widget into which a text is inputted. \a ++ event is inputted XEvent. + +-// from qapplication_x11.cpp +-extern XIM qt_xim; +-extern XIMStyle qt_xim_style; +- +-/* The cache here is needed, as X11 leaks a few kb for every +- XFreeFontSet call, so we avoid creating and deletion of fontsets as +- much as possible ++ \sa filterEvent() + */ +-static XFontSet fontsetCache[8] = { 0, 0, 0, 0, 0, 0, 0, 0 }; +-static int fontsetRefCount = 0; +- +-static const char * const fontsetnames[] = { +- "-*-fixed-medium-r-*-*-16-*,-*-*-medium-r-*-*-16-*", +- "-*-fixed-medium-i-*-*-16-*,-*-*-medium-i-*-*-16-*", +- "-*-fixed-bold-r-*-*-16-*,-*-*-bold-r-*-*-16-*", +- "-*-fixed-bold-i-*-*-16-*,-*-*-bold-i-*-*-16-*", +- "-*-fixed-medium-r-*-*-24-*,-*-*-medium-r-*-*-24-*", +- "-*-fixed-medium-i-*-*-24-*,-*-*-medium-i-*-*-24-*", +- "-*-fixed-bold-r-*-*-24-*,-*-*-bold-r-*-*-24-*", +- "-*-fixed-bold-i-*-*-24-*,-*-*-bold-i-*-*-24-*" +-}; +- +-static XFontSet getFontSet( const QFont &f ) +-{ +- int i = 0; +- if (f.italic()) +- i |= 1; +- if (f.bold()) +- i |= 2; +- +- if ( f.pointSize() > 20 ) +- i += 4; +- +- if ( !fontsetCache[i] ) { +- Display* dpy = QPaintDevice::x11AppDisplay(); +- int missCount; +- char** missList; +- fontsetCache[i] = XCreateFontSet(dpy, fontsetnames[i], &missList, &missCount, 0); +- if(missCount > 0) +- XFreeStringList(missList); +- if ( !fontsetCache[i] ) { +- fontsetCache[i] = XCreateFontSet(dpy, "-*-fixed-*-*-*-*-16-*", &missList, &missCount, 0); +- if(missCount > 0) +- XFreeStringList(missList); +- if ( !fontsetCache[i] ) +- fontsetCache[i] = (XFontSet)-1; +- } +- } +- return (fontsetCache[i] == (XFontSet)-1) ? 0 : fontsetCache[i]; +-} +- +- +-#ifdef Q_C_CALLBACKS +-extern "C" { +-#endif // Q_C_CALLBACKS +- +- static int xic_start_callback(XIC, XPointer client_data, XPointer) { +- QInputContext *qic = (QInputContext *) client_data; +- if (! qic) { +-#ifdef QT_XIM_DEBUG +- qDebug("compose start: no qic"); +-#endif // QT_XIM_DEBUG +- +- return 0; +- } +- +- qic->composing = TRUE; +- qic->text = QString::null; +- qic->focusWidget = 0; +- +- if ( qic->selectedChars.size() < 128 ) +- qic->selectedChars.resize( 128 ); +- qic->selectedChars.fill( 0 ); +- +-#ifdef QT_XIM_DEBUG +- qDebug("compose start"); +-#endif // QT_XIM_DEBUG +- +- return 0; +- } +- +- static int xic_draw_callback(XIC, XPointer client_data, XPointer call_data) { +- QInputContext *qic = (QInputContext *) client_data; +- if (! qic) { +-#ifdef QT_XIM_DEBUG +- qDebug("compose event: invalid compose event %p", qic); +-#endif // QT_XIM_DEBUG +- +- return 0; +- } +- +- bool send_imstart = FALSE; +- if (qApp->focusWidget() != qic->focusWidget && qic->text.isEmpty()) { +- if (qic->focusWidget) { +-#ifdef QT_XIM_DEBUG +- qDebug( "sending IMEnd (empty) to %p", qic->focusWidget ); +-#endif // QT_XIM_DEBUG +- +- QIMEvent endevent(QEvent::IMEnd, QString::null, -1); +- QApplication::sendEvent(qic->focusWidget, &endevent); +- } +- +- qic->text = QString::null; +- qic->focusWidget = qApp->focusWidget(); +- qic->composing = FALSE; +- +- if ( qic->selectedChars.size() < 128 ) +- qic->selectedChars.resize( 128 ); +- qic->selectedChars.fill( 0 ); +- +- if (qic->focusWidget) { +- qic->composing = TRUE; +- send_imstart = TRUE; +- } +- } +- +- if (! qic->composing || ! qic->focusWidget) { +-#ifdef QT_XIM_DEBUG +- qDebug("compose event: invalid compose event %d %p", +- qic->composing, qic->focusWidget); +-#endif // QT_XIM_DEBUG +- +- return 0; +- } +- +- if ( send_imstart ) { +-#ifdef QT_XIM_DEBUG +- qDebug( "sending IMStart to %p", qic->focusWidget ); +-#endif // QT_XIM_DEBUG +- +- qt_compose_emptied = FALSE; +- QIMEvent startevent(QEvent::IMStart, QString::null, -1); +- QApplication::sendEvent(qic->focusWidget, &startevent); +- } +- +- XIMPreeditDrawCallbackStruct *drawstruct = +- (XIMPreeditDrawCallbackStruct *) call_data; +- XIMText *text = (XIMText *) drawstruct->text; +- int cursor = drawstruct->caret, sellen = 0; +- +- if ( ! drawstruct->caret && ! drawstruct->chg_first && +- ! drawstruct->chg_length && ! text ) { +- // nothing to do +- return 0; +- } +- +- if (text) { +- char *str = 0; +- if (text->encoding_is_wchar) { +- int l = wcstombs(NULL, text->string.wide_char, text->length); +- if (l != -1) { +- str = new char[l + 1]; +- wcstombs(str, text->string.wide_char, l); +- str[l] = 0; +- } +- } else +- str = text->string.multi_byte; +- +- if (! str) +- return 0; +- +- QString s = QString::fromLocal8Bit(str); +- +- if (text->encoding_is_wchar) +- delete [] str; +- +- if (drawstruct->chg_length < 0) +- qic->text.replace(drawstruct->chg_first, UINT_MAX, s); +- else +- qic->text.replace(drawstruct->chg_first, drawstruct->chg_length, s); +- +- if ( qic->selectedChars.size() < qic->text.length() ) { +- // expand the selectedChars array if the compose string is longer +- uint from = qic->selectedChars.size(); +- qic->selectedChars.resize( qic->text.length() ); +- for ( uint x = from; from < qic->selectedChars.size(); ++x ) +- qic->selectedChars[x] = 0; +- } +- +- uint x; +- bool *p = qic->selectedChars.data() + drawstruct->chg_first; +- // determine if the changed chars are selected based on text->feedback +- for ( x = 0; x < s.length(); ++x ) +- *p++ = ( text->feedback ? ( text->feedback[x] & XIMReverse ) : 0 ); +- +- // figure out where the selection starts, and how long it is +- p = qic->selectedChars.data(); +- bool started = FALSE; +- for ( x = 0; x < QMIN(qic->text.length(), qic->selectedChars.size()); ++x ) { +- if ( started ) { +- if ( *p ) ++sellen; +- else break; +- } else { +- if ( *p ) { +- cursor = x; +- started = TRUE; +- sellen = 1; +- } +- } +- ++p; +- } +- } else { +- if (drawstruct->chg_length == 0) +- drawstruct->chg_length = -1; +- +- qic->text.remove(drawstruct->chg_first, drawstruct->chg_length); +- qt_compose_emptied = qic->text.isEmpty(); +- if ( qt_compose_emptied ) { +-#ifdef QT_XIM_DEBUG +- qDebug( "compose emptied" ); +-#endif // QT_XIM_DEBUG +- +- // don't send an empty compose, since we will send an IMEnd with +- // either the correct compose text (or null text if the user has +- // cancelled the compose or deleted all chars). +- return 0; +- } +- } +- +-#ifdef QT_XIM_DEBUG +- qDebug( "sending IMCompose to %p with %d chars", +- qic->focusWidget, qic->text.length() ); +-#endif // QT_XIM_DEBUG +- +- QIMComposeEvent event( QEvent::IMCompose, qic->text, cursor, sellen ); +- QApplication::sendEvent(qic->focusWidget, &event); +- return 0; +- } +- +- static int xic_done_callback(XIC, XPointer client_data, XPointer) { +- QInputContext *qic = (QInputContext *) client_data; +- if (! qic) +- return 0; +- +- if (qic->composing && qic->focusWidget) { +-#ifdef QT_XIM_DEBUG +- qDebug( "sending IMEnd (empty) to %p", qic->focusWidget ); +-#endif // QT_XIM_DEBUG +- +- QIMEvent event(QEvent::IMEnd, QString::null, -1); +- QApplication::sendEvent(qic->focusWidget, &event); +- } +- +- qic->composing = FALSE; +- qic->focusWidget = 0; +- +- if ( qic->selectedChars.size() < 128 ) +- qic->selectedChars.resize( 128 ); +- qic->selectedChars.fill( 0 ); +- +- return 0; +- } +- +-#ifdef Q_C_CALLBACKS +-} +-#endif // Q_C_CALLBACKS +- +-#endif // !QT_NO_XIM +- +- +- +-QInputContext::QInputContext(QWidget *widget) +- : ic(0), focusWidget(0), composing(FALSE), fontset(0) +-{ +-#if !defined(QT_NO_XIM) +- fontsetRefCount++; +- if (! qt_xim) { +- qWarning("QInputContext: no input method context available"); +- return; +- } +- +- if (! widget->isTopLevel()) { +- qWarning("QInputContext: cannot create input context for non-toplevel widgets"); +- return; +- } +- +- XPoint spot; +- XRectangle rect; +- XVaNestedList preedit_attr = 0; +- XIMCallback startcallback, drawcallback, donecallback; +- +- font = widget->font(); +- fontset = getFontSet( font ); +- +- if (qt_xim_style & XIMPreeditArea) { +- rect.x = 0; +- rect.y = 0; +- rect.width = widget->width(); +- rect.height = widget->height(); +- +- preedit_attr = XVaCreateNestedList(0, +- XNArea, &rect, +- XNFontSet, fontset, +- (char *) 0); +- } else if (qt_xim_style & XIMPreeditPosition) { +- spot.x = 1; +- spot.y = 1; +- +- preedit_attr = XVaCreateNestedList(0, +- XNSpotLocation, &spot, +- XNFontSet, fontset, +- (char *) 0); +- } else if (qt_xim_style & XIMPreeditCallbacks) { +- startcallback.client_data = (XPointer) this; +- startcallback.callback = (XIMProc) xic_start_callback; +- drawcallback.client_data = (XPointer) this; +- drawcallback.callback = (XIMProc)xic_draw_callback; +- donecallback.client_data = (XPointer) this; +- donecallback.callback = (XIMProc) xic_done_callback; +- +- preedit_attr = XVaCreateNestedList(0, +- XNPreeditStartCallback, &startcallback, +- XNPreeditDrawCallback, &drawcallback, +- XNPreeditDoneCallback, &donecallback, +- (char *) 0); +- } +- +- if (preedit_attr) { +- ic = XCreateIC(qt_xim, +- XNInputStyle, qt_xim_style, +- XNClientWindow, widget->winId(), +- XNPreeditAttributes, preedit_attr, +- (char *) 0); +- XFree(preedit_attr); +- } else +- ic = XCreateIC(qt_xim, +- XNInputStyle, qt_xim_style, +- XNClientWindow, widget->winId(), +- (char *) 0); +- +- if (! ic) +- qFatal("Failed to create XIM input context!"); +- +- // when resetting the input context, preserve the input state +- (void) XSetICValues((XIC) ic, XNResetState, XIMPreserveState, (char *) 0); +-#endif // !QT_NO_XIM +-} +- +- +-QInputContext::~QInputContext() +-{ +- +-#if !defined(QT_NO_XIM) +- if (ic) +- XDestroyIC((XIC) ic); +- +- if ( --fontsetRefCount == 0 ) { +- Display *dpy = QPaintDevice::x11AppDisplay(); +- for ( int i = 0; i < 8; i++ ) { +- if ( fontsetCache[i] && fontsetCache[i] != (XFontSet)-1 ) { +- XFreeFontSet(dpy, fontsetCache[i]); +- fontsetCache[i] = 0; +- } +- } +- } +- +-#endif // !QT_NO_XIM +- +- ic = 0; +- focusWidget = 0; +- composing = FALSE; +-} +- +- +-void QInputContext::reset() +-{ +-#if !defined(QT_NO_XIM) +- if (focusWidget && composing && ! text.isNull()) { +-#ifdef QT_XIM_DEBUG +- qDebug("QInputContext::reset: composing - sending IMEnd (empty) to %p", +- focusWidget); +-#endif // QT_XIM_DEBUG +- +- QIMEvent endevent(QEvent::IMEnd, QString::null, -1); +- QApplication::sendEvent(focusWidget, &endevent); +- focusWidget = 0; +- text = QString::null; +- if ( selectedChars.size() < 128 ) +- selectedChars.resize( 128 ); +- selectedChars.fill( 0 ); +- +- char *mb = XmbResetIC((XIC) ic); +- if (mb) +- XFree(mb); +- } +-#endif // !QT_NO_XIM +-} +- +- +-void QInputContext::setComposePosition(int x, int y) +-{ +-#if !defined(QT_NO_XIM) +- if (qt_xim && ic) { +- XPoint point; +- point.x = x; +- point.y = y; +- +- XVaNestedList preedit_attr = +- XVaCreateNestedList(0, +- XNSpotLocation, &point, +- +- (char *) 0); +- XSetICValues((XIC) ic, XNPreeditAttributes, preedit_attr, (char *) 0); +- XFree(preedit_attr); +- } +-#endif // !QT_NO_XIM +-} +- +- +-void QInputContext::setComposeArea(int x, int y, int w, int h) ++bool QInputContext::x11FilterEvent( QWidget *keywidget, XEvent *event ) + { +-#if !defined(QT_NO_XIM) +- if (qt_xim && ic) { +- XRectangle rect; +- rect.x = x; +- rect.y = y; +- rect.width = w; +- rect.height = h; +- +- XVaNestedList preedit_attr = XVaCreateNestedList(0, +- XNArea, &rect, +- +- (char *) 0); +- XSetICValues((XIC) ic, XNPreeditAttributes, preedit_attr, (char *) 0); +- XFree(preedit_attr); +- } +-#endif ++ return FALSE; + } + +- +-int QInputContext::lookupString(XKeyEvent *event, QCString &chars, +- KeySym *key, Status *status) const +-{ +- int count = 0; +- +-#if !defined(QT_NO_XIM) +- if (qt_xim && ic) { +- count = XmbLookupString((XIC) ic, event, chars.data(), +- chars.size(), key, status); +- +- if ((*status) == XBufferOverflow ) { +- chars.resize(count + 1); +- count = XmbLookupString((XIC) ic, event, chars.data(), +- chars.size(), key, status); +- } +- } +- +-#endif // QT_NO_XIM +- +- return count; +-} +- +-void QInputContext::setFocus() +-{ +-#if !defined(QT_NO_XIM) +- if (qt_xim && ic) +- XSetICFocus((XIC) ic); +-#endif // !QT_NO_XIM +-} +- +-void QInputContext::setXFontSet(const QFont &f) +-{ +-#if !defined(QT_NO_XIM) +- if (font == f) return; // nothing to do +- font = f; +- +- XFontSet fs = getFontSet(font); +- if (fontset == fs) return; // nothing to do +- fontset = fs; +- +- XVaNestedList preedit_attr = XVaCreateNestedList(0, XNFontSet, fontset, (char *) 0); +- XSetICValues((XIC) ic, XNPreeditAttributes, preedit_attr, (char *) 0); +- XFree(preedit_attr); +-#else +- Q_UNUSED( f ); +-#endif +-} ++#endif //Q_NO_IM +--- src/kernel/qnamespace.h ++++ src/kernel/qnamespace.h +@@ -397,6 +397,87 @@ + Key_Help = 0x1058, + Key_Direction_L = 0x1059, + Key_Direction_R = 0x1060, ++ ++ // International input method support (X keycode - 0xEE00, the ++ // definition follows Qt/Embedded 2.3.7) Only interesting if ++ // you are writing your own input method ++ ++ // International & multi-key character composition ++ Key_Multi_key = 0x1120, // Multi-key character compose ++ Key_Codeinput = 0x1137, ++ Key_SingleCandidate = 0x113c, ++ Key_MultipleCandidate = 0x113d, ++ Key_PreviousCandidate = 0x113e, ++ ++ // Misc Functions ++ Key_Mode_switch = 0x117e, // Character set switch ++ //Key_script_switch = 0x117e, // Alias for mode_switch ++ ++ // Japanese keyboard support ++ Key_Kanji = 0x1121, // Kanji, Kanji convert ++ Key_Muhenkan = 0x1122, // Cancel Conversion ++ //Key_Henkan_Mode = 0x1123, // Start/Stop Conversion ++ Key_Henkan = 0x1123, // Alias for Henkan_Mode ++ Key_Romaji = 0x1124, // to Romaji ++ Key_Hiragana = 0x1125, // to Hiragana ++ Key_Katakana = 0x1126, // to Katakana ++ Key_Hiragana_Katakana = 0x1127, // Hiragana/Katakana toggle ++ Key_Zenkaku = 0x1128, // to Zenkaku ++ Key_Hankaku = 0x1129, // to Hankaku ++ Key_Zenkaku_Hankaku = 0x112a, // Zenkaku/Hankaku toggle ++ Key_Touroku = 0x112b, // Add to Dictionary ++ Key_Massyo = 0x112c, // Delete from Dictionary ++ Key_Kana_Lock = 0x112d, // Kana Lock ++ Key_Kana_Shift = 0x112e, // Kana Shift ++ Key_Eisu_Shift = 0x112f, // Alphanumeric Shift ++ Key_Eisu_toggle = 0x1130, // Alphanumeric toggle ++ //Key_Kanji_Bangou = 0x1137, // Codeinput ++ //Key_Zen_Koho = 0x113d, // Multiple/All Candidate(s) ++ //Key_Mae_Koho = 0x113e, // Previous Candidate ++ ++ // Korean keyboard support ++ // ++ // In fact, many Korean users need only 2 keys, Key_Hangul and ++ // Key_Hangul_Hanja. But rest of the keys are good for future. ++ ++ Key_Hangul = 0x1131, // Hangul start/stop(toggle) ++ Key_Hangul_Start = 0x1132, // Hangul start ++ Key_Hangul_End = 0x1133, // Hangul end, English start ++ Key_Hangul_Hanja = 0x1134, // Start Hangul->Hanja Conversion ++ Key_Hangul_Jamo = 0x1135, // Hangul Jamo mode ++ Key_Hangul_Romaja = 0x1136, // Hangul Romaja mode ++ //Key_Hangul_Codeinput = 0x1137, // Hangul code input mode ++ Key_Hangul_Jeonja = 0x1138, // Jeonja mode ++ Key_Hangul_Banja = 0x1139, // Banja mode ++ Key_Hangul_PreHanja = 0x113a, // Pre Hanja conversion ++ Key_Hangul_PostHanja = 0x113b, // Post Hanja conversion ++ //Key_Hangul_SingleCandidate = 0x113c, // Single candidate ++ //Key_Hangul_MultipleCandidate = 0x113d, // Multiple candidate ++ //Key_Hangul_PreviousCandidate = 0x113e, // Previous candidate ++ Key_Hangul_Special = 0x113f, // Special symbols ++ //Key_Hangul_switch = 0x117e, // Alias for mode_switch ++ ++ // dead keys (X keycode - 0xED00 to avoid the conflict) ++ Key_Dead_Grave = 0x1250, ++ Key_Dead_Acute = 0x1251, ++ Key_Dead_Circumflex = 0x1252, ++ Key_Dead_Tilde = 0x1253, ++ Key_Dead_Macron = 0x1254, ++ Key_Dead_Breve = 0x1255, ++ Key_Dead_Abovedot = 0x1256, ++ Key_Dead_Diaeresis = 0x1257, ++ Key_Dead_Abovering = 0x1258, ++ Key_Dead_Doubleacute = 0x1259, ++ Key_Dead_Caron = 0x125a, ++ Key_Dead_Cedilla = 0x125b, ++ Key_Dead_Ogonek = 0x125c, ++ Key_Dead_Iota = 0x125d, ++ Key_Dead_Voiced_Sound = 0x125e, ++ Key_Dead_Semivoiced_Sound = 0x125f, ++ Key_Dead_Belowdot = 0x1260, ++ Key_Dead_Hook = 0x1261, ++ Key_Dead_Horn = 0x1262, ++ + Key_Space = 0x20, // 7 bit printable ASCII + Key_Any = Key_Space, + Key_Exclam = 0x21, +@@ -469,6 +550,11 @@ + Key_AsciiTilde = 0x7e, + + // Latin 1 codes adapted from X: keysymdef.h,v 1.21 94/08/28 16:17:06 ++ // ++ // This is mainly for compatibility - applications and input ++ // methods should not use the Qt keycodes between 128 and 255, ++ // but should rather use the QKeyEvent::text(). See ++ // QETWidget::translateKeyEventInternal() for more details. + + Key_nobreakspace = 0x0a0, + Key_exclamdown = 0x0a1, +--- src/kernel/qrichtext.cpp ++++ src/kernel/qrichtext.cpp +@@ -662,7 +662,7 @@ + pop(); + } + +-bool QTextCursor::place( const QPoint &p, QTextParagraph *s, bool link ) ++bool QTextCursor::place( const QPoint &p, QTextParagraph *s, bool link, bool loosePlacing, bool matchBetweenCharacters ) + { + QPoint pos( p ); + QRect r; +@@ -680,7 +680,7 @@ + str = s; + if ( pos.y() >= r.y() && pos.y() <= r.y() + r.height() ) + break; +- if ( !s->next() ) { ++ if ( loosePlacing == TRUE && !s->next() ) { + #ifdef Q_WS_MACX + pos.setX( s->rect().x() + s->rect().width() ); + #endif +@@ -721,7 +721,7 @@ + if ( pos.x() < x ) + pos.setX( x + 1 ); + int cw; +- int curpos = s->length()-1; ++ int curpos = -1; + int dist = 10000000; + bool inCustom = FALSE; + while ( i < nextLine ) { +@@ -743,14 +743,21 @@ + cpos += cw; + int d = cpos - pos.x(); + bool dm = d < 0 ? !chr->rightToLeft : chr->rightToLeft; +- if ( (QABS( d ) < dist || (dist == d && dm == TRUE )) && para->string()->validCursorPosition( i ) ) { ++ if ( ( matchBetweenCharacters == TRUE && (QABS( d ) < dist || (dist == d && dm == TRUE )) && para->string()->validCursorPosition( i ) ) || ++ ( matchBetweenCharacters == FALSE && ( d == 0 || dm == TRUE ) ) ) { + dist = QABS( d ); +- if ( !link || pos.x() >= x + chr->x ) ++ if ( !link || ( pos.x() >= x + chr->x && ( loosePlacing == TRUE || pos.x() < cpos ) ) ) + curpos = i; + } + } + i++; + } ++ if ( curpos == -1 ) { ++ if ( loosePlacing == TRUE ) ++ curpos = s->length()-1; ++ else ++ return FALSE; ++ } + setIndex( curpos ); + + #ifndef QT_NO_TEXTCUSTOMITEM +@@ -4876,6 +4883,9 @@ + tmpw = fullSelectionWidth - xleft; + painter.fillRect( xleft, y, tmpw, h, color ); + painter.drawText( xstart, y + baseLine, str, start, len, dir ); ++ // draw preedit's underline ++ if (selection == QTextDocument::IMCompositionText) ++ painter.drawLine(xstart, y + baseLine + 1, xstart + w, y + baseLine + 1); + if (selStart != start || selEnd != start + len || selWrap) + painter.restore(); + } +--- src/kernel/qrichtext_p.h ++++ src/kernel/qrichtext_p.h +@@ -362,7 +362,8 @@ + int totalOffsetY() const; // total document offset + + bool place( const QPoint &pos, QTextParagraph *s ) { return place( pos, s, FALSE ); } +- bool place( const QPoint &pos, QTextParagraph *s, bool link ); ++ bool place( const QPoint &pos, QTextParagraph *s, bool link ) { return place( pos, s, link, TRUE, TRUE ); } ++ bool place( const QPoint &pos, QTextParagraph *s, bool link, bool loosePlacing, bool matchBetweenCharacters ); + void restoreState(); + + +--- src/kernel/qt_kernel.pri ++++ src/kernel/qt_kernel.pri +@@ -34,7 +34,6 @@ + $$KERNEL_H/qimage.h \ + $$KERNEL_P/qimageformatinterface_p.h \ + $$KERNEL_H/qimageformatplugin.h \ +- $$KERNEL_P/qinputcontext_p.h \ + $$KERNEL_H/qkeycode.h \ + $$KERNEL_H/qkeysequence.h \ + $$KERNEL_H/qlayout.h \ +@@ -99,6 +98,12 @@ + $$KERNEL_CPP/qfontengine_p.h \ + $$KERNEL_CPP/qtextlayout_p.h + ++ unix:x11 { ++ HEADERS += $$KERNEL_H/qinputcontext.h ++ } else { ++ HEADERS += $$KERNEL_P/qinputcontext_p.h ++ } ++ + win32:SOURCES += $$KERNEL_CPP/qapplication_win.cpp \ + $$KERNEL_CPP/qclipboard_win.cpp \ + $$KERNEL_CPP/qcolor_win.cpp \ +@@ -130,6 +135,7 @@ + $$KERNEL_CPP/qdesktopwidget_x11.cpp \ + $$KERNEL_CPP/qeventloop_x11.cpp \ + $$KERNEL_CPP/qfont_x11.cpp \ ++ $$KERNEL_CPP/qinputcontext.cpp \ + $$KERNEL_CPP/qinputcontext_x11.cpp \ + $$KERNEL_CPP/qmotifdnd_x11.cpp \ + $$KERNEL_CPP/qpixmap_x11.cpp \ +--- src/kernel/qwidget.cpp ++++ src/kernel/qwidget.cpp +@@ -3282,8 +3282,24 @@ + if ( isActiveWindow() ) { + QWidget * prev = qApp->focus_widget; + if ( prev ) { +- if ( prev != this ) ++ // This part is never executed when Q_WS_X11? Preceding XFocusOut ++ // had already reset focus_widget when received XFocusIn ++ ++ // Don't reset input context explicitly here. Whether reset or not ++ // when focusing out is a responsibility of input methods. For ++ // example, Japanese input context should not be reset here. The ++ // context sometimes contains a whole paragraph and has minutes of ++ // lifetime different to ephemeral one in other languages. The ++ // input context should be survived until focused again. So we ++ // delegate the responsibility to input context via ++ // unfocusInputContext(). ++ if ( prev != this && prev->isInputMethodEnabled() ) { ++#if 0 + prev->resetInputContext(); ++#else ++ prev->unfocusInputContext(); ++#endif ++ } + } + #if defined(Q_WS_WIN) + else { +@@ -3291,9 +3307,8 @@ + } + #endif + qApp->focus_widget = this; +-#if defined(Q_WS_X11) +- focusInputContext(); +-#endif ++ if( isInputMethodEnabled() ) ++ focusInputContext(); + + #if defined(Q_WS_WIN) + if ( !topLevelWidget()->isPopup() ) +@@ -3341,7 +3356,11 @@ + focusProxy()->clearFocus(); + return; + } else if ( hasFocus() ) { ++#if !defined(Q_WS_X11) + resetInputContext(); ++#else ++ unfocusInputContext(); ++#endif + QWidget* w = qApp->focusWidget(); + // clear active focus + qApp->focus_widget = 0; +@@ -4667,7 +4686,13 @@ + break; + + case QEvent::MouseButtonPress: ++ // Don't reset input context here. Whether reset or not is ++ // a responsibility of input method. reset() will be ++ // called by mouseHandler() of input method if necessary ++ // via mousePressEvent() of text widgets. ++#if 0 + resetInputContext(); ++#endif + mousePressEvent( (QMouseEvent*)e ); + if ( ! ((QMouseEvent*)e)->isAccepted() ) + return FALSE; +--- src/kernel/qwidget.h ++++ src/kernel/qwidget.h +@@ -49,6 +49,10 @@ + #include "qsizepolicy.h" + #endif // QT_H + ++#if defined(Q_WS_X11) && !defined(QT_NO_IM) ++class QInputContext; ++#endif ++ + class QLayout; + struct QWExtra; + struct QTLWExtra; +@@ -535,6 +539,18 @@ + + int metric( int ) const; + ++#if defined(Q_WS_X11) ++#if !defined(QT_NO_IM_EXTENSIONS) ++ virtual QWidget *icHolderWidget(); ++#else ++ QWidget *icHolderWidget(); ++#endif ++ QInputContext *getInputContext(); ++ void changeInputContext( const QString & ); ++ void sendMouseEventToInputContext( int x, QEvent::Type type, ++ Qt::ButtonState button, ++ Qt::ButtonState state ); ++#endif + void resetInputContext(); + + virtual void create( WId = 0, bool initializeWindow = TRUE, +@@ -566,13 +582,16 @@ + + private slots: + void focusProxyDestroyed(); ++#if defined(Q_WS_X11) ++ void destroyInputContext(); ++#endif + + private: + void setFontSys( QFont *f = 0 ); + #if defined(Q_WS_X11) + void createInputContext(); +- void destroyInputContext(); + void focusInputContext(); ++ void unfocusInputContext(); + void checkChildrenDnd(); + #elif defined(Q_WS_MAC) + uint own_id : 1, macDropEnabled : 1; +@@ -644,6 +663,9 @@ + #ifndef QT_NO_LAYOUT + QLayout *lay_out; + #endif ++#if defined(Q_WS_X11) && !defined(QT_NO_IM) && !defined(QT_NO_IM_EXTENSIONS) ++ QInputContext *ic; // Input Context ++#endif + QWExtra *extra; + #if defined(Q_WS_QWS) + QRegion req_region; // Requested region +@@ -949,7 +971,9 @@ + uint dnd : 1; // DND properties installed + uint uspos : 1; // User defined position + uint ussize : 1; // User defined size +- void *xic; // XIM Input Context ++#if defined(QT_NO_IM_EXTENSIONS) ++ void *xic; // Input Context ++#endif + #endif + #if defined(Q_WS_MAC) + WindowGroupRef group; +--- src/kernel/qwidget_x11.cpp ++++ src/kernel/qwidget_x11.cpp +@@ -61,11 +61,9 @@ + bool qt_wstate_iconified( WId ); + void qt_updated_rootinfo(); + +-#ifndef QT_NO_XIM +-#include "qinputcontext_p.h" +- +-extern XIM qt_xim; +-extern XIMStyle qt_xim_style; ++#ifndef QT_NO_IM ++#include "qinputcontext.h" ++#include "qinputcontextfactory.h" + #endif + + // Paint event clipping magic +@@ -688,6 +686,10 @@ + + if ( destroyw ) + qt_XDestroyWindow( this, dpy, destroyw ); ++ ++#if !defined(QT_NO_IM_EXTENSIONS) ++ ic = 0; ++#endif + } + + +@@ -751,6 +753,16 @@ + extern void qPRCleanup( QWidget *widget ); // from qapplication_x11.cpp + if ( testWState(WState_Reparented) ) + qPRCleanup(this); ++ ++ if( this == icHolderWidget() ) { ++ destroyInputContext(); ++ } else { ++ // release previous focus information participating with ++ // preedit preservation of qic ++ QInputContext *qic = getInputContext(); ++ if ( qic ) ++ qic->releaseComposingWidget( this ); ++ } + } + } + +@@ -787,11 +799,11 @@ + XReparentWindow( x11Display(), old_winid, + RootWindow( x11Display(), x11Screen() ), 0, 0 ); + +- if ( isTopLevel() ) { +- // input contexts are associated with toplevel widgets, so we need +- // destroy the context here. if we are reparenting back to toplevel, +- // then we will have another context created, otherwise we will +- // use our new toplevel's context ++ if ( this == icHolderWidget() ) { ++ // input contexts are sometimes associated with toplevel widgets, so ++ // we need destroy the context here. if we are reparenting back to ++ // toplevel, then we may have another context created, otherwise we ++ // will use our new ic holder's context + destroyInputContext(); + } + +@@ -947,7 +959,8 @@ + language input systems. + + In the X11 version of Qt, if \a text is TRUE, this method sets the +- XIM "spot" point for complex language input handling. ++ input method focus point in the preedit (XIM "spot" point) for ++ complex language input handling. + + The font \a f is a rendering hint to the currently active input method. + If \a f is 0 the widget's font is used. +@@ -957,22 +970,15 @@ + void QWidget::setMicroFocusHint(int x, int y, int width, int height, + bool text, QFont *f ) + { +-#ifndef QT_NO_XIM ++#ifndef QT_NO_IM + if ( text ) { +- QWidget* tlw = topLevelWidget(); +- QTLWExtra *topdata = tlw->topData(); +- + // trigger input context creation if it hasn't happened already + createInputContext(); +- QInputContext *qic = (QInputContext *) topdata->xic; + +- if ( qt_xim && qic ) { +- QPoint p( x, y ); +- QPoint p2 = mapTo( topLevelWidget(), QPoint( 0, 0 ) ); +- p = mapTo( topLevelWidget(), p); +- qic->setXFontSet( f ? *f : fnt ); +- qic->setComposePosition(p.x(), p.y() + height); +- qic->setComposeArea(p2.x(), p2.y(), this->width(), this->height()); ++ QInputContext *qic = getInputContext(); ++ if(qic) { ++ QPoint gp = mapToGlobal( QPoint( x, y ) ); ++ qic->setMicroFocus(gp.x(), gp.y(), width, height, f); + } + } + #endif +@@ -1442,7 +1448,7 @@ + QWidget *tlw = topLevelWidget(); + if ( tlw->isVisible() && !tlw->topData()->embedded && !qt_deferred_map_contains(tlw) ) { + XSetInputFocus( x11Display(), tlw->winId(), RevertToNone, qt_x_time); +- focusInputContext(); ++ focusInputContext(); + } + } + +@@ -2422,13 +2428,16 @@ + + void QWidget::createTLSysExtra() + { ++#if defined(QT_NO_IM_EXTENSIONS) + // created lazily + extra->topextra->xic = 0; ++#endif + } + + void QWidget::deleteTLSysExtra() + { +- destroyInputContext(); ++ // don't destroy input context here. it will be destroyed in ++ // QWidget::destroy() destroyInputContext(); + } + + /* +@@ -2660,76 +2669,255 @@ + } + + ++/*! ++ This function returns the widget holding the QInputContext ++ instance for this widget. The instance is used for text input to ++ this widget, switching input method, etc. ++ ++ By default, this function delegates the role of returning input ++ context holder widget to QApplication::locateICHolderWidget(). ++ ++ This definition enables application developer to change the ++ mapping of widgets to QInputContext instance simply by overriding ++ QApplication::locateICHolderWidget(). ++ ++ \sa QApplication::locateICHolderWidget() ++*/ ++QWidget *QWidget::icHolderWidget() ++{ ++ return qApp->locateICHolderWidget(this); ++} ++ ++ ++/*! ++ This function returns the QInputContext instance for this widget. ++ This instance is used for text input to this widget, etc. ++ It is simply the accessor function. ++*/ ++QInputContext *QWidget::getInputContext() ++{ ++ QInputContext *qic = 0; ++ ++#if !defined(QT_NO_IM_EXTENSIONS) ++ if ( isInputMethodEnabled() ) { ++ qic = icHolderWidget()->ic; ++#else ++ { ++ // icHolderWidget is always topLevelWidget ++ QTLWExtra *topdata = icHolderWidget()->topData(); ++ qic = (QInputContext *)topdata->xic; ++#endif ++ } ++ ++ return qic; ++} ++ ++ ++/*! ++ This function replaces the QInputContext instance used for text ++ input to this widget. The \a identifierName is the identifier name ++ of newly choosed input method. ++*/ ++void QWidget::changeInputContext( const QString& identifierName ) ++{ ++ QWidget *icWidget = icHolderWidget(); ++#if !defined(QT_NO_IM_EXTENSIONS) ++ QInputContext **qicp = &icWidget->ic; ++#else ++ QInputContext **qicp = (QInputContext **)&icWidget->topData()->xic; ++#endif ++ ++ if( *qicp ) ++ delete *qicp; ++ // an input context that has the identifierName is generated. ++ QInputContext *qic = QInputContextFactory::create( identifierName, icWidget ); ++ *qicp = qic; ++ if ( qic ) { ++ QObject::connect( qic, SIGNAL(imEventGenerated(QObject *,QIMEvent *)), ++ qApp, SLOT(postIMEvent(QObject *,QIMEvent *)) ); ++ QObject::connect( qic, SIGNAL(deletionRequested()), ++ icWidget, SLOT(destroyInputContext()) ); ++ } ++} ++ ++ ++/*! ++ \internal ++ This is an internal function, you should never call this. ++ ++ This function is called to generate an input context ++ according to a configuration for default input method ++ ++ When QT_NO_IM_EXTENSIONS is not set, input context is ++ generated only when isInputMethodEnabled() returns TRUE. ++*/ + void QWidget::createInputContext() + { +- QWidget *tlw = topLevelWidget(); +- QTLWExtra *topdata = tlw->topData(); ++#if !defined(QT_NO_IM_EXTENSIONS) ++ if( !isInputMethodEnabled() || QApplication::closingDown() ) ++ return; ++#endif + +-#ifndef QT_NO_XIM +- if (qt_xim) { +- if (! topdata->xic) { +- QInputContext *qic = new QInputContext(tlw); +- topdata->xic = (void *) qic; +- } +- } else +-#endif // QT_NO_XIM +- { +- // qDebug("QWidget::createInputContext: no xim"); +- topdata->xic = 0; +- } ++ QWidget *icWidget = icHolderWidget(); ++#ifndef QT_NO_IM ++#if !defined(QT_NO_IM_EXTENSIONS) ++ QInputContext **qicp = &icWidget->ic; ++#else ++ QInputContext **qicp = (QInputContext **)&icWidget->topData()->xic; ++#endif ++ ++ if ( ! *qicp ) { ++ // an input context of the default input method is generated. ++ QInputContext *qic = QInputContextFactory::create( QApplication::defaultInputMethod(), icWidget ); ++ ++ *qicp = qic; ++ if ( qic ) { ++ QObject::connect( qic, SIGNAL(imEventGenerated(QObject *,QIMEvent *)), ++ qApp, SLOT(postIMEvent(QObject *,QIMEvent *)) ); ++ QObject::connect( qic, SIGNAL(deletionRequested()), ++ icWidget, SLOT(destroyInputContext()) ); ++ } ++ } ++#endif // QT_NO_IM + } + + ++/*! ++ \internal ++ ++ This slot is used to destroy the input context that belonging ++ to the widget itself, so icHolderWidget()->ic is not fetched. ++ ++ \sa QInputContext::deletionRequested() ++*/ + void QWidget::destroyInputContext() + { +-#ifndef QT_NO_XIM +- QInputContext *qic = (QInputContext *) extra->topextra->xic; +- delete qic; +-#endif // QT_NO_XIM +- extra->topextra->xic = 0; ++#ifndef QT_NO_IM ++#if !defined(QT_NO_IM_EXTENSIONS) ++ QInputContext **qicp = ⁣ ++#else ++ if ( ! extra || ! extra->topextra ) ++ return; ++ ++ QInputContext **qicp = (QInputContext **)&extra->topextra->xic; ++#endif ++ ++ if( *qicp ) ++ delete *qicp; ++ ++ *qicp = 0; ++#endif // QT_NO_IM + } + + + /*! +- This function is called when the user finishes input composition, +- e.g. changes focus to another widget, moves the cursor, etc. ++ This function is called when text widgets need to be neutral state to ++ execute text operations properly. See qlineedit.cpp and qtextedit.cpp as ++ example. ++ ++ Ordinary reset that along with changing focus to another widget, ++ moving the cursor, etc, is implicitly handled via ++ unfocusInputContext() because whether reset or not when such ++ situation is a responsibility of input methods. So we delegate the ++ responsibility to the input context via unfocusInputContext(). See ++ 'Preedit preservation' section of the class description of ++ QInputContext for further information. ++ ++ \sa QInputContext, unfocusInputContext(), QInputContext::unsetFocus() + */ + void QWidget::resetInputContext() + { +-#ifndef QT_NO_XIM +- if ((qt_xim_style & XIMPreeditCallbacks) && hasFocus()) { +- QWidget *tlw = topLevelWidget(); +- QTLWExtra *topdata = tlw->topData(); ++#ifndef QT_NO_IM ++ // trigger input context creation if it hasn't happened already ++ createInputContext(); ++ ++ QInputContext *qic = getInputContext(); ++ if( qic ) ++ qic->reset(); ++#endif // QT_NO_IM ++} ++ ++ ++/*! ++ \internal ++ This is an internal function, you should never call this. ++ ++ This function is called to focus associated input context. The ++ code intends to eliminate duplicate focus for the context even if ++ the context is shared between widgets ++ ++ \sa QInputContext::setFocus() ++ */ ++void QWidget::focusInputContext() ++{ ++#ifndef QT_NO_IM ++ QWidget* tlw = topLevelWidget(); + ++ if (!tlw->isPopup() || isInputMethodEnabled()) { + // trigger input context creation if it hasn't happened already + createInputContext(); + +- if (topdata->xic) { +- QInputContext *qic = (QInputContext *) topdata->xic; +- qic->reset(); ++ QInputContext *qic = getInputContext(); ++ if ( qic ) { ++ if( qic->focusWidget() != this ) { ++ qic->setFocusWidget( this ); ++ qic->setFocus(); ++ } + } + } +-#endif // QT_NO_XIM ++#endif // QT_NO_IM + } + + +-void QWidget::focusInputContext() ++/*! ++ \internal ++ This is an internal function, you should never call this. ++ ++ This function is called to remove focus from associated input ++ context. ++ ++ \sa QInputContext::unsetFocus() ++ */ ++void QWidget::unfocusInputContext() + { +-#ifndef QT_NO_XIM +- QWidget *tlw = topLevelWidget(); +- if (!tlw->isPopup() || isInputMethodEnabled()) { +- QTLWExtra *topdata = tlw->topData(); ++#ifndef QT_NO_IM ++ // trigger input context creation if it hasn't happened already ++ createInputContext(); ++ ++ QInputContext *qic = getInputContext(); ++ if ( qic ) { ++ // may be caused reset() in some input methods ++ qic->unsetFocus(); ++ qic->setFocusWidget( 0 ); ++ } ++#endif // QT_NO_IM ++} ++ + +- // trigger input context creation if it hasn't happened already +- createInputContext(); ++/*! ++ This function is called to send mouse event to associated input ++ context by derived text widgets. A derived text widget must be ++ calculate \a x as character offset at the mouse cursor in the ++ preedit. + +- if (topdata->xic) { +- QInputContext *qic = (QInputContext *) topdata->xic; +- qic->setFocus(); +- } ++ \sa QInputContext::mouseHandler() ++ */ ++void QWidget::sendMouseEventToInputContext( int x, QEvent::Type type, ++ Qt::ButtonState button, ++ Qt::ButtonState state ) ++{ ++#ifndef QT_NO_IM ++ // trigger input context creation if it hasn't happened already ++ createInputContext(); ++ ++ QInputContext *qic = getInputContext(); ++ if ( qic ) { ++ // may be causing reset() in some input methods ++ qic->mouseHandler( x, type, button, state ); + } +-#endif // QT_NO_XIM ++#endif // QT_NO_IM + } ++ + + void QWidget::setWindowOpacity(double) + { +--- src/qt.pro ++++ src/qt.pro +@@ -37,6 +37,7 @@ + TOOLS_CPP = tools + CODECS_CPP = codecs + WORKSPACE_CPP = workspace ++INPUTMETHOD_CPP = inputmethod + XML_CPP = xml + STYLES_CPP = styles + EMBEDDED_CPP = embedded +@@ -54,6 +55,7 @@ + TOOLS_H = $$TOOLS_CPP + CODECS_H = $$CODECS_CPP + WORKSPACE_H = $$WORKSPACE_CPP ++ #INPUTMETHOD_H = $$INPUTMETHOD_CPP + XML_H = $$XML_CPP + CANVAS_H = $$CANVAS_CPP + STYLES_H = $$STYLES_CPP +@@ -70,6 +72,7 @@ + TOOLS_H = $$WIN_ALL_H + CODECS_H = $$WIN_ALL_H + WORKSPACE_H = $$WIN_ALL_H ++ #INPUTMETHOD_H = $$WIN_ALL_H + XML_H = $$WIN_ALL_H + CANVAS_H = $$WIN_ALL_H + STYLES_H = $$WIN_ALL_H +@@ -98,6 +101,7 @@ + TOOLS_H = $$TOOLS_CPP + CODECS_H = $$CODECS_CPP + WORKSPACE_H = $$WORKSPACE_CPP ++ INPUTMETHOD_H = $$INPUTMETHOD_CPP + XML_H = $$XML_CPP + STYLES_H = $$STYLES_CPP + !embedded:!mac:CONFIG += x11 x11inc +@@ -112,7 +116,7 @@ + EMBEDDED_H = $$EMBEDDED_CPP + } + +-DEPENDPATH += ;$$NETWORK_H;$$KERNEL_H;$$WIDGETS_H;$$SQL_H;$$TABLE_H;$$DIALOGS_H; ++DEPENDPATH += ;$$NETWORK_H;$$KERNEL_H;$$WIDGETS_H;$$INPUTMETHOD_H;$$SQL_H;$$TABLE_H;$$DIALOGS_H; + DEPENDPATH += $$ICONVIEW_H;$$OPENGL_H;$$TOOLS_H;$$CODECS_H;$$WORKSPACE_H;$$XML_H; + DEPENDPATH += $$CANVAS_H;$$STYLES_H + embedded:DEPENDPATH += ;$$EMBEDDED_H +@@ -147,6 +151,7 @@ + include($$DIALOGS_CPP/qt_dialogs.pri) + include($$ICONVIEW_CPP/qt_iconview.pri) + include($$WORKSPACE_CPP/qt_workspace.pri) ++include($$INPUTMETHOD_CPP/qt_inputmethod.pri) + include($$NETWORK_CPP/qt_network.pri) + include($$CANVAS_CPP/qt_canvas.pri) + include($$TABLE_CPP/qt_table.pri) +--- src/tools/qfeatures.h ++++ src/tools/qfeatures.h +@@ -982,3 +982,13 @@ + #define QT_NO_WORKSPACE + #endif + ++// Input method ++#if !defined(QT_NO_IM) && (defined(QT_NO_STRINGLIST)) ++#define QT_NO_IM ++#endif ++ ++// Input method extensions ++#if !defined(QT_NO_IM_EXTENSIONS) && (defined(QT_NO_IM) || defined(QT_NO_STRINGLIST)) ++#define QT_NO_IM_EXTENSIONS ++#endif ++ +--- src/widgets/qlineedit.cpp ++++ src/widgets/qlineedit.cpp +@@ -37,6 +37,12 @@ + + #include "qlineedit.h" + #ifndef QT_NO_LINEEDIT ++ ++// Keep this position to avoid patch rejection ++#ifndef QT_NO_IM ++#include "qinputcontext.h" ++#endif ++ + #include "qpainter.h" + #include "qdrawutil.h" + #include "qfontmetrics.h" +@@ -245,12 +251,17 @@ + + // input methods + int imstart, imend, imselstart, imselend; ++ bool composeMode() const { return preeditLength(); } ++ bool hasIMSelection() const { return imSelectionLength(); } ++ int preeditLength() const { return ( imend - imstart ); } ++ int imSelectionLength() const { return ( imselend - imselstart ); } + + // complex text layout + QTextLayout textLayout; + void updateTextLayout(); + void moveCursor( int pos, bool mark = FALSE ); + void setText( const QString& txt ); ++ int xToPosInternal( int x, QTextItem::CursorPosition ) const; + int xToPos( int x, QTextItem::CursorPosition = QTextItem::BetweenCharacters ) const; + inline int visualAlignment() const { return alignment ? alignment : int( isRightToLeft() ? AlignRight : AlignLeft ); } + QRect cursorRect() const; +@@ -588,6 +599,7 @@ + return; + d->echoMode = mode; + d->updateTextLayout(); ++ setInputMethodEnabled( mode == Normal ); + update(); + } + +@@ -1419,6 +1431,8 @@ + */ + void QLineEdit::mousePressEvent( QMouseEvent* e ) + { ++ if ( sendMouseEventToInputContext( e ) ) ++ return; + if ( e->button() == RightButton ) + return; + if ( d->tripleClickTimer && ( e->pos() - d->tripleClick ).manhattanLength() < +@@ -1448,7 +1462,8 @@ + */ + void QLineEdit::mouseMoveEvent( QMouseEvent * e ) + { +- ++ if ( sendMouseEventToInputContext( e ) ) ++ return; + #ifndef QT_NO_CURSOR + if ( ( e->state() & MouseButtonMask ) == 0 ) { + if ( !d->readOnly && d->dragEnabled +@@ -1477,6 +1492,8 @@ + */ + void QLineEdit::mouseReleaseEvent( QMouseEvent* e ) + { ++ if ( sendMouseEventToInputContext( e ) ) ++ return; + #ifndef QT_NO_DRAGANDDROP + if ( e->button() == LeftButton ) { + if ( d->dndTimer ) { +@@ -1503,6 +1520,8 @@ + */ + void QLineEdit::mouseDoubleClickEvent( QMouseEvent* e ) + { ++ if ( sendMouseEventToInputContext( e ) ) ++ return; + if ( e->button() == Qt::LeftButton ) { + deselect(); + d->cursor = d->xToPos( e->pos().x() ); +@@ -1772,6 +1791,33 @@ + e->ignore(); + } + ++ ++/*! ++ This function is not intended as polymorphic usage. Just a shared code ++ fragment that calls QWidget::sendMouseEventToInputContext() easily for this ++ class. ++ */ ++bool QLineEdit::sendMouseEventToInputContext( QMouseEvent *e ) ++{ ++#ifndef QT_NO_IM ++ if ( d->composeMode() ) { ++ int cursor = d->xToPosInternal( e->pos().x(), QTextItem::OnCharacters ); ++ int mousePos = cursor - d->imstart; ++ if ( mousePos >= 0 && mousePos < d->preeditLength() ) { ++ QWidget::sendMouseEventToInputContext( mousePos, e->type(), ++ e->button(), e->state() ); ++ } else if ( e->type() != QEvent::MouseMove ) { ++ // send button events on out of preedit ++ QWidget::sendMouseEventToInputContext( -1, e->type(), ++ e->button(), e->state() ); ++ } ++ return TRUE; ++ } ++#endif ++ return FALSE; ++} ++ ++ + /*! \reimp + */ + void QLineEdit::imStartEvent( QIMEvent *e ) +@@ -1832,6 +1878,8 @@ + } + if( !hasSelectedText() || style().styleHint( QStyle::SH_BlinkCursorWhenTextSelected ) ) + d->setCursorVisible( TRUE ); ++ if ( d->hasIMSelection() ) ++ d->cursor = d->imselstart; + d->updateMicroFocusHint(); + } + +@@ -1916,6 +1964,14 @@ + } else if (d->hscroll < 0) { + d->hscroll = 0; + } ++ // This updateMicroFocusHint() is corresponding to update() at ++ // IMCompose event. Although the function is invoked from various ++ // other points, some situations such as "candidate selection on ++ // AlignHCenter'ed text" need this invocation because ++ // updateMicroFocusHint() requires updated contentsRect(), and ++ // there are no other chances in such situation that invoke the ++ // function. ++ d->updateMicroFocusHint(); + // the y offset is there to keep the baseline constant in case we have script changes in the text. + QPoint topLeft = lineRect.topLeft() - QPoint(d->hscroll, d->ascent-fm.ascent()); + +@@ -1956,7 +2012,7 @@ + } + + // input method edit area +- if ( d->imstart < d->imend && (last >= d->imstart && first < d->imend ) ) { ++ if ( d->composeMode() && (last >= d->imstart && first < d->imend ) ) { + QRect highlight = QRect( QPoint( tix + ti.cursorToX( QMAX( d->imstart - first, 0 ) ), lineRect.top() ), + QPoint( tix + ti.cursorToX( QMIN( d->imend - first, last - first + 1 ) )-1, lineRect.bottom() ) ).normalize(); + p->save(); +@@ -1969,11 +2025,16 @@ + imCol.setHsv( h1, s1, ( v1 + v2 ) / 2 ); + p->fillRect( highlight, imCol ); + p->drawTextItem( topLeft, ti, textflags ); ++ // draw preedit's underline ++ if (d->imend - d->imstart > 0) { ++ p->setPen( cg.text() ); ++ p->drawLine( highlight.bottomLeft(), highlight.bottomRight() ); ++ } + p->restore(); + } + + // input method selection +- if ( d->imselstart < d->imselend && (last >= d->imselstart && first < d->imselend ) ) { ++ if ( d->hasIMSelection() && (last >= d->imselstart && first < d->imselend ) ) { + QRect highlight = QRect( QPoint( tix + ti.cursorToX( QMAX( d->imselstart - first, 0 ) ), lineRect.top() ), + QPoint( tix + ti.cursorToX( QMIN( d->imselend - first, last - first + 1 ) )-1, lineRect.bottom() ) ).normalize(); + p->save(); +@@ -2001,7 +2062,11 @@ + } + + // draw cursor +- if ( d->cursorVisible && !supressCursor ) { ++ // ++ // Asian users regard IM selection text as cursor on candidate ++ // selection phase of input method, so ordinary cursor should be ++ // invisible if IM selection text exists. ++ if ( d->cursorVisible && !supressCursor && !d->hasIMSelection() ) { + QPoint from( topLeft.x() + cix, lineRect.top() ); + QPoint to = from + QPoint( 0, lineRect.height() ); + p->drawLine( from, to ); +@@ -2116,6 +2181,10 @@ + void QLineEdit::contextMenuEvent( QContextMenuEvent * e ) + { + #ifndef QT_NO_POPUPMENU ++#ifndef QT_NO_IM ++ if ( d->composeMode() ) ++ return; ++#endif + d->separate(); + QPopupMenu *menu = createPopupMenu(); + if (!menu) +@@ -2169,6 +2238,13 @@ + + ACCEL_KEY( A ) + #endif + ); ++ ++#ifndef QT_NO_IM ++ QInputContext *qic = getInputContext(); ++ if ( qic ) ++ qic->addMenusTo( popup ); ++#endif ++ + popup->setItemEnabled( id - IdUndo, d->isUndoAvailable() ); + popup->setItemEnabled( id - IdRedo, d->isRedoAvailable() ); + #ifndef QT_NO_CLIPBOARD +@@ -2302,7 +2378,7 @@ + textLayout.endLine(0, 0, Qt::AlignLeft|Qt::SingleLine, &ascent); + } + +-int QLineEditPrivate::xToPos( int x, QTextItem::CursorPosition betweenOrOn ) const ++int QLineEditPrivate::xToPosInternal( int x, QTextItem::CursorPosition betweenOrOn ) const + { + x-= q->contentsRect().x() - hscroll + innerMargin; + for ( int i = 0; i < textLayout.numItems(); ++i ) { +@@ -2311,7 +2387,13 @@ + if ( x >= tir.left() && x <= tir.right() ) + return ti.xToCursor( x - tir.x(), betweenOrOn ) + ti.from(); + } +- return x < 0 ? 0 : text.length(); ++ return x < 0 ? -1 : text.length(); ++} ++ ++int QLineEditPrivate::xToPos( int x, QTextItem::CursorPosition betweenOrOn ) const ++{ ++ int pos = xToPosInternal( x, betweenOrOn ); ++ return ( pos < 0 ) ? 0 : pos; + } + + +@@ -2332,9 +2414,19 @@ + + void QLineEditPrivate::updateMicroFocusHint() + { ++ // To reduce redundant microfocus update notification, we remember ++ // the old rect and update the microfocus if actual update is ++ // required. The rect o is intentionally static because some ++ // notifyee requires the microfocus information as global update ++ // rather than per notifyee update to place shared widget around ++ // microfocus. ++ static QRect o; + if ( q->hasFocus() ) { +- QRect r = cursorRect(); +- q->setMicroFocusHint( r.x(), r.y(), r.width(), r.height() ); ++ QRect r = cursorRect(); ++ if ( o != r ) { ++ o = r; ++ q->setMicroFocusHint( r.x(), r.y(), r.width(), r.height() ); ++ } + } + } + +--- src/widgets/qlineedit.h ++++ src/widgets/qlineedit.h +@@ -196,6 +196,7 @@ + void dropEvent( QDropEvent * ); + #endif + void contextMenuEvent( QContextMenuEvent * ); ++ bool sendMouseEventToInputContext( QMouseEvent *e ); + virtual QPopupMenu *createPopupMenu(); + void windowActivationChange( bool ); + #ifndef QT_NO_COMPAT +--- src/widgets/qtextedit.cpp ++++ src/widgets/qtextedit.cpp +@@ -39,6 +39,11 @@ + + #ifndef QT_NO_TEXTEDIT + ++// Keep this position to avoid patch rejection ++#ifndef QT_NO_IM ++#include "qinputcontext.h" ++#endif ++ + #include "../kernel/qrichtext_p.h" + #include "qpainter.h" + #include "qpen.h" +@@ -108,6 +113,8 @@ + int id[ 7 ]; + int preeditStart; + int preeditLength; ++ bool composeMode() const { return ( preeditLength > 0 ); } ++ + uint ensureCursorVisibleInShowEvent : 1; + uint tabChangesFocus : 1; + QString scrollToAnchor; // used to deferr scrollToAnchor() until the show event when we are resized +@@ -1078,6 +1085,10 @@ + l += v; + } + } ++ ++ // This invocation is required to follow dragging of active window ++ // by the showed candidate window. ++ updateMicroFocusHint(); + } + + /*! +@@ -1553,6 +1564,35 @@ + } + + /*! ++ This function is not intended as polymorphic usage. Just a shared code ++ fragment that calls QWidget::sendMouseEventToInputContext() easily for this ++ class. ++ */ ++bool QTextEdit::sendMouseEventToInputContext( QMouseEvent *e ) ++{ ++#ifndef QT_NO_IM ++ if ( d->composeMode() ) { ++ QTextCursor c( doc ); ++ if ( c.place( e->pos(), doc->firstParagraph(), FALSE, FALSE, FALSE ) ) { ++ int mousePos = c.index() - d->preeditStart; ++ if ( cursor->globalY() == c.globalY() && ++ mousePos >= 0 && mousePos < d->preeditLength ) { ++ QWidget::sendMouseEventToInputContext( mousePos, e->type(), ++ e->button(), e->state() ); ++ } ++ } else if ( e->type() != QEvent::MouseMove ) { ++ // send button events on out of preedit ++ QWidget::sendMouseEventToInputContext( -1, e->type(), ++ e->button(), e->state() ); ++ } ++ return TRUE; ++ } ++#endif ++ return FALSE; ++} ++ ++ ++/*! + \reimp + */ + void QTextEdit::imStartEvent( QIMEvent *e ) +@@ -1582,11 +1622,17 @@ + doc->removeSelection( QTextDocument::IMCompositionText ); + doc->removeSelection( QTextDocument::IMSelectionText ); + +- if ( d->preeditLength > 0 && cursor->paragraph() ) ++ if ( d->composeMode() && cursor->paragraph() ) + cursor->paragraph()->remove( d->preeditStart, d->preeditLength ); + cursor->setIndex( d->preeditStart ); + d->preeditLength = e->text().length(); +- insert( e->text() ); ++ ++ int sellen = e->selectionLength(); ++ uint insertionFlags = CheckNewLines | RemoveSelected | AsIMCompositionText; ++ if ( sellen > 0 ) { ++ insertionFlags |= WithIMSelection; ++ } ++ insert( e->text(), insertionFlags ); + // insert can trigger an imEnd event as it emits a textChanged signal, so better + // be careful + if(d->preeditStart != -1) { +@@ -1598,14 +1644,20 @@ + + cursor->setIndex( d->preeditStart + e->cursorPos() ); + +- int sellen = e->selectionLength(); + if ( sellen > 0 ) { + cursor->setIndex( d->preeditStart + e->cursorPos() + sellen ); + c = *cursor; + cursor->setIndex( d->preeditStart + e->cursorPos() ); + doc->setSelectionStart( QTextDocument::IMSelectionText, *cursor ); + doc->setSelectionEnd( QTextDocument::IMSelectionText, c ); ++#if 0 ++ // Disabled for Asian input method that shows candidate ++ // window. This behavior is same as Qt/E 2.3.7 which supports ++ // Asian input methods. Asian input methods need start point ++ // of IM selection text to place candidate window as adjacent ++ // to the selection text. + cursor->setIndex( d->preeditStart + d->preeditLength ); ++#endif + } + } + +@@ -1629,11 +1681,12 @@ + if (undoRedoInfo.type == UndoRedoInfo::IME) + undoRedoInfo.type = UndoRedoInfo::Invalid; + +- if ( d->preeditLength > 0 && cursor->paragraph() ) ++ if ( d->composeMode() && cursor->paragraph() ) + cursor->paragraph()->remove( d->preeditStart, d->preeditLength ); + if ( d->preeditStart >= 0 ) { + cursor->setIndex( d->preeditStart ); +- insert( e->text() ); ++ //TODO: Qt 4 we should use the new virtual insert function ++ insert( e->text(), FALSE ); + } + d->preeditStart = d->preeditLength = -1; + +@@ -2124,6 +2177,13 @@ + isReadOnly() ) + return; + ++ // Asian users regard selection text as cursor on candidate ++ // selection phase of input method, so ordinary cursor should be ++ // invisible if IM selection text exists. ++ if ( doc->hasSelection( QTextDocument::IMSelectionText ) ) { ++ visible = FALSE; ++ } ++ + QPainter p( viewport() ); + QRect r( cursor->topParagraph()->rect() ); + cursor->paragraph()->setChanged( TRUE ); +@@ -2198,6 +2258,9 @@ + } + #endif + ++ if ( sendMouseEventToInputContext( e ) ) ++ return; ++ + if ( d->trippleClickTimer->isActive() && + ( e->globalPos() - d->trippleClickPoint ).manhattanLength() < + QApplication::startDragDistance() ) { +@@ -2303,7 +2366,9 @@ + return; + } + #endif +- if ( mousePressed ) { ++ if ( sendMouseEventToInputContext( e ) ) { ++ // don't return from here to avoid cursor vanishing ++ } else if ( mousePressed ) { + #ifndef QT_NO_DRAGANDDROP + if ( mightStartDrag ) { + dragStartTimer->stop(); +@@ -2360,7 +2425,7 @@ + + void QTextEdit::contentsMouseReleaseEvent( QMouseEvent * e ) + { +- if ( !inDoubleClick ) { // could be the release of a dblclick ++ if ( !inDoubleClick && !d->composeMode() ) { // could be the release of a dblclick + int para = 0; + int index = charAt( e->pos(), ¶ ); + emit clicked( para, index ); +@@ -2371,6 +2436,8 @@ + return; + } + #endif ++ if ( sendMouseEventToInputContext( e ) ) ++ return; + QTextCursor oldCursor = *cursor; + if ( scrollTimer->isActive() ) + scrollTimer->stop(); +@@ -2464,7 +2531,7 @@ + + void QTextEdit::contentsMouseDoubleClickEvent( QMouseEvent * e ) + { +- if ( e->button() != Qt::LeftButton ) { ++ if ( e->button() != Qt::LeftButton && !d->composeMode() ) { + e->ignore(); + return; + } +@@ -2495,6 +2562,9 @@ + } else + #endif + { ++ if ( sendMouseEventToInputContext( e ) ) ++ return; ++ + QTextCursor c1 = *cursor; + QTextCursor c2 = *cursor; + #if defined(Q_OS_MAC) +@@ -2670,10 +2740,15 @@ + */ + void QTextEdit::contentsContextMenuEvent( QContextMenuEvent *e ) + { ++ e->accept(); ++#ifndef QT_NO_IM ++ if ( d->composeMode() ) ++ return; ++#endif ++ + clearUndoRedo(); + mousePressed = FALSE; + +- e->accept(); + #ifndef QT_NO_POPUPMENU + QGuardedPtr that = this; + QGuardedPtr popup = createPopupMenu( e->pos() ); +@@ -2823,6 +2898,12 @@ + void QTextEdit::updateMicroFocusHint() + { + QTextCursor c( *cursor ); ++#if 0 ++ // Disabled for Asian input method that shows candidate ++ // window. This behavior is same as Qt/E 2.3.7 which supports ++ // Asian input methods. Asian input methods need start point of IM ++ // selection text to place candidate window as adjacent to the ++ // selection text. + if ( d->preeditStart != -1 ) { + c.setIndex( d->preeditStart ); + if(doc->hasSelection(QTextDocument::IMSelectionText)) { +@@ -2831,7 +2912,8 @@ + c.setIndex(index); + } + } +- ++#endif ++ + if ( hasFocus() || viewport()->hasFocus() ) { + int h = c.paragraph()->lineHeightOfChar( cursor->index() ); + if ( !readonly ) { +@@ -2995,6 +3077,8 @@ + bool indent = insertionFlags & RedoIndentation; + bool checkNewLine = insertionFlags & CheckNewLines; + bool removeSelected = insertionFlags & RemoveSelected; ++ bool imComposition = insertionFlags & AsIMCompositionText; ++ bool imSelection = insertionFlags & WithIMSelection; + QString txt( text ); + drawCursor( FALSE ); + if ( !isReadOnly() && doc->hasSelection( QTextDocument::Standard ) && removeSelected ) +@@ -3034,7 +3118,10 @@ + formatMore(); + repaintChanged(); + ensureCursorVisible(); +- drawCursor( TRUE ); ++ // Asian users regard selection text as cursor on candidate ++ // selection phase of input method, so ordinary cursor should be ++ // invisible if IM selection text exists. ++ drawCursor( !imSelection ); + + if ( undoEnabled && !isReadOnly() && undoRedoInfo.type != UndoRedoInfo::IME ) { + undoRedoInfo.d->text += txt; +@@ -3056,7 +3143,13 @@ + doc->setSelectionEnd( QTextDocument::Standard, *cursor ); + repaintChanged(); + } +- updateMicroFocusHint(); ++ // updateMicroFocusHint() should not be invoked here when this ++ // function is invoked from imComposeEvent() because cursor ++ // postion is incorrect yet. imComposeEvent() invokes ++ // updateMicroFocusHint() later. ++ if ( !imComposition ) { ++ updateMicroFocusHint(); ++ } + setModified(); + emit textChanged(); + } +@@ -5568,6 +5661,13 @@ + #else + d->id[ IdSelectAll ] = popup->insertItem( tr( "Select All" ) + ACCEL_KEY( A ) ); + #endif ++ ++#ifndef QT_NO_IM ++ QInputContext *qic = getInputContext(); ++ if ( qic ) ++ qic->addMenusTo( popup ); ++#endif ++ + popup->setItemEnabled( d->id[ IdUndo ], !isReadOnly() && doc->commands()->isUndoAvailable() ); + popup->setItemEnabled( d->id[ IdRedo ], !isReadOnly() && doc->commands()->isRedoAvailable() ); + #ifndef QT_NO_CLIPBOARD +--- src/widgets/qtextedit.h ++++ src/widgets/qtextedit.h +@@ -211,7 +211,9 @@ + enum TextInsertionFlags { + RedoIndentation = 0x0001, + CheckNewLines = 0x0002, +- RemoveSelected = 0x0004 ++ RemoveSelected = 0x0004, ++ AsIMCompositionText = 0x0008, // internal use ++ WithIMSelection = 0x0010 // internal use + }; + + QTextEdit( const QString& text, const QString& context = QString::null, +@@ -439,6 +441,7 @@ + void contentsDropEvent( QDropEvent *e ); + #endif + void contentsContextMenuEvent( QContextMenuEvent *e ); ++ bool sendMouseEventToInputContext( QMouseEvent *e ); + bool focusNextPrevChild( bool next ); + QTextDocument *document() const; + QTextCursor *textCursor() const; +--- tools/qtconfig/mainwindowbase.ui ++++ tools/qtconfig/mainwindowbase.ui +@@ -1016,6 +1016,19 @@ + 0 +
    +
    ++ ++ ++ inputMethodLabel ++ ++ ++ Default Input Method: ++ ++ ++ ++ ++ inputMethodCombo ++ ++ + + + spacer5 +@@ -1029,7 +1042,7 @@ + + + 20 +- 40 ++ 30 + + + +@@ -1705,6 +1718,12 @@ + somethingModified() + + ++ inputMethodCombo ++ activated(int) ++ MainWindowBase ++ somethingModified() ++ ++ + gstylecombo + activated(const QString&) + MainWindowBase +--- tools/qtconfig/mainwindow.cpp ++++ tools/qtconfig/mainwindow.cpp +@@ -27,6 +27,7 @@ + #include + #include + #include ++#include + #include + #include + #include +@@ -361,13 +362,73 @@ + + rtlExtensions->setChecked( settings.readBoolEntry( "/qt/useRtlExtensions", FALSE ) ); + +-#ifdef Q_WS_X11 ++#if defined(Q_WS_X11) + inputStyle->setCurrentText( settings.readEntry( "/qt/XIMInputStyle", trUtf8( "On The Spot" ) ) ); + #else + inputStyle->hide(); + inputStyleLabel->hide(); + #endif + ++#if defined(Q_WS_X11) && !defined(QT_NO_IM_EXTENSIONS) ++ /* ++ This code makes it possible to set up default input method. ++ ++ The list of identifier names of input method which can be used ++ is acquired using QInputContextFactory::keys(). And it is ++ translated to display name and set to inputMethodCombo which ++ displays the list of input method. ++ */ ++ inputMethodIdentifiers = QInputContextFactory::keys(); ++ QStringList imDispNames; ++ { ++ // input method switcher should named with "imsw-" prefix to ++ // prevent to be listed in ordinary input method list. ++ QStringList::Iterator imIt = inputMethodIdentifiers.begin(); ++ while (imIt != inputMethodIdentifiers.end()) { ++ if ((*imIt).find("imsw-") == 0) ++ imIt = inputMethodIdentifiers.remove(imIt); ++ else ++ imIt++; ++ } ++ // we should not sort the list ++ //inputMethodIdentifiers.sort(); ++ for (imIt = inputMethodIdentifiers.begin(); ++ imIt != inputMethodIdentifiers.end(); ++ imIt++) { ++ QString dispName = QInputContextFactory::displayName(*imIt); ++ if (dispName.isNull() || dispName.isEmpty()) ++ dispName = *imIt; ++ imDispNames << dispName; ++ } ++ } ++ //inputMethodCombo->insertStringList(inputMethodIdentifiers); ++ inputMethodCombo->insertStringList(imDispNames); ++ ++ /* ++ input method set up as a default in the past is chosen. ++ If nothing is set up, default input method in the platform is chosen. ++ */ ++ // default input method is XIM in X11. ++ QString currentIM = settings.readEntry("/qt/DefaultInputMethod", "xim"); ++ { ++ int index = inputMethodIdentifiers.findIndex(currentIM); ++ // set up Selected input method. ++ if (0 <= index && index < inputMethodIdentifiers.count()) { ++ inputMethodCombo->setCurrentItem(index); ++ } else { ++ // Give up. this part is executed when specified IM is not ++ // installed. ++ QString dispName = tr("Unknown Input Method") + " (" + currentIM + ")"; ++ inputMethodCombo->insertItem(dispName); ++ inputMethodCombo->setCurrentItem(inputMethodCombo->count() - 1); ++ inputMethodIdentifiers << currentIM; ++ } ++ } ++#else ++ inputMethodCombo->hide(); ++ inputMethodLabel->hide(); ++#endif ++ + fontembeddingcheckbox->setChecked( settings.readBoolEntry("/qt/embedFonts", TRUE) ); + fontpaths = settings.readListEntry("/qt/fontPath", ':'); + fontpathlistbox->insertStringList(fontpaths); +@@ -444,6 +505,13 @@ + else if ( style == trUtf8( "Root" ) ) + str = "Root"; + settings.writeEntry( "/qt/XIMInputStyle", inputStyle->currentText() ); ++ ++#if !defined(QT_NO_IM_EXTENSIONS) ++ QString imSwitcher = settings.readEntry("/qt/DefaultInputMethodSwitcher", "imsw-multi"); ++ settings.writeEntry("/qt/DefaultInputMethodSwitcher", imSwitcher); ++ int imIndex = inputMethodCombo->currentItem(); ++ settings.writeEntry("/qt/DefaultInputMethod", inputMethodIdentifiers[imIndex]); ++#endif + #endif + + QStringList effects; +--- tools/qtconfig/mainwindow.h ++++ tools/qtconfig/mainwindow.h +@@ -83,6 +83,7 @@ + QPalette editPalette, previewPalette; + QStyle *previewstyle; + QStringList fontpaths; ++ QStringList inputMethodIdentifiers; + bool modified; + }; + diff --git a/opensuse/core/qt3/qt.patch b/opensuse/core/qt3/qt.patch new file mode 100644 index 000000000..fb236265a --- /dev/null +++ b/opensuse/core/qt3/qt.patch @@ -0,0 +1,270 @@ +--- src/dialogs/qcolordialog.cpp ++++ src/dialogs/qcolordialog.cpp +@@ -60,6 +60,10 @@ + QColor macGetColor( const QColor& initial, QWidget *parent, const char *name ); + #endif + ++#ifdef Q_WS_X11 ++#include "private/qtkdeintegration_x11_p.h" ++#endif ++ + //////////// QWellArray BEGIN + + struct QWellArrayData; +@@ -1478,7 +1482,10 @@ + QColor QColorDialog::getColor( const QColor& initial, QWidget *parent, + const char *name ) + { +-#if defined(Q_WS_MAC) ++#if defined(Q_WS_X11) ++ if( QKDEIntegration::enabled()) ++ return QKDEIntegration::getColor( initial, parent, name ); ++#elif defined(Q_WS_MAC) + return macGetColor(initial, parent, name); + #endif + +@@ -1516,6 +1523,13 @@ + QWidget *parent, const char* name ) + { + #if defined(Q_WS_MAC) ++ if( QKDEIntegration::enabled()) { ++ QColor color = QKDEIntegration::getColor( QColor( initial ), parent, name ); ++ if( ok ) ++ *ok = color.isValid(); ++ return color.rgba(); ++ } ++#elif defined(Q_WS_MAC) + return macGetRgba(initial, ok, parent, name); + #endif + +--- src/dialogs/qfiledialog.cpp ++++ src/dialogs/qfiledialog.cpp +@@ -92,6 +92,10 @@ + #include "qvbox.h" + #include "qwidgetstack.h" + ++#ifdef Q_WS_X11 ++#include "private/qtkdeintegration_x11_p.h" ++#endif ++ + #ifdef Q_WS_WIN + #ifdef QT_THREAD_SUPPORT + # include +@@ -3464,7 +3468,11 @@ + if ( workingDirectory->isNull() ) + *workingDirectory = ::toRootIfNotExists( QDir::currentDirPath() ); + +-#if defined(Q_WS_WIN) ++#if defined(Q_WS_X11) ++ if ( qt_use_native_dialogs && QKDEIntegration::enabled()) ++ return QKDEIntegration::getOpenFileNames( filter, workingDirectory, parent, name, ++ caption, selectedFilter, false ).first(); ++#elif defined(Q_WS_WIN) + if ( qt_use_native_dialogs && qApp->style().styleHint( QStyle::SH_GUIStyle ) == WindowsStyle ) + return winGetOpenFileName( initialSelection, filter, workingDirectory, + parent, name, caption, selectedFilter ); +@@ -3585,7 +3593,11 @@ + if ( workingDirectory->isNull() ) + *workingDirectory = ::toRootIfNotExists( QDir::currentDirPath() ); + +-#if defined(Q_WS_WIN) ++#if defined(Q_WS_X11) ++ if ( qt_use_native_dialogs && QKDEIntegration::enabled()) ++ return QKDEIntegration::getSaveFileName( initialSelection, filter, workingDirectory, ++ parent, name, caption, selectedFilter ); ++#elif defined(Q_WS_WIN) + if ( qt_use_native_dialogs && qApp->style().styleHint( QStyle::SH_GUIStyle ) == WindowsStyle ) + return winGetSaveFileName( initialSelection, filter, workingDirectory, + parent, name, caption, selectedFilter ); +@@ -4475,7 +4487,17 @@ + if ( workingDirectory ) + wd = *workingDirectory; + +-#if defined(Q_WS_WIN) ++#if defined(Q_WS_X11) ++ QString initialDir; ++ if ( !dir.isEmpty() ) { ++ QUrlOperator u( dir ); ++ if ( QFileInfo( u.path() ).isDir() ) ++ initialDir = dir; ++ } else ++ initialDir = QString::null; ++ if ( qt_use_native_dialogs && QKDEIntegration::enabled()) ++ return QKDEIntegration::getExistingDirectory( initialDir, parent, name, caption ); ++#elif defined(Q_WS_WIN) + QString initialDir; + if ( !dir.isEmpty() ) { + QUrlOperator u( dir ); +@@ -5636,7 +5658,10 @@ + } + } + +-#if defined(Q_WS_WIN) ++#if defined(Q_WS_X11) ++ if ( qt_use_native_dialogs && QKDEIntegration::enabled()) ++ return QKDEIntegration::getOpenFileNames( filter, workingDirectory, parent, name, caption, selectedFilter, true ); ++#elif defined(Q_WS_WIN) + if ( qt_use_native_dialogs && qApp->style().styleHint( QStyle::SH_GUIStyle ) == WindowsStyle ) + return winGetOpenFileNames( filter, workingDirectory, parent, name, caption, selectedFilter ); + #elif defined(Q_WS_MAC) +--- src/dialogs/qfontdialog.cpp ++++ src/dialogs/qfontdialog.cpp +@@ -56,6 +56,10 @@ + #include + #include + ++#ifdef Q_WS_X11 ++#include "private/qtkdeintegration_x11_p.h" ++#endif ++ + /*! + \class QFontDialog qfontdialog.h + \ingroup dialogs +@@ -384,9 +388,15 @@ + return getFont( ok, 0, parent, name ); + } + ++extern bool qt_use_native_dialogs; ++ + QFont QFontDialog::getFont( bool *ok, const QFont *def, + QWidget *parent, const char* name) + { ++#if defined(Q_WS_X11) ++ if ( qt_use_native_dialogs && QKDEIntegration::enabled()) ++ return QKDEIntegration::getFont( ok, def, parent, name ); ++#endif + QFont result; + if ( def ) + result = *def; +--- src/dialogs/qmessagebox.cpp ++++ src/dialogs/qmessagebox.cpp +@@ -54,6 +54,12 @@ + #endif + + ++#ifdef Q_WS_X11 ++#include "private/qtkdeintegration_x11_p.h" ++#endif ++ ++extern bool qt_use_native_dialogs; ++ + // Internal class - don't touch + + class QMessageBoxLabel : public QLabel +@@ -1110,6 +1116,10 @@ + const QString& caption, const QString& text, + int button0, int button1, int button2 ) + { ++#if defined(Q_WS_X11) ++ if ( qt_use_native_dialogs && QKDEIntegration::enabled()) ++ return QKDEIntegration::information( parent, caption, text, button0, button1, button2 ); ++#endif + QMessageBox *mb = new QMessageBox( caption, text, Information, + button0, button1, button2, + parent, "qt_msgbox_information", TRUE, +@@ -1157,6 +1167,10 @@ + const QString& caption, const QString& text, + int button0, int button1, int button2 ) + { ++#if defined(Q_WS_X11) ++ if ( qt_use_native_dialogs && QKDEIntegration::enabled()) ++ return QKDEIntegration::question( parent, caption, text, button0, button1, button2 ); ++#endif + QMessageBox *mb = new QMessageBox( caption, text, Question, + button0, button1, button2, + parent, "qt_msgbox_information", TRUE, +@@ -1205,6 +1219,10 @@ + const QString& caption, const QString& text, + int button0, int button1, int button2 ) + { ++#if defined(Q_WS_X11) ++ if ( qt_use_native_dialogs && QKDEIntegration::enabled()) ++ return QKDEIntegration::warning( parent, caption, text, button0, button1, button2 ); ++#endif + QMessageBox *mb = new QMessageBox( caption, text, Warning, + button0, button1, button2, + parent, "qt_msgbox_warning", TRUE, +@@ -1253,6 +1271,10 @@ + const QString& caption, const QString& text, + int button0, int button1, int button2 ) + { ++#if defined(Q_WS_X11) ++ if ( qt_use_native_dialogs && QKDEIntegration::enabled()) ++ return QKDEIntegration::critical( parent, caption, text, button0, button1, button2 ); ++#endif + QMessageBox *mb = new QMessageBox( caption, text, Critical, + button0, button1, button2, + parent, "qt_msgbox_critical", TRUE, +@@ -1400,6 +1422,11 @@ + int defaultButtonNumber, + int escapeButtonNumber ) + { ++#if defined(Q_WS_X11) ++ if ( qt_use_native_dialogs && QKDEIntegration::enabled()) ++ return QKDEIntegration::information( parent, caption, text, ++ button0Text, button1Text, button2Text, defaultButtonNumber, escapeButtonNumber ); ++#endif + return textBox( parent, Information, caption, text, + button0Text, button1Text, button2Text, + defaultButtonNumber, escapeButtonNumber ); +@@ -1442,6 +1469,11 @@ + int defaultButtonNumber, + int escapeButtonNumber ) + { ++#if defined(Q_WS_X11) ++ if ( qt_use_native_dialogs && QKDEIntegration::enabled()) ++ return QKDEIntegration::question( parent, caption, text, ++ button0Text, button1Text, button2Text, defaultButtonNumber, escapeButtonNumber ); ++#endif + return textBox( parent, Question, caption, text, + button0Text, button1Text, button2Text, + defaultButtonNumber, escapeButtonNumber ); +@@ -1486,6 +1518,11 @@ + int defaultButtonNumber, + int escapeButtonNumber ) + { ++#if defined(Q_WS_X11) ++ if ( qt_use_native_dialogs && QKDEIntegration::enabled()) ++ return QKDEIntegration::warning( parent, caption, text, ++ button0Text, button1Text, button2Text, defaultButtonNumber, escapeButtonNumber ); ++#endif + return textBox( parent, Warning, caption, text, + button0Text, button1Text, button2Text, + defaultButtonNumber, escapeButtonNumber ); +@@ -1526,6 +1563,11 @@ + int defaultButtonNumber, + int escapeButtonNumber ) + { ++#if defined(Q_WS_X11) ++ if ( qt_use_native_dialogs && QKDEIntegration::enabled()) ++ return QKDEIntegration::critical( parent, caption, text, ++ button0Text, button1Text, button2Text, defaultButtonNumber, escapeButtonNumber ); ++#endif + return textBox( parent, Critical, caption, text, + button0Text, button1Text, button2Text, + defaultButtonNumber, escapeButtonNumber ); +--- src/kernel/qt.h ++++ src/kernel/qt.h +@@ -313,6 +313,10 @@ + #endif // Private headers + + ++#ifdef Q_WS_X11 ++#include "private/qtkdeintegration_x11_p.h" ++#endif ++ + #ifdef Q_WS_MAC + #include + #include +--- src/kernel/qt_x11.pri ++++ src/kernel/qt_x11.pri +@@ -10,6 +10,9 @@ + + SOURCES += $$KERNEL_CPP/qtaddons_x11.cpp + PRECOMPILED_HEADER = kernel/qt_pch.h ++ ++ SOURCES += $$KERNEL_CPP/qtkdeintegration_x11.cpp ++ HEADERS += $$KERNEL_H/qtkdeintegration_x11_p.h + } + + nas { diff --git a/opensuse/core/qt3/qt3-3.3.8b-translations.tar.bz2 b/opensuse/core/qt3/qt3-3.3.8b-translations.tar.bz2 new file mode 100644 index 000000000..a94839aa5 Binary files /dev/null and b/opensuse/core/qt3/qt3-3.3.8b-translations.tar.bz2 differ diff --git a/opensuse/core/qt3/qt3-arm-gcc4.patch b/opensuse/core/qt3/qt3-arm-gcc4.patch new file mode 100644 index 000000000..d9f38f547 --- /dev/null +++ b/opensuse/core/qt3/qt3-arm-gcc4.patch @@ -0,0 +1,22 @@ +--- src/tools/qglobal.h ++++ src/tools/qglobal.h +@@ -317,7 +317,7 @@ + supposedly know what you are doing.) */ + # if (defined(__arm__) || defined(__ARMEL__)) && !defined(QT_MOC_CPP) + # define Q_PACKED __attribute__ ((packed)) +-# if __GNUC__ == 3 && __GNUC_MINOR__ >= 4 ++# if (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) || __GNUC__ > 3 + # define Q_NO_PACKED_REFERENCE + # endif + # endif +--- src/tools/qstring.h ++++ src/tools/qstring.h +@@ -194,7 +194,7 @@ + char latin1() const { return ucs > 0xff ? 0 : (char) ucs; } + ushort unicode() const { return ucs; } + #ifdef Q_NO_PACKED_REFERENCE +- ushort &unicode() { return *(&ucs); } ++ ushort &unicode() { return *((ushort*)&ucs); } + #else + ushort &unicode() { return ucs; } + #endif diff --git a/opensuse/core/qt3/qt3-devel-doc.changes b/opensuse/core/qt3/qt3-devel-doc.changes new file mode 100644 index 000000000..db0df1efa --- /dev/null +++ b/opensuse/core/qt3/qt3-devel-doc.changes @@ -0,0 +1,2475 @@ +------------------------------------------------------------------- +Fri Sep 23 10:16:33 UTC 2011 - coolo@suse.com + +- fix qt3-extensions + +------------------------------------------------------------------- +Fri Apr 22 18:31:12 UTC 2011 - anixx@opensuse.org + +- changed compression to .tar.bz2 + +------------------------------------------------------------------- +Thu Apr 21 11:40:38 CEST 2011 - pth@suse.de + +- Don't try to patch in the version twice in qt-3.3.8c.diff. +- Resync those patches that don't apply without offset. +- Mark scriptlets in profile.d as being configuration files. +- Remove the calls to run_ldconfig. + +------------------------------------------------------------------- +Mon Apr 18 18:46:34 UTC 2011 - robxu9@gmail.com + +- a fix to the 3.3.8c patch + +------------------------------------------------------------------- +Thu Mar 31 18:15:29 UTC 2011 - coolo@novell.com + +- another gcc 4.6 fix + +------------------------------------------------------------------- +Mon Jan 31 21:23:51 UTC 2011 - robxu9@gmail.com + +- Update to version 3.3.8c, by the Trinity Project +- pre_checkin.sh was not run as this caused too many unneccesary + changes to occur. +- The translations tarball was left at version 3.3.8b. + +------------------------------------------------------------------- +Sat Nov 20 02:26:08 CET 2010 - dmueller@suse.de + +- fix build against gcc 4.6 + +------------------------------------------------------------------- +Mon Nov 1 10:09:40 UTC 2010 - coolo@novell.com + +- fix libpng dependencies + +------------------------------------------------------------------- +Wed Sep 1 13:22:38 UTC 2010 - pgajdos@novell.com + +- port to libpng14 + +------------------------------------------------------------------- +Wed May 5 19:42:33 UTC 2010 - coolo@novell.com + +- do not patch the symlink + +------------------------------------------------------------------- +Mon Apr 5 21:06:20 CEST 2010 - dmueller@suse.de + +- fix -devel package requires +- simplify requires of sub-specfiles + +------------------------------------------------------------------- +Mon Apr 5 16:00:15 CEST 2010 - dmueller@suse.de + +- build against libpng12 + +------------------------------------------------------------------- +Thu Jan 21 14:24:13 CET 2010 - dmueller@suse.de + +- recommend kdelibs3-default-style (bnc#544581) + +------------------------------------------------------------------- +Fri Dec 18 17:04:51 CET 2009 - jengelh@medozas.de + +- add baselibs.conf as a source +- add baselib definitions for SPARC + +------------------------------------------------------------------- +Fri Nov 13 14:28:47 CET 2009 - dmueller@suse.de + +- fix patches to apply with fuzz=0 + +------------------------------------------------------------------- +Tue Nov 3 19:14:30 UTC 2009 - coolo@novell.com + +- updated patches to apply with fuzz=0 + +------------------------------------------------------------------- +Tue Aug 11 11:24:13 CEST 2009 - dmueller@suse.de + +- fix popen leak (bnc#529615) + +------------------------------------------------------------------- +Mon Feb 9 12:08:04 CET 2009 - coolo@suse.de + +- strip out date from .la files + +------------------------------------------------------------------- +Sat Feb 7 20:43:40 CET 2009 - coolo@suse.de + +- do not put timestamps in generated sources + +------------------------------------------------------------------- +Wed Jan 7 12:34:56 CET 2009 - olh@suse.de + +- obsolete old -XXbit packages (bnc#437293) + +------------------------------------------------------------------- +Tue Nov 11 16:57:56 CET 2008 - ro@suse.de + +- SLE-11 uses PPC64 instead of PPC, adapt baselibs.conf + +------------------------------------------------------------------- +Wed Sep 10 18:50:12 CEST 2008 - dmueller@suse.de + +- remove qt3-static package + +------------------------------------------------------------------- +Mon Jul 21 21:20:47 CEST 2008 - dmueller@suse.de + +- more verbose qtimer debug + +------------------------------------------------------------------- +Sun Jun 22 13:00:45 CEST 2008 - schwab@suse.de + +- Fix invalid array reference in font name parser. + +------------------------------------------------------------------- +Thu Apr 10 12:54:45 CEST 2008 - ro@suse.de + +- added baselibs.conf file to build xxbit packages + for multilib support + +------------------------------------------------------------------- +Mon Mar 10 16:48:36 CET 2008 - dmueller@suse.de + +- fix build with updated x.org + +------------------------------------------------------------------- +Thu Feb 7 17:51:25 CET 2008 - dmueller@suse.de + +- fix memory corruption when removing CRTc's dynamically + +------------------------------------------------------------------- +Sat Jan 19 07:19:25 CET 2008 - stbinner@suse.de + +- This version adds the GNU Public License version 3 as a + possible choice for licenses to the Open Source releases of Qt 3. +- upstreaming of patches and few other minor bugfixes + +------------------------------------------------------------------- +Tue Jan 15 01:42:37 CET 2008 - dmueller@suse.de + +- fix xrandr resize race (#335410) + +------------------------------------------------------------------- +Thu Dec 6 01:32:32 CET 2007 - dmueller@suse.de + +- fix the build key for gcc 4.3 + +------------------------------------------------------------------- +Mon Dec 3 15:12:36 CET 2007 - dmueller@suse.de + +- back out khmer "fix" from 3.3.8, which apparently + made it worse (#345459) + +------------------------------------------------------------------- +Tue Nov 20 20:25:18 CET 2007 - dmueller@suse.de + +- fix build with gcc 4.3 again + +------------------------------------------------------------------- +Mon Oct 1 11:48:51 CEST 2007 - dmueller@suse.de + +- fix build with gcc 4.3 + +------------------------------------------------------------------- +Fri Sep 7 12:32:22 CEST 2007 - dmueller@suse.de + +- fix off-by-one in utf8 decoder (#304249, CVE-2007-4137) +- fix typo in QDate::fromString() + +------------------------------------------------------------------- +Wed Aug 29 17:08:22 CEST 2007 - llunak@suse.cz + +- fix reading MNG files, visible in Kickoff (#278548) +- remove patching of symlinks from the immodule patch +- improve support for compositing (qt-copy patches #0079,#0080) + +------------------------------------------------------------------- +Fri Aug 24 18:39:04 CEST 2007 - dmueller@suse.de + +- fix format string issues (#291754, CVE-2007-3388) +- fix xrandr 1.2 detection + +------------------------------------------------------------------- +Thu Jul 5 17:25:18 CEST 2007 - coolo@suse.de + +- package desktop files and png files + +------------------------------------------------------------------- +Thu Jun 21 12:04:33 CEST 2007 - stbinner@suse.de + +- run fdupes in qt3-extensions.spec + +------------------------------------------------------------------- +Thu May 24 19:15:38 CEST 2007 - dmueller@suse.de + +- redo the last change in the correct spec file + +------------------------------------------------------------------- +Wed May 23 17:08:39 CEST 2007 - dmueller@suse.de + +- qt3-examples -> qt3-devel-examples + +------------------------------------------------------------------- +Thu May 17 06:49:50 CEST 2007 - stbinner@suse.de + +- removed some historic stuff from the spec file + +------------------------------------------------------------------- +Tue May 8 14:32:40 CEST 2007 - dmueller@suse.de + +- trust libxinerama only if it provides more screens + than xrandr crtcs (#264199) + +------------------------------------------------------------------- +Fri May 4 19:06:40 CEST 2007 - dmueller@suse.de + +- fix permissions of qmake specs + +------------------------------------------------------------------- +Wed May 2 11:50:07 CEST 2007 - coolo@suse.de + +- remove Suse-translate from desktop file +- remove obsolete suse version support + +------------------------------------------------------------------- +Mon Apr 30 14:39:40 CEST 2007 - stbinner@suse.de + +- fix build of qt3-devel-doc with desktop-file-validate run + +------------------------------------------------------------------- +Mon Apr 16 16:10:59 CEST 2007 - dmueller@suse.de + +- temporarily disable Xrandr 1.2 support until (#264199) is + resolved +- use -Bsymbolic-functions + +------------------------------------------------------------------- +Sun Apr 1 20:40:04 CEST 2007 - dmueller@suse.de + +- fix utf8 decoder (#259187, CVE-2007-0242) + +------------------------------------------------------------------- +Thu Mar 29 18:02:30 CEST 2007 - dmueller@suse.de + +- Fix XRandr 1.2 support + +------------------------------------------------------------------- +Fri Mar 16 14:52:22 CET 2007 - dmueller@suse.de + +- call XftDefaultSubstitute (#255330) + +------------------------------------------------------------------- +Thu Mar 15 11:07:44 CET 2007 - dmueller@suse.de + +- update font fix patch (#244579) + +------------------------------------------------------------------- +Mon Mar 12 16:09:29 CET 2007 - dmueller@suse.de + +- enable tablet support (#253392) +- add default substitution for font queries (#244579) + +------------------------------------------------------------------- +Tue Mar 6 19:37:48 CET 2007 - dmueller@suse.de + +- fix mysql driver crash on shutdown (#251222) + +------------------------------------------------------------------- +Sun Feb 25 11:52:26 CET 2007 - dmueller@suse.de + +- update to 3.3.8: + * changelog is under /usr/share/doc/packages/qt3/changes-3.3.8 + +------------------------------------------------------------------- +Wed Feb 21 13:00:52 CET 2007 - dmueller@suse.de + +- fix build for 9.3 + +------------------------------------------------------------------- +Wed Feb 7 10:39:13 CET 2007 - dmueller@suse.de + +- also build qt3-static as full-config + +------------------------------------------------------------------- +Mon Feb 5 15:18:34 CET 2007 - stbinner@suse.de + +- fix build of qt3-extensions on 9.3 + +------------------------------------------------------------------- +Fri Feb 2 15:41:36 CET 2007 - stbinner@suse.de + +- fix changelog chronological order + +------------------------------------------------------------------- +Wed Jan 31 21:40:07 CET 2007 - dmueller@suse.de + +- add a sanity check to ensure that we have a full version +- fix compile warnings in headers + +------------------------------------------------------------------- +Tue Jan 9 15:36:14 CET 2007 - dmueller@suse.de + +- drop misfuzzed patch + +------------------------------------------------------------------- +Mon Jan 8 18:35:16 CET 2007 - dmueller@suse.de + +- add patch to fix indic rendering issue + +------------------------------------------------------------------- +Tue Oct 31 13:18:44 CET 2006 - dmueller@suse.de + +- add patch to fix han localisation issue (#216183) +- update qt-debug-timer patch to output more verbose debug +- add patch to fix xinerama issue with popupmenus (#216235) + +------------------------------------------------------------------- +Fri Oct 20 15:54:30 CEST 2006 - dmueller@suse.de + +- update to 3.3.7: + * include CVE-2006-4811 patch + +------------------------------------------------------------------- +Thu Oct 19 15:21:51 CEST 2006 - dmueller@suse.de + +- add patch for integer overflow in QPixmap/QImage + (#212544, CVE-2006-4811) + +------------------------------------------------------------------- +Tue Oct 10 23:31:01 CEST 2006 - dmueller@suse.de + +- add patch for qtimer debugging + +------------------------------------------------------------------- +Wed Oct 4 19:39:56 CEST 2006 - dmueller@suse.de + +- fix headers to compile in -pedantic mode + +------------------------------------------------------------------- +Thu Sep 14 13:27:03 CEST 2006 - dmueller@suse.de + +- don't install static libs as executable + +------------------------------------------------------------------- +Fri Sep 1 16:18:07 CEST 2006 - llunak@suse.cz + +- Add patches with Xinerama improvements. + +------------------------------------------------------------------- +Thu Aug 17 13:42:28 CEST 2006 - stbinner@suse.de + +- fix qt3-devel-tools file conflict with qt-devel-doc + +------------------------------------------------------------------- +Tue Aug 1 14:47:18 CEST 2006 - stbinner@suse.de + +- disable noisy debug message in qt-x11-immodule-unified diff + +------------------------------------------------------------------- +Sun Jul 9 21:39:54 CEST 2006 - stbinner@suse.de + +- fix {designer3,linguist}.desktop starting Qt4 versions (#190135) + +------------------------------------------------------------------- +Tue Jul 04 15:12:18 CEST 2006 - mfabian@suse.de + +- update qt-x11-immodule-unified diff to 20060318 version. + This update already includes the following patches: + + fix-x11-immodule.diff + + disable-inputmethod-for-passords.patch + + qt-x11-immodule-capitalization-fix.diff + + fix-im-crash-on-exit.diff + + fix-immodule-buffer-overflow.diff + + qt-x11-immodule-qtextedit-fix.diff + + qt-x11-immodule-focus-handling.diff + + qt-x11-immodule-fix-inputcontext-crash.diff + which are thus removed. + +------------------------------------------------------------------- +Wed Jun 28 10:07:30 CEST 2006 - dmueller@suse.de + +- fix $QT_SYSTEM_DIR (#188217) + +------------------------------------------------------------------- +Fri Jun 9 15:25:49 CEST 2006 - llunak@suse.de + +- add $QT_SYSTEM_DIR (#183059) + +------------------------------------------------------------------- +Wed May 31 15:51:01 CEST 2006 - adrian@suse.de + +- remove BuildRequires libdrm-devel + +------------------------------------------------------------------- +Wed May 31 13:24:56 CEST 2006 - dmueller@suse.de + +- fix xpm image loading problem +- add performance regression fix +- add asian font loading fix + +------------------------------------------------------------------- +Mon May 29 08:41:44 CEST 2006 - adrian@suse.de + +- revert requires macro, this breaks the build system mapping +- require right packages in -devel for < 10.1 + +------------------------------------------------------------------- +Fri May 26 19:40:44 CEST 2006 - dmueller@suse.de + +- fix build + +------------------------------------------------------------------- +Fri May 26 10:42:43 CEST 2006 - dmueller@suse.de + +- 3.3.6 update + * numerous bugfixes and translations + +------------------------------------------------------------------- +Wed May 10 17:12:34 CEST 2006 - dmueller@suse.de + +- drop substitutions from global rc file (#171513) + +------------------------------------------------------------------- +Fri Apr 14 01:46:36 CEST 2006 - dmueller@suse.de + +- drop linguist3.png/desktop as its unused and install + linguist.desktop instead (fixes build failure). + +------------------------------------------------------------------- +Mon Apr 10 10:40:11 CEST 2006 - dmueller@suse.de + +- strip installed static libraries +- fix file conflict with Qt4 packages + +------------------------------------------------------------------- +Mon Apr 3 16:34:14 CEST 2006 - dmueller@suse.de + +- restore libraryPaths which broke instsys (#162930) + +------------------------------------------------------------------- +Thu Mar 30 12:49:05 CEST 2006 - coolo@suse.de + +- update qtrc to the real values avoiding dark gray platinum even + if not overwritten with desktop settings + +------------------------------------------------------------------- +Tue Mar 21 14:59:49 CET 2006 - dmueller@suse.de + +- update patch for QLabel layout issues to the one from Qt 3.3.7 + +------------------------------------------------------------------- +Fri Mar 17 18:39:04 CET 2006 - dmueller@suse.de + +- add patch for QLabel layout management issues (#153029) + +------------------------------------------------------------------- +Fri Mar 17 12:23:30 CET 2006 - dmueller@suse.de + +- fix crash on painting > 32000 chars at once +- fix error in wrapping japanese text +- fix QFile::flush() not setting error status +- fix window gravity being wrong for RTL + +------------------------------------------------------------------- +Tue Mar 14 00:22:32 CET 2006 - dmueller@suse.de + +- fix filelist + +------------------------------------------------------------------- +Mon Mar 13 17:02:09 CET 2006 - dmueller@suse.de + +- build qt3-devel-doc as noarch package + +------------------------------------------------------------------- +Tue Mar 7 10:49:56 CET 2006 - dmueller@suse.de + +- moving libqassistantclient to -devel (#155519) and assistant + to qt3. +- translation update +- fix assistant invocation to prefer Qt3's assistant over Qt 4.x + +------------------------------------------------------------------- +Wed Feb 22 14:00:00 CET 2006 - dmueller@suse.de + +- fix crash when not able to load imswitch (#117443) + +------------------------------------------------------------------- +Sat Feb 18 01:15:54 CET 2006 - dmueller@suse.de + +- add more immodule fixes +- fix build of qt3-extensions +- remove sections for SL < 9.2 + +------------------------------------------------------------------- +Fri Feb 17 16:47:41 CET 2006 - dmueller@suse.de + +- fix crash on shutdown (#151831) + +------------------------------------------------------------------- +Mon Feb 13 15:52:19 CET 2006 - coolo@suse.de + +- update translations + +------------------------------------------------------------------- +Mon Feb 6 05:22:44 CET 2006 - zsu@suse.de + +- Add patch qt3-khmer-script.patch to fix a rendering issue of Khmer + script (by Jens Herden, #147190). + +------------------------------------------------------------------- +Sat Jan 28 10:48:06 CET 2006 - coolo@suse.de + +- really install the icon + +------------------------------------------------------------------- +Fri Jan 27 20:02:59 CET 2006 - llunak@suse.cz + +- fix rubberband.diff to emit selectionChanged() properly (#132920) + +------------------------------------------------------------------- +Fri Jan 27 12:24:41 CET 2006 - coolo@suse.de + +- avoid file conflict with qt package + +------------------------------------------------------------------- +Fri Jan 27 08:08:10 CET 2006 - coolo@suse.de + +- fix qt3.sh + +------------------------------------------------------------------- +Fri Jan 27 02:21:53 CET 2006 - mls@suse.de + +- converted neededforbuild to BuildRequires + +------------------------------------------------------------------- +Wed Jan 25 18:06:26 CET 2006 - dmueller@suse.de + +- set $QTDIR in /etc/profile.d/qt3.(c)sh + +------------------------------------------------------------------- +Sat Dec 3 14:30:43 CET 2005 - coolo@suse.de + +- build with -Bdirect if available +- updating font patch + +------------------------------------------------------------------- +Fri Dec 2 00:11:21 CET 2005 - dmueller@suse.de + +- build with -fno-strict-aliasing + +------------------------------------------------------------------- +Wed Nov 23 10:18:29 CET 2005 - dmueller@suse.de + +- unify spec files via a common patch/sources section + and adjust spec files accordingly +- add /etc/profile.d hook to put qmake in the path (#134377) +- drop fast-malloc patch for all packages (#134563) + +------------------------------------------------------------------- +Fri Nov 18 15:20:21 CET 2005 - stbinner@suse.de + +- only disable FcFontSort patch for released distributions + +------------------------------------------------------------------- +Fri Nov 18 12:08:43 CET 2005 - stbinner@suse.de + +- disable FcFontSort patch because of immaturity + +------------------------------------------------------------------- +Fri Nov 11 15:48:07 CET 2005 - dmueller@suse.de + +- avoid crashes after QListView::clear() + +------------------------------------------------------------------- +Wed Nov 2 15:52:04 CET 2005 - coolo@suse.de + +- avoid FcFontSort as it's very expensive + +------------------------------------------------------------------- +Thu Oct 27 14:38:16 CEST 2005 - stbinner@suse.de + +- extend fix-key-release-event-with-imm.diff to fix another Immodule + related key release event bug (#130727) + +------------------------------------------------------------------- +Wed Oct 12 19:25:52 CEST 2005 - dmueller@suse.de + +- update -Werror patch to catch one more case + +------------------------------------------------------------------- +Mon Oct 10 16:58:30 CEST 2005 - dmueller@suse.de + +- add patch to fix broken key compression (#121049) + +------------------------------------------------------------------- +Sat Oct 8 00:04:41 CEST 2005 - dmueller@suse.de + +- patch cleanup + +------------------------------------------------------------------- +Wed Oct 5 13:59:53 CEST 2005 - dmueller@suse.de + +- add 0065-fix_werror_with_gcc4.patch (#119209) + +------------------------------------------------------------------- +Wed Sep 28 16:32:43 CEST 2005 - stbinner@suse.de + +- removed historic "Autoreqprov:off" leftover + +------------------------------------------------------------------- +Wed Sep 28 15:27:34 CEST 2005 - stbinner@suse.de + +- add a patch to fix capitalization of Immodule strings + +------------------------------------------------------------------- +Mon Sep 26 10:57:35 CEST 2005 - coolo@suse.de + +- fix build on x86_64 + +------------------------------------------------------------------- +Mon Sep 19 12:40:22 CEST 2005 - mfabian@suse.de + +- Bugzilla #117115: enable input methods in qlineedit widgets + only when "mode == Normal" (i.e. not when "mode == NoEcho" or + "mode == Password"). Using input methods while inputting + passwords is useless and confusing. + +------------------------------------------------------------------- +Fri Sep 16 23:06:14 CEST 2005 - schwab@suse.de + +- Never strip gratuitously. + +------------------------------------------------------------------- +Thu Sep 15 10:57:05 CEST 2005 - stbinner@suse.de + +- update to version 3.3.5 + +------------------------------------------------------------------- +Mon Sep 5 13:04:30 CEST 2005 - coolo@suse.de + +- layout popup menus correctly (#113048) + +------------------------------------------------------------------- +Fri Aug 19 17:04:02 CEST 2005 - llunak@suse.cz + +- Place dialog properly for systray icons on xinerama (#104794). + +------------------------------------------------------------------- +Fri Jul 29 18:24:24 CEST 2005 - dmueller@suse.de + +- add Q_EXPORT visibility support +- Fix gcc 4.0.x compiler detection for qt plugin buildkey + +------------------------------------------------------------------- +Thu Jun 23 14:37:00 CEST 2005 - mrueckert@suse.de + +- Applied patch from Lubos Lunak to fix drag'n'drop when the + visible window is not at the top of the window stack. + +------------------------------------------------------------------- +Fri Jun 10 17:28:47 CEST 2005 - adrian@suse.de + +- Apply workaround from Simon Hausmann to avoid miscompilation with gcc4 + +------------------------------------------------------------------- +Tue Jun 7 16:15:54 CEST 2005 - adrian@suse.de + +- do not trigger -debug configure flag on -g, but use it for beta + distribution + +------------------------------------------------------------------- +Tue May 31 10:49:30 CEST 2005 - adrian@suse.de + +- require freeglut-devel instead of XFree86-Mesa-devel + +------------------------------------------------------------------- +Fri Apr 15 19:52:35 CEST 2005 - mfabian@suse.de + +- Bugzilla #74133: check for some more glyphs for Katakana and + Hiragana, especially also check for all the glyphs which are + checked for Han_Japanese. This usually guarantees that the same + font is used for Katakana and Hiragana as for Japanese Kanji, + which is what we want. + +------------------------------------------------------------------- +Fri Apr 8 15:28:36 CEST 2005 - uli@suse.de + +- fixed to build with GCC4 on ARM + +------------------------------------------------------------------- +Mon Apr 4 15:02:41 CEST 2005 - adrian@suse.de + +- apply patches from qt-copy, fixes for mouse handling in popups + +------------------------------------------------------------------- +Thu Mar 24 09:57:01 CET 2005 - adrian@suse.de + +- update font mappings in qtrc for asian languages (#74363) + +------------------------------------------------------------------- +Wed Mar 16 17:54:12 CET 2005 - adrian@suse.de + +- fix possible crash in qtranslator (#71968, by Lubos) + +------------------------------------------------------------------- +Fri Mar 4 15:50:50 CET 2005 - adrian@suse.de + +- fix loading of style plugins for lib/lib64 mixed systesm (by Lubos) + +------------------------------------------------------------------- +Fri Feb 25 13:26:56 CET 2005 - adrian@suse.de + +- fix all Exec= lines for menu entries + +------------------------------------------------------------------- +Fri Feb 11 18:29:14 CET 2005 - adrian@suse.de + +- apply patch for rubberband selections from Andre Moreira Magalhaes + +------------------------------------------------------------------- +Wed Feb 9 17:55:47 CET 2005 - adrian@suse.de + +- add qclipboard hack to avoid freezes from qt-copy again + +------------------------------------------------------------------- +Wed Feb 2 16:35:44 CET 2005 - adrian@suse.de + +- fix plugin loading for the KDE integration + +------------------------------------------------------------------- +Wed Jan 26 17:49:46 CET 2005 - adrian@suse.de + +- update to version 3.3.4 +- reenable limit size patch to keep BC +- remove qclipboard fix, it got merged +- remove bidi fixes, they got merged +- remove gif handler fixes, they got merged +- apply KDE dialog integration code from Lubos +- revert some changes in imm code to solve a problem with missing + key release events + +------------------------------------------------------------------- +Fri Jan 14 14:12:06 CET 2005 - adrian@suse.de + +- update imm patch to version from 20041203 +- disable image size patch for now, it broke printing of large images + +------------------------------------------------------------------- +Wed Jan 5 13:37:00 CET 2005 - adrian@suse.de + +- reenable the SHM patch again +- add qtimm patch to solve an issue with Opera +- remove binary links from /usr/bin/, they do conflict with Qt 4 + +------------------------------------------------------------------- +Mon Nov 22 12:06:33 CET 2004 - ro@suse.de + +- "sed -i" does not work on old distributions + +------------------------------------------------------------------- +Tue Nov 16 11:04:55 CET 2004 - adrian@suse.de + +- package icon files for desktop entries + +------------------------------------------------------------------- +Mon Nov 8 16:07:11 CET 2004 - coolo@suse.de + +- improve Waldo's patch to limit image dimensions + +------------------------------------------------------------------- +Fri Oct 29 23:29:44 CEST 2004 - schwab@suse.de + +- Revert last change to png writing. + +------------------------------------------------------------------- +Tue Oct 26 10:51:34 CEST 2004 - adrian@suse.de + +- fix from Lubos for full screen mode switching on 64bit (#46972) + +------------------------------------------------------------------- +Mon Oct 25 14:26:40 CEST 2004 - schwab@suse.de + +- Extend last change to png writing. + +------------------------------------------------------------------- +Sat Oct 23 23:23:21 CEST 2004 - schwab@suse.de + +- Fix endian bug in png reading. + +------------------------------------------------------------------- +Thu Oct 14 18:09:56 CEST 2004 - adrian@suse.de + +- fix assitant zoom functionality, patch by Waldo (#45688) + +------------------------------------------------------------------- +Mon Oct 11 18:11:32 CEST 2004 - adrian@suse.de + +- fix requires of qt3-devel for new x.org packages + +------------------------------------------------------------------- +Wed Sep 29 10:27:12 CEST 2004 - adrian@suse.de + +- prefer MiscGlyphSymbol fonts with tics over others (#46280) +- enable BiDi support by default + +------------------------------------------------------------------- +Tue Sep 28 11:45:55 CEST 2004 - mfabian@suse.de + +- Bugzilla #46216: make "On The Spot" the default input style + for Qt. + +------------------------------------------------------------------- +Sat Sep 25 13:46:59 CEST 2004 - adrian@suse.de + +- prefer the .lib64.so extension on lib64 systems, but do not + require it anymore + +------------------------------------------------------------------- +Fri Sep 24 22:10:29 CEST 2004 - adrian@suse.de + +- fix load of plugins on lib64 systems. The plugins do need a + .lib64.so extension now + +------------------------------------------------------------------- +Wed Sep 15 17:52:55 CEST 2004 - adrian@suse.de + +- add two more glyphs to simplified chinese detection. (#44059) + +------------------------------------------------------------------- +Tue Sep 14 13:57:01 CEST 2004 - adrian@suse.de + +- handle also hongkong chinese local in a correct way (#44059) +- prefer chinese fonts via optional glyphs, but use also + the free ones, if no commercial font is avaible (#44059) + +------------------------------------------------------------------- +Mon Sep 13 20:14:31 CEST 2004 - adrian@suse.de + +- hopefully solve the chinese font detection problems (#44059) + +------------------------------------------------------------------- +Mon Sep 13 11:17:50 CEST 2004 - adrian@suse.de + +- fix build for old distributions +- prepare qt for konsole transparency mode (via composite extension) + +------------------------------------------------------------------- +Fri Sep 10 17:43:56 CEST 2004 - mfabian@suse.de + +- update to qt-x11-immodule-unified-qt3.3.3-20040910.diff which + merges the previous three patches (With help from Adrian to + make it build). + +------------------------------------------------------------------- +Fri Sep 10 16:34:52 CEST 2004 - mfabian@suse.de + +- add qt-x11-immodule-unified-qt3.3.3-r123-event-inversion-20040909.diff + to fix the endless loop problem when using M17N-t-latin1-post + or M17N-vi-viqr. See also + http://freedesktop.org/pipermail/immodule-qt/2004-September/000447.html + and followups. Patch thanks to Yamaken. + +------------------------------------------------------------------- +Wed Sep 8 10:13:26 CEST 2004 - adrian@suse.de + +- add 3.3.3 regression fixes in pre-3.3.4.diff +- add bidi fixes from qt-copy +- add qpixmap mitshm support from Lubos +- update immodule patch to stable release 20040819 +- adding event inversion fix for immodule from Zhe Su + +------------------------------------------------------------------- +Fri Sep 3 15:06:55 CEST 2004 - adrian@suse.de + +- udpate qt immodule patch to snapshot from 20040814 + +------------------------------------------------------------------- +Thu Aug 26 17:09:14 CEST 2004 - adrian@suse.de + +- disable explicit debug flags again + +------------------------------------------------------------------- +Mon Aug 23 13:23:02 CEST 2004 - adrian@suse.de + +- apply workaround for broken focus handling cause by the xim + patch due to a bug in X for released distributions (by Lubos) + +------------------------------------------------------------------- +Wed Aug 18 12:06:15 CEST 2004 - adrian@suse.de + +- enable full debug compile, if -g is in RPM_OPT_FLAGS + +------------------------------------------------------------------- +Tue Aug 17 14:46:19 CEST 2004 - coolo@suse.de + +- install qt3 after grep + +------------------------------------------------------------------- +Tue Aug 17 07:27:13 CEST 2004 - adrian@suse.de + +- apply patch from Waldo to be able to limit the size of loaded + images. Important for khtml (#43841) +- apply fix to handle the side pixmap of the kmenu correctly (0047) +- apply KToolBarButton fix (0051) + +------------------------------------------------------------------- +Fri Aug 13 06:19:32 CEST 2004 - adrian@suse.de + +- fix gif handling (#43356) + +------------------------------------------------------------------- +Thu Aug 12 08:23:16 CEST 2004 - adrian@suse.de + +- update to version 3.3.3 +- remove obsolete patches + +------------------------------------------------------------------- +Tue Aug 3 16:16:53 CEST 2004 - adrian@suse.de + +- add patch to support scim + +------------------------------------------------------------------- +Wed Jun 9 15:21:27 CEST 2004 - adrian@suse.de + +- update asian font mappings for commercial japanese fonts + (by mfabian) + +------------------------------------------------------------------- +Wed Jun 2 16:17:53 CEST 2004 - adrian@suse.de + +- fix libGL loading in the right way, no .so link is needed anymore + again + +------------------------------------------------------------------- +Wed May 26 16:47:34 CEST 2004 - adrian@suse.de + +- load libGL via .so link again (due to the different possible + setups #41118) +- libXmu gets still loaded via hardcoded path and version + +------------------------------------------------------------------- +Tue Apr 27 15:55:48 CEST 2004 - adrian@suse.de + +- update to version 3.3.2 + * remove obsolete patches +- do apply %patch16 + +------------------------------------------------------------------- +Fri Apr 23 09:26:44 CEST 2004 - adrian@suse.de + +- disable atk support for released distributions + +------------------------------------------------------------------- +Thu Apr 22 11:40:17 CEST 2004 - coolo@suse.de + +- another try to fix wrong font caching also for japanese/chinese + +------------------------------------------------------------------- +Tue Apr 20 11:34:13 CEST 2004 - coolo@suse.de + +- apply fix for wrong font caching (#39175) + +------------------------------------------------------------------- +Fri Apr 16 11:42:30 CEST 2004 - adrian@suse.de + +- apply fix for opentype aliasing issues + +------------------------------------------------------------------- +Tue Apr 13 10:50:22 CEST 2004 - adrian@suse.de + +- fix OpenGL support, if no -devel package is installed (#38857) +- fix xcursor support +- add current snapshot of Qt-ATK bridge patch + (disabled as long USE_QACCESSIBLE enviroment variable isn't set) + +------------------------------------------------------------------- +Sat Apr 3 10:07:55 CEST 2004 - adrian@suse.de + +- apply 0043-fix_expired_cookie_crash.diff from qt-copy(by Dirk) + * qt based applications can crash in ssh sessions with new + openssh (#38185) + +------------------------------------------------------------------- +Wed Mar 31 17:47:33 CEST 2004 - mfabian@suse.de + +- Bugzilla #37720: + add font substitutions for "SUSE*" fonts to default qtrc. + +------------------------------------------------------------------- +Thu Mar 25 10:12:37 CET 2004 - coolo@suse.de + +- fix for richtext tags (in knotes) +- fix for fonts with multiple scripts (#36583) +- fix for custom resolutions + +------------------------------------------------------------------- +Tue Mar 16 16:29:42 CET 2004 - adrian@suse.de + +- fix for command line handling (XIM in QApplication)(#35881) +- fix double packaging of qassistant translations + +------------------------------------------------------------------- +Mon Mar 15 17:55:57 CET 2004 - adrian@suse.de + +- define a default Font again. (Sans Serif with 10points) + (#36014) + +------------------------------------------------------------------- +Wed Mar 10 08:44:03 CET 2004 - adrian@suse.de + +- fix for xcursor cache hangling (by Lubos) +- move assistant to -devel-doc package + +------------------------------------------------------------------- +Thu Mar 4 22:10:52 CET 2004 - adrian@suse.de + +- apply fix for not found monospaced fonts without Euro glyph + (Patch by Lars Knoll) + +------------------------------------------------------------------- +Thu Mar 4 13:53:53 CET 2004 - adrian@suse.de + +- apply different bugfix and speed enhancement patches from qt-copy + as recommended by Lubos + * 0001: DnD optimisation + * 0002: Active Window Fix + * 0007: MITSHM extension support for QPixmap<>Qimage conversation + * 0037: dnd timestamp fix + * 0038: dragobject prefer fix + +------------------------------------------------------------------- +Mon Mar 1 11:39:25 CET 2004 - adrian@suse.de + +- update to final 3.3.1 version +- disable fast-malloc for > 9.0, nptl does work good enough +- add qclipboard-recursion-fix from Lubos +- further 64bit aliasing fixes + +------------------------------------------------------------------- +Mon Feb 16 14:43:49 CET 2004 - adrian@suse.de + +- update to current snapshot (3.3.1-snapshot-20040216) +- build opentype with -fno-strict-aliasing + +------------------------------------------------------------------- +Mon Feb 9 17:02:41 CET 2004 - adrian@suse.de + +- fix non-latin1 QString handling + (patch from Roman Stepanov) + +------------------------------------------------------------------- +Wed Feb 4 20:24:37 CET 2004 - adrian@suse.de + +- update to version 3.3.0 final +- disable 3rdparty source and use system libraries + +------------------------------------------------------------------- +Thu Jan 29 14:05:26 CET 2004 - adrian@suse.de + +- update to snapshot 20040129 +- use original qstring again, kprinter got fixed + +------------------------------------------------------------------- +Sun Jan 25 17:53:03 CET 2004 - adrian@suse.de + +- update to snapshot 20040125 +- revert qstring changes + +------------------------------------------------------------------- +Tue Jan 13 14:52:07 CET 2004 - adrian@suse.de + +- update to snapshot 20040113 + +------------------------------------------------------------------- +Mon Dec 29 11:48:49 CET 2003 - adrian@suse.de + +- update to snapshot from 20031229 to get KDE compiling again +- remove upstream included translation files +- cleanup stuff not anymore needed +- do not build sqlite plugin with (broken) sqlite sources from qt + tar ball anymore + +------------------------------------------------------------------- +Thu Dec 11 13:10:37 CET 2003 - adrian@suse.de + +- update to version 3.3 beta 1 + * solves the remaining issues with dlopen GL + +------------------------------------------------------------------- +Tue Dec 9 17:20:56 CET 2003 - adrian@suse.de + +- add KDE plugin path for qt 3.3 + +------------------------------------------------------------------- +Thu Dec 4 11:25:27 CET 2003 - adrian@suse.de + +- update to snapshot 20031204 +- do not link against GL libs anymore, but still support GL via dlopen + apps and libs beside libbqt* are still linked against GL for now +- build fix for qt3-extensions + +------------------------------------------------------------------- +Tue Dec 2 17:54:34 CET 2003 - adrian@suse.de + +- update to current 3.3 snapshot ( 20031202 - pre beta 1) + * obsoletes several patches + * IPv6 support +- temporary disabled PostgreSQL support +- add SQLite support + +------------------------------------------------------------------- +Fri Nov 21 11:05:33 CET 2003 - adrian@suse.de + +- drop not applyed font_fixes patch and add the old Xft2 fixes + again, to support displays without Render extension. + +------------------------------------------------------------------- +Fri Nov 14 14:30:11 CET 2003 - adrian@suse.de + +- update to version 3.2.3 and usual patch cleanup + +------------------------------------------------------------------- +Thu Oct 23 09:52:28 CEST 2003 - adrian@suse.de + +- build without -mminimal-toc on ppc64 +- apply crash fix from TT for some fonts in XLFD mode + +------------------------------------------------------------------- +Thu Oct 16 16:00:46 CEST 2003 - adrian@suse.de + +- update to version 3.2.2 + * font fixes patch is not applied intentionaly, for testing + plain qt behaviour for now. + +------------------------------------------------------------------- +Thu Oct 2 12:06:08 CEST 2003 - adrian@suse.de + +- require freeglut-devel, instead of mesaglut-devel for > 9.0 + +------------------------------------------------------------------- +Tue Sep 30 09:25:31 CEST 2003 - coolo@suse.de + +- using the right tool to compile translation files + +------------------------------------------------------------------- +Thu Sep 25 13:05:03 CEST 2003 - adrian@suse.de + +- update fontconfig patch again, fixes multiple listing of fonts +- do not complain anymore about not matching plugin + +------------------------------------------------------------------- +Sun Sep 21 15:02:56 CEST 2003 - adrian@suse.de + +- prefer Nimbus fonts, instead of using asian fonts, if possible + (the asian fonts have some broken latin chars) + +------------------------------------------------------------------- +Sun Sep 21 12:35:19 CEST 2003 - adrian@suse.de + +- install html docu to the same place as on 8.2, to solve + update problems (#31507). (install dir and symlink was + swapped for unknown reason) + +------------------------------------------------------------------- +Fri Sep 19 15:48:11 CEST 2003 - adrian@suse.de + +- memory leak fix from Lars in QTextEngine + +------------------------------------------------------------------- +Thu Sep 18 16:35:05 CEST 2003 - adrian@suse.de + +- updated patches from Lars + * fixing Unicode families and foundaries issues + * printing issues +- clean up unused patches + +------------------------------------------------------------------- +Wed Sep 17 18:31:56 CEST 2003 - adrian@suse.de + +- a bit more silence .. QPixmap before QApplication warning is away +- new asian font mappings from mfabian + +------------------------------------------------------------------- +Mon Sep 15 18:02:31 CEST 2003 - adrian@suse.de + +- new font fixes from Lars, the default size problem should be away +- fix build for non-Xft2 distibutions + +------------------------------------------------------------------- +Thu Sep 11 22:18:01 CEST 2003 - adrian@suse.de + +- silence on lib64 systems with 32bit plugins installed (#30559) +- ensure to have a [3.2] section in old qtrc files + +------------------------------------------------------------------- +Mon Sep 8 16:26:49 CEST 2003 - coolo@suse.de + +- apply fix from TT to fix konsole + setRawName + +------------------------------------------------------------------- +Thu Sep 4 12:53:19 CEST 2003 - adrian@suse.de + +- add always lib and lib64 kde plugin path to qtrc + +------------------------------------------------------------------- +Wed Sep 3 16:55:00 CEST 2003 - adrian@suse.de + +- apply fix from TT: "don't generate bogus mouse move events." +- qt3-devel requires XFree86-Mesa-devel + +------------------------------------------------------------------- +Tue Sep 2 17:20:05 CEST 2003 - adrian@suse.de + +- add slovak translation from Stanislav Visnovsky +- add czech translation from Klara Cihlarova + +------------------------------------------------------------------- +Tue Sep 2 16:20:15 CEST 2003 - adrian@suse.de + +- add asian mappings from 8.2 to qtrc again + +------------------------------------------------------------------- +Mon Sep 1 18:13:33 CEST 2003 - meissner@suse.de + +- Don't do readlink checks for set*id programs (will break + in TLS startup sequence of glibc), just fall back to old + malloc. #29530 + +------------------------------------------------------------------- +Mon Sep 1 12:02:00 CEST 2003 - adrian@suse.de + +- apply qlineedit fix from TT + +------------------------------------------------------------------- +Mon Sep 1 11:30:31 CEST 2003 - adrian@suse.de + +- qtconfig menu entry becomes unimportant + +------------------------------------------------------------------- +Sun Aug 31 22:33:44 CEST 2003 - adrian@suse.de + +- generate .la file again + +------------------------------------------------------------------- +Fri Aug 29 15:16:43 CEST 2003 - adrian@suse.de + +- use newer font_fixes patch from Lars +- enforce usage of Xft2 even on non-Xrender displays +- revert qclipboard changes to 3.1.2 code + +------------------------------------------------------------------- +Wed Aug 27 13:38:51 CEST 2003 - adrian@suse.de + +- use official 3.2.1 tar ball instead of 3.2.0+patch + +------------------------------------------------------------------- +Tue Aug 26 08:20:07 CEST 2003 - adrian@suse.de + +- new _big_ fix from Lars for fixing the remaining font issues + +------------------------------------------------------------------- +Sun Aug 24 16:55:24 CEST 2003 - adrian@suse.de + +- apply fix from Lars for the foundary font problem, when + using pixmap fonts via Xft2. This makes the freetype2 + foundary-family patch obsolete from qt view. + +------------------------------------------------------------------- +Sat Aug 23 13:44:22 CEST 2003 - adrian@suse.de + +- apply 3.2.1 patch, until the official tar ball arrives + +------------------------------------------------------------------- +Sat Aug 16 13:58:14 CEST 2003 - adrian@suse.de + +- justify Category of qtconfig + +------------------------------------------------------------------- +Fri Aug 1 18:00:24 CEST 2003 - adrian@suse.de + +- add desktop file for qtconfig + +------------------------------------------------------------------- +Wed Jul 23 16:20:03 CEST 2003 - adrian@suse.de + +- update to version 3.2.0 final + +------------------------------------------------------------------- +Thu Jul 17 12:55:23 CEST 2003 - adrian@suse.de + +- fix .la files after build + +------------------------------------------------------------------- +Tue Jul 15 08:49:39 CEST 2003 - adrian@suse.de + +- update to 3.2.0 beta 2 +- remove obsolete patches + +------------------------------------------------------------------- +Sun Jun 15 12:19:14 CEST 2003 - coolo@suse.de + +- never strip explicitly +- always build with -release to avoid debug output even with -g + +------------------------------------------------------------------- +Thu Jun 12 09:07:58 CEST 2003 - coolo@suse.de + +- move the html docu into docdir and put the link in lib +- package directories +- fix directory permissions + +------------------------------------------------------------------- +Fri May 30 15:04:29 CEST 2003 - adrian@suse.de + +- fix file conflicts + +------------------------------------------------------------------- +Mon May 19 11:28:36 CEST 2003 - adrian@suse.de + +- revert source incompatibility to 3.1.x in qhbox constructor + +------------------------------------------------------------------- +Sun May 18 14:03:31 CEST 2003 - adrian@suse.de + +- update to version 3.2 beta 1 +- big patch clean up +- use largefile support api for > 8.2 + +------------------------------------------------------------------- +Thu Apr 10 17:01:32 CEST 2003 - coolo@suse.de + +- fixing long font names as returned by font-config + +------------------------------------------------------------------- +Wed Mar 26 13:19:48 CET 2003 - adrian@suse.de + +- workaround rpm bug on 7.3-ppc + +------------------------------------------------------------------- +Mon Mar 24 10:04:18 CET 2003 - adrian@suse.de + +- fix build on SuSE < 8.1 + +------------------------------------------------------------------- +Fri Mar 21 14:59:11 CET 2003 - adrian@suse.de + +- update to version 3.1.2 and remove obsolete patches + +------------------------------------------------------------------- +Tue Mar 11 20:33:03 CET 2003 - coolo@suse.de + +- fixing the fix + +------------------------------------------------------------------- +Tue Mar 11 13:35:31 CET 2003 - coolo@suse.de + +- applied patch by TT to fix kmail folder selection + (#24519 - also known as kde bug #48888) + +------------------------------------------------------------------- +Fri Mar 7 21:16:17 CET 2003 - adrian@suse.de + +- do not use XListFonts, if X server supports Xft on >8.1 (Xft2) + +------------------------------------------------------------------- +Fri Feb 28 00:25:14 CET 2003 - adrian@suse.de + +- fast malloc is back + (still 20% with glibc 2.3 without spinlock'ed-malloc) +- extend blacklist +- use fast malloc also on hammer + +------------------------------------------------------------------- +Wed Feb 26 11:43:08 CET 2003 - adrian@suse.de + +- add [3.1] plugin path +- add fix for mouse cursor bug over ssh + +------------------------------------------------------------------- +Mon Feb 24 11:56:07 CET 2003 - adrian@suse.de + +- use correct kde plugin path on lib64 systems + +------------------------------------------------------------------- +Mon Feb 3 11:39:24 CET 2003 - adrian@suse.de + +- fix missing symbols in libqt* + +------------------------------------------------------------------- +Thu Jan 30 16:19:31 CET 2003 - adrian@suse.de + +- fix %pre script + +------------------------------------------------------------------- +Sun Jan 26 14:05:56 CET 2003 - adrian@suse.de + +- prefix=/usr/lib/qt3 + (third party apps installing translations into $QTDIR now) +- modify qdesktopwidget resize patch to be BC with Qt 3.2 +- comment out non-official api extensions +- remove private headers tar ball again + (qsa beta2 contains them) +- fix qtrc enviroment patch +- hardcode qt settings dir to /etc/X11 (no need for $QTDIR/etc/settings anymore) +- enable all designer plugins + +------------------------------------------------------------------- +Thu Jan 23 18:36:05 CET 2003 - adrian@suse.de + +- add xrandr extension from Qt 3.2 +- add resize event to qdesktopwidget (patch from Lubos) +- compile codecs as plugins + +------------------------------------------------------------------- +Tue Jan 21 12:52:33 CET 2003 - adrian@suse.de + +- use fast malloc only on %ix86 + +------------------------------------------------------------------- +Thu Jan 16 15:58:23 CET 2003 - adrian@suse.de + +- include qt default translations + +------------------------------------------------------------------- +Fri Jan 10 15:12:46 CET 2003 - adrian@suse.de + +- hppa is parisc + +------------------------------------------------------------------- +Thu Jan 9 14:44:06 CET 2003 - adrian@suse.de + +- fix some more qmake.conf entries + (esp. pathes to lib64 directories and flags based on $RPM_OPT_FLAGS) + +------------------------------------------------------------------- +Tue Jan 7 16:42:59 CET 2003 - adrian@suse.de + +- use -ffunction-sections on hppa + +------------------------------------------------------------------- +Thu Jan 2 13:07:01 CET 2003 - adrian@suse.de + +- fix build ( patch -p1 -> -p0 ) + +------------------------------------------------------------------- +Fri Dec 27 17:50:17 CET 2002 - adrian@suse.de + +- several small changes/fixes/workarounds to be able to compile qsa + (they will be changed in 3.1.2) + +------------------------------------------------------------------- +Tue Dec 17 12:40:16 CET 2002 - adrian@suse.de + +- update to version 3.1.1 and cleanup patches +- apply Xft speed-up patch from dfaure + +------------------------------------------------------------------- +Wed Dec 4 15:10:17 CET 2002 - adrian@suse.de + +- drop fast-malloc, not needed since glibc 2.3 + +------------------------------------------------------------------- +Thu Nov 28 18:33:28 CET 2002 - adrian@suse.de + +- add qprinter fix from Lars + +------------------------------------------------------------------- +Wed Nov 27 00:44:44 CET 2002 - ro@suse.de + +- added expat to neededforbuild + +------------------------------------------------------------------- +Sat Nov 23 14:12:16 CET 2002 - adrian@suse.de + +- use Xft2 from XFree package now for > SuSE 8.1 + (experimental fontconfig package is dropped) +- build qt3-non-mt with extra spec file now +- fix korean [Font Substitutions] (#19575) +- fix broken qmake debug defaults (#21891) +- fix requires of database plugin packages + +------------------------------------------------------------------- +Fri Nov 15 10:33:53 CET 2002 - adrian@suse.de + +- update to 3.1.0 final version +- apply qwidget/hideChildren patch from Harri +- move libqui into qt3 main package + +------------------------------------------------------------------- +Tue Nov 5 20:00:37 CET 2002 - adrian@suse.de + +- package also missing mkspecs/* + +------------------------------------------------------------------- +Sun Nov 3 12:54:52 CET 2002 - adrian@suse.de + +- update to post 3.1 beta 2 snapshot (rc1 or rc2 ?) +- big rework of spec file, lots of workarounds are not needed anymore :) +- use experimental fontconfig/Xft2 package for > 8.1 +- enable nis & cups support + +------------------------------------------------------------------- +Mon Oct 21 18:25:53 CEST 2002 - adrian@suse.de + +- swab %ifarch <> %if for old broken rpm's + +------------------------------------------------------------------- +Mon Oct 21 13:44:15 CEST 2002 - adrian@suse.de + +- remove rpath again, which came back with 3.0.5 update (#20929) +- disable qDebug lines in chinese patch (#20959) + +------------------------------------------------------------------- +Wed Oct 9 11:47:44 CEST 2002 - adrian@suse.de + +- implement a blacklist of executables which should not use + the fast malloc implementation. (python and perl atm) +- disable fast-malloc for >8.1 +- enable fast-malloc for x86_64 + +------------------------------------------------------------------- +Fri Sep 20 11:24:51 CEST 2002 - adrian@suse.de + +- qclipboard fix from Lubos. Copy from old X applications works again + +------------------------------------------------------------------- +Mon Sep 16 12:07:53 CEST 2002 - adrian@suse.de + +- replace qt3-gb18030.diff patch with the new patch from + James Su for chinese handling (#19399) +- set XIMInputStyle for japanese input (#19387) +- change Requires: from /usr/include/png.h to libpng-devel, since + connectivas apt can not handle this. + +------------------------------------------------------------------- +Fri Aug 30 14:13:34 CEST 2002 - adrian@suse.de + +- remove the dlopen patch again. It is not needed anymore and may + cause crashes in rare cases. + +------------------------------------------------------------------- +Wed Aug 28 15:26:02 CEST 2002 - adrian@suse.de + +- apply fix from Lubos for DND in kcontrol +- apply fix to fix gb18030 encoding (from Turbolinux China) + +------------------------------------------------------------------- +Mon Aug 26 16:25:40 CEST 2002 - adrian@suse.de + +- do not use -plugindir configure option anymore. it caused the + broken plugin support and remov $QTDIR/plugins again from qtrc + qtrc is also a (noreplace) config file again +- s,getenv,__secure_getenv, as suggested by okir in plugin_path.dif + +------------------------------------------------------------------- +Thu Aug 22 18:33:55 CEST 2002 - adrian@suse.de + +- add patch to set the qt settings dir to a non-default dir +- add patches from qt 3.0.6 to fix asian copy&paste problems +- set explicit plugin pathes in qtrc and replace them during update + (this is only a workaround until I know why qt does not use the + compiled path) + +------------------------------------------------------------------- +Thu Aug 22 14:53:57 CEST 2002 - adrian@suse.de + +- remove dangeling symlink in /usr/lib/qt3/mkspecs/linux-g++ +- add plugin path to global qtrc + +------------------------------------------------------------------- +Tue Aug 20 13:24:25 CEST 2002 - adrian@suse.de + +- fix #defines + +------------------------------------------------------------------- +Tue Aug 20 00:24:37 CEST 2002 - adrian@suse.de + +- redo the plugin path patch again, we use now a implicit + subdirectory like "lib64", if needed. +- qtconfig is patched to hide/not write back those entries + +------------------------------------------------------------------- +Fri Aug 16 14:00:33 CEST 2002 - coolo@suse.de + +- fixing the patches + +------------------------------------------------------------------- +Fri Aug 16 13:18:21 CEST 2002 - coolo@suse.de + +- applying the plugin path patches, so they actually do something + on lib64 platforms + +------------------------------------------------------------------- +Fri Aug 9 17:35:58 CEST 2002 - adrian@suse.de + +- fix plugin installation + +------------------------------------------------------------------- +Thu Aug 8 10:00:46 CEST 2002 - adrian@suse.de + +- use %suse_version macro instead of /etc/SuSE-release + +------------------------------------------------------------------- +Fri Aug 2 14:41:33 CEST 2002 - coolo@suse.de + +- shut up if passed -noxim is passed and xim doesn't work + +------------------------------------------------------------------- +Tue Jul 30 14:43:32 CEST 2002 - adrian@suse.de + +- disable pre-3.0.6 patches again, until focus problem is located +- add zlib-devel to Requires for qt3-devel and SuSE 8.1 +- add %run_ldconfig + +------------------------------------------------------------------- +Mon Jul 29 17:31:37 CEST 2002 - adrian@suse.de + +- apply shut-up.dif +- clean up neededforbuild + +------------------------------------------------------------------- +Fri Jul 26 16:33:25 CEST 2002 - adrian@suse.de + +- port Lea's fast malloc implementation to libqt-mt +- designer sig11 fixes are not needed anymore +- use some patches from qt-rsync + +------------------------------------------------------------------- +Fri Jul 19 13:07:05 CEST 2002 - adrian@suse.de + +- fix designer sig11 really +- kick warnings about unsuccesfull locks for non-root users + +------------------------------------------------------------------- +Thu Jul 18 18:00:13 CEST 2002 - adrian@suse.de + +- don't strip when in debug mode +- fix typo in build script + +------------------------------------------------------------------- +Wed Jul 17 09:59:28 CEST 2002 - adrian@suse.de + +- update to 3.0.5 final + * lots of bugfixes, see changes-3.0.5 for details + * new, binary incompatible plugin system +- fix sig11 in designer +- clean spec file, drop all not applied patches + +------------------------------------------------------------------- +Thu Jul 11 10:42:14 CEST 2002 - coolo@suse.de + +- reenable work around for transparenent images while printing + (PR16188) + +------------------------------------------------------------------- +Wed Jul 10 17:51:47 CEST 2002 - adrian@suse.de + +- update to near 3.0.5-final snapshot 3.0.5-snapshot-20020710 + +------------------------------------------------------------------- +Fri Jul 5 14:16:16 CEST 2002 - adrian@suse.de + +- fix -g detection during build + +------------------------------------------------------------------- +Fri Jun 21 00:21:28 CEST 2002 - adrian@suse.de + +- fix use of $RPM_OPT_FLAGS (broken since 3.0.4 update) +- use -mminimal-toc on ppc64 to workaround compiler bug atm +- update to pre-3.0.5 snapshot-20020620 + * use buildkey for plugins instead of our own plugin hack + * lots of fixes (exact description in changes-3.0.5) +- add lib64 to build key, if needed +- remove obsolete patches + +------------------------------------------------------------------- +Thu Jun 6 13:41:19 CEST 2002 - adrian@suse.de + +- rework plugin path patch for distributions > 8.0 + change name of "plugins" directory instead of filenames + * plugins -- lib32 and multithreaded plugins + * plugins-non-mt -- lib32 and without multithread support + * plugins-lib64 -- lib64 and multithreaded plugins + * plugins-lib64-non-mt -- lib64 and without multithread support + +------------------------------------------------------------------- +Thu May 30 20:03:50 CEST 2002 - adrian@suse.de + +- disable style-plugins again (too much qt apps have problems) +- disable Xft/Xrender support also for SuSE 7.3 (XFree 4.1.0) + (no one reads READMES and too many people had crashes) + +------------------------------------------------------------------- +Tue May 28 10:58:01 CEST 2002 - adrian@suse.de + +- fix %files + +------------------------------------------------------------------- +Mon May 27 13:37:15 CEST 2002 - adrian@suse.de + +- move qconfig, qmake to qt3-devel-tools +- build styles as plugin (except our default style: Platinum) + +------------------------------------------------------------------- +Mon May 27 00:10:23 CEST 2002 - ro@suse.de + +- lib64: fix qtmake.conf: QTLIBDIR also has the trailing "64" +- fix build-script for lib64 issues + +------------------------------------------------------------------- +Mon May 20 23:26:35 CEST 2002 - adrian@suse.de + +- fix build (disable odbc during qt3.spec build) + +------------------------------------------------------------------- +Mon May 20 10:13:55 CEST 2002 - adrian@suse.de + +- enable -tablet support if XFree86 provides it +- compile with -debug mode, if -g is set in enviroment +- fix postgres plugin build +- enable unixODBC support for newer distributions +- split sql drivers to extra packages +- fix dlopen call + +------------------------------------------------------------------- +Tue May 14 12:39:51 CEST 2002 - adrian@suse.de + +- fix lib64 patch to find OpenGL libs + +------------------------------------------------------------------- +Thu May 9 21:54:41 CEST 2002 - adrian@suse.de + +- apply fix for NetAccess focus, insertTitle(), QTextEdit and + QToolbar from qt-copy + +------------------------------------------------------------------- +Wed May 8 09:39:48 CEST 2002 - coolo@suse.de + +- fixing patch section (grr) + +------------------------------------------------------------------- +Tue May 7 17:13:41 CEST 2002 - coolo@suse.de + +- adding fix for x86_64 + +------------------------------------------------------------------- +Tue May 7 14:32:39 MEST 2002 - coolo@suse.de + +- update to qt 3.0.4 - remove fixes that do + not apply any longer +- disable asian patches as they do not apply + and I don't want to split them as I have no + idea if the problems they try to fix are still + there + +------------------------------------------------------------------- +Wed Apr 24 16:09:09 CEST 2002 - coolo@suse.de + +- fix lib64 support +- fix asian patch not to use arrays in unused arrays + (triggers compiler problem) + +------------------------------------------------------------------- +Sun Apr 21 12:58:33 CEST 2002 - adrian@suse.de + +- improve image rendering speed (patch by Lubos) + +------------------------------------------------------------------- +Tue Apr 9 16:21:07 CEST 2002 - adrian@suse.de + +- apply patch from Lubos to fix alpha channel in QMovie + +------------------------------------------------------------------- +Fri Apr 5 15:29:03 CEST 2002 - adrian@suse.de + +- fixed print support in qpsprint +- binary compatibility fixes by Lars for gbk encoding + +------------------------------------------------------------------- +Wed Apr 3 21:33:26 CEST 2002 - adrian@suse.de + +- apply fixes/extensions for asian/utf-8-based languages + (assembled by Lars and Brad, thank you, verifed by mfabian) +- 64bit fixes from Andreas Schwab (const char*) null pointer casts + +------------------------------------------------------------------- +Sun Mar 24 13:23:18 CET 2002 - adrian@suse.de + +- apply qtabbar fix. Fixes crashes with kcm modules. + +------------------------------------------------------------------- +Fri Mar 22 10:33:58 CET 2002 - adrian@suse.de + +- apply fix for sig11 in QCommonStyle (made by Waldo/Trolltech) +- apply fix to use libpng instead of libmng to load pngs (by coolo) +- add missing Requires for qt3-devel + +------------------------------------------------------------------- +Wed Mar 20 22:47:59 CET 2002 - adrian@suse.de + +- verify 3.0.3 final version +- add check for null pointer returned by libXft + (fix sig11 when no Xft fonts are configured) +- fix scrollbar behaviour for QT Platinum style + (we are X Windows compatible instead of MS Windows) + +------------------------------------------------------------------- +Tue Mar 19 10:36:42 CET 2002 - adrian@suse.de + +- update to version 3.0.3 + (rc6 tar ball from troll, I have to check after the qt-3.0.3 release, + if this is really qt-3.0.3 final) + +------------------------------------------------------------------- +Tue Mar 12 20:01:34 CET 2002 - adrian@suse.de + +- update to pre 3.0.3 snapshot (3.0.2.20020312) + +------------------------------------------------------------------- +Mon Mar 4 09:44:37 CET 2002 - adrian@suse.de + +- more fixes + * fix auto-resizing with QMovie + * fix to correctly open submenues in right to left layout + * reduce number of mallocs by sharing QColorGroup + * Simplified static cleanup handlers. + * smarter tooltip placement +- require "c++_compiler" for distributions newer than 7.3 only + +------------------------------------------------------------------- +Sun Mar 3 02:31:31 CET 2002 - adrian@suse.de + +- apply some fixes from qt-copy + * 8 bit color depth image format fixes + * spinbox flicker fix + * qrichtext dangeling pointers fix + * qmenubar right to left layout mode cursor navigation fix + * qcombobox avoid emitting highlighted twice on keyPressEvent + +------------------------------------------------------------------- +Mon Feb 25 17:34:15 CET 2002 - adrian@suse.de + +- update to version 3.0.2 +- remove compile fixes +- fix symlink for qtconfig + +------------------------------------------------------------------- +Thu Feb 14 01:05:14 CET 2002 - adrian@suse.de + +- fix Requires for qt3-devel (add g++ compiler) + +------------------------------------------------------------------- +Tue Feb 12 01:01:31 CET 2002 - adrian@suse.de + +- fix build for lib64/s390x + +------------------------------------------------------------------- +Wed Feb 6 21:08:43 CET 2002 - adrian@suse.de + +- add links in /usr/bin for qtconfig + +------------------------------------------------------------------- +Sun Feb 3 14:57:30 CET 2002 - adrian@suse.de + +- fix dumb-packager-bug (s,%fi,%endif,) + +------------------------------------------------------------------- +Sun Feb 3 12:23:35 CET 2002 - adrian@suse.de + +- compile fix for postrgres module +- extend plugin patch to work on s390x and sparc64 to work with + lib64 plugins +- add %{_libdir}/qt3 symlink for s390x and sparc64 + +------------------------------------------------------------------- +Sat Feb 2 13:00:38 CET 2002 - ro@suse.de + +- cleaned changes file + +------------------------------------------------------------------- +Fri Feb 1 15:29:58 CET 2002 - adrian@suse.de + +- update to current qt-copy snapshot (needed for KDE 3.0 beta 2) +- make threaded plugins as usual again +- non-threaded plugins needs now the not compatible -non-mt.so + suffix + +------------------------------------------------------------------- +Fri Feb 1 00:26:05 CET 2002 - ro@suse.de + +- changed neededforbuild to + +------------------------------------------------------------------- +Tue Jan 29 16:29:15 CET 2002 - adrian@suse.de + +- enable AA for SuSE > 7.3 + +------------------------------------------------------------------- +Tue Jan 29 10:58:57 CET 2002 - schwab@suse.de + +- Fix use of varargs on 64 bit platforms. + +------------------------------------------------------------------- +Wed Jan 23 22:56:28 CET 2002 - adrian@suse.de + +- patch plugin loader to load only plugins with -mt.so + extension +- link direct against libpng +- move qt3.conf file to susehelp +- TODO: make plugin loader path depending on %_libdir + +------------------------------------------------------------------- +Tue Jan 22 21:47:19 CET 2002 - adrian@suse.de + +- enable Xrender/Xft again for SuSE 7.3 + (I was misleaded by a broken libXft :/ ) +- using qt plugin mechanism for picture format support +- enable XRender by default, but leave Xft disabled by default + (kcontrol can switch Xft on for KDE applications now) +- add additional include path for postgres 7.2b5 + +------------------------------------------------------------------- +Mon Jan 21 16:58:53 CET 2002 - adrian@suse.de + +- disable Xft for all distributions until 7.3 + (XFree 4.2 is needed) +- sync QClipboard fix from qt-copy + +------------------------------------------------------------------- +Tue Jan 8 16:11:14 CET 2002 - adrian@suse.de + +- fix Requires +- disable rpath + +------------------------------------------------------------------- +Sun Jan 6 00:31:11 CET 2002 - adrian@suse.de + +- split non multithreaded librarys into qt3-non-mt package +- split developer tutorial into qt3-tutorial package +- use common config script to prepare build +- move libs to /usr/lib/qt3/%{_libdir} +- remove .prl files from file list again + +------------------------------------------------------------------- +Thu Jan 3 16:48:59 CET 2002 - adrian@suse.de + +- rename qt3-designer subpackage to qt3-devel-tools +- add default qtrc file + * disable Xft support by default + * use Platinum style + * set qt plugin path +- move qtconfig to qt base package +- apply fixes from qt-copy/KDE-cvs + +------------------------------------------------------------------- +Thu Dec 13 10:42:07 CET 2001 - adrian@suse.de + +- use $RPM_OPT_FLAGS during compile +- add missing .prl files to file list + +------------------------------------------------------------------- +Wed Dec 12 16:39:16 CET 2001 - adrian@suse.de + +- update to version 3.0.1 +- build all extra tools +- fix default mkspec symlink +- include examples to devel-doc package + +------------------------------------------------------------------- +Thu Nov 8 18:39:52 CET 2001 - ro@suse.de + +- use mesa-devel-packages in neededforbuild + +------------------------------------------------------------------- +Tue Oct 16 11:13:50 CEST 2001 - adrian@suse.de + +- fix hardcoded install dir in libqt + (no $QTDIR is needed at runtime anymore) + +------------------------------------------------------------------- +Mon Oct 15 18:16:49 CEST 2001 - adrian@suse.de + +- update to QT 3.0.0 final + (the KDE 3 battle begins :) + +------------------------------------------------------------------- +Fri Oct 5 10:50:24 CEST 2001 - adrian@suse.de + +- add missing header files +- cleanup workarounds in spec file and add some new (but less ;) + +------------------------------------------------------------------- +Mon Oct 1 16:35:56 CEST 2001 - adrian@suse.de + +- update to beta6 + +------------------------------------------------------------------- +Tue Sep 18 08:54:02 CEST 2001 - adrian@suse.de + +- update to beta5 + +------------------------------------------------------------------- +Wed Sep 5 12:17:19 CEST 2001 - adrian@suse.de + +- okay, my last try ... cp -f has different return values on the + distributions :( + +------------------------------------------------------------------- +Tue Sep 4 10:18:20 CEST 2001 - adrian@suse.de + +- disable postgres support for old distributions + (now it also builds with SuSE 6.4) + +------------------------------------------------------------------- +Mon Sep 3 15:42:48 CEST 2001 - adrian@suse.de + +- fix broken links in include path + +------------------------------------------------------------------- +Sun Sep 2 19:47:01 CEST 2001 - adrian@suse.de + +- workaround bugs in Makefile to install all needed files +- remove -j4 behind make + +------------------------------------------------------------------- +Tue Jun 19 15:26:54 CEST 2001 - adrian@suse.de + +- split documentation from qt3-devel to qt3-doc + +------------------------------------------------------------------- +Fri May 25 11:57:34 CEST 2001 - adrian@suse.de + +- first try with QT 3.0.0 beta 1 + ( this package is far away from being perfect ) + +------------------------------------------------------------------- +Sun May 6 10:52:33 CEST 2001 - adrian@suse.de + +- apply XftGlyph fix for qfont_x11.cpp from Keith Packard +- fix build for distributions before 7.1 + +------------------------------------------------------------------- +Fri May 4 11:39:55 CEST 2001 - adrian@suse.de + +- add fix for buffer overflow on qfont_x11 and some minor glitches + in qt-png +- qt-experimental is dropped, since we can enable AA in qt now. + +------------------------------------------------------------------- +Fri Apr 27 15:29:17 CEST 2001 - adrian@suse.de + +- switch BuildIndex for SuSEhelp to false by default + +------------------------------------------------------------------- +Mon Apr 23 22:22:19 CEST 2001 - adrian@suse.de + +- using -DNO_DEBUG +- apply latin9 patch from mls@suse.de + +------------------------------------------------------------------- +Wed Apr 4 22:48:01 CEST 2001 - mfabian@suse.de + +- add /etc/qt.fontguess (config file for Japanese and Korean + fonts) + +------------------------------------------------------------------- +Wed Mar 21 17:43:49 CET 2001 - adrian@suse.de + +- disable AA by default (still to many problems) + +------------------------------------------------------------------- +Sun Mar 18 09:46:50 CET 2001 - adrian@suse.de + +- reenable qt-experimental for SuSE distribution < 7.2 + disable opengl module for these distris in this package + +------------------------------------------------------------------- +Sat Mar 17 14:43:11 CET 2001 - adrian@suse.de + +- update to QT 2.3.0 + this makes qt-experimental obsolete + (maybe still some problems with the nvidia driver, but the nv + should work fine and the users are warned about nvidia since + SuSE 7.1) + +------------------------------------------------------------------- +Sun Mar 11 20:20:41 CET 2001 - mfabian@suse.de + +- fix spec-file to make it build with "rpm -ba" + +------------------------------------------------------------------- +Fri Feb 9 19:55:09 CET 2001 - adrian@suse.de + +- use $RPM_OPT_FLAGS + drop signed char patch + +------------------------------------------------------------------- +Sat Feb 3 14:12:01 CET 2001 - adrian@suse.de + +- update to QT 2.2.4 + qt-static is an own package and no sub packages anymore + fix/patch for qprintdialog is no longer needed + add fix from Andreas Schwab for 64bit platforms + +------------------------------------------------------------------- +Fri Jan 19 11:33:07 CET 2001 - adrian@suse.de + +- swap link and directory of html documentation. This makes + trouble during update from older distributions + +------------------------------------------------------------------- +Sat Jan 13 21:18:58 CET 2001 - adrian@suse.de + +- remove not necessary susehelp/htdig conf file + remove file conflicts between qt-devel and qt-experimental + +------------------------------------------------------------------- +Thu Jan 4 21:37:49 CET 2001 - adrian@suse.de + +- added qt-experimental,qt-japanese,qt-korean to Obsoletes: + +------------------------------------------------------------------- +Wed Jan 3 02:24:50 CET 2001 - adrian@suse.de + +- fix qprintdialog + fix qrichtext (Thanks Stefan) + +------------------------------------------------------------------- +Wed Jan 3 02:24:15 CET 2001 - adrian@suse.de + +- fix qprintdialog + +------------------------------------------------------------------- +Mon Jan 1 17:18:43 CET 2001 - adrian@suse.de + +- spec file fix + +------------------------------------------------------------------- +Sun Dec 31 13:18:17 CET 2000 - adrian@suse.de + +- added small tools to qt-devel (thanks Dirk) + +------------------------------------------------------------------- +Fri Dec 22 20:46:34 CET 2000 - adrian@suse.de + +- remove asian patches from qt-experimental + +------------------------------------------------------------------- +Wed Dec 20 18:51:44 CET 2000 - adrian@suse.de + +- fixe type in package name + +------------------------------------------------------------------- +Wed Dec 20 18:44:44 CET 2000 - adrian@suse.de + +- move docu from qtlib2 to qt + +------------------------------------------------------------------- +Sat Dec 16 17:02:47 CET 2000 - adrian@suse.de + +- initial package. support for font anti aliasing has been added + Also OpenGL module is active + +------------------------------------------------------------------- +Thu Dec 14 11:51:41 CET 2000 - adrian@suse.de + +- update to 2.2.3 and remove all the unneeded fix patches. + added SuSE help conf files to qt-devel + +------------------------------------------------------------------- +Tue Dec 12 15:32:01 CET 2000 - schwab@suse.de + +- Build with -O0 on ia64. + +------------------------------------------------------------------- +Fri Dec 1 00:29:50 CET 2000 - adrian@suse.de + +- added rpath for uic/kdelibs and fixed uic fix .. + to drunk to drink more + +------------------------------------------------------------------- +Thu Nov 30 11:31:36 CET 2000 - adrian@suse.de + +- fixed dif + +------------------------------------------------------------------- +Thu Nov 30 00:33:26 CET 2000 - adrian@suse.de + +- added fix for uic and qiconview + +------------------------------------------------------------------- +Wed Nov 29 11:33:51 CET 2000 - adrian@suse.de + +- fixed build on ppc + +------------------------------------------------------------------- +Tue Nov 21 09:31:40 CET 2000 - ro@suse.de + +- spec fix + +------------------------------------------------------------------- +Fri Nov 17 14:57:54 CET 2000 - ro@suse.de + +- fixed neededforbuild: += libmng-devel + +------------------------------------------------------------------- +Mon Nov 13 21:40:29 CET 2000 - adrian@suse.de + +- new version 2.2.2 + added qpngio fix from waldo + +------------------------------------------------------------------- +Fri Nov 10 00:57:39 CET 2000 - adrian@suse.de + +- fixed static config for <6.4 distris (no libmng) + +------------------------------------------------------------------- +Tue Oct 31 13:45:29 CET 2000 - adrian@suse.de + +- split the qt package in + qt + qt-devel + qt-extensions + qt-man + qt-static + + Added an ugly patch to get an uic with KDE support. The designer + is broken in this package after this patch, so it is not packaged. + The designer can be found in the qt-designer package + +------------------------------------------------------------------- +Tue Oct 17 09:59:23 MEST 2000 - adrian@suse.de + +- switch to -O0 for ppc + +------------------------------------------------------------------- +Sat Oct 14 09:51:19 CEST 2000 - adrian@suse.de + +- drop OpenGL support. Problems with Nvidia's binary only driver + +- added fix from waldo (fixing memory leak in qpngio) + +------------------------------------------------------------------- +Mon Oct 9 16:00:44 CEST 2000 - adrian@suse.de + +- update the tar archiv (which contains a corrected classes.html file) + +------------------------------------------------------------------- +Fri Oct 6 12:46:48 CEST 2000 - adrian@suse.de + +- update to 2.2.1 + added static libs for libqt and libqt-mt + added support for libmng + +------------------------------------------------------------------- +Mon Oct 2 10:56:03 CEST 2000 - adrian@suse.de + +- added missing header files + +------------------------------------------------------------------- +Tue Sep 19 16:03:56 MEST 2000 - adrian@suse.de + +- switch to -O0 for axp + +------------------------------------------------------------------- +Fri Sep 8 17:09:15 CEST 2000 - schwab@suse.de + +- Update ia64 configuration. + +------------------------------------------------------------------- +Fri Sep 8 15:36:30 CEST 2000 - adrian@suse.de + +- added missing libqt-mt.so + clean up in filelist + changed copyright/license to GPL + +------------------------------------------------------------------- +Thu Sep 7 22:35:05 CEST 2000 - adrian@suse.de + +- update to qt 2.2.0 final + +------------------------------------------------------------------- +Tue Aug 22 19:56:07 CEST 2000 - adrian@suse.de + +- removed uic/moc bindings to libGL and other + +------------------------------------------------------------------- +Fri Aug 18 20:33:25 CEST 2000 - adrian@suse.de + +- update to qt 2.2.0 beta 2 + spec file rewritten + +------------------------------------------------------------------- +Tue Jul 4 15:11:10 CEST 2000 - adrian@suse.de + +- moved links from /usr/lib/qt/lib to /usr/lib/ + +------------------------------------------------------------------- +Thu Jun 22 15:59:04 CEST 2000 - adrian@suse.de + +- add libqt.so.2 links in /usr/lib/qt/lib + +------------------------------------------------------------------- +Fri Jun 16 16:26:31 CEST 2000 - adrian@suse.de + +- moved libqt.so back to qtlib2, after religios war. + +------------------------------------------------------------------- +Fri Jun 16 12:26:33 CEST 2000 - adrian@suse.de + +- enable gif support again + +------------------------------------------------------------------- +Fri Jun 16 09:18:31 CEST 2000 - adrian@suse.de + +- moved static libs to qtdevel2 + +------------------------------------------------------------------- +Tue Jun 6 14:06:10 CEST 2000 - schwab@suse.de + +- Reduce opt level on ia64. + +------------------------------------------------------------------- +Tue Jun 6 01:06:59 CEST 2000 - adrian@suse.de + +- fixed dependencies + +------------------------------------------------------------------- +Tue May 30 23:02:56 CEST 2000 - adrian@suse.de + +- readded mesadev in neededforbuild + +------------------------------------------------------------------- +Tue May 30 15:30:16 CEST 2000 - adrian@suse.de + +- update to 2.1.1 + +------------------------------------------------------------------- +Wed May 24 13:06:43 CEST 2000 - adrian@suse.de + +- added mesadev in neededforbuild + removed gif support (license issue) + +------------------------------------------------------------------- +Tue May 16 21:44:53 CEST 2000 - adrian@suse.de + +- added -fno-exception (smaller binaries) + +------------------------------------------------------------------- +Fri May 12 08:55:01 CEST 2000 - adrian@suse.de + +- fixed link /usr/doc/packages/html + using %{_defaultdocdir} + using %{_mandir} + +------------------------------------------------------------------- +Fri Apr 14 15:14:19 CEST 2000 - adrian@suse.de + +- update to 2.1.0 final + new package for all man pages + +------------------------------------------------------------------- +Thu Apr 6 19:16:55 CEST 2000 - adrian@suse.de + +- update to 2.1.0 beta 4 + +------------------------------------------------------------------- +Thu Mar 30 15:57:33 CEST 2000 - adrian@suse.de + +- update to qtlib 2.1.0 beta 3 + the destination directory is not longer /usr/lib/qt !!! + QTDIR=/usr/lib/qt-2.1.0 + There is also a link /usr/lib/qt2 to /usr/lib/qt-2.1.0 + +------------------------------------------------------------------- +Thu Mar 2 11:17:22 CET 2000 - ro@suse.de + +- removed obsolete part of patch + +------------------------------------------------------------------- +Thu Mar 2 07:27:34 CET 2000 - ro@suse.de + +- configure doesn't know --mandir ... :( + +------------------------------------------------------------------- +Thu Mar 2 01:59:58 CET 2000 - ro@suse.de + +- work-around for prepare-spec buglet + +------------------------------------------------------------------- +Wed Mar 1 00:05:15 CET 2000 - ro@suse.de + +- man to /usr/share using macro + +------------------------------------------------------------------- +Tue Feb 29 15:55:33 CET 2000 - kettner@suse.de + +- Apply patch for qfont_x11.cpp from warwick@warwick-bippy + +------------------------------------------------------------------- +Mon Feb 28 18:26:18 CET 2000 - kettner@suse.de + +- increased font cache from 4MB to 9MB in order to + speed up UNICODE fonts for YaST2 + +------------------------------------------------------------------- +Thu Nov 11 20:00:14 MET 1999 - uli@suse.de + +- removed netscape from neededforbuild + +------------------------------------------------------------------- +Tue Nov 9 11:12:48 MET 1999 - kettner@suse.de + +- Removed mesa from Requires, as it is not required + +------------------------------------------------------------------- +Fri Oct 22 14:42:35 MEST 1999 - kettner@suse.de + + - Patch extensions/imageio/src/Makefile.in in order to get + shared library of libimgio again. Worked in 2.00. + +------------------------------------------------------------------- +Mon Oct 11 21:06:47 MEST 1999 - kettner@suse.de + + - New version 2.0.2 + +------------------------------------------------------------------- +Tue Sep 28 18:09:12 MEST 1999 - uli@suse.de + +- switched from Motif to lesstif + +------------------------------------------------------------------- +Mon Sep 27 16:31:01 CEST 1999 - bs@suse.de + +- fixed requirements for sub packages + +------------------------------------------------------------------- +Fri Sep 17 11:28:09 MEST 1999 - kettner@suse.de + +- Reinserted old # Commandline line. + +------------------------------------------------------------------- +Mon Sep 13 17:23:57 CEST 1999 - bs@suse.de + +- ran old prepare_spec on spec file to switch to new prepare_spec. + +------------------------------------------------------------------- +Wed Jul 14 11:49:22 CEST 1999 - kettner@suse.de + + - New version 2.00 + +------------------------------------------------------------------- +Tue Jul 13 19:31:56 CEST 1999 - kettner@suse.de + + - New version 2.00 + +------------------------------------------------------------------- +Mon Jul 12 19:15:16 CEST 1999 - kettner@suse.de + + - New version 2.00 + diff --git a/opensuse/core/qt3/qt3-devel-doc.spec b/opensuse/core/qt3/qt3-devel-doc.spec new file mode 100644 index 000000000..cf4a5e869 --- /dev/null +++ b/opensuse/core/qt3/qt3-devel-doc.spec @@ -0,0 +1,297 @@ +# +# spec file for package qt3-devel-doc +# +# Copyright (c) 2011 SUSE LINUX Products GmbH, Nuernberg, Germany. +# +# All modifications and additions to the file contributed by third parties +# remain the property of their copyright owners, unless otherwise agreed +# upon. The license for this file, and modifications and additions to the +# file, is the same license as for the pristine package itself (unless the +# license for the pristine package is not an Open Source License, in which +# case the license is the MIT License). An "Open Source License" is a +# license that conforms to the Open Source Definition (Version 1.9) +# published by the Open Source Initiative. + +# Please submit bugfixes or comments via http://bugs.opensuse.org/ +# + +# norootforbuild + + +Name: qt3-devel-doc +BuildRequires: cups-devel freeglut-devel freetype2-devel gcc-c++ pkgconfig qt3-devel update-desktop-files +%if %suse_version < 1130 +BuildRequires: libpng-devel +%else +BuildRequires: libpng14-devel +%endif +Url: http://www.trolltech.com/ +License: GPL, QPL +AutoReqProv: on +Summary: Documentation for the Qt 3 Development Kit +Group: Documentation/HTML +Version: 3.3.8c +Release: 1 +PreReq: /bin/grep +BuildArch: noarch +Provides: qt3-devel-tutorial +Obsoletes: qt3-devel-tutorial +Requires: qt3-devel +%define x11_free -x11-free- +%define rversion %version +# COMMON-BEGIN +# COMMON-BEGIN +%define x11_free -x11-free- +%define rversion 3.3.8b +Source0: qt%{x11_free}%rversion.tar.bz2 +Source1: build_script.sh +Source2: qtconfig3.desktop +Source3: qtrc +Source4: assistant3.png +Source6: assistant3.desktop +Source7: designer.desktop +Source8: designer.png +Source9: linguist.desktop +Source5: linguist.png +Source10: qt3.sh +Source11: qt3.csh +# Translations did not change at 3.3.8c +Source12: qt3-3.3.8b-translations.tar.bz2 +Source100: qtkdeintegration_x11.cpp +Source101: qtkdeintegration_x11_p.h +Source102: baselibs.conf +Source200: attributes +Source201: update_spec.pl +Patch1: aliasing.diff +Patch2: head.diff +Patch4: qt3-never-strip.diff +Patch5: external-libs.diff +Patch6: 0001-dnd_optimization.patch +Patch7: 0002-dnd_active_window_fix.patch +Patch8: 0007-qpixmap_constants.patch +Patch11: 0038-dragobject-dont-prefer-unknown.patch +Patch12: qtrc-path.diff +Patch14: lib64-plugin-support.diff +Patch15: pluginmanager-fix.diff +Patch18: no-rpath.dif +Patch19: shut-up.diff +Patch20: rubberband.diff +Patch21: fix-GL-loading.diff +Patch23: fix-accessible.diff +# From http://www.freedesktop.org/wiki/Software_2fImmoduleQtDownload +# Current version from http://freedesktop.org/~daisuke/qt-x11-immodule-unified-qt3.3.5-20060318.diff.bz2 +Patch25: qt-x11-immodule-unified-qt3.3.8-20060318.diff +Patch28: fix-key-release-event-with-imm.diff +Patch29: 0047-fix-kmenu-width.diff +Patch31: limit-image-size.diff +Patch34: 0005-qpixmap_mitshm.patch +Patch35: qt-transparency.patch +Patch37: 0055-qtextedit_zoom.patch +Patch38: 0048-qclipboard_hack_80072.patch +Patch39: fix-qtranslator-crash.diff +Patch40: 0059-qpopup_has_mouse.patch +Patch41: 0060-qpopup_ignore_mousepos.patch +Patch42: add_qexport_visibility.patch +Patch43: 0056-khotkeys_input_84434.patch +Source250: enable-designer-plugins.diff +Patch53: fix-xinerama-dialog-placement.diff +Patch54: kmenu-search-fix.diff +Patch55: qt3-fix-cast.diff +Patch100: qt.patch +Patch101: qt3-arm-gcc4.patch +Patch102: xinerama.patch +Patch113: fix-assistant-path.patch +Patch117: qtimer-debug.diff +Patch119: xinerama-qpopupmenu.diff +Patch121: qt3-warnings.diff +Patch123: use-xrandr-1.2.diff +Patch125: qcstring-format-warnings.diff +Patch127: mng-reading-fix.patch +Patch128: 0079-compositing-types.patch +Patch129: 0080-net-wm-sync-request.patch +Patch132: revert-qt-3.3.8-khmer-fix.diff +Patch133: 0085-fix-buildkey.diff +Patch134: fix-xinput-clash.diff +Patch135: parseFontName.diff +Patch136: qt3-no-date.diff +Patch137: popen-leak-fix.diff +Patch138: qt3-libpng14.diff +Patch139: gcc46.diff + +# TQt integration +Patch200: qt-3.3.8c.diff + +BuildRoot: %{_tmppath}/%{name}-%{version}-build + +%description +This package contains the documentation for the Qt 3 Development Kit. + +You will find documentation, precompiled examples, and a tutorial for +getting started with Qt in /usr/lib/qt3/doc. + +This package contains the documentation for the Qt 3 Development Kit. + +You will find documentation, precompiled examples, and a tutorial for +getting started with Qt in /usr/lib/qt3/doc. + +This package contains the documentation for the Qt 3 Development Kit. + +You will find documentation, precompiled examples, and a tutorial for +getting started with Qt in /usr/lib/qt3/doc. + +This package contains the documentation for the Qt 3 Development Kit. + +You will find documentation, precompiled examples, and a tutorial for +getting started with Qt in /usr/lib/qt3/doc. + +%define build_sub_dirs src plugins/src tools/designer/uilib/ tools/designer/uic tools/qtconfig tools/assistant/lib tools/assistant tutorial + +%prep +%setup -q -n qt%{x11_free}%rversion +%patch1 +%patch2 +%patch4 +%patch5 +%patch6 +%patch7 +%patch8 +%patch11 +%patch12 +if [ "%_lib" = "lib64" ]; then +%patch14 +fi +%patch15 +%patch18 +%patch19 +%patch20 +%patch23 +%patch25 +%patch28 +%patch29 +%patch31 +%patch34 +%patch35 +%patch37 +%patch38 +%patch39 +%patch40 +%patch41 +%patch42 +%patch43 +%patch100 +%patch102 +%patch53 +%patch54 +%patch55 +%patch101 +%patch113 +%patch117 +%patch119 +%patch121 +%patch123 +ln -sf $PWD/src/inputmethod/qinputcontextfactory.h include/ +ln -sf $PWD/src/inputmethod/qinputcontextplugin.h include/ +ln -sf $PWD/src/kernel/qinputcontext.h include/ +ln -sf $PWD/src/kernel/qinputcontextinterface_p.h include/private/ +ln -sf $PWD/src/kernel/qximinputcontext_p.h include/private/ +if [ %_lib = "lib" ]; then +sed 's,/lib64/,/lib/,' %PATCH21 | patch -p0 +else +%patch21 +fi +%patch125 +%patch127 +%patch128 +%patch129 +%patch132 +%patch133 +%patch134 +%patch135 +%patch136 +%patch137 +%if %suse_version > 1120 +%patch138 -p1 +%endif +%patch139 +%patch200 +# copy qt kde integration files +cp %SOURCE100 %SOURCE101 src/kernel/ +cp %SOURCE101 include/private/ +cd translations +tar xvjf %SOURCE12 +cd .. +# COMMON-END +# COMMON-END + +%description +This package contains the documentation for the Qt 3 Development Kit. + +You will find documentation, precompiled examples, and a tutorial for +getting started with Qt in /usr/lib/qt3/doc. + +This package contains the documentation for the Qt 3 Development Kit. + +You will find documentation, precompiled examples, and a tutorial for +getting started with Qt in /usr/lib/qt3/doc. + +This package contains the documentation for the Qt 3 Development Kit. + +You will find documentation, precompiled examples, and a tutorial for +getting started with Qt in /usr/lib/qt3/doc. + +This package contains the documentation for the Qt 3 Development Kit. + +You will find documentation, precompiled examples, and a tutorial for +getting started with Qt in /usr/lib/qt3/doc. + +%build +export VERSION=%suse_version +source %SOURCE1 %{version} +export WLIB=%_lib +export QTDIR=`pwd` +if [ %_lib == "lib64" ]; then +export RPM_OPT_FLAGS="$RPM_OPT_FLAGS -DUSE_LIB64_PATHES" +fi +export RPM_OPT_FLAGS="$RPM_OPT_FLAGS -fno-strict-aliasing" +# +# call build from build_script.rpmrc for threaded Qt library +# only really needed tools will be builded here, all extra tools will be +# builded in qt3.spec +# +call_configure -thread -shared -no-sql-mysql -no-sql-psql -no-sql-odbc -no-sql-sqlite $OPTIONS +cd src +make %{?jobs:-j%jobs} +cd .. + +%install +export VERSION=%suse_version +export WLIB=%_lib +export QTDIR=`pwd` +source %SOURCE1 %{version} +cd src +make INSTALL_ROOT=$RPM_BUILD_ROOT install_htmldocs +cd .. +# +# install menu entries +# +%suse_update_desktop_file -i -u qtconfig3 Qt Utility DesktopSettings +%suse_update_desktop_file -i assistant3 Qt Development Documentation + +install -d -m 0755 ${RPM_BUILD_ROOT}/%{_defaultdocdir}/qt3/ +ln -sf /usr/lib/qt3/doc/html ${RPM_BUILD_ROOT}/%{_defaultdocdir}/qt3/ +mkdir -p $RPM_BUILD_ROOT/usr/share/pixmaps/ +install -m 0644 %SOURCE4 $RPM_BUILD_ROOT/usr/share/pixmaps/ + +%clean +rm -rf ${RPM_BUILD_ROOT} + +%files +%defattr(-,root,root) +%dir /usr/lib/qt3/doc +%doc /usr/lib/qt3/doc/html +%{_docdir}/qt3/html +/usr/share/applications/qtconfig3.desktop +/usr/share/applications/assistant3.desktop +/usr/share/pixmaps/assistant3.png + +%changelog diff --git a/opensuse/core/qt3/qt3-devel-doc.spec.in b/opensuse/core/qt3/qt3-devel-doc.spec.in new file mode 100644 index 000000000..ad9fd3e99 --- /dev/null +++ b/opensuse/core/qt3/qt3-devel-doc.spec.in @@ -0,0 +1,93 @@ +# +# spec file for package qt3 (Version 3.3.8b) +# +# Copyright (c) 2006 SUSE LINUX Products GmbH, Nuernberg, Germany. +# This file and all modifications and additions to the pristine +# package are under the same license as the package itself. +# +# Please submit bugfixes or comments via http://bugs.opensuse.org/ +# + +# norootforbuild + +Name: qt3-devel-doc +BuildRequires: cups-devel freeglut-devel freetype2-devel gcc-c++ pkgconfig update-desktop-files qt3-devel +%if %suse_version < 1130 +BuildRequires: libpng-devel +%else +BuildRequires: libpng14-devel +%endif +URL: http://www.trolltech.com/ +License: GPL, QPL +Autoreqprov: on +Summary: Qt 3 Development Kit +Group: Documentation/HTML +Version: 3.3.8c +Release: 1 +PreReq: /bin/grep +BuildArch: noarch +Provides: qt3-devel-tutorial +Obsoletes: qt3-devel-tutorial +Requires: qt3-devel +%define x11_free -x11-free- +%define rversion %version +# COMMON-BEGIN +# COMMON-END + +%description +You need this package if you want to compile programs with Qt 3. It +contains the "Qt Crossplatform Development Kit 2". You will find +include files, documentation, precompiled examples, and a tutorial for +getting started with Qt in /usr/lib/qt3. + +%build +export VERSION=%suse_version +source %SOURCE1 %{version} +export WLIB=%_lib +export QTDIR=`pwd` +if [ %_lib == "lib64" ]; then +export RPM_OPT_FLAGS="$RPM_OPT_FLAGS -DUSE_LIB64_PATHES" +fi +export RPM_OPT_FLAGS="$RPM_OPT_FLAGS -fno-strict-aliasing" +# +# call build from build_script.rpmrc for threaded Qt library +# only really needed tools will be builded here, all extra tools will be +# builded in qt3.spec +# +call_configure -thread -shared -no-sql-mysql -no-sql-psql -no-sql-odbc -no-sql-sqlite $OPTIONS +cd src +make %{?jobs:-j%jobs} +cd .. + +%install +export VERSION=%suse_version +export WLIB=%_lib +export QTDIR=`pwd` +source %SOURCE1 %{version} +cd src +make INSTALL_ROOT=$RPM_BUILD_ROOT install_htmldocs +cd .. +# +# install menu entries +# +%suse_update_desktop_file -i -u qtconfig3 Qt Utility DesktopSettings +%suse_update_desktop_file -i assistant3 Qt Development Documentation + +install -d -m 0755 ${RPM_BUILD_ROOT}/%{_defaultdocdir}/qt3/ +ln -sf /usr/lib/qt3/doc/html ${RPM_BUILD_ROOT}/%{_defaultdocdir}/qt3/ +mkdir -p $RPM_BUILD_ROOT/usr/share/pixmaps/ +install -m 0644 %SOURCE4 $RPM_BUILD_ROOT/usr/share/pixmaps/ + +%clean +rm -rf ${RPM_BUILD_ROOT} + +%files +%defattr(-,root,root) +%dir /usr/lib/qt3/doc +%doc /usr/lib/qt3/doc/html +%{_docdir}/qt3/html +/usr/share/applications/qtconfig3.desktop +/usr/share/applications/assistant3.desktop +/usr/share/pixmaps/assistant3.png + +%changelog -n qt3 diff --git a/opensuse/core/qt3/qt3-extensions.changes b/opensuse/core/qt3/qt3-extensions.changes new file mode 100644 index 000000000..db0df1efa --- /dev/null +++ b/opensuse/core/qt3/qt3-extensions.changes @@ -0,0 +1,2475 @@ +------------------------------------------------------------------- +Fri Sep 23 10:16:33 UTC 2011 - coolo@suse.com + +- fix qt3-extensions + +------------------------------------------------------------------- +Fri Apr 22 18:31:12 UTC 2011 - anixx@opensuse.org + +- changed compression to .tar.bz2 + +------------------------------------------------------------------- +Thu Apr 21 11:40:38 CEST 2011 - pth@suse.de + +- Don't try to patch in the version twice in qt-3.3.8c.diff. +- Resync those patches that don't apply without offset. +- Mark scriptlets in profile.d as being configuration files. +- Remove the calls to run_ldconfig. + +------------------------------------------------------------------- +Mon Apr 18 18:46:34 UTC 2011 - robxu9@gmail.com + +- a fix to the 3.3.8c patch + +------------------------------------------------------------------- +Thu Mar 31 18:15:29 UTC 2011 - coolo@novell.com + +- another gcc 4.6 fix + +------------------------------------------------------------------- +Mon Jan 31 21:23:51 UTC 2011 - robxu9@gmail.com + +- Update to version 3.3.8c, by the Trinity Project +- pre_checkin.sh was not run as this caused too many unneccesary + changes to occur. +- The translations tarball was left at version 3.3.8b. + +------------------------------------------------------------------- +Sat Nov 20 02:26:08 CET 2010 - dmueller@suse.de + +- fix build against gcc 4.6 + +------------------------------------------------------------------- +Mon Nov 1 10:09:40 UTC 2010 - coolo@novell.com + +- fix libpng dependencies + +------------------------------------------------------------------- +Wed Sep 1 13:22:38 UTC 2010 - pgajdos@novell.com + +- port to libpng14 + +------------------------------------------------------------------- +Wed May 5 19:42:33 UTC 2010 - coolo@novell.com + +- do not patch the symlink + +------------------------------------------------------------------- +Mon Apr 5 21:06:20 CEST 2010 - dmueller@suse.de + +- fix -devel package requires +- simplify requires of sub-specfiles + +------------------------------------------------------------------- +Mon Apr 5 16:00:15 CEST 2010 - dmueller@suse.de + +- build against libpng12 + +------------------------------------------------------------------- +Thu Jan 21 14:24:13 CET 2010 - dmueller@suse.de + +- recommend kdelibs3-default-style (bnc#544581) + +------------------------------------------------------------------- +Fri Dec 18 17:04:51 CET 2009 - jengelh@medozas.de + +- add baselibs.conf as a source +- add baselib definitions for SPARC + +------------------------------------------------------------------- +Fri Nov 13 14:28:47 CET 2009 - dmueller@suse.de + +- fix patches to apply with fuzz=0 + +------------------------------------------------------------------- +Tue Nov 3 19:14:30 UTC 2009 - coolo@novell.com + +- updated patches to apply with fuzz=0 + +------------------------------------------------------------------- +Tue Aug 11 11:24:13 CEST 2009 - dmueller@suse.de + +- fix popen leak (bnc#529615) + +------------------------------------------------------------------- +Mon Feb 9 12:08:04 CET 2009 - coolo@suse.de + +- strip out date from .la files + +------------------------------------------------------------------- +Sat Feb 7 20:43:40 CET 2009 - coolo@suse.de + +- do not put timestamps in generated sources + +------------------------------------------------------------------- +Wed Jan 7 12:34:56 CET 2009 - olh@suse.de + +- obsolete old -XXbit packages (bnc#437293) + +------------------------------------------------------------------- +Tue Nov 11 16:57:56 CET 2008 - ro@suse.de + +- SLE-11 uses PPC64 instead of PPC, adapt baselibs.conf + +------------------------------------------------------------------- +Wed Sep 10 18:50:12 CEST 2008 - dmueller@suse.de + +- remove qt3-static package + +------------------------------------------------------------------- +Mon Jul 21 21:20:47 CEST 2008 - dmueller@suse.de + +- more verbose qtimer debug + +------------------------------------------------------------------- +Sun Jun 22 13:00:45 CEST 2008 - schwab@suse.de + +- Fix invalid array reference in font name parser. + +------------------------------------------------------------------- +Thu Apr 10 12:54:45 CEST 2008 - ro@suse.de + +- added baselibs.conf file to build xxbit packages + for multilib support + +------------------------------------------------------------------- +Mon Mar 10 16:48:36 CET 2008 - dmueller@suse.de + +- fix build with updated x.org + +------------------------------------------------------------------- +Thu Feb 7 17:51:25 CET 2008 - dmueller@suse.de + +- fix memory corruption when removing CRTc's dynamically + +------------------------------------------------------------------- +Sat Jan 19 07:19:25 CET 2008 - stbinner@suse.de + +- This version adds the GNU Public License version 3 as a + possible choice for licenses to the Open Source releases of Qt 3. +- upstreaming of patches and few other minor bugfixes + +------------------------------------------------------------------- +Tue Jan 15 01:42:37 CET 2008 - dmueller@suse.de + +- fix xrandr resize race (#335410) + +------------------------------------------------------------------- +Thu Dec 6 01:32:32 CET 2007 - dmueller@suse.de + +- fix the build key for gcc 4.3 + +------------------------------------------------------------------- +Mon Dec 3 15:12:36 CET 2007 - dmueller@suse.de + +- back out khmer "fix" from 3.3.8, which apparently + made it worse (#345459) + +------------------------------------------------------------------- +Tue Nov 20 20:25:18 CET 2007 - dmueller@suse.de + +- fix build with gcc 4.3 again + +------------------------------------------------------------------- +Mon Oct 1 11:48:51 CEST 2007 - dmueller@suse.de + +- fix build with gcc 4.3 + +------------------------------------------------------------------- +Fri Sep 7 12:32:22 CEST 2007 - dmueller@suse.de + +- fix off-by-one in utf8 decoder (#304249, CVE-2007-4137) +- fix typo in QDate::fromString() + +------------------------------------------------------------------- +Wed Aug 29 17:08:22 CEST 2007 - llunak@suse.cz + +- fix reading MNG files, visible in Kickoff (#278548) +- remove patching of symlinks from the immodule patch +- improve support for compositing (qt-copy patches #0079,#0080) + +------------------------------------------------------------------- +Fri Aug 24 18:39:04 CEST 2007 - dmueller@suse.de + +- fix format string issues (#291754, CVE-2007-3388) +- fix xrandr 1.2 detection + +------------------------------------------------------------------- +Thu Jul 5 17:25:18 CEST 2007 - coolo@suse.de + +- package desktop files and png files + +------------------------------------------------------------------- +Thu Jun 21 12:04:33 CEST 2007 - stbinner@suse.de + +- run fdupes in qt3-extensions.spec + +------------------------------------------------------------------- +Thu May 24 19:15:38 CEST 2007 - dmueller@suse.de + +- redo the last change in the correct spec file + +------------------------------------------------------------------- +Wed May 23 17:08:39 CEST 2007 - dmueller@suse.de + +- qt3-examples -> qt3-devel-examples + +------------------------------------------------------------------- +Thu May 17 06:49:50 CEST 2007 - stbinner@suse.de + +- removed some historic stuff from the spec file + +------------------------------------------------------------------- +Tue May 8 14:32:40 CEST 2007 - dmueller@suse.de + +- trust libxinerama only if it provides more screens + than xrandr crtcs (#264199) + +------------------------------------------------------------------- +Fri May 4 19:06:40 CEST 2007 - dmueller@suse.de + +- fix permissions of qmake specs + +------------------------------------------------------------------- +Wed May 2 11:50:07 CEST 2007 - coolo@suse.de + +- remove Suse-translate from desktop file +- remove obsolete suse version support + +------------------------------------------------------------------- +Mon Apr 30 14:39:40 CEST 2007 - stbinner@suse.de + +- fix build of qt3-devel-doc with desktop-file-validate run + +------------------------------------------------------------------- +Mon Apr 16 16:10:59 CEST 2007 - dmueller@suse.de + +- temporarily disable Xrandr 1.2 support until (#264199) is + resolved +- use -Bsymbolic-functions + +------------------------------------------------------------------- +Sun Apr 1 20:40:04 CEST 2007 - dmueller@suse.de + +- fix utf8 decoder (#259187, CVE-2007-0242) + +------------------------------------------------------------------- +Thu Mar 29 18:02:30 CEST 2007 - dmueller@suse.de + +- Fix XRandr 1.2 support + +------------------------------------------------------------------- +Fri Mar 16 14:52:22 CET 2007 - dmueller@suse.de + +- call XftDefaultSubstitute (#255330) + +------------------------------------------------------------------- +Thu Mar 15 11:07:44 CET 2007 - dmueller@suse.de + +- update font fix patch (#244579) + +------------------------------------------------------------------- +Mon Mar 12 16:09:29 CET 2007 - dmueller@suse.de + +- enable tablet support (#253392) +- add default substitution for font queries (#244579) + +------------------------------------------------------------------- +Tue Mar 6 19:37:48 CET 2007 - dmueller@suse.de + +- fix mysql driver crash on shutdown (#251222) + +------------------------------------------------------------------- +Sun Feb 25 11:52:26 CET 2007 - dmueller@suse.de + +- update to 3.3.8: + * changelog is under /usr/share/doc/packages/qt3/changes-3.3.8 + +------------------------------------------------------------------- +Wed Feb 21 13:00:52 CET 2007 - dmueller@suse.de + +- fix build for 9.3 + +------------------------------------------------------------------- +Wed Feb 7 10:39:13 CET 2007 - dmueller@suse.de + +- also build qt3-static as full-config + +------------------------------------------------------------------- +Mon Feb 5 15:18:34 CET 2007 - stbinner@suse.de + +- fix build of qt3-extensions on 9.3 + +------------------------------------------------------------------- +Fri Feb 2 15:41:36 CET 2007 - stbinner@suse.de + +- fix changelog chronological order + +------------------------------------------------------------------- +Wed Jan 31 21:40:07 CET 2007 - dmueller@suse.de + +- add a sanity check to ensure that we have a full version +- fix compile warnings in headers + +------------------------------------------------------------------- +Tue Jan 9 15:36:14 CET 2007 - dmueller@suse.de + +- drop misfuzzed patch + +------------------------------------------------------------------- +Mon Jan 8 18:35:16 CET 2007 - dmueller@suse.de + +- add patch to fix indic rendering issue + +------------------------------------------------------------------- +Tue Oct 31 13:18:44 CET 2006 - dmueller@suse.de + +- add patch to fix han localisation issue (#216183) +- update qt-debug-timer patch to output more verbose debug +- add patch to fix xinerama issue with popupmenus (#216235) + +------------------------------------------------------------------- +Fri Oct 20 15:54:30 CEST 2006 - dmueller@suse.de + +- update to 3.3.7: + * include CVE-2006-4811 patch + +------------------------------------------------------------------- +Thu Oct 19 15:21:51 CEST 2006 - dmueller@suse.de + +- add patch for integer overflow in QPixmap/QImage + (#212544, CVE-2006-4811) + +------------------------------------------------------------------- +Tue Oct 10 23:31:01 CEST 2006 - dmueller@suse.de + +- add patch for qtimer debugging + +------------------------------------------------------------------- +Wed Oct 4 19:39:56 CEST 2006 - dmueller@suse.de + +- fix headers to compile in -pedantic mode + +------------------------------------------------------------------- +Thu Sep 14 13:27:03 CEST 2006 - dmueller@suse.de + +- don't install static libs as executable + +------------------------------------------------------------------- +Fri Sep 1 16:18:07 CEST 2006 - llunak@suse.cz + +- Add patches with Xinerama improvements. + +------------------------------------------------------------------- +Thu Aug 17 13:42:28 CEST 2006 - stbinner@suse.de + +- fix qt3-devel-tools file conflict with qt-devel-doc + +------------------------------------------------------------------- +Tue Aug 1 14:47:18 CEST 2006 - stbinner@suse.de + +- disable noisy debug message in qt-x11-immodule-unified diff + +------------------------------------------------------------------- +Sun Jul 9 21:39:54 CEST 2006 - stbinner@suse.de + +- fix {designer3,linguist}.desktop starting Qt4 versions (#190135) + +------------------------------------------------------------------- +Tue Jul 04 15:12:18 CEST 2006 - mfabian@suse.de + +- update qt-x11-immodule-unified diff to 20060318 version. + This update already includes the following patches: + + fix-x11-immodule.diff + + disable-inputmethod-for-passords.patch + + qt-x11-immodule-capitalization-fix.diff + + fix-im-crash-on-exit.diff + + fix-immodule-buffer-overflow.diff + + qt-x11-immodule-qtextedit-fix.diff + + qt-x11-immodule-focus-handling.diff + + qt-x11-immodule-fix-inputcontext-crash.diff + which are thus removed. + +------------------------------------------------------------------- +Wed Jun 28 10:07:30 CEST 2006 - dmueller@suse.de + +- fix $QT_SYSTEM_DIR (#188217) + +------------------------------------------------------------------- +Fri Jun 9 15:25:49 CEST 2006 - llunak@suse.de + +- add $QT_SYSTEM_DIR (#183059) + +------------------------------------------------------------------- +Wed May 31 15:51:01 CEST 2006 - adrian@suse.de + +- remove BuildRequires libdrm-devel + +------------------------------------------------------------------- +Wed May 31 13:24:56 CEST 2006 - dmueller@suse.de + +- fix xpm image loading problem +- add performance regression fix +- add asian font loading fix + +------------------------------------------------------------------- +Mon May 29 08:41:44 CEST 2006 - adrian@suse.de + +- revert requires macro, this breaks the build system mapping +- require right packages in -devel for < 10.1 + +------------------------------------------------------------------- +Fri May 26 19:40:44 CEST 2006 - dmueller@suse.de + +- fix build + +------------------------------------------------------------------- +Fri May 26 10:42:43 CEST 2006 - dmueller@suse.de + +- 3.3.6 update + * numerous bugfixes and translations + +------------------------------------------------------------------- +Wed May 10 17:12:34 CEST 2006 - dmueller@suse.de + +- drop substitutions from global rc file (#171513) + +------------------------------------------------------------------- +Fri Apr 14 01:46:36 CEST 2006 - dmueller@suse.de + +- drop linguist3.png/desktop as its unused and install + linguist.desktop instead (fixes build failure). + +------------------------------------------------------------------- +Mon Apr 10 10:40:11 CEST 2006 - dmueller@suse.de + +- strip installed static libraries +- fix file conflict with Qt4 packages + +------------------------------------------------------------------- +Mon Apr 3 16:34:14 CEST 2006 - dmueller@suse.de + +- restore libraryPaths which broke instsys (#162930) + +------------------------------------------------------------------- +Thu Mar 30 12:49:05 CEST 2006 - coolo@suse.de + +- update qtrc to the real values avoiding dark gray platinum even + if not overwritten with desktop settings + +------------------------------------------------------------------- +Tue Mar 21 14:59:49 CET 2006 - dmueller@suse.de + +- update patch for QLabel layout issues to the one from Qt 3.3.7 + +------------------------------------------------------------------- +Fri Mar 17 18:39:04 CET 2006 - dmueller@suse.de + +- add patch for QLabel layout management issues (#153029) + +------------------------------------------------------------------- +Fri Mar 17 12:23:30 CET 2006 - dmueller@suse.de + +- fix crash on painting > 32000 chars at once +- fix error in wrapping japanese text +- fix QFile::flush() not setting error status +- fix window gravity being wrong for RTL + +------------------------------------------------------------------- +Tue Mar 14 00:22:32 CET 2006 - dmueller@suse.de + +- fix filelist + +------------------------------------------------------------------- +Mon Mar 13 17:02:09 CET 2006 - dmueller@suse.de + +- build qt3-devel-doc as noarch package + +------------------------------------------------------------------- +Tue Mar 7 10:49:56 CET 2006 - dmueller@suse.de + +- moving libqassistantclient to -devel (#155519) and assistant + to qt3. +- translation update +- fix assistant invocation to prefer Qt3's assistant over Qt 4.x + +------------------------------------------------------------------- +Wed Feb 22 14:00:00 CET 2006 - dmueller@suse.de + +- fix crash when not able to load imswitch (#117443) + +------------------------------------------------------------------- +Sat Feb 18 01:15:54 CET 2006 - dmueller@suse.de + +- add more immodule fixes +- fix build of qt3-extensions +- remove sections for SL < 9.2 + +------------------------------------------------------------------- +Fri Feb 17 16:47:41 CET 2006 - dmueller@suse.de + +- fix crash on shutdown (#151831) + +------------------------------------------------------------------- +Mon Feb 13 15:52:19 CET 2006 - coolo@suse.de + +- update translations + +------------------------------------------------------------------- +Mon Feb 6 05:22:44 CET 2006 - zsu@suse.de + +- Add patch qt3-khmer-script.patch to fix a rendering issue of Khmer + script (by Jens Herden, #147190). + +------------------------------------------------------------------- +Sat Jan 28 10:48:06 CET 2006 - coolo@suse.de + +- really install the icon + +------------------------------------------------------------------- +Fri Jan 27 20:02:59 CET 2006 - llunak@suse.cz + +- fix rubberband.diff to emit selectionChanged() properly (#132920) + +------------------------------------------------------------------- +Fri Jan 27 12:24:41 CET 2006 - coolo@suse.de + +- avoid file conflict with qt package + +------------------------------------------------------------------- +Fri Jan 27 08:08:10 CET 2006 - coolo@suse.de + +- fix qt3.sh + +------------------------------------------------------------------- +Fri Jan 27 02:21:53 CET 2006 - mls@suse.de + +- converted neededforbuild to BuildRequires + +------------------------------------------------------------------- +Wed Jan 25 18:06:26 CET 2006 - dmueller@suse.de + +- set $QTDIR in /etc/profile.d/qt3.(c)sh + +------------------------------------------------------------------- +Sat Dec 3 14:30:43 CET 2005 - coolo@suse.de + +- build with -Bdirect if available +- updating font patch + +------------------------------------------------------------------- +Fri Dec 2 00:11:21 CET 2005 - dmueller@suse.de + +- build with -fno-strict-aliasing + +------------------------------------------------------------------- +Wed Nov 23 10:18:29 CET 2005 - dmueller@suse.de + +- unify spec files via a common patch/sources section + and adjust spec files accordingly +- add /etc/profile.d hook to put qmake in the path (#134377) +- drop fast-malloc patch for all packages (#134563) + +------------------------------------------------------------------- +Fri Nov 18 15:20:21 CET 2005 - stbinner@suse.de + +- only disable FcFontSort patch for released distributions + +------------------------------------------------------------------- +Fri Nov 18 12:08:43 CET 2005 - stbinner@suse.de + +- disable FcFontSort patch because of immaturity + +------------------------------------------------------------------- +Fri Nov 11 15:48:07 CET 2005 - dmueller@suse.de + +- avoid crashes after QListView::clear() + +------------------------------------------------------------------- +Wed Nov 2 15:52:04 CET 2005 - coolo@suse.de + +- avoid FcFontSort as it's very expensive + +------------------------------------------------------------------- +Thu Oct 27 14:38:16 CEST 2005 - stbinner@suse.de + +- extend fix-key-release-event-with-imm.diff to fix another Immodule + related key release event bug (#130727) + +------------------------------------------------------------------- +Wed Oct 12 19:25:52 CEST 2005 - dmueller@suse.de + +- update -Werror patch to catch one more case + +------------------------------------------------------------------- +Mon Oct 10 16:58:30 CEST 2005 - dmueller@suse.de + +- add patch to fix broken key compression (#121049) + +------------------------------------------------------------------- +Sat Oct 8 00:04:41 CEST 2005 - dmueller@suse.de + +- patch cleanup + +------------------------------------------------------------------- +Wed Oct 5 13:59:53 CEST 2005 - dmueller@suse.de + +- add 0065-fix_werror_with_gcc4.patch (#119209) + +------------------------------------------------------------------- +Wed Sep 28 16:32:43 CEST 2005 - stbinner@suse.de + +- removed historic "Autoreqprov:off" leftover + +------------------------------------------------------------------- +Wed Sep 28 15:27:34 CEST 2005 - stbinner@suse.de + +- add a patch to fix capitalization of Immodule strings + +------------------------------------------------------------------- +Mon Sep 26 10:57:35 CEST 2005 - coolo@suse.de + +- fix build on x86_64 + +------------------------------------------------------------------- +Mon Sep 19 12:40:22 CEST 2005 - mfabian@suse.de + +- Bugzilla #117115: enable input methods in qlineedit widgets + only when "mode == Normal" (i.e. not when "mode == NoEcho" or + "mode == Password"). Using input methods while inputting + passwords is useless and confusing. + +------------------------------------------------------------------- +Fri Sep 16 23:06:14 CEST 2005 - schwab@suse.de + +- Never strip gratuitously. + +------------------------------------------------------------------- +Thu Sep 15 10:57:05 CEST 2005 - stbinner@suse.de + +- update to version 3.3.5 + +------------------------------------------------------------------- +Mon Sep 5 13:04:30 CEST 2005 - coolo@suse.de + +- layout popup menus correctly (#113048) + +------------------------------------------------------------------- +Fri Aug 19 17:04:02 CEST 2005 - llunak@suse.cz + +- Place dialog properly for systray icons on xinerama (#104794). + +------------------------------------------------------------------- +Fri Jul 29 18:24:24 CEST 2005 - dmueller@suse.de + +- add Q_EXPORT visibility support +- Fix gcc 4.0.x compiler detection for qt plugin buildkey + +------------------------------------------------------------------- +Thu Jun 23 14:37:00 CEST 2005 - mrueckert@suse.de + +- Applied patch from Lubos Lunak to fix drag'n'drop when the + visible window is not at the top of the window stack. + +------------------------------------------------------------------- +Fri Jun 10 17:28:47 CEST 2005 - adrian@suse.de + +- Apply workaround from Simon Hausmann to avoid miscompilation with gcc4 + +------------------------------------------------------------------- +Tue Jun 7 16:15:54 CEST 2005 - adrian@suse.de + +- do not trigger -debug configure flag on -g, but use it for beta + distribution + +------------------------------------------------------------------- +Tue May 31 10:49:30 CEST 2005 - adrian@suse.de + +- require freeglut-devel instead of XFree86-Mesa-devel + +------------------------------------------------------------------- +Fri Apr 15 19:52:35 CEST 2005 - mfabian@suse.de + +- Bugzilla #74133: check for some more glyphs for Katakana and + Hiragana, especially also check for all the glyphs which are + checked for Han_Japanese. This usually guarantees that the same + font is used for Katakana and Hiragana as for Japanese Kanji, + which is what we want. + +------------------------------------------------------------------- +Fri Apr 8 15:28:36 CEST 2005 - uli@suse.de + +- fixed to build with GCC4 on ARM + +------------------------------------------------------------------- +Mon Apr 4 15:02:41 CEST 2005 - adrian@suse.de + +- apply patches from qt-copy, fixes for mouse handling in popups + +------------------------------------------------------------------- +Thu Mar 24 09:57:01 CET 2005 - adrian@suse.de + +- update font mappings in qtrc for asian languages (#74363) + +------------------------------------------------------------------- +Wed Mar 16 17:54:12 CET 2005 - adrian@suse.de + +- fix possible crash in qtranslator (#71968, by Lubos) + +------------------------------------------------------------------- +Fri Mar 4 15:50:50 CET 2005 - adrian@suse.de + +- fix loading of style plugins for lib/lib64 mixed systesm (by Lubos) + +------------------------------------------------------------------- +Fri Feb 25 13:26:56 CET 2005 - adrian@suse.de + +- fix all Exec= lines for menu entries + +------------------------------------------------------------------- +Fri Feb 11 18:29:14 CET 2005 - adrian@suse.de + +- apply patch for rubberband selections from Andre Moreira Magalhaes + +------------------------------------------------------------------- +Wed Feb 9 17:55:47 CET 2005 - adrian@suse.de + +- add qclipboard hack to avoid freezes from qt-copy again + +------------------------------------------------------------------- +Wed Feb 2 16:35:44 CET 2005 - adrian@suse.de + +- fix plugin loading for the KDE integration + +------------------------------------------------------------------- +Wed Jan 26 17:49:46 CET 2005 - adrian@suse.de + +- update to version 3.3.4 +- reenable limit size patch to keep BC +- remove qclipboard fix, it got merged +- remove bidi fixes, they got merged +- remove gif handler fixes, they got merged +- apply KDE dialog integration code from Lubos +- revert some changes in imm code to solve a problem with missing + key release events + +------------------------------------------------------------------- +Fri Jan 14 14:12:06 CET 2005 - adrian@suse.de + +- update imm patch to version from 20041203 +- disable image size patch for now, it broke printing of large images + +------------------------------------------------------------------- +Wed Jan 5 13:37:00 CET 2005 - adrian@suse.de + +- reenable the SHM patch again +- add qtimm patch to solve an issue with Opera +- remove binary links from /usr/bin/, they do conflict with Qt 4 + +------------------------------------------------------------------- +Mon Nov 22 12:06:33 CET 2004 - ro@suse.de + +- "sed -i" does not work on old distributions + +------------------------------------------------------------------- +Tue Nov 16 11:04:55 CET 2004 - adrian@suse.de + +- package icon files for desktop entries + +------------------------------------------------------------------- +Mon Nov 8 16:07:11 CET 2004 - coolo@suse.de + +- improve Waldo's patch to limit image dimensions + +------------------------------------------------------------------- +Fri Oct 29 23:29:44 CEST 2004 - schwab@suse.de + +- Revert last change to png writing. + +------------------------------------------------------------------- +Tue Oct 26 10:51:34 CEST 2004 - adrian@suse.de + +- fix from Lubos for full screen mode switching on 64bit (#46972) + +------------------------------------------------------------------- +Mon Oct 25 14:26:40 CEST 2004 - schwab@suse.de + +- Extend last change to png writing. + +------------------------------------------------------------------- +Sat Oct 23 23:23:21 CEST 2004 - schwab@suse.de + +- Fix endian bug in png reading. + +------------------------------------------------------------------- +Thu Oct 14 18:09:56 CEST 2004 - adrian@suse.de + +- fix assitant zoom functionality, patch by Waldo (#45688) + +------------------------------------------------------------------- +Mon Oct 11 18:11:32 CEST 2004 - adrian@suse.de + +- fix requires of qt3-devel for new x.org packages + +------------------------------------------------------------------- +Wed Sep 29 10:27:12 CEST 2004 - adrian@suse.de + +- prefer MiscGlyphSymbol fonts with tics over others (#46280) +- enable BiDi support by default + +------------------------------------------------------------------- +Tue Sep 28 11:45:55 CEST 2004 - mfabian@suse.de + +- Bugzilla #46216: make "On The Spot" the default input style + for Qt. + +------------------------------------------------------------------- +Sat Sep 25 13:46:59 CEST 2004 - adrian@suse.de + +- prefer the .lib64.so extension on lib64 systems, but do not + require it anymore + +------------------------------------------------------------------- +Fri Sep 24 22:10:29 CEST 2004 - adrian@suse.de + +- fix load of plugins on lib64 systems. The plugins do need a + .lib64.so extension now + +------------------------------------------------------------------- +Wed Sep 15 17:52:55 CEST 2004 - adrian@suse.de + +- add two more glyphs to simplified chinese detection. (#44059) + +------------------------------------------------------------------- +Tue Sep 14 13:57:01 CEST 2004 - adrian@suse.de + +- handle also hongkong chinese local in a correct way (#44059) +- prefer chinese fonts via optional glyphs, but use also + the free ones, if no commercial font is avaible (#44059) + +------------------------------------------------------------------- +Mon Sep 13 20:14:31 CEST 2004 - adrian@suse.de + +- hopefully solve the chinese font detection problems (#44059) + +------------------------------------------------------------------- +Mon Sep 13 11:17:50 CEST 2004 - adrian@suse.de + +- fix build for old distributions +- prepare qt for konsole transparency mode (via composite extension) + +------------------------------------------------------------------- +Fri Sep 10 17:43:56 CEST 2004 - mfabian@suse.de + +- update to qt-x11-immodule-unified-qt3.3.3-20040910.diff which + merges the previous three patches (With help from Adrian to + make it build). + +------------------------------------------------------------------- +Fri Sep 10 16:34:52 CEST 2004 - mfabian@suse.de + +- add qt-x11-immodule-unified-qt3.3.3-r123-event-inversion-20040909.diff + to fix the endless loop problem when using M17N-t-latin1-post + or M17N-vi-viqr. See also + http://freedesktop.org/pipermail/immodule-qt/2004-September/000447.html + and followups. Patch thanks to Yamaken. + +------------------------------------------------------------------- +Wed Sep 8 10:13:26 CEST 2004 - adrian@suse.de + +- add 3.3.3 regression fixes in pre-3.3.4.diff +- add bidi fixes from qt-copy +- add qpixmap mitshm support from Lubos +- update immodule patch to stable release 20040819 +- adding event inversion fix for immodule from Zhe Su + +------------------------------------------------------------------- +Fri Sep 3 15:06:55 CEST 2004 - adrian@suse.de + +- udpate qt immodule patch to snapshot from 20040814 + +------------------------------------------------------------------- +Thu Aug 26 17:09:14 CEST 2004 - adrian@suse.de + +- disable explicit debug flags again + +------------------------------------------------------------------- +Mon Aug 23 13:23:02 CEST 2004 - adrian@suse.de + +- apply workaround for broken focus handling cause by the xim + patch due to a bug in X for released distributions (by Lubos) + +------------------------------------------------------------------- +Wed Aug 18 12:06:15 CEST 2004 - adrian@suse.de + +- enable full debug compile, if -g is in RPM_OPT_FLAGS + +------------------------------------------------------------------- +Tue Aug 17 14:46:19 CEST 2004 - coolo@suse.de + +- install qt3 after grep + +------------------------------------------------------------------- +Tue Aug 17 07:27:13 CEST 2004 - adrian@suse.de + +- apply patch from Waldo to be able to limit the size of loaded + images. Important for khtml (#43841) +- apply fix to handle the side pixmap of the kmenu correctly (0047) +- apply KToolBarButton fix (0051) + +------------------------------------------------------------------- +Fri Aug 13 06:19:32 CEST 2004 - adrian@suse.de + +- fix gif handling (#43356) + +------------------------------------------------------------------- +Thu Aug 12 08:23:16 CEST 2004 - adrian@suse.de + +- update to version 3.3.3 +- remove obsolete patches + +------------------------------------------------------------------- +Tue Aug 3 16:16:53 CEST 2004 - adrian@suse.de + +- add patch to support scim + +------------------------------------------------------------------- +Wed Jun 9 15:21:27 CEST 2004 - adrian@suse.de + +- update asian font mappings for commercial japanese fonts + (by mfabian) + +------------------------------------------------------------------- +Wed Jun 2 16:17:53 CEST 2004 - adrian@suse.de + +- fix libGL loading in the right way, no .so link is needed anymore + again + +------------------------------------------------------------------- +Wed May 26 16:47:34 CEST 2004 - adrian@suse.de + +- load libGL via .so link again (due to the different possible + setups #41118) +- libXmu gets still loaded via hardcoded path and version + +------------------------------------------------------------------- +Tue Apr 27 15:55:48 CEST 2004 - adrian@suse.de + +- update to version 3.3.2 + * remove obsolete patches +- do apply %patch16 + +------------------------------------------------------------------- +Fri Apr 23 09:26:44 CEST 2004 - adrian@suse.de + +- disable atk support for released distributions + +------------------------------------------------------------------- +Thu Apr 22 11:40:17 CEST 2004 - coolo@suse.de + +- another try to fix wrong font caching also for japanese/chinese + +------------------------------------------------------------------- +Tue Apr 20 11:34:13 CEST 2004 - coolo@suse.de + +- apply fix for wrong font caching (#39175) + +------------------------------------------------------------------- +Fri Apr 16 11:42:30 CEST 2004 - adrian@suse.de + +- apply fix for opentype aliasing issues + +------------------------------------------------------------------- +Tue Apr 13 10:50:22 CEST 2004 - adrian@suse.de + +- fix OpenGL support, if no -devel package is installed (#38857) +- fix xcursor support +- add current snapshot of Qt-ATK bridge patch + (disabled as long USE_QACCESSIBLE enviroment variable isn't set) + +------------------------------------------------------------------- +Sat Apr 3 10:07:55 CEST 2004 - adrian@suse.de + +- apply 0043-fix_expired_cookie_crash.diff from qt-copy(by Dirk) + * qt based applications can crash in ssh sessions with new + openssh (#38185) + +------------------------------------------------------------------- +Wed Mar 31 17:47:33 CEST 2004 - mfabian@suse.de + +- Bugzilla #37720: + add font substitutions for "SUSE*" fonts to default qtrc. + +------------------------------------------------------------------- +Thu Mar 25 10:12:37 CET 2004 - coolo@suse.de + +- fix for richtext tags (in knotes) +- fix for fonts with multiple scripts (#36583) +- fix for custom resolutions + +------------------------------------------------------------------- +Tue Mar 16 16:29:42 CET 2004 - adrian@suse.de + +- fix for command line handling (XIM in QApplication)(#35881) +- fix double packaging of qassistant translations + +------------------------------------------------------------------- +Mon Mar 15 17:55:57 CET 2004 - adrian@suse.de + +- define a default Font again. (Sans Serif with 10points) + (#36014) + +------------------------------------------------------------------- +Wed Mar 10 08:44:03 CET 2004 - adrian@suse.de + +- fix for xcursor cache hangling (by Lubos) +- move assistant to -devel-doc package + +------------------------------------------------------------------- +Thu Mar 4 22:10:52 CET 2004 - adrian@suse.de + +- apply fix for not found monospaced fonts without Euro glyph + (Patch by Lars Knoll) + +------------------------------------------------------------------- +Thu Mar 4 13:53:53 CET 2004 - adrian@suse.de + +- apply different bugfix and speed enhancement patches from qt-copy + as recommended by Lubos + * 0001: DnD optimisation + * 0002: Active Window Fix + * 0007: MITSHM extension support for QPixmap<>Qimage conversation + * 0037: dnd timestamp fix + * 0038: dragobject prefer fix + +------------------------------------------------------------------- +Mon Mar 1 11:39:25 CET 2004 - adrian@suse.de + +- update to final 3.3.1 version +- disable fast-malloc for > 9.0, nptl does work good enough +- add qclipboard-recursion-fix from Lubos +- further 64bit aliasing fixes + +------------------------------------------------------------------- +Mon Feb 16 14:43:49 CET 2004 - adrian@suse.de + +- update to current snapshot (3.3.1-snapshot-20040216) +- build opentype with -fno-strict-aliasing + +------------------------------------------------------------------- +Mon Feb 9 17:02:41 CET 2004 - adrian@suse.de + +- fix non-latin1 QString handling + (patch from Roman Stepanov) + +------------------------------------------------------------------- +Wed Feb 4 20:24:37 CET 2004 - adrian@suse.de + +- update to version 3.3.0 final +- disable 3rdparty source and use system libraries + +------------------------------------------------------------------- +Thu Jan 29 14:05:26 CET 2004 - adrian@suse.de + +- update to snapshot 20040129 +- use original qstring again, kprinter got fixed + +------------------------------------------------------------------- +Sun Jan 25 17:53:03 CET 2004 - adrian@suse.de + +- update to snapshot 20040125 +- revert qstring changes + +------------------------------------------------------------------- +Tue Jan 13 14:52:07 CET 2004 - adrian@suse.de + +- update to snapshot 20040113 + +------------------------------------------------------------------- +Mon Dec 29 11:48:49 CET 2003 - adrian@suse.de + +- update to snapshot from 20031229 to get KDE compiling again +- remove upstream included translation files +- cleanup stuff not anymore needed +- do not build sqlite plugin with (broken) sqlite sources from qt + tar ball anymore + +------------------------------------------------------------------- +Thu Dec 11 13:10:37 CET 2003 - adrian@suse.de + +- update to version 3.3 beta 1 + * solves the remaining issues with dlopen GL + +------------------------------------------------------------------- +Tue Dec 9 17:20:56 CET 2003 - adrian@suse.de + +- add KDE plugin path for qt 3.3 + +------------------------------------------------------------------- +Thu Dec 4 11:25:27 CET 2003 - adrian@suse.de + +- update to snapshot 20031204 +- do not link against GL libs anymore, but still support GL via dlopen + apps and libs beside libbqt* are still linked against GL for now +- build fix for qt3-extensions + +------------------------------------------------------------------- +Tue Dec 2 17:54:34 CET 2003 - adrian@suse.de + +- update to current 3.3 snapshot ( 20031202 - pre beta 1) + * obsoletes several patches + * IPv6 support +- temporary disabled PostgreSQL support +- add SQLite support + +------------------------------------------------------------------- +Fri Nov 21 11:05:33 CET 2003 - adrian@suse.de + +- drop not applyed font_fixes patch and add the old Xft2 fixes + again, to support displays without Render extension. + +------------------------------------------------------------------- +Fri Nov 14 14:30:11 CET 2003 - adrian@suse.de + +- update to version 3.2.3 and usual patch cleanup + +------------------------------------------------------------------- +Thu Oct 23 09:52:28 CEST 2003 - adrian@suse.de + +- build without -mminimal-toc on ppc64 +- apply crash fix from TT for some fonts in XLFD mode + +------------------------------------------------------------------- +Thu Oct 16 16:00:46 CEST 2003 - adrian@suse.de + +- update to version 3.2.2 + * font fixes patch is not applied intentionaly, for testing + plain qt behaviour for now. + +------------------------------------------------------------------- +Thu Oct 2 12:06:08 CEST 2003 - adrian@suse.de + +- require freeglut-devel, instead of mesaglut-devel for > 9.0 + +------------------------------------------------------------------- +Tue Sep 30 09:25:31 CEST 2003 - coolo@suse.de + +- using the right tool to compile translation files + +------------------------------------------------------------------- +Thu Sep 25 13:05:03 CEST 2003 - adrian@suse.de + +- update fontconfig patch again, fixes multiple listing of fonts +- do not complain anymore about not matching plugin + +------------------------------------------------------------------- +Sun Sep 21 15:02:56 CEST 2003 - adrian@suse.de + +- prefer Nimbus fonts, instead of using asian fonts, if possible + (the asian fonts have some broken latin chars) + +------------------------------------------------------------------- +Sun Sep 21 12:35:19 CEST 2003 - adrian@suse.de + +- install html docu to the same place as on 8.2, to solve + update problems (#31507). (install dir and symlink was + swapped for unknown reason) + +------------------------------------------------------------------- +Fri Sep 19 15:48:11 CEST 2003 - adrian@suse.de + +- memory leak fix from Lars in QTextEngine + +------------------------------------------------------------------- +Thu Sep 18 16:35:05 CEST 2003 - adrian@suse.de + +- updated patches from Lars + * fixing Unicode families and foundaries issues + * printing issues +- clean up unused patches + +------------------------------------------------------------------- +Wed Sep 17 18:31:56 CEST 2003 - adrian@suse.de + +- a bit more silence .. QPixmap before QApplication warning is away +- new asian font mappings from mfabian + +------------------------------------------------------------------- +Mon Sep 15 18:02:31 CEST 2003 - adrian@suse.de + +- new font fixes from Lars, the default size problem should be away +- fix build for non-Xft2 distibutions + +------------------------------------------------------------------- +Thu Sep 11 22:18:01 CEST 2003 - adrian@suse.de + +- silence on lib64 systems with 32bit plugins installed (#30559) +- ensure to have a [3.2] section in old qtrc files + +------------------------------------------------------------------- +Mon Sep 8 16:26:49 CEST 2003 - coolo@suse.de + +- apply fix from TT to fix konsole + setRawName + +------------------------------------------------------------------- +Thu Sep 4 12:53:19 CEST 2003 - adrian@suse.de + +- add always lib and lib64 kde plugin path to qtrc + +------------------------------------------------------------------- +Wed Sep 3 16:55:00 CEST 2003 - adrian@suse.de + +- apply fix from TT: "don't generate bogus mouse move events." +- qt3-devel requires XFree86-Mesa-devel + +------------------------------------------------------------------- +Tue Sep 2 17:20:05 CEST 2003 - adrian@suse.de + +- add slovak translation from Stanislav Visnovsky +- add czech translation from Klara Cihlarova + +------------------------------------------------------------------- +Tue Sep 2 16:20:15 CEST 2003 - adrian@suse.de + +- add asian mappings from 8.2 to qtrc again + +------------------------------------------------------------------- +Mon Sep 1 18:13:33 CEST 2003 - meissner@suse.de + +- Don't do readlink checks for set*id programs (will break + in TLS startup sequence of glibc), just fall back to old + malloc. #29530 + +------------------------------------------------------------------- +Mon Sep 1 12:02:00 CEST 2003 - adrian@suse.de + +- apply qlineedit fix from TT + +------------------------------------------------------------------- +Mon Sep 1 11:30:31 CEST 2003 - adrian@suse.de + +- qtconfig menu entry becomes unimportant + +------------------------------------------------------------------- +Sun Aug 31 22:33:44 CEST 2003 - adrian@suse.de + +- generate .la file again + +------------------------------------------------------------------- +Fri Aug 29 15:16:43 CEST 2003 - adrian@suse.de + +- use newer font_fixes patch from Lars +- enforce usage of Xft2 even on non-Xrender displays +- revert qclipboard changes to 3.1.2 code + +------------------------------------------------------------------- +Wed Aug 27 13:38:51 CEST 2003 - adrian@suse.de + +- use official 3.2.1 tar ball instead of 3.2.0+patch + +------------------------------------------------------------------- +Tue Aug 26 08:20:07 CEST 2003 - adrian@suse.de + +- new _big_ fix from Lars for fixing the remaining font issues + +------------------------------------------------------------------- +Sun Aug 24 16:55:24 CEST 2003 - adrian@suse.de + +- apply fix from Lars for the foundary font problem, when + using pixmap fonts via Xft2. This makes the freetype2 + foundary-family patch obsolete from qt view. + +------------------------------------------------------------------- +Sat Aug 23 13:44:22 CEST 2003 - adrian@suse.de + +- apply 3.2.1 patch, until the official tar ball arrives + +------------------------------------------------------------------- +Sat Aug 16 13:58:14 CEST 2003 - adrian@suse.de + +- justify Category of qtconfig + +------------------------------------------------------------------- +Fri Aug 1 18:00:24 CEST 2003 - adrian@suse.de + +- add desktop file for qtconfig + +------------------------------------------------------------------- +Wed Jul 23 16:20:03 CEST 2003 - adrian@suse.de + +- update to version 3.2.0 final + +------------------------------------------------------------------- +Thu Jul 17 12:55:23 CEST 2003 - adrian@suse.de + +- fix .la files after build + +------------------------------------------------------------------- +Tue Jul 15 08:49:39 CEST 2003 - adrian@suse.de + +- update to 3.2.0 beta 2 +- remove obsolete patches + +------------------------------------------------------------------- +Sun Jun 15 12:19:14 CEST 2003 - coolo@suse.de + +- never strip explicitly +- always build with -release to avoid debug output even with -g + +------------------------------------------------------------------- +Thu Jun 12 09:07:58 CEST 2003 - coolo@suse.de + +- move the html docu into docdir and put the link in lib +- package directories +- fix directory permissions + +------------------------------------------------------------------- +Fri May 30 15:04:29 CEST 2003 - adrian@suse.de + +- fix file conflicts + +------------------------------------------------------------------- +Mon May 19 11:28:36 CEST 2003 - adrian@suse.de + +- revert source incompatibility to 3.1.x in qhbox constructor + +------------------------------------------------------------------- +Sun May 18 14:03:31 CEST 2003 - adrian@suse.de + +- update to version 3.2 beta 1 +- big patch clean up +- use largefile support api for > 8.2 + +------------------------------------------------------------------- +Thu Apr 10 17:01:32 CEST 2003 - coolo@suse.de + +- fixing long font names as returned by font-config + +------------------------------------------------------------------- +Wed Mar 26 13:19:48 CET 2003 - adrian@suse.de + +- workaround rpm bug on 7.3-ppc + +------------------------------------------------------------------- +Mon Mar 24 10:04:18 CET 2003 - adrian@suse.de + +- fix build on SuSE < 8.1 + +------------------------------------------------------------------- +Fri Mar 21 14:59:11 CET 2003 - adrian@suse.de + +- update to version 3.1.2 and remove obsolete patches + +------------------------------------------------------------------- +Tue Mar 11 20:33:03 CET 2003 - coolo@suse.de + +- fixing the fix + +------------------------------------------------------------------- +Tue Mar 11 13:35:31 CET 2003 - coolo@suse.de + +- applied patch by TT to fix kmail folder selection + (#24519 - also known as kde bug #48888) + +------------------------------------------------------------------- +Fri Mar 7 21:16:17 CET 2003 - adrian@suse.de + +- do not use XListFonts, if X server supports Xft on >8.1 (Xft2) + +------------------------------------------------------------------- +Fri Feb 28 00:25:14 CET 2003 - adrian@suse.de + +- fast malloc is back + (still 20% with glibc 2.3 without spinlock'ed-malloc) +- extend blacklist +- use fast malloc also on hammer + +------------------------------------------------------------------- +Wed Feb 26 11:43:08 CET 2003 - adrian@suse.de + +- add [3.1] plugin path +- add fix for mouse cursor bug over ssh + +------------------------------------------------------------------- +Mon Feb 24 11:56:07 CET 2003 - adrian@suse.de + +- use correct kde plugin path on lib64 systems + +------------------------------------------------------------------- +Mon Feb 3 11:39:24 CET 2003 - adrian@suse.de + +- fix missing symbols in libqt* + +------------------------------------------------------------------- +Thu Jan 30 16:19:31 CET 2003 - adrian@suse.de + +- fix %pre script + +------------------------------------------------------------------- +Sun Jan 26 14:05:56 CET 2003 - adrian@suse.de + +- prefix=/usr/lib/qt3 + (third party apps installing translations into $QTDIR now) +- modify qdesktopwidget resize patch to be BC with Qt 3.2 +- comment out non-official api extensions +- remove private headers tar ball again + (qsa beta2 contains them) +- fix qtrc enviroment patch +- hardcode qt settings dir to /etc/X11 (no need for $QTDIR/etc/settings anymore) +- enable all designer plugins + +------------------------------------------------------------------- +Thu Jan 23 18:36:05 CET 2003 - adrian@suse.de + +- add xrandr extension from Qt 3.2 +- add resize event to qdesktopwidget (patch from Lubos) +- compile codecs as plugins + +------------------------------------------------------------------- +Tue Jan 21 12:52:33 CET 2003 - adrian@suse.de + +- use fast malloc only on %ix86 + +------------------------------------------------------------------- +Thu Jan 16 15:58:23 CET 2003 - adrian@suse.de + +- include qt default translations + +------------------------------------------------------------------- +Fri Jan 10 15:12:46 CET 2003 - adrian@suse.de + +- hppa is parisc + +------------------------------------------------------------------- +Thu Jan 9 14:44:06 CET 2003 - adrian@suse.de + +- fix some more qmake.conf entries + (esp. pathes to lib64 directories and flags based on $RPM_OPT_FLAGS) + +------------------------------------------------------------------- +Tue Jan 7 16:42:59 CET 2003 - adrian@suse.de + +- use -ffunction-sections on hppa + +------------------------------------------------------------------- +Thu Jan 2 13:07:01 CET 2003 - adrian@suse.de + +- fix build ( patch -p1 -> -p0 ) + +------------------------------------------------------------------- +Fri Dec 27 17:50:17 CET 2002 - adrian@suse.de + +- several small changes/fixes/workarounds to be able to compile qsa + (they will be changed in 3.1.2) + +------------------------------------------------------------------- +Tue Dec 17 12:40:16 CET 2002 - adrian@suse.de + +- update to version 3.1.1 and cleanup patches +- apply Xft speed-up patch from dfaure + +------------------------------------------------------------------- +Wed Dec 4 15:10:17 CET 2002 - adrian@suse.de + +- drop fast-malloc, not needed since glibc 2.3 + +------------------------------------------------------------------- +Thu Nov 28 18:33:28 CET 2002 - adrian@suse.de + +- add qprinter fix from Lars + +------------------------------------------------------------------- +Wed Nov 27 00:44:44 CET 2002 - ro@suse.de + +- added expat to neededforbuild + +------------------------------------------------------------------- +Sat Nov 23 14:12:16 CET 2002 - adrian@suse.de + +- use Xft2 from XFree package now for > SuSE 8.1 + (experimental fontconfig package is dropped) +- build qt3-non-mt with extra spec file now +- fix korean [Font Substitutions] (#19575) +- fix broken qmake debug defaults (#21891) +- fix requires of database plugin packages + +------------------------------------------------------------------- +Fri Nov 15 10:33:53 CET 2002 - adrian@suse.de + +- update to 3.1.0 final version +- apply qwidget/hideChildren patch from Harri +- move libqui into qt3 main package + +------------------------------------------------------------------- +Tue Nov 5 20:00:37 CET 2002 - adrian@suse.de + +- package also missing mkspecs/* + +------------------------------------------------------------------- +Sun Nov 3 12:54:52 CET 2002 - adrian@suse.de + +- update to post 3.1 beta 2 snapshot (rc1 or rc2 ?) +- big rework of spec file, lots of workarounds are not needed anymore :) +- use experimental fontconfig/Xft2 package for > 8.1 +- enable nis & cups support + +------------------------------------------------------------------- +Mon Oct 21 18:25:53 CEST 2002 - adrian@suse.de + +- swab %ifarch <> %if for old broken rpm's + +------------------------------------------------------------------- +Mon Oct 21 13:44:15 CEST 2002 - adrian@suse.de + +- remove rpath again, which came back with 3.0.5 update (#20929) +- disable qDebug lines in chinese patch (#20959) + +------------------------------------------------------------------- +Wed Oct 9 11:47:44 CEST 2002 - adrian@suse.de + +- implement a blacklist of executables which should not use + the fast malloc implementation. (python and perl atm) +- disable fast-malloc for >8.1 +- enable fast-malloc for x86_64 + +------------------------------------------------------------------- +Fri Sep 20 11:24:51 CEST 2002 - adrian@suse.de + +- qclipboard fix from Lubos. Copy from old X applications works again + +------------------------------------------------------------------- +Mon Sep 16 12:07:53 CEST 2002 - adrian@suse.de + +- replace qt3-gb18030.diff patch with the new patch from + James Su for chinese handling (#19399) +- set XIMInputStyle for japanese input (#19387) +- change Requires: from /usr/include/png.h to libpng-devel, since + connectivas apt can not handle this. + +------------------------------------------------------------------- +Fri Aug 30 14:13:34 CEST 2002 - adrian@suse.de + +- remove the dlopen patch again. It is not needed anymore and may + cause crashes in rare cases. + +------------------------------------------------------------------- +Wed Aug 28 15:26:02 CEST 2002 - adrian@suse.de + +- apply fix from Lubos for DND in kcontrol +- apply fix to fix gb18030 encoding (from Turbolinux China) + +------------------------------------------------------------------- +Mon Aug 26 16:25:40 CEST 2002 - adrian@suse.de + +- do not use -plugindir configure option anymore. it caused the + broken plugin support and remov $QTDIR/plugins again from qtrc + qtrc is also a (noreplace) config file again +- s,getenv,__secure_getenv, as suggested by okir in plugin_path.dif + +------------------------------------------------------------------- +Thu Aug 22 18:33:55 CEST 2002 - adrian@suse.de + +- add patch to set the qt settings dir to a non-default dir +- add patches from qt 3.0.6 to fix asian copy&paste problems +- set explicit plugin pathes in qtrc and replace them during update + (this is only a workaround until I know why qt does not use the + compiled path) + +------------------------------------------------------------------- +Thu Aug 22 14:53:57 CEST 2002 - adrian@suse.de + +- remove dangeling symlink in /usr/lib/qt3/mkspecs/linux-g++ +- add plugin path to global qtrc + +------------------------------------------------------------------- +Tue Aug 20 13:24:25 CEST 2002 - adrian@suse.de + +- fix #defines + +------------------------------------------------------------------- +Tue Aug 20 00:24:37 CEST 2002 - adrian@suse.de + +- redo the plugin path patch again, we use now a implicit + subdirectory like "lib64", if needed. +- qtconfig is patched to hide/not write back those entries + +------------------------------------------------------------------- +Fri Aug 16 14:00:33 CEST 2002 - coolo@suse.de + +- fixing the patches + +------------------------------------------------------------------- +Fri Aug 16 13:18:21 CEST 2002 - coolo@suse.de + +- applying the plugin path patches, so they actually do something + on lib64 platforms + +------------------------------------------------------------------- +Fri Aug 9 17:35:58 CEST 2002 - adrian@suse.de + +- fix plugin installation + +------------------------------------------------------------------- +Thu Aug 8 10:00:46 CEST 2002 - adrian@suse.de + +- use %suse_version macro instead of /etc/SuSE-release + +------------------------------------------------------------------- +Fri Aug 2 14:41:33 CEST 2002 - coolo@suse.de + +- shut up if passed -noxim is passed and xim doesn't work + +------------------------------------------------------------------- +Tue Jul 30 14:43:32 CEST 2002 - adrian@suse.de + +- disable pre-3.0.6 patches again, until focus problem is located +- add zlib-devel to Requires for qt3-devel and SuSE 8.1 +- add %run_ldconfig + +------------------------------------------------------------------- +Mon Jul 29 17:31:37 CEST 2002 - adrian@suse.de + +- apply shut-up.dif +- clean up neededforbuild + +------------------------------------------------------------------- +Fri Jul 26 16:33:25 CEST 2002 - adrian@suse.de + +- port Lea's fast malloc implementation to libqt-mt +- designer sig11 fixes are not needed anymore +- use some patches from qt-rsync + +------------------------------------------------------------------- +Fri Jul 19 13:07:05 CEST 2002 - adrian@suse.de + +- fix designer sig11 really +- kick warnings about unsuccesfull locks for non-root users + +------------------------------------------------------------------- +Thu Jul 18 18:00:13 CEST 2002 - adrian@suse.de + +- don't strip when in debug mode +- fix typo in build script + +------------------------------------------------------------------- +Wed Jul 17 09:59:28 CEST 2002 - adrian@suse.de + +- update to 3.0.5 final + * lots of bugfixes, see changes-3.0.5 for details + * new, binary incompatible plugin system +- fix sig11 in designer +- clean spec file, drop all not applied patches + +------------------------------------------------------------------- +Thu Jul 11 10:42:14 CEST 2002 - coolo@suse.de + +- reenable work around for transparenent images while printing + (PR16188) + +------------------------------------------------------------------- +Wed Jul 10 17:51:47 CEST 2002 - adrian@suse.de + +- update to near 3.0.5-final snapshot 3.0.5-snapshot-20020710 + +------------------------------------------------------------------- +Fri Jul 5 14:16:16 CEST 2002 - adrian@suse.de + +- fix -g detection during build + +------------------------------------------------------------------- +Fri Jun 21 00:21:28 CEST 2002 - adrian@suse.de + +- fix use of $RPM_OPT_FLAGS (broken since 3.0.4 update) +- use -mminimal-toc on ppc64 to workaround compiler bug atm +- update to pre-3.0.5 snapshot-20020620 + * use buildkey for plugins instead of our own plugin hack + * lots of fixes (exact description in changes-3.0.5) +- add lib64 to build key, if needed +- remove obsolete patches + +------------------------------------------------------------------- +Thu Jun 6 13:41:19 CEST 2002 - adrian@suse.de + +- rework plugin path patch for distributions > 8.0 + change name of "plugins" directory instead of filenames + * plugins -- lib32 and multithreaded plugins + * plugins-non-mt -- lib32 and without multithread support + * plugins-lib64 -- lib64 and multithreaded plugins + * plugins-lib64-non-mt -- lib64 and without multithread support + +------------------------------------------------------------------- +Thu May 30 20:03:50 CEST 2002 - adrian@suse.de + +- disable style-plugins again (too much qt apps have problems) +- disable Xft/Xrender support also for SuSE 7.3 (XFree 4.1.0) + (no one reads READMES and too many people had crashes) + +------------------------------------------------------------------- +Tue May 28 10:58:01 CEST 2002 - adrian@suse.de + +- fix %files + +------------------------------------------------------------------- +Mon May 27 13:37:15 CEST 2002 - adrian@suse.de + +- move qconfig, qmake to qt3-devel-tools +- build styles as plugin (except our default style: Platinum) + +------------------------------------------------------------------- +Mon May 27 00:10:23 CEST 2002 - ro@suse.de + +- lib64: fix qtmake.conf: QTLIBDIR also has the trailing "64" +- fix build-script for lib64 issues + +------------------------------------------------------------------- +Mon May 20 23:26:35 CEST 2002 - adrian@suse.de + +- fix build (disable odbc during qt3.spec build) + +------------------------------------------------------------------- +Mon May 20 10:13:55 CEST 2002 - adrian@suse.de + +- enable -tablet support if XFree86 provides it +- compile with -debug mode, if -g is set in enviroment +- fix postgres plugin build +- enable unixODBC support for newer distributions +- split sql drivers to extra packages +- fix dlopen call + +------------------------------------------------------------------- +Tue May 14 12:39:51 CEST 2002 - adrian@suse.de + +- fix lib64 patch to find OpenGL libs + +------------------------------------------------------------------- +Thu May 9 21:54:41 CEST 2002 - adrian@suse.de + +- apply fix for NetAccess focus, insertTitle(), QTextEdit and + QToolbar from qt-copy + +------------------------------------------------------------------- +Wed May 8 09:39:48 CEST 2002 - coolo@suse.de + +- fixing patch section (grr) + +------------------------------------------------------------------- +Tue May 7 17:13:41 CEST 2002 - coolo@suse.de + +- adding fix for x86_64 + +------------------------------------------------------------------- +Tue May 7 14:32:39 MEST 2002 - coolo@suse.de + +- update to qt 3.0.4 - remove fixes that do + not apply any longer +- disable asian patches as they do not apply + and I don't want to split them as I have no + idea if the problems they try to fix are still + there + +------------------------------------------------------------------- +Wed Apr 24 16:09:09 CEST 2002 - coolo@suse.de + +- fix lib64 support +- fix asian patch not to use arrays in unused arrays + (triggers compiler problem) + +------------------------------------------------------------------- +Sun Apr 21 12:58:33 CEST 2002 - adrian@suse.de + +- improve image rendering speed (patch by Lubos) + +------------------------------------------------------------------- +Tue Apr 9 16:21:07 CEST 2002 - adrian@suse.de + +- apply patch from Lubos to fix alpha channel in QMovie + +------------------------------------------------------------------- +Fri Apr 5 15:29:03 CEST 2002 - adrian@suse.de + +- fixed print support in qpsprint +- binary compatibility fixes by Lars for gbk encoding + +------------------------------------------------------------------- +Wed Apr 3 21:33:26 CEST 2002 - adrian@suse.de + +- apply fixes/extensions for asian/utf-8-based languages + (assembled by Lars and Brad, thank you, verifed by mfabian) +- 64bit fixes from Andreas Schwab (const char*) null pointer casts + +------------------------------------------------------------------- +Sun Mar 24 13:23:18 CET 2002 - adrian@suse.de + +- apply qtabbar fix. Fixes crashes with kcm modules. + +------------------------------------------------------------------- +Fri Mar 22 10:33:58 CET 2002 - adrian@suse.de + +- apply fix for sig11 in QCommonStyle (made by Waldo/Trolltech) +- apply fix to use libpng instead of libmng to load pngs (by coolo) +- add missing Requires for qt3-devel + +------------------------------------------------------------------- +Wed Mar 20 22:47:59 CET 2002 - adrian@suse.de + +- verify 3.0.3 final version +- add check for null pointer returned by libXft + (fix sig11 when no Xft fonts are configured) +- fix scrollbar behaviour for QT Platinum style + (we are X Windows compatible instead of MS Windows) + +------------------------------------------------------------------- +Tue Mar 19 10:36:42 CET 2002 - adrian@suse.de + +- update to version 3.0.3 + (rc6 tar ball from troll, I have to check after the qt-3.0.3 release, + if this is really qt-3.0.3 final) + +------------------------------------------------------------------- +Tue Mar 12 20:01:34 CET 2002 - adrian@suse.de + +- update to pre 3.0.3 snapshot (3.0.2.20020312) + +------------------------------------------------------------------- +Mon Mar 4 09:44:37 CET 2002 - adrian@suse.de + +- more fixes + * fix auto-resizing with QMovie + * fix to correctly open submenues in right to left layout + * reduce number of mallocs by sharing QColorGroup + * Simplified static cleanup handlers. + * smarter tooltip placement +- require "c++_compiler" for distributions newer than 7.3 only + +------------------------------------------------------------------- +Sun Mar 3 02:31:31 CET 2002 - adrian@suse.de + +- apply some fixes from qt-copy + * 8 bit color depth image format fixes + * spinbox flicker fix + * qrichtext dangeling pointers fix + * qmenubar right to left layout mode cursor navigation fix + * qcombobox avoid emitting highlighted twice on keyPressEvent + +------------------------------------------------------------------- +Mon Feb 25 17:34:15 CET 2002 - adrian@suse.de + +- update to version 3.0.2 +- remove compile fixes +- fix symlink for qtconfig + +------------------------------------------------------------------- +Thu Feb 14 01:05:14 CET 2002 - adrian@suse.de + +- fix Requires for qt3-devel (add g++ compiler) + +------------------------------------------------------------------- +Tue Feb 12 01:01:31 CET 2002 - adrian@suse.de + +- fix build for lib64/s390x + +------------------------------------------------------------------- +Wed Feb 6 21:08:43 CET 2002 - adrian@suse.de + +- add links in /usr/bin for qtconfig + +------------------------------------------------------------------- +Sun Feb 3 14:57:30 CET 2002 - adrian@suse.de + +- fix dumb-packager-bug (s,%fi,%endif,) + +------------------------------------------------------------------- +Sun Feb 3 12:23:35 CET 2002 - adrian@suse.de + +- compile fix for postrgres module +- extend plugin patch to work on s390x and sparc64 to work with + lib64 plugins +- add %{_libdir}/qt3 symlink for s390x and sparc64 + +------------------------------------------------------------------- +Sat Feb 2 13:00:38 CET 2002 - ro@suse.de + +- cleaned changes file + +------------------------------------------------------------------- +Fri Feb 1 15:29:58 CET 2002 - adrian@suse.de + +- update to current qt-copy snapshot (needed for KDE 3.0 beta 2) +- make threaded plugins as usual again +- non-threaded plugins needs now the not compatible -non-mt.so + suffix + +------------------------------------------------------------------- +Fri Feb 1 00:26:05 CET 2002 - ro@suse.de + +- changed neededforbuild to + +------------------------------------------------------------------- +Tue Jan 29 16:29:15 CET 2002 - adrian@suse.de + +- enable AA for SuSE > 7.3 + +------------------------------------------------------------------- +Tue Jan 29 10:58:57 CET 2002 - schwab@suse.de + +- Fix use of varargs on 64 bit platforms. + +------------------------------------------------------------------- +Wed Jan 23 22:56:28 CET 2002 - adrian@suse.de + +- patch plugin loader to load only plugins with -mt.so + extension +- link direct against libpng +- move qt3.conf file to susehelp +- TODO: make plugin loader path depending on %_libdir + +------------------------------------------------------------------- +Tue Jan 22 21:47:19 CET 2002 - adrian@suse.de + +- enable Xrender/Xft again for SuSE 7.3 + (I was misleaded by a broken libXft :/ ) +- using qt plugin mechanism for picture format support +- enable XRender by default, but leave Xft disabled by default + (kcontrol can switch Xft on for KDE applications now) +- add additional include path for postgres 7.2b5 + +------------------------------------------------------------------- +Mon Jan 21 16:58:53 CET 2002 - adrian@suse.de + +- disable Xft for all distributions until 7.3 + (XFree 4.2 is needed) +- sync QClipboard fix from qt-copy + +------------------------------------------------------------------- +Tue Jan 8 16:11:14 CET 2002 - adrian@suse.de + +- fix Requires +- disable rpath + +------------------------------------------------------------------- +Sun Jan 6 00:31:11 CET 2002 - adrian@suse.de + +- split non multithreaded librarys into qt3-non-mt package +- split developer tutorial into qt3-tutorial package +- use common config script to prepare build +- move libs to /usr/lib/qt3/%{_libdir} +- remove .prl files from file list again + +------------------------------------------------------------------- +Thu Jan 3 16:48:59 CET 2002 - adrian@suse.de + +- rename qt3-designer subpackage to qt3-devel-tools +- add default qtrc file + * disable Xft support by default + * use Platinum style + * set qt plugin path +- move qtconfig to qt base package +- apply fixes from qt-copy/KDE-cvs + +------------------------------------------------------------------- +Thu Dec 13 10:42:07 CET 2001 - adrian@suse.de + +- use $RPM_OPT_FLAGS during compile +- add missing .prl files to file list + +------------------------------------------------------------------- +Wed Dec 12 16:39:16 CET 2001 - adrian@suse.de + +- update to version 3.0.1 +- build all extra tools +- fix default mkspec symlink +- include examples to devel-doc package + +------------------------------------------------------------------- +Thu Nov 8 18:39:52 CET 2001 - ro@suse.de + +- use mesa-devel-packages in neededforbuild + +------------------------------------------------------------------- +Tue Oct 16 11:13:50 CEST 2001 - adrian@suse.de + +- fix hardcoded install dir in libqt + (no $QTDIR is needed at runtime anymore) + +------------------------------------------------------------------- +Mon Oct 15 18:16:49 CEST 2001 - adrian@suse.de + +- update to QT 3.0.0 final + (the KDE 3 battle begins :) + +------------------------------------------------------------------- +Fri Oct 5 10:50:24 CEST 2001 - adrian@suse.de + +- add missing header files +- cleanup workarounds in spec file and add some new (but less ;) + +------------------------------------------------------------------- +Mon Oct 1 16:35:56 CEST 2001 - adrian@suse.de + +- update to beta6 + +------------------------------------------------------------------- +Tue Sep 18 08:54:02 CEST 2001 - adrian@suse.de + +- update to beta5 + +------------------------------------------------------------------- +Wed Sep 5 12:17:19 CEST 2001 - adrian@suse.de + +- okay, my last try ... cp -f has different return values on the + distributions :( + +------------------------------------------------------------------- +Tue Sep 4 10:18:20 CEST 2001 - adrian@suse.de + +- disable postgres support for old distributions + (now it also builds with SuSE 6.4) + +------------------------------------------------------------------- +Mon Sep 3 15:42:48 CEST 2001 - adrian@suse.de + +- fix broken links in include path + +------------------------------------------------------------------- +Sun Sep 2 19:47:01 CEST 2001 - adrian@suse.de + +- workaround bugs in Makefile to install all needed files +- remove -j4 behind make + +------------------------------------------------------------------- +Tue Jun 19 15:26:54 CEST 2001 - adrian@suse.de + +- split documentation from qt3-devel to qt3-doc + +------------------------------------------------------------------- +Fri May 25 11:57:34 CEST 2001 - adrian@suse.de + +- first try with QT 3.0.0 beta 1 + ( this package is far away from being perfect ) + +------------------------------------------------------------------- +Sun May 6 10:52:33 CEST 2001 - adrian@suse.de + +- apply XftGlyph fix for qfont_x11.cpp from Keith Packard +- fix build for distributions before 7.1 + +------------------------------------------------------------------- +Fri May 4 11:39:55 CEST 2001 - adrian@suse.de + +- add fix for buffer overflow on qfont_x11 and some minor glitches + in qt-png +- qt-experimental is dropped, since we can enable AA in qt now. + +------------------------------------------------------------------- +Fri Apr 27 15:29:17 CEST 2001 - adrian@suse.de + +- switch BuildIndex for SuSEhelp to false by default + +------------------------------------------------------------------- +Mon Apr 23 22:22:19 CEST 2001 - adrian@suse.de + +- using -DNO_DEBUG +- apply latin9 patch from mls@suse.de + +------------------------------------------------------------------- +Wed Apr 4 22:48:01 CEST 2001 - mfabian@suse.de + +- add /etc/qt.fontguess (config file for Japanese and Korean + fonts) + +------------------------------------------------------------------- +Wed Mar 21 17:43:49 CET 2001 - adrian@suse.de + +- disable AA by default (still to many problems) + +------------------------------------------------------------------- +Sun Mar 18 09:46:50 CET 2001 - adrian@suse.de + +- reenable qt-experimental for SuSE distribution < 7.2 + disable opengl module for these distris in this package + +------------------------------------------------------------------- +Sat Mar 17 14:43:11 CET 2001 - adrian@suse.de + +- update to QT 2.3.0 + this makes qt-experimental obsolete + (maybe still some problems with the nvidia driver, but the nv + should work fine and the users are warned about nvidia since + SuSE 7.1) + +------------------------------------------------------------------- +Sun Mar 11 20:20:41 CET 2001 - mfabian@suse.de + +- fix spec-file to make it build with "rpm -ba" + +------------------------------------------------------------------- +Fri Feb 9 19:55:09 CET 2001 - adrian@suse.de + +- use $RPM_OPT_FLAGS + drop signed char patch + +------------------------------------------------------------------- +Sat Feb 3 14:12:01 CET 2001 - adrian@suse.de + +- update to QT 2.2.4 + qt-static is an own package and no sub packages anymore + fix/patch for qprintdialog is no longer needed + add fix from Andreas Schwab for 64bit platforms + +------------------------------------------------------------------- +Fri Jan 19 11:33:07 CET 2001 - adrian@suse.de + +- swap link and directory of html documentation. This makes + trouble during update from older distributions + +------------------------------------------------------------------- +Sat Jan 13 21:18:58 CET 2001 - adrian@suse.de + +- remove not necessary susehelp/htdig conf file + remove file conflicts between qt-devel and qt-experimental + +------------------------------------------------------------------- +Thu Jan 4 21:37:49 CET 2001 - adrian@suse.de + +- added qt-experimental,qt-japanese,qt-korean to Obsoletes: + +------------------------------------------------------------------- +Wed Jan 3 02:24:50 CET 2001 - adrian@suse.de + +- fix qprintdialog + fix qrichtext (Thanks Stefan) + +------------------------------------------------------------------- +Wed Jan 3 02:24:15 CET 2001 - adrian@suse.de + +- fix qprintdialog + +------------------------------------------------------------------- +Mon Jan 1 17:18:43 CET 2001 - adrian@suse.de + +- spec file fix + +------------------------------------------------------------------- +Sun Dec 31 13:18:17 CET 2000 - adrian@suse.de + +- added small tools to qt-devel (thanks Dirk) + +------------------------------------------------------------------- +Fri Dec 22 20:46:34 CET 2000 - adrian@suse.de + +- remove asian patches from qt-experimental + +------------------------------------------------------------------- +Wed Dec 20 18:51:44 CET 2000 - adrian@suse.de + +- fixe type in package name + +------------------------------------------------------------------- +Wed Dec 20 18:44:44 CET 2000 - adrian@suse.de + +- move docu from qtlib2 to qt + +------------------------------------------------------------------- +Sat Dec 16 17:02:47 CET 2000 - adrian@suse.de + +- initial package. support for font anti aliasing has been added + Also OpenGL module is active + +------------------------------------------------------------------- +Thu Dec 14 11:51:41 CET 2000 - adrian@suse.de + +- update to 2.2.3 and remove all the unneeded fix patches. + added SuSE help conf files to qt-devel + +------------------------------------------------------------------- +Tue Dec 12 15:32:01 CET 2000 - schwab@suse.de + +- Build with -O0 on ia64. + +------------------------------------------------------------------- +Fri Dec 1 00:29:50 CET 2000 - adrian@suse.de + +- added rpath for uic/kdelibs and fixed uic fix .. + to drunk to drink more + +------------------------------------------------------------------- +Thu Nov 30 11:31:36 CET 2000 - adrian@suse.de + +- fixed dif + +------------------------------------------------------------------- +Thu Nov 30 00:33:26 CET 2000 - adrian@suse.de + +- added fix for uic and qiconview + +------------------------------------------------------------------- +Wed Nov 29 11:33:51 CET 2000 - adrian@suse.de + +- fixed build on ppc + +------------------------------------------------------------------- +Tue Nov 21 09:31:40 CET 2000 - ro@suse.de + +- spec fix + +------------------------------------------------------------------- +Fri Nov 17 14:57:54 CET 2000 - ro@suse.de + +- fixed neededforbuild: += libmng-devel + +------------------------------------------------------------------- +Mon Nov 13 21:40:29 CET 2000 - adrian@suse.de + +- new version 2.2.2 + added qpngio fix from waldo + +------------------------------------------------------------------- +Fri Nov 10 00:57:39 CET 2000 - adrian@suse.de + +- fixed static config for <6.4 distris (no libmng) + +------------------------------------------------------------------- +Tue Oct 31 13:45:29 CET 2000 - adrian@suse.de + +- split the qt package in + qt + qt-devel + qt-extensions + qt-man + qt-static + + Added an ugly patch to get an uic with KDE support. The designer + is broken in this package after this patch, so it is not packaged. + The designer can be found in the qt-designer package + +------------------------------------------------------------------- +Tue Oct 17 09:59:23 MEST 2000 - adrian@suse.de + +- switch to -O0 for ppc + +------------------------------------------------------------------- +Sat Oct 14 09:51:19 CEST 2000 - adrian@suse.de + +- drop OpenGL support. Problems with Nvidia's binary only driver + +- added fix from waldo (fixing memory leak in qpngio) + +------------------------------------------------------------------- +Mon Oct 9 16:00:44 CEST 2000 - adrian@suse.de + +- update the tar archiv (which contains a corrected classes.html file) + +------------------------------------------------------------------- +Fri Oct 6 12:46:48 CEST 2000 - adrian@suse.de + +- update to 2.2.1 + added static libs for libqt and libqt-mt + added support for libmng + +------------------------------------------------------------------- +Mon Oct 2 10:56:03 CEST 2000 - adrian@suse.de + +- added missing header files + +------------------------------------------------------------------- +Tue Sep 19 16:03:56 MEST 2000 - adrian@suse.de + +- switch to -O0 for axp + +------------------------------------------------------------------- +Fri Sep 8 17:09:15 CEST 2000 - schwab@suse.de + +- Update ia64 configuration. + +------------------------------------------------------------------- +Fri Sep 8 15:36:30 CEST 2000 - adrian@suse.de + +- added missing libqt-mt.so + clean up in filelist + changed copyright/license to GPL + +------------------------------------------------------------------- +Thu Sep 7 22:35:05 CEST 2000 - adrian@suse.de + +- update to qt 2.2.0 final + +------------------------------------------------------------------- +Tue Aug 22 19:56:07 CEST 2000 - adrian@suse.de + +- removed uic/moc bindings to libGL and other + +------------------------------------------------------------------- +Fri Aug 18 20:33:25 CEST 2000 - adrian@suse.de + +- update to qt 2.2.0 beta 2 + spec file rewritten + +------------------------------------------------------------------- +Tue Jul 4 15:11:10 CEST 2000 - adrian@suse.de + +- moved links from /usr/lib/qt/lib to /usr/lib/ + +------------------------------------------------------------------- +Thu Jun 22 15:59:04 CEST 2000 - adrian@suse.de + +- add libqt.so.2 links in /usr/lib/qt/lib + +------------------------------------------------------------------- +Fri Jun 16 16:26:31 CEST 2000 - adrian@suse.de + +- moved libqt.so back to qtlib2, after religios war. + +------------------------------------------------------------------- +Fri Jun 16 12:26:33 CEST 2000 - adrian@suse.de + +- enable gif support again + +------------------------------------------------------------------- +Fri Jun 16 09:18:31 CEST 2000 - adrian@suse.de + +- moved static libs to qtdevel2 + +------------------------------------------------------------------- +Tue Jun 6 14:06:10 CEST 2000 - schwab@suse.de + +- Reduce opt level on ia64. + +------------------------------------------------------------------- +Tue Jun 6 01:06:59 CEST 2000 - adrian@suse.de + +- fixed dependencies + +------------------------------------------------------------------- +Tue May 30 23:02:56 CEST 2000 - adrian@suse.de + +- readded mesadev in neededforbuild + +------------------------------------------------------------------- +Tue May 30 15:30:16 CEST 2000 - adrian@suse.de + +- update to 2.1.1 + +------------------------------------------------------------------- +Wed May 24 13:06:43 CEST 2000 - adrian@suse.de + +- added mesadev in neededforbuild + removed gif support (license issue) + +------------------------------------------------------------------- +Tue May 16 21:44:53 CEST 2000 - adrian@suse.de + +- added -fno-exception (smaller binaries) + +------------------------------------------------------------------- +Fri May 12 08:55:01 CEST 2000 - adrian@suse.de + +- fixed link /usr/doc/packages/html + using %{_defaultdocdir} + using %{_mandir} + +------------------------------------------------------------------- +Fri Apr 14 15:14:19 CEST 2000 - adrian@suse.de + +- update to 2.1.0 final + new package for all man pages + +------------------------------------------------------------------- +Thu Apr 6 19:16:55 CEST 2000 - adrian@suse.de + +- update to 2.1.0 beta 4 + +------------------------------------------------------------------- +Thu Mar 30 15:57:33 CEST 2000 - adrian@suse.de + +- update to qtlib 2.1.0 beta 3 + the destination directory is not longer /usr/lib/qt !!! + QTDIR=/usr/lib/qt-2.1.0 + There is also a link /usr/lib/qt2 to /usr/lib/qt-2.1.0 + +------------------------------------------------------------------- +Thu Mar 2 11:17:22 CET 2000 - ro@suse.de + +- removed obsolete part of patch + +------------------------------------------------------------------- +Thu Mar 2 07:27:34 CET 2000 - ro@suse.de + +- configure doesn't know --mandir ... :( + +------------------------------------------------------------------- +Thu Mar 2 01:59:58 CET 2000 - ro@suse.de + +- work-around for prepare-spec buglet + +------------------------------------------------------------------- +Wed Mar 1 00:05:15 CET 2000 - ro@suse.de + +- man to /usr/share using macro + +------------------------------------------------------------------- +Tue Feb 29 15:55:33 CET 2000 - kettner@suse.de + +- Apply patch for qfont_x11.cpp from warwick@warwick-bippy + +------------------------------------------------------------------- +Mon Feb 28 18:26:18 CET 2000 - kettner@suse.de + +- increased font cache from 4MB to 9MB in order to + speed up UNICODE fonts for YaST2 + +------------------------------------------------------------------- +Thu Nov 11 20:00:14 MET 1999 - uli@suse.de + +- removed netscape from neededforbuild + +------------------------------------------------------------------- +Tue Nov 9 11:12:48 MET 1999 - kettner@suse.de + +- Removed mesa from Requires, as it is not required + +------------------------------------------------------------------- +Fri Oct 22 14:42:35 MEST 1999 - kettner@suse.de + + - Patch extensions/imageio/src/Makefile.in in order to get + shared library of libimgio again. Worked in 2.00. + +------------------------------------------------------------------- +Mon Oct 11 21:06:47 MEST 1999 - kettner@suse.de + + - New version 2.0.2 + +------------------------------------------------------------------- +Tue Sep 28 18:09:12 MEST 1999 - uli@suse.de + +- switched from Motif to lesstif + +------------------------------------------------------------------- +Mon Sep 27 16:31:01 CEST 1999 - bs@suse.de + +- fixed requirements for sub packages + +------------------------------------------------------------------- +Fri Sep 17 11:28:09 MEST 1999 - kettner@suse.de + +- Reinserted old # Commandline line. + +------------------------------------------------------------------- +Mon Sep 13 17:23:57 CEST 1999 - bs@suse.de + +- ran old prepare_spec on spec file to switch to new prepare_spec. + +------------------------------------------------------------------- +Wed Jul 14 11:49:22 CEST 1999 - kettner@suse.de + + - New version 2.00 + +------------------------------------------------------------------- +Tue Jul 13 19:31:56 CEST 1999 - kettner@suse.de + + - New version 2.00 + +------------------------------------------------------------------- +Mon Jul 12 19:15:16 CEST 1999 - kettner@suse.de + + - New version 2.00 + diff --git a/opensuse/core/qt3/qt3-extensions.spec b/opensuse/core/qt3/qt3-extensions.spec new file mode 100644 index 000000000..d914a2e06 --- /dev/null +++ b/opensuse/core/qt3/qt3-extensions.spec @@ -0,0 +1,477 @@ +# +# spec file for package qt3-extensions +# +# Copyright (c) 2011 SUSE LINUX Products GmbH, Nuernberg, Germany. +# +# All modifications and additions to the file contributed by third parties +# remain the property of their copyright owners, unless otherwise agreed +# upon. The license for this file, and modifications and additions to the +# file, is the same license as for the pristine package itself (unless the +# license for the pristine package is not an Open Source License, in which +# case the license is the MIT License). An "Open Source License" is a +# license that conforms to the Open Source Definition (Version 1.9) +# published by the Open Source Initiative. + +# Please submit bugfixes or comments via http://bugs.opensuse.org/ +# + +# norootforbuild + + +Name: qt3-extensions +BuildRequires: cups-devel krb5-devel mysql-devel postgresql-devel qt3-devel sqlite2-devel unixODBC-devel update-desktop-files +%if %suse_version > 1020 +BuildRequires: fdupes +%endif +License: GPL, QPL +Version: 3.3.8c +Release: 1 +AutoReqProv: on +Requires: qt3 = %version +Group: Development/Tools/Other +Summary: Qt3 Extensions +# COMMON-BEGIN +# COMMON-BEGIN +%define x11_free -x11-free- +%define rversion 3.3.8b +Source0: qt%{x11_free}%rversion.tar.bz2 +Source1: build_script.sh +Source2: qtconfig3.desktop +Source3: qtrc +Source4: assistant3.png +Source6: assistant3.desktop +Source7: designer.desktop +Source8: designer.png +Source9: linguist.desktop +Source5: linguist.png +Source10: qt3.sh +Source11: qt3.csh +# Translations did not change at 3.3.8c +Source12: qt3-3.3.8b-translations.tar.bz2 +Source100: qtkdeintegration_x11.cpp +Source101: qtkdeintegration_x11_p.h +Source102: baselibs.conf +Source200: attributes +Source201: update_spec.pl +Patch1: aliasing.diff +Patch2: head.diff +Patch4: qt3-never-strip.diff +Patch5: external-libs.diff +Patch6: 0001-dnd_optimization.patch +Patch7: 0002-dnd_active_window_fix.patch +Patch8: 0007-qpixmap_constants.patch +Patch11: 0038-dragobject-dont-prefer-unknown.patch +Patch12: qtrc-path.diff +Patch14: lib64-plugin-support.diff +Patch15: pluginmanager-fix.diff +Patch18: no-rpath.dif +Patch19: shut-up.diff +Patch20: rubberband.diff +Patch21: fix-GL-loading.diff +Patch23: fix-accessible.diff +# From http://www.freedesktop.org/wiki/Software_2fImmoduleQtDownload +# Current version from http://freedesktop.org/~daisuke/qt-x11-immodule-unified-qt3.3.5-20060318.diff.bz2 +Patch25: qt-x11-immodule-unified-qt3.3.8-20060318.diff +Patch28: fix-key-release-event-with-imm.diff +Patch29: 0047-fix-kmenu-width.diff +Patch31: limit-image-size.diff +Patch34: 0005-qpixmap_mitshm.patch +Patch35: qt-transparency.patch +Patch37: 0055-qtextedit_zoom.patch +Patch38: 0048-qclipboard_hack_80072.patch +Patch39: fix-qtranslator-crash.diff +Patch40: 0059-qpopup_has_mouse.patch +Patch41: 0060-qpopup_ignore_mousepos.patch +Patch42: add_qexport_visibility.patch +Patch43: 0056-khotkeys_input_84434.patch +Source250: enable-designer-plugins.diff +Patch53: fix-xinerama-dialog-placement.diff +Patch54: kmenu-search-fix.diff +Patch55: qt3-fix-cast.diff +Patch100: qt.patch +Patch101: qt3-arm-gcc4.patch +Patch102: xinerama.patch +Patch113: fix-assistant-path.patch +Patch117: qtimer-debug.diff +Patch119: xinerama-qpopupmenu.diff +Patch121: qt3-warnings.diff +Patch123: use-xrandr-1.2.diff +Patch125: qcstring-format-warnings.diff +Patch127: mng-reading-fix.patch +Patch128: 0079-compositing-types.patch +Patch129: 0080-net-wm-sync-request.patch +Patch132: revert-qt-3.3.8-khmer-fix.diff +Patch133: 0085-fix-buildkey.diff +Patch134: fix-xinput-clash.diff +Patch135: parseFontName.diff +Patch136: qt3-no-date.diff +Patch137: popen-leak-fix.diff +Patch138: qt3-libpng14.diff +Patch139: gcc46.diff + +# TQt integration +Patch200: qt-3.3.8c.diff + +BuildRoot: %{_tmppath}/%{name}-%{version}-build + +%description +This package contains extension libraries for Qt 3, such as the +Netscape plug-in modules. + +This package contains extension libraries for Qt 3, such as the +Netscape plug-in modules. + +This package contains extension libraries for Qt 3, such as the +Netscape plug-in modules. + +This package contains extension libraries for Qt 3, such as the +Netscape plug-in modules. + +%define build_sub_dirs src plugins/src tools/designer/uilib/ tools/designer/uic tools/qtconfig tools/assistant/lib tools/assistant tutorial + +%prep +%setup -q -n qt%{x11_free}%rversion +%patch1 +%patch2 +%patch4 +%patch5 +%patch6 +%patch7 +%patch8 +%patch11 +%patch12 +if [ "%_lib" = "lib64" ]; then +%patch14 +fi +%patch15 +%patch18 +%patch19 +%patch20 +%patch23 +%patch25 +%patch28 +%patch29 +%patch31 +%patch34 +%patch35 +%patch37 +%patch38 +%patch39 +%patch40 +%patch41 +%patch42 +%patch43 +%patch100 +%patch102 +%patch53 +%patch54 +%patch55 +%patch101 +%patch113 +%patch117 +%patch119 +%patch121 +%patch123 +ln -sf $PWD/src/inputmethod/qinputcontextfactory.h include/ +ln -sf $PWD/src/inputmethod/qinputcontextplugin.h include/ +ln -sf $PWD/src/kernel/qinputcontext.h include/ +ln -sf $PWD/src/kernel/qinputcontextinterface_p.h include/private/ +ln -sf $PWD/src/kernel/qximinputcontext_p.h include/private/ +if [ %_lib = "lib" ]; then +sed 's,/lib64/,/lib/,' %PATCH21 | patch -p0 +else +%patch21 +fi +%patch125 +%patch127 +%patch128 +%patch129 +%patch132 +%patch133 +%patch134 +%patch135 +%patch136 +%patch137 +%if %suse_version > 1120 +%patch138 -p1 +%endif +%patch139 +%patch200 +# copy qt kde integration files +cp %SOURCE100 %SOURCE101 src/kernel/ +cp %SOURCE101 include/private/ +cd translations +tar xvjf %SOURCE12 +cd .. +# COMMON-END +# COMMON-END + +%description +This package contains extension libraries for Qt 3, such as the +Netscape plug-in modules. + +This package contains extension libraries for Qt 3, such as the +Netscape plug-in modules. + +This package contains extension libraries for Qt 3, such as the +Netscape plug-in modules. + +This package contains extension libraries for Qt 3, such as the +Netscape plug-in modules. + +%package -n qt3-devel-examples +Summary: Programming Examples for Qt 3 +AutoReqProv: on +Group: Development/Sources +Provides: qt3-examples +Obsoletes: qt3-examples + +%description -n qt3-devel-examples +This package contains small executables with code to demonstrate Qt +programming. + +Have a look in /usr/share/doc/packages/qt3/examples/. + +%package -n qt3-mysql +Summary: MySQL Plug-In for Qt +Provides: qt3_database_plugin +Group: Productivity/Databases/Clients + +%description -n qt3-mysql +Plug-in for using the MySQL database with the generic Qt database +interface. + +%package -n qt3-unixODBC +Summary: A UnixODBC Plug-In for Qt +Provides: qt3_database_plugin +Group: Productivity/Databases/Clients + +%description -n qt3-unixODBC +A plug-in for using UnixODBC supported databases with the generic Qt +database interface. + +%package -n qt3-postgresql +Summary: A PostgreSQL Plug-In for Qt +Provides: qt3_database_plugin +Group: Productivity/Databases/Clients + +%description -n qt3-postgresql +A Plug-in for using the PostgreSQL database with the generic Qt +database interface. + +%package -n qt3-sqlite +Summary: SQLite Database Plug-In for Qt +Provides: qt3_database_plugin +Group: Development/Tools/Other + +%description -n qt3-sqlite +The Qt database supports SQLite with this plug-in. (No configured and +running daemon is required.) + +%package -n qt3-devel-tools +Summary: User Interface Builder and other tools (designer, assistant, linguist) +AutoReqProv: on +Requires: qt3-devel = %version +Provides: qt3-designer +Obsoletes: qt3-designer +Group: Development/Tools/GUI Builders + +%description -n qt3-devel-tools +The designer creates .ui files. The uic generates C++ code from these +files. The package also contains the Qt Assistant (Qt documentation +browser) and the Qt Linguist (for translations). + +%package -n qt3-man +Summary: Qt 3 Man Pages +AutoReqProv: on +Requires: qt3-devel = %version +Conflicts: qtman qt-man +Group: Documentation/Man + +%description -n qt3-man +This package contains all the man pages for all the Qt 3 classes. + +%build +export QTDIR=/usr/lib/qt3/ +export WLIB=%_lib +export VERSION=%suse_version +source %{SOURCE1} %{version} +export RPM_OPT_FLAGS="$RPM_OPT_FLAGS -fno-strict-aliasing" +# +# compile threaded version to build all tools. +# the lib itself becomes packaged from qt3.spec +# +call_configure -thread -shared -L$PWD/%_lib $OPTIONS +ln -sf /usr/lib/qt3/%_lib/* lib/ +ln -sf /usr/lib/qt3/bin/* bin/ +cd plugins/src +make %{?jobs:-j%jobs} +make INSTALL_ROOT=$RPM_BUILD_ROOT install +cd - +# +# build examples +# +cd tools/assistant/lib +make %{?jobs:-j%jobs} +cd - +cd examples +make %{?jobs:-j%jobs} +cd - +# +# build extra tools +# +cd tools +make %{?jobs:-j%jobs} +make INSTALL_ROOT=$RPM_BUILD_ROOT install +for i in qvfb qembed qconfig msg2qm mergetr ; do + cd "$i" && make %{?jobs:-j%jobs} && install -m 0755 $i ${RPM_BUILD_ROOT}/usr/lib/qt3/bin/ && cd - +done +cd .. +install -m 0755 bin/findtr bin/qt20fix bin/qtrename140 ${RPM_BUILD_ROOT}/usr/lib/qt3/bin/ +if [ %_lib = lib64 ]; then + for i in $RPM_BUILD_ROOT/usr/lib/qt3/plugins/*/*.so; do + mv "$i" "${i%.so}.lib64.so" + done +fi + +%install +export WLIB=%_lib +export VERSION=%suse_version +source %{SOURCE1} +post_install $RPM_BUILD_ROOT/usr/lib/qt3/ +# +# create default doc dir +# +install -d -m 0755 ${RPM_BUILD_ROOT}/%{_docdir}/qt3/ +# +# create links in ld.so.conf path +# +install -d -m 0755 ${RPM_BUILD_ROOT}/%{_libdir} +#install -d -m 0755 ${RPM_BUILD_ROOT}/usr/bin/ +#ln -sf ../lib/qt3/bin/designer ${RPM_BUILD_ROOT}/usr/bin/designer +#ln -sf ../lib/qt3/bin/linguist ${RPM_BUILD_ROOT}/usr/bin/linguist +%suse_update_desktop_file -i designer Qt Development GUIDesigner +%suse_update_desktop_file -i linguist Qt Development Translation +mkdir -p $RPM_BUILD_ROOT/usr/share/pixmaps +perl -pi -e 's/Icon=designer/Icon=designer3/' ${RPM_BUILD_ROOT}/usr/share/applications/designer.desktop +perl -pi -e 's,Exec=designer,Exec=/usr/lib/qt3/bin/designer,' ${RPM_BUILD_ROOT}/usr/share/applications/designer.desktop +mv ${RPM_BUILD_ROOT}/usr/share/applications/designer.desktop ${RPM_BUILD_ROOT}/usr/share/applications/designer3.desktop +install -m 0644 tools/assistant/images/designer.png $RPM_BUILD_ROOT/usr/share/pixmaps/designer3.png +rm -f ${RPM_BUILD_ROOT}/usr/share/pixmaps/designer.png +perl -pi -e 's,Exec=linguist,Exec=/usr/lib/qt3/bin/linguist,' ${RPM_BUILD_ROOT}/usr/share/applications/linguist.desktop +perl -pi -e 's,Icon=linguist,Icon=linguist3,' ${RPM_BUILD_ROOT}/usr/share/applications/linguist.desktop +mv ${RPM_BUILD_ROOT}/usr/share/pixmaps/linguist.png ${RPM_BUILD_ROOT}/usr/share/pixmaps/linguist3.png + +##### these files are not getting installed by "make install" ... bug ? +# +# +# install manpages +# +rm -rf $RPM_BUILD_ROOT/%{_mandir} +install -d $RPM_BUILD_ROOT/%{_mandir} +cp -a doc/man/* $RPM_BUILD_ROOT/%{_mandir}/ +# +# install examples +# +install -d ${RPM_BUILD_ROOT}/usr/lib/qt3/doc/ +find ./examples/ \ + -name \*.o -o -name .obj -o -name .moc -o -name Makefile \ + | xargs rm -rf +cp -a examples ${RPM_BUILD_ROOT}/usr/lib/qt3/doc/ +ln -sf /usr/lib/qt3/doc/examples ${RPM_BUILD_ROOT}/%{_docdir}/qt3/ +# +# to be sure we do not package files which are packaged in other qt3 packages +# +rpm -ql qt3 qt3-devel qt3-devel-doc \ + | while read i ; do + [ -d "$i" ] || rm -f $RPM_BUILD_ROOT/"$i" +done +# +# we do have them in qt3-devel-doc already +# +rm -f $RPM_BUILD_ROOT/usr/lib/qt3/bin/assistant +rm -f $RPM_BUILD_ROOT/usr/lib/qt3/%_lib/libqassistantclient.* +rm -f $RPM_BUILD_ROOT/usr/lib/qt3/translations/assistant_de.qm + +for l in $RPM_BUILD_ROOT/usr/lib/qt3/%_lib/*.a; do + strip --strip-unneeded $l +done + +%if %suse_version > 1020 +%fdupes -s $RPM_BUILD_ROOT +%endif + +%pre +if test -L usr/lib/qt3; then + rm usr/lib/qt3 +fi + +%clean +rm -rf ${RPM_BUILD_ROOT} + +%post +%run_ldconfig + +%post -n qt3-devel-tools +%run_ldconfig + +%files +%defattr(-,root,root) +/usr/lib/qt3/bin/qembed +/usr/lib/qt3/bin/qvfb + +%files -n qt3-mysql +%defattr(-,root,root) +%dir /usr/lib/qt3/plugins/sqldrivers +/usr/lib/qt3/plugins/sqldrivers/libqsqlmysql*.so + +%files -n qt3-postgresql +%defattr(-,root,root) +%dir /usr/lib/qt3/plugins/sqldrivers +/usr/lib/qt3/plugins/sqldrivers/libqsqlpsql*.so + +%files -n qt3-unixODBC +%defattr(-,root,root) +%dir /usr/lib/qt3/plugins/sqldrivers +/usr/lib/qt3/plugins/sqldrivers/libqsqlodbc*.so + +%files -n qt3-sqlite +%defattr(-,root,root) +%dir /usr/lib/qt3/plugins/sqldrivers +/usr/lib/qt3/plugins/sqldrivers/libqsqlite*.so + +%files -n qt3-devel-tools +%defattr(-,root,root) +#/usr/bin/designer +#/usr/bin/linguist +/usr/lib/qt3/bin/qconfig +/usr/lib/qt3/bin/findtr +/usr/lib/qt3/bin/qt20fix +/usr/lib/qt3/bin/qtrename140 +/usr/lib/qt3/bin/msg2qm +/usr/lib/qt3/bin/mergetr +/usr/lib/qt3/bin/designer +/usr/lib/qt3/bin/linguist +/usr/lib/qt3/bin/qm2ts +/usr/lib/qt3/bin/lrelease +/usr/lib/qt3/bin/lupdate +/usr/lib/qt3/templates +/usr/lib/qt3/plugins/designer +/usr/lib/qt3/phrasebooks +/usr/lib/qt3/%_lib/libdesignercore.* +/usr/lib/qt3/%_lib/libeditor.* +/usr/share/applications/* +/usr/share/pixmaps/designer3.png +/usr/share/pixmaps/linguist3.png + +%files -n qt3-devel-examples +%defattr(-,root,root) +%dir /usr/lib/qt3/doc +/%{_docdir}/qt3/examples +/usr/lib/qt3/doc/examples + +%files -n qt3-man +%defattr(-,root,root) +%{_mandir}/man*/* + +%changelog diff --git a/opensuse/core/qt3/qt3-extensions.spec.in b/opensuse/core/qt3/qt3-extensions.spec.in new file mode 100644 index 000000000..e1014767a --- /dev/null +++ b/opensuse/core/qt3/qt3-extensions.spec.in @@ -0,0 +1,358 @@ +# +# spec file for package qt3-extensions (Version 3.3.8b) +# +# Copyright (c) 2005 SUSE LINUX Products GmbH, Nuernberg, Germany. +# This file and all modifications and additions to the pristine +# package are under the same license as the package itself. +# +# Please submit bugfixes or comments via http://bugs.opensuse.org +# + +# norootforbuild + +Name: qt3-extensions +BuildRequires: cups-devel krb5-devel mysql-devel postgresql-devel qt3-devel sqlite2-devel unixODBC-devel update-desktop-files +%if %suse_version > 1020 +BuildRequires: fdupes +%endif +License: GPL, QPL +Version: 3.3.8c +Release: 1 +Autoreqprov: on +Requires: qt3 = %version +Group: Development/Tools/Other +Summary: Qt3 Extensions +# COMMON-BEGIN +# COMMON-END + +%description +Qt is a program library for developing applications with graphical user +interfaces. It allows you to rapidly develop professional programs. The +Qt library is available not only for Linux but for a great number of +Unices and even for Windows. Thus it is possible to write programs that +may be easily ported to those platforms. + +You need a license for using Qt with a non-GPL application, which can +be acquired from sales@trolltech.com. + +See /usr/share/doc/packages/qt3 for details about the new features of +the current Qt library! + +%package -n qt3-devel-examples +Summary: Programming Examples for Qt 3 +Autoreqprov: on +Group: Development/Sources +Provides: qt3-examples +Obsoletes: qt3-examples + +%description -n qt3-devel-examples +Qt is a program library for developing applications with graphical user +interfaces. It allows you to rapidly develop professional programs. The +Qt library is available not only for Linux but for a great number of +Unices and even for Windows. Thus it is possible to write programs that +may be easily ported to those platforms. + +You need a license for using Qt with a non-GPL application, which can +be acquired from sales@trolltech.com. + +See /usr/share/doc/packages/qt3 for details about the new features of +the current Qt library! + +%package -n qt3-mysql +Summary: MySQL Plug-In for Qt +Provides: qt3_database_plugin +Group: Productivity/Databases/Clients + +%description -n qt3-mysql +Qt is a program library for developing applications with graphical user +interfaces. It allows you to rapidly develop professional programs. The +Qt library is available not only for Linux but for a great number of +Unices and even for Windows. Thus it is possible to write programs that +may be easily ported to those platforms. + +You need a license for using Qt with a non-GPL application, which can +be acquired from sales@trolltech.com. + +See /usr/share/doc/packages/qt3 for details about the new features of +the current Qt library! + +%package -n qt3-unixODBC +Summary: A UnixODBC Plug-In for Qt +Provides: qt3_database_plugin +Group: Productivity/Databases/Clients + +%description -n qt3-unixODBC +Qt is a program library for developing applications with graphical user +interfaces. It allows you to rapidly develop professional programs. The +Qt library is available not only for Linux but for a great number of +Unices and even for Windows. Thus it is possible to write programs that +may be easily ported to those platforms. + +You need a license for using Qt with a non-GPL application, which can +be acquired from sales@trolltech.com. + +See /usr/share/doc/packages/qt3 for details about the new features of +the current Qt library! + +%package -n qt3-postgresql +Summary: A PostgreSQL Plug-In for Qt +Provides: qt3_database_plugin +Group: Productivity/Databases/Clients + +%description -n qt3-postgresql +Qt is a program library for developing applications with graphical user +interfaces. It allows you to rapidly develop professional programs. The +Qt library is available not only for Linux but for a great number of +Unices and even for Windows. Thus it is possible to write programs that +may be easily ported to those platforms. + +You need a license for using Qt with a non-GPL application, which can +be acquired from sales@trolltech.com. + +See /usr/share/doc/packages/qt3 for details about the new features of +the current Qt library! + +%package -n qt3-sqlite +Summary: SQLite Database Plug-In for Qt +Provides: qt3_database_plugin +Group: Development/Tools/Other + +%description -n qt3-sqlite +Qt is a program library for developing applications with graphical user +interfaces. It allows you to rapidly develop professional programs. The +Qt library is available not only for Linux but for a great number of +Unices and even for Windows. Thus it is possible to write programs that +may be easily ported to those platforms. + +You need a license for using Qt with a non-GPL application, which can +be acquired from sales@trolltech.com. + +See /usr/share/doc/packages/qt3 for details about the new features of +the current Qt library! + +%package -n qt3-devel-tools +Summary: User Interface Builder and other tools (designer, assistant, linguist) +Autoreqprov: on +Requires: qt3-devel = %version +Provides: qt3-designer +Obsoletes: qt3-designer +Group: Development/Tools/GUI Builders + +%description -n qt3-devel-tools +Qt is a program library for developing applications with graphical user +interfaces. It allows you to rapidly develop professional programs. The +Qt library is available not only for Linux but for a great number of +Unices and even for Windows. Thus it is possible to write programs that +may be easily ported to those platforms. + +You need a license for using Qt with a non-GPL application, which can +be acquired from sales@trolltech.com. + +See /usr/share/doc/packages/qt3 for details about the new features of +the current Qt library! + +%package -n qt3-man +Summary: Qt 3 Man Pages +Autoreqprov: on +Requires: qt3-devel = %version +Conflicts: qtman qt-man +Group: Documentation/Man + +%description -n qt3-man +Qt is a program library for developing applications with graphical user +interfaces. It allows you to rapidly develop professional programs. The +Qt library is available not only for Linux but for a great number of +Unices and even for Windows. Thus it is possible to write programs that +may be easily ported to those platforms. + +You need a license for using Qt with a non-GPL application, which can +be acquired from sales@trolltech.com. + +See /usr/share/doc/packages/qt3 for details about the new features of +the current Qt library! + +%build +export QTDIR=/usr/lib/qt3/ +export WLIB=%_lib +export VERSION=%suse_version +source %{SOURCE1} %{version} +export RPM_OPT_FLAGS="$RPM_OPT_FLAGS -fno-strict-aliasing" +# +# compile threaded version to build all tools. +# the lib itself becomes packaged from qt3.spec +# +call_configure -thread -shared -L$PWD/%_lib $OPTIONS +ln -sf /usr/lib/qt3/%_lib/* lib/ +ln -sf /usr/lib/qt3/bin/* bin/ +cd plugins/src +make %{?jobs:-j%jobs} +make INSTALL_ROOT=$RPM_BUILD_ROOT install +cd - +# +# build examples +# +cd tools/assistant/lib +make %{?jobs:-j%jobs} +cd - +cd examples +make %{?jobs:-j%jobs} +cd - +# +# build extra tools +# +cd tools +make %{?jobs:-j%jobs} +make INSTALL_ROOT=$RPM_BUILD_ROOT install +for i in qvfb qembed qconfig msg2qm mergetr ; do + cd "$i" && make %{?jobs:-j%jobs} && install -m 0755 $i ${RPM_BUILD_ROOT}/usr/lib/qt3/bin/ && cd - +done +cd .. +install -m 0755 bin/findtr bin/qt20fix bin/qtrename140 ${RPM_BUILD_ROOT}/usr/lib/qt3/bin/ +if [ %_lib = lib64 ]; then + for i in $RPM_BUILD_ROOT/usr/lib/qt3/plugins/*/*.so; do + mv "$i" "${i%.so}.lib64.so" + done +fi + +%install +export WLIB=%_lib +export VERSION=%suse_version +source %{SOURCE1} +post_install $RPM_BUILD_ROOT/usr/lib/qt3/ +# +# create default doc dir +# +install -d -m 0755 ${RPM_BUILD_ROOT}/%{_docdir}/qt3/ +# +# create links in ld.so.conf path +# +install -d -m 0755 ${RPM_BUILD_ROOT}/%{_libdir} +#install -d -m 0755 ${RPM_BUILD_ROOT}/usr/bin/ +#ln -sf ../lib/qt3/bin/designer ${RPM_BUILD_ROOT}/usr/bin/designer +#ln -sf ../lib/qt3/bin/linguist ${RPM_BUILD_ROOT}/usr/bin/linguist +%suse_update_desktop_file -i designer Qt Development GUIDesigner +%suse_update_desktop_file -i linguist Qt Development Translation +mkdir -p $RPM_BUILD_ROOT/usr/share/pixmaps +perl -pi -e 's/Icon=designer/Icon=designer3/' ${RPM_BUILD_ROOT}/usr/share/applications/designer.desktop +perl -pi -e 's,Exec=designer,Exec=/usr/lib/qt3/bin/designer,' ${RPM_BUILD_ROOT}/usr/share/applications/designer.desktop +mv ${RPM_BUILD_ROOT}/usr/share/applications/designer.desktop ${RPM_BUILD_ROOT}/usr/share/applications/designer3.desktop +install -m 0644 tools/assistant/images/designer.png $RPM_BUILD_ROOT/usr/share/pixmaps/designer3.png +rm -f ${RPM_BUILD_ROOT}/usr/share/pixmaps/designer.png +perl -pi -e 's,Exec=linguist,Exec=/usr/lib/qt3/bin/linguist,' ${RPM_BUILD_ROOT}/usr/share/applications/linguist.desktop +perl -pi -e 's,Icon=linguist,Icon=linguist3,' ${RPM_BUILD_ROOT}/usr/share/applications/linguist.desktop +mv ${RPM_BUILD_ROOT}/usr/share/pixmaps/linguist.png ${RPM_BUILD_ROOT}/usr/share/pixmaps/linguist3.png + +##### these files are not getting installed by "make install" ... bug ? +# +# +# install manpages +# +rm -rf $RPM_BUILD_ROOT/%{_mandir} +install -d $RPM_BUILD_ROOT/%{_mandir} +cp -a doc/man/* $RPM_BUILD_ROOT/%{_mandir}/ +# +# install examples +# +install -d ${RPM_BUILD_ROOT}/usr/lib/qt3/doc/ +find ./examples/ \ + -name \*.o -o -name .obj -o -name .moc -o -name Makefile \ + | xargs rm -rf +cp -a examples ${RPM_BUILD_ROOT}/usr/lib/qt3/doc/ +ln -sf /usr/lib/qt3/doc/examples ${RPM_BUILD_ROOT}/%{_docdir}/qt3/ +# +# to be sure we do not package files which are packaged in other qt3 packages +# +rpm -ql qt3 qt3-devel qt3-devel-doc \ + | while read i ; do + [ -d "$i" ] || rm -f $RPM_BUILD_ROOT/"$i" +done +# +# we do have them in qt3-devel-doc already +# +rm -f $RPM_BUILD_ROOT/usr/lib/qt3/bin/assistant +rm -f $RPM_BUILD_ROOT/usr/lib/qt3/%_lib/libqassistantclient.* +rm -f $RPM_BUILD_ROOT/usr/lib/qt3/translations/assistant_de.qm + +for l in $RPM_BUILD_ROOT/usr/lib/qt3/%_lib/*.a; do + strip --strip-unneeded $l +done + +%if %suse_version > 1020 +%fdupes -s $RPM_BUILD_ROOT +%endif + + +%pre +if test -L usr/lib/qt3; then + rm usr/lib/qt3 +fi + +%clean +rm -rf ${RPM_BUILD_ROOT} + +%post +%run_ldconfig + +%post -n qt3-devel-tools +%run_ldconfig + +%files +%defattr(-,root,root) +/usr/lib/qt3/bin/qembed +/usr/lib/qt3/bin/qvfb + +%files -n qt3-mysql +%defattr(-,root,root) +%dir /usr/lib/qt3/plugins/sqldrivers +/usr/lib/qt3/plugins/sqldrivers/libqsqlmysql*.so + +%files -n qt3-postgresql +%defattr(-,root,root) +%dir /usr/lib/qt3/plugins/sqldrivers +/usr/lib/qt3/plugins/sqldrivers/libqsqlpsql*.so + +%files -n qt3-unixODBC +%defattr(-,root,root) +%dir /usr/lib/qt3/plugins/sqldrivers +/usr/lib/qt3/plugins/sqldrivers/libqsqlodbc*.so + +%files -n qt3-sqlite +%defattr(-,root,root) +%dir /usr/lib/qt3/plugins/sqldrivers +/usr/lib/qt3/plugins/sqldrivers/libqsqlite*.so + +%files -n qt3-devel-tools +%defattr(-,root,root) +#/usr/bin/designer +#/usr/bin/linguist +/usr/lib/qt3/bin/qconfig +/usr/lib/qt3/bin/findtr +/usr/lib/qt3/bin/qt20fix +/usr/lib/qt3/bin/qtrename140 +/usr/lib/qt3/bin/msg2qm +/usr/lib/qt3/bin/mergetr +/usr/lib/qt3/bin/designer +/usr/lib/qt3/bin/linguist +/usr/lib/qt3/bin/qm2ts +/usr/lib/qt3/bin/lrelease +/usr/lib/qt3/bin/lupdate +/usr/lib/qt3/templates +/usr/lib/qt3/plugins/designer +/usr/lib/qt3/phrasebooks +/usr/lib/qt3/%_lib/libdesignercore.* +/usr/lib/qt3/%_lib/libeditor.* +/usr/share/applications/* +/usr/share/pixmaps/designer3.png +/usr/share/pixmaps/linguist3.png + +%files -n qt3-devel-examples +%defattr(-,root,root) +%dir /usr/lib/qt3/doc +/%{_docdir}/qt3/examples +/usr/lib/qt3/doc/examples + +%files -n qt3-man +%defattr(-,root,root) +%{_mandir}/man*/* + +%changelog -n qt3-extensions diff --git a/opensuse/core/qt3/qt3-fix-cast.diff b/opensuse/core/qt3/qt3-fix-cast.diff new file mode 100644 index 000000000..5ad34108b --- /dev/null +++ b/opensuse/core/qt3/qt3-fix-cast.diff @@ -0,0 +1,13 @@ +Index: tools/qvfb/qvfbview.cpp +================================================================================ +--- tools/qvfb/qvfbview.cpp ++++ tools/qvfb/qvfbview.cpp +@@ -115,7 +115,7 @@ + data = (unsigned char *)shmat( shmId, 0, 0 ); + } + +- if ( (int)data == -1 ) ++ if ( (long)data == -1 ) + qFatal( "Cannot attach to shared memory" ); + + hdr = (QVFbHeader *)data; diff --git a/opensuse/core/qt3/qt3-libpng14.diff b/opensuse/core/qt3/qt3-libpng14.diff new file mode 100644 index 000000000..8df6929fa --- /dev/null +++ b/opensuse/core/qt3/qt3-libpng14.diff @@ -0,0 +1,22 @@ +Index: qt-x11-free-3.3.8b/src/kernel/qpngio.cpp +=================================================================== +--- qt-x11-free-3.3.8b.orig/src/kernel/qpngio.cpp ++++ qt-x11-free-3.3.8b/src/kernel/qpngio.cpp +@@ -162,7 +162,7 @@ void setup_qt( QImage& image, png_struct + image.setColor( i, qRgba(c,c,c,0xff) ); + } + if ( png_get_valid(png_ptr, info_ptr, PNG_INFO_tRNS) ) { +- const int g = info_ptr->trans_values.gray; ++ const int g = info_ptr->trans_color.gray; + if (g < ncols) { + image.setAlphaBuffer(TRUE); + image.setColor(g, image.color(g) & RGB_MASK); +@@ -190,7 +190,7 @@ void setup_qt( QImage& image, png_struct + info_ptr->palette[i].red, + info_ptr->palette[i].green, + info_ptr->palette[i].blue, +- info_ptr->trans[i] ++ info_ptr->trans_alpha[i] + ) + ); + i++; diff --git a/opensuse/core/qt3/qt3-never-strip.diff b/opensuse/core/qt3/qt3-never-strip.diff new file mode 100644 index 000000000..86e09c1ef --- /dev/null +++ b/opensuse/core/qt3/qt3-never-strip.diff @@ -0,0 +1,11 @@ +--- qmake/generators/unix/unixmake.cpp ++++ qmake/generators/unix/unixmake.cpp +@@ -836,7 +836,7 @@ + ret += "\n\t"; + ret += QString(resource ? "-$(INSTALL_DIR)" : "-$(INSTALL_FILE)") + " \"" + + src_targ + "\" \"" + dst_targ + "\""; +- if(!project->isActiveConfig("debug") && !project->isEmpty("QMAKE_STRIP") && ++ if(false && !project->isActiveConfig("debug") && !project->isEmpty("QMAKE_STRIP") && + (project->first("TEMPLATE") != "lib" || !project->isActiveConfig("staticlib"))) { + ret += "\n\t-" + var("QMAKE_STRIP"); + if(project->first("TEMPLATE") == "lib" && !project->isEmpty("QMAKE_STRIPFLAGS_LIB")) diff --git a/opensuse/core/qt3/qt3-no-date.diff b/opensuse/core/qt3/qt3-no-date.diff new file mode 100644 index 000000000..fd505da0e --- /dev/null +++ b/opensuse/core/qt3/qt3-no-date.diff @@ -0,0 +1,65 @@ +--- src/moc/moc.y 2008-01-15 20:09:13.000000000 +0100 ++++ src/moc/moc.y 2009-02-07 19:35:47.703930527 +0100 +@@ -2833,7 +2833,7 @@ + { + const char *hdr1 = "/****************************************************************************\n" + "** %s meta object code from reading C++ file '%s'\n**\n"; +- const char *hdr2 = "** Created: %s\n" ++ const char *hdr2 = "** Created:\n" + const char *hdr3 = "** WARNING! All changes made in this file will be lost!\n"; + const char *hdr4 = "*****************************************************************************/\n\n"; + int i; +@@ -2872,7 +2872,7 @@ + if ( i >= 0 ) + fn = &g->fileName[i]; + fprintf( out, hdr1, (const char*)qualifiedClassName(),(const char*)fn); +- fprintf( out, hdr2, (const char*)dstr ); ++ fprintf( out, hdr2 ); + fprintf( out, hdr3 ); + fprintf( out, hdr4 ); + +diff -ru src/moc/moc_yacc.cpp src/moc/moc_yacc.cpp +--- src/moc/moc_yacc.cpp 2008-01-14 13:24:36.000000000 +0100 ++++ src/moc/moc_yacc.cpp 2009-02-07 19:35:30.039680400 +0100 +@@ -2872,7 +2872,7 @@ + { + const char *hdr1 = "/****************************************************************************\n" + "** %s meta object code from reading C++ file '%s'\n**\n"; +- const char *hdr2 = "** Created: %s\n" ++ const char *hdr2 = "** Created: \n" + "** by: The Qt MOC ($Id: qt/moc_yacc.cpp 3.3.8 edited Feb 2 14:59 $)\n**\n"; + const char *hdr3 = "** WARNING! All changes made in this file will be lost!\n"; + const char *hdr4 = "*****************************************************************************/\n\n"; +@@ -2912,7 +2912,7 @@ + if ( i >= 0 ) + fn = &g->fileName[i]; + fprintf( out, hdr1, (const char*)qualifiedClassName(),(const char*)fn); +- fprintf( out, hdr2, (const char*)dstr ); ++ fprintf( out, hdr2 ); + fprintf( out, hdr3 ); + fprintf( out, hdr4 ); + +diff -ru tools/designer/uic/embed.cpp tools/designer/uic/embed.cpp +--- tools/designer/uic/embed.cpp 2008-01-15 20:09:14.000000000 +0100 ++++ tools/designer/uic/embed.cpp 2009-02-07 19:36:25.950931409 +0100 +@@ -137,7 +137,7 @@ + for ( it = images.begin(); it != images.end(); ++it ) + out << "** " << *it << "\n"; + out << "**\n"; +- out << "** Created: " << QDateTime::currentDateTime().toString() << "\n"; ++ out << "** Created:\n"; + out << "**\n"; + out << "** WARNING! All changes made in this file will be lost!\n"; + out << "****************************************************************************/\n"; +diff -ru tools/designer/uic/main.cpp tools/designer/uic/main.cpp +--- tools/designer/uic/main.cpp 2008-01-15 20:09:14.000000000 +0100 ++++ tools/designer/uic/main.cpp 2009-02-07 19:36:36.603680916 +0100 +@@ -320,7 +320,7 @@ + out << "/****************************************************************************" << endl; + out << "** Form "<< (impl? "implementation" : "interface") << " generated from reading ui file '" << fileName << "'" << endl; + out << "**" << endl; +- out << "** Created: " << QDateTime::currentDateTime().toString() << endl; ++ out << "** Created:" << endl; + out << "**" << endl; + out << "** WARNING! All changes made in this file will be lost!" << endl; + out << "****************************************************************************/" << endl << endl; diff --git a/opensuse/core/qt3/qt3-warnings.diff b/opensuse/core/qt3/qt3-warnings.diff new file mode 100644 index 000000000..870017ded --- /dev/null +++ b/opensuse/core/qt3/qt3-warnings.diff @@ -0,0 +1,13 @@ +Index: src/kernel/qimage.h +=================================================================== +--- src/kernel/qimage.h (revision 594273) ++++ src/kernel/qimage.h (working copy) +@@ -55,7 +55,7 @@ public: + QCString lang; + + bool operator< (const QImageTextKeyLang& other) const +- { return key < other.key || key==other.key && lang < other.lang; } ++ { return key < other.key || (key==other.key && lang < other.lang); } + bool operator== (const QImageTextKeyLang& other) const + { return key==other.key && lang==other.lang; } + }; diff --git a/opensuse/core/qt3/qt3.changes b/opensuse/core/qt3/qt3.changes new file mode 100644 index 000000000..db0df1efa --- /dev/null +++ b/opensuse/core/qt3/qt3.changes @@ -0,0 +1,2475 @@ +------------------------------------------------------------------- +Fri Sep 23 10:16:33 UTC 2011 - coolo@suse.com + +- fix qt3-extensions + +------------------------------------------------------------------- +Fri Apr 22 18:31:12 UTC 2011 - anixx@opensuse.org + +- changed compression to .tar.bz2 + +------------------------------------------------------------------- +Thu Apr 21 11:40:38 CEST 2011 - pth@suse.de + +- Don't try to patch in the version twice in qt-3.3.8c.diff. +- Resync those patches that don't apply without offset. +- Mark scriptlets in profile.d as being configuration files. +- Remove the calls to run_ldconfig. + +------------------------------------------------------------------- +Mon Apr 18 18:46:34 UTC 2011 - robxu9@gmail.com + +- a fix to the 3.3.8c patch + +------------------------------------------------------------------- +Thu Mar 31 18:15:29 UTC 2011 - coolo@novell.com + +- another gcc 4.6 fix + +------------------------------------------------------------------- +Mon Jan 31 21:23:51 UTC 2011 - robxu9@gmail.com + +- Update to version 3.3.8c, by the Trinity Project +- pre_checkin.sh was not run as this caused too many unneccesary + changes to occur. +- The translations tarball was left at version 3.3.8b. + +------------------------------------------------------------------- +Sat Nov 20 02:26:08 CET 2010 - dmueller@suse.de + +- fix build against gcc 4.6 + +------------------------------------------------------------------- +Mon Nov 1 10:09:40 UTC 2010 - coolo@novell.com + +- fix libpng dependencies + +------------------------------------------------------------------- +Wed Sep 1 13:22:38 UTC 2010 - pgajdos@novell.com + +- port to libpng14 + +------------------------------------------------------------------- +Wed May 5 19:42:33 UTC 2010 - coolo@novell.com + +- do not patch the symlink + +------------------------------------------------------------------- +Mon Apr 5 21:06:20 CEST 2010 - dmueller@suse.de + +- fix -devel package requires +- simplify requires of sub-specfiles + +------------------------------------------------------------------- +Mon Apr 5 16:00:15 CEST 2010 - dmueller@suse.de + +- build against libpng12 + +------------------------------------------------------------------- +Thu Jan 21 14:24:13 CET 2010 - dmueller@suse.de + +- recommend kdelibs3-default-style (bnc#544581) + +------------------------------------------------------------------- +Fri Dec 18 17:04:51 CET 2009 - jengelh@medozas.de + +- add baselibs.conf as a source +- add baselib definitions for SPARC + +------------------------------------------------------------------- +Fri Nov 13 14:28:47 CET 2009 - dmueller@suse.de + +- fix patches to apply with fuzz=0 + +------------------------------------------------------------------- +Tue Nov 3 19:14:30 UTC 2009 - coolo@novell.com + +- updated patches to apply with fuzz=0 + +------------------------------------------------------------------- +Tue Aug 11 11:24:13 CEST 2009 - dmueller@suse.de + +- fix popen leak (bnc#529615) + +------------------------------------------------------------------- +Mon Feb 9 12:08:04 CET 2009 - coolo@suse.de + +- strip out date from .la files + +------------------------------------------------------------------- +Sat Feb 7 20:43:40 CET 2009 - coolo@suse.de + +- do not put timestamps in generated sources + +------------------------------------------------------------------- +Wed Jan 7 12:34:56 CET 2009 - olh@suse.de + +- obsolete old -XXbit packages (bnc#437293) + +------------------------------------------------------------------- +Tue Nov 11 16:57:56 CET 2008 - ro@suse.de + +- SLE-11 uses PPC64 instead of PPC, adapt baselibs.conf + +------------------------------------------------------------------- +Wed Sep 10 18:50:12 CEST 2008 - dmueller@suse.de + +- remove qt3-static package + +------------------------------------------------------------------- +Mon Jul 21 21:20:47 CEST 2008 - dmueller@suse.de + +- more verbose qtimer debug + +------------------------------------------------------------------- +Sun Jun 22 13:00:45 CEST 2008 - schwab@suse.de + +- Fix invalid array reference in font name parser. + +------------------------------------------------------------------- +Thu Apr 10 12:54:45 CEST 2008 - ro@suse.de + +- added baselibs.conf file to build xxbit packages + for multilib support + +------------------------------------------------------------------- +Mon Mar 10 16:48:36 CET 2008 - dmueller@suse.de + +- fix build with updated x.org + +------------------------------------------------------------------- +Thu Feb 7 17:51:25 CET 2008 - dmueller@suse.de + +- fix memory corruption when removing CRTc's dynamically + +------------------------------------------------------------------- +Sat Jan 19 07:19:25 CET 2008 - stbinner@suse.de + +- This version adds the GNU Public License version 3 as a + possible choice for licenses to the Open Source releases of Qt 3. +- upstreaming of patches and few other minor bugfixes + +------------------------------------------------------------------- +Tue Jan 15 01:42:37 CET 2008 - dmueller@suse.de + +- fix xrandr resize race (#335410) + +------------------------------------------------------------------- +Thu Dec 6 01:32:32 CET 2007 - dmueller@suse.de + +- fix the build key for gcc 4.3 + +------------------------------------------------------------------- +Mon Dec 3 15:12:36 CET 2007 - dmueller@suse.de + +- back out khmer "fix" from 3.3.8, which apparently + made it worse (#345459) + +------------------------------------------------------------------- +Tue Nov 20 20:25:18 CET 2007 - dmueller@suse.de + +- fix build with gcc 4.3 again + +------------------------------------------------------------------- +Mon Oct 1 11:48:51 CEST 2007 - dmueller@suse.de + +- fix build with gcc 4.3 + +------------------------------------------------------------------- +Fri Sep 7 12:32:22 CEST 2007 - dmueller@suse.de + +- fix off-by-one in utf8 decoder (#304249, CVE-2007-4137) +- fix typo in QDate::fromString() + +------------------------------------------------------------------- +Wed Aug 29 17:08:22 CEST 2007 - llunak@suse.cz + +- fix reading MNG files, visible in Kickoff (#278548) +- remove patching of symlinks from the immodule patch +- improve support for compositing (qt-copy patches #0079,#0080) + +------------------------------------------------------------------- +Fri Aug 24 18:39:04 CEST 2007 - dmueller@suse.de + +- fix format string issues (#291754, CVE-2007-3388) +- fix xrandr 1.2 detection + +------------------------------------------------------------------- +Thu Jul 5 17:25:18 CEST 2007 - coolo@suse.de + +- package desktop files and png files + +------------------------------------------------------------------- +Thu Jun 21 12:04:33 CEST 2007 - stbinner@suse.de + +- run fdupes in qt3-extensions.spec + +------------------------------------------------------------------- +Thu May 24 19:15:38 CEST 2007 - dmueller@suse.de + +- redo the last change in the correct spec file + +------------------------------------------------------------------- +Wed May 23 17:08:39 CEST 2007 - dmueller@suse.de + +- qt3-examples -> qt3-devel-examples + +------------------------------------------------------------------- +Thu May 17 06:49:50 CEST 2007 - stbinner@suse.de + +- removed some historic stuff from the spec file + +------------------------------------------------------------------- +Tue May 8 14:32:40 CEST 2007 - dmueller@suse.de + +- trust libxinerama only if it provides more screens + than xrandr crtcs (#264199) + +------------------------------------------------------------------- +Fri May 4 19:06:40 CEST 2007 - dmueller@suse.de + +- fix permissions of qmake specs + +------------------------------------------------------------------- +Wed May 2 11:50:07 CEST 2007 - coolo@suse.de + +- remove Suse-translate from desktop file +- remove obsolete suse version support + +------------------------------------------------------------------- +Mon Apr 30 14:39:40 CEST 2007 - stbinner@suse.de + +- fix build of qt3-devel-doc with desktop-file-validate run + +------------------------------------------------------------------- +Mon Apr 16 16:10:59 CEST 2007 - dmueller@suse.de + +- temporarily disable Xrandr 1.2 support until (#264199) is + resolved +- use -Bsymbolic-functions + +------------------------------------------------------------------- +Sun Apr 1 20:40:04 CEST 2007 - dmueller@suse.de + +- fix utf8 decoder (#259187, CVE-2007-0242) + +------------------------------------------------------------------- +Thu Mar 29 18:02:30 CEST 2007 - dmueller@suse.de + +- Fix XRandr 1.2 support + +------------------------------------------------------------------- +Fri Mar 16 14:52:22 CET 2007 - dmueller@suse.de + +- call XftDefaultSubstitute (#255330) + +------------------------------------------------------------------- +Thu Mar 15 11:07:44 CET 2007 - dmueller@suse.de + +- update font fix patch (#244579) + +------------------------------------------------------------------- +Mon Mar 12 16:09:29 CET 2007 - dmueller@suse.de + +- enable tablet support (#253392) +- add default substitution for font queries (#244579) + +------------------------------------------------------------------- +Tue Mar 6 19:37:48 CET 2007 - dmueller@suse.de + +- fix mysql driver crash on shutdown (#251222) + +------------------------------------------------------------------- +Sun Feb 25 11:52:26 CET 2007 - dmueller@suse.de + +- update to 3.3.8: + * changelog is under /usr/share/doc/packages/qt3/changes-3.3.8 + +------------------------------------------------------------------- +Wed Feb 21 13:00:52 CET 2007 - dmueller@suse.de + +- fix build for 9.3 + +------------------------------------------------------------------- +Wed Feb 7 10:39:13 CET 2007 - dmueller@suse.de + +- also build qt3-static as full-config + +------------------------------------------------------------------- +Mon Feb 5 15:18:34 CET 2007 - stbinner@suse.de + +- fix build of qt3-extensions on 9.3 + +------------------------------------------------------------------- +Fri Feb 2 15:41:36 CET 2007 - stbinner@suse.de + +- fix changelog chronological order + +------------------------------------------------------------------- +Wed Jan 31 21:40:07 CET 2007 - dmueller@suse.de + +- add a sanity check to ensure that we have a full version +- fix compile warnings in headers + +------------------------------------------------------------------- +Tue Jan 9 15:36:14 CET 2007 - dmueller@suse.de + +- drop misfuzzed patch + +------------------------------------------------------------------- +Mon Jan 8 18:35:16 CET 2007 - dmueller@suse.de + +- add patch to fix indic rendering issue + +------------------------------------------------------------------- +Tue Oct 31 13:18:44 CET 2006 - dmueller@suse.de + +- add patch to fix han localisation issue (#216183) +- update qt-debug-timer patch to output more verbose debug +- add patch to fix xinerama issue with popupmenus (#216235) + +------------------------------------------------------------------- +Fri Oct 20 15:54:30 CEST 2006 - dmueller@suse.de + +- update to 3.3.7: + * include CVE-2006-4811 patch + +------------------------------------------------------------------- +Thu Oct 19 15:21:51 CEST 2006 - dmueller@suse.de + +- add patch for integer overflow in QPixmap/QImage + (#212544, CVE-2006-4811) + +------------------------------------------------------------------- +Tue Oct 10 23:31:01 CEST 2006 - dmueller@suse.de + +- add patch for qtimer debugging + +------------------------------------------------------------------- +Wed Oct 4 19:39:56 CEST 2006 - dmueller@suse.de + +- fix headers to compile in -pedantic mode + +------------------------------------------------------------------- +Thu Sep 14 13:27:03 CEST 2006 - dmueller@suse.de + +- don't install static libs as executable + +------------------------------------------------------------------- +Fri Sep 1 16:18:07 CEST 2006 - llunak@suse.cz + +- Add patches with Xinerama improvements. + +------------------------------------------------------------------- +Thu Aug 17 13:42:28 CEST 2006 - stbinner@suse.de + +- fix qt3-devel-tools file conflict with qt-devel-doc + +------------------------------------------------------------------- +Tue Aug 1 14:47:18 CEST 2006 - stbinner@suse.de + +- disable noisy debug message in qt-x11-immodule-unified diff + +------------------------------------------------------------------- +Sun Jul 9 21:39:54 CEST 2006 - stbinner@suse.de + +- fix {designer3,linguist}.desktop starting Qt4 versions (#190135) + +------------------------------------------------------------------- +Tue Jul 04 15:12:18 CEST 2006 - mfabian@suse.de + +- update qt-x11-immodule-unified diff to 20060318 version. + This update already includes the following patches: + + fix-x11-immodule.diff + + disable-inputmethod-for-passords.patch + + qt-x11-immodule-capitalization-fix.diff + + fix-im-crash-on-exit.diff + + fix-immodule-buffer-overflow.diff + + qt-x11-immodule-qtextedit-fix.diff + + qt-x11-immodule-focus-handling.diff + + qt-x11-immodule-fix-inputcontext-crash.diff + which are thus removed. + +------------------------------------------------------------------- +Wed Jun 28 10:07:30 CEST 2006 - dmueller@suse.de + +- fix $QT_SYSTEM_DIR (#188217) + +------------------------------------------------------------------- +Fri Jun 9 15:25:49 CEST 2006 - llunak@suse.de + +- add $QT_SYSTEM_DIR (#183059) + +------------------------------------------------------------------- +Wed May 31 15:51:01 CEST 2006 - adrian@suse.de + +- remove BuildRequires libdrm-devel + +------------------------------------------------------------------- +Wed May 31 13:24:56 CEST 2006 - dmueller@suse.de + +- fix xpm image loading problem +- add performance regression fix +- add asian font loading fix + +------------------------------------------------------------------- +Mon May 29 08:41:44 CEST 2006 - adrian@suse.de + +- revert requires macro, this breaks the build system mapping +- require right packages in -devel for < 10.1 + +------------------------------------------------------------------- +Fri May 26 19:40:44 CEST 2006 - dmueller@suse.de + +- fix build + +------------------------------------------------------------------- +Fri May 26 10:42:43 CEST 2006 - dmueller@suse.de + +- 3.3.6 update + * numerous bugfixes and translations + +------------------------------------------------------------------- +Wed May 10 17:12:34 CEST 2006 - dmueller@suse.de + +- drop substitutions from global rc file (#171513) + +------------------------------------------------------------------- +Fri Apr 14 01:46:36 CEST 2006 - dmueller@suse.de + +- drop linguist3.png/desktop as its unused and install + linguist.desktop instead (fixes build failure). + +------------------------------------------------------------------- +Mon Apr 10 10:40:11 CEST 2006 - dmueller@suse.de + +- strip installed static libraries +- fix file conflict with Qt4 packages + +------------------------------------------------------------------- +Mon Apr 3 16:34:14 CEST 2006 - dmueller@suse.de + +- restore libraryPaths which broke instsys (#162930) + +------------------------------------------------------------------- +Thu Mar 30 12:49:05 CEST 2006 - coolo@suse.de + +- update qtrc to the real values avoiding dark gray platinum even + if not overwritten with desktop settings + +------------------------------------------------------------------- +Tue Mar 21 14:59:49 CET 2006 - dmueller@suse.de + +- update patch for QLabel layout issues to the one from Qt 3.3.7 + +------------------------------------------------------------------- +Fri Mar 17 18:39:04 CET 2006 - dmueller@suse.de + +- add patch for QLabel layout management issues (#153029) + +------------------------------------------------------------------- +Fri Mar 17 12:23:30 CET 2006 - dmueller@suse.de + +- fix crash on painting > 32000 chars at once +- fix error in wrapping japanese text +- fix QFile::flush() not setting error status +- fix window gravity being wrong for RTL + +------------------------------------------------------------------- +Tue Mar 14 00:22:32 CET 2006 - dmueller@suse.de + +- fix filelist + +------------------------------------------------------------------- +Mon Mar 13 17:02:09 CET 2006 - dmueller@suse.de + +- build qt3-devel-doc as noarch package + +------------------------------------------------------------------- +Tue Mar 7 10:49:56 CET 2006 - dmueller@suse.de + +- moving libqassistantclient to -devel (#155519) and assistant + to qt3. +- translation update +- fix assistant invocation to prefer Qt3's assistant over Qt 4.x + +------------------------------------------------------------------- +Wed Feb 22 14:00:00 CET 2006 - dmueller@suse.de + +- fix crash when not able to load imswitch (#117443) + +------------------------------------------------------------------- +Sat Feb 18 01:15:54 CET 2006 - dmueller@suse.de + +- add more immodule fixes +- fix build of qt3-extensions +- remove sections for SL < 9.2 + +------------------------------------------------------------------- +Fri Feb 17 16:47:41 CET 2006 - dmueller@suse.de + +- fix crash on shutdown (#151831) + +------------------------------------------------------------------- +Mon Feb 13 15:52:19 CET 2006 - coolo@suse.de + +- update translations + +------------------------------------------------------------------- +Mon Feb 6 05:22:44 CET 2006 - zsu@suse.de + +- Add patch qt3-khmer-script.patch to fix a rendering issue of Khmer + script (by Jens Herden, #147190). + +------------------------------------------------------------------- +Sat Jan 28 10:48:06 CET 2006 - coolo@suse.de + +- really install the icon + +------------------------------------------------------------------- +Fri Jan 27 20:02:59 CET 2006 - llunak@suse.cz + +- fix rubberband.diff to emit selectionChanged() properly (#132920) + +------------------------------------------------------------------- +Fri Jan 27 12:24:41 CET 2006 - coolo@suse.de + +- avoid file conflict with qt package + +------------------------------------------------------------------- +Fri Jan 27 08:08:10 CET 2006 - coolo@suse.de + +- fix qt3.sh + +------------------------------------------------------------------- +Fri Jan 27 02:21:53 CET 2006 - mls@suse.de + +- converted neededforbuild to BuildRequires + +------------------------------------------------------------------- +Wed Jan 25 18:06:26 CET 2006 - dmueller@suse.de + +- set $QTDIR in /etc/profile.d/qt3.(c)sh + +------------------------------------------------------------------- +Sat Dec 3 14:30:43 CET 2005 - coolo@suse.de + +- build with -Bdirect if available +- updating font patch + +------------------------------------------------------------------- +Fri Dec 2 00:11:21 CET 2005 - dmueller@suse.de + +- build with -fno-strict-aliasing + +------------------------------------------------------------------- +Wed Nov 23 10:18:29 CET 2005 - dmueller@suse.de + +- unify spec files via a common patch/sources section + and adjust spec files accordingly +- add /etc/profile.d hook to put qmake in the path (#134377) +- drop fast-malloc patch for all packages (#134563) + +------------------------------------------------------------------- +Fri Nov 18 15:20:21 CET 2005 - stbinner@suse.de + +- only disable FcFontSort patch for released distributions + +------------------------------------------------------------------- +Fri Nov 18 12:08:43 CET 2005 - stbinner@suse.de + +- disable FcFontSort patch because of immaturity + +------------------------------------------------------------------- +Fri Nov 11 15:48:07 CET 2005 - dmueller@suse.de + +- avoid crashes after QListView::clear() + +------------------------------------------------------------------- +Wed Nov 2 15:52:04 CET 2005 - coolo@suse.de + +- avoid FcFontSort as it's very expensive + +------------------------------------------------------------------- +Thu Oct 27 14:38:16 CEST 2005 - stbinner@suse.de + +- extend fix-key-release-event-with-imm.diff to fix another Immodule + related key release event bug (#130727) + +------------------------------------------------------------------- +Wed Oct 12 19:25:52 CEST 2005 - dmueller@suse.de + +- update -Werror patch to catch one more case + +------------------------------------------------------------------- +Mon Oct 10 16:58:30 CEST 2005 - dmueller@suse.de + +- add patch to fix broken key compression (#121049) + +------------------------------------------------------------------- +Sat Oct 8 00:04:41 CEST 2005 - dmueller@suse.de + +- patch cleanup + +------------------------------------------------------------------- +Wed Oct 5 13:59:53 CEST 2005 - dmueller@suse.de + +- add 0065-fix_werror_with_gcc4.patch (#119209) + +------------------------------------------------------------------- +Wed Sep 28 16:32:43 CEST 2005 - stbinner@suse.de + +- removed historic "Autoreqprov:off" leftover + +------------------------------------------------------------------- +Wed Sep 28 15:27:34 CEST 2005 - stbinner@suse.de + +- add a patch to fix capitalization of Immodule strings + +------------------------------------------------------------------- +Mon Sep 26 10:57:35 CEST 2005 - coolo@suse.de + +- fix build on x86_64 + +------------------------------------------------------------------- +Mon Sep 19 12:40:22 CEST 2005 - mfabian@suse.de + +- Bugzilla #117115: enable input methods in qlineedit widgets + only when "mode == Normal" (i.e. not when "mode == NoEcho" or + "mode == Password"). Using input methods while inputting + passwords is useless and confusing. + +------------------------------------------------------------------- +Fri Sep 16 23:06:14 CEST 2005 - schwab@suse.de + +- Never strip gratuitously. + +------------------------------------------------------------------- +Thu Sep 15 10:57:05 CEST 2005 - stbinner@suse.de + +- update to version 3.3.5 + +------------------------------------------------------------------- +Mon Sep 5 13:04:30 CEST 2005 - coolo@suse.de + +- layout popup menus correctly (#113048) + +------------------------------------------------------------------- +Fri Aug 19 17:04:02 CEST 2005 - llunak@suse.cz + +- Place dialog properly for systray icons on xinerama (#104794). + +------------------------------------------------------------------- +Fri Jul 29 18:24:24 CEST 2005 - dmueller@suse.de + +- add Q_EXPORT visibility support +- Fix gcc 4.0.x compiler detection for qt plugin buildkey + +------------------------------------------------------------------- +Thu Jun 23 14:37:00 CEST 2005 - mrueckert@suse.de + +- Applied patch from Lubos Lunak to fix drag'n'drop when the + visible window is not at the top of the window stack. + +------------------------------------------------------------------- +Fri Jun 10 17:28:47 CEST 2005 - adrian@suse.de + +- Apply workaround from Simon Hausmann to avoid miscompilation with gcc4 + +------------------------------------------------------------------- +Tue Jun 7 16:15:54 CEST 2005 - adrian@suse.de + +- do not trigger -debug configure flag on -g, but use it for beta + distribution + +------------------------------------------------------------------- +Tue May 31 10:49:30 CEST 2005 - adrian@suse.de + +- require freeglut-devel instead of XFree86-Mesa-devel + +------------------------------------------------------------------- +Fri Apr 15 19:52:35 CEST 2005 - mfabian@suse.de + +- Bugzilla #74133: check for some more glyphs for Katakana and + Hiragana, especially also check for all the glyphs which are + checked for Han_Japanese. This usually guarantees that the same + font is used for Katakana and Hiragana as for Japanese Kanji, + which is what we want. + +------------------------------------------------------------------- +Fri Apr 8 15:28:36 CEST 2005 - uli@suse.de + +- fixed to build with GCC4 on ARM + +------------------------------------------------------------------- +Mon Apr 4 15:02:41 CEST 2005 - adrian@suse.de + +- apply patches from qt-copy, fixes for mouse handling in popups + +------------------------------------------------------------------- +Thu Mar 24 09:57:01 CET 2005 - adrian@suse.de + +- update font mappings in qtrc for asian languages (#74363) + +------------------------------------------------------------------- +Wed Mar 16 17:54:12 CET 2005 - adrian@suse.de + +- fix possible crash in qtranslator (#71968, by Lubos) + +------------------------------------------------------------------- +Fri Mar 4 15:50:50 CET 2005 - adrian@suse.de + +- fix loading of style plugins for lib/lib64 mixed systesm (by Lubos) + +------------------------------------------------------------------- +Fri Feb 25 13:26:56 CET 2005 - adrian@suse.de + +- fix all Exec= lines for menu entries + +------------------------------------------------------------------- +Fri Feb 11 18:29:14 CET 2005 - adrian@suse.de + +- apply patch for rubberband selections from Andre Moreira Magalhaes + +------------------------------------------------------------------- +Wed Feb 9 17:55:47 CET 2005 - adrian@suse.de + +- add qclipboard hack to avoid freezes from qt-copy again + +------------------------------------------------------------------- +Wed Feb 2 16:35:44 CET 2005 - adrian@suse.de + +- fix plugin loading for the KDE integration + +------------------------------------------------------------------- +Wed Jan 26 17:49:46 CET 2005 - adrian@suse.de + +- update to version 3.3.4 +- reenable limit size patch to keep BC +- remove qclipboard fix, it got merged +- remove bidi fixes, they got merged +- remove gif handler fixes, they got merged +- apply KDE dialog integration code from Lubos +- revert some changes in imm code to solve a problem with missing + key release events + +------------------------------------------------------------------- +Fri Jan 14 14:12:06 CET 2005 - adrian@suse.de + +- update imm patch to version from 20041203 +- disable image size patch for now, it broke printing of large images + +------------------------------------------------------------------- +Wed Jan 5 13:37:00 CET 2005 - adrian@suse.de + +- reenable the SHM patch again +- add qtimm patch to solve an issue with Opera +- remove binary links from /usr/bin/, they do conflict with Qt 4 + +------------------------------------------------------------------- +Mon Nov 22 12:06:33 CET 2004 - ro@suse.de + +- "sed -i" does not work on old distributions + +------------------------------------------------------------------- +Tue Nov 16 11:04:55 CET 2004 - adrian@suse.de + +- package icon files for desktop entries + +------------------------------------------------------------------- +Mon Nov 8 16:07:11 CET 2004 - coolo@suse.de + +- improve Waldo's patch to limit image dimensions + +------------------------------------------------------------------- +Fri Oct 29 23:29:44 CEST 2004 - schwab@suse.de + +- Revert last change to png writing. + +------------------------------------------------------------------- +Tue Oct 26 10:51:34 CEST 2004 - adrian@suse.de + +- fix from Lubos for full screen mode switching on 64bit (#46972) + +------------------------------------------------------------------- +Mon Oct 25 14:26:40 CEST 2004 - schwab@suse.de + +- Extend last change to png writing. + +------------------------------------------------------------------- +Sat Oct 23 23:23:21 CEST 2004 - schwab@suse.de + +- Fix endian bug in png reading. + +------------------------------------------------------------------- +Thu Oct 14 18:09:56 CEST 2004 - adrian@suse.de + +- fix assitant zoom functionality, patch by Waldo (#45688) + +------------------------------------------------------------------- +Mon Oct 11 18:11:32 CEST 2004 - adrian@suse.de + +- fix requires of qt3-devel for new x.org packages + +------------------------------------------------------------------- +Wed Sep 29 10:27:12 CEST 2004 - adrian@suse.de + +- prefer MiscGlyphSymbol fonts with tics over others (#46280) +- enable BiDi support by default + +------------------------------------------------------------------- +Tue Sep 28 11:45:55 CEST 2004 - mfabian@suse.de + +- Bugzilla #46216: make "On The Spot" the default input style + for Qt. + +------------------------------------------------------------------- +Sat Sep 25 13:46:59 CEST 2004 - adrian@suse.de + +- prefer the .lib64.so extension on lib64 systems, but do not + require it anymore + +------------------------------------------------------------------- +Fri Sep 24 22:10:29 CEST 2004 - adrian@suse.de + +- fix load of plugins on lib64 systems. The plugins do need a + .lib64.so extension now + +------------------------------------------------------------------- +Wed Sep 15 17:52:55 CEST 2004 - adrian@suse.de + +- add two more glyphs to simplified chinese detection. (#44059) + +------------------------------------------------------------------- +Tue Sep 14 13:57:01 CEST 2004 - adrian@suse.de + +- handle also hongkong chinese local in a correct way (#44059) +- prefer chinese fonts via optional glyphs, but use also + the free ones, if no commercial font is avaible (#44059) + +------------------------------------------------------------------- +Mon Sep 13 20:14:31 CEST 2004 - adrian@suse.de + +- hopefully solve the chinese font detection problems (#44059) + +------------------------------------------------------------------- +Mon Sep 13 11:17:50 CEST 2004 - adrian@suse.de + +- fix build for old distributions +- prepare qt for konsole transparency mode (via composite extension) + +------------------------------------------------------------------- +Fri Sep 10 17:43:56 CEST 2004 - mfabian@suse.de + +- update to qt-x11-immodule-unified-qt3.3.3-20040910.diff which + merges the previous three patches (With help from Adrian to + make it build). + +------------------------------------------------------------------- +Fri Sep 10 16:34:52 CEST 2004 - mfabian@suse.de + +- add qt-x11-immodule-unified-qt3.3.3-r123-event-inversion-20040909.diff + to fix the endless loop problem when using M17N-t-latin1-post + or M17N-vi-viqr. See also + http://freedesktop.org/pipermail/immodule-qt/2004-September/000447.html + and followups. Patch thanks to Yamaken. + +------------------------------------------------------------------- +Wed Sep 8 10:13:26 CEST 2004 - adrian@suse.de + +- add 3.3.3 regression fixes in pre-3.3.4.diff +- add bidi fixes from qt-copy +- add qpixmap mitshm support from Lubos +- update immodule patch to stable release 20040819 +- adding event inversion fix for immodule from Zhe Su + +------------------------------------------------------------------- +Fri Sep 3 15:06:55 CEST 2004 - adrian@suse.de + +- udpate qt immodule patch to snapshot from 20040814 + +------------------------------------------------------------------- +Thu Aug 26 17:09:14 CEST 2004 - adrian@suse.de + +- disable explicit debug flags again + +------------------------------------------------------------------- +Mon Aug 23 13:23:02 CEST 2004 - adrian@suse.de + +- apply workaround for broken focus handling cause by the xim + patch due to a bug in X for released distributions (by Lubos) + +------------------------------------------------------------------- +Wed Aug 18 12:06:15 CEST 2004 - adrian@suse.de + +- enable full debug compile, if -g is in RPM_OPT_FLAGS + +------------------------------------------------------------------- +Tue Aug 17 14:46:19 CEST 2004 - coolo@suse.de + +- install qt3 after grep + +------------------------------------------------------------------- +Tue Aug 17 07:27:13 CEST 2004 - adrian@suse.de + +- apply patch from Waldo to be able to limit the size of loaded + images. Important for khtml (#43841) +- apply fix to handle the side pixmap of the kmenu correctly (0047) +- apply KToolBarButton fix (0051) + +------------------------------------------------------------------- +Fri Aug 13 06:19:32 CEST 2004 - adrian@suse.de + +- fix gif handling (#43356) + +------------------------------------------------------------------- +Thu Aug 12 08:23:16 CEST 2004 - adrian@suse.de + +- update to version 3.3.3 +- remove obsolete patches + +------------------------------------------------------------------- +Tue Aug 3 16:16:53 CEST 2004 - adrian@suse.de + +- add patch to support scim + +------------------------------------------------------------------- +Wed Jun 9 15:21:27 CEST 2004 - adrian@suse.de + +- update asian font mappings for commercial japanese fonts + (by mfabian) + +------------------------------------------------------------------- +Wed Jun 2 16:17:53 CEST 2004 - adrian@suse.de + +- fix libGL loading in the right way, no .so link is needed anymore + again + +------------------------------------------------------------------- +Wed May 26 16:47:34 CEST 2004 - adrian@suse.de + +- load libGL via .so link again (due to the different possible + setups #41118) +- libXmu gets still loaded via hardcoded path and version + +------------------------------------------------------------------- +Tue Apr 27 15:55:48 CEST 2004 - adrian@suse.de + +- update to version 3.3.2 + * remove obsolete patches +- do apply %patch16 + +------------------------------------------------------------------- +Fri Apr 23 09:26:44 CEST 2004 - adrian@suse.de + +- disable atk support for released distributions + +------------------------------------------------------------------- +Thu Apr 22 11:40:17 CEST 2004 - coolo@suse.de + +- another try to fix wrong font caching also for japanese/chinese + +------------------------------------------------------------------- +Tue Apr 20 11:34:13 CEST 2004 - coolo@suse.de + +- apply fix for wrong font caching (#39175) + +------------------------------------------------------------------- +Fri Apr 16 11:42:30 CEST 2004 - adrian@suse.de + +- apply fix for opentype aliasing issues + +------------------------------------------------------------------- +Tue Apr 13 10:50:22 CEST 2004 - adrian@suse.de + +- fix OpenGL support, if no -devel package is installed (#38857) +- fix xcursor support +- add current snapshot of Qt-ATK bridge patch + (disabled as long USE_QACCESSIBLE enviroment variable isn't set) + +------------------------------------------------------------------- +Sat Apr 3 10:07:55 CEST 2004 - adrian@suse.de + +- apply 0043-fix_expired_cookie_crash.diff from qt-copy(by Dirk) + * qt based applications can crash in ssh sessions with new + openssh (#38185) + +------------------------------------------------------------------- +Wed Mar 31 17:47:33 CEST 2004 - mfabian@suse.de + +- Bugzilla #37720: + add font substitutions for "SUSE*" fonts to default qtrc. + +------------------------------------------------------------------- +Thu Mar 25 10:12:37 CET 2004 - coolo@suse.de + +- fix for richtext tags (in knotes) +- fix for fonts with multiple scripts (#36583) +- fix for custom resolutions + +------------------------------------------------------------------- +Tue Mar 16 16:29:42 CET 2004 - adrian@suse.de + +- fix for command line handling (XIM in QApplication)(#35881) +- fix double packaging of qassistant translations + +------------------------------------------------------------------- +Mon Mar 15 17:55:57 CET 2004 - adrian@suse.de + +- define a default Font again. (Sans Serif with 10points) + (#36014) + +------------------------------------------------------------------- +Wed Mar 10 08:44:03 CET 2004 - adrian@suse.de + +- fix for xcursor cache hangling (by Lubos) +- move assistant to -devel-doc package + +------------------------------------------------------------------- +Thu Mar 4 22:10:52 CET 2004 - adrian@suse.de + +- apply fix for not found monospaced fonts without Euro glyph + (Patch by Lars Knoll) + +------------------------------------------------------------------- +Thu Mar 4 13:53:53 CET 2004 - adrian@suse.de + +- apply different bugfix and speed enhancement patches from qt-copy + as recommended by Lubos + * 0001: DnD optimisation + * 0002: Active Window Fix + * 0007: MITSHM extension support for QPixmap<>Qimage conversation + * 0037: dnd timestamp fix + * 0038: dragobject prefer fix + +------------------------------------------------------------------- +Mon Mar 1 11:39:25 CET 2004 - adrian@suse.de + +- update to final 3.3.1 version +- disable fast-malloc for > 9.0, nptl does work good enough +- add qclipboard-recursion-fix from Lubos +- further 64bit aliasing fixes + +------------------------------------------------------------------- +Mon Feb 16 14:43:49 CET 2004 - adrian@suse.de + +- update to current snapshot (3.3.1-snapshot-20040216) +- build opentype with -fno-strict-aliasing + +------------------------------------------------------------------- +Mon Feb 9 17:02:41 CET 2004 - adrian@suse.de + +- fix non-latin1 QString handling + (patch from Roman Stepanov) + +------------------------------------------------------------------- +Wed Feb 4 20:24:37 CET 2004 - adrian@suse.de + +- update to version 3.3.0 final +- disable 3rdparty source and use system libraries + +------------------------------------------------------------------- +Thu Jan 29 14:05:26 CET 2004 - adrian@suse.de + +- update to snapshot 20040129 +- use original qstring again, kprinter got fixed + +------------------------------------------------------------------- +Sun Jan 25 17:53:03 CET 2004 - adrian@suse.de + +- update to snapshot 20040125 +- revert qstring changes + +------------------------------------------------------------------- +Tue Jan 13 14:52:07 CET 2004 - adrian@suse.de + +- update to snapshot 20040113 + +------------------------------------------------------------------- +Mon Dec 29 11:48:49 CET 2003 - adrian@suse.de + +- update to snapshot from 20031229 to get KDE compiling again +- remove upstream included translation files +- cleanup stuff not anymore needed +- do not build sqlite plugin with (broken) sqlite sources from qt + tar ball anymore + +------------------------------------------------------------------- +Thu Dec 11 13:10:37 CET 2003 - adrian@suse.de + +- update to version 3.3 beta 1 + * solves the remaining issues with dlopen GL + +------------------------------------------------------------------- +Tue Dec 9 17:20:56 CET 2003 - adrian@suse.de + +- add KDE plugin path for qt 3.3 + +------------------------------------------------------------------- +Thu Dec 4 11:25:27 CET 2003 - adrian@suse.de + +- update to snapshot 20031204 +- do not link against GL libs anymore, but still support GL via dlopen + apps and libs beside libbqt* are still linked against GL for now +- build fix for qt3-extensions + +------------------------------------------------------------------- +Tue Dec 2 17:54:34 CET 2003 - adrian@suse.de + +- update to current 3.3 snapshot ( 20031202 - pre beta 1) + * obsoletes several patches + * IPv6 support +- temporary disabled PostgreSQL support +- add SQLite support + +------------------------------------------------------------------- +Fri Nov 21 11:05:33 CET 2003 - adrian@suse.de + +- drop not applyed font_fixes patch and add the old Xft2 fixes + again, to support displays without Render extension. + +------------------------------------------------------------------- +Fri Nov 14 14:30:11 CET 2003 - adrian@suse.de + +- update to version 3.2.3 and usual patch cleanup + +------------------------------------------------------------------- +Thu Oct 23 09:52:28 CEST 2003 - adrian@suse.de + +- build without -mminimal-toc on ppc64 +- apply crash fix from TT for some fonts in XLFD mode + +------------------------------------------------------------------- +Thu Oct 16 16:00:46 CEST 2003 - adrian@suse.de + +- update to version 3.2.2 + * font fixes patch is not applied intentionaly, for testing + plain qt behaviour for now. + +------------------------------------------------------------------- +Thu Oct 2 12:06:08 CEST 2003 - adrian@suse.de + +- require freeglut-devel, instead of mesaglut-devel for > 9.0 + +------------------------------------------------------------------- +Tue Sep 30 09:25:31 CEST 2003 - coolo@suse.de + +- using the right tool to compile translation files + +------------------------------------------------------------------- +Thu Sep 25 13:05:03 CEST 2003 - adrian@suse.de + +- update fontconfig patch again, fixes multiple listing of fonts +- do not complain anymore about not matching plugin + +------------------------------------------------------------------- +Sun Sep 21 15:02:56 CEST 2003 - adrian@suse.de + +- prefer Nimbus fonts, instead of using asian fonts, if possible + (the asian fonts have some broken latin chars) + +------------------------------------------------------------------- +Sun Sep 21 12:35:19 CEST 2003 - adrian@suse.de + +- install html docu to the same place as on 8.2, to solve + update problems (#31507). (install dir and symlink was + swapped for unknown reason) + +------------------------------------------------------------------- +Fri Sep 19 15:48:11 CEST 2003 - adrian@suse.de + +- memory leak fix from Lars in QTextEngine + +------------------------------------------------------------------- +Thu Sep 18 16:35:05 CEST 2003 - adrian@suse.de + +- updated patches from Lars + * fixing Unicode families and foundaries issues + * printing issues +- clean up unused patches + +------------------------------------------------------------------- +Wed Sep 17 18:31:56 CEST 2003 - adrian@suse.de + +- a bit more silence .. QPixmap before QApplication warning is away +- new asian font mappings from mfabian + +------------------------------------------------------------------- +Mon Sep 15 18:02:31 CEST 2003 - adrian@suse.de + +- new font fixes from Lars, the default size problem should be away +- fix build for non-Xft2 distibutions + +------------------------------------------------------------------- +Thu Sep 11 22:18:01 CEST 2003 - adrian@suse.de + +- silence on lib64 systems with 32bit plugins installed (#30559) +- ensure to have a [3.2] section in old qtrc files + +------------------------------------------------------------------- +Mon Sep 8 16:26:49 CEST 2003 - coolo@suse.de + +- apply fix from TT to fix konsole + setRawName + +------------------------------------------------------------------- +Thu Sep 4 12:53:19 CEST 2003 - adrian@suse.de + +- add always lib and lib64 kde plugin path to qtrc + +------------------------------------------------------------------- +Wed Sep 3 16:55:00 CEST 2003 - adrian@suse.de + +- apply fix from TT: "don't generate bogus mouse move events." +- qt3-devel requires XFree86-Mesa-devel + +------------------------------------------------------------------- +Tue Sep 2 17:20:05 CEST 2003 - adrian@suse.de + +- add slovak translation from Stanislav Visnovsky +- add czech translation from Klara Cihlarova + +------------------------------------------------------------------- +Tue Sep 2 16:20:15 CEST 2003 - adrian@suse.de + +- add asian mappings from 8.2 to qtrc again + +------------------------------------------------------------------- +Mon Sep 1 18:13:33 CEST 2003 - meissner@suse.de + +- Don't do readlink checks for set*id programs (will break + in TLS startup sequence of glibc), just fall back to old + malloc. #29530 + +------------------------------------------------------------------- +Mon Sep 1 12:02:00 CEST 2003 - adrian@suse.de + +- apply qlineedit fix from TT + +------------------------------------------------------------------- +Mon Sep 1 11:30:31 CEST 2003 - adrian@suse.de + +- qtconfig menu entry becomes unimportant + +------------------------------------------------------------------- +Sun Aug 31 22:33:44 CEST 2003 - adrian@suse.de + +- generate .la file again + +------------------------------------------------------------------- +Fri Aug 29 15:16:43 CEST 2003 - adrian@suse.de + +- use newer font_fixes patch from Lars +- enforce usage of Xft2 even on non-Xrender displays +- revert qclipboard changes to 3.1.2 code + +------------------------------------------------------------------- +Wed Aug 27 13:38:51 CEST 2003 - adrian@suse.de + +- use official 3.2.1 tar ball instead of 3.2.0+patch + +------------------------------------------------------------------- +Tue Aug 26 08:20:07 CEST 2003 - adrian@suse.de + +- new _big_ fix from Lars for fixing the remaining font issues + +------------------------------------------------------------------- +Sun Aug 24 16:55:24 CEST 2003 - adrian@suse.de + +- apply fix from Lars for the foundary font problem, when + using pixmap fonts via Xft2. This makes the freetype2 + foundary-family patch obsolete from qt view. + +------------------------------------------------------------------- +Sat Aug 23 13:44:22 CEST 2003 - adrian@suse.de + +- apply 3.2.1 patch, until the official tar ball arrives + +------------------------------------------------------------------- +Sat Aug 16 13:58:14 CEST 2003 - adrian@suse.de + +- justify Category of qtconfig + +------------------------------------------------------------------- +Fri Aug 1 18:00:24 CEST 2003 - adrian@suse.de + +- add desktop file for qtconfig + +------------------------------------------------------------------- +Wed Jul 23 16:20:03 CEST 2003 - adrian@suse.de + +- update to version 3.2.0 final + +------------------------------------------------------------------- +Thu Jul 17 12:55:23 CEST 2003 - adrian@suse.de + +- fix .la files after build + +------------------------------------------------------------------- +Tue Jul 15 08:49:39 CEST 2003 - adrian@suse.de + +- update to 3.2.0 beta 2 +- remove obsolete patches + +------------------------------------------------------------------- +Sun Jun 15 12:19:14 CEST 2003 - coolo@suse.de + +- never strip explicitly +- always build with -release to avoid debug output even with -g + +------------------------------------------------------------------- +Thu Jun 12 09:07:58 CEST 2003 - coolo@suse.de + +- move the html docu into docdir and put the link in lib +- package directories +- fix directory permissions + +------------------------------------------------------------------- +Fri May 30 15:04:29 CEST 2003 - adrian@suse.de + +- fix file conflicts + +------------------------------------------------------------------- +Mon May 19 11:28:36 CEST 2003 - adrian@suse.de + +- revert source incompatibility to 3.1.x in qhbox constructor + +------------------------------------------------------------------- +Sun May 18 14:03:31 CEST 2003 - adrian@suse.de + +- update to version 3.2 beta 1 +- big patch clean up +- use largefile support api for > 8.2 + +------------------------------------------------------------------- +Thu Apr 10 17:01:32 CEST 2003 - coolo@suse.de + +- fixing long font names as returned by font-config + +------------------------------------------------------------------- +Wed Mar 26 13:19:48 CET 2003 - adrian@suse.de + +- workaround rpm bug on 7.3-ppc + +------------------------------------------------------------------- +Mon Mar 24 10:04:18 CET 2003 - adrian@suse.de + +- fix build on SuSE < 8.1 + +------------------------------------------------------------------- +Fri Mar 21 14:59:11 CET 2003 - adrian@suse.de + +- update to version 3.1.2 and remove obsolete patches + +------------------------------------------------------------------- +Tue Mar 11 20:33:03 CET 2003 - coolo@suse.de + +- fixing the fix + +------------------------------------------------------------------- +Tue Mar 11 13:35:31 CET 2003 - coolo@suse.de + +- applied patch by TT to fix kmail folder selection + (#24519 - also known as kde bug #48888) + +------------------------------------------------------------------- +Fri Mar 7 21:16:17 CET 2003 - adrian@suse.de + +- do not use XListFonts, if X server supports Xft on >8.1 (Xft2) + +------------------------------------------------------------------- +Fri Feb 28 00:25:14 CET 2003 - adrian@suse.de + +- fast malloc is back + (still 20% with glibc 2.3 without spinlock'ed-malloc) +- extend blacklist +- use fast malloc also on hammer + +------------------------------------------------------------------- +Wed Feb 26 11:43:08 CET 2003 - adrian@suse.de + +- add [3.1] plugin path +- add fix for mouse cursor bug over ssh + +------------------------------------------------------------------- +Mon Feb 24 11:56:07 CET 2003 - adrian@suse.de + +- use correct kde plugin path on lib64 systems + +------------------------------------------------------------------- +Mon Feb 3 11:39:24 CET 2003 - adrian@suse.de + +- fix missing symbols in libqt* + +------------------------------------------------------------------- +Thu Jan 30 16:19:31 CET 2003 - adrian@suse.de + +- fix %pre script + +------------------------------------------------------------------- +Sun Jan 26 14:05:56 CET 2003 - adrian@suse.de + +- prefix=/usr/lib/qt3 + (third party apps installing translations into $QTDIR now) +- modify qdesktopwidget resize patch to be BC with Qt 3.2 +- comment out non-official api extensions +- remove private headers tar ball again + (qsa beta2 contains them) +- fix qtrc enviroment patch +- hardcode qt settings dir to /etc/X11 (no need for $QTDIR/etc/settings anymore) +- enable all designer plugins + +------------------------------------------------------------------- +Thu Jan 23 18:36:05 CET 2003 - adrian@suse.de + +- add xrandr extension from Qt 3.2 +- add resize event to qdesktopwidget (patch from Lubos) +- compile codecs as plugins + +------------------------------------------------------------------- +Tue Jan 21 12:52:33 CET 2003 - adrian@suse.de + +- use fast malloc only on %ix86 + +------------------------------------------------------------------- +Thu Jan 16 15:58:23 CET 2003 - adrian@suse.de + +- include qt default translations + +------------------------------------------------------------------- +Fri Jan 10 15:12:46 CET 2003 - adrian@suse.de + +- hppa is parisc + +------------------------------------------------------------------- +Thu Jan 9 14:44:06 CET 2003 - adrian@suse.de + +- fix some more qmake.conf entries + (esp. pathes to lib64 directories and flags based on $RPM_OPT_FLAGS) + +------------------------------------------------------------------- +Tue Jan 7 16:42:59 CET 2003 - adrian@suse.de + +- use -ffunction-sections on hppa + +------------------------------------------------------------------- +Thu Jan 2 13:07:01 CET 2003 - adrian@suse.de + +- fix build ( patch -p1 -> -p0 ) + +------------------------------------------------------------------- +Fri Dec 27 17:50:17 CET 2002 - adrian@suse.de + +- several small changes/fixes/workarounds to be able to compile qsa + (they will be changed in 3.1.2) + +------------------------------------------------------------------- +Tue Dec 17 12:40:16 CET 2002 - adrian@suse.de + +- update to version 3.1.1 and cleanup patches +- apply Xft speed-up patch from dfaure + +------------------------------------------------------------------- +Wed Dec 4 15:10:17 CET 2002 - adrian@suse.de + +- drop fast-malloc, not needed since glibc 2.3 + +------------------------------------------------------------------- +Thu Nov 28 18:33:28 CET 2002 - adrian@suse.de + +- add qprinter fix from Lars + +------------------------------------------------------------------- +Wed Nov 27 00:44:44 CET 2002 - ro@suse.de + +- added expat to neededforbuild + +------------------------------------------------------------------- +Sat Nov 23 14:12:16 CET 2002 - adrian@suse.de + +- use Xft2 from XFree package now for > SuSE 8.1 + (experimental fontconfig package is dropped) +- build qt3-non-mt with extra spec file now +- fix korean [Font Substitutions] (#19575) +- fix broken qmake debug defaults (#21891) +- fix requires of database plugin packages + +------------------------------------------------------------------- +Fri Nov 15 10:33:53 CET 2002 - adrian@suse.de + +- update to 3.1.0 final version +- apply qwidget/hideChildren patch from Harri +- move libqui into qt3 main package + +------------------------------------------------------------------- +Tue Nov 5 20:00:37 CET 2002 - adrian@suse.de + +- package also missing mkspecs/* + +------------------------------------------------------------------- +Sun Nov 3 12:54:52 CET 2002 - adrian@suse.de + +- update to post 3.1 beta 2 snapshot (rc1 or rc2 ?) +- big rework of spec file, lots of workarounds are not needed anymore :) +- use experimental fontconfig/Xft2 package for > 8.1 +- enable nis & cups support + +------------------------------------------------------------------- +Mon Oct 21 18:25:53 CEST 2002 - adrian@suse.de + +- swab %ifarch <> %if for old broken rpm's + +------------------------------------------------------------------- +Mon Oct 21 13:44:15 CEST 2002 - adrian@suse.de + +- remove rpath again, which came back with 3.0.5 update (#20929) +- disable qDebug lines in chinese patch (#20959) + +------------------------------------------------------------------- +Wed Oct 9 11:47:44 CEST 2002 - adrian@suse.de + +- implement a blacklist of executables which should not use + the fast malloc implementation. (python and perl atm) +- disable fast-malloc for >8.1 +- enable fast-malloc for x86_64 + +------------------------------------------------------------------- +Fri Sep 20 11:24:51 CEST 2002 - adrian@suse.de + +- qclipboard fix from Lubos. Copy from old X applications works again + +------------------------------------------------------------------- +Mon Sep 16 12:07:53 CEST 2002 - adrian@suse.de + +- replace qt3-gb18030.diff patch with the new patch from + James Su for chinese handling (#19399) +- set XIMInputStyle for japanese input (#19387) +- change Requires: from /usr/include/png.h to libpng-devel, since + connectivas apt can not handle this. + +------------------------------------------------------------------- +Fri Aug 30 14:13:34 CEST 2002 - adrian@suse.de + +- remove the dlopen patch again. It is not needed anymore and may + cause crashes in rare cases. + +------------------------------------------------------------------- +Wed Aug 28 15:26:02 CEST 2002 - adrian@suse.de + +- apply fix from Lubos for DND in kcontrol +- apply fix to fix gb18030 encoding (from Turbolinux China) + +------------------------------------------------------------------- +Mon Aug 26 16:25:40 CEST 2002 - adrian@suse.de + +- do not use -plugindir configure option anymore. it caused the + broken plugin support and remov $QTDIR/plugins again from qtrc + qtrc is also a (noreplace) config file again +- s,getenv,__secure_getenv, as suggested by okir in plugin_path.dif + +------------------------------------------------------------------- +Thu Aug 22 18:33:55 CEST 2002 - adrian@suse.de + +- add patch to set the qt settings dir to a non-default dir +- add patches from qt 3.0.6 to fix asian copy&paste problems +- set explicit plugin pathes in qtrc and replace them during update + (this is only a workaround until I know why qt does not use the + compiled path) + +------------------------------------------------------------------- +Thu Aug 22 14:53:57 CEST 2002 - adrian@suse.de + +- remove dangeling symlink in /usr/lib/qt3/mkspecs/linux-g++ +- add plugin path to global qtrc + +------------------------------------------------------------------- +Tue Aug 20 13:24:25 CEST 2002 - adrian@suse.de + +- fix #defines + +------------------------------------------------------------------- +Tue Aug 20 00:24:37 CEST 2002 - adrian@suse.de + +- redo the plugin path patch again, we use now a implicit + subdirectory like "lib64", if needed. +- qtconfig is patched to hide/not write back those entries + +------------------------------------------------------------------- +Fri Aug 16 14:00:33 CEST 2002 - coolo@suse.de + +- fixing the patches + +------------------------------------------------------------------- +Fri Aug 16 13:18:21 CEST 2002 - coolo@suse.de + +- applying the plugin path patches, so they actually do something + on lib64 platforms + +------------------------------------------------------------------- +Fri Aug 9 17:35:58 CEST 2002 - adrian@suse.de + +- fix plugin installation + +------------------------------------------------------------------- +Thu Aug 8 10:00:46 CEST 2002 - adrian@suse.de + +- use %suse_version macro instead of /etc/SuSE-release + +------------------------------------------------------------------- +Fri Aug 2 14:41:33 CEST 2002 - coolo@suse.de + +- shut up if passed -noxim is passed and xim doesn't work + +------------------------------------------------------------------- +Tue Jul 30 14:43:32 CEST 2002 - adrian@suse.de + +- disable pre-3.0.6 patches again, until focus problem is located +- add zlib-devel to Requires for qt3-devel and SuSE 8.1 +- add %run_ldconfig + +------------------------------------------------------------------- +Mon Jul 29 17:31:37 CEST 2002 - adrian@suse.de + +- apply shut-up.dif +- clean up neededforbuild + +------------------------------------------------------------------- +Fri Jul 26 16:33:25 CEST 2002 - adrian@suse.de + +- port Lea's fast malloc implementation to libqt-mt +- designer sig11 fixes are not needed anymore +- use some patches from qt-rsync + +------------------------------------------------------------------- +Fri Jul 19 13:07:05 CEST 2002 - adrian@suse.de + +- fix designer sig11 really +- kick warnings about unsuccesfull locks for non-root users + +------------------------------------------------------------------- +Thu Jul 18 18:00:13 CEST 2002 - adrian@suse.de + +- don't strip when in debug mode +- fix typo in build script + +------------------------------------------------------------------- +Wed Jul 17 09:59:28 CEST 2002 - adrian@suse.de + +- update to 3.0.5 final + * lots of bugfixes, see changes-3.0.5 for details + * new, binary incompatible plugin system +- fix sig11 in designer +- clean spec file, drop all not applied patches + +------------------------------------------------------------------- +Thu Jul 11 10:42:14 CEST 2002 - coolo@suse.de + +- reenable work around for transparenent images while printing + (PR16188) + +------------------------------------------------------------------- +Wed Jul 10 17:51:47 CEST 2002 - adrian@suse.de + +- update to near 3.0.5-final snapshot 3.0.5-snapshot-20020710 + +------------------------------------------------------------------- +Fri Jul 5 14:16:16 CEST 2002 - adrian@suse.de + +- fix -g detection during build + +------------------------------------------------------------------- +Fri Jun 21 00:21:28 CEST 2002 - adrian@suse.de + +- fix use of $RPM_OPT_FLAGS (broken since 3.0.4 update) +- use -mminimal-toc on ppc64 to workaround compiler bug atm +- update to pre-3.0.5 snapshot-20020620 + * use buildkey for plugins instead of our own plugin hack + * lots of fixes (exact description in changes-3.0.5) +- add lib64 to build key, if needed +- remove obsolete patches + +------------------------------------------------------------------- +Thu Jun 6 13:41:19 CEST 2002 - adrian@suse.de + +- rework plugin path patch for distributions > 8.0 + change name of "plugins" directory instead of filenames + * plugins -- lib32 and multithreaded plugins + * plugins-non-mt -- lib32 and without multithread support + * plugins-lib64 -- lib64 and multithreaded plugins + * plugins-lib64-non-mt -- lib64 and without multithread support + +------------------------------------------------------------------- +Thu May 30 20:03:50 CEST 2002 - adrian@suse.de + +- disable style-plugins again (too much qt apps have problems) +- disable Xft/Xrender support also for SuSE 7.3 (XFree 4.1.0) + (no one reads READMES and too many people had crashes) + +------------------------------------------------------------------- +Tue May 28 10:58:01 CEST 2002 - adrian@suse.de + +- fix %files + +------------------------------------------------------------------- +Mon May 27 13:37:15 CEST 2002 - adrian@suse.de + +- move qconfig, qmake to qt3-devel-tools +- build styles as plugin (except our default style: Platinum) + +------------------------------------------------------------------- +Mon May 27 00:10:23 CEST 2002 - ro@suse.de + +- lib64: fix qtmake.conf: QTLIBDIR also has the trailing "64" +- fix build-script for lib64 issues + +------------------------------------------------------------------- +Mon May 20 23:26:35 CEST 2002 - adrian@suse.de + +- fix build (disable odbc during qt3.spec build) + +------------------------------------------------------------------- +Mon May 20 10:13:55 CEST 2002 - adrian@suse.de + +- enable -tablet support if XFree86 provides it +- compile with -debug mode, if -g is set in enviroment +- fix postgres plugin build +- enable unixODBC support for newer distributions +- split sql drivers to extra packages +- fix dlopen call + +------------------------------------------------------------------- +Tue May 14 12:39:51 CEST 2002 - adrian@suse.de + +- fix lib64 patch to find OpenGL libs + +------------------------------------------------------------------- +Thu May 9 21:54:41 CEST 2002 - adrian@suse.de + +- apply fix for NetAccess focus, insertTitle(), QTextEdit and + QToolbar from qt-copy + +------------------------------------------------------------------- +Wed May 8 09:39:48 CEST 2002 - coolo@suse.de + +- fixing patch section (grr) + +------------------------------------------------------------------- +Tue May 7 17:13:41 CEST 2002 - coolo@suse.de + +- adding fix for x86_64 + +------------------------------------------------------------------- +Tue May 7 14:32:39 MEST 2002 - coolo@suse.de + +- update to qt 3.0.4 - remove fixes that do + not apply any longer +- disable asian patches as they do not apply + and I don't want to split them as I have no + idea if the problems they try to fix are still + there + +------------------------------------------------------------------- +Wed Apr 24 16:09:09 CEST 2002 - coolo@suse.de + +- fix lib64 support +- fix asian patch not to use arrays in unused arrays + (triggers compiler problem) + +------------------------------------------------------------------- +Sun Apr 21 12:58:33 CEST 2002 - adrian@suse.de + +- improve image rendering speed (patch by Lubos) + +------------------------------------------------------------------- +Tue Apr 9 16:21:07 CEST 2002 - adrian@suse.de + +- apply patch from Lubos to fix alpha channel in QMovie + +------------------------------------------------------------------- +Fri Apr 5 15:29:03 CEST 2002 - adrian@suse.de + +- fixed print support in qpsprint +- binary compatibility fixes by Lars for gbk encoding + +------------------------------------------------------------------- +Wed Apr 3 21:33:26 CEST 2002 - adrian@suse.de + +- apply fixes/extensions for asian/utf-8-based languages + (assembled by Lars and Brad, thank you, verifed by mfabian) +- 64bit fixes from Andreas Schwab (const char*) null pointer casts + +------------------------------------------------------------------- +Sun Mar 24 13:23:18 CET 2002 - adrian@suse.de + +- apply qtabbar fix. Fixes crashes with kcm modules. + +------------------------------------------------------------------- +Fri Mar 22 10:33:58 CET 2002 - adrian@suse.de + +- apply fix for sig11 in QCommonStyle (made by Waldo/Trolltech) +- apply fix to use libpng instead of libmng to load pngs (by coolo) +- add missing Requires for qt3-devel + +------------------------------------------------------------------- +Wed Mar 20 22:47:59 CET 2002 - adrian@suse.de + +- verify 3.0.3 final version +- add check for null pointer returned by libXft + (fix sig11 when no Xft fonts are configured) +- fix scrollbar behaviour for QT Platinum style + (we are X Windows compatible instead of MS Windows) + +------------------------------------------------------------------- +Tue Mar 19 10:36:42 CET 2002 - adrian@suse.de + +- update to version 3.0.3 + (rc6 tar ball from troll, I have to check after the qt-3.0.3 release, + if this is really qt-3.0.3 final) + +------------------------------------------------------------------- +Tue Mar 12 20:01:34 CET 2002 - adrian@suse.de + +- update to pre 3.0.3 snapshot (3.0.2.20020312) + +------------------------------------------------------------------- +Mon Mar 4 09:44:37 CET 2002 - adrian@suse.de + +- more fixes + * fix auto-resizing with QMovie + * fix to correctly open submenues in right to left layout + * reduce number of mallocs by sharing QColorGroup + * Simplified static cleanup handlers. + * smarter tooltip placement +- require "c++_compiler" for distributions newer than 7.3 only + +------------------------------------------------------------------- +Sun Mar 3 02:31:31 CET 2002 - adrian@suse.de + +- apply some fixes from qt-copy + * 8 bit color depth image format fixes + * spinbox flicker fix + * qrichtext dangeling pointers fix + * qmenubar right to left layout mode cursor navigation fix + * qcombobox avoid emitting highlighted twice on keyPressEvent + +------------------------------------------------------------------- +Mon Feb 25 17:34:15 CET 2002 - adrian@suse.de + +- update to version 3.0.2 +- remove compile fixes +- fix symlink for qtconfig + +------------------------------------------------------------------- +Thu Feb 14 01:05:14 CET 2002 - adrian@suse.de + +- fix Requires for qt3-devel (add g++ compiler) + +------------------------------------------------------------------- +Tue Feb 12 01:01:31 CET 2002 - adrian@suse.de + +- fix build for lib64/s390x + +------------------------------------------------------------------- +Wed Feb 6 21:08:43 CET 2002 - adrian@suse.de + +- add links in /usr/bin for qtconfig + +------------------------------------------------------------------- +Sun Feb 3 14:57:30 CET 2002 - adrian@suse.de + +- fix dumb-packager-bug (s,%fi,%endif,) + +------------------------------------------------------------------- +Sun Feb 3 12:23:35 CET 2002 - adrian@suse.de + +- compile fix for postrgres module +- extend plugin patch to work on s390x and sparc64 to work with + lib64 plugins +- add %{_libdir}/qt3 symlink for s390x and sparc64 + +------------------------------------------------------------------- +Sat Feb 2 13:00:38 CET 2002 - ro@suse.de + +- cleaned changes file + +------------------------------------------------------------------- +Fri Feb 1 15:29:58 CET 2002 - adrian@suse.de + +- update to current qt-copy snapshot (needed for KDE 3.0 beta 2) +- make threaded plugins as usual again +- non-threaded plugins needs now the not compatible -non-mt.so + suffix + +------------------------------------------------------------------- +Fri Feb 1 00:26:05 CET 2002 - ro@suse.de + +- changed neededforbuild to + +------------------------------------------------------------------- +Tue Jan 29 16:29:15 CET 2002 - adrian@suse.de + +- enable AA for SuSE > 7.3 + +------------------------------------------------------------------- +Tue Jan 29 10:58:57 CET 2002 - schwab@suse.de + +- Fix use of varargs on 64 bit platforms. + +------------------------------------------------------------------- +Wed Jan 23 22:56:28 CET 2002 - adrian@suse.de + +- patch plugin loader to load only plugins with -mt.so + extension +- link direct against libpng +- move qt3.conf file to susehelp +- TODO: make plugin loader path depending on %_libdir + +------------------------------------------------------------------- +Tue Jan 22 21:47:19 CET 2002 - adrian@suse.de + +- enable Xrender/Xft again for SuSE 7.3 + (I was misleaded by a broken libXft :/ ) +- using qt plugin mechanism for picture format support +- enable XRender by default, but leave Xft disabled by default + (kcontrol can switch Xft on for KDE applications now) +- add additional include path for postgres 7.2b5 + +------------------------------------------------------------------- +Mon Jan 21 16:58:53 CET 2002 - adrian@suse.de + +- disable Xft for all distributions until 7.3 + (XFree 4.2 is needed) +- sync QClipboard fix from qt-copy + +------------------------------------------------------------------- +Tue Jan 8 16:11:14 CET 2002 - adrian@suse.de + +- fix Requires +- disable rpath + +------------------------------------------------------------------- +Sun Jan 6 00:31:11 CET 2002 - adrian@suse.de + +- split non multithreaded librarys into qt3-non-mt package +- split developer tutorial into qt3-tutorial package +- use common config script to prepare build +- move libs to /usr/lib/qt3/%{_libdir} +- remove .prl files from file list again + +------------------------------------------------------------------- +Thu Jan 3 16:48:59 CET 2002 - adrian@suse.de + +- rename qt3-designer subpackage to qt3-devel-tools +- add default qtrc file + * disable Xft support by default + * use Platinum style + * set qt plugin path +- move qtconfig to qt base package +- apply fixes from qt-copy/KDE-cvs + +------------------------------------------------------------------- +Thu Dec 13 10:42:07 CET 2001 - adrian@suse.de + +- use $RPM_OPT_FLAGS during compile +- add missing .prl files to file list + +------------------------------------------------------------------- +Wed Dec 12 16:39:16 CET 2001 - adrian@suse.de + +- update to version 3.0.1 +- build all extra tools +- fix default mkspec symlink +- include examples to devel-doc package + +------------------------------------------------------------------- +Thu Nov 8 18:39:52 CET 2001 - ro@suse.de + +- use mesa-devel-packages in neededforbuild + +------------------------------------------------------------------- +Tue Oct 16 11:13:50 CEST 2001 - adrian@suse.de + +- fix hardcoded install dir in libqt + (no $QTDIR is needed at runtime anymore) + +------------------------------------------------------------------- +Mon Oct 15 18:16:49 CEST 2001 - adrian@suse.de + +- update to QT 3.0.0 final + (the KDE 3 battle begins :) + +------------------------------------------------------------------- +Fri Oct 5 10:50:24 CEST 2001 - adrian@suse.de + +- add missing header files +- cleanup workarounds in spec file and add some new (but less ;) + +------------------------------------------------------------------- +Mon Oct 1 16:35:56 CEST 2001 - adrian@suse.de + +- update to beta6 + +------------------------------------------------------------------- +Tue Sep 18 08:54:02 CEST 2001 - adrian@suse.de + +- update to beta5 + +------------------------------------------------------------------- +Wed Sep 5 12:17:19 CEST 2001 - adrian@suse.de + +- okay, my last try ... cp -f has different return values on the + distributions :( + +------------------------------------------------------------------- +Tue Sep 4 10:18:20 CEST 2001 - adrian@suse.de + +- disable postgres support for old distributions + (now it also builds with SuSE 6.4) + +------------------------------------------------------------------- +Mon Sep 3 15:42:48 CEST 2001 - adrian@suse.de + +- fix broken links in include path + +------------------------------------------------------------------- +Sun Sep 2 19:47:01 CEST 2001 - adrian@suse.de + +- workaround bugs in Makefile to install all needed files +- remove -j4 behind make + +------------------------------------------------------------------- +Tue Jun 19 15:26:54 CEST 2001 - adrian@suse.de + +- split documentation from qt3-devel to qt3-doc + +------------------------------------------------------------------- +Fri May 25 11:57:34 CEST 2001 - adrian@suse.de + +- first try with QT 3.0.0 beta 1 + ( this package is far away from being perfect ) + +------------------------------------------------------------------- +Sun May 6 10:52:33 CEST 2001 - adrian@suse.de + +- apply XftGlyph fix for qfont_x11.cpp from Keith Packard +- fix build for distributions before 7.1 + +------------------------------------------------------------------- +Fri May 4 11:39:55 CEST 2001 - adrian@suse.de + +- add fix for buffer overflow on qfont_x11 and some minor glitches + in qt-png +- qt-experimental is dropped, since we can enable AA in qt now. + +------------------------------------------------------------------- +Fri Apr 27 15:29:17 CEST 2001 - adrian@suse.de + +- switch BuildIndex for SuSEhelp to false by default + +------------------------------------------------------------------- +Mon Apr 23 22:22:19 CEST 2001 - adrian@suse.de + +- using -DNO_DEBUG +- apply latin9 patch from mls@suse.de + +------------------------------------------------------------------- +Wed Apr 4 22:48:01 CEST 2001 - mfabian@suse.de + +- add /etc/qt.fontguess (config file for Japanese and Korean + fonts) + +------------------------------------------------------------------- +Wed Mar 21 17:43:49 CET 2001 - adrian@suse.de + +- disable AA by default (still to many problems) + +------------------------------------------------------------------- +Sun Mar 18 09:46:50 CET 2001 - adrian@suse.de + +- reenable qt-experimental for SuSE distribution < 7.2 + disable opengl module for these distris in this package + +------------------------------------------------------------------- +Sat Mar 17 14:43:11 CET 2001 - adrian@suse.de + +- update to QT 2.3.0 + this makes qt-experimental obsolete + (maybe still some problems with the nvidia driver, but the nv + should work fine and the users are warned about nvidia since + SuSE 7.1) + +------------------------------------------------------------------- +Sun Mar 11 20:20:41 CET 2001 - mfabian@suse.de + +- fix spec-file to make it build with "rpm -ba" + +------------------------------------------------------------------- +Fri Feb 9 19:55:09 CET 2001 - adrian@suse.de + +- use $RPM_OPT_FLAGS + drop signed char patch + +------------------------------------------------------------------- +Sat Feb 3 14:12:01 CET 2001 - adrian@suse.de + +- update to QT 2.2.4 + qt-static is an own package and no sub packages anymore + fix/patch for qprintdialog is no longer needed + add fix from Andreas Schwab for 64bit platforms + +------------------------------------------------------------------- +Fri Jan 19 11:33:07 CET 2001 - adrian@suse.de + +- swap link and directory of html documentation. This makes + trouble during update from older distributions + +------------------------------------------------------------------- +Sat Jan 13 21:18:58 CET 2001 - adrian@suse.de + +- remove not necessary susehelp/htdig conf file + remove file conflicts between qt-devel and qt-experimental + +------------------------------------------------------------------- +Thu Jan 4 21:37:49 CET 2001 - adrian@suse.de + +- added qt-experimental,qt-japanese,qt-korean to Obsoletes: + +------------------------------------------------------------------- +Wed Jan 3 02:24:50 CET 2001 - adrian@suse.de + +- fix qprintdialog + fix qrichtext (Thanks Stefan) + +------------------------------------------------------------------- +Wed Jan 3 02:24:15 CET 2001 - adrian@suse.de + +- fix qprintdialog + +------------------------------------------------------------------- +Mon Jan 1 17:18:43 CET 2001 - adrian@suse.de + +- spec file fix + +------------------------------------------------------------------- +Sun Dec 31 13:18:17 CET 2000 - adrian@suse.de + +- added small tools to qt-devel (thanks Dirk) + +------------------------------------------------------------------- +Fri Dec 22 20:46:34 CET 2000 - adrian@suse.de + +- remove asian patches from qt-experimental + +------------------------------------------------------------------- +Wed Dec 20 18:51:44 CET 2000 - adrian@suse.de + +- fixe type in package name + +------------------------------------------------------------------- +Wed Dec 20 18:44:44 CET 2000 - adrian@suse.de + +- move docu from qtlib2 to qt + +------------------------------------------------------------------- +Sat Dec 16 17:02:47 CET 2000 - adrian@suse.de + +- initial package. support for font anti aliasing has been added + Also OpenGL module is active + +------------------------------------------------------------------- +Thu Dec 14 11:51:41 CET 2000 - adrian@suse.de + +- update to 2.2.3 and remove all the unneeded fix patches. + added SuSE help conf files to qt-devel + +------------------------------------------------------------------- +Tue Dec 12 15:32:01 CET 2000 - schwab@suse.de + +- Build with -O0 on ia64. + +------------------------------------------------------------------- +Fri Dec 1 00:29:50 CET 2000 - adrian@suse.de + +- added rpath for uic/kdelibs and fixed uic fix .. + to drunk to drink more + +------------------------------------------------------------------- +Thu Nov 30 11:31:36 CET 2000 - adrian@suse.de + +- fixed dif + +------------------------------------------------------------------- +Thu Nov 30 00:33:26 CET 2000 - adrian@suse.de + +- added fix for uic and qiconview + +------------------------------------------------------------------- +Wed Nov 29 11:33:51 CET 2000 - adrian@suse.de + +- fixed build on ppc + +------------------------------------------------------------------- +Tue Nov 21 09:31:40 CET 2000 - ro@suse.de + +- spec fix + +------------------------------------------------------------------- +Fri Nov 17 14:57:54 CET 2000 - ro@suse.de + +- fixed neededforbuild: += libmng-devel + +------------------------------------------------------------------- +Mon Nov 13 21:40:29 CET 2000 - adrian@suse.de + +- new version 2.2.2 + added qpngio fix from waldo + +------------------------------------------------------------------- +Fri Nov 10 00:57:39 CET 2000 - adrian@suse.de + +- fixed static config for <6.4 distris (no libmng) + +------------------------------------------------------------------- +Tue Oct 31 13:45:29 CET 2000 - adrian@suse.de + +- split the qt package in + qt + qt-devel + qt-extensions + qt-man + qt-static + + Added an ugly patch to get an uic with KDE support. The designer + is broken in this package after this patch, so it is not packaged. + The designer can be found in the qt-designer package + +------------------------------------------------------------------- +Tue Oct 17 09:59:23 MEST 2000 - adrian@suse.de + +- switch to -O0 for ppc + +------------------------------------------------------------------- +Sat Oct 14 09:51:19 CEST 2000 - adrian@suse.de + +- drop OpenGL support. Problems with Nvidia's binary only driver + +- added fix from waldo (fixing memory leak in qpngio) + +------------------------------------------------------------------- +Mon Oct 9 16:00:44 CEST 2000 - adrian@suse.de + +- update the tar archiv (which contains a corrected classes.html file) + +------------------------------------------------------------------- +Fri Oct 6 12:46:48 CEST 2000 - adrian@suse.de + +- update to 2.2.1 + added static libs for libqt and libqt-mt + added support for libmng + +------------------------------------------------------------------- +Mon Oct 2 10:56:03 CEST 2000 - adrian@suse.de + +- added missing header files + +------------------------------------------------------------------- +Tue Sep 19 16:03:56 MEST 2000 - adrian@suse.de + +- switch to -O0 for axp + +------------------------------------------------------------------- +Fri Sep 8 17:09:15 CEST 2000 - schwab@suse.de + +- Update ia64 configuration. + +------------------------------------------------------------------- +Fri Sep 8 15:36:30 CEST 2000 - adrian@suse.de + +- added missing libqt-mt.so + clean up in filelist + changed copyright/license to GPL + +------------------------------------------------------------------- +Thu Sep 7 22:35:05 CEST 2000 - adrian@suse.de + +- update to qt 2.2.0 final + +------------------------------------------------------------------- +Tue Aug 22 19:56:07 CEST 2000 - adrian@suse.de + +- removed uic/moc bindings to libGL and other + +------------------------------------------------------------------- +Fri Aug 18 20:33:25 CEST 2000 - adrian@suse.de + +- update to qt 2.2.0 beta 2 + spec file rewritten + +------------------------------------------------------------------- +Tue Jul 4 15:11:10 CEST 2000 - adrian@suse.de + +- moved links from /usr/lib/qt/lib to /usr/lib/ + +------------------------------------------------------------------- +Thu Jun 22 15:59:04 CEST 2000 - adrian@suse.de + +- add libqt.so.2 links in /usr/lib/qt/lib + +------------------------------------------------------------------- +Fri Jun 16 16:26:31 CEST 2000 - adrian@suse.de + +- moved libqt.so back to qtlib2, after religios war. + +------------------------------------------------------------------- +Fri Jun 16 12:26:33 CEST 2000 - adrian@suse.de + +- enable gif support again + +------------------------------------------------------------------- +Fri Jun 16 09:18:31 CEST 2000 - adrian@suse.de + +- moved static libs to qtdevel2 + +------------------------------------------------------------------- +Tue Jun 6 14:06:10 CEST 2000 - schwab@suse.de + +- Reduce opt level on ia64. + +------------------------------------------------------------------- +Tue Jun 6 01:06:59 CEST 2000 - adrian@suse.de + +- fixed dependencies + +------------------------------------------------------------------- +Tue May 30 23:02:56 CEST 2000 - adrian@suse.de + +- readded mesadev in neededforbuild + +------------------------------------------------------------------- +Tue May 30 15:30:16 CEST 2000 - adrian@suse.de + +- update to 2.1.1 + +------------------------------------------------------------------- +Wed May 24 13:06:43 CEST 2000 - adrian@suse.de + +- added mesadev in neededforbuild + removed gif support (license issue) + +------------------------------------------------------------------- +Tue May 16 21:44:53 CEST 2000 - adrian@suse.de + +- added -fno-exception (smaller binaries) + +------------------------------------------------------------------- +Fri May 12 08:55:01 CEST 2000 - adrian@suse.de + +- fixed link /usr/doc/packages/html + using %{_defaultdocdir} + using %{_mandir} + +------------------------------------------------------------------- +Fri Apr 14 15:14:19 CEST 2000 - adrian@suse.de + +- update to 2.1.0 final + new package for all man pages + +------------------------------------------------------------------- +Thu Apr 6 19:16:55 CEST 2000 - adrian@suse.de + +- update to 2.1.0 beta 4 + +------------------------------------------------------------------- +Thu Mar 30 15:57:33 CEST 2000 - adrian@suse.de + +- update to qtlib 2.1.0 beta 3 + the destination directory is not longer /usr/lib/qt !!! + QTDIR=/usr/lib/qt-2.1.0 + There is also a link /usr/lib/qt2 to /usr/lib/qt-2.1.0 + +------------------------------------------------------------------- +Thu Mar 2 11:17:22 CET 2000 - ro@suse.de + +- removed obsolete part of patch + +------------------------------------------------------------------- +Thu Mar 2 07:27:34 CET 2000 - ro@suse.de + +- configure doesn't know --mandir ... :( + +------------------------------------------------------------------- +Thu Mar 2 01:59:58 CET 2000 - ro@suse.de + +- work-around for prepare-spec buglet + +------------------------------------------------------------------- +Wed Mar 1 00:05:15 CET 2000 - ro@suse.de + +- man to /usr/share using macro + +------------------------------------------------------------------- +Tue Feb 29 15:55:33 CET 2000 - kettner@suse.de + +- Apply patch for qfont_x11.cpp from warwick@warwick-bippy + +------------------------------------------------------------------- +Mon Feb 28 18:26:18 CET 2000 - kettner@suse.de + +- increased font cache from 4MB to 9MB in order to + speed up UNICODE fonts for YaST2 + +------------------------------------------------------------------- +Thu Nov 11 20:00:14 MET 1999 - uli@suse.de + +- removed netscape from neededforbuild + +------------------------------------------------------------------- +Tue Nov 9 11:12:48 MET 1999 - kettner@suse.de + +- Removed mesa from Requires, as it is not required + +------------------------------------------------------------------- +Fri Oct 22 14:42:35 MEST 1999 - kettner@suse.de + + - Patch extensions/imageio/src/Makefile.in in order to get + shared library of libimgio again. Worked in 2.00. + +------------------------------------------------------------------- +Mon Oct 11 21:06:47 MEST 1999 - kettner@suse.de + + - New version 2.0.2 + +------------------------------------------------------------------- +Tue Sep 28 18:09:12 MEST 1999 - uli@suse.de + +- switched from Motif to lesstif + +------------------------------------------------------------------- +Mon Sep 27 16:31:01 CEST 1999 - bs@suse.de + +- fixed requirements for sub packages + +------------------------------------------------------------------- +Fri Sep 17 11:28:09 MEST 1999 - kettner@suse.de + +- Reinserted old # Commandline line. + +------------------------------------------------------------------- +Mon Sep 13 17:23:57 CEST 1999 - bs@suse.de + +- ran old prepare_spec on spec file to switch to new prepare_spec. + +------------------------------------------------------------------- +Wed Jul 14 11:49:22 CEST 1999 - kettner@suse.de + + - New version 2.00 + +------------------------------------------------------------------- +Tue Jul 13 19:31:56 CEST 1999 - kettner@suse.de + + - New version 2.00 + +------------------------------------------------------------------- +Mon Jul 12 19:15:16 CEST 1999 - kettner@suse.de + + - New version 2.00 + diff --git a/opensuse/core/qt3/qt3.csh b/opensuse/core/qt3/qt3.csh new file mode 100644 index 000000000..e8faf01e9 --- /dev/null +++ b/opensuse/core/qt3/qt3.csh @@ -0,0 +1,2 @@ +set -l path=($path /usr/lib/qt3/bin) +setenv QTDIR /usr/lib/qt3 diff --git a/opensuse/core/qt3/qt3.sh b/opensuse/core/qt3/qt3.sh new file mode 100644 index 000000000..628ee669e --- /dev/null +++ b/opensuse/core/qt3/qt3.sh @@ -0,0 +1,6 @@ +case ":${PATH}:" in + *:/usr/lib/qt3/bin:*) ;; + *) PATH=$PATH:/usr/lib/qt3/bin +esac +QTDIR=/usr/lib/qt3 +export QTDIR diff --git a/opensuse/core/qt3/qt3.spec b/opensuse/core/qt3/qt3.spec new file mode 100644 index 000000000..326d2c03f --- /dev/null +++ b/opensuse/core/qt3/qt3.spec @@ -0,0 +1,415 @@ +# +# spec file for package qt3 +# +# Copyright (c) 2011 SUSE LINUX Products GmbH, Nuernberg, Germany. +# +# All modifications and additions to the file contributed by third parties +# remain the property of their copyright owners, unless otherwise agreed +# upon. The license for this file, and modifications and additions to the +# file, is the same license as for the pristine package itself (unless the +# license for the pristine package is not an Open Source License, in which +# case the license is the MIT License). An "Open Source License" is a +# license that conforms to the Open Source Definition (Version 1.9) +# published by the Open Source Initiative. + +# Please submit bugfixes or comments via http://bugs.opensuse.org/ +# + + + +Name: qt3 +#Remember also to modify Requires in -devel package +BuildRequires: Mesa-devel c++_compiler cups-devel freetype2-devel libjpeg-devel libmng-devel pkgconfig update-desktop-files xorg-x11-devel +Url: http://www.trolltech.com/ +License: GPLv2 ; GPLv3 ; QPL .. +%if %suse_version > 1120 +BuildRequires: libpng14-compat-devel +%else +BuildRequires: libpng-devel +%endif +Group: System/Libraries +# bug437293 +%ifarch ppc64 +Obsoletes: qt3-64bit +%endif +# +Summary: A library for developing applications with graphical user interfaces +Version: 3.3.8c +Release: 110 +Provides: qt_library_%version +Recommends: kdelibs3-default-style +PreReq: /bin/grep +# COMMON-BEGIN +%define x11_free -x11-free- +%define rversion 3.3.8b +Source0: qt%{x11_free}%rversion.tar.bz2 +Source1: build_script.sh +Source2: qtconfig3.desktop +Source3: qtrc +Source4: assistant3.png +Source6: assistant3.desktop +Source7: designer.desktop +Source8: designer.png +Source9: linguist.desktop +Source5: linguist.png +Source10: qt3.sh +Source11: qt3.csh +# Translations did not change at 3.3.8c +Source12: qt3-3.3.8b-translations.tar.bz2 +Source100: qtkdeintegration_x11.cpp +Source101: qtkdeintegration_x11_p.h +Source102: baselibs.conf +Source200: attributes +Source201: update_spec.pl +Patch1: aliasing.diff +Patch2: head.diff +Patch4: qt3-never-strip.diff +Patch5: external-libs.diff +Patch6: 0001-dnd_optimization.patch +Patch7: 0002-dnd_active_window_fix.patch +Patch8: 0007-qpixmap_constants.patch +Patch11: 0038-dragobject-dont-prefer-unknown.patch +Patch12: qtrc-path.diff +Patch14: lib64-plugin-support.diff +Patch15: pluginmanager-fix.diff +Patch18: no-rpath.dif +Patch19: shut-up.diff +Patch20: rubberband.diff +Patch21: fix-GL-loading.diff +Patch23: fix-accessible.diff +# From http://www.freedesktop.org/wiki/Software_2fImmoduleQtDownload +# Current version from http://freedesktop.org/~daisuke/qt-x11-immodule-unified-qt3.3.5-20060318.diff.bz2 +Patch25: qt-x11-immodule-unified-qt3.3.8-20060318.diff +Patch28: fix-key-release-event-with-imm.diff +Patch29: 0047-fix-kmenu-width.diff +Patch31: limit-image-size.diff +Patch34: 0005-qpixmap_mitshm.patch +Patch35: qt-transparency.patch +Patch37: 0055-qtextedit_zoom.patch +Patch38: 0048-qclipboard_hack_80072.patch +Patch39: fix-qtranslator-crash.diff +Patch40: 0059-qpopup_has_mouse.patch +Patch41: 0060-qpopup_ignore_mousepos.patch +Patch42: add_qexport_visibility.patch +Patch43: 0056-khotkeys_input_84434.patch +Source250: enable-designer-plugins.diff +Patch53: fix-xinerama-dialog-placement.diff +Patch54: kmenu-search-fix.diff +Patch55: qt3-fix-cast.diff +Patch100: qt.patch +Patch101: qt3-arm-gcc4.patch +Patch102: xinerama.patch +Patch113: fix-assistant-path.patch +Patch117: qtimer-debug.diff +Patch119: xinerama-qpopupmenu.diff +Patch121: qt3-warnings.diff +Patch123: use-xrandr-1.2.diff +Patch125: qcstring-format-warnings.diff +Patch127: mng-reading-fix.patch +Patch128: 0079-compositing-types.patch +Patch129: 0080-net-wm-sync-request.patch +Patch132: revert-qt-3.3.8-khmer-fix.diff +Patch133: 0085-fix-buildkey.diff +Patch134: fix-xinput-clash.diff +Patch135: parseFontName.diff +Patch136: qt3-no-date.diff +Patch137: popen-leak-fix.diff +Patch138: qt3-libpng14.diff +Patch139: gcc46.diff + +# TQt integration +Patch200: qt-3.3.8c.diff + +BuildRoot: %{_tmppath}/%{name}-%{version}-build + +%description +Qt is a program library for developing applications with graphical user +interfaces. It allows you to rapidly develop professional programs. The +Qt library is available not only for Linux but for a great number of +Unices and even for Windows. Thus it is possible to write programs that +may be easily ported to those platforms. + +You need a license for using Qt with a non-GPL application, which can +be acquired from sales@trolltech.com. + +See /usr/share/doc/packages/qt3 for details about the new features of +the current Qt library! + +%define build_sub_dirs src plugins/src tools/designer/uilib/ tools/designer/uic tools/qtconfig tools/assistant/lib tools/assistant tutorial + +%prep +%setup -q -n qt%{x11_free}%rversion +%patch1 +%patch2 +%patch4 +%patch5 +%patch6 +%patch7 +%patch8 +%patch11 +%patch12 +if [ "%_lib" = "lib64" ]; then +%patch14 +fi +%patch15 +%patch18 +%patch19 +%patch20 +%patch23 +%patch25 +%patch28 +%patch29 +%patch31 +%patch34 +%patch35 +%patch37 +%patch38 +%patch39 +%patch40 +%patch41 +%patch42 +%patch43 +%patch100 +%patch102 +%patch53 +%patch54 +%patch55 +%patch101 +%patch113 +%patch117 +%patch119 +%patch121 +%patch123 +ln -sf $PWD/src/inputmethod/qinputcontextfactory.h include/ +ln -sf $PWD/src/inputmethod/qinputcontextplugin.h include/ +ln -sf $PWD/src/kernel/qinputcontext.h include/ +ln -sf $PWD/src/kernel/qinputcontextinterface_p.h include/private/ +ln -sf $PWD/src/kernel/qximinputcontext_p.h include/private/ +if [ %_lib = "lib" ]; then +sed 's,/lib64/,/lib/,' %PATCH21 | patch -p0 +else +%patch21 +fi +%patch125 +%patch127 +%patch128 +%patch129 +%patch132 +%patch133 +%patch134 +%patch135 +%patch136 +%patch137 +%if %suse_version > 1120 +%patch138 -p1 +%endif +%patch139 +%patch200 +# copy qt kde integration files +cp %SOURCE100 %SOURCE101 src/kernel/ +cp %SOURCE101 include/private/ +cd translations +tar xvjf %SOURCE12 +cd .. +# COMMON-END + +%package devel +License: GPLv2 ; GPLv3 ; QPL .. +Summary: Include Files and Libraries mandatory for Development +Requires: qt3 = %version +Requires: pkgconfig cups-devel freetype2-devel libmng-devel libjpeg-devel c++_compiler xorg-x11-devel +%if %suse_version > 1120 +Recommends: libpng14-compat-devel +Requires: libpng-devel +%else +Requires: libpng-devel +%endif +%if %suse_version > 1000 +Requires: Mesa-devel +%else +Requires: xorg-x11-Mesa xorg-x11-Mesa-devel +%endif +%ifnarch x86_64 s390x sparc64 ppc64 mips64 +Conflicts: devel_libs-32bit +%endif +# bug437293 +%ifarch ppc64 +Obsoletes: qt3-devel-64bit +%endif +# +Group: Development/Libraries/X11 + +%description devel +You need this package if you want to compile programs with Qt 3. It +contains the "Qt Crossplatform Development Kit 2". Under /usr/lib/qt3 +you will find include files. + +You need a license for using Qt with a non-GPL application. A license +can be acquired at sales@trolltech.com. + +%build +export VERSION=%suse_version +source %SOURCE1 %{version} +export WLIB=%_lib +export QTDIR=`pwd` +if [ %_lib == "lib64" ]; then +export RPM_OPT_FLAGS="$RPM_OPT_FLAGS -DUSE_LIB64_PATHES" +fi +export RPM_OPT_FLAGS="$RPM_OPT_FLAGS -fno-strict-aliasing" +# +# call build from build_script.rpmrc for threaded Qt library +# only really needed tools will be builded here, all extra tools will be +# builded in qt3.spec +# +call_configure -v -thread -shared -no-sql-mysql -no-sql-psql -no-sql-odbc -no-sql-sqlite $OPTIONS +for i in %build_sub_dirs ; do + cd $i + make %{?jobs:-j%jobs} + cd - +done + +%install +export VERSION=%suse_version +export WLIB=%_lib +export QTDIR=`pwd` +source %SOURCE1 %{version} +for i in %build_sub_dirs ; do + cd $i + make INSTALL_ROOT=$RPM_BUILD_ROOT install + cd - +done +post_install $RPM_BUILD_ROOT/usr/lib/qt3/ +mkdir -p $RPM_BUILD_ROOT/usr/share/pixmaps/ +sed -i -e 's, on: .*,,' $RPM_BUILD_ROOT/usr/lib/qt3/%_lib/*.la +# +# copy additional files +# +install -m 0755 bin/qmake bin/moc ${RPM_BUILD_ROOT}/usr/lib/qt3/bin/ +install -m 0755 -d ${RPM_BUILD_ROOT}/usr/lib/qt3/translations/ +install -m 0644 translations/*.qm ${RPM_BUILD_ROOT}/usr/lib/qt3/translations/ +if [ %_lib = lib64 ]; then + for i in $RPM_BUILD_ROOT/usr/lib/qt3/plugins/*/*.so; do + mv "$i" "${i%.so}.lib64.so" + done +fi +# +# move pkgconfig files +# +mkdir -p $RPM_BUILD_ROOT/%_libdir/pkgconfig +mv $RPM_BUILD_ROOT/usr/lib/qt3/%_lib/pkgconfig/*.pc \ + $RPM_BUILD_ROOT/%_libdir/pkgconfig +rmdir $RPM_BUILD_ROOT/usr/lib/qt3/%_lib/pkgconfig +# +# move docs in doc dir +# +install -d -m 0755 ${RPM_BUILD_ROOT}/%{_defaultdocdir}/qt3/ +install -d -m 0755 ${RPM_BUILD_ROOT}/usr/lib/qt3/mkspecs/ +install -d -m 0755 ${RPM_BUILD_ROOT}/usr/lib/qt3/mkspecs/ +cp -a mkspecs/* ${RPM_BUILD_ROOT}/usr/lib/qt3/mkspecs/ +if [ %_lib == "lib64" ]; then + ln -sf linux-g++-64 ${RPM_BUILD_ROOT}/usr/lib/qt3/mkspecs/default +else + ln -sf linux-g++ ${RPM_BUILD_ROOT}/usr/lib/qt3/mkspecs/default +fi +find ${RPM_BUILD_ROOT}/usr/lib/qt3/mkspecs -type f -perm /111 -print0 | xargs -0 chmod a-x +# +# create links in ld.so.conf path +# +install -d -m 0755 ${RPM_BUILD_ROOT}/%{_libdir} +ln -sf ../lib/qt3/%{_lib}/libqt-mt.so.3 ${RPM_BUILD_ROOT}/%{_libdir}/libqt-mt.so.3 +ln -sf ../lib/qt3/%{_lib}/libqui.so.1 ${RPM_BUILD_ROOT}/%{_libdir}/libqui.so.1 +[ "lib" != "%{_lib}" ] && \ + ln -sf ../lib/qt3 ${RPM_BUILD_ROOT}/%{_libdir}/qt3 +mkdir -p ${RPM_BUILD_ROOT}/etc/profile.d +install -m 644 %SOURCE10 %SOURCE11 ${RPM_BUILD_ROOT}/etc/profile.d +# +# default qt settings +# +mkdir -p ${RPM_BUILD_ROOT}/etc/X11 +mkdir -p ${RPM_BUILD_ROOT}/usr/lib/qt3/etc/ +ln -sf /etc/X11/ ${RPM_BUILD_ROOT}/usr/lib/qt3/etc/settings +install -m 0644 %SOURCE3 ${RPM_BUILD_ROOT}/etc/X11/qtrc +# +# clean broken links +# +if [ %_lib == "lib64" ]; then + rm ${RPM_BUILD_ROOT}/usr/lib/qt3/mkspecs/linux-g++-64/linux-g++-64 +else + rm ${RPM_BUILD_ROOT}/usr/lib/qt3/mkspecs/linux-g++/linux-g++ +fi +rm -rf ${RPM_BUILD_ROOT}/usr/lib/qt3/doc/html + +%pre +if test -L usr/lib/qt3; then + rm usr/lib/qt3 +fi + +%post +/sbin/ldconfig +if ! grep -q '^\[3.3\]' etc/X11/qtrc ; then +echo "" >> etc/X11/qtrc +echo "[3.3]" >> etc/X11/qtrc +echo "libraryPath=/opt/kde3/lib64/kde3/plugins/:/opt/kde3/lib/kde3/plugins/" >> etc/X11/qtrc +fi + +%postun -p /sbin/ldconfig + +%files +%defattr(-,root,root,755) +# FIXME provide new changelog if kb9vqf will give one +%doc changes-3.3.8b README* LICENSE* MANIFEST FAQ +%dir /usr/lib/qt3/translations +%dir /usr/lib/qt3 +%dir /usr/lib/qt3/bin +%dir /usr/lib/qt3/%{_lib} +%{_libdir}/libqt-mt.so.* +%{_libdir}/libqui.so.* +/usr/lib/qt3/bin/qtconfig +/usr/lib/qt3/%{_lib}/libqt-mt.so.* +/usr/lib/qt3/%{_lib}/libqui.so.* +%dir /usr/lib/qt3/etc +/usr/lib/qt3/etc/settings +/usr/lib/qt3/plugins +/usr/lib/qt3/bin/assistant +%lang(de) /usr/lib/qt3/translations/assistant_de.qm +%lang(ar) /usr/lib/qt3/translations/qt_ar.qm +%lang(ca) /usr/lib/qt3/translations/qt_ca.qm +%lang(cs) /usr/lib/qt3/translations/qt_cs.qm +%lang(de) /usr/lib/qt3/translations/qt_de.qm +%lang(es) /usr/lib/qt3/translations/qt_es.qm +%lang(fr) /usr/lib/qt3/translations/qt_fr.qm +%lang(he) /usr/lib/qt3/translations/qt_he.qm +%lang(ru) /usr/lib/qt3/translations/qt_ru.qm +%lang(sk) /usr/lib/qt3/translations/qt_sk.qm +%lang(it) /usr/lib/qt3/translations/qt_it.qm +%lang(ja) /usr/lib/qt3/translations/qt_ja.qm +%lang(nb) /usr/lib/qt3/translations/qt_nb.qm +%lang(pl) /usr/lib/qt3/translations/qt_pl.qm +%lang(pt) /usr/lib/qt3/translations/qt_pt-br.qm +%lang(pt) /usr/lib/qt3/translations/qt_pt.qm +%lang(zh) /usr/lib/qt3/translations/qt_zh-cn.qm +%lang(zh) /usr/lib/qt3/translations/qt_zh-tw.qm +%config(noreplace) /etc/X11/qtrc +%ifarch s390x sparc64 x86_64 ppc64 mips64 +%dir %{_libdir}/qt3 +%endif + +%files devel +%defattr(-,root,root,755) +# FIXME provide new changelog if kb9vqf will give one +%doc changes-3.3.8b +/usr/lib/qt3/bin/moc +/usr/lib/qt3/bin/qmake +/usr/lib/qt3/bin/uic +/usr/lib/qt3/include +/usr/lib/qt3/%{_lib}/libqt-mt.la +/usr/lib/qt3/%{_lib}/libqt-mt.so +/usr/lib/qt3/%{_lib}/libqt-mt.prl +/usr/lib/qt3/%{_lib}/libqui.so +/usr/lib/qt3/%{_lib}/libqui.prl +/usr/lib/qt3/mkspecs +/%_libdir/pkgconfig/qt-mt.pc +/usr/lib/qt3/%_lib/libqassistantclient.* +%config /etc/profile.d/qt3.* + +%changelog diff --git a/opensuse/core/qt3/qtconfig3.desktop b/opensuse/core/qt3/qtconfig3.desktop new file mode 100644 index 000000000..f7dc027db --- /dev/null +++ b/opensuse/core/qt3/qtconfig3.desktop @@ -0,0 +1,10 @@ +[Desktop Entry] +Categories=Qt;Settings; +Encoding=UTF-8 +Exec=/usr/lib/qt3/bin/qtconfig +Name=Qt Settings +X-KDE-StartupNotify=true +Icon=designer3 +Terminal=false +Type=Application + diff --git a/opensuse/core/qt3/qtimer-debug.diff b/opensuse/core/qt3/qtimer-debug.diff new file mode 100644 index 000000000..5511f2a16 --- /dev/null +++ b/opensuse/core/qt3/qtimer-debug.diff @@ -0,0 +1,48 @@ +--- src/kernel/qeventloop_unix.cpp ++++ src/kernel/qeventloop_unix.cpp +@@ -514,6 +528,17 @@ + return (tm->tv_sec*1000) + (tm->tv_usec/1000); + } + ++static QString fullName(QObject* obj) ++{ ++ QString oname; ++ if (obj && obj->name()) ++ oname = QString(obj->name()) + "(" + QString(obj->className()) + ")"; ++ ++ if (obj && obj->parent()) ++ return fullName(obj->parent()) + "/" + oname; ++ return oname; ++} ++ + int QEventLoop::activateTimers() + { + if ( !timerList || !timerList->count() ) // no timers +@@ -549,9 +574,27 @@ + t->timeout += t->interval; + if ( t->timeout < currentTime ) + t->timeout = currentTime + t->interval; ++ // prefer system clock ticks for low resolution timers ++ // to save cpu power ++ if (t->interval.tv_sec * 1000 + t->interval.tv_usec / 1000 >= 1000) { ++ timeval drift; ++ drift.tv_sec = 0; ++ drift.tv_usec = (t->interval.tv_usec / 8) + (t->interval.tv_sec % 8) * 1000 * 1000 / 8; ++ timeval synced = t->timeout + drift; ++ if (synced.tv_usec < 2 * drift.tv_usec) ++ synced.tv_usec = 0; ++ t->timeout = synced; ++ } + insertTimer( t ); // relink timer + if ( t->interval.tv_usec > 0 || t->interval.tv_sec > 0 ) + n_act++; ++ ++ if (t->obj && getenv("QT_DEBUG_TIMER")) ++ qDebug("qtimer: %ld/%s %d ms for %p/%s %s", ++ getpid(), qApp && qApp->name() ? qApp->name() : "", ++ t->interval.tv_sec * 1000 + t->interval.tv_usec / 1000, ++ t->obj, fullName(t->obj).latin1(), t->obj->className()); ++ + QTimerEvent e( t->id ); + QApplication::sendEvent( t->obj, &e ); // send event + if ( timerList->findRef( begin ) == -1 ) diff --git a/opensuse/core/qt3/qtkdeintegration_x11.cpp b/opensuse/core/qt3/qtkdeintegration_x11.cpp new file mode 100644 index 000000000..8f837b412 --- /dev/null +++ b/opensuse/core/qt3/qtkdeintegration_x11.cpp @@ -0,0 +1,242 @@ +#define QT_CLEAN_NAMESPACE +#include "qtkdeintegration_x11_p.h" + +#include +#include +#include +#include +#include +#include +#include + +bool QKDEIntegration::inited = false; +bool QKDEIntegration::enable = false; + +bool QKDEIntegration::enabled() + { + if( !inited ) + initLibrary(); + return enable; + } + +static QCString findLibrary() + { + if( getenv( "QT_NO_KDE_INTEGRATION" ) == NULL + || getenv( "QT_NO_KDE_INTEGRATION" )[ 0 ] == '0' ) + { +#ifdef USE_LIB64_PATHES + return "/opt/kde3/lib64/kde3/plugins/integration/libqtkde"; +#else + return "/opt/kde3/lib/kde3/plugins/integration/libqtkde"; +#endif + } + return ""; + } + +inline static long widgetToWinId( const QWidget* w ) + { + return w != NULL ? w->winId() : 0; + } + +inline static QFont fontPtrToFontRef( const QFont* f ) + { + return f != NULL ? *f : QFont(); + } + +// --- +static bool (*qtkde_initializeIntegration)( ); +static QStringList (*qtkde_getOpenFileNames)( const QString& filter, QString* workingDirectory, + long parent, const QCString& name, const QString& caption, QString* selectedFilter, + bool multiple ); +static QString (*qtkde_getSaveFileName)( const QString& initialSelection, const QString& filter, + QString* workingDirectory, long parent, const QCString& name, const QString& caption, + QString* selectedFilter ); +static QString (*qtkde_getExistingDirectory)( const QString& initialDirectory, long parent, + const QCString& name, const QString& caption ); +static QColor (*qtkde_getColor)( const QColor& color, long parent, const QCString& name ); +static QFont (*qtkde_getFont)( bool* ok, const QFont& def, long parent, const QCString& name ); +static int (*qtkde_messageBox1)( int type, long parent, const QString& caption, const QString& text, + int button0, int button1, int button2 ); +static int (*qtkde_messageBox2)( int type, long parent, const QString& caption, const QString& text, + const QString& button0Text, const QString& button1Text, const QString& button2Text, + int defaultButton, int escapeButton ); + +void QKDEIntegration::initLibrary() + { + if( !inited ) + { + enable = false; + inited = true; + QString libpath = findLibrary(); + if( libpath.isEmpty()) + return; + QLibrary lib( libpath ); + lib.setAutoUnload( false ); + qtkde_initializeIntegration = ( + bool (*)( ) + ) + lib.resolve("initializeIntegration"); + if( qtkde_initializeIntegration == NULL ) + return; + qtkde_getOpenFileNames = ( + QStringList (*)( const QString& filter, QString* workingDirectory, long parent, + const QCString& name, const QString& caption, QString* selectedFilter, + bool multiple ) + ) + lib.resolve("getOpenFileNames"); + if( qtkde_getOpenFileNames == NULL ) + return; + qtkde_getSaveFileName = ( + QString (*)( const QString& initialSelection, const QString& filter, QString* workingDirectory, + long parent, const QCString& name, const QString& caption, QString* selectedFilter ) + ) + lib.resolve("getSaveFileName"); + if( qtkde_getSaveFileName == NULL ) + return; + qtkde_getExistingDirectory = ( + QString (*)( const QString& initialDirectory, long parent, const QCString& name, + const QString& caption ) + ) + lib.resolve("getExistingDirectory"); + if( qtkde_getExistingDirectory == NULL ) + return; + qtkde_getColor = ( + QColor (*)( const QColor& color, long parent, const QCString& name ) + ) + lib.resolve("getColor"); + if( qtkde_getColor == NULL ) + return; + qtkde_getFont = ( + QFont (*)( bool* ok, const QFont& def, long parent, const QCString& name ) + ) + lib.resolve("getFont"); + if( qtkde_getFont == NULL ) + return; + qtkde_messageBox1 = ( + int (*)( int type, long parent, const QString& caption, const QString& text, + int button0, int button1, int button2 ) + ) + lib.resolve("messageBox1"); + if( qtkde_messageBox1 == NULL ) + return; + qtkde_messageBox2 = ( + int (*)( int type, long parent, const QString& caption, const QString& text, + const QString& button0Text, const QString& button1Text, const QString& button2Text, + int defaultButton, int escapeButton ) + ) + lib.resolve("messageBox2"); + if( qtkde_messageBox2 == NULL ) + return; + enable = qtkde_initializeIntegration(); + } + } + +bool QKDEIntegration::initializeIntegration( ) + { + return qtkde_initializeIntegration( + ); + } +QStringList QKDEIntegration::getOpenFileNames( const QString& filter, QString* workingDirectory, + QWidget* parent, const char* name, const QString& caption, QString* selectedFilter, + bool multiple ) + { + return qtkde_getOpenFileNames( + filter, workingDirectory, widgetToWinId( parent ), name, caption, selectedFilter, multiple ); + } +QString QKDEIntegration::getSaveFileName( const QString& initialSelection, const QString& filter, + QString* workingDirectory, QWidget* parent, const char* name, const QString& caption, + QString* selectedFilter ) + { + return qtkde_getSaveFileName( + initialSelection, filter, workingDirectory, widgetToWinId( parent ), name, caption, selectedFilter ); + } +QString QKDEIntegration::getExistingDirectory( const QString& initialDirectory, QWidget* parent, + const char* name, const QString& caption ) + { + return qtkde_getExistingDirectory( + initialDirectory, widgetToWinId( parent ), name, caption ); + } +QColor QKDEIntegration::getColor( const QColor& color, QWidget* parent, const char* name ) + { + return qtkde_getColor( + color, widgetToWinId( parent ), name ); + } +QFont QKDEIntegration::getFont( bool* ok, const QFont* def, QWidget* parent, const char* name ) + { + return qtkde_getFont( + ok, fontPtrToFontRef( def ), widgetToWinId( parent ), name ); + } +int QKDEIntegration::messageBox1( int type, QWidget* parent, const QString& caption, + const QString& text, int button0, int button1, int button2 ) + { + return qtkde_messageBox1( + type, widgetToWinId( parent ), caption, text, button0, button1, button2 ); + } +int QKDEIntegration::messageBox2( int type, QWidget* parent, const QString& caption, + const QString& text, const QString& button0Text, const QString& button1Text, const QString& button2Text, + int defaultButton, int escapeButton ) + { + return qtkde_messageBox2( + type, widgetToWinId( parent ), caption, text, button0Text, button1Text, button2Text, defaultButton, escapeButton ); + } +// --- + +int QKDEIntegration::information( QWidget* parent, const QString& caption, + const QString& text, int button0, int button1, int button2 ) + { + return qtkde_messageBox1( + QMessageBox::Information, widgetToWinId( parent ), caption, text, button0, button1, button2 ); + } + +int QKDEIntegration::question( QWidget* parent, const QString& caption, + const QString& text, int button0, int button1, int button2 ) + { + return qtkde_messageBox1( + QMessageBox::Question, widgetToWinId( parent ), caption, text, button0, button1, button2 ); + } + +int QKDEIntegration::warning( QWidget* parent, const QString& caption, + const QString& text, int button0, int button1, int button2 ) + { + return qtkde_messageBox1( + QMessageBox::Warning, widgetToWinId( parent ), caption, text, button0, button1, button2 ); + } + +int QKDEIntegration::critical( QWidget* parent, const QString& caption, + const QString& text, int button0, int button1, int button2 ) + { + return qtkde_messageBox1( + QMessageBox::Critical, widgetToWinId( parent ), caption, text, button0, button1, button2 ); + } + +int QKDEIntegration::information( QWidget* parent, const QString& caption, + const QString& text, const QString& button0Text, const QString& button1Text, const QString& button2Text, + int defaultButton, int escapeButton ) + { + return qtkde_messageBox2( + QMessageBox::Information, widgetToWinId( parent ), caption, text, button0Text, button1Text, button2Text, defaultButton, escapeButton ); + } + +int QKDEIntegration::question( QWidget* parent, const QString& caption, + const QString& text, const QString& button0Text, const QString& button1Text, const QString& button2Text, + int defaultButton, int escapeButton ) + { + return qtkde_messageBox2( + QMessageBox::Question, widgetToWinId( parent ), caption, text, button0Text, button1Text, button2Text, defaultButton, escapeButton ); + } + +int QKDEIntegration::warning( QWidget* parent, const QString& caption, + const QString& text, const QString& button0Text, const QString& button1Text, const QString& button2Text, + int defaultButton, int escapeButton ) + { + return qtkde_messageBox2( + QMessageBox::Warning, widgetToWinId( parent ), caption, text, button0Text, button1Text, button2Text, defaultButton, escapeButton ); + } + +int QKDEIntegration::critical( QWidget* parent, const QString& caption, + const QString& text, const QString& button0Text, const QString& button1Text, const QString& button2Text, + int defaultButton, int escapeButton ) + { + return qtkde_messageBox2( + QMessageBox::Critical, widgetToWinId( parent ), caption, text, button0Text, button1Text, button2Text, defaultButton, escapeButton ); + } diff --git a/opensuse/core/qt3/qtkdeintegration_x11_p.h b/opensuse/core/qt3/qtkdeintegration_x11_p.h new file mode 100644 index 000000000..9c1676ddb --- /dev/null +++ b/opensuse/core/qt3/qtkdeintegration_x11_p.h @@ -0,0 +1,59 @@ +#ifndef QKDEINTEGRATION_H +#define QKDEINTEGRATION_H + +#include + +class QLibrary; +class QWidget; +class QColor; +class QFont; + +class QKDEIntegration + { + public: + static bool enabled(); +// --- + static bool initializeIntegration( ); + static QStringList getOpenFileNames( const QString& filter, QString* workingDirectory, + QWidget* parent, const char* name, const QString& caption, QString* selectedFilter, + bool multiple ); + static QString getSaveFileName( const QString& initialSelection, const QString& filter, + QString* workingDirectory, QWidget* parent, const char* name, const QString& caption, + QString* selectedFilter ); + static QString getExistingDirectory( const QString& initialDirectory, QWidget* parent, + const char* name, const QString& caption ); + static QColor getColor( const QColor& color, QWidget* parent, const char* name ); + static QFont getFont( bool* ok, const QFont* def, QWidget* parent, const char* name ); + static int messageBox1( int type, QWidget* parent, const QString& caption, + const QString& text, int button0, int button1, int button2 ); + static int information( QWidget* parent, const QString& caption, const QString& text, + int button0, int button1, int button2 ); + static int question( QWidget* parent, const QString& caption, const QString& text, + int button0, int button1, int button2 ); + static int warning( QWidget* parent, const QString& caption, const QString& text, + int button0, int button1, int button2 ); + static int critical( QWidget* parent, const QString& caption, const QString& text, + int button0, int button1, int button2 ); + static int messageBox2( int type, QWidget* parent, const QString& caption, + const QString& text, const QString& button0Text, const QString& button1Text, + const QString& button2Text, int defaultButton, int escapeButton ); + static int information( QWidget* parent, const QString& caption, const QString& text, + const QString& button0Text, const QString& button1Text, const QString& button2Text, + int defaultButton, int escapeButton ); + static int question( QWidget* parent, const QString& caption, const QString& text, + const QString& button0Text, const QString& button1Text, const QString& button2Text, + int defaultButton, int escapeButton ); + static int warning( QWidget* parent, const QString& caption, const QString& text, + const QString& button0Text, const QString& button1Text, const QString& button2Text, + int defaultButton, int escapeButton ); + static int critical( QWidget* parent, const QString& caption, const QString& text, + const QString& button0Text, const QString& button1Text, const QString& button2Text, + int defaultButton, int escapeButton ); +// --- + private: + static void initLibrary(); + static bool inited; + static bool enable; + }; + +#endif diff --git a/opensuse/core/qt3/qtrc b/opensuse/core/qt3/qtrc new file mode 100644 index 000000000..de342fa33 --- /dev/null +++ b/opensuse/core/qt3/qtrc @@ -0,0 +1,28 @@ +[General] +font=Sans Serif,10,-1,5,50,0,0,0,0,0 +style=plastik +enableXft=true +useXft=true +XIMInputStyle=On The Spot +resolveSymlinks=false +useRtlExtensions=true + +[3.3] +libraryPath=/opt/kde3/lib64/kde3/plugins/:/opt/kde3/lib/kde3/plugins + +[KWinPalette] +activeBackground=#3067a1 +activeBlend=#2fb1dd +activeForeground=#ffffff +activeTitleBtnBg=#dcdcdc +frame=#eeeaee +inactiveBackground=#6e6e6e +inactiveBlend=#949494 +inactiveForeground=#ffffff +inactiveFrame=#eeeaee +inactiveTitleBtnBg=#494949 + +[Palette] +active=#000000^e#f4f4f4^e#ffffff^e#ffffff^e#555555^e#c6c6c6^e#000000^e#ffffff^e#000000^e#ffffff^e#eeeaee^e#000000^e#447bcd^e#ffffff^e#535378^e#004000^e +disabled=#808080^e#f4f4f4^e#ffffff^e#ffffff^e#555555^e#c6c3c6^e#c6c3c6^e#ffffff^e#808080^e#ffffff^e#eeeaee^e#000000^e#000080^e#ffffff^e#535378^e#004000^e +inactive=#000000^e#f4f4f4^e#ffffff^e#ffffff^e#555555^e#c6c3c6^e#000000^e#ffffff^e#000000^e#ffffff^e#eeeaee^e#000000^e#447bcd^e#ffffff^e#535378^e#004000^e diff --git a/opensuse/core/qt3/qtrc-path.diff b/opensuse/core/qt3/qtrc-path.diff new file mode 100644 index 000000000..41830d988 --- /dev/null +++ b/opensuse/core/qt3/qtrc-path.diff @@ -0,0 +1,47 @@ +--- src/tools/qsettings.cpp ++++ src/tools/qsettings.cpp +@@ -36,6 +36,7 @@ + **********************************************************************/ + + #include "qplatformdefs.h" ++#include + + // POSIX Large File Support redefines open -> open64 + static inline int qt_open( const char *pathname, int flags, mode_t mode ) +@@ -465,8 +466,18 @@ + Q_UNUSED( format ); + #endif + +- QString appSettings(QDir::homeDirPath() + "/.qt/"); +- QString defPath; ++ QString home; ++ home = getenv("QT_HOME_DIR"); ++ if ( !home.isEmpty() ){ ++ home += "/"; ++ QFileInfo i( home + "qtrc" ); ++ if ( !i.isReadable() ) ++ home = QDir::homeDirPath() + "/.qt/"; ++ }else ++ home = QDir::homeDirPath() + "/.qt/"; ++ QString appSettings(home); ++ ++ QString defPath("/etc/X11/"); + #ifdef Q_WS_WIN + #ifdef Q_OS_TEMP + TCHAR path[MAX_PATH]; +@@ -514,6 +525,15 @@ + + if ( !!defPath ) + searchPaths.append(defPath); ++ ++ QString system; ++ system = getenv("QT_SYSTEM_DIR"); ++ if ( !system.isEmpty() && system[0] == '/') { ++ QFileInfo i( system + "/qtrc" ); ++ if ( i.isReadable() ) ++ searchPaths.append(system); ++ } ++ + searchPaths.append(dir.path()); + } + diff --git a/opensuse/core/qt3/revert-qt-3.3.8-khmer-fix.diff b/opensuse/core/qt3/revert-qt-3.3.8-khmer-fix.diff new file mode 100644 index 000000000..385e6111a --- /dev/null +++ b/opensuse/core/qt3/revert-qt-3.3.8-khmer-fix.diff @@ -0,0 +1,36 @@ + +according to bug 345459, this fix for stacking letters from 3.3.8 +made it only a lot worse. revert. + + +--- src/kernel/qfontengine_x11.cpp ++++ src/kernel/qfontengine_x11.cpp +@@ -2672,23 +2655,16 @@ bool QOpenType::positionAndAdd(QShaperIt + // ###### fix the case where we have y advances. How do we handle this in Uniscribe????? + if (positions[i].new_advance) { + item->advances[i] = item->flags & QTextEngine::RightToLeft +- ? -qRound((positions[i].x_advance >> 6)*scale) ++ ? -qRound((positions[i].x_advance >> 6)*scale) + : qRound((positions[i].x_advance >> 6)*scale); + } else { + item->advances[i] += item->flags & QTextEngine::RightToLeft +- ? -qRound((positions[i].x_advance >> 6)*scale) ++ ? -qRound((positions[i].x_advance >> 6)*scale) + : qRound((positions[i].x_advance >> 6)*scale); + } +- int back = 0; +- item->offsets[i].x = qRound((positions[i].x_pos >> 6)*scale); +- item->offsets[i].y = qRound((positions[i].y_pos >> 6)*scale); +- while (positions[i-back].back) { +- back += positions[i - back].back; +- item->offsets[i].x += qRound((positions[i - back].x_pos >> 6)*scale); +- item->offsets[i].y += qRound((positions[i - back].y_pos >> 6)*scale); +- } +- item->offsets[i].y = -item->offsets[i].y; +- back = positions[i].back; ++ item->offsets[i].x = qRound((positions[i].x_pos >> 6)*scale); ++ item->offsets[i].y = -qRound((positions[i].y_pos >> 6)*scale); ++ int back = positions[i].back; + if (item->flags & QTextEngine::RightToLeft) { + while (back--) { + item->offsets[i].x -= item->advances[i-back]; diff --git a/opensuse/core/qt3/rubberband.diff b/opensuse/core/qt3/rubberband.diff new file mode 100644 index 000000000..e02b17a98 --- /dev/null +++ b/opensuse/core/qt3/rubberband.diff @@ -0,0 +1,339 @@ +--- src/iconview/qiconview.cpp ++++ src/iconview/qiconview.cpp +@@ -261,6 +261,7 @@ + + QIconViewToolTip *toolTip; + QPixmapCache maskCache; ++ QPixmap *backrubber; + QPtrDict selectedItems; + + struct ItemContainer { +@@ -1975,14 +1976,27 @@ + if ( picture() ) { + QPicture *pic = picture(); + if ( isSelected() ) { +- p->fillRect( pixmapRect( FALSE ), QBrush( cg.highlight(), QBrush::Dense4Pattern) ); ++ p->setBrush( QBrush( cg.highlight(), QBrush::Dense4Pattern ) ); ++ p->setPen( QPen( cg.highlight(), QBrush::Dense4Pattern ) ); ++ p->drawRoundRect( pixmapRect( FALSE ), ++ 1000 / pixmapRect( FALSE ).width(), ++ 1000 / pixmapRect( FALSE ).height() ); + } + p->drawPicture( x()-pic->boundingRect().x(), y()-pic->boundingRect().y(), *pic ); + if ( isSelected() ) { +- p->fillRect( textRect( FALSE ), cg.highlight() ); ++ p->setBrush( QBrush( cg.highlight() ) ); ++ p->setPen( QPen( cg.highlight() ) ); ++ p->drawRoundRect( textRect( FALSE ), ++ 1000 / textRect( FALSE ).width(), ++ 1000 / textRect( FALSE ).height() ); + p->setPen( QPen( cg.highlightedText() ) ); +- } else if ( view->d->itemTextBrush != NoBrush ) +- p->fillRect( textRect( FALSE ), view->d->itemTextBrush ); ++ } else if ( view->d->itemTextBrush != NoBrush ) { ++ p->setBrush( view->d->itemTextBrush ); ++ p->setPen( QPen( view->d->itemTextBrush.color() ) ); ++ p->drawRoundRect( textRect( FALSE ), ++ 1000 / textRect( FALSE ).width(), ++ 1000 / textRect( FALSE ).height() ); ++ } + + int align = view->itemTextPos() == QIconView::Bottom ? AlignHCenter : AlignAuto; + if ( view->d->wordWrapIconText ) +@@ -2040,10 +2054,19 @@ + + p->save(); + if ( isSelected() ) { +- p->fillRect( textRect( FALSE ), cg.highlight() ); ++ p->setBrush( QBrush( cg.highlight() ) ); ++ p->setPen( QPen( cg.highlight() ) ); ++ p->drawRoundRect( textRect( FALSE ), ++ 1000 / textRect( FALSE ).width(), ++ 1000 / textRect( FALSE ).height() ); + p->setPen( QPen( cg.highlightedText() ) ); +- } else if ( view->d->itemTextBrush != NoBrush ) +- p->fillRect( textRect( FALSE ), view->d->itemTextBrush ); ++ } else if ( view->d->itemTextBrush != NoBrush ) { ++ p->setBrush( view->d->itemTextBrush ); ++ p->setPen( QPen( view->d->itemTextBrush.color() ) ); ++ p->drawRoundRect( textRect( FALSE ), ++ 1000 / textRect( FALSE ).width(), ++ 1000 / textRect( FALSE ).height() ); ++ } + + int align = AlignHCenter; + if ( view->d->wordWrapIconText ) +@@ -2059,31 +2082,13 @@ + /*! + Paints the focus rectangle of the item using the painter \a p and + the color group \a cg. ++ ++ The default implementation does nothing; subclasses may ++ reimplement this function. + */ + +-void QIconViewItem::paintFocus( QPainter *p, const QColorGroup &cg ) ++void QIconViewItem::paintFocus( QPainter *, const QColorGroup & ) + { +- if ( !view ) +- return; +- +- view->style().drawPrimitive(QStyle::PE_FocusRect, p, +- QRect( textRect( FALSE ).x(), textRect( FALSE ).y(), +- textRect( FALSE ).width(), +- textRect( FALSE ).height() ), cg, +- (isSelected() ? +- QStyle::Style_FocusAtBorder : +- QStyle::Style_Default), +- QStyleOption(isSelected() ? cg.highlight() : cg.base())); +- +- if ( this != view->d->currentItem ) { +- view->style().drawPrimitive(QStyle::PE_FocusRect, p, +- QRect( pixmapRect( FALSE ).x(), +- pixmapRect( FALSE ).y(), +- pixmapRect( FALSE ).width(), +- pixmapRect( FALSE ).height() ), +- cg, QStyle::Style_Default, +- QStyleOption(cg.base())); +- } + } + + /*! +@@ -2781,6 +2786,7 @@ + d->renamingItem = 0; + d->drawActiveSelection = TRUE; + d->drawDragShapes = FALSE; ++ d->backrubber = 0; + + connect( d->adjustTimer, SIGNAL( timeout() ), + this, SLOT( adjustItems() ) ); +@@ -3265,7 +3271,7 @@ + + void QIconView::doAutoScroll() + { +- QRect oldRubber = QRect( *d->rubber ); ++ QRect oldRubber = *d->rubber; + + QPoint vp = viewport()->mapFromGlobal( QCursor::pos() ); + QPoint pos = viewportToContents( vp ); +@@ -3282,7 +3288,6 @@ + bool block = signalsBlocked(); + + QRect rr; +- QRegion region( 0, 0, visibleWidth(), visibleHeight() ); + + blockSignals( TRUE ); + viewport()->setUpdatesEnabled( FALSE ); +@@ -3308,9 +3313,6 @@ + item->setSelected( TRUE, TRUE ); + changed = TRUE; + rr = rr.unite( item->rect() ); +- } else { +- region = region.subtract( QRect( contentsToViewport( item->pos() ), +- item->size() ) ); + } + + minx = QMIN( minx, item->x() - 1 ); +@@ -3327,42 +3329,77 @@ + viewport()->setUpdatesEnabled( TRUE ); + blockSignals( block ); + +- QRect r = *d->rubber; +- *d->rubber = oldRubber; +- +- QPainter p; +- p.begin( viewport() ); +- p.setRasterOp( NotROP ); +- p.setPen( QPen( color0, 1 ) ); +- p.setBrush( NoBrush ); +- drawRubber( &p ); +- d->dragging = FALSE; +- p.end(); +- +- *d->rubber = r; +- +- if ( changed ) { +- d->drawAllBack = FALSE; +- d->clipRegion = region; +- repaintContents( rr, FALSE ); +- d->drawAllBack = TRUE; ++ // static bool drawAll; ++ if ( d->backrubber == 0 ) { ++ d->backrubber = new QPixmap( viewport()->rect().size() ); ++ d->backrubber->fill( viewport(), viewport()->rect().topLeft() ); ++ // drawAll = true; + } + ++ // int oldX = 0, oldY = 0; ++ // if ( !drawAll && d->scrollTimer ) { ++ // oldX = contentsX(); ++ // oldY = contentsY(); ++ // } + ensureVisible( pos.x(), pos.y() ); ++ // if ( !drawAll && d->scrollTimer && ( oldX != contentsX() || oldY != contentsY() ) ) ++ // drawAll = true; + +- p.begin( viewport() ); +- p.setRasterOp( NotROP ); +- p.setPen( QPen( color0, 1 ) ); +- p.setBrush( NoBrush ); +- drawRubber( &p ); +- d->dragging = TRUE; ++ QRect allRect = oldRubber.normalize(); ++ if ( changed ) ++ allRect |= rr.normalize(); ++ allRect |= d->rubber->normalize(); ++ QPoint point = contentsToViewport( allRect.topLeft() ); ++ allRect = QRect( point.x(), point.y(), allRect.width(), allRect.height() ); ++ allRect &= viewport()->rect(); ++ ++ d->dragging = FALSE; ++ ++ QPainter p( d->backrubber ); ++ p.translate( -contentsX(), -contentsY() ); ++#if 0 ++ if ( !drawAll ) { ++ oldRubber = oldRubber.normalize(); ++ point = contentsToViewport( oldRubber.topLeft() ); ++ oldRubber = QRect( point.x(), point.y(), oldRubber.width(), oldRubber.height() ); ++ oldRubber &= viewport()->rect(); ++ ++ point = contentsToViewport( nr.topLeft() ); ++ nr = QRect( point.x(), point.y(), nr.width(), nr.height() ); ++ nr &= viewport()->rect(); ++ ++ QRegion region; ++ if ( allRect != nr ) ++ region = QRegion(allRect).subtract( QRegion( nr ) ); ++ if ( allRect != oldRubber ) ++ region += QRegion(allRect).subtract( QRegion( oldRubber ) ); ++ ++ QMemArray< QRect > ar = region.rects(); ++ for ( uint i = 0; i < ar.size(); ++i ) { ++ ar[i].addCoords( -2, -2, 4, 4 ); ++ ar[i] = ar[i].normalize(); ++ ++ p.setClipRect( ar[i] ); ++ drawContents( &p, contentsX() + ar[i].left(), contentsY() + ar[i].top(), ar[i].width(), ar[i].height() ); ++ } ++ } ++ else ++#endif ++ { ++ drawContents( &p, ++ contentsX() + allRect.left(), contentsY() + allRect.top(), ++ allRect.width(), allRect.height() ); ++ } + + p.end(); ++ // drawAll = false; ++ d->dragging = TRUE; ++ bitBlt( viewport(), allRect.topLeft(), d->backrubber, allRect ); + + if ( changed ) { + emit selectionChanged(); +- if ( d->selectionMode == Single ) +- emit selectionChanged( d->currentItem ); ++ if ( d->selectionMode == Single ) ++ emit selectionChanged( d->currentItem ); + } + + if ( !QRect( 50, 50, viewport()->width()-100, viewport()->height()-100 ).contains( vp ) && +@@ -3389,9 +3426,7 @@ + + void QIconView::drawContents( QPainter *p, int cx, int cy, int cw, int ch ) + { +- if ( d->dragging && d->rubber ) +- drawRubber( p ); +- ++ p->save(); + QRect r = QRect( cx, cy, cw, ch ); + + QIconViewPrivate::ItemContainer *c = d->firstContainer; +@@ -3465,8 +3500,16 @@ + d->currentItem->paintFocus( p, colorGroup() ); + } + +- if ( d->dragging && d->rubber ) +- drawRubber( p ); ++ p->restore(); ++ if ( d->rubber ) { ++ p->save(); ++ p->translate( contentsX(), contentsY() ); ++ p->setRasterOp( NotROP ); ++ p->setPen( QPen( color0, 1 ) ); ++ p->setBrush( NoBrush ); ++ drawRubber( p ); ++ p->restore(); ++ } + } + + /*! +@@ -4365,17 +4408,15 @@ + void QIconView::contentsMousePressEventEx( QMouseEvent *e ) + { + if ( d->rubber ) { +- QPainter p; +- p.begin( viewport() ); +- p.setRasterOp( NotROP ); +- p.setPen( QPen( color0, 1 ) ); +- p.setBrush( NoBrush ); ++ QRect r( d->rubber->normalize() ); ++ delete d->rubber; ++ d->rubber = 0; ++ ++ repaintContents( r, FALSE ); ++ d->dragging = FALSE; + +- drawRubber( &p ); +- d->dragging = FALSE; +- p.end(); +- delete d->rubber; +- d->rubber = 0; ++ delete d->backrubber; ++ d->backrubber = 0; + + if ( d->scrollTimer ) { + disconnect( d->scrollTimer, SIGNAL( timeout() ), this, SLOT( doAutoScroll() ) ); +@@ -4560,21 +4601,17 @@ + d->startDragItem = 0; + + if ( d->rubber ) { +- QPainter p; +- p.begin( viewport() ); +- p.setRasterOp( NotROP ); +- p.setPen( QPen( color0, 1 ) ); +- p.setBrush( NoBrush ); +- +- drawRubber( &p ); +- d->dragging = FALSE; +- p.end(); +- ++ QRect r(d->rubber->normalize()); ++ + if ( ( d->rubber->topLeft() - d->rubber->bottomRight() ).manhattanLength() > + QApplication::startDragDistance() ) + emitClicked = FALSE; + delete d->rubber; +- d->rubber = 0; ++ d->rubber = 0; ++ repaintContents(r, FALSE); ++ d->dragging = FALSE; ++ delete d->backrubber; ++ d->backrubber = 0; + d->currentItem = d->tmpCurrentItem; + d->tmpCurrentItem = 0; + if ( d->currentItem ) +@@ -5334,9 +5371,9 @@ + QPoint pnt( d->rubber->x(), d->rubber->y() ); + pnt = contentsToViewport( pnt ); + +- style().drawPrimitive(QStyle::PE_RubberBand, p, +- QRect(pnt.x(), pnt.y(), d->rubber->width(), d->rubber->height()), +- colorGroup(), QStyle::Style_Default, QStyleOption(colorGroup().base())); ++ style().drawPrimitive( QStyle::PE_RubberBand, p, ++ QRect( pnt.x(), pnt.y(), d->rubber->width(), d->rubber->height() ).normalize(), ++ colorGroup(), QStyle::Style_Default, QStyleOption(colorGroup().base()) ); + } + + /*! diff --git a/opensuse/core/qt3/shut-up.diff b/opensuse/core/qt3/shut-up.diff new file mode 100644 index 000000000..6191c5d93 --- /dev/null +++ b/opensuse/core/qt3/shut-up.diff @@ -0,0 +1,45 @@ +--- src/kernel/qpixmap_x11.cpp ++++ src/kernel/qpixmap_x11.cpp +@@ -288,8 +288,9 @@ + { + #if defined(QT_CHECK_STATE) + if ( qApp->type() == QApplication::Tty ) { +- qWarning( "QPixmap: Cannot create a QPixmap when no GUI " +- "is being used" ); ++// qWarning( "QPixmap: Cannot create a QPixmap when no GUI " ++// "is being used" ); ++ ; + } + #endif + +--- src/tools/qcomlibrary.cpp ++++ src/tools/qcomlibrary.cpp +@@ -102,25 +102,11 @@ + (const char*) QFile::encodeName(library) ); + } else if ( ( version > QT_VERSION ) || + ( ( QT_VERSION & 0xff0000 ) > ( version & 0xff0000 ) ) ) { +- if ( warn ) +- qWarning( "Conflict in %s:\n" +- " Plugin uses incompatible Qt library (%d.%d.%d)!", +- (const char*) QFile::encodeName(library), +- (version&0xff0000) >> 16, (version&0xff00) >> 8, version&0xff ); ++ return FALSE; + } else if ( (flags & 2) != (our_flags & 2) ) { +- if ( warn ) +- qWarning( "Conflict in %s:\n" +- " Plugin uses %s Qt library!", +- (const char*) QFile::encodeName(library), +- (flags & 2) ? "multi threaded" : "single threaded" ); ++ return FALSE; + } else if ( key != QT_BUILD_KEY ) { +- if ( warn ) +- qWarning( "Conflict in %s:\n" +- " Plugin uses incompatible Qt library!\n" +- " expected build key \"%s\", got \"%s\".", +- (const char*) QFile::encodeName(library), +- QT_BUILD_KEY, +- key.isEmpty() ? "" : (const char *) key ); ++ return FALSE; + } else { + return TRUE; + } diff --git a/opensuse/core/qt3/update_spec.pl b/opensuse/core/qt3/update_spec.pl new file mode 100644 index 000000000..8c67241dc --- /dev/null +++ b/opensuse/core/qt3/update_spec.pl @@ -0,0 +1,106 @@ +#! /usr/bin/perl + +my $name = $ARGV[0]; +$name =~ s,.*/,,; +$name =~ s,\.spec.*,,; + +my %attributes = (); +open(FILE, $ARGV[1]) || die 'no attributes'; +my $pack = undef; +my $text = undef; +while ( ) { + if (/^\+(.*)$/) { $pack = $1; $text = ''; next } + if (/^-(.*)$/) { + if ($pack ne $1) { + die "$pack and $1 do not match"; + } + $text =~ s,^\s*,,; + $text =~ s,\s*$,,; + $attributes{$pack} = $text; + $text = undef; + $pack = undef; + next; + } + if (defined $text) { + $text .= $_; + } elsif (/^(\S*)\s*(.*)$/) { + my $attr = $1; + my $string = $2; + $string =~ s,^\s*,,; + $string =~ s,\s*$,,; + $attributes{$attr} = $string; + } +} +close(FILE); + +open(FILE, $ARGV[0]); + +sub description() +{ + if (/^%description\s*(.*)\s*/) { + my $suffix = $1; + my $pname = $name; + + if ($suffix =~ m/-n\s*(.*)/) { + $pname = $1; + } else { + $pname = "$name-$suffix" if ($suffix); + } + + if (defined $attributes{"description.$pname"}) { + print $_; + my $descr = $attributes{"description.$pname"}; + print "$descr\n"; + $_ = ''; + do { + $_ = ; + } while ( $_ !~ /^%/ && $_ !~ /^@/ ); + print "\n"; + description(); + } + } + +} + +# current subpackage +my $pname = $name; + +while ( ) +{ + if (/^Name:\s*(.*)/) { + $name = $1; + $pname = $1; + } + description(); + + if (/^%package\s*(.*)/) { + my $suffix = $1; + if ($suffix =~ m/-n\s*(.*)/) { + $pname = $1; + } else { + $pname = "$name-$1"; + } + } + + if (/^(Summary:\s*)(.*)$/) { + if (defined $attributes{"summary.$pname"}) { + print $1 . $attributes{"summary.$pname"} ."\n"; + next; + } + } + if (/^(License:\s*)(.*)$/) { + if (defined $attributes{"license.$pname"}) { + print $1 . $attributes{"license.$pname"} ."\n"; + next; + } + } + if (/^(Group:\s*)(.*)$/) { + if (defined $attributes{"group.$pname"}) { + print $1 . $attributes{"group.$pname"} ."\n"; + next; + } + } + print $_; +} + +close(FILE); diff --git a/opensuse/core/qt3/use-xrandr-1.2.diff b/opensuse/core/qt3/use-xrandr-1.2.diff new file mode 100644 index 000000000..4ec4174e7 --- /dev/null +++ b/opensuse/core/qt3/use-xrandr-1.2.diff @@ -0,0 +1,106 @@ +qt-bugs@ issue : +bugs.kde.org number : +applied: no +author: Dirk Mueller + +support xrandr 1.2 configurations. same patch like for trunk qt-copy, +please see there for details. + + +--- src/kernel/qdesktopwidget_x11.cpp ++++ src/kernel/qdesktopwidget_x11.cpp +@@ -107,7 +107,7 @@ QDesktopWidgetPrivate::~QDesktopWidgetPr + screens[i] = 0; + } + +- delete [] screens; ++ free(screens); + } + + if ( rects ) delete [] rects; +@@ -119,30 +119,33 @@ void QDesktopWidgetPrivate::init() + // get the screen count + #ifndef QT_NO_XINERAMA + XineramaScreenInfo *xinerama_screeninfo = 0; +- int unused; ++ int unused, newScreenCount; + use_xinerama = (XineramaQueryExtension(QPaintDevice::x11AppDisplay(), + &unused, &unused) && + XineramaIsActive(QPaintDevice::x11AppDisplay())); + + if (use_xinerama) { + xinerama_screeninfo = +- XineramaQueryScreens(QPaintDevice::x11AppDisplay(), &screenCount); ++ XineramaQueryScreens(QPaintDevice::x11AppDisplay(), &newScreenCount); ++ ++ if (xinerama_screeninfo) + defaultScreen = 0; + } else + #endif // QT_NO_XINERAMA + { + defaultScreen = DefaultScreen(QPaintDevice::x11AppDisplay()); +- screenCount = ScreenCount(QPaintDevice::x11AppDisplay()); ++ newScreenCount = ScreenCount(QPaintDevice::x11AppDisplay()); ++ use_xinerama = false; + } + + delete [] rects; +- rects = new QRect[ screenCount ]; ++ rects = new QRect[ newScreenCount ]; + delete [] workareas; +- workareas = new QRect[ screenCount ]; ++ workareas = new QRect[ newScreenCount ]; + + // get the geometry of each screen +- int i, x, y, w, h; +- for ( i = 0; i < screenCount; i++ ) { ++ int i, j, x, y, w, h; ++ for ( i = 0, j = 0; i < newScreenCount; i++ ) { + + #ifndef QT_NO_XINERAMA + if (use_xinerama) { +@@ -159,11 +162,33 @@ void QDesktopWidgetPrivate::init() + h = HeightOfScreen(ScreenOfDisplay(QPaintDevice::x11AppDisplay(), i)); + } + +- rects[i].setRect(x, y, w, h); + workareas[i] = QRect(); ++ rects[j].setRect(x, y, w, h); ++ ++ // overlapping? ++ if (j > 0 && rects[j-1].intersects(rects[j])) { ++ // pick the bigger one, ignore the other ++ if ((rects[j].width()*rects[j].height()) > ++ (rects[j-1].width()*rects[j-1].height())) ++ rects[j-1] = rects[j]; ++ } ++ else ++ j++; + } + ++ if (screens) { ++ // leaks QWidget* pointers on purpose, can't delete them as pointer escapes ++ screens = (QWidget**) realloc(screens, j * sizeof(QWidget*)); ++ if (j > screenCount) ++ memset(&screens[screenCount], 0, (j-screenCount) * sizeof(QWidget*)); ++ } ++ ++ screenCount = j; ++ + #ifndef QT_NO_XINERAMA ++ if (use_xinerama && screenCount == 1) ++ use_xinerama = false; ++ + if (xinerama_screeninfo) + XFree(xinerama_screeninfo); + #endif // QT_NO_XINERAMA +@@ -216,8 +241,7 @@ QWidget *QDesktopWidget::screen( int scr + screen = d->defaultScreen; + + if ( ! d->screens ) { +- d->screens = new QWidget*[ d->screenCount ]; +- memset( d->screens, 0, d->screenCount * sizeof( QWidget * ) ); ++ d->screens = (QWidget**) calloc( d->screenCount, sizeof(QWidget*)); + d->screens[ d->defaultScreen ] = this; + } + diff --git a/opensuse/core/qt3/xinerama-qpopupmenu.diff b/opensuse/core/qt3/xinerama-qpopupmenu.diff new file mode 100644 index 000000000..07927206f --- /dev/null +++ b/opensuse/core/qt3/xinerama-qpopupmenu.diff @@ -0,0 +1,104 @@ +--- src/widgets/qpopupmenu.cpp.sav ++++ src/widgets/qpopupmenu.cpp +@@ -457,6 +457,15 @@ + menuContentsChanged(); + } + ++QRect QPopupMenu::screenRect( const QPoint& pos ) ++{ ++ int screen_num = QApplication::desktop()->screenNumber( pos ); ++#ifdef Q_WS_MAC ++ return QApplication::desktop()->availableGeometry( screen_num ); ++#else ++ return QApplication::desktop()->screenGeometry( screen_num ); ++#endif ++} + /*! + Displays the popup menu so that the item number \a indexAtPoint + will be at the specified \e global position \a pos. To translate a +@@ -501,6 +510,15 @@ + // point. + #endif + ++ QRect screen = screenRect( geometry().center()); ++ QRect screen2 = screenRect( QApplication::reverseLayout() ++ ? pos+QPoint(width(),0) : pos ); ++ // if the widget is not in the screen given by the position, move it ++ // there, so that updateSize() uses the right size of the screen ++ if( screen != screen2 ) { ++ screen = screen2; ++ move( screen.x(), screen.y()); ++ } + if(d->scroll.scrollable) { + d->scroll.scrollable = QPopupMenuPrivate::Scroll::ScrollNone; + d->scroll.topScrollableIndex = d->scroll.scrollableSize = 0; +@@ -520,18 +538,6 @@ + updateSize(TRUE); + } + +- int screen_num; +- if (QApplication::desktop()->isVirtualDesktop()) +- screen_num = +- QApplication::desktop()->screenNumber( QApplication::reverseLayout() ? +- pos+QPoint(width(),0) : pos ); +- else +- screen_num = QApplication::desktop()->screenNumber( this ); +-#ifdef Q_WS_MAC +- QRect screen = QApplication::desktop()->availableGeometry( screen_num ); +-#else +- QRect screen = QApplication::desktop()->screenGeometry( screen_num ); +-#endif + int sw = screen.width(); // screen width + int sh = screen.height(); // screen height + int sx = screen.x(); // screen pos +@@ -1059,7 +1065,7 @@ + mi->iconSet()->pixmap( QIconSet::Small, QIconSet::Normal ).width() + 4 ); + } + +- int dh = QApplication::desktop()->height(); ++ int dh = screenRect( geometry().center()).height(); + ncols = 1; + + for ( QMenuItemListIt it2( *mitems ); it2.current(); ++it2 ) { +@@ -2313,9 +2319,9 @@ + bool right = FALSE; + if ( ( parentMenu && parentMenu->isPopupMenu && + ((QPopupMenu*)parentMenu)->geometry().x() < geometry().x() ) || +- p.x() < 0 ) ++ p.x() < screenRect( p ).left()) + right = TRUE; +- if ( right && (ps.width() > QApplication::desktop()->width() - mapToGlobal( r.topRight() ).x() ) ) ++ if ( right && (ps.width() > screenRect( p ).right() - mapToGlobal( r.topRight() ).x() ) ) + right = FALSE; + if ( right ) + p.setX( mapToGlobal( r.topRight() ).x() ); +@@ -2326,7 +2332,7 @@ + bool left = FALSE; + if ( ( parentMenu && parentMenu->isPopupMenu && + ((QPopupMenu*)parentMenu)->geometry().x() > geometry().x() ) || +- p.x() + ps.width() > QApplication::desktop()->width() ) ++ p.x() + ps.width() > screenRect( p ).right() ) + left = TRUE; + if ( left && (ps.width() > mapToGlobal( r.topLeft() ).x() ) ) + left = FALSE; +@@ -2334,8 +2340,8 @@ + p.setX( mapToGlobal( r.topLeft() ).x() - ps.width() ); + } + QRect pr = popup->itemGeometry(popup->count() - 1); +- if (p.y() + ps.height() > QApplication::desktop()->height() && +- p.y() - ps.height() + (QCOORD) pr.height() >= 0) ++ if (p.y() + ps.height() > screenRect( p ).bottom() && ++ p.y() - ps.height() + (QCOORD) pr.height() >= screenRect( p ).top()) + p.setY( p.y() - ps.height() + (QCOORD) pr.height()); + + if ( style().styleHint(QStyle::SH_PopupMenu_SloppySubMenus, this )) { +--- src/widgets/qpopupmenu.h.sav ++++ src/widgets/qpopupmenu.h +@@ -152,6 +152,7 @@ + + QSize updateSize(bool force_recalc=FALSE, bool do_resize=TRUE); + void updateRow( int row ); ++ QRect screenRect(const QPoint& pos); + #ifndef QT_NO_ACCEL + void updateAccel( QWidget * ); + void enableAccel( bool ); diff --git a/opensuse/core/qt3/xinerama.patch b/opensuse/core/qt3/xinerama.patch new file mode 100644 index 000000000..1fee04aae --- /dev/null +++ b/opensuse/core/qt3/xinerama.patch @@ -0,0 +1,49 @@ +--- src/dialogs/qdialog.cpp ++++ src/dialogs/qdialog.cpp +@@ -670,6 +670,11 @@ + + #if defined(Q_WS_X11) + extern "C" { int XSetTransientForHint( Display *, unsigned long, unsigned long ); } ++#include ++#undef FocusIn ++// defined in qapplication_x11.cpp ++extern Atom qt_net_wm_full_placement; ++extern bool qt_net_supports(Atom atom); + #endif // Q_WS_X11 + + /*! +@@ -691,10 +696,12 @@ + + if ( !did_resize ) + adjustSize(); +- if ( has_relpos && !did_move ) { +- adjustPositionInternal( parentWidget(), TRUE ); +- } else if ( !did_move ) { +- adjustPositionInternal( parentWidget() ); ++ if( !qt_net_supports( qt_net_wm_full_placement )) { ++ if ( has_relpos && !did_move ) { ++ adjustPositionInternal( parentWidget(), TRUE ); ++ } else if ( !did_move ) { ++ adjustPositionInternal( parentWidget() ); ++ } + } + + if (windowState() != state) +--- src/kernel/qapplication_x11.cpp ++++ src/kernel/qapplication_x11.cpp +@@ -273,6 +273,7 @@ + Atom qt_net_wm_state_stays_on_top = 0; // KDE extension + Atom qt_net_wm_pid = 0; + Atom qt_net_wm_user_time = 0; ++Atom qt_net_wm_full_placement = 0; // KDE extension + // Enlightenment support + Atom qt_enlightenment_desktop = 0; + +@@ -1989,6 +1990,7 @@ + &qt_net_wm_state_stays_on_top ); + qt_x11_intern_atom( "_NET_WM_PID", &qt_net_wm_pid ); + qt_x11_intern_atom( "_NET_WM_USER_TIME", &qt_net_wm_user_time ); ++ qt_x11_intern_atom( "_NET_WM_FULL_PLACEMENT", &qt_net_wm_full_placement ); + qt_x11_intern_atom( "ENLIGHTENMENT_DESKTOP", &qt_enlightenment_desktop ); + qt_x11_intern_atom( "_NET_WM_NAME", &qt_net_wm_name ); + qt_x11_intern_atom( "_NET_WM_ICON_NAME", &qt_net_wm_icon_name ); diff --git a/opensuse/core/tde-filesystem/macros.tde b/opensuse/core/tde-filesystem/macros.tde index b488ea8e7..20998b9b9 100644 --- a/opensuse/core/tde-filesystem/macros.tde +++ b/opensuse/core/tde-filesystem/macros.tde @@ -24,7 +24,7 @@ %_tde_docdir %{_tde_sharedir}/doc/ %_tde_htmldir %{_tde_sharedir}/doc/HTML %_tde_wallpapersdir %{_tde_sharedir}/wallpapers -%_tde_icondir %{_tde_sharedir}/icons +%_tde_icondir %{_tde_iconsdir} %_tde_sounddir %{_tde_sharedir}/sounds %_tde_locale %{_tde_sharedir}/locale %_tde_mimedir %{_tde_sharedir}/mimelnk @@ -42,7 +42,7 @@ %_tde_platform_version 3.5.13 -%tde_runtime_requires Requires: tdebase3-runtime >= %_tde_platform_version qt3 >= 3.3.8c +%tde_runtime_requires Requires: tdebase3-runtime >= %_tde_platform_version qt3 >= 3.3.8d %_tde_build_type release diff --git a/opensuse/core/tdebase/tdebase.spec b/opensuse/core/tdebase/tdebase.spec index 52d6c3c81..1d37c16ca 100644 --- a/opensuse/core/tdebase/tdebase.spec +++ b/opensuse/core/tdebase/tdebase.spec @@ -1,7 +1,7 @@ # -# spec file for package kdebase3 +# spec file for package tdebase (version 3.5.13) # -# Copyright (c) 2011 SUSE LINUX Products GmbH, Nuernberg, Germany. +# copyright (c) 2011 the Trinity Project # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -11,70 +11,41 @@ # case the license is the MIT License). An "Open Source License" is a # license that conforms to the Open Source Definition (Version 1.9) # published by the Open Source Initiative. - -# Please submit bugfixes or comments via http://bugs.opensuse.org/ -# +# +# Please submit bugfixes or comments to http://bugs.trinitydesktop.org/ # norootforbuild -%if %suse_version < 1210 || 0%{?is_kde_kde3} > 0 -%define with_hal 1 -%else -%define with_hal 0 -%endif - -Name: kdebase3 -BuildRequires: OpenEXR-devel cups-devel db-devel doxygen graphviz kdelibs3-devel krb5-devel libsmbclient-devel mDNSResponder-devel openldap2 openldap2-devel openmotif openmotif-devel openslp-devel openssh pam-devel pcsc-lite-devel qt3-devel-doc samba-client utempter xorg-x11 -BuildRequires: unsermake xorg-x11-libfontenc-devel +Name: tdebase +BuildRequires: OpenEXR-devel cups-devel db-devel doxygen graphviz tdelibs-devel krb5-devel libsmbclient-devel mDNSResponder-devel openldap2 openldap2-devel openmotif openmotif-devel openslp-devel openssh pam-devel pcsc-lite-devel qt3-devel-doc samba-client utempter xorg-x11 +BuildRequires: libtqt4-devel tde-filesystem cmake xorg-x11-libfontenc-devel BuildRequires: liblazy-devel -%if %suse_version >= 1130 BuildRequires: libusb-compat-devel -%endif -%if 0%{?with_hal} > 0 -BuildRequires: hal-devel -Provides: kdebase3-with-hal-enabled -%endif BuildRequires: fdupes libbz2-devel -%ifnarch s390 s390x BuildRequires: libsensors4-devel -%endif %define qt_path /usr/lib/qt3 -%define kde_path /opt/kde3 +%define kde_path %{_tde_prefix} Provides: windowmanager kfontinst kdebase3-konqueror kdebase3-khotkeys Obsoletes: kfontinst kdebase3-konqueror kdebase3-khotkeys -# bug437293 -%ifarch ppc64 -Obsoletes: kdebase3-64bit -%endif -# -Requires: kdelibs3 >= %( echo `rpm -q --queryformat '%{VERSION}' kdelibs3`) +Requires: tdelibs >= %( echo `rpm -q --queryformat '%{VERSION}' tdelibs`) Requires: xorg-x11 misc-console-font -Recommends: kdelibs3_doc +Recommends: tdelibs_doc Recommends: gdb PreReq: fileshareset %define fileshare_prefix %{_prefix} -Conflicts: kdebase3-SuSE <= 9.0 PreReq: /bin/sh fileutils permissions -%if %suse_version < 1120 -Requires: kdebase3-apps kdebase3-workspace -%endif -%if %suse_version > 1130 -Provides: kdebase3-beagle = 3.5.10 -Obsoletes: kdebase3-beagle <= 3.5.10 -%endif License: GPLv2+ -Group: System/GUI/KDE -Summary: The KDE Core Components +Group: System/GUI/TDE +Summary: The Trinity Desktop Core Components BuildRoot: %{_tmppath}/%{name}-%{version}-build -Url: http://www.kde.org/ -Version: 3.5.10.1 -Release: 17 -%define kde_version 3.5.10 -Requires: kdebase3-runtime == %{version} -Source0: kdebase-%{kde_version}.tar.bz2 +URL: http://www.trinitydesktop.org/ +Version: 3.5.13 +Release: 1 +Requires: %{name}-runtime == %{version} +Source0: tdebase-%{version}.tar.bz2 Source1: baselibs.conf Source3: startkde.suse.sh -Source4: kdebase3.fillup +Source4: tdebase.fillup Source6: ksysguardd.init # we append this file for older dist verions Source8: mp3-info.tar.bz2 @@ -238,23 +209,23 @@ Patch243: taskbar.patch Patch244: mtab-reenable.patch %description -This package contains kdebase, one of the basic packages of the K -Desktop Environment. It contains, among others, kwin (the KDE window -manager), Konqueror (the KDE Web browser), and KControl (the +This package contains tdebase, one of the basic packages of the Trinity Desktop Environment. It contains, among others, kwin (the window +manager), Konqueror (the Web browser), and KControl (the configuration program) -This package is needed if you want to use the KDE Desktop. It is not -needed if you only want to start some KDE applications. +This package is needed if you want to use the Trinity Desktop. It is not +needed if you only want to start some Trinity applications. Authors: -------- + Timothy Pearson The KDE Team %package -n misc-console-font License: GPLv2+ -Group: System/GUI/KDE +Group: System/GUI/TDE Summary: A font for terminal usage %description -n misc-console-font @@ -264,36 +235,35 @@ This package contains the Misc Console font as shipped with KDE. Authors: -------- + Timothy Pearson The KDE Team %package runtime License: GPLv2+ -Summary: Runtime Dependencies of KDE3 Applications -Group: System/GUI/KDE +Summary: Runtime Dependencies of Trinity Applications +Group: System/GUI/TDE Provides: kio_fish Obsoletes: kio_fish -Provides: kdebase3:/opt/kde3/%_lib/libkonq.so.4 +Provides: tdebase:%{_tde_libdir}/libkonq.so.4 %description runtime -This package contains runtime dependencies of KDE3 applications like +This package contains runtime dependencies of Trinity applications like KIO-slaves. Authors: -------- + Timothy Pearson The KDE Team %package workspace License: GPLv2+ -Summary: Workspace Components of KDE3 Desktop -Group: System/GUI/KDE -Requires: kdebase3 == %{version} -Provides: kdebase3:/opt/kde3/bin/kicker -Recommends: kdebase3-ksysguardd == %{version} -%if 0%{?with_hal} > 0 -Recommends: kdebase3-with-hal-enabled -%endif +Summary: Workspace Components of Trinity Desktop +Group: System/GUI/TDE +Requires: %{name} == %{version} +Provides: tdebase:%{_tde_bindir}/kicker +Recommends: %{name}-ksysguardd == %{version} %description workspace This package contains the wrkspace components of kdebase3 like @@ -302,14 +272,15 @@ kdesktop, kicker and kwin. Authors: -------- + Timothy Pearson The KDE Team %package apps License: GPLv2+ -Summary: Major Applications KDE3 Desktop -Group: System/GUI/KDE -Requires: kdebase3 == %{version} -Provides: kdebase3:/opt/kde3/bin/konsole +Summary: Trinity's Major Applications +Group: System/GUI/TDE +Requires: %{name} == %{version} +Provides: %{name}:%{_tde_bindir}/konsole %description apps This package contains the major applications kdebase3 like @@ -318,55 +289,53 @@ Kate, Konqueror and KWrite. Authors: -------- + Timothy Pearson The KDE Team %package devel License: GPLv2+ -Requires: kdelibs3-devel kdebase3 = %version kdebase3-apps = %version kdebase3-runtime = %version kdebase3-workspace = %version -Summary: KDE Base Package: Base, Build Environment -Group: System/GUI/KDE +Requires: tdelibs-devel %{name} = %{version} %{name}-apps = %{version} %{name}-runtime = %{version} %{name}-workspace = %{version} +Summary: Trinity Base, Build Environment +Group: System/GUI/TDE %description devel -This package contains KDEbase, one of the basic packages of the K -Desktop Environment. It contains, among other things, KWIN, the KDE -window manager; Konqueror, the KDE web and file browser; and KControl, -the KDE configuration program. +This package contains the development files for the Trinity Desktop Environent Base Package, including runtime, workspace, and core applications. -This package is not needed if you do not want to compile high level KDE +It is not needed if you do not want to compile high level KDE applications. Authors: -------- + Timothy Pearson The KDE Team %package kdm License: GPLv2+ # usesubdirs kdm -Summary: The KDE login and display manager -Provides: kdebase3:/opt/kde3/bin/kdm -Provides: kdebase:/opt/kde2/bin/kdm -Provides: kdebase3-kdm-SLD:/opt/kde3/bin/kdm +Summary: The Trinity login and display manager +Provides: tdebase:%{_tde_bindir}/kdm Requires: xorg-x11 -Requires: kdebase3-runtime >= %version -Group: System/GUI/KDE +Requires: %{name}-runtime >= %version +Group: System/GUI/TDE PreReq: %fillup_prereq /bin/grep %description kdm -This package contains kdm, the login and session manager for KDE. - +This package contains kdm, the login and session manager for Trinity. +Note that the RC symlink for Trinity's KDM is /usr/sbin/tdm. Authors: -------- + Timothy Pearson The KDE Team %package samba License: GPLv2+ # usesubdirs kioslave/smb kcontrol/samba -Summary: KDE Base package: Windows Connection Module -Group: System/GUI/KDE +Summary: Trinity's Windows Connection Module +Group: System/GUI/TDE %description samba This package provides the "smb://" protocol, to connect to and from @@ -376,13 +345,14 @@ Windows and Samba shares. Authors: -------- + Timothy Pearson The KDE Team %package extra License: GPLv2+ # usesubdirs kpersonalizer kcontrol/thememgr -Summary: KDE Base package: Extra Applications -Group: System/GUI/KDE +Summary: Trinity's Extra Applications +Group: System/GUI/TDE %description extra This package contains applications which are usually not needed on @@ -396,17 +366,18 @@ SUSE. Authors: -------- + Timothy Pearson The KDE Team %package nsplugin License: GPLv2+ -%ifarch x86_64 ppc64 s390x ia64 +%ifarch x86_64 Requires: nspluginwrapper %endif -Supplements: kdebase3 >= %version -Requires: kdebase3 = %version -Summary: Netscape plugin support for KDE -Group: System/GUI/KDE +Supplements: tdebase >= %version +Requires: tdebase = %version +Summary: Netscape plugin support for Konqueror +Group: System/GUI/TDE %description nsplugin This package contains support for Netscape plug-ins in konqueror. You @@ -416,78 +387,57 @@ have to enable JavaScript for this. Authors: -------- + Timothy Pearson The KDE Team %package ksysguardd License: GPLv2+ PreReq: %insserv_prereq %fillup_prereq aaa_base -Summary: KDE base package: ksysguard daemon -Group: System/GUI/KDE -Provides: kdebase4-workspace-ksysguardd +Summary: Trinity's ksysguard daemon +Group: System/GUI/TDE %description ksysguardd This package contains the ksysguard daemon. It is needed for ksysguard. -This package can be installed on servers without any other KDE packages -to guard the system from remote computers. +This package can be installed on servers without any other Trinity +packages to guard the system from remote computers. Authors: -------- + Timothy Pearson The KDE Team %package session License: GPLv2+ -Summary: The KDE Session -Group: System/GUI/KDE -Provides: kdebase3:/usr/bin/kde +Summary: The Trinity Session +Group: System/GUI/TDE +Provides: tdebase:/usr/bin/tde Requires: kdebase3-workspace %description session -This package contains the startup scripts necessary to start a KDE -session from kdm. +This package contains the startup scripts necessary to start a Trinity +session from the login screen. Authors: -------- + Timothy Pearson The KDE Team -%if %suse_version < 1140 - -%package beagle -License: GPLv2+ -Summary: Beagle dependent plugins for KDE desktop -Group: System/GUI/KDE -Requires: beagle >= 0.3.0 -Requires: kdebase3-workspace = %version -Supplements: packageand(kdebase3-session:beagle) -BuildRequires: libbeagle-devel - -%description beagle -This package contains kdebase plugins which provide additional search -functionality via Beagle. - - - -Authors: --------- - The KDE Team - -%endif - %package -n fileshareset License: GPLv2+ Summary: Set and list fileshares Group: System/Management Version: 2.0 -Release: 578 +Release: 579 %description -n fileshareset -This package contains the the fileshareset utility to allow users to +This package contains the the fieshareset utility to allow users to add or remove file shares. It's also possible to list currently shared locations. /etc/security/fileshare.conf is the main configuration file. @@ -497,10 +447,8 @@ Authors: -------- Uwe Gansert -%define sysconfdir /etc - %prep -%setup -q -b 8 -b 13 -n kdebase-%{kde_version} +%setup -q -b 8 -b 13 -n tdebase-%{version} %patch0 %patch3 %patch5 @@ -543,10 +491,8 @@ Authors: # default-to-halt %patch81 %patch82 -%if %suse_version > 1010 %patch83 %patch77 -%endif %patch200 %patch215 %patch84 @@ -555,16 +501,9 @@ Authors: %patch22 %patch92 %patch88 -%if %suse_version > 1020 %patch96 -%else -%patch996 -%endif # xcursor %patch99 -%ifnarch %ix86 x86_64 -%patch80 -%endif %patch62 %patch69 %patch104 @@ -585,7 +524,6 @@ Authors: %patch156 %patch157 %patch160 -%if %suse_version > 1010 %patch161 pushd kicker %patch162 @@ -593,16 +531,10 @@ pushd ../kcontrol/kicker %patch158 popd popd -%if %suse_version > 1010 -%if %suse_version < 1140 -%patch159 -%endif -%endif %patch165 %patch166 %patch167 tar xvfj %SOURCE20 -%endif %patch163 %patch125 %patch169 @@ -614,15 +546,11 @@ tar xvfj %SOURCE20 %patch177 %patch179 %patch180 -%if %suse_version > 1010 %patch189 -%endif %patch190 %patch195 -%if %suse_version > 1020 %patch198 %patch199 -%endif %patch203 %patch204 %patch205 @@ -645,24 +573,13 @@ popd %patch206 %patch227 %patch228 -%if %suse_version > 1030 -%if %suse_version < 1140 -pushd kicker -%patch1629 -popd -%patch229 -%patch230 -%endif -%endif %patch231 %patch232 %patch233 %patch234 %patch235 %patch236 -%if %suse_version > 1010 %patch237 -%endif %patch238 %patch239 %patch240 -p1 @@ -674,105 +591,58 @@ popd rm -rf kappfinder rm pics/crystalsvg/cr??-*emacs.png cp %SOURCE17 l10n/tw/flag.png -. /etc/opt/kde3/common_options cd ../fileshareset2 aclocal autoconf automake -a -c -cd ../kdebase-%{kde_version} +cd ../%{name}-%{version} update_admin %build -. /etc/opt/kde3/common_options -DEBUG="--disable-debug" -FINAL="--enable-final" -PARANOIA="" -%ifnarch s390 -PARANOIA="--with-cdparanoia" -%endif - LDAP="--with-ldap" -%if %suse_version > 1010 - MOTIF_INCLUDE="/usr/include" -X_SERVER=/usr/bin/X RUN_KAPPFINDER=no \ -%else - MOTIF_INCLUDE="/usr/X11R6/include" -X_SERVER=/usr/X11R6/bin/X RUN_KAPPFINDER=no \ -%endif -./configure \ - $configkde \ - $PARANOIA \ - $LDAP \ - $FLAGS \ - $XINERAMA \ -%if %suse_version > 1010 - --with-motif-libraries=/usr/%{_lib}/ \ -%else - --with-motif-libraries=/usr/X11R6/%{_lib}/ \ -%endif - --with-motif-includes=$MOTIF_INCLUDE \ - --with-samba-libs \ - --with-pam=xdm \ - --with-kdm-xconsole \ - --with-kdm-pam=xdm \ - --with-kcp-pam=kcheckpass \ - --with-kss-pam=kcheckpass - do_make %{?_smp_mflags} + +%cmake_tde -d build -- -DCMAKE_SKIP_RPATH=OFF \ + -DWITH_HAL=OFF \ + -DWITH_LDAP=ON \ + -DWITH_ARTS=ON \ + -DWITH_SAMBA=ON \ + -DWITH_SASL=ON \ + -DWITH_LIBUSB=ON \ + -DWITH_PAM=ON \ + -DBUILD_ALL=ON + +%make_tde -d build + cd ../fileshareset2 ./configure --prefix=%{fileshare_prefix} make %{?_smp_mflags} %install -. /etc/opt/kde3/common_options # relabel smb icon grep -v ^Icon= kioslave/smb/smb-network.desktop | grep -v ^Name > w mv w kioslave/smb/smb-network.desktop echo "Icon=samba" >> kioslave/smb/smb-network.desktop echo "Name=SMB Shares" >> kioslave/smb/smb-network.desktop # install -do_make DESTDIR=$RPM_BUILD_ROOT $INSTALL_TARGET -rm $RPM_BUILD_ROOT/opt/kde3/share/applnk/System/kmenuedit.desktop -rm $RPM_BUILD_ROOT/opt/kde3/share/applnk/System/kpersonalizer.desktop -rm $RPM_BUILD_ROOT/opt/kde3/share/applnk/Utilities/kpager.desktop -rm $RPM_BUILD_ROOT/opt/kde3/share/applnk/Internet/keditbookmarks.desktop -rm $RPM_BUILD_ROOT/opt/kde3/share/applnk/Toys/ktip.desktop -install -m 0644 %SOURCE12 $RPM_BUILD_ROOT/opt/kde3/share/fonts/ -%if %suse_version > 1100 +%makeinstall_tde -d build +rm $RPM_BUILD_ROOT/%{_tde_appsdir}/System/kmenuedit.desktop +rm $RPM_BUILD_ROOT/%{_tde_appsdir}/System/kpersonalizer.desktop +rm $RPM_BUILD_ROOT/%{_tde_appsdir}/Utilities/kpager.desktop +rm $RPM_BUILD_ROOT/%{_tde_appsdir}/Internet/keditbookmarks.desktop +rm $RPM_BUILD_ROOT/%{_tde_appsdir}/Toys/ktip.desktop +install -m 0644 %SOURCE12 $RPM_BUILD_ROOT/%{_tde_sharedir}/fonts/ install -D -m 0644 %SOURCE21 $RPM_BUILD_ROOT/etc/pam.d/kcheckpass -%else -%if %suse_version > 1010 -install -D -m 0644 %SOURCE921 $RPM_BUILD_ROOT/etc/pam.d/kcheckpass -%else -install -D -m 0644 %SOURCE914 $RPM_BUILD_ROOT/etc/pam.d/xdm-np -install -D -m 0644 %SOURCE9921 $RPM_BUILD_ROOT/etc/pam.d/kcheckpass -%endif -%endif -install -m 0644 %SOURCE22 $RPM_BUILD_ROOT/opt/kde3/share/services/searchproviders/ -install -m 0644 %SOURCE23 $RPM_BUILD_ROOT/opt/kde3/share/services/searchproviders/ -%if %suse_version < 1011 -mkdir -p $RPM_BUILD_ROOT/usr/X11R6/bin -%endif -mkdir -p ${RPM_BUILD_ROOT}/usr/bin \ - ${RPM_BUILD_ROOT}/usr/sbin \ +install -m 0644 %SOURCE22 $RPM_BUILD_ROOT/%{_tde_servicesdir}/searchproviders/ +install -m 0644 %SOURCE23 $RPM_BUILD_ROOT/%{_tde_servicesdir}/searchproviders/ +mkdir -p ${RPM_BUILD_ROOT}/%{_bindir} \ + ${RPM_BUILD_ROOT}/%{_sbindir} \ ${RPM_BUILD_ROOT}/var/run/xdmctl -%if %suse_version > 1010 - ln -fs /opt/kde3/bin/startkde $RPM_BUILD_ROOT/usr/bin/kde - ln -fs /opt/kde3/bin/startkde $RPM_BUILD_ROOT/usr/bin/startkde3 -%else - ln -fs /opt/kde3/bin/startkde $RPM_BUILD_ROOT/usr/X11R6/bin/kde -%endif -ln -sf rcxdm ${RPM_BUILD_ROOT}/usr/sbin/rckdm -#%if %suse_version > 1020 -#rm ${RPM_BUILD_ROOT}/opt/kde3/bin/ksysguardd -#rm ${RPM_BUILD_ROOT}/etc/ksysguarddrc -#%else -mv ${RPM_BUILD_ROOT}/opt/kde3/bin/ksysguardd ${RPM_BUILD_ROOT}/usr/bin/ksysguardd -ln -sf /usr/bin/ksysguardd ${RPM_BUILD_ROOT}/opt/kde3/bin/ksysguardd -#%endif -install -d ${RPM_BUILD_ROOT}/opt/kde3/env -%if %suse_version < 1001 -install -m 0755 %SOURCE3 ${RPM_BUILD_ROOT}/opt/kde3/env -%endif -install -D -m 0755 %SOURCE16 ${RPM_BUILD_ROOT}/opt/kde3/shutdown/stopkde.suse.sh +ln -fs %{_tde_bindir}/startkde $RPM_BUILD_ROOT/usr/bin/tde +ln -fs %{_tde_bindir}/startkde $RPM_BUILD_ROOT/usr/bin/starttde +ln -sf rcxdm ${RPM_BUILD_ROOT}/usr/sbin/rctdm +mv ${RPM_BUILD_ROOT}/%{_tde_bindir}/ksysguardd ${RPM_BUILD_ROOT}/%{_bindir}/ksysguardd +ln -sf %{_bindir}/ksysguardd ${RPM_BUILD_ROOT}/%{_tde_bindir}/ksysguardd +install -d ${RPM_BUILD_ROOT}/%{_tde_prefix}/env +install -D -m 0755 %SOURCE16 ${RPM_BUILD_ROOT}/%{_tde_prefix}/shutdown/stopkde.suse.sh mkdir -p "${RPM_BUILD_ROOT}"/etc/security/ echo "RESTRICT=yes" > "${RPM_BUILD_ROOT}"/etc/security/fileshare.conf # @@ -780,71 +650,88 @@ echo "RESTRICT=yes" > "${RPM_BUILD_ROOT}"/etc/security/fileshare.conf # mkdir -p $RPM_BUILD_ROOT/var/adm/fillup-templates mkdir -p $RPM_BUILD_ROOT/etc/init.d/ -install -m 0644 %SOURCE9 ${RPM_BUILD_ROOT}/opt/kde3/share/apps/kdewizard/pics/wizard_small.png -#%if %suse_version < 1031 +install -m 0644 %SOURCE9 ${RPM_BUILD_ROOT}/%{_tde_datadir}/kdewizard/pics/wizard_small.png install -m 0744 %SOURCE6 $RPM_BUILD_ROOT/etc/init.d/ksysguardd -#%endif -mkdir -p $RPM_BUILD_ROOT/opt/kde3/share/apps/kdm/faces/ -ln -s ../pics/users/root1.png $RPM_BUILD_ROOT/opt/kde3/share/apps/kdm/faces/root.face.icon -ln -s ../pics/users/default2.png $RPM_BUILD_ROOT/opt/kde3/share/apps/kdm/faces/.default.face.icon -#%if %suse_version < 1031 -ln -sf /etc/init.d/ksysguardd $RPM_BUILD_ROOT/usr/sbin/rcksysguardd +mkdir -p $RPM_BUILD_ROOT/%{_tde_datadir}/kdm/faces/ +ln -s ../pics/users/root1.png $RPM_BUILD_ROOT/%{_tde_datadir}/kdm/faces/root.face.icon +ln -s ../pics/users/default2.png $RPM_BUILD_ROOT/%{_tde_datadir}/kdm/faces/.default.face.icon +ln -sf /etc/init.d/ksysguardd $RPM_BUILD_ROOT/%{_sbindir}/rcksysguardd install -D -m 644 %SOURCE15 $RPM_BUILD_ROOT/etc/slp.reg.d/ksysguardd.reg -#%endif # even if we use smbro -install -D -m 644 kioslave/smb/smb-network.desktop $RPM_BUILD_ROOT/opt/kde3/share/apps/konqueror/dirtree/remote/smb-network.desktop +install -D -m 644 kioslave/smb/smb-network.desktop $RPM_BUILD_ROOT/{%{_tde_datadir}/konqueror/dirtree/remote/smb-network.desktop # # install kde session file # install -m 0755 -d $RPM_BUILD_ROOT/usr/share/xsessions/ -mv $RPM_BUILD_ROOT/opt/kde3/share/apps/kdm/sessions/kde.desktop $RPM_BUILD_ROOT/usr/share/xsessions/ +mv $RPM_BUILD_ROOT/%{_tde_datadir}/kdm/sessions/tde.desktop $RPM_BUILD_ROOT/usr/share/xsessions/ # for those we have a package for remove the backup and rely on the package for wm in gnome xfce4 xfce wmaker blackbox fvwm95 fvwm icewm enlightenment; do - rm -f $RPM_BUILD_ROOT/opt/kde3/share/apps/kdm/sessions/$wm.desktop + rm -f $RPM_BUILD_ROOT/%{_tde_datadir}/kdm/sessions/$wm.desktop done -%suse_update_desktop_file $RPM_BUILD_ROOT/usr/share/xsessions/kde.desktop +%suse_update_desktop_file $RPM_BUILD_ROOT/usr/share/xsessions/tde.desktop # # delete unwanted/double files # -rm $RPM_BUILD_ROOT/opt/kde3/share/apps/kdesktop/DesktopLinks/Home.desktop -rm $RPM_BUILD_ROOT/opt/kde3/share/apps/kdesktop/DesktopLinks/System.desktop -rm $RPM_BUILD_ROOT/opt/kde3/share/icons/*/*/apps/kvirc.* -mkdir -p $RPM_BUILD_ROOT/usr/share -mv $RPM_BUILD_ROOT/opt/kde3/share/wallpapers $RPM_BUILD_ROOT/usr/share +rm $RPM_BUILD_ROOT/%{_tde_datadir}/kdesktop/DesktopLinks/Home.desktop +rm $RPM_BUILD_ROOT/%{_tde_datadir}/kdesktop/DesktopLinks/System.desktop +rm $RPM_BUILD_ROOT/%{_tde_iconsdir}/*/*/apps/kvirc.* +mkdir -p $RPM_BUILD_ROOT/%{_datadir} +mv $RPM_BUILD_ROOT/%{_tde_wallpapersdir} $RPM_BUILD_ROOT/%{_datadir} cd ../fileshareset2/src -rm -f $RPM_BUILD_ROOT/opt/kde3/bin/fileshare{set,list} +rm -f $RPM_BUILD_ROOT/%{_tde_bindir}/fileshare{set,list} make DESTDIR=$RPM_BUILD_ROOT install chmod 0755 $RPM_BUILD_ROOT/%{fileshare_prefix}/bin/fileshareset cd .. FILLUP_DIR=$RPM_BUILD_ROOT/var/adm/fillup-templates -install -m 644 -D %SOURCE4 $FILLUP_DIR/sysconfig.windowmanager-kdebase3 -mkdir -p $RPM_BUILD_ROOT/opt/kde3/share/icons/hicolor/{16x16,22x22,32x32,48x48,64x64,128x128}/apps/ -for i in {16,32,48,64,128}; do cp $BUILD_ROOT/opt/kde3/share/icons/crystalsvg/"$i"x"$i"/mimetypes/misc.png $RPM_BUILD_ROOT/opt/kde3/share/icons/hicolor/"$i"x"$i"/apps/kcmcomponentchooser.png;done -for i in {16,22,32,48,128}; do cp $BUILD_ROOT/opt/kde3/share/icons/crystalsvg/"$i"x"$i"/actions/launch.png $RPM_BUILD_ROOT/opt/kde3/share/icons/hicolor/"$i"x"$i"/apps/kcmperformance.png;done -cp $BUILD_ROOT/opt/kde3/share/icons/crystalsvg/16x16/actions/services.png $RPM_BUILD_ROOT/opt/kde3/share/icons/hicolor/16x16/apps/kcmkded.png -for i in {16,22,32,48}; do cp $BUILD_ROOT/opt/kde3/share/icons/crystalsvg/"$i"x"$i"/actions/exit.png $RPM_BUILD_ROOT/opt/kde3/share/icons/hicolor/"$i"x"$i"/apps/kcmsmserver.png;done -for i in {16,22,32}; do cp $BUILD_ROOT/opt/kde3/share/icons/crystalsvg/"$i"x"$i"/actions/spellcheck.png $RPM_BUILD_ROOT/opt/kde3/share/icons/hicolor/"$i"x"$i"/apps/kcmspellchecking.png;done -for i in {16,22,32,48,64,128}; do cp $BUILD_ROOT/opt/kde3/share/icons/crystalsvg/"$i"x"$i"/filesystems/desktop.png $RPM_BUILD_ROOT/opt/kde3/share/icons/hicolor/"$i"x"$i"/apps/kcmdesktopbehavior.png;done -for i in {16,22,32,48,64,128}; do cp $BUILD_ROOT/opt/kde3/share/icons/crystalsvg/"$i"x"$i"/filesystems/desktop.png $RPM_BUILD_ROOT/opt/kde3/share/icons/hicolor/"$i"x"$i"/apps/kcmdesktop.png;done -for i in {16,22,32,48,64,128}; do cp $BUILD_ROOT/opt/kde3/share/icons/crystalsvg/"$i"x"$i"/apps/kmenu.png $RPM_BUILD_ROOT/opt/kde3/share/icons/hicolor/"$i"x"$i"/apps/kcmtaskbar.png;done -for i in {16,22,32,48,64,128}; do cp $BUILD_ROOT/opt/kde3/share/icons/crystalsvg/"$i"x"$i"/mimetypes/colorscm.png $RPM_BUILD_ROOT/opt/kde3/share/icons/hicolor/"$i"x"$i"/apps/kcmcolors.png;done -for i in {16,22,32,48,128}; do cp $BUILD_ROOT/opt/kde3/share/icons/crystalsvg/"$i"x"$i"/actions/launch.png $RPM_BUILD_ROOT/opt/kde3/share/icons/hicolor/"$i"x"$i"/apps/kcmlaunch.png;done -for i in {16,22,32}; do cp $BUILD_ROOT/opt/kde3/share/icons/crystalsvg/"$i"x"$i"/actions/filter.png $RPM_BUILD_ROOT/opt/kde3/share/icons/hicolor/"$i"x"$i"/apps/kcmkhtml_filter.png;done -for i in {16,22,32}; do cp $BUILD_ROOT/opt/kde3/share/icons/crystalsvg/"$i"x"$i"/actions/run.png $RPM_BUILD_ROOT/opt/kde3/share/icons/hicolor/"$i"x"$i"/apps/kcmcgi.png;done -for i in {16,22}; do cp $BUILD_ROOT/opt/kde3/share/icons/crystalsvg/"$i"x"$i"/actions/history.png $RPM_BUILD_ROOT/opt/kde3/share/icons/hicolor/"$i"x"$i"/apps/kcmhistory.png;done -for i in {16,22,32,48,64,128}; do cp $BUILD_ROOT/opt/kde3/share/icons/crystalsvg/"$i"x"$i"/filesystems/network.png $RPM_BUILD_ROOT/opt/kde3/share/icons/hicolor/"$i"x"$i"/apps/kcmnetpref.png;done -for i in {16,32,48,64,128}; do cp $BUILD_ROOT/opt/kde3/share/icons/crystalsvg/"$i"x"$i"/devices/blockdevice.png $RPM_BUILD_ROOT/opt/kde3/share/icons/hicolor/"$i"x"$i"/apps/kcmkdnssd.png;done -for i in {16,22,32,48,64}; do cp $BUILD_ROOT/opt/kde3/share/icons/crystalsvg/"$i"x"$i"/devices/joystick.png $RPM_BUILD_ROOT/opt/kde3/share/icons/hicolor/"$i"x"$i"/apps/kcmjoystick.png;done -for i in {16,32,48,64,128}; do cp $BUILD_ROOT/opt/kde3/share/icons/crystalsvg/"$i"x"$i"/devices/mouse.png $RPM_BUILD_ROOT/opt/kde3/share/icons/hicolor/"$i"x"$i"/apps/kcmmouse.png;done -for i in {16,22,32,48,64,128}; do cp $BUILD_ROOT/opt/kde3/share/icons/crystalsvg/"$i"x"$i"/devices/system.png $RPM_BUILD_ROOT/opt/kde3/share/icons/hicolor/"$i"x"$i"/apps/kcmmedia.png;done -for i in {16,22,32}; do cp $BUILD_ROOT/opt/kde3/share/icons/crystalsvg/"$i"x"$i"/actions/encrypted.png $RPM_BUILD_ROOT/opt/kde3/share/icons/hicolor/"$i"x"$i"/apps/kcmcrypto.png;done -for i in {16,22,32,48,64,128}; do cp $BUILD_ROOT/opt/kde3/share/icons/crystalsvg/"$i"x"$i"/filesystems/trashcan_empty.png $RPM_BUILD_ROOT/opt/kde3/share/icons/hicolor/"$i"x"$i"/apps/kcmprivacy.png;done -for i in {16,22,32,48,64,128}; do cp $BUILD_ROOT/opt/kde3/share/icons/crystalsvg/"$i"x"$i"/filesystems/network.png $RPM_BUILD_ROOT/opt/kde3/share/icons/hicolor/"$i"x"$i"/apps/kcmnic.png;done +install -m 644 -D %SOURCE4 $FILLUP_DIR/sysconfig.windowmanager-tdebase +mkdir -p $RPM_BUILD_ROOT/%{_tde_iconsdir}/hicolor/{16x16,22x22,32x32,48x48,64x64,128x128}/apps/ + +for i in {16,32,48,64,128}; do cp %{buildroot}/%{_tde_iconsdir}/crystalsvg/"$i"x"$i"/mimetypes/misc.png $RPM_BUILD_ROOT/%{_tde_iconsdir}/hicolor/"$i"x"$i"/apps/kcmcomponentchooser.png;done + +for i in {16,22,32,48,128}; do cp %{buildroot}/%{_tde_iconsdir}/crystalsvg/"$i"x"$i"/actions/launch.png $RPM_BUILD_ROOT/%{_tde_iconsdir}/hicolor/"$i"x"$i"/apps/kcmperformance.png;done + +cp %{buildroot}/%{_tde_iconsdir}/crystalsvg/16x16/actions/services.png $RPM_BUILD_ROOT/%{_tde_iconsdir}/hicolor/16x16/apps/kcmkded.png + +for i in {16,22,32,48}; do cp %{buildroot}/%{_tde_iconsdir}/crystalsvg/"$i"x"$i"/actions/exit.png $RPM_BUILD_ROOT/%{_tde_iconsdir}/hicolor/"$i"x"$i"/apps/kcmsmserver.png;done + +for i in {16,22,32}; do cp %{buildroot}/%{_tde_iconsdir}/crystalsvg/"$i"x"$i"/actions/spellcheck.png $RPM_BUILD_ROOT/%{_tde_iconsdir}/hicolor/"$i"x"$i"/apps/kcmspellchecking.png;done + +for i in {16,22,32,48,64,128}; do cp %{buildroot}/%{_tde_iconsdir}/crystalsvg/"$i"x"$i"/filesystems/desktop.png $RPM_BUILD_ROOT/%{_tde_iconsdir}/hicolor/"$i"x"$i"/apps/kcmdesktopbehavior.png;done + +for i in {16,22,32,48,64,128}; do cp %{buildroot}/%{_tde_iconsdir}/crystalsvg/"$i"x"$i"/filesystems/desktop.png $RPM_BUILD_ROOT/%{_tde_iconsdir}/hicolor/"$i"x"$i"/apps/kcmdesktop.png;done + +for i in {16,22,32,48,64,128}; do cp %{buildroot}/%{_tde_iconsdir}/crystalsvg/"$i"x"$i"/apps/kmenu.png $RPM_BUILD_ROOT/%{_tde_iconsdir}/hicolor/"$i"x"$i"/apps/kcmtaskbar.png;done + +for i in {16,22,32,48,64,128}; do cp %{buildroot}/%{_tde_iconsdir}/crystalsvg/"$i"x"$i"/mimetypes/colorscm.png $RPM_BUILD_ROOT/%{_tde_iconsdir}/hicolor/"$i"x"$i"/apps/kcmcolors.png;done + +for i in {16,22,32,48,128}; do cp %{buildroot}/%{_tde_iconsdir}/crystalsvg/"$i"x"$i"/actions/launch.png $RPM_BUILD_ROOT/%{_tde_iconsdir}/hicolor/"$i"x"$i"/apps/kcmlaunch.png;done + +for i in {16,22,32}; do cp %{buildroot}/%{_tde_iconsdir}/crystalsvg/"$i"x"$i"/actions/filter.png $RPM_BUILD_ROOT/%{_tde_iconsdir}/hicolor/"$i"x"$i"/apps/kcmkhtml_filter.png;done + +for i in {16,22,32}; do cp %{buildroot}/%{_tde_iconsdir}/crystalsvg/"$i"x"$i"/actions/run.png $RPM_BUILD_ROOT/%{_tde_iconsdir}/hicolor/"$i"x"$i"/apps/kcmcgi.png;done + +for i in {16,22}; do cp %{buildroot}/%{_tde_iconsdir}/crystalsvg/"$i"x"$i"/actions/history.png $RPM_BUILD_ROOT/%{_tde_iconsdir}/hicolor/"$i"x"$i"/apps/kcmhistory.png;done + +for i in {16,22,32,48,64,128}; do cp %{buildroot}/%{_tde_iconsdir}/crystalsvg/"$i"x"$i"/filesystems/network.png $RPM_BUILD_ROOT/%{_tde_iconsdir}/hicolor/"$i"x"$i"/apps/kcmnetpref.png;done + +for i in {16,32,48,64,128}; do cp %{buildroot}/%{_tde_iconsdir}/crystalsvg/"$i"x"$i"/devices/blockdevice.png $RPM_BUILD_ROOT/%{_tde_iconsdir}/hicolor/"$i"x"$i"/apps/kcmkdnssd.png;done + +for i in {16,22,32,48,64}; do cp %{buildroot}/%{_tde_iconsdir}/crystalsvg/"$i"x"$i"/devices/joystick.png $RPM_BUILD_ROOT/%{_tde_iconsdir}/hicolor/"$i"x"$i"/apps/kcmjoystick.png;done + +for i in {16,32,48,64,128}; do cp %{buildroot}/%{_tde_iconsdir}/crystalsvg/"$i"x"$i"/devices/mouse.png $RPM_BUILD_ROOT/%{_tde_iconsdir}/hicolor/"$i"x"$i"/apps/kcmmouse.png;done + +for i in {16,22,32,48,64,128}; do cp %{buildroot}/%{_tde_iconsdir}/crystalsvg/"$i"x"$i"/devices/system.png $RPM_BUILD_ROOT/%{_tde_iconsdir}/hicolor/"$i"x"$i"/apps/kcmmedia.png;done + +for i in {16,22,32}; do cp %{buildroot}/%{_tde_iconsdir}/crystalsvg/"$i"x"$i"/actions/encrypted.png $RPM_BUILD_ROOT/%{_tde_iconsdir}/hicolor/"$i"x"$i"/apps/kcmcrypto.png;done + +for i in {16,22,32,48,64,128}; do cp %{buildroot}/%{_tde_iconsdir}/crystalsvg/"$i"x"$i"/filesystems/trashcan_empty.png $RPM_BUILD_ROOT/%{_tde_iconsdir}/hicolor/"$i"x"$i"/apps/kcmprivacy.png;done + +for i in {16,22,32,48,64,128}; do cp %{buildroot}/%{_tde_iconsdir}/crystalsvg/"$i"x"$i"/filesystems/network.png $RPM_BUILD_ROOT/%{_tde_iconsdir}/hicolor/"$i"x"$i"/apps/kcmnic.png;done # # solve file conflicts with theme packages ... # -mv $RPM_BUILD_ROOT/opt/kde3/share/apps/ksplash/pics $RPM_BUILD_ROOT/opt/kde3/share/apps/ksplash/pics-default -ln -s pics-default $RPM_BUILD_ROOT/opt/kde3/share/apps/ksplash/pics +mv $RPM_BUILD_ROOT/%{_tde_datadir}/ksplash/pics $RPM_BUILD_ROOT/%{_tde_datadir}/ksplash/pics-default +ln -s pics-default $RPM_BUILD_ROOT/%{_tde_datadir}/ksplash/pics chmod 0755 $RPM_BUILD_ROOT/%{fileshare_prefix}/bin/fileshareset %suse_update_desktop_file kate TextEditor %suse_update_desktop_file kwrite TextEditor @@ -870,34 +757,34 @@ chmod 0755 $RPM_BUILD_ROOT/%{fileshare_prefix}/bin/fileshareset %suse_update_desktop_file knetattach System Network %suse_update_desktop_file -r kfontview Graphics Viewer %suse_update_desktop_file -r krandrtray Applet X-KDE-settings-desktop -%suse_update_desktop_file $RPM_BUILD_ROOT/opt/kde3/share/apps/remoteview/smb-network.desktop -for i in $RPM_BUILD_ROOT/opt/kde3/share/applnk/System/ScreenSavers/*.desktop ; do +%suse_update_desktop_file $RPM_BUILD_ROOT/%{_tde_datadir}/remoteview/smb-network.desktop +for i in $RPM_BUILD_ROOT/%{_tde_appsdir}/System/ScreenSavers/*.desktop ; do sed -e '/^\[Desktop Entry\]/a\ Categories=Screensaver;' $i > ${i}_ mv ${i}_ $i %suse_update_desktop_file "$i" done -install -d $RPM_BUILD_ROOT/opt/kde3/share/applnk/apps -ln -sf /opt/kde3/share/applnk/System/ScreenSavers $RPM_BUILD_ROOT/opt/kde3/share/applnk/apps/ScreenSavers - -for i in $RPM_BUILD_ROOT/opt/kde3/share/applications/kde/*.desktop \ - $RPM_BUILD_ROOT/opt/kde3/share/apps/konqueror/servicemenus/*.desktop \ - $RPM_BUILD_ROOT/opt/kde3/share/apps/kicker/*/*.desktop \ - $RPM_BUILD_ROOT/opt/kde3/share/apps/kicker/*/*/*.desktop \ - $RPM_BUILD_ROOT/opt/kde3/share/apps/kicker/*/*/*.desktop \ - $RPM_BUILD_ROOT/usr/share/wallpapers/*.desktop \ - $RPM_BUILD_ROOT/opt/kde3/share/apps/konqsidebartng/virtual_folders/services/*.desktop; do +install -d $RPM_BUILD_ROOT/%{_tde_appsdir}/apps +ln -sf %{_tde_appsdir}/System/ScreenSavers $RPM_BUILD_ROOT/%{_tde_appsdir}/apps/ScreenSavers + +for i in $RPM_BUILD_ROOT/%{_tde_applicationsdir}/kde/*.desktop \ + $RPM_BUILD_ROOT/%{_tde_datadir}/konqueror/servicemenus/*.desktop \ + $RPM_BUILD_ROOT/%{_tde_datadir}/kicker/*/*.desktop \ + $RPM_BUILD_ROOT/%{_tde_datadir}/kicker/*/*/*.desktop \ + $RPM_BUILD_ROOT/%{_tde_datadir}/kicker/*/*/*.desktop \ + $RPM_BUILD_ROOT/%{_datadir}/wallpapers/*.desktop \ + $RPM_BUILD_ROOT/%{_tde_datadir}/konqsidebartng/virtual_folders/services/*.desktop; do [ "`sed -n '/^\[Desktop Entry\]/,/^\[/ s,NoDisplay=\(.*\),\1,p' "$i"`" = "true" ] && continue [ "`sed -n '/^\[Desktop Entry\]/,/^\[/ s,Hidden=\(.*\),\1,p' "$i"`" = "true" ] && continue grep -q X-SuSE-translate "$i" && continue %suse_update_desktop_file "$i" done -rm -f $RPM_BUILD_ROOT/opt/kde3/share/config/kdm/README -rm -f $RPM_BUILD_ROOT/opt/kde3/share/apps/kdm/sessions/icewm.desktop +rm -f $RPM_BUILD_ROOT/%{_tde_configdir}/kdm/README +rm -f $RPM_BUILD_ROOT/%{_tde_datadir}/kdm/sessions/icewm.desktop # # gimp 2.0 does have a different named icon # -for i in $RPM_BUILD_ROOT//opt/kde3/share/icons/*/*/apps/gimp.png; do +for i in $RPM_BUILD_ROOT/%{_tde_iconsdir}/*/*/apps/gimp.png; do ln "$i" "${i%/*}/wilber-icon.png" done mkdir -p -m 755 $RPM_BUILD_ROOT/%_mandir/man8 @@ -908,33 +795,33 @@ rm $RPM_BUILD_ROOT/%_mandir/man1/kate.* rm $RPM_BUILD_ROOT/%_mandir/man1/kdesu.* rm $RPM_BUILD_ROOT/%_mandir/man1/kbookmarkmerger.* rm $RPM_BUILD_ROOT/%_mandir/man1/kfind.* -kde_post_install -%if %suse_version > 1020 -%fdupes $RPM_BUILD_ROOT/opt/kde3/share -%endif +%tde_post_install +%fdupes $RPM_BUILD_ROOT/%{_tde_sharedir} # move konqueror.desktop back to old position (#281572) -mv $RPM_BUILD_ROOT/opt/kde3/share/applications/kde/konqueror.desktop $RPM_BUILD_ROOT/opt/kde3/share/applnk/konqueror.desktop - -%if 0%{?with_hal} == 0 -cp -f %{SOURCE24} $RPM_BUILD_ROOT/opt/kde3/bin -chmod +x $RPM_BUILD_ROOT/opt/kde3/bin/devmon-automounter.sh -sed -i 5i\ '/opt/kde3/bin/devmon-automounter.sh &' $RPM_BUILD_ROOT/opt/kde3/bin/startkde -%endif +mv $RPM_BUILD_ROOT/%{_tde_applicationsdir}/kde/konqueror.desktop $RPM_BUILD_ROOT/%{_tde_appsdir}/konqueror.desktop + +# while this script uses udisks, it's better to be fully integrated +# into Trinity. +#%if 0%{?with_hal} == 0 +#cp -f %{SOURCE24} $RPM_BUILD_ROOT/opt/kde3/bin +#chmod +x $RPM_BUILD_ROOT/opt/kde3/bin/devmon-automounter.sh +#sed -i 5i\ '/opt/kde3/bin/devmon-automounter.sh &' $RPM_BUILD_ROOT/opt/kde3/bin/startkde +#%endif %pre # we have this as link -if test -e opt/kde3/share/apps/ksplash/pics -a ! -L opt/kde3/share/apps/ksplash/pics ; +if test -e opt/tde/share/apps/ksplash/pics -a ! -L opt/tde/share/apps/ksplash/pics ; then - if test -e opt/kde3/share/apps/ksplash/pics-default; then - rm -rf opt/kde3/share/apps/ksplash/pics + if test -e opt/tde/share/apps/ksplash/pics-default; then + rm -rf opt/tde/share/apps/ksplash/pics else - mv opt/kde3/share/apps/ksplash/pics opt/kde3/share/apps/ksplash/pics-default + mv opt/tde/share/apps/ksplash/pics opt/tde/share/apps/ksplash/pics-default fi fi -kdmrc=/opt/kde3/share/config/kdm/kdmrc -# if the /opt/kde3 one is obviously wrong and we have one in /etc we move that one over to +kdmrc=/opt/tde/share/config/kdm/kdmrc +# if the /opt/tde one is obviously wrong and we have one in /etc we move that one over to # avoid confusion on update what's the right kdmrc -if test -f $kdmrc && grep -q "Session=/opt/kde3/share/config/kdm/Xsession" $kdmrc && test -f /etc$kdmrc; then +if test -f $kdmrc && grep -q "Session=/opt/tde/share/config/kdm/Xsession" $kdmrc && test -f /etc$kdmrc; then mv /etc$kdmrc $kdmrc fi @@ -943,12 +830,12 @@ fi %run_permissions %post kdm -%{fillup_only -an windowmanager-kdebase3} -/opt/kde3/bin/genkdmconf +%{fillup_only -an windowmanager-tdebase} +/opt/tde/bin/genkdmconf if test -f /etc/sysconfig/displaymanager ; then . /etc/sysconfig/displaymanager fi -%{fillup_only -n displaymanager -s kdebase3-SuSE} +%{fillup_only -n displaymanager -s tdebase-SuSE} %{remove_and_set -n displaymanager KDM_SHUTDOWN} if test -n "$KDM_SHUTDOWN" -a "$KDM_SHUTDOWN" != "no"; then if test "$KDM_SHUTDOWN" = "local" ; then @@ -970,31 +857,12 @@ fi %postun %insserv_cleanup /sbin/ldconfig -%if %suse_version < 1031 - -%post ksysguardd -%{fillup_and_insserv -sn kdebase3-ksysguardd ksysguardd RUN_KSYSGUARDD} -%verifyscript -%verify_permissions -e /opt/kde3/bin/kcheckpass -%verify_permissions -e /opt/kde3/bin/kdesud -%verify_permissions -e /opt/kde3/bin/khc_indexbuilder - -%postun ksysguardd -%restart_on_update ksysguardd -%insserv_cleanup - -%preun ksysguardd -%stop_on_removal ksysguardd -%endif %post runtime -p /sbin/ldconfig %postun runtime -p /sbin/ldconfig %post workspace -p /sbin/ldconfig -%if %suse_version > 1110 && 0%{?with_hal} > 0 -chkconfig haldaemon on -%endif %postun workspace -p /sbin/ldconfig @@ -1008,566 +876,511 @@ rm -rf $RPM_BUILD_ROOT %files -n misc-console-font %defattr(-,root,root) %doc COPYING -/opt/kde3/share/fonts/console8x16.pcf.gz +%{_tde_sharedir}/fonts/console8x16.pcf.gz %files %defattr(-,root,root) %doc AUTHORS COPYING README README.pam ../lame.spec ../README.mp3 -%exclude /opt/kde3/share/fonts/console8x16.pcf.gz -%dir /opt/kde3/share/icons/hicolor/* -%dir /opt/kde3/%_lib/kconf_update_bin -%dir /opt/kde3/share/apps/plugin -%dir /opt/kde3/share/applnk/ -%dir /opt/kde3/share/applnk/Settings -%dir /opt/kde3/share/applnk/Settings/WebBrowsing -%dir /opt/kde3/share/applnk/System/ScreenSavers -%dir /opt/kde3/share/applnk/apps -/opt/kde3/share/applnk/apps/ScreenSavers +%exclude %{_tde_sharedir}/fonts/console8x16.pcf.gz +%dir %{_tde_iconsdir}/hicolor/* +%dir %{_tde_libdir}/kconf_update_bin +%dir %{_tde_datadir}/plugin +%dir %{_tde_appsdir} +%dir %{_tde_appsdir}/Settings +%dir %{_tde_appsdir}/Settings/WebBrowsing +%dir %{_tde_appsdir}/System/ScreenSavers +%dir %{_tde_appsdir}/apps +%{_tde_appsdir}/apps/ScreenSavers /etc/xdg/menus/*.menu /etc/xdg/menus/applications-merged -%verify(not mode) %attr(2755,root,nogroup) /opt/kde3/bin/kdesud -%verify(not mode) %attr(0755,root,man) /opt/kde3/bin/khc_indexbuilder -/opt/kde3/env -/opt/kde3/bin/arts-start -/opt/kde3/bin/drkonqi -/opt/kde3/bin/kaccess -/opt/kde3/bin/kblankscrn.kss -/opt/kde3/bin/kbookmarkmerger -/opt/kde3/bin/kcminit -/opt/kde3/bin/kcminit_startup -/opt/kde3/%_lib/kde3/kcminit_startup.* -/opt/kde3/bin/kcontrol* -/opt/kde3/bin/kdeinstallktheme -/opt/kde3/bin/kdepasswd -/opt/kde3/bin/kdcop -/opt/kde3/bin/kdebugdialog -/opt/kde3/bin/kdeeject -/opt/kde3/bin/kdeprintfax -/opt/kde3/bin/keditfiletype -/opt/kde3/bin/khelpcenter -/opt/kde3/bin/kjobviewer -/opt/kde3/bin/kcheckrunning -/opt/kde3/bin/kpm -/opt/kde3/bin/krandom.kss -/opt/kde3/bin/krdb -/opt/kde3/bin/kxkb -/opt/kde3/bin/kdialog -/opt/kde3/bin/klocaldomainurifilterhelper -/opt/kde3/bin/kio_media_mounthelper -/opt/kde3/bin/knetattach -/opt/kde3/bin/ktrash -/opt/kde3/bin/khc_docbookdig.pl -/opt/kde3/bin/khc_mansearch.pl -/opt/kde3/bin/khc_htdig.pl -/opt/kde3/bin/khc_htsearch.pl -/opt/kde3/bin/kapplymousetheme -/opt/kde3/bin/kio_system_documenthelper -%if %suse_version > 1010 -/opt/kde3/bin/runupdater -%endif -/opt/kde3/bin/kstart -/opt/kde3/bin/ksystraycmd -/opt/kde3/%_lib/kde3/cursorthumbnail.* -/opt/kde3/%_lib/kde3/htmlthumbnail.* -/opt/kde3/%_lib/kde3/imagethumbnail.* -/opt/kde3/%_lib/kde3/kcm_a* -/opt/kde3/%_lib/kde3/kcm_bell* -/opt/kde3/%_lib/kde3/kcm_keyboard* -/opt/kde3/%_lib/kde3/kcm_c* -/opt/kde3/%_lib/kde3/kcm_d* -/opt/kde3/%_lib/kde3/kcm_e* -/opt/kde3/%_lib/kde3/kcm_f* -/opt/kde3/%_lib/kde3/kcm_h* -/opt/kde3/%_lib/kde3/kcm_i* -/opt/kde3/%_lib/kde3/kcm_l* -/opt/kde3/%_lib/kde3/kcm_nic.* -/opt/kde3/%_lib/kde3/kcm_p* -/opt/kde3/%_lib/kde3/kcm_smserver.* -/opt/kde3/%_lib/kde3/kcm_spellchecking.* -/opt/kde3/%_lib/kde3/kcm_style.* -/opt/kde3/%_lib/kde3/kcm_usb.* -/opt/kde3/%_lib/kde3/khelpcenter.* -/opt/kde3/%_lib/kde3/kcm_xinerama.* -/opt/kde3/%_lib/kde3/kxkb.* -/opt/kde3/%_lib/kde3/djvuthumbnail.* -/opt/kde3/%_lib/kde3/kaccess.* -/opt/kde3/%_lib/kde3/kcminit.* -/opt/kde3/%_lib/kde3/kcm_nsplugins.* -/opt/kde3/%_lib/kde3/kcontrol.* -/opt/kde3/%_lib/kde3/keditbookmarks.* -/opt/kde3/%_lib/kde3/kfmclient.* -/opt/kde3/%_lib/kde3/kjobviewer.* -/opt/kde3/%_lib/kde3/kprinter.* -/opt/kde3/%_lib/kde3/libkdeprint_part.* -/opt/kde3/%_lib/kde3/libkshorturifilter.* -/opt/kde3/%_lib/kde3/libkuri* -/opt/kde3/%_lib/kde3/libkonsolepart.* -/opt/kde3/%_lib/kde3/textthumbnail.* -/opt/kde3/%_lib/kde3/kcm_joystick.* -/opt/kde3/%_lib/kde3/kcm_useraccount.* -/opt/kde3/%_lib/kde3/kcontroledit.* -/opt/kde3/%_lib/kde3/kded_kwrited.* -/opt/kde3/%_lib/kde3/kstyle_keramik_config.* -/opt/kde3/%_lib/kde3/libkmanpart.* -/opt/kde3/%_lib/kde3/liblocaldomainurifilter.* -%if %suse_version > 1010 -/opt/kde3/%_lib/kde3/runupdater.* -/opt/kde3/%_lib/libkdeinit_runupdater.so -%endif -/opt/kde3/%_lib/libkdeinit_kaccess.so -/opt/kde3/%_lib/libkdeinit_kcminit.so -/opt/kde3/%_lib/libkdeinit_kcminit_startup.so -/opt/kde3/%_lib/libkdeinit_kcontrol.so -/opt/kde3/%_lib/libkdeinit_kcontroledit.so -/opt/kde3/%_lib/libkdeinit_keditbookmarks.so -/opt/kde3/%_lib/libkdeinit_kfmclient.so -/opt/kde3/%_lib/libkdeinit_khelpcenter.so -/opt/kde3/%_lib/libkdeinit_kjobviewer.so -/opt/kde3/%_lib/libkdeinit_kxkb.so -/opt/kde3/%_lib/kde3/libnsplugin.* -/opt/kde3/%_lib/kde3/kded_remotedirnotify.* -/opt/kde3/%_lib/kde3/kded_systemdirnotify.* -/opt/kde3/%_lib/kde3/libkhtmlkttsdplugin.* -/opt/kde3/%_lib/kde3/kcm_media.la -/opt/kde3/%_lib/kde3/kcm_media.so -/opt/kde3/%_lib/kde3/kded_homedirnotify.la -/opt/kde3/%_lib/kde3/kded_homedirnotify.so -/opt/kde3/%_lib/kde3/kded_medianotifier.la -/opt/kde3/%_lib/kde3/kded_medianotifier.so -%if 0%{?with_hal} > 0 -/opt/kde3/%_lib/kde3/media_propsdlgplugin.* -%endif -/opt/kde3/%_lib/kde3/kcm_kded.* -/opt/kde3/%_lib/kde3/kcm_kdnssd.* -/opt/kde3/%_lib/kde3/kcm_keyboard.* -/opt/kde3/%_lib/kde3/kcm_keys.* -/opt/kde3/%_lib/kde3/kcm_kio.* -/opt/kde3/%_lib/kde3/kcm_knotify.* -/opt/kde3/%_lib/kde3/kcm_konq.* -/opt/kde3/%_lib/kde3/kcm_konqhtml.* -/opt/kde3/%_lib/kde3/kcm_kthememanager.* -/opt/kde3/%_lib/kde3/kcm_kurifilt.* -/opt/kde3/share/applications/kde/khtml_filter.desktop -/opt/kde3/share/applications/kde/media.desktop -/opt/kde3/share/applications/kde/joystick.desktop -/opt/kde3/share/applications/kde/kcm_useraccount.desktop -/opt/kde3/share/applications/kde/kdepasswd.desktop -/opt/kde3/share/applications/kde/kthememanager.desktop -/opt/kde3/share/applications/kde/Help.desktop -/opt/kde3/share/applications/kde/KControl.desktop -/opt/kde3/share/applications/kde/arts.desktop -/opt/kde3/share/applications/kde/bell.desktop -/opt/kde3/share/applications/kde/cache.desktop -/opt/kde3/share/applications/kde/colors.desktop -/opt/kde3/share/applications/kde/componentchooser.desktop -/opt/kde3/share/applications/kde/cookies.desktop -/opt/kde3/share/applications/kde/crypto.desktop -/opt/kde3/share/applications/kde/display.desktop -/opt/kde3/share/applications/kde/dma.desktop -/opt/kde3/share/applications/kde/ebrowsing.desktop -/opt/kde3/share/applications/kde/filebrowser.desktop -/opt/kde3/share/applications/kde/filetypes.desktop -/opt/kde3/share/applications/kde/fonts.desktop -/opt/kde3/share/applications/kde/clock.desktop -/opt/kde3/share/applications/kde/icons.desktop -/opt/kde3/share/applications/kde/interrupts.desktop -/opt/kde3/share/applications/kde/installktheme.desktop -/opt/kde3/share/applications/kde/ioports.desktop -/opt/kde3/share/applications/kde/ioslaveinfo.desktop -/opt/kde3/share/applications/kde/kcmaccess.desktop -/opt/kde3/share/applications/kde/kcmcgi.desktop -/opt/kde3/share/applications/kde/kcmcss.desktop -/opt/kde3/share/applications/kde/kcmhistory.desktop -/opt/kde3/share/applications/kde/kcmkded.desktop -/opt/kde3/share/applications/kde/kcmlaunch.desktop -/opt/kde3/share/applications/kde/kcm_kdnssd.desktop -/opt/kde3/share/applications/kde/kcmnotify.desktop -/opt/kde3/share/applications/kde/kcmperformance.desktop -/opt/kde3/share/applications/kde/kcmusb.desktop -/opt/kde3/share/applications/kde/kdeprintfax.desktop -/opt/kde3/share/applications/kde/keyboard.desktop -/opt/kde3/share/applications/kde/keyboard_layout.desktop -/opt/kde3/share/applications/kde/keys.desktop -/opt/kde3/share/applications/kde/kfmclient.desktop -/opt/kde3/share/applications/kde/kfmclient_dir.desktop -/opt/kde3/share/applications/kde/kfmclient_html.desktop -/opt/kde3/share/applications/kde/kfmclient_war.desktop -/opt/kde3/share/applications/kde/khtml_behavior.desktop -/opt/kde3/share/applications/kde/khtml_fonts.desktop -/opt/kde3/share/applications/kde/khtml_java_js.desktop -/opt/kde3/share/applications/kde/khtml_plugins.desktop -/opt/kde3/share/applications/kde/kjobviewer.desktop -/opt/kde3/share/applications/kde/lanbrowser.desktop -/opt/kde3/share/applications/kde/language.desktop -/opt/kde3/share/applications/kde/memory.desktop -/opt/kde3/share/applications/kde/mouse.desktop -/opt/kde3/share/applications/kde/netpref.desktop -/opt/kde3/share/applications/kde/nic.desktop -/opt/kde3/share/applications/kde/partitions.desktop -/opt/kde3/share/applications/kde/pci.desktop -/opt/kde3/share/applications/kde/printers.desktop -/opt/kde3/share/applications/kde/privacy.desktop -/opt/kde3/share/applications/kde/processor.desktop -/opt/kde3/share/applications/kde/proxy.desktop -/opt/kde3/share/applications/kde/scsi.desktop -/opt/kde3/share/applications/kde/smbstatus.desktop -/opt/kde3/share/applications/kde/sound.desktop -/opt/kde3/share/applications/kde/spellchecking.desktop -/opt/kde3/share/applications/kde/style.desktop -/opt/kde3/share/applications/kde/useragent.desktop -/opt/kde3/share/applications/kde/xserver.desktop -/opt/kde3/share/applications/kde/cdinfo.desktop -/opt/kde3/share/applnk/.hidden -/opt/kde3/share/applnk/Settings/Information -/opt/kde3/share/applnk/Settings/LookNFeel -/opt/kde3/share/applnk/Settings/WebBrowsing/khtml_appearance.desktop -/opt/kde3/share/applnk/Settings/WebBrowsing/smb.desktop -/opt/kde3/share/apps/drkonqi -/opt/kde3/share/apps/kc* -/opt/kde3/share/apps/kdcop -/opt/kde3/share/apps/kdeprint* -/opt/kde3/share/apps/kdewizard -/opt/kde3/share/apps/kdisplay -/opt/kde3/share/apps/khelpcenter/searchhandlers/docbook.desktop -/opt/kde3/share/apps/khelpcenter -/opt/kde3/share/apps/kio* -/opt/kde3/share/apps/kjobviewer -/opt/kde3/share/apps/konsole -/opt/kde3/share/apps/khtml/kpartplugins -/opt/kde3/share/apps/kthememanager -/opt/kde3/share/apps/remoteview -/opt/kde3/share/apps/systemview -/opt/kde3/share/apps/kaccess -/opt/kde3/share/config.kcfg/klaunch.kcfg -/opt/kde3/share/config.kcfg/khelpcenter.kcfg -/opt/kde3/share/config.kcfg/keditbookmarks.kcfg -/opt/kde3/share/config.kcfg/launcherapplet.kcfg -/opt/kde3/share/config.kcfg/mediamanagersettings.kcfg -/opt/kde3/share/mimelnk/inode/system_directory.desktop -/opt/kde3/share/services/kded/remotedirnotify.desktop -/opt/kde3/share/services/kded/systemdirnotify.desktop -%if 0%{?with_hal} > 0 -/opt/kde3/share/services/media_propsdlgplugin.desktop - -%endif -%config(noreplace) /opt/kde3/share/config/kshorturifilterrc -%config(noreplace) /opt/kde3/share/config/kxkb_groups -/opt/kde3/share/desktop-directories -%exclude /opt/kde3/share/doc/HTML/en/kioslave -%dir /opt/kde3/share/fonts -%dir /opt/kde3/share/fonts/override -%verify(not md5 size mtime) /opt/kde3/share/fonts/override/fonts.dir -%dir /opt/kde3/share/icons/*/*/* -/opt/kde3/share/config.kcfg/kcm_useraccount.kcfg -/opt/kde3/share/config.kcfg/kcm_useraccount_pass.kcfg -%exclude /opt/kde3/share/icons/*/*/*/style.* -%exclude /opt/kde3/share/icons/*/*/*/looknfeel.* -%exclude /opt/kde3/share/icons/*/*/*/energy.* -%exclude /opt/kde3/share/icons/*/*/*/date.* -%exclude /opt/kde3/share/icons/*/*/*/filetypes.* -%exclude /opt/kde3/share/icons/*/*/*/personal.* -/opt/kde3/share/icons/*/*/*/a*.* -/opt/kde3/share/icons/*/*/*/b*.* -/opt/kde3/share/icons/*/*/*/c*.* -/opt/kde3/share/icons/*/*/*/d*.* -/opt/kde3/share/icons/*/*/*/f*.* -/opt/kde3/share/icons/*/*/*/g*.* -/opt/kde3/share/icons/*/*/*/help_index.* -/opt/kde3/share/icons/*/*/*/icons.* -/opt/kde3/share/icons/*/*/*/input_devices_settings.* -/opt/kde3/share/icons/*/*/*/kcmx.* -/opt/kde3/share/icons/*/*/*/kcmdf.* -/opt/kde3/share/icons/*/*/*/kbinaryclock.* -/opt/kde3/share/icons/*/*/apps/kcmcgi.* -/opt/kde3/share/icons/*/*/apps/kcmcolors.* -/opt/kde3/share/icons/*/*/apps/kcmcomponentchooser.* -/opt/kde3/share/icons/*/*/apps/kcmcrypto.* -/opt/kde3/share/icons/*/*/apps/kcmhistory.* -/opt/kde3/share/icons/*/*/apps/kcmjoystick.* -/opt/kde3/share/icons/*/*/apps/kcmkded.* -/opt/kde3/share/icons/*/*/apps/kcmkdnssd.* -/opt/kde3/share/icons/*/*/apps/kcmkhtml_filter.* -/opt/kde3/share/icons/*/*/apps/kcmlaunch.* -/opt/kde3/share/icons/*/*/apps/kcmmedia.* -/opt/kde3/share/icons/*/*/apps/kcmmouse.* -/opt/kde3/share/icons/*/*/apps/kcmnetpref.* -/opt/kde3/share/icons/*/*/apps/kcmnic.* -/opt/kde3/share/icons/*/*/apps/kcmperformance.* -/opt/kde3/share/icons/*/*/apps/kcmprivacy.* -/opt/kde3/share/icons/*/*/apps/kcmspellchecking.* -/opt/kde3/share/icons/*/*/*/ieee1394.* -/opt/kde3/share/icons/*/*/*/kdeprintfax.* -/opt/kde3/share/icons/*/*/*/kdisknav.* -/opt/kde3/share/icons/*/*/*/knetattach.* -/opt/kde3/share/icons/*/*/*/key_bindings.* -/opt/kde3/share/icons/*/*/*/keyboard_layout.* -/opt/kde3/share/icons/*/*/*/kfm_home.* -/opt/kde3/share/icons/*/*/*/khelpcenter.* -/opt/kde3/share/icons/*/*/*/kjobviewer.* -/opt/kde3/share/icons/*/*/*/konsole.* -/opt/kde3/share/icons/*/*/*/l*.* -/opt/kde3/share/icons/*/*/*/m*.* -/opt/kde3/share/icons/*/*/*/ne*.* -/opt/kde3/share/icons/*/*/*/opera.* -/opt/kde3/share/icons/*/*/*/r*.* -/opt/kde3/share/icons/*/*/*/s*.* -/opt/kde3/share/icons/*/*/*/usb.* -/opt/kde3/share/icons/*/*/*/vnc.* -/opt/kde3/share/icons/*/*/*/w*.* -/opt/kde3/share/icons/*/*/*/e*.* -/opt/kde3/share/icons/*/*/*/kcmdevices.* -/opt/kde3/share/icons/*/*/*/kcmdrkonqi.* -/opt/kde3/share/icons/*/*/*/kcmmemory.* -/opt/kde3/share/icons/*/*/*/kcmmidi.* -/opt/kde3/share/icons/*/*/*/kcmpartitions.* -/opt/kde3/share/icons/*/*/*/kcmpci.* -/opt/kde3/share/icons/*/*/*/kcmprocessor.* -/opt/kde3/share/icons/*/*/*/kcmscsi.* -/opt/kde3/share/icons/*/*/*/kthememgr.* -/opt/kde3/share/icons/*/*/*/kcontrol.* -/opt/kde3/share/icons/*/*/*/kxkb.* -/opt/kde3/share/icons/*/*/*/p*.* -/opt/kde3/share/icons/*/*/*/t*.* -/opt/kde3/share/icons/*/*/*/qtella.* -/opt/kde3/share/icons/*/*/*/x*.* +%verify(not mode) %attr(2755,root,nogroup) %{_tde_bindir}/kdesud +%verify(not mode) %attr(0755,root,man) %{_tde_bindir}/khc_indexbuilder +%{_tde_prefix}/env +%{_tde_bindir}/arts-start +%{_tde_bindir}/drkonqi +%{_tde_bindir}/kaccess +%{_tde_bindir}/kblankscrn.kss +%{_tde_bindir}/kbookmarkmerger +%{_tde_bindir}/kcminit +%{_tde_bindir}/kcminit_startup +%{_tde_modulesdir}/kcminit_startup.* +%{_tde_bindir}/kcontrol* +%{_tde_bindir}/kdeinstallktheme +%{_tde_bindir}/kdepasswd +%{_tde_bindir}/kdcop +%{_tde_bindir}/kdebugdialog +%{_tde_bindir}/kdeeject +%{_tde_bindir}/kdeprintfax +%{_tde_bindir}/keditfiletype +%{_tde_bindir}/khelpcenter +%{_tde_bindir}/kjobviewer +%{_tde_bindir}/kcheckrunning +%{_tde_bindir}/kpm +%{_tde_bindir}/krandom.kss +%{_tde_bindir}/krdb +%{_tde_bindir}/kxkb +%{_tde_bindir}/kdialog +%{_tde_bindir}/klocaldomainurifilterhelper +%{_tde_bindir}/kio_media_mounthelper +%{_tde_bindir}/knetattach +%{_tde_bindir}/ktrash +%{_tde_bindir}/khc_docbookdig.pl +%{_tde_bindir}/khc_mansearch.pl +%{_tde_bindir}/khc_htdig.pl +%{_tde_bindir}/khc_htsearch.pl +%{_tde_bindir}/kapplymousetheme +%{_tde_bindir}/kio_system_documenthelper +%{_tde_bindir}/runupdater +%{_tde_bindir}/kstart +%{_tde_bindir}/ksystraycmd +%{_tde_modulesdir}/cursorthumbnail.* +%{_tde_modulesdir}/htmlthumbnail.* +%{_tde_modulesdir}/imagethumbnail.* +%{_tde_modulesdir}/kcm_a* +%{_tde_modulesdir}/kcm_bell* +%{_tde_modulesdir}/kcm_keyboard* +%{_tde_modulesdir}/kcm_c* +%{_tde_modulesdir}/kcm_d* +%{_tde_modulesdir}/kcm_e* +%{_tde_modulesdir}/kcm_f* +%{_tde_modulesdir}/kcm_h* +%{_tde_modulesdir}/kcm_i* +%{_tde_modulesdir}/kcm_l* +%{_tde_modulesdir}/kcm_nic.* +%{_tde_modulesdir}/kcm_p* +%{_tde_modulesdir}/kcm_smserver.* +%{_tde_modulesdir}/kcm_spellchecking.* +%{_tde_modulesdir}/kcm_style.* +%{_tde_modulesdir}/kcm_usb.* +%{_tde_modulesdir}/khelpcenter.* +%{_tde_modulesdir}/kcm_xinerama.* +%{_tde_modulesdir}/kxkb.* +%{_tde_modulesdir}/djvuthumbnail.* +%{_tde_modulesdir}/kaccess.* +%{_tde_modulesdir}/kcminit.* +%{_tde_modulesdir}/kcm_nsplugins.* +%{_tde_modulesdir}/kcontrol.* +%{_tde_modulesdir}/keditbookmarks.* +%{_tde_modulesdir}/kfmclient.* +%{_tde_modulesdir}/kjobviewer.* +%{_tde_modulesdir}/kprinter.* +%{_tde_modulesdir}/libkdeprint_part.* +%{_tde_modulesdir}/libkshorturifilter.* +%{_tde_modulesdir}/libkuri* +%{_tde_modulesdir}/libkonsolepart.* +%{_tde_modulesdir}/textthumbnail.* +%{_tde_modulesdir}/kcm_joystick.* +%{_tde_modulesdir}/kcm_useraccount.* +%{_tde_modulesdir}/kcontroledit.* +%{_tde_modulesdir}/kded_kwrited.* +%{_tde_modulesdir}/kstyle_keramik_config.* +%{_tde_modulesdir}/libkmanpart.* +%{_tde_modulesdir}/liblocaldomainurifilter.* +%{_tde_modulesdir}/runupdater.* +%{_tde_libdir}/libkdeinit_runupdater.so +%{_tde_libdir}/libkdeinit_kaccess.so +%{_tde_libdir}/libkdeinit_kcminit.so +%{_tde_libdir}/libkdeinit_kcminit_startup.so +%{_tde_libdir}/libkdeinit_kcontrol.so +%{_tde_libdir}/libkdeinit_kcontroledit.so +%{_tde_libdir}/libkdeinit_keditbookmarks.so +%{_tde_libdir}/libkdeinit_kfmclient.so +%{_tde_libdir}/libkdeinit_khelpcenter.so +%{_tde_libdir}/libkdeinit_kjobviewer.so +%{_tde_libdir}/libkdeinit_kxkb.so +%{_tde_modulesdir}/libnsplugin.* +%{_tde_modulesdir}/kded_remotedirnotify.* +%{_tde_modulesdir}/kded_systemdirnotify.* +%{_tde_modulesdir}/libkhtmlkttsdplugin.* +%{_tde_modulesdir}/kcm_media.la +%{_tde_modulesdir}/kcm_media.so +%{_tde_modulesdir}/kded_homedirnotify.la +%{_tde_modulesdir}/kded_homedirnotify.so +%{_tde_modulesdir}/kded_medianotifier.la +%{_tde_modulesdir}/kded_medianotifier.so +%{_tde_modulesdir}/kcm_kded.* +%{_tde_modulesdir}/kcm_kdnssd.* +%{_tde_modulesdir}/kcm_keyboard.* +%{_tde_modulesdir}/kcm_keys.* +%{_tde_modulesdir}/kcm_kio.* +%{_tde_modulesdir}/kcm_knotify.* +%{_tde_modulesdir}/kcm_konq.* +%{_tde_modulesdir}/kcm_konqhtml.* +%{_tde_modulesdir}/kcm_kthememanager.* +%{_tde_modulesdir}/kcm_kurifilt.* +%{_tde_applicationsdir}/kde/khtml_filter.desktop +%{_tde_applicationsdir}/kde/media.desktop +%{_tde_applicationsdir}/kde/joystick.desktop +%{_tde_applicationsdir}/kde/kcm_useraccount.desktop +%{_tde_applicationsdir}/kde/kdepasswd.desktop +%{_tde_applicationsdir}/kde/kthememanager.desktop +%{_tde_applicationsdir}/kde/Help.desktop +%{_tde_applicationsdir}/kde/KControl.desktop +%{_tde_applicationsdir}/kde/arts.desktop +%{_tde_applicationsdir}/kde/bell.desktop +%{_tde_applicationsdir}/kde/cache.desktop +%{_tde_applicationsdir}/kde/colors.desktop +%{_tde_applicationsdir}/kde/componentchooser.desktop +%{_tde_applicationsdir}/kde/cookies.desktop +%{_tde_applicationsdir}/kde/crypto.desktop +%{_tde_applicationsdir}/kde/display.desktop +%{_tde_applicationsdir}/kde/dma.desktop +%{_tde_applicationsdir}/kde/ebrowsing.desktop +%{_tde_applicationsdir}/kde/filebrowser.desktop +%{_tde_applicationsdir}/kde/filetypes.desktop +%{_tde_applicationsdir}/kde/fonts.desktop +%{_tde_applicationsdir}/kde/clock.desktop +%{_tde_applicationsdir}/kde/icons.desktop +%{_tde_applicationsdir}/kde/interrupts.desktop +%{_tde_applicationsdir}/kde/installktheme.desktop +%{_tde_applicationsdir}/kde/ioports.desktop +%{_tde_applicationsdir}/kde/ioslaveinfo.desktop +%{_tde_applicationsdir}/kde/kcmaccess.desktop +%{_tde_applicationsdir}/kde/kcmcgi.desktop +%{_tde_applicationsdir}/kde/kcmcss.desktop +%{_tde_applicationsdir}/kde/kcmhistory.desktop +%{_tde_applicationsdir}/kde/kcmkded.desktop +%{_tde_applicationsdir}/kde/kcmlaunch.desktop +%{_tde_applicationsdir}/kde/kcm_kdnssd.desktop +%{_tde_applicationsdir}/kde/kcmnotify.desktop +%{_tde_applicationsdir}/kde/kcmperformance.desktop +%{_tde_applicationsdir}/kde/kcmusb.desktop +%{_tde_applicationsdir}/kde/kdeprintfax.desktop +%{_tde_applicationsdir}/kde/keyboard.desktop +%{_tde_applicationsdir}/kde/keyboard_layout.desktop +%{_tde_applicationsdir}/kde/keys.desktop +%{_tde_applicationsdir}/kde/kfmclient.desktop +%{_tde_applicationsdir}/kde/kfmclient_dir.desktop +%{_tde_applicationsdir}/kde/kfmclient_html.desktop +%{_tde_applicationsdir}/kde/kfmclient_war.desktop +%{_tde_applicationsdir}/kde/khtml_behavior.desktop +%{_tde_applicationsdir}/kde/khtml_fonts.desktop +%{_tde_applicationsdir}/kde/khtml_java_js.desktop +%{_tde_applicationsdir}/kde/khtml_plugins.desktop +%{_tde_applicationsdir}/kde/kjobviewer.desktop +%{_tde_applicationsdir}/kde/lanbrowser.desktop +%{_tde_applicationsdir}/kde/language.desktop +%{_tde_applicationsdir}/kde/memory.desktop +%{_tde_applicationsdir}/kde/mouse.desktop +%{_tde_applicationsdir}/kde/netpref.desktop +%{_tde_applicationsdir}/kde/nic.desktop +%{_tde_applicationsdir}/kde/partitions.desktop +%{_tde_applicationsdir}/kde/pci.desktop +%{_tde_applicationsdir}/kde/printers.desktop +%{_tde_applicationsdir}/kde/privacy.desktop +%{_tde_applicationsdir}/kde/processor.desktop +%{_tde_applicationsdir}/kde/proxy.desktop +%{_tde_applicationsdir}/kde/scsi.desktop +%{_tde_applicationsdir}/kde/smbstatus.desktop +%{_tde_applicationsdir}/kde/sound.desktop +%{_tde_applicationsdir}/kde/spellchecking.desktop +%{_tde_applicationsdir}/kde/style.desktop +%{_tde_applicationsdir}/kde/useragent.desktop +%{_tde_applicationsdir}/kde/xserver.desktop +%{_tde_applicationsdir}/kde/cdinfo.desktop +%{_tde_appsdir}/.hidden +%{_tde_appsdir}/Settings/Information +%{_tde_appsdir}/Settings/LookNFeel +%{_tde_appsdir}/Settings/WebBrowsing/khtml_appearance.desktop +%{_tde_appsdir}/Settings/WebBrowsing/smb.desktop +%{_tde_datadir}/drkonqi +%{_tde_datadir}/kc* +%{_tde_datadir}/kdcop +%{_tde_datadir}/kdeprint* +%{_tde_datadir}/kdewizard +%{_tde_datadir}/kdisplay +%{_tde_datadir}/khelpcenter/searchhandlers/docbook.desktop +%{_tde_datadir}/khelpcenter +%{_tde_datadir}/kio* +%{_tde_datadir}/kjobviewer +%{_tde_datadir}/konsole +%{_tde_datadir}/khtml/kpartplugins +%{_tde_datadir}/kthememanager +%{_tde_datadir}/remoteview +%{_tde_datadir}/systemview +%{_tde_datadir}/kaccess +%{_tde_configdir}.kcfg/klaunch.kcfg +%{_tde_configdir}.kcfg/khelpcenter.kcfg +%{_tde_configdir}.kcfg/keditbookmarks.kcfg +%{_tde_configdir}.kcfg/launcherapplet.kcfg +%{_tde_configdir}.kcfg/mediamanagersettings.kcfg +%{_tde_mimedir}/inode/system_directory.desktop +%{_tde_servicesdir}/kded/remotedirnotify.desktop +%{_tde_servicesdir}/kded/systemdirnotify.desktop +%config(noreplace) %{_tde_configdir}/kshorturifilterrc +%config(noreplace) %{_tde_configdir}/kxkb_groups +%{_tde_sharedir}/desktop-directories +%exclude %{_tde_htmldir}/en/kioslave +%dir %{_tde_sharedir}/fonts +%dir %{_tde_sharedir}/fonts/override +%verify(not md5 size mtime) %{_tde_sharedir}/fonts/override/fonts.dir +%dir %{_tde_iconsdir}/*/*/* +%{_tde_configdir}.kcfg/kcm_useraccount.kcfg +%{_tde_configdir}.kcfg/kcm_useraccount_pass.kcfg +%exclude %{_tde_iconsdir}/*/*/*/style.* +%exclude %{_tde_iconsdir}/*/*/*/looknfeel.* +%exclude %{_tde_iconsdir}/*/*/*/energy.* +%exclude %{_tde_iconsdir}/*/*/*/date.* +%exclude %{_tde_iconsdir}/*/*/*/filetypes.* +%exclude %{_tde_iconsdir}/*/*/*/personal.* +%{_tde_iconsdir}/*/*/*/a*.* +%{_tde_iconsdir}/*/*/*/b*.* +%{_tde_iconsdir}/*/*/*/c*.* +%{_tde_iconsdir}/*/*/*/d*.* +%{_tde_iconsdir}/*/*/*/f*.* +%{_tde_iconsdir}/*/*/*/g*.* +%{_tde_iconsdir}/*/*/*/help_index.* +%{_tde_iconsdir}/*/*/*/icons.* +%{_tde_iconsdir}/*/*/*/input_devices_settings.* +%{_tde_iconsdir}/*/*/*/kcmx.* +%{_tde_iconsdir}/*/*/*/kcmdf.* +%{_tde_iconsdir}/*/*/*/kbinaryclock.* +%{_tde_iconsdir}/*/*/apps/kcmcgi.* +%{_tde_iconsdir}/*/*/apps/kcmcolors.* +%{_tde_iconsdir}/*/*/apps/kcmcomponentchooser.* +%{_tde_iconsdir}/*/*/apps/kcmcrypto.* +%{_tde_iconsdir}/*/*/apps/kcmhistory.* +%{_tde_iconsdir}/*/*/apps/kcmjoystick.* +%{_tde_iconsdir}/*/*/apps/kcmkded.* +%{_tde_iconsdir}/*/*/apps/kcmkdnssd.* +%{_tde_iconsdir}/*/*/apps/kcmkhtml_filter.* +%{_tde_iconsdir}/*/*/apps/kcmlaunch.* +%{_tde_iconsdir}/*/*/apps/kcmmedia.* +%{_tde_iconsdir}/*/*/apps/kcmmouse.* +%{_tde_iconsdir}/*/*/apps/kcmnetpref.* +%{_tde_iconsdir}/*/*/apps/kcmnic.* +%{_tde_iconsdir}/*/*/apps/kcmperformance.* +%{_tde_iconsdir}/*/*/apps/kcmprivacy.* +%{_tde_iconsdir}/*/*/apps/kcmspellchecking.* +%{_tde_iconsdir}/*/*/*/ieee1394.* +%{_tde_iconsdir}/*/*/*/kdeprintfax.* +%{_tde_iconsdir}/*/*/*/kdisknav.* +%{_tde_iconsdir}/*/*/*/knetattach.* +%{_tde_iconsdir}/*/*/*/key_bindings.* +%{_tde_iconsdir}/*/*/*/keyboard_layout.* +%{_tde_iconsdir}/*/*/*/kfm_home.* +%{_tde_iconsdir}/*/*/*/khelpcenter.* +%{_tde_iconsdir}/*/*/*/kjobviewer.* +%{_tde_iconsdir}/*/*/*/konsole.* +%{_tde_iconsdir}/*/*/*/l*.* +%{_tde_iconsdir}/*/*/*/m*.* +%{_tde_iconsdir}/*/*/*/ne*.* +%{_tde_iconsdir}/*/*/*/opera.* +%{_tde_iconsdir}/*/*/*/r*.* +%{_tde_iconsdir}/*/*/*/s*.* +%{_tde_iconsdir}/*/*/*/usb.* +%{_tde_iconsdir}/*/*/*/vnc.* +%{_tde_iconsdir}/*/*/*/w*.* +%{_tde_iconsdir}/*/*/*/e*.* +%{_tde_iconsdir}/*/*/*/kcmdevices.* +%{_tde_iconsdir}/*/*/*/kcmdrkonqi.* +%{_tde_iconsdir}/*/*/*/kcmmemory.* +%{_tde_iconsdir}/*/*/*/kcmmidi.* +%{_tde_iconsdir}/*/*/*/kcmpartitions.* +%{_tde_iconsdir}/*/*/*/kcmpci.* +%{_tde_iconsdir}/*/*/*/kcmprocessor.* +%{_tde_iconsdir}/*/*/*/kcmscsi.* +%{_tde_iconsdir}/*/*/*/kthememgr.* +%{_tde_iconsdir}/*/*/*/kcontrol.* +%{_tde_iconsdir}/*/*/*/kxkb.* +%{_tde_iconsdir}/*/*/*/p*.* +%{_tde_iconsdir}/*/*/*/t*.* +%{_tde_iconsdir}/*/*/*/qtella.* +%{_tde_iconsdir}/*/*/*/x*.* # these have no PNG -/opt/kde3/share/icons/*/scalable/apps/hardware.svgz -/opt/kde3/share/icons/*/scalable/apps/kate2.svgz -/opt/kde3/share/icons/*/scalable/apps/kwrite2.svgz -/opt/kde3/share/icons/*/scalable/apps/openoffice.svgz -/opt/kde3/share/icons/*/scalable/apps/quicktime.svgz -/opt/kde3/share/locale -/opt/kde3/share/mimelnk/application/x-konsole.desktop -/opt/kde3/share/mimelnk/application/x-ktheme.desktop -/opt/kde3/share/mimelnk/application/x-smb-server.desktop -/opt/kde3/share/mimelnk/print -/opt/kde3/share/services/textthumbnail.desktop -/opt/kde3/share/services/htmlthumbnail.desktop -/opt/kde3/share/services/ka*.desktop -/opt/kde3/share/services/kdeprint_part.desktop -/opt/kde3/share/services/konsolepart.desktop -/opt/kde3/share/services/konsole-script.desktop -/opt/kde3/share/services/kshorturifilter.desktop -/opt/kde3/share/services/ku*.desktop -/opt/kde3/share/services/searchproviders -/opt/kde3/share/services/useragentstrings -/opt/kde3/share/services/imagethumbnail.desktop -/opt/kde3/share/services/kxkb.desktop -/opt/kde3/share/services/kmanpart.desktop -/opt/kde3/share/services/localdomainurifilter.desktop -/opt/kde3/share/services/kwrited.desktop -/opt/kde3/share/services/djvuthumbnail.desktop -/opt/kde3/share/services/kded/kwrited.desktop -/opt/kde3/share/servicetypes/terminalemulator.desktop -/opt/kde3/share/servicetypes/kateplugin.desktop -/opt/kde3/share/servicetypes/findpart.desktop -/opt/kde3/share/servicetypes/searchprovider.desktop -/opt/kde3/share/servicetypes/thumbcreator.desktop -/opt/kde3/share/servicetypes/uasprovider.desktop -%exclude /opt/kde3/share/sounds/KDE_Close_Window* -%exclude /opt/kde3/share/sounds/KDE_Dialog* -%exclude /opt/kde3/share/sounds/KDE_Desktop* -%exclude /opt/kde3/share/sounds/KDE_Logout* -%exclude /opt/kde3/share/sounds/KDE_Startup* -%exclude /opt/kde3/share/sounds/KDE_Window* -/opt/kde3/share/sounds -/opt/kde3/share/templates -/opt/kde3/share/services/khelpcenter.desktop -/opt/kde3/bin/keditbookmarks -/opt/kde3/bin/kfm* -/opt/kde3/share/apps/kbookmark -/opt/kde3/share/apps/keditbookmarks -/opt/kde3/share/icons/*/*/*/keditbookmarks.* -/opt/kde3/share/icons/*/*/*/kfm.* -/opt/kde3/share/icons/*/*/*/konqueror.* -/opt/kde3/share/services/konq* -/opt/kde3/share/servicetypes/konq* -/opt/kde3/share/services/cursorthumbnail.desktop -/opt/kde3/%_lib/kde3/kcm_randr.* -/opt/kde3/bin/krandrtray -/opt/kde3/share/applications/kde/krandrtray.desktop -/opt/kde3/%_lib/kde3/kded_mediamanager.* -/opt/kde3/%_lib/kde3/kfile_media.* -/opt/kde3/%_lib/kde3/kfile_trash.* -/opt/kde3/share/applications/kde/devices.desktop -/opt/kde3/share/applications/kde/knetattach.desktop -/opt/kde3/share/applications/kde/opengl.desktop -/opt/kde3/share/icons/*/*/*/kcmopengl.* -/opt/kde3/share/mimelnk/media -/opt/kde3/share/services/kded/mediamanager.desktop -/opt/kde3/share/services/kded/homedirnotify.desktop -/opt/kde3/share/services/kded/medianotifier.desktop -/opt/kde3/share/services/kfile_media.desktop -/opt/kde3/share/services/kfile_trash.desktop -/opt/kde3/share/services/kfile_trash_system.desktop -/opt/kde3/share/mimelnk/fonts/package.desktop -/opt/kde3/%_lib/kde3/exrthumbnail.* -/opt/kde3/share/services/exrthumbnail.desktop -%dir /opt/kde3/share/mimelnk/fonts -/opt/kde3/bin/kfontinst -/opt/kde3/%_lib/kde3/fontthumbnail.* -/opt/kde3/%_lib/kde3/kfile_font.* -/opt/kde3/%_lib/kde3/libkfontviewpart.* -%dir /opt/kde3/share/apps/kfontview -/opt/kde3/share/apps/kfontview/kfontviewpart.rc -/opt/kde3/share/applications/kde/kcmfontinst.desktop -/opt/kde3/share/mimelnk/fonts/folder.desktop -/opt/kde3/share/mimelnk/fonts/system-folder.desktop -/opt/kde3/share/services/fontthumbnail.desktop -/opt/kde3/share/services/kfile_font.desktop -/opt/kde3/share/services/kfontviewpart.desktop +%{_tde_iconsdir}/*/scalable/apps/hardware.svgz +%{_tde_iconsdir}/*/scalable/apps/kate2.svgz +%{_tde_iconsdir}/*/scalable/apps/kwrite2.svgz +%{_tde_iconsdir}/*/scalable/apps/openoffice.svgz +%{_tde_iconsdir}/*/scalable/apps/quicktime.svgz +%{_tde_sharedir}/locale +%{_tde_mimedir}/application/x-konsole.desktop +%{_tde_mimedir}/application/x-ktheme.desktop +%{_tde_mimedir}/application/x-smb-server.desktop +%{_tde_mimedir}/print +%{_tde_servicesdir}/textthumbnail.desktop +%{_tde_servicesdir}/htmlthumbnail.desktop +%{_tde_servicesdir}/ka*.desktop +%{_tde_servicesdir}/kdeprint_part.desktop +%{_tde_servicesdir}/konsolepart.desktop +%{_tde_servicesdir}/konsole-script.desktop +%{_tde_servicesdir}/kshorturifilter.desktop +%{_tde_servicesdir}/ku*.desktop +%{_tde_servicesdir}/searchproviders +%{_tde_servicesdir}/useragentstrings +%{_tde_servicesdir}/imagethumbnail.desktop +%{_tde_servicesdir}/kxkb.desktop +%{_tde_servicesdir}/kmanpart.desktop +%{_tde_servicesdir}/localdomainurifilter.desktop +%{_tde_servicesdir}/kwrited.desktop +%{_tde_servicesdir}/djvuthumbnail.desktop +%{_tde_servicesdir}/kded/kwrited.desktop +%{_tde_servicetypesdir}/terminalemulator.desktop +%{_tde_servicetypesdir}/kateplugin.desktop +%{_tde_servicetypesdir}/findpart.desktop +%{_tde_servicetypesdir}/searchprovider.desktop +%{_tde_servicetypesdir}/thumbcreator.desktop +%{_tde_servicetypesdir}/uasprovider.desktop +%exclude %{_tde_sounddir}/KDE_Close_Window* +%exclude %{_tde_sounddir}/KDE_Dialog* +%exclude %{_tde_sounddir}/KDE_Desktop* +%exclude %{_tde_sounddir}/KDE_Logout* +%exclude %{_tde_sounddir}/KDE_Startup* +%exclude %{_tde_sounddir}/KDE_Window* +%{_tde_sounddir} +%{_tde_sharedir}/templates +%{_tde_servicesdir}/khelpcenter.desktop +%{_tde_bindir}/keditbookmarks +%{_tde_bindir}/kfm* +%{_tde_datadir}/kbookmark +%{_tde_datadir}/keditbookmarks +%{_tde_iconsdir}/*/*/*/keditbookmarks.* +%{_tde_iconsdir}/*/*/*/kfm.* +%{_tde_iconsdir}/*/*/*/konqueror.* +%{_tde_servicesdir}/konq* +%{_tde_servicetypesdir}/konq* +%{_tde_servicesdir}/cursorthumbnail.desktop +%{_tde_modulesdir}/kcm_randr.* +%{_tde_bindir}/krandrtray +%{_tde_applicationsdir}/kde/krandrtray.desktop +%{_tde_modulesdir}/kded_mediamanager.* +%{_tde_modulesdir}/kfile_media.* +%{_tde_modulesdir}/kfile_trash.* +%{_tde_applicationsdir}/kde/devices.desktop +%{_tde_applicationsdir}/kde/knetattach.desktop +%{_tde_applicationsdir}/kde/opengl.desktop +%{_tde_iconsdir}/*/*/*/kcmopengl.* +%{_tde_mimedir}/media +%{_tde_servicesdir}/kded/mediamanager.desktop +%{_tde_servicesdir}/kded/homedirnotify.desktop +%{_tde_servicesdir}/kded/medianotifier.desktop +%{_tde_servicesdir}/kfile_media.desktop +%{_tde_servicesdir}/kfile_trash.desktop +%{_tde_servicesdir}/kfile_trash_system.desktop +%{_tde_mimedir}/fonts/package.desktop +%{_tde_modulesdir}/exrthumbnail.* +%{_tde_servicesdir}/exrthumbnail.desktop +%dir %{_tde_mimedir}/fonts +%{_tde_bindir}/kfontinst +%{_tde_modulesdir}/fontthumbnail.* +%{_tde_modulesdir}/kfile_font.* +%{_tde_modulesdir}/libkfontviewpart.* +%dir %{_tde_datadir}/kfontview +%{_tde_datadir}/kfontview/kfontviewpart.rc +%{_tde_applicationsdir}/kde/kcmfontinst.desktop +%{_tde_mimedir}/fonts/folder.desktop +%{_tde_mimedir}/fonts/system-folder.desktop +%{_tde_servicesdir}/fontthumbnail.desktop +%{_tde_servicesdir}/kfile_font.desktop +%{_tde_servicesdir}/kfontviewpart.desktop %_mandir/man1/* -%if %suse_version < 1001 -%config(noreplace) /etc/security/fileshare.conf -/opt/kde3/bin/filesharelist -%verify(not mode) /opt/kde3/bin/fileshareset -%endif %{_mandir}/man8/kcheckpass.8.gz -%doc %lang(en) /opt/kde3/share/doc/HTML/en/kcontrol -%doc %lang(en) /opt/kde3/share/doc/HTML/en/kdcop -%doc %lang(en) /opt/kde3/share/doc/HTML/en/kdebugdialog -%doc %lang(en) /opt/kde3/share/doc/HTML/en/kdeprint -%doc %lang(en) /opt/kde3/share/doc/HTML/en/kdesu -%exclude /opt/kde3/share/doc/HTML/en/khelpcenter/userguide -%exclude /opt/kde3/share/doc/HTML/en/khelpcenter/visualdict -%doc %lang(en) /opt/kde3/share/doc/HTML/en/khelpcenter -%doc %lang(en) /opt/kde3/share/doc/HTML/en/knetattach -/opt/kde3/share/applications/kde/desktoppath.desktop +%doc %lang(en) %{_tde_htmldir}/en/kcontrol +%doc %lang(en) %{_tde_htmldir}/en/kdcop +%doc %lang(en) %{_tde_htmldir}/en/kdebugdialog +%doc %lang(en) %{_tde_htmldir}/en/kdeprint +%doc %lang(en) %{_tde_htmldir}/en/kdesu +%exclude %{_tde_htmldir}/en/khelpcenter/userguide +%exclude %{_tde_htmldir}/en/khelpcenter/visualdict +%doc %lang(en) %{_tde_htmldir}/en/khelpcenter +%doc %lang(en) %{_tde_htmldir}/en/knetattach +%{_tde_applicationsdir}/kde/desktoppath.desktop %files samba %defattr(-,root,root) -/opt/kde3/%_lib/kde3/kcm_samba.* -/opt/kde3/%_lib/kde3/kio_smb.* -/opt/kde3/share/services/smb.protocol -%dir /opt/kde3/share/apps/konqueror/dirtree -%dir /opt/kde3/share/apps/konqueror/dirtree/remote -/opt/kde3/share/apps/konqueror/dirtree/remote/smb-network.desktop -/opt/kde3/share/mimelnk/application/x-smb-workgroup.desktop +%{_tde_modulesdir}/kcm_samba.* +%{_tde_modulesdir}/kio_smb.* +%{_tde_servicesdir}/smb.protocol +%dir %{_tde_datadir}/konqueror/dirtree +%dir %{_tde_datadir}/konqueror/dirtree/remote +%{_tde_datadir}/konqueror/dirtree/remote/smb-network.desktop +%{_tde_mimedir}/application/x-smb-workgroup.desktop %files kdm %defattr(-,root,root) -%dir /opt/kde3/share/doc/kdm -/opt/kde3/bin/genkdmconf -/opt/kde3/bin/kdm* -/opt/kde3/bin/krootimage -/opt/kde3/share/apps/kdm -/opt/kde3/%_lib/kde3/kgreet_pam.* -%doc /opt/kde3/share/doc/kdm/README -%if %suse_version < 1020 -%config /etc/pam.d/xdm-np -%endif -%dir /opt/kde3/share/config/kdm -%config(noreplace) /opt/kde3/share/config/kdm/kdmrc -%config(noreplace) /opt/kde3/share/config/kdm/backgroundrc -%if %suse_version < 1010 -%config /opt/kde3/share/config/kdm/Xaccess -%config /opt/kde3/share/config/kdm/Xreset -%config /opt/kde3/share/config/kdm/Xresources -%config /opt/kde3/share/config/kdm/Xsession -%config /opt/kde3/share/config/kdm/Xsetup -%config /opt/kde3/share/config/kdm/Xstartup -%config /opt/kde3/share/config/kdm/Xwilling -%endif +%dir %{_tde_docdir}/kdm +%{_tde_bindir}/genkdmconf +%{_tde_bindir}/kdm* +%{_tde_bindir}/krootimage +%{_tde_datadir}/kdm +%{_tde_modulesdir}/kgreet_pam.* +%doc %{_tde_docdir}/kdm/README +%dir %{_tde_configdir}/kdm +%config(noreplace) %{_tde_configdir}/kdm/kdmrc +%config(noreplace) %{_tde_configdir}/kdm/backgroundrc %ghost /var/run/xdmctl -/usr/sbin/rckdm -/opt/kde3/share/applications/kde/kdm.desktop -/opt/kde3/share/icons/*/*/*/kdmconfig.* -/opt/kde3/%_lib/kde3/kcm_kdm.* -%doc %lang(en) /opt/kde3/share/doc/HTML/en/kdm +# kdm has not been renamed. +%{_sbindir}/rckdm +%{_tde_applicationsdir}/kde/kdm.desktop +%{_tde_iconsdir}/*/*/*/kdmconfig.* +%{_tde_modulesdir}/kcm_kdm.* +%doc %lang(en) %{_tde_htmldir}/en/kdm %files session %defattr(-,root,root) -%if %suse_version > 1010 -/usr/bin/kde -/usr/bin/startkde3 -%else -/usr/X11R6/bin/kde -%endif -%if %suse_version < 1030 -%dir /usr/share/xsessions -%endif +/usr/bin/tde +/usr/bin/starttde /usr/share/xsessions/kde.desktop %files extra %defattr(-,root,root) -/opt/kde3/bin/kpersonalizer -/opt/kde3/share/applications/kde/kpersonalizer.desktop -/opt/kde3/share/apps/kpersonalizer -/opt/kde3/share/icons/*/*/*/kpersonalizer.* -/opt/kde3/bin/kfontview -/opt/kde3/share/applications/kde/kfontview.desktop -/opt/kde3/share/apps/kfontview/kfontviewui.rc -/opt/kde3/%_lib/kde3/khotkeys_arts.* +%{_tde_bindir}/kpersonalizer +%{_tde_applicationsdir}/kde/kpersonalizer.desktop +%{_tde_datadir}/kpersonalizer +%{_tde_iconsdir}/*/*/*/kpersonalizer.* +%{_tde_bindir}/kfontview +%{_tde_applicationsdir}/kde/kfontview.desktop +%{_tde_datadir}/kfontview/kfontviewui.rc +%{_tde_modulesdir}/khotkeys_arts.* %files nsplugin %defattr(-,root,root) -/opt/kde3/bin/nsplugin* -/opt/kde3/share/apps/plugin/nspluginpart.rc -%dir /opt/kde3/share/applnk/Settings/WebBrowsing -/opt/kde3/share/applnk/Settings/WebBrowsing/nsplugin.desktop +%{_tde_bindir}/nsplugin* +%{_tde_datadir}/plugin/nspluginpart.rc +%dir %{_tde_appsdir}/Settings/WebBrowsing +%{_tde_appsdir}/Settings/WebBrowsing/nsplugin.desktop %files devel %defattr(-,root,root) -/opt/kde3/include/* -/opt/kde3/%_lib/libkonq.so -/opt/kde3/%_lib/libkdecorations.so -/opt/kde3/%_lib/libkonqsidebarplugin.so -/opt/kde3/%_lib/libkickermain.so -/opt/kde3/%_lib/libtask*.so -/opt/kde3/%_lib/libksgrd.so -%if %suse_version > 1010 -/opt/kde3/%_lib/libkickoffsearch_interfaces.so -/opt/kde3/%_lib/libkickoffsearch_interfaces.la -%endif -/opt/kde3/%_lib/libksplashthemes.so -/opt/kde3/%_lib/libkateinterfaces.so -/opt/kde3/%_lib/libkateutils.so -/opt/kde3/%_lib/libkhotkeys_shared.so -/opt/kde3/%_lib/libkateinterfaces.la -/opt/kde3/%_lib/libkateutils.la -/opt/kde3/%_lib/libkdecorations.la -/opt/kde3/%_lib/libkfontinst.la -/opt/kde3/%_lib/libkfontinst.so -/opt/kde3/%_lib/libkhotkeys_shared.la -/opt/kde3/%_lib/libkickermain.la -/opt/kde3/%_lib/libkonq.la -/opt/kde3/%_lib/libkonqsidebarplugin.la -/opt/kde3/%_lib/libksgrd.la -/opt/kde3/%_lib/libksplashthemes.la -/opt/kde3/%_lib/libtaskbar.la -/opt/kde3/%_lib/libtaskmanager.la -/opt/kde3/%_lib/libkasbar.so -/opt/kde3/%_lib/libkasbar.la +%{_tde_includedir}/* +%{_tde_libdir}/libkonq.so +%{_tde_libdir}/libkdecorations.so +%{_tde_libdir}/libkonqsidebarplugin.so +%{_tde_libdir}/libkickermain.so +%{_tde_libdir}/libtask*.so +%{_tde_libdir}/libksgrd.so +%{_tde_libdir}/libkickoffsearch_interfaces.so +%{_tde_libdir}/libkickoffsearch_interfaces.la +%{_tde_libdir}/libksplashthemes.so +%{_tde_libdir}/libkateinterfaces.so +%{_tde_libdir}/libkateutils.so +%{_tde_libdir}/libkhotkeys_shared.so +%{_tde_libdir}/libkateinterfaces.la +%{_tde_libdir}/libkateutils.la +%{_tde_libdir}/libkdecorations.la +%{_tde_libdir}/libkfontinst.la +%{_tde_libdir}/libkfontinst.so +%{_tde_libdir}/libkhotkeys_shared.la +%{_tde_libdir}/libkickermain.la +%{_tde_libdir}/libkonq.la +%{_tde_libdir}/libkonqsidebarplugin.la +%{_tde_libdir}/libksgrd.la +%{_tde_libdir}/libksplashthemes.la +%{_tde_libdir}/libtaskbar.la +%{_tde_libdir}/libtaskmanager.la +%{_tde_libdir}/libkasbar.so +%{_tde_libdir}/libkasbar.la %files ksysguardd %defattr(-,root,root) %dir /etc/slp.reg.d -#%if %suse_version < 1020 -/usr/bin/ksysguardd -/opt/kde3/bin/ksysguardd +%{_bindir}/ksysguardd +%{_tde_bindir}/ksysguardd %config(noreplace) /etc/ksysguarddrc -#%endif -#%if %suse_version > 1030 -#/usr/bin/ksysguardd -#%config(noreplace) /etc/ksysguarddrc -#%endif /etc/init.d/ksysguardd -/usr/sbin/rcksysguardd +%{_sbindir}/rcksysguardd %config(noreplace) /etc/slp.reg.d/* -%if %suse_version > 1010 -%if %suse_version < 1140 - -%files beagle -%defattr(-,root,root) -/opt/kde3/bin/khc_beagle_search.pl -/opt/kde3/bin/khc_beagle_index.pl -/opt/kde3/share/apps/khelpcenter/searchhandlers/docbook.desktop -/opt/kde3/%_lib/kde3/kickoffsearch_beagle.* -/opt/kde3/share/services/kickoffsearch_beagle.desktop -%endif -%endif - %files -n fileshareset %defattr(-,root,root) %config(noreplace) /etc/security/fileshare.conf @@ -1577,275 +1390,270 @@ rm -rf $RPM_BUILD_ROOT %files apps %defattr(-,root,root) -/opt/kde3/bin/konsole* -/opt/kde3/%_lib/kde3/konsole.* -/opt/kde3/%_lib/kde3/kcm_konsole.* -/opt/kde3/%_lib/libkdeinit_konsole.so -/opt/kde3/share/applications/kde/konsole.desktop -/opt/kde3/share/applications/kde/konsolesu.desktop -%doc %lang(en) /opt/kde3/share/doc/HTML/en/konsole -/opt/kde3/share/applications/kde/Home.desktop -/opt/kde3/%_lib/libkdeinit_konqueror.so -/opt/kde3/share/apps/konqueror/konq-simplebrowser.rc -/opt/kde3/share/applications/kde/konquerorsu.desktop -/opt/kde3/share/applnk/konqueror.desktop -%doc %lang(en) /opt/kde3/share/doc/HTML/en/konqueror -/opt/kde3/share/config.kcfg/konqueror.kcfg -/opt/kde3/bin/konqueror -/opt/kde3/%_lib/kde3/konq*.so -/opt/kde3/%_lib/kde3/konq*.la -%dir /opt/kde3/share/apps/konqueror -/opt/kde3/share/apps/konqueror/tiles -/opt/kde3/share/apps/konqueror/about -/opt/kde3/share/apps/konqueror/icons -/opt/kde3/share/apps/konqueror/konqueror.rc -/opt/kde3/share/apps/konqueror/p* -/opt/kde3/share/apps/konqueror/servicemenus -/opt/kde3/%_lib/kde3/konqueror.* -/opt/kde3/share/apps/konqiconview -/opt/kde3/share/apps/konqlistview -/opt/kde3/share/apps/konqsidebartng -/opt/kde3/%_lib/kde3/kded_konqy_preloader.* -/opt/kde3/share/services/kded/konqy_preloader.desktop -/opt/kde3/share/applications/kde/konqbrowser.desktop -/opt/kde3/share/applications/kde/konqfilemgr.desktop -/opt/kde3/share/config.kcfg/konq_listview.kcfg -%config(noreplace) /opt/kde3/share/config/konqsidebartng.rc -/opt/kde3/bin/kfind -/opt/kde3/%_lib/kde3/libkfindpart.* -/opt/kde3/share/applications/kde/Kfind.desktop -/opt/kde3/share/apps/kfindpart -/opt/kde3/share/icons/*/*/*/kfind.* -/opt/kde3/share/services/kfindpart.desktop -%doc %lang(en) /opt/kde3/share/doc/HTML/en/kfind -/opt/kde3/bin/kwrite -/opt/kde3/%_lib/kde3/kwrite.* -/opt/kde3/%_lib/libkdeinit_kwrite.so -/opt/kde3/share/applications/kde/kwrite.desktop -/opt/kde3/share/apps/kwrite -/opt/kde3/share/icons/*/*/*/kwrite.* -%doc %lang(en) /opt/kde3/share/doc/HTML/en/kwrite -/opt/kde3/bin/kate -/opt/kde3/%_lib/kde3/kate.* -/opt/kde3/%_lib/libkateinterfaces.so.* -/opt/kde3/%_lib/libkateutils.so.* -/opt/kde3/%_lib/libkdeinit_kate.so -/opt/kde3/share/applications/kde/kate.desktop -/opt/kde3/share/apps/kate -/opt/kde3/share/config/katerc -/opt/kde3/share/icons/*/*/*/kate.* -%doc %lang(en) /opt/kde3/share/doc/HTML/en/kate +%{_tde_bindir}/konsole* +%{_tde_modulesdir}/konsole.* +%{_tde_modulesdir}/kcm_konsole.* +%{_tde_libdir}/libkdeinit_konsole.so +%{_tde_applicationsdir}/kde/konsole.desktop +%{_tde_applicationsdir}/kde/konsolesu.desktop +%doc %lang(en) %{_tde_htmldir}/en/konsole +%{_tde_applicationsdir}/kde/Home.desktop +%{_tde_libdir}/libkdeinit_konqueror.so +%{_tde_datadir}/konqueror/konq-simplebrowser.rc +%{_tde_applicationsdir}/kde/konquerorsu.desktop +%{_tde_appsdir}/konqueror.desktop +%doc %lang(en) %{_tde_htmldir}/en/konqueror +%{_tde_configdir}.kcfg/konqueror.kcfg +%{_tde_bindir}/konqueror +%{_tde_modulesdir}/konq*.so +%{_tde_modulesdir}/konq*.la +%dir %{_tde_datadir}/konqueror +%{_tde_datadir}/konqueror/tiles +%{_tde_datadir}/konqueror/about +%{_tde_datadir}/konqueror/icons +%{_tde_datadir}/konqueror/konqueror.rc +%{_tde_datadir}/konqueror/p* +%{_tde_datadir}/konqueror/servicemenus +%{_tde_modulesdir}/konqueror.* +%{_tde_datadir}/konqiconview +%{_tde_datadir}/konqlistview +%{_tde_datadir}/konqsidebartng +%{_tde_modulesdir}/kded_konqy_preloader.* +%{_tde_servicesdir}/kded/konqy_preloader.desktop +%{_tde_applicationsdir}/kde/konqbrowser.desktop +%{_tde_applicationsdir}/kde/konqfilemgr.desktop +%{_tde_configdir}.kcfg/konq_listview.kcfg +%config(noreplace) %{_tde_configdir}/konqsidebartng.rc +%{_tde_bindir}/kfind +%{_tde_modulesdir}/libkfindpart.* +%{_tde_applicationsdir}/kde/Kfind.desktop +%{_tde_datadir}/kfindpart +%{_tde_iconsdir}/*/*/*/kfind.* +%{_tde_servicesdir}/kfindpart.desktop +%doc %lang(en) %{_tde_htmldir}/en/kfind +%{_tde_bindir}/kwrite +%{_tde_modulesdir}/kwrite.* +%{_tde_libdir}/libkdeinit_kwrite.so +%{_tde_applicationsdir}/kde/kwrite.desktop +%{_tde_datadir}/kwrite +%{_tde_iconsdir}/*/*/*/kwrite.* +%doc %lang(en) %{_tde_htmldir}/en/kwrite +%{_tde_bindir}/kate +%{_tde_modulesdir}/kate.* +%{_tde_libdir}/libkateinterfaces.so.* +%{_tde_libdir}/libkateutils.so.* +%{_tde_libdir}/libkdeinit_kate.so +%{_tde_applicationsdir}/kde/kate.desktop +%{_tde_datadir}/kate +%{_tde_configdir}/katerc +%{_tde_iconsdir}/*/*/*/kate.* +%doc %lang(en) %{_tde_htmldir}/en/kate %files workspace %defattr(-,root,root) -%exclude /usr/share/wallpapers/default_blue.* -%doc %lang(en) /opt/kde3/share/doc/HTML/en/kicker -/usr/share/wallpapers -/opt/kde3/bin/startkde -/opt/kde3/bin/kdesktop -/opt/kde3/bin/kdesktop_lock -/opt/kde3/bin/ksmserver -/opt/kde3/%_lib/libkdeinit_ksmserver.so -/opt/kde3/bin/ksplash -/opt/kde3/bin/ksplashsimple -/opt/kde3/%_lib/kde3/kdesktop.* -/opt/kde3/share/apps/kdesktop -/opt/kde3/share/config.kcfg/kdesktop.kcfg -%config(noreplace) /opt/kde3/share/config/kdesktop_custom_menu* -/opt/kde3/bin/kicker -/opt/kde3/%_lib/kde3/kicker* -/opt/kde3/%_lib/kde3/kcm_kicker* -/opt/kde3/%_lib/libkickermain.so.* -/opt/kde3/share/applications/kde/kcmkicker.desktop -/opt/kde3/share/apps/kicker -/opt/kde3/share/config.kcfg/kickerSettings.kcfg -/opt/kde3/share/icons/*/*/*/kcmkicker.* -/opt/kde3/share/icons/*/*/*/kicker.* -/opt/kde3/%_lib/kconf_update_bin/kicker-3.4-reverseLayout -/opt/kde3/bin/kwin -/opt/kde3/bin/kwin_killer_helper -/opt/kde3/bin/kwin_rules_dialog -/opt/kde3/%_lib/kde3/kwin_* -/opt/kde3/share/apps/kwin -/opt/kde3/%_lib/kde3/kwin.* -/opt/kde3/%_lib/kde3/kwin3_* -/opt/kde3/%_lib/kconf_update_bin/kwin_update_default_rules -/opt/kde3/%_lib/kconf_update_bin/kwin_update_window_settings -/opt/kde3/share/applications/kde/kwinrules.desktop -/opt/kde3/share/applications/kde/kwindecoration.desktop -/opt/kde3/share/applications/kde/kwinoptions.desktop -/opt/kde3/share/config.kcfg/kwin.kcfg -/opt/kde3/share/icons/*/*/*/kwin.* +%exclude %{_datadir}/default_blue.* +%doc %lang(en) %{_tde_htmldir}/en/kicker +%{_datadir}/wallpapers +%{_tde_bindir}/startkde +%{_tde_bindir}/kdesktop +%{_tde_bindir}/kdesktop_lock +%{_tde_bindir}/ksmserver +%{_tde_libdir}/libkdeinit_ksmserver.so +%{_tde_bindir}/ksplash +%{_tde_bindir}/ksplashsimple +%{_tde_modulesdir}/kdesktop.* +%{_tde_datadir}/kdesktop +%{_tde_configdir}.kcfg/kdesktop.kcfg +%config(noreplace) %{_tde_configdir}/kdesktop_custom_menu* +%{_tde_bindir}/kicker +%{_tde_modulesdir}/kicker* +%{_tde_modulesdir}/kcm_kicker* +%{_tde_libdir}/libkickermain.so.* +%{_tde_applicationsdir}/kde/kcmkicker.desktop +%{_tde_datadir}/kicker +%{_tde_configdir}.kcfg/kickerSettings.kcfg +%{_tde_iconsdir}/*/*/*/kcmkicker.* +%{_tde_iconsdir}/*/*/*/kicker.* +%{_tde_libdir}/kconf_update_bin/kicker-3.4-reverseLayout +%{_tde_bindir}/kwin +%{_tde_bindir}/kwin_killer_helper +%{_tde_bindir}/kwin_rules_dialog +%{_tde_modulesdir}/kwin_* +%{_tde_datadir}/kwin +%{_tde_modulesdir}/kwin.* +%{_tde_modulesdir}/kwin3_* +%{_tde_libdir}/kconf_update_bin/kwin_update_default_rules +%{_tde_libdir}/kconf_update_bin/kwin_update_window_settings +%{_tde_applicationsdir}/kde/kwinrules.desktop +%{_tde_applicationsdir}/kde/kwindecoration.desktop +%{_tde_applicationsdir}/kde/kwinoptions.desktop +%{_tde_configdir}.kcfg/kwin.kcfg +%{_tde_iconsdir}/*/*/*/kwin.* /var/adm/fillup-templates/sysconfig.windowmanager-kdebase3 -/opt/kde3/share/apps/ksplash -/opt/kde3/share/services/ksplash.desktop -/opt/kde3/share/services/ksplashdefault.desktop -/opt/kde3/share/services/ksplashredmond.desktop -/opt/kde3/share/services/ksplashstandard.desktop -/opt/kde3/share/servicetypes/ksplashplugins.desktop -/opt/kde3/share/icons/*/*/*/ksplash.* -/opt/kde3/%_lib/kde3/ksplash* -/opt/kde3/%_lib/libksplashthemes.so.* -/opt/kde3/share/icons/*/*/apps/kcmsmserver.* -/opt/kde3/share/applications/kde/kcmsmserver.desktop -/opt/kde3/%_lib/kde3/ksmserver.* -/opt/kde3/share/apps/ksmserver -/opt/kde3/%_lib/kde3/clock_panelapplet.* -/opt/kde3/%_lib/kde3/dockbar_panelextension.* -/opt/kde3/%_lib/kde3/kasbar_panelextension.* -/opt/kde3/%_lib/kde3/menu_panelapplet.* -/opt/kde3/%_lib/kde3/klipper_panelapplet.* -/opt/kde3/%_lib/kde3/launcher_panelapplet.* -/opt/kde3/%_lib/kde3/lockout_panelapplet.* -/opt/kde3/%_lib/kde3/minipager_panelapplet.* -/opt/kde3/%_lib/kde3/naughty_panelapplet.* -/opt/kde3/%_lib/kde3/run_panelapplet.* -/opt/kde3/%_lib/kde3/sidebar_panelextension.* -/opt/kde3/share/applications/kde/panel.desktop -/opt/kde3/share/applications/kde/panel_appearance.desktop -/opt/kde3/%_lib/kde3/media_panelapplet.* -/opt/kde3/%_lib/kde3/kcm_taskbar.* -/opt/kde3/share/applications/kde/kcmtaskbar.desktop -/opt/kde3/share/config.kcfg/taskbar.kcfg -/opt/kde3/share/icons/*/*/apps/kcmtaskbar.* -/opt/kde3/%_lib/kde3/kcm_screensaver.* -/opt/kde3/share/applications/kde/screensaver.desktop -/opt/kde3/share/applnk/System/ScreenSavers/KBlankscreen.desktop -/opt/kde3/share/applnk/System/ScreenSavers/KRandom.desktop -/opt/kde3/bin/kwebdesktop -/opt/kde3/share/config.kcfg/kwebdesktop.kcfg -/opt/kde3/share/applications/kde/background.desktop -/opt/kde3/%_lib/kde3/kcm_background* -/opt/kde3/bin/default_desktop_aligning -/opt/kde3/share/applications/kde/desktop.desktop -/opt/kde3/share/applications/kde/desktopbehavior.desktop -/opt/kde3/share/applications/kde/ksplashthememgr.desktop -/opt/kde3/share/icons/*/*/apps/kcmdesktop.* -/opt/kde3/share/icons/*/*/apps/kcmdesktopbehavior.* -/opt/kde3/%_lib/kde3/kcm_ksplashthemes.* -/opt/kde3/%_lib/kde3/kcm_kwindecoration.* -/opt/kde3/%_lib/kde3/kcm_kwinoptions.* -/opt/kde3/%_lib/kde3/kcm_kwinrules.* -%doc %lang(en) /opt/kde3/share/doc/HTML/en/ksplashml -/opt/kde3/shutdown -%if %suse_version > 1010 -/opt/kde3/%_lib/libkickoffsearch_interfaces.so.* -/opt/kde3/share/servicetypes/kickoffsearchplugin.desktop -%endif -/opt/kde3/share/autostart/* -/opt/kde3/share/apps/naughtyapplet -/opt/kde3/%_lib/libtask*.so.* -/opt/kde3/bin/extensionproxy -/opt/kde3/bin/appletproxy -/opt/kde3/%_lib/kde3/appletproxy.* -/opt/kde3/%_lib/kde3/extensionproxy.* -/opt/kde3/%_lib/kde3/taskbar* -/opt/kde3/%_lib/kde3/trash_panelapplet* -/opt/kde3/%_lib/kde3/sys* -/opt/kde3/share/apps/clockapplet -/opt/kde3/bin/kasbar -/opt/kde3/%_lib/libkasbar.so.* -/opt/kde3/%_lib/libkdeinit_kicker.so -/opt/kde3/%_lib/libkdeinit_appletproxy.so -/opt/kde3/%_lib/libkdeinit_extensionproxy.so -/opt/kde3/%_lib/libkdeinit_kdesktop.so -/opt/kde3/%_lib/libkdeinit_kwin.so -/opt/kde3/%_lib/libkdeinit_kwin_rules_dialog.so -/opt/kde3/bin/ktip -/opt/kde3/share/appl*/*/ktip.desktop -/opt/kde3/share/icons/*/*/*/ktip.* -/opt/kde3/bin/kpager -/opt/kde3/share/appl*/*/kpager.desktop -/opt/kde3/share/icons/*/*/*/kpager.* -%doc %lang(en) /opt/kde3/share/doc/HTML/en/kpager -/opt/kde3/bin/klipper -/opt/kde3/%_lib/kde3/klipper.* -/opt/kde3/%_lib/libkdeinit_klipper.so -/opt/kde3/share/applications/kde/klipper.desktop -%config(noreplace) /opt/kde3/share/config/klipperrc -/opt/kde3/share/icons/*/*/*/klipper.* -%doc %lang(en) /opt/kde3/share/doc/HTML/en/klipper -/opt/kde3/share/applications/kde/kmenuedit.desktop -/opt/kde3/share/apps/kmenuedit -/opt/kde3/share/icons/*/*/*/kmenuedit.* -%doc %lang(en) /opt/kde3/share/doc/HTML/en/kmenuedit -/opt/kde3/bin/kmenuedit -/opt/kde3/%_lib/kde3/kmenuedit.* -/opt/kde3/%_lib/libkdeinit_kmenuedit.so -/opt/kde3/bin/kinfocenter -/opt/kde3/share/applications/kde/kinfocenter.desktop -/opt/kde3/share/apps/kinfocenter -%doc %lang(en) /opt/kde3/share/doc/HTML/en/kinfocenter -%doc %lang(en) /opt/kde3/share/doc/HTML/en/khelpcenter/userguide -%doc %lang(en) /opt/kde3/share/doc/HTML/en/khelpcenter/visualdict -/opt/kde3/share/sounds/KDE_Close_Window* -/opt/kde3/share/sounds/KDE_Dialog* -/opt/kde3/share/sounds/KDE_Desktop* -/opt/kde3/share/sounds/KDE_Logout* -/opt/kde3/share/sounds/KDE_Startup* -/opt/kde3/share/sounds/KDE_Window* -/opt/kde3/%_lib/libkdeinit_khotkeys.so -/opt/kde3/%_lib/kde3/kcm_khotkeys.* -/opt/kde3/%_lib/kde3/kcm_khotkeys_init.* -/opt/kde3/share/icons/*/*/*/khotkeys.* -/opt/kde3/bin/khotkeys -/opt/kde3/%_lib/kconf_update_bin/khotkeys_update -/opt/kde3/%_lib/kde3/khotkeys.* -/opt/kde3/%_lib/kde3/kded_khotkeys.* -/opt/kde3/%_lib/libkhotkeys_shared.so.* -/opt/kde3/share/applications/kde/khotkeys.desktop -/opt/kde3/share/apps/khotkeys -/opt/kde3/share/services/kded/khotkeys.desktop -/opt/kde3/bin/ksysguard -/opt/kde3/share/applications/kde/ksysguard.desktop -/opt/kde3/share/apps/ksysguard -/opt/kde3/share/icons/*/*/*/ksysguard.* -/opt/kde3/share/mimelnk/application/x-ksysguard.desktop -%doc %lang(en) /opt/kde3/share/doc/HTML/en/ksysguard -%doc %lang(en) /opt/kde3/share/doc/HTML/en/kxkb -/opt/kde3/%_lib/libksgrd.so.* -/opt/kde3/bin/kompmgr -%doc %lang(en) /opt/kde3/share/doc/HTML/en/kompmgr -%if 0%{?with_hal} == 0 -/opt/kde3/bin/devmon-automounter.sh -%endif +%{_tde_datadir}/ksplash +%{_tde_servicesdir}/ksplash.desktop +%{_tde_servicesdir}/ksplashdefault.desktop +%{_tde_servicesdir}/ksplashredmond.desktop +%{_tde_servicesdir}/ksplashstandard.desktop +%{_tde_servicetypesdir}/ksplashplugins.desktop +%{_tde_iconsdir}/*/*/*/ksplash.* +%{_tde_modulesdir}/ksplash* +%{_tde_libdir}/libksplashthemes.so.* +%{_tde_iconsdir}/*/*/apps/kcmsmserver.* +%{_tde_applicationsdir}/kde/kcmsmserver.desktop +%{_tde_modulesdir}/ksmserver.* +%{_tde_datadir}/ksmserver +%{_tde_modulesdir}/clock_panelapplet.* +%{_tde_modulesdir}/dockbar_panelextension.* +%{_tde_modulesdir}/kasbar_panelextension.* +%{_tde_modulesdir}/menu_panelapplet.* +%{_tde_modulesdir}/klipper_panelapplet.* +%{_tde_modulesdir}/launcher_panelapplet.* +%{_tde_modulesdir}/lockout_panelapplet.* +%{_tde_modulesdir}/minipager_panelapplet.* +%{_tde_modulesdir}/naughty_panelapplet.* +%{_tde_modulesdir}/run_panelapplet.* +%{_tde_modulesdir}/sidebar_panelextension.* +%{_tde_applicationsdir}/kde/panel.desktop +%{_tde_applicationsdir}/kde/panel_appearance.desktop +%{_tde_modulesdir}/media_panelapplet.* +%{_tde_modulesdir}/kcm_taskbar.* +%{_tde_applicationsdir}/kde/kcmtaskbar.desktop +%{_tde_configdir}.kcfg/taskbar.kcfg +%{_tde_iconsdir}/*/*/apps/kcmtaskbar.* +%{_tde_modulesdir}/kcm_screensaver.* +%{_tde_applicationsdir}/kde/screensaver.desktop +%{_tde_appsdir}/System/ScreenSavers/KBlankscreen.desktop +%{_tde_appsdir}/System/ScreenSavers/KRandom.desktop +%{_tde_bindir}/kwebdesktop +%{_tde_configdir}.kcfg/kwebdesktop.kcfg +%{_tde_applicationsdir}/kde/background.desktop +%{_tde_modulesdir}/kcm_background* +%{_tde_bindir}/default_desktop_aligning +%{_tde_applicationsdir}/kde/desktop.desktop +%{_tde_applicationsdir}/kde/desktopbehavior.desktop +%{_tde_applicationsdir}/kde/ksplashthememgr.desktop +%{_tde_iconsdir}/*/*/apps/kcmdesktop.* +%{_tde_iconsdir}/*/*/apps/kcmdesktopbehavior.* +%{_tde_modulesdir}/kcm_ksplashthemes.* +%{_tde_modulesdir}/kcm_kwindecoration.* +%{_tde_modulesdir}/kcm_kwinoptions.* +%{_tde_modulesdir}/kcm_kwinrules.* +%doc %lang(en) %{_tde_htmldir}/en/ksplashml +%{_tde_prefix}/shutdown +%{_tde_libdir}/libkickoffsearch_interfaces.so.* +%{_tde_servicetypesdir}/kickoffsearchplugin.desktop +%{_tde_sharedir}/autostart/* +%{_tde_datadir}/naughtyapplet +%{_tde_libdir}/libtask*.so.* +%{_tde_bindir}/extensionproxy +%{_tde_bindir}/appletproxy +%{_tde_modulesdir}/appletproxy.* +%{_tde_modulesdir}/extensionproxy.* +%{_tde_modulesdir}/taskbar* +%{_tde_modulesdir}/trash_panelapplet* +%{_tde_modulesdir}/sys* +%{_tde_datadir}/clockapplet +%{_tde_bindir}/kasbar +%{_tde_libdir}/libkasbar.so.* +%{_tde_libdir}/libkdeinit_kicker.so +%{_tde_libdir}/libkdeinit_appletproxy.so +%{_tde_libdir}/libkdeinit_extensionproxy.so +%{_tde_libdir}/libkdeinit_kdesktop.so +%{_tde_libdir}/libkdeinit_kwin.so +%{_tde_libdir}/libkdeinit_kwin_rules_dialog.so +%{_tde_bindir}/ktip +%{_tde_sharedir}/appl*/*/ktip.desktop +%{_tde_iconsdir}/*/*/*/ktip.* +%{_tde_bindir}/kpager +%{_tde_sharedir}/appl*/*/kpager.desktop +%{_tde_iconsdir}/*/*/*/kpager.* +%doc %lang(en) %{_tde_htmldir}/en/kpager +%{_tde_bindir}/klipper +%{_tde_modulesdir}/klipper.* +%{_tde_libdir}/libkdeinit_klipper.so +%{_tde_applicationsdir}/kde/klipper.desktop +%config(noreplace) %{_tde_configdir}/klipperrc +%{_tde_iconsdir}/*/*/*/klipper.* +%doc %lang(en) %{_tde_htmldir}/en/klipper +%{_tde_applicationsdir}/kde/kmenuedit.desktop +%{_tde_datadir}/kmenuedit +%{_tde_iconsdir}/*/*/*/kmenuedit.* +%doc %lang(en) %{_tde_htmldir}/en/kmenuedit +%{_tde_bindir}/kmenuedit +%{_tde_modulesdir}/kmenuedit.* +%{_tde_libdir}/libkdeinit_kmenuedit.so +%{_tde_bindir}/kinfocenter +%{_tde_applicationsdir}/kde/kinfocenter.desktop +%{_tde_datadir}/kinfocenter +%doc %lang(en) %{_tde_htmldir}/en/kinfocenter +%doc %lang(en) %{_tde_htmldir}/en/khelpcenter/userguide +%doc %lang(en) %{_tde_htmldir}/en/khelpcenter/visualdict +%{_tde_sounddir}/KDE_Close_Window* +%{_tde_sounddir}/KDE_Dialog* +%{_tde_sounddir}/KDE_Desktop* +%{_tde_sounddir}/KDE_Logout* +%{_tde_sounddir}/KDE_Startup* +%{_tde_sounddir}/KDE_Window* +%{_tde_libdir}/libkdeinit_khotkeys.so +%{_tde_modulesdir}/kcm_khotkeys.* +%{_tde_modulesdir}/kcm_khotkeys_init.* +%{_tde_iconsdir}/*/*/*/khotkeys.* +%{_tde_bindir}/khotkeys +%{_tde_libdir}/kconf_update_bin/khotkeys_update +%{_tde_modulesdir}/khotkeys.* +%{_tde_modulesdir}/kded_khotkeys.* +%{_tde_libdir}/libkhotkeys_shared.so.* +%{_tde_applicationsdir}/kde/khotkeys.desktop +%{_tde_datadir}/khotkeys +%{_tde_servicesdir}/kded/khotkeys.desktop +%{_tde_bindir}/ksysguard +%{_tde_applicationsdir}/kde/ksysguard.desktop +%{_tde_datadir}/ksysguard +%{_tde_iconsdir}/*/*/*/ksysguard.* +%{_tde_mimedir}/application/x-ksysguard.desktop +%doc %lang(en) %{_tde_htmldir}/en/ksysguard +%doc %lang(en) %{_tde_htmldir}/en/kxkb +%{_tde_libdir}/libksgrd.so.* +%{_tde_bindir}/kompmgr +%doc %lang(en) %{_tde_htmldir}/en/kompmgr %files runtime %defattr(-,root,root) -%doc %lang(en) /opt/kde3/share/doc/HTML/en/kioslave -%exclude /opt/kde3/%_lib/kde3/kio_smb.* -%exclude /opt/kde3/share/services/smb.protocol -/opt/kde3/bin/kde3 -/opt/kde3/bin/kreadconfig -/opt/kde3/bin/kwriteconfig -/opt/kde3/bin/kprinter -/opt/kde3/%_lib/libkdeinit_kprinter.so -/opt/kde3/bin/kdesu -/opt/kde3/%_lib/kde3/kio_* -/opt/kde3/%_lib/libkfontinst.so.* -/opt/kde3/share/services/*.protocol -/opt/kde3/%_lib/libkonq.so.* -/opt/kde3/%_lib/libkonqsidebarplugin.so.* -/opt/kde3/%_lib/kde3/kded_favicons.* -/opt/kde3/share/services/kded/favicons.desktop -/opt/kde3/%_lib/libkdecorations.so.* -/opt/kde3/%_lib/kde3/kgreet_winbind.* -/opt/kde3/%_lib/kde3/kgreet_classic.* +%doc %lang(en) %{_tde_htmldir}/en/kioslave +%exclude %{_tde_modulesdir}/kio_smb.* +%exclude %{_tde_servicesdir}/smb.protocol +%{_tde_bindir}/kde3 +%{_tde_bindir}/kreadconfig +%{_tde_bindir}/kwriteconfig +%{_tde_bindir}/kprinter +%{_tde_libdir}/libkdeinit_kprinter.so +%{_tde_bindir}/kdesu +%{_tde_modulesdir}/kio_* +%{_tde_libdir}/libkfontinst.so.* +%{_tde_servicesdir}/*.protocol +%{_tde_libdir}/libkonq.so.* +%{_tde_libdir}/libkonqsidebarplugin.so.* +%{_tde_modulesdir}/kded_favicons.* +%{_tde_servicesdir}/kded/favicons.desktop +%{_tde_libdir}/libkdecorations.so.* +%{_tde_modulesdir}/kgreet_winbind.* +%{_tde_modulesdir}/kgreet_classic.* %config /etc/pam.d/kcheckpass -%verify(not mode) %attr(4755,root,shadow) /opt/kde3/bin/kcheckpass -/opt/kde3/share/icons/*/*/*/knotify.* -/opt/kde3/share/icons/*/*/*/kscreensaver.* -/opt/kde3/share/icons/*/*/*/style.* -/opt/kde3/share/icons/*/*/*/looknfeel.* -/opt/kde3/share/icons/*/*/*/iconthemes.* -/opt/kde3/share/icons/*/*/*/keyboard.* -/opt/kde3/share/icons/*/*/*/kcmsound.* -/opt/kde3/share/icons/*/*/*/energy.* -/opt/kde3/share/icons/*/*/*/kcmkwm.* -/opt/kde3/share/icons/*/*/*/hwinfo.* -/opt/kde3/share/icons/*/*/*/date.* -/opt/kde3/share/icons/*/*/*/filetypes.* -/opt/kde3/share/icons/*/*/*/kcmsystem.* -/opt/kde3/share/icons/*/*/*/personal.* +%verify(not mode) %attr(4755,root,shadow) %{_tde_bindir}/kcheckpass +%{_tde_iconsdir}/*/*/*/knotify.* +%{_tde_iconsdir}/*/*/*/kscreensaver.* +%{_tde_iconsdir}/*/*/*/style.* +%{_tde_iconsdir}/*/*/*/looknfeel.* +%{_tde_iconsdir}/*/*/*/iconthemes.* +%{_tde_iconsdir}/*/*/*/keyboard.* +%{_tde_iconsdir}/*/*/*/kcmsound.* +%{_tde_iconsdir}/*/*/*/energy.* +%{_tde_iconsdir}/*/*/*/kcmkwm.* +%{_tde_iconsdir}/*/*/*/hwinfo.* +%{_tde_iconsdir}/*/*/*/date.* +%{_tde_iconsdir}/*/*/*/filetypes.* +%{_tde_iconsdir}/*/*/*/kcmsystem.* +%{_tde_iconsdir}/*/*/*/personal.* %changelog diff --git a/opensuse/core/tdelibs/tdelibs.spec b/opensuse/core/tdelibs/tdelibs.spec index 4e238d06f..2576ad4d8 100644 --- a/opensuse/core/tdelibs/tdelibs.spec +++ b/opensuse/core/tdelibs/tdelibs.spec @@ -26,7 +26,7 @@ BuildRequires: db-devel libacl-devel libattr-devel unsermake update-desktop-fil BuildRequires: unzip BuildRequires: avahi-compat-mDNSResponder-devel fdupes libbz2-devel libjasper-devel BuildRequires: libdrm-devel tde-filesystem cmake -URL: http://www.trinitydesktop.org +URL: http://www.trinitydesktop.org/ License: BSD3c(or similar) ; GPLv2+ ; LGPLv2.1+ Group: System/GUI/TDE BuildRoot: %{_tmppath}/%{name}-%{version}-build @@ -40,6 +40,7 @@ Requires: openssl tdelibs-default-style Requires: hicolor-icon-theme Recommends: ispell enscript Requires: sudo +Requires: libtqt4 Source0: kdelibs-%{version}.tar.bz2 Source3: baselibs.conf Source4: api_docu_description @@ -366,7 +367,8 @@ CXXFLAGS="$CXXFLAGS -fno-strict-aliasing" export PATH=/usr/lib/mit/bin:$PATH # fast-malloc is not needed anymore -%cmake_tde -d build \ +%cmake_tde -d build -- \ + -DCMAKE_SKIP_RPATH=OFF \ -DKDE_MALLOC_FULL=OFF \ -DKDE_MALLOC=OFF \ -DKDE_DISTRIBUTION="$DISTRI" \ diff --git a/opensuse/grabtarball b/opensuse/grabtarball new file mode 100644 index 000000000..7383dd429 --- /dev/null +++ b/opensuse/grabtarball @@ -0,0 +1,20 @@ +#!/bin/bash + +URL="http://mirror.its.uidaho.edu/pub/trinity/releases/3.5.13" +VERSION=3.5.13 + +runMgr(){ + + if [ "$1" == "qt3" ]; then + VERSION=3.3.8d + fi + + wget $URL/$1-$VERSION.tar.gz + + if [ "$2" != "" ]; then + mv -v $1-$VERSION.tar.gz $2-$VERSION.tar.gz + fi + +} + +runMgr $1 $2 -- cgit v1.2.3 From 281dce280d4677ee071e675ac4c42d6aac00dcb3 Mon Sep 17 00:00:00 2001 From: Robert Xu Date: Sat, 12 Nov 2011 18:26:57 -0500 Subject: qt3 update and service file, and eclipse integration --- opensuse/core/.metadata/.log | 1379 ++++++++++++++++++++ .../.history/14/209112a3850d00111528b7e658abf294 | 415 ++++++ .../.history/62/b0431ba3850d00111528b7e658abf294 | 297 +++++ .../.history/82/503b1fa3850d00111528b7e658abf294 | 477 +++++++ .../.history/84/70110672840d00111528b7e658abf294 | 115 ++ .../.history/aa/f00f6381850d00111528b7e658abf294 | 415 ++++++ .../.history/b1/50304a6f850d00111528b7e658abf294 | 0 .../.history/da/208c118b850d00111528b7e658abf294 | 297 +++++ .../.projects/arts/.markers.snap | Bin 0 -> 16 bytes .../.projects/arts/.syncinfo.snap | Bin 0 -> 16 bytes .../.projects/libdbus-1-tqt-0/.markers.snap | Bin 0 -> 16 bytes .../.projects/libdbus-1-tqt-0/.syncinfo.snap | Bin 0 -> 16 bytes .../.projects/libdbus-tqt-1-0/.markers.snap | Bin 0 -> 16 bytes .../.projects/libdbus-tqt-1-0/.syncinfo.snap | Bin 0 -> 16 bytes .../.projects/libtqt4/.markers.snap | Bin 0 -> 16 bytes .../.projects/libtqt4/.syncinfo.snap | Bin 0 -> 16 bytes .../.projects/qt3/.markers.snap | Bin 0 -> 452 bytes .../.projects/qt3/.syncinfo.snap | Bin 0 -> 16 bytes .../.projects/tde-filesystem/.markers.snap | Bin 0 -> 16 bytes .../.projects/tde-filesystem/.syncinfo.snap | Bin 0 -> 16 bytes .../.projects/tdeaccessibility/.markers.snap | Bin 0 -> 16 bytes .../.projects/tdeaccessibility/.syncinfo.snap | Bin 0 -> 16 bytes .../.projects/tdeaddons/.markers.snap | Bin 0 -> 16 bytes .../.projects/tdeaddons/.syncinfo.snap | Bin 0 -> 16 bytes .../.projects/tdeartwork/.markers.snap | Bin 0 -> 16 bytes .../.projects/tdeartwork/.syncinfo.snap | Bin 0 -> 16 bytes .../.projects/tdebase/.markers.snap | Bin 0 -> 246 bytes .../.projects/tdebase/.syncinfo.snap | Bin 0 -> 16 bytes .../.projects/tdebindings/.markers.snap | Bin 0 -> 16 bytes .../.projects/tdebindings/.syncinfo.snap | Bin 0 -> 16 bytes .../.projects/tdedevelop/.markers.snap | Bin 0 -> 16 bytes .../.projects/tdedevelop/.syncinfo.snap | Bin 0 -> 16 bytes .../.projects/tdeedu/.markers.snap | Bin 0 -> 16 bytes .../.projects/tdeedu/.syncinfo.snap | Bin 0 -> 16 bytes .../.projects/tdegames/.markers.snap | Bin 0 -> 16 bytes .../.projects/tdegames/.syncinfo.snap | Bin 0 -> 16 bytes .../.projects/tdegraphics/.markers.snap | Bin 0 -> 16 bytes .../.projects/tdegraphics/.syncinfo.snap | Bin 0 -> 16 bytes .../.projects/tdelibs/.indexes/history.index | Bin 0 -> 56 bytes .../.projects/tdelibs/.markers.snap | Bin 0 -> 247 bytes .../.projects/tdelibs/.syncinfo.snap | Bin 0 -> 16 bytes .../.projects/tdemultimedia/.markers.snap | Bin 0 -> 16 bytes .../.projects/tdemultimedia/.syncinfo.snap | Bin 0 -> 16 bytes .../.projects/tdenetwork/.markers.snap | Bin 0 -> 16 bytes .../.projects/tdenetwork/.syncinfo.snap | Bin 0 -> 16 bytes .../.projects/tdepim/.markers.snap | Bin 0 -> 16 bytes .../.projects/tdepim/.syncinfo.snap | Bin 0 -> 16 bytes .../.projects/tdesdk/.markers.snap | Bin 0 -> 16 bytes .../.projects/tdesdk/.syncinfo.snap | Bin 0 -> 16 bytes .../.projects/tdetoys/.markers.snap | Bin 0 -> 16 bytes .../.projects/tdetoys/.syncinfo.snap | Bin 0 -> 16 bytes .../.projects/tdeutils/.markers.snap | Bin 0 -> 16 bytes .../.projects/tdeutils/.syncinfo.snap | Bin 0 -> 16 bytes .../.projects/tdewebdev/.markers.snap | Bin 0 -> 16 bytes .../.projects/tdewebdev/.syncinfo.snap | Bin 0 -> 16 bytes .../.root/.indexes/properties.index | Bin 151 -> 151 bytes .../org.eclipse.core.resources/.root/.markers.snap | Bin 0 -> 16 bytes .../.safetable/org.eclipse.core.resources | Bin 850 -> 1171 bytes .../.plugins/org.eclipse.core.resources/.snap | Bin 0 -> 24422 bytes .../org.eclipse.m2e.logback.configuration/0.log | 1 + opensuse/core/qt3/_service | 3 + opensuse/core/qt3/qt3-devel-doc.spec | 9 +- opensuse/core/qt3/qt3-extensions.spec | 9 +- opensuse/core/qt3/qt3.spec | 9 +- opensuse/core/tdelibs/tdelibs-devel-doc.spec | 2 +- 65 files changed, 3409 insertions(+), 19 deletions(-) create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.history/14/209112a3850d00111528b7e658abf294 create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.history/62/b0431ba3850d00111528b7e658abf294 create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.history/82/503b1fa3850d00111528b7e658abf294 create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.history/84/70110672840d00111528b7e658abf294 create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.history/aa/f00f6381850d00111528b7e658abf294 create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.history/b1/50304a6f850d00111528b7e658abf294 create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.history/da/208c118b850d00111528b7e658abf294 create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/arts/.markers.snap create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/arts/.syncinfo.snap create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/libdbus-1-tqt-0/.markers.snap create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/libdbus-1-tqt-0/.syncinfo.snap create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/libdbus-tqt-1-0/.markers.snap create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/libdbus-tqt-1-0/.syncinfo.snap create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/libtqt4/.markers.snap create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/libtqt4/.syncinfo.snap create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/qt3/.markers.snap create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/qt3/.syncinfo.snap create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tde-filesystem/.markers.snap create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tde-filesystem/.syncinfo.snap create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdeaccessibility/.markers.snap create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdeaccessibility/.syncinfo.snap create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdeaddons/.markers.snap create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdeaddons/.syncinfo.snap create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdeartwork/.markers.snap create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdeartwork/.syncinfo.snap create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdebase/.markers.snap create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdebase/.syncinfo.snap create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdebindings/.markers.snap create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdebindings/.syncinfo.snap create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdedevelop/.markers.snap create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdedevelop/.syncinfo.snap create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdeedu/.markers.snap create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdeedu/.syncinfo.snap create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdegames/.markers.snap create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdegames/.syncinfo.snap create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdegraphics/.markers.snap create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdegraphics/.syncinfo.snap create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdelibs/.indexes/history.index create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdelibs/.markers.snap create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdelibs/.syncinfo.snap create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdemultimedia/.markers.snap create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdemultimedia/.syncinfo.snap create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdenetwork/.markers.snap create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdenetwork/.syncinfo.snap create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdepim/.markers.snap create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdepim/.syncinfo.snap create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdesdk/.markers.snap create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdesdk/.syncinfo.snap create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdetoys/.markers.snap create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdetoys/.syncinfo.snap create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdeutils/.markers.snap create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdeutils/.syncinfo.snap create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdewebdev/.markers.snap create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdewebdev/.syncinfo.snap create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.root/.markers.snap create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.snap create mode 100644 opensuse/core/qt3/_service diff --git a/opensuse/core/.metadata/.log b/opensuse/core/.metadata/.log index 4ea9566c8..de47a525c 100644 --- a/opensuse/core/.metadata/.log +++ b/opensuse/core/.metadata/.log @@ -192,3 +192,1382 @@ org.eclipse.core.runtime.CoreException: The following connectors are not availab !ENTRY org.eclipse.ui 4 4 2011-11-09 22:51:48.325 !MESSAGE Invalid preference page path: XML Syntax +!SESSION 2011-11-12 18:14:09.288 ----------------------------------------------- +eclipse.buildId=I20110613-1736 +java.version=1.6.0_23 +java.vendor=Sun Microsystems Inc. +BootLoader constants: OS=linux, ARCH=x86, WS=gtk, NL=en_US +Command-line arguments: -os linux -ws gtk -arch x86 + +!ENTRY org.eclipse.ui 4 4 2011-11-12 18:15:02.633 +!MESSAGE Invalid preference page path: XML Syntax + +!ENTRY org.eclipse.core.jobs 4 2 2011-11-12 18:15:40.314 +!MESSAGE An internal error occurred during: "Update RPM packages proposal list". +!STACK 0 +java.lang.IllegalThreadStateException: process hasn't exited + at java.lang.UNIXProcess.exitValue(UNIXProcess.java:188) + at org.eclipse.linuxtools.rpm.core.utils.BufferedProcessInputStream.getExitValue(BufferedProcessInputStream.java:44) + at org.eclipse.linuxtools.rpm.ui.editor.RpmPackageBuildProposalsJob.retrievePackageList(RpmPackageBuildProposalsJob.java:176) + at org.eclipse.linuxtools.rpm.ui.editor.RpmPackageBuildProposalsJob.run(RpmPackageBuildProposalsJob.java:60) + at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54) + +!ENTRY org.eclipse.linuxtools.rpm.ui.editor 4 0 2011-11-12 18:15:41.577 +!MESSAGE Unexpected Exception +!STACK 0 +java.io.IOException: Cannot run program "rpm": java.io.IOException: error=2, No such file or directory + at java.lang.ProcessBuilder.start(ProcessBuilder.java:475) + at org.eclipse.linuxtools.rpm.core.utils.Utils.runCommandToInputStream(Utils.java:47) + at org.eclipse.linuxtools.rpm.core.utils.Utils.runCommandToString(Utils.java:109) + at org.eclipse.linuxtools.rpm.ui.editor.RpmPackageProposalsList.getRpmInfo(RpmPackageProposalsList.java:110) + at org.eclipse.linuxtools.rpm.ui.editor.RpmPackageProposalsList.getProposals(RpmPackageProposalsList.java:87) + at org.eclipse.linuxtools.rpm.ui.editor.scanners.SpecfilePackagesScanner.(SpecfilePackagesScanner.java:69) + at org.eclipse.linuxtools.rpm.ui.editor.SpecfileConfiguration.getSpecfilePackagesScanner(SpecfileConfiguration.java:106) + at org.eclipse.linuxtools.rpm.ui.editor.SpecfileConfiguration.getPresentationReconciler(SpecfileConfiguration.java:141) + at org.eclipse.jface.text.source.SourceViewer.configure(SourceViewer.java:450) + at org.eclipse.ui.texteditor.AbstractTextEditor.createPartControl(AbstractTextEditor.java:3407) + at org.eclipse.ui.texteditor.StatusTextEditor.createPartControl(StatusTextEditor.java:54) + at org.eclipse.ui.texteditor.AbstractDecoratedTextEditor.createPartControl(AbstractDecoratedTextEditor.java:440) + at org.eclipse.linuxtools.rpm.ui.editor.SpecfileEditor.createPartControl(SpecfileEditor.java:195) + at org.eclipse.ui.internal.EditorReference.createPartHelper(EditorReference.java:670) + at org.eclipse.ui.internal.EditorReference.createPart(EditorReference.java:465) + at org.eclipse.ui.internal.WorkbenchPartReference.getPart(WorkbenchPartReference.java:595) + at org.eclipse.ui.internal.PartPane.setVisible(PartPane.java:313) + at org.eclipse.ui.internal.presentations.PresentablePart.setVisible(PresentablePart.java:180) + at org.eclipse.ui.internal.presentations.util.PresentablePartFolder.select(PresentablePartFolder.java:270) + at org.eclipse.ui.internal.presentations.util.LeftToRightTabOrder.select(LeftToRightTabOrder.java:65) + at org.eclipse.ui.internal.presentations.util.TabbedStackPresentation.selectPart(TabbedStackPresentation.java:473) + at org.eclipse.ui.internal.PartStack.refreshPresentationSelection(PartStack.java:1245) + at org.eclipse.ui.internal.PartStack.setSelection(PartStack.java:1198) + at org.eclipse.ui.internal.PartStack.showPart(PartStack.java:1597) + at org.eclipse.ui.internal.PartStack.add(PartStack.java:493) + at org.eclipse.ui.internal.EditorStack.add(EditorStack.java:103) + at org.eclipse.ui.internal.PartStack.add(PartStack.java:479) + at org.eclipse.ui.internal.EditorStack.add(EditorStack.java:112) + at org.eclipse.ui.internal.EditorSashContainer.addEditor(EditorSashContainer.java:63) + at org.eclipse.ui.internal.EditorAreaHelper.addToLayout(EditorAreaHelper.java:225) + at org.eclipse.ui.internal.EditorAreaHelper.addEditor(EditorAreaHelper.java:213) + at org.eclipse.ui.internal.EditorManager.createEditorTab(EditorManager.java:808) + at org.eclipse.ui.internal.EditorManager.openEditorFromDescriptor(EditorManager.java:707) + at org.eclipse.ui.internal.EditorManager.openEditor(EditorManager.java:666) + at org.eclipse.ui.internal.WorkbenchPage.busyOpenEditorBatched(WorkbenchPage.java:2942) + at org.eclipse.ui.internal.WorkbenchPage.busyOpenEditor(WorkbenchPage.java:2850) + at org.eclipse.ui.internal.WorkbenchPage.access$11(WorkbenchPage.java:2842) + at org.eclipse.ui.internal.WorkbenchPage$10.run(WorkbenchPage.java:2793) + at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70) + at org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:2789) + at org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:2773) + at org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:2764) + at org.eclipse.ui.ide.IDE.openEditor(IDE.java:651) + at org.eclipse.ui.ide.IDE.openEditor(IDE.java:610) + at org.eclipse.jdt.internal.ui.javaeditor.EditorUtility.openInEditor(EditorUtility.java:355) + at org.eclipse.jdt.internal.ui.javaeditor.EditorUtility.openInEditor(EditorUtility.java:164) + at org.eclipse.jdt.ui.actions.OpenAction.run(OpenAction.java:249) + at org.eclipse.jdt.ui.actions.OpenAction.run(OpenAction.java:228) + at org.eclipse.jdt.ui.actions.SelectionDispatchAction.dispatchRun(SelectionDispatchAction.java:275) + at org.eclipse.jdt.ui.actions.SelectionDispatchAction.run(SelectionDispatchAction.java:251) + at org.eclipse.jdt.internal.ui.navigator.OpenAndExpand.run(OpenAndExpand.java:50) + at org.eclipse.ui.actions.RetargetAction.run(RetargetAction.java:221) + at org.eclipse.ui.navigator.CommonNavigatorManager$3.open(CommonNavigatorManager.java:185) + at org.eclipse.ui.OpenAndLinkWithEditorHelper$InternalListener.open(OpenAndLinkWithEditorHelper.java:48) + at org.eclipse.jface.viewers.StructuredViewer$2.run(StructuredViewer.java:866) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at org.eclipse.ui.internal.JFaceUtil$1.run(JFaceUtil.java:49) + at org.eclipse.jface.util.SafeRunnable.run(SafeRunnable.java:175) + at org.eclipse.jface.viewers.StructuredViewer.fireOpen(StructuredViewer.java:864) + at org.eclipse.jface.viewers.StructuredViewer.handleOpen(StructuredViewer.java:1152) + at org.eclipse.ui.navigator.CommonViewer.handleOpen(CommonViewer.java:462) + at org.eclipse.jface.viewers.StructuredViewer$6.handleOpen(StructuredViewer.java:1256) + at org.eclipse.jface.util.OpenStrategy.fireOpenEvent(OpenStrategy.java:275) + at org.eclipse.jface.util.OpenStrategy.access$2(OpenStrategy.java:269) + at org.eclipse.jface.util.OpenStrategy$1.handleEvent(OpenStrategy.java:309) + at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1258) + at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3588) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3209) + at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2696) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2660) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2494) + at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:674) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:667) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:123) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:344) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:616) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:622) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:577) + at org.eclipse.equinox.launcher.Main.run(Main.java:1410) +Caused by: java.io.IOException: java.io.IOException: error=2, No such file or directory + at java.lang.UNIXProcess.(UNIXProcess.java:164) + at java.lang.ProcessImpl.start(ProcessImpl.java:81) + at java.lang.ProcessBuilder.start(ProcessBuilder.java:468) + ... 88 more + +!ENTRY org.eclipse.linuxtools.rpm.ui.editor 4 0 2011-11-12 18:16:37.355 +!MESSAGE Unexpected Exception +!STACK 0 +java.io.IOException: Cannot run program "rpm": java.io.IOException: error=2, No such file or directory + at java.lang.ProcessBuilder.start(ProcessBuilder.java:475) + at org.eclipse.linuxtools.rpm.core.utils.Utils.runCommandToInputStream(Utils.java:47) + at org.eclipse.linuxtools.rpm.core.utils.Utils.runCommandToString(Utils.java:109) + at org.eclipse.linuxtools.rpm.ui.editor.RpmPackageProposalsList.getRpmInfo(RpmPackageProposalsList.java:110) + at org.eclipse.linuxtools.rpm.ui.editor.RpmPackageProposalsList.getProposals(RpmPackageProposalsList.java:87) + at org.eclipse.linuxtools.rpm.ui.editor.Activator.getRpmPackageList(Activator.java:130) + at org.eclipse.linuxtools.rpm.ui.editor.scanners.SpecfilePackagesScanner.(SpecfilePackagesScanner.java:68) + at org.eclipse.linuxtools.rpm.ui.editor.SpecfileConfiguration.getSpecfilePackagesScanner(SpecfileConfiguration.java:106) + at org.eclipse.linuxtools.rpm.ui.editor.SpecfileConfiguration.getPresentationReconciler(SpecfileConfiguration.java:141) + at org.eclipse.jface.text.source.SourceViewer.configure(SourceViewer.java:450) + at org.eclipse.ui.texteditor.AbstractTextEditor.createPartControl(AbstractTextEditor.java:3407) + at org.eclipse.ui.texteditor.StatusTextEditor.createPartControl(StatusTextEditor.java:54) + at org.eclipse.ui.texteditor.AbstractDecoratedTextEditor.createPartControl(AbstractDecoratedTextEditor.java:440) + at org.eclipse.linuxtools.rpm.ui.editor.SpecfileEditor.createPartControl(SpecfileEditor.java:195) + at org.eclipse.ui.internal.EditorReference.createPartHelper(EditorReference.java:670) + at org.eclipse.ui.internal.EditorReference.createPart(EditorReference.java:465) + at org.eclipse.ui.internal.WorkbenchPartReference.getPart(WorkbenchPartReference.java:595) + at org.eclipse.ui.internal.PartPane.setVisible(PartPane.java:313) + at org.eclipse.ui.internal.presentations.PresentablePart.setVisible(PresentablePart.java:180) + at org.eclipse.ui.internal.presentations.util.PresentablePartFolder.select(PresentablePartFolder.java:270) + at org.eclipse.ui.internal.presentations.util.LeftToRightTabOrder.select(LeftToRightTabOrder.java:65) + at org.eclipse.ui.internal.presentations.util.TabbedStackPresentation.selectPart(TabbedStackPresentation.java:473) + at org.eclipse.ui.internal.PartStack.refreshPresentationSelection(PartStack.java:1245) + at org.eclipse.ui.internal.PartStack.setSelection(PartStack.java:1198) + at org.eclipse.ui.internal.PartStack.showPart(PartStack.java:1597) + at org.eclipse.ui.internal.PartStack.add(PartStack.java:493) + at org.eclipse.ui.internal.EditorStack.add(EditorStack.java:103) + at org.eclipse.ui.internal.PartStack.add(PartStack.java:479) + at org.eclipse.ui.internal.EditorStack.add(EditorStack.java:112) + at org.eclipse.ui.internal.EditorSashContainer.addEditor(EditorSashContainer.java:63) + at org.eclipse.ui.internal.EditorAreaHelper.addToLayout(EditorAreaHelper.java:225) + at org.eclipse.ui.internal.EditorAreaHelper.addEditor(EditorAreaHelper.java:213) + at org.eclipse.ui.internal.EditorManager.createEditorTab(EditorManager.java:808) + at org.eclipse.ui.internal.EditorManager.openEditorFromDescriptor(EditorManager.java:707) + at org.eclipse.ui.internal.EditorManager.openEditor(EditorManager.java:666) + at org.eclipse.ui.internal.WorkbenchPage.busyOpenEditorBatched(WorkbenchPage.java:2942) + at org.eclipse.ui.internal.WorkbenchPage.busyOpenEditor(WorkbenchPage.java:2850) + at org.eclipse.ui.internal.WorkbenchPage.access$11(WorkbenchPage.java:2842) + at org.eclipse.ui.internal.WorkbenchPage$10.run(WorkbenchPage.java:2793) + at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70) + at org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:2789) + at org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:2773) + at org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:2764) + at org.eclipse.ui.ide.IDE.openEditor(IDE.java:651) + at org.eclipse.ui.ide.IDE.openEditor(IDE.java:610) + at org.eclipse.jdt.internal.ui.javaeditor.EditorUtility.openInEditor(EditorUtility.java:355) + at org.eclipse.jdt.internal.ui.javaeditor.EditorUtility.openInEditor(EditorUtility.java:164) + at org.eclipse.jdt.ui.actions.OpenAction.run(OpenAction.java:249) + at org.eclipse.jdt.ui.actions.OpenAction.run(OpenAction.java:228) + at org.eclipse.jdt.ui.actions.SelectionDispatchAction.dispatchRun(SelectionDispatchAction.java:275) + at org.eclipse.jdt.ui.actions.SelectionDispatchAction.run(SelectionDispatchAction.java:251) + at org.eclipse.jface.action.Action.runWithEvent(Action.java:498) + at org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection(ActionContributionItem.java:584) + at org.eclipse.jface.action.ActionContributionItem.access$2(ActionContributionItem.java:501) + at org.eclipse.jface.action.ActionContributionItem$5.handleEvent(ActionContributionItem.java:411) + at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1258) + at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3588) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3209) + at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2696) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2660) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2494) + at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:674) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:667) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:123) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:344) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:616) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:622) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:577) + at org.eclipse.equinox.launcher.Main.run(Main.java:1410) +Caused by: java.io.IOException: java.io.IOException: error=2, No such file or directory + at java.lang.UNIXProcess.(UNIXProcess.java:164) + at java.lang.ProcessImpl.start(ProcessImpl.java:81) + at java.lang.ProcessBuilder.start(ProcessBuilder.java:468) + ... 78 more + +!ENTRY org.eclipse.linuxtools.rpm.ui.editor 4 0 2011-11-12 18:16:37.423 +!MESSAGE Unexpected Exception +!STACK 0 +java.io.IOException: Cannot run program "rpm": java.io.IOException: error=2, No such file or directory + at java.lang.ProcessBuilder.start(ProcessBuilder.java:475) + at org.eclipse.linuxtools.rpm.core.utils.Utils.runCommandToInputStream(Utils.java:47) + at org.eclipse.linuxtools.rpm.core.utils.Utils.runCommandToString(Utils.java:109) + at org.eclipse.linuxtools.rpm.ui.editor.RpmPackageProposalsList.getRpmInfo(RpmPackageProposalsList.java:110) + at org.eclipse.linuxtools.rpm.ui.editor.RpmPackageProposalsList.getProposals(RpmPackageProposalsList.java:87) + at org.eclipse.linuxtools.rpm.ui.editor.scanners.SpecfilePackagesScanner.(SpecfilePackagesScanner.java:69) + at org.eclipse.linuxtools.rpm.ui.editor.SpecfileConfiguration.getSpecfilePackagesScanner(SpecfileConfiguration.java:106) + at org.eclipse.linuxtools.rpm.ui.editor.SpecfileConfiguration.getPresentationReconciler(SpecfileConfiguration.java:141) + at org.eclipse.jface.text.source.SourceViewer.configure(SourceViewer.java:450) + at org.eclipse.ui.texteditor.AbstractTextEditor.createPartControl(AbstractTextEditor.java:3407) + at org.eclipse.ui.texteditor.StatusTextEditor.createPartControl(StatusTextEditor.java:54) + at org.eclipse.ui.texteditor.AbstractDecoratedTextEditor.createPartControl(AbstractDecoratedTextEditor.java:440) + at org.eclipse.linuxtools.rpm.ui.editor.SpecfileEditor.createPartControl(SpecfileEditor.java:195) + at org.eclipse.ui.internal.EditorReference.createPartHelper(EditorReference.java:670) + at org.eclipse.ui.internal.EditorReference.createPart(EditorReference.java:465) + at org.eclipse.ui.internal.WorkbenchPartReference.getPart(WorkbenchPartReference.java:595) + at org.eclipse.ui.internal.PartPane.setVisible(PartPane.java:313) + at org.eclipse.ui.internal.presentations.PresentablePart.setVisible(PresentablePart.java:180) + at org.eclipse.ui.internal.presentations.util.PresentablePartFolder.select(PresentablePartFolder.java:270) + at org.eclipse.ui.internal.presentations.util.LeftToRightTabOrder.select(LeftToRightTabOrder.java:65) + at org.eclipse.ui.internal.presentations.util.TabbedStackPresentation.selectPart(TabbedStackPresentation.java:473) + at org.eclipse.ui.internal.PartStack.refreshPresentationSelection(PartStack.java:1245) + at org.eclipse.ui.internal.PartStack.setSelection(PartStack.java:1198) + at org.eclipse.ui.internal.PartStack.showPart(PartStack.java:1597) + at org.eclipse.ui.internal.PartStack.add(PartStack.java:493) + at org.eclipse.ui.internal.EditorStack.add(EditorStack.java:103) + at org.eclipse.ui.internal.PartStack.add(PartStack.java:479) + at org.eclipse.ui.internal.EditorStack.add(EditorStack.java:112) + at org.eclipse.ui.internal.EditorSashContainer.addEditor(EditorSashContainer.java:63) + at org.eclipse.ui.internal.EditorAreaHelper.addToLayout(EditorAreaHelper.java:225) + at org.eclipse.ui.internal.EditorAreaHelper.addEditor(EditorAreaHelper.java:213) + at org.eclipse.ui.internal.EditorManager.createEditorTab(EditorManager.java:808) + at org.eclipse.ui.internal.EditorManager.openEditorFromDescriptor(EditorManager.java:707) + at org.eclipse.ui.internal.EditorManager.openEditor(EditorManager.java:666) + at org.eclipse.ui.internal.WorkbenchPage.busyOpenEditorBatched(WorkbenchPage.java:2942) + at org.eclipse.ui.internal.WorkbenchPage.busyOpenEditor(WorkbenchPage.java:2850) + at org.eclipse.ui.internal.WorkbenchPage.access$11(WorkbenchPage.java:2842) + at org.eclipse.ui.internal.WorkbenchPage$10.run(WorkbenchPage.java:2793) + at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70) + at org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:2789) + at org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:2773) + at org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:2764) + at org.eclipse.ui.ide.IDE.openEditor(IDE.java:651) + at org.eclipse.ui.ide.IDE.openEditor(IDE.java:610) + at org.eclipse.jdt.internal.ui.javaeditor.EditorUtility.openInEditor(EditorUtility.java:355) + at org.eclipse.jdt.internal.ui.javaeditor.EditorUtility.openInEditor(EditorUtility.java:164) + at org.eclipse.jdt.ui.actions.OpenAction.run(OpenAction.java:249) + at org.eclipse.jdt.ui.actions.OpenAction.run(OpenAction.java:228) + at org.eclipse.jdt.ui.actions.SelectionDispatchAction.dispatchRun(SelectionDispatchAction.java:275) + at org.eclipse.jdt.ui.actions.SelectionDispatchAction.run(SelectionDispatchAction.java:251) + at org.eclipse.jface.action.Action.runWithEvent(Action.java:498) + at org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection(ActionContributionItem.java:584) + at org.eclipse.jface.action.ActionContributionItem.access$2(ActionContributionItem.java:501) + at org.eclipse.jface.action.ActionContributionItem$5.handleEvent(ActionContributionItem.java:411) + at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1258) + at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3588) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3209) + at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2696) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2660) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2494) + at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:674) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:667) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:123) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:344) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:616) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:622) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:577) + at org.eclipse.equinox.launcher.Main.run(Main.java:1410) +Caused by: java.io.IOException: java.io.IOException: error=2, No such file or directory + at java.lang.UNIXProcess.(UNIXProcess.java:164) + at java.lang.ProcessImpl.start(ProcessImpl.java:81) + at java.lang.ProcessBuilder.start(ProcessBuilder.java:468) + ... 77 more + +!ENTRY org.eclipse.linuxtools.rpm.ui.editor 4 0 2011-11-12 18:16:38.509 +!MESSAGE Unexpected Exception +!STACK 0 +java.io.IOException: Cannot run program "rpm": java.io.IOException: error=2, No such file or directory + at java.lang.ProcessBuilder.start(ProcessBuilder.java:475) + at org.eclipse.linuxtools.rpm.core.utils.Utils.runCommandToInputStream(Utils.java:47) + at org.eclipse.linuxtools.rpm.core.utils.Utils.runCommandToString(Utils.java:109) + at org.eclipse.linuxtools.rpm.ui.editor.RpmPackageProposalsList.getRpmInfo(RpmPackageProposalsList.java:110) + at org.eclipse.linuxtools.rpm.ui.editor.RpmPackageProposalsList.getProposals(RpmPackageProposalsList.java:87) + at org.eclipse.linuxtools.rpm.ui.editor.Activator.getRpmPackageList(Activator.java:130) + at org.eclipse.linuxtools.rpm.ui.editor.scanners.SpecfilePackagesScanner.(SpecfilePackagesScanner.java:68) + at org.eclipse.linuxtools.rpm.ui.editor.SpecfileConfiguration.getSpecfilePackagesScanner(SpecfileConfiguration.java:106) + at org.eclipse.linuxtools.rpm.ui.editor.SpecfileConfiguration.getPresentationReconciler(SpecfileConfiguration.java:141) + at org.eclipse.jface.text.source.SourceViewer.configure(SourceViewer.java:450) + at org.eclipse.ui.texteditor.AbstractTextEditor.createPartControl(AbstractTextEditor.java:3407) + at org.eclipse.ui.texteditor.StatusTextEditor.createPartControl(StatusTextEditor.java:54) + at org.eclipse.ui.texteditor.AbstractDecoratedTextEditor.createPartControl(AbstractDecoratedTextEditor.java:440) + at org.eclipse.linuxtools.rpm.ui.editor.SpecfileEditor.createPartControl(SpecfileEditor.java:195) + at org.eclipse.ui.internal.EditorReference.createPartHelper(EditorReference.java:670) + at org.eclipse.ui.internal.EditorReference.createPart(EditorReference.java:465) + at org.eclipse.ui.internal.WorkbenchPartReference.getPart(WorkbenchPartReference.java:595) + at org.eclipse.ui.internal.EditorReference.getEditor(EditorReference.java:289) + at org.eclipse.ui.internal.WorkbenchPage.busyOpenEditorBatched(WorkbenchPage.java:2945) + at org.eclipse.ui.internal.WorkbenchPage.busyOpenEditor(WorkbenchPage.java:2850) + at org.eclipse.ui.internal.WorkbenchPage.access$11(WorkbenchPage.java:2842) + at org.eclipse.ui.internal.WorkbenchPage$10.run(WorkbenchPage.java:2793) + at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70) + at org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:2789) + at org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:2773) + at org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:2764) + at org.eclipse.ui.ide.IDE.openEditor(IDE.java:651) + at org.eclipse.ui.ide.IDE.openEditor(IDE.java:610) + at org.eclipse.jdt.internal.ui.javaeditor.EditorUtility.openInEditor(EditorUtility.java:355) + at org.eclipse.jdt.internal.ui.javaeditor.EditorUtility.openInEditor(EditorUtility.java:164) + at org.eclipse.jdt.ui.actions.OpenAction.run(OpenAction.java:249) + at org.eclipse.jdt.ui.actions.OpenAction.run(OpenAction.java:228) + at org.eclipse.jdt.ui.actions.SelectionDispatchAction.dispatchRun(SelectionDispatchAction.java:275) + at org.eclipse.jdt.ui.actions.SelectionDispatchAction.run(SelectionDispatchAction.java:251) + at org.eclipse.jdt.internal.ui.navigator.OpenAndExpand.run(OpenAndExpand.java:50) + at org.eclipse.ui.actions.RetargetAction.run(RetargetAction.java:221) + at org.eclipse.ui.navigator.CommonNavigatorManager$3.open(CommonNavigatorManager.java:185) + at org.eclipse.ui.OpenAndLinkWithEditorHelper$InternalListener.open(OpenAndLinkWithEditorHelper.java:48) + at org.eclipse.jface.viewers.StructuredViewer$2.run(StructuredViewer.java:866) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at org.eclipse.ui.internal.JFaceUtil$1.run(JFaceUtil.java:49) + at org.eclipse.jface.util.SafeRunnable.run(SafeRunnable.java:175) + at org.eclipse.jface.viewers.StructuredViewer.fireOpen(StructuredViewer.java:864) + at org.eclipse.jface.viewers.StructuredViewer.handleOpen(StructuredViewer.java:1152) + at org.eclipse.ui.navigator.CommonViewer.handleOpen(CommonViewer.java:462) + at org.eclipse.jface.viewers.StructuredViewer$6.handleOpen(StructuredViewer.java:1256) + at org.eclipse.jface.util.OpenStrategy.fireOpenEvent(OpenStrategy.java:275) + at org.eclipse.jface.util.OpenStrategy.access$2(OpenStrategy.java:269) + at org.eclipse.jface.util.OpenStrategy$1.handleEvent(OpenStrategy.java:309) + at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1258) + at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3588) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3209) + at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2696) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2660) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2494) + at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:674) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:667) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:123) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:344) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:616) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:622) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:577) + at org.eclipse.equinox.launcher.Main.run(Main.java:1410) +Caused by: java.io.IOException: java.io.IOException: error=2, No such file or directory + at java.lang.UNIXProcess.(UNIXProcess.java:164) + at java.lang.ProcessImpl.start(ProcessImpl.java:81) + at java.lang.ProcessBuilder.start(ProcessBuilder.java:468) + ... 72 more + +!ENTRY org.eclipse.linuxtools.rpm.ui.editor 4 0 2011-11-12 18:16:38.568 +!MESSAGE Unexpected Exception +!STACK 0 +java.io.IOException: Cannot run program "rpm": java.io.IOException: error=2, No such file or directory + at java.lang.ProcessBuilder.start(ProcessBuilder.java:475) + at org.eclipse.linuxtools.rpm.core.utils.Utils.runCommandToInputStream(Utils.java:47) + at org.eclipse.linuxtools.rpm.core.utils.Utils.runCommandToString(Utils.java:109) + at org.eclipse.linuxtools.rpm.ui.editor.RpmPackageProposalsList.getRpmInfo(RpmPackageProposalsList.java:110) + at org.eclipse.linuxtools.rpm.ui.editor.RpmPackageProposalsList.getProposals(RpmPackageProposalsList.java:87) + at org.eclipse.linuxtools.rpm.ui.editor.scanners.SpecfilePackagesScanner.(SpecfilePackagesScanner.java:69) + at org.eclipse.linuxtools.rpm.ui.editor.SpecfileConfiguration.getSpecfilePackagesScanner(SpecfileConfiguration.java:106) + at org.eclipse.linuxtools.rpm.ui.editor.SpecfileConfiguration.getPresentationReconciler(SpecfileConfiguration.java:141) + at org.eclipse.jface.text.source.SourceViewer.configure(SourceViewer.java:450) + at org.eclipse.ui.texteditor.AbstractTextEditor.createPartControl(AbstractTextEditor.java:3407) + at org.eclipse.ui.texteditor.StatusTextEditor.createPartControl(StatusTextEditor.java:54) + at org.eclipse.ui.texteditor.AbstractDecoratedTextEditor.createPartControl(AbstractDecoratedTextEditor.java:440) + at org.eclipse.linuxtools.rpm.ui.editor.SpecfileEditor.createPartControl(SpecfileEditor.java:195) + at org.eclipse.ui.internal.EditorReference.createPartHelper(EditorReference.java:670) + at org.eclipse.ui.internal.EditorReference.createPart(EditorReference.java:465) + at org.eclipse.ui.internal.WorkbenchPartReference.getPart(WorkbenchPartReference.java:595) + at org.eclipse.ui.internal.EditorReference.getEditor(EditorReference.java:289) + at org.eclipse.ui.internal.WorkbenchPage.busyOpenEditorBatched(WorkbenchPage.java:2945) + at org.eclipse.ui.internal.WorkbenchPage.busyOpenEditor(WorkbenchPage.java:2850) + at org.eclipse.ui.internal.WorkbenchPage.access$11(WorkbenchPage.java:2842) + at org.eclipse.ui.internal.WorkbenchPage$10.run(WorkbenchPage.java:2793) + at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70) + at org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:2789) + at org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:2773) + at org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:2764) + at org.eclipse.ui.ide.IDE.openEditor(IDE.java:651) + at org.eclipse.ui.ide.IDE.openEditor(IDE.java:610) + at org.eclipse.jdt.internal.ui.javaeditor.EditorUtility.openInEditor(EditorUtility.java:355) + at org.eclipse.jdt.internal.ui.javaeditor.EditorUtility.openInEditor(EditorUtility.java:164) + at org.eclipse.jdt.ui.actions.OpenAction.run(OpenAction.java:249) + at org.eclipse.jdt.ui.actions.OpenAction.run(OpenAction.java:228) + at org.eclipse.jdt.ui.actions.SelectionDispatchAction.dispatchRun(SelectionDispatchAction.java:275) + at org.eclipse.jdt.ui.actions.SelectionDispatchAction.run(SelectionDispatchAction.java:251) + at org.eclipse.jdt.internal.ui.navigator.OpenAndExpand.run(OpenAndExpand.java:50) + at org.eclipse.ui.actions.RetargetAction.run(RetargetAction.java:221) + at org.eclipse.ui.navigator.CommonNavigatorManager$3.open(CommonNavigatorManager.java:185) + at org.eclipse.ui.OpenAndLinkWithEditorHelper$InternalListener.open(OpenAndLinkWithEditorHelper.java:48) + at org.eclipse.jface.viewers.StructuredViewer$2.run(StructuredViewer.java:866) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at org.eclipse.ui.internal.JFaceUtil$1.run(JFaceUtil.java:49) + at org.eclipse.jface.util.SafeRunnable.run(SafeRunnable.java:175) + at org.eclipse.jface.viewers.StructuredViewer.fireOpen(StructuredViewer.java:864) + at org.eclipse.jface.viewers.StructuredViewer.handleOpen(StructuredViewer.java:1152) + at org.eclipse.ui.navigator.CommonViewer.handleOpen(CommonViewer.java:462) + at org.eclipse.jface.viewers.StructuredViewer$6.handleOpen(StructuredViewer.java:1256) + at org.eclipse.jface.util.OpenStrategy.fireOpenEvent(OpenStrategy.java:275) + at org.eclipse.jface.util.OpenStrategy.access$2(OpenStrategy.java:269) + at org.eclipse.jface.util.OpenStrategy$1.handleEvent(OpenStrategy.java:309) + at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1258) + at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3588) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3209) + at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2696) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2660) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2494) + at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:674) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:667) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:123) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:344) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:616) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:622) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:577) + at org.eclipse.equinox.launcher.Main.run(Main.java:1410) +Caused by: java.io.IOException: java.io.IOException: error=2, No such file or directory + at java.lang.UNIXProcess.(UNIXProcess.java:164) + at java.lang.ProcessImpl.start(ProcessImpl.java:81) + at java.lang.ProcessBuilder.start(ProcessBuilder.java:468) + ... 71 more + +!ENTRY org.eclipse.linuxtools.rpm.ui.editor 4 0 2011-11-12 18:16:51.594 +!MESSAGE Unexpected Exception +!STACK 0 +java.io.IOException: Cannot run program "rpm": java.io.IOException: error=2, No such file or directory + at java.lang.ProcessBuilder.start(ProcessBuilder.java:475) + at org.eclipse.linuxtools.rpm.core.utils.Utils.runCommandToInputStream(Utils.java:47) + at org.eclipse.linuxtools.rpm.core.utils.Utils.runCommandToString(Utils.java:109) + at org.eclipse.linuxtools.rpm.ui.editor.RpmPackageProposalsList.getRpmInfo(RpmPackageProposalsList.java:110) + at org.eclipse.linuxtools.rpm.ui.editor.RpmPackageProposalsList.getProposals(RpmPackageProposalsList.java:87) + at org.eclipse.linuxtools.rpm.ui.editor.Activator.getRpmPackageList(Activator.java:130) + at org.eclipse.linuxtools.rpm.ui.editor.scanners.SpecfilePackagesScanner.(SpecfilePackagesScanner.java:68) + at org.eclipse.linuxtools.rpm.ui.editor.SpecfileConfiguration.getSpecfilePackagesScanner(SpecfileConfiguration.java:106) + at org.eclipse.linuxtools.rpm.ui.editor.SpecfileConfiguration.getPresentationReconciler(SpecfileConfiguration.java:141) + at org.eclipse.jface.text.source.SourceViewer.configure(SourceViewer.java:450) + at org.eclipse.ui.texteditor.AbstractTextEditor.createPartControl(AbstractTextEditor.java:3407) + at org.eclipse.ui.texteditor.StatusTextEditor.createPartControl(StatusTextEditor.java:54) + at org.eclipse.ui.texteditor.AbstractDecoratedTextEditor.createPartControl(AbstractDecoratedTextEditor.java:440) + at org.eclipse.linuxtools.rpm.ui.editor.SpecfileEditor.createPartControl(SpecfileEditor.java:195) + at org.eclipse.ui.internal.EditorReference.createPartHelper(EditorReference.java:670) + at org.eclipse.ui.internal.EditorReference.createPart(EditorReference.java:465) + at org.eclipse.ui.internal.WorkbenchPartReference.getPart(WorkbenchPartReference.java:595) + at org.eclipse.ui.internal.EditorReference.getEditor(EditorReference.java:289) + at org.eclipse.ui.internal.WorkbenchPage.busyOpenEditorBatched(WorkbenchPage.java:2945) + at org.eclipse.ui.internal.WorkbenchPage.busyOpenEditor(WorkbenchPage.java:2850) + at org.eclipse.ui.internal.WorkbenchPage.access$11(WorkbenchPage.java:2842) + at org.eclipse.ui.internal.WorkbenchPage$10.run(WorkbenchPage.java:2793) + at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70) + at org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:2789) + at org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:2773) + at org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:2764) + at org.eclipse.ui.ide.IDE.openEditor(IDE.java:651) + at org.eclipse.ui.ide.IDE.openEditor(IDE.java:610) + at org.eclipse.jdt.internal.ui.javaeditor.EditorUtility.openInEditor(EditorUtility.java:355) + at org.eclipse.jdt.internal.ui.javaeditor.EditorUtility.openInEditor(EditorUtility.java:164) + at org.eclipse.jdt.ui.actions.OpenAction.run(OpenAction.java:249) + at org.eclipse.jdt.ui.actions.OpenAction.run(OpenAction.java:228) + at org.eclipse.jdt.ui.actions.SelectionDispatchAction.dispatchRun(SelectionDispatchAction.java:275) + at org.eclipse.jdt.ui.actions.SelectionDispatchAction.run(SelectionDispatchAction.java:251) + at org.eclipse.jdt.internal.ui.navigator.OpenAndExpand.run(OpenAndExpand.java:50) + at org.eclipse.ui.actions.RetargetAction.run(RetargetAction.java:221) + at org.eclipse.ui.navigator.CommonNavigatorManager$3.open(CommonNavigatorManager.java:185) + at org.eclipse.ui.OpenAndLinkWithEditorHelper$InternalListener.open(OpenAndLinkWithEditorHelper.java:48) + at org.eclipse.jface.viewers.StructuredViewer$2.run(StructuredViewer.java:866) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at org.eclipse.ui.internal.JFaceUtil$1.run(JFaceUtil.java:49) + at org.eclipse.jface.util.SafeRunnable.run(SafeRunnable.java:175) + at org.eclipse.jface.viewers.StructuredViewer.fireOpen(StructuredViewer.java:864) + at org.eclipse.jface.viewers.StructuredViewer.handleOpen(StructuredViewer.java:1152) + at org.eclipse.ui.navigator.CommonViewer.handleOpen(CommonViewer.java:462) + at org.eclipse.jface.viewers.StructuredViewer$6.handleOpen(StructuredViewer.java:1256) + at org.eclipse.jface.util.OpenStrategy.fireOpenEvent(OpenStrategy.java:275) + at org.eclipse.jface.util.OpenStrategy.access$2(OpenStrategy.java:269) + at org.eclipse.jface.util.OpenStrategy$1.handleEvent(OpenStrategy.java:309) + at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1258) + at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3588) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3209) + at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2696) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2660) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2494) + at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:674) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:667) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:123) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:344) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:616) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:622) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:577) + at org.eclipse.equinox.launcher.Main.run(Main.java:1410) +Caused by: java.io.IOException: java.io.IOException: error=2, No such file or directory + at java.lang.UNIXProcess.(UNIXProcess.java:164) + at java.lang.ProcessImpl.start(ProcessImpl.java:81) + at java.lang.ProcessBuilder.start(ProcessBuilder.java:468) + ... 72 more + +!ENTRY org.eclipse.linuxtools.rpm.ui.editor 4 0 2011-11-12 18:16:51.654 +!MESSAGE Unexpected Exception +!STACK 0 +java.io.IOException: Cannot run program "rpm": java.io.IOException: error=2, No such file or directory + at java.lang.ProcessBuilder.start(ProcessBuilder.java:475) + at org.eclipse.linuxtools.rpm.core.utils.Utils.runCommandToInputStream(Utils.java:47) + at org.eclipse.linuxtools.rpm.core.utils.Utils.runCommandToString(Utils.java:109) + at org.eclipse.linuxtools.rpm.ui.editor.RpmPackageProposalsList.getRpmInfo(RpmPackageProposalsList.java:110) + at org.eclipse.linuxtools.rpm.ui.editor.RpmPackageProposalsList.getProposals(RpmPackageProposalsList.java:87) + at org.eclipse.linuxtools.rpm.ui.editor.scanners.SpecfilePackagesScanner.(SpecfilePackagesScanner.java:69) + at org.eclipse.linuxtools.rpm.ui.editor.SpecfileConfiguration.getSpecfilePackagesScanner(SpecfileConfiguration.java:106) + at org.eclipse.linuxtools.rpm.ui.editor.SpecfileConfiguration.getPresentationReconciler(SpecfileConfiguration.java:141) + at org.eclipse.jface.text.source.SourceViewer.configure(SourceViewer.java:450) + at org.eclipse.ui.texteditor.AbstractTextEditor.createPartControl(AbstractTextEditor.java:3407) + at org.eclipse.ui.texteditor.StatusTextEditor.createPartControl(StatusTextEditor.java:54) + at org.eclipse.ui.texteditor.AbstractDecoratedTextEditor.createPartControl(AbstractDecoratedTextEditor.java:440) + at org.eclipse.linuxtools.rpm.ui.editor.SpecfileEditor.createPartControl(SpecfileEditor.java:195) + at org.eclipse.ui.internal.EditorReference.createPartHelper(EditorReference.java:670) + at org.eclipse.ui.internal.EditorReference.createPart(EditorReference.java:465) + at org.eclipse.ui.internal.WorkbenchPartReference.getPart(WorkbenchPartReference.java:595) + at org.eclipse.ui.internal.EditorReference.getEditor(EditorReference.java:289) + at org.eclipse.ui.internal.WorkbenchPage.busyOpenEditorBatched(WorkbenchPage.java:2945) + at org.eclipse.ui.internal.WorkbenchPage.busyOpenEditor(WorkbenchPage.java:2850) + at org.eclipse.ui.internal.WorkbenchPage.access$11(WorkbenchPage.java:2842) + at org.eclipse.ui.internal.WorkbenchPage$10.run(WorkbenchPage.java:2793) + at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70) + at org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:2789) + at org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:2773) + at org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:2764) + at org.eclipse.ui.ide.IDE.openEditor(IDE.java:651) + at org.eclipse.ui.ide.IDE.openEditor(IDE.java:610) + at org.eclipse.jdt.internal.ui.javaeditor.EditorUtility.openInEditor(EditorUtility.java:355) + at org.eclipse.jdt.internal.ui.javaeditor.EditorUtility.openInEditor(EditorUtility.java:164) + at org.eclipse.jdt.ui.actions.OpenAction.run(OpenAction.java:249) + at org.eclipse.jdt.ui.actions.OpenAction.run(OpenAction.java:228) + at org.eclipse.jdt.ui.actions.SelectionDispatchAction.dispatchRun(SelectionDispatchAction.java:275) + at org.eclipse.jdt.ui.actions.SelectionDispatchAction.run(SelectionDispatchAction.java:251) + at org.eclipse.jdt.internal.ui.navigator.OpenAndExpand.run(OpenAndExpand.java:50) + at org.eclipse.ui.actions.RetargetAction.run(RetargetAction.java:221) + at org.eclipse.ui.navigator.CommonNavigatorManager$3.open(CommonNavigatorManager.java:185) + at org.eclipse.ui.OpenAndLinkWithEditorHelper$InternalListener.open(OpenAndLinkWithEditorHelper.java:48) + at org.eclipse.jface.viewers.StructuredViewer$2.run(StructuredViewer.java:866) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at org.eclipse.ui.internal.JFaceUtil$1.run(JFaceUtil.java:49) + at org.eclipse.jface.util.SafeRunnable.run(SafeRunnable.java:175) + at org.eclipse.jface.viewers.StructuredViewer.fireOpen(StructuredViewer.java:864) + at org.eclipse.jface.viewers.StructuredViewer.handleOpen(StructuredViewer.java:1152) + at org.eclipse.ui.navigator.CommonViewer.handleOpen(CommonViewer.java:462) + at org.eclipse.jface.viewers.StructuredViewer$6.handleOpen(StructuredViewer.java:1256) + at org.eclipse.jface.util.OpenStrategy.fireOpenEvent(OpenStrategy.java:275) + at org.eclipse.jface.util.OpenStrategy.access$2(OpenStrategy.java:269) + at org.eclipse.jface.util.OpenStrategy$1.handleEvent(OpenStrategy.java:309) + at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1258) + at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3588) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3209) + at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2696) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2660) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2494) + at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:674) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:667) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:123) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:344) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:616) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:622) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:577) + at org.eclipse.equinox.launcher.Main.run(Main.java:1410) +Caused by: java.io.IOException: java.io.IOException: error=2, No such file or directory + at java.lang.UNIXProcess.(UNIXProcess.java:164) + at java.lang.ProcessImpl.start(ProcessImpl.java:81) + at java.lang.ProcessBuilder.start(ProcessBuilder.java:468) + ... 71 more + +!ENTRY org.eclipse.linuxtools.rpm.ui.editor 4 0 2011-11-12 18:17:43.311 +!MESSAGE Unexpected Exception +!STACK 0 +java.io.IOException: Cannot run program "rpm": java.io.IOException: error=2, No such file or directory + at java.lang.ProcessBuilder.start(ProcessBuilder.java:475) + at org.eclipse.linuxtools.rpm.core.utils.Utils.runCommandToInputStream(Utils.java:47) + at org.eclipse.linuxtools.rpm.core.utils.Utils.runCommandToString(Utils.java:109) + at org.eclipse.linuxtools.rpm.ui.editor.RpmPackageProposalsList.getRpmInfo(RpmPackageProposalsList.java:110) + at org.eclipse.linuxtools.rpm.ui.editor.RpmPackageProposalsList.getProposals(RpmPackageProposalsList.java:87) + at org.eclipse.linuxtools.rpm.ui.editor.Activator.getRpmPackageList(Activator.java:130) + at org.eclipse.linuxtools.rpm.ui.editor.scanners.SpecfilePackagesScanner.(SpecfilePackagesScanner.java:68) + at org.eclipse.linuxtools.rpm.ui.editor.SpecfileConfiguration.getSpecfilePackagesScanner(SpecfileConfiguration.java:106) + at org.eclipse.linuxtools.rpm.ui.editor.SpecfileConfiguration.getPresentationReconciler(SpecfileConfiguration.java:141) + at org.eclipse.jface.text.source.SourceViewer.configure(SourceViewer.java:450) + at org.eclipse.ui.texteditor.AbstractTextEditor.createPartControl(AbstractTextEditor.java:3407) + at org.eclipse.ui.texteditor.StatusTextEditor.createPartControl(StatusTextEditor.java:54) + at org.eclipse.ui.texteditor.AbstractDecoratedTextEditor.createPartControl(AbstractDecoratedTextEditor.java:440) + at org.eclipse.linuxtools.rpm.ui.editor.SpecfileEditor.createPartControl(SpecfileEditor.java:195) + at org.eclipse.ui.internal.EditorReference.createPartHelper(EditorReference.java:670) + at org.eclipse.ui.internal.EditorReference.createPart(EditorReference.java:465) + at org.eclipse.ui.internal.WorkbenchPartReference.getPart(WorkbenchPartReference.java:595) + at org.eclipse.ui.internal.EditorReference.getEditor(EditorReference.java:289) + at org.eclipse.ui.internal.WorkbenchPage.busyOpenEditorBatched(WorkbenchPage.java:2945) + at org.eclipse.ui.internal.WorkbenchPage.busyOpenEditor(WorkbenchPage.java:2850) + at org.eclipse.ui.internal.WorkbenchPage.access$11(WorkbenchPage.java:2842) + at org.eclipse.ui.internal.WorkbenchPage$10.run(WorkbenchPage.java:2793) + at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70) + at org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:2789) + at org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:2773) + at org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:2764) + at org.eclipse.ui.ide.IDE.openEditor(IDE.java:651) + at org.eclipse.ui.ide.IDE.openEditor(IDE.java:610) + at org.eclipse.jdt.internal.ui.javaeditor.EditorUtility.openInEditor(EditorUtility.java:355) + at org.eclipse.jdt.internal.ui.javaeditor.EditorUtility.openInEditor(EditorUtility.java:164) + at org.eclipse.jdt.ui.actions.OpenAction.run(OpenAction.java:249) + at org.eclipse.jdt.ui.actions.OpenAction.run(OpenAction.java:228) + at org.eclipse.jdt.ui.actions.SelectionDispatchAction.dispatchRun(SelectionDispatchAction.java:275) + at org.eclipse.jdt.ui.actions.SelectionDispatchAction.run(SelectionDispatchAction.java:251) + at org.eclipse.jdt.internal.ui.navigator.OpenAndExpand.run(OpenAndExpand.java:50) + at org.eclipse.ui.actions.RetargetAction.run(RetargetAction.java:221) + at org.eclipse.ui.navigator.CommonNavigatorManager$3.open(CommonNavigatorManager.java:185) + at org.eclipse.ui.OpenAndLinkWithEditorHelper$InternalListener.open(OpenAndLinkWithEditorHelper.java:48) + at org.eclipse.jface.viewers.StructuredViewer$2.run(StructuredViewer.java:866) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at org.eclipse.ui.internal.JFaceUtil$1.run(JFaceUtil.java:49) + at org.eclipse.jface.util.SafeRunnable.run(SafeRunnable.java:175) + at org.eclipse.jface.viewers.StructuredViewer.fireOpen(StructuredViewer.java:864) + at org.eclipse.jface.viewers.StructuredViewer.handleOpen(StructuredViewer.java:1152) + at org.eclipse.ui.navigator.CommonViewer.handleOpen(CommonViewer.java:462) + at org.eclipse.jface.viewers.StructuredViewer$6.handleOpen(StructuredViewer.java:1256) + at org.eclipse.jface.util.OpenStrategy.fireOpenEvent(OpenStrategy.java:275) + at org.eclipse.jface.util.OpenStrategy.access$2(OpenStrategy.java:269) + at org.eclipse.jface.util.OpenStrategy$1.handleEvent(OpenStrategy.java:309) + at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1258) + at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3588) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3209) + at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2696) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2660) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2494) + at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:674) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:667) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:123) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:344) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:616) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:622) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:577) + at org.eclipse.equinox.launcher.Main.run(Main.java:1410) +Caused by: java.io.IOException: java.io.IOException: error=2, No such file or directory + at java.lang.UNIXProcess.(UNIXProcess.java:164) + at java.lang.ProcessImpl.start(ProcessImpl.java:81) + at java.lang.ProcessBuilder.start(ProcessBuilder.java:468) + ... 72 more + +!ENTRY org.eclipse.linuxtools.rpm.ui.editor 4 0 2011-11-12 18:17:43.403 +!MESSAGE Unexpected Exception +!STACK 0 +java.io.IOException: Cannot run program "rpm": java.io.IOException: error=2, No such file or directory + at java.lang.ProcessBuilder.start(ProcessBuilder.java:475) + at org.eclipse.linuxtools.rpm.core.utils.Utils.runCommandToInputStream(Utils.java:47) + at org.eclipse.linuxtools.rpm.core.utils.Utils.runCommandToString(Utils.java:109) + at org.eclipse.linuxtools.rpm.ui.editor.RpmPackageProposalsList.getRpmInfo(RpmPackageProposalsList.java:110) + at org.eclipse.linuxtools.rpm.ui.editor.RpmPackageProposalsList.getProposals(RpmPackageProposalsList.java:87) + at org.eclipse.linuxtools.rpm.ui.editor.scanners.SpecfilePackagesScanner.(SpecfilePackagesScanner.java:69) + at org.eclipse.linuxtools.rpm.ui.editor.SpecfileConfiguration.getSpecfilePackagesScanner(SpecfileConfiguration.java:106) + at org.eclipse.linuxtools.rpm.ui.editor.SpecfileConfiguration.getPresentationReconciler(SpecfileConfiguration.java:141) + at org.eclipse.jface.text.source.SourceViewer.configure(SourceViewer.java:450) + at org.eclipse.ui.texteditor.AbstractTextEditor.createPartControl(AbstractTextEditor.java:3407) + at org.eclipse.ui.texteditor.StatusTextEditor.createPartControl(StatusTextEditor.java:54) + at org.eclipse.ui.texteditor.AbstractDecoratedTextEditor.createPartControl(AbstractDecoratedTextEditor.java:440) + at org.eclipse.linuxtools.rpm.ui.editor.SpecfileEditor.createPartControl(SpecfileEditor.java:195) + at org.eclipse.ui.internal.EditorReference.createPartHelper(EditorReference.java:670) + at org.eclipse.ui.internal.EditorReference.createPart(EditorReference.java:465) + at org.eclipse.ui.internal.WorkbenchPartReference.getPart(WorkbenchPartReference.java:595) + at org.eclipse.ui.internal.EditorReference.getEditor(EditorReference.java:289) + at org.eclipse.ui.internal.WorkbenchPage.busyOpenEditorBatched(WorkbenchPage.java:2945) + at org.eclipse.ui.internal.WorkbenchPage.busyOpenEditor(WorkbenchPage.java:2850) + at org.eclipse.ui.internal.WorkbenchPage.access$11(WorkbenchPage.java:2842) + at org.eclipse.ui.internal.WorkbenchPage$10.run(WorkbenchPage.java:2793) + at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70) + at org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:2789) + at org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:2773) + at org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:2764) + at org.eclipse.ui.ide.IDE.openEditor(IDE.java:651) + at org.eclipse.ui.ide.IDE.openEditor(IDE.java:610) + at org.eclipse.jdt.internal.ui.javaeditor.EditorUtility.openInEditor(EditorUtility.java:355) + at org.eclipse.jdt.internal.ui.javaeditor.EditorUtility.openInEditor(EditorUtility.java:164) + at org.eclipse.jdt.ui.actions.OpenAction.run(OpenAction.java:249) + at org.eclipse.jdt.ui.actions.OpenAction.run(OpenAction.java:228) + at org.eclipse.jdt.ui.actions.SelectionDispatchAction.dispatchRun(SelectionDispatchAction.java:275) + at org.eclipse.jdt.ui.actions.SelectionDispatchAction.run(SelectionDispatchAction.java:251) + at org.eclipse.jdt.internal.ui.navigator.OpenAndExpand.run(OpenAndExpand.java:50) + at org.eclipse.ui.actions.RetargetAction.run(RetargetAction.java:221) + at org.eclipse.ui.navigator.CommonNavigatorManager$3.open(CommonNavigatorManager.java:185) + at org.eclipse.ui.OpenAndLinkWithEditorHelper$InternalListener.open(OpenAndLinkWithEditorHelper.java:48) + at org.eclipse.jface.viewers.StructuredViewer$2.run(StructuredViewer.java:866) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at org.eclipse.ui.internal.JFaceUtil$1.run(JFaceUtil.java:49) + at org.eclipse.jface.util.SafeRunnable.run(SafeRunnable.java:175) + at org.eclipse.jface.viewers.StructuredViewer.fireOpen(StructuredViewer.java:864) + at org.eclipse.jface.viewers.StructuredViewer.handleOpen(StructuredViewer.java:1152) + at org.eclipse.ui.navigator.CommonViewer.handleOpen(CommonViewer.java:462) + at org.eclipse.jface.viewers.StructuredViewer$6.handleOpen(StructuredViewer.java:1256) + at org.eclipse.jface.util.OpenStrategy.fireOpenEvent(OpenStrategy.java:275) + at org.eclipse.jface.util.OpenStrategy.access$2(OpenStrategy.java:269) + at org.eclipse.jface.util.OpenStrategy$1.handleEvent(OpenStrategy.java:309) + at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1258) + at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3588) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3209) + at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2696) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2660) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2494) + at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:674) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:667) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:123) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:344) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:616) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:622) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:577) + at org.eclipse.equinox.launcher.Main.run(Main.java:1410) +Caused by: java.io.IOException: java.io.IOException: error=2, No such file or directory + at java.lang.UNIXProcess.(UNIXProcess.java:164) + at java.lang.ProcessImpl.start(ProcessImpl.java:81) + at java.lang.ProcessBuilder.start(ProcessBuilder.java:468) + ... 71 more + +!ENTRY org.eclipse.linuxtools.rpm.ui.editor 4 0 2011-11-12 18:18:40.812 +!MESSAGE Unexpected Exception +!STACK 0 +java.io.IOException: Cannot run program "rpm": java.io.IOException: error=2, No such file or directory + at java.lang.ProcessBuilder.start(ProcessBuilder.java:475) + at org.eclipse.linuxtools.rpm.core.utils.Utils.runCommandToInputStream(Utils.java:47) + at org.eclipse.linuxtools.rpm.core.utils.Utils.runCommandToString(Utils.java:109) + at org.eclipse.linuxtools.rpm.ui.editor.RpmPackageProposalsList.getRpmInfo(RpmPackageProposalsList.java:110) + at org.eclipse.linuxtools.rpm.ui.editor.RpmPackageProposalsList.getProposals(RpmPackageProposalsList.java:87) + at org.eclipse.linuxtools.rpm.ui.editor.Activator.getRpmPackageList(Activator.java:130) + at org.eclipse.linuxtools.rpm.ui.editor.scanners.SpecfilePackagesScanner.(SpecfilePackagesScanner.java:68) + at org.eclipse.linuxtools.rpm.ui.editor.SpecfileConfiguration.getSpecfilePackagesScanner(SpecfileConfiguration.java:106) + at org.eclipse.linuxtools.rpm.ui.editor.SpecfileConfiguration.getPresentationReconciler(SpecfileConfiguration.java:141) + at org.eclipse.jface.text.source.SourceViewer.configure(SourceViewer.java:450) + at org.eclipse.ui.texteditor.AbstractTextEditor.createPartControl(AbstractTextEditor.java:3407) + at org.eclipse.ui.texteditor.StatusTextEditor.createPartControl(StatusTextEditor.java:54) + at org.eclipse.ui.texteditor.AbstractDecoratedTextEditor.createPartControl(AbstractDecoratedTextEditor.java:440) + at org.eclipse.linuxtools.rpm.ui.editor.SpecfileEditor.createPartControl(SpecfileEditor.java:195) + at org.eclipse.ui.internal.EditorReference.createPartHelper(EditorReference.java:670) + at org.eclipse.ui.internal.EditorReference.createPart(EditorReference.java:465) + at org.eclipse.ui.internal.WorkbenchPartReference.getPart(WorkbenchPartReference.java:595) + at org.eclipse.ui.internal.PartPane.setVisible(PartPane.java:313) + at org.eclipse.ui.internal.presentations.PresentablePart.setVisible(PresentablePart.java:180) + at org.eclipse.ui.internal.presentations.util.PresentablePartFolder.select(PresentablePartFolder.java:270) + at org.eclipse.ui.internal.presentations.util.LeftToRightTabOrder.select(LeftToRightTabOrder.java:65) + at org.eclipse.ui.internal.presentations.util.TabbedStackPresentation.selectPart(TabbedStackPresentation.java:473) + at org.eclipse.ui.internal.PartStack.refreshPresentationSelection(PartStack.java:1245) + at org.eclipse.ui.internal.PartStack.setSelection(PartStack.java:1198) + at org.eclipse.ui.internal.PartStack.showPart(PartStack.java:1597) + at org.eclipse.ui.internal.PartStack.add(PartStack.java:493) + at org.eclipse.ui.internal.EditorStack.add(EditorStack.java:103) + at org.eclipse.ui.internal.PartStack.add(PartStack.java:479) + at org.eclipse.ui.internal.EditorStack.add(EditorStack.java:112) + at org.eclipse.ui.internal.EditorSashContainer.addEditor(EditorSashContainer.java:63) + at org.eclipse.ui.internal.EditorAreaHelper.addToLayout(EditorAreaHelper.java:225) + at org.eclipse.ui.internal.EditorAreaHelper.addEditor(EditorAreaHelper.java:213) + at org.eclipse.ui.internal.EditorManager.createEditorTab(EditorManager.java:808) + at org.eclipse.ui.internal.EditorManager.openEditorFromDescriptor(EditorManager.java:707) + at org.eclipse.ui.internal.EditorManager.openEditor(EditorManager.java:666) + at org.eclipse.ui.internal.WorkbenchPage.busyOpenEditorBatched(WorkbenchPage.java:2942) + at org.eclipse.ui.internal.WorkbenchPage.busyOpenEditor(WorkbenchPage.java:2850) + at org.eclipse.ui.internal.WorkbenchPage.access$11(WorkbenchPage.java:2842) + at org.eclipse.ui.internal.WorkbenchPage$10.run(WorkbenchPage.java:2793) + at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70) + at org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:2789) + at org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:2773) + at org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:2764) + at org.eclipse.ui.ide.IDE.openEditor(IDE.java:651) + at org.eclipse.ui.ide.IDE.openEditor(IDE.java:610) + at org.eclipse.jdt.internal.ui.javaeditor.EditorUtility.openInEditor(EditorUtility.java:355) + at org.eclipse.jdt.internal.ui.javaeditor.EditorUtility.openInEditor(EditorUtility.java:164) + at org.eclipse.jdt.ui.actions.OpenAction.run(OpenAction.java:249) + at org.eclipse.jdt.ui.actions.OpenAction.run(OpenAction.java:228) + at org.eclipse.jdt.ui.actions.SelectionDispatchAction.dispatchRun(SelectionDispatchAction.java:275) + at org.eclipse.jdt.ui.actions.SelectionDispatchAction.run(SelectionDispatchAction.java:251) + at org.eclipse.jface.action.Action.runWithEvent(Action.java:498) + at org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection(ActionContributionItem.java:584) + at org.eclipse.jface.action.ActionContributionItem.access$2(ActionContributionItem.java:501) + at org.eclipse.jface.action.ActionContributionItem$5.handleEvent(ActionContributionItem.java:411) + at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1258) + at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3588) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3209) + at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2696) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2660) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2494) + at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:674) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:667) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:123) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:344) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:616) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:622) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:577) + at org.eclipse.equinox.launcher.Main.run(Main.java:1410) +Caused by: java.io.IOException: java.io.IOException: error=2, No such file or directory + at java.lang.UNIXProcess.(UNIXProcess.java:164) + at java.lang.ProcessImpl.start(ProcessImpl.java:81) + at java.lang.ProcessBuilder.start(ProcessBuilder.java:468) + ... 78 more + +!ENTRY org.eclipse.linuxtools.rpm.ui.editor 4 0 2011-11-12 18:18:40.928 +!MESSAGE Unexpected Exception +!STACK 0 +java.io.IOException: Cannot run program "rpm": java.io.IOException: error=2, No such file or directory + at java.lang.ProcessBuilder.start(ProcessBuilder.java:475) + at org.eclipse.linuxtools.rpm.core.utils.Utils.runCommandToInputStream(Utils.java:47) + at org.eclipse.linuxtools.rpm.core.utils.Utils.runCommandToString(Utils.java:109) + at org.eclipse.linuxtools.rpm.ui.editor.RpmPackageProposalsList.getRpmInfo(RpmPackageProposalsList.java:110) + at org.eclipse.linuxtools.rpm.ui.editor.RpmPackageProposalsList.getProposals(RpmPackageProposalsList.java:87) + at org.eclipse.linuxtools.rpm.ui.editor.scanners.SpecfilePackagesScanner.(SpecfilePackagesScanner.java:69) + at org.eclipse.linuxtools.rpm.ui.editor.SpecfileConfiguration.getSpecfilePackagesScanner(SpecfileConfiguration.java:106) + at org.eclipse.linuxtools.rpm.ui.editor.SpecfileConfiguration.getPresentationReconciler(SpecfileConfiguration.java:141) + at org.eclipse.jface.text.source.SourceViewer.configure(SourceViewer.java:450) + at org.eclipse.ui.texteditor.AbstractTextEditor.createPartControl(AbstractTextEditor.java:3407) + at org.eclipse.ui.texteditor.StatusTextEditor.createPartControl(StatusTextEditor.java:54) + at org.eclipse.ui.texteditor.AbstractDecoratedTextEditor.createPartControl(AbstractDecoratedTextEditor.java:440) + at org.eclipse.linuxtools.rpm.ui.editor.SpecfileEditor.createPartControl(SpecfileEditor.java:195) + at org.eclipse.ui.internal.EditorReference.createPartHelper(EditorReference.java:670) + at org.eclipse.ui.internal.EditorReference.createPart(EditorReference.java:465) + at org.eclipse.ui.internal.WorkbenchPartReference.getPart(WorkbenchPartReference.java:595) + at org.eclipse.ui.internal.PartPane.setVisible(PartPane.java:313) + at org.eclipse.ui.internal.presentations.PresentablePart.setVisible(PresentablePart.java:180) + at org.eclipse.ui.internal.presentations.util.PresentablePartFolder.select(PresentablePartFolder.java:270) + at org.eclipse.ui.internal.presentations.util.LeftToRightTabOrder.select(LeftToRightTabOrder.java:65) + at org.eclipse.ui.internal.presentations.util.TabbedStackPresentation.selectPart(TabbedStackPresentation.java:473) + at org.eclipse.ui.internal.PartStack.refreshPresentationSelection(PartStack.java:1245) + at org.eclipse.ui.internal.PartStack.setSelection(PartStack.java:1198) + at org.eclipse.ui.internal.PartStack.showPart(PartStack.java:1597) + at org.eclipse.ui.internal.PartStack.add(PartStack.java:493) + at org.eclipse.ui.internal.EditorStack.add(EditorStack.java:103) + at org.eclipse.ui.internal.PartStack.add(PartStack.java:479) + at org.eclipse.ui.internal.EditorStack.add(EditorStack.java:112) + at org.eclipse.ui.internal.EditorSashContainer.addEditor(EditorSashContainer.java:63) + at org.eclipse.ui.internal.EditorAreaHelper.addToLayout(EditorAreaHelper.java:225) + at org.eclipse.ui.internal.EditorAreaHelper.addEditor(EditorAreaHelper.java:213) + at org.eclipse.ui.internal.EditorManager.createEditorTab(EditorManager.java:808) + at org.eclipse.ui.internal.EditorManager.openEditorFromDescriptor(EditorManager.java:707) + at org.eclipse.ui.internal.EditorManager.openEditor(EditorManager.java:666) + at org.eclipse.ui.internal.WorkbenchPage.busyOpenEditorBatched(WorkbenchPage.java:2942) + at org.eclipse.ui.internal.WorkbenchPage.busyOpenEditor(WorkbenchPage.java:2850) + at org.eclipse.ui.internal.WorkbenchPage.access$11(WorkbenchPage.java:2842) + at org.eclipse.ui.internal.WorkbenchPage$10.run(WorkbenchPage.java:2793) + at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70) + at org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:2789) + at org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:2773) + at org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:2764) + at org.eclipse.ui.ide.IDE.openEditor(IDE.java:651) + at org.eclipse.ui.ide.IDE.openEditor(IDE.java:610) + at org.eclipse.jdt.internal.ui.javaeditor.EditorUtility.openInEditor(EditorUtility.java:355) + at org.eclipse.jdt.internal.ui.javaeditor.EditorUtility.openInEditor(EditorUtility.java:164) + at org.eclipse.jdt.ui.actions.OpenAction.run(OpenAction.java:249) + at org.eclipse.jdt.ui.actions.OpenAction.run(OpenAction.java:228) + at org.eclipse.jdt.ui.actions.SelectionDispatchAction.dispatchRun(SelectionDispatchAction.java:275) + at org.eclipse.jdt.ui.actions.SelectionDispatchAction.run(SelectionDispatchAction.java:251) + at org.eclipse.jface.action.Action.runWithEvent(Action.java:498) + at org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection(ActionContributionItem.java:584) + at org.eclipse.jface.action.ActionContributionItem.access$2(ActionContributionItem.java:501) + at org.eclipse.jface.action.ActionContributionItem$5.handleEvent(ActionContributionItem.java:411) + at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1258) + at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3588) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3209) + at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2696) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2660) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2494) + at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:674) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:667) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:123) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:344) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:616) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:622) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:577) + at org.eclipse.equinox.launcher.Main.run(Main.java:1410) +Caused by: java.io.IOException: java.io.IOException: error=2, No such file or directory + at java.lang.UNIXProcess.(UNIXProcess.java:164) + at java.lang.ProcessImpl.start(ProcessImpl.java:81) + at java.lang.ProcessBuilder.start(ProcessBuilder.java:468) + ... 77 more + +!ENTRY org.eclipse.linuxtools.rpm.ui.editor 4 0 2011-11-12 18:18:45.597 +!MESSAGE Unexpected Exception +!STACK 0 +java.io.IOException: Cannot run program "rpm": java.io.IOException: error=2, No such file or directory + at java.lang.ProcessBuilder.start(ProcessBuilder.java:475) + at org.eclipse.linuxtools.rpm.core.utils.Utils.runCommandToInputStream(Utils.java:47) + at org.eclipse.linuxtools.rpm.core.utils.Utils.runCommandToString(Utils.java:109) + at org.eclipse.linuxtools.rpm.ui.editor.RpmPackageProposalsList.getRpmInfo(RpmPackageProposalsList.java:110) + at org.eclipse.linuxtools.rpm.ui.editor.RpmPackageProposalsList.getProposals(RpmPackageProposalsList.java:87) + at org.eclipse.linuxtools.rpm.ui.editor.Activator.getRpmPackageList(Activator.java:130) + at org.eclipse.linuxtools.rpm.ui.editor.scanners.SpecfilePackagesScanner.(SpecfilePackagesScanner.java:68) + at org.eclipse.linuxtools.rpm.ui.editor.SpecfileConfiguration.getSpecfilePackagesScanner(SpecfileConfiguration.java:106) + at org.eclipse.linuxtools.rpm.ui.editor.SpecfileConfiguration.getPresentationReconciler(SpecfileConfiguration.java:141) + at org.eclipse.jface.text.source.SourceViewer.configure(SourceViewer.java:450) + at org.eclipse.ui.texteditor.AbstractTextEditor.createPartControl(AbstractTextEditor.java:3407) + at org.eclipse.ui.texteditor.StatusTextEditor.createPartControl(StatusTextEditor.java:54) + at org.eclipse.ui.texteditor.AbstractDecoratedTextEditor.createPartControl(AbstractDecoratedTextEditor.java:440) + at org.eclipse.linuxtools.rpm.ui.editor.SpecfileEditor.createPartControl(SpecfileEditor.java:195) + at org.eclipse.ui.internal.EditorReference.createPartHelper(EditorReference.java:670) + at org.eclipse.ui.internal.EditorReference.createPart(EditorReference.java:465) + at org.eclipse.ui.internal.WorkbenchPartReference.getPart(WorkbenchPartReference.java:595) + at org.eclipse.ui.internal.EditorReference.getEditor(EditorReference.java:289) + at org.eclipse.ui.internal.WorkbenchPage.busyOpenEditorBatched(WorkbenchPage.java:2945) + at org.eclipse.ui.internal.WorkbenchPage.busyOpenEditor(WorkbenchPage.java:2850) + at org.eclipse.ui.internal.WorkbenchPage.access$11(WorkbenchPage.java:2842) + at org.eclipse.ui.internal.WorkbenchPage$10.run(WorkbenchPage.java:2793) + at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70) + at org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:2789) + at org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:2773) + at org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:2764) + at org.eclipse.ui.ide.IDE.openEditor(IDE.java:651) + at org.eclipse.ui.ide.IDE.openEditor(IDE.java:610) + at org.eclipse.jdt.internal.ui.javaeditor.EditorUtility.openInEditor(EditorUtility.java:355) + at org.eclipse.jdt.internal.ui.javaeditor.EditorUtility.openInEditor(EditorUtility.java:164) + at org.eclipse.jdt.ui.actions.OpenAction.run(OpenAction.java:249) + at org.eclipse.jdt.ui.actions.OpenAction.run(OpenAction.java:228) + at org.eclipse.jdt.ui.actions.SelectionDispatchAction.dispatchRun(SelectionDispatchAction.java:275) + at org.eclipse.jdt.ui.actions.SelectionDispatchAction.run(SelectionDispatchAction.java:251) + at org.eclipse.jface.action.Action.runWithEvent(Action.java:498) + at org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection(ActionContributionItem.java:584) + at org.eclipse.jface.action.ActionContributionItem.access$2(ActionContributionItem.java:501) + at org.eclipse.jface.action.ActionContributionItem$5.handleEvent(ActionContributionItem.java:411) + at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1258) + at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3588) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3209) + at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2696) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2660) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2494) + at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:674) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:667) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:123) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:344) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:616) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:622) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:577) + at org.eclipse.equinox.launcher.Main.run(Main.java:1410) +Caused by: java.io.IOException: java.io.IOException: error=2, No such file or directory + at java.lang.UNIXProcess.(UNIXProcess.java:164) + at java.lang.ProcessImpl.start(ProcessImpl.java:81) + at java.lang.ProcessBuilder.start(ProcessBuilder.java:468) + ... 61 more + +!ENTRY org.eclipse.linuxtools.rpm.ui.editor 4 0 2011-11-12 18:18:45.644 +!MESSAGE Unexpected Exception +!STACK 0 +java.io.IOException: Cannot run program "rpm": java.io.IOException: error=2, No such file or directory + at java.lang.ProcessBuilder.start(ProcessBuilder.java:475) + at org.eclipse.linuxtools.rpm.core.utils.Utils.runCommandToInputStream(Utils.java:47) + at org.eclipse.linuxtools.rpm.core.utils.Utils.runCommandToString(Utils.java:109) + at org.eclipse.linuxtools.rpm.ui.editor.RpmPackageProposalsList.getRpmInfo(RpmPackageProposalsList.java:110) + at org.eclipse.linuxtools.rpm.ui.editor.RpmPackageProposalsList.getProposals(RpmPackageProposalsList.java:87) + at org.eclipse.linuxtools.rpm.ui.editor.scanners.SpecfilePackagesScanner.(SpecfilePackagesScanner.java:69) + at org.eclipse.linuxtools.rpm.ui.editor.SpecfileConfiguration.getSpecfilePackagesScanner(SpecfileConfiguration.java:106) + at org.eclipse.linuxtools.rpm.ui.editor.SpecfileConfiguration.getPresentationReconciler(SpecfileConfiguration.java:141) + at org.eclipse.jface.text.source.SourceViewer.configure(SourceViewer.java:450) + at org.eclipse.ui.texteditor.AbstractTextEditor.createPartControl(AbstractTextEditor.java:3407) + at org.eclipse.ui.texteditor.StatusTextEditor.createPartControl(StatusTextEditor.java:54) + at org.eclipse.ui.texteditor.AbstractDecoratedTextEditor.createPartControl(AbstractDecoratedTextEditor.java:440) + at org.eclipse.linuxtools.rpm.ui.editor.SpecfileEditor.createPartControl(SpecfileEditor.java:195) + at org.eclipse.ui.internal.EditorReference.createPartHelper(EditorReference.java:670) + at org.eclipse.ui.internal.EditorReference.createPart(EditorReference.java:465) + at org.eclipse.ui.internal.WorkbenchPartReference.getPart(WorkbenchPartReference.java:595) + at org.eclipse.ui.internal.EditorReference.getEditor(EditorReference.java:289) + at org.eclipse.ui.internal.WorkbenchPage.busyOpenEditorBatched(WorkbenchPage.java:2945) + at org.eclipse.ui.internal.WorkbenchPage.busyOpenEditor(WorkbenchPage.java:2850) + at org.eclipse.ui.internal.WorkbenchPage.access$11(WorkbenchPage.java:2842) + at org.eclipse.ui.internal.WorkbenchPage$10.run(WorkbenchPage.java:2793) + at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70) + at org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:2789) + at org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:2773) + at org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:2764) + at org.eclipse.ui.ide.IDE.openEditor(IDE.java:651) + at org.eclipse.ui.ide.IDE.openEditor(IDE.java:610) + at org.eclipse.jdt.internal.ui.javaeditor.EditorUtility.openInEditor(EditorUtility.java:355) + at org.eclipse.jdt.internal.ui.javaeditor.EditorUtility.openInEditor(EditorUtility.java:164) + at org.eclipse.jdt.ui.actions.OpenAction.run(OpenAction.java:249) + at org.eclipse.jdt.ui.actions.OpenAction.run(OpenAction.java:228) + at org.eclipse.jdt.ui.actions.SelectionDispatchAction.dispatchRun(SelectionDispatchAction.java:275) + at org.eclipse.jdt.ui.actions.SelectionDispatchAction.run(SelectionDispatchAction.java:251) + at org.eclipse.jface.action.Action.runWithEvent(Action.java:498) + at org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection(ActionContributionItem.java:584) + at org.eclipse.jface.action.ActionContributionItem.access$2(ActionContributionItem.java:501) + at org.eclipse.jface.action.ActionContributionItem$5.handleEvent(ActionContributionItem.java:411) + at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1258) + at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3588) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3209) + at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2696) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2660) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2494) + at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:674) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:667) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:123) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:344) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:616) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:622) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:577) + at org.eclipse.equinox.launcher.Main.run(Main.java:1410) +Caused by: java.io.IOException: java.io.IOException: error=2, No such file or directory + at java.lang.UNIXProcess.(UNIXProcess.java:164) + at java.lang.ProcessImpl.start(ProcessImpl.java:81) + at java.lang.ProcessBuilder.start(ProcessBuilder.java:468) + ... 60 more + +!ENTRY org.eclipse.linuxtools.rpm.ui.editor 4 0 2011-11-12 18:18:49.581 +!MESSAGE Unexpected Exception +!STACK 0 +java.io.IOException: Cannot run program "rpm": java.io.IOException: error=2, No such file or directory + at java.lang.ProcessBuilder.start(ProcessBuilder.java:475) + at org.eclipse.linuxtools.rpm.core.utils.Utils.runCommandToInputStream(Utils.java:47) + at org.eclipse.linuxtools.rpm.core.utils.Utils.runCommandToString(Utils.java:109) + at org.eclipse.linuxtools.rpm.ui.editor.RpmPackageProposalsList.getRpmInfo(RpmPackageProposalsList.java:110) + at org.eclipse.linuxtools.rpm.ui.editor.RpmPackageProposalsList.getProposals(RpmPackageProposalsList.java:87) + at org.eclipse.linuxtools.rpm.ui.editor.Activator.getRpmPackageList(Activator.java:130) + at org.eclipse.linuxtools.rpm.ui.editor.scanners.SpecfilePackagesScanner.(SpecfilePackagesScanner.java:68) + at org.eclipse.linuxtools.rpm.ui.editor.SpecfileConfiguration.getSpecfilePackagesScanner(SpecfileConfiguration.java:106) + at org.eclipse.linuxtools.rpm.ui.editor.SpecfileConfiguration.getPresentationReconciler(SpecfileConfiguration.java:141) + at org.eclipse.jface.text.source.SourceViewer.configure(SourceViewer.java:450) + at org.eclipse.ui.texteditor.AbstractTextEditor.createPartControl(AbstractTextEditor.java:3407) + at org.eclipse.ui.texteditor.StatusTextEditor.createPartControl(StatusTextEditor.java:54) + at org.eclipse.ui.texteditor.AbstractDecoratedTextEditor.createPartControl(AbstractDecoratedTextEditor.java:440) + at org.eclipse.linuxtools.rpm.ui.editor.SpecfileEditor.createPartControl(SpecfileEditor.java:195) + at org.eclipse.ui.internal.EditorReference.createPartHelper(EditorReference.java:670) + at org.eclipse.ui.internal.EditorReference.createPart(EditorReference.java:465) + at org.eclipse.ui.internal.WorkbenchPartReference.getPart(WorkbenchPartReference.java:595) + at org.eclipse.ui.internal.EditorReference.getEditor(EditorReference.java:289) + at org.eclipse.ui.internal.WorkbenchPage.busyOpenEditorBatched(WorkbenchPage.java:2945) + at org.eclipse.ui.internal.WorkbenchPage.busyOpenEditor(WorkbenchPage.java:2850) + at org.eclipse.ui.internal.WorkbenchPage.access$11(WorkbenchPage.java:2842) + at org.eclipse.ui.internal.WorkbenchPage$10.run(WorkbenchPage.java:2793) + at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70) + at org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:2789) + at org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:2773) + at org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:2764) + at org.eclipse.ui.ide.IDE.openEditor(IDE.java:651) + at org.eclipse.ui.ide.IDE.openEditor(IDE.java:610) + at org.eclipse.jdt.internal.ui.javaeditor.EditorUtility.openInEditor(EditorUtility.java:355) + at org.eclipse.jdt.internal.ui.javaeditor.EditorUtility.openInEditor(EditorUtility.java:164) + at org.eclipse.jdt.ui.actions.OpenAction.run(OpenAction.java:249) + at org.eclipse.jdt.ui.actions.OpenAction.run(OpenAction.java:228) + at org.eclipse.jdt.ui.actions.SelectionDispatchAction.dispatchRun(SelectionDispatchAction.java:275) + at org.eclipse.jdt.ui.actions.SelectionDispatchAction.run(SelectionDispatchAction.java:251) + at org.eclipse.jface.action.Action.runWithEvent(Action.java:498) + at org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection(ActionContributionItem.java:584) + at org.eclipse.jface.action.ActionContributionItem.access$2(ActionContributionItem.java:501) + at org.eclipse.jface.action.ActionContributionItem$5.handleEvent(ActionContributionItem.java:411) + at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1258) + at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3588) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3209) + at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2696) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2660) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2494) + at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:674) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:667) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:123) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:344) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:616) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:622) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:577) + at org.eclipse.equinox.launcher.Main.run(Main.java:1410) +Caused by: java.io.IOException: java.io.IOException: error=2, No such file or directory + at java.lang.UNIXProcess.(UNIXProcess.java:164) + at java.lang.ProcessImpl.start(ProcessImpl.java:81) + at java.lang.ProcessBuilder.start(ProcessBuilder.java:468) + ... 61 more + +!ENTRY org.eclipse.linuxtools.rpm.ui.editor 4 0 2011-11-12 18:18:49.669 +!MESSAGE Unexpected Exception +!STACK 0 +java.io.IOException: Cannot run program "rpm": java.io.IOException: error=2, No such file or directory + at java.lang.ProcessBuilder.start(ProcessBuilder.java:475) + at org.eclipse.linuxtools.rpm.core.utils.Utils.runCommandToInputStream(Utils.java:47) + at org.eclipse.linuxtools.rpm.core.utils.Utils.runCommandToString(Utils.java:109) + at org.eclipse.linuxtools.rpm.ui.editor.RpmPackageProposalsList.getRpmInfo(RpmPackageProposalsList.java:110) + at org.eclipse.linuxtools.rpm.ui.editor.RpmPackageProposalsList.getProposals(RpmPackageProposalsList.java:87) + at org.eclipse.linuxtools.rpm.ui.editor.scanners.SpecfilePackagesScanner.(SpecfilePackagesScanner.java:69) + at org.eclipse.linuxtools.rpm.ui.editor.SpecfileConfiguration.getSpecfilePackagesScanner(SpecfileConfiguration.java:106) + at org.eclipse.linuxtools.rpm.ui.editor.SpecfileConfiguration.getPresentationReconciler(SpecfileConfiguration.java:141) + at org.eclipse.jface.text.source.SourceViewer.configure(SourceViewer.java:450) + at org.eclipse.ui.texteditor.AbstractTextEditor.createPartControl(AbstractTextEditor.java:3407) + at org.eclipse.ui.texteditor.StatusTextEditor.createPartControl(StatusTextEditor.java:54) + at org.eclipse.ui.texteditor.AbstractDecoratedTextEditor.createPartControl(AbstractDecoratedTextEditor.java:440) + at org.eclipse.linuxtools.rpm.ui.editor.SpecfileEditor.createPartControl(SpecfileEditor.java:195) + at org.eclipse.ui.internal.EditorReference.createPartHelper(EditorReference.java:670) + at org.eclipse.ui.internal.EditorReference.createPart(EditorReference.java:465) + at org.eclipse.ui.internal.WorkbenchPartReference.getPart(WorkbenchPartReference.java:595) + at org.eclipse.ui.internal.EditorReference.getEditor(EditorReference.java:289) + at org.eclipse.ui.internal.WorkbenchPage.busyOpenEditorBatched(WorkbenchPage.java:2945) + at org.eclipse.ui.internal.WorkbenchPage.busyOpenEditor(WorkbenchPage.java:2850) + at org.eclipse.ui.internal.WorkbenchPage.access$11(WorkbenchPage.java:2842) + at org.eclipse.ui.internal.WorkbenchPage$10.run(WorkbenchPage.java:2793) + at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70) + at org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:2789) + at org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:2773) + at org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:2764) + at org.eclipse.ui.ide.IDE.openEditor(IDE.java:651) + at org.eclipse.ui.ide.IDE.openEditor(IDE.java:610) + at org.eclipse.jdt.internal.ui.javaeditor.EditorUtility.openInEditor(EditorUtility.java:355) + at org.eclipse.jdt.internal.ui.javaeditor.EditorUtility.openInEditor(EditorUtility.java:164) + at org.eclipse.jdt.ui.actions.OpenAction.run(OpenAction.java:249) + at org.eclipse.jdt.ui.actions.OpenAction.run(OpenAction.java:228) + at org.eclipse.jdt.ui.actions.SelectionDispatchAction.dispatchRun(SelectionDispatchAction.java:275) + at org.eclipse.jdt.ui.actions.SelectionDispatchAction.run(SelectionDispatchAction.java:251) + at org.eclipse.jface.action.Action.runWithEvent(Action.java:498) + at org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection(ActionContributionItem.java:584) + at org.eclipse.jface.action.ActionContributionItem.access$2(ActionContributionItem.java:501) + at org.eclipse.jface.action.ActionContributionItem$5.handleEvent(ActionContributionItem.java:411) + at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1258) + at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3588) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3209) + at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2696) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2660) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2494) + at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:674) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:667) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:123) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:344) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:616) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:622) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:577) + at org.eclipse.equinox.launcher.Main.run(Main.java:1410) +Caused by: java.io.IOException: java.io.IOException: error=2, No such file or directory + at java.lang.UNIXProcess.(UNIXProcess.java:164) + at java.lang.ProcessImpl.start(ProcessImpl.java:81) + at java.lang.ProcessBuilder.start(ProcessBuilder.java:468) + ... 60 more + +!ENTRY org.eclipse.linuxtools.rpm.ui.editor 4 0 2011-11-12 18:19:24.848 +!MESSAGE Unexpected Exception +!STACK 0 +java.io.IOException: Cannot run program "rpm": java.io.IOException: error=2, No such file or directory + at java.lang.ProcessBuilder.start(ProcessBuilder.java:475) + at org.eclipse.linuxtools.rpm.core.utils.Utils.runCommandToInputStream(Utils.java:47) + at org.eclipse.linuxtools.rpm.core.utils.Utils.runCommandToString(Utils.java:109) + at org.eclipse.linuxtools.rpm.ui.editor.RpmPackageProposalsList.getRpmInfo(RpmPackageProposalsList.java:110) + at org.eclipse.linuxtools.rpm.ui.editor.RpmPackageProposalsList.getProposals(RpmPackageProposalsList.java:87) + at org.eclipse.linuxtools.rpm.ui.editor.Activator.getRpmPackageList(Activator.java:130) + at org.eclipse.linuxtools.rpm.ui.editor.SpecfileHover.getHoverInfo(SpecfileHover.java:86) + at org.eclipse.jface.text.TextViewerHoverManager$4.run(TextViewerHoverManager.java:168) +Caused by: java.io.IOException: java.io.IOException: error=2, No such file or directory + at java.lang.UNIXProcess.(UNIXProcess.java:164) + at java.lang.ProcessImpl.start(ProcessImpl.java:81) + at java.lang.ProcessBuilder.start(ProcessBuilder.java:468) + ... 7 more + +!ENTRY org.eclipse.linuxtools.rpm.ui.editor 4 0 2011-11-12 18:19:27.253 +!MESSAGE Unexpected Exception +!STACK 0 +java.io.IOException: Cannot run program "rpm": java.io.IOException: error=2, No such file or directory + at java.lang.ProcessBuilder.start(ProcessBuilder.java:475) + at org.eclipse.linuxtools.rpm.core.utils.Utils.runCommandToInputStream(Utils.java:47) + at org.eclipse.linuxtools.rpm.core.utils.Utils.runCommandToString(Utils.java:109) + at org.eclipse.linuxtools.rpm.ui.editor.RpmPackageProposalsList.getRpmInfo(RpmPackageProposalsList.java:110) + at org.eclipse.linuxtools.rpm.ui.editor.RpmPackageProposalsList.getProposals(RpmPackageProposalsList.java:87) + at org.eclipse.linuxtools.rpm.ui.editor.Activator.getRpmPackageList(Activator.java:130) + at org.eclipse.linuxtools.rpm.ui.editor.SpecfileHover.getHoverInfo(SpecfileHover.java:86) + at org.eclipse.jface.text.TextViewerHoverManager$4.run(TextViewerHoverManager.java:168) +Caused by: java.io.IOException: java.io.IOException: error=2, No such file or directory + at java.lang.UNIXProcess.(UNIXProcess.java:164) + at java.lang.ProcessImpl.start(ProcessImpl.java:81) + at java.lang.ProcessBuilder.start(ProcessBuilder.java:468) + ... 7 more + +!ENTRY org.eclipse.linuxtools.rpm.ui.editor 4 0 2011-11-12 18:24:23.058 +!MESSAGE Unexpected Exception +!STACK 0 +java.io.IOException: Cannot run program "rpm": java.io.IOException: error=2, No such file or directory + at java.lang.ProcessBuilder.start(ProcessBuilder.java:475) + at org.eclipse.linuxtools.rpm.core.utils.Utils.runCommandToInputStream(Utils.java:47) + at org.eclipse.linuxtools.rpm.core.utils.Utils.runCommandToString(Utils.java:109) + at org.eclipse.linuxtools.rpm.ui.editor.RpmPackageProposalsList.getRpmInfo(RpmPackageProposalsList.java:110) + at org.eclipse.linuxtools.rpm.ui.editor.RpmPackageProposalsList.getProposals(RpmPackageProposalsList.java:87) + at org.eclipse.linuxtools.rpm.ui.editor.Activator.getRpmPackageList(Activator.java:130) + at org.eclipse.linuxtools.rpm.ui.editor.SpecfileHover.getHoverInfo(SpecfileHover.java:86) + at org.eclipse.jface.text.TextViewerHoverManager$4.run(TextViewerHoverManager.java:168) +Caused by: java.io.IOException: java.io.IOException: error=2, No such file or directory + at java.lang.UNIXProcess.(UNIXProcess.java:164) + at java.lang.ProcessImpl.start(ProcessImpl.java:81) + at java.lang.ProcessBuilder.start(ProcessBuilder.java:468) + ... 7 more + +!ENTRY org.eclipse.linuxtools.rpm.ui.editor 4 0 2011-11-12 18:24:31.907 +!MESSAGE Unexpected Exception +!STACK 0 +java.io.IOException: Cannot run program "rpm": java.io.IOException: error=2, No such file or directory + at java.lang.ProcessBuilder.start(ProcessBuilder.java:475) + at org.eclipse.linuxtools.rpm.core.utils.Utils.runCommandToInputStream(Utils.java:47) + at org.eclipse.linuxtools.rpm.core.utils.Utils.runCommandToString(Utils.java:109) + at org.eclipse.linuxtools.rpm.ui.editor.RpmPackageProposalsList.getRpmInfo(RpmPackageProposalsList.java:110) + at org.eclipse.linuxtools.rpm.ui.editor.RpmPackageProposalsList.getProposals(RpmPackageProposalsList.java:87) + at org.eclipse.linuxtools.rpm.ui.editor.Activator.getRpmPackageList(Activator.java:130) + at org.eclipse.linuxtools.rpm.ui.editor.SpecfileHover.getHoverInfo(SpecfileHover.java:86) + at org.eclipse.jface.text.TextViewerHoverManager$4.run(TextViewerHoverManager.java:168) +Caused by: java.io.IOException: java.io.IOException: error=2, No such file or directory + at java.lang.UNIXProcess.(UNIXProcess.java:164) + at java.lang.ProcessImpl.start(ProcessImpl.java:81) + at java.lang.ProcessBuilder.start(ProcessBuilder.java:468) + ... 7 more + +!ENTRY org.eclipse.linuxtools.rpm.ui.editor 4 0 2011-11-12 18:24:59.362 +!MESSAGE Unexpected Exception +!STACK 0 +java.io.IOException: Cannot run program "rpm": java.io.IOException: error=2, No such file or directory + at java.lang.ProcessBuilder.start(ProcessBuilder.java:475) + at org.eclipse.linuxtools.rpm.core.utils.Utils.runCommandToInputStream(Utils.java:47) + at org.eclipse.linuxtools.rpm.core.utils.Utils.runCommandToString(Utils.java:109) + at org.eclipse.linuxtools.rpm.ui.editor.RpmPackageProposalsList.getRpmInfo(RpmPackageProposalsList.java:110) + at org.eclipse.linuxtools.rpm.ui.editor.RpmPackageProposalsList.getProposals(RpmPackageProposalsList.java:87) + at org.eclipse.linuxtools.rpm.ui.editor.Activator.getRpmPackageList(Activator.java:130) + at org.eclipse.linuxtools.rpm.ui.editor.SpecfileHover.getHoverInfo(SpecfileHover.java:86) + at org.eclipse.jface.text.TextViewerHoverManager$4.run(TextViewerHoverManager.java:168) +Caused by: java.io.IOException: java.io.IOException: error=2, No such file or directory + at java.lang.UNIXProcess.(UNIXProcess.java:164) + at java.lang.ProcessImpl.start(ProcessImpl.java:81) + at java.lang.ProcessBuilder.start(ProcessBuilder.java:468) + ... 7 more + +!ENTRY org.eclipse.linuxtools.rpm.ui.editor 4 0 2011-11-12 18:25:22.785 +!MESSAGE Unexpected Exception +!STACK 0 +java.io.IOException: Cannot run program "rpm": java.io.IOException: error=2, No such file or directory + at java.lang.ProcessBuilder.start(ProcessBuilder.java:475) + at org.eclipse.linuxtools.rpm.core.utils.Utils.runCommandToInputStream(Utils.java:47) + at org.eclipse.linuxtools.rpm.core.utils.Utils.runCommandToString(Utils.java:109) + at org.eclipse.linuxtools.rpm.ui.editor.RpmPackageProposalsList.getRpmInfo(RpmPackageProposalsList.java:110) + at org.eclipse.linuxtools.rpm.ui.editor.RpmPackageProposalsList.getProposals(RpmPackageProposalsList.java:87) + at org.eclipse.linuxtools.rpm.ui.editor.Activator.getRpmPackageList(Activator.java:130) + at org.eclipse.linuxtools.rpm.ui.editor.SpecfileHover.getHoverInfo(SpecfileHover.java:86) + at org.eclipse.jface.text.TextViewerHoverManager$4.run(TextViewerHoverManager.java:168) +Caused by: java.io.IOException: java.io.IOException: error=2, No such file or directory + at java.lang.UNIXProcess.(UNIXProcess.java:164) + at java.lang.ProcessImpl.start(ProcessImpl.java:81) + at java.lang.ProcessBuilder.start(ProcessBuilder.java:468) + ... 7 more + +!ENTRY org.eclipse.linuxtools.rpm.ui.editor 4 0 2011-11-12 18:25:39.473 +!MESSAGE Unexpected Exception +!STACK 0 +java.io.IOException: Cannot run program "rpm": java.io.IOException: error=2, No such file or directory + at java.lang.ProcessBuilder.start(ProcessBuilder.java:475) + at org.eclipse.linuxtools.rpm.core.utils.Utils.runCommandToInputStream(Utils.java:47) + at org.eclipse.linuxtools.rpm.core.utils.Utils.runCommandToString(Utils.java:109) + at org.eclipse.linuxtools.rpm.ui.editor.RpmPackageProposalsList.getRpmInfo(RpmPackageProposalsList.java:110) + at org.eclipse.linuxtools.rpm.ui.editor.RpmPackageProposalsList.getProposals(RpmPackageProposalsList.java:87) + at org.eclipse.linuxtools.rpm.ui.editor.Activator.getRpmPackageList(Activator.java:130) + at org.eclipse.linuxtools.rpm.ui.editor.SpecfileHover.getHoverInfo(SpecfileHover.java:86) + at org.eclipse.jface.text.TextViewerHoverManager$4.run(TextViewerHoverManager.java:168) +Caused by: java.io.IOException: java.io.IOException: error=2, No such file or directory + at java.lang.UNIXProcess.(UNIXProcess.java:164) + at java.lang.ProcessImpl.start(ProcessImpl.java:81) + at java.lang.ProcessBuilder.start(ProcessBuilder.java:468) + ... 7 more diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.history/14/209112a3850d00111528b7e658abf294 b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.history/14/209112a3850d00111528b7e658abf294 new file mode 100644 index 000000000..e148fc449 --- /dev/null +++ b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.history/14/209112a3850d00111528b7e658abf294 @@ -0,0 +1,415 @@ +# +# spec file for package qt3 +# +# Copyright (c) 2011 SUSE LINUX Products GmbH, Nuernberg, Germany. +# +# All modifications and additions to the file contributed by third parties +# remain the property of their copyright owners, unless otherwise agreed +# upon. The license for this file, and modifications and additions to the +# file, is the same license as for the pristine package itself (unless the +# license for the pristine package is not an Open Source License, in which +# case the license is the MIT License). An "Open Source License" is a +# license that conforms to the Open Source Definition (Version 1.9) +# published by the Open Source Initiative. + +# Please submit bugfixes or comments via http://bugs.opensuse.org/ +# + + + +Name: qt3 +#Remember also to modify Requires in -devel package +BuildRequires: Mesa-devel c++_compiler cups-devel freetype2-devel libjpeg-devel libmng-devel pkgconfig update-desktop-files xorg-x11-devel +Url: http://www.trolltech.com/ +License: GPLv2 ; GPLv3 ; QPL .. +%if %suse_version > 1120 +BuildRequires: libpng14-compat-devel +%else +BuildRequires: libpng-devel +%endif +Group: System/Libraries +# bug437293 +%ifarch ppc64 +Obsoletes: qt3-64bit +%endif +# +Summary: A library for developing applications with graphical user interfaces +Version: 3.3.8d +Release: 110 +Provides: qt_library_%version +Recommends: kdelibs3-default-style +PreReq: /bin/grep +# COMMON-BEGIN +%define x11_free -x11-free- +%define rversion 3.3.8b +Source0: http://mirror.its.uidaho.edu/pub/trinity/releases/3.5.13/dependencies/qt3-3.3.8.d.tar.gz +Source1: build_script.sh +Source2: qtconfig3.desktop +Source3: qtrc +Source4: assistant3.png +Source6: assistant3.desktop +Source7: designer.desktop +Source8: designer.png +Source9: linguist.desktop +Source5: linguist.png +Source10: qt3.sh +Source11: qt3.csh +# Translations did not change at 3.3.8c +Source12: qt3-3.3.8b-translations.tar.bz2 +Source100: qtkdeintegration_x11.cpp +Source101: qtkdeintegration_x11_p.h +Source102: baselibs.conf +Source200: attributes +Source201: update_spec.pl +Patch1: aliasing.diff +Patch2: head.diff +Patch4: qt3-never-strip.diff +Patch5: external-libs.diff +Patch6: 0001-dnd_optimization.patch +Patch7: 0002-dnd_active_window_fix.patch +Patch8: 0007-qpixmap_constants.patch +Patch11: 0038-dragobject-dont-prefer-unknown.patch +Patch12: qtrc-path.diff +Patch14: lib64-plugin-support.diff +Patch15: pluginmanager-fix.diff +Patch18: no-rpath.dif +Patch19: shut-up.diff +Patch20: rubberband.diff +Patch21: fix-GL-loading.diff +Patch23: fix-accessible.diff +# From http://www.freedesktop.org/wiki/Software_2fImmoduleQtDownload +# Current version from http://freedesktop.org/~daisuke/qt-x11-immodule-unified-qt3.3.5-20060318.diff.bz2 +Patch25: qt-x11-immodule-unified-qt3.3.8-20060318.diff +Patch28: fix-key-release-event-with-imm.diff +Patch29: 0047-fix-kmenu-width.diff +Patch31: limit-image-size.diff +Patch34: 0005-qpixmap_mitshm.patch +Patch35: qt-transparency.patch +Patch37: 0055-qtextedit_zoom.patch +Patch38: 0048-qclipboard_hack_80072.patch +Patch39: fix-qtranslator-crash.diff +Patch40: 0059-qpopup_has_mouse.patch +Patch41: 0060-qpopup_ignore_mousepos.patch +Patch42: add_qexport_visibility.patch +Patch43: 0056-khotkeys_input_84434.patch +Source250: enable-designer-plugins.diff +Patch53: fix-xinerama-dialog-placement.diff +Patch54: kmenu-search-fix.diff +Patch55: qt3-fix-cast.diff +Patch100: qt.patch +Patch101: qt3-arm-gcc4.patch +Patch102: xinerama.patch +Patch113: fix-assistant-path.patch +Patch117: qtimer-debug.diff +Patch119: xinerama-qpopupmenu.diff +Patch121: qt3-warnings.diff +Patch123: use-xrandr-1.2.diff +Patch125: qcstring-format-warnings.diff +Patch127: mng-reading-fix.patch +Patch128: 0079-compositing-types.patch +Patch129: 0080-net-wm-sync-request.patch +Patch132: revert-qt-3.3.8-khmer-fix.diff +Patch133: 0085-fix-buildkey.diff +Patch134: fix-xinput-clash.diff +Patch135: parseFontName.diff +Patch136: qt3-no-date.diff +Patch137: popen-leak-fix.diff +Patch138: qt3-libpng14.diff +Patch139: gcc46.diff + +# TQt integration +Patch200: qt-3.3.8c.diff + +BuildRoot: %{_tmppath}/%{name}-%{version}-build + +%description +Qt is a program library for developing applications with graphical user +interfaces. It allows you to rapidly develop professional programs. The +Qt library is available not only for Linux but for a great number of +Unices and even for Windows. Thus it is possible to write programs that +may be easily ported to those platforms. + +You need a license for using Qt with a non-GPL application, which can +be acquired from sales@trolltech.com. + +See /usr/share/doc/packages/qt3 for details about the new features of +the current Qt library! + +%define build_sub_dirs src plugins/src tools/designer/uilib/ tools/designer/uic tools/qtconfig tools/assistant/lib tools/assistant tutorial + +%prep +%setup -q -n qt3 +%patch1 +%patch2 +%patch4 +%patch5 +%patch6 +%patch7 +%patch8 +%patch11 +%patch12 +if [ "%_lib" = "lib64" ]; then +%patch14 +fi +%patch15 +%patch18 +%patch19 +%patch20 +%patch23 +%patch25 +%patch28 +%patch29 +%patch31 +%patch34 +%patch35 +%patch37 +%patch38 +%patch39 +%patch40 +%patch41 +%patch42 +%patch43 +%patch100 +%patch102 +%patch53 +%patch54 +%patch55 +%patch101 +%patch113 +%patch117 +%patch119 +%patch121 +%patch123 +ln -sf $PWD/src/inputmethod/qinputcontextfactory.h include/ +ln -sf $PWD/src/inputmethod/qinputcontextplugin.h include/ +ln -sf $PWD/src/kernel/qinputcontext.h include/ +ln -sf $PWD/src/kernel/qinputcontextinterface_p.h include/private/ +ln -sf $PWD/src/kernel/qximinputcontext_p.h include/private/ +if [ %_lib = "lib" ]; then +sed 's,/lib64/,/lib/,' %PATCH21 | patch -p0 +else +%patch21 +fi +%patch125 +%patch127 +%patch128 +%patch129 +%patch132 +%patch133 +%patch134 +%patch135 +%patch136 +%patch137 +%if %suse_version > 1120 +%patch138 -p1 +%endif +%patch139 +%patch200 +# copy qt kde integration files +cp %SOURCE100 %SOURCE101 src/kernel/ +cp %SOURCE101 include/private/ +cd translations +tar xvjf %SOURCE12 +cd .. +# COMMON-END + +%package devel +License: GPLv2 ; GPLv3 ; QPL .. +Summary: Include Files and Libraries mandatory for Development +Requires: qt3 = %version +Requires: pkgconfig cups-devel freetype2-devel libmng-devel libjpeg-devel c++_compiler xorg-x11-devel +%if %suse_version > 1120 +Recommends: libpng14-compat-devel +Requires: libpng-devel +%else +Requires: libpng-devel +%endif +%if %suse_version > 1000 +Requires: Mesa-devel +%else +Requires: xorg-x11-Mesa xorg-x11-Mesa-devel +%endif +%ifnarch x86_64 s390x sparc64 ppc64 mips64 +Conflicts: devel_libs-32bit +%endif +# bug437293 +%ifarch ppc64 +Obsoletes: qt3-devel-64bit +%endif +# +Group: Development/Libraries/X11 + +%description devel +You need this package if you want to compile programs with Qt 3. It +contains the "Qt Crossplatform Development Kit 2". Under /usr/lib/qt3 +you will find include files. + +You need a license for using Qt with a non-GPL application. A license +can be acquired at sales@trolltech.com. + +%build +export VERSION=%suse_version +source %SOURCE1 %{version} +export WLIB=%_lib +export QTDIR=`pwd` +if [ %_lib == "lib64" ]; then +export RPM_OPT_FLAGS="$RPM_OPT_FLAGS -DUSE_LIB64_PATHES" +fi +export RPM_OPT_FLAGS="$RPM_OPT_FLAGS -fno-strict-aliasing" +# +# call build from build_script.rpmrc for threaded Qt library +# only really needed tools will be builded here, all extra tools will be +# builded in qt3.spec +# +call_configure -v -thread -shared -no-sql-mysql -no-sql-psql -no-sql-odbc -no-sql-sqlite $OPTIONS +for i in %build_sub_dirs ; do + cd $i + make %{?jobs:-j%jobs} + cd - +done + +%install +export VERSION=%suse_version +export WLIB=%_lib +export QTDIR=`pwd` +source %SOURCE1 %{version} +for i in %build_sub_dirs ; do + cd $i + make INSTALL_ROOT=$RPM_BUILD_ROOT install + cd - +done +post_install $RPM_BUILD_ROOT/usr/lib/qt3/ +mkdir -p $RPM_BUILD_ROOT/usr/share/pixmaps/ +sed -i -e 's, on: .*,,' $RPM_BUILD_ROOT/usr/lib/qt3/%_lib/*.la +# +# copy additional files +# +install -m 0755 bin/qmake bin/moc ${RPM_BUILD_ROOT}/usr/lib/qt3/bin/ +install -m 0755 -d ${RPM_BUILD_ROOT}/usr/lib/qt3/translations/ +install -m 0644 translations/*.qm ${RPM_BUILD_ROOT}/usr/lib/qt3/translations/ +if [ %_lib = lib64 ]; then + for i in $RPM_BUILD_ROOT/usr/lib/qt3/plugins/*/*.so; do + mv "$i" "${i%.so}.lib64.so" + done +fi +# +# move pkgconfig files +# +mkdir -p $RPM_BUILD_ROOT/%_libdir/pkgconfig +mv $RPM_BUILD_ROOT/usr/lib/qt3/%_lib/pkgconfig/*.pc \ + $RPM_BUILD_ROOT/%_libdir/pkgconfig +rmdir $RPM_BUILD_ROOT/usr/lib/qt3/%_lib/pkgconfig +# +# move docs in doc dir +# +install -d -m 0755 ${RPM_BUILD_ROOT}/%{_defaultdocdir}/qt3/ +install -d -m 0755 ${RPM_BUILD_ROOT}/usr/lib/qt3/mkspecs/ +install -d -m 0755 ${RPM_BUILD_ROOT}/usr/lib/qt3/mkspecs/ +cp -a mkspecs/* ${RPM_BUILD_ROOT}/usr/lib/qt3/mkspecs/ +if [ %_lib == "lib64" ]; then + ln -sf linux-g++-64 ${RPM_BUILD_ROOT}/usr/lib/qt3/mkspecs/default +else + ln -sf linux-g++ ${RPM_BUILD_ROOT}/usr/lib/qt3/mkspecs/default +fi +find ${RPM_BUILD_ROOT}/usr/lib/qt3/mkspecs -type f -perm /111 -print0 | xargs -0 chmod a-x +# +# create links in ld.so.conf path +# +install -d -m 0755 ${RPM_BUILD_ROOT}/%{_libdir} +ln -sf ../lib/qt3/%{_lib}/libqt-mt.so.3 ${RPM_BUILD_ROOT}/%{_libdir}/libqt-mt.so.3 +ln -sf ../lib/qt3/%{_lib}/libqui.so.1 ${RPM_BUILD_ROOT}/%{_libdir}/libqui.so.1 +[ "lib" != "%{_lib}" ] && \ + ln -sf ../lib/qt3 ${RPM_BUILD_ROOT}/%{_libdir}/qt3 +mkdir -p ${RPM_BUILD_ROOT}/etc/profile.d +install -m 644 %SOURCE10 %SOURCE11 ${RPM_BUILD_ROOT}/etc/profile.d +# +# default qt settings +# +mkdir -p ${RPM_BUILD_ROOT}/etc/X11 +mkdir -p ${RPM_BUILD_ROOT}/usr/lib/qt3/etc/ +ln -sf /etc/X11/ ${RPM_BUILD_ROOT}/usr/lib/qt3/etc/settings +install -m 0644 %SOURCE3 ${RPM_BUILD_ROOT}/etc/X11/qtrc +# +# clean broken links +# +if [ %_lib == "lib64" ]; then + rm ${RPM_BUILD_ROOT}/usr/lib/qt3/mkspecs/linux-g++-64/linux-g++-64 +else + rm ${RPM_BUILD_ROOT}/usr/lib/qt3/mkspecs/linux-g++/linux-g++ +fi +rm -rf ${RPM_BUILD_ROOT}/usr/lib/qt3/doc/html + +%pre +if test -L usr/lib/qt3; then + rm usr/lib/qt3 +fi + +%post +/sbin/ldconfig +if ! grep -q '^\[3.3\]' etc/X11/qtrc ; then +echo "" >> etc/X11/qtrc +echo "[3.3]" >> etc/X11/qtrc +echo "libraryPath=/opt/kde3/lib64/kde3/plugins/:/opt/kde3/lib/kde3/plugins/" >> etc/X11/qtrc +fi + +%postun -p /sbin/ldconfig + +%files +%defattr(-,root,root,755) +# FIXME provide new changelog if kb9vqf will give one +%doc changes-3.3.8b README* LICENSE* MANIFEST FAQ +%dir /usr/lib/qt3/translations +%dir /usr/lib/qt3 +%dir /usr/lib/qt3/bin +%dir /usr/lib/qt3/%{_lib} +%{_libdir}/libqt-mt.so.* +%{_libdir}/libqui.so.* +/usr/lib/qt3/bin/qtconfig +/usr/lib/qt3/%{_lib}/libqt-mt.so.* +/usr/lib/qt3/%{_lib}/libqui.so.* +%dir /usr/lib/qt3/etc +/usr/lib/qt3/etc/settings +/usr/lib/qt3/plugins +/usr/lib/qt3/bin/assistant +%lang(de) /usr/lib/qt3/translations/assistant_de.qm +%lang(ar) /usr/lib/qt3/translations/qt_ar.qm +%lang(ca) /usr/lib/qt3/translations/qt_ca.qm +%lang(cs) /usr/lib/qt3/translations/qt_cs.qm +%lang(de) /usr/lib/qt3/translations/qt_de.qm +%lang(es) /usr/lib/qt3/translations/qt_es.qm +%lang(fr) /usr/lib/qt3/translations/qt_fr.qm +%lang(he) /usr/lib/qt3/translations/qt_he.qm +%lang(ru) /usr/lib/qt3/translations/qt_ru.qm +%lang(sk) /usr/lib/qt3/translations/qt_sk.qm +%lang(it) /usr/lib/qt3/translations/qt_it.qm +%lang(ja) /usr/lib/qt3/translations/qt_ja.qm +%lang(nb) /usr/lib/qt3/translations/qt_nb.qm +%lang(pl) /usr/lib/qt3/translations/qt_pl.qm +%lang(pt) /usr/lib/qt3/translations/qt_pt-br.qm +%lang(pt) /usr/lib/qt3/translations/qt_pt.qm +%lang(zh) /usr/lib/qt3/translations/qt_zh-cn.qm +%lang(zh) /usr/lib/qt3/translations/qt_zh-tw.qm +%config(noreplace) /etc/X11/qtrc +%ifarch s390x sparc64 x86_64 ppc64 mips64 +%dir %{_libdir}/qt3 +%endif + +%files devel +%defattr(-,root,root,755) +# FIXME provide new changelog if kb9vqf will give one +%doc changes-3.3.8b +/usr/lib/qt3/bin/moc +/usr/lib/qt3/bin/qmake +/usr/lib/qt3/bin/uic +/usr/lib/qt3/include +/usr/lib/qt3/%{_lib}/libqt-mt.la +/usr/lib/qt3/%{_lib}/libqt-mt.so +/usr/lib/qt3/%{_lib}/libqt-mt.prl +/usr/lib/qt3/%{_lib}/libqui.so +/usr/lib/qt3/%{_lib}/libqui.prl +/usr/lib/qt3/mkspecs +/%_libdir/pkgconfig/qt-mt.pc +/usr/lib/qt3/%_lib/libqassistantclient.* +%config /etc/profile.d/qt3.* + +%changelog diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.history/62/b0431ba3850d00111528b7e658abf294 b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.history/62/b0431ba3850d00111528b7e658abf294 new file mode 100644 index 000000000..e6cbc3815 --- /dev/null +++ b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.history/62/b0431ba3850d00111528b7e658abf294 @@ -0,0 +1,297 @@ +# +# spec file for package qt3-devel-doc +# +# Copyright (c) 2011 SUSE LINUX Products GmbH, Nuernberg, Germany. +# +# All modifications and additions to the file contributed by third parties +# remain the property of their copyright owners, unless otherwise agreed +# upon. The license for this file, and modifications and additions to the +# file, is the same license as for the pristine package itself (unless the +# license for the pristine package is not an Open Source License, in which +# case the license is the MIT License). An "Open Source License" is a +# license that conforms to the Open Source Definition (Version 1.9) +# published by the Open Source Initiative. + +# Please submit bugfixes or comments via http://bugs.opensuse.org/ +# + +# norootforbuild + + +Name: qt3-devel-doc +BuildRequires: cups-devel freeglut-devel freetype2-devel gcc-c++ pkgconfig qt3-devel update-desktop-files +%if %suse_version < 1130 +BuildRequires: libpng-devel +%else +BuildRequires: libpng14-devel +%endif +Url: http://www.trolltech.com/ +License: GPL, QPL +AutoReqProv: on +Summary: Documentation for the Qt 3 Development Kit +Group: Documentation/HTML +Version: 3.3.8c +Release: 1 +PreReq: /bin/grep +BuildArch: noarch +Provides: qt3-devel-tutorial +Obsoletes: qt3-devel-tutorial +Requires: qt3-devel +%define x11_free -x11-free- +%define rversion %version +# COMMON-BEGIN +# COMMON-BEGIN +%define x11_free -x11-free- +%define rversion 3.3.8b +Source0: http://mirror.its.uidaho.edu/pub/trinity/releases/3.5.13/dependencies/qt3-3.3.8.d.tar.gz +Source1: build_script.sh +Source2: qtconfig3.desktop +Source3: qtrc +Source4: assistant3.png +Source6: assistant3.desktop +Source7: designer.desktop +Source8: designer.png +Source9: linguist.desktop +Source5: linguist.png +Source10: qt3.sh +Source11: qt3.csh +# Translations did not change at 3.3.8c +Source12: qt3-3.3.8b-translations.tar.bz2 +Source100: qtkdeintegration_x11.cpp +Source101: qtkdeintegration_x11_p.h +Source102: baselibs.conf +Source200: attributes +Source201: update_spec.pl +Patch1: aliasing.diff +Patch2: head.diff +Patch4: qt3-never-strip.diff +Patch5: external-libs.diff +Patch6: 0001-dnd_optimization.patch +Patch7: 0002-dnd_active_window_fix.patch +Patch8: 0007-qpixmap_constants.patch +Patch11: 0038-dragobject-dont-prefer-unknown.patch +Patch12: qtrc-path.diff +Patch14: lib64-plugin-support.diff +Patch15: pluginmanager-fix.diff +Patch18: no-rpath.dif +Patch19: shut-up.diff +Patch20: rubberband.diff +Patch21: fix-GL-loading.diff +Patch23: fix-accessible.diff +# From http://www.freedesktop.org/wiki/Software_2fImmoduleQtDownload +# Current version from http://freedesktop.org/~daisuke/qt-x11-immodule-unified-qt3.3.5-20060318.diff.bz2 +Patch25: qt-x11-immodule-unified-qt3.3.8-20060318.diff +Patch28: fix-key-release-event-with-imm.diff +Patch29: 0047-fix-kmenu-width.diff +Patch31: limit-image-size.diff +Patch34: 0005-qpixmap_mitshm.patch +Patch35: qt-transparency.patch +Patch37: 0055-qtextedit_zoom.patch +Patch38: 0048-qclipboard_hack_80072.patch +Patch39: fix-qtranslator-crash.diff +Patch40: 0059-qpopup_has_mouse.patch +Patch41: 0060-qpopup_ignore_mousepos.patch +Patch42: add_qexport_visibility.patch +Patch43: 0056-khotkeys_input_84434.patch +Source250: enable-designer-plugins.diff +Patch53: fix-xinerama-dialog-placement.diff +Patch54: kmenu-search-fix.diff +Patch55: qt3-fix-cast.diff +Patch100: qt.patch +Patch101: qt3-arm-gcc4.patch +Patch102: xinerama.patch +Patch113: fix-assistant-path.patch +Patch117: qtimer-debug.diff +Patch119: xinerama-qpopupmenu.diff +Patch121: qt3-warnings.diff +Patch123: use-xrandr-1.2.diff +Patch125: qcstring-format-warnings.diff +Patch127: mng-reading-fix.patch +Patch128: 0079-compositing-types.patch +Patch129: 0080-net-wm-sync-request.patch +Patch132: revert-qt-3.3.8-khmer-fix.diff +Patch133: 0085-fix-buildkey.diff +Patch134: fix-xinput-clash.diff +Patch135: parseFontName.diff +Patch136: qt3-no-date.diff +Patch137: popen-leak-fix.diff +Patch138: qt3-libpng14.diff +Patch139: gcc46.diff + +# TQt integration +Patch200: qt-3.3.8c.diff + +BuildRoot: %{_tmppath}/%{name}-%{version}-build + +%description +This package contains the documentation for the Qt 3 Development Kit. + +You will find documentation, precompiled examples, and a tutorial for +getting started with Qt in /usr/lib/qt3/doc. + +This package contains the documentation for the Qt 3 Development Kit. + +You will find documentation, precompiled examples, and a tutorial for +getting started with Qt in /usr/lib/qt3/doc. + +This package contains the documentation for the Qt 3 Development Kit. + +You will find documentation, precompiled examples, and a tutorial for +getting started with Qt in /usr/lib/qt3/doc. + +This package contains the documentation for the Qt 3 Development Kit. + +You will find documentation, precompiled examples, and a tutorial for +getting started with Qt in /usr/lib/qt3/doc. + +%define build_sub_dirs src plugins/src tools/designer/uilib/ tools/designer/uic tools/qtconfig tools/assistant/lib tools/assistant tutorial + +%prep +%setup -q -n qt3 +%patch1 +%patch2 +%patch4 +%patch5 +%patch6 +%patch7 +%patch8 +%patch11 +%patch12 +if [ "%_lib" = "lib64" ]; then +%patch14 +fi +%patch15 +%patch18 +%patch19 +%patch20 +%patch23 +%patch25 +%patch28 +%patch29 +%patch31 +%patch34 +%patch35 +%patch37 +%patch38 +%patch39 +%patch40 +%patch41 +%patch42 +%patch43 +%patch100 +%patch102 +%patch53 +%patch54 +%patch55 +%patch101 +%patch113 +%patch117 +%patch119 +%patch121 +%patch123 +ln -sf $PWD/src/inputmethod/qinputcontextfactory.h include/ +ln -sf $PWD/src/inputmethod/qinputcontextplugin.h include/ +ln -sf $PWD/src/kernel/qinputcontext.h include/ +ln -sf $PWD/src/kernel/qinputcontextinterface_p.h include/private/ +ln -sf $PWD/src/kernel/qximinputcontext_p.h include/private/ +if [ %_lib = "lib" ]; then +sed 's,/lib64/,/lib/,' %PATCH21 | patch -p0 +else +%patch21 +fi +%patch125 +%patch127 +%patch128 +%patch129 +%patch132 +%patch133 +%patch134 +%patch135 +%patch136 +%patch137 +%if %suse_version > 1120 +%patch138 -p1 +%endif +%patch139 +%patch200 +# copy qt kde integration files +cp %SOURCE100 %SOURCE101 src/kernel/ +cp %SOURCE101 include/private/ +cd translations +tar xvjf %SOURCE12 +cd .. +# COMMON-END +# COMMON-END + +%description +This package contains the documentation for the Qt 3 Development Kit. + +You will find documentation, precompiled examples, and a tutorial for +getting started with Qt in /usr/lib/qt3/doc. + +This package contains the documentation for the Qt 3 Development Kit. + +You will find documentation, precompiled examples, and a tutorial for +getting started with Qt in /usr/lib/qt3/doc. + +This package contains the documentation for the Qt 3 Development Kit. + +You will find documentation, precompiled examples, and a tutorial for +getting started with Qt in /usr/lib/qt3/doc. + +This package contains the documentation for the Qt 3 Development Kit. + +You will find documentation, precompiled examples, and a tutorial for +getting started with Qt in /usr/lib/qt3/doc. + +%build +export VERSION=%suse_version +source %SOURCE1 %{version} +export WLIB=%_lib +export QTDIR=`pwd` +if [ %_lib == "lib64" ]; then +export RPM_OPT_FLAGS="$RPM_OPT_FLAGS -DUSE_LIB64_PATHES" +fi +export RPM_OPT_FLAGS="$RPM_OPT_FLAGS -fno-strict-aliasing" +# +# call build from build_script.rpmrc for threaded Qt library +# only really needed tools will be builded here, all extra tools will be +# builded in qt3.spec +# +call_configure -thread -shared -no-sql-mysql -no-sql-psql -no-sql-odbc -no-sql-sqlite $OPTIONS +cd src +make %{?jobs:-j%jobs} +cd .. + +%install +export VERSION=%suse_version +export WLIB=%_lib +export QTDIR=`pwd` +source %SOURCE1 %{version} +cd src +make INSTALL_ROOT=$RPM_BUILD_ROOT install_htmldocs +cd .. +# +# install menu entries +# +%suse_update_desktop_file -i -u qtconfig3 Qt Utility DesktopSettings +%suse_update_desktop_file -i assistant3 Qt Development Documentation + +install -d -m 0755 ${RPM_BUILD_ROOT}/%{_defaultdocdir}/qt3/ +ln -sf /usr/lib/qt3/doc/html ${RPM_BUILD_ROOT}/%{_defaultdocdir}/qt3/ +mkdir -p $RPM_BUILD_ROOT/usr/share/pixmaps/ +install -m 0644 %SOURCE4 $RPM_BUILD_ROOT/usr/share/pixmaps/ + +%clean +rm -rf ${RPM_BUILD_ROOT} + +%files +%defattr(-,root,root) +%dir /usr/lib/qt3/doc +%doc /usr/lib/qt3/doc/html +%{_docdir}/qt3/html +/usr/share/applications/qtconfig3.desktop +/usr/share/applications/assistant3.desktop +/usr/share/pixmaps/assistant3.png + +%changelog diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.history/82/503b1fa3850d00111528b7e658abf294 b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.history/82/503b1fa3850d00111528b7e658abf294 new file mode 100644 index 000000000..d914a2e06 --- /dev/null +++ b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.history/82/503b1fa3850d00111528b7e658abf294 @@ -0,0 +1,477 @@ +# +# spec file for package qt3-extensions +# +# Copyright (c) 2011 SUSE LINUX Products GmbH, Nuernberg, Germany. +# +# All modifications and additions to the file contributed by third parties +# remain the property of their copyright owners, unless otherwise agreed +# upon. The license for this file, and modifications and additions to the +# file, is the same license as for the pristine package itself (unless the +# license for the pristine package is not an Open Source License, in which +# case the license is the MIT License). An "Open Source License" is a +# license that conforms to the Open Source Definition (Version 1.9) +# published by the Open Source Initiative. + +# Please submit bugfixes or comments via http://bugs.opensuse.org/ +# + +# norootforbuild + + +Name: qt3-extensions +BuildRequires: cups-devel krb5-devel mysql-devel postgresql-devel qt3-devel sqlite2-devel unixODBC-devel update-desktop-files +%if %suse_version > 1020 +BuildRequires: fdupes +%endif +License: GPL, QPL +Version: 3.3.8c +Release: 1 +AutoReqProv: on +Requires: qt3 = %version +Group: Development/Tools/Other +Summary: Qt3 Extensions +# COMMON-BEGIN +# COMMON-BEGIN +%define x11_free -x11-free- +%define rversion 3.3.8b +Source0: qt%{x11_free}%rversion.tar.bz2 +Source1: build_script.sh +Source2: qtconfig3.desktop +Source3: qtrc +Source4: assistant3.png +Source6: assistant3.desktop +Source7: designer.desktop +Source8: designer.png +Source9: linguist.desktop +Source5: linguist.png +Source10: qt3.sh +Source11: qt3.csh +# Translations did not change at 3.3.8c +Source12: qt3-3.3.8b-translations.tar.bz2 +Source100: qtkdeintegration_x11.cpp +Source101: qtkdeintegration_x11_p.h +Source102: baselibs.conf +Source200: attributes +Source201: update_spec.pl +Patch1: aliasing.diff +Patch2: head.diff +Patch4: qt3-never-strip.diff +Patch5: external-libs.diff +Patch6: 0001-dnd_optimization.patch +Patch7: 0002-dnd_active_window_fix.patch +Patch8: 0007-qpixmap_constants.patch +Patch11: 0038-dragobject-dont-prefer-unknown.patch +Patch12: qtrc-path.diff +Patch14: lib64-plugin-support.diff +Patch15: pluginmanager-fix.diff +Patch18: no-rpath.dif +Patch19: shut-up.diff +Patch20: rubberband.diff +Patch21: fix-GL-loading.diff +Patch23: fix-accessible.diff +# From http://www.freedesktop.org/wiki/Software_2fImmoduleQtDownload +# Current version from http://freedesktop.org/~daisuke/qt-x11-immodule-unified-qt3.3.5-20060318.diff.bz2 +Patch25: qt-x11-immodule-unified-qt3.3.8-20060318.diff +Patch28: fix-key-release-event-with-imm.diff +Patch29: 0047-fix-kmenu-width.diff +Patch31: limit-image-size.diff +Patch34: 0005-qpixmap_mitshm.patch +Patch35: qt-transparency.patch +Patch37: 0055-qtextedit_zoom.patch +Patch38: 0048-qclipboard_hack_80072.patch +Patch39: fix-qtranslator-crash.diff +Patch40: 0059-qpopup_has_mouse.patch +Patch41: 0060-qpopup_ignore_mousepos.patch +Patch42: add_qexport_visibility.patch +Patch43: 0056-khotkeys_input_84434.patch +Source250: enable-designer-plugins.diff +Patch53: fix-xinerama-dialog-placement.diff +Patch54: kmenu-search-fix.diff +Patch55: qt3-fix-cast.diff +Patch100: qt.patch +Patch101: qt3-arm-gcc4.patch +Patch102: xinerama.patch +Patch113: fix-assistant-path.patch +Patch117: qtimer-debug.diff +Patch119: xinerama-qpopupmenu.diff +Patch121: qt3-warnings.diff +Patch123: use-xrandr-1.2.diff +Patch125: qcstring-format-warnings.diff +Patch127: mng-reading-fix.patch +Patch128: 0079-compositing-types.patch +Patch129: 0080-net-wm-sync-request.patch +Patch132: revert-qt-3.3.8-khmer-fix.diff +Patch133: 0085-fix-buildkey.diff +Patch134: fix-xinput-clash.diff +Patch135: parseFontName.diff +Patch136: qt3-no-date.diff +Patch137: popen-leak-fix.diff +Patch138: qt3-libpng14.diff +Patch139: gcc46.diff + +# TQt integration +Patch200: qt-3.3.8c.diff + +BuildRoot: %{_tmppath}/%{name}-%{version}-build + +%description +This package contains extension libraries for Qt 3, such as the +Netscape plug-in modules. + +This package contains extension libraries for Qt 3, such as the +Netscape plug-in modules. + +This package contains extension libraries for Qt 3, such as the +Netscape plug-in modules. + +This package contains extension libraries for Qt 3, such as the +Netscape plug-in modules. + +%define build_sub_dirs src plugins/src tools/designer/uilib/ tools/designer/uic tools/qtconfig tools/assistant/lib tools/assistant tutorial + +%prep +%setup -q -n qt%{x11_free}%rversion +%patch1 +%patch2 +%patch4 +%patch5 +%patch6 +%patch7 +%patch8 +%patch11 +%patch12 +if [ "%_lib" = "lib64" ]; then +%patch14 +fi +%patch15 +%patch18 +%patch19 +%patch20 +%patch23 +%patch25 +%patch28 +%patch29 +%patch31 +%patch34 +%patch35 +%patch37 +%patch38 +%patch39 +%patch40 +%patch41 +%patch42 +%patch43 +%patch100 +%patch102 +%patch53 +%patch54 +%patch55 +%patch101 +%patch113 +%patch117 +%patch119 +%patch121 +%patch123 +ln -sf $PWD/src/inputmethod/qinputcontextfactory.h include/ +ln -sf $PWD/src/inputmethod/qinputcontextplugin.h include/ +ln -sf $PWD/src/kernel/qinputcontext.h include/ +ln -sf $PWD/src/kernel/qinputcontextinterface_p.h include/private/ +ln -sf $PWD/src/kernel/qximinputcontext_p.h include/private/ +if [ %_lib = "lib" ]; then +sed 's,/lib64/,/lib/,' %PATCH21 | patch -p0 +else +%patch21 +fi +%patch125 +%patch127 +%patch128 +%patch129 +%patch132 +%patch133 +%patch134 +%patch135 +%patch136 +%patch137 +%if %suse_version > 1120 +%patch138 -p1 +%endif +%patch139 +%patch200 +# copy qt kde integration files +cp %SOURCE100 %SOURCE101 src/kernel/ +cp %SOURCE101 include/private/ +cd translations +tar xvjf %SOURCE12 +cd .. +# COMMON-END +# COMMON-END + +%description +This package contains extension libraries for Qt 3, such as the +Netscape plug-in modules. + +This package contains extension libraries for Qt 3, such as the +Netscape plug-in modules. + +This package contains extension libraries for Qt 3, such as the +Netscape plug-in modules. + +This package contains extension libraries for Qt 3, such as the +Netscape plug-in modules. + +%package -n qt3-devel-examples +Summary: Programming Examples for Qt 3 +AutoReqProv: on +Group: Development/Sources +Provides: qt3-examples +Obsoletes: qt3-examples + +%description -n qt3-devel-examples +This package contains small executables with code to demonstrate Qt +programming. + +Have a look in /usr/share/doc/packages/qt3/examples/. + +%package -n qt3-mysql +Summary: MySQL Plug-In for Qt +Provides: qt3_database_plugin +Group: Productivity/Databases/Clients + +%description -n qt3-mysql +Plug-in for using the MySQL database with the generic Qt database +interface. + +%package -n qt3-unixODBC +Summary: A UnixODBC Plug-In for Qt +Provides: qt3_database_plugin +Group: Productivity/Databases/Clients + +%description -n qt3-unixODBC +A plug-in for using UnixODBC supported databases with the generic Qt +database interface. + +%package -n qt3-postgresql +Summary: A PostgreSQL Plug-In for Qt +Provides: qt3_database_plugin +Group: Productivity/Databases/Clients + +%description -n qt3-postgresql +A Plug-in for using the PostgreSQL database with the generic Qt +database interface. + +%package -n qt3-sqlite +Summary: SQLite Database Plug-In for Qt +Provides: qt3_database_plugin +Group: Development/Tools/Other + +%description -n qt3-sqlite +The Qt database supports SQLite with this plug-in. (No configured and +running daemon is required.) + +%package -n qt3-devel-tools +Summary: User Interface Builder and other tools (designer, assistant, linguist) +AutoReqProv: on +Requires: qt3-devel = %version +Provides: qt3-designer +Obsoletes: qt3-designer +Group: Development/Tools/GUI Builders + +%description -n qt3-devel-tools +The designer creates .ui files. The uic generates C++ code from these +files. The package also contains the Qt Assistant (Qt documentation +browser) and the Qt Linguist (for translations). + +%package -n qt3-man +Summary: Qt 3 Man Pages +AutoReqProv: on +Requires: qt3-devel = %version +Conflicts: qtman qt-man +Group: Documentation/Man + +%description -n qt3-man +This package contains all the man pages for all the Qt 3 classes. + +%build +export QTDIR=/usr/lib/qt3/ +export WLIB=%_lib +export VERSION=%suse_version +source %{SOURCE1} %{version} +export RPM_OPT_FLAGS="$RPM_OPT_FLAGS -fno-strict-aliasing" +# +# compile threaded version to build all tools. +# the lib itself becomes packaged from qt3.spec +# +call_configure -thread -shared -L$PWD/%_lib $OPTIONS +ln -sf /usr/lib/qt3/%_lib/* lib/ +ln -sf /usr/lib/qt3/bin/* bin/ +cd plugins/src +make %{?jobs:-j%jobs} +make INSTALL_ROOT=$RPM_BUILD_ROOT install +cd - +# +# build examples +# +cd tools/assistant/lib +make %{?jobs:-j%jobs} +cd - +cd examples +make %{?jobs:-j%jobs} +cd - +# +# build extra tools +# +cd tools +make %{?jobs:-j%jobs} +make INSTALL_ROOT=$RPM_BUILD_ROOT install +for i in qvfb qembed qconfig msg2qm mergetr ; do + cd "$i" && make %{?jobs:-j%jobs} && install -m 0755 $i ${RPM_BUILD_ROOT}/usr/lib/qt3/bin/ && cd - +done +cd .. +install -m 0755 bin/findtr bin/qt20fix bin/qtrename140 ${RPM_BUILD_ROOT}/usr/lib/qt3/bin/ +if [ %_lib = lib64 ]; then + for i in $RPM_BUILD_ROOT/usr/lib/qt3/plugins/*/*.so; do + mv "$i" "${i%.so}.lib64.so" + done +fi + +%install +export WLIB=%_lib +export VERSION=%suse_version +source %{SOURCE1} +post_install $RPM_BUILD_ROOT/usr/lib/qt3/ +# +# create default doc dir +# +install -d -m 0755 ${RPM_BUILD_ROOT}/%{_docdir}/qt3/ +# +# create links in ld.so.conf path +# +install -d -m 0755 ${RPM_BUILD_ROOT}/%{_libdir} +#install -d -m 0755 ${RPM_BUILD_ROOT}/usr/bin/ +#ln -sf ../lib/qt3/bin/designer ${RPM_BUILD_ROOT}/usr/bin/designer +#ln -sf ../lib/qt3/bin/linguist ${RPM_BUILD_ROOT}/usr/bin/linguist +%suse_update_desktop_file -i designer Qt Development GUIDesigner +%suse_update_desktop_file -i linguist Qt Development Translation +mkdir -p $RPM_BUILD_ROOT/usr/share/pixmaps +perl -pi -e 's/Icon=designer/Icon=designer3/' ${RPM_BUILD_ROOT}/usr/share/applications/designer.desktop +perl -pi -e 's,Exec=designer,Exec=/usr/lib/qt3/bin/designer,' ${RPM_BUILD_ROOT}/usr/share/applications/designer.desktop +mv ${RPM_BUILD_ROOT}/usr/share/applications/designer.desktop ${RPM_BUILD_ROOT}/usr/share/applications/designer3.desktop +install -m 0644 tools/assistant/images/designer.png $RPM_BUILD_ROOT/usr/share/pixmaps/designer3.png +rm -f ${RPM_BUILD_ROOT}/usr/share/pixmaps/designer.png +perl -pi -e 's,Exec=linguist,Exec=/usr/lib/qt3/bin/linguist,' ${RPM_BUILD_ROOT}/usr/share/applications/linguist.desktop +perl -pi -e 's,Icon=linguist,Icon=linguist3,' ${RPM_BUILD_ROOT}/usr/share/applications/linguist.desktop +mv ${RPM_BUILD_ROOT}/usr/share/pixmaps/linguist.png ${RPM_BUILD_ROOT}/usr/share/pixmaps/linguist3.png + +##### these files are not getting installed by "make install" ... bug ? +# +# +# install manpages +# +rm -rf $RPM_BUILD_ROOT/%{_mandir} +install -d $RPM_BUILD_ROOT/%{_mandir} +cp -a doc/man/* $RPM_BUILD_ROOT/%{_mandir}/ +# +# install examples +# +install -d ${RPM_BUILD_ROOT}/usr/lib/qt3/doc/ +find ./examples/ \ + -name \*.o -o -name .obj -o -name .moc -o -name Makefile \ + | xargs rm -rf +cp -a examples ${RPM_BUILD_ROOT}/usr/lib/qt3/doc/ +ln -sf /usr/lib/qt3/doc/examples ${RPM_BUILD_ROOT}/%{_docdir}/qt3/ +# +# to be sure we do not package files which are packaged in other qt3 packages +# +rpm -ql qt3 qt3-devel qt3-devel-doc \ + | while read i ; do + [ -d "$i" ] || rm -f $RPM_BUILD_ROOT/"$i" +done +# +# we do have them in qt3-devel-doc already +# +rm -f $RPM_BUILD_ROOT/usr/lib/qt3/bin/assistant +rm -f $RPM_BUILD_ROOT/usr/lib/qt3/%_lib/libqassistantclient.* +rm -f $RPM_BUILD_ROOT/usr/lib/qt3/translations/assistant_de.qm + +for l in $RPM_BUILD_ROOT/usr/lib/qt3/%_lib/*.a; do + strip --strip-unneeded $l +done + +%if %suse_version > 1020 +%fdupes -s $RPM_BUILD_ROOT +%endif + +%pre +if test -L usr/lib/qt3; then + rm usr/lib/qt3 +fi + +%clean +rm -rf ${RPM_BUILD_ROOT} + +%post +%run_ldconfig + +%post -n qt3-devel-tools +%run_ldconfig + +%files +%defattr(-,root,root) +/usr/lib/qt3/bin/qembed +/usr/lib/qt3/bin/qvfb + +%files -n qt3-mysql +%defattr(-,root,root) +%dir /usr/lib/qt3/plugins/sqldrivers +/usr/lib/qt3/plugins/sqldrivers/libqsqlmysql*.so + +%files -n qt3-postgresql +%defattr(-,root,root) +%dir /usr/lib/qt3/plugins/sqldrivers +/usr/lib/qt3/plugins/sqldrivers/libqsqlpsql*.so + +%files -n qt3-unixODBC +%defattr(-,root,root) +%dir /usr/lib/qt3/plugins/sqldrivers +/usr/lib/qt3/plugins/sqldrivers/libqsqlodbc*.so + +%files -n qt3-sqlite +%defattr(-,root,root) +%dir /usr/lib/qt3/plugins/sqldrivers +/usr/lib/qt3/plugins/sqldrivers/libqsqlite*.so + +%files -n qt3-devel-tools +%defattr(-,root,root) +#/usr/bin/designer +#/usr/bin/linguist +/usr/lib/qt3/bin/qconfig +/usr/lib/qt3/bin/findtr +/usr/lib/qt3/bin/qt20fix +/usr/lib/qt3/bin/qtrename140 +/usr/lib/qt3/bin/msg2qm +/usr/lib/qt3/bin/mergetr +/usr/lib/qt3/bin/designer +/usr/lib/qt3/bin/linguist +/usr/lib/qt3/bin/qm2ts +/usr/lib/qt3/bin/lrelease +/usr/lib/qt3/bin/lupdate +/usr/lib/qt3/templates +/usr/lib/qt3/plugins/designer +/usr/lib/qt3/phrasebooks +/usr/lib/qt3/%_lib/libdesignercore.* +/usr/lib/qt3/%_lib/libeditor.* +/usr/share/applications/* +/usr/share/pixmaps/designer3.png +/usr/share/pixmaps/linguist3.png + +%files -n qt3-devel-examples +%defattr(-,root,root) +%dir /usr/lib/qt3/doc +/%{_docdir}/qt3/examples +/usr/lib/qt3/doc/examples + +%files -n qt3-man +%defattr(-,root,root) +%{_mandir}/man*/* + +%changelog diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.history/84/70110672840d00111528b7e658abf294 b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.history/84/70110672840d00111528b7e658abf294 new file mode 100644 index 000000000..cf74b334f --- /dev/null +++ b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.history/84/70110672840d00111528b7e658abf294 @@ -0,0 +1,115 @@ +# +# spec file for package tdelibs-devel-doc +# +# Copyright (c) 2011 the Trinity Project (opensuse). +# +# All modifications and additions to the file contributed by third parties +# remain the property of their copyright owners, unless otherwise agreed +# upon. The license for this file, and modifications and additions to the +# file, is the same license as for the pristine package itself (unless the +# license for the pristine package is not an Open Source License, in which +# case the license is the MIT License). An "Open Source License" is a +# license that conforms to the Open Source Definition (Version 1.9) +# published by the Open Source Initiative. + +# Please submit bugfixes or comments via http://bugs.trinitydesktop.org/ +# + +# norootforbuild + + +Name: tdelibs-devel-doc +BuildRequires: OpenEXR-devel aspell-devel cups-devel db-devel doxygen graphviz tdelibs-devel krb5-devel libjasper libsndfile openldap2-devel qt3-devel-doc libtqt4-devel tde-filesystem utempter xorg-x11-fonts-100dpi xorg-x11-fonts-75dpi xorg-x11-fonts-scalable +BuildRequires: avahi-compat-mDNSResponder-devel fdupes +URL: http://www.trinitydesktop.org +License: GPLv2+ +Group: Documentation/HTML +BuildRoot: %{_tmppath}/%{name}-%{version}-build +Summary: Additional Package Documentation +Version: 3.5.12.99 +Release: 1 +%define tdelibs_patch_level b +BuildArch: noarch +Requires: tdelibs qt3-devel-doc +Source0: kdelibs-%{version}.tar.bz2 +Source1: create-kdeapi +Source4: api_docu_description + +%description +This package contains a generated API documentation for all library +classes provided by tdelibs. The index page for all TDE API functions +is: + +file:/usr/share/doc/TDE-API/index.html + + + +Authors: +-------- + The KDE Team + +%prep + echo %suse_version +%setup -q -n kdelibs-%{version} + +%build +%if %is_plus + # supplementary package + DISTRI="openSUSE $BUILD_DISTRIBUTION_VERSION UNSUPPORTED" +%else + # official build on released and maintained products + DISTRI="openSUSE $BUILD_DISTRIBUTION_VERSION" +%endif +export QTDOCDIR=/usr/share/doc/packages/qt3/html +%cmake_tde -d build -- -DKDE_DISTRIBUTION="$DISTRI" +%make_tde -d build -- apidox + +%install + list=`find . -name Makefile.am | xargs grep Doxy | sed -e "s,/Makefile.am.*,," | sort -u ` + for i in $list; do %makeinstall_tde -d build -- -C $i DESTDIR=$RPM_BUILD_ROOT install-apidox || true; done + # The modern way, with kdevelop-incompatible api documentation :/ + mkdir -p $RPM_BUILD_ROOT/usr/share/doc/TDE-API/ + # *** everytime you edit the following line, you made a mistake. Update macros.tde + # *** version instead + KDEDOCDIR=%{_tde_htmldir}/en/kdelibs-apidocs + # this is forgotten, but kdevelop needs it + mkdir -p $RPM_BUILD_ROOT/$KDEDOCDIR + if test -d apidocs/qt; then + cp -a apidocs/qt $RPM_BUILD_ROOT/$KDEDOCDIR + fi + set +x + exitc=0 + for i in `ls -1 $RPM_BUILD_ROOT/$KDEDOCDIR/*/html/index.html`; do + lib=`echo $i | sed -e 's,/html/index.html,,; s,.*/\([^/]*\)$,\1,'` + if ! egrep "^$lib:" %SOURCE4 ; then + echo "ERROR: no description for library $lib" + exitc=1 + fi + sed -n -e 's@'"${lib}"':\(.*\)@\1@p' %SOURCE4 > ${RPM_BUILD_ROOT}/${KDEDOCDIR}/${lib}/description.SuSE + echo "kdelibs" > ${RPM_BUILD_ROOT}/${KDEDOCDIR}/${lib}/package.SuSE + done + if test "$exitc" != 0; then + exit $exitc + fi + ln -s $KDEDOCDIR/index.html $RPM_BUILD_ROOT/usr/share/doc/TDE-API/index.html + rm -rf ${RPM_BUILD_ROOT}/%{_tde_datadir} + mkdir -p $RPM_BUILD_ROOT/%{_tde_datadir}/tdelibs + install -m 0755 %SOURCE1 $RPM_BUILD_ROOT/%{_tde_datadir}/tdelibs/ + %fdupes -s $RPM_BUILD_ROOT + +%post +%{_tde_datadir}/tdelibs/create-kdeapi + +%clean + rm -rf ${RPM_BUILD_ROOT} + +%files +%defattr(-,root,root) +%dir %{_tde_sharedir} +%dir %{_tde_datadir} +%dir %{_tde_datadir}/tdelibs +/usr/share/doc/TDE-API +%{_tde_datadir}/tdelibs/create-kdeapi +%{_tde_docdir} + +%changelog diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.history/aa/f00f6381850d00111528b7e658abf294 b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.history/aa/f00f6381850d00111528b7e658abf294 new file mode 100644 index 000000000..326d2c03f --- /dev/null +++ b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.history/aa/f00f6381850d00111528b7e658abf294 @@ -0,0 +1,415 @@ +# +# spec file for package qt3 +# +# Copyright (c) 2011 SUSE LINUX Products GmbH, Nuernberg, Germany. +# +# All modifications and additions to the file contributed by third parties +# remain the property of their copyright owners, unless otherwise agreed +# upon. The license for this file, and modifications and additions to the +# file, is the same license as for the pristine package itself (unless the +# license for the pristine package is not an Open Source License, in which +# case the license is the MIT License). An "Open Source License" is a +# license that conforms to the Open Source Definition (Version 1.9) +# published by the Open Source Initiative. + +# Please submit bugfixes or comments via http://bugs.opensuse.org/ +# + + + +Name: qt3 +#Remember also to modify Requires in -devel package +BuildRequires: Mesa-devel c++_compiler cups-devel freetype2-devel libjpeg-devel libmng-devel pkgconfig update-desktop-files xorg-x11-devel +Url: http://www.trolltech.com/ +License: GPLv2 ; GPLv3 ; QPL .. +%if %suse_version > 1120 +BuildRequires: libpng14-compat-devel +%else +BuildRequires: libpng-devel +%endif +Group: System/Libraries +# bug437293 +%ifarch ppc64 +Obsoletes: qt3-64bit +%endif +# +Summary: A library for developing applications with graphical user interfaces +Version: 3.3.8c +Release: 110 +Provides: qt_library_%version +Recommends: kdelibs3-default-style +PreReq: /bin/grep +# COMMON-BEGIN +%define x11_free -x11-free- +%define rversion 3.3.8b +Source0: qt%{x11_free}%rversion.tar.bz2 +Source1: build_script.sh +Source2: qtconfig3.desktop +Source3: qtrc +Source4: assistant3.png +Source6: assistant3.desktop +Source7: designer.desktop +Source8: designer.png +Source9: linguist.desktop +Source5: linguist.png +Source10: qt3.sh +Source11: qt3.csh +# Translations did not change at 3.3.8c +Source12: qt3-3.3.8b-translations.tar.bz2 +Source100: qtkdeintegration_x11.cpp +Source101: qtkdeintegration_x11_p.h +Source102: baselibs.conf +Source200: attributes +Source201: update_spec.pl +Patch1: aliasing.diff +Patch2: head.diff +Patch4: qt3-never-strip.diff +Patch5: external-libs.diff +Patch6: 0001-dnd_optimization.patch +Patch7: 0002-dnd_active_window_fix.patch +Patch8: 0007-qpixmap_constants.patch +Patch11: 0038-dragobject-dont-prefer-unknown.patch +Patch12: qtrc-path.diff +Patch14: lib64-plugin-support.diff +Patch15: pluginmanager-fix.diff +Patch18: no-rpath.dif +Patch19: shut-up.diff +Patch20: rubberband.diff +Patch21: fix-GL-loading.diff +Patch23: fix-accessible.diff +# From http://www.freedesktop.org/wiki/Software_2fImmoduleQtDownload +# Current version from http://freedesktop.org/~daisuke/qt-x11-immodule-unified-qt3.3.5-20060318.diff.bz2 +Patch25: qt-x11-immodule-unified-qt3.3.8-20060318.diff +Patch28: fix-key-release-event-with-imm.diff +Patch29: 0047-fix-kmenu-width.diff +Patch31: limit-image-size.diff +Patch34: 0005-qpixmap_mitshm.patch +Patch35: qt-transparency.patch +Patch37: 0055-qtextedit_zoom.patch +Patch38: 0048-qclipboard_hack_80072.patch +Patch39: fix-qtranslator-crash.diff +Patch40: 0059-qpopup_has_mouse.patch +Patch41: 0060-qpopup_ignore_mousepos.patch +Patch42: add_qexport_visibility.patch +Patch43: 0056-khotkeys_input_84434.patch +Source250: enable-designer-plugins.diff +Patch53: fix-xinerama-dialog-placement.diff +Patch54: kmenu-search-fix.diff +Patch55: qt3-fix-cast.diff +Patch100: qt.patch +Patch101: qt3-arm-gcc4.patch +Patch102: xinerama.patch +Patch113: fix-assistant-path.patch +Patch117: qtimer-debug.diff +Patch119: xinerama-qpopupmenu.diff +Patch121: qt3-warnings.diff +Patch123: use-xrandr-1.2.diff +Patch125: qcstring-format-warnings.diff +Patch127: mng-reading-fix.patch +Patch128: 0079-compositing-types.patch +Patch129: 0080-net-wm-sync-request.patch +Patch132: revert-qt-3.3.8-khmer-fix.diff +Patch133: 0085-fix-buildkey.diff +Patch134: fix-xinput-clash.diff +Patch135: parseFontName.diff +Patch136: qt3-no-date.diff +Patch137: popen-leak-fix.diff +Patch138: qt3-libpng14.diff +Patch139: gcc46.diff + +# TQt integration +Patch200: qt-3.3.8c.diff + +BuildRoot: %{_tmppath}/%{name}-%{version}-build + +%description +Qt is a program library for developing applications with graphical user +interfaces. It allows you to rapidly develop professional programs. The +Qt library is available not only for Linux but for a great number of +Unices and even for Windows. Thus it is possible to write programs that +may be easily ported to those platforms. + +You need a license for using Qt with a non-GPL application, which can +be acquired from sales@trolltech.com. + +See /usr/share/doc/packages/qt3 for details about the new features of +the current Qt library! + +%define build_sub_dirs src plugins/src tools/designer/uilib/ tools/designer/uic tools/qtconfig tools/assistant/lib tools/assistant tutorial + +%prep +%setup -q -n qt%{x11_free}%rversion +%patch1 +%patch2 +%patch4 +%patch5 +%patch6 +%patch7 +%patch8 +%patch11 +%patch12 +if [ "%_lib" = "lib64" ]; then +%patch14 +fi +%patch15 +%patch18 +%patch19 +%patch20 +%patch23 +%patch25 +%patch28 +%patch29 +%patch31 +%patch34 +%patch35 +%patch37 +%patch38 +%patch39 +%patch40 +%patch41 +%patch42 +%patch43 +%patch100 +%patch102 +%patch53 +%patch54 +%patch55 +%patch101 +%patch113 +%patch117 +%patch119 +%patch121 +%patch123 +ln -sf $PWD/src/inputmethod/qinputcontextfactory.h include/ +ln -sf $PWD/src/inputmethod/qinputcontextplugin.h include/ +ln -sf $PWD/src/kernel/qinputcontext.h include/ +ln -sf $PWD/src/kernel/qinputcontextinterface_p.h include/private/ +ln -sf $PWD/src/kernel/qximinputcontext_p.h include/private/ +if [ %_lib = "lib" ]; then +sed 's,/lib64/,/lib/,' %PATCH21 | patch -p0 +else +%patch21 +fi +%patch125 +%patch127 +%patch128 +%patch129 +%patch132 +%patch133 +%patch134 +%patch135 +%patch136 +%patch137 +%if %suse_version > 1120 +%patch138 -p1 +%endif +%patch139 +%patch200 +# copy qt kde integration files +cp %SOURCE100 %SOURCE101 src/kernel/ +cp %SOURCE101 include/private/ +cd translations +tar xvjf %SOURCE12 +cd .. +# COMMON-END + +%package devel +License: GPLv2 ; GPLv3 ; QPL .. +Summary: Include Files and Libraries mandatory for Development +Requires: qt3 = %version +Requires: pkgconfig cups-devel freetype2-devel libmng-devel libjpeg-devel c++_compiler xorg-x11-devel +%if %suse_version > 1120 +Recommends: libpng14-compat-devel +Requires: libpng-devel +%else +Requires: libpng-devel +%endif +%if %suse_version > 1000 +Requires: Mesa-devel +%else +Requires: xorg-x11-Mesa xorg-x11-Mesa-devel +%endif +%ifnarch x86_64 s390x sparc64 ppc64 mips64 +Conflicts: devel_libs-32bit +%endif +# bug437293 +%ifarch ppc64 +Obsoletes: qt3-devel-64bit +%endif +# +Group: Development/Libraries/X11 + +%description devel +You need this package if you want to compile programs with Qt 3. It +contains the "Qt Crossplatform Development Kit 2". Under /usr/lib/qt3 +you will find include files. + +You need a license for using Qt with a non-GPL application. A license +can be acquired at sales@trolltech.com. + +%build +export VERSION=%suse_version +source %SOURCE1 %{version} +export WLIB=%_lib +export QTDIR=`pwd` +if [ %_lib == "lib64" ]; then +export RPM_OPT_FLAGS="$RPM_OPT_FLAGS -DUSE_LIB64_PATHES" +fi +export RPM_OPT_FLAGS="$RPM_OPT_FLAGS -fno-strict-aliasing" +# +# call build from build_script.rpmrc for threaded Qt library +# only really needed tools will be builded here, all extra tools will be +# builded in qt3.spec +# +call_configure -v -thread -shared -no-sql-mysql -no-sql-psql -no-sql-odbc -no-sql-sqlite $OPTIONS +for i in %build_sub_dirs ; do + cd $i + make %{?jobs:-j%jobs} + cd - +done + +%install +export VERSION=%suse_version +export WLIB=%_lib +export QTDIR=`pwd` +source %SOURCE1 %{version} +for i in %build_sub_dirs ; do + cd $i + make INSTALL_ROOT=$RPM_BUILD_ROOT install + cd - +done +post_install $RPM_BUILD_ROOT/usr/lib/qt3/ +mkdir -p $RPM_BUILD_ROOT/usr/share/pixmaps/ +sed -i -e 's, on: .*,,' $RPM_BUILD_ROOT/usr/lib/qt3/%_lib/*.la +# +# copy additional files +# +install -m 0755 bin/qmake bin/moc ${RPM_BUILD_ROOT}/usr/lib/qt3/bin/ +install -m 0755 -d ${RPM_BUILD_ROOT}/usr/lib/qt3/translations/ +install -m 0644 translations/*.qm ${RPM_BUILD_ROOT}/usr/lib/qt3/translations/ +if [ %_lib = lib64 ]; then + for i in $RPM_BUILD_ROOT/usr/lib/qt3/plugins/*/*.so; do + mv "$i" "${i%.so}.lib64.so" + done +fi +# +# move pkgconfig files +# +mkdir -p $RPM_BUILD_ROOT/%_libdir/pkgconfig +mv $RPM_BUILD_ROOT/usr/lib/qt3/%_lib/pkgconfig/*.pc \ + $RPM_BUILD_ROOT/%_libdir/pkgconfig +rmdir $RPM_BUILD_ROOT/usr/lib/qt3/%_lib/pkgconfig +# +# move docs in doc dir +# +install -d -m 0755 ${RPM_BUILD_ROOT}/%{_defaultdocdir}/qt3/ +install -d -m 0755 ${RPM_BUILD_ROOT}/usr/lib/qt3/mkspecs/ +install -d -m 0755 ${RPM_BUILD_ROOT}/usr/lib/qt3/mkspecs/ +cp -a mkspecs/* ${RPM_BUILD_ROOT}/usr/lib/qt3/mkspecs/ +if [ %_lib == "lib64" ]; then + ln -sf linux-g++-64 ${RPM_BUILD_ROOT}/usr/lib/qt3/mkspecs/default +else + ln -sf linux-g++ ${RPM_BUILD_ROOT}/usr/lib/qt3/mkspecs/default +fi +find ${RPM_BUILD_ROOT}/usr/lib/qt3/mkspecs -type f -perm /111 -print0 | xargs -0 chmod a-x +# +# create links in ld.so.conf path +# +install -d -m 0755 ${RPM_BUILD_ROOT}/%{_libdir} +ln -sf ../lib/qt3/%{_lib}/libqt-mt.so.3 ${RPM_BUILD_ROOT}/%{_libdir}/libqt-mt.so.3 +ln -sf ../lib/qt3/%{_lib}/libqui.so.1 ${RPM_BUILD_ROOT}/%{_libdir}/libqui.so.1 +[ "lib" != "%{_lib}" ] && \ + ln -sf ../lib/qt3 ${RPM_BUILD_ROOT}/%{_libdir}/qt3 +mkdir -p ${RPM_BUILD_ROOT}/etc/profile.d +install -m 644 %SOURCE10 %SOURCE11 ${RPM_BUILD_ROOT}/etc/profile.d +# +# default qt settings +# +mkdir -p ${RPM_BUILD_ROOT}/etc/X11 +mkdir -p ${RPM_BUILD_ROOT}/usr/lib/qt3/etc/ +ln -sf /etc/X11/ ${RPM_BUILD_ROOT}/usr/lib/qt3/etc/settings +install -m 0644 %SOURCE3 ${RPM_BUILD_ROOT}/etc/X11/qtrc +# +# clean broken links +# +if [ %_lib == "lib64" ]; then + rm ${RPM_BUILD_ROOT}/usr/lib/qt3/mkspecs/linux-g++-64/linux-g++-64 +else + rm ${RPM_BUILD_ROOT}/usr/lib/qt3/mkspecs/linux-g++/linux-g++ +fi +rm -rf ${RPM_BUILD_ROOT}/usr/lib/qt3/doc/html + +%pre +if test -L usr/lib/qt3; then + rm usr/lib/qt3 +fi + +%post +/sbin/ldconfig +if ! grep -q '^\[3.3\]' etc/X11/qtrc ; then +echo "" >> etc/X11/qtrc +echo "[3.3]" >> etc/X11/qtrc +echo "libraryPath=/opt/kde3/lib64/kde3/plugins/:/opt/kde3/lib/kde3/plugins/" >> etc/X11/qtrc +fi + +%postun -p /sbin/ldconfig + +%files +%defattr(-,root,root,755) +# FIXME provide new changelog if kb9vqf will give one +%doc changes-3.3.8b README* LICENSE* MANIFEST FAQ +%dir /usr/lib/qt3/translations +%dir /usr/lib/qt3 +%dir /usr/lib/qt3/bin +%dir /usr/lib/qt3/%{_lib} +%{_libdir}/libqt-mt.so.* +%{_libdir}/libqui.so.* +/usr/lib/qt3/bin/qtconfig +/usr/lib/qt3/%{_lib}/libqt-mt.so.* +/usr/lib/qt3/%{_lib}/libqui.so.* +%dir /usr/lib/qt3/etc +/usr/lib/qt3/etc/settings +/usr/lib/qt3/plugins +/usr/lib/qt3/bin/assistant +%lang(de) /usr/lib/qt3/translations/assistant_de.qm +%lang(ar) /usr/lib/qt3/translations/qt_ar.qm +%lang(ca) /usr/lib/qt3/translations/qt_ca.qm +%lang(cs) /usr/lib/qt3/translations/qt_cs.qm +%lang(de) /usr/lib/qt3/translations/qt_de.qm +%lang(es) /usr/lib/qt3/translations/qt_es.qm +%lang(fr) /usr/lib/qt3/translations/qt_fr.qm +%lang(he) /usr/lib/qt3/translations/qt_he.qm +%lang(ru) /usr/lib/qt3/translations/qt_ru.qm +%lang(sk) /usr/lib/qt3/translations/qt_sk.qm +%lang(it) /usr/lib/qt3/translations/qt_it.qm +%lang(ja) /usr/lib/qt3/translations/qt_ja.qm +%lang(nb) /usr/lib/qt3/translations/qt_nb.qm +%lang(pl) /usr/lib/qt3/translations/qt_pl.qm +%lang(pt) /usr/lib/qt3/translations/qt_pt-br.qm +%lang(pt) /usr/lib/qt3/translations/qt_pt.qm +%lang(zh) /usr/lib/qt3/translations/qt_zh-cn.qm +%lang(zh) /usr/lib/qt3/translations/qt_zh-tw.qm +%config(noreplace) /etc/X11/qtrc +%ifarch s390x sparc64 x86_64 ppc64 mips64 +%dir %{_libdir}/qt3 +%endif + +%files devel +%defattr(-,root,root,755) +# FIXME provide new changelog if kb9vqf will give one +%doc changes-3.3.8b +/usr/lib/qt3/bin/moc +/usr/lib/qt3/bin/qmake +/usr/lib/qt3/bin/uic +/usr/lib/qt3/include +/usr/lib/qt3/%{_lib}/libqt-mt.la +/usr/lib/qt3/%{_lib}/libqt-mt.so +/usr/lib/qt3/%{_lib}/libqt-mt.prl +/usr/lib/qt3/%{_lib}/libqui.so +/usr/lib/qt3/%{_lib}/libqui.prl +/usr/lib/qt3/mkspecs +/%_libdir/pkgconfig/qt-mt.pc +/usr/lib/qt3/%_lib/libqassistantclient.* +%config /etc/profile.d/qt3.* + +%changelog diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.history/b1/50304a6f850d00111528b7e658abf294 b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.history/b1/50304a6f850d00111528b7e658abf294 new file mode 100644 index 000000000..e69de29bb diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.history/da/208c118b850d00111528b7e658abf294 b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.history/da/208c118b850d00111528b7e658abf294 new file mode 100644 index 000000000..cf4a5e869 --- /dev/null +++ b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.history/da/208c118b850d00111528b7e658abf294 @@ -0,0 +1,297 @@ +# +# spec file for package qt3-devel-doc +# +# Copyright (c) 2011 SUSE LINUX Products GmbH, Nuernberg, Germany. +# +# All modifications and additions to the file contributed by third parties +# remain the property of their copyright owners, unless otherwise agreed +# upon. The license for this file, and modifications and additions to the +# file, is the same license as for the pristine package itself (unless the +# license for the pristine package is not an Open Source License, in which +# case the license is the MIT License). An "Open Source License" is a +# license that conforms to the Open Source Definition (Version 1.9) +# published by the Open Source Initiative. + +# Please submit bugfixes or comments via http://bugs.opensuse.org/ +# + +# norootforbuild + + +Name: qt3-devel-doc +BuildRequires: cups-devel freeglut-devel freetype2-devel gcc-c++ pkgconfig qt3-devel update-desktop-files +%if %suse_version < 1130 +BuildRequires: libpng-devel +%else +BuildRequires: libpng14-devel +%endif +Url: http://www.trolltech.com/ +License: GPL, QPL +AutoReqProv: on +Summary: Documentation for the Qt 3 Development Kit +Group: Documentation/HTML +Version: 3.3.8c +Release: 1 +PreReq: /bin/grep +BuildArch: noarch +Provides: qt3-devel-tutorial +Obsoletes: qt3-devel-tutorial +Requires: qt3-devel +%define x11_free -x11-free- +%define rversion %version +# COMMON-BEGIN +# COMMON-BEGIN +%define x11_free -x11-free- +%define rversion 3.3.8b +Source0: qt%{x11_free}%rversion.tar.bz2 +Source1: build_script.sh +Source2: qtconfig3.desktop +Source3: qtrc +Source4: assistant3.png +Source6: assistant3.desktop +Source7: designer.desktop +Source8: designer.png +Source9: linguist.desktop +Source5: linguist.png +Source10: qt3.sh +Source11: qt3.csh +# Translations did not change at 3.3.8c +Source12: qt3-3.3.8b-translations.tar.bz2 +Source100: qtkdeintegration_x11.cpp +Source101: qtkdeintegration_x11_p.h +Source102: baselibs.conf +Source200: attributes +Source201: update_spec.pl +Patch1: aliasing.diff +Patch2: head.diff +Patch4: qt3-never-strip.diff +Patch5: external-libs.diff +Patch6: 0001-dnd_optimization.patch +Patch7: 0002-dnd_active_window_fix.patch +Patch8: 0007-qpixmap_constants.patch +Patch11: 0038-dragobject-dont-prefer-unknown.patch +Patch12: qtrc-path.diff +Patch14: lib64-plugin-support.diff +Patch15: pluginmanager-fix.diff +Patch18: no-rpath.dif +Patch19: shut-up.diff +Patch20: rubberband.diff +Patch21: fix-GL-loading.diff +Patch23: fix-accessible.diff +# From http://www.freedesktop.org/wiki/Software_2fImmoduleQtDownload +# Current version from http://freedesktop.org/~daisuke/qt-x11-immodule-unified-qt3.3.5-20060318.diff.bz2 +Patch25: qt-x11-immodule-unified-qt3.3.8-20060318.diff +Patch28: fix-key-release-event-with-imm.diff +Patch29: 0047-fix-kmenu-width.diff +Patch31: limit-image-size.diff +Patch34: 0005-qpixmap_mitshm.patch +Patch35: qt-transparency.patch +Patch37: 0055-qtextedit_zoom.patch +Patch38: 0048-qclipboard_hack_80072.patch +Patch39: fix-qtranslator-crash.diff +Patch40: 0059-qpopup_has_mouse.patch +Patch41: 0060-qpopup_ignore_mousepos.patch +Patch42: add_qexport_visibility.patch +Patch43: 0056-khotkeys_input_84434.patch +Source250: enable-designer-plugins.diff +Patch53: fix-xinerama-dialog-placement.diff +Patch54: kmenu-search-fix.diff +Patch55: qt3-fix-cast.diff +Patch100: qt.patch +Patch101: qt3-arm-gcc4.patch +Patch102: xinerama.patch +Patch113: fix-assistant-path.patch +Patch117: qtimer-debug.diff +Patch119: xinerama-qpopupmenu.diff +Patch121: qt3-warnings.diff +Patch123: use-xrandr-1.2.diff +Patch125: qcstring-format-warnings.diff +Patch127: mng-reading-fix.patch +Patch128: 0079-compositing-types.patch +Patch129: 0080-net-wm-sync-request.patch +Patch132: revert-qt-3.3.8-khmer-fix.diff +Patch133: 0085-fix-buildkey.diff +Patch134: fix-xinput-clash.diff +Patch135: parseFontName.diff +Patch136: qt3-no-date.diff +Patch137: popen-leak-fix.diff +Patch138: qt3-libpng14.diff +Patch139: gcc46.diff + +# TQt integration +Patch200: qt-3.3.8c.diff + +BuildRoot: %{_tmppath}/%{name}-%{version}-build + +%description +This package contains the documentation for the Qt 3 Development Kit. + +You will find documentation, precompiled examples, and a tutorial for +getting started with Qt in /usr/lib/qt3/doc. + +This package contains the documentation for the Qt 3 Development Kit. + +You will find documentation, precompiled examples, and a tutorial for +getting started with Qt in /usr/lib/qt3/doc. + +This package contains the documentation for the Qt 3 Development Kit. + +You will find documentation, precompiled examples, and a tutorial for +getting started with Qt in /usr/lib/qt3/doc. + +This package contains the documentation for the Qt 3 Development Kit. + +You will find documentation, precompiled examples, and a tutorial for +getting started with Qt in /usr/lib/qt3/doc. + +%define build_sub_dirs src plugins/src tools/designer/uilib/ tools/designer/uic tools/qtconfig tools/assistant/lib tools/assistant tutorial + +%prep +%setup -q -n qt%{x11_free}%rversion +%patch1 +%patch2 +%patch4 +%patch5 +%patch6 +%patch7 +%patch8 +%patch11 +%patch12 +if [ "%_lib" = "lib64" ]; then +%patch14 +fi +%patch15 +%patch18 +%patch19 +%patch20 +%patch23 +%patch25 +%patch28 +%patch29 +%patch31 +%patch34 +%patch35 +%patch37 +%patch38 +%patch39 +%patch40 +%patch41 +%patch42 +%patch43 +%patch100 +%patch102 +%patch53 +%patch54 +%patch55 +%patch101 +%patch113 +%patch117 +%patch119 +%patch121 +%patch123 +ln -sf $PWD/src/inputmethod/qinputcontextfactory.h include/ +ln -sf $PWD/src/inputmethod/qinputcontextplugin.h include/ +ln -sf $PWD/src/kernel/qinputcontext.h include/ +ln -sf $PWD/src/kernel/qinputcontextinterface_p.h include/private/ +ln -sf $PWD/src/kernel/qximinputcontext_p.h include/private/ +if [ %_lib = "lib" ]; then +sed 's,/lib64/,/lib/,' %PATCH21 | patch -p0 +else +%patch21 +fi +%patch125 +%patch127 +%patch128 +%patch129 +%patch132 +%patch133 +%patch134 +%patch135 +%patch136 +%patch137 +%if %suse_version > 1120 +%patch138 -p1 +%endif +%patch139 +%patch200 +# copy qt kde integration files +cp %SOURCE100 %SOURCE101 src/kernel/ +cp %SOURCE101 include/private/ +cd translations +tar xvjf %SOURCE12 +cd .. +# COMMON-END +# COMMON-END + +%description +This package contains the documentation for the Qt 3 Development Kit. + +You will find documentation, precompiled examples, and a tutorial for +getting started with Qt in /usr/lib/qt3/doc. + +This package contains the documentation for the Qt 3 Development Kit. + +You will find documentation, precompiled examples, and a tutorial for +getting started with Qt in /usr/lib/qt3/doc. + +This package contains the documentation for the Qt 3 Development Kit. + +You will find documentation, precompiled examples, and a tutorial for +getting started with Qt in /usr/lib/qt3/doc. + +This package contains the documentation for the Qt 3 Development Kit. + +You will find documentation, precompiled examples, and a tutorial for +getting started with Qt in /usr/lib/qt3/doc. + +%build +export VERSION=%suse_version +source %SOURCE1 %{version} +export WLIB=%_lib +export QTDIR=`pwd` +if [ %_lib == "lib64" ]; then +export RPM_OPT_FLAGS="$RPM_OPT_FLAGS -DUSE_LIB64_PATHES" +fi +export RPM_OPT_FLAGS="$RPM_OPT_FLAGS -fno-strict-aliasing" +# +# call build from build_script.rpmrc for threaded Qt library +# only really needed tools will be builded here, all extra tools will be +# builded in qt3.spec +# +call_configure -thread -shared -no-sql-mysql -no-sql-psql -no-sql-odbc -no-sql-sqlite $OPTIONS +cd src +make %{?jobs:-j%jobs} +cd .. + +%install +export VERSION=%suse_version +export WLIB=%_lib +export QTDIR=`pwd` +source %SOURCE1 %{version} +cd src +make INSTALL_ROOT=$RPM_BUILD_ROOT install_htmldocs +cd .. +# +# install menu entries +# +%suse_update_desktop_file -i -u qtconfig3 Qt Utility DesktopSettings +%suse_update_desktop_file -i assistant3 Qt Development Documentation + +install -d -m 0755 ${RPM_BUILD_ROOT}/%{_defaultdocdir}/qt3/ +ln -sf /usr/lib/qt3/doc/html ${RPM_BUILD_ROOT}/%{_defaultdocdir}/qt3/ +mkdir -p $RPM_BUILD_ROOT/usr/share/pixmaps/ +install -m 0644 %SOURCE4 $RPM_BUILD_ROOT/usr/share/pixmaps/ + +%clean +rm -rf ${RPM_BUILD_ROOT} + +%files +%defattr(-,root,root) +%dir /usr/lib/qt3/doc +%doc /usr/lib/qt3/doc/html +%{_docdir}/qt3/html +/usr/share/applications/qtconfig3.desktop +/usr/share/applications/assistant3.desktop +/usr/share/pixmaps/assistant3.png + +%changelog diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/arts/.markers.snap b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/arts/.markers.snap new file mode 100644 index 000000000..91d6c5415 Binary files /dev/null and b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/arts/.markers.snap differ diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/arts/.syncinfo.snap b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/arts/.syncinfo.snap new file mode 100644 index 000000000..91d6c5415 Binary files /dev/null and b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/arts/.syncinfo.snap differ diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/libdbus-1-tqt-0/.markers.snap b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/libdbus-1-tqt-0/.markers.snap new file mode 100644 index 000000000..91d6c5415 Binary files /dev/null and b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/libdbus-1-tqt-0/.markers.snap differ diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/libdbus-1-tqt-0/.syncinfo.snap b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/libdbus-1-tqt-0/.syncinfo.snap new file mode 100644 index 000000000..91d6c5415 Binary files /dev/null and b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/libdbus-1-tqt-0/.syncinfo.snap differ diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/libdbus-tqt-1-0/.markers.snap b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/libdbus-tqt-1-0/.markers.snap new file mode 100644 index 000000000..91d6c5415 Binary files /dev/null and b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/libdbus-tqt-1-0/.markers.snap differ diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/libdbus-tqt-1-0/.syncinfo.snap b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/libdbus-tqt-1-0/.syncinfo.snap new file mode 100644 index 000000000..91d6c5415 Binary files /dev/null and b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/libdbus-tqt-1-0/.syncinfo.snap differ diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/libtqt4/.markers.snap b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/libtqt4/.markers.snap new file mode 100644 index 000000000..91d6c5415 Binary files /dev/null and b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/libtqt4/.markers.snap differ diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/libtqt4/.syncinfo.snap b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/libtqt4/.syncinfo.snap new file mode 100644 index 000000000..91d6c5415 Binary files /dev/null and b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/libtqt4/.syncinfo.snap differ diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/qt3/.markers.snap b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/qt3/.markers.snap new file mode 100644 index 000000000..cae804b58 Binary files /dev/null and b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/qt3/.markers.snap differ diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/qt3/.syncinfo.snap b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/qt3/.syncinfo.snap new file mode 100644 index 000000000..91d6c5415 Binary files /dev/null and b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/qt3/.syncinfo.snap differ diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tde-filesystem/.markers.snap b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tde-filesystem/.markers.snap new file mode 100644 index 000000000..91d6c5415 Binary files /dev/null and b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tde-filesystem/.markers.snap differ diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tde-filesystem/.syncinfo.snap b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tde-filesystem/.syncinfo.snap new file mode 100644 index 000000000..91d6c5415 Binary files /dev/null and b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tde-filesystem/.syncinfo.snap differ diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdeaccessibility/.markers.snap b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdeaccessibility/.markers.snap new file mode 100644 index 000000000..91d6c5415 Binary files /dev/null and b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdeaccessibility/.markers.snap differ diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdeaccessibility/.syncinfo.snap b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdeaccessibility/.syncinfo.snap new file mode 100644 index 000000000..91d6c5415 Binary files /dev/null and b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdeaccessibility/.syncinfo.snap differ diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdeaddons/.markers.snap b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdeaddons/.markers.snap new file mode 100644 index 000000000..91d6c5415 Binary files /dev/null and b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdeaddons/.markers.snap differ diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdeaddons/.syncinfo.snap b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdeaddons/.syncinfo.snap new file mode 100644 index 000000000..91d6c5415 Binary files /dev/null and b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdeaddons/.syncinfo.snap differ diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdeartwork/.markers.snap b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdeartwork/.markers.snap new file mode 100644 index 000000000..91d6c5415 Binary files /dev/null and b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdeartwork/.markers.snap differ diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdeartwork/.syncinfo.snap b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdeartwork/.syncinfo.snap new file mode 100644 index 000000000..91d6c5415 Binary files /dev/null and b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdeartwork/.syncinfo.snap differ diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdebase/.markers.snap b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdebase/.markers.snap new file mode 100644 index 000000000..2412002bf Binary files /dev/null and b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdebase/.markers.snap differ diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdebase/.syncinfo.snap b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdebase/.syncinfo.snap new file mode 100644 index 000000000..91d6c5415 Binary files /dev/null and b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdebase/.syncinfo.snap differ diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdebindings/.markers.snap b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdebindings/.markers.snap new file mode 100644 index 000000000..91d6c5415 Binary files /dev/null and b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdebindings/.markers.snap differ diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdebindings/.syncinfo.snap b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdebindings/.syncinfo.snap new file mode 100644 index 000000000..91d6c5415 Binary files /dev/null and b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdebindings/.syncinfo.snap differ diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdedevelop/.markers.snap b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdedevelop/.markers.snap new file mode 100644 index 000000000..91d6c5415 Binary files /dev/null and b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdedevelop/.markers.snap differ diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdedevelop/.syncinfo.snap b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdedevelop/.syncinfo.snap new file mode 100644 index 000000000..91d6c5415 Binary files /dev/null and b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdedevelop/.syncinfo.snap differ diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdeedu/.markers.snap b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdeedu/.markers.snap new file mode 100644 index 000000000..91d6c5415 Binary files /dev/null and b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdeedu/.markers.snap differ diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdeedu/.syncinfo.snap b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdeedu/.syncinfo.snap new file mode 100644 index 000000000..91d6c5415 Binary files /dev/null and b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdeedu/.syncinfo.snap differ diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdegames/.markers.snap b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdegames/.markers.snap new file mode 100644 index 000000000..91d6c5415 Binary files /dev/null and b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdegames/.markers.snap differ diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdegames/.syncinfo.snap b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdegames/.syncinfo.snap new file mode 100644 index 000000000..91d6c5415 Binary files /dev/null and b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdegames/.syncinfo.snap differ diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdegraphics/.markers.snap b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdegraphics/.markers.snap new file mode 100644 index 000000000..91d6c5415 Binary files /dev/null and b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdegraphics/.markers.snap differ diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdegraphics/.syncinfo.snap b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdegraphics/.syncinfo.snap new file mode 100644 index 000000000..91d6c5415 Binary files /dev/null and b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdegraphics/.syncinfo.snap differ diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdelibs/.indexes/history.index b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdelibs/.indexes/history.index new file mode 100644 index 000000000..ce3e02575 Binary files /dev/null and b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdelibs/.indexes/history.index differ diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdelibs/.markers.snap b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdelibs/.markers.snap new file mode 100644 index 000000000..14d7f0aab Binary files /dev/null and b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdelibs/.markers.snap differ diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdelibs/.syncinfo.snap b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdelibs/.syncinfo.snap new file mode 100644 index 000000000..91d6c5415 Binary files /dev/null and b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdelibs/.syncinfo.snap differ diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdemultimedia/.markers.snap b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdemultimedia/.markers.snap new file mode 100644 index 000000000..91d6c5415 Binary files /dev/null and b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdemultimedia/.markers.snap differ diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdemultimedia/.syncinfo.snap b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdemultimedia/.syncinfo.snap new file mode 100644 index 000000000..91d6c5415 Binary files /dev/null and b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdemultimedia/.syncinfo.snap differ diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdenetwork/.markers.snap b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdenetwork/.markers.snap new file mode 100644 index 000000000..91d6c5415 Binary files /dev/null and b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdenetwork/.markers.snap differ diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdenetwork/.syncinfo.snap b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdenetwork/.syncinfo.snap new file mode 100644 index 000000000..91d6c5415 Binary files /dev/null and b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdenetwork/.syncinfo.snap differ diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdepim/.markers.snap b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdepim/.markers.snap new file mode 100644 index 000000000..91d6c5415 Binary files /dev/null and b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdepim/.markers.snap differ diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdepim/.syncinfo.snap b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdepim/.syncinfo.snap new file mode 100644 index 000000000..91d6c5415 Binary files /dev/null and b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdepim/.syncinfo.snap differ diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdesdk/.markers.snap b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdesdk/.markers.snap new file mode 100644 index 000000000..91d6c5415 Binary files /dev/null and b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdesdk/.markers.snap differ diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdesdk/.syncinfo.snap b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdesdk/.syncinfo.snap new file mode 100644 index 000000000..91d6c5415 Binary files /dev/null and b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdesdk/.syncinfo.snap differ diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdetoys/.markers.snap b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdetoys/.markers.snap new file mode 100644 index 000000000..91d6c5415 Binary files /dev/null and b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdetoys/.markers.snap differ diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdetoys/.syncinfo.snap b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdetoys/.syncinfo.snap new file mode 100644 index 000000000..91d6c5415 Binary files /dev/null and b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdetoys/.syncinfo.snap differ diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdeutils/.markers.snap b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdeutils/.markers.snap new file mode 100644 index 000000000..91d6c5415 Binary files /dev/null and b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdeutils/.markers.snap differ diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdeutils/.syncinfo.snap b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdeutils/.syncinfo.snap new file mode 100644 index 000000000..91d6c5415 Binary files /dev/null and b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdeutils/.syncinfo.snap differ diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdewebdev/.markers.snap b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdewebdev/.markers.snap new file mode 100644 index 000000000..91d6c5415 Binary files /dev/null and b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdewebdev/.markers.snap differ diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdewebdev/.syncinfo.snap b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdewebdev/.syncinfo.snap new file mode 100644 index 000000000..91d6c5415 Binary files /dev/null and b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdewebdev/.syncinfo.snap differ diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/properties.index b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/properties.index index 9032b8f9c..fef495353 100644 Binary files a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/properties.index and b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.root/.indexes/properties.index differ diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.root/.markers.snap b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.root/.markers.snap new file mode 100644 index 000000000..91d6c5415 Binary files /dev/null and b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.root/.markers.snap differ diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.safetable/org.eclipse.core.resources b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.safetable/org.eclipse.core.resources index 70213890d..b195d5b15 100644 Binary files a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.safetable/org.eclipse.core.resources and b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.safetable/org.eclipse.core.resources differ diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.snap b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.snap new file mode 100644 index 000000000..ba856116d Binary files /dev/null and b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.snap differ diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.m2e.logback.configuration/0.log b/opensuse/core/.metadata/.plugins/org.eclipse.m2e.logback.configuration/0.log index c35676ae2..ff2debee4 100644 --- a/opensuse/core/.metadata/.plugins/org.eclipse.m2e.logback.configuration/0.log +++ b/opensuse/core/.metadata/.plugins/org.eclipse.m2e.logback.configuration/0.log @@ -1 +1,2 @@ 2011-11-08 23:25:58,999 [Worker-1] INFO org.mortbay.log - Logging to Logger[org.mortbay.log] via org.mortbay.log.Slf4jLog +2011-11-12 18:14:47,393 [Worker-4] INFO org.mortbay.log - Logging to Logger[org.mortbay.log] via org.mortbay.log.Slf4jLog diff --git a/opensuse/core/qt3/_service b/opensuse/core/qt3/_service new file mode 100644 index 000000000..96dad1687 --- /dev/null +++ b/opensuse/core/qt3/_service @@ -0,0 +1,3 @@ + + yesyesyes + \ No newline at end of file diff --git a/opensuse/core/qt3/qt3-devel-doc.spec b/opensuse/core/qt3/qt3-devel-doc.spec index cf4a5e869..622fb9854 100644 --- a/opensuse/core/qt3/qt3-devel-doc.spec +++ b/opensuse/core/qt3/qt3-devel-doc.spec @@ -30,7 +30,7 @@ License: GPL, QPL AutoReqProv: on Summary: Documentation for the Qt 3 Development Kit Group: Documentation/HTML -Version: 3.3.8c +Version: 3.3.8d Release: 1 PreReq: /bin/grep BuildArch: noarch @@ -43,7 +43,7 @@ Requires: qt3-devel # COMMON-BEGIN %define x11_free -x11-free- %define rversion 3.3.8b -Source0: qt%{x11_free}%rversion.tar.bz2 +Source0: http://mirror.its.uidaho.edu/pub/trinity/releases/3.5.13/dependencies/qt3-3.3.8.d.tar.gz Source1: build_script.sh Source2: qtconfig3.desktop Source3: qtrc @@ -118,9 +118,6 @@ Patch137: popen-leak-fix.diff Patch138: qt3-libpng14.diff Patch139: gcc46.diff -# TQt integration -Patch200: qt-3.3.8c.diff - BuildRoot: %{_tmppath}/%{name}-%{version}-build %description @@ -147,7 +144,7 @@ getting started with Qt in /usr/lib/qt3/doc. %define build_sub_dirs src plugins/src tools/designer/uilib/ tools/designer/uic tools/qtconfig tools/assistant/lib tools/assistant tutorial %prep -%setup -q -n qt%{x11_free}%rversion +%setup -q -n qt3 %patch1 %patch2 %patch4 diff --git a/opensuse/core/qt3/qt3-extensions.spec b/opensuse/core/qt3/qt3-extensions.spec index d914a2e06..c9b4459b5 100644 --- a/opensuse/core/qt3/qt3-extensions.spec +++ b/opensuse/core/qt3/qt3-extensions.spec @@ -24,7 +24,7 @@ BuildRequires: cups-devel krb5-devel mysql-devel postgresql-devel qt3-devel sql BuildRequires: fdupes %endif License: GPL, QPL -Version: 3.3.8c +Version: 3.3.8d Release: 1 AutoReqProv: on Requires: qt3 = %version @@ -34,7 +34,7 @@ Summary: Qt3 Extensions # COMMON-BEGIN %define x11_free -x11-free- %define rversion 3.3.8b -Source0: qt%{x11_free}%rversion.tar.bz2 +Source0: http://mirror.its.uidaho.edu/pub/trinity/releases/3.5.13/dependencies/qt3-3.3.8.d.tar.gz Source1: build_script.sh Source2: qtconfig3.desktop Source3: qtrc @@ -109,9 +109,6 @@ Patch137: popen-leak-fix.diff Patch138: qt3-libpng14.diff Patch139: gcc46.diff -# TQt integration -Patch200: qt-3.3.8c.diff - BuildRoot: %{_tmppath}/%{name}-%{version}-build %description @@ -130,7 +127,7 @@ Netscape plug-in modules. %define build_sub_dirs src plugins/src tools/designer/uilib/ tools/designer/uic tools/qtconfig tools/assistant/lib tools/assistant tutorial %prep -%setup -q -n qt%{x11_free}%rversion +%setup -q -n qt3 %patch1 %patch2 %patch4 diff --git a/opensuse/core/qt3/qt3.spec b/opensuse/core/qt3/qt3.spec index 326d2c03f..3dc97953a 100644 --- a/opensuse/core/qt3/qt3.spec +++ b/opensuse/core/qt3/qt3.spec @@ -34,7 +34,7 @@ Obsoletes: qt3-64bit %endif # Summary: A library for developing applications with graphical user interfaces -Version: 3.3.8c +Version: 3.3.8d Release: 110 Provides: qt_library_%version Recommends: kdelibs3-default-style @@ -42,7 +42,7 @@ PreReq: /bin/grep # COMMON-BEGIN %define x11_free -x11-free- %define rversion 3.3.8b -Source0: qt%{x11_free}%rversion.tar.bz2 +Source0: http://mirror.its.uidaho.edu/pub/trinity/releases/3.5.13/dependencies/qt3-3.3.8.d.tar.gz Source1: build_script.sh Source2: qtconfig3.desktop Source3: qtrc @@ -117,9 +117,6 @@ Patch137: popen-leak-fix.diff Patch138: qt3-libpng14.diff Patch139: gcc46.diff -# TQt integration -Patch200: qt-3.3.8c.diff - BuildRoot: %{_tmppath}/%{name}-%{version}-build %description @@ -138,7 +135,7 @@ the current Qt library! %define build_sub_dirs src plugins/src tools/designer/uilib/ tools/designer/uic tools/qtconfig tools/assistant/lib tools/assistant tutorial %prep -%setup -q -n qt%{x11_free}%rversion +%setup -q -n qt3 %patch1 %patch2 %patch4 diff --git a/opensuse/core/tdelibs/tdelibs-devel-doc.spec b/opensuse/core/tdelibs/tdelibs-devel-doc.spec index cf74b334f..cef0e454a 100644 --- a/opensuse/core/tdelibs/tdelibs-devel-doc.spec +++ b/opensuse/core/tdelibs/tdelibs-devel-doc.spec @@ -108,7 +108,7 @@ export QTDOCDIR=/usr/share/doc/packages/qt3/html %dir %{_tde_sharedir} %dir %{_tde_datadir} %dir %{_tde_datadir}/tdelibs -/usr/share/doc/TDE-API +%{_datadir}/doc/TDE-API %{_tde_datadir}/tdelibs/create-kdeapi %{_tde_docdir} -- cgit v1.2.3 From af4dffbc521fa19293fb765ddc30aa36a04fe78d Mon Sep 17 00:00:00 2001 From: Robert Xu Date: Wed, 16 Nov 2011 18:29:14 -0500 Subject: fix qt3 a bit mroe and have it in sync with OBS --- opensuse/.gitignore | 2 + opensuse/core/.metadata/.log | 205 + .../.projects/arts/.markers.snap | Bin 16 -> 128 bytes .../.projects/arts/.syncinfo.snap | Bin 16 -> 128 bytes .../.projects/libdbus-1-tqt-0/.markers.snap | Bin 16 -> 128 bytes .../.projects/libdbus-1-tqt-0/.syncinfo.snap | Bin 16 -> 128 bytes .../.projects/libdbus-tqt-1-0/.markers.snap | Bin 16 -> 128 bytes .../.projects/libdbus-tqt-1-0/.syncinfo.snap | Bin 16 -> 128 bytes .../.projects/libtqt4/.markers.snap | Bin 16 -> 128 bytes .../.projects/libtqt4/.syncinfo.snap | Bin 16 -> 128 bytes .../.projects/qt3/.markers.snap | Bin 452 -> 3616 bytes .../.projects/qt3/.syncinfo.snap | Bin 16 -> 128 bytes .../.projects/tde-filesystem/.markers.snap | Bin 16 -> 128 bytes .../.projects/tde-filesystem/.syncinfo.snap | Bin 16 -> 128 bytes .../.projects/tdeaccessibility/.markers.snap | Bin 16 -> 128 bytes .../.projects/tdeaccessibility/.syncinfo.snap | Bin 16 -> 128 bytes .../.projects/tdeaddons/.markers.snap | Bin 16 -> 128 bytes .../.projects/tdeaddons/.syncinfo.snap | Bin 16 -> 128 bytes .../.projects/tdeartwork/.markers.snap | Bin 16 -> 128 bytes .../.projects/tdeartwork/.syncinfo.snap | Bin 16 -> 128 bytes .../.projects/tdebase/.markers.snap | Bin 246 -> 358 bytes .../.projects/tdebase/.syncinfo.snap | Bin 16 -> 128 bytes .../.projects/tdebindings/.markers.snap | Bin 16 -> 128 bytes .../.projects/tdebindings/.syncinfo.snap | Bin 16 -> 128 bytes .../.projects/tdedevelop/.markers.snap | Bin 16 -> 128 bytes .../.projects/tdedevelop/.syncinfo.snap | Bin 16 -> 128 bytes .../.projects/tdeedu/.markers.snap | Bin 16 -> 128 bytes .../.projects/tdeedu/.syncinfo.snap | Bin 16 -> 128 bytes .../.projects/tdegames/.markers.snap | Bin 16 -> 128 bytes .../.projects/tdegames/.syncinfo.snap | Bin 16 -> 128 bytes .../.projects/tdegraphics/.markers.snap | Bin 16 -> 128 bytes .../.projects/tdegraphics/.syncinfo.snap | Bin 16 -> 128 bytes .../.projects/tdelibs/.markers.snap | Bin 247 -> 359 bytes .../.projects/tdelibs/.syncinfo.snap | Bin 16 -> 128 bytes .../.projects/tdemultimedia/.markers.snap | Bin 16 -> 128 bytes .../.projects/tdemultimedia/.syncinfo.snap | Bin 16 -> 128 bytes .../.projects/tdenetwork/.markers.snap | Bin 16 -> 128 bytes .../.projects/tdenetwork/.syncinfo.snap | Bin 16 -> 128 bytes .../.projects/tdepim/.markers.snap | Bin 16 -> 128 bytes .../.projects/tdepim/.syncinfo.snap | Bin 16 -> 128 bytes .../.projects/tdesdk/.markers.snap | Bin 16 -> 128 bytes .../.projects/tdesdk/.syncinfo.snap | Bin 16 -> 128 bytes .../.projects/tdetoys/.markers.snap | Bin 16 -> 128 bytes .../.projects/tdetoys/.syncinfo.snap | Bin 16 -> 128 bytes .../.projects/tdeutils/.markers.snap | Bin 16 -> 128 bytes .../.projects/tdeutils/.syncinfo.snap | Bin 16 -> 128 bytes .../.projects/tdewebdev/.markers.snap | Bin 16 -> 128 bytes .../.projects/tdewebdev/.syncinfo.snap | Bin 16 -> 128 bytes .../org.eclipse.core.resources/.root/.markers.snap | Bin 16 -> 128 bytes .../.safetable/org.eclipse.core.resources | Bin 1171 -> 3416 bytes .../.plugins/org.eclipse.core.resources/.snap | Bin 24422 -> 32928 bytes opensuse/core/qt3/0001-dnd_optimization.patch | 180 - opensuse/core/qt3/0002-dnd_active_window_fix.patch | 162 - opensuse/core/qt3/0007-qpixmap_constants.patch | 384 - .../qt3/0038-dragobject-dont-prefer-unknown.patch | 19 - opensuse/core/qt3/0047-fix-kmenu-width.diff | 23 - opensuse/core/qt3/_service | 2 +- opensuse/core/qt3/qt-x11-free-3.3.8b.tar.bz2 | Bin 14344869 -> 0 bytes .../qt-x11-immodule-unified-qt3.3.8-20060318.diff | 16169 ------------------- opensuse/core/qt3/qt3-devel-doc.spec | 19 +- opensuse/core/qt3/qt3-extensions.spec | 30 +- opensuse/core/qt3/qt3.changes | 10 + opensuse/core/qt3/qt3.spec | 19 +- opensuse/core/qt3/rubberband.diff | 339 - 64 files changed, 222 insertions(+), 17341 deletions(-) delete mode 100644 opensuse/core/qt3/0001-dnd_optimization.patch delete mode 100644 opensuse/core/qt3/0002-dnd_active_window_fix.patch delete mode 100644 opensuse/core/qt3/0007-qpixmap_constants.patch delete mode 100644 opensuse/core/qt3/0038-dragobject-dont-prefer-unknown.patch delete mode 100644 opensuse/core/qt3/0047-fix-kmenu-width.diff delete mode 100644 opensuse/core/qt3/qt-x11-free-3.3.8b.tar.bz2 delete mode 100644 opensuse/core/qt3/qt-x11-immodule-unified-qt3.3.8-20060318.diff delete mode 100644 opensuse/core/qt3/rubberband.diff diff --git a/opensuse/.gitignore b/opensuse/.gitignore index b04137703..5f0a10e64 100644 --- a/opensuse/.gitignore +++ b/opensuse/.gitignore @@ -1,2 +1,4 @@ *~ _build* +.osc +.metadata diff --git a/opensuse/core/.metadata/.log b/opensuse/core/.metadata/.log index de47a525c..1e51a8e4a 100644 --- a/opensuse/core/.metadata/.log +++ b/opensuse/core/.metadata/.log @@ -1571,3 +1571,208 @@ Caused by: java.io.IOException: java.io.IOException: error=2, No such file or di at java.lang.ProcessImpl.start(ProcessImpl.java:81) at java.lang.ProcessBuilder.start(ProcessBuilder.java:468) ... 7 more + +!ENTRY org.eclipse.linuxtools.rpm.ui.editor 4 0 2011-11-12 23:40:02.119 +!MESSAGE Unexpected Exception +!STACK 0 +java.io.IOException: Cannot run program "rpm": java.io.IOException: error=2, No such file or directory + at java.lang.ProcessBuilder.start(ProcessBuilder.java:475) + at org.eclipse.linuxtools.rpm.core.utils.Utils.runCommandToInputStream(Utils.java:47) + at org.eclipse.linuxtools.rpm.core.utils.Utils.runCommandToString(Utils.java:109) + at org.eclipse.linuxtools.rpm.ui.editor.RpmPackageProposalsList.getRpmInfo(RpmPackageProposalsList.java:110) + at org.eclipse.linuxtools.rpm.ui.editor.RpmPackageProposalsList.getProposals(RpmPackageProposalsList.java:87) + at org.eclipse.linuxtools.rpm.ui.editor.Activator.getRpmPackageList(Activator.java:130) + at org.eclipse.linuxtools.rpm.ui.editor.scanners.SpecfilePackagesScanner.(SpecfilePackagesScanner.java:68) + at org.eclipse.linuxtools.rpm.ui.editor.SpecfileConfiguration.getSpecfilePackagesScanner(SpecfileConfiguration.java:106) + at org.eclipse.linuxtools.rpm.ui.editor.SpecfileConfiguration.getPresentationReconciler(SpecfileConfiguration.java:141) + at org.eclipse.jface.text.source.SourceViewer.configure(SourceViewer.java:450) + at org.eclipse.ui.texteditor.AbstractTextEditor.createPartControl(AbstractTextEditor.java:3407) + at org.eclipse.ui.texteditor.StatusTextEditor.createPartControl(StatusTextEditor.java:54) + at org.eclipse.ui.texteditor.AbstractDecoratedTextEditor.createPartControl(AbstractDecoratedTextEditor.java:440) + at org.eclipse.linuxtools.rpm.ui.editor.SpecfileEditor.createPartControl(SpecfileEditor.java:195) + at org.eclipse.ui.internal.EditorReference.createPartHelper(EditorReference.java:670) + at org.eclipse.ui.internal.EditorReference.createPart(EditorReference.java:465) + at org.eclipse.ui.internal.WorkbenchPartReference.getPart(WorkbenchPartReference.java:595) + at org.eclipse.ui.internal.PartPane.setVisible(PartPane.java:313) + at org.eclipse.ui.internal.presentations.PresentablePart.setVisible(PresentablePart.java:180) + at org.eclipse.ui.internal.presentations.util.PresentablePartFolder.select(PresentablePartFolder.java:270) + at org.eclipse.ui.internal.presentations.util.LeftToRightTabOrder.select(LeftToRightTabOrder.java:65) + at org.eclipse.ui.internal.presentations.util.TabbedStackPresentation.selectPart(TabbedStackPresentation.java:473) + at org.eclipse.ui.internal.PartStack.refreshPresentationSelection(PartStack.java:1245) + at org.eclipse.ui.internal.PartStack.setSelection(PartStack.java:1198) + at org.eclipse.ui.internal.PartStack.showPart(PartStack.java:1597) + at org.eclipse.ui.internal.PartStack.add(PartStack.java:493) + at org.eclipse.ui.internal.EditorStack.add(EditorStack.java:103) + at org.eclipse.ui.internal.PartStack.add(PartStack.java:479) + at org.eclipse.ui.internal.EditorStack.add(EditorStack.java:112) + at org.eclipse.ui.internal.EditorSashContainer.addEditor(EditorSashContainer.java:63) + at org.eclipse.ui.internal.EditorAreaHelper.addToLayout(EditorAreaHelper.java:225) + at org.eclipse.ui.internal.EditorAreaHelper.addEditor(EditorAreaHelper.java:213) + at org.eclipse.ui.internal.EditorManager.createEditorTab(EditorManager.java:808) + at org.eclipse.ui.internal.EditorManager.openEditorFromDescriptor(EditorManager.java:707) + at org.eclipse.ui.internal.EditorManager.openEditor(EditorManager.java:666) + at org.eclipse.ui.internal.WorkbenchPage.busyOpenEditorBatched(WorkbenchPage.java:2942) + at org.eclipse.ui.internal.WorkbenchPage.busyOpenEditor(WorkbenchPage.java:2850) + at org.eclipse.ui.internal.WorkbenchPage.access$11(WorkbenchPage.java:2842) + at org.eclipse.ui.internal.WorkbenchPage$10.run(WorkbenchPage.java:2793) + at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70) + at org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:2789) + at org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:2773) + at org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:2764) + at org.eclipse.ui.ide.IDE.openEditor(IDE.java:651) + at org.eclipse.ui.ide.IDE.openEditor(IDE.java:610) + at org.eclipse.ui.ide.IDE.openEditor(IDE.java:1109) + at org.eclipse.ui.internal.views.markers.ExtendedMarkersView.openMarkerInEditor(ExtendedMarkersView.java:1719) + at org.eclipse.ui.internal.views.markers.ExtendedMarkersView.openSelectedMarkers(ExtendedMarkersView.java:1188) + at org.eclipse.ui.internal.views.markers.ExtendedMarkersView$5.open(ExtendedMarkersView.java:578) + at org.eclipse.ui.OpenAndLinkWithEditorHelper$InternalListener.open(OpenAndLinkWithEditorHelper.java:48) + at org.eclipse.jface.viewers.StructuredViewer$2.run(StructuredViewer.java:866) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at org.eclipse.ui.internal.JFaceUtil$1.run(JFaceUtil.java:49) + at org.eclipse.jface.util.SafeRunnable.run(SafeRunnable.java:175) + at org.eclipse.jface.viewers.StructuredViewer.fireOpen(StructuredViewer.java:864) + at org.eclipse.jface.viewers.StructuredViewer.handleOpen(StructuredViewer.java:1152) + at org.eclipse.jface.viewers.StructuredViewer$6.handleOpen(StructuredViewer.java:1256) + at org.eclipse.jface.util.OpenStrategy.fireOpenEvent(OpenStrategy.java:275) + at org.eclipse.jface.util.OpenStrategy.access$2(OpenStrategy.java:269) + at org.eclipse.jface.util.OpenStrategy$1.handleEvent(OpenStrategy.java:309) + at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1258) + at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3588) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3209) + at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2696) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2660) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2494) + at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:674) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:667) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:123) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:344) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:616) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:622) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:577) + at org.eclipse.equinox.launcher.Main.run(Main.java:1410) +Caused by: java.io.IOException: java.io.IOException: error=2, No such file or directory + at java.lang.UNIXProcess.(UNIXProcess.java:164) + at java.lang.ProcessImpl.start(ProcessImpl.java:81) + at java.lang.ProcessBuilder.start(ProcessBuilder.java:468) + ... 83 more + +!ENTRY org.eclipse.linuxtools.rpm.ui.editor 4 0 2011-11-12 23:40:02.210 +!MESSAGE Unexpected Exception +!STACK 0 +java.io.IOException: Cannot run program "rpm": java.io.IOException: error=2, No such file or directory + at java.lang.ProcessBuilder.start(ProcessBuilder.java:475) + at org.eclipse.linuxtools.rpm.core.utils.Utils.runCommandToInputStream(Utils.java:47) + at org.eclipse.linuxtools.rpm.core.utils.Utils.runCommandToString(Utils.java:109) + at org.eclipse.linuxtools.rpm.ui.editor.RpmPackageProposalsList.getRpmInfo(RpmPackageProposalsList.java:110) + at org.eclipse.linuxtools.rpm.ui.editor.RpmPackageProposalsList.getProposals(RpmPackageProposalsList.java:87) + at org.eclipse.linuxtools.rpm.ui.editor.scanners.SpecfilePackagesScanner.(SpecfilePackagesScanner.java:69) + at org.eclipse.linuxtools.rpm.ui.editor.SpecfileConfiguration.getSpecfilePackagesScanner(SpecfileConfiguration.java:106) + at org.eclipse.linuxtools.rpm.ui.editor.SpecfileConfiguration.getPresentationReconciler(SpecfileConfiguration.java:141) + at org.eclipse.jface.text.source.SourceViewer.configure(SourceViewer.java:450) + at org.eclipse.ui.texteditor.AbstractTextEditor.createPartControl(AbstractTextEditor.java:3407) + at org.eclipse.ui.texteditor.StatusTextEditor.createPartControl(StatusTextEditor.java:54) + at org.eclipse.ui.texteditor.AbstractDecoratedTextEditor.createPartControl(AbstractDecoratedTextEditor.java:440) + at org.eclipse.linuxtools.rpm.ui.editor.SpecfileEditor.createPartControl(SpecfileEditor.java:195) + at org.eclipse.ui.internal.EditorReference.createPartHelper(EditorReference.java:670) + at org.eclipse.ui.internal.EditorReference.createPart(EditorReference.java:465) + at org.eclipse.ui.internal.WorkbenchPartReference.getPart(WorkbenchPartReference.java:595) + at org.eclipse.ui.internal.PartPane.setVisible(PartPane.java:313) + at org.eclipse.ui.internal.presentations.PresentablePart.setVisible(PresentablePart.java:180) + at org.eclipse.ui.internal.presentations.util.PresentablePartFolder.select(PresentablePartFolder.java:270) + at org.eclipse.ui.internal.presentations.util.LeftToRightTabOrder.select(LeftToRightTabOrder.java:65) + at org.eclipse.ui.internal.presentations.util.TabbedStackPresentation.selectPart(TabbedStackPresentation.java:473) + at org.eclipse.ui.internal.PartStack.refreshPresentationSelection(PartStack.java:1245) + at org.eclipse.ui.internal.PartStack.setSelection(PartStack.java:1198) + at org.eclipse.ui.internal.PartStack.showPart(PartStack.java:1597) + at org.eclipse.ui.internal.PartStack.add(PartStack.java:493) + at org.eclipse.ui.internal.EditorStack.add(EditorStack.java:103) + at org.eclipse.ui.internal.PartStack.add(PartStack.java:479) + at org.eclipse.ui.internal.EditorStack.add(EditorStack.java:112) + at org.eclipse.ui.internal.EditorSashContainer.addEditor(EditorSashContainer.java:63) + at org.eclipse.ui.internal.EditorAreaHelper.addToLayout(EditorAreaHelper.java:225) + at org.eclipse.ui.internal.EditorAreaHelper.addEditor(EditorAreaHelper.java:213) + at org.eclipse.ui.internal.EditorManager.createEditorTab(EditorManager.java:808) + at org.eclipse.ui.internal.EditorManager.openEditorFromDescriptor(EditorManager.java:707) + at org.eclipse.ui.internal.EditorManager.openEditor(EditorManager.java:666) + at org.eclipse.ui.internal.WorkbenchPage.busyOpenEditorBatched(WorkbenchPage.java:2942) + at org.eclipse.ui.internal.WorkbenchPage.busyOpenEditor(WorkbenchPage.java:2850) + at org.eclipse.ui.internal.WorkbenchPage.access$11(WorkbenchPage.java:2842) + at org.eclipse.ui.internal.WorkbenchPage$10.run(WorkbenchPage.java:2793) + at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70) + at org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:2789) + at org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:2773) + at org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:2764) + at org.eclipse.ui.ide.IDE.openEditor(IDE.java:651) + at org.eclipse.ui.ide.IDE.openEditor(IDE.java:610) + at org.eclipse.ui.ide.IDE.openEditor(IDE.java:1109) + at org.eclipse.ui.internal.views.markers.ExtendedMarkersView.openMarkerInEditor(ExtendedMarkersView.java:1719) + at org.eclipse.ui.internal.views.markers.ExtendedMarkersView.openSelectedMarkers(ExtendedMarkersView.java:1188) + at org.eclipse.ui.internal.views.markers.ExtendedMarkersView$5.open(ExtendedMarkersView.java:578) + at org.eclipse.ui.OpenAndLinkWithEditorHelper$InternalListener.open(OpenAndLinkWithEditorHelper.java:48) + at org.eclipse.jface.viewers.StructuredViewer$2.run(StructuredViewer.java:866) + at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) + at org.eclipse.ui.internal.JFaceUtil$1.run(JFaceUtil.java:49) + at org.eclipse.jface.util.SafeRunnable.run(SafeRunnable.java:175) + at org.eclipse.jface.viewers.StructuredViewer.fireOpen(StructuredViewer.java:864) + at org.eclipse.jface.viewers.StructuredViewer.handleOpen(StructuredViewer.java:1152) + at org.eclipse.jface.viewers.StructuredViewer$6.handleOpen(StructuredViewer.java:1256) + at org.eclipse.jface.util.OpenStrategy.fireOpenEvent(OpenStrategy.java:275) + at org.eclipse.jface.util.OpenStrategy.access$2(OpenStrategy.java:269) + at org.eclipse.jface.util.OpenStrategy$1.handleEvent(OpenStrategy.java:309) + at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) + at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1258) + at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:3588) + at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3209) + at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2696) + at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2660) + at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2494) + at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:674) + at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) + at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:667) + at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149) + at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:123) + at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110) + at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:344) + at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) + at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) + at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.lang.reflect.Method.invoke(Method.java:616) + at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:622) + at org.eclipse.equinox.launcher.Main.basicRun(Main.java:577) + at org.eclipse.equinox.launcher.Main.run(Main.java:1410) +Caused by: java.io.IOException: java.io.IOException: error=2, No such file or directory + at java.lang.UNIXProcess.(UNIXProcess.java:164) + at java.lang.ProcessImpl.start(ProcessImpl.java:81) + at java.lang.ProcessBuilder.start(ProcessBuilder.java:468) + ... 82 more + +!ENTRY org.eclipse.linuxtools.rpm.ui.editor 4 0 2011-11-12 23:40:05.548 +!MESSAGE Unexpected Exception +!STACK 0 +java.io.IOException: Cannot run program "rpm": java.io.IOException: error=2, No such file or directory + at java.lang.ProcessBuilder.start(ProcessBuilder.java:475) + at org.eclipse.linuxtools.rpm.core.utils.Utils.runCommandToInputStream(Utils.java:47) + at org.eclipse.linuxtools.rpm.core.utils.Utils.runCommandToString(Utils.java:109) + at org.eclipse.linuxtools.rpm.ui.editor.RpmPackageProposalsList.getRpmInfo(RpmPackageProposalsList.java:110) + at org.eclipse.linuxtools.rpm.ui.editor.RpmPackageProposalsList.getProposals(RpmPackageProposalsList.java:87) + at org.eclipse.linuxtools.rpm.ui.editor.Activator.getRpmPackageList(Activator.java:130) + at org.eclipse.linuxtools.rpm.ui.editor.SpecfileHover.getHoverInfo(SpecfileHover.java:86) + at org.eclipse.jface.text.TextViewerHoverManager$4.run(TextViewerHoverManager.java:168) +Caused by: java.io.IOException: java.io.IOException: error=2, No such file or directory + at java.lang.UNIXProcess.(UNIXProcess.java:164) + at java.lang.ProcessImpl.start(ProcessImpl.java:81) + at java.lang.ProcessBuilder.start(ProcessBuilder.java:468) + ... 7 more diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/arts/.markers.snap b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/arts/.markers.snap index 91d6c5415..5ed84375f 100644 Binary files a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/arts/.markers.snap and b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/arts/.markers.snap differ diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/arts/.syncinfo.snap b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/arts/.syncinfo.snap index 91d6c5415..5ed84375f 100644 Binary files a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/arts/.syncinfo.snap and b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/arts/.syncinfo.snap differ diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/libdbus-1-tqt-0/.markers.snap b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/libdbus-1-tqt-0/.markers.snap index 91d6c5415..5ed84375f 100644 Binary files a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/libdbus-1-tqt-0/.markers.snap and b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/libdbus-1-tqt-0/.markers.snap differ diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/libdbus-1-tqt-0/.syncinfo.snap b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/libdbus-1-tqt-0/.syncinfo.snap index 91d6c5415..5ed84375f 100644 Binary files a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/libdbus-1-tqt-0/.syncinfo.snap and b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/libdbus-1-tqt-0/.syncinfo.snap differ diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/libdbus-tqt-1-0/.markers.snap b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/libdbus-tqt-1-0/.markers.snap index 91d6c5415..5ed84375f 100644 Binary files a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/libdbus-tqt-1-0/.markers.snap and b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/libdbus-tqt-1-0/.markers.snap differ diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/libdbus-tqt-1-0/.syncinfo.snap b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/libdbus-tqt-1-0/.syncinfo.snap index 91d6c5415..5ed84375f 100644 Binary files a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/libdbus-tqt-1-0/.syncinfo.snap and b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/libdbus-tqt-1-0/.syncinfo.snap differ diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/libtqt4/.markers.snap b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/libtqt4/.markers.snap index 91d6c5415..5ed84375f 100644 Binary files a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/libtqt4/.markers.snap and b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/libtqt4/.markers.snap differ diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/libtqt4/.syncinfo.snap b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/libtqt4/.syncinfo.snap index 91d6c5415..5ed84375f 100644 Binary files a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/libtqt4/.syncinfo.snap and b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/libtqt4/.syncinfo.snap differ diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/qt3/.markers.snap b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/qt3/.markers.snap index cae804b58..f6f4f4f5b 100644 Binary files a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/qt3/.markers.snap and b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/qt3/.markers.snap differ diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/qt3/.syncinfo.snap b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/qt3/.syncinfo.snap index 91d6c5415..5ed84375f 100644 Binary files a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/qt3/.syncinfo.snap and b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/qt3/.syncinfo.snap differ diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tde-filesystem/.markers.snap b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tde-filesystem/.markers.snap index 91d6c5415..5ed84375f 100644 Binary files a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tde-filesystem/.markers.snap and b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tde-filesystem/.markers.snap differ diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tde-filesystem/.syncinfo.snap b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tde-filesystem/.syncinfo.snap index 91d6c5415..5ed84375f 100644 Binary files a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tde-filesystem/.syncinfo.snap and b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tde-filesystem/.syncinfo.snap differ diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdeaccessibility/.markers.snap b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdeaccessibility/.markers.snap index 91d6c5415..5ed84375f 100644 Binary files a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdeaccessibility/.markers.snap and b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdeaccessibility/.markers.snap differ diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdeaccessibility/.syncinfo.snap b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdeaccessibility/.syncinfo.snap index 91d6c5415..5ed84375f 100644 Binary files a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdeaccessibility/.syncinfo.snap and b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdeaccessibility/.syncinfo.snap differ diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdeaddons/.markers.snap b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdeaddons/.markers.snap index 91d6c5415..5ed84375f 100644 Binary files a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdeaddons/.markers.snap and b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdeaddons/.markers.snap differ diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdeaddons/.syncinfo.snap b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdeaddons/.syncinfo.snap index 91d6c5415..5ed84375f 100644 Binary files a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdeaddons/.syncinfo.snap and b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdeaddons/.syncinfo.snap differ diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdeartwork/.markers.snap b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdeartwork/.markers.snap index 91d6c5415..5ed84375f 100644 Binary files a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdeartwork/.markers.snap and b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdeartwork/.markers.snap differ diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdeartwork/.syncinfo.snap b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdeartwork/.syncinfo.snap index 91d6c5415..5ed84375f 100644 Binary files a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdeartwork/.syncinfo.snap and b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdeartwork/.syncinfo.snap differ diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdebase/.markers.snap b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdebase/.markers.snap index 2412002bf..1eb2ef99f 100644 Binary files a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdebase/.markers.snap and b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdebase/.markers.snap differ diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdebase/.syncinfo.snap b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdebase/.syncinfo.snap index 91d6c5415..5ed84375f 100644 Binary files a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdebase/.syncinfo.snap and b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdebase/.syncinfo.snap differ diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdebindings/.markers.snap b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdebindings/.markers.snap index 91d6c5415..5ed84375f 100644 Binary files a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdebindings/.markers.snap and b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdebindings/.markers.snap differ diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdebindings/.syncinfo.snap b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdebindings/.syncinfo.snap index 91d6c5415..5ed84375f 100644 Binary files a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdebindings/.syncinfo.snap and b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdebindings/.syncinfo.snap differ diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdedevelop/.markers.snap b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdedevelop/.markers.snap index 91d6c5415..5ed84375f 100644 Binary files a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdedevelop/.markers.snap and b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdedevelop/.markers.snap differ diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdedevelop/.syncinfo.snap b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdedevelop/.syncinfo.snap index 91d6c5415..5ed84375f 100644 Binary files a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdedevelop/.syncinfo.snap and b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdedevelop/.syncinfo.snap differ diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdeedu/.markers.snap b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdeedu/.markers.snap index 91d6c5415..5ed84375f 100644 Binary files a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdeedu/.markers.snap and b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdeedu/.markers.snap differ diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdeedu/.syncinfo.snap b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdeedu/.syncinfo.snap index 91d6c5415..5ed84375f 100644 Binary files a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdeedu/.syncinfo.snap and b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdeedu/.syncinfo.snap differ diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdegames/.markers.snap b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdegames/.markers.snap index 91d6c5415..5ed84375f 100644 Binary files a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdegames/.markers.snap and b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdegames/.markers.snap differ diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdegames/.syncinfo.snap b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdegames/.syncinfo.snap index 91d6c5415..5ed84375f 100644 Binary files a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdegames/.syncinfo.snap and b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdegames/.syncinfo.snap differ diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdegraphics/.markers.snap b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdegraphics/.markers.snap index 91d6c5415..5ed84375f 100644 Binary files a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdegraphics/.markers.snap and b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdegraphics/.markers.snap differ diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdegraphics/.syncinfo.snap b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdegraphics/.syncinfo.snap index 91d6c5415..5ed84375f 100644 Binary files a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdegraphics/.syncinfo.snap and b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdegraphics/.syncinfo.snap differ diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdelibs/.markers.snap b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdelibs/.markers.snap index 14d7f0aab..7683ac265 100644 Binary files a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdelibs/.markers.snap and b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdelibs/.markers.snap differ diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdelibs/.syncinfo.snap b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdelibs/.syncinfo.snap index 91d6c5415..5ed84375f 100644 Binary files a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdelibs/.syncinfo.snap and b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdelibs/.syncinfo.snap differ diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdemultimedia/.markers.snap b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdemultimedia/.markers.snap index 91d6c5415..5ed84375f 100644 Binary files a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdemultimedia/.markers.snap and b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdemultimedia/.markers.snap differ diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdemultimedia/.syncinfo.snap b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdemultimedia/.syncinfo.snap index 91d6c5415..5ed84375f 100644 Binary files a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdemultimedia/.syncinfo.snap and b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdemultimedia/.syncinfo.snap differ diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdenetwork/.markers.snap b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdenetwork/.markers.snap index 91d6c5415..5ed84375f 100644 Binary files a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdenetwork/.markers.snap and b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdenetwork/.markers.snap differ diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdenetwork/.syncinfo.snap b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdenetwork/.syncinfo.snap index 91d6c5415..5ed84375f 100644 Binary files a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdenetwork/.syncinfo.snap and b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdenetwork/.syncinfo.snap differ diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdepim/.markers.snap b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdepim/.markers.snap index 91d6c5415..5ed84375f 100644 Binary files a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdepim/.markers.snap and b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdepim/.markers.snap differ diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdepim/.syncinfo.snap b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdepim/.syncinfo.snap index 91d6c5415..5ed84375f 100644 Binary files a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdepim/.syncinfo.snap and b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdepim/.syncinfo.snap differ diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdesdk/.markers.snap b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdesdk/.markers.snap index 91d6c5415..5ed84375f 100644 Binary files a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdesdk/.markers.snap and b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdesdk/.markers.snap differ diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdesdk/.syncinfo.snap b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdesdk/.syncinfo.snap index 91d6c5415..5ed84375f 100644 Binary files a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdesdk/.syncinfo.snap and b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdesdk/.syncinfo.snap differ diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdetoys/.markers.snap b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdetoys/.markers.snap index 91d6c5415..5ed84375f 100644 Binary files a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdetoys/.markers.snap and b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdetoys/.markers.snap differ diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdetoys/.syncinfo.snap b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdetoys/.syncinfo.snap index 91d6c5415..5ed84375f 100644 Binary files a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdetoys/.syncinfo.snap and b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdetoys/.syncinfo.snap differ diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdeutils/.markers.snap b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdeutils/.markers.snap index 91d6c5415..5ed84375f 100644 Binary files a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdeutils/.markers.snap and b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdeutils/.markers.snap differ diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdeutils/.syncinfo.snap b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdeutils/.syncinfo.snap index 91d6c5415..5ed84375f 100644 Binary files a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdeutils/.syncinfo.snap and b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdeutils/.syncinfo.snap differ diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdewebdev/.markers.snap b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdewebdev/.markers.snap index 91d6c5415..5ed84375f 100644 Binary files a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdewebdev/.markers.snap and b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdewebdev/.markers.snap differ diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdewebdev/.syncinfo.snap b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdewebdev/.syncinfo.snap index 91d6c5415..5ed84375f 100644 Binary files a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdewebdev/.syncinfo.snap and b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.projects/tdewebdev/.syncinfo.snap differ diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.root/.markers.snap b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.root/.markers.snap index 91d6c5415..5ed84375f 100644 Binary files a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.root/.markers.snap and b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.root/.markers.snap differ diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.safetable/org.eclipse.core.resources b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.safetable/org.eclipse.core.resources index b195d5b15..0d4b03a54 100644 Binary files a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.safetable/org.eclipse.core.resources and b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.safetable/org.eclipse.core.resources differ diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.snap b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.snap index ba856116d..1e3fb23f4 100644 Binary files a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.snap and b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.snap differ diff --git a/opensuse/core/qt3/0001-dnd_optimization.patch b/opensuse/core/qt3/0001-dnd_optimization.patch deleted file mode 100644 index a464765cd..000000000 --- a/opensuse/core/qt3/0001-dnd_optimization.patch +++ /dev/null @@ -1,180 +0,0 @@ ---- src/kernel/qdnd_x11.cpp -+++ src/kernel/qdnd_x11.cpp -@@ -49,13 +49,15 @@ - #include "qdragobject.h" - #include "qobjectlist.h" - #include "qcursor.h" -+#include "qbitmap.h" -+#include "qpainter.h" - - #include "qt_x11_p.h" - - // conflict resolution - --// unused, may be used again later: const int XKeyPress = KeyPress; --// unused, may be used again later: const int XKeyRelease = KeyRelease; -+const int XKeyPress = KeyPress; -+const int XKeyRelease = KeyRelease; - #undef KeyPress - #undef KeyRelease - -@@ -252,20 +254,47 @@ - public: - QShapedPixmapWidget(int screen = -1) : - QWidget(QApplication::desktop()->screen( screen ), -- 0, WStyle_Customize | WStyle_Tool | WStyle_NoBorder | WX11BypassWM ) -+ 0, WStyle_Customize | WStyle_Tool | WStyle_NoBorder | WX11BypassWM ), oldpmser( 0 ), oldbmser( 0 ) - { - } - -- void setPixmap(QPixmap pm) -+ void setPixmap(QPixmap pm, QPoint hot) - { -- if ( pm.mask() ) { -+ int bmser = pm.mask() ? pm.mask()->serialNumber() : 0; -+ if( oldpmser == pm.serialNumber() && oldbmser == bmser -+ && oldhot == hot ) -+ return; -+ oldpmser = pm.serialNumber(); -+ oldbmser = bmser; -+ oldhot = hot; -+ bool hotspot_in = !(hot.x() < 0 || hot.y() < 0 || hot.x() >= pm.width() || hot.y() >= pm.height()); -+// if the pixmap has hotspot in its area, make a "hole" in it at that position -+// this will allow XTranslateCoordinates() to find directly the window below the cursor instead -+// of finding this pixmap, and therefore there won't be needed any (slow) search for the window -+// using findRealWindow() -+ if( hotspot_in ) { -+ QBitmap mask = pm.mask() ? *pm.mask() : QBitmap( pm.width(), pm.height()); -+ if( !pm.mask()) -+ mask.fill( Qt::color1 ); -+ QPainter p( &mask ); -+ p.setPen( Qt::color0 ); -+ p.drawPoint( hot.x(), hot.y()); -+ p.end(); -+ pm.setMask( mask ); -+ setMask( mask ); -+ } else if ( pm.mask() ) { - setMask( *pm.mask() ); - } else { - clearMask(); - } - resize(pm.width(),pm.height()); - setErasePixmap(pm); -+ erase(); - } -+private: -+ int oldpmser; -+ int oldbmser; -+ QPoint oldhot; - }; - - static QShapedPixmapWidget * qt_xdnd_deco = 0; -@@ -862,6 +891,45 @@ - move( QCursor::pos() ); - } - -+static bool qt_xdnd_was_move = false; -+static bool qt_xdnd_found = false; -+// check whole incoming X queue for move events -+// checking whole queue is done by always returning False in the predicate -+// if there's another move event in the queue, and there's not a mouse button -+// or keyboard or ClientMessage event before it, the current move event -+// may be safely discarded -+// this helps avoiding being overloaded by being flooded from many events -+// from the XServer -+static -+Bool qt_xdnd_predicate( Display*, XEvent* ev, XPointer ) -+{ -+ if( qt_xdnd_found ) -+ return False; -+ if( ev->type == MotionNotify ) -+ { -+ qt_xdnd_was_move = true; -+ qt_xdnd_found = true; -+ } -+ if( ev->type == ButtonPress || ev->type == ButtonRelease -+ || ev->type == XKeyPress || ev->type == XKeyRelease -+ || ev->type == ClientMessage ) -+ { -+ qt_xdnd_was_move = false; -+ qt_xdnd_found = true; -+ } -+ return False; -+} -+ -+static -+bool qt_xdnd_another_movement() -+{ -+ qt_xdnd_was_move = false; -+ qt_xdnd_found = false; -+ XEvent dummy; -+ XCheckIfEvent( qt_xdisplay(), &dummy, qt_xdnd_predicate, NULL ); -+ return qt_xdnd_was_move; -+} -+ - bool QDragManager::eventFilter( QObject * o, QEvent * e) - { - if ( beingCancelled ) { -@@ -884,8 +952,10 @@ - - if ( e->type() == QEvent::MouseMove ) { - QMouseEvent* me = (QMouseEvent *)e; -- updateMode(me->stateAfter()); -- move( me->globalPos() ); -+ if( !qt_xdnd_another_movement()) { -+ updateMode(me->stateAfter()); -+ move( me->globalPos() ); -+ } - return TRUE; - } else if ( e->type() == QEvent::MouseButtonRelease ) { - qApp->removeEventFilter( this ); -@@ -1126,7 +1196,7 @@ - qt_xdnd_deco->grabMouse(); - } - } -- updatePixmap(); -+ updatePixmap( globalPos ); - - if ( qt_xdnd_source_sameanswer.contains( globalPos ) && - qt_xdnd_source_sameanswer.isValid() ) { -@@ -1717,7 +1787,7 @@ - // qt_xdnd_source_object persists until we get an xdnd_finish message - } - --void QDragManager::updatePixmap() -+void QDragManager::updatePixmap( const QPoint& cursorPos ) - { - if ( qt_xdnd_deco ) { - QPixmap pm; -@@ -1732,9 +1802,8 @@ - defaultPm = new QPixmap(default_pm); - pm = *defaultPm; - } -- qt_xdnd_deco->setPixmap(pm); -- qt_xdnd_deco->move(QCursor::pos()-pm_hot); -- qt_xdnd_deco->repaint(FALSE); -+ qt_xdnd_deco->setPixmap(pm, pm_hot); -+ qt_xdnd_deco->move(cursorPos-pm_hot); - //if ( willDrop ) { - qt_xdnd_deco->show(); - //} else { -@@ -1743,4 +1812,9 @@ - } - } - -+void QDragManager::updatePixmap() -+{ -+ updatePixmap( QCursor::pos()); -+} -+ - #endif // QT_NO_DRAGANDDROP ---- src/kernel/qdragobject.h -+++ src/kernel/qdragobject.h -@@ -245,6 +245,7 @@ - void move( const QPoint & ); - void drop(); - void updatePixmap(); -+ void updatePixmap( const QPoint& cursorPos ); - - private: - QDragObject * object; diff --git a/opensuse/core/qt3/0002-dnd_active_window_fix.patch b/opensuse/core/qt3/0002-dnd_active_window_fix.patch deleted file mode 100644 index 417c313e1..000000000 --- a/opensuse/core/qt3/0002-dnd_active_window_fix.patch +++ /dev/null @@ -1,162 +0,0 @@ ---- src/kernel/qapplication_x11.cpp -+++ src/kernel/qapplication_x11.cpp -@@ -3972,7 +3972,7 @@ - // Keyboard event translation - // - --static int translateButtonState( int s ) -+int qt_x11_translateButtonState( int s ) - { - int bst = 0; - if ( s & Button1Mask ) -@@ -4038,7 +4038,7 @@ - pos.ry() = lastMotion.y; - globalPos.rx() = lastMotion.x_root; - globalPos.ry() = lastMotion.y_root; -- state = translateButtonState( lastMotion.state ); -+ state = qt_x11_translateButtonState( lastMotion.state ); - if ( qt_button_down && (state & (LeftButton | - MidButton | - RightButton ) ) == 0 ) -@@ -4062,7 +4062,7 @@ - pos.ry() = xevent->xcrossing.y; - globalPos.rx() = xevent->xcrossing.x_root; - globalPos.ry() = xevent->xcrossing.y_root; -- state = translateButtonState( xevent->xcrossing.state ); -+ state = qt_x11_translateButtonState( xevent->xcrossing.state ); - if ( qt_button_down && (state & (LeftButton | - MidButton | - RightButton ) ) == 0 ) -@@ -4074,7 +4074,7 @@ - pos.ry() = event->xbutton.y; - globalPos.rx() = event->xbutton.x_root; - globalPos.ry() = event->xbutton.y_root; -- state = translateButtonState( event->xbutton.state ); -+ state = qt_x11_translateButtonState( event->xbutton.state ); - switch ( event->xbutton.button ) { - case Button1: button = LeftButton; break; - case Button2: button = MidButton; break; -@@ -5020,7 +5020,7 @@ - XKeyEvent xkeyevent = event->xkey; - - // save the modifier state, we will use the keystate uint later by passing -- // it to translateButtonState -+ // it to qt_x11_translateButtonState - uint keystate = event->xkey.state; - // remove the modifiers where mode_switch exists... HPUX machines seem - // to have alt *AND* mode_switch both in Mod1Mask, which causes -@@ -5134,7 +5134,7 @@ - } - #endif // !QT_NO_XIM - -- state = translateButtonState( keystate ); -+ state = qt_x11_translateButtonState( keystate ); - - static int directionKeyEvent = 0; - if ( qt_use_rtl_extensions && type == QEvent::KeyRelease ) { ---- src/kernel/qdnd_x11.cpp -+++ src/kernel/qdnd_x11.cpp -@@ -115,6 +115,8 @@ - Atom qt_xdnd_type_list; - const int qt_xdnd_version = 4; - -+extern int qt_x11_translateButtonState( int s ); -+ - // Actions - // - // The Xdnd spec allows for user-defined actions. This could be implemented -@@ -199,6 +201,8 @@ - static int qt_xdnd_current_screen = -1; - // state of dragging... true if dragging, false if not - bool qt_xdnd_dragging = FALSE; -+// need to check state of keyboard modifiers -+static bool need_modifiers_check = FALSE; - - // dict of payload data, sorted by type atom - static QIntDict * qt_xdnd_target_data = 0; -@@ -887,8 +891,20 @@ - - void QDragManager::timerEvent( QTimerEvent* e ) - { -- if ( e->timerId() == heartbeat && qt_xdnd_source_sameanswer.isNull() ) -- move( QCursor::pos() ); -+ if ( e->timerId() == heartbeat ) { -+ if( need_modifiers_check ) { -+ Window root, child; -+ int root_x, root_y, win_x, win_y; -+ unsigned int mask; -+ XQueryPointer( qt_xdisplay(), qt_xrootwin( qt_xdnd_current_screen ), -+ &root, &child, &root_x, &root_y, &win_x, &win_y, &mask ); -+ if( updateMode( (ButtonState)qt_x11_translateButtonState( mask ))) -+ qt_xdnd_source_sameanswer = QRect(); // force move -+ } -+ need_modifiers_check = TRUE; -+ if( qt_xdnd_source_sameanswer.isNull() ) -+ move( QCursor::pos() ); -+ } - } - - static bool qt_xdnd_was_move = false; -@@ -956,6 +972,7 @@ - updateMode(me->stateAfter()); - move( me->globalPos() ); - } -+ need_modifiers_check = FALSE; - return TRUE; - } else if ( e->type() == QEvent::MouseButtonRelease ) { - qApp->removeEventFilter( this ); -@@ -994,9 +1011,11 @@ - beingCancelled = FALSE; - qApp->exit_loop(); - } else { -- updateMode(ke->stateAfter()); -- qt_xdnd_source_sameanswer = QRect(); // force move -- move( QCursor::pos() ); -+ if( updateMode(ke->stateAfter())) { -+ qt_xdnd_source_sameanswer = QRect(); // force move -+ move( QCursor::pos() ); -+ } -+ need_modifiers_check = FALSE; - } - return TRUE; // Eat all key events - } -@@ -1023,10 +1042,10 @@ - - - static Qt::ButtonState oldstate; --void QDragManager::updateMode( ButtonState newstate ) -+bool QDragManager::updateMode( ButtonState newstate ) - { - if ( newstate == oldstate ) -- return; -+ return false; - const int both = ShiftButton|ControlButton; - if ( (newstate & both) == both ) { - global_requested_action = QDropEvent::Link; -@@ -1050,6 +1069,7 @@ - } - } - oldstate = newstate; -+ return true; - } - - -@@ -1754,6 +1774,7 @@ - qt_xdnd_source_sameanswer = QRect(); - move(QCursor::pos()); - heartbeat = startTimer(200); -+ need_modifiers_check = FALSE; - - #ifndef QT_NO_CURSOR - qApp->setOverrideCursor( arrowCursor ); ---- src/kernel/qdragobject.h -+++ src/kernel/qdragobject.h -@@ -249,7 +249,7 @@ - - private: - QDragObject * object; -- void updateMode( ButtonState newstate ); -+ bool updateMode( ButtonState newstate ); - void updateCursor(); - #if defined(Q_WS_X11) - void createCursors(); diff --git a/opensuse/core/qt3/0007-qpixmap_constants.patch b/opensuse/core/qt3/0007-qpixmap_constants.patch deleted file mode 100644 index 65f9cd64b..000000000 --- a/opensuse/core/qt3/0007-qpixmap_constants.patch +++ /dev/null @@ -1,384 +0,0 @@ -qt-bugs@ issue : 11790 (part of) -applied: no -author: Lubos Lunak - -See 0005-qpixmap_mitshm.patch for details. - - ---- src/kernel/qpixmap_x11.cpp -+++ src/kernel/qpixmap_x11.cpp -@@ -1123,9 +1123,6 @@ bool QPixmap::convertFromImage( const QI - return FALSE; - int bppc = xi->bits_per_pixel; - -- if ( bppc > 8 && xi->byte_order == LSBFirst ) -- bppc++; -- - bool contig_bits = n_bits(red_mask) == rbits && - n_bits(green_mask) == gbits && - n_bits(blue_mask) == bbits; -@@ -1174,32 +1171,70 @@ bool QPixmap::convertFromImage( const QI - } - init=TRUE; - } -+ -+ enum { BPP8, -+ BPP16_8_3_M3, BPP16_7_2_M3, BPP16_MSB, BPP16_LSB, -+ BPP24_MSB, BPP24_LSB, -+ BPP32_16_8_0, BPP32_MSB, BPP32_LSB -+ } mode = BPP8; - -- for ( uint y=0; ybytes_per_line*y; -- QRgb* p = (QRgb *)src; -+ if ( bppc > 8 && xi->byte_order == LSBFirst ) -+ bppc++; - --#define GET_RGB \ -- int r = qRed ( *p ); \ -- int g = qGreen( *p ); \ -- int b = qBlue ( *p++ ); \ -- r = red_shift > 0 \ -- ? r << red_shift : r >> -red_shift; \ -- g = green_shift > 0 \ -- ? g << green_shift : g >> -green_shift; \ -- b = blue_shift > 0 \ -- ? b << blue_shift : b >> -blue_shift; -+ int wordsize; -+ bool bigendian; -+ qSysInfo( &wordsize, &bigendian ); -+ bool same_msb_lsb = ( xi->byte_order == MSBFirst ) == ( bigendian ); -+ -+ if( bppc == 8 ) // 8 bit -+ mode = BPP8; -+ else if( bppc == 16 || bppc == 17 ) { // 16 bit MSB/LSB -+ if( red_shift == 8 && green_shift == 3 && blue_shift == -3 -+ && !d8 && same_msb_lsb ) -+ mode = BPP16_8_3_M3; -+ else if( red_shift == 7 && green_shift == 2 && blue_shift == -3 -+ && !d8 && same_msb_lsb ) -+ mode = BPP16_7_2_M3; -+ else -+ mode = bppc == 17 ? BPP16_LSB : BPP16_MSB; -+ } else if( bppc == 24 || bppc == 25 ) { // 24 bit MSB/LSB -+ mode = bppc == 25 ? BPP24_LSB : BPP24_MSB; -+ } else if( bppc == 32 || bppc == 33 ) { // 32 bit MSB/LSB -+ if( red_shift == 16 && green_shift == 8 && blue_shift == 0 -+ && !d8 && same_msb_lsb ) -+ mode = BPP32_16_8_0; -+ else -+ mode = bppc == 33 ? BPP32_LSB : BPP32_MSB; -+ } else -+ qFatal("Logic error 3"); - - #define GET_PIXEL \ - int pixel; \ - if ( d8 ) pixel = pix[*src++]; \ - else { \ -- GET_RGB \ -- pixel = (b & blue_mask)|(g & green_mask) | (r & red_mask) \ -+ int r = qRed ( *p ); \ -+ int g = qGreen( *p ); \ -+ int b = qBlue ( *p++ ); \ -+ r = red_shift > 0 \ -+ ? r << red_shift : r >> -red_shift; \ -+ g = green_shift > 0 \ -+ ? g << green_shift : g >> -green_shift; \ -+ b = blue_shift > 0 \ -+ ? b << blue_shift : b >> -blue_shift; \ -+ pixel = (r & red_mask)|(g & green_mask) | (b & blue_mask) \ - | ~(blue_mask | green_mask | red_mask); \ - } - -+// optimized case - no d8 case, shift only once instead of twice, mask only once instead of twice, -+// use direct values instead of variables, and use only one statement -+// (*p >> 16), (*p >> 8 ) and (*p) are qRed(),qGreen() and qBlue() without masking -+// shifts have to be passed including the shift operator (e.g. '>>3'), because of the direction -+#define GET_PIXEL_OPT(red_shift,green_shift,blue_shift,red_mask,green_mask,blue_mask) \ -+ int pixel = ((( *p >> 16 ) red_shift ) & red_mask ) \ -+ | ((( *p >> 8 ) green_shift ) & green_mask ) \ -+ | ((( *p ) blue_shift ) & blue_mask ); \ -+ ++p; -+ - #define GET_PIXEL_DITHER_TC \ - int r = qRed ( *p ); \ - int g = qGreen( *p ); \ -@@ -1220,91 +1255,177 @@ bool QPixmap::convertFromImage( const QI - ? g << green_shift : g >> -green_shift; \ - b = blue_shift > 0 \ - ? b << blue_shift : b >> -blue_shift; \ -- int pixel = (b & blue_mask)|(g & green_mask) | (r & red_mask); -+ int pixel = (r & red_mask)|(g & green_mask) | (b & blue_mask); - -- if ( dither_tc ) { -- uint x; -- switch ( bppc ) { -- case 16: // 16 bit MSB -- for ( x=0; x> 8); -- *dst++ = pixel; -- } -+// again, optimized case -+// can't be optimized that much :( -+#define GET_PIXEL_DITHER_TC_OPT(red_shift,green_shift,blue_shift,red_mask,green_mask,blue_mask, \ -+ rbits,gbits,bbits) \ -+ const int thres = D[x%16][y%16]; \ -+ int r = qRed ( *p ); \ -+ if ( r <= (255-(1<<(8-rbits))) && ((r< thres) \ -+ r += (1<<(8-rbits)); \ -+ int g = qGreen( *p ); \ -+ if ( g <= (255-(1<<(8-gbits))) && ((g< thres) \ -+ g += (1<<(8-gbits)); \ -+ int b = qBlue ( *p++ ); \ -+ if ( b <= (255-(1<<(8-bbits))) && ((b< thres) \ -+ b += (1<<(8-bbits)); \ -+ int pixel = (( r red_shift ) & red_mask ) \ -+ | (( g green_shift ) & green_mask ) \ -+ | (( b blue_shift ) & blue_mask ); -+ -+#define CYCLE(body) \ -+ for ( uint y=0; ybytes_per_line*y; \ -+ QRgb* p = (QRgb *)src; \ -+ body \ -+ } -+ -+ if ( dither_tc ) { -+ switch ( mode ) { -+ case BPP16_8_3_M3: -+ CYCLE( -+ Q_INT16* dst16 = (Q_INT16*)dst; -+ for ( uint x=0; x>3,0xf800,0x7e0,0x1f,5,6,5) -+ *dst16++ = pixel; -+ } -+ ) - break; -- case 17: // 16 bit LSB -- for ( x=0; x> 8; -- } -+ case BPP16_7_2_M3: -+ CYCLE( -+ Q_INT16* dst16 = (Q_INT16*)dst; -+ for ( uint x=0; x>3,0x7c00,0x3e0,0x1f,5,5,5) -+ *dst16++ = pixel; -+ } -+ ) -+ break; -+ case BPP16_MSB: // 16 bit MSB -+ CYCLE( -+ for ( uint x=0; x> 8); -+ *dst++ = pixel; -+ } -+ ) -+ break; -+ case BPP16_LSB: // 16 bit LSB -+ CYCLE( -+ for ( uint x=0; x> 8; -+ } -+ ) - break; - default: - qFatal("Logic error"); - } -- } else { -- uint x; -- switch ( bppc ) { -- case 8: // 8 bit -- for ( x=0; x> 8); -- *dst++ = pixel; -- } -+ case BPP16_8_3_M3: -+ CYCLE( -+ Q_INT16* dst16 = (Q_INT16*)dst; -+ for ( uint x=0; x>3,0xf800,0x7e0,0x1f) -+ *dst16++ = pixel; -+ } -+ ) - break; -- case 17: // 16 bit LSB -- for ( x=0; x> 8; -- } -+ case BPP16_7_2_M3: -+ CYCLE( -+ Q_INT16* dst16 = (Q_INT16*)dst; -+ for ( uint x=0; x>3,0x7c00,0x3e0,0x1f) -+ *dst16++ = pixel; -+ } -+ ) - break; -- case 24: // 24 bit MSB -- for ( x=0; x> 16; -- *dst++ = pixel >> 8; -- *dst++ = pixel; -- } -+ case BPP16_MSB: // 16 bit MSB -+ CYCLE( -+ for ( uint x=0; x> 8); -+ *dst++ = pixel; -+ } -+ ) - break; -- case 25: // 24 bit LSB -- for ( x=0; x> 8; -- *dst++ = pixel >> 16; -- } -+ case BPP16_LSB: // 16 bit LSB -+ CYCLE( -+ for ( uint x=0; x> 8; -+ } -+ ) - break; -- case 32: // 32 bit MSB -- for ( x=0; x> 24; -- *dst++ = pixel >> 16; -- *dst++ = pixel >> 8; -- *dst++ = pixel; -- } -+ case BPP24_MSB: // 24 bit MSB -+ CYCLE( -+ for ( uint x=0; x> 16; -+ *dst++ = pixel >> 8; -+ *dst++ = pixel; -+ } -+ ) - break; -- case 33: // 32 bit LSB -- for ( x=0; x> 8; -- *dst++ = pixel >> 16; -- *dst++ = pixel >> 24; -- } -+ case BPP24_LSB: // 24 bit LSB -+ CYCLE( -+ for ( uint x=0; x> 8; -+ *dst++ = pixel >> 16; -+ } -+ ) - break; -- default: -- qFatal("Logic error 2"); -- } -- } -- } -- xi->data = (char *)newbits; -+ case BPP32_16_8_0: -+ CYCLE( -+ memcpy( dst, p, w * 4 ); -+ ) -+ break; -+ case BPP32_MSB: // 32 bit MSB -+ CYCLE( -+ for ( uint x=0; x> 24; -+ *dst++ = pixel >> 16; -+ *dst++ = pixel >> 8; -+ *dst++ = pixel; -+ } -+ ) -+ break; -+ case BPP32_LSB: // 32 bit LSB -+ CYCLE( -+ for ( uint x=0; x> 8; -+ *dst++ = pixel >> 16; -+ *dst++ = pixel >> 24; -+ } -+ ) -+ break; -+ default: -+ qFatal("Logic error 2"); -+ } -+ } -+ xi->data = (char *)newbits; - } - - if ( d == 8 && !trucol ) { // 8 bit pixmap -@@ -1554,15 +1675,24 @@ bool QPixmap::convertFromImage( const QI - - if (image.depth() == 32) { - const int *iptr = (const int *) image.bits(); -- int max = w * h; -- while (max--) -- *aptr++ = *iptr++ >> 24; // squirt -+ if( axi->bytes_per_line == (int)w ) { -+ int max = w * h; -+ while (max--) -+ *aptr++ = *iptr++ >> 24; // squirt -+ } else { -+ for (uint i = 0; i < h; ++i ) { -+ for (uint j = 0; j < w; ++j ) -+ *aptr++ = *iptr++ >> 24; // squirt -+ aptr += ( axi->bytes_per_line - w ); -+ } -+ } - } else if (image.depth() == 8) { - const QRgb * const rgb = image.colorTable(); - for (uint y = 0; y < h; ++y) { - const uchar *iptr = image.scanLine(y); - for (uint x = 0; x < w; ++x) - *aptr++ = qAlpha(rgb[*iptr++]); -+ aptr += ( axi->bytes_per_line - w ); - } - } - diff --git a/opensuse/core/qt3/0038-dragobject-dont-prefer-unknown.patch b/opensuse/core/qt3/0038-dragobject-dont-prefer-unknown.patch deleted file mode 100644 index d9a7275e9..000000000 --- a/opensuse/core/qt3/0038-dragobject-dont-prefer-unknown.patch +++ /dev/null @@ -1,19 +0,0 @@ ---- src/kernel/qdragobject.cpp -+++ src/kernel/qdragobject.cpp -@@ -893,6 +893,16 @@ - { - if(!e) - return FALSE; -+ -+ // when subtype is not specified, try text/plain first, otherwise this may read -+ // things like text/x-moz-url even though better targets are available -+ if( subtype.isNull()) { -+ QCString subtmp = "plain"; -+ if( decode( e, str, subtmp )) { -+ subtype = subtmp; -+ return true; -+ } -+ } - - if ( e->cacheType == QMimeSource::Text ) { - str = *e->cache.txt.str; diff --git a/opensuse/core/qt3/0047-fix-kmenu-width.diff b/opensuse/core/qt3/0047-fix-kmenu-width.diff deleted file mode 100644 index 398ca0cc4..000000000 --- a/opensuse/core/qt3/0047-fix-kmenu-width.diff +++ /dev/null @@ -1,23 +0,0 @@ -qt-bugs@ issue: N46882 -bugs.kde.org number: 77545 -applied: no -author: Stephan Binner - -Fix wrong K menu width for the case of enabled side pixmap and a menu title -(like "Recently Used Applications") being longer than every other entry. - -Solution: Respect PanelKMenu::setMaximumSize() as up to Qt 3.2.3 - -Index: src/widgets/qpopupmenu.cpp -================================================================================ ---- src/widgets/qpopupmenu.cpp -+++ src/widgets/qpopupmenu.cpp -@@ -2530,7 +2530,7 @@ - constPolish(); - QPopupMenu* that = (QPopupMenu*) this; - //We do not need a resize here, just the sizeHint.. -- return that->updateSize(FALSE, FALSE).expandedTo( QApplication::globalStrut() ); -+ return that->updateSize(FALSE).expandedTo( QApplication::globalStrut() ); - } - - diff --git a/opensuse/core/qt3/_service b/opensuse/core/qt3/_service index 96dad1687..538a11b38 100644 --- a/opensuse/core/qt3/_service +++ b/opensuse/core/qt3/_service @@ -1,3 +1,3 @@ - yesyesyes + yes \ No newline at end of file diff --git a/opensuse/core/qt3/qt-x11-free-3.3.8b.tar.bz2 b/opensuse/core/qt3/qt-x11-free-3.3.8b.tar.bz2 deleted file mode 100644 index 44e17d392..000000000 Binary files a/opensuse/core/qt3/qt-x11-free-3.3.8b.tar.bz2 and /dev/null differ diff --git a/opensuse/core/qt3/qt-x11-immodule-unified-qt3.3.8-20060318.diff b/opensuse/core/qt3/qt-x11-immodule-unified-qt3.3.8-20060318.diff deleted file mode 100644 index c1ac18de3..000000000 --- a/opensuse/core/qt3/qt-x11-immodule-unified-qt3.3.8-20060318.diff +++ /dev/null @@ -1,16169 +0,0 @@ ---- ChangeLog.immodule -+++ ChangeLog.immodule -@@ -0,0 +1,2027 @@ -+2004-09-10 YamaKen -+ -+ * changes.immodule -+ - Describe a bugfix -+ -+2004-09-10 YamaKen -+ -+ * src/inputmethod/qinputcontextinterface_p.h -+ - Update UUID of QInputContextFactory in accordance with API change -+ of QInputContext to avoid loading old invalid plugins -+ -+2004-09-10 YamaKen -+ -+ * README.immodule -+ - Add 'About this release' section -+ - Update version information -+ - Update to follow the change of configure options -+ - Modify some English expressions -+ -+ * changes.immodule -+ - Move release information to README.immodule -+ - Add differences from previous release -+ - Add description about incremental change indication -+ -+ * ChangeLog.immodule -+ - Update -+ -+2004-09-09 YamaKen -+ -+ * src/kernel/qapplication.cpp -+ - (removePostedEvents): -+ * Fix infinite loop condition -+ * delete receiver->postedEvents if the list has been empty -+ -+2004-09-09 YamaKen -+ -+ * This commit backports some code fragments from Qt4 branch to make -+ input method plugins source compatible with Qt4. -+ -+ * src/kernel/qinputcontext.cpp -+ - (QInputContext): Add 'parent' arg -+ -+ * src/kernel/qinputcontext.h -+ - Exclude qptrlist.h when compile with Qt4 -+ - (struct QInputContextMenu): Exclude member variables when compile -+ with Qt4 -+ - (QInputContext): Add 'parent' arg -+ - (addActionsTo): New function for Qt4 -+ -+2004-09-08 YamaKen -+ -+ * This commit renames input method module from 'input' to 'inputmehod' -+ because the name 'input' is too generic to indicate its function -+ -+ * configure -+ - Replace configuration options '-im' and '-im-ext' with -+ '-inputmethod' and '-inputmethod-ext' to be consistent with the -+ name of input method module subdirectory 'inputmethod' -+ - Rename the module name 'input' with 'inputmethod' -+ -+ * src/qt.pro -+ - Rename the module name 'input' with 'inputmethod' -+ - Rename some variable names inaccordance with the renaming of the -+ module -+ - Replace 'qt_input.pri' with 'qt_inputmethod.pri' in accordance -+ with the renaming of the file -+ -+ * src/inputmethod/qt_input.pri -+ - Rename to qt_inputmethod.pri -+ * src/inputmethod/qt_input.pri -+ - Renamed from qt_input.pri -+ - Replace module names -+ - Rename some variable names inaccordance with the renaming of the -+ module -+ -+2004-09-08 YamaKen -+ -+ * Rename input module subdirectory from "input" to "inputmethod" -+ -+2004-09-08 YamaKen -+ -+ * This commit contains following issues -+ - An API change. Return type of QInputContext::identifierName and -+ QInputContext::language has been changed from QCString which is -+ deprecated in Qt4 to QString to make plugins source compatible -+ with Qt4. -+ - Other backports from Qt4 branch -+ - Fix event receiving order inversion between QKeyEvent and -+ QIMEvent. The code is implemented based on Cougar's and -+ Kazuki's. Thank you the efforts. See following discussion for -+ further information. -+ http://freedesktop.org/pipermail/immodule-qt/2004-September/000447.html -+ http://freedesktop.org/pipermail/immodule-qt/2004-September/000497.html -+ -+ * src/kernel/qinputcontext.h -+ - (identifierName, language): Change return type from QCString to QString -+ - (addMenusTo): Make Qt3 specific -+ * src/kernel/qinputcontext.cpp -+ - (identifierName): -+ * Change return type from QCString to QString -+ * Modify the function description comment -+ - (language): Change return type from QCString to QString -+ -+ * src/kernel/qwidget.cpp -+ - (clearFocus): Enclose immodule specific code by #if -+ defined(Q_WS_X11) -+ -+ * src/kernel/qapplication.h -+ - Add 'class QIMEvent' declaration -+ - (removePostedEvents): New overriding function -+ * src/kernel/qapplication_x11.cpp -+ - Remove redundant 'class QInputContext' declaration -+ - (postIMEvent): Fix the event receiving order inversion problem -+ - (x11_apply_settings): Replace QString::find() which is deprecated -+ in Qt4 with QString::startsWith() -+ - (postEvent): Fix invalid QIMEvent compression that ignores IMStart -+ boundary -+ - (removePostedEvents): Original version of the function. Replace -+ the implementation with 2-args version. The behavior is not -+ changed -+ - (removePostedEvents): New overriding function. This function only -+ removes events that has specified event type. The implementation -+ is copied from original version of the function and modified to -+ accept event_type. This function is required by postIMEvent() -+ - (setActiveWindow): Enclose immodule specific code by #if -+ defined(Q_WS_X11) -+ -+ * src/input/qinputcontextinterface_p.h -+ - Modify a coding style to follow Trolltech's one for Qt3 -+ -+ * src/input/qinputcontextplugin.h -+ - Fix typos in comment -+ * src/input/qinputcontextplugin.cpp -+ - (keys, QInputContextPlugin, ~QInputContextPlugin): Modify the -+ function description comment -+ -+ * src/input/qinputcontextfactory.h -+ - Remove #include "qinputcontext.h" to reduce compilation dependency -+ - Add 'class QWidget' declaration -+ - Remove inappropriate #ifndef QT_NO_STRINGLIST. QStringList is now -+ required feature for immodule. See also changes of qfeatures.h -+ * src/input/qinputcontextfactory.cpp -+ - Add #include "qinputcontext.h" -+ - Remove unnecessary #include "qpopupmenu.h" -+ - Remove inappropriate #ifndef QT_NO_STRINGLIST. QStringList is now -+ required feature for immodule. See also changes of qfeatures.h -+ -+ * src/tools/qfeatures.h -+ - Define QT_NO_IM if QT_NO_STRINGLIST is defined -+ - Define QT_NO_IM_EXTENSIONS if QT_NO_IM or QT_NO_STRINGLIST is -+ defined -+ -+ * plugins/src/inputmethods/inputmethods.pro -+ - Rename conditional configuration symbol from "im" to "inputmethod" -+ inaccordance with chanege of configure script -+ -+ * plugins/src/inputmethods/simple/qsimpleinputcontext.h -+ * plugins/src/inputmethods/simple/qsimpleinputcontext.cpp -+ * plugins/src/inputmethods/imsw-multi/qmultiinputcontext.h -+ - (identifierName, language): Change return type from QCString to -+ QString -+ -+ * plugins/src/inputmethods/imsw-multi/qmultiinputcontext.cpp -+ - (identifierName, language): Change return type from QCString to -+ QString -+ - (createImSelPopup): Replace QString::find() which is deprecated in -+ Qt4 with QString::startsWith() -+ -+ * plugins/src/inputmethods/imsw-none/qnoneinputcontextplugin.cpp -+ - (create): Replace QString::find() which is deprecated in Qt4 with -+ QString::startsWith() -+ -+ * plugins/src/inputmethods/xim/qximinputcontext.h -+ - (language): Change return type from QCString to QString -+ - (identifierName): -+ * Change return type from QCString to QString -+ * Move inline implementation to qximinputcontext_x11.cpp -+ * plugins/src/inputmethods/xim/qximinputcontext_x11.cpp -+ - (language): Change return type from QCString to QString -+ - (identifierName): -+ * Change return type from QCString to QString -+ * Move implementation from qximinputcontext.h -+ - (language): Replace QString::find() which is deprecated in Qt4 with -+ QString::startsWith() -+ -+2004-08-19 YamaKen -+ -+ * src/input/qinputcontextfactory.cpp -+ - (keys): Modify the function description comment -+ -+2004-08-18 YamaKen -+ -+ * src/input/qinputcontextfactory.cpp -+ - (create_manager): Fix plugin directory from "/input" to "/inputmethods" -+ -+2004-08-18 YamaKen -+ -+ * src/kernel/qapplication_x11.cpp -+ - (KeyTbl): Add translations for Japanese and Korean alias keys -+ -+2004-08-18 YamaKen -+ -+ * This commit disables default IM configuration feature using qtrc and -+ qtconfig in BC mode. See following discussion for further -+ information. -+ http://freedesktop.org/pipermail/immodule-qt/2004-August/000416.html -+ -+ * src/kernel/qapplication_x11.cpp -+ - (x11_apply_settings): -+ * Move immodule handling into #ifndef QT_NO_IM rather than QT_NO_XIM -+ * Move qtrc handling into #ifndef QT_NO_IM_EXTENSIONS -+ -+ * src/inputmethods/imsw-multi/qmultiinputcontext.cpp -+ - (QMultiInputContext): Move qtrc handling into #ifndef -+ QT_NO_IM_EXTENSIONS -+ -+ * tools/qtconfig/mainwindow.cpp -+ - (MainWindow): Move qtrc handling into #ifndef QT_NO_IM_EXTENSIONS -+ -+ * src/kernel/qt_x11.pri -+ - Remove unnecessary configuration -+ -+2004-08-18 YamaKen -+ -+ Merge differences between qt-x11-free-3.3.2 and qt-x11-free-3.3.3 -+ -+2004-08-18 YamaKen -+ -+ * plugins/src/inputmethods/imsw-multi/imsw-multi.pro -+ * plugins/src/inputmethods/simple/simple.pro -+ * plugins/src/inputmethods/imsw-none/imsw-none.pro -+ * plugins/src/inputmethods/xim/xim.pro -+ - Remove inappropriate 'thread' from CONFIG. Thanks to Takumi -+ Asaki for reporting -+ -+2004-08-18 YamaKen -+ -+ * tools/qtconfig/mainwindow.cpp -+ - (MainWindow): Modify a comment -+ - (fileSave): Fix inappropriate /qt/DefaultInputMethodSwitcher -+ overwriting. Thanks Takumi Asaki for the reporting -+ -+2004-08-17 YamaKen -+ -+ * plugins/src/inputmethods/imsw-multi/imsw-multi.pro -+ * plugins/src/inputmethods/simple/simple.pro -+ * plugins/src/inputmethods/imsw-none/imsw-none.pro -+ * plugins/src/inputmethods/xim/xim.pro -+ - Change plugin directory from $QTDIR/plugins/input/ to -+ $QTDIR/plugins/inputmethods/ -+ * changes.immodule -+ - Add a description for the change of plugin directory -+ -+2004-08-17 YamaKen -+ -+ * src/kernel/qnamespace.h -+ - (Qt::Key) Add a comment about Korean-specific keyboard -+ support based on the information from Choe Hwanjin. Thanks -+ for the information. See following discussion for further -+ information -+ http://freedesktop.org/pipermail/immodule-qt/2004-August/000402.html -+ - (Qt::Key) Comment out some Korean-specific keys that has an -+ equivalent generic key -+ -+2004-08-14 YamaKen -+ -+ * This is preparation for qt-x11-immodule-unified-qt3.3.2-20040814 -+ -+ * ChangeLog.immodule -+ - Update -+ -+2004-08-14 YamaKen -+ -+ * changes.immodule -+ - Add and modify some descriptions -+ -+ * configure -+ - Rewrite some codes to avoid patch rejection against Qt -+ 3.3.3. Logically equivalent. -+ * src/widgets/qtextedit.cpp -+ - Rewrite some codes to avoid patch rejection against Qt -+ 3.3.3. Logically equivalent. -+ * src/widgets/qlineedit.cpp -+ - Rewrite some codes to avoid patch rejection against Qt -+ 3.3.3. Logically equivalent. -+ -+2004-08-13 LiuCougar -+ -+ cleanup: get rid of some warnings -+2004-08-12 YamaKen -+ -+ * changes.immodule -+ - New file. This file has been written for both users and -+ developers to inform important changes -+ -+2004-08-12 YamaKen -+ -+ * This is preparation for qt-x11-immodule-unified-qt3.3.2-20040812 -+ -+ * ChangeLog.immodule -+ - Update -+ -+2004-08-12 YamaKen -+ -+ * src/kernel/qwidget_x11.cpp -+ - (changeInputContext, createInputContext): Fix qic location -+ - (destroyInputContext): Add safety check -+ -+2004-08-12 YamaKen -+ -+ * configure -+ - Fix incomplete qconfig configuratoin about QT_NO_IM and -+ QT_NO_IM_EXTENSIONS -+ -+ * src/kernel/qwidget_x11.cpp -+ - (changeInputContext, createInputContext, destroyInputContext): Fix -+ invalid pointer reference -+ -+2004-08-12 LiuCougar -+ -+ fixed a compile issue in my gentoo box (gcc 3.3.3, glibc 2.3.3 -+2004-08-12 YamaKen -+ -+ * configure -+ - Fix option consistency handling between '-im' and '-im-ext' -+ -+ * README.immodule -+ - Fix a typo -+ -+2004-08-11 YamaKen -+ -+ * README.immodule -+ - Modify a little -+ -+2004-08-11 YamaKen -+ -+ * README.immodule -+ - New file. Some explanation has been described -+ -+ * ChangeLog.immodule -+ - New file -+ -+2004-08-11 YamaKen -+ -+ * plugins/src/inputmethods/xim/qximinputcontext_x11.cpp -+ - (language): Remove QLocale dependency to be compiled on Qt 3.2.x -+ or earlier -+ -+2004-08-11 YamaKen -+ -+ * This commit merges 'Binary Compatible branch' into the trunk to -+ reduce maintenance cost. Now binary compatibility is -+ configurable. Binary incompatible features are surrounded by -+ #ifndef QT_NO_IM_EXTENSIONS -+ -+ * configure -+ - Add '-im' option to enable immodule feature (default yes). -+ - Add '-im-ext' option to enable more immodule extensions (default -+ no). Specify this option 'no' to keep binary compatibility with -+ standard Qt3 -+ -+ * src/kernel/qt_x11.pri -+ - Add conditional QT_NO_IM and QT_NO_IM_EXTENSIONS definition in -+ accordance with '-im' and '-im-ext' options -+ -+ * src/kernel/qwidget.h -+ - (icHolderWidget): New function for QT_NO_IM_EXTENSIONS -+ - (ic): Add #ifndef QT_NO_IM_EXTENSIONS for binary incompatible -+ variable -+ - (xic): Add #ifdef QT_NO_IM_EXTENSIONS for binary compatible -+ variable -+ * src/kernel/qwidget_x11.cpp -+ - (create): Add #ifndef QT_NO_IM_EXTENSIONS -+ - (destroy): Make some codes QT_NO_IM_EXTENSIONS independent -+ - (createTLSysExtra): Add a code fragment for QT_NO_IM_EXTENSIONS -+ - (deleteTLSysExtra): Modify a comment -+ - (getInputContext, changeInputContext, createInputContext, -+ destroyInputContext): Merge code fragments for QT_NO_IM_EXTENSIONS -+ - (deleteExtra): Merge a comment for QT_NO_IM_EXTENSIONS -+ -+ * src/kernel/qapplication.h -+ - (locateICHolderWidget, icHolderWidgets, create_xim, close_xim): -+ New functions for QT_NO_IM_EXTENSIONS -+ * src/kernel/qapplication_x11.cpp -+ - (create_im, close_im): Add #ifndef QT_NO_IM_EXTENSIONS -+ - (create_xim, close_xim): Merge functions for QT_NO_IM_EXTENSIONS -+ - (qt_init_internal, qt_cleanup): Merge code fragments for -+ QT_NO_IM_EXTENSIONS -+ -+ * plugins/src/inputmethods/inputmethods.pro -+ - Make plugin compilations configurable with '-im' option -+ -+2004-08-11 YamaKen -+ -+ * plugins/src/inputmethods/xim/qximinputcontext.h -+ - Replace QXIMINPUTCONTEXT_P_H with QXIMINPUTCONTEXT_H -+ -+ * src/widgets/qlineedit.cpp -+ - (QLineEditPrivate::updateMicroFocusHint): Modify the comment a -+ little -+ -+2004-08-11 YamaKen -+ -+ * This commit is participating with recent 'keyword static of C++' -+ discussion. See -+ http://freedesktop.org/pipermail/immodule-qt/2004-August/000344.html -+ for further information -+ -+ * src/kernel/qapplication_x11.cpp -+ - (QETWidget::translateKeyEventInternal): Prevent interwidget key -+ state transition about RTL extensions. This code had been written -+ by Daisuke Kameda in qt-x11-immodule-all-qt3.3.1-20040316.diff -+ -+ * src/widgets/qlineedit.cpp -+ - (QLineEditPrivate::updateMicroFocusHint): Add a comment that -+ explains that old rect variable is intentionally static -+ -+2004-08-11 YamaKen -+ -+ * This commit turns the argument of QInputContext::filterEvent() into -+ const. See -+ http://freedesktop.org/pipermail/immodule-qt/2004-August/000335.html -+ for further information -+ -+ * src/kernel/qinputcontext.h -+ - (filterEvent): Follow the API change -+ * src/kernel/qinputcontext.cpp -+ - (filterEvent): Follow the API change -+ -+ * plugins/src/inputmethods/simple/qsimpleinputcontext.h -+ - (filterEvent): Follow the API change -+ * plugins/src/inputmethods/simple/qsimpleinputcontext.cpp -+ - (filterEvent): Follow the API change -+ * plugins/src/inputmethods/imsw-multi/qmultiinputcontext.h -+ - (filterEvent): Follow the API change -+ * plugins/src/inputmethods/imsw-multi/qmultiinputcontext.cpp -+ - (filterEvent): Follow the API change -+ -+2004-08-10 YamaKen -+ -+ * plugins/src/inputmethods/simple/xcompose2q.rb -+ - Update to accept Compose flie of X.org's X11R6.7.0 -+ - Accept 'XCOMM' as comment sign to accept raw source file -+ - Accept both " " and "\"" as valid RHS -+ * plugins/src/inputmethods/simple/composetable.cpp -+ - Update Compose table from XFree86 4.3.0 to X.org's X11R6.7.0 -+ -+2004-08-10 YamaKen -+ -+ * This commit replaces the invalid header words 'This file is -+ part of the kernel module' of following files with 'This file -+ is part of the input method module' -+ -+ * plugins/src/inputmethods/imsw-multi/qmultiinputcontextplugin.cpp -+ * plugins/src/inputmethods/imsw-multi/qmultiinputcontext.cpp -+ * plugins/src/inputmethods/imsw-multi/qmultiinputcontextplugin.h -+ * plugins/src/inputmethods/imsw-multi/qmultiinputcontext.h -+ * plugins/src/inputmethods/simple/qsimpleinputcontextplugin.cpp -+ * plugins/src/inputmethods/simple/qsimpleinputcontext.cpp -+ * plugins/src/inputmethods/simple/qsimpleinputcontextplugin.h -+ * plugins/src/inputmethods/simple/qsimpleinputcontext.h -+ * plugins/src/inputmethods/simple/composetable.cpp -+ * plugins/src/inputmethods/imsw-none/qnoneinputcontextplugin.cpp -+ * plugins/src/inputmethods/imsw-none/qnoneinputcontextplugin.h -+ * plugins/src/inputmethods/xim/qximinputcontextplugin.cpp -+ * plugins/src/inputmethods/xim/qximinputcontextplugin.h -+ * plugins/src/inputmethods/xim/qximinputcontext.h -+ * plugins/src/inputmethods/xim/qximinputcontext_x11.cpp -+ -+2004-08-10 YamaKen -+ -+ * plugins/src/inputmethods/simple/xcompose2q.rb -+ - Fix broken translation entries for most ASCII characters -+ * plugins/src/inputmethods/simple/composetable.cpp -+ - Translate again with fixed xcompose2q.rb. This fixes many -+ translation entries involving ascii character such as -+ " " -+ -+2004-08-10 YamaKen -+ -+ * plugins/src/inputmethods/simple/xcompose2q.rb -+ - New file. This script is used for translating X's Compose -+ table into QSimpleInputContext's table -+ - Some bugs included -+ - Although I had released previous versions of this script -+ under GPL, I have released this version under another -+ license. See header -+ -+2004-08-10 YamaKen -+ -+ * plugins/src/inputmethods/simple/qsimpleinputcontext.h -+ - Follow Trolltech's coding style for Qt3 -+ - Remove unnecessary headers -+ - (UNITIZE): Moved from qsimpleinputcontext.cpp. QT_ prefix is not -+ required since a macro does not pollute symbol space -+ - (struct _ComposeTableElement): Rename to QComposeTableElement -+ - (struct QComposeTableElement): Renamed from _ComposeTableElement -+ - (struct _ComposeTable): Rename to QComposeTable -+ - (struct QComposeTable): Renamed from _ComposeTable -+ - (isPreeditRelocationEnabled): Remove unnecessary overloading -+ function -+ - (isPreeditPreservationEnabled): Remove unnecessary function -+ - (checkComposeTable): Follow the renaming of the types of args -+ - (defaultComposeTable): New static member variable -+ -+ * plugins/src/inputmethods/simple/qsimpleinputcontext.cpp -+ - Separate composing table definition to composetable.cpp -+ - Remove unnecessary headers -+ - Replace 'true' and 'false' with 'TRUE' and 'FALSE' to follow -+ Trolltech's coding style for Qt3 -+ - Replace _ComposeTableElement with QComposeTableElement to follow -+ the renaming -+ - Replace ComposeTable with QComposeTable to follow the renaming -+ - (UNITIZE): Move to qsimpleinputcontext.h -+ - (defaultTable): Move to composetable.cpp -+ - (qtComposeTable): Move to composetable.cpp as defaultComposeTable -+ - (filterEvent): -+ * Clean up -+ * Add a comment about key compression -+ * replace qtComposeTable with defaultComposeTable to follow the -+ renaming -+ - (unsetFocus): Remove unnecessary isPreeditPreservationEnabled() -+ check -+ - (identifierName): Remove 'FIXME' comment -+ - (isPreeditRelocationEnabled): Remove unnecessary overloading -+ function -+ - (isPreeditPreservationEnabled): Remove unnecessary function -+ -+ * plugins/src/inputmethods/simple/composetable.cpp -+ - New file. This file has been separated from -+ qsimpleinputcontext.cpp to achieve following issues -+ * increase table maintenance ability -+ * ease editing code part of QSimpleInputContext -+ * ease development log tracking -+ * ease copyright tracking -+ * enclose UTF-8 comments into this file only -+ - Add original header from Compose file of XFree86 4.3.0 -+ - (defaultTable) Moved from qsimpleinputcontext.cpp -+ - (defaultComposeTable): New variable definition -+ -+ * plugins/src/inputmethods/simple/simple.pro -+ - Add composetable.cpp to SOURCES -+ -+ * plugins/src/inputmethods/simple/qsimpleinputcontextplugin.cpp -+ - (displayName, description): Modify the descriptions appropriately -+ -+2004-08-10 YamaKen -+ -+ * plugins/src/inputmethods/xim/qximinputcontext_x11.cpp -+ - Replace #include "qximinputcontext_p.h" with -+ "qximinputcontext.h". XIM plugin is now working properly -+ -+2004-08-10 YamaKen -+ -+ * This commit changes the XIM input method into plugin. A little -+ modification is still required to work. See next commit information -+ -+ * src/input/qinputcontextfactory.cpp -+ - Remove XIM dependency -+ - (create, keys): Remove XIM dependent codes -+ -+ * src/input/qt_input.pri -+ - Remove QXIMInputContext entries -+ * src/input/qximinputcontext_p.h -+ - Moved to plugins/src/inputmethods/xim/qximinputcontext.h -+ * src/input/qximinputcontext_x11.cpp -+ - Moved to plugins/src/inputmethods/xim/qximinputcontext_x11.cpp -+ -+ * plugins/src/inputmethods/inputmethods.pro -+ - Add xim to SUBDIRS -+ * plugins/src/inputmethods/xim -+ - New directory -+ * plugins/src/inputmethods/xim/xim.pro -+ - New file -+ * plugins/src/inputmethods/xim/qximinputcontextplugin.h -+ - New file -+ - (class QXIMInputContextPlugin): New class -+ - (QXIMInputContextPlugin, ~QXIMInputContextPlugin, keys, create, -+ languages, displayName, description): New function -+ * plugins/src/inputmethods/xim/qximinputcontextplugin.cpp -+ - New file -+ * plugins/src/inputmethods/xim/qximinputcontext.h -+ - Moved from src/input/qximinputcontext_p.h. No code changes have -+ been applied. A little modification is required to work. See next -+ commit information -+ * plugins/src/inputmethods/xim/qximinputcontext_x11.cpp -+ - Moved from src/input/qximinputcontext_x11.cpp. No code changes have -+ been applied -+ -+2004-08-10 YamaKen -+ -+ * src/input/qximinputcontext_p.h -+ - (QXIMInputContext): Remove the arg 'widget' to conform to standard -+ QInputContext API -+ * src/input/qximinputcontext_x11.cpp -+ - (QXIMInputContext): Remove the arg 'widget' to conform to standard -+ QInputContext API -+ - (setHolderWidget): Add QInputContext::setHolderWidget() to fix -+ inproper overriding -+ * src/input/qinputcontextfactory.cpp -+ - (create): Remove the arg from QXIMInputContext() -+ -+2004-08-10 YamaKen -+ -+ * src/input/qximinputcontext_p.h -+ - (setHolderWidget): New override function -+ * src/input/qximinputcontext_x11.cpp -+ - (QXIMInputContext): Split most part of the initialization code -+ into setHolderWidget() to allow null widget. This is required to -+ make imsw-none working properly -+ - (setHolderWidget): New function -+ -+2004-08-10 YamaKen -+ -+ * src/kernel/qapplication_x11.cpp -+ - (x11_apply_settings): Restrict defaultIM to be an IM-switcher. An -+ IM-switcher has a 'imsw-' prefix -+ -+2004-08-10 YamaKen -+ -+ * This commit adds imsw-none IM-switcher plugin according to -+ following discussion with Takumi Asaki. Thanks for the opinion. -+ http://freedesktop.org/pipermail/immodule-qt/2004-August/000320.html -+ -+ * plugins/src/inputmethods/inputmethods.pro -+ - Add imsw-none to SUBDIRS -+ * plugins/src/inputmethods/imsw-none/imsw-none.pro -+ - New file -+ * plugins/src/inputmethods/imsw-none/qnoneinputcontextplugin.h -+ - New file -+ - (class QNoneInputContextPlugin): New class -+ * plugins/src/inputmethods/imsw-none/qnoneinputcontextplugin.cpp -+ - New file -+ - (QNoneInputContextPlugin, ~QNoneInputContextPlugin, keys, -+ languages, displayName, description): New function -+ - (create): New function. Read key from QT_IM_MODULE or -+ /qt/DefaultInputMethod of qtrc and creates input context with the -+ key -+ -+2004-08-10 YamaKen -+ -+ * Rename input method plugin names to accord with other plugin names -+ -+ * plugins/src/inputmethods/imsw-multi/imsw-multi.pro -+ - Rename plugin name to qimsw-multi from qmultiinputcontextplugin -+ * plugins/src/inputmethods/simple/simple.pro -+ - Rename plugin name to qsimple from qsimpleinputcontextplugin -+ -+2004-08-10 YamaKen -+ -+ * plugins/src/inputmethods/imsw-multi/multi.pro -+ - Move to imsw-multi.pro -+ * plugins/src/inputmethods/imsw-multi/imsw-multi.pro -+ - Move from multi.pro -+ -+2004-08-10 YamaKen -+ -+ * plugins/src/inputmethods/multi -+ - Move to imsw-multi -+ * plugins/src/inputmethods/imsw-multi -+ - Move from multi -+ * plugins/src/inputmethods/inputmethods.pro -+ - Replace 'multi' with 'imsw-multi' in SUBDIRS -+ -+2004-08-10 Kazuki Ohta -+ -+ * plugins/src/inputmethods/simple/qsimpleinputcontext.cpp -+ - add full dead/multi key entries -+ - fix some bugs -+ -+2004-08-10 YamaKen -+ -+ * This commit changes pluggable popup menu API in accordance with -+ following discussion with Lars Knoll. Thanks for the advice. -+ http://freedesktop.org/pipermail/immodule-qt/2004-August/000300.html -+ -+ * src/kernel/qinputcontext.cpp -+ - (actions): New function -+ - (exportMenusInto): Remove to rename to addMenusTo() -+ - (addMenusTo): -+ * New function. Renamed from exportMenusInto() -+ * Follow introduction of enum QInputContextMenu::Action -+ * Add an explanation for this utility function to the function -+ description -+ -+ * src/kernel/qinputcontext.h -+ - (QInputContextMenu::Action): New enum -+ - (menus): Restrict to use with Qt3 only -+ - (qt4menus): Remove to replace with actions() -+ - (actions): New function for Qt4 -+ -+ * src/widgets/qtextedit.cpp -+ - (createPopupMenu): Replace exportMenusInto() with addMenusTo() -+ * src/widgets/qlineedit.cpp -+ - (createPopupMenu): Replace exportMenusInto() with addMenusTo() -+ -+2004-08-10 YamaKen -+ -+ * This commit changes the two input methods into plugin -+ -+ * src/input/qt_input.pri -+ - Remove QSimpleInputContext and QMultiInputContext entries -+ * src/input/qmultiinputcontext.h -+ - Moved to plugins/src/inputmethods/multi/qmultiinputcontext.h -+ * src/input/qmultiinputcontext.cpp -+ - Moved to plugins/src/inputmethods/multi/qmultiinputcontext.cpp -+ * src/input/qsimpleinputcontext.h -+ - Moved to plugins/src/inputmethods/simple/qsimpleinputcontext.h -+ * src/input/qsimpleinputcontext.cpp -+ - Moved to plugins/src/inputmethods/simple/qsimpleinputcontext.cpp -+ -+ * plugins/src/src.pro -+ - Add 'inputmethods' to SUBDIRS. The directory name 'inputmethods' -+ is intended to be compatible with Qt/Embedded. Install directory -+ name is still kept as 'input' for backward compatibility -+ * plugins/src/inputmethods/inputmethods.pro -+ - New file -+ -+ * plugins/src/inputmethods/multi/multi.pro -+ - New file -+ * plugins/src/inputmethods/multi/qmultiinputcontextplugin.h -+ - New file -+ * plugins/src/inputmethods/multi/qmultiinputcontextplugin.cpp -+ - New file -+ * plugins/src/inputmethods/multi/qmultiinputcontext.h -+ - Moved from src/input/qmultiinputcontext.h. No code changes have -+ been applied -+ * plugins/src/inputmethods/multi/qmultiinputcontext.cpp -+ - Moved from src/input/qmultiinputcontext.cpp. No code changes have -+ been applied -+ -+ * plugins/src/inputmethods/simple/simple.pro -+ - New file -+ * plugins/src/inputmethods/simple/qsimpleinputcontextplugin.h -+ - New file -+ * plugins/src/inputmethods/simple/qsimpleinputcontextplugin.cpp -+ - New file -+ * plugins/src/inputmethods/simple/qsimpleinputcontext.h -+ - Moved from src/input/qsimpleinputcontext.h. No code changes have -+ been applied -+ * plugins/src/inputmethods/simple/qsimpleinputcontext.cpp -+ - Moved from src/input/qsimpleinputcontext.cpp. No code changes have -+ been applied -+ -+ * src/input/qinputcontextfactory.cpp -+ - (create): Remove dedicated instantiation handling for -+ QSimpleInputContext and QMultiInputContext -+ -+ * tools/qtconfig/mainwindow.h -+ - (inputMethodIdentifiers): New member variable -+ * tools/qtconfig/mainwindow.cpp -+ - (MainWindow): -+ * Replace identifier name of input methods with displaynames -+ * Add filtering out process for IM-switchers that has "imsw-" -+ prefix -+ * Disable sorting for input method names -+ * Modify some comments -+ * Simplify setCurrentItem() handling for inputMethodCombo widget -+ * Add recorded input method name to the display name of unknown -+ input method -+ * Save recorded input method name even if unknown input method -+ - (fileSave): -+ * Save /qt/DefaultInputMethodSwitcher with default value -+ "imsw-multi" -+ * Save identifier name of the input method rather than display name -+ -+ * src/kernel/qinputcontext.cpp -+ - (class QInputContext): Update the class description comment -+ -+ * src/input/qinputcontextplugin.cpp -+ - (class QInputContextPlugin): Update the class description comment -+ - (keys): Update the function description comment -+ - (languages, displayName, description): Add the function -+ description comment -+ -+ -+2004-08-05 YamaKen -+ -+ * This commit adds generic pluggable popup menu feature. See -+ http://freedesktop.org/pipermail/immodule-qt/2004-August/000266.html -+ for further information. The implementation may be altered in -+ accordance with discussion in the list. -+ -+ * src/kernel/qinputcontext.h -+ - (struct QInputContextMenu): New struct -+ - (qt4menus): New function. Just a placeholder for now -+ - (menus): New function -+ - (exportMenusInto): New function -+ * src/kernel/qinputcontext.cpp -+ - (class QInputContext): Add 'Text widget implementor's guide' -+ section to the class description comment -+ - (menus): New function -+ - (exportMenusInto): New function -+ -+ * src/input/qmultiinputcontext.h -+ - (qt4menus): New function. Just a placeholder for now -+ - (menus): New function -+ * src/input/qmultiinputcontext.cpp -+ - (menus): -+ * New function to follow new API. The function merges slave menus -+ and QMultiInputContext's own 'Select Input Method' menu -+ * The functionality is ported from QLineEdit::createPopupMenu() -+ * An accelerator has been added as 'Select Input &Method' -+ -+ * src/widgets/qtextedit.cpp -+ - Remove QMultiInputContext dependency -+ - (createPopupMenu): Replace QMultiInputContext dependent submenu -+ handling with the pluggable popup menu -+ * src/widgets/qlineedit.cpp -+ - Remove QMultiInputContext dependency -+ - (createPopupMenu): Replace QMultiInputContext dependent submenu -+ handling with the pluggable popup menu -+ -+ * src/kernel/qwidget.h -+ - Remove #include "qinputcontext.h" to reduce compile time when we -+ hacked qinputcontext.h -+ -+2004-08-04 Kazuki Ohta -+ -+ * src/input/qmultiinputcontext.cpp -+ - use QInputContextFactory::description and set whatsthis help -+ -+2004-08-03 YamaKen -+ -+ * This commit adds QInputContextFactory::description() feature -+ -+ * src/input/qinputcontextinterface_p.h -+ - Update the UUID because the interface has been changed -+ - (description): New function -+ -+ * src/input/qinputcontextplugin.h -+ - (description): New function -+ -+ * src/input/qinputcontextfactory.h -+ - (description): New function -+ - (QInputContextPluginPrivate::description): New function -+ * src/input/qinputcontextfactory.cpp -+ - (description): New function -+ - (displayName): Replace fallback value with empty string instead of -+ null -+ -+2004-08-03 YamaKen -+ -+ * This commit alters the configuration convention about -+ IM-switcher. See -+ http://freedesktop.org/pipermail/immodule-qt/2004-August/000232.html -+ for further information. The implementation may be altered in -+ accordance with discussion in the list. -+ -+ * src/kernel/qapplication_x11.cpp -+ - (defaultIM): Replace "xim" with "imsw-multi" -+ - (x11_apply_settings): -+ * Replace the environment variable name QT_IM_MODULE with -+ QT_IM_SWITCHER -+ * Replace the qtrc variable name /qt/DefaultInputMethod with -+ /qt/DefaultInputMethodSwitcher -+ * Replace "xim" with "imsw-multi" for default plugin -+ -+ * src/input/qmultiinputcontext.h -+ - (lastCreatedIMKey): Remove to rename to currentIMKey -+ - (currentIMKey): New member variable. Renamed from lastCreatedIMKey -+ because the semantics of the variable has been changed by -+ introduction of QT_IM_SWITCHER -+ -+ * src/input/qmultiinputcontext.cpp -+ - Replace lastCreatedIMKey with currentIMKey -+ - (QMultiInputContext): Add default input method specification -+ feature using QT_IM_MODULE and /qt/DefaultInputMethod -+ - (createImSelPopup): -+ * Add IM-switcher plugin elimination feature using "imsw-" prefix -+ * Add dispName.isNull() checking -+ * Apply some rewriting without altering logic for human readability -+ -+ * src/input/qinputcontextfactory.cpp -+ - (create): Replace the identifier name "multi" with "imsw-multi" -+ -+2004-08-03 Kazuki Ohta -+ -+ * This commit implements table searching suite -+ -+ - QKeyEvent::text() is restricted to only one character, -+ so qsimpleic use QChar::unicode() value in case keys are -+ pressed otherwise composing keys are pressed. -+ -+ - Composing Table is temporally deleted for testing. -+ Need to prepare proper entries. -+ Now qsimpleic can deal with capital letter more cleaner way -+ -+ * Next, I introduce X's composing parser to qsimpleic -+ -+2004-08-02 YamaKen -+ -+ * src/kernel/qapplication_x11.cpp -+ - (x11_apply_settings): Merge the comment about defaultIM -+ overwritten by r52 from r45 -+ -+2004-07-31 LiuCougar -+ -+ new environment variable QT_IM_MODULE to overwrite the default inputmethod plugin -+2004-07-31 LiuCougar -+ -+ "deleteLater" is safer then "delete" QObject directly -+2004-07-30 YamaKen -+ -+ * src/kernel/qnamespace.h -+ - (Qt::Key): -+ * Replace dead key values with new one to avoid keycode conflict -+ * Add a comment about the latin 1 keycodes -+ * Add some comments about the offset for keycode from X keycode -+ * src/kernel/qevent.cpp -+ - (key): Add a comment about latin 1 keycodes to the function -+ description. -+ -+ * src/kernel/qapplication_x11.cpp -+ - Define define XK_XKB_KEYS to include dead key definitions from -+ keysymdef.h -+ - Remove XK_dead_ keys definition -+ -+2004-07-29 Kazuki Ohta -+ -+ * Change to use displayName() in IM-Switch Popupmenu -+ -+ * src/input/qmultiinputcontext.h -+ - (keyDict): new variable -+ * src/input/qmultiinputcontext.cpp -+ - (createImSelPopup): use displanName() on popup and store key in keyDict -+ - (changeInputMethodWithMenuId): find key from using keyDict -+ -+ * Problem * -+ - if key=="XIM", displayName(key) is QString::null -+ * Wish * -+ - add "virtual QString description( const QString &key ) = 0;" for showing the description of IM on PopupMenu as a whatsthis help -+ -+2004-07-28 YamaKen -+ -+ * src/input/qinputcontextinterface_p.h -+ - Update the UUID because the interface has been changed -+ - (languages): New function -+ - (displayName): New function -+ -+ * src/input/qinputcontextplugin.h -+ - (languages): New function -+ - (displayName): New function -+ * src/input/qinputcontextplugin.cpp -+ - (QInputContextPluginPrivate::languages): New function -+ - (QInputContextPluginPrivate::displayName): New function -+ -+ * src/input/qinputcontextfactory.h -+ - (languages): New function -+ - (displayName): New function -+ * src/input/qinputcontextfactory.cpp -+ - (languages): New function -+ - (displayName): New function -+ -+2004-07-27 YamaKen -+ -+ * src/kernel/qinputcontext.h -+ - (deletionRequested): New signal. Added for fatal error handling -+ * src/kernel/qinputcontext.cpp -+ - (deletionRequested): Add the function description comment -+ * src/kernel/qwidget.h -+ - (destroyInputContext): Change ordinary function to slot to receive -+ the signal QInputContext::deletionRequested() -+ * src/kernel/qwidget_x11.cpp -+ - (changeInputContext, createInputContext): -+ * Connect deletionRequested() signal of qic to destroyInputContext() -+ * Follow renaming of QApplication::imEventReceived() to postIMEvent() -+ - (destroyInputContext): Modify the function description comment -+ -+ * src/input/qximinputcontext_p.h -+ - (close): New function -+ * src/input/qximinputcontext_x11.cpp -+ - (close_xim): -+ * Remove invalid QApplication::close_im() invocation -+ * Add proper finalization using deletionRequested() signal -+ - (close): New function -+ -+ * src/kernel/qapplication.h -+ - (imEventReceived): Remove this inappropriate name to rename to -+ postIMEvent() -+ - (postIMEvent): New slot. Renamed from imEventReceived() -+ * src/kernel/qapplication_x11.cpp -+ - (imEventReceived): Remove this inappropriate name to rename to -+ postIMEvent() -+ - (postIMEvent): New slot. Renamed from imEventReceived() -+ - (close_im): Remove unused commented out code. The code had already -+ been moved to qximinputcontext.cpp -+ -+ * src/input/qmultiinputcontext.h -+ - (destroyInputContext): New slot -+ - (imEventReceived): Remove this inappropriate name to rename to -+ postIMEvent() -+ - (postIMEvent): New slot. Renamed from imEventReceived() -+ * src/input/qmultiinputcontext.cpp -+ - (QT_NO_IM_QMULTIINPUTCONTEXT_IMINDEX): New macro. Defined as default -+ - (filterEvent): Insert #ifdef QT_NO_IM_QMULTIINPUTCONTEXT_IMINDEX -+ - (destroyInputContext): New slot. Processes deletionRequested from slave -+ - (imEventReceived): Remove this inappropriate name to rename to -+ postIMEvent() -+ - (postIMEvent): New slot. Renamed from imEventReceived() -+ - (slave): -+ * Add proper instanciation code for popup menu mode -+ * Insert #ifdef QT_NO_IM_QMULTIINPUTCONTEXT_IMINDEX -+ - (changeInputMethod(int)): -+ * Add error handling for no available input methods -+ * Insert #ifdef QT_NO_IM_QMULTIINPUTCONTEXT_IMINDEX -+ - (changeInputMethod(QString)): -+ * Add error handling for no available input methods -+ * Add default selection for null key -+ * Connect deletionRequested() signal -+ * Fix debug message -+ * src/widgets/qtextedit.cpp -+ - (createPopupMenu): -+ * Add NULL check for input context -+ * Replace the label "SelectInputMethod" with "Select Input Method" -+ * src/widgets/qlineedit.cpp -+ - (createPopupMenu): -+ * Add NULL check for input context -+ * Replace the label "SelectInputMethod" with "Select Input Method" -+ -+2004-07-27 YamaKen -+ -+ * src/kernel/qwidget_x11.cpp -+ - (changeInputContext): -+ * Remove unnecessary createInputContext() -+ * Reorder the code fragments to reduce temporal memory consumption -+ -+2004-07-27 YamaKen -+ -+ * This commit is a comment and variable name update. No actual code is -+ modified. -+ -+ * src/kernel/qinputcontext.cpp -+ - (class QInputContext): Modify the class description comment -+ - (filterEvent): Mark the argument as /* const */ to make it const -+ in future -+ - (reset): Add a requirement to the function description comment for -+ reimplementation -+ -+ * src/kernel/qapplication_x11.cpp -+ - (locateICHolderWidget, icHolderWidgets, changeAllInputContext): -+ Modify the function description comment -+ -+ * src/kernel/qwidget_x11.cpp -+ - (changeInputContext): -+ * Rename 'name' with 'identifierName' to eliminate the ambiguity -+ * Modify the function description comment -+ * Modify a comment -+ * Follow Trolltech's coding style -+ - (createInputContext): -+ * Modify the function description comment -+ * Modify a comment -+ - (resetInputContext): Modify the function description comment -+ -+ * src/kernel/qapplication_x11.cpp -+ - (defaultIM): Modify the comment -+ - (changeAllInputContext): -+ * Rename 'name' with 'identifierName' to eliminate the ambiguity -+ * Follow Trolltech's coding style -+ - (defaultInputMethod): Modify the function description comment -+ - (x11_apply_settings): Modify a comment -+ -+ * src/input/qinputcontextplugin.cpp -+ - (class QInputContextPlugin): Modify the class description comment -+ - (create): Modify the function description comment -+ -+ * src/input/qinputcontextfactory.cpp -+ - (create): Modify the function description comment -+ -+2004-07-24 YamaKen -+ -+ * src/kernel/qinputcontext.cpp -+ - Add #if defined(Q_WS_X11) around X11 platform specific -+ functions. these functions cannot be moved to -+ qinputcontext_x11.cpp at now since the QInputContextPrivate is -+ defined in qinputcontext.cpp. This will be fixed in porting to -+ Qt4. -+ - (filterEvent): Add the function description comment according -+ with the Simplified API (filtering precedence, key compression) -+ -+ * src/kernel/qapplication_x11.cpp -+ - (locateICHolderWidget, icHolderWidgets, changeAllInputContext): -+ Modify the function description comment -+ -+2004-07-24 YamaKen -+ -+ * This commit is a comment update. No code is modified. -+ -+ * src/kernel/qinputcontext.cpp -+ - (class QInputContext): Add the class description comment according -+ with the Simplified API (preedit relocation is done, not entirely -+ completed yet) -+ -+2004-07-24 YamaKen -+ -+ * This commit contains the fixes in response to Lars Knoll's -+ advice. Thanks for the advice. -+ -+ * src/kernel/qapplication_x11.cpp -+ - (x11_apply_settings): Remove trUtf8() from "xim" to specify the -+ default input method -+ -+ * src/kernel/qapplication_x11.cpp, src/input/qximinputcontext_x11.cpp -+ - (ximServer, xim_preferred_style, composingKeycode, input_mapper): -+ Add qt_ prefix to avoid symbol space pollution -+ - (qt_ximServer, qt_xim_preferred_style, qt_ximComposingKeycode, -+ qt_input_mapper): Renamed from above one -+ -+2004-07-24 YamaKen -+ -+ * This commit is a comment update. No code is modified. -+ -+ * src/kernel/qinputcontext.cpp -+ - (class QInputContext): Modify several expressions -+ -+2004-07-23 YamaKen -+ -+ * This commit is a comment update. No code is modified. -+ -+ * src/kernel/qinputcontext.cpp -+ - (class QInputContext): Add the class description comment according -+ with the Simplified API (preedit preservation is done, not -+ entirely completed yet) -+ - (QInputContext, focusWidget, setFocusWidget, isComposing, -+ setFocus, unsetFocus): Modify a typo in the function description -+ comment -+ -+2004-07-23 YamaKen -+ -+ * src/input/qsimpleinputcontext.cpp -+ - Modify the file header description -+ * src/input/qmultiinputcontext.cpp -+ - Modify the file header description -+ * src/input/qsimpleinputcontext.h -+ - Modify the file header description -+ * src/input/qmultiinputcontext.h -+ - Modify the file header description -+ -+2004-07-23 YamaKen -+ -+ * src/input/qsimpleinputcontext.h -+ - Add a copyright and license header -+ -+ * src/input/qsimpleinputcontext.cpp -+ - Add a copyright and license header -+ -+2004-07-23 YamaKen -+ -+ * This commit is a comment update. No code is modified. -+ -+ * src/kernel/qinputcontext.cpp -+ - (class QInputContext): Add the class description comment according -+ with the Simplified API (not completed yet) -+ - (QInputContext): Modify a expression in the function description -+ comment -+ - (sendIMEventInternal, font): Modify a typo in the function -+ description comment -+ -+2004-07-23 Kazuki Ohta -+ -+ * src/input/qsimpleinputcontext.cpp -+ - OOps. fix typo. -+ -+2004-07-23 Kazuki Ohta -+ -+ * src/input/qsimpleinputcontext.cpp -+ - follow Qt coding rule -+ - more valid capitalize case -+ -+2004-07-23 Kazuki Ohta -+ -+ * src/input/qinputcontextfactory.cpp -+ - enable QSimpleInputContext by specifying in qtrc "DefaultInputMethod=simple" -+ -+2004-07-23 Kazuki Ohta -+ -+ * This commit add simple table based InputContext for dead/multi key support -+ -+ * src/input/qsimpleinputcontext.h, src/input/qsimpleinputcontext.cpp -+ - simple table based InputContext -+ -+2004-07-22 Kazuki Ohta -+ -+ * kernel/qapplication_x11.cpp, kernel/qnamespace.h -+ - add dead key entries -+ -+2004-07-22 YamaKen -+ -+ * This commit is a comment update. No code is modified. -+ -+ * src/kernel/qinputcontext.cpp -+ - (holderWidget, setHolderWidget, focusWidget, setFocusWidget, -+ releaseComposingWidget, isPreeditRelocationEnabled, isComposing, -+ sendIMEventInternal, sendIMEvent): Add the function description comment -+ according with the Simplified API -+ - (QInputContext, setFocus, unsetFocus): Update the function -+ description comment according with the Simplified API -+ - (~QInputContext, imEventGenerated): Add the function description -+ comment -+ - (reset, identifierName, language, filterEvent): Update the -+ function description comment -+ - (setMicroFocus, mouseHandler, reset, identifierName, language): -+ Modify a expression in the function description comment -+ -+ * src/kernel/qwidget_x11.cpp -+ - (icHolderWidget, resetInputContext, focusInputContext, -+ unfocusInputContext, sendMouseEventToInputContext): Update the -+ function description comment -+ -+ * src/kernel/qapplication_x11.cpp -+ - (imEventReceived): Update the function description comment -+ -+2004-07-21 Kazuki Ohta -+ -+ * src/input/qmultiinputcontext.h -+ - (createImSelPopup): new function -+ - (changeInputMethodWithMenuId): new slot -+ - (changeInputMethod(QString)): new function -+ - (popup): new variable -+ - (lastCreatedIMKey): new variable -+ -+ * src/input/qmultiinputcontext.cpp -+ - add #ifndef QT_NO_IM -+ - (createImSelPopup): create QPopupMenu object which can switch IM. -+ Currently selected IM is marked as checked. -+ -+ * src/input/qinputcontextfactory.h -+ - remove "class QPopupMenu" -+ -+ * src/widget/qtextedit.cpp -+ - add im-switch popup to the menu which is shown when widget is right-clicked. -+ -+ * src/widget/qlineedit.cpp -+ - add im-switch popup to the menu which is shown when widget is right-clicked. -+ -+2004-07-21 YamaKen -+ -+ * src/kernel/qinputcontext.cpp -+ - (filterEvent, setMicroFocus, mouseHandler): Update the function -+ description comment according with the Simplified API -+ - (reset, identifierName, language): Update the function description -+ comment -+ -+2004-07-20 YamaKen -+ -+ * src/input/qmultiinputcontext.cpp -+ - (changeInputMethod): Fix invalid imIndex circulation. Thanks -+ to Kazuki for reporting -+ -+2004-07-20 YamaKen -+ -+ * This commit enables a flexible signal connection -+ configuration. Default behavior is based on Cougar's -+ suggestion. Thanks. -+ -+ * src/input/qmultiinputcontext.h -+ - (beIndirectlyConnected): New instance variable -+ -+ * src/input/qmultiinputcontext.cpp -+ - (QMultiInputContext): Add beIndirectlyConnected to initializer list -+ - (imEventReceived): Add a function description comment -+ - (changeInputMethod): Connect imEventGenerated signal of slave -+ according with beIndirectlyConnected. The default behavior is -+ changed as directly connected to imEventGenerated signal of this -+ -+2004-07-20 YamaKen -+ -+ * src/kernel/qwidget_x11.cpp -+ - (setMicroFocusHint): Update the comment about XIM handling -+ - (focusInputContextunfocusInputContext, -+ sendMouseEventToInputContext): Add the function description comment -+ -+ * src/kernel/qinputcontext_x11.cpp -+ - (x11FilterEvent): Update the function description comment -+ according with the Simplified API -+ -+2004-07-20 YamaKen -+ -+ * src/input/qmultiinputcontext.cpp -+ - (changeInputMethod): Fix the conversion to const char * from -+ identifierName() -+ -+2004-07-20 YamaKen -+ -+ * src/input/qximinputcontext_p.h -+ - (identifierName): Replace the result "XIM" with "xim" to be -+ consistent with corresponding immodule of GTK+ -+ -+ * src/kernel/qapplication_x11.cpp -+ - (defaultIM, x11_apply_settings): Replace "XIM" with "xim" -+ -+ * src/input/qinputcontextfactory.cpp -+ - (create, keys): Replace "XIM" with "xim" -+ -+ * tools/qtconfig/mainwindow.cpp -+ - (MainWindow): Replace "XIM" with "xim" -+ -+2004-07-20 YamaKen -+ -+ * This commit enables QInputContext proxying, and provide an -+ experimental immodule-switcher QMultiInputContext as its -+ examples. The changes is following. -+ -+ 1. Use signal to deliver QIMEvent instead of explicit -+ postEvent(). This enables QIMEvent proxying and better platform -+ abstraction. Corresponding slot is created as -+ QApplication::imEventReceived(). -+ -+ 2. Move some methods of QInputContext to public from protected or -+ private. This enables that proxy-IM can access slave methods. -+ -+ 3. Make some methods of QInputContext virtual. This enables -+ overriding the methods as proxy -+ -+ 4. Rename QInputContext::name() to identifierName() to avoid -+ conflicting with QObject::name() -+ -+ This patch does not break binary compatibility from vanilla Qt3. -+ But it costs immodule developer small modification. -+ -+ * src/kernel/qinputcontext.h -+ - (class QInputContext): Inherit QObject and add Q_OBJECT macro -+ - (name): Remove to rename to identifierName() to avoid conflicting -+ with QObject::name() -+ - (identifierName): New function. Renamed from name() -+ - (isComposing, isPreeditRelocationEnabled): Move to public from -+ protected to allow proxying -+ - (setFocusWidget,setHolderWidget, releaseComposingWidget): Move to -+ public from private to allow proxying -+ - (focusWidget, holderWidget): -+ * Make public from protected -+ * Make virtual to allow overriding the method as proxy -+ - (imEventGenerated): New signal -+ -+ * src/kernel/qinputcontext.cpp -+ - (QInputContext): Add QObject() to initializer list -+ - (sendIMEventInternal): Replace QApplication::postEvent with signal -+ emitting according to the change -+ - (name): Remove to rename to identifierName() to avoid conflicting -+ with QObject::name() -+ - (identifierName): -+ * New function. Renamed from name() -+ * Return type has changed to QCString from QString to avoid using -+ of i18n string and confusing this with display name for endusers -+ -+ * src/kernel/qwidget_x11.cpp -+ - (changeInputContext): Add QObject::connect() to follow the change -+ of IMEvent flow -+ - (createInputContext): Add QObject::connect() to follow the change -+ of IMEvent flow -+ -+ * src/kernel/qapplication.h -+ - (imEventReceived): New slot -+ * src/kernel/qapplication_x11.cpp -+ - (imEventReceived): New slot to relay QIMEvent to event queue using -+ postEvent() -+ -+ * src/input/qmultiinputcontext.h -+ - New file. Copyright and licensing information is temporarily -+ adapted to our cirmumstances -+ - (QMultiInputContext): New class -+ - (QMultiInputContext): New function -+ - (~QMultiInputContext): New function -+ - (identifierName): New function -+ - (language): New function -+ - (x11FilterEvent): New function. Added based on Cougar's -+ advice. Thanks -+ - (filterEvent): New function -+ - (reset): New function -+ - (setFocus): New function -+ - (unsetFocus): New function -+ - (setMicroFocus): New function -+ - (mouseHandler): New function -+ - (font): New function -+ - (isComposing): New function -+ - (isPreeditRelocationEnabled): New function -+ - (focusWidget): New function -+ - (holderWidget): New function -+ - (setFocusWidget): New function -+ - (setHolderWidget): New function -+ - (releaseComposingWidget): New function -+ - (slave): New function -+ - (slave): New function (const QInputContext *slave() const) -+ - (changeInputMethod): New function -+ - (imEventReceived): New slot -+ * src/input/qmultiinputcontext.cpp -+ - New file. Copyright and licensing information is temporarily -+ adapted to our cirmumstances -+ - (QMultiInputContext): New function -+ - (~QMultiInputContext): New function -+ - (identifierName): New function -+ - (language): New function -+ - (x11FilterEvent): New function. Added based on Cougar's -+ advice. Thanks -+ - (filterEvent): New function. Filters Control+Alt+Key_Down and -+ Control+Alt+Key_Up as IM selection keys as temporary -+ implementation. We should show popup menu -+ - (reset): New function -+ - (setFocus): New function -+ - (unsetFocus): New function -+ - (setMicroFocus): New function -+ - (mouseHandler): New function -+ - (font): New function -+ - (isComposing): New function -+ - (isPreeditRelocationEnabled): New function -+ - (focusWidget): New function -+ - (holderWidget): New function -+ - (setFocusWidget): New function -+ - (setHolderWidget): New function -+ - (releaseComposingWidget): New function -+ - (slave): New function -+ - (slave): New function (const QInputContext *slave() const) -+ - (changeInputMethod): New function -+ - (imEventReceived): New slot -+ * src/input/qinputcontextfactory.cpp -+ - (create): Add QMultiInputContext instanciation. Use the name -+ "multi" to specify it -+ * src/input/qinputcontextfactory.h -+ - Add #include "qinputcontext.h" to avoid compilation error -+ -+ * src/input/qximinputcontext_p.h -+ - (class QXIMInputContext): Add Q_OBJECT macro to follow the API change -+ - (name): Remove to follow the API change -+ - (identifierName): -+ * New function. Renamed from name() -+ * Return type has changed to QCString from QString to follow the -+ API change -+ - (isPreeditRelocationEnabled): Move to public from protected to -+ follow the API change -+ - (isComposing): Remove unnecessary access permission breaker -+ because QInputContext::isComposing() have made public -+ * src/input/qximinputcontext_x11.cpp -+ - (isComposing): Remove unnecessary access permission breaker -+ because QInputContext::isComposing() have made public -+ -+ * src/input/qt_input.pri -+ - Add qmultiinputcontext.h and multiinputcontext.cpp -+ -+2004-07-18 LiuCougar -+ -+ use virtual insert version to make subclasses work as expected (merged from bc-branch r19) -+2004-07-16 Kazuki Ohta -+ -+ * src/input/qinputcontextfactory.h: not the definition of QInputContextPlugin -+ -+2004-07-13 YamaKen -+ -+ * src/kernel/qapplication_x11.cpp -+ - (x11ProcessEvent): Add comment for key event filtering considerations -+ - (QETWidget::translateKeyEvent): Add comment for key compression -+ considerations -+ -+2004-07-11 YamaKen -+ -+ * src/kernel/qwidget.h -+ - (sendMouseEventToInputContext): Move into #if defined(Q_WS_X11) -+ because it is not implemented in other platforms -+ -+2004-07-11 YamaKen -+ -+ * This commit fixes a mismerge with my Simplified API patches -+ -+ * src/kernel/qwidget_x11.cpp -+ - (destroyInputContext): Replace the code with original Simplified -+ API patch. See the comment to recognize the original intention -+ - (focusInputContext): Fix a condition to call qic->setFocus() as -+ originally written. See added comment to recognize the original -+ intention -+ -+ * src/kernel/qwidget.h -+ - (changeInputContext): Move into #if defined(Q_WS_X11) as -+ originally written because it is not implemented in other -+ platforms -+ -+ * src/input/qximinputcontext_p.h -+ - (mouseHandler): Fix a typo as originally written -+ -+ * src/input/qximinputcontext_x11.cpp -+ - Fix a comment location to express original intention -+ -+2004-07-08 LiuCougar -+ -+ replace sendEvent with postEvent in qinputcontext to improve the process performance of IMCompose events -+2004-07-08 YamaKen -+ -+ * Insert the comment 'UPDATED COMMENT REQUIRED' into some places for future -+ modifications -+ * Modify some comments -+ * Replace 'InputMethod' in some comments with 'input method' -+ * Replace 'InputContext' in some comments with 'input context' -+ -+ * src/kernel/qinputcontext.h -+ - Move description of QInputContext to qinputcontext.cpp -+ * src/kernel/qinputcontext.cpp -+ - Move description of QInputContext from qinputcontext.h -+ -+2004-07-07 Daisuke Kameda -+ -+ Adding the function which realize mapping arbitrary input context and widget: -+ QApplication::locateICHolderWidget() -+ QApplication::icHolderWidgets() -+ QWidget::icHolderWidget() -+ QWidget::getInputContext() -+ -+ Adding the function which changes input method: -+ QApplication::changeAllInputContext() -+ QWidget::changeInputContext() -+ QApplication::defaultInputMethod() -+ -+ change QApplication::create_xim() to QApplication::create_im() -+ change QApplication::close_xim() to QApplication::close_im() -+ -+ -+2004-07-06 Daisuke Kameda -+ -+ "QLineEdit should only setMicroFocus if the cursorRect has changed" by cougar -+ -+2004-07-06 Daisuke Kameda -+ -+ Re-Creating immodule for Qt/X11 trunk -+ -+2004-06-22 YamaKen -+ -+ * src/kernel/qinputcontext.h -+ - (sendIMEvent): Private version of sendIMEvent(). Remove to -+ rename to sendIMEventInternal -+ - (sendIMEventInternal): Rename from sendIMEvent and accept -+ discrete variables rather than QEvent *e to be adaptable -+ to Qt/Embedded -+ * src/kernel/qinputcontext.cpp -+ - (sendIMEvent): Protected version of sendIMEvent(). Move -+ QEvent construction to sendIMEventInternal() -+ - (sendIMEvent): Private version of sendIMEvent(). Remove to -+ rename to sendIMEventInternal -+ - (sendIMEventInternal): -+ * Rename from sendIMEvent -+ * accept discrete variables rather than QEvent *e to be -+ adaptable to Qt/Embedded -+ * Add placeholder for Qt/Embedded -+ - (setFocusWidget): Follow specification change of sendIMEvent() -+ -+2004-06-20 YamaKen -+ -+ * src/kernel/qevent.h -+ - (class QIMError): Remove to rename to QIMErrorEvent -+ - (class QIMErrorEvent): Rename from QIMError -+ - (QIMErrorEvent::isDeleteIC): Remove to rename to isDeletionRequest -+ - (QIMErrorEvent::isDeletionRequest): Rename from isDelete -+ -+ * src/kernel/qwidget.h -+ - (imErrorEvent): Follow renaming of QIMError -+ * src/kernel/qwidget.cpp -+ - (imErrorEvent): Follow renaming of QIMError and -+ QIMError::isDeleteIC() -+ - (event): Follow renaming of QIMError -+ -+ * src/kernel/qinputcontext.h -+ - (ownerWidget): Remove to rename to holderWidget -+ - (holderWidget): Rename from ownerWidget -+ - (setOwnerWidget): Remove to rename to setHolderWidget -+ - (setHolderWidget): Rename from setOwnerWidget -+ - (releaseComposingWidget): New function. -+ * src/kernel/qinputcontext.cpp -+ - (class QInputContextPrivate): Rename ownerWidget to holderWidget -+ - (ownerWidget): Remove to rename to holderWidget -+ - (holderWidget): Rename from ownerWidget -+ - (setOwnerWidget): Remove to rename to setHolderWidget -+ - (setHolderWidget): Rename from setOwnerWidget -+ - (sendIMError): Follow renaming of QIMError and -+ QIMError::isDeleteIC() -+ - (releaseComposingWidget): New function. -+ -+ * src/input/qinputcontextfactory.cpp -+ - (create): Follow renaming of QInputContext::setOwnerWidget() -+ -+ * src/kernel/qwidget_x11.cpp -+ - (destroy): Add qic->releaseComposingWidget() to reset -+ preserved composing information involving this widget -+ -+2004-06-15 YamaKen -+ -+ * src/kernel/qwidget_x11.cpp -+ - (setMicroFocusHint): Replace relative coordinate with -+ global one for qic->setMicroFocus(). This is required to -+ share particular IM plugin code with Qt/Embedded -+ -+ * src/widgets/qlineedit.cpp -+ - (sendMouseEventToInputContext): Add button event sending -+ when clicking on out of preedit -+ -+ * src/widgets/qtextedit.cpp -+ - (sendMouseEventToInputContext): Add button event sending -+ when clicking on out of preedit -+ -+ * src/input/qximinputcontext_p.h -+ - (isComposing): New function -+ - (composing, cpos, sellen): Remove to follow API change -+ - (isPreeditRelocationEnabled): New overriding function to -+ follow API change -+ - (isPreeditPreservationEnabled): New function -+ -+ * src/input/qximinputcontext_x11.cpp -+ - (xic_start_callback, xic_draw_callback, xic_done_callback, -+ x11FilterEvent, reset): Replace qic->composing with -+ qic->isComposing() to use automatic compose state tracking -+ of QInputContext -+ - (QXIMInputContext): Remove composing, cpos, sellen from -+ initializer list -+ - (sendIMEvent): Remove remembering of cpos, sellen -+ - (reset): Replace IMEnd event sending with -+ QInputContext::reset() -+ - (resetClientState): Remove cpos, sellen, composing -+ - (isComposing): Exported interface for xic callbacks to -+ access protected QInputContext::isComposing() -+ - (setMicroFocus): Follow API change that replaces relative -+ coordinate with global one -+ - (mouseHandler): Add approprate reset on clicking -+ - (setFocus, unsetFocus): Remove preedit preservation and -+ relocation to follow API change. They are moved to -+ QInputContext as generarization -+ - (isPreeditRelocationEnabled): New function to follow API -+ change. -+ - (isPreeditPreservationEnabled): New function. This -+ indicates that whether preedit state should be preserved -+ or not when focusing out the widget -+ -+2004-06-14 YamaKen -+ -+ * src/kernel/qinputcontext.h -+ - (setFocus): Remove hasPreservedPreedit arg -+ - (unsetFocus): Remove preservePreedit arg -+ - (isPreeditRelocationEnabled): New function -+ - (isComposing): New function -+ -+ * src/kernel/qinputcontext.cpp -+ - (class QInputContextPrivate): Reorganize variables for -+ preedit relocation -+ - (QInputContextPrivate::resetComposingState): New function -+ - (QInputContextPrivate::updateComposingState): New function -+ - (setFocusWidget): Add preedit relocation support. Preedit -+ state is relocated to another text widget when the shared -+ context has focused on the another text widget. This -+ feature is mainly used by Japanese input methods -+ - (isPreeditRelocationEnabled): New function. Preedit -+ relocation is enabled only if this function returned TRUE. -+ - (isComposing): New function. Returns current composing -+ state as result of automatic compose state tracking -+ through sendIMEvent(). The function is for used by -+ subclass of QInputContext to know preedit state of the -+ widget. Although QWidget and QInputContextFactory can -+ access to the function as friend, they must not use the -+ function to know composing state of contexts. Keep less -+ relationship to simplify input method development -+ - (sendIMEvent): New 1-arg overloaded function. The function -+ encupsulates platform-dependent IMEvent sending. Only -+ Q_WS_X11 is supported for now. Q_WS_QWS should be supported -+ - (sendIMEvent): -+ * 4-args version of the overloaded function -+ * Isolate platform-dependent event sending process to -+ separated function -+ * Add preedit relocation support -+ * Add compose state tracking support -+ - (unsetFocus): Add reset() for simple ephemeral input -+ contexts -+ - (mouseHandler): Add reset() when clicking for simple -+ ephemeral input contexts -+ - (reset): Add preedit finalization code. Overriding -+ function should call this function to ensure proper -+ preedit state -+ -+2004-06-11 YamaKen -+ -+ * src/kernel/qlineedit.cpp -+ - (QLineEditPrivate::xToPosInternal, QLineEditPrivate::xToPos): -+ Fix loose placement to tail when clicking beyond the string -+ -+2004-06-10 YamaKen -+ -+ * src/kernel/qinputcontext.h -+ - Remove several pointers to QWidget to share concrete IM -+ implementation code with Qt/Embedded. The IM model of -+ Qt/Embedded requires that widgets and input contexts are -+ existing in another process -+ - (QInputContext): Remove the QWidget * arg -+ - (focusWidget, ownerWidget): -+ * Move to protected and unrecommended -+ * Move the inline function definition to qinputcontext.cpp -+ - (filterEvent): Remove unnecessary keywidget -+ - (setFocus): -+ * Remove newFocusWidget arg -+ * Add hasPreservedPreedit arg -+ - (unsetFocus): Add preservePreedit arg -+ - (sendIMError): New function to hide ownerWidget from -+ derived QInputContext -+ - (composingWidget, setComposingWidget): New function to support -+ preedit relocation of shared context on focus transition -+ - (setFocusWidget, setOwnerWidget): New function to -+ implement internal functionality on Qt/X11 platform -+ - (d): New variable to hide ABI change -+ - (QInputContext, operator=): New function to disable copy -+ constructor and operator= -+ -+ * src/kernel/qinputcontext.cpp -+ - (class QInputContextPrivate): New class to hide ABI change -+ - (QInputContext): -+ * Follow API change -+ * Follow introducing QInputContextPrivate -+ - (~QInputContext): Follow introducing QInputContextPrivate -+ - (ownerWidget): -+ * Move from qinputcontext.h -+ * Follow introducing QInputContextPrivate -+ - (setOwnerWidget): New function to complement removal of -+ the arg of QInputContext constructor -+ - (composingWidget, setComposingWidget): New function. These -+ functions are participating with preedit relocation of shared -+ context on focus transition -+ - (focusWidget): -+ * Move from qinputcontext.h -+ * Follow introducing QInputContextPrivate -+ * Follow introducing composingWidget -+ - (setFocusWidget): New function to complement removal of -+ the QWidget * arg of setFocus() -+ - (filterEvent): Follow API change of removal of keywidget -+ - (sendIMEvent): Add #ifdef to isolate Qt/X11 dependent code -+ - (sendIMError): New function to hide ownerWidget() from -+ derived QInputContext. This is required to share particular -+ IM plugin code with Qt/Embedded -+ - (setFocus, unsetFocus): Follow API change -+ -+ * src/input/qinputcontextfactory.cpp -+ - (create): Add ownerWidget initialization for new context -+ -+ * src/kernel/qwidget.cpp -+ - (setFocus): Remove unnecessary shared input context -+ checking -+ -+ * src/kernel/qwidget_x11.cpp -+ - (setActiveWindow): Replace duplicated code with -+ focusInputContext() -+ - (getInputContext): Return input context only if -+ isInputMethodEnabled() widget, otherwise returns 0. This -+ is required for proper focus transition handling -+ - (unfocusInputContext): Follow API change of -+ QInputContext::unsetFocus() -+ -+ * src/kernel/qapplication.cpp -+ - (setActiveWindow): Follow change of QWidget::unfocusInputContext() -+ -+ * src/kernel/qapplication_x11.cpp -+ - (x11ProcessEvent): Follow API change of -+ QInputContext::filterEvent() -+ -+ * src/input/qximinputcontext_p.h -+ - (setFocus, unsetFocus): Follow API Change -+ - (hasFocus): New function -+ - (close): New function -+ -+ * src/input/qximinputcontext.cpp -+ - Remove unrecommended focusWidget() and ownerWidget() -+ - (ximWidgetList): Remove to replace with ximContextList -+ - (ximContextList): New variable -+ - (xic_draw_callback): Replace focusWidget() with hasFocus() -+ to follow API Change -+ - (QXIMInputContext): -+ * Follow API change -+ * Follow replacing to ximContextList -+ - (~QXIMInputContext): -+ * Follow replacing to ximContextList -+ * Remove unnecessary QInputContext::unsetFocus() -+ - (close_xim): -+ * Follow replacing to ximContextList -+ * Follow API change -+ - (close, hasFocus): New function. Exported interface for -+ xic_draw_callback to access protected features -+ - (setFocus, unsetFocus): Follow API change -+ -+2004-06-09 YamaKen -+ -+ * src/kernel/qwidget.cpp -+ -+ - (hide): Remove unfocusInputContext(). This caused -+ excessive invalid QInputContext::unsetFocus(). -+ QWidget::deactivateWidgetCleanup() handles -+ unfocusInputContext() appropriately via -+ qApp->setActiveWindow( 0 ). -+ -+2004-06-08 YamaKen -+ -+ * src/kernel/qrichtext_p.h -+ - (QTextCursor::place): New 5-args overloaded function -+ - (QTextCursor::place): 3-args version of the function is -+ reimplemented as inline function using new 5-args one. -+ * src/kernel/qrichtext.cpp -+ - (QTextCursor::place): Remove 3-args version of the function -+ - (QTextCursor::place): New 5-args overloaded function. This -+ is copied from 3-args one and added new args loosePlacing -+ and matchBetweenCharacters -+ -+ * src/widgets/qtextedit.cpp -+ - (sendMouseEventToInputContext): Send mouse event when only -+ mouse cursor is placed within preedit area. This is -+ accomplished by new 5-args QTextCursor::place() -+ - (contentsContextMenuEvent): Disable context menu when in -+ IM composing state -+ - (drawContents): Add updateMicroFocusHint() to follow -+ dragging of active window by the showed candidate window -+ - (contentsMouseMoveEvent): Fix cursor vanishing on IM -+ composing state -+ -+ * src/kernel/qlineedit.cpp -+ - (sendMouseEventToInputContext): Exclude character at -+ preedit[preeditLength] from being handled as preedit -+ - (contextMenuEvent): Disable context menu when in IM -+ composing state -+ - (focusInEvent): Fix invalid MicroFocusHint position which -+ caused that candidate window is always showed at end of -+ the preedit when active window is show() back -+ -+2004-06-07 YamaKen -+ -+ * src/kernel/qwidget_x11.cpp -+ - (reparentSys): Fix an invalid assumption about input -+ context location involving destroyInputContext() -+ - (deleteTLSysExtra): Remove destroyInputContext() because -+ the input context is not a extra data and should be -+ destroyed in QWidget::destroy() -+ - (destroyInputContext): Remove icHolderWidget() because -+ this function is called to destroy the input context that -+ belongs to the widget itself -+ - (destroy): Replace 'this->ic' with 'ic' -+ - (create): Replace 'this->ic' with 'ic' -+ -+ * src/kernel/qwidget.cpp -+ - (hide): Add unfocusInputContext() -+ -+ * src/kernel/qapplication.cpp -+ - (setActiveWindow): Add unfocusInputContext() -+ -+ * src/kernel/qlineedit.cpp -+ - (QLineEditPrivate::xToPosInternal): New function. Copied -+ from xToPos and Remove the safety limiter. -+ - (QLineEditPrivate::xToPos): Reimprement using xToPosInternal -+ - (sendMouseEventToInputContext): -+ * Fix position boundary as matching with character -+ boundary rather than center of character -+ * Send mouse event when only mouse cursor is placed within -+ preedit area. This is accomplished by replacing xToPos() -+ with xToPosInternal() -+ -+2004-06-04 YamaKen -+ -+ * src/kernel/qinputcontext.h -+ - (font): New function. Returns the font of focusWidget() -+ * src/kernel/qinputcontext.cpp -+ - (font): New function -+ -+ * src/kernel/qwidget_x11.cpp -+ - (setActiveWindow, focusInputContext): Avoid calling -+ qic->setFocus() if the target is identical widget -+ - (setMicroFocusHint, setActiveWindow, createInputContext, -+ destroyInputContext, resetInputContext, -+ focusInputContext): Remove obsolete comment around qic -+ retrieving -+ -+ * src/input/qximinputcontext_x11.cpp -+ - (language): Return Chinese languages appropriately (such -+ as "zh_CN") -+ -+2004-06-03 YamaKen -+ -+ * src/kernel/qinputcontext.h -+ - (getOwnerWidget): Remove to rename to ownerWidget -+ - (ownerWidget): New function. Rename from getOwnerWidget to -+ be consistent with the name focusWidget -+ - (focusWidget): New function. Add to make IM-related -+ communication with focusWidget easy. The name is imported -+ from QApplication::focusWidget to be supposed same role -+ - (language): Change return type to QCString from const char * -+ - (filterEvent): Change args. Passes QEvent *event rather than -+ preexpanded key event values. This is intended to pass other -+ IM-related events in future. The IM-related events are -+ supposed as QWheelEvent, QTabletEvent and so on -+ - (setFocusHint): Remove to be appropriate name -+ - (setMicroFocus): -+ * Rename from setFocusHint to be appropriate name. This -+ function instructs 'MicroFocus' rect within a widget that -+ is different to normal focus for widgets, so the name -+ 'setFocus' is invalid. And 'Hint' is a concept for the -+ manager of this class and loses the meaning when passed to -+ this class. The passed values are not a hint but have -+ well-defined actual effect, so the name 'Hint' is -+ invalid. Finally, Qt/Embedded 2.3.7 has a samely named -+ method in QWSInputMethod -+ * Remove the arg 'widget' to consistent with the new -+ focusWidget() method -+ - (mouseHandler): New function. The method interface is -+ imported from QWSInputMethod::mouseHandler() of Qt/Embedded -+ 2.3.7 and extended for desktop system -+ - (sendIMEvent): New function. Conventional function to send -+ QIMEvent to appropriate widget using focusWidget(). IM -+ developers can send IMEvents without tracking focuswidget by -+ themself -+ - (ownerWidget): Remove to Rename to _ownerWidget -+ - (_ownerWidget): New variable. Renamed from ownerWidget to -+ avoid name conflict with ownerWidget() -+ - (_focusWidget): New variable. -+ * src/kernel/qinputcontext.cpp -+ - (QInputContext): Follow API change -+ - (~QInputContext): Clean up -+ - (filterEvent): Follow API change -+ - (sendIMEvent): New function. -+ - (setFocusHint): Remove to follow new API -+ - (setMicroFocus): copied from setFocusHint and reimplement to -+ follow new API -+ - (mouseHandler): New function -+ - (language): Follow API change -+ -+ * src/kernel/qwidget.h -+ - (sendMouseEventToInputContext): New function -+ - (unfocusInputContext): New function -+ -+ * src/kernel/qwidget.cpp -+ - (setFocus): Invoke unfocusInputContext() with previous -+ focus widget to delegate reset responsibility to input -+ context instead of resetInputContext() directly. See also -+ comment for further information -+ - (clearFocus): Add unfocusInputContext(); -+ - (event): Delegate reset responsibility to input context -+ instead of resetInputContext() directly. See also comment -+ for further information -+ -+ * src/kernel/qwidget_x11.cpp -+ - (setMicroFocusHint): Modify to follow API change -+ - (setActiveWindow): Modify to follow API change -+ - (focusInputContext): Modify to follow API change -+ - (unfocusInputContext): New function -+ - (sendMouseEventToInputContext): New function -+ -+ * src/kernel/qapplication_x11.cpp -+ - (class QETWidget): Change translateKeyEventInternal definition -+ - (x11ProcessEvent): Change QInputContext::filterEvent() -+ invocation to follow API change -+ - (translateKeyEventInternal): -+ * Add new arg statefulTranslation to enable duplicate call -+ within single event loop. This is required to support both -+ QInputContext::filterEvent() and RTL extensions -+ * Restore accidencially omitted qt_mode_switch_remove_mask -+ handling -+ -+ * src/input/qximinputcontext_p.h -+ - (class QXIMInputContext): Follow API change of QInputContext -+ - (language): Change return type to follow new API -+ - (setFocus): Change arg to follow new API -+ - (setFocusHint): Remove to follow new API -+ - (setMicroFocus): New method to follow new API -+ - (mouseHandler): New method to follow new API -+ - (sendIMEvent): New method (reimp) -+ - (focusWidget): Remove to follow new API -+ - (cpos): New variable -+ - (sellen): New variable -+ * src/input/qximinputcontext_x11.cpp -+ - (qt_compose_emptied): Remove as result of optimization. It -+ has become unnecessary now -+ - (xic_start_callback): Add IMStart event sending as -+ result of optimization -+ - (xic_draw_callback): Optimize state management for IMEvent -+ sending, and simplify using sendIMEvent() -+ - (xic_done_callback): Simplify using sendIMEvent() -+ - (QXIMInputContext): -+ * Follow class definition change -+ * Follow API change -+ - (~QXIMInputContext): Modify to follow API change -+ - (x11FilterEvent): Optimize state management for IMEvent -+ sending, and simplify using sendIMEvent() -+ - (sendIMEvent): New function. Implement to remember last -+ IMEvent information -+ - (reset): Simplify using sendIMEvent() -+ - (resetClientState): Follow class definition change -+ - (setFocusHint): Remove to follow new API -+ - (setMicroFocus): copied from setFocusHint and modified to -+ follow new API -+ - (mouseHandler): New function. Implemented to reset the -+ context on MouseButtonPress except for Japanese IM. See -+ also comment for further information -+ - (setFocus): Reimplement to follow new API. Automatically -+ handles appropriate IMEvent sending on focus transition -+ - (unsetFocus): Reimplement to follow new API. Implemented to -+ reset the context on FocusOut except for Japanese IM. See -+ also comment for further information -+ -+ * src/widgets/qlineedit.h -+ - (sendMouseEventToInputContext): New function -+ * src/widgets/qlineedit.cpp -+ - (QLineEditPrivate::composeMode): New function -+ - (QLineEditPrivate::hasIMSelection): New function -+ - (QLineEditPrivate::preeditLength): New function -+ - (QLineEditPrivate::imSelectionLength): New function -+ - (mousePressEvent, mouseMoveEvent, mouseReleaseEvent, -+ mouseDoubleClickEvent): Support QInputContext::mouseHandler() -+ - (sendMouseEventToInputContext): New function. Retrieve the -+ position and call QWidget::sendMouseEventToInputContext() -+ - (drawContents): Follow API change -+ -+ * src/widgets/qtextedit.h -+ - (sendMouseEventToInputContext): New function -+ * src/widgets/qtextedit.cpp -+ - (QTextEditPrivate::composeMode): New function -+ - (sendMouseEventToInputContext): New function. Retrieve the -+ position and call QWidget::sendMouseEventToInputContext() -+ - (imComposeEvent, imEndEvent): Clean up with composeMode() -+ - (contentsMousePressEvent, contentsMouseMoveEvent, -+ contentsMouseReleaseEvent, contentsMouseDoubleClickEvent): -+ Support QInputContext::mouseHandler() -+ -+2004-06-01 YamaKen -+ -+ * src/input/qximinputcontext_x11.cpp (x11FilterEvent): Fix -+ commit problem except for on-the-spot style -+ -+2004-05-31 YamaKen -+ -+ * First 'Simplified API' patch. A lot of changes to be described -+ -+2004-03-16 Daisuke Kameda -+ -+ * A lot of changes to be described before this date. Almost -+ of code are written by Daisuke Kameda ---- changes.immodule -+++ changes.immodule -@@ -0,0 +1,248 @@ -+This file describes significant change from -+qt-x11-immodule-bc-qt3.3.2-20040623. -+ -+Differences from previous release -+(qt-x11-immodule-unified-qt3.3.3-20040819) are itemized with '+' -+sign. Search it to track incremental change. -+ -+**************************************************************************** -+* For users * -+**************************************************************************** -+ -+General -+------- -+ -++ A strange character inversion problem on some input methods has been -+ fixed -+ -+ -+Input methods -+------------- -+ -+- Added "simple" input method which provides dead/multi key composing -+ for latin languages -+ -+ -+User Interface -+-------------- -+ -+- Added input method selection menu in the context menu of text -+ widgets -+ -+ -+Configuration -+------------- -+ -++ default IM configuration feature of qtconfig has been disabled in BC -+ mode. This is a political change to avoid the confusion about input -+ method configuration in accordance with GTK+ environment. -+ -+ See following discussion for further information. -+ -+ http://freedesktop.org/pipermail/immodule-qt/2004-August/000416.html -+ -+- Added new environment variables QT_IM_SWITCHER and QT_IM_MODULE to -+ set user's favorite input method as default. See README.immodule for -+ examples. -+ -+ -+Build & Install -+--------------- -+ -++ configure options have been changed for internal reasons. See 'How -+ to install' section of README.immodule -+ -+- This version of immodule requires corresponding version of each -+ input method plugins (i.e. update your additional input method -+ plugins) -+ -+- Plugin directory has been changed from $QTDIR/plugins/input/ to -+ $QTDIR/plugins/inputmethods/. Delete old directory. -+ -+- Some codes have been changed to allow compiling against Qt 3.2.x or -+ earlier. -+ -+ -+**************************************************************************** -+* For develpers * -+**************************************************************************** -+ -+Documents -+--------- -+ -+- Almost description of QInputContext and QInputContextPlugin has been -+ filled. Feel free to ask obscure things at our mailinglist. -+ -+ -+New features -+------------ -+ -+- Pluggable input method switcher -+ -+ Now we can write input method switcher as an ordinary input method -+ plugin. The two plugins 'imsw-multi' and 'imsw-none' are provided as -+ default. But the architecture needs more discussion about whether -+ the design is right or not. Join the discussion. -+ -+- Pluggable popup menu -+ -+ Any input method can provide its own popup menu. See -+ http://freedesktop.org/pipermail/immodule-qt/2004-August/000266.html -+ for further information. -+ -+- QInputContext proxying -+ -+ Some methods of QInputContext have been changed to enable -+ QInputContext proxying. This feature is required to implement -+ pluggable input method switcher. -+ -+ -+General -+------- -+ -++ QInputContext has been source compatible with Qt4 version. Basic -+ input method plugin can be source compatible without #ifdef. Only -+ pluggable popup menu requires #ifdef'ed different code. In addition, -+ be careful about use of classes that is deprecated in Qt4. -+ -+- Our two development tree for Qt3 'Binary Compatible' and 'ALL' have -+ been merged into this unified source tree. The source tree is called -+ 'Unified' patch. -+ -+- 'dead keys' for latin languages have been added into Qt::Key -+ -+- Added plugins/src/inputmethods directory to build input method -+ plugins within the Qt source tree. The directory name 'inputmethods' -+ is intended to be compatible with Qt/Embedded. Install directory -+ name is still kept as 'input' for backward compatibility -+ -+- Changed XIM input method to a plugin instead of directly link into -+ libqt -+ -+- Plugin directory has been changed from $QTDIR/plugins/input/ to -+ $QTDIR/plugins/inputmethods/. Replace install directory with new -+ one. -+ -+- Fixed some bugs in previous qt-x11-immodule-bc-qt3.3.2-20040623. See -+ following log for more detail. -+ -+ * src/kernel/qwidget_x11.cpp -+ - (destroyInputContext): Replace the code with original Simplified -+ API patch. See the comment to recognize the original intention -+ - (focusInputContext): Fix a condition to call qic->setFocus() as -+ originally written. See added comment to recognize the original -+ intention -+ -+- QLocale dependency has been removed to be compiled on Qt 3.2.x or -+ earlier -+ -+- Many internal improvements and cleanups -+ -+ -+API Changes in qt-x11-immodule-unified-qt3.3.3-20040910 -+------------------------------------------------------- -++ QInputContext -+ -+ * QInputContext() -+ -+ Added 'parent' arg to be compatible with Qt4. Since the arg -+ defaults to 0, no modification of plugins are required. -+ -+ * language() -+ * identifierName() -+ -+ Return type of these two methods have been changed from QCString -+ which is deprecated in Qt4 to QString to make plugins source -+ compatible with Qt4. -+ -+ * addActionsTo() -+ -+ New method for Qt4 text widget developer -+ -+ -+API Changes in qt-x11-immodule-unified-qt3.3.3-20040812 -+------------------------------------------------------- -+ -+- QInputContext proxying -+ -+ QInputContext have been changed as follows to enable QInputContext -+ proxying. -+ -+ 1. Use signal to deliver QIMEvent instead of explicit -+ postEvent(). This enables QIMEvent proxying and better platform -+ abstraction. Corresponding slot is created as -+ QApplication::imEventReceived(). -+ -+ 2. Move some methods of QInputContext to public from protected or -+ private. This enables that proxy-IM can access slave methods. -+ -+ 3. Make some methods of QInputContext virtual. This enables -+ overriding the methods as proxy -+ -+ 4. Rename QInputContext::name() to identifierName() to avoid -+ conflicting with QObject::name() -+ -+ -+- QInputContext -+ -+ * language() -+ -+ New method to indicate current language -+ -+ * menus() -+ -+ New method for the pluggable popup menu feature -+ -+ * addMenusTo() -+ -+ New method for text widget developer -+ -+ * deletionRequested() -+ -+ New signal to request deletion of this instance. This is added for -+ fatal error handling -+ -+ * identifierName() -+ -+ This replaces name() of previous API to avoid conflicting with -+ QObject::name(), and to distinguish the role from displayName() -+ -+ * filterEvent() -+ -+ Turn the argument into const. See -+ http://freedesktop.org/pipermail/immodule-qt/2004-August/000335.html -+ for further information -+ -+ * isComposing -+ * isPreeditRelocationEnabled -+ -+ Move to public from protected to allow proxying -+ -+ * setFocusWidget -+ * setHolderWidget -+ * releaseComposingWidget -+ -+ Move to public from private to allow proxying -+ -+ * focusWidget -+ * holderWidget -+ -+ - Make public from protected to allow proxying -+ - Make virtual to allow overriding the method as proxy -+ -+- QInputContextPlugin -+ -+ * languages() -+ -+ New method which returns what languages are supported by the -+ QInputContext instance -+ -+ * displayName() -+ -+ New method which returns a user friendly i18n-ized name of the -+ QInputContext instance -+ -+ * description() -+ -+ New method which returns a i18n-ized brief description of the -+ QInputContext instance ---- configure -+++ configure -@@ -223,7 +223,7 @@ - fi - - # licensed modules depend on type of commercial license --MODULES="styles tools kernel widgets dialogs iconview workspace" -+MODULES="styles tools kernel widgets dialogs iconview workspace inputmethod" - [ "$PLATFORM_QWS" = "yes" ] && [ "$Products" = "qt-professional" ] && MODULES="$MODULES network" - [ "$Products" != "qt-professional" ] && MODULES="$MODULES network canvas table xml opengl sql" - CFG_MODULES_AVAILABLE=$MODULES -@@ -270,6 +270,9 @@ - CFG_SQL_AUTODETECTED= - CFG_GFX_AVAILABLE= - CFG_STYLE_AVAILABLE= -+#Keep this position for CFG_IM* to avoid patch rejection -+CFG_IM=yes -+CFG_IM_EXT=no - CFG_TABLET=auto - CFG_XKB=auto - CFG_NIS=auto -@@ -401,6 +404,12 @@ - VAR=fatal_error - VAL=no - ;; -+ #Qt style yes options for immodule -+ #Keep this place to avoid patch rejection -+ -inputmethod|-inputmethod-ext) -+ VAR=`echo $1 | sed "s,^-\(.*\),\1,"` -+ VAL=yes -+ ;; - -embedded) - VAR=embedded - # this option may or may not be followed by an argument -@@ -1020,6 +1029,20 @@ - dlopen-opengl) - CFG_DLOPEN_OPENGL="$VAL" - ;; -+ inputmethod) -+ if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then -+ CFG_IM="$VAL" -+ else -+ UNKNOWN_OPT=yes -+ fi -+ ;; -+ inputmethod-ext) -+ if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then -+ CFG_IM_EXT="$VAL" -+ else -+ UNKNOWN_OPT=yes -+ fi -+ ;; - *) - UNKNOWN_OPT=yes - ;; -@@ -1899,6 +1922,13 @@ - CFG_GFX_AVAILABLE=`echo $CFG_GFX_AVAILABLE` - fi - -+# immodule extensions -+if [ "$CFG_IM" = "no" ]; then -+ CFG_IM_EXT=no -+fi -+if [ "$CFG_IM_EXT" = "yes" ]; then -+ CFG_IM=yes -+fi - - #------------------------------------------------------------------------------- - # help - interactive parts of the script _after_ this section please -@@ -2206,6 +2236,20 @@ - XKY="*" - XKN=" " - fi -+ if [ "$CFG_IM" = "no" ]; then -+ IMY=" " -+ IMN="*" -+ else -+ IMY="*" -+ IMN=" " -+ fi -+ if [ "$CFG_IM_EXT" = "no" ]; then -+ IXY=" " -+ IXN="*" -+ else -+ IXY="*" -+ IXN=" " -+ fi - cat << EOF - - Qt/X11 only: -@@ -2254,6 +2298,14 @@ - -dlopen-opengl ..... Qt uses dlopen(3) to resolve OpenGL functions - (instead of linking with OpenGL libraries directly). - -+ $IMN -no-inputmethod .... Do not compile immodule (extensible input method) -+ support. -+ $IMY -inputmethod ....... Compile immodule support. -+ -+ $IXN -no-inputmethod-ext Do not compile more immodule extensions support. -+ $IXY -inputmethod-ext ... Compile more immodule extensions support. -+ (breaks ABI with standard Qt3). -+ - EOF - fi - -@@ -2983,6 +3035,16 @@ - if [ "$CFG_XKB" = "yes" ]; then - QMAKE_CONFIG="$QMAKE_CONFIG xkb" - fi -+ if [ "$CFG_IM" = "yes" ]; then -+ QMAKE_CONFIG="$QMAKE_CONFIG inputmethod" -+ elif [ "$CFG_IM" = "no" ]; then -+ QCONFIG_FLAGS="$QCONFIG_FLAGS QT_NO_IM" -+ fi -+ if [ "$CFG_IM_EXT" = "yes" ]; then -+ QMAKE_CONFIG="$QMAKE_CONFIG inputmethod-ext" -+ elif [ "$CFG_IM_EXT" = "no" ]; then -+ QCONFIG_FLAGS="$QCONFIG_FLAGS QT_NO_IM_EXTENSIONS" -+ fi - elif [ "$PLATFORM_MAC" = "yes" ]; then - if [ "$CFG_TABLET" = "yes" ]; then - QMAKE_CONFIG="$QMAKE_CONFIG tablet" -@@ -3107,7 +3169,7 @@ - # minimal-config small-config medium-config large-config full-config - # - # Modules: --# styles tools kernel widgets dialogs iconview workspace -+# styles tools kernel widgets dialogs iconview workspace inputmethod - # - # Enterprise/Open Source edition modules: - # network canvas table xml opengl sql -@@ -3115,6 +3177,8 @@ - # Options: - # stl - # -+# X11 : inputmethod-ext -+# - # Things that do not affect the Qt API/ABI: - # system-jpeg no-jpeg jpeg - # system-mng no-mng mng -@@ -3136,10 +3200,10 @@ - # tablet - # ipv6 - # --# X11 : xftnameunparse x11sm xinerama xcursor xrandr xrender xftfreetype xkb -+# X11 : xftnameunparse x11sm xinerama xcursor xrandr xrender xftfreetype xkb inputmethod - # Embedded: embedded ft - # --ALL_OPTIONS="styles tools kernel widgets dialogs iconview workspace network canvas table xml opengl sql stl" -+ALL_OPTIONS="styles tools kernel widgets dialogs iconview workspace inputmethod network canvas table xml opengl sql stl" - BUILD_CONFIG= - BUILD_OPTIONS= - -@@ -3153,7 +3217,7 @@ - BUILD_CONFIG="$config_option" - ;; - -- styles|tools|kernel|widgets|dialogs|iconview|workspace|network|canvas|table|xml|opengl|sql|stl) -+ styles|tools|kernel|widgets|dialogs|iconview|workspace|inputmethod|network|canvas|table|xml|opengl|sql|stl) - # these config options affect the Qt API/ABI. they should influence - # the generation of the buildkey, so we don't skip them - SKIP="no" -@@ -3500,6 +3564,8 @@ - echo "XRender support ..... $CFG_XRENDER" - echo "Xft support ......... $CFG_FREETYPE" - echo "XKB Support ......... $CFG_XKB" -+ echo "immodule support .... $CFG_IM" -+ echo "immodule ext support $CFG_IM_EXT" - elif [ "$PLATFORM_MAC" = "yes" ]; then - echo "Accessibility ....... $CFG_ACCESSIBILITY" - echo "Tablet support ...... $CFG_TABLET" ---- make-symlinks.sh -+++ make-symlinks.sh -@@ -0,0 +1,12 @@ -+#!/bin/sh -+cd include -+rm -f q*.h -+ln -s ../src/*/q*.h . -+ln -s ../extensions/*/src/q*.h . -+ln -s ../tools/assistant/lib/qassistantclient.h . -+ln -s ../tools/designer/uilib/qwidgetfactory.h . -+rm -f q*_p.h -+cd private -+rm -f q*_p.h -+ln -s ../../src/*/q*_p.h . -+ ---- plugins/src/inputmethods/imsw-multi/imsw-multi.pro -+++ plugins/src/inputmethods/imsw-multi/imsw-multi.pro -@@ -0,0 +1,14 @@ -+TEMPLATE = lib -+TARGET = qimsw-multi -+DESTDIR = ../../../inputmethods -+ -+INCLUDEPATH += . -+CONFIG += qt warn_on debug plugin -+target.path += $$plugins.path/inputmethods -+INSTALLS += target -+ -+# Input -+HEADERS += qmultiinputcontext.h \ -+ qmultiinputcontextplugin.h -+SOURCES += qmultiinputcontext.cpp \ -+ qmultiinputcontextplugin.cpp ---- plugins/src/inputmethods/imsw-multi/qmultiinputcontext.cpp -+++ plugins/src/inputmethods/imsw-multi/qmultiinputcontext.cpp -@@ -0,0 +1,379 @@ -+/**************************************************************************** -+** $Id$ -+** -+** Implementation of QMultiInputContext class -+** -+** Copyright (C) 2004 immodule for Qt Project. All rights reserved. -+** -+** This file is written to contribute to Trolltech AS under their own -+** licence. You may use this file under your Qt license. Following -+** description is copied from their original file headers. Contact -+** immodule-qt@freedesktop.org if any conditions of this licensing are -+** not clear to you. -+** -+** -+** This file is part of the input method module of the Qt GUI Toolkit. -+** -+** This file may be distributed under the terms of the Q Public License -+** as defined by Trolltech AS of Norway and appearing in the file -+** LICENSE.QPL included in the packaging of this file. -+** -+** This file may be distributed and/or modified under the terms of the -+** GNU General Public License version 2 as published by the Free Software -+** Foundation and appearing in the file LICENSE.GPL included in the -+** packaging of this file. -+** -+** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition -+** licenses may use this file in accordance with the Qt Commercial License -+** Agreement provided with the Software. -+** -+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -+** -+** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for -+** information about Qt Commercial License Agreements. -+** See http://www.trolltech.com/qpl/ for QPL licensing information. -+** See http://www.trolltech.com/gpl/ for GPL licensing information. -+** -+** Contact info@trolltech.com if any conditions of this licensing are -+** not clear to you. -+** -+**********************************************************************/ -+ -+#ifndef QT_NO_IM -+#include "qmultiinputcontext.h" -+#include -+#include -+#include -+#ifndef QT_NO_IM_EXTENSIONS -+#include -+#endif -+ -+#include -+ -+#define QT_NO_IM_QMULTIINPUTCONTEXT_IMINDEX -+ -+QMultiInputContext::QMultiInputContext() -+ : QInputContext(), _slave( 0 ), imIndex( 0 ), cachedFocus( FALSE ), -+ cachedFocusWidget( 0 ), cachedHolderWidget( 0 ), -+ beIndirectlyConnected( FALSE ), popup( NULL ), currentIMKey( QString::null ) -+{ -+ keyDict.setAutoDelete( true ); -+ keyDict.clear(); -+ -+ if ( getenv( "QT_IM_MODULE" ) ) { -+ currentIMKey = getenv( "QT_IM_MODULE" ); -+ } else { -+#ifndef QT_NO_IM_EXTENSIONS -+ QSettings settings; -+ currentIMKey = settings.readEntry( "/qt/DefaultInputMethod", "xim" ); -+#else -+ currentIMKey = "xim"; -+#endif -+ } -+} -+ -+QMultiInputContext::~QMultiInputContext() -+{ -+ keyDict.clear(); -+} -+ -+ -+QString QMultiInputContext::identifierName() -+{ -+ return ( slave() ) ? slave()->identifierName() : ""; -+} -+ -+QString QMultiInputContext::language() -+{ -+ return ( slave() ) ? slave()->language() : ""; -+} -+ -+ -+#if defined(Q_WS_X11) -+bool QMultiInputContext::x11FilterEvent( QWidget *keywidget, XEvent *event ) -+{ -+ return ( slave() ) ? slave()->x11FilterEvent( keywidget, event ) : FALSE; -+} -+#endif // Q_WS_X11 -+ -+ -+bool QMultiInputContext::filterEvent( const QEvent *event ) -+{ -+#if !defined(QT_NO_IM_QMULTIINPUTCONTEXT_IMINDEX) -+ if ( event->type() == QEvent::KeyPress ) { -+ QKeyEvent *keyevent = (QKeyEvent *)event; -+ -+ // filter selection key -+ // Control+Alt+Key_Down: change to next input method -+ // Control+Alt+Key_Up: change to previous input method -+ if ( ( keyevent->state() & Qt::ControlButton ) && -+ ( keyevent->state() & Qt::AltButton ) ) { -+ if ( keyevent->key() == Qt::Key_Up ) { -+ changeInputMethod( --imIndex ); -+ return TRUE; -+ } else if ( keyevent->key() == Qt::Key_Down ) { -+ changeInputMethod( ++imIndex ); -+ return TRUE; -+ } -+ } -+ } -+#endif -+ -+ return ( slave() ) ? slave()->filterEvent( event ) : FALSE; -+} -+ -+void QMultiInputContext::reset() -+{ -+ if ( slave() ) -+ slave()->reset(); -+} -+ -+ -+void QMultiInputContext::setFocus() -+{ -+ cachedFocus = TRUE; -+ if ( slave() ) -+ slave()->setFocus(); -+} -+ -+void QMultiInputContext::unsetFocus() -+{ -+ cachedFocus = FALSE; -+ if ( slave() ) -+ slave()->unsetFocus(); -+} -+ -+void QMultiInputContext::setMicroFocus( int x, int y, int w, int h, QFont *f ) -+{ -+ if ( slave() ) -+ slave()->setMicroFocus( x, y, w, h, f ); -+} -+ -+void QMultiInputContext::mouseHandler( int x, QEvent::Type type, -+ Qt::ButtonState button, -+ Qt::ButtonState state ) -+{ -+ if ( slave() ) -+ slave()->mouseHandler( x, type, button, state ); -+} -+ -+QFont QMultiInputContext::font() const -+{ -+ return ( slave() ) ? slave()->font() : QInputContext::font(); -+} -+ -+void QMultiInputContext::destroyInputContext() -+{ -+ if ( _slave ) { -+ // _slave->reset() may not properly work in the case, so we -+ // manually resets the composing state of text widget -+ if ( _slave->focusWidget() ) { -+ QIMEvent *terminator = new QIMEvent( QEvent::IMEnd, QString::null, -1 ); -+ emit imEventGenerated( _slave->focusWidget(), terminator ); -+ } -+ _slave->deleteLater(); -+ _slave = 0; -+ } -+} -+ -+ -+/*! -+ This function is a placeholder for future experiment or extension -+ such as commit string snooping. set beIndirectlyConnected = TRUE -+ to activate this virtual function. -+*/ -+void QMultiInputContext::postIMEvent( QObject *receiver, QIMEvent *event ) -+{ -+ emit imEventGenerated( receiver, event ); -+} -+ -+ -+#if defined(Q_WS_X11) -+QWidget *QMultiInputContext::focusWidget() const -+{ -+ return ( slave() ) ? slave()->focusWidget() : 0; -+} -+ -+QWidget *QMultiInputContext::holderWidget() const -+{ -+ return ( slave() ) ? slave()->holderWidget() : 0; -+} -+ -+ -+void QMultiInputContext::setFocusWidget( QWidget *w ) -+{ -+ cachedFocusWidget = w; -+ if ( slave() ) -+ slave()->setFocusWidget( w ); -+} -+ -+void QMultiInputContext::setHolderWidget( QWidget *w ) -+{ -+ cachedHolderWidget = w; -+ if ( slave() ) -+ slave()->setHolderWidget( w ); -+} -+ -+void QMultiInputContext::releaseComposingWidget( QWidget *w ) -+{ -+ if ( slave() ) -+ slave()->releaseComposingWidget( w ); -+} -+ -+#endif -+ -+bool QMultiInputContext::isComposing() const -+{ -+ return ( slave() ) ? slave()->isComposing() : FALSE; -+} -+ -+bool QMultiInputContext::isPreeditRelocationEnabled() -+{ -+ return ( slave() ) ? slave()->isPreeditRelocationEnabled() : FALSE; -+} -+ -+QInputContext *QMultiInputContext::slave() -+{ -+ if ( ! _slave ) { -+#if !defined(QT_NO_IM_QMULTIINPUTCONTEXT_IMINDEX) -+ changeInputMethod( imIndex ); -+#else -+ changeInputMethod( currentIMKey ); -+#endif -+ } -+ -+ return _slave; -+} -+ -+const QInputContext *QMultiInputContext::slave() const -+{ -+ return _slave; -+} -+ -+void QMultiInputContext::changeInputMethod( int newIndex ) -+{ -+#if !defined(QT_NO_IM_QMULTIINPUTCONTEXT_IMINDEX) -+ QStringList keys = QInputContextFactory::keys(); -+ if ( keys.size() == 0 ) -+ return; -+ -+ if ( newIndex >= (int)keys.size() ) { -+ imIndex = 0; -+ } else if ( newIndex < 0 ) { -+ imIndex = keys.size() - 1; -+ } else { -+ imIndex = newIndex; -+ } -+ -+ changeInputMethod( keys[imIndex] ); -+#endif -+} -+ -+void QMultiInputContext::changeInputMethod( QString key ) -+{ -+ QStringList keys = QInputContextFactory::keys(); -+ if ( keys.size() == 0 ) -+ return; -+ -+ if ( key.isEmpty() ) -+ key = keys[0]; -+ -+ if ( _slave ) { -+ _slave->reset(); -+ delete _slave; -+ } -+ -+ _slave = QInputContextFactory::create( key, cachedHolderWidget ); -+ if ( _slave ) { -+ insertChild( _slave ); -+ -+ const char *method; -+ if ( beIndirectlyConnected ) { -+ method = SLOT(imEventReceived(QObject *,QIMEvent *)); -+ } else { -+ method = SIGNAL(imEventGenerated(QObject *,QIMEvent *)); -+ } -+ connect( _slave, SIGNAL(imEventGenerated(QObject *,QIMEvent *)), -+ this, method ); -+ connect( _slave, SIGNAL(deletionRequested()), -+ this, SLOT(destroyInputContext()) ); -+ -+ if ( cachedFocus ) { -+ _slave->setFocus(); -+ _slave->setFocusWidget( cachedFocusWidget ); -+ } -+ -+ currentIMKey = key; -+ -+ //qDebug( "QMultiInputContext::changeInputMethod(): index=%d, slave=%s", -+ // imIndex, (const char *)_slave->identifierName() ); -+ } -+} -+ -+QPtrList *QMultiInputContext::menus() -+{ -+ QInputContextMenu *imSelMenu = new QInputContextMenu; -+ imSelMenu->title = tr( "Select Input &Method" ); -+ imSelMenu->popup = createImSelPopup(); -+ -+ QPtrList *result = new QPtrList; -+ result->append( imSelMenu ); -+ -+ QPtrList *slaveMenus = ( slave() ) ? slave()->menus() : 0; -+ if ( slaveMenus ) { -+ for ( QPtrList::Iterator it = slaveMenus->begin(); -+ it != slaveMenus->end(); -+ ++it ) { -+ QInputContextMenu *slaveMenu = *it; -+ result->append( slaveMenu ); -+ } -+ delete slaveMenus; -+ } -+ -+ return result; -+} -+ -+QPopupMenu *QMultiInputContext::createImSelPopup() -+{ -+ if ( popup ) -+ delete popup; -+ -+ popup = new QPopupMenu(); -+ keyDict.clear(); -+ -+ QStringList keys = QInputContextFactory::keys(); -+ for ( uint i=0; i < keys.size(); i++ ) { -+ QString idName = keys[i]; -+ bool isIMSwitcher = idName.startsWith( "imsw-" ); -+ -+ if ( ! isIMSwitcher ) { -+ QString dispName = QInputContextFactory::displayName( idName ); -+ if ( dispName.isEmpty() ) -+ dispName = idName; -+ -+ int id = popup->insertItem( dispName ); -+ keyDict.insert( (long)id, new QString( idName ) ); -+ -+ if ( idName == currentIMKey ) -+ popup->setItemChecked( id, true ); -+ -+ QString descriptionStr = QInputContextFactory::description( idName ); -+ if ( ! descriptionStr.isEmpty() ) -+ popup->setWhatsThis( id, descriptionStr ); -+ } -+ } -+ -+ QObject::connect( popup, SIGNAL(activated(int)), -+ this, SLOT(changeInputMethodWithMenuId(int)) ); -+ -+ return popup; -+} -+ -+void QMultiInputContext::changeInputMethodWithMenuId( int menuid ) -+{ -+ QString *key = keyDict.find( (long)menuid ); -+ changeInputMethod( (*key) ); -+} -+ -+#endif ---- plugins/src/inputmethods/imsw-multi/qmultiinputcontext.h -+++ plugins/src/inputmethods/imsw-multi/qmultiinputcontext.h -@@ -0,0 +1,124 @@ -+/**************************************************************************** -+** $Id$ -+** -+** Definition of QMultiInputContext class -+** -+** Copyright (C) 2004 immodule for Qt Project. All rights reserved. -+** -+** This file is written to contribute to Trolltech AS under their own -+** licence. You may use this file under your Qt license. Following -+** description is copied from their original file headers. Contact -+** immodule-qt@freedesktop.org if any conditions of this licensing are -+** not clear to you. -+** -+** -+** This file is part of the input method module of the Qt GUI Toolkit. -+** -+** This file may be distributed under the terms of the Q Public License -+** as defined by Trolltech AS of Norway and appearing in the file -+** LICENSE.QPL included in the packaging of this file. -+** -+** This file may be distributed and/or modified under the terms of the -+** GNU General Public License version 2 as published by the Free Software -+** Foundation and appearing in the file LICENSE.GPL included in the -+** packaging of this file. -+** -+** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition -+** licenses may use this file in accordance with the Qt Commercial License -+** Agreement provided with the Software. -+** -+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -+** -+** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for -+** information about Qt Commercial License Agreements. -+** See http://www.trolltech.com/qpl/ for QPL licensing information. -+** See http://www.trolltech.com/gpl/ for GPL licensing information. -+** -+** Contact info@trolltech.com if any conditions of this licensing are -+** not clear to you. -+** -+**********************************************************************/ -+ -+#ifndef QMULTIINPUTCONTEXT_H -+#define QMULTIINPUTCONTEXT_H -+ -+#ifndef QT_NO_IM -+ -+#include -+#include -+#include -+#include -+#include -+ -+class QPopupMenu; -+ -+class QMultiInputContext : public QInputContext -+{ -+ Q_OBJECT -+public: -+ QMultiInputContext(); -+ ~QMultiInputContext(); -+ -+ QString identifierName(); -+ QString language(); -+ -+#if defined(Q_WS_X11) -+ bool x11FilterEvent( QWidget *keywidget, XEvent *event ); -+#endif // Q_WS_X11 -+ bool filterEvent( const QEvent *event ); -+ void reset(); -+ -+ void setFocus(); -+ void unsetFocus(); -+ void setMicroFocus( int x, int y, int w, int h, QFont *f = 0 ); -+ void mouseHandler( int x, QEvent::Type type, -+ Qt::ButtonState button, Qt::ButtonState state ); -+ QFont font() const; -+ bool isComposing() const; -+ bool isPreeditRelocationEnabled(); -+ -+#if (QT_VERSION-0 >= 0x040000) -+ QPtrList *qt4menus(); -+#endif -+ QPtrList *menus(); -+ QPopupMenu *createImSelPopup(); -+ -+#if defined(Q_WS_X11) -+ QWidget *focusWidget() const; -+ QWidget *holderWidget() const; -+ -+ void setFocusWidget( QWidget *w ); -+ void setHolderWidget( QWidget *w ); -+ void releaseComposingWidget( QWidget *w ); -+#endif -+ -+public slots: -+ virtual void destroyInputContext(); -+ virtual void postIMEvent( QObject *receiver, QIMEvent *event ); -+ -+protected slots: -+ void changeInputMethodWithMenuId( int menuid ); -+ -+protected: -+ QInputContext *slave(); -+ const QInputContext *slave() const; -+ -+ void changeInputMethod( int newIndex ); -+ void changeInputMethod( QString name ); -+ -+ QInputContext *_slave; -+ int imIndex; -+ bool cachedFocus; -+ QWidget *cachedFocusWidget; -+ QWidget *cachedHolderWidget; -+ bool beIndirectlyConnected; -+ -+ QIntDict keyDict; -+ QGuardedPtr popup; -+ QString currentIMKey; -+}; -+ -+#endif //Q_NO_IM -+ -+#endif // QMULTIINPUTCONTEXT_H ---- plugins/src/inputmethods/imsw-multi/qmultiinputcontextplugin.cpp -+++ plugins/src/inputmethods/imsw-multi/qmultiinputcontextplugin.cpp -@@ -0,0 +1,88 @@ -+/**************************************************************************** -+** $Id$ -+** -+** Implementation of QMultiInputContextPlugin class -+** -+** Copyright (C) 2004 immodule for Qt Project. All rights reserved. -+** -+** This file is written to contribute to Trolltech AS under their own -+** licence. You may use this file under your Qt license. Following -+** description is copied from their original file headers. Contact -+** immodule-qt@freedesktop.org if any conditions of this licensing are -+** not clear to you. -+** -+** -+** This file is part of the input method module of the Qt GUI Toolkit. -+** -+** This file may be distributed under the terms of the Q Public License -+** as defined by Trolltech AS of Norway and appearing in the file -+** LICENSE.QPL included in the packaging of this file. -+** -+** This file may be distributed and/or modified under the terms of the -+** GNU General Public License version 2 as published by the Free Software -+** Foundation and appearing in the file LICENSE.GPL included in the -+** packaging of this file. -+** -+** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition -+** licenses may use this file in accordance with the Qt Commercial License -+** Agreement provided with the Software. -+** -+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -+** -+** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for -+** information about Qt Commercial License Agreements. -+** See http://www.trolltech.com/qpl/ for QPL licensing information. -+** See http://www.trolltech.com/gpl/ for GPL licensing information. -+** -+** Contact info@trolltech.com if any conditions of this licensing are -+** not clear to you. -+** -+**********************************************************************/ -+ -+#ifndef QT_NO_IM -+#include "qmultiinputcontext.h" -+#include "qmultiinputcontextplugin.h" -+#include -+#include -+ -+ -+QMultiInputContextPlugin::QMultiInputContextPlugin() -+{ -+} -+ -+QMultiInputContextPlugin::~QMultiInputContextPlugin() -+{ -+} -+ -+QStringList QMultiInputContextPlugin::keys() const -+{ -+ // input method switcher should named with "imsw-" prefix to -+ // prevent to be listed in ordinary input method list. -+ return QStringList( "imsw-multi" ); -+} -+ -+QInputContext *QMultiInputContextPlugin::create( const QString &key ) -+{ -+ return new QMultiInputContext; -+} -+ -+QStringList QMultiInputContextPlugin::languages( const QString &key ) -+{ -+ return QStringList( "" ); -+} -+ -+QString QMultiInputContextPlugin::displayName( const QString &key ) -+{ -+ return tr( "Multiple Input Method Switcher" ); -+} -+ -+QString QMultiInputContextPlugin::description( const QString &key ) -+{ -+ return tr( "Multiple input method switcher that uses the context menu of the text widgets" ); -+} -+ -+ -+Q_EXPORT_PLUGIN( QMultiInputContextPlugin ) -+ -+#endif ---- plugins/src/inputmethods/imsw-multi/qmultiinputcontextplugin.h -+++ plugins/src/inputmethods/imsw-multi/qmultiinputcontextplugin.h -@@ -0,0 +1,63 @@ -+/**************************************************************************** -+** $Id$ -+** -+** Definition of QMultiInputContextPlugin class -+** -+** Copyright (C) 2004 immodule for Qt Project. All rights reserved. -+** -+** This file is written to contribute to Trolltech AS under their own -+** licence. You may use this file under your Qt license. Following -+** description is copied from their original file headers. Contact -+** immodule-qt@freedesktop.org if any conditions of this licensing are -+** not clear to you. -+** -+** -+** This file is part of the input method module of the Qt GUI Toolkit. -+** -+** This file may be distributed under the terms of the Q Public License -+** as defined by Trolltech AS of Norway and appearing in the file -+** LICENSE.QPL included in the packaging of this file. -+** -+** This file may be distributed and/or modified under the terms of the -+** GNU General Public License version 2 as published by the Free Software -+** Foundation and appearing in the file LICENSE.GPL included in the -+** packaging of this file. -+** -+** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition -+** licenses may use this file in accordance with the Qt Commercial License -+** Agreement provided with the Software. -+** -+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -+** -+** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for -+** information about Qt Commercial License Agreements. -+** See http://www.trolltech.com/qpl/ for QPL licensing information. -+** See http://www.trolltech.com/gpl/ for GPL licensing information. -+** -+** Contact info@trolltech.com if any conditions of this licensing are -+** not clear to you. -+** -+**********************************************************************/ -+ -+#ifndef QT_NO_IM -+#include "qmultiinputcontext.h" -+#include -+#include -+ -+ -+class QMultiInputContextPlugin : public QInputContextPlugin -+{ -+ Q_OBJECT -+public: -+ QMultiInputContextPlugin(); -+ ~QMultiInputContextPlugin(); -+ -+ QStringList keys() const; -+ QInputContext *create( const QString &key ); -+ QStringList languages( const QString &key ); -+ QString displayName( const QString &key ); -+ QString description( const QString &key ); -+}; -+ -+#endif ---- plugins/src/inputmethods/imsw-none/imsw-none.pro -+++ plugins/src/inputmethods/imsw-none/imsw-none.pro -@@ -0,0 +1,12 @@ -+TEMPLATE = lib -+TARGET = qimsw-none -+DESTDIR = ../../../inputmethods -+ -+INCLUDEPATH += . -+CONFIG += qt warn_on debug plugin -+target.path += $$plugins.path/inputmethods -+INSTALLS += target -+ -+# Input -+HEADERS += qnoneinputcontextplugin.h -+SOURCES += qnoneinputcontextplugin.cpp ---- plugins/src/inputmethods/imsw-none/qnoneinputcontextplugin.cpp -+++ plugins/src/inputmethods/imsw-none/qnoneinputcontextplugin.cpp -@@ -0,0 +1,101 @@ -+/**************************************************************************** -+** $Id$ -+** -+** Implementation of QNoneInputContextPlugin class -+** -+** Copyright (C) 2004 immodule for Qt Project. All rights reserved. -+** -+** This file is written to contribute to Trolltech AS under their own -+** licence. You may use this file under your Qt license. Following -+** description is copied from their original file headers. Contact -+** immodule-qt@freedesktop.org if any conditions of this licensing are -+** not clear to you. -+** -+** -+** This file is part of the input method module of the Qt GUI Toolkit. -+** -+** This file may be distributed under the terms of the Q Public License -+** as defined by Trolltech AS of Norway and appearing in the file -+** LICENSE.QPL included in the packaging of this file. -+** -+** This file may be distributed and/or modified under the terms of the -+** GNU General Public License version 2 as published by the Free Software -+** Foundation and appearing in the file LICENSE.GPL included in the -+** packaging of this file. -+** -+** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition -+** licenses may use this file in accordance with the Qt Commercial License -+** Agreement provided with the Software. -+** -+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -+** -+** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for -+** information about Qt Commercial License Agreements. -+** See http://www.trolltech.com/qpl/ for QPL licensing information. -+** See http://www.trolltech.com/gpl/ for GPL licensing information. -+** -+** Contact info@trolltech.com if any conditions of this licensing are -+** not clear to you. -+** -+**********************************************************************/ -+ -+#ifndef QT_NO_IM -+#include "qnoneinputcontextplugin.h" -+#include -+#include -+#include -+ -+ -+QNoneInputContextPlugin::QNoneInputContextPlugin() -+{ -+} -+ -+QNoneInputContextPlugin::~QNoneInputContextPlugin() -+{ -+} -+ -+QStringList QNoneInputContextPlugin::keys() const -+{ -+ // input method switcher should named with "imsw-" prefix to -+ // prevent to be listed in ordinary input method list. -+ return QStringList( "imsw-none" ); -+} -+ -+QInputContext *QNoneInputContextPlugin::create( const QString &key ) -+{ -+ QString actuallySpecifiedKey; -+ -+ bool isIMSwitcher = key.startsWith( "imsw-" ); -+ if ( ! isIMSwitcher ) -+ return 0; -+ -+ if ( getenv( "QT_IM_MODULE" ) ) { -+ actuallySpecifiedKey = getenv( "QT_IM_MODULE" ); -+ } else { -+ QSettings settings; -+ actuallySpecifiedKey = settings.readEntry( "/qt/DefaultInputMethod", "xim" ); -+ } -+ -+ return QInputContextFactory::create( actuallySpecifiedKey, 0 ); -+} -+ -+QStringList QNoneInputContextPlugin::languages( const QString &key ) -+{ -+ return QStringList( "" ); -+} -+ -+QString QNoneInputContextPlugin::displayName( const QString &key ) -+{ -+ return tr( "Dummy Input Method Switcher" ); -+} -+ -+QString QNoneInputContextPlugin::description( const QString &key ) -+{ -+ return tr( "Dummy input method switcher that uses the context menu of the text widgets" ); -+} -+ -+ -+Q_EXPORT_PLUGIN( QNoneInputContextPlugin ) -+ -+#endif ---- plugins/src/inputmethods/imsw-none/qnoneinputcontextplugin.h -+++ plugins/src/inputmethods/imsw-none/qnoneinputcontextplugin.h -@@ -0,0 +1,62 @@ -+/**************************************************************************** -+** $Id$ -+** -+** Definition of QNoneInputContextPlugin class -+** -+** Copyright (C) 2004 immodule for Qt Project. All rights reserved. -+** -+** This file is written to contribute to Trolltech AS under their own -+** licence. You may use this file under your Qt license. Following -+** description is copied from their original file headers. Contact -+** immodule-qt@freedesktop.org if any conditions of this licensing are -+** not clear to you. -+** -+** -+** This file is part of the input method module of the Qt GUI Toolkit. -+** -+** This file may be distributed under the terms of the Q Public License -+** as defined by Trolltech AS of Norway and appearing in the file -+** LICENSE.QPL included in the packaging of this file. -+** -+** This file may be distributed and/or modified under the terms of the -+** GNU General Public License version 2 as published by the Free Software -+** Foundation and appearing in the file LICENSE.GPL included in the -+** packaging of this file. -+** -+** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition -+** licenses may use this file in accordance with the Qt Commercial License -+** Agreement provided with the Software. -+** -+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -+** -+** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for -+** information about Qt Commercial License Agreements. -+** See http://www.trolltech.com/qpl/ for QPL licensing information. -+** See http://www.trolltech.com/gpl/ for GPL licensing information. -+** -+** Contact info@trolltech.com if any conditions of this licensing are -+** not clear to you. -+** -+**********************************************************************/ -+ -+#ifndef QT_NO_IM -+#include -+#include -+ -+ -+class QNoneInputContextPlugin : public QInputContextPlugin -+{ -+ Q_OBJECT -+public: -+ QNoneInputContextPlugin(); -+ ~QNoneInputContextPlugin(); -+ -+ QStringList keys() const; -+ QInputContext *create( const QString &key ); -+ QStringList languages( const QString &key ); -+ QString displayName( const QString &key ); -+ QString description( const QString &key ); -+}; -+ -+#endif ---- plugins/src/inputmethods/inputmethods.pro -+++ plugins/src/inputmethods/inputmethods.pro -@@ -0,0 +1,11 @@ -+TEMPLATE = subdirs -+ -+unix { -+ !embedded:!mac:CONFIG += x11 -+} -+# XIM should be enabled only for X11 platform, but following -+# configuration is not working properly yet -+#im:x11:SUBDIRS += xim -+ -+inputmethod:SUBDIRS += imsw-none imsw-multi simple -+inputmethod:SUBDIRS += xim ---- plugins/src/inputmethods/simple/composetable.cpp -+++ plugins/src/inputmethods/simple/composetable.cpp -@@ -0,0 +1,5605 @@ -+/**************************************************************************** -+** $Id$ -+** -+** Compose table for QSimpleInputContext class -+** -+** Copyright (C) 2004 immodule for Qt Project. All rights reserved. -+** -+** This file is written to contribute to Trolltech AS under their own -+** licence. You may use this file under your Qt license. Following -+** description is copied from their original file headers. Contact -+** immodule-qt@freedesktop.org if any conditions of this licensing are -+** not clear to you. -+** -+** -+** This file is part of the input method module of the Qt GUI Toolkit. -+** -+** This file may be distributed under the terms of the Q Public License -+** as defined by Trolltech AS of Norway and appearing in the file -+** LICENSE.QPL included in the packaging of this file. -+** -+** This file may be distributed and/or modified under the terms of the -+** GNU General Public License version 2 as published by the Free Software -+** Foundation and appearing in the file LICENSE.GPL included in the -+** packaging of this file. -+** -+** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition -+** licenses may use this file in accordance with the Qt Commercial License -+** Agreement provided with the Software. -+** -+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -+** -+** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for -+** information about Qt Commercial License Agreements. -+** See http://www.trolltech.com/qpl/ for QPL licensing information. -+** See http://www.trolltech.com/gpl/ for GPL licensing information. -+** -+** Contact info@trolltech.com if any conditions of this licensing are -+** not clear to you. -+** -+**********************************************************************/ -+ -+// The compose table included in file is converted from a Compose file -+// of X.org's X11R6.7.0. Original header is follows -+ -+// UTF-8 (Unicode) compose sequence -+// David.Monniaux@ens.fr -+// -+// $XFree86: xc/nls/Compose/en_US.UTF-8,v 1.11 2004/01/06 13:14:04 pascal Exp $ -+ -+ -+#include "qsimpleinputcontext.h" -+ -+#include -+ -+static const QComposeTableElement defaultTable[] = { -+// /* broken */ { {0x0000, 0x0000, 0, 0, 0, 0}, 0x1eda }, // U1EDA # LATIN CAPITAL LETTER O WITH HORN AND ACUTE -+// /* broken */ { {0x0000, 0x0000, 0, 0, 0, 0}, 0x1edb }, // U1EDB # LATIN SMALL LETTER O WITH HORN AND ACUTE -+// /* broken */ { {0x0000, 0x0000, 0, 0, 0, 0}, 0x1edc }, // U1EDC # LATIN CAPITAL LETTER O WITH HORN AND GRAVE -+// /* broken */ { {0x0000, 0x0000, 0, 0, 0, 0}, 0x1edd }, // U1EDD # LATIN SMALL LETTER O WITH HORN AND GRAVE -+// /* broken */ { {0x0000, 0x0000, 0, 0, 0, 0}, 0x1ede }, // U1EDE # LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE -+// /* broken */ { {0x0000, 0x0000, 0, 0, 0, 0}, 0x1edf }, // U1EDF # LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE -+// /* broken */ { {0x0000, 0x0000, 0, 0, 0, 0}, 0x1ee3 }, // U1EE3 # LATIN SMALL LETTER O WITH HORN AND DOT BELOW -+// /* broken */ { {0x0000, 0x0000, 0, 0, 0, 0}, 0x1ee1 }, // U1EE1 # LATIN SMALL LETTER O WITH HORN AND TILDE -+// /* broken */ { {0x0000, 0x0000, 0, 0, 0, 0}, 0x1ee2 }, // U1EE2 # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW -+// /* broken */ { {0x0000, 0x0000, 0, 0, 0, 0}, 0x1ef1 }, // U1EF1 # LATIN SMALL LETTER U WITH HORN AND DOT BELOW -+// /* broken */ { {0x0000, 0x0000, 0, 0, 0, 0}, 0x1ef0 }, // U1EF0 # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW -+// /* broken */ { {0x0000, 0x0000, 0, 0, 0, 0}, 0x1eef }, // U1EEF # LATIN SMALL LETTER U WITH HORN AND TILDE -+// /* broken */ { {0x0000, 0x0000, 0, 0, 0, 0}, 0x1eee }, // U1EEE # LATIN CAPITAL LETTER U WITH HORN AND TILDE -+// /* broken */ { {0x0000, 0x0000, 0, 0, 0, 0}, 0x1eed }, // U1EED # LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE -+// /* broken */ { {0x0000, 0x0000, 0, 0, 0, 0}, 0x1eec }, // U1EEC # LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE -+// /* broken */ { {0x0000, 0x0000, 0, 0, 0, 0}, 0x1eeb }, // U1EEB # LATIN SMALL LETTER U WITH HORN AND GRAVE -+// /* broken */ { {0x0000, 0x0000, 0, 0, 0, 0}, 0x1eea }, // U1EEA # LATIN CAPITAL LETTER U WITH HORN AND GRAVE -+// /* broken */ { {0x0000, 0x0000, 0, 0, 0, 0}, 0x1ee9 }, // U1EE9 # LATIN SMALL LETTER U WITH HORN AND ACUTE -+// /* broken */ { {0x0000, 0x0000, 0, 0, 0, 0}, 0x1ee8 }, // U1EE8 # LATIN CAPITAL LETTER U WITH HORN AND ACUTE -+// /* broken */ { {0x0000, 0x0000, 0, 0, 0, 0}, 0x1ee0 }, // U1EE0 # LATIN CAPITAL LETTER O WITH HORN AND TILDE -+// /* broken */ { {0x0000, 0x0000, 0x004f, 0, 0, 0}, 0x1e4c }, // U1E4C # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE -+// /* broken */ { {0x0000, 0x0000, 0x0055, 0, 0, 0}, 0x1e78 }, // U1E78 # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE -+// /* broken */ { {0x0000, 0x0000, 0x006f, 0, 0, 0}, 0x1e4d }, // U1E4D # LATIN SMALL LETTER O WITH TILDE AND ACUTE -+// /* broken */ { {0x0000, 0x0000, 0x0075, 0, 0, 0}, 0x1e79 }, // U1E79 # LATIN SMALL LETTER U WITH TILDE AND ACUTE -+// /* broken */ { {0x0000, 0x0041, 0, 0, 0, 0}, 0x00c1 }, // U00C1 # LATIN CAPITAL LETTER A WITH ACUTE -+// /* broken */ { {0x0000, 0x0041, 0, 0, 0, 0}, 0x00c0 }, // U00C0 # LATIN CAPITAL LETTER A WITH GRAVE -+// /* broken */ { {0x0000, 0x0041, 0, 0, 0, 0}, 0x00c3 }, // U00C3 # LATIN CAPITAL LETTER A WITH TILDE -+// /* broken */ { {0x0000, 0x0041, 0, 0, 0, 0}, 0x1ea2 }, // U1EA2 # LATIN CAPITAL LETTER A WITH HOOK ABOVE -+// /* broken */ { {0x0000, 0x0041, 0, 0, 0, 0}, 0x1ea0 }, // U1EA0 # LATIN CAPITAL LETTER A WITH DOT BELOW -+// /* broken */ { {0x0000, 0x0042, 0, 0, 0, 0}, 0x1e04 }, // U1E04 # LATIN CAPITAL LETTER B WITH DOT BELOW -+// /* broken */ { {0x0000, 0x0043, 0, 0, 0, 0}, 0x0106 }, // U0106 # LATIN CAPITAL LETTER C WITH ACUTE -+// /* broken */ { {0x0000, 0x0044, 0, 0, 0, 0}, 0x1e0c }, // U1E0C # LATIN CAPITAL LETTER D WITH DOT BELOW -+// /* broken */ { {0x0000, 0x0045, 0, 0, 0, 0}, 0x1ebc }, // U1EBC # LATIN CAPITAL LETTER E WITH TILDE -+// /* broken */ { {0x0000, 0x0045, 0, 0, 0, 0}, 0x1eb8 }, // U1EB8 # LATIN CAPITAL LETTER E WITH DOT BELOW -+// /* broken */ { {0x0000, 0x0045, 0, 0, 0, 0}, 0x00c9 }, // U00C9 # LATIN CAPITAL LETTER E WITH ACUTE -+// /* broken */ { {0x0000, 0x0045, 0, 0, 0, 0}, 0x00c8 }, // U00C8 # LATIN CAPITAL LETTER E WITH GRAVE -+// /* broken */ { {0x0000, 0x0045, 0, 0, 0, 0}, 0x1eba }, // U1EBA # LATIN CAPITAL LETTER E WITH HOOK ABOVE -+// /* broken */ { {0x0000, 0x0047, 0, 0, 0, 0}, 0x01f4 }, // U01F4 # LATIN CAPITAL LETTER G WITH ACUTE -+// /* broken */ { {0x0000, 0x0048, 0, 0, 0, 0}, 0x1e24 }, // U1E24 # LATIN CAPITAL LETTER H WITH DOT BELOW -+// /* broken */ { {0x0000, 0x0049, 0, 0, 0, 0}, 0x00cd }, // U00CD # LATIN CAPITAL LETTER I WITH ACUTE -+// /* broken */ { {0x0000, 0x0049, 0, 0, 0, 0}, 0x00cc }, // U00CC # LATIN CAPITAL LETTER I WITH GRAVE -+// /* broken */ { {0x0000, 0x0049, 0, 0, 0, 0}, 0x1ec8 }, // U1EC8 # LATIN CAPITAL LETTER I WITH HOOK ABOVE -+// /* broken */ { {0x0000, 0x0049, 0, 0, 0, 0}, 0x0128 }, // U0128 # LATIN CAPITAL LETTER I WITH TILDE -+// /* broken */ { {0x0000, 0x0049, 0, 0, 0, 0}, 0x1eca }, // U1ECA # LATIN CAPITAL LETTER I WITH DOT BELOW -+// /* broken */ { {0x0000, 0x004b, 0, 0, 0, 0}, 0x1e30 }, // U1E30 # LATIN CAPITAL LETTER K WITH ACUTE -+// /* broken */ { {0x0000, 0x004b, 0, 0, 0, 0}, 0x1e32 }, // U1E32 # LATIN CAPITAL LETTER K WITH DOT BELOW -+// /* broken */ { {0x0000, 0x004c, 0, 0, 0, 0}, 0x0139 }, // U0139 # LATIN CAPITAL LETTER L WITH ACUTE -+// /* broken */ { {0x0000, 0x004c, 0, 0, 0, 0}, 0x1e36 }, // U1E36 # LATIN CAPITAL LETTER L WITH DOT BELOW -+// /* broken */ { {0x0000, 0x004d, 0, 0, 0, 0}, 0x1e42 }, // U1E42 # LATIN CAPITAL LETTER M WITH DOT BELOW -+// /* broken */ { {0x0000, 0x004d, 0, 0, 0, 0}, 0x1e3e }, // U1E3E # LATIN CAPITAL LETTER M WITH ACUTE -+// /* broken */ { {0x0000, 0x004e, 0, 0, 0, 0}, 0x1e46 }, // U1E46 # LATIN CAPITAL LETTER N WITH DOT BELOW -+// /* broken */ { {0x0000, 0x004e, 0, 0, 0, 0}, 0x0143 }, // U0143 # LATIN CAPITAL LETTER N WITH ACUTE -+// /* broken */ { {0x0000, 0x004e, 0, 0, 0, 0}, 0x01f8 }, // U01F8 # LATIN CAPITAL LETTER N WITH GRAVE -+// /* broken */ { {0x0000, 0x004e, 0, 0, 0, 0}, 0x00d1 }, // U00D1 # LATIN CAPITAL LETTER N WITH TILDE -+// /* broken */ { {0x0000, 0x004f, 0, 0, 0, 0}, 0x00d5 }, // U00D5 # LATIN CAPITAL LETTER O WITH TILDE -+// /* broken */ { {0x0000, 0x004f, 0, 0, 0, 0}, 0x00d3 }, // U00D3 # LATIN CAPITAL LETTER O WITH ACUTE -+// /* broken */ { {0x0000, 0x004f, 0, 0, 0, 0}, 0x1ecc }, // U1ECC # LATIN CAPITAL LETTER O WITH DOT BELOW -+// /* broken */ { {0x0000, 0x004f, 0, 0, 0, 0}, 0x00d2 }, // U00D2 # LATIN CAPITAL LETTER O WITH GRAVE -+// /* broken */ { {0x0000, 0x004f, 0, 0, 0, 0}, 0x1ece }, // U1ECE # LATIN CAPITAL LETTER O WITH HOOK ABOVE -+// /* broken */ { {0x0000, 0x0050, 0, 0, 0, 0}, 0x1e54 }, // U1E54 # LATIN CAPITAL LETTER P WITH ACUTE -+// /* broken */ { {0x0000, 0x0052, 0, 0, 0, 0}, 0x1e5a }, // U1E5A # LATIN CAPITAL LETTER R WITH DOT BELOW -+// /* broken */ { {0x0000, 0x0052, 0, 0, 0, 0}, 0x0154 }, // U0154 # LATIN CAPITAL LETTER R WITH ACUTE -+// /* broken */ { {0x0000, 0x0053, 0, 0, 0, 0}, 0x015a }, // U015A # LATIN CAPITAL LETTER S WITH ACUTE -+// /* broken */ { {0x0000, 0x0053, 0, 0, 0, 0}, 0x1e62 }, // U1E62 # LATIN CAPITAL LETTER S WITH DOT BELOW -+// /* broken */ { {0x0000, 0x0054, 0, 0, 0, 0}, 0x1e6c }, // U1E6C # LATIN CAPITAL LETTER T WITH DOT BELOW -+// /* broken */ { {0x0000, 0x0055, 0, 0, 0, 0}, 0x00da }, // U00DA # LATIN CAPITAL LETTER U WITH ACUTE -+// /* broken */ { {0x0000, 0x0055, 0, 0, 0, 0}, 0x00d9 }, // U00D9 # LATIN CAPITAL LETTER U WITH GRAVE -+// /* broken */ { {0x0000, 0x0055, 0, 0, 0, 0}, 0x0168 }, // U0168 # LATIN CAPITAL LETTER U WITH TILDE -+// /* broken */ { {0x0000, 0x0055, 0, 0, 0, 0}, 0x1ee4 }, // U1EE4 # LATIN CAPITAL LETTER U WITH DOT BELOW -+// /* broken */ { {0x0000, 0x0055, 0, 0, 0, 0}, 0x1ee6 }, // U1EE6 # LATIN CAPITAL LETTER U WITH HOOK ABOVE -+// /* broken */ { {0x0000, 0x0056, 0, 0, 0, 0}, 0x1e7e }, // U1E7E # LATIN CAPITAL LETTER V WITH DOT BELOW -+// /* broken */ { {0x0000, 0x0056, 0, 0, 0, 0}, 0x1e7c }, // U1E7C # LATIN CAPITAL LETTER V WITH TILDE -+// /* broken */ { {0x0000, 0x0057, 0, 0, 0, 0}, 0x1e82 }, // U1E82 # LATIN CAPITAL LETTER W WITH ACUTE -+// /* broken */ { {0x0000, 0x0057, 0, 0, 0, 0}, 0x1e88 }, // U1E88 # LATIN CAPITAL LETTER W WITH DOT BELOW -+// /* broken */ { {0x0000, 0x0057, 0, 0, 0, 0}, 0x1e80 }, // U1E80 # LATIN CAPITAL LETTER W WITH GRAVE -+// /* broken */ { {0x0000, 0x0059, 0, 0, 0, 0}, 0x1ef8 }, // U1EF8 # LATIN CAPITAL LETTER Y WITH TILDE -+// /* broken */ { {0x0000, 0x0059, 0, 0, 0, 0}, 0x1ef2 }, // U1EF2 # LATIN CAPITAL LETTER Y WITH GRAVE -+// /* broken */ { {0x0000, 0x0059, 0, 0, 0, 0}, 0x00dd }, // U00DD # LATIN CAPITAL LETTER Y WITH ACUTE -+// /* broken */ { {0x0000, 0x0059, 0, 0, 0, 0}, 0x1ef6 }, // U1EF6 # LATIN CAPITAL LETTER Y WITH HOOK ABOVE -+// /* broken */ { {0x0000, 0x0059, 0, 0, 0, 0}, 0x1ef4 }, // U1EF4 # LATIN CAPITAL LETTER Y WITH DOT BELOW -+// /* broken */ { {0x0000, 0x005a, 0, 0, 0, 0}, 0x0179 }, // U0179 # LATIN CAPITAL LETTER Z WITH ACUTE -+// /* broken */ { {0x0000, 0x005a, 0, 0, 0, 0}, 0x1e92 }, // U1E92 # LATIN CAPITAL LETTER Z WITH DOT BELOW -+// /* broken */ { {0x0000, 0x0061, 0, 0, 0, 0}, 0x1ea1 }, // U1EA1 # LATIN SMALL LETTER A WITH DOT BELOW -+// /* broken */ { {0x0000, 0x0061, 0, 0, 0, 0}, 0x1ea3 }, // U1EA3 # LATIN SMALL LETTER A WITH HOOK ABOVE -+// /* broken */ { {0x0000, 0x0061, 0, 0, 0, 0}, 0x00e0 }, // U00E0 # LATIN SMALL LETTER A WITH GRAVE -+// /* broken */ { {0x0000, 0x0061, 0, 0, 0, 0}, 0x00e3 }, // U00E3 # LATIN SMALL LETTER A WITH TILDE -+// /* broken */ { {0x0000, 0x0061, 0, 0, 0, 0}, 0x00e1 }, // U00E1 # LATIN SMALL LETTER A WITH ACUTE -+// /* broken */ { {0x0000, 0x0062, 0, 0, 0, 0}, 0x1e05 }, // U1E05 # LATIN SMALL LETTER B WITH DOT BELOW -+// /* broken */ { {0x0000, 0x0063, 0, 0, 0, 0}, 0x0107 }, // U0107 # LATIN SMALL LETTER C WITH ACUTE -+// /* broken */ { {0x0000, 0x0064, 0, 0, 0, 0}, 0x1e0d }, // U1E0D # LATIN SMALL LETTER D WITH DOT BELOW -+// /* broken */ { {0x0000, 0x0065, 0, 0, 0, 0}, 0x00e8 }, // U00E8 # LATIN SMALL LETTER E WITH GRAVE -+// /* broken */ { {0x0000, 0x0065, 0, 0, 0, 0}, 0x1ebb }, // U1EBB # LATIN SMALL LETTER E WITH HOOK ABOVE -+// /* broken */ { {0x0000, 0x0065, 0, 0, 0, 0}, 0x1eb9 }, // U1EB9 # LATIN SMALL LETTER E WITH DOT BELOW -+// /* broken */ { {0x0000, 0x0065, 0, 0, 0, 0}, 0x00e9 }, // U00E9 # LATIN SMALL LETTER E WITH ACUTE -+// /* broken */ { {0x0000, 0x0065, 0, 0, 0, 0}, 0x1ebd }, // U1EBD # LATIN SMALL LETTER E WITH TILDE -+// /* broken */ { {0x0000, 0x0067, 0, 0, 0, 0}, 0x01f5 }, // U01F5 # LATIN SMALL LETTER G WITH ACUTE -+// /* broken */ { {0x0000, 0x0068, 0, 0, 0, 0}, 0x1e25 }, // U1E25 # LATIN SMALL LETTER H WITH DOT BELOW -+// /* broken */ { {0x0000, 0x0069, 0, 0, 0, 0}, 0x00ec }, // U00EC # LATIN SMALL LETTER I WITH GRAVE -+// /* broken */ { {0x0000, 0x0069, 0, 0, 0, 0}, 0x0129 }, // U0129 # LATIN SMALL LETTER I WITH TILDE -+// /* broken */ { {0x0000, 0x0069, 0, 0, 0, 0}, 0x1ecb }, // U1ECB # LATIN SMALL LETTER I WITH DOT BELOW -+// /* broken */ { {0x0000, 0x0069, 0, 0, 0, 0}, 0x00ed }, // U00ED # LATIN SMALL LETTER I WITH ACUTE -+// /* broken */ { {0x0000, 0x0069, 0, 0, 0, 0}, 0x1ec9 }, // U1EC9 # LATIN SMALL LETTER I WITH HOOK ABOVE -+// /* broken */ { {0x0000, 0x006b, 0, 0, 0, 0}, 0x1e33 }, // U1E33 # LATIN SMALL LETTER K WITH DOT BELOW -+// /* broken */ { {0x0000, 0x006b, 0, 0, 0, 0}, 0x1e31 }, // U1E31 # LATIN SMALL LETTER K WITH ACUTE -+// /* broken */ { {0x0000, 0x006c, 0, 0, 0, 0}, 0x1e37 }, // U1E37 # LATIN SMALL LETTER L WITH DOT BELOW -+// /* broken */ { {0x0000, 0x006c, 0, 0, 0, 0}, 0x013a }, // U013A # LATIN SMALL LETTER L WITH ACUTE -+// /* broken */ { {0x0000, 0x006d, 0, 0, 0, 0}, 0x1e43 }, // U1E43 # LATIN SMALL LETTER M WITH DOT BELOW -+// /* broken */ { {0x0000, 0x006d, 0, 0, 0, 0}, 0x1e3f }, // U1E3F # LATIN SMALL LETTER M WITH ACUTE -+// /* broken */ { {0x0000, 0x006e, 0, 0, 0, 0}, 0x00f1 }, // U00F1 # LATIN SMALL LETTER N WITH TILDE -+// /* broken */ { {0x0000, 0x006e, 0, 0, 0, 0}, 0x0144 }, // U0144 # LATIN SMALL LETTER N WITH ACUTE -+// /* broken */ { {0x0000, 0x006e, 0, 0, 0, 0}, 0x01f9 }, // U01F9 # LATIN SMALL LETTER N WITH GRAVE -+// /* broken */ { {0x0000, 0x006e, 0, 0, 0, 0}, 0x1e47 }, // U1E47 # LATIN SMALL LETTER N WITH DOT BELOW -+// /* broken */ { {0x0000, 0x006f, 0, 0, 0, 0}, 0x00f5 }, // U00F5 # LATIN SMALL LETTER O WITH TILDE -+// /* broken */ { {0x0000, 0x006f, 0, 0, 0, 0}, 0x00f2 }, // U00F2 # LATIN SMALL LETTER O WITH GRAVE -+// /* broken */ { {0x0000, 0x006f, 0, 0, 0, 0}, 0x1ecf }, // U1ECF # LATIN SMALL LETTER O WITH HOOK ABOVE -+// /* broken */ { {0x0000, 0x006f, 0, 0, 0, 0}, 0x00f3 }, // U00F3 # LATIN SMALL LETTER O WITH ACUTE -+// /* broken */ { {0x0000, 0x006f, 0, 0, 0, 0}, 0x1ecd }, // U1ECD # LATIN SMALL LETTER O WITH DOT BELOW -+// /* broken */ { {0x0000, 0x0070, 0, 0, 0, 0}, 0x1e55 }, // U1E55 # LATIN SMALL LETTER P WITH ACUTE -+// /* broken */ { {0x0000, 0x0072, 0, 0, 0, 0}, 0x0155 }, // U0155 # LATIN SMALL LETTER R WITH ACUTE -+// /* broken */ { {0x0000, 0x0072, 0, 0, 0, 0}, 0x1e5b }, // U1E5B # LATIN SMALL LETTER R WITH DOT BELOW -+// /* broken */ { {0x0000, 0x0073, 0, 0, 0, 0}, 0x1e63 }, // U1E63 # LATIN SMALL LETTER S WITH DOT BELOW -+// /* broken */ { {0x0000, 0x0073, 0, 0, 0, 0}, 0x015b }, // U015B # LATIN SMALL LETTER S WITH ACUTE -+// /* broken */ { {0x0000, 0x0074, 0, 0, 0, 0}, 0x1e6d }, // U1E6D # LATIN SMALL LETTER T WITH DOT BELOW -+// /* broken */ { {0x0000, 0x0075, 0, 0, 0, 0}, 0x0169 }, // U0169 # LATIN SMALL LETTER U WITH TILDE -+// /* broken */ { {0x0000, 0x0075, 0, 0, 0, 0}, 0x1ee7 }, // U1EE7 # LATIN SMALL LETTER U WITH HOOK ABOVE -+// /* broken */ { {0x0000, 0x0075, 0, 0, 0, 0}, 0x00f9 }, // U00F9 # LATIN SMALL LETTER U WITH GRAVE -+// /* broken */ { {0x0000, 0x0075, 0, 0, 0, 0}, 0x00fa }, // U00FA # LATIN SMALL LETTER U WITH ACUTE -+// /* broken */ { {0x0000, 0x0075, 0, 0, 0, 0}, 0x1ee5 }, // U1EE5 # LATIN SMALL LETTER U WITH DOT BELOW -+// /* broken */ { {0x0000, 0x0076, 0, 0, 0, 0}, 0x1e7d }, // U1E7D # LATIN SMALL LETTER V WITH TILDE -+// /* broken */ { {0x0000, 0x0076, 0, 0, 0, 0}, 0x1e7f }, // U1E7F # LATIN SMALL LETTER V WITH DOT BELOW -+// /* broken */ { {0x0000, 0x0077, 0, 0, 0, 0}, 0x1e81 }, // U1E81 # LATIN SMALL LETTER W WITH GRAVE -+// /* broken */ { {0x0000, 0x0077, 0, 0, 0, 0}, 0x1e83 }, // U1E83 # LATIN SMALL LETTER W WITH ACUTE -+// /* broken */ { {0x0000, 0x0077, 0, 0, 0, 0}, 0x1e89 }, // U1E89 # LATIN SMALL LETTER W WITH DOT BELOW -+// /* broken */ { {0x0000, 0x0079, 0, 0, 0, 0}, 0x1ef5 }, // U1EF5 # LATIN SMALL LETTER Y WITH DOT BELOW -+// /* broken */ { {0x0000, 0x0079, 0, 0, 0, 0}, 0x1ef9 }, // U1EF9 # LATIN SMALL LETTER Y WITH TILDE -+// /* broken */ { {0x0000, 0x0079, 0, 0, 0, 0}, 0x1ef7 }, // U1EF7 # LATIN SMALL LETTER Y WITH HOOK ABOVE -+// /* broken */ { {0x0000, 0x0079, 0, 0, 0, 0}, 0x1ef3 }, // U1EF3 # LATIN SMALL LETTER Y WITH GRAVE -+// /* broken */ { {0x0000, 0x0079, 0, 0, 0, 0}, 0x00fd }, // U00FD # LATIN SMALL LETTER Y WITH ACUTE -+// /* broken */ { {0x0000, 0x007a, 0, 0, 0, 0}, 0x1e93 }, // U1E93 # LATIN SMALL LETTER Z WITH DOT BELOW -+// /* broken */ { {0x0000, 0x007a, 0, 0, 0, 0}, 0x017a }, // U017A # LATIN SMALL LETTER Z WITH ACUTE -+// /* broken */ { {0x0000, 0x00c2, 0, 0, 0, 0}, 0x1ea6 }, // U1EA6 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE -+// /* broken */ { {0x0000, 0x00c2, 0, 0, 0, 0}, 0x1ea8 }, // U1EA8 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE -+// /* broken */ { {0x0000, 0x00c2, 0, 0, 0, 0}, 0x1eaa }, // U1EAA # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE -+// /* broken */ { {0x0000, 0x00c2, 0, 0, 0, 0}, 0x1ea4 }, // U1EA4 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE -+// /* broken */ { {0x0000, 0x00c5, 0, 0, 0, 0}, 0x01fa }, // U01FA # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE -+// /* broken */ { {0x0000, 0x00c6, 0, 0, 0, 0}, 0x01fc }, // U01FC # LATIN CAPITAL LETTER AE WITH ACUTE -+// /* broken */ { {0x0000, 0x00c7, 0, 0, 0, 0}, 0x1e08 }, // U1E08 # LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE -+// /* broken */ { {0x0000, 0x00ca, 0, 0, 0, 0}, 0x1ec0 }, // U1EC0 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE -+// /* broken */ { {0x0000, 0x00ca, 0, 0, 0, 0}, 0x1ebe }, // U1EBE # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE -+// /* broken */ { {0x0000, 0x00ca, 0, 0, 0, 0}, 0x1ec2 }, // U1EC2 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE -+// /* broken */ { {0x0000, 0x00ca, 0, 0, 0, 0}, 0x1ec4 }, // U1EC4 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE -+// /* broken */ { {0x0000, 0x00cf, 0, 0, 0, 0}, 0x1e2e }, // U1E2E # LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE -+// /* broken */ { {0x0000, 0x00d4, 0, 0, 0, 0}, 0x1ed4 }, // U1ED4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE -+// /* broken */ { {0x0000, 0x00d4, 0, 0, 0, 0}, 0x1ed0 }, // U1ED0 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE -+// /* broken */ { {0x0000, 0x00d4, 0, 0, 0, 0}, 0x1ed2 }, // U1ED2 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE -+// /* broken */ { {0x0000, 0x00d4, 0, 0, 0, 0}, 0x1ed6 }, // U1ED6 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE -+// /* broken */ { {0x0000, 0x00d5, 0, 0, 0, 0}, 0x1e4c }, // U1E4C # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE -+// /* broken */ { {0x0000, 0x00d8, 0, 0, 0, 0}, 0x01fe }, // U01FE # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE -+// /* broken */ { {0x0000, 0x00dc, 0, 0, 0, 0}, 0x01d7 }, // U01D7 # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE -+// /* broken */ { {0x0000, 0x00dc, 0, 0, 0, 0}, 0x01db }, // U01DB # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE -+// /* broken */ { {0x0000, 0x00e2, 0, 0, 0, 0}, 0x1eab }, // U1EAB # LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE -+// /* broken */ { {0x0000, 0x00e2, 0, 0, 0, 0}, 0x1ea5 }, // U1EA5 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE -+// /* broken */ { {0x0000, 0x00e2, 0, 0, 0, 0}, 0x1ea9 }, // U1EA9 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE -+// /* broken */ { {0x0000, 0x00e2, 0, 0, 0, 0}, 0x1ea7 }, // U1EA7 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE -+// /* broken */ { {0x0000, 0x00e5, 0, 0, 0, 0}, 0x01fb }, // U01FB # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE -+// /* broken */ { {0x0000, 0x00e6, 0, 0, 0, 0}, 0x01fd }, // U01FD # LATIN SMALL LETTER AE WITH ACUTE -+// /* broken */ { {0x0000, 0x00e7, 0, 0, 0, 0}, 0x1e09 }, // U1E09 # LATIN SMALL LETTER C WITH CEDILLA AND ACUTE -+// /* broken */ { {0x0000, 0x00ea, 0, 0, 0, 0}, 0x1ec5 }, // U1EC5 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE -+// /* broken */ { {0x0000, 0x00ea, 0, 0, 0, 0}, 0x1ec1 }, // U1EC1 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE -+// /* broken */ { {0x0000, 0x00ea, 0, 0, 0, 0}, 0x1ec3 }, // U1EC3 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE -+// /* broken */ { {0x0000, 0x00ea, 0, 0, 0, 0}, 0x1ebf }, // U1EBF # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE -+// /* broken */ { {0x0000, 0x00ef, 0, 0, 0, 0}, 0x1e2f }, // U1E2F # LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE -+// /* broken */ { {0x0000, 0x00f4, 0, 0, 0, 0}, 0x1ed3 }, // U1ED3 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE -+// /* broken */ { {0x0000, 0x00f4, 0, 0, 0, 0}, 0x1ed1 }, // U1ED1 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE -+// /* broken */ { {0x0000, 0x00f4, 0, 0, 0, 0}, 0x1ed5 }, // U1ED5 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE -+// /* broken */ { {0x0000, 0x00f4, 0, 0, 0, 0}, 0x1ed7 }, // U1ED7 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE -+// /* broken */ { {0x0000, 0x00f5, 0, 0, 0, 0}, 0x1e4d }, // U1E4D # LATIN SMALL LETTER O WITH TILDE AND ACUTE -+// /* broken */ { {0x0000, 0x00f8, 0, 0, 0, 0}, 0x01ff }, // U01FF # LATIN SMALL LETTER O WITH STROKE AND ACUTE -+// /* broken */ { {0x0000, 0x00fc, 0, 0, 0, 0}, 0x01dc }, // U01DC # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE -+// /* broken */ { {0x0000, 0x00fc, 0, 0, 0, 0}, 0x01d8 }, // U01D8 # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE -+// /* broken */ { {0x0000, 0x0102, 0, 0, 0, 0}, 0x1eb0 }, // U1EB0 # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE -+// /* broken */ { {0x0000, 0x0102, 0, 0, 0, 0}, 0x1eb4 }, // U1EB4 # LATIN CAPITAL LETTER A WITH BREVE AND TILDE -+// /* broken */ { {0x0000, 0x0102, 0, 0, 0, 0}, 0x1eb2 }, // U1EB2 # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE -+// /* broken */ { {0x0000, 0x0102, 0, 0, 0, 0}, 0x1eae }, // U1EAE # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE -+// /* broken */ { {0x0000, 0x0103, 0, 0, 0, 0}, 0x1eb5 }, // U1EB5 # LATIN SMALL LETTER A WITH BREVE AND TILDE -+// /* broken */ { {0x0000, 0x0103, 0, 0, 0, 0}, 0x1eaf }, // U1EAF # LATIN SMALL LETTER A WITH BREVE AND ACUTE -+// /* broken */ { {0x0000, 0x0103, 0, 0, 0, 0}, 0x1eb3 }, // U1EB3 # LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE -+// /* broken */ { {0x0000, 0x0103, 0, 0, 0, 0}, 0x1eb1 }, // U1EB1 # LATIN SMALL LETTER A WITH BREVE AND GRAVE -+// /* broken */ { {0x0000, 0x0112, 0, 0, 0, 0}, 0x1e16 }, // U1E16 # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE -+// /* broken */ { {0x0000, 0x0112, 0, 0, 0, 0}, 0x1e14 }, // U1E14 # LATIN CAPITAL LETTER E WITH MACRON AND GRAVE -+// /* broken */ { {0x0000, 0x0113, 0, 0, 0, 0}, 0x1e15 }, // U1E15 # LATIN SMALL LETTER E WITH MACRON AND GRAVE -+// /* broken */ { {0x0000, 0x0113, 0, 0, 0, 0}, 0x1e17 }, // U1E17 # LATIN SMALL LETTER E WITH MACRON AND ACUTE -+// /* broken */ { {0x0000, 0x014c, 0, 0, 0, 0}, 0x1e52 }, // U1E52 # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE -+// /* broken */ { {0x0000, 0x014c, 0, 0, 0, 0}, 0x1e50 }, // U1E50 # LATIN CAPITAL LETTER O WITH MACRON AND GRAVE -+// /* broken */ { {0x0000, 0x014d, 0, 0, 0, 0}, 0x1e51 }, // U1E51 # LATIN SMALL LETTER O WITH MACRON AND GRAVE -+// /* broken */ { {0x0000, 0x014d, 0, 0, 0, 0}, 0x1e53 }, // U1E53 # LATIN SMALL LETTER O WITH MACRON AND ACUTE -+// /* broken */ { {0x0000, 0x0168, 0, 0, 0, 0}, 0x1e78 }, // U1E78 # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE -+// /* broken */ { {0x0000, 0x0169, 0, 0, 0, 0}, 0x1e79 }, // U1E79 # LATIN SMALL LETTER U WITH TILDE AND ACUTE -+// /* broken */ { {0x0000, 0x0313, 0x0391, 0, 0, 0}, 0x1f0a }, // U1F0A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA -+// /* broken */ { {0x0000, 0x0313, 0x0391, 0, 0, 0}, 0x1f0c }, // U1F0C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA -+// /* broken */ { {0x0000, 0x0313, 0x0395, 0, 0, 0}, 0x1f1a }, // U1F1A # GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA -+// /* broken */ { {0x0000, 0x0313, 0x0395, 0, 0, 0}, 0x1f1c }, // U1F1C # GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA -+// /* broken */ { {0x0000, 0x0313, 0x0397, 0, 0, 0}, 0x1f2c }, // U1F2C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA -+// /* broken */ { {0x0000, 0x0313, 0x0397, 0, 0, 0}, 0x1f2a }, // U1F2A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA -+// /* broken */ { {0x0000, 0x0313, 0x0399, 0, 0, 0}, 0x1f3c }, // U1F3C # GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA -+// /* broken */ { {0x0000, 0x0313, 0x0399, 0, 0, 0}, 0x1f3a }, // U1F3A # GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA -+// /* broken */ { {0x0000, 0x0313, 0x039f, 0, 0, 0}, 0x1f4a }, // U1F4A # GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA -+// /* broken */ { {0x0000, 0x0313, 0x039f, 0, 0, 0}, 0x1f4c }, // U1F4C # GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA -+// /* broken */ { {0x0000, 0x0313, 0x03a9, 0, 0, 0}, 0x1f6a }, // U1F6A # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA -+// /* broken */ { {0x0000, 0x0313, 0x03a9, 0, 0, 0}, 0x1f6c }, // U1F6C # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA -+// /* broken */ { {0x0000, 0x0313, 0x03b1, 0, 0, 0}, 0x1f04 }, // U1F04 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA -+// /* broken */ { {0x0000, 0x0313, 0x03b1, 0, 0, 0}, 0x1f02 }, // U1F02 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA -+// /* broken */ { {0x0000, 0x0313, 0x03b5, 0, 0, 0}, 0x1f14 }, // U1F14 # GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA -+// /* broken */ { {0x0000, 0x0313, 0x03b5, 0, 0, 0}, 0x1f12 }, // U1F12 # GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA -+// /* broken */ { {0x0000, 0x0313, 0x03b7, 0, 0, 0}, 0x1f24 }, // U1F24 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA -+// /* broken */ { {0x0000, 0x0313, 0x03b7, 0, 0, 0}, 0x1f22 }, // U1F22 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA -+// /* broken */ { {0x0000, 0x0313, 0x03b9, 0, 0, 0}, 0x1f32 }, // U1F32 # GREEK SMALL LETTER IOTA WITH PSILI AND VARIA -+// /* broken */ { {0x0000, 0x0313, 0x03b9, 0, 0, 0}, 0x1f34 }, // U1F34 # GREEK SMALL LETTER IOTA WITH PSILI AND OXIA -+// /* broken */ { {0x0000, 0x0313, 0x03bf, 0, 0, 0}, 0x1f42 }, // U1F42 # GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA -+// /* broken */ { {0x0000, 0x0313, 0x03bf, 0, 0, 0}, 0x1f44 }, // U1F44 # GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA -+// /* broken */ { {0x0000, 0x0313, 0x03c5, 0, 0, 0}, 0x1f52 }, // U1F52 # GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA -+// /* broken */ { {0x0000, 0x0313, 0x03c5, 0, 0, 0}, 0x1f54 }, // U1F54 # GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA -+// /* broken */ { {0x0000, 0x0313, 0x03c9, 0, 0, 0}, 0x1f62 }, // U1F62 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA -+// /* broken */ { {0x0000, 0x0313, 0x03c9, 0, 0, 0}, 0x1f64 }, // U1F64 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA -+// /* broken */ { {0x0000, 0x0314, 0x0391, 0, 0, 0}, 0x1f0b }, // U1F0B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA -+// /* broken */ { {0x0000, 0x0314, 0x0391, 0, 0, 0}, 0x1f0d }, // U1F0D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA -+// /* broken */ { {0x0000, 0x0314, 0x0395, 0, 0, 0}, 0x1f1d }, // U1F1D # GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA -+// /* broken */ { {0x0000, 0x0314, 0x0395, 0, 0, 0}, 0x1f1b }, // U1F1B # GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA -+// /* broken */ { {0x0000, 0x0314, 0x0397, 0, 0, 0}, 0x1f2d }, // U1F2D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA -+// /* broken */ { {0x0000, 0x0314, 0x0397, 0, 0, 0}, 0x1f2b }, // U1F2B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA -+// /* broken */ { {0x0000, 0x0314, 0x0399, 0, 0, 0}, 0x1f3b }, // U1F3B # GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA -+// /* broken */ { {0x0000, 0x0314, 0x0399, 0, 0, 0}, 0x1f3d }, // U1F3D # GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA -+// /* broken */ { {0x0000, 0x0314, 0x039f, 0, 0, 0}, 0x1f4b }, // U1F4B # GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA -+// /* broken */ { {0x0000, 0x0314, 0x039f, 0, 0, 0}, 0x1f4d }, // U1F4D # GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA -+// /* broken */ { {0x0000, 0x0314, 0x03a5, 0, 0, 0}, 0x1f5b }, // U1F5B # GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA -+// /* broken */ { {0x0000, 0x0314, 0x03a5, 0, 0, 0}, 0x1f5d }, // U1F5D # GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA -+// /* broken */ { {0x0000, 0x0314, 0x03a9, 0, 0, 0}, 0x1f6d }, // U1F6D # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA -+// /* broken */ { {0x0000, 0x0314, 0x03a9, 0, 0, 0}, 0x1f6b }, // U1F6B # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA -+// /* broken */ { {0x0000, 0x0314, 0x03b1, 0, 0, 0}, 0x1f03 }, // U1F03 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA -+// /* broken */ { {0x0000, 0x0314, 0x03b1, 0, 0, 0}, 0x1f05 }, // U1F05 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA -+// /* broken */ { {0x0000, 0x0314, 0x03b5, 0, 0, 0}, 0x1f13 }, // U1F13 # GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA -+// /* broken */ { {0x0000, 0x0314, 0x03b5, 0, 0, 0}, 0x1f15 }, // U1F15 # GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA -+// /* broken */ { {0x0000, 0x0314, 0x03b7, 0, 0, 0}, 0x1f23 }, // U1F23 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA -+// /* broken */ { {0x0000, 0x0314, 0x03b7, 0, 0, 0}, 0x1f25 }, // U1F25 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA -+// /* broken */ { {0x0000, 0x0314, 0x03b9, 0, 0, 0}, 0x1f33 }, // U1F33 # GREEK SMALL LETTER IOTA WITH DASIA AND VARIA -+// /* broken */ { {0x0000, 0x0314, 0x03b9, 0, 0, 0}, 0x1f35 }, // U1F35 # GREEK SMALL LETTER IOTA WITH DASIA AND OXIA -+// /* broken */ { {0x0000, 0x0314, 0x03bf, 0, 0, 0}, 0x1f45 }, // U1F45 # GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA -+// /* broken */ { {0x0000, 0x0314, 0x03bf, 0, 0, 0}, 0x1f43 }, // U1F43 # GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA -+// /* broken */ { {0x0000, 0x0314, 0x03c5, 0, 0, 0}, 0x1f53 }, // U1F53 # GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA -+// /* broken */ { {0x0000, 0x0314, 0x03c5, 0, 0, 0}, 0x1f55 }, // U1F55 # GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA -+// /* broken */ { {0x0000, 0x0314, 0x03c9, 0, 0, 0}, 0x1f63 }, // U1F63 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA -+// /* broken */ { {0x0000, 0x0314, 0x03c9, 0, 0, 0}, 0x1f65 }, // U1F65 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA -+// /* broken */ { {0x0000, 0x0391, 0, 0, 0, 0}, 0x0386 }, // U0386 # GREEK CAPITAL LETTER ALPHA WITH TONOS -+// /* broken */ { {0x0000, 0x0391, 0, 0, 0, 0}, 0x1fba }, // U1FBA # GREEK CAPITAL LETTER ALPHA WITH VARIA -+// /* broken */ { {0x0000, 0x0395, 0, 0, 0, 0}, 0x0388 }, // U0388 # GREEK CAPITAL LETTER EPSILON WITH TONOS -+// /* broken */ { {0x0000, 0x0395, 0, 0, 0, 0}, 0x1fc8 }, // U1FC8 # GREEK CAPITAL LETTER EPSILON WITH VARIA -+// /* broken */ { {0x0000, 0x0397, 0, 0, 0, 0}, 0x1fca }, // U1FCA # GREEK CAPITAL LETTER ETA WITH VARIA -+// /* broken */ { {0x0000, 0x0397, 0, 0, 0, 0}, 0x0389 }, // U0389 # GREEK CAPITAL LETTER ETA WITH TONOS -+// /* broken */ { {0x0000, 0x0399, 0, 0, 0, 0}, 0x038a }, // U038A # GREEK CAPITAL LETTER IOTA WITH TONOS -+// /* broken */ { {0x0000, 0x0399, 0, 0, 0, 0}, 0x1fda }, // U1FDA # GREEK CAPITAL LETTER IOTA WITH VARIA -+// /* broken */ { {0x0000, 0x039f, 0, 0, 0, 0}, 0x038c }, // U038C # GREEK CAPITAL LETTER OMICRON WITH TONOS -+// /* broken */ { {0x0000, 0x039f, 0, 0, 0, 0}, 0x1ff8 }, // U1FF8 # GREEK CAPITAL LETTER OMICRON WITH VARIA -+// /* broken */ { {0x0000, 0x03a5, 0, 0, 0, 0}, 0x038e }, // U038E # GREEK CAPITAL LETTER UPSILON WITH TONOS -+// /* broken */ { {0x0000, 0x03a5, 0, 0, 0, 0}, 0x1fea }, // U1FEA # GREEK CAPITAL LETTER UPSILON WITH VARIA -+// /* broken */ { {0x0000, 0x03a9, 0, 0, 0, 0}, 0x038f }, // U038F # GREEK CAPITAL LETTER OMEGA WITH TONOS -+// /* broken */ { {0x0000, 0x03a9, 0, 0, 0, 0}, 0x1ffa }, // U1FFA # GREEK CAPITAL LETTER OMEGA WITH VARIA -+// /* broken */ { {0x0000, 0x03b1, 0, 0, 0, 0}, 0x03ac }, // U03AC # GREEK SMALL LETTER ALPHA WITH TONOS -+// /* broken */ { {0x0000, 0x03b1, 0, 0, 0, 0}, 0x1f70 }, // U1F70 # GREEK SMALL LETTER ALPHA WITH VARIA -+// /* broken */ { {0x0000, 0x03b5, 0, 0, 0, 0}, 0x03ad }, // U03AD # GREEK SMALL LETTER EPSILON WITH TONOS -+// /* broken */ { {0x0000, 0x03b5, 0, 0, 0, 0}, 0x1f72 }, // U1F72 # GREEK SMALL LETTER EPSILON WITH VARIA -+// /* broken */ { {0x0000, 0x03b7, 0, 0, 0, 0}, 0x03ae }, // U03AE # GREEK SMALL LETTER ETA WITH TONOS -+// /* broken */ { {0x0000, 0x03b7, 0, 0, 0, 0}, 0x1f74 }, // U1F74 # GREEK SMALL LETTER ETA WITH VARIA -+// /* broken */ { {0x0000, 0x03b9, 0, 0, 0, 0}, 0x03af }, // U03AF # GREEK SMALL LETTER IOTA WITH TONOS -+// /* broken */ { {0x0000, 0x03b9, 0, 0, 0, 0}, 0x1f76 }, // U1F76 # GREEK SMALL LETTER IOTA WITH VARIA -+// /* broken */ { {0x0000, 0x03bf, 0, 0, 0, 0}, 0x03cc }, // U03CC # GREEK SMALL LETTER OMICRON WITH TONOS -+// /* broken */ { {0x0000, 0x03bf, 0, 0, 0, 0}, 0x1f78 }, // U1F78 # GREEK SMALL LETTER OMICRON WITH VARIA -+// /* broken */ { {0x0000, 0x03c5, 0, 0, 0, 0}, 0x03cd }, // U03CD # GREEK SMALL LETTER UPSILON WITH TONOS -+// /* broken */ { {0x0000, 0x03c5, 0, 0, 0, 0}, 0x1f7a }, // U1F7A # GREEK SMALL LETTER UPSILON WITH VARIA -+// /* broken */ { {0x0000, 0x03c9, 0, 0, 0, 0}, 0x03ce }, // U03CE # GREEK SMALL LETTER OMEGA WITH TONOS -+// /* broken */ { {0x0000, 0x03c9, 0, 0, 0, 0}, 0x1f7c }, // U1F7C # GREEK SMALL LETTER OMEGA WITH VARIA -+// /* broken */ { {0x0000, 0x03ca, 0, 0, 0, 0}, 0x0390 }, // U0390 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS -+// /* broken */ { {0x0000, 0x03ca, 0, 0, 0, 0}, 0x1fd2 }, // U1FD2 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA -+// /* broken */ { {0x0000, 0x03cb, 0, 0, 0, 0}, 0x1fe2 }, // U1FE2 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA -+// /* broken */ { {0x0000, 0x03cb, 0, 0, 0, 0}, 0x03b0 }, // U03B0 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS -+// /* broken */ { {0x0000, 0x0413, 0, 0, 0, 0}, 0x0403 }, // U0403 # CYRILLIC CAPITAL LETTER GJE -+// /* broken */ { {0x0000, 0x0415, 0, 0, 0, 0}, 0x0400 }, // U0400 # CYRILLIC CAPITAL LETTER IE WITH GRAVE -+// /* broken */ { {0x0000, 0x0418, 0, 0, 0, 0}, 0x040d }, // U040D # CYRILLIC CAPITAL LETTER I WITH GRAVE -+// /* broken */ { {0x0000, 0x041a, 0, 0, 0, 0}, 0x040c }, // U040C # CYRILLIC CAPITAL LETTER KJE -+// /* broken */ { {0x0000, 0x0433, 0, 0, 0, 0}, 0x0453 }, // U0453 # CYRILLIC SMALL LETTER GJE -+// /* broken */ { {0x0000, 0x0435, 0, 0, 0, 0}, 0x0450 }, // U0450 # CYRILLIC SMALL LETTER IE WITH GRAVE -+// /* broken */ { {0x0000, 0x0438, 0, 0, 0, 0}, 0x045d }, // U045D # CYRILLIC SMALL LETTER I WITH GRAVE -+// /* broken */ { {0x0000, 0x043a, 0, 0, 0, 0}, 0x045c }, // U045C # CYRILLIC SMALL LETTER KJE -+// /* broken */ { {0x0000, 0x1f00, 0, 0, 0, 0}, 0x1f02 }, // U1F02 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA -+// /* broken */ { {0x0000, 0x1f00, 0, 0, 0, 0}, 0x1f04 }, // U1F04 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA -+// /* broken */ { {0x0000, 0x1f01, 0, 0, 0, 0}, 0x1f03 }, // U1F03 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA -+// /* broken */ { {0x0000, 0x1f01, 0, 0, 0, 0}, 0x1f05 }, // U1F05 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA -+// /* broken */ { {0x0000, 0x1f08, 0, 0, 0, 0}, 0x1f0c }, // U1F0C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA -+// /* broken */ { {0x0000, 0x1f08, 0, 0, 0, 0}, 0x1f0a }, // U1F0A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA -+// /* broken */ { {0x0000, 0x1f09, 0, 0, 0, 0}, 0x1f0b }, // U1F0B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA -+// /* broken */ { {0x0000, 0x1f09, 0, 0, 0, 0}, 0x1f0d }, // U1F0D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA -+// /* broken */ { {0x0000, 0x1f10, 0, 0, 0, 0}, 0x1f12 }, // U1F12 # GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA -+// /* broken */ { {0x0000, 0x1f10, 0, 0, 0, 0}, 0x1f14 }, // U1F14 # GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA -+// /* broken */ { {0x0000, 0x1f11, 0, 0, 0, 0}, 0x1f13 }, // U1F13 # GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA -+// /* broken */ { {0x0000, 0x1f11, 0, 0, 0, 0}, 0x1f15 }, // U1F15 # GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA -+// /* broken */ { {0x0000, 0x1f18, 0, 0, 0, 0}, 0x1f1c }, // U1F1C # GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA -+// /* broken */ { {0x0000, 0x1f18, 0, 0, 0, 0}, 0x1f1a }, // U1F1A # GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA -+// /* broken */ { {0x0000, 0x1f19, 0, 0, 0, 0}, 0x1f1b }, // U1F1B # GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA -+// /* broken */ { {0x0000, 0x1f19, 0, 0, 0, 0}, 0x1f1d }, // U1F1D # GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA -+// /* broken */ { {0x0000, 0x1f20, 0, 0, 0, 0}, 0x1f22 }, // U1F22 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA -+// /* broken */ { {0x0000, 0x1f20, 0, 0, 0, 0}, 0x1f24 }, // U1F24 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA -+// /* broken */ { {0x0000, 0x1f21, 0, 0, 0, 0}, 0x1f23 }, // U1F23 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA -+// /* broken */ { {0x0000, 0x1f21, 0, 0, 0, 0}, 0x1f25 }, // U1F25 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA -+// /* broken */ { {0x0000, 0x1f28, 0, 0, 0, 0}, 0x1f2a }, // U1F2A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA -+// /* broken */ { {0x0000, 0x1f28, 0, 0, 0, 0}, 0x1f2c }, // U1F2C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA -+// /* broken */ { {0x0000, 0x1f29, 0, 0, 0, 0}, 0x1f2d }, // U1F2D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA -+// /* broken */ { {0x0000, 0x1f29, 0, 0, 0, 0}, 0x1f2b }, // U1F2B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA -+// /* broken */ { {0x0000, 0x1f30, 0, 0, 0, 0}, 0x1f32 }, // U1F32 # GREEK SMALL LETTER IOTA WITH PSILI AND VARIA -+// /* broken */ { {0x0000, 0x1f30, 0, 0, 0, 0}, 0x1f34 }, // U1F34 # GREEK SMALL LETTER IOTA WITH PSILI AND OXIA -+// /* broken */ { {0x0000, 0x1f31, 0, 0, 0, 0}, 0x1f33 }, // U1F33 # GREEK SMALL LETTER IOTA WITH DASIA AND VARIA -+// /* broken */ { {0x0000, 0x1f31, 0, 0, 0, 0}, 0x1f35 }, // U1F35 # GREEK SMALL LETTER IOTA WITH DASIA AND OXIA -+// /* broken */ { {0x0000, 0x1f38, 0, 0, 0, 0}, 0x1f3a }, // U1F3A # GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA -+// /* broken */ { {0x0000, 0x1f38, 0, 0, 0, 0}, 0x1f3c }, // U1F3C # GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA -+// /* broken */ { {0x0000, 0x1f39, 0, 0, 0, 0}, 0x1f3b }, // U1F3B # GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA -+// /* broken */ { {0x0000, 0x1f39, 0, 0, 0, 0}, 0x1f3d }, // U1F3D # GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA -+// /* broken */ { {0x0000, 0x1f40, 0, 0, 0, 0}, 0x1f44 }, // U1F44 # GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA -+// /* broken */ { {0x0000, 0x1f40, 0, 0, 0, 0}, 0x1f42 }, // U1F42 # GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA -+// /* broken */ { {0x0000, 0x1f41, 0, 0, 0, 0}, 0x1f43 }, // U1F43 # GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA -+// /* broken */ { {0x0000, 0x1f41, 0, 0, 0, 0}, 0x1f45 }, // U1F45 # GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA -+// /* broken */ { {0x0000, 0x1f48, 0, 0, 0, 0}, 0x1f4a }, // U1F4A # GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA -+// /* broken */ { {0x0000, 0x1f48, 0, 0, 0, 0}, 0x1f4c }, // U1F4C # GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA -+// /* broken */ { {0x0000, 0x1f49, 0, 0, 0, 0}, 0x1f4d }, // U1F4D # GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA -+// /* broken */ { {0x0000, 0x1f49, 0, 0, 0, 0}, 0x1f4b }, // U1F4B # GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA -+// /* broken */ { {0x0000, 0x1f50, 0, 0, 0, 0}, 0x1f52 }, // U1F52 # GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA -+// /* broken */ { {0x0000, 0x1f50, 0, 0, 0, 0}, 0x1f54 }, // U1F54 # GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA -+// /* broken */ { {0x0000, 0x1f51, 0, 0, 0, 0}, 0x1f53 }, // U1F53 # GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA -+// /* broken */ { {0x0000, 0x1f51, 0, 0, 0, 0}, 0x1f55 }, // U1F55 # GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA -+// /* broken */ { {0x0000, 0x1f59, 0, 0, 0, 0}, 0x1f5b }, // U1F5B # GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA -+// /* broken */ { {0x0000, 0x1f59, 0, 0, 0, 0}, 0x1f5d }, // U1F5D # GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA -+// /* broken */ { {0x0000, 0x1f60, 0, 0, 0, 0}, 0x1f64 }, // U1F64 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA -+// /* broken */ { {0x0000, 0x1f60, 0, 0, 0, 0}, 0x1f62 }, // U1F62 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA -+// /* broken */ { {0x0000, 0x1f61, 0, 0, 0, 0}, 0x1f63 }, // U1F63 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA -+// /* broken */ { {0x0000, 0x1f61, 0, 0, 0, 0}, 0x1f65 }, // U1F65 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA -+// /* broken */ { {0x0000, 0x1f68, 0, 0, 0, 0}, 0x1f6a }, // U1F6A # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA -+// /* broken */ { {0x0000, 0x1f68, 0, 0, 0, 0}, 0x1f6c }, // U1F6C # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA -+// /* broken */ { {0x0000, 0x1f69, 0, 0, 0, 0}, 0x1f6b }, // U1F6B # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA -+// /* broken */ { {0x0000, 0x1f69, 0, 0, 0, 0}, 0x1f6d }, // U1F6D # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0000, 0x004f, 0, 0}, 0x01fe }, // U01FE # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0000, 0x006f, 0, 0}, 0x01ff }, // U01FF # LATIN SMALL LETTER O WITH STROKE AND ACUTE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0049, 0, 0}, 0x1e2e }, // U1E2E # LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0055, 0, 0}, 0x01d7 }, // U01D7 # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0055, 0, 0}, 0x01db }, // U01DB # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0069, 0, 0}, 0x1e2f }, // U1E2F # LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0075, 0, 0}, 0x01dc }, // U01DC # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0075, 0, 0}, 0x01d8 }, // U01D8 # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0022, 0x03b9, 0, 0}, 0x1fd2 }, // U1FD2 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0022, 0x03b9, 0, 0}, 0x0390 }, // U0390 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0022, 0x03c5, 0, 0}, 0x1fe2 }, // U1FE2 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0022, 0x03c5, 0, 0}, 0x03b0 }, // U03B0 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0391, 0, 0}, 0x1f0b }, // U1F0B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0391, 0, 0}, 0x1f0d }, // U1F0D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0395, 0, 0}, 0x1f1d }, // U1F1D # GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0395, 0, 0}, 0x1f1b }, // U1F1B # GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0397, 0, 0}, 0x1f2b }, // U1F2B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0397, 0, 0}, 0x1f2d }, // U1F2D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0399, 0, 0}, 0x1f3b }, // U1F3B # GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0399, 0, 0}, 0x1f3d }, // U1F3D # GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x039f, 0, 0}, 0x1f4b }, // U1F4B # GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x039f, 0, 0}, 0x1f4d }, // U1F4D # GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03a5, 0, 0}, 0x1f5b }, // U1F5B # GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03a5, 0, 0}, 0x1f5d }, // U1F5D # GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03a9, 0, 0}, 0x1f6d }, // U1F6D # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03a9, 0, 0}, 0x1f6b }, // U1F6B # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b1, 0, 0}, 0x1f03 }, // U1F03 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b1, 0, 0}, 0x1f05 }, // U1F05 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b5, 0, 0}, 0x1f15 }, // U1F15 # GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b5, 0, 0}, 0x1f13 }, // U1F13 # GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b7, 0, 0}, 0x1f23 }, // U1F23 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b7, 0, 0}, 0x1f25 }, // U1F25 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b9, 0, 0}, 0x1f35 }, // U1F35 # GREEK SMALL LETTER IOTA WITH DASIA AND OXIA -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b9, 0, 0}, 0x1f33 }, // U1F33 # GREEK SMALL LETTER IOTA WITH DASIA AND VARIA -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03bf, 0, 0}, 0x1f45 }, // U1F45 # GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03bf, 0, 0}, 0x1f43 }, // U1F43 # GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03c5, 0, 0}, 0x1f55 }, // U1F55 # GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03c5, 0, 0}, 0x1f53 }, // U1F53 # GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03c9, 0, 0}, 0x1f65 }, // U1F65 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03c9, 0, 0}, 0x1f63 }, // U1F63 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0391, 0, 0}, 0x1f0c }, // U1F0C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0391, 0, 0}, 0x1f0a }, // U1F0A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0395, 0, 0}, 0x1f1c }, // U1F1C # GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0395, 0, 0}, 0x1f1a }, // U1F1A # GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0397, 0, 0}, 0x1f2c }, // U1F2C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0397, 0, 0}, 0x1f2a }, // U1F2A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0399, 0, 0}, 0x1f3c }, // U1F3C # GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0399, 0, 0}, 0x1f3a }, // U1F3A # GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x039f, 0, 0}, 0x1f4c }, // U1F4C # GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x039f, 0, 0}, 0x1f4a }, // U1F4A # GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03a9, 0, 0}, 0x1f6c }, // U1F6C # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03a9, 0, 0}, 0x1f6a }, // U1F6A # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b1, 0, 0}, 0x1f04 }, // U1F04 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b1, 0, 0}, 0x1f02 }, // U1F02 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b5, 0, 0}, 0x1f12 }, // U1F12 # GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b5, 0, 0}, 0x1f14 }, // U1F14 # GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b7, 0, 0}, 0x1f22 }, // U1F22 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b7, 0, 0}, 0x1f24 }, // U1F24 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b9, 0, 0}, 0x1f32 }, // U1F32 # GREEK SMALL LETTER IOTA WITH PSILI AND VARIA -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b9, 0, 0}, 0x1f34 }, // U1F34 # GREEK SMALL LETTER IOTA WITH PSILI AND OXIA -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03bf, 0, 0}, 0x1f44 }, // U1F44 # GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03bf, 0, 0}, 0x1f42 }, // U1F42 # GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03c5, 0, 0}, 0x1f54 }, // U1F54 # GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03c5, 0, 0}, 0x1f52 }, // U1F52 # GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03c9, 0, 0}, 0x1f64 }, // U1F64 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03c9, 0, 0}, 0x1f62 }, // U1F62 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x002b, 0x004f, 0, 0}, 0x1ee0 }, // U1EE0 # LATIN CAPITAL LETTER O WITH HORN AND TILDE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x002b, 0x004f, 0, 0}, 0x1ede }, // U1EDE # LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x002b, 0x004f, 0, 0}, 0x1ee2 }, // U1EE2 # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x002b, 0x004f, 0, 0}, 0x1eda }, // U1EDA # LATIN CAPITAL LETTER O WITH HORN AND ACUTE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x002b, 0x004f, 0, 0}, 0x1edc }, // U1EDC # LATIN CAPITAL LETTER O WITH HORN AND GRAVE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x002b, 0x0055, 0, 0}, 0x1eea }, // U1EEA # LATIN CAPITAL LETTER U WITH HORN AND GRAVE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x002b, 0x0055, 0, 0}, 0x1ef0 }, // U1EF0 # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x002b, 0x0055, 0, 0}, 0x1eee }, // U1EEE # LATIN CAPITAL LETTER U WITH HORN AND TILDE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x002b, 0x0055, 0, 0}, 0x1ee8 }, // U1EE8 # LATIN CAPITAL LETTER U WITH HORN AND ACUTE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x002b, 0x0055, 0, 0}, 0x1eec }, // U1EEC # LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x002b, 0x006f, 0, 0}, 0x1edb }, // U1EDB # LATIN SMALL LETTER O WITH HORN AND ACUTE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x002b, 0x006f, 0, 0}, 0x1ee1 }, // U1EE1 # LATIN SMALL LETTER O WITH HORN AND TILDE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x002b, 0x006f, 0, 0}, 0x1edf }, // U1EDF # LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x002b, 0x006f, 0, 0}, 0x1ee3 }, // U1EE3 # LATIN SMALL LETTER O WITH HORN AND DOT BELOW -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x002b, 0x006f, 0, 0}, 0x1edd }, // U1EDD # LATIN SMALL LETTER O WITH HORN AND GRAVE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x002b, 0x0075, 0, 0}, 0x1eeb }, // U1EEB # LATIN SMALL LETTER U WITH HORN AND GRAVE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x002b, 0x0075, 0, 0}, 0x1ef1 }, // U1EF1 # LATIN SMALL LETTER U WITH HORN AND DOT BELOW -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x002b, 0x0075, 0, 0}, 0x1eed }, // U1EED # LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x002b, 0x0075, 0, 0}, 0x1ee9 }, // U1EE9 # LATIN SMALL LETTER U WITH HORN AND ACUTE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x002b, 0x0075, 0, 0}, 0x1eef }, // U1EEF # LATIN SMALL LETTER U WITH HORN AND TILDE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x002c, 0x0043, 0, 0}, 0x1e08 }, // U1E08 # LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x002c, 0x0063, 0, 0}, 0x1e09 }, // U1E09 # LATIN SMALL LETTER C WITH CEDILLA AND ACUTE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x002f, 0x004f, 0, 0}, 0x01fe }, // U01FE # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x002f, 0x006f, 0, 0}, 0x01ff }, // U01FF # LATIN SMALL LETTER O WITH STROKE AND ACUTE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0041, 0, 0}, 0x1eb2 }, // U1EB2 # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0041, 0, 0}, 0x1eb4 }, // U1EB4 # LATIN CAPITAL LETTER A WITH BREVE AND TILDE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0041, 0, 0}, 0x1eae }, // U1EAE # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0041, 0, 0}, 0x1eb0 }, // U1EB0 # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0061, 0, 0}, 0x1eb5 }, // U1EB5 # LATIN SMALL LETTER A WITH BREVE AND TILDE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0061, 0, 0}, 0x1eaf }, // U1EAF # LATIN SMALL LETTER A WITH BREVE AND ACUTE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0061, 0, 0}, 0x1eb3 }, // U1EB3 # LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0061, 0, 0}, 0x1eb1 }, // U1EB1 # LATIN SMALL LETTER A WITH BREVE AND GRAVE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0041, 0, 0}, 0x1ea8 }, // U1EA8 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0041, 0, 0}, 0x1ea6 }, // U1EA6 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0041, 0, 0}, 0x1eaa }, // U1EAA # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0041, 0, 0}, 0x1ea4 }, // U1EA4 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0045, 0, 0}, 0x1ec4 }, // U1EC4 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0045, 0, 0}, 0x1ec2 }, // U1EC2 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0045, 0, 0}, 0x1ec0 }, // U1EC0 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0045, 0, 0}, 0x1ebe }, // U1EBE # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005e, 0x004f, 0, 0}, 0x1ed6 }, // U1ED6 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005e, 0x004f, 0, 0}, 0x1ed4 }, // U1ED4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005e, 0x004f, 0, 0}, 0x1ed0 }, // U1ED0 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005e, 0x004f, 0, 0}, 0x1ed2 }, // U1ED2 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0061, 0, 0}, 0x1ea9 }, // U1EA9 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0061, 0, 0}, 0x1ea7 }, // U1EA7 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0061, 0, 0}, 0x1ea5 }, // U1EA5 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0061, 0, 0}, 0x1eab }, // U1EAB # LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0065, 0, 0}, 0x1ec5 }, // U1EC5 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0065, 0, 0}, 0x1ec1 }, // U1EC1 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0065, 0, 0}, 0x1ebf }, // U1EBF # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0065, 0, 0}, 0x1ec3 }, // U1EC3 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005e, 0x006f, 0, 0}, 0x1ed7 }, // U1ED7 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005e, 0x006f, 0, 0}, 0x1ed5 }, // U1ED5 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005e, 0x006f, 0, 0}, 0x1ed1 }, // U1ED1 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005e, 0x006f, 0, 0}, 0x1ed3 }, // U1ED3 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0045, 0, 0}, 0x1e16 }, // U1E16 # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0045, 0, 0}, 0x1e14 }, // U1E14 # LATIN CAPITAL LETTER E WITH MACRON AND GRAVE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005f, 0x004f, 0, 0}, 0x1e52 }, // U1E52 # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005f, 0x004f, 0, 0}, 0x1e50 }, // U1E50 # LATIN CAPITAL LETTER O WITH MACRON AND GRAVE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0065, 0, 0}, 0x1e15 }, // U1E15 # LATIN SMALL LETTER E WITH MACRON AND GRAVE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0065, 0, 0}, 0x1e17 }, // U1E17 # LATIN SMALL LETTER E WITH MACRON AND ACUTE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005f, 0x006f, 0, 0}, 0x1e51 }, // U1E51 # LATIN SMALL LETTER O WITH MACRON AND GRAVE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x005f, 0x006f, 0, 0}, 0x1e53 }, // U1E53 # LATIN SMALL LETTER O WITH MACRON AND ACUTE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0041, 0, 0}, 0x1eae }, // U1EAE # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0041, 0, 0}, 0x1eb4 }, // U1EB4 # LATIN CAPITAL LETTER A WITH BREVE AND TILDE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0041, 0, 0}, 0x1eb0 }, // U1EB0 # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0041, 0, 0}, 0x1eb2 }, // U1EB2 # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0061, 0, 0}, 0x1eb1 }, // U1EB1 # LATIN SMALL LETTER A WITH BREVE AND GRAVE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0061, 0, 0}, 0x1eaf }, // U1EAF # LATIN SMALL LETTER A WITH BREVE AND ACUTE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0061, 0, 0}, 0x1eb5 }, // U1EB5 # LATIN SMALL LETTER A WITH BREVE AND TILDE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0061, 0, 0}, 0x1eb3 }, // U1EB3 # LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x006f, 0x0041, 0, 0}, 0x01fa }, // U01FA # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x006f, 0x0061, 0, 0}, 0x01fb }, // U01FB # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x007e, 0x004f, 0, 0}, 0x1e4c }, // U1E4C # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0055, 0, 0}, 0x1e78 }, // U1E78 # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x007e, 0x006f, 0, 0}, 0x1e4d }, // U1E4D # LATIN SMALL LETTER O WITH TILDE AND ACUTE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0075, 0, 0}, 0x1e79 }, // U1E79 # LATIN SMALL LETTER U WITH TILDE AND ACUTE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0045, 0, 0}, 0x1e16 }, // U1E16 # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0045, 0, 0}, 0x1e14 }, // U1E14 # LATIN CAPITAL LETTER E WITH MACRON AND GRAVE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x00af, 0x004f, 0, 0}, 0x1e52 }, // U1E52 # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x00af, 0x004f, 0, 0}, 0x1e50 }, // U1E50 # LATIN CAPITAL LETTER O WITH MACRON AND GRAVE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0065, 0, 0}, 0x1e15 }, // U1E15 # LATIN SMALL LETTER E WITH MACRON AND GRAVE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0065, 0, 0}, 0x1e17 }, // U1E17 # LATIN SMALL LETTER E WITH MACRON AND ACUTE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x00af, 0x006f, 0, 0}, 0x1e53 }, // U1E53 # LATIN SMALL LETTER O WITH MACRON AND ACUTE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Multi_key), 0x00af, 0x006f, 0, 0}, 0x1e51 }, // U1E51 # LATIN SMALL LETTER O WITH MACRON AND GRAVE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Circumflex), 0x0041, 0, 0, 0}, 0x1eaa }, // U1EAA # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Circumflex), 0x0041, 0, 0, 0}, 0x1ea6 }, // U1EA6 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Circumflex), 0x0041, 0, 0, 0}, 0x1ea4 }, // U1EA4 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Circumflex), 0x0041, 0, 0, 0}, 0x1ea8 }, // U1EA8 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Circumflex), 0x0045, 0, 0, 0}, 0x1ec4 }, // U1EC4 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Circumflex), 0x0045, 0, 0, 0}, 0x1ec0 }, // U1EC0 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Circumflex), 0x0045, 0, 0, 0}, 0x1ec2 }, // U1EC2 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Circumflex), 0x0045, 0, 0, 0}, 0x1ebe }, // U1EBE # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Circumflex), 0x004f, 0, 0, 0}, 0x1ed0 }, // U1ED0 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Circumflex), 0x004f, 0, 0, 0}, 0x1ed2 }, // U1ED2 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Circumflex), 0x004f, 0, 0, 0}, 0x1ed4 }, // U1ED4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Circumflex), 0x004f, 0, 0, 0}, 0x1ed6 }, // U1ED6 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Circumflex), 0x0061, 0, 0, 0}, 0x1eab }, // U1EAB # LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Circumflex), 0x0061, 0, 0, 0}, 0x1ea5 }, // U1EA5 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Circumflex), 0x0061, 0, 0, 0}, 0x1ea9 }, // U1EA9 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Circumflex), 0x0061, 0, 0, 0}, 0x1ea7 }, // U1EA7 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Circumflex), 0x0065, 0, 0, 0}, 0x1ebf }, // U1EBF # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Circumflex), 0x0065, 0, 0, 0}, 0x1ec3 }, // U1EC3 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Circumflex), 0x0065, 0, 0, 0}, 0x1ec1 }, // U1EC1 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Circumflex), 0x0065, 0, 0, 0}, 0x1ec5 }, // U1EC5 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Circumflex), 0x006f, 0, 0, 0}, 0x1ed3 }, // U1ED3 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Circumflex), 0x006f, 0, 0, 0}, 0x1ed7 }, // U1ED7 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Circumflex), 0x006f, 0, 0, 0}, 0x1ed1 }, // U1ED1 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Circumflex), 0x006f, 0, 0, 0}, 0x1ed5 }, // U1ED5 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Tilde), 0x004f, 0, 0, 0}, 0x1e4c }, // U1E4C # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Tilde), 0x0055, 0, 0, 0}, 0x1e78 }, // U1E78 # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Tilde), 0x006f, 0, 0, 0}, 0x1e4d }, // U1E4D # LATIN SMALL LETTER O WITH TILDE AND ACUTE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Tilde), 0x0075, 0, 0, 0}, 0x1e79 }, // U1E79 # LATIN SMALL LETTER U WITH TILDE AND ACUTE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Macron), 0x0045, 0, 0, 0}, 0x1e16 }, // U1E16 # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Macron), 0x0045, 0, 0, 0}, 0x1e14 }, // U1E14 # LATIN CAPITAL LETTER E WITH MACRON AND GRAVE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Macron), 0x004f, 0, 0, 0}, 0x1e52 }, // U1E52 # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Macron), 0x004f, 0, 0, 0}, 0x1e50 }, // U1E50 # LATIN CAPITAL LETTER O WITH MACRON AND GRAVE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Macron), 0x0065, 0, 0, 0}, 0x1e17 }, // U1E17 # LATIN SMALL LETTER E WITH MACRON AND ACUTE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Macron), 0x0065, 0, 0, 0}, 0x1e15 }, // U1E15 # LATIN SMALL LETTER E WITH MACRON AND GRAVE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Macron), 0x006f, 0, 0, 0}, 0x1e53 }, // U1E53 # LATIN SMALL LETTER O WITH MACRON AND ACUTE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Macron), 0x006f, 0, 0, 0}, 0x1e51 }, // U1E51 # LATIN SMALL LETTER O WITH MACRON AND GRAVE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Breve), 0x0041, 0, 0, 0}, 0x1eb4 }, // U1EB4 # LATIN CAPITAL LETTER A WITH BREVE AND TILDE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Breve), 0x0041, 0, 0, 0}, 0x1eb0 }, // U1EB0 # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Breve), 0x0041, 0, 0, 0}, 0x1eae }, // U1EAE # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Breve), 0x0041, 0, 0, 0}, 0x1eb2 }, // U1EB2 # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Breve), 0x0061, 0, 0, 0}, 0x1eb1 }, // U1EB1 # LATIN SMALL LETTER A WITH BREVE AND GRAVE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Breve), 0x0061, 0, 0, 0}, 0x1eb3 }, // U1EB3 # LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Breve), 0x0061, 0, 0, 0}, 0x1eaf }, // U1EAF # LATIN SMALL LETTER A WITH BREVE AND ACUTE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Breve), 0x0061, 0, 0, 0}, 0x1eb5 }, // U1EB5 # LATIN SMALL LETTER A WITH BREVE AND TILDE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Diaeresis), 0x0049, 0, 0, 0}, 0x1e2e }, // U1E2E # LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Diaeresis), 0x0055, 0, 0, 0}, 0x01db }, // U01DB # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Diaeresis), 0x0055, 0, 0, 0}, 0x01d7 }, // U01D7 # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Diaeresis), 0x0069, 0, 0, 0}, 0x1e2f }, // U1E2F # LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Diaeresis), 0x0075, 0, 0, 0}, 0x01dc }, // U01DC # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Diaeresis), 0x0075, 0, 0, 0}, 0x01d8 }, // U01D8 # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Diaeresis), 0x03b9, 0, 0, 0}, 0x0390 }, // U0390 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Diaeresis), 0x03b9, 0, 0, 0}, 0x1fd2 }, // U1FD2 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Diaeresis), 0x03c5, 0, 0, 0}, 0x1fe2 }, // U1FE2 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Diaeresis), 0x03c5, 0, 0, 0}, 0x03b0 }, // U03B0 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Abovering), 0x0041, 0, 0, 0}, 0x01fa }, // U01FA # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Abovering), 0x0061, 0, 0, 0}, 0x01fb }, // U01FB # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Cedilla), 0x0043, 0, 0, 0}, 0x1e08 }, // U1E08 # LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Cedilla), 0x0063, 0, 0, 0}, 0x1e09 }, // U1E09 # LATIN SMALL LETTER C WITH CEDILLA AND ACUTE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Horn), 0x004f, 0, 0, 0}, 0x1ede }, // U1EDE # LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Horn), 0x004f, 0, 0, 0}, 0x1ee2 }, // U1EE2 # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Horn), 0x004f, 0, 0, 0}, 0x1edc }, // U1EDC # LATIN CAPITAL LETTER O WITH HORN AND GRAVE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Horn), 0x004f, 0, 0, 0}, 0x1ee0 }, // U1EE0 # LATIN CAPITAL LETTER O WITH HORN AND TILDE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Horn), 0x004f, 0, 0, 0}, 0x1eda }, // U1EDA # LATIN CAPITAL LETTER O WITH HORN AND ACUTE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Horn), 0x0055, 0, 0, 0}, 0x1eea }, // U1EEA # LATIN CAPITAL LETTER U WITH HORN AND GRAVE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Horn), 0x0055, 0, 0, 0}, 0x1ee8 }, // U1EE8 # LATIN CAPITAL LETTER U WITH HORN AND ACUTE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Horn), 0x0055, 0, 0, 0}, 0x1ef0 }, // U1EF0 # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Horn), 0x0055, 0, 0, 0}, 0x1eec }, // U1EEC # LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Horn), 0x0055, 0, 0, 0}, 0x1eee }, // U1EEE # LATIN CAPITAL LETTER U WITH HORN AND TILDE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Horn), 0x006f, 0, 0, 0}, 0x1edf }, // U1EDF # LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Horn), 0x006f, 0, 0, 0}, 0x1ee3 }, // U1EE3 # LATIN SMALL LETTER O WITH HORN AND DOT BELOW -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Horn), 0x006f, 0, 0, 0}, 0x1edd }, // U1EDD # LATIN SMALL LETTER O WITH HORN AND GRAVE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Horn), 0x006f, 0, 0, 0}, 0x1edb }, // U1EDB # LATIN SMALL LETTER O WITH HORN AND ACUTE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Horn), 0x006f, 0, 0, 0}, 0x1ee1 }, // U1EE1 # LATIN SMALL LETTER O WITH HORN AND TILDE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Horn), 0x0075, 0, 0, 0}, 0x1eed }, // U1EED # LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Horn), 0x0075, 0, 0, 0}, 0x1eef }, // U1EEF # LATIN SMALL LETTER U WITH HORN AND TILDE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Horn), 0x0075, 0, 0, 0}, 0x1ef1 }, // U1EF1 # LATIN SMALL LETTER U WITH HORN AND DOT BELOW -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Horn), 0x0075, 0, 0, 0}, 0x1eeb }, // U1EEB # LATIN SMALL LETTER U WITH HORN AND GRAVE -+// /* broken */ { {0x0000, UNITIZE(Qt::Key_Dead_Horn), 0x0075, 0, 0, 0}, 0x1ee9 }, // U1EE9 # LATIN SMALL LETTER U WITH HORN AND ACUTE -+ { {0x030f, 0x0041, 0, 0, 0, 0}, 0x0200 }, // U0200 # LATIN CAPITAL LETTER A WITH DOUBLE GRAVE -+ { {0x030f, 0x0045, 0, 0, 0, 0}, 0x0204 }, // U0204 # LATIN CAPITAL LETTER E WITH DOUBLE GRAVE -+ { {0x030f, 0x0049, 0, 0, 0, 0}, 0x0208 }, // U0208 # LATIN CAPITAL LETTER I WITH DOUBLE GRAVE -+ { {0x030f, 0x004f, 0, 0, 0, 0}, 0x020c }, // U020C # LATIN CAPITAL LETTER O WITH DOUBLE GRAVE -+ { {0x030f, 0x0052, 0, 0, 0, 0}, 0x0210 }, // U0210 # LATIN CAPITAL LETTER R WITH DOUBLE GRAVE -+ { {0x030f, 0x0055, 0, 0, 0, 0}, 0x0214 }, // U0214 # LATIN CAPITAL LETTER U WITH DOUBLE GRAVE -+ { {0x030f, 0x0061, 0, 0, 0, 0}, 0x0201 }, // U0201 # LATIN SMALL LETTER A WITH DOUBLE GRAVE -+ { {0x030f, 0x0065, 0, 0, 0, 0}, 0x0205 }, // U0205 # LATIN SMALL LETTER E WITH DOUBLE GRAVE -+ { {0x030f, 0x0069, 0, 0, 0, 0}, 0x0209 }, // U0209 # LATIN SMALL LETTER I WITH DOUBLE GRAVE -+ { {0x030f, 0x006f, 0, 0, 0, 0}, 0x020d }, // U020D # LATIN SMALL LETTER O WITH DOUBLE GRAVE -+ { {0x030f, 0x0072, 0, 0, 0, 0}, 0x0211 }, // U0211 # LATIN SMALL LETTER R WITH DOUBLE GRAVE -+ { {0x030f, 0x0075, 0, 0, 0, 0}, 0x0215 }, // U0215 # LATIN SMALL LETTER U WITH DOUBLE GRAVE -+ { {0x030f, 0x0474, 0, 0, 0, 0}, 0x0476 }, // U0476 # CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT -+ { {0x030f, 0x0475, 0, 0, 0, 0}, 0x0477 }, // U0477 # CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT -+ { {0x0311, 0x0041, 0, 0, 0, 0}, 0x0202 }, // U0202 # LATIN CAPITAL LETTER A WITH INVERTED BREVE -+ { {0x0311, 0x0045, 0, 0, 0, 0}, 0x0206 }, // U0206 # LATIN CAPITAL LETTER E WITH INVERTED BREVE -+ { {0x0311, 0x0049, 0, 0, 0, 0}, 0x020a }, // U020A # LATIN CAPITAL LETTER I WITH INVERTED BREVE -+ { {0x0311, 0x004f, 0, 0, 0, 0}, 0x020e }, // U020E # LATIN CAPITAL LETTER O WITH INVERTED BREVE -+ { {0x0311, 0x0052, 0, 0, 0, 0}, 0x0212 }, // U0212 # LATIN CAPITAL LETTER R WITH INVERTED BREVE -+ { {0x0311, 0x0055, 0, 0, 0, 0}, 0x0216 }, // U0216 # LATIN CAPITAL LETTER U WITH INVERTED BREVE -+ { {0x0311, 0x0061, 0, 0, 0, 0}, 0x0203 }, // U0203 # LATIN SMALL LETTER A WITH INVERTED BREVE -+ { {0x0311, 0x0065, 0, 0, 0, 0}, 0x0207 }, // U0207 # LATIN SMALL LETTER E WITH INVERTED BREVE -+ { {0x0311, 0x0069, 0, 0, 0, 0}, 0x020b }, // U020B # LATIN SMALL LETTER I WITH INVERTED BREVE -+ { {0x0311, 0x006f, 0, 0, 0, 0}, 0x020f }, // U020F # LATIN SMALL LETTER O WITH INVERTED BREVE -+ { {0x0311, 0x0072, 0, 0, 0, 0}, 0x0213 }, // U0213 # LATIN SMALL LETTER R WITH INVERTED BREVE -+ { {0x0311, 0x0075, 0, 0, 0, 0}, 0x0217 }, // U0217 # LATIN SMALL LETTER U WITH INVERTED BREVE -+ { {0x0313, 0x0391, 0, 0, 0, 0}, 0x1f08 }, // U1F08 # GREEK CAPITAL LETTER ALPHA WITH PSILI -+ { {0x0313, 0x0395, 0, 0, 0, 0}, 0x1f18 }, // U1F18 # GREEK CAPITAL LETTER EPSILON WITH PSILI -+ { {0x0313, 0x0397, 0, 0, 0, 0}, 0x1f28 }, // U1F28 # GREEK CAPITAL LETTER ETA WITH PSILI -+ { {0x0313, 0x0399, 0, 0, 0, 0}, 0x1f38 }, // U1F38 # GREEK CAPITAL LETTER IOTA WITH PSILI -+ { {0x0313, 0x039f, 0, 0, 0, 0}, 0x1f48 }, // U1F48 # GREEK CAPITAL LETTER OMICRON WITH PSILI -+ { {0x0313, 0x03a9, 0, 0, 0, 0}, 0x1f68 }, // U1F68 # GREEK CAPITAL LETTER OMEGA WITH PSILI -+ { {0x0313, 0x03b1, 0, 0, 0, 0}, 0x1f00 }, // U1F00 # GREEK SMALL LETTER ALPHA WITH PSILI -+ { {0x0313, 0x03b5, 0, 0, 0, 0}, 0x1f10 }, // U1F10 # GREEK SMALL LETTER EPSILON WITH PSILI -+ { {0x0313, 0x03b7, 0, 0, 0, 0}, 0x1f20 }, // U1F20 # GREEK SMALL LETTER ETA WITH PSILI -+ { {0x0313, 0x03b9, 0, 0, 0, 0}, 0x1f30 }, // U1F30 # GREEK SMALL LETTER IOTA WITH PSILI -+ { {0x0313, 0x03bf, 0, 0, 0, 0}, 0x1f40 }, // U1F40 # GREEK SMALL LETTER OMICRON WITH PSILI -+ { {0x0313, 0x03c1, 0, 0, 0, 0}, 0x1fe4 }, // U1FE4 # GREEK SMALL LETTER RHO WITH PSILI -+ { {0x0313, 0x03c5, 0, 0, 0, 0}, 0x1f50 }, // U1F50 # GREEK SMALL LETTER UPSILON WITH PSILI -+ { {0x0313, 0x03c9, 0, 0, 0, 0}, 0x1f60 }, // U1F60 # GREEK SMALL LETTER OMEGA WITH PSILI -+ { {0x0314, 0x0391, 0, 0, 0, 0}, 0x1f09 }, // U1F09 # GREEK CAPITAL LETTER ALPHA WITH DASIA -+ { {0x0314, 0x0395, 0, 0, 0, 0}, 0x1f19 }, // U1F19 # GREEK CAPITAL LETTER EPSILON WITH DASIA -+ { {0x0314, 0x0397, 0, 0, 0, 0}, 0x1f29 }, // U1F29 # GREEK CAPITAL LETTER ETA WITH DASIA -+ { {0x0314, 0x0399, 0, 0, 0, 0}, 0x1f39 }, // U1F39 # GREEK CAPITAL LETTER IOTA WITH DASIA -+ { {0x0314, 0x039f, 0, 0, 0, 0}, 0x1f49 }, // U1F49 # GREEK CAPITAL LETTER OMICRON WITH DASIA -+ { {0x0314, 0x03a1, 0, 0, 0, 0}, 0x1fec }, // U1FEC # GREEK CAPITAL LETTER RHO WITH DASIA -+ { {0x0314, 0x03a5, 0, 0, 0, 0}, 0x1f59 }, // U1F59 # GREEK CAPITAL LETTER UPSILON WITH DASIA -+ { {0x0314, 0x03a9, 0, 0, 0, 0}, 0x1f69 }, // U1F69 # GREEK CAPITAL LETTER OMEGA WITH DASIA -+ { {0x0314, 0x03b1, 0, 0, 0, 0}, 0x1f01 }, // U1F01 # GREEK SMALL LETTER ALPHA WITH DASIA -+ { {0x0314, 0x03b5, 0, 0, 0, 0}, 0x1f11 }, // U1F11 # GREEK SMALL LETTER EPSILON WITH DASIA -+ { {0x0314, 0x03b7, 0, 0, 0, 0}, 0x1f21 }, // U1F21 # GREEK SMALL LETTER ETA WITH DASIA -+ { {0x0314, 0x03b9, 0, 0, 0, 0}, 0x1f31 }, // U1F31 # GREEK SMALL LETTER IOTA WITH DASIA -+ { {0x0314, 0x03bf, 0, 0, 0, 0}, 0x1f41 }, // U1F41 # GREEK SMALL LETTER OMICRON WITH DASIA -+ { {0x0314, 0x03c1, 0, 0, 0, 0}, 0x1fe5 }, // U1FE5 # GREEK SMALL LETTER RHO WITH DASIA -+ { {0x0314, 0x03c5, 0, 0, 0, 0}, 0x1f51 }, // U1F51 # GREEK SMALL LETTER UPSILON WITH DASIA -+ { {0x0314, 0x03c9, 0, 0, 0, 0}, 0x1f61 }, // U1F61 # GREEK SMALL LETTER OMEGA WITH DASIA -+ { {0x0324, 0x0055, 0, 0, 0, 0}, 0x1e72 }, // U1E72 # LATIN CAPITAL LETTER U WITH DIAERESIS BELOW -+ { {0x0324, 0x0075, 0, 0, 0, 0}, 0x1e73 }, // U1E73 # LATIN SMALL LETTER U WITH DIAERESIS BELOW -+ { {0x0325, 0x0041, 0, 0, 0, 0}, 0x1e00 }, // U1E00 # LATIN CAPITAL LETTER A WITH RING BELOW -+ { {0x0325, 0x0061, 0, 0, 0, 0}, 0x1e01 }, // U1E01 # LATIN SMALL LETTER A WITH RING BELOW -+ { {0x0326, 0x0053, 0, 0, 0, 0}, 0x0218 }, // U0218 # LATIN CAPITAL LETTER S WITH COMMA BELOW -+ { {0x0326, 0x0054, 0, 0, 0, 0}, 0x021a }, // U021A # LATIN CAPITAL LETTER T WITH COMMA BELOW -+ { {0x0326, 0x0073, 0, 0, 0, 0}, 0x0219 }, // U0219 # LATIN SMALL LETTER S WITH COMMA BELOW -+ { {0x0326, 0x0074, 0, 0, 0, 0}, 0x021b }, // U021B # LATIN SMALL LETTER T WITH COMMA BELOW -+ { {0x032d, 0x0044, 0, 0, 0, 0}, 0x1e12 }, // U1E12 # LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW -+ { {0x032d, 0x0045, 0, 0, 0, 0}, 0x1e18 }, // U1E18 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW -+ { {0x032d, 0x004c, 0, 0, 0, 0}, 0x1e3c }, // U1E3C # LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW -+ { {0x032d, 0x004e, 0, 0, 0, 0}, 0x1e4a }, // U1E4A # LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW -+ { {0x032d, 0x0054, 0, 0, 0, 0}, 0x1e70 }, // U1E70 # LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW -+ { {0x032d, 0x0055, 0, 0, 0, 0}, 0x1e76 }, // U1E76 # LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW -+ { {0x032d, 0x0064, 0, 0, 0, 0}, 0x1e13 }, // U1E13 # LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW -+ { {0x032d, 0x0065, 0, 0, 0, 0}, 0x1e19 }, // U1E19 # LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW -+ { {0x032d, 0x006c, 0, 0, 0, 0}, 0x1e3d }, // U1E3D # LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW -+ { {0x032d, 0x006e, 0, 0, 0, 0}, 0x1e4b }, // U1E4B # LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW -+ { {0x032d, 0x0074, 0, 0, 0, 0}, 0x1e71 }, // U1E71 # LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW -+ { {0x032d, 0x0075, 0, 0, 0, 0}, 0x1e77 }, // U1E77 # LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW -+ { {0x032e, 0x0048, 0, 0, 0, 0}, 0x1e2a }, // U1E2A # LATIN CAPITAL LETTER H WITH BREVE BELOW -+ { {0x032e, 0x0068, 0, 0, 0, 0}, 0x1e2b }, // U1E2B # LATIN SMALL LETTER H WITH BREVE BELOW -+ { {0x0330, 0x0045, 0, 0, 0, 0}, 0x1e1a }, // U1E1A # LATIN CAPITAL LETTER E WITH TILDE BELOW -+ { {0x0330, 0x0049, 0, 0, 0, 0}, 0x1e2c }, // U1E2C # LATIN CAPITAL LETTER I WITH TILDE BELOW -+ { {0x0330, 0x0055, 0, 0, 0, 0}, 0x1e74 }, // U1E74 # LATIN CAPITAL LETTER U WITH TILDE BELOW -+ { {0x0330, 0x0065, 0, 0, 0, 0}, 0x1e1b }, // U1E1B # LATIN SMALL LETTER E WITH TILDE BELOW -+ { {0x0330, 0x0069, 0, 0, 0, 0}, 0x1e2d }, // U1E2D # LATIN SMALL LETTER I WITH TILDE BELOW -+ { {0x0330, 0x0075, 0, 0, 0, 0}, 0x1e75 }, // U1E75 # LATIN SMALL LETTER U WITH TILDE BELOW -+ { {0x0331, 0x0042, 0, 0, 0, 0}, 0x1e06 }, // U1E06 # LATIN CAPITAL LETTER B WITH LINE BELOW -+ { {0x0331, 0x0044, 0, 0, 0, 0}, 0x1e0e }, // U1E0E # LATIN CAPITAL LETTER D WITH LINE BELOW -+ { {0x0331, 0x004b, 0, 0, 0, 0}, 0x1e34 }, // U1E34 # LATIN CAPITAL LETTER K WITH LINE BELOW -+ { {0x0331, 0x004c, 0, 0, 0, 0}, 0x1e3a }, // U1E3A # LATIN CAPITAL LETTER L WITH LINE BELOW -+ { {0x0331, 0x004e, 0, 0, 0, 0}, 0x1e48 }, // U1E48 # LATIN CAPITAL LETTER N WITH LINE BELOW -+ { {0x0331, 0x0052, 0, 0, 0, 0}, 0x1e5e }, // U1E5E # LATIN CAPITAL LETTER R WITH LINE BELOW -+ { {0x0331, 0x0054, 0, 0, 0, 0}, 0x1e6e }, // U1E6E # LATIN CAPITAL LETTER T WITH LINE BELOW -+ { {0x0331, 0x005a, 0, 0, 0, 0}, 0x1e94 }, // U1E94 # LATIN CAPITAL LETTER Z WITH LINE BELOW -+ { {0x0331, 0x0062, 0, 0, 0, 0}, 0x1e07 }, // U1E07 # LATIN SMALL LETTER B WITH LINE BELOW -+ { {0x0331, 0x0064, 0, 0, 0, 0}, 0x1e0f }, // U1E0F # LATIN SMALL LETTER D WITH LINE BELOW -+ { {0x0331, 0x0068, 0, 0, 0, 0}, 0x1e96 }, // U1E96 # LATIN SMALL LETTER H WITH LINE BELOW -+ { {0x0331, 0x006b, 0, 0, 0, 0}, 0x1e35 }, // U1E35 # LATIN SMALL LETTER K WITH LINE BELOW -+ { {0x0331, 0x006c, 0, 0, 0, 0}, 0x1e3b }, // U1E3B # LATIN SMALL LETTER L WITH LINE BELOW -+ { {0x0331, 0x006e, 0, 0, 0, 0}, 0x1e49 }, // U1E49 # LATIN SMALL LETTER N WITH LINE BELOW -+ { {0x0331, 0x0072, 0, 0, 0, 0}, 0x1e5f }, // U1E5F # LATIN SMALL LETTER R WITH LINE BELOW -+ { {0x0331, 0x0074, 0, 0, 0, 0}, 0x1e6f }, // U1E6F # LATIN SMALL LETTER T WITH LINE BELOW -+ { {0x0331, 0x007a, 0, 0, 0, 0}, 0x1e95 }, // U1E95 # LATIN SMALL LETTER Z WITH LINE BELOW -+ { {0x0342, 0x0313, 0x0391, 0, 0, 0}, 0x1f0e }, // U1F0E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI -+ { {0x0342, 0x0313, 0x0397, 0, 0, 0}, 0x1f2e }, // U1F2E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI -+ { {0x0342, 0x0313, 0x0399, 0, 0, 0}, 0x1f3e }, // U1F3E # GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI -+ { {0x0342, 0x0313, 0x03a9, 0, 0, 0}, 0x1f6e }, // U1F6E # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI -+ { {0x0342, 0x0313, 0x03b1, 0, 0, 0}, 0x1f06 }, // U1F06 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI -+ { {0x0342, 0x0313, 0x03b7, 0, 0, 0}, 0x1f26 }, // U1F26 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI -+ { {0x0342, 0x0313, 0x03b9, 0, 0, 0}, 0x1f36 }, // U1F36 # GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI -+ { {0x0342, 0x0313, 0x03c5, 0, 0, 0}, 0x1f56 }, // U1F56 # GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI -+ { {0x0342, 0x0313, 0x03c9, 0, 0, 0}, 0x1f66 }, // U1F66 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI -+ { {0x0342, 0x0314, 0x0391, 0, 0, 0}, 0x1f0f }, // U1F0F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI -+ { {0x0342, 0x0314, 0x0397, 0, 0, 0}, 0x1f2f }, // U1F2F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI -+ { {0x0342, 0x0314, 0x0399, 0, 0, 0}, 0x1f3f }, // U1F3F # GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI -+ { {0x0342, 0x0314, 0x03a5, 0, 0, 0}, 0x1f5f }, // U1F5F # GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI -+ { {0x0342, 0x0314, 0x03a9, 0, 0, 0}, 0x1f6f }, // U1F6F # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI -+ { {0x0342, 0x0314, 0x03b1, 0, 0, 0}, 0x1f07 }, // U1F07 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI -+ { {0x0342, 0x0314, 0x03b7, 0, 0, 0}, 0x1f27 }, // U1F27 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI -+ { {0x0342, 0x0314, 0x03b9, 0, 0, 0}, 0x1f37 }, // U1F37 # GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI -+ { {0x0342, 0x0314, 0x03c5, 0, 0, 0}, 0x1f57 }, // U1F57 # GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI -+ { {0x0342, 0x0314, 0x03c9, 0, 0, 0}, 0x1f67 }, // U1F67 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI -+ { {0x0342, 0x03b1, 0, 0, 0, 0}, 0x1fb6 }, // U1FB6 # GREEK SMALL LETTER ALPHA WITH PERISPOMENI -+ { {0x0342, 0x03b7, 0, 0, 0, 0}, 0x1fc6 }, // U1FC6 # GREEK SMALL LETTER ETA WITH PERISPOMENI -+ { {0x0342, 0x03b9, 0, 0, 0, 0}, 0x1fd6 }, // U1FD6 # GREEK SMALL LETTER IOTA WITH PERISPOMENI -+ { {0x0342, 0x03c5, 0, 0, 0, 0}, 0x1fe6 }, // U1FE6 # GREEK SMALL LETTER UPSILON WITH PERISPOMENI -+ { {0x0342, 0x03c9, 0, 0, 0, 0}, 0x1ff6 }, // U1FF6 # GREEK SMALL LETTER OMEGA WITH PERISPOMENI -+ { {0x0342, 0x03ca, 0, 0, 0, 0}, 0x1fd7 }, // U1FD7 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI -+ { {0x0342, 0x03cb, 0, 0, 0, 0}, 0x1fe7 }, // U1FE7 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI -+ { {0x0342, 0x1f00, 0, 0, 0, 0}, 0x1f06 }, // U1F06 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI -+ { {0x0342, 0x1f01, 0, 0, 0, 0}, 0x1f07 }, // U1F07 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI -+ { {0x0342, 0x1f08, 0, 0, 0, 0}, 0x1f0e }, // U1F0E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI -+ { {0x0342, 0x1f09, 0, 0, 0, 0}, 0x1f0f }, // U1F0F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI -+ { {0x0342, 0x1f20, 0, 0, 0, 0}, 0x1f26 }, // U1F26 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI -+ { {0x0342, 0x1f21, 0, 0, 0, 0}, 0x1f27 }, // U1F27 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI -+ { {0x0342, 0x1f28, 0, 0, 0, 0}, 0x1f2e }, // U1F2E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI -+ { {0x0342, 0x1f29, 0, 0, 0, 0}, 0x1f2f }, // U1F2F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI -+ { {0x0342, 0x1f30, 0, 0, 0, 0}, 0x1f36 }, // U1F36 # GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI -+ { {0x0342, 0x1f31, 0, 0, 0, 0}, 0x1f37 }, // U1F37 # GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI -+ { {0x0342, 0x1f38, 0, 0, 0, 0}, 0x1f3e }, // U1F3E # GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI -+ { {0x0342, 0x1f39, 0, 0, 0, 0}, 0x1f3f }, // U1F3F # GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI -+ { {0x0342, 0x1f50, 0, 0, 0, 0}, 0x1f56 }, // U1F56 # GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI -+ { {0x0342, 0x1f51, 0, 0, 0, 0}, 0x1f57 }, // U1F57 # GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI -+ { {0x0342, 0x1f59, 0, 0, 0, 0}, 0x1f5f }, // U1F5F # GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI -+ { {0x0342, 0x1f60, 0, 0, 0, 0}, 0x1f66 }, // U1F66 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI -+ { {0x0342, 0x1f61, 0, 0, 0, 0}, 0x1f67 }, // U1F67 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI -+ { {0x0342, 0x1f68, 0, 0, 0, 0}, 0x1f6e }, // U1F6E # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI -+ { {0x0342, 0x1f69, 0, 0, 0, 0}, 0x1f6f }, // U1F6F # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI -+ { {0x0342, UNITIZE(Qt::Key_Multi_key), 0x0022, 0x03b9, 0, 0}, 0x1fd7 }, // U1FD7 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI -+ { {0x0342, UNITIZE(Qt::Key_Multi_key), 0x0022, 0x03c5, 0, 0}, 0x1fe7 }, // U1FE7 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI -+ { {0x0342, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0391, 0, 0}, 0x1f0f }, // U1F0F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI -+ { {0x0342, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0397, 0, 0}, 0x1f2f }, // U1F2F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI -+ { {0x0342, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0399, 0, 0}, 0x1f3f }, // U1F3F # GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI -+ { {0x0342, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03a5, 0, 0}, 0x1f5f }, // U1F5F # GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI -+ { {0x0342, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03a9, 0, 0}, 0x1f6f }, // U1F6F # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI -+ { {0x0342, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b1, 0, 0}, 0x1f07 }, // U1F07 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI -+ { {0x0342, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b7, 0, 0}, 0x1f27 }, // U1F27 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI -+ { {0x0342, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b9, 0, 0}, 0x1f37 }, // U1F37 # GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI -+ { {0x0342, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03c5, 0, 0}, 0x1f57 }, // U1F57 # GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI -+ { {0x0342, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03c9, 0, 0}, 0x1f67 }, // U1F67 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI -+ { {0x0342, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0391, 0, 0}, 0x1f0e }, // U1F0E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI -+ { {0x0342, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0397, 0, 0}, 0x1f2e }, // U1F2E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI -+ { {0x0342, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0399, 0, 0}, 0x1f3e }, // U1F3E # GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI -+ { {0x0342, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03a9, 0, 0}, 0x1f6e }, // U1F6E # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI -+ { {0x0342, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b1, 0, 0}, 0x1f06 }, // U1F06 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI -+ { {0x0342, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b7, 0, 0}, 0x1f26 }, // U1F26 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI -+ { {0x0342, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b9, 0, 0}, 0x1f36 }, // U1F36 # GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI -+ { {0x0342, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03c5, 0, 0}, 0x1f56 }, // U1F56 # GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI -+ { {0x0342, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03c9, 0, 0}, 0x1f66 }, // U1F66 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI -+ { {0x0342, UNITIZE(Qt::Key_Dead_Diaeresis), 0x03b9, 0, 0, 0}, 0x1fd7 }, // U1FD7 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI -+ { {0x0342, UNITIZE(Qt::Key_Dead_Diaeresis), 0x03c5, 0, 0, 0}, 0x1fe7 }, // U1FE7 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0000, 0x0044, 0, 0, 0}, 0x0110 }, // U0110 # LATIN CAPITAL LETTER D WITH STROKE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0000, 0x0047, 0, 0, 0}, 0x01e4 }, // U01E4 # LATIN CAPITAL LETTER G WITH STROKE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0000, 0x0048, 0, 0, 0}, 0x0126 }, // U0126 # LATIN CAPITAL LETTER H WITH STROKE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0000, 0x0049, 0, 0, 0}, 0x0197 }, // U0197 # LATIN CAPITAL LETTER I WITH STROKE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0000, 0x004c, 0, 0, 0}, 0x0141 }, // U0141 # LATIN CAPITAL LETTER L WITH STROKE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0000, 0x004f, 0, 0, 0}, 0x00d8 }, // U00D8 # LATIN CAPITAL LETTER O WITH STROKE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0000, 0x0054, 0, 0, 0}, 0x0166 }, // U0166 # LATIN CAPITAL LETTER T WITH STROKE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0000, 0x005a, 0, 0, 0}, 0x01b5 }, // U01B5 # LATIN CAPITAL LETTER Z WITH STROKE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0000, 0x0062, 0, 0, 0}, 0x0180 }, // U0180 # LATIN SMALL LETTER B WITH STROKE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0000, 0x0064, 0, 0, 0}, 0x0111 }, // U0111 # LATIN SMALL LETTER D WITH STROKE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0000, 0x0067, 0, 0, 0}, 0x01e5 }, // U01E5 # LATIN SMALL LETTER G WITH STROKE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0000, 0x0068, 0, 0, 0}, 0x0127 }, // U0127 # LATIN SMALL LETTER H WITH STROKE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0000, 0x0069, 0, 0, 0}, 0x0268 }, // U0268 # LATIN SMALL LETTER I WITH STROKE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0000, 0x006c, 0, 0, 0}, 0x0142 }, // U0142 # LATIN SMALL LETTER L WITH STROKE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0000, 0x006f, 0, 0, 0}, 0x00f8 }, // U00F8 # LATIN SMALL LETTER O WITH STROKE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0000, 0x0074, 0, 0, 0}, 0x0167 }, // U0167 # LATIN SMALL LETTER T WITH STROKE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0000, 0x007a, 0, 0, 0}, 0x01b6 }, // U01B6 # LATIN SMALL LETTER Z WITH STROKE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0000, 0x0294, 0, 0, 0}, 0x02a1 }, // U02A1 # LATIN LETTER GLOTTAL STOP WITH STROKE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0000, 0x0338, 0, 0, 0}, 0x2260 }, // U2260 # NOT EQUAL TO -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0000, 0x0413, 0, 0, 0}, 0x0492 }, // U0492 # CYRILLIC CAPITAL LETTER GHE WITH STROKE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0000, 0x041a, 0, 0, 0}, 0x049e }, // U049E # CYRILLIC CAPITAL LETTER KA WITH STROKE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0000, 0x0433, 0, 0, 0}, 0x0493 }, // U0493 # CYRILLIC SMALL LETTER GHE WITH STROKE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0000, 0x043a, 0, 0, 0}, 0x049f }, // U049F # CYRILLIC SMALL LETTER KA WITH STROKE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0000, 0x04ae, 0, 0, 0}, 0x04b0 }, // U04B0 # CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0000, 0x04af, 0, 0, 0}, 0x04b1 }, // U04B1 # CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0000, 0x2190, 0, 0, 0}, 0x219a }, // U219A # LEFTWARDS ARROW WITH STROKE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0000, 0x2192, 0, 0, 0}, 0x219b }, // U219B # RIGHTWARDS ARROW WITH STROKE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0000, 0x2194, 0, 0, 0}, 0x21ae }, // U21AE # LEFT RIGHT ARROW WITH STROKE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0020, 0x0020, 0, 0, 0}, 0x00a0 }, // nobreakspace # NO-BREAK SPACE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0020, 0x0027, 0, 0, 0}, 0x0027 }, // apostrophe -+ { {UNITIZE(Qt::Key_Multi_key), 0x0020, 0x002c, 0, 0, 0}, 0x00b8 }, // cedilla -+ { {UNITIZE(Qt::Key_Multi_key), 0x0020, 0x002d, 0, 0, 0}, 0x007e }, // asciitilde -+ { {UNITIZE(Qt::Key_Multi_key), 0x0020, 0x002e, 0, 0, 0}, 0x2008 }, // U2008 # PUNCTUATION SPACE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0020, 0x003e, 0, 0, 0}, 0x005e }, // asciicircum -+ { {UNITIZE(Qt::Key_Multi_key), 0x0020, 0x005e, 0, 0, 0}, 0x005e }, // asciicircum -+ { {UNITIZE(Qt::Key_Multi_key), 0x0020, 0x0060, 0, 0, 0}, 0x0060 }, // grave -+ { {UNITIZE(Qt::Key_Multi_key), 0x0020, 0x007e, 0, 0, 0}, 0x007e }, // asciitilde -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0000, 0, 0, 0}, 0x1ef0 }, // U1EF0 # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0000, 0, 0, 0}, 0x1ee3 }, // U1EE3 # LATIN SMALL LETTER O WITH HORN AND DOT BELOW -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0000, 0, 0, 0}, 0x1ee2 }, // U1EE2 # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0000, 0, 0, 0}, 0x1ef1 }, // U1EF1 # LATIN SMALL LETTER U WITH HORN AND DOT BELOW -+ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0021, 0, 0, 0}, 0x00a1 }, // exclamdown -+ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x002b, 0x004f, 0, 0}, 0x1ee2 }, // U1EE2 # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW -+ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x002b, 0x0055, 0, 0}, 0x1ef0 }, // U1EF0 # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW -+ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x002b, 0x006f, 0, 0}, 0x1ee3 }, // U1EE3 # LATIN SMALL LETTER O WITH HORN AND DOT BELOW -+ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x002b, 0x0075, 0, 0}, 0x1ef1 }, // U1EF1 # LATIN SMALL LETTER U WITH HORN AND DOT BELOW -+ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0041, 0, 0, 0}, 0x1ea0 }, // U1EA0 # LATIN CAPITAL LETTER A WITH DOT BELOW -+ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0042, 0, 0, 0}, 0x1e04 }, // U1E04 # LATIN CAPITAL LETTER B WITH DOT BELOW -+ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0044, 0, 0, 0}, 0x1e0c }, // U1E0C # LATIN CAPITAL LETTER D WITH DOT BELOW -+ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0045, 0, 0, 0}, 0x1eb8 }, // U1EB8 # LATIN CAPITAL LETTER E WITH DOT BELOW -+ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0048, 0, 0, 0}, 0x1e24 }, // U1E24 # LATIN CAPITAL LETTER H WITH DOT BELOW -+ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0049, 0, 0, 0}, 0x1eca }, // U1ECA # LATIN CAPITAL LETTER I WITH DOT BELOW -+ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x004b, 0, 0, 0}, 0x1e32 }, // U1E32 # LATIN CAPITAL LETTER K WITH DOT BELOW -+ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x004c, 0, 0, 0}, 0x1e36 }, // U1E36 # LATIN CAPITAL LETTER L WITH DOT BELOW -+ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x004d, 0, 0, 0}, 0x1e42 }, // U1E42 # LATIN CAPITAL LETTER M WITH DOT BELOW -+ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x004e, 0, 0, 0}, 0x1e46 }, // U1E46 # LATIN CAPITAL LETTER N WITH DOT BELOW -+ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x004f, 0, 0, 0}, 0x1ecc }, // U1ECC # LATIN CAPITAL LETTER O WITH DOT BELOW -+ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0052, 0, 0, 0}, 0x1e5a }, // U1E5A # LATIN CAPITAL LETTER R WITH DOT BELOW -+ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0053, 0, 0, 0}, 0x1e62 }, // U1E62 # LATIN CAPITAL LETTER S WITH DOT BELOW -+ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0054, 0, 0, 0}, 0x1e6c }, // U1E6C # LATIN CAPITAL LETTER T WITH DOT BELOW -+ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0055, 0, 0, 0}, 0x1ee4 }, // U1EE4 # LATIN CAPITAL LETTER U WITH DOT BELOW -+ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0056, 0, 0, 0}, 0x1e7e }, // U1E7E # LATIN CAPITAL LETTER V WITH DOT BELOW -+ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0057, 0, 0, 0}, 0x1e88 }, // U1E88 # LATIN CAPITAL LETTER W WITH DOT BELOW -+ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0059, 0, 0, 0}, 0x1ef4 }, // U1EF4 # LATIN CAPITAL LETTER Y WITH DOT BELOW -+ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x005a, 0, 0, 0}, 0x1e92 }, // U1E92 # LATIN CAPITAL LETTER Z WITH DOT BELOW -+ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x005e, 0, 0, 0}, 0x00a6 }, // brokenbar -+ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0061, 0, 0, 0}, 0x1ea1 }, // U1EA1 # LATIN SMALL LETTER A WITH DOT BELOW -+ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0062, 0, 0, 0}, 0x1e05 }, // U1E05 # LATIN SMALL LETTER B WITH DOT BELOW -+ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0064, 0, 0, 0}, 0x1e0d }, // U1E0D # LATIN SMALL LETTER D WITH DOT BELOW -+ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0065, 0, 0, 0}, 0x1eb9 }, // U1EB9 # LATIN SMALL LETTER E WITH DOT BELOW -+ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0068, 0, 0, 0}, 0x1e25 }, // U1E25 # LATIN SMALL LETTER H WITH DOT BELOW -+ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0069, 0, 0, 0}, 0x1ecb }, // U1ECB # LATIN SMALL LETTER I WITH DOT BELOW -+ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x006b, 0, 0, 0}, 0x1e33 }, // U1E33 # LATIN SMALL LETTER K WITH DOT BELOW -+ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x006c, 0, 0, 0}, 0x1e37 }, // U1E37 # LATIN SMALL LETTER L WITH DOT BELOW -+ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x006d, 0, 0, 0}, 0x1e43 }, // U1E43 # LATIN SMALL LETTER M WITH DOT BELOW -+ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x006e, 0, 0, 0}, 0x1e47 }, // U1E47 # LATIN SMALL LETTER N WITH DOT BELOW -+ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x006f, 0, 0, 0}, 0x1ecd }, // U1ECD # LATIN SMALL LETTER O WITH DOT BELOW -+ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0072, 0, 0, 0}, 0x1e5b }, // U1E5B # LATIN SMALL LETTER R WITH DOT BELOW -+ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0073, 0, 0, 0}, 0x1e63 }, // U1E63 # LATIN SMALL LETTER S WITH DOT BELOW -+ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0074, 0, 0, 0}, 0x1e6d }, // U1E6D # LATIN SMALL LETTER T WITH DOT BELOW -+ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0075, 0, 0, 0}, 0x1ee5 }, // U1EE5 # LATIN SMALL LETTER U WITH DOT BELOW -+ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0076, 0, 0, 0}, 0x1e7f }, // U1E7F # LATIN SMALL LETTER V WITH DOT BELOW -+ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0077, 0, 0, 0}, 0x1e89 }, // U1E89 # LATIN SMALL LETTER W WITH DOT BELOW -+ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0079, 0, 0, 0}, 0x1ef5 }, // U1EF5 # LATIN SMALL LETTER Y WITH DOT BELOW -+ { {UNITIZE(Qt::Key_Multi_key), 0x0021, 0x007a, 0, 0, 0}, 0x1e93 }, // U1E93 # LATIN SMALL LETTER Z WITH DOT BELOW -+ { {UNITIZE(Qt::Key_Multi_key), 0x0021, UNITIZE(Qt::Key_Dead_Horn), 0x004f, 0, 0}, 0x1ee2 }, // U1EE2 # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW -+ { {UNITIZE(Qt::Key_Multi_key), 0x0021, UNITIZE(Qt::Key_Dead_Horn), 0x0055, 0, 0}, 0x1ef0 }, // U1EF0 # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW -+ { {UNITIZE(Qt::Key_Multi_key), 0x0021, UNITIZE(Qt::Key_Dead_Horn), 0x006f, 0, 0}, 0x1ee3 }, // U1EE3 # LATIN SMALL LETTER O WITH HORN AND DOT BELOW -+ { {UNITIZE(Qt::Key_Multi_key), 0x0021, UNITIZE(Qt::Key_Dead_Horn), 0x0075, 0, 0}, 0x1ef1 }, // U1EF1 # LATIN SMALL LETTER U WITH HORN AND DOT BELOW -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0000, 0, 0, 0}, 0x0344 }, // U0344 # COMBINING GREEK DIALYTIKA TONOS -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0000, 0x004f, 0, 0}, 0x1e4e }, // U1E4E # LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0000, 0x006f, 0, 0}, 0x1e4f }, // U1E4F # LATIN SMALL LETTER O WITH TILDE AND DIAERESIS -+ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0027, 0, 0, 0}, 0x0344 }, // U0344 # COMBINING GREEK DIALYTIKA TONOS -+ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x002c, 0, 0, 0}, 0x201e }, // U201e # DOUBLE LOW-9 QUOTATION MARK -+ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x002f, 0, 0, 0}, 0x301e }, // U301e # DOUBLE PRIME QUOTATION MARK -+ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x003c, 0, 0, 0}, 0x201c }, // U201c # LEFT DOUBLE QUOTATION MARK -+ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x003e, 0, 0, 0}, 0x201d }, // U201d # RIGHT DOUBLE QUOTATION MARK -+ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0041, 0, 0, 0}, 0x00c4 }, // U00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS -+ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0045, 0, 0, 0}, 0x00cb }, // U00CB # LATIN CAPITAL LETTER E WITH DIAERESIS -+ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0048, 0, 0, 0}, 0x1e26 }, // U1E26 # LATIN CAPITAL LETTER H WITH DIAERESIS -+ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0049, 0, 0, 0}, 0x00cf }, // U00CF # LATIN CAPITAL LETTER I WITH DIAERESIS -+ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x004f, 0, 0, 0}, 0x00d6 }, // U00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS -+ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0055, 0, 0, 0}, 0x00dc }, // U00DC # LATIN CAPITAL LETTER U WITH DIAERESIS -+ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0057, 0, 0, 0}, 0x1e84 }, // U1E84 # LATIN CAPITAL LETTER W WITH DIAERESIS -+ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0058, 0, 0, 0}, 0x1e8c }, // U1E8C # LATIN CAPITAL LETTER X WITH DIAERESIS -+ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0059, 0, 0, 0}, 0x0178 }, // U0178 # LATIN CAPITAL LETTER Y WITH DIAERESIS -+ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x005c, 0, 0, 0}, 0x301d }, // U301d # REVERSED DOUBLE PRIME QUOTATION MARK -+ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x005f, 0x0055, 0, 0}, 0x1e7a }, // U1E7A # LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS -+ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x005f, 0x0075, 0, 0}, 0x1e7b }, // U1E7B # LATIN SMALL LETTER U WITH MACRON AND DIAERESIS -+ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0061, 0, 0, 0}, 0x00e4 }, // U00E4 # LATIN SMALL LETTER A WITH DIAERESIS -+ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0065, 0, 0, 0}, 0x00eb }, // U00EB # LATIN SMALL LETTER E WITH DIAERESIS -+ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0068, 0, 0, 0}, 0x1e27 }, // U1E27 # LATIN SMALL LETTER H WITH DIAERESIS -+ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0069, 0, 0, 0}, 0x00ef }, // U00EF # LATIN SMALL LETTER I WITH DIAERESIS -+ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x006f, 0, 0, 0}, 0x00f6 }, // U00F6 # LATIN SMALL LETTER O WITH DIAERESIS -+ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0074, 0, 0, 0}, 0x1e97 }, // U1E97 # LATIN SMALL LETTER T WITH DIAERESIS -+ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0075, 0, 0, 0}, 0x00fc }, // U00FC # LATIN SMALL LETTER U WITH DIAERESIS -+ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0077, 0, 0, 0}, 0x1e85 }, // U1E85 # LATIN SMALL LETTER W WITH DIAERESIS -+ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0078, 0, 0, 0}, 0x1e8d }, // U1E8D # LATIN SMALL LETTER X WITH DIAERESIS -+ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0079, 0, 0, 0}, 0x00ff }, // U00FF # LATIN SMALL LETTER Y WITH DIAERESIS -+ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x007e, 0x004f, 0, 0}, 0x1e4e }, // U1E4E # LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS -+ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x007e, 0x006f, 0, 0}, 0x1e4f }, // U1E4F # LATIN SMALL LETTER O WITH TILDE AND DIAERESIS -+ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x00af, 0x0055, 0, 0}, 0x1e7a }, // U1E7A # LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS -+ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x00af, 0x0075, 0, 0}, 0x1e7b }, // U1E7B # LATIN SMALL LETTER U WITH MACRON AND DIAERESIS -+ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x00b4, 0, 0, 0}, 0x0344 }, // U0344 # COMBINING GREEK DIALYTIKA TONOS -+ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x00d5, 0, 0, 0}, 0x1e4e }, // U1E4E # LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS -+ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x00f5, 0, 0, 0}, 0x1e4f }, // U1E4F # LATIN SMALL LETTER O WITH TILDE AND DIAERESIS -+ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x016a, 0, 0, 0}, 0x1e7a }, // U1E7A # LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS -+ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x016b, 0, 0, 0}, 0x1e7b }, // U1E7B # LATIN SMALL LETTER U WITH MACRON AND DIAERESIS -+ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0399, 0, 0, 0}, 0x03aa }, // U03AA # GREEK CAPITAL LETTER IOTA WITH DIALYTIKA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x03a5, 0, 0, 0}, 0x03ab }, // U03AB # GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x03b9, 0, 0, 0}, 0x03ca }, // U03CA # GREEK SMALL LETTER IOTA WITH DIALYTIKA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x03c5, 0, 0, 0}, 0x03cb }, // U03CB # GREEK SMALL LETTER UPSILON WITH DIALYTIKA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x03d2, 0, 0, 0}, 0x03d4 }, // U03D4 # GREEK UPSILON WITH DIAERESIS AND HOOK SYMBOL -+ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0406, 0, 0, 0}, 0x0407 }, // U0407 # CYRILLIC CAPITAL LETTER YI -+ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0410, 0, 0, 0}, 0x04d2 }, // U04D2 # CYRILLIC CAPITAL LETTER A WITH DIAERESIS -+ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0415, 0, 0, 0}, 0x0401 }, // U0401 # CYRILLIC CAPITAL LETTER IO -+ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0416, 0, 0, 0}, 0x04dc }, // U04DC # CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS -+ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0417, 0, 0, 0}, 0x04de }, // U04DE # CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS -+ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0418, 0, 0, 0}, 0x04e4 }, // U04E4 # CYRILLIC CAPITAL LETTER I WITH DIAERESIS -+ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x041e, 0, 0, 0}, 0x04e6 }, // U04E6 # CYRILLIC CAPITAL LETTER O WITH DIAERESIS -+ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0423, 0, 0, 0}, 0x04f0 }, // U04F0 # CYRILLIC CAPITAL LETTER U WITH DIAERESIS -+ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0427, 0, 0, 0}, 0x04f4 }, // U04F4 # CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS -+ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x042b, 0, 0, 0}, 0x04f8 }, // U04F8 # CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS -+ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x042d, 0, 0, 0}, 0x04ec }, // U04EC # CYRILLIC CAPITAL LETTER E WITH DIAERESIS -+ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0430, 0, 0, 0}, 0x04d3 }, // U04D3 # CYRILLIC SMALL LETTER A WITH DIAERESIS -+ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0435, 0, 0, 0}, 0x0451 }, // U0451 # CYRILLIC SMALL LETTER IO -+ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0436, 0, 0, 0}, 0x04dd }, // U04DD # CYRILLIC SMALL LETTER ZHE WITH DIAERESIS -+ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0437, 0, 0, 0}, 0x04df }, // U04DF # CYRILLIC SMALL LETTER ZE WITH DIAERESIS -+ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0438, 0, 0, 0}, 0x04e5 }, // U04E5 # CYRILLIC SMALL LETTER I WITH DIAERESIS -+ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x043e, 0, 0, 0}, 0x04e7 }, // U04E7 # CYRILLIC SMALL LETTER O WITH DIAERESIS -+ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0443, 0, 0, 0}, 0x04f1 }, // U04F1 # CYRILLIC SMALL LETTER U WITH DIAERESIS -+ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0447, 0, 0, 0}, 0x04f5 }, // U04F5 # CYRILLIC SMALL LETTER CHE WITH DIAERESIS -+ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x044b, 0, 0, 0}, 0x04f9 }, // U04F9 # CYRILLIC SMALL LETTER YERU WITH DIAERESIS -+ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x044d, 0, 0, 0}, 0x04ed }, // U04ED # CYRILLIC SMALL LETTER E WITH DIAERESIS -+ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0456, 0, 0, 0}, 0x0457 }, // U0457 # CYRILLIC SMALL LETTER YI -+ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x04d8, 0, 0, 0}, 0x04da }, // U04DA # CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS -+ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x04d9, 0, 0, 0}, 0x04db }, // U04DB # CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS -+ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x04e8, 0, 0, 0}, 0x04ea }, // U04EA # CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS -+ { {UNITIZE(Qt::Key_Multi_key), 0x0022, 0x04e9, 0, 0, 0}, 0x04eb }, // U04EB # CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS -+ { {UNITIZE(Qt::Key_Multi_key), 0x0022, UNITIZE(Qt::Key_Dead_Acute), 0, 0, 0}, 0x0344 }, // U0344 # COMBINING GREEK DIALYTIKA TONOS -+ { {UNITIZE(Qt::Key_Multi_key), 0x0022, UNITIZE(Qt::Key_Dead_Tilde), 0x004f, 0, 0}, 0x1e4e }, // U1E4E # LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS -+ { {UNITIZE(Qt::Key_Multi_key), 0x0022, UNITIZE(Qt::Key_Dead_Tilde), 0x006f, 0, 0}, 0x1e4f }, // U1E4F # LATIN SMALL LETTER O WITH TILDE AND DIAERESIS -+ { {UNITIZE(Qt::Key_Multi_key), 0x0022, UNITIZE(Qt::Key_Dead_Macron), 0x0055, 0, 0}, 0x1e7a }, // U1E7A # LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS -+ { {UNITIZE(Qt::Key_Multi_key), 0x0022, UNITIZE(Qt::Key_Dead_Macron), 0x0075, 0, 0}, 0x1e7b }, // U1E7B # LATIN SMALL LETTER U WITH MACRON AND DIAERESIS -+ { {UNITIZE(Qt::Key_Multi_key), 0x0023, 0x0023, 0, 0, 0}, 0x266f }, // U266f # MUSIC SHARP SIGN -+ { {UNITIZE(Qt::Key_Multi_key), 0x0023, 0x0062, 0, 0, 0}, 0x266d }, // U266d # MUSIC FLAT SIGN -+ { {UNITIZE(Qt::Key_Multi_key), 0x0023, 0x0066, 0, 0, 0}, 0x266e }, // U266e # MUSIC NATURAL SIGN -+ { {UNITIZE(Qt::Key_Multi_key), 0x0025, 0x006f, 0, 0, 0}, 0x2030 }, // U2030 # PER MILLE SIGN -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0000, 0, 0, 0}, 0x1eda }, // U1EDA # LATIN CAPITAL LETTER O WITH HORN AND ACUTE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0000, 0, 0, 0}, 0x1ee9 }, // U1EE9 # LATIN SMALL LETTER U WITH HORN AND ACUTE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0000, 0, 0, 0}, 0x1ee8 }, // U1EE8 # LATIN CAPITAL LETTER U WITH HORN AND ACUTE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0000, 0, 0, 0}, 0x1edb }, // U1EDB # LATIN SMALL LETTER O WITH HORN AND ACUTE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0000, 0x004f, 0, 0}, 0x1e4c }, // U1E4C # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0000, 0x004f, 0, 0}, 0x01fe }, // U01FE # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0000, 0x0055, 0, 0}, 0x1e78 }, // U1E78 # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0000, 0x006f, 0, 0}, 0x1e4d }, // U1E4D # LATIN SMALL LETTER O WITH TILDE AND ACUTE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0000, 0x006f, 0, 0}, 0x01ff }, // U01FF # LATIN SMALL LETTER O WITH STROKE AND ACUTE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0000, 0x0075, 0, 0}, 0x1e79 }, // U1E79 # LATIN SMALL LETTER U WITH TILDE AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0020, 0, 0, 0}, 0x0027 }, // apostrophe -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0022, 0x0049, 0, 0}, 0x1e2e }, // U1E2E # LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0022, 0x0055, 0, 0}, 0x01d7 }, // U01D7 # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0022, 0x0069, 0, 0}, 0x1e2f }, // U1E2F # LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0022, 0x0075, 0, 0}, 0x01d8 }, // U01D8 # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0022, 0x03b9, 0, 0}, 0x0390 }, // U0390 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0022, 0x03c5, 0, 0}, 0x03b0 }, // U03B0 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0028, 0x0391, 0, 0}, 0x1f0d }, // U1F0D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0028, 0x0395, 0, 0}, 0x1f1d }, // U1F1D # GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0028, 0x0397, 0, 0}, 0x1f2d }, // U1F2D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0028, 0x0399, 0, 0}, 0x1f3d }, // U1F3D # GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0028, 0x039f, 0, 0}, 0x1f4d }, // U1F4D # GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0028, 0x03a5, 0, 0}, 0x1f5d }, // U1F5D # GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0028, 0x03a9, 0, 0}, 0x1f6d }, // U1F6D # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0028, 0x03b1, 0, 0}, 0x1f05 }, // U1F05 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0028, 0x03b5, 0, 0}, 0x1f15 }, // U1F15 # GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0028, 0x03b7, 0, 0}, 0x1f25 }, // U1F25 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0028, 0x03b9, 0, 0}, 0x1f35 }, // U1F35 # GREEK SMALL LETTER IOTA WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0028, 0x03bf, 0, 0}, 0x1f45 }, // U1F45 # GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0028, 0x03c5, 0, 0}, 0x1f55 }, // U1F55 # GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0028, 0x03c9, 0, 0}, 0x1f65 }, // U1F65 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0029, 0x0391, 0, 0}, 0x1f0c }, // U1F0C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0029, 0x0395, 0, 0}, 0x1f1c }, // U1F1C # GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0029, 0x0397, 0, 0}, 0x1f2c }, // U1F2C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0029, 0x0399, 0, 0}, 0x1f3c }, // U1F3C # GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0029, 0x039f, 0, 0}, 0x1f4c }, // U1F4C # GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0029, 0x03a9, 0, 0}, 0x1f6c }, // U1F6C # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0029, 0x03b1, 0, 0}, 0x1f04 }, // U1F04 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0029, 0x03b5, 0, 0}, 0x1f14 }, // U1F14 # GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0029, 0x03b7, 0, 0}, 0x1f24 }, // U1F24 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0029, 0x03b9, 0, 0}, 0x1f34 }, // U1F34 # GREEK SMALL LETTER IOTA WITH PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0029, 0x03bf, 0, 0}, 0x1f44 }, // U1F44 # GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0029, 0x03c5, 0, 0}, 0x1f54 }, // U1F54 # GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0029, 0x03c9, 0, 0}, 0x1f64 }, // U1F64 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x002b, 0x004f, 0, 0}, 0x1eda }, // U1EDA # LATIN CAPITAL LETTER O WITH HORN AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x002b, 0x0055, 0, 0}, 0x1ee8 }, // U1EE8 # LATIN CAPITAL LETTER U WITH HORN AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x002b, 0x006f, 0, 0}, 0x1edb }, // U1EDB # LATIN SMALL LETTER O WITH HORN AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x002b, 0x0075, 0, 0}, 0x1ee9 }, // U1EE9 # LATIN SMALL LETTER U WITH HORN AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x002c, 0, 0, 0}, 0x201a }, // U201a # SINGLE LOW-9 QUOTATION MARK -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x002c, 0x0043, 0, 0}, 0x1e08 }, // U1E08 # LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x002c, 0x0063, 0, 0}, 0x1e09 }, // U1E09 # LATIN SMALL LETTER C WITH CEDILLA AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x002f, 0x004f, 0, 0}, 0x01fe }, // U01FE # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x002f, 0x006f, 0, 0}, 0x01ff }, // U01FF # LATIN SMALL LETTER O WITH STROKE AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x003c, 0, 0, 0}, 0x2018 }, // U2018 # LEFT SINGLE QUOTATION MARK -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x003e, 0, 0, 0}, 0x2019 }, // U2019 # RIGHT SINGLE QUOTATION MARK -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0041, 0, 0, 0}, 0x00c1 }, // U00C1 # LATIN CAPITAL LETTER A WITH ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0043, 0, 0, 0}, 0x0106 }, // U0106 # LATIN CAPITAL LETTER C WITH ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0045, 0, 0, 0}, 0x00c9 }, // U00C9 # LATIN CAPITAL LETTER E WITH ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0047, 0, 0, 0}, 0x01f4 }, // U01F4 # LATIN CAPITAL LETTER G WITH ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0049, 0, 0, 0}, 0x00cd }, // U00CD # LATIN CAPITAL LETTER I WITH ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x004b, 0, 0, 0}, 0x1e30 }, // U1E30 # LATIN CAPITAL LETTER K WITH ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x004c, 0, 0, 0}, 0x0139 }, // U0139 # LATIN CAPITAL LETTER L WITH ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x004d, 0, 0, 0}, 0x1e3e }, // U1E3E # LATIN CAPITAL LETTER M WITH ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x004e, 0, 0, 0}, 0x0143 }, // U0143 # LATIN CAPITAL LETTER N WITH ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x004f, 0, 0, 0}, 0x00d3 }, // U00D3 # LATIN CAPITAL LETTER O WITH ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0050, 0, 0, 0}, 0x1e54 }, // U1E54 # LATIN CAPITAL LETTER P WITH ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0052, 0, 0, 0}, 0x0154 }, // U0154 # LATIN CAPITAL LETTER R WITH ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0053, 0, 0, 0}, 0x015a }, // U015A # LATIN CAPITAL LETTER S WITH ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0055, 0, 0, 0}, 0x00da }, // U00DA # LATIN CAPITAL LETTER U WITH ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0055, 0x0041, 0, 0}, 0x1eae }, // U1EAE # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0055, 0x0061, 0, 0}, 0x1eaf }, // U1EAF # LATIN SMALL LETTER A WITH BREVE AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0057, 0, 0, 0}, 0x1e82 }, // U1E82 # LATIN CAPITAL LETTER W WITH ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0059, 0, 0, 0}, 0x00dd }, // U00DD # LATIN CAPITAL LETTER Y WITH ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x005a, 0, 0, 0}, 0x0179 }, // U0179 # LATIN CAPITAL LETTER Z WITH ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x005e, 0x0041, 0, 0}, 0x1ea4 }, // U1EA4 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x005e, 0x0045, 0, 0}, 0x1ebe }, // U1EBE # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x005e, 0x004f, 0, 0}, 0x1ed0 }, // U1ED0 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x005e, 0x0061, 0, 0}, 0x1ea5 }, // U1EA5 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x005e, 0x0065, 0, 0}, 0x1ebf }, // U1EBF # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x005e, 0x006f, 0, 0}, 0x1ed1 }, // U1ED1 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x005f, 0x0045, 0, 0}, 0x1e16 }, // U1E16 # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x005f, 0x004f, 0, 0}, 0x1e52 }, // U1E52 # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x005f, 0x0065, 0, 0}, 0x1e17 }, // U1E17 # LATIN SMALL LETTER E WITH MACRON AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x005f, 0x006f, 0, 0}, 0x1e53 }, // U1E53 # LATIN SMALL LETTER O WITH MACRON AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0061, 0, 0, 0}, 0x00e1 }, // U00E1 # LATIN SMALL LETTER A WITH ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0062, 0x0041, 0, 0}, 0x1eae }, // U1EAE # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0062, 0x0061, 0, 0}, 0x1eaf }, // U1EAF # LATIN SMALL LETTER A WITH BREVE AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0063, 0, 0, 0}, 0x0107 }, // U0107 # LATIN SMALL LETTER C WITH ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0065, 0, 0, 0}, 0x00e9 }, // U00E9 # LATIN SMALL LETTER E WITH ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0067, 0, 0, 0}, 0x01f5 }, // U01F5 # LATIN SMALL LETTER G WITH ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0069, 0, 0, 0}, 0x00ed }, // U00ED # LATIN SMALL LETTER I WITH ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x006b, 0, 0, 0}, 0x1e31 }, // U1E31 # LATIN SMALL LETTER K WITH ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x006c, 0, 0, 0}, 0x013a }, // U013A # LATIN SMALL LETTER L WITH ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x006d, 0, 0, 0}, 0x1e3f }, // U1E3F # LATIN SMALL LETTER M WITH ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x006e, 0, 0, 0}, 0x0144 }, // U0144 # LATIN SMALL LETTER N WITH ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x006f, 0, 0, 0}, 0x00f3 }, // U00F3 # LATIN SMALL LETTER O WITH ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0070, 0, 0, 0}, 0x1e55 }, // U1E55 # LATIN SMALL LETTER P WITH ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0072, 0, 0, 0}, 0x0155 }, // U0155 # LATIN SMALL LETTER R WITH ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0073, 0, 0, 0}, 0x015b }, // U015B # LATIN SMALL LETTER S WITH ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0075, 0, 0, 0}, 0x00fa }, // U00FA # LATIN SMALL LETTER U WITH ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0077, 0, 0, 0}, 0x1e83 }, // U1E83 # LATIN SMALL LETTER W WITH ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0079, 0, 0, 0}, 0x00fd }, // U00FD # LATIN SMALL LETTER Y WITH ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x007a, 0, 0, 0}, 0x017a }, // U017A # LATIN SMALL LETTER Z WITH ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x007e, 0x004f, 0, 0}, 0x1e4c }, // U1E4C # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x007e, 0x0055, 0, 0}, 0x1e78 }, // U1E78 # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x007e, 0x006f, 0, 0}, 0x1e4d }, // U1E4D # LATIN SMALL LETTER O WITH TILDE AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x007e, 0x0075, 0, 0}, 0x1e79 }, // U1E79 # LATIN SMALL LETTER U WITH TILDE AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x00af, 0x0045, 0, 0}, 0x1e16 }, // U1E16 # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x00af, 0x004f, 0, 0}, 0x1e52 }, // U1E52 # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x00af, 0x0065, 0, 0}, 0x1e17 }, // U1E17 # LATIN SMALL LETTER E WITH MACRON AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x00af, 0x006f, 0, 0}, 0x1e53 }, // U1E53 # LATIN SMALL LETTER O WITH MACRON AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x00c2, 0, 0, 0}, 0x1ea4 }, // U1EA4 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x00c5, 0, 0, 0}, 0x01fa }, // U01FA # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x00c6, 0, 0, 0}, 0x01fc }, // U01FC # LATIN CAPITAL LETTER AE WITH ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x00c7, 0, 0, 0}, 0x1e08 }, // U1E08 # LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x00ca, 0, 0, 0}, 0x1ebe }, // U1EBE # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x00cf, 0, 0, 0}, 0x1e2e }, // U1E2E # LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x00d4, 0, 0, 0}, 0x1ed0 }, // U1ED0 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x00d5, 0, 0, 0}, 0x1e4c }, // U1E4C # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x00d8, 0, 0, 0}, 0x01fe }, // U01FE # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x00dc, 0, 0, 0}, 0x01d7 }, // U01D7 # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x00e2, 0, 0, 0}, 0x1ea5 }, // U1EA5 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x00e5, 0, 0, 0}, 0x01fb }, // U01FB # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x00e6, 0, 0, 0}, 0x01fd }, // U01FD # LATIN SMALL LETTER AE WITH ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x00e7, 0, 0, 0}, 0x1e09 }, // U1E09 # LATIN SMALL LETTER C WITH CEDILLA AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x00ea, 0, 0, 0}, 0x1ebf }, // U1EBF # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x00ef, 0, 0, 0}, 0x1e2f }, // U1E2F # LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x00f4, 0, 0, 0}, 0x1ed1 }, // U1ED1 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x00f5, 0, 0, 0}, 0x1e4d }, // U1E4D # LATIN SMALL LETTER O WITH TILDE AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x00f8, 0, 0, 0}, 0x01ff }, // U01FF # LATIN SMALL LETTER O WITH STROKE AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x00fc, 0, 0, 0}, 0x01d8 }, // U01D8 # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0102, 0, 0, 0}, 0x1eae }, // U1EAE # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0103, 0, 0, 0}, 0x1eaf }, // U1EAF # LATIN SMALL LETTER A WITH BREVE AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0112, 0, 0, 0}, 0x1e16 }, // U1E16 # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0113, 0, 0, 0}, 0x1e17 }, // U1E17 # LATIN SMALL LETTER E WITH MACRON AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x014c, 0, 0, 0}, 0x1e52 }, // U1E52 # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x014d, 0, 0, 0}, 0x1e53 }, // U1E53 # LATIN SMALL LETTER O WITH MACRON AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0168, 0, 0, 0}, 0x1e78 }, // U1E78 # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0169, 0, 0, 0}, 0x1e79 }, // U1E79 # LATIN SMALL LETTER U WITH TILDE AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0313, 0x0391, 0, 0}, 0x1f0c }, // U1F0C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0313, 0x0395, 0, 0}, 0x1f1c }, // U1F1C # GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0313, 0x0397, 0, 0}, 0x1f2c }, // U1F2C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0313, 0x0399, 0, 0}, 0x1f3c }, // U1F3C # GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0313, 0x039f, 0, 0}, 0x1f4c }, // U1F4C # GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0313, 0x03a9, 0, 0}, 0x1f6c }, // U1F6C # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0313, 0x03b1, 0, 0}, 0x1f04 }, // U1F04 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0313, 0x03b5, 0, 0}, 0x1f14 }, // U1F14 # GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0313, 0x03b7, 0, 0}, 0x1f24 }, // U1F24 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0313, 0x03b9, 0, 0}, 0x1f34 }, // U1F34 # GREEK SMALL LETTER IOTA WITH PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0313, 0x03bf, 0, 0}, 0x1f44 }, // U1F44 # GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0313, 0x03c5, 0, 0}, 0x1f54 }, // U1F54 # GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0313, 0x03c9, 0, 0}, 0x1f64 }, // U1F64 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0314, 0x0391, 0, 0}, 0x1f0d }, // U1F0D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0314, 0x0395, 0, 0}, 0x1f1d }, // U1F1D # GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0314, 0x0397, 0, 0}, 0x1f2d }, // U1F2D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0314, 0x0399, 0, 0}, 0x1f3d }, // U1F3D # GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0314, 0x039f, 0, 0}, 0x1f4d }, // U1F4D # GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0314, 0x03a5, 0, 0}, 0x1f5d }, // U1F5D # GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0314, 0x03a9, 0, 0}, 0x1f6d }, // U1F6D # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0314, 0x03b1, 0, 0}, 0x1f05 }, // U1F05 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0314, 0x03b5, 0, 0}, 0x1f15 }, // U1F15 # GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0314, 0x03b7, 0, 0}, 0x1f25 }, // U1F25 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0314, 0x03b9, 0, 0}, 0x1f35 }, // U1F35 # GREEK SMALL LETTER IOTA WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0314, 0x03bf, 0, 0}, 0x1f45 }, // U1F45 # GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0314, 0x03c5, 0, 0}, 0x1f55 }, // U1F55 # GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0314, 0x03c9, 0, 0}, 0x1f65 }, // U1F65 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0391, 0, 0, 0}, 0x0386 }, // U0386 # GREEK CAPITAL LETTER ALPHA WITH TONOS -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0395, 0, 0, 0}, 0x0388 }, // U0388 # GREEK CAPITAL LETTER EPSILON WITH TONOS -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0397, 0, 0, 0}, 0x0389 }, // U0389 # GREEK CAPITAL LETTER ETA WITH TONOS -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0399, 0, 0, 0}, 0x038a }, // U038A # GREEK CAPITAL LETTER IOTA WITH TONOS -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x039f, 0, 0, 0}, 0x038c }, // U038C # GREEK CAPITAL LETTER OMICRON WITH TONOS -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x03a5, 0, 0, 0}, 0x038e }, // U038E # GREEK CAPITAL LETTER UPSILON WITH TONOS -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x03a9, 0, 0, 0}, 0x038f }, // U038F # GREEK CAPITAL LETTER OMEGA WITH TONOS -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x03b1, 0, 0, 0}, 0x03ac }, // U03AC # GREEK SMALL LETTER ALPHA WITH TONOS -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x03b5, 0, 0, 0}, 0x03ad }, // U03AD # GREEK SMALL LETTER EPSILON WITH TONOS -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x03b7, 0, 0, 0}, 0x03ae }, // U03AE # GREEK SMALL LETTER ETA WITH TONOS -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x03b9, 0, 0, 0}, 0x03af }, // U03AF # GREEK SMALL LETTER IOTA WITH TONOS -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x03bf, 0, 0, 0}, 0x03cc }, // U03CC # GREEK SMALL LETTER OMICRON WITH TONOS -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x03c5, 0, 0, 0}, 0x03cd }, // U03CD # GREEK SMALL LETTER UPSILON WITH TONOS -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x03c9, 0, 0, 0}, 0x03ce }, // U03CE # GREEK SMALL LETTER OMEGA WITH TONOS -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x03ca, 0, 0, 0}, 0x0390 }, // U0390 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x03cb, 0, 0, 0}, 0x03b0 }, // U03B0 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x03d2, 0, 0, 0}, 0x03d3 }, // U03D3 # GREEK UPSILON WITH ACUTE AND HOOK SYMBOL -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0413, 0, 0, 0}, 0x0403 }, // U0403 # CYRILLIC CAPITAL LETTER GJE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x041a, 0, 0, 0}, 0x040c }, // U040C # CYRILLIC CAPITAL LETTER KJE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0433, 0, 0, 0}, 0x0453 }, // U0453 # CYRILLIC SMALL LETTER GJE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x043a, 0, 0, 0}, 0x045c }, // U045C # CYRILLIC SMALL LETTER KJE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f00, 0, 0, 0}, 0x1f04 }, // U1F04 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f01, 0, 0, 0}, 0x1f05 }, // U1F05 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f08, 0, 0, 0}, 0x1f0c }, // U1F0C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f09, 0, 0, 0}, 0x1f0d }, // U1F0D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f10, 0, 0, 0}, 0x1f14 }, // U1F14 # GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f11, 0, 0, 0}, 0x1f15 }, // U1F15 # GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f18, 0, 0, 0}, 0x1f1c }, // U1F1C # GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f19, 0, 0, 0}, 0x1f1d }, // U1F1D # GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f20, 0, 0, 0}, 0x1f24 }, // U1F24 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f21, 0, 0, 0}, 0x1f25 }, // U1F25 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f28, 0, 0, 0}, 0x1f2c }, // U1F2C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f29, 0, 0, 0}, 0x1f2d }, // U1F2D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f30, 0, 0, 0}, 0x1f34 }, // U1F34 # GREEK SMALL LETTER IOTA WITH PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f31, 0, 0, 0}, 0x1f35 }, // U1F35 # GREEK SMALL LETTER IOTA WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f38, 0, 0, 0}, 0x1f3c }, // U1F3C # GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f39, 0, 0, 0}, 0x1f3d }, // U1F3D # GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f40, 0, 0, 0}, 0x1f44 }, // U1F44 # GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f41, 0, 0, 0}, 0x1f45 }, // U1F45 # GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f48, 0, 0, 0}, 0x1f4c }, // U1F4C # GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f49, 0, 0, 0}, 0x1f4d }, // U1F4D # GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f50, 0, 0, 0}, 0x1f54 }, // U1F54 # GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f51, 0, 0, 0}, 0x1f55 }, // U1F55 # GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f59, 0, 0, 0}, 0x1f5d }, // U1F5D # GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f60, 0, 0, 0}, 0x1f64 }, // U1F64 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f61, 0, 0, 0}, 0x1f65 }, // U1F65 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f68, 0, 0, 0}, 0x1f6c }, // U1F6C # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f69, 0, 0, 0}, 0x1f6d }, // U1F6D # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Circumflex), 0x0041, 0, 0}, 0x1ea4 }, // U1EA4 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Circumflex), 0x0045, 0, 0}, 0x1ebe }, // U1EBE # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Circumflex), 0x004f, 0, 0}, 0x1ed0 }, // U1ED0 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Circumflex), 0x0061, 0, 0}, 0x1ea5 }, // U1EA5 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Circumflex), 0x0065, 0, 0}, 0x1ebf }, // U1EBF # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Circumflex), 0x006f, 0, 0}, 0x1ed1 }, // U1ED1 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Tilde), 0x004f, 0, 0}, 0x1e4c }, // U1E4C # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Tilde), 0x0055, 0, 0}, 0x1e78 }, // U1E78 # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Tilde), 0x006f, 0, 0}, 0x1e4d }, // U1E4D # LATIN SMALL LETTER O WITH TILDE AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Tilde), 0x0075, 0, 0}, 0x1e79 }, // U1E79 # LATIN SMALL LETTER U WITH TILDE AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Macron), 0x0045, 0, 0}, 0x1e16 }, // U1E16 # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Macron), 0x004f, 0, 0}, 0x1e52 }, // U1E52 # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Macron), 0x0065, 0, 0}, 0x1e17 }, // U1E17 # LATIN SMALL LETTER E WITH MACRON AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Macron), 0x006f, 0, 0}, 0x1e53 }, // U1E53 # LATIN SMALL LETTER O WITH MACRON AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Breve), 0x0041, 0, 0}, 0x1eae }, // U1EAE # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Breve), 0x0061, 0, 0}, 0x1eaf }, // U1EAF # LATIN SMALL LETTER A WITH BREVE AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Diaeresis), 0x0049, 0, 0}, 0x1e2e }, // U1E2E # LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Diaeresis), 0x0055, 0, 0}, 0x01d7 }, // U01D7 # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Diaeresis), 0x0069, 0, 0}, 0x1e2f }, // U1E2F # LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Diaeresis), 0x0075, 0, 0}, 0x01d8 }, // U01D8 # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Diaeresis), 0x03b9, 0, 0}, 0x0390 }, // U0390 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Diaeresis), 0x03c5, 0, 0}, 0x03b0 }, // U03B0 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Abovering), 0x0041, 0, 0}, 0x01fa }, // U01FA # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Abovering), 0x0061, 0, 0}, 0x01fb }, // U01FB # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Cedilla), 0x0043, 0, 0}, 0x1e08 }, // U1E08 # LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Cedilla), 0x0063, 0, 0}, 0x1e09 }, // U1E09 # LATIN SMALL LETTER C WITH CEDILLA AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Horn), 0x004f, 0, 0}, 0x1eda }, // U1EDA # LATIN CAPITAL LETTER O WITH HORN AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Horn), 0x0055, 0, 0}, 0x1ee8 }, // U1EE8 # LATIN CAPITAL LETTER U WITH HORN AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Horn), 0x006f, 0, 0}, 0x1edb }, // U1EDB # LATIN SMALL LETTER O WITH HORN AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0027, UNITIZE(Qt::Key_Dead_Horn), 0x0075, 0, 0}, 0x1ee9 }, // U1EE9 # LATIN SMALL LETTER U WITH HORN AND ACUTE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x246b }, // U246B # CIRCLED NUMBER TWELVE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x32b7 }, // U32B7 # CIRCLED NUMBER FORTY TWO -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x3253 }, // U3253 # CIRCLED NUMBER TWENTY THREE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x3252 }, // U3252 # CIRCLED NUMBER TWENTY TWO -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x3253 }, // U3253 # CIRCLED NUMBER TWENTY THREE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x2473 }, // U2473 # CIRCLED NUMBER TWENTY -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x32b2 }, // U32B2 # CIRCLED NUMBER THIRTY SEVEN -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x32b7 }, // U32B7 # CIRCLED NUMBER FORTY TWO -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x3252 }, // U3252 # CIRCLED NUMBER TWENTY TWO -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x246d }, // U246D # CIRCLED NUMBER FOURTEEN -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x32be }, // U32BE # CIRCLED NUMBER FORTY NINE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x3254 }, // U3254 # CIRCLED NUMBER TWENTY FOUR -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x2470 }, // U2470 # CIRCLED NUMBER SEVENTEEN -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x3252 }, // U3252 # CIRCLED NUMBER TWENTY TWO -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x32bc }, // U32BC # CIRCLED NUMBER FORTY SEVEN -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x3254 }, // U3254 # CIRCLED NUMBER TWENTY FOUR -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x246f }, // U246F # CIRCLED NUMBER SIXTEEN -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x3252 }, // U3252 # CIRCLED NUMBER TWENTY TWO -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x32bb }, // U32BB # CIRCLED NUMBER FORTY SIX -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x32b3 }, // U32B3 # CIRCLED NUMBER THIRTY EIGHT -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x32b6 }, // U32B6 # CIRCLED NUMBER FORTY ONE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x2469 }, // U2469 # CIRCLED NUMBER TEN -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x3255 }, // U3255 # CIRCLED NUMBER TWENTY FIVE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x3251 }, // U3251 # CIRCLED NUMBER TWENTY ONE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x3257 }, // U3257 # CIRCLED NUMBER TWENTY SEVEN -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x3255 }, // U3255 # CIRCLED NUMBER TWENTY FIVE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x325f }, // U325F # CIRCLED NUMBER THIRTY FIVE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x325e }, // U325E # CIRCLED NUMBER THIRTY FOUR -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x3251 }, // U3251 # CIRCLED NUMBER TWENTY ONE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x32b8 }, // U32B8 # CIRCLED NUMBER FORTY THREE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x32b1 }, // U32B1 # CIRCLED NUMBER THIRTY SIX -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x325d }, // U325D # CIRCLED NUMBER THIRTY THREE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x2471 }, // U2471 # CIRCLED NUMBER EIGHTEEN -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x325c }, // U325C # CIRCLED NUMBER THIRTY TWO -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x3256 }, // U3256 # CIRCLED NUMBER TWENTY SIX -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x325c }, // U325C # CIRCLED NUMBER THIRTY TWO -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x3256 }, // U3256 # CIRCLED NUMBER TWENTY SIX -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x325b }, // U325B # CIRCLED NUMBER THIRTY ONE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x2473 }, // U2473 # CIRCLED NUMBER TWENTY -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x2472 }, // U2472 # CIRCLED NUMBER NINETEEN -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x246c }, // U246C # CIRCLED NUMBER THIRTEEN -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x32b9 }, // U32B9 # CIRCLED NUMBER FORTY FOUR -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x32ba }, // U32BA # CIRCLED NUMBER FORTY FIVE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x325a }, // U325A # CIRCLED NUMBER THIRTY -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x32b5 }, // U32B5 # CIRCLED NUMBER FORTY -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x3257 }, // U3257 # CIRCLED NUMBER TWENTY SEVEN -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x3259 }, // U3259 # CIRCLED NUMBER TWENTY NINE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x3259 }, // U3259 # CIRCLED NUMBER TWENTY NINE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x32b4 }, // U32B4 # CIRCLED NUMBER THIRTY NINE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x3258 }, // U3258 # CIRCLED NUMBER TWENTY EIGHT -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x3258 }, // U3258 # CIRCLED NUMBER TWENTY EIGHT -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x246b }, // U246B # CIRCLED NUMBER TWELVE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x246a }, // U246A # CIRCLED NUMBER ELEVEN -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x246e }, // U246E # CIRCLED NUMBER FIFTEEN -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x32bd }, // U32BD # CIRCLED NUMBER FORTY EIGHT -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0000, 0x0029, 0}, 0x32bf }, // U32BF # CIRCLED NUMBER FIFTY -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0029, 0, 0}, 0x2461 }, // U2461 # CIRCLED DIGIT TWO -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0029, 0, 0}, 0x2461 }, // U2461 # CIRCLED DIGIT TWO -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0029, 0, 0}, 0x2462 }, // U2462 # CIRCLED DIGIT THREE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0029, 0, 0}, 0x2468 }, // U2468 # CIRCLED DIGIT NINE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0029, 0, 0}, 0x2463 }, // U2463 # CIRCLED DIGIT FOUR -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0029, 0, 0}, 0x2460 }, // U2460 # CIRCLED DIGIT ONE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0029, 0, 0}, 0x2467 }, // U2467 # CIRCLED DIGIT EIGHT -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0029, 0, 0}, 0x24ea }, // U24EA # CIRCLED DIGIT ZERO -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0029, 0, 0}, 0x2466 }, // U2466 # CIRCLED DIGIT SEVEN -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0029, 0, 0}, 0x2465 }, // U2465 # CIRCLED DIGIT SIX -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0029, 0, 0}, 0x2464 }, // U2464 # CIRCLED DIGIT FIVE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0030, 0x0029, 0}, 0x32b5 }, // U32B5 # CIRCLED NUMBER FORTY -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0030, 0x0029, 0}, 0x2473 }, // U2473 # CIRCLED NUMBER TWENTY -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0030, 0x0029, 0}, 0x2469 }, // U2469 # CIRCLED NUMBER TEN -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0030, 0x0029, 0}, 0x32bf }, // U32BF # CIRCLED NUMBER FIFTY -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0030, 0x0029, 0}, 0x325a }, // U325A # CIRCLED NUMBER THIRTY -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0030, 0x0029, 0}, 0x2473 }, // U2473 # CIRCLED NUMBER TWENTY -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0031, 0x0029, 0}, 0x32b6 }, // U32B6 # CIRCLED NUMBER FORTY ONE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0031, 0x0029, 0}, 0x246a }, // U246A # CIRCLED NUMBER ELEVEN -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0031, 0x0029, 0}, 0x3251 }, // U3251 # CIRCLED NUMBER TWENTY ONE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0031, 0x0029, 0}, 0x325b }, // U325B # CIRCLED NUMBER THIRTY ONE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0031, 0x0029, 0}, 0x3251 }, // U3251 # CIRCLED NUMBER TWENTY ONE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0032, 0x0029, 0}, 0x3252 }, // U3252 # CIRCLED NUMBER TWENTY TWO -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0032, 0x0029, 0}, 0x32b7 }, // U32B7 # CIRCLED NUMBER FORTY TWO -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0032, 0x0029, 0}, 0x246b }, // U246B # CIRCLED NUMBER TWELVE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0032, 0x0029, 0}, 0x325c }, // U325C # CIRCLED NUMBER THIRTY TWO -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0032, 0x0029, 0}, 0x3252 }, // U3252 # CIRCLED NUMBER TWENTY TWO -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0033, 0x0029, 0}, 0x246c }, // U246C # CIRCLED NUMBER THIRTEEN -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0033, 0x0029, 0}, 0x3253 }, // U3253 # CIRCLED NUMBER TWENTY THREE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0033, 0x0029, 0}, 0x325d }, // U325D # CIRCLED NUMBER THIRTY THREE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0033, 0x0029, 0}, 0x32b8 }, // U32B8 # CIRCLED NUMBER FORTY THREE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0033, 0x0029, 0}, 0x3253 }, // U3253 # CIRCLED NUMBER TWENTY THREE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0034, 0x0029, 0}, 0x246d }, // U246D # CIRCLED NUMBER FOURTEEN -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0034, 0x0029, 0}, 0x3254 }, // U3254 # CIRCLED NUMBER TWENTY FOUR -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0034, 0x0029, 0}, 0x32b9 }, // U32B9 # CIRCLED NUMBER FORTY FOUR -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0034, 0x0029, 0}, 0x3254 }, // U3254 # CIRCLED NUMBER TWENTY FOUR -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0034, 0x0029, 0}, 0x325e }, // U325E # CIRCLED NUMBER THIRTY FOUR -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0035, 0x0029, 0}, 0x3255 }, // U3255 # CIRCLED NUMBER TWENTY FIVE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0035, 0x0029, 0}, 0x325f }, // U325F # CIRCLED NUMBER THIRTY FIVE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0035, 0x0029, 0}, 0x32ba }, // U32BA # CIRCLED NUMBER FORTY FIVE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0035, 0x0029, 0}, 0x3255 }, // U3255 # CIRCLED NUMBER TWENTY FIVE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0035, 0x0029, 0}, 0x246e }, // U246E # CIRCLED NUMBER FIFTEEN -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0036, 0x0029, 0}, 0x3256 }, // U3256 # CIRCLED NUMBER TWENTY SIX -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0036, 0x0029, 0}, 0x32bb }, // U32BB # CIRCLED NUMBER FORTY SIX -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0036, 0x0029, 0}, 0x32b1 }, // U32B1 # CIRCLED NUMBER THIRTY SIX -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0036, 0x0029, 0}, 0x246f }, // U246F # CIRCLED NUMBER SIXTEEN -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0036, 0x0029, 0}, 0x3256 }, // U3256 # CIRCLED NUMBER TWENTY SIX -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0037, 0x0029, 0}, 0x32bc }, // U32BC # CIRCLED NUMBER FORTY SEVEN -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0037, 0x0029, 0}, 0x3257 }, // U3257 # CIRCLED NUMBER TWENTY SEVEN -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0037, 0x0029, 0}, 0x32b2 }, // U32B2 # CIRCLED NUMBER THIRTY SEVEN -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0037, 0x0029, 0}, 0x2470 }, // U2470 # CIRCLED NUMBER SEVENTEEN -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0037, 0x0029, 0}, 0x3257 }, // U3257 # CIRCLED NUMBER TWENTY SEVEN -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0038, 0x0029, 0}, 0x2471 }, // U2471 # CIRCLED NUMBER EIGHTEEN -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0038, 0x0029, 0}, 0x32b3 }, // U32B3 # CIRCLED NUMBER THIRTY EIGHT -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0038, 0x0029, 0}, 0x32bd }, // U32BD # CIRCLED NUMBER FORTY EIGHT -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0038, 0x0029, 0}, 0x3258 }, // U3258 # CIRCLED NUMBER TWENTY EIGHT -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0038, 0x0029, 0}, 0x3258 }, // U3258 # CIRCLED NUMBER TWENTY EIGHT -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0039, 0x0029, 0}, 0x32b4 }, // U32B4 # CIRCLED NUMBER THIRTY NINE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0039, 0x0029, 0}, 0x3259 }, // U3259 # CIRCLED NUMBER TWENTY NINE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0039, 0x0029, 0}, 0x32be }, // U32BE # CIRCLED NUMBER FORTY NINE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0039, 0x0029, 0}, 0x3259 }, // U3259 # CIRCLED NUMBER TWENTY NINE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0000, 0x0039, 0x0029, 0}, 0x2472 }, // U2472 # CIRCLED NUMBER NINETEEN -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0028, 0, 0, 0}, 0x005b }, // bracketleft -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x002d, 0, 0, 0}, 0x007b }, // braceleft -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0030, 0x0029, 0, 0}, 0x24ea }, // U24EA # CIRCLED DIGIT ZERO -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0031, 0x0000, 0x0029, 0}, 0x2472 }, // U2472 # CIRCLED NUMBER NINETEEN -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0031, 0x0000, 0x0029, 0}, 0x246e }, // U246E # CIRCLED NUMBER FIFTEEN -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0031, 0x0000, 0x0029, 0}, 0x2469 }, // U2469 # CIRCLED NUMBER TEN -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0031, 0x0000, 0x0029, 0}, 0x246c }, // U246C # CIRCLED NUMBER THIRTEEN -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0031, 0x0000, 0x0029, 0}, 0x246b }, // U246B # CIRCLED NUMBER TWELVE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0031, 0x0000, 0x0029, 0}, 0x2470 }, // U2470 # CIRCLED NUMBER SEVENTEEN -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0031, 0x0000, 0x0029, 0}, 0x246a }, // U246A # CIRCLED NUMBER ELEVEN -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0031, 0x0000, 0x0029, 0}, 0x246d }, // U246D # CIRCLED NUMBER FOURTEEN -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0031, 0x0000, 0x0029, 0}, 0x2471 }, // U2471 # CIRCLED NUMBER EIGHTEEN -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0031, 0x0000, 0x0029, 0}, 0x246f }, // U246F # CIRCLED NUMBER SIXTEEN -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0031, 0x0000, 0x0029, 0}, 0x246b }, // U246B # CIRCLED NUMBER TWELVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0031, 0x0029, 0, 0}, 0x2460 }, // U2460 # CIRCLED DIGIT ONE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0031, 0x0030, 0x0029, 0}, 0x2469 }, // U2469 # CIRCLED NUMBER TEN -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0031, 0x0031, 0x0029, 0}, 0x246a }, // U246A # CIRCLED NUMBER ELEVEN -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0031, 0x0032, 0x0029, 0}, 0x246b }, // U246B # CIRCLED NUMBER TWELVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0031, 0x0033, 0x0029, 0}, 0x246c }, // U246C # CIRCLED NUMBER THIRTEEN -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0031, 0x0034, 0x0029, 0}, 0x246d }, // U246D # CIRCLED NUMBER FOURTEEN -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0031, 0x0035, 0x0029, 0}, 0x246e }, // U246E # CIRCLED NUMBER FIFTEEN -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0031, 0x0036, 0x0029, 0}, 0x246f }, // U246F # CIRCLED NUMBER SIXTEEN -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0031, 0x0037, 0x0029, 0}, 0x2470 }, // U2470 # CIRCLED NUMBER SEVENTEEN -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0031, 0x0038, 0x0029, 0}, 0x2471 }, // U2471 # CIRCLED NUMBER EIGHTEEN -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0031, 0x0039, 0x0029, 0}, 0x2472 }, // U2472 # CIRCLED NUMBER NINETEEN -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0032, 0x0000, 0x0029, 0}, 0x2473 }, // U2473 # CIRCLED NUMBER TWENTY -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0032, 0x0000, 0x0029, 0}, 0x3257 }, // U3257 # CIRCLED NUMBER TWENTY SEVEN -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0032, 0x0000, 0x0029, 0}, 0x3259 }, // U3259 # CIRCLED NUMBER TWENTY NINE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0032, 0x0000, 0x0029, 0}, 0x3258 }, // U3258 # CIRCLED NUMBER TWENTY EIGHT -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0032, 0x0000, 0x0029, 0}, 0x3253 }, // U3253 # CIRCLED NUMBER TWENTY THREE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0032, 0x0000, 0x0029, 0}, 0x3255 }, // U3255 # CIRCLED NUMBER TWENTY FIVE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0032, 0x0000, 0x0029, 0}, 0x3252 }, // U3252 # CIRCLED NUMBER TWENTY TWO -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0032, 0x0000, 0x0029, 0}, 0x3256 }, // U3256 # CIRCLED NUMBER TWENTY SIX -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0032, 0x0000, 0x0029, 0}, 0x3251 }, // U3251 # CIRCLED NUMBER TWENTY ONE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0032, 0x0000, 0x0029, 0}, 0x3252 }, // U3252 # CIRCLED NUMBER TWENTY TWO -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0032, 0x0000, 0x0029, 0}, 0x3254 }, // U3254 # CIRCLED NUMBER TWENTY FOUR -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0032, 0x0029, 0, 0}, 0x2461 }, // U2461 # CIRCLED DIGIT TWO -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0032, 0x0030, 0x0029, 0}, 0x2473 }, // U2473 # CIRCLED NUMBER TWENTY -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0032, 0x0031, 0x0029, 0}, 0x3251 }, // U3251 # CIRCLED NUMBER TWENTY ONE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0032, 0x0032, 0x0029, 0}, 0x3252 }, // U3252 # CIRCLED NUMBER TWENTY TWO -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0032, 0x0033, 0x0029, 0}, 0x3253 }, // U3253 # CIRCLED NUMBER TWENTY THREE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0032, 0x0034, 0x0029, 0}, 0x3254 }, // U3254 # CIRCLED NUMBER TWENTY FOUR -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0032, 0x0035, 0x0029, 0}, 0x3255 }, // U3255 # CIRCLED NUMBER TWENTY FIVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0032, 0x0036, 0x0029, 0}, 0x3256 }, // U3256 # CIRCLED NUMBER TWENTY SIX -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0032, 0x0037, 0x0029, 0}, 0x3257 }, // U3257 # CIRCLED NUMBER TWENTY SEVEN -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0032, 0x0038, 0x0029, 0}, 0x3258 }, // U3258 # CIRCLED NUMBER TWENTY EIGHT -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0032, 0x0039, 0x0029, 0}, 0x3259 }, // U3259 # CIRCLED NUMBER TWENTY NINE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0033, 0x0000, 0x0029, 0}, 0x32b4 }, // U32B4 # CIRCLED NUMBER THIRTY NINE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0033, 0x0000, 0x0029, 0}, 0x325a }, // U325A # CIRCLED NUMBER THIRTY -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0033, 0x0000, 0x0029, 0}, 0x325b }, // U325B # CIRCLED NUMBER THIRTY ONE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0033, 0x0000, 0x0029, 0}, 0x32b3 }, // U32B3 # CIRCLED NUMBER THIRTY EIGHT -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0033, 0x0000, 0x0029, 0}, 0x32b2 }, // U32B2 # CIRCLED NUMBER THIRTY SEVEN -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0033, 0x0000, 0x0029, 0}, 0x325c }, // U325C # CIRCLED NUMBER THIRTY TWO -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0033, 0x0000, 0x0029, 0}, 0x325c }, // U325C # CIRCLED NUMBER THIRTY TWO -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0033, 0x0000, 0x0029, 0}, 0x325f }, // U325F # CIRCLED NUMBER THIRTY FIVE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0033, 0x0000, 0x0029, 0}, 0x325e }, // U325E # CIRCLED NUMBER THIRTY FOUR -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0033, 0x0000, 0x0029, 0}, 0x32b1 }, // U32B1 # CIRCLED NUMBER THIRTY SIX -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0033, 0x0000, 0x0029, 0}, 0x325d }, // U325D # CIRCLED NUMBER THIRTY THREE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0033, 0x0029, 0, 0}, 0x2462 }, // U2462 # CIRCLED DIGIT THREE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0033, 0x0030, 0x0029, 0}, 0x325a }, // U325A # CIRCLED NUMBER THIRTY -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0033, 0x0031, 0x0029, 0}, 0x325b }, // U325B # CIRCLED NUMBER THIRTY ONE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0033, 0x0032, 0x0029, 0}, 0x325c }, // U325C # CIRCLED NUMBER THIRTY TWO -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0033, 0x0033, 0x0029, 0}, 0x325d }, // U325D # CIRCLED NUMBER THIRTY THREE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0033, 0x0034, 0x0029, 0}, 0x325e }, // U325E # CIRCLED NUMBER THIRTY FOUR -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0033, 0x0035, 0x0029, 0}, 0x325f }, // U325F # CIRCLED NUMBER THIRTY FIVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0033, 0x0036, 0x0029, 0}, 0x32b1 }, // U32B1 # CIRCLED NUMBER THIRTY SIX -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0033, 0x0037, 0x0029, 0}, 0x32b2 }, // U32B2 # CIRCLED NUMBER THIRTY SEVEN -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0033, 0x0038, 0x0029, 0}, 0x32b3 }, // U32B3 # CIRCLED NUMBER THIRTY EIGHT -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0033, 0x0039, 0x0029, 0}, 0x32b4 }, // U32B4 # CIRCLED NUMBER THIRTY NINE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0034, 0x0000, 0x0029, 0}, 0x32b7 }, // U32B7 # CIRCLED NUMBER FORTY TWO -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0034, 0x0000, 0x0029, 0}, 0x32b5 }, // U32B5 # CIRCLED NUMBER FORTY -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0034, 0x0000, 0x0029, 0}, 0x32b6 }, // U32B6 # CIRCLED NUMBER FORTY ONE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0034, 0x0000, 0x0029, 0}, 0x32bc }, // U32BC # CIRCLED NUMBER FORTY SEVEN -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0034, 0x0000, 0x0029, 0}, 0x32b7 }, // U32B7 # CIRCLED NUMBER FORTY TWO -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0034, 0x0000, 0x0029, 0}, 0x32b9 }, // U32B9 # CIRCLED NUMBER FORTY FOUR -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0034, 0x0000, 0x0029, 0}, 0x32b8 }, // U32B8 # CIRCLED NUMBER FORTY THREE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0034, 0x0000, 0x0029, 0}, 0x32bb }, // U32BB # CIRCLED NUMBER FORTY SIX -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0034, 0x0000, 0x0029, 0}, 0x32be }, // U32BE # CIRCLED NUMBER FORTY NINE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0034, 0x0000, 0x0029, 0}, 0x32ba }, // U32BA # CIRCLED NUMBER FORTY FIVE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0034, 0x0000, 0x0029, 0}, 0x32bd }, // U32BD # CIRCLED NUMBER FORTY EIGHT -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0034, 0x0029, 0, 0}, 0x2463 }, // U2463 # CIRCLED DIGIT FOUR -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0034, 0x0030, 0x0029, 0}, 0x32b5 }, // U32B5 # CIRCLED NUMBER FORTY -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0034, 0x0031, 0x0029, 0}, 0x32b6 }, // U32B6 # CIRCLED NUMBER FORTY ONE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0034, 0x0032, 0x0029, 0}, 0x32b7 }, // U32B7 # CIRCLED NUMBER FORTY TWO -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0034, 0x0033, 0x0029, 0}, 0x32b8 }, // U32B8 # CIRCLED NUMBER FORTY THREE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0034, 0x0034, 0x0029, 0}, 0x32b9 }, // U32B9 # CIRCLED NUMBER FORTY FOUR -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0034, 0x0035, 0x0029, 0}, 0x32ba }, // U32BA # CIRCLED NUMBER FORTY FIVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0034, 0x0036, 0x0029, 0}, 0x32bb }, // U32BB # CIRCLED NUMBER FORTY SIX -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0034, 0x0037, 0x0029, 0}, 0x32bc }, // U32BC # CIRCLED NUMBER FORTY SEVEN -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0034, 0x0038, 0x0029, 0}, 0x32bd }, // U32BD # CIRCLED NUMBER FORTY EIGHT -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0034, 0x0039, 0x0029, 0}, 0x32be }, // U32BE # CIRCLED NUMBER FORTY NINE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0035, 0x0000, 0x0029, 0}, 0x32bf }, // U32BF # CIRCLED NUMBER FIFTY -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0035, 0x0029, 0, 0}, 0x2464 }, // U2464 # CIRCLED DIGIT FIVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0035, 0x0030, 0x0029, 0}, 0x32bf }, // U32BF # CIRCLED NUMBER FIFTY -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0036, 0x0029, 0, 0}, 0x2465 }, // U2465 # CIRCLED DIGIT SIX -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0037, 0x0029, 0, 0}, 0x2466 }, // U2466 # CIRCLED DIGIT SEVEN -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0038, 0x0029, 0, 0}, 0x2467 }, // U2467 # CIRCLED DIGIT EIGHT -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0039, 0x0029, 0, 0}, 0x2468 }, // U2468 # CIRCLED DIGIT NINE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0041, 0x0029, 0, 0}, 0x24b6 }, // U24B6 # CIRCLED LATIN CAPITAL LETTER A -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0042, 0x0029, 0, 0}, 0x24b7 }, // U24B7 # CIRCLED LATIN CAPITAL LETTER B -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0043, 0x0029, 0, 0}, 0x24b8 }, // U24B8 # CIRCLED LATIN CAPITAL LETTER C -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0044, 0x0029, 0, 0}, 0x24b9 }, // U24B9 # CIRCLED LATIN CAPITAL LETTER D -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0045, 0x0029, 0, 0}, 0x24ba }, // U24BA # CIRCLED LATIN CAPITAL LETTER E -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0046, 0x0029, 0, 0}, 0x24bb }, // U24BB # CIRCLED LATIN CAPITAL LETTER F -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0047, 0x0029, 0, 0}, 0x24bc }, // U24BC # CIRCLED LATIN CAPITAL LETTER G -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0048, 0x0029, 0, 0}, 0x24bd }, // U24BD # CIRCLED LATIN CAPITAL LETTER H -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0049, 0x0029, 0, 0}, 0x24be }, // U24BE # CIRCLED LATIN CAPITAL LETTER I -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x004a, 0x0029, 0, 0}, 0x24bf }, // U24BF # CIRCLED LATIN CAPITAL LETTER J -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x004b, 0x0029, 0, 0}, 0x24c0 }, // U24C0 # CIRCLED LATIN CAPITAL LETTER K -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x004c, 0x0029, 0, 0}, 0x24c1 }, // U24C1 # CIRCLED LATIN CAPITAL LETTER L -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x004d, 0x0029, 0, 0}, 0x24c2 }, // U24C2 # CIRCLED LATIN CAPITAL LETTER M -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x004e, 0x0029, 0, 0}, 0x24c3 }, // U24C3 # CIRCLED LATIN CAPITAL LETTER N -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x004f, 0x0029, 0, 0}, 0x24c4 }, // U24C4 # CIRCLED LATIN CAPITAL LETTER O -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0050, 0x0029, 0, 0}, 0x24c5 }, // U24C5 # CIRCLED LATIN CAPITAL LETTER P -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0051, 0x0029, 0, 0}, 0x24c6 }, // U24C6 # CIRCLED LATIN CAPITAL LETTER Q -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0052, 0x0029, 0, 0}, 0x24c7 }, // U24C7 # CIRCLED LATIN CAPITAL LETTER R -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0053, 0x0029, 0, 0}, 0x24c8 }, // U24C8 # CIRCLED LATIN CAPITAL LETTER S -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0054, 0x0029, 0, 0}, 0x24c9 }, // U24C9 # CIRCLED LATIN CAPITAL LETTER T -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0055, 0x0029, 0, 0}, 0x24ca }, // U24CA # CIRCLED LATIN CAPITAL LETTER U -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0056, 0x0029, 0, 0}, 0x24cb }, // U24CB # CIRCLED LATIN CAPITAL LETTER V -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0057, 0x0029, 0, 0}, 0x24cc }, // U24CC # CIRCLED LATIN CAPITAL LETTER W -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0058, 0x0029, 0, 0}, 0x24cd }, // U24CD # CIRCLED LATIN CAPITAL LETTER X -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0059, 0x0029, 0, 0}, 0x24ce }, // U24CE # CIRCLED LATIN CAPITAL LETTER Y -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x005a, 0x0029, 0, 0}, 0x24cf }, // U24CF # CIRCLED LATIN CAPITAL LETTER Z -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0061, 0x0029, 0, 0}, 0x24d0 }, // U24D0 # CIRCLED LATIN SMALL LETTER A -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0062, 0x0029, 0, 0}, 0x24d1 }, // U24D1 # CIRCLED LATIN SMALL LETTER B -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0063, 0x0029, 0, 0}, 0x24d2 }, // U24D2 # CIRCLED LATIN SMALL LETTER C -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0064, 0x0029, 0, 0}, 0x24d3 }, // U24D3 # CIRCLED LATIN SMALL LETTER D -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0065, 0x0029, 0, 0}, 0x24d4 }, // U24D4 # CIRCLED LATIN SMALL LETTER E -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0066, 0x0029, 0, 0}, 0x24d5 }, // U24D5 # CIRCLED LATIN SMALL LETTER F -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0067, 0x0029, 0, 0}, 0x24d6 }, // U24D6 # CIRCLED LATIN SMALL LETTER G -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0068, 0x0029, 0, 0}, 0x24d7 }, // U24D7 # CIRCLED LATIN SMALL LETTER H -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0069, 0x0029, 0, 0}, 0x24d8 }, // U24D8 # CIRCLED LATIN SMALL LETTER I -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x006a, 0x0029, 0, 0}, 0x24d9 }, // U24D9 # CIRCLED LATIN SMALL LETTER J -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x006b, 0x0029, 0, 0}, 0x24da }, // U24DA # CIRCLED LATIN SMALL LETTER K -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x006c, 0x0029, 0, 0}, 0x24db }, // U24DB # CIRCLED LATIN SMALL LETTER L -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x006d, 0x0029, 0, 0}, 0x24dc }, // U24DC # CIRCLED LATIN SMALL LETTER M -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x006e, 0x0029, 0, 0}, 0x24dd }, // U24DD # CIRCLED LATIN SMALL LETTER N -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x006f, 0x0029, 0, 0}, 0x24de }, // U24DE # CIRCLED LATIN SMALL LETTER O -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0070, 0x0029, 0, 0}, 0x24df }, // U24DF # CIRCLED LATIN SMALL LETTER P -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0071, 0x0029, 0, 0}, 0x24e0 }, // U24E0 # CIRCLED LATIN SMALL LETTER Q -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0072, 0x0029, 0, 0}, 0x24e1 }, // U24E1 # CIRCLED LATIN SMALL LETTER R -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0073, 0x0029, 0, 0}, 0x24e2 }, // U24E2 # CIRCLED LATIN SMALL LETTER S -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0074, 0x0029, 0, 0}, 0x24e3 }, // U24E3 # CIRCLED LATIN SMALL LETTER T -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0075, 0x0029, 0, 0}, 0x24e4 }, // U24E4 # CIRCLED LATIN SMALL LETTER U -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0076, 0x0029, 0, 0}, 0x24e5 }, // U24E5 # CIRCLED LATIN SMALL LETTER V -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0077, 0x0029, 0, 0}, 0x24e6 }, // U24E6 # CIRCLED LATIN SMALL LETTER W -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0078, 0x0029, 0, 0}, 0x24e7 }, // U24E7 # CIRCLED LATIN SMALL LETTER X -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0079, 0x0029, 0, 0}, 0x24e8 }, // U24E8 # CIRCLED LATIN SMALL LETTER Y -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x007a, 0x0029, 0, 0}, 0x24e9 }, // U24E9 # CIRCLED LATIN SMALL LETTER Z -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0391, 0, 0, 0}, 0x1f09 }, // U1F09 # GREEK CAPITAL LETTER ALPHA WITH DASIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0395, 0, 0, 0}, 0x1f19 }, // U1F19 # GREEK CAPITAL LETTER EPSILON WITH DASIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0397, 0, 0, 0}, 0x1f29 }, // U1F29 # GREEK CAPITAL LETTER ETA WITH DASIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0399, 0, 0, 0}, 0x1f39 }, // U1F39 # GREEK CAPITAL LETTER IOTA WITH DASIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x039f, 0, 0, 0}, 0x1f49 }, // U1F49 # GREEK CAPITAL LETTER OMICRON WITH DASIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03a1, 0, 0, 0}, 0x1fec }, // U1FEC # GREEK CAPITAL LETTER RHO WITH DASIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03a5, 0, 0, 0}, 0x1f59 }, // U1F59 # GREEK CAPITAL LETTER UPSILON WITH DASIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03a9, 0, 0, 0}, 0x1f69 }, // U1F69 # GREEK CAPITAL LETTER OMEGA WITH DASIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b1, 0, 0, 0}, 0x1f01 }, // U1F01 # GREEK SMALL LETTER ALPHA WITH DASIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b5, 0, 0, 0}, 0x1f11 }, // U1F11 # GREEK SMALL LETTER EPSILON WITH DASIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b7, 0, 0, 0}, 0x1f21 }, // U1F21 # GREEK SMALL LETTER ETA WITH DASIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b9, 0, 0, 0}, 0x1f31 }, // U1F31 # GREEK SMALL LETTER IOTA WITH DASIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03bf, 0, 0, 0}, 0x1f41 }, // U1F41 # GREEK SMALL LETTER OMICRON WITH DASIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03c1, 0, 0, 0}, 0x1fe5 }, // U1FE5 # GREEK SMALL LETTER RHO WITH DASIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03c5, 0, 0, 0}, 0x1f51 }, // U1F51 # GREEK SMALL LETTER UPSILON WITH DASIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03c9, 0, 0, 0}, 0x1f61 }, // U1F61 # GREEK SMALL LETTER OMEGA WITH DASIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x1100, 0x0029, 0, 0}, 0x3260 }, // U3260 # CIRCLED HANGUL KIYEOK -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x1100, 0x1161, 0x0029, 0}, 0x326e }, // U326E # CIRCLED HANGUL KIYEOK A -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x1102, 0x0029, 0, 0}, 0x3261 }, // U3261 # CIRCLED HANGUL NIEUN -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x1102, 0x1161, 0x0029, 0}, 0x326f }, // U326F # CIRCLED HANGUL NIEUN A -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x1103, 0x0029, 0, 0}, 0x3262 }, // U3262 # CIRCLED HANGUL TIKEUT -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x1103, 0x1161, 0x0029, 0}, 0x3270 }, // U3270 # CIRCLED HANGUL TIKEUT A -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x1105, 0x0029, 0, 0}, 0x3263 }, // U3263 # CIRCLED HANGUL RIEUL -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x1105, 0x1161, 0x0029, 0}, 0x3271 }, // U3271 # CIRCLED HANGUL RIEUL A -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x1106, 0x0029, 0, 0}, 0x3264 }, // U3264 # CIRCLED HANGUL MIEUM -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x1106, 0x1161, 0x0029, 0}, 0x3272 }, // U3272 # CIRCLED HANGUL MIEUM A -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x1107, 0x0029, 0, 0}, 0x3265 }, // U3265 # CIRCLED HANGUL PIEUP -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x1107, 0x1161, 0x0029, 0}, 0x3273 }, // U3273 # CIRCLED HANGUL PIEUP A -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x1109, 0x0029, 0, 0}, 0x3266 }, // U3266 # CIRCLED HANGUL SIOS -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x1109, 0x1161, 0x0029, 0}, 0x3274 }, // U3274 # CIRCLED HANGUL SIOS A -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x110b, 0x0029, 0, 0}, 0x3267 }, // U3267 # CIRCLED HANGUL IEUNG -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x110b, 0x1161, 0x0029, 0}, 0x3275 }, // U3275 # CIRCLED HANGUL IEUNG A -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x110c, 0x0029, 0, 0}, 0x3268 }, // U3268 # CIRCLED HANGUL CIEUC -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x110c, 0x1161, 0x0029, 0}, 0x3276 }, // U3276 # CIRCLED HANGUL CIEUC A -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x110e, 0x0029, 0, 0}, 0x3269 }, // U3269 # CIRCLED HANGUL CHIEUCH -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x110e, 0x1161, 0x0029, 0}, 0x3277 }, // U3277 # CIRCLED HANGUL CHIEUCH A -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x110f, 0x0029, 0, 0}, 0x326a }, // U326A # CIRCLED HANGUL KHIEUKH -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x110f, 0x1161, 0x0029, 0}, 0x3278 }, // U3278 # CIRCLED HANGUL KHIEUKH A -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x1110, 0x0029, 0, 0}, 0x326b }, // U326B # CIRCLED HANGUL THIEUTH -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x1110, 0x1161, 0x0029, 0}, 0x3279 }, // U3279 # CIRCLED HANGUL THIEUTH A -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x1111, 0x0029, 0, 0}, 0x326c }, // U326C # CIRCLED HANGUL PHIEUPH -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x1111, 0x1161, 0x0029, 0}, 0x327a }, // U327A # CIRCLED HANGUL PHIEUPH A -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x1112, 0x0029, 0, 0}, 0x326d }, // U326D # CIRCLED HANGUL HIEUH -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x1112, 0x1161, 0x0029, 0}, 0x327b }, // U327B # CIRCLED HANGUL HIEUH A -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30a2, 0x0029, 0, 0}, 0x32d0 }, // U32D0 # CIRCLED KATAKANA A -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30a4, 0x0029, 0, 0}, 0x32d1 }, // U32D1 # CIRCLED KATAKANA I -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30a6, 0x0029, 0, 0}, 0x32d2 }, // U32D2 # CIRCLED KATAKANA U -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30a8, 0x0029, 0, 0}, 0x32d3 }, // U32D3 # CIRCLED KATAKANA E -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30aa, 0x0029, 0, 0}, 0x32d4 }, // U32D4 # CIRCLED KATAKANA O -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30ab, 0x0029, 0, 0}, 0x32d5 }, // U32D5 # CIRCLED KATAKANA KA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30ad, 0x0029, 0, 0}, 0x32d6 }, // U32D6 # CIRCLED KATAKANA KI -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30af, 0x0029, 0, 0}, 0x32d7 }, // U32D7 # CIRCLED KATAKANA KU -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30b1, 0x0029, 0, 0}, 0x32d8 }, // U32D8 # CIRCLED KATAKANA KE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30b3, 0x0029, 0, 0}, 0x32d9 }, // U32D9 # CIRCLED KATAKANA KO -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30b5, 0x0029, 0, 0}, 0x32da }, // U32DA # CIRCLED KATAKANA SA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30b7, 0x0029, 0, 0}, 0x32db }, // U32DB # CIRCLED KATAKANA SI -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30b9, 0x0029, 0, 0}, 0x32dc }, // U32DC # CIRCLED KATAKANA SU -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30bb, 0x0029, 0, 0}, 0x32dd }, // U32DD # CIRCLED KATAKANA SE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30bd, 0x0029, 0, 0}, 0x32de }, // U32DE # CIRCLED KATAKANA SO -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30bf, 0x0029, 0, 0}, 0x32df }, // U32DF # CIRCLED KATAKANA TA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30c1, 0x0029, 0, 0}, 0x32e0 }, // U32E0 # CIRCLED KATAKANA TI -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30c4, 0x0029, 0, 0}, 0x32e1 }, // U32E1 # CIRCLED KATAKANA TU -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30c6, 0x0029, 0, 0}, 0x32e2 }, // U32E2 # CIRCLED KATAKANA TE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30c8, 0x0029, 0, 0}, 0x32e3 }, // U32E3 # CIRCLED KATAKANA TO -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30ca, 0x0029, 0, 0}, 0x32e4 }, // U32E4 # CIRCLED KATAKANA NA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30cb, 0x0029, 0, 0}, 0x32e5 }, // U32E5 # CIRCLED KATAKANA NI -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30cc, 0x0029, 0, 0}, 0x32e6 }, // U32E6 # CIRCLED KATAKANA NU -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30cd, 0x0029, 0, 0}, 0x32e7 }, // U32E7 # CIRCLED KATAKANA NE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30ce, 0x0029, 0, 0}, 0x32e8 }, // U32E8 # CIRCLED KATAKANA NO -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30cf, 0x0029, 0, 0}, 0x32e9 }, // U32E9 # CIRCLED KATAKANA HA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30d2, 0x0029, 0, 0}, 0x32ea }, // U32EA # CIRCLED KATAKANA HI -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30d5, 0x0029, 0, 0}, 0x32eb }, // U32EB # CIRCLED KATAKANA HU -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30d8, 0x0029, 0, 0}, 0x32ec }, // U32EC # CIRCLED KATAKANA HE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30db, 0x0029, 0, 0}, 0x32ed }, // U32ED # CIRCLED KATAKANA HO -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30de, 0x0029, 0, 0}, 0x32ee }, // U32EE # CIRCLED KATAKANA MA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30df, 0x0029, 0, 0}, 0x32ef }, // U32EF # CIRCLED KATAKANA MI -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30e0, 0x0029, 0, 0}, 0x32f0 }, // U32F0 # CIRCLED KATAKANA MU -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30e1, 0x0029, 0, 0}, 0x32f1 }, // U32F1 # CIRCLED KATAKANA ME -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30e2, 0x0029, 0, 0}, 0x32f2 }, // U32F2 # CIRCLED KATAKANA MO -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30e4, 0x0029, 0, 0}, 0x32f3 }, // U32F3 # CIRCLED KATAKANA YA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30e6, 0x0029, 0, 0}, 0x32f4 }, // U32F4 # CIRCLED KATAKANA YU -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30e8, 0x0029, 0, 0}, 0x32f5 }, // U32F5 # CIRCLED KATAKANA YO -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30e9, 0x0029, 0, 0}, 0x32f6 }, // U32F6 # CIRCLED KATAKANA RA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30ea, 0x0029, 0, 0}, 0x32f7 }, // U32F7 # CIRCLED KATAKANA RI -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30eb, 0x0029, 0, 0}, 0x32f8 }, // U32F8 # CIRCLED KATAKANA RU -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30ec, 0x0029, 0, 0}, 0x32f9 }, // U32F9 # CIRCLED KATAKANA RE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30ed, 0x0029, 0, 0}, 0x32fa }, // U32FA # CIRCLED KATAKANA RO -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30ef, 0x0029, 0, 0}, 0x32fb }, // U32FB # CIRCLED KATAKANA WA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30f0, 0x0029, 0, 0}, 0x32fc }, // U32FC # CIRCLED KATAKANA WI -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30f1, 0x0029, 0, 0}, 0x32fd }, // U32FD # CIRCLED KATAKANA WE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x30f2, 0x0029, 0, 0}, 0x32fe }, // U32FE # CIRCLED KATAKANA WO -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x4e00, 0x0029, 0, 0}, 0x3280 }, // U3280 # CIRCLED IDEOGRAPH ONE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x4e03, 0x0029, 0, 0}, 0x3286 }, // U3286 # CIRCLED IDEOGRAPH SEVEN -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x4e09, 0x0029, 0, 0}, 0x3282 }, // U3282 # CIRCLED IDEOGRAPH THREE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x4e0a, 0x0029, 0, 0}, 0x32a4 }, // U32A4 # CIRCLED IDEOGRAPH HIGH -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x4e0b, 0x0029, 0, 0}, 0x32a6 }, // U32A6 # CIRCLED IDEOGRAPH LOW -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x4e2d, 0x0029, 0, 0}, 0x32a5 }, // U32A5 # CIRCLED IDEOGRAPH CENTRE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x4e5d, 0x0029, 0, 0}, 0x3288 }, // U3288 # CIRCLED IDEOGRAPH NINE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x4e8c, 0x0029, 0, 0}, 0x3281 }, // U3281 # CIRCLED IDEOGRAPH TWO -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x4e94, 0x0029, 0, 0}, 0x3284 }, // U3284 # CIRCLED IDEOGRAPH FIVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x4f01, 0x0029, 0, 0}, 0x32ad }, // U32AD # CIRCLED IDEOGRAPH ENTERPRISE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x4f11, 0x0029, 0, 0}, 0x32a1 }, // U32A1 # CIRCLED IDEOGRAPH REST -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x512a, 0x0029, 0, 0}, 0x329d }, // U329D # CIRCLED IDEOGRAPH EXCELLENT -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x516b, 0x0029, 0, 0}, 0x3287 }, // U3287 # CIRCLED IDEOGRAPH EIGHT -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x516d, 0x0029, 0, 0}, 0x3285 }, // U3285 # CIRCLED IDEOGRAPH SIX -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x5199, 0x0029, 0, 0}, 0x32a2 }, // U32A2 # CIRCLED IDEOGRAPH COPY -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x52b4, 0x0029, 0, 0}, 0x3298 }, // U3298 # CIRCLED IDEOGRAPH LABOR -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x533b, 0x0029, 0, 0}, 0x32a9 }, // U32A9 # CIRCLED IDEOGRAPH MEDICINE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x5341, 0x0029, 0, 0}, 0x3289 }, // U3289 # CIRCLED IDEOGRAPH TEN -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x5354, 0x0029, 0, 0}, 0x32af }, // U32AF # CIRCLED IDEOGRAPH ALLIANCE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x5370, 0x0029, 0, 0}, 0x329e }, // U329E # CIRCLED IDEOGRAPH PRINT -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x53f3, 0x0029, 0, 0}, 0x32a8 }, // U32A8 # CIRCLED IDEOGRAPH RIGHT -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x540d, 0x0029, 0, 0}, 0x3294 }, // U3294 # CIRCLED IDEOGRAPH NAME -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x56db, 0x0029, 0, 0}, 0x3283 }, // U3283 # CIRCLED IDEOGRAPH FOUR -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x571f, 0x0029, 0, 0}, 0x328f }, // U328F # CIRCLED IDEOGRAPH EARTH -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x591c, 0x0029, 0, 0}, 0x32b0 }, // U32B0 # CIRCLED IDEOGRAPH NIGHT -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x5973, 0x0029, 0, 0}, 0x329b }, // U329B # CIRCLED IDEOGRAPH FEMALE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x5b66, 0x0029, 0, 0}, 0x32ab }, // U32AB # CIRCLED IDEOGRAPH STUDY -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x5b97, 0x0029, 0, 0}, 0x32aa }, // U32AA # CIRCLED IDEOGRAPH RELIGION -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x5de6, 0x0029, 0, 0}, 0x32a7 }, // U32A7 # CIRCLED IDEOGRAPH LEFT -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x65e5, 0x0029, 0, 0}, 0x3290 }, // U3290 # CIRCLED IDEOGRAPH SUN -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x6708, 0x0029, 0, 0}, 0x328a }, // U328A # CIRCLED IDEOGRAPH MOON -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x6709, 0x0029, 0, 0}, 0x3292 }, // U3292 # CIRCLED IDEOGRAPH HAVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x6728, 0x0029, 0, 0}, 0x328d }, // U328D # CIRCLED IDEOGRAPH WOOD -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x682a, 0x0029, 0, 0}, 0x3291 }, // U3291 # CIRCLED IDEOGRAPH STOCK -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x6b63, 0x0029, 0, 0}, 0x32a3 }, // U32A3 # CIRCLED IDEOGRAPH CORRECT -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x6c34, 0x0029, 0, 0}, 0x328c }, // U328C # CIRCLED IDEOGRAPH WATER -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x6ce8, 0x0029, 0, 0}, 0x329f }, // U329F # CIRCLED IDEOGRAPH ATTENTION -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x706b, 0x0029, 0, 0}, 0x328b }, // U328B # CIRCLED IDEOGRAPH FIRE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x7279, 0x0029, 0, 0}, 0x3295 }, // U3295 # CIRCLED IDEOGRAPH SPECIAL -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x7537, 0x0029, 0, 0}, 0x329a }, // U329A # CIRCLED IDEOGRAPH MALE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x76e3, 0x0029, 0, 0}, 0x32ac }, // U32AC # CIRCLED IDEOGRAPH SUPERVISE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x793e, 0x0029, 0, 0}, 0x3293 }, // U3293 # CIRCLED IDEOGRAPH SOCIETY -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x795d, 0x0029, 0, 0}, 0x3297 }, // U3297 # CIRCLED IDEOGRAPH CONGRATULATION -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x79d8, 0x0029, 0, 0}, 0x3299 }, // U3299 # CIRCLED IDEOGRAPH SECRET -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x8ca1, 0x0029, 0, 0}, 0x3296 }, // U3296 # CIRCLED IDEOGRAPH FINANCIAL -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x8cc7, 0x0029, 0, 0}, 0x32ae }, // U32AE # CIRCLED IDEOGRAPH RESOURCE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x9069, 0x0029, 0, 0}, 0x329c }, // U329C # CIRCLED IDEOGRAPH SUITABLE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x91d1, 0x0029, 0, 0}, 0x328e }, // U328E # CIRCLED IDEOGRAPH METAL -+ { {UNITIZE(Qt::Key_Multi_key), 0x0028, 0x9805, 0x0029, 0, 0}, 0x32a0 }, // U32A0 # CIRCLED IDEOGRAPH ITEM -+ { {UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0029, 0, 0, 0}, 0x005d }, // bracketright -+ { {UNITIZE(Qt::Key_Multi_key), 0x0029, 0x002d, 0, 0, 0}, 0x007d }, // braceright -+ { {UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0391, 0, 0, 0}, 0x1f08 }, // U1F08 # GREEK CAPITAL LETTER ALPHA WITH PSILI -+ { {UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0395, 0, 0, 0}, 0x1f18 }, // U1F18 # GREEK CAPITAL LETTER EPSILON WITH PSILI -+ { {UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0397, 0, 0, 0}, 0x1f28 }, // U1F28 # GREEK CAPITAL LETTER ETA WITH PSILI -+ { {UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0399, 0, 0, 0}, 0x1f38 }, // U1F38 # GREEK CAPITAL LETTER IOTA WITH PSILI -+ { {UNITIZE(Qt::Key_Multi_key), 0x0029, 0x039f, 0, 0, 0}, 0x1f48 }, // U1F48 # GREEK CAPITAL LETTER OMICRON WITH PSILI -+ { {UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03a9, 0, 0, 0}, 0x1f68 }, // U1F68 # GREEK CAPITAL LETTER OMEGA WITH PSILI -+ { {UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b1, 0, 0, 0}, 0x1f00 }, // U1F00 # GREEK SMALL LETTER ALPHA WITH PSILI -+ { {UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b5, 0, 0, 0}, 0x1f10 }, // U1F10 # GREEK SMALL LETTER EPSILON WITH PSILI -+ { {UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b7, 0, 0, 0}, 0x1f20 }, // U1F20 # GREEK SMALL LETTER ETA WITH PSILI -+ { {UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b9, 0, 0, 0}, 0x1f30 }, // U1F30 # GREEK SMALL LETTER IOTA WITH PSILI -+ { {UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03bf, 0, 0, 0}, 0x1f40 }, // U1F40 # GREEK SMALL LETTER OMICRON WITH PSILI -+ { {UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03c1, 0, 0, 0}, 0x1fe4 }, // U1FE4 # GREEK SMALL LETTER RHO WITH PSILI -+ { {UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03c5, 0, 0, 0}, 0x1f50 }, // U1F50 # GREEK SMALL LETTER UPSILON WITH PSILI -+ { {UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03c9, 0, 0, 0}, 0x1f60 }, // U1F60 # GREEK SMALL LETTER OMEGA WITH PSILI -+ { {UNITIZE(Qt::Key_Multi_key), 0x002b, 0x002b, 0, 0, 0}, 0x0023 }, // numbersign -+ { {UNITIZE(Qt::Key_Multi_key), 0x002b, 0x002d, 0, 0, 0}, 0x00b1 }, // plusminus -+ { {UNITIZE(Qt::Key_Multi_key), 0x002b, 0x004f, 0, 0, 0}, 0x01a0 }, // U01A0 # LATIN CAPITAL LETTER O WITH HORN -+ { {UNITIZE(Qt::Key_Multi_key), 0x002b, 0x0055, 0, 0, 0}, 0x01af }, // U01AF # LATIN CAPITAL LETTER U WITH HORN -+ { {UNITIZE(Qt::Key_Multi_key), 0x002b, 0x006f, 0, 0, 0}, 0x01a1 }, // U01A1 # LATIN SMALL LETTER O WITH HORN -+ { {UNITIZE(Qt::Key_Multi_key), 0x002b, 0x0075, 0, 0, 0}, 0x01b0 }, // U01B0 # LATIN SMALL LETTER U WITH HORN -+ { {UNITIZE(Qt::Key_Multi_key), 0x002c, 0x0020, 0, 0, 0}, 0x00b8 }, // cedilla -+ { {UNITIZE(Qt::Key_Multi_key), 0x002c, 0x0022, 0, 0, 0}, 0x201e }, // U201e # DOUBLE LOW-9 QUOTATION MARK -+ { {UNITIZE(Qt::Key_Multi_key), 0x002c, 0x0027, 0, 0, 0}, 0x201a }, // U201a # SINGLE LOW-9 QUOTATION MARK -+ { {UNITIZE(Qt::Key_Multi_key), 0x002c, 0x002d, 0, 0, 0}, 0x00ac }, // U00AC # NOT SIGN -+ { {UNITIZE(Qt::Key_Multi_key), 0x002c, 0x0043, 0, 0, 0}, 0x00c7 }, // U00C7 # LATIN CAPITAL LETTER C WITH CEDILLA -+ { {UNITIZE(Qt::Key_Multi_key), 0x002c, 0x0044, 0, 0, 0}, 0x1e10 }, // U1E10 # LATIN CAPITAL LETTER D WITH CEDILLA -+ { {UNITIZE(Qt::Key_Multi_key), 0x002c, 0x0045, 0, 0, 0}, 0x0228 }, // U0228 # LATIN CAPITAL LETTER E WITH CEDILLA -+ { {UNITIZE(Qt::Key_Multi_key), 0x002c, 0x0047, 0, 0, 0}, 0x0122 }, // U0122 # LATIN CAPITAL LETTER G WITH CEDILLA -+ { {UNITIZE(Qt::Key_Multi_key), 0x002c, 0x0048, 0, 0, 0}, 0x1e28 }, // U1E28 # LATIN CAPITAL LETTER H WITH CEDILLA -+ { {UNITIZE(Qt::Key_Multi_key), 0x002c, 0x004b, 0, 0, 0}, 0x0136 }, // U0136 # LATIN CAPITAL LETTER K WITH CEDILLA -+ { {UNITIZE(Qt::Key_Multi_key), 0x002c, 0x004c, 0, 0, 0}, 0x013b }, // U013B # LATIN CAPITAL LETTER L WITH CEDILLA -+ { {UNITIZE(Qt::Key_Multi_key), 0x002c, 0x004e, 0, 0, 0}, 0x0145 }, // U0145 # LATIN CAPITAL LETTER N WITH CEDILLA -+ { {UNITIZE(Qt::Key_Multi_key), 0x002c, 0x0052, 0, 0, 0}, 0x0156 }, // U0156 # LATIN CAPITAL LETTER R WITH CEDILLA -+ { {UNITIZE(Qt::Key_Multi_key), 0x002c, 0x0053, 0, 0, 0}, 0x015e }, // U015E # LATIN CAPITAL LETTER S WITH CEDILLA -+ { {UNITIZE(Qt::Key_Multi_key), 0x002c, 0x0054, 0, 0, 0}, 0x0162 }, // U0162 # LATIN CAPITAL LETTER T WITH CEDILLA -+ { {UNITIZE(Qt::Key_Multi_key), 0x002c, 0x0063, 0, 0, 0}, 0x00e7 }, // U00E7 # LATIN SMALL LETTER C WITH CEDILLA -+ { {UNITIZE(Qt::Key_Multi_key), 0x002c, 0x0064, 0, 0, 0}, 0x1e11 }, // U1E11 # LATIN SMALL LETTER D WITH CEDILLA -+ { {UNITIZE(Qt::Key_Multi_key), 0x002c, 0x0065, 0, 0, 0}, 0x0229 }, // U0229 # LATIN SMALL LETTER E WITH CEDILLA -+ { {UNITIZE(Qt::Key_Multi_key), 0x002c, 0x0067, 0, 0, 0}, 0x0123 }, // U0123 # LATIN SMALL LETTER G WITH CEDILLA -+ { {UNITIZE(Qt::Key_Multi_key), 0x002c, 0x0068, 0, 0, 0}, 0x1e29 }, // U1E29 # LATIN SMALL LETTER H WITH CEDILLA -+ { {UNITIZE(Qt::Key_Multi_key), 0x002c, 0x006b, 0, 0, 0}, 0x0137 }, // U0137 # LATIN SMALL LETTER K WITH CEDILLA -+ { {UNITIZE(Qt::Key_Multi_key), 0x002c, 0x006c, 0, 0, 0}, 0x013c }, // U013C # LATIN SMALL LETTER L WITH CEDILLA -+ { {UNITIZE(Qt::Key_Multi_key), 0x002c, 0x006e, 0, 0, 0}, 0x0146 }, // U0146 # LATIN SMALL LETTER N WITH CEDILLA -+ { {UNITIZE(Qt::Key_Multi_key), 0x002c, 0x0072, 0, 0, 0}, 0x0157 }, // U0157 # LATIN SMALL LETTER R WITH CEDILLA -+ { {UNITIZE(Qt::Key_Multi_key), 0x002c, 0x0073, 0, 0, 0}, 0x015f }, // U015F # LATIN SMALL LETTER S WITH CEDILLA -+ { {UNITIZE(Qt::Key_Multi_key), 0x002c, 0x0074, 0, 0, 0}, 0x0163 }, // U0163 # LATIN SMALL LETTER T WITH CEDILLA -+ { {UNITIZE(Qt::Key_Multi_key), 0x002d, 0x0020, 0, 0, 0}, 0x007e }, // asciitilde -+ { {UNITIZE(Qt::Key_Multi_key), 0x002d, 0x0028, 0, 0, 0}, 0x007b }, // braceleft -+ { {UNITIZE(Qt::Key_Multi_key), 0x002d, 0x0029, 0, 0, 0}, 0x007d }, // braceright -+ { {UNITIZE(Qt::Key_Multi_key), 0x002d, 0x002c, 0, 0, 0}, 0x00ac }, // U00AC # NOT SIGN -+ { {UNITIZE(Qt::Key_Multi_key), 0x002d, 0x002d, 0x002d, 0, 0}, 0x2014 }, // U2014 # EM DASH -+ { {UNITIZE(Qt::Key_Multi_key), 0x002d, 0x002d, 0x002e, 0, 0}, 0x2013 }, // U2013 # EN DASH -+ { {UNITIZE(Qt::Key_Multi_key), 0x002d, 0x003a, 0, 0, 0}, 0x00f7 }, // U00F7 # DIVISION SIGN -+ { {UNITIZE(Qt::Key_Multi_key), 0x002d, 0x0044, 0, 0, 0}, 0x0110 }, // Dstroke -+ { {UNITIZE(Qt::Key_Multi_key), 0x002d, 0x004c, 0, 0, 0}, 0x00a3 }, // U00a3 # POUND SIGN -+ { {UNITIZE(Qt::Key_Multi_key), 0x002d, 0x0064, 0, 0, 0}, 0x0111 }, // dstroke -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0000, 0x0053, 0, 0}, 0x1e68 }, // U1E68 # LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0000, 0x0053, 0, 0}, 0x1e64 }, // U1E64 # LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0000, 0x0073, 0, 0}, 0x1e69 }, // U1E69 # LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0000, 0x0073, 0, 0}, 0x1e65 }, // U1E65 # LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0021, 0x0053, 0, 0}, 0x1e68 }, // U1E68 # LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0021, 0x0073, 0, 0}, 0x1e69 }, // U1E69 # LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0027, 0x0053, 0, 0}, 0x1e64 }, // U1E64 # LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0027, 0x0073, 0, 0}, 0x1e65 }, // U1E65 # LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x002e, 0, 0, 0}, 0x00b7 }, // U00B7 -+ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x003c, 0, 0, 0}, 0x2039 }, // U2039 -+ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x003e, 0, 0, 0}, 0x203a }, // U203a -+ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0041, 0, 0, 0}, 0x0226 }, // U0226 # LATIN CAPITAL LETTER A WITH DOT ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0042, 0, 0, 0}, 0x1e02 }, // U1E02 # LATIN CAPITAL LETTER B WITH DOT ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0043, 0, 0, 0}, 0x010a }, // U010A # LATIN CAPITAL LETTER C WITH DOT ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0044, 0, 0, 0}, 0x1e0a }, // U1E0A # LATIN CAPITAL LETTER D WITH DOT ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0045, 0, 0, 0}, 0x0116 }, // U0116 # LATIN CAPITAL LETTER E WITH DOT ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0046, 0, 0, 0}, 0x1e1e }, // U1E1E # LATIN CAPITAL LETTER F WITH DOT ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0047, 0, 0, 0}, 0x0120 }, // U0120 # LATIN CAPITAL LETTER G WITH DOT ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0048, 0, 0, 0}, 0x1e22 }, // U1E22 # LATIN CAPITAL LETTER H WITH DOT ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0049, 0, 0, 0}, 0x0130 }, // U0130 # LATIN CAPITAL LETTER I WITH DOT ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x004d, 0, 0, 0}, 0x1e40 }, // U1E40 # LATIN CAPITAL LETTER M WITH DOT ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x004e, 0, 0, 0}, 0x1e44 }, // U1E44 # LATIN CAPITAL LETTER N WITH DOT ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x004f, 0, 0, 0}, 0x022e }, // U022E # LATIN CAPITAL LETTER O WITH DOT ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0050, 0, 0, 0}, 0x1e56 }, // U1E56 # LATIN CAPITAL LETTER P WITH DOT ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0052, 0, 0, 0}, 0x1e58 }, // U1E58 # LATIN CAPITAL LETTER R WITH DOT ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0053, 0, 0, 0}, 0x1e60 }, // U1E60 # LATIN CAPITAL LETTER S WITH DOT ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0054, 0, 0, 0}, 0x1e6a }, // U1E6A # LATIN CAPITAL LETTER T WITH DOT ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0057, 0, 0, 0}, 0x1e86 }, // U1E86 # LATIN CAPITAL LETTER W WITH DOT ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0058, 0, 0, 0}, 0x1e8a }, // U1E8A # LATIN CAPITAL LETTER X WITH DOT ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0059, 0, 0, 0}, 0x1e8e }, // U1E8E # LATIN CAPITAL LETTER Y WITH DOT ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x005a, 0, 0, 0}, 0x017b }, // U017B # LATIN CAPITAL LETTER Z WITH DOT ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0061, 0, 0, 0}, 0x0227 }, // U0227 # LATIN SMALL LETTER A WITH DOT ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0062, 0, 0, 0}, 0x1e03 }, // U1E03 # LATIN SMALL LETTER B WITH DOT ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0063, 0, 0, 0}, 0x010b }, // U010B # LATIN SMALL LETTER C WITH DOT ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0063, 0x0053, 0, 0}, 0x1e66 }, // U1E66 # LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0063, 0x0073, 0, 0}, 0x1e67 }, // U1E67 # LATIN SMALL LETTER S WITH CARON AND DOT ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0064, 0, 0, 0}, 0x1e0b }, // U1E0B # LATIN SMALL LETTER D WITH DOT ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0065, 0, 0, 0}, 0x0117 }, // U0117 # LATIN SMALL LETTER E WITH DOT ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0066, 0, 0, 0}, 0x1e1f }, // U1E1F # LATIN SMALL LETTER F WITH DOT ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0067, 0, 0, 0}, 0x0121 }, // U0121 # LATIN SMALL LETTER G WITH DOT ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0068, 0, 0, 0}, 0x1e23 }, // U1E23 # LATIN SMALL LETTER H WITH DOT ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x006d, 0, 0, 0}, 0x1e41 }, // U1E41 # LATIN SMALL LETTER M WITH DOT ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x006e, 0, 0, 0}, 0x1e45 }, // U1E45 # LATIN SMALL LETTER N WITH DOT ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x006f, 0, 0, 0}, 0x022f }, // U022F # LATIN SMALL LETTER O WITH DOT ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0070, 0, 0, 0}, 0x1e57 }, // U1E57 # LATIN SMALL LETTER P WITH DOT ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0072, 0, 0, 0}, 0x1e59 }, // U1E59 # LATIN SMALL LETTER R WITH DOT ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0073, 0, 0, 0}, 0x1e61 }, // U1E61 # LATIN SMALL LETTER S WITH DOT ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0074, 0, 0, 0}, 0x1e6b }, // U1E6B # LATIN SMALL LETTER T WITH DOT ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0077, 0, 0, 0}, 0x1e87 }, // U1E87 # LATIN SMALL LETTER W WITH DOT ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0078, 0, 0, 0}, 0x1e8b }, // U1E8B # LATIN SMALL LETTER X WITH DOT ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0079, 0, 0, 0}, 0x1e8f }, // U1E8F # LATIN SMALL LETTER Y WITH DOT ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x007a, 0, 0, 0}, 0x017c }, // U017C # LATIN SMALL LETTER Z WITH DOT ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x00b4, 0x0053, 0, 0}, 0x1e64 }, // U1E64 # LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x00b4, 0x0073, 0, 0}, 0x1e65 }, // U1E65 # LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x015a, 0, 0, 0}, 0x1e64 }, // U1E64 # LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x015b, 0, 0, 0}, 0x1e65 }, // U1E65 # LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0160, 0, 0, 0}, 0x1e66 }, // U1E66 # LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0161, 0, 0, 0}, 0x1e67 }, // U1E67 # LATIN SMALL LETTER S WITH CARON AND DOT ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x017f, 0, 0, 0}, 0x1e9b }, // U1E9B # LATIN SMALL LETTER LONG S WITH DOT ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x1e62, 0, 0, 0}, 0x1e68 }, // U1E68 # LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x002e, 0x1e63, 0, 0, 0}, 0x1e69 }, // U1E69 # LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x002e, UNITIZE(Qt::Key_Dead_Acute), 0x0053, 0, 0}, 0x1e64 }, // U1E64 # LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x002e, UNITIZE(Qt::Key_Dead_Acute), 0x0073, 0, 0}, 0x1e65 }, // U1E65 # LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x002e, UNITIZE(Qt::Key_Dead_Caron), 0x0053, 0, 0}, 0x1e66 }, // U1E66 # LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x002e, UNITIZE(Qt::Key_Dead_Caron), 0x0073, 0, 0}, 0x1e67 }, // U1E67 # LATIN SMALL LETTER S WITH CARON AND DOT ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x002e, UNITIZE(Qt::Key_Dead_Belowdot), 0x0053, 0, 0}, 0x1e68 }, // U1E68 # LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x002e, UNITIZE(Qt::Key_Dead_Belowdot), 0x0073, 0, 0}, 0x1e69 }, // U1E69 # LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x002f, 0, 0, 0}, 0x005c }, // backslash -+ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x003c, 0, 0, 0}, 0x005c }, // backslash -+ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x0043, 0, 0, 0}, 0x20a1 }, // U20a1 # COLON SIGN -+ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x0043, 0, 0, 0}, 0x00a2 }, // U00A2 # CENT SIGN -+ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x0044, 0, 0, 0}, 0x0110 }, // U0110 # LATIN CAPITAL LETTER D WITH STROKE -+ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x0047, 0, 0, 0}, 0x01e4 }, // U01E4 # LATIN CAPITAL LETTER G WITH STROKE -+ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x0048, 0, 0, 0}, 0x0126 }, // U0126 # LATIN CAPITAL LETTER H WITH STROKE -+ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x0049, 0, 0, 0}, 0x0197 }, // U0197 # LATIN CAPITAL LETTER I WITH STROKE -+ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x004c, 0, 0, 0}, 0x0141 }, // U0141 # LATIN CAPITAL LETTER L WITH STROKE -+ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x004f, 0, 0, 0}, 0x00d8 }, // U00D8 # LATIN CAPITAL LETTER O WITH STROKE -+ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x0054, 0, 0, 0}, 0x0166 }, // U0166 # LATIN CAPITAL LETTER T WITH STROKE -+ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x005a, 0, 0, 0}, 0x01b5 }, // U01B5 # LATIN CAPITAL LETTER Z WITH STROKE -+ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x005e, 0, 0, 0}, 0x007c }, // bar -+ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x0062, 0, 0, 0}, 0x0180 }, // U0180 # LATIN SMALL LETTER B WITH STROKE -+ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x0063, 0, 0, 0}, 0x00a2 }, // U00A2 # CENT SIGN -+ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x0064, 0, 0, 0}, 0x0111 }, // U0111 # LATIN SMALL LETTER D WITH STROKE -+ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x0067, 0, 0, 0}, 0x01e5 }, // U01E5 # LATIN SMALL LETTER G WITH STROKE -+ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x0068, 0, 0, 0}, 0x0127 }, // U0127 # LATIN SMALL LETTER H WITH STROKE -+ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x0069, 0, 0, 0}, 0x0268 }, // U0268 # LATIN SMALL LETTER I WITH STROKE -+ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x006c, 0, 0, 0}, 0x0142 }, // U0142 # LATIN SMALL LETTER L WITH STROKE -+ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x006d, 0, 0, 0}, 0x20a5 }, // U20a5 # MILL SIGN -+ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x006f, 0, 0, 0}, 0x00f8 }, // U00F8 # LATIN SMALL LETTER O WITH STROKE -+ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x0074, 0, 0, 0}, 0x0167 }, // U0167 # LATIN SMALL LETTER T WITH STROKE -+ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x007a, 0, 0, 0}, 0x01b6 }, // U01B6 # LATIN SMALL LETTER Z WITH STROKE -+ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x0294, 0, 0, 0}, 0x02a1 }, // U02A1 # LATIN LETTER GLOTTAL STOP WITH STROKE -+ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x0413, 0, 0, 0}, 0x0492 }, // U0492 # CYRILLIC CAPITAL LETTER GHE WITH STROKE -+ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x041a, 0, 0, 0}, 0x049e }, // U049E # CYRILLIC CAPITAL LETTER KA WITH STROKE -+ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x0433, 0, 0, 0}, 0x0493 }, // U0493 # CYRILLIC SMALL LETTER GHE WITH STROKE -+ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x043a, 0, 0, 0}, 0x049f }, // U049F # CYRILLIC SMALL LETTER KA WITH STROKE -+ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x04ae, 0, 0, 0}, 0x04b0 }, // U04B0 # CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE -+ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x04af, 0, 0, 0}, 0x04b1 }, // U04B1 # CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE -+ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x2190, 0, 0, 0}, 0x219a }, // U219A # LEFTWARDS ARROW WITH STROKE -+ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x2192, 0, 0, 0}, 0x219b }, // U219B # RIGHTWARDS ARROW WITH STROKE -+ { {UNITIZE(Qt::Key_Multi_key), 0x002f, 0x2194, 0, 0, 0}, 0x21ae }, // U21AE # LEFT RIGHT ARROW WITH STROKE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0031, 0x0032, 0, 0, 0}, 0x00bd }, // U00BD # VULGAR FRACTION ONE HALF -+ { {UNITIZE(Qt::Key_Multi_key), 0x0031, 0x0034, 0, 0, 0}, 0x00bc }, // U00BC # VULGAR FRACTION ONE QUARTER -+ { {UNITIZE(Qt::Key_Multi_key), 0x0033, 0x0034, 0, 0, 0}, 0x00be }, // U00BE # VULGAR FRACTION THREE QUARTERS -+ { {UNITIZE(Qt::Key_Multi_key), 0x003a, 0x002d, 0, 0, 0}, 0x00f7 }, // U00F7 # DIVISION SIGN -+ { {UNITIZE(Qt::Key_Multi_key), 0x003b, 0x0041, 0, 0, 0}, 0x0104 }, // U0104 # LATIN CAPITAL LETTER A WITH OGONEK -+ { {UNITIZE(Qt::Key_Multi_key), 0x003b, 0x0045, 0, 0, 0}, 0x0118 }, // U0118 # LATIN CAPITAL LETTER E WITH OGONEK -+ { {UNITIZE(Qt::Key_Multi_key), 0x003b, 0x0049, 0, 0, 0}, 0x012e }, // U012E # LATIN CAPITAL LETTER I WITH OGONEK -+ { {UNITIZE(Qt::Key_Multi_key), 0x003b, 0x004f, 0, 0, 0}, 0x01ea }, // U01EA # LATIN CAPITAL LETTER O WITH OGONEK -+ { {UNITIZE(Qt::Key_Multi_key), 0x003b, 0x0055, 0, 0, 0}, 0x0172 }, // U0172 # LATIN CAPITAL LETTER U WITH OGONEK -+ { {UNITIZE(Qt::Key_Multi_key), 0x003b, 0x0061, 0, 0, 0}, 0x0105 }, // U0105 # LATIN SMALL LETTER A WITH OGONEK -+ { {UNITIZE(Qt::Key_Multi_key), 0x003b, 0x0065, 0, 0, 0}, 0x0119 }, // U0119 # LATIN SMALL LETTER E WITH OGONEK -+ { {UNITIZE(Qt::Key_Multi_key), 0x003b, 0x0069, 0, 0, 0}, 0x012f }, // U012F # LATIN SMALL LETTER I WITH OGONEK -+ { {UNITIZE(Qt::Key_Multi_key), 0x003b, 0x006f, 0, 0, 0}, 0x01eb }, // U01EB # LATIN SMALL LETTER O WITH OGONEK -+ { {UNITIZE(Qt::Key_Multi_key), 0x003b, 0x0075, 0, 0, 0}, 0x0173 }, // U0173 # LATIN SMALL LETTER U WITH OGONEK -+ { {UNITIZE(Qt::Key_Multi_key), 0x003c, 0x0022, 0, 0, 0}, 0x201c }, // U201c # LEFT DOUBLE QUOTATION MARK -+ { {UNITIZE(Qt::Key_Multi_key), 0x003c, 0x0027, 0, 0, 0}, 0x2018 }, // U2018 # LEFT SINGLE QUOTATION MARK -+ { {UNITIZE(Qt::Key_Multi_key), 0x003c, 0x002f, 0, 0, 0}, 0x005c }, // backslash -+ { {UNITIZE(Qt::Key_Multi_key), 0x003c, 0x003c, 0, 0, 0}, 0x00ab }, // guillemotleft # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK -+ { {UNITIZE(Qt::Key_Multi_key), 0x003c, 0x0338, 0, 0, 0}, 0x226e }, // U226E # NOT LESS-THAN -+ { {UNITIZE(Qt::Key_Multi_key), 0x003c, 0x0338, 0, 0, 0}, 0x226e }, // U226E # NOT LESS-THAN -+ { {UNITIZE(Qt::Key_Multi_key), 0x003d, 0x0043, 0, 0, 0}, 0x20ac }, // EuroSign # EURO SIGN -+ { {UNITIZE(Qt::Key_Multi_key), 0x003d, 0x0045, 0, 0, 0}, 0x20ac }, // EuroSign # EURO SIGN -+ { {UNITIZE(Qt::Key_Multi_key), 0x003d, 0x004c, 0, 0, 0}, 0x20a4 }, // U20a4 # LIRA SIGN -+ { {UNITIZE(Qt::Key_Multi_key), 0x003d, 0x004e, 0, 0, 0}, 0x20a6 }, // U20a6 # NAIRA SIGN -+ { {UNITIZE(Qt::Key_Multi_key), 0x003d, 0x004f, 0, 0, 0}, 0x0150 }, // U0150 # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x003d, 0x0055, 0, 0, 0}, 0x0170 }, // U0170 # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x003d, 0x0057, 0, 0, 0}, 0x20a9 }, // U20a9 # WON SIGN -+ { {UNITIZE(Qt::Key_Multi_key), 0x003d, 0x0059, 0, 0, 0}, 0x00a5 }, // yen -+ { {UNITIZE(Qt::Key_Multi_key), 0x003d, 0x006f, 0, 0, 0}, 0x0151 }, // U0151 # LATIN SMALL LETTER O WITH DOUBLE ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x003d, 0x0075, 0, 0, 0}, 0x0171 }, // U0171 # LATIN SMALL LETTER U WITH DOUBLE ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x003d, 0x0338, 0, 0, 0}, 0x2260 }, // U2260 # NOT EQUAL TO -+ { {UNITIZE(Qt::Key_Multi_key), 0x003d, 0x0423, 0, 0, 0}, 0x04f2 }, // U04F2 # CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x003d, 0x0443, 0, 0, 0}, 0x04f3 }, // U04F3 # CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x003e, 0x0020, 0, 0, 0}, 0x005e }, // asciicircum -+ { {UNITIZE(Qt::Key_Multi_key), 0x003e, 0x0022, 0, 0, 0}, 0x201d }, // U201d # RIGHT DOUBLE QUOTATION MARK -+ { {UNITIZE(Qt::Key_Multi_key), 0x003e, 0x0027, 0, 0, 0}, 0x2019 }, // U2019 # RIGHT SINGLE QUOTATION MARK -+ { {UNITIZE(Qt::Key_Multi_key), 0x003e, 0x003e, 0, 0, 0}, 0x00bb }, // guillemotright # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK -+ { {UNITIZE(Qt::Key_Multi_key), 0x003e, 0x0338, 0, 0, 0}, 0x226f }, // U226F # NOT GREATER-THAN -+ { {UNITIZE(Qt::Key_Multi_key), 0x003e, 0x0338, 0, 0, 0}, 0x226f }, // U226F # NOT GREATER-THAN -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x0000, 0, 0, 0}, 0x1eed }, // U1EED # LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x0000, 0, 0, 0}, 0x1eec }, // U1EEC # LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x0000, 0, 0, 0}, 0x1edf }, // U1EDF # LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x0000, 0, 0, 0}, 0x1ede }, // U1EDE # LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x002b, 0x004f, 0, 0}, 0x1ede }, // U1EDE # LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x002b, 0x0055, 0, 0}, 0x1eec }, // U1EEC # LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x002b, 0x006f, 0, 0}, 0x1edf }, // U1EDF # LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x002b, 0x0075, 0, 0}, 0x1eed }, // U1EED # LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x003f, 0, 0, 0}, 0x00bf }, // questiondown -+ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x0041, 0, 0, 0}, 0x1ea2 }, // U1EA2 # LATIN CAPITAL LETTER A WITH HOOK ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x0045, 0, 0, 0}, 0x1eba }, // U1EBA # LATIN CAPITAL LETTER E WITH HOOK ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x0049, 0, 0, 0}, 0x1ec8 }, // U1EC8 # LATIN CAPITAL LETTER I WITH HOOK ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x004f, 0, 0, 0}, 0x1ece }, // U1ECE # LATIN CAPITAL LETTER O WITH HOOK ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x0055, 0, 0, 0}, 0x1ee6 }, // U1EE6 # LATIN CAPITAL LETTER U WITH HOOK ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x0055, 0x0041, 0, 0}, 0x1eb2 }, // U1EB2 # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x0055, 0x0061, 0, 0}, 0x1eb3 }, // U1EB3 # LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x0059, 0, 0, 0}, 0x1ef6 }, // U1EF6 # LATIN CAPITAL LETTER Y WITH HOOK ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x005e, 0x0041, 0, 0}, 0x1ea8 }, // U1EA8 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x005e, 0x0045, 0, 0}, 0x1ec2 }, // U1EC2 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x005e, 0x004f, 0, 0}, 0x1ed4 }, // U1ED4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x005e, 0x0061, 0, 0}, 0x1ea9 }, // U1EA9 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x005e, 0x0065, 0, 0}, 0x1ec3 }, // U1EC3 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x005e, 0x006f, 0, 0}, 0x1ed5 }, // U1ED5 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x0061, 0, 0, 0}, 0x1ea3 }, // U1EA3 # LATIN SMALL LETTER A WITH HOOK ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x0062, 0x0041, 0, 0}, 0x1eb2 }, // U1EB2 # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x0062, 0x0061, 0, 0}, 0x1eb3 }, // U1EB3 # LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x0065, 0, 0, 0}, 0x1ebb }, // U1EBB # LATIN SMALL LETTER E WITH HOOK ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x0069, 0, 0, 0}, 0x1ec9 }, // U1EC9 # LATIN SMALL LETTER I WITH HOOK ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x006f, 0, 0, 0}, 0x1ecf }, // U1ECF # LATIN SMALL LETTER O WITH HOOK ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x0075, 0, 0, 0}, 0x1ee7 }, // U1EE7 # LATIN SMALL LETTER U WITH HOOK ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x0079, 0, 0, 0}, 0x1ef7 }, // U1EF7 # LATIN SMALL LETTER Y WITH HOOK ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x00c2, 0, 0, 0}, 0x1ea8 }, // U1EA8 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x00ca, 0, 0, 0}, 0x1ec2 }, // U1EC2 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x00d4, 0, 0, 0}, 0x1ed4 }, // U1ED4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x00e2, 0, 0, 0}, 0x1ea9 }, // U1EA9 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x00ea, 0, 0, 0}, 0x1ec3 }, // U1EC3 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x00f4, 0, 0, 0}, 0x1ed5 }, // U1ED5 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x0102, 0, 0, 0}, 0x1eb2 }, // U1EB2 # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x003f, 0x0103, 0, 0, 0}, 0x1eb3 }, // U1EB3 # LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x003f, UNITIZE(Qt::Key_Dead_Circumflex), 0x0041, 0, 0}, 0x1ea8 }, // U1EA8 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x003f, UNITIZE(Qt::Key_Dead_Circumflex), 0x0045, 0, 0}, 0x1ec2 }, // U1EC2 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x003f, UNITIZE(Qt::Key_Dead_Circumflex), 0x004f, 0, 0}, 0x1ed4 }, // U1ED4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x003f, UNITIZE(Qt::Key_Dead_Circumflex), 0x0061, 0, 0}, 0x1ea9 }, // U1EA9 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x003f, UNITIZE(Qt::Key_Dead_Circumflex), 0x0065, 0, 0}, 0x1ec3 }, // U1EC3 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x003f, UNITIZE(Qt::Key_Dead_Circumflex), 0x006f, 0, 0}, 0x1ed5 }, // U1ED5 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x003f, UNITIZE(Qt::Key_Dead_Breve), 0x0041, 0, 0}, 0x1eb2 }, // U1EB2 # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x003f, UNITIZE(Qt::Key_Dead_Breve), 0x0061, 0, 0}, 0x1eb3 }, // U1EB3 # LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x003f, UNITIZE(Qt::Key_Dead_Horn), 0x004f, 0, 0}, 0x1ede }, // U1EDE # LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x003f, UNITIZE(Qt::Key_Dead_Horn), 0x0055, 0, 0}, 0x1eec }, // U1EEC # LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x003f, UNITIZE(Qt::Key_Dead_Horn), 0x006f, 0, 0}, 0x1edf }, // U1EDF # LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x003f, UNITIZE(Qt::Key_Dead_Horn), 0x0075, 0, 0}, 0x1eed }, // U1EED # LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0041, 0x0045, 0, 0, 0}, 0x00c6 }, // AE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0041, 0x0054, 0, 0, 0}, 0x0040 }, // at -+ { {UNITIZE(Qt::Key_Multi_key), 0x0043, 0x002f, 0, 0, 0}, 0x20a1 }, // U20a1 # COLON SIGN -+ { {UNITIZE(Qt::Key_Multi_key), 0x0043, 0x002f, 0, 0, 0}, 0x00a2 }, // U00A2 # CENT SIGN -+ { {UNITIZE(Qt::Key_Multi_key), 0x0043, 0x003d, 0, 0, 0}, 0x20ac }, // EuroSign # EURO SIGN -+ { {UNITIZE(Qt::Key_Multi_key), 0x0043, 0x0045, 0, 0, 0}, 0x20a0 }, // U20a0 # EURO-CURRENCY SIGN -+ { {UNITIZE(Qt::Key_Multi_key), 0x0043, 0x0072, 0, 0, 0}, 0x20a2 }, // U20a2 # CRUZEIRO SIGN -+ { {UNITIZE(Qt::Key_Multi_key), 0x0043, 0x007c, 0, 0, 0}, 0x00a2 }, // U00A2 # CENT SIGN -+ { {UNITIZE(Qt::Key_Multi_key), 0x0044, 0x0048, 0, 0, 0}, 0x00d0 }, // U00D0 # LATIN CAPITAL LETTER ETH -+ { {UNITIZE(Qt::Key_Multi_key), 0x0045, 0x003d, 0, 0, 0}, 0x20ac }, // EuroSign # EURO SIGN -+ { {UNITIZE(Qt::Key_Multi_key), 0x0046, 0x0072, 0, 0, 0}, 0x20a3 }, // U20a3 # FRENCH FRANC SIGN -+ { {UNITIZE(Qt::Key_Multi_key), 0x004c, 0x002d, 0, 0, 0}, 0x00a3 }, // U00a3 # POUND SIGN -+ { {UNITIZE(Qt::Key_Multi_key), 0x004c, 0x003d, 0, 0, 0}, 0x20a4 }, // U20a4 # LIRA SIGN -+ { {UNITIZE(Qt::Key_Multi_key), 0x004c, 0x0056, 0, 0, 0}, 0x007c }, // bar -+ { {UNITIZE(Qt::Key_Multi_key), 0x004e, 0x003d, 0, 0, 0}, 0x20a6 }, // U20a6 # NAIRA SIGN -+ { {UNITIZE(Qt::Key_Multi_key), 0x004e, 0x0047, 0, 0, 0}, 0x014a }, // U014A # LATIN CAPITAL LETTER ENG -+ { {UNITIZE(Qt::Key_Multi_key), 0x004f, 0x0043, 0, 0, 0}, 0x00a9 }, // copyright -+ { {UNITIZE(Qt::Key_Multi_key), 0x004f, 0x0045, 0, 0, 0}, 0x0152 }, // OE -+ { {UNITIZE(Qt::Key_Multi_key), 0x004f, 0x0052, 0, 0, 0}, 0x00ae }, // registered -+ { {UNITIZE(Qt::Key_Multi_key), 0x004f, 0x0063, 0, 0, 0}, 0x00a9 }, // copyright -+ { {UNITIZE(Qt::Key_Multi_key), 0x004f, 0x0072, 0, 0, 0}, 0x00ae }, // registered -+ { {UNITIZE(Qt::Key_Multi_key), 0x0050, 0x0021, 0, 0, 0}, 0x00b6 }, // paragraph -+ { {UNITIZE(Qt::Key_Multi_key), 0x0050, 0x0050, 0, 0, 0}, 0x00b6 }, // paragraph # PILCROW SIGN (PARAGRAPH SIGN) -+ { {UNITIZE(Qt::Key_Multi_key), 0x0050, 0x0074, 0, 0, 0}, 0x20a7 }, // U20a7 # PESETA SIGN -+ { {UNITIZE(Qt::Key_Multi_key), 0x0052, 0x0073, 0, 0, 0}, 0x20a8 }, // U20a8 # RUPEE SIGN -+ { {UNITIZE(Qt::Key_Multi_key), 0x0054, 0x0048, 0, 0, 0}, 0x00de }, // U00DE # LATIN CAPITAL LETTER THORN -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0000, 0x0041, 0, 0}, 0x1eb6 }, // U1EB6 # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0000, 0x0061, 0, 0}, 0x1eb7 }, // U1EB7 # LATIN SMALL LETTER A WITH BREVE AND DOT BELOW -+ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0021, 0x0041, 0, 0}, 0x1eb6 }, // U1EB6 # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW -+ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0021, 0x0061, 0, 0}, 0x1eb7 }, // U1EB7 # LATIN SMALL LETTER A WITH BREVE AND DOT BELOW -+ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x002c, 0x0045, 0, 0}, 0x1e1c }, // U1E1C # LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x002c, 0x0065, 0, 0}, 0x1e1d }, // U1E1D # LATIN SMALL LETTER E WITH CEDILLA AND BREVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0041, 0, 0, 0}, 0x0102 }, // U0102 # LATIN CAPITAL LETTER A WITH BREVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0045, 0, 0, 0}, 0x0114 }, // U0114 # LATIN CAPITAL LETTER E WITH BREVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0047, 0, 0, 0}, 0x011e }, // U011E # LATIN CAPITAL LETTER G WITH BREVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0049, 0, 0, 0}, 0x012c }, // U012C # LATIN CAPITAL LETTER I WITH BREVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x004f, 0, 0, 0}, 0x014e }, // U014E # LATIN CAPITAL LETTER O WITH BREVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0055, 0, 0, 0}, 0x016c }, // U016C # LATIN CAPITAL LETTER U WITH BREVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0061, 0, 0, 0}, 0x0103 }, // U0103 # LATIN SMALL LETTER A WITH BREVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0065, 0, 0, 0}, 0x0115 }, // U0115 # LATIN SMALL LETTER E WITH BREVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0067, 0, 0, 0}, 0x011f }, // U011F # LATIN SMALL LETTER G WITH BREVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0069, 0, 0, 0}, 0x012d }, // U012D # LATIN SMALL LETTER I WITH BREVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x006f, 0, 0, 0}, 0x014f }, // U014F # LATIN SMALL LETTER O WITH BREVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0075, 0, 0, 0}, 0x016d }, // U016D # LATIN SMALL LETTER U WITH BREVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0228, 0, 0, 0}, 0x1e1c }, // U1E1C # LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0229, 0, 0, 0}, 0x1e1d }, // U1E1D # LATIN SMALL LETTER E WITH CEDILLA AND BREVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0391, 0, 0, 0}, 0x1fb8 }, // U1FB8 # GREEK CAPITAL LETTER ALPHA WITH VRACHY -+ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0399, 0, 0, 0}, 0x1fd8 }, // U1FD8 # GREEK CAPITAL LETTER IOTA WITH VRACHY -+ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x03a5, 0, 0, 0}, 0x1fe8 }, // U1FE8 # GREEK CAPITAL LETTER UPSILON WITH VRACHY -+ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x03b1, 0, 0, 0}, 0x1fb0 }, // U1FB0 # GREEK SMALL LETTER ALPHA WITH VRACHY -+ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x03b9, 0, 0, 0}, 0x1fd0 }, // U1FD0 # GREEK SMALL LETTER IOTA WITH VRACHY -+ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x03c5, 0, 0, 0}, 0x1fe0 }, // U1FE0 # GREEK SMALL LETTER UPSILON WITH VRACHY -+ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0410, 0, 0, 0}, 0x04d0 }, // U04D0 # CYRILLIC CAPITAL LETTER A WITH BREVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0415, 0, 0, 0}, 0x04d6 }, // U04D6 # CYRILLIC CAPITAL LETTER IE WITH BREVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0416, 0, 0, 0}, 0x04c1 }, // U04C1 # CYRILLIC CAPITAL LETTER ZHE WITH BREVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0418, 0, 0, 0}, 0x0419 }, // U0419 # CYRILLIC CAPITAL LETTER SHORT I -+ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0423, 0, 0, 0}, 0x040e }, // U040E # CYRILLIC CAPITAL LETTER SHORT U -+ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0430, 0, 0, 0}, 0x04d1 }, // U04D1 # CYRILLIC SMALL LETTER A WITH BREVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0435, 0, 0, 0}, 0x04d7 }, // U04D7 # CYRILLIC SMALL LETTER IE WITH BREVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0436, 0, 0, 0}, 0x04c2 }, // U04C2 # CYRILLIC SMALL LETTER ZHE WITH BREVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0438, 0, 0, 0}, 0x0439 }, // U0439 # CYRILLIC SMALL LETTER SHORT I -+ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0443, 0, 0, 0}, 0x045e }, // U045E # CYRILLIC SMALL LETTER SHORT U -+ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x1ea0, 0, 0, 0}, 0x1eb6 }, // U1EB6 # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW -+ { {UNITIZE(Qt::Key_Multi_key), 0x0055, 0x1ea1, 0, 0, 0}, 0x1eb7 }, // U1EB7 # LATIN SMALL LETTER A WITH BREVE AND DOT BELOW -+ { {UNITIZE(Qt::Key_Multi_key), 0x0055, UNITIZE(Qt::Key_Dead_Cedilla), 0x0045, 0, 0}, 0x1e1c }, // U1E1C # LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0055, UNITIZE(Qt::Key_Dead_Cedilla), 0x0065, 0, 0}, 0x1e1d }, // U1E1D # LATIN SMALL LETTER E WITH CEDILLA AND BREVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0055, UNITIZE(Qt::Key_Dead_Belowdot), 0x0041, 0, 0}, 0x1eb6 }, // U1EB6 # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW -+ { {UNITIZE(Qt::Key_Multi_key), 0x0055, UNITIZE(Qt::Key_Dead_Belowdot), 0x0061, 0, 0}, 0x1eb7 }, // U1EB7 # LATIN SMALL LETTER A WITH BREVE AND DOT BELOW -+ { {UNITIZE(Qt::Key_Multi_key), 0x0056, 0x004c, 0, 0, 0}, 0x007c }, // bar -+ { {UNITIZE(Qt::Key_Multi_key), 0x0057, 0x003d, 0, 0, 0}, 0x20a9 }, // U20a9 # WON SIGN -+ { {UNITIZE(Qt::Key_Multi_key), 0x0059, 0x003d, 0, 0, 0}, 0x00a5 }, // yen -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0000, 0, 0, 0}, 0x00b2 }, // U00B2 # SUPERSCRIPT TWO -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0000, 0, 0, 0}, 0x2076 }, // U2076 # SUPERSCRIPT SIX -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0000, 0, 0, 0}, 0x2070 }, // U2070 # SUPERSCRIPT ZERO -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0000, 0, 0, 0}, 0x00b9 }, // U00B9 # SUPERSCRIPT ONE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0000, 0, 0, 0}, 0x2078 }, // U2078 # SUPERSCRIPT EIGHT -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0000, 0, 0, 0}, 0x2074 }, // U2074 # SUPERSCRIPT FOUR -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0000, 0, 0, 0}, 0x00b3 }, // U00B3 # SUPERSCRIPT THREE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0000, 0, 0, 0}, 0x2077 }, // U2077 # SUPERSCRIPT SEVEN -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0000, 0, 0, 0}, 0x207c }, // U207C # SUPERSCRIPT EQUALS SIGN -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0000, 0, 0, 0}, 0x207a }, // U207A # SUPERSCRIPT PLUS SIGN -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0000, 0, 0, 0}, 0x00b2 }, // U00B2 # SUPERSCRIPT TWO -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0000, 0, 0, 0}, 0x2079 }, // U2079 # SUPERSCRIPT NINE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0000, 0, 0, 0}, 0x2075 }, // U2075 # SUPERSCRIPT FIVE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0000, 0x0041, 0, 0}, 0x1eac }, // U1EAC # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0000, 0x0045, 0, 0}, 0x1ec6 }, // U1EC6 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0000, 0x004f, 0, 0}, 0x1ed8 }, // U1ED8 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0000, 0x0061, 0, 0}, 0x1ead }, // U1EAD # LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0000, 0x0065, 0, 0}, 0x1ec7 }, // U1EC7 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0000, 0x006f, 0, 0}, 0x1ed9 }, // U1ED9 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW -+ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0020, 0, 0, 0}, 0x005e }, // asciicircum -+ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0021, 0x0041, 0, 0}, 0x1eac }, // U1EAC # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW -+ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0021, 0x0045, 0, 0}, 0x1ec6 }, // U1EC6 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW -+ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0021, 0x004f, 0, 0}, 0x1ed8 }, // U1ED8 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW -+ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0021, 0x0061, 0, 0}, 0x1ead }, // U1EAD # LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW -+ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0021, 0x0065, 0, 0}, 0x1ec7 }, // U1EC7 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW -+ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0021, 0x006f, 0, 0}, 0x1ed9 }, // U1ED9 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW -+ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0028, 0, 0, 0}, 0x207d }, // U207D # SUPERSCRIPT LEFT PARENTHESIS -+ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0029, 0, 0, 0}, 0x207e }, // U207E # SUPERSCRIPT RIGHT PARENTHESIS -+ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x002b, 0, 0, 0}, 0x207a }, // U207A # SUPERSCRIPT PLUS SIGN -+ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x002f, 0, 0, 0}, 0x007c }, // bar -+ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0030, 0, 0, 0}, 0x2070 }, // U2070 # SUPERSCRIPT ZERO -+ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0031, 0, 0, 0}, 0x00b9 }, // U00B9 # SUPERSCRIPT ONE -+ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0032, 0, 0, 0}, 0x00b2 }, // U00B2 # SUPERSCRIPT TWO -+ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0033, 0, 0, 0}, 0x00b3 }, // U00B3 # SUPERSCRIPT THREE -+ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0034, 0, 0, 0}, 0x2074 }, // U2074 # SUPERSCRIPT FOUR -+ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0035, 0, 0, 0}, 0x2075 }, // U2075 # SUPERSCRIPT FIVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0036, 0, 0, 0}, 0x2076 }, // U2076 # SUPERSCRIPT SIX -+ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0037, 0, 0, 0}, 0x2077 }, // U2077 # SUPERSCRIPT SEVEN -+ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0038, 0, 0, 0}, 0x2078 }, // U2078 # SUPERSCRIPT EIGHT -+ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0039, 0, 0, 0}, 0x2079 }, // U2079 # SUPERSCRIPT NINE -+ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x003d, 0, 0, 0}, 0x207c }, // U207C # SUPERSCRIPT EQUALS SIGN -+ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0041, 0, 0, 0}, 0x00c2 }, // U00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX -+ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0043, 0, 0, 0}, 0x0108 }, // U0108 # LATIN CAPITAL LETTER C WITH CIRCUMFLEX -+ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0045, 0, 0, 0}, 0x00ca }, // U00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX -+ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0047, 0, 0, 0}, 0x011c }, // U011C # LATIN CAPITAL LETTER G WITH CIRCUMFLEX -+ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0048, 0, 0, 0}, 0x0124 }, // U0124 # LATIN CAPITAL LETTER H WITH CIRCUMFLEX -+ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0049, 0, 0, 0}, 0x00ce }, // U00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX -+ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x004a, 0, 0, 0}, 0x0134 }, // U0134 # LATIN CAPITAL LETTER J WITH CIRCUMFLEX -+ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x004f, 0, 0, 0}, 0x00d4 }, // U00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX -+ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0053, 0, 0, 0}, 0x015c }, // U015C # LATIN CAPITAL LETTER S WITH CIRCUMFLEX -+ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0053, 0x004d, 0, 0}, 0x2120 }, // U2120 # SERVICE MARK -+ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0054, 0x004d, 0, 0}, 0x2122 }, // U2122 # TRADE MARK SIGN -+ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0055, 0, 0, 0}, 0x00db }, // U00DB # LATIN CAPITAL LETTER U WITH CIRCUMFLEX -+ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0057, 0, 0, 0}, 0x0174 }, // U0174 # LATIN CAPITAL LETTER W WITH CIRCUMFLEX -+ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0059, 0, 0, 0}, 0x0176 }, // U0176 # LATIN CAPITAL LETTER Y WITH CIRCUMFLEX -+ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005a, 0, 0, 0}, 0x1e90 }, // U1E90 # LATIN CAPITAL LETTER Z WITH CIRCUMFLEX -+ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x0061, 0, 0}, 0x00aa }, // U00AA # FEMININE ORDINAL INDICATOR -+ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x0061, 0, 0}, 0x00aa }, // U00AA # FEMININE ORDINAL INDICATOR -+ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x0068, 0, 0}, 0x02b0 }, // U02B0 # MODIFIER LETTER SMALL H -+ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x0068, 0, 0}, 0x02b0 }, // U02B0 # MODIFIER LETTER SMALL H -+ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x0069, 0, 0}, 0x2071 }, // U2071 # SUPERSCRIPT LATIN SMALL LETTER I -+ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x0069, 0, 0}, 0x2071 }, // U2071 # SUPERSCRIPT LATIN SMALL LETTER I -+ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x006a, 0, 0}, 0x02b2 }, // U02B2 # MODIFIER LETTER SMALL J -+ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x006a, 0, 0}, 0x02b2 }, // U02B2 # MODIFIER LETTER SMALL J -+ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x006c, 0, 0}, 0x02e1 }, // U02E1 # MODIFIER LETTER SMALL L -+ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x006c, 0, 0}, 0x02e1 }, // U02E1 # MODIFIER LETTER SMALL L -+ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x006e, 0, 0}, 0x207f }, // U207F # SUPERSCRIPT LATIN SMALL LETTER N -+ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x006e, 0, 0}, 0x207f }, // U207F # SUPERSCRIPT LATIN SMALL LETTER N -+ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x006f, 0, 0}, 0x00ba }, // U00BA # MASCULINE ORDINAL INDICATOR -+ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x006f, 0, 0}, 0x00ba }, // U00BA # MASCULINE ORDINAL INDICATOR -+ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x0072, 0, 0}, 0x02b3 }, // U02B3 # MODIFIER LETTER SMALL R -+ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x0072, 0, 0}, 0x02b3 }, // U02B3 # MODIFIER LETTER SMALL R -+ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x0073, 0, 0}, 0x02e2 }, // U02E2 # MODIFIER LETTER SMALL S -+ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x0073, 0, 0}, 0x02e2 }, // U02E2 # MODIFIER LETTER SMALL S -+ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x0077, 0, 0}, 0x02b7 }, // U02B7 # MODIFIER LETTER SMALL W -+ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x0077, 0, 0}, 0x02b7 }, // U02B7 # MODIFIER LETTER SMALL W -+ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x0078, 0, 0}, 0x02e3 }, // U02E3 # MODIFIER LETTER SMALL X -+ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x0078, 0, 0}, 0x02e3 }, // U02E3 # MODIFIER LETTER SMALL X -+ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x0079, 0, 0}, 0x02b8 }, // U02B8 # MODIFIER LETTER SMALL Y -+ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x0079, 0, 0}, 0x02b8 }, // U02B8 # MODIFIER LETTER SMALL Y -+ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x0263, 0, 0}, 0x02e0 }, // U02E0 # MODIFIER LETTER SMALL GAMMA -+ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x0263, 0, 0}, 0x02e0 }, // U02E0 # MODIFIER LETTER SMALL GAMMA -+ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x0266, 0, 0}, 0x02b1 }, // U02B1 # MODIFIER LETTER SMALL H WITH HOOK -+ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x0266, 0, 0}, 0x02b1 }, // U02B1 # MODIFIER LETTER SMALL H WITH HOOK -+ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x0279, 0, 0}, 0x02b4 }, // U02B4 # MODIFIER LETTER SMALL TURNED R -+ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x0279, 0, 0}, 0x02b4 }, // U02B4 # MODIFIER LETTER SMALL TURNED R -+ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x027b, 0, 0}, 0x02b5 }, // U02B5 # MODIFIER LETTER SMALL TURNED R WITH HOOK -+ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x027b, 0, 0}, 0x02b5 }, // U02B5 # MODIFIER LETTER SMALL TURNED R WITH HOOK -+ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x0281, 0, 0}, 0x02b6 }, // U02B6 # MODIFIER LETTER SMALL CAPITAL INVERTED R -+ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x0281, 0, 0}, 0x02b6 }, // U02B6 # MODIFIER LETTER SMALL CAPITAL INVERTED R -+ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x0295, 0, 0}, 0x02e4 }, // U02E4 # MODIFIER LETTER SMALL REVERSED GLOTTAL STOP -+ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x005f, 0x0295, 0, 0}, 0x02e4 }, // U02E4 # MODIFIER LETTER SMALL REVERSED GLOTTAL STOP -+ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0061, 0, 0, 0}, 0x00e2 }, // U00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX -+ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0063, 0, 0, 0}, 0x0109 }, // U0109 # LATIN SMALL LETTER C WITH CIRCUMFLEX -+ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0065, 0, 0, 0}, 0x00ea }, // U00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX -+ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0067, 0, 0, 0}, 0x011d }, // U011D # LATIN SMALL LETTER G WITH CIRCUMFLEX -+ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0068, 0, 0, 0}, 0x0125 }, // U0125 # LATIN SMALL LETTER H WITH CIRCUMFLEX -+ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0069, 0, 0, 0}, 0x00ee }, // U00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX -+ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x006a, 0, 0, 0}, 0x0135 }, // U0135 # LATIN SMALL LETTER J WITH CIRCUMFLEX -+ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x006f, 0, 0, 0}, 0x00f4 }, // U00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX -+ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0073, 0, 0, 0}, 0x015d }, // U015D # LATIN SMALL LETTER S WITH CIRCUMFLEX -+ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0075, 0, 0, 0}, 0x00fb }, // U00FB # LATIN SMALL LETTER U WITH CIRCUMFLEX -+ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0077, 0, 0, 0}, 0x0175 }, // U0175 # LATIN SMALL LETTER W WITH CIRCUMFLEX -+ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0079, 0, 0, 0}, 0x0177 }, // U0177 # LATIN SMALL LETTER Y WITH CIRCUMFLEX -+ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x007a, 0, 0, 0}, 0x1e91 }, // U1E91 # LATIN SMALL LETTER Z WITH CIRCUMFLEX -+ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x1ea0, 0, 0, 0}, 0x1eac }, // U1EAC # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW -+ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x1ea1, 0, 0, 0}, 0x1ead }, // U1EAD # LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW -+ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x1eb8, 0, 0, 0}, 0x1ec6 }, // U1EC6 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW -+ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x1eb9, 0, 0, 0}, 0x1ec7 }, // U1EC7 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW -+ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x1ecc, 0, 0, 0}, 0x1ed8 }, // U1ED8 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW -+ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x1ecd, 0, 0, 0}, 0x1ed9 }, // U1ED9 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW -+ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x2212, 0, 0, 0}, 0x207b }, // U207B # SUPERSCRIPT MINUS -+ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x4e00, 0, 0, 0}, 0x3192 }, // U3192 # IDEOGRAPHIC ANNOTATION ONE MARK -+ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x4e01, 0, 0, 0}, 0x319c }, // U319C # IDEOGRAPHIC ANNOTATION FOURTH MARK -+ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x4e09, 0, 0, 0}, 0x3194 }, // U3194 # IDEOGRAPHIC ANNOTATION THREE MARK -+ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x4e0a, 0, 0, 0}, 0x3196 }, // U3196 # IDEOGRAPHIC ANNOTATION TOP MARK -+ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x4e0b, 0, 0, 0}, 0x3198 }, // U3198 # IDEOGRAPHIC ANNOTATION BOTTOM MARK -+ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x4e19, 0, 0, 0}, 0x319b }, // U319B # IDEOGRAPHIC ANNOTATION THIRD MARK -+ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x4e2d, 0, 0, 0}, 0x3197 }, // U3197 # IDEOGRAPHIC ANNOTATION MIDDLE MARK -+ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x4e59, 0, 0, 0}, 0x319a }, // U319A # IDEOGRAPHIC ANNOTATION SECOND MARK -+ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x4e8c, 0, 0, 0}, 0x3193 }, // U3193 # IDEOGRAPHIC ANNOTATION TWO MARK -+ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x4eba, 0, 0, 0}, 0x319f }, // U319F # IDEOGRAPHIC ANNOTATION MAN MARK -+ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x56db, 0, 0, 0}, 0x3195 }, // U3195 # IDEOGRAPHIC ANNOTATION FOUR MARK -+ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x5730, 0, 0, 0}, 0x319e }, // U319E # IDEOGRAPHIC ANNOTATION EARTH MARK -+ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x5929, 0, 0, 0}, 0x319d }, // U319D # IDEOGRAPHIC ANNOTATION HEAVEN MARK -+ { {UNITIZE(Qt::Key_Multi_key), 0x005e, 0x7532, 0, 0, 0}, 0x3199 }, // U3199 # IDEOGRAPHIC ANNOTATION FIRST MARK -+ { {UNITIZE(Qt::Key_Multi_key), 0x005e, UNITIZE(Qt::Key_Dead_Belowdot), 0x0041, 0, 0}, 0x1eac }, // U1EAC # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW -+ { {UNITIZE(Qt::Key_Multi_key), 0x005e, UNITIZE(Qt::Key_Dead_Belowdot), 0x0045, 0, 0}, 0x1ec6 }, // U1EC6 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW -+ { {UNITIZE(Qt::Key_Multi_key), 0x005e, UNITIZE(Qt::Key_Dead_Belowdot), 0x004f, 0, 0}, 0x1ed8 }, // U1ED8 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW -+ { {UNITIZE(Qt::Key_Multi_key), 0x005e, UNITIZE(Qt::Key_Dead_Belowdot), 0x0061, 0, 0}, 0x1ead }, // U1EAD # LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW -+ { {UNITIZE(Qt::Key_Multi_key), 0x005e, UNITIZE(Qt::Key_Dead_Belowdot), 0x0065, 0, 0}, 0x1ec7 }, // U1EC7 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW -+ { {UNITIZE(Qt::Key_Multi_key), 0x005e, UNITIZE(Qt::Key_Dead_Belowdot), 0x006f, 0, 0}, 0x1ed9 }, // U1ED9 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0, 0, 0}, 0x2085 }, // U2085 # SUBSCRIPT FIVE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0, 0, 0}, 0x2087 }, // U2087 # SUBSCRIPT SEVEN -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0, 0, 0}, 0x2082 }, // U2082 # SUBSCRIPT TWO -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0, 0, 0}, 0x2085 }, // U2085 # SUBSCRIPT FIVE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0, 0, 0}, 0x2084 }, // U2084 # SUBSCRIPT FOUR -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0, 0, 0}, 0x2084 }, // U2084 # SUBSCRIPT FOUR -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0, 0, 0}, 0x2086 }, // U2086 # SUBSCRIPT SIX -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0, 0, 0}, 0x2081 }, // U2081 # SUBSCRIPT ONE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0, 0, 0}, 0x208a }, // U208A # SUBSCRIPT PLUS SIGN -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0, 0, 0}, 0x2088 }, // U2088 # SUBSCRIPT EIGHT -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0, 0, 0}, 0x2087 }, // U2087 # SUBSCRIPT SEVEN -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0, 0, 0}, 0x208a }, // U208A # SUBSCRIPT PLUS SIGN -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0, 0, 0}, 0x2080 }, // U2080 # SUBSCRIPT ZERO -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0, 0, 0}, 0x2083 }, // U2083 # SUBSCRIPT THREE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0, 0, 0}, 0x2082 }, // U2082 # SUBSCRIPT TWO -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0, 0, 0}, 0x2083 }, // U2083 # SUBSCRIPT THREE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0, 0, 0}, 0x2086 }, // U2086 # SUBSCRIPT SIX -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0, 0, 0}, 0x2088 }, // U2088 # SUBSCRIPT EIGHT -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0, 0, 0}, 0x2089 }, // U2089 # SUBSCRIPT NINE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0, 0, 0}, 0x2089 }, // U2089 # SUBSCRIPT NINE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0, 0, 0}, 0x2080 }, // U2080 # SUBSCRIPT ZERO -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0, 0, 0}, 0x2082 }, // U2082 # SUBSCRIPT TWO -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0, 0, 0}, 0x2081 }, // U2081 # SUBSCRIPT ONE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0, 0, 0}, 0x2082 }, // U2082 # SUBSCRIPT TWO -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0, 0, 0}, 0x208c }, // U208C # SUBSCRIPT EQUALS SIGN -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0, 0, 0}, 0x208c }, // U208C # SUBSCRIPT EQUALS SIGN -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0x004c, 0, 0}, 0x1e38 }, // U1E38 # LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0x004f, 0, 0}, 0x022c }, // U022C # LATIN CAPITAL LETTER O WITH TILDE AND MACRON -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0x0052, 0, 0}, 0x1e5c }, // U1E5C # LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0x006c, 0, 0}, 0x1e39 }, // U1E39 # LATIN SMALL LETTER L WITH DOT BELOW AND MACRON -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0x006f, 0, 0}, 0x022d }, // U022D # LATIN SMALL LETTER O WITH TILDE AND MACRON -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0000, 0x0072, 0, 0}, 0x1e5d }, // U1E5D # LATIN SMALL LETTER R WITH DOT BELOW AND MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0021, 0x004c, 0, 0}, 0x1e38 }, // U1E38 # LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0021, 0x0052, 0, 0}, 0x1e5c }, // U1E5C # LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0021, 0x006c, 0, 0}, 0x1e39 }, // U1E39 # LATIN SMALL LETTER L WITH DOT BELOW AND MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0021, 0x0072, 0, 0}, 0x1e5d }, // U1E5D # LATIN SMALL LETTER R WITH DOT BELOW AND MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0022, 0x0041, 0, 0}, 0x01de }, // U01DE # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0022, 0x004f, 0, 0}, 0x022a }, // U022A # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0022, 0x0055, 0, 0}, 0x01d5 }, // U01D5 # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0022, 0x0061, 0, 0}, 0x01df }, // U01DF # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0022, 0x006f, 0, 0}, 0x022b }, // U022B # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0022, 0x0075, 0, 0}, 0x01d6 }, // U01D6 # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0028, 0, 0, 0}, 0x208d }, // U208D # SUBSCRIPT LEFT PARENTHESIS -+ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0028, 0, 0, 0}, 0x208d }, // U208D # SUBSCRIPT LEFT PARENTHESIS -+ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0029, 0, 0, 0}, 0x208e }, // U208E # SUBSCRIPT RIGHT PARENTHESIS -+ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0029, 0, 0, 0}, 0x208e }, // U208E # SUBSCRIPT RIGHT PARENTHESIS -+ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x002b, 0, 0, 0}, 0x208a }, // U208A # SUBSCRIPT PLUS SIGN -+ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x002b, 0, 0, 0}, 0x208a }, // U208A # SUBSCRIPT PLUS SIGN -+ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x002e, 0x0041, 0, 0}, 0x01e0 }, // U01E0 # LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x002e, 0x004f, 0, 0}, 0x0230 }, // U0230 # LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x002e, 0x0061, 0, 0}, 0x01e1 }, // U01E1 # LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x002e, 0x006f, 0, 0}, 0x0231 }, // U0231 # LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0030, 0, 0, 0}, 0x2080 }, // U2080 # SUBSCRIPT ZERO -+ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0030, 0, 0, 0}, 0x2080 }, // U2080 # SUBSCRIPT ZERO -+ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0031, 0, 0, 0}, 0x2081 }, // U2081 # SUBSCRIPT ONE -+ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0031, 0, 0, 0}, 0x2081 }, // U2081 # SUBSCRIPT ONE -+ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0032, 0, 0, 0}, 0x2082 }, // U2082 # SUBSCRIPT TWO -+ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0032, 0, 0, 0}, 0x2082 }, // U2082 # SUBSCRIPT TWO -+ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0033, 0, 0, 0}, 0x2083 }, // U2083 # SUBSCRIPT THREE -+ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0033, 0, 0, 0}, 0x2083 }, // U2083 # SUBSCRIPT THREE -+ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0034, 0, 0, 0}, 0x2084 }, // U2084 # SUBSCRIPT FOUR -+ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0034, 0, 0, 0}, 0x2084 }, // U2084 # SUBSCRIPT FOUR -+ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0035, 0, 0, 0}, 0x2085 }, // U2085 # SUBSCRIPT FIVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0035, 0, 0, 0}, 0x2085 }, // U2085 # SUBSCRIPT FIVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0036, 0, 0, 0}, 0x2086 }, // U2086 # SUBSCRIPT SIX -+ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0036, 0, 0, 0}, 0x2086 }, // U2086 # SUBSCRIPT SIX -+ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0037, 0, 0, 0}, 0x2087 }, // U2087 # SUBSCRIPT SEVEN -+ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0037, 0, 0, 0}, 0x2087 }, // U2087 # SUBSCRIPT SEVEN -+ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0038, 0, 0, 0}, 0x2088 }, // U2088 # SUBSCRIPT EIGHT -+ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0038, 0, 0, 0}, 0x2088 }, // U2088 # SUBSCRIPT EIGHT -+ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0039, 0, 0, 0}, 0x2089 }, // U2089 # SUBSCRIPT NINE -+ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0039, 0, 0, 0}, 0x2089 }, // U2089 # SUBSCRIPT NINE -+ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x003b, 0x004f, 0, 0}, 0x01ec }, // U01EC # LATIN CAPITAL LETTER O WITH OGONEK AND MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x003b, 0x006f, 0, 0}, 0x01ed }, // U01ED # LATIN SMALL LETTER O WITH OGONEK AND MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x003d, 0, 0, 0}, 0x208c }, // U208C # SUBSCRIPT EQUALS SIGN -+ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x003d, 0, 0, 0}, 0x208c }, // U208C # SUBSCRIPT EQUALS SIGN -+ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0041, 0, 0, 0}, 0x0100 }, // U0100 # LATIN CAPITAL LETTER A WITH MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0045, 0, 0, 0}, 0x0112 }, // U0112 # LATIN CAPITAL LETTER E WITH MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0047, 0, 0, 0}, 0x1e20 }, // U1E20 # LATIN CAPITAL LETTER G WITH MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0049, 0, 0, 0}, 0x012a }, // U012A # LATIN CAPITAL LETTER I WITH MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x004f, 0, 0, 0}, 0x014c }, // U014C # LATIN CAPITAL LETTER O WITH MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0055, 0, 0, 0}, 0x016a }, // U016A # LATIN CAPITAL LETTER U WITH MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0059, 0, 0, 0}, 0x0232 }, // U0232 # LATIN CAPITAL LETTER Y WITH MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0061, 0, 0, 0}, 0x0101 }, // U0101 # LATIN SMALL LETTER A WITH MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0065, 0, 0, 0}, 0x0113 }, // U0113 # LATIN SMALL LETTER E WITH MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0067, 0, 0, 0}, 0x1e21 }, // U1E21 # LATIN SMALL LETTER G WITH MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0069, 0, 0, 0}, 0x012b }, // U012B # LATIN SMALL LETTER I WITH MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x006f, 0, 0, 0}, 0x014d }, // U014D # LATIN SMALL LETTER O WITH MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0075, 0, 0, 0}, 0x016b }, // U016B # LATIN SMALL LETTER U WITH MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0079, 0, 0, 0}, 0x0233 }, // U0233 # LATIN SMALL LETTER Y WITH MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x007e, 0x004f, 0, 0}, 0x022c }, // U022C # LATIN CAPITAL LETTER O WITH TILDE AND MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x007e, 0x006f, 0, 0}, 0x022d }, // U022D # LATIN SMALL LETTER O WITH TILDE AND MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x00c4, 0, 0, 0}, 0x01de }, // U01DE # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x00c6, 0, 0, 0}, 0x01e2 }, // U01E2 # LATIN CAPITAL LETTER AE WITH MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x00d5, 0, 0, 0}, 0x022c }, // U022C # LATIN CAPITAL LETTER O WITH TILDE AND MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x00d6, 0, 0, 0}, 0x022a }, // U022A # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x00dc, 0, 0, 0}, 0x01d5 }, // U01D5 # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x00e4, 0, 0, 0}, 0x01df }, // U01DF # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x00e6, 0, 0, 0}, 0x01e3 }, // U01E3 # LATIN SMALL LETTER AE WITH MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x00f5, 0, 0, 0}, 0x022d }, // U022D # LATIN SMALL LETTER O WITH TILDE AND MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x00f6, 0, 0, 0}, 0x022b }, // U022B # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x00fc, 0, 0, 0}, 0x01d6 }, // U01D6 # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x01ea, 0, 0, 0}, 0x01ec }, // U01EC # LATIN CAPITAL LETTER O WITH OGONEK AND MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x01eb, 0, 0, 0}, 0x01ed }, // U01ED # LATIN SMALL LETTER O WITH OGONEK AND MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0226, 0, 0, 0}, 0x01e0 }, // U01E0 # LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0227, 0, 0, 0}, 0x01e1 }, // U01E1 # LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x022e, 0, 0, 0}, 0x0230 }, // U0230 # LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x022f, 0, 0, 0}, 0x0231 }, // U0231 # LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0391, 0, 0, 0}, 0x1fb9 }, // U1FB9 # GREEK CAPITAL LETTER ALPHA WITH MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0399, 0, 0, 0}, 0x1fd9 }, // U1FD9 # GREEK CAPITAL LETTER IOTA WITH MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x03a5, 0, 0, 0}, 0x1fe9 }, // U1FE9 # GREEK CAPITAL LETTER UPSILON WITH MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x03b1, 0, 0, 0}, 0x1fb1 }, // U1FB1 # GREEK SMALL LETTER ALPHA WITH MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x03b9, 0, 0, 0}, 0x1fd1 }, // U1FD1 # GREEK SMALL LETTER IOTA WITH MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x03c5, 0, 0, 0}, 0x1fe1 }, // U1FE1 # GREEK SMALL LETTER UPSILON WITH MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0418, 0, 0, 0}, 0x04e2 }, // U04E2 # CYRILLIC CAPITAL LETTER I WITH MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0423, 0, 0, 0}, 0x04ee }, // U04EE # CYRILLIC CAPITAL LETTER U WITH MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0438, 0, 0, 0}, 0x04e3 }, // U04E3 # CYRILLIC SMALL LETTER I WITH MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0443, 0, 0, 0}, 0x04ef }, // U04EF # CYRILLIC SMALL LETTER U WITH MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x1e36, 0, 0, 0}, 0x1e38 }, // U1E38 # LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x1e37, 0, 0, 0}, 0x1e39 }, // U1E39 # LATIN SMALL LETTER L WITH DOT BELOW AND MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x1e5a, 0, 0, 0}, 0x1e5c }, // U1E5C # LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x1e5b, 0, 0, 0}, 0x1e5d }, // U1E5D # LATIN SMALL LETTER R WITH DOT BELOW AND MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x2212, 0, 0, 0}, 0x208b }, // U208B # SUBSCRIPT MINUS -+ { {UNITIZE(Qt::Key_Multi_key), 0x005f, 0x2212, 0, 0, 0}, 0x208b }, // U208B # SUBSCRIPT MINUS -+ { {UNITIZE(Qt::Key_Multi_key), 0x005f, UNITIZE(Qt::Key_Dead_Tilde), 0x004f, 0, 0}, 0x022c }, // U022C # LATIN CAPITAL LETTER O WITH TILDE AND MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x005f, UNITIZE(Qt::Key_Dead_Tilde), 0x006f, 0, 0}, 0x022d }, // U022D # LATIN SMALL LETTER O WITH TILDE AND MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x005f, UNITIZE(Qt::Key_Dead_Abovedot), 0x0041, 0, 0}, 0x01e0 }, // U01E0 # LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x005f, UNITIZE(Qt::Key_Dead_Abovedot), 0x004f, 0, 0}, 0x0230 }, // U0230 # LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x005f, UNITIZE(Qt::Key_Dead_Abovedot), 0x0061, 0, 0}, 0x01e1 }, // U01E1 # LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x005f, UNITIZE(Qt::Key_Dead_Abovedot), 0x006f, 0, 0}, 0x0231 }, // U0231 # LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x005f, UNITIZE(Qt::Key_Dead_Diaeresis), 0x0041, 0, 0}, 0x01de }, // U01DE # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x005f, UNITIZE(Qt::Key_Dead_Diaeresis), 0x004f, 0, 0}, 0x022a }, // U022A # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x005f, UNITIZE(Qt::Key_Dead_Diaeresis), 0x0055, 0, 0}, 0x01d5 }, // U01D5 # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x005f, UNITIZE(Qt::Key_Dead_Diaeresis), 0x0061, 0, 0}, 0x01df }, // U01DF # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x005f, UNITIZE(Qt::Key_Dead_Diaeresis), 0x006f, 0, 0}, 0x022b }, // U022B # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x005f, UNITIZE(Qt::Key_Dead_Diaeresis), 0x0075, 0, 0}, 0x01d6 }, // U01D6 # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x005f, UNITIZE(Qt::Key_Dead_Ogonek), 0x004f, 0, 0}, 0x01ec }, // U01EC # LATIN CAPITAL LETTER O WITH OGONEK AND MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x005f, UNITIZE(Qt::Key_Dead_Ogonek), 0x006f, 0, 0}, 0x01ed }, // U01ED # LATIN SMALL LETTER O WITH OGONEK AND MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x005f, UNITIZE(Qt::Key_Dead_Belowdot), 0x004c, 0, 0}, 0x1e38 }, // U1E38 # LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x005f, UNITIZE(Qt::Key_Dead_Belowdot), 0x0052, 0, 0}, 0x1e5c }, // U1E5C # LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x005f, UNITIZE(Qt::Key_Dead_Belowdot), 0x006c, 0, 0}, 0x1e39 }, // U1E39 # LATIN SMALL LETTER L WITH DOT BELOW AND MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x005f, UNITIZE(Qt::Key_Dead_Belowdot), 0x0072, 0, 0}, 0x1e5d }, // U1E5D # LATIN SMALL LETTER R WITH DOT BELOW AND MACRON -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0000, 0, 0, 0}, 0x1edd }, // U1EDD # LATIN SMALL LETTER O WITH HORN AND GRAVE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0000, 0, 0, 0}, 0x1eea }, // U1EEA # LATIN CAPITAL LETTER U WITH HORN AND GRAVE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0000, 0, 0, 0}, 0x1edc }, // U1EDC # LATIN CAPITAL LETTER O WITH HORN AND GRAVE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0000, 0, 0, 0}, 0x1eeb }, // U1EEB # LATIN SMALL LETTER U WITH HORN AND GRAVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0020, 0, 0, 0}, 0x0060 }, // grave -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0022, 0x0055, 0, 0}, 0x01db }, // U01DB # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0022, 0x0075, 0, 0}, 0x01dc }, // U01DC # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0022, 0x03b9, 0, 0}, 0x1fd2 }, // U1FD2 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0022, 0x03c5, 0, 0}, 0x1fe2 }, // U1FE2 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0028, 0x0391, 0, 0}, 0x1f0b }, // U1F0B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0028, 0x0395, 0, 0}, 0x1f1b }, // U1F1B # GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0028, 0x0397, 0, 0}, 0x1f2b }, // U1F2B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0028, 0x0399, 0, 0}, 0x1f3b }, // U1F3B # GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0028, 0x039f, 0, 0}, 0x1f4b }, // U1F4B # GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0028, 0x03a5, 0, 0}, 0x1f5b }, // U1F5B # GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0028, 0x03a9, 0, 0}, 0x1f6b }, // U1F6B # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0028, 0x03b1, 0, 0}, 0x1f03 }, // U1F03 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0028, 0x03b5, 0, 0}, 0x1f13 }, // U1F13 # GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0028, 0x03b7, 0, 0}, 0x1f23 }, // U1F23 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0028, 0x03b9, 0, 0}, 0x1f33 }, // U1F33 # GREEK SMALL LETTER IOTA WITH DASIA AND VARIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0028, 0x03bf, 0, 0}, 0x1f43 }, // U1F43 # GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0028, 0x03c5, 0, 0}, 0x1f53 }, // U1F53 # GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0028, 0x03c9, 0, 0}, 0x1f63 }, // U1F63 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0029, 0x0391, 0, 0}, 0x1f0a }, // U1F0A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0029, 0x0395, 0, 0}, 0x1f1a }, // U1F1A # GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0029, 0x0397, 0, 0}, 0x1f2a }, // U1F2A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0029, 0x0399, 0, 0}, 0x1f3a }, // U1F3A # GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0029, 0x039f, 0, 0}, 0x1f4a }, // U1F4A # GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0029, 0x03a9, 0, 0}, 0x1f6a }, // U1F6A # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0029, 0x03b1, 0, 0}, 0x1f02 }, // U1F02 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0029, 0x03b5, 0, 0}, 0x1f12 }, // U1F12 # GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0029, 0x03b7, 0, 0}, 0x1f22 }, // U1F22 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0029, 0x03b9, 0, 0}, 0x1f32 }, // U1F32 # GREEK SMALL LETTER IOTA WITH PSILI AND VARIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0029, 0x03bf, 0, 0}, 0x1f42 }, // U1F42 # GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0029, 0x03c5, 0, 0}, 0x1f52 }, // U1F52 # GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0029, 0x03c9, 0, 0}, 0x1f62 }, // U1F62 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x002b, 0x004f, 0, 0}, 0x1edc }, // U1EDC # LATIN CAPITAL LETTER O WITH HORN AND GRAVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x002b, 0x0055, 0, 0}, 0x1eea }, // U1EEA # LATIN CAPITAL LETTER U WITH HORN AND GRAVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x002b, 0x006f, 0, 0}, 0x1edd }, // U1EDD # LATIN SMALL LETTER O WITH HORN AND GRAVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x002b, 0x0075, 0, 0}, 0x1eeb }, // U1EEB # LATIN SMALL LETTER U WITH HORN AND GRAVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0041, 0, 0, 0}, 0x00c0 }, // U00C0 # LATIN CAPITAL LETTER A WITH GRAVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0045, 0, 0, 0}, 0x00c8 }, // U00C8 # LATIN CAPITAL LETTER E WITH GRAVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0049, 0, 0, 0}, 0x00cc }, // U00CC # LATIN CAPITAL LETTER I WITH GRAVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x004e, 0, 0, 0}, 0x01f8 }, // U01F8 # LATIN CAPITAL LETTER N WITH GRAVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x004f, 0, 0, 0}, 0x00d2 }, // U00D2 # LATIN CAPITAL LETTER O WITH GRAVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0055, 0, 0, 0}, 0x00d9 }, // U00D9 # LATIN CAPITAL LETTER U WITH GRAVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0055, 0x0041, 0, 0}, 0x1eb0 }, // U1EB0 # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0055, 0x0061, 0, 0}, 0x1eb1 }, // U1EB1 # LATIN SMALL LETTER A WITH BREVE AND GRAVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0057, 0, 0, 0}, 0x1e80 }, // U1E80 # LATIN CAPITAL LETTER W WITH GRAVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0059, 0, 0, 0}, 0x1ef2 }, // U1EF2 # LATIN CAPITAL LETTER Y WITH GRAVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x005e, 0x0041, 0, 0}, 0x1ea6 }, // U1EA6 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x005e, 0x0045, 0, 0}, 0x1ec0 }, // U1EC0 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x005e, 0x004f, 0, 0}, 0x1ed2 }, // U1ED2 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x005e, 0x0061, 0, 0}, 0x1ea7 }, // U1EA7 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x005e, 0x0065, 0, 0}, 0x1ec1 }, // U1EC1 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x005e, 0x006f, 0, 0}, 0x1ed3 }, // U1ED3 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x005f, 0x0045, 0, 0}, 0x1e14 }, // U1E14 # LATIN CAPITAL LETTER E WITH MACRON AND GRAVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x005f, 0x004f, 0, 0}, 0x1e50 }, // U1E50 # LATIN CAPITAL LETTER O WITH MACRON AND GRAVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x005f, 0x0065, 0, 0}, 0x1e15 }, // U1E15 # LATIN SMALL LETTER E WITH MACRON AND GRAVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x005f, 0x006f, 0, 0}, 0x1e51 }, // U1E51 # LATIN SMALL LETTER O WITH MACRON AND GRAVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0061, 0, 0, 0}, 0x00e0 }, // U00E0 # LATIN SMALL LETTER A WITH GRAVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0062, 0x0041, 0, 0}, 0x1eb0 }, // U1EB0 # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0062, 0x0061, 0, 0}, 0x1eb1 }, // U1EB1 # LATIN SMALL LETTER A WITH BREVE AND GRAVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0065, 0, 0, 0}, 0x00e8 }, // U00E8 # LATIN SMALL LETTER E WITH GRAVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0069, 0, 0, 0}, 0x00ec }, // U00EC # LATIN SMALL LETTER I WITH GRAVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x006e, 0, 0, 0}, 0x01f9 }, // U01F9 # LATIN SMALL LETTER N WITH GRAVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x006f, 0, 0, 0}, 0x00f2 }, // U00F2 # LATIN SMALL LETTER O WITH GRAVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0075, 0, 0, 0}, 0x00f9 }, // U00F9 # LATIN SMALL LETTER U WITH GRAVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0077, 0, 0, 0}, 0x1e81 }, // U1E81 # LATIN SMALL LETTER W WITH GRAVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0079, 0, 0, 0}, 0x1ef3 }, // U1EF3 # LATIN SMALL LETTER Y WITH GRAVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x00af, 0x0045, 0, 0}, 0x1e14 }, // U1E14 # LATIN CAPITAL LETTER E WITH MACRON AND GRAVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x00af, 0x004f, 0, 0}, 0x1e50 }, // U1E50 # LATIN CAPITAL LETTER O WITH MACRON AND GRAVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x00af, 0x0065, 0, 0}, 0x1e15 }, // U1E15 # LATIN SMALL LETTER E WITH MACRON AND GRAVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x00af, 0x006f, 0, 0}, 0x1e51 }, // U1E51 # LATIN SMALL LETTER O WITH MACRON AND GRAVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x00c2, 0, 0, 0}, 0x1ea6 }, // U1EA6 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x00ca, 0, 0, 0}, 0x1ec0 }, // U1EC0 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x00d4, 0, 0, 0}, 0x1ed2 }, // U1ED2 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x00dc, 0, 0, 0}, 0x01db }, // U01DB # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x00e2, 0, 0, 0}, 0x1ea7 }, // U1EA7 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x00ea, 0, 0, 0}, 0x1ec1 }, // U1EC1 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x00f4, 0, 0, 0}, 0x1ed3 }, // U1ED3 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x00fc, 0, 0, 0}, 0x01dc }, // U01DC # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0102, 0, 0, 0}, 0x1eb0 }, // U1EB0 # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0103, 0, 0, 0}, 0x1eb1 }, // U1EB1 # LATIN SMALL LETTER A WITH BREVE AND GRAVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0112, 0, 0, 0}, 0x1e14 }, // U1E14 # LATIN CAPITAL LETTER E WITH MACRON AND GRAVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0113, 0, 0, 0}, 0x1e15 }, // U1E15 # LATIN SMALL LETTER E WITH MACRON AND GRAVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x014c, 0, 0, 0}, 0x1e50 }, // U1E50 # LATIN CAPITAL LETTER O WITH MACRON AND GRAVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x014d, 0, 0, 0}, 0x1e51 }, // U1E51 # LATIN SMALL LETTER O WITH MACRON AND GRAVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0313, 0x0391, 0, 0}, 0x1f0a }, // U1F0A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0313, 0x0395, 0, 0}, 0x1f1a }, // U1F1A # GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0313, 0x0397, 0, 0}, 0x1f2a }, // U1F2A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0313, 0x0399, 0, 0}, 0x1f3a }, // U1F3A # GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0313, 0x039f, 0, 0}, 0x1f4a }, // U1F4A # GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0313, 0x03a9, 0, 0}, 0x1f6a }, // U1F6A # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0313, 0x03b1, 0, 0}, 0x1f02 }, // U1F02 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0313, 0x03b5, 0, 0}, 0x1f12 }, // U1F12 # GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0313, 0x03b7, 0, 0}, 0x1f22 }, // U1F22 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0313, 0x03b9, 0, 0}, 0x1f32 }, // U1F32 # GREEK SMALL LETTER IOTA WITH PSILI AND VARIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0313, 0x03bf, 0, 0}, 0x1f42 }, // U1F42 # GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0313, 0x03c5, 0, 0}, 0x1f52 }, // U1F52 # GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0313, 0x03c9, 0, 0}, 0x1f62 }, // U1F62 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0314, 0x0391, 0, 0}, 0x1f0b }, // U1F0B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0314, 0x0395, 0, 0}, 0x1f1b }, // U1F1B # GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0314, 0x0397, 0, 0}, 0x1f2b }, // U1F2B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0314, 0x0399, 0, 0}, 0x1f3b }, // U1F3B # GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0314, 0x039f, 0, 0}, 0x1f4b }, // U1F4B # GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0314, 0x03a5, 0, 0}, 0x1f5b }, // U1F5B # GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0314, 0x03a9, 0, 0}, 0x1f6b }, // U1F6B # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0314, 0x03b1, 0, 0}, 0x1f03 }, // U1F03 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0314, 0x03b5, 0, 0}, 0x1f13 }, // U1F13 # GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0314, 0x03b7, 0, 0}, 0x1f23 }, // U1F23 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0314, 0x03b9, 0, 0}, 0x1f33 }, // U1F33 # GREEK SMALL LETTER IOTA WITH DASIA AND VARIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0314, 0x03bf, 0, 0}, 0x1f43 }, // U1F43 # GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0314, 0x03c5, 0, 0}, 0x1f53 }, // U1F53 # GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0314, 0x03c9, 0, 0}, 0x1f63 }, // U1F63 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0391, 0, 0, 0}, 0x1fba }, // U1FBA # GREEK CAPITAL LETTER ALPHA WITH VARIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0395, 0, 0, 0}, 0x1fc8 }, // U1FC8 # GREEK CAPITAL LETTER EPSILON WITH VARIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0397, 0, 0, 0}, 0x1fca }, // U1FCA # GREEK CAPITAL LETTER ETA WITH VARIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0399, 0, 0, 0}, 0x1fda }, // U1FDA # GREEK CAPITAL LETTER IOTA WITH VARIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x039f, 0, 0, 0}, 0x1ff8 }, // U1FF8 # GREEK CAPITAL LETTER OMICRON WITH VARIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x03a5, 0, 0, 0}, 0x1fea }, // U1FEA # GREEK CAPITAL LETTER UPSILON WITH VARIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x03a9, 0, 0, 0}, 0x1ffa }, // U1FFA # GREEK CAPITAL LETTER OMEGA WITH VARIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x03b1, 0, 0, 0}, 0x1f70 }, // U1F70 # GREEK SMALL LETTER ALPHA WITH VARIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x03b5, 0, 0, 0}, 0x1f72 }, // U1F72 # GREEK SMALL LETTER EPSILON WITH VARIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x03b7, 0, 0, 0}, 0x1f74 }, // U1F74 # GREEK SMALL LETTER ETA WITH VARIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x03b9, 0, 0, 0}, 0x1f76 }, // U1F76 # GREEK SMALL LETTER IOTA WITH VARIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x03bf, 0, 0, 0}, 0x1f78 }, // U1F78 # GREEK SMALL LETTER OMICRON WITH VARIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x03c5, 0, 0, 0}, 0x1f7a }, // U1F7A # GREEK SMALL LETTER UPSILON WITH VARIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x03c9, 0, 0, 0}, 0x1f7c }, // U1F7C # GREEK SMALL LETTER OMEGA WITH VARIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x03ca, 0, 0, 0}, 0x1fd2 }, // U1FD2 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x03cb, 0, 0, 0}, 0x1fe2 }, // U1FE2 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0415, 0, 0, 0}, 0x0400 }, // U0400 # CYRILLIC CAPITAL LETTER IE WITH GRAVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0418, 0, 0, 0}, 0x040d }, // U040D # CYRILLIC CAPITAL LETTER I WITH GRAVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0435, 0, 0, 0}, 0x0450 }, // U0450 # CYRILLIC SMALL LETTER IE WITH GRAVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0438, 0, 0, 0}, 0x045d }, // U045D # CYRILLIC SMALL LETTER I WITH GRAVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f00, 0, 0, 0}, 0x1f02 }, // U1F02 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f01, 0, 0, 0}, 0x1f03 }, // U1F03 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f08, 0, 0, 0}, 0x1f0a }, // U1F0A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f09, 0, 0, 0}, 0x1f0b }, // U1F0B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f10, 0, 0, 0}, 0x1f12 }, // U1F12 # GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f11, 0, 0, 0}, 0x1f13 }, // U1F13 # GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f18, 0, 0, 0}, 0x1f1a }, // U1F1A # GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f19, 0, 0, 0}, 0x1f1b }, // U1F1B # GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f20, 0, 0, 0}, 0x1f22 }, // U1F22 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f21, 0, 0, 0}, 0x1f23 }, // U1F23 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f28, 0, 0, 0}, 0x1f2a }, // U1F2A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f29, 0, 0, 0}, 0x1f2b }, // U1F2B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f30, 0, 0, 0}, 0x1f32 }, // U1F32 # GREEK SMALL LETTER IOTA WITH PSILI AND VARIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f31, 0, 0, 0}, 0x1f33 }, // U1F33 # GREEK SMALL LETTER IOTA WITH DASIA AND VARIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f38, 0, 0, 0}, 0x1f3a }, // U1F3A # GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f39, 0, 0, 0}, 0x1f3b }, // U1F3B # GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f40, 0, 0, 0}, 0x1f42 }, // U1F42 # GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f41, 0, 0, 0}, 0x1f43 }, // U1F43 # GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f48, 0, 0, 0}, 0x1f4a }, // U1F4A # GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f49, 0, 0, 0}, 0x1f4b }, // U1F4B # GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f50, 0, 0, 0}, 0x1f52 }, // U1F52 # GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f51, 0, 0, 0}, 0x1f53 }, // U1F53 # GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f59, 0, 0, 0}, 0x1f5b }, // U1F5B # GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f60, 0, 0, 0}, 0x1f62 }, // U1F62 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f61, 0, 0, 0}, 0x1f63 }, // U1F63 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f68, 0, 0, 0}, 0x1f6a }, // U1F6A # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f69, 0, 0, 0}, 0x1f6b }, // U1F6B # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, UNITIZE(Qt::Key_Dead_Circumflex), 0x0041, 0, 0}, 0x1ea6 }, // U1EA6 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, UNITIZE(Qt::Key_Dead_Circumflex), 0x0045, 0, 0}, 0x1ec0 }, // U1EC0 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, UNITIZE(Qt::Key_Dead_Circumflex), 0x004f, 0, 0}, 0x1ed2 }, // U1ED2 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, UNITIZE(Qt::Key_Dead_Circumflex), 0x0061, 0, 0}, 0x1ea7 }, // U1EA7 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, UNITIZE(Qt::Key_Dead_Circumflex), 0x0065, 0, 0}, 0x1ec1 }, // U1EC1 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, UNITIZE(Qt::Key_Dead_Circumflex), 0x006f, 0, 0}, 0x1ed3 }, // U1ED3 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, UNITIZE(Qt::Key_Dead_Macron), 0x0045, 0, 0}, 0x1e14 }, // U1E14 # LATIN CAPITAL LETTER E WITH MACRON AND GRAVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, UNITIZE(Qt::Key_Dead_Macron), 0x004f, 0, 0}, 0x1e50 }, // U1E50 # LATIN CAPITAL LETTER O WITH MACRON AND GRAVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, UNITIZE(Qt::Key_Dead_Macron), 0x0065, 0, 0}, 0x1e15 }, // U1E15 # LATIN SMALL LETTER E WITH MACRON AND GRAVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, UNITIZE(Qt::Key_Dead_Macron), 0x006f, 0, 0}, 0x1e51 }, // U1E51 # LATIN SMALL LETTER O WITH MACRON AND GRAVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, UNITIZE(Qt::Key_Dead_Breve), 0x0041, 0, 0}, 0x1eb0 }, // U1EB0 # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, UNITIZE(Qt::Key_Dead_Breve), 0x0061, 0, 0}, 0x1eb1 }, // U1EB1 # LATIN SMALL LETTER A WITH BREVE AND GRAVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, UNITIZE(Qt::Key_Dead_Diaeresis), 0x0055, 0, 0}, 0x01db }, // U01DB # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, UNITIZE(Qt::Key_Dead_Diaeresis), 0x0075, 0, 0}, 0x01dc }, // U01DC # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, UNITIZE(Qt::Key_Dead_Diaeresis), 0x03b9, 0, 0}, 0x1fd2 }, // U1FD2 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, UNITIZE(Qt::Key_Dead_Diaeresis), 0x03c5, 0, 0}, 0x1fe2 }, // U1FE2 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, UNITIZE(Qt::Key_Dead_Horn), 0x004f, 0, 0}, 0x1edc }, // U1EDC # LATIN CAPITAL LETTER O WITH HORN AND GRAVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, UNITIZE(Qt::Key_Dead_Horn), 0x0055, 0, 0}, 0x1eea }, // U1EEA # LATIN CAPITAL LETTER U WITH HORN AND GRAVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, UNITIZE(Qt::Key_Dead_Horn), 0x006f, 0, 0}, 0x1edd }, // U1EDD # LATIN SMALL LETTER O WITH HORN AND GRAVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0060, UNITIZE(Qt::Key_Dead_Horn), 0x0075, 0, 0}, 0x1eeb }, // U1EEB # LATIN SMALL LETTER U WITH HORN AND GRAVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0061, 0x0065, 0, 0, 0}, 0x00e6 }, // ae -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0000, 0x0041, 0, 0}, 0x1eb6 }, // U1EB6 # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0000, 0x0061, 0, 0}, 0x1eb7 }, // U1EB7 # LATIN SMALL LETTER A WITH BREVE AND DOT BELOW -+ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0021, 0x0041, 0, 0}, 0x1eb6 }, // U1EB6 # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW -+ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0021, 0x0061, 0, 0}, 0x1eb7 }, // U1EB7 # LATIN SMALL LETTER A WITH BREVE AND DOT BELOW -+ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x002c, 0x0045, 0, 0}, 0x1e1c }, // U1E1C # LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x002c, 0x0065, 0, 0}, 0x1e1d }, // U1E1D # LATIN SMALL LETTER E WITH CEDILLA AND BREVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0041, 0, 0, 0}, 0x0102 }, // U0102 # LATIN CAPITAL LETTER A WITH BREVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0045, 0, 0, 0}, 0x0114 }, // U0114 # LATIN CAPITAL LETTER E WITH BREVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0047, 0, 0, 0}, 0x011e }, // U011E # LATIN CAPITAL LETTER G WITH BREVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0049, 0, 0, 0}, 0x012c }, // U012C # LATIN CAPITAL LETTER I WITH BREVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x004f, 0, 0, 0}, 0x014e }, // U014E # LATIN CAPITAL LETTER O WITH BREVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0055, 0, 0, 0}, 0x016c }, // U016C # LATIN CAPITAL LETTER U WITH BREVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0061, 0, 0, 0}, 0x0103 }, // U0103 # LATIN SMALL LETTER A WITH BREVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0065, 0, 0, 0}, 0x0115 }, // U0115 # LATIN SMALL LETTER E WITH BREVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0067, 0, 0, 0}, 0x011f }, // U011F # LATIN SMALL LETTER G WITH BREVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0069, 0, 0, 0}, 0x012d }, // U012D # LATIN SMALL LETTER I WITH BREVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x006f, 0, 0, 0}, 0x014f }, // U014F # LATIN SMALL LETTER O WITH BREVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0075, 0, 0, 0}, 0x016d }, // U016D # LATIN SMALL LETTER U WITH BREVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0228, 0, 0, 0}, 0x1e1c }, // U1E1C # LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0229, 0, 0, 0}, 0x1e1d }, // U1E1D # LATIN SMALL LETTER E WITH CEDILLA AND BREVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0391, 0, 0, 0}, 0x1fb8 }, // U1FB8 # GREEK CAPITAL LETTER ALPHA WITH VRACHY -+ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0399, 0, 0, 0}, 0x1fd8 }, // U1FD8 # GREEK CAPITAL LETTER IOTA WITH VRACHY -+ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x03a5, 0, 0, 0}, 0x1fe8 }, // U1FE8 # GREEK CAPITAL LETTER UPSILON WITH VRACHY -+ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x03b1, 0, 0, 0}, 0x1fb0 }, // U1FB0 # GREEK SMALL LETTER ALPHA WITH VRACHY -+ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x03b9, 0, 0, 0}, 0x1fd0 }, // U1FD0 # GREEK SMALL LETTER IOTA WITH VRACHY -+ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x03c5, 0, 0, 0}, 0x1fe0 }, // U1FE0 # GREEK SMALL LETTER UPSILON WITH VRACHY -+ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0410, 0, 0, 0}, 0x04d0 }, // U04D0 # CYRILLIC CAPITAL LETTER A WITH BREVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0415, 0, 0, 0}, 0x04d6 }, // U04D6 # CYRILLIC CAPITAL LETTER IE WITH BREVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0416, 0, 0, 0}, 0x04c1 }, // U04C1 # CYRILLIC CAPITAL LETTER ZHE WITH BREVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0418, 0, 0, 0}, 0x0419 }, // U0419 # CYRILLIC CAPITAL LETTER SHORT I -+ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0423, 0, 0, 0}, 0x040e }, // U040E # CYRILLIC CAPITAL LETTER SHORT U -+ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0430, 0, 0, 0}, 0x04d1 }, // U04D1 # CYRILLIC SMALL LETTER A WITH BREVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0435, 0, 0, 0}, 0x04d7 }, // U04D7 # CYRILLIC SMALL LETTER IE WITH BREVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0436, 0, 0, 0}, 0x04c2 }, // U04C2 # CYRILLIC SMALL LETTER ZHE WITH BREVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0438, 0, 0, 0}, 0x0439 }, // U0439 # CYRILLIC SMALL LETTER SHORT I -+ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0443, 0, 0, 0}, 0x045e }, // U045E # CYRILLIC SMALL LETTER SHORT U -+ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x1ea0, 0, 0, 0}, 0x1eb6 }, // U1EB6 # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW -+ { {UNITIZE(Qt::Key_Multi_key), 0x0062, 0x1ea1, 0, 0, 0}, 0x1eb7 }, // U1EB7 # LATIN SMALL LETTER A WITH BREVE AND DOT BELOW -+ { {UNITIZE(Qt::Key_Multi_key), 0x0062, UNITIZE(Qt::Key_Dead_Cedilla), 0x0045, 0, 0}, 0x1e1c }, // U1E1C # LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0062, UNITIZE(Qt::Key_Dead_Cedilla), 0x0065, 0, 0}, 0x1e1d }, // U1E1D # LATIN SMALL LETTER E WITH CEDILLA AND BREVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0062, UNITIZE(Qt::Key_Dead_Belowdot), 0x0041, 0, 0}, 0x1eb6 }, // U1EB6 # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW -+ { {UNITIZE(Qt::Key_Multi_key), 0x0062, UNITIZE(Qt::Key_Dead_Belowdot), 0x0061, 0, 0}, 0x1eb7 }, // U1EB7 # LATIN SMALL LETTER A WITH BREVE AND DOT BELOW -+ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x0022, 0x0055, 0, 0}, 0x01d9 }, // U01D9 # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON -+ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x0022, 0x0075, 0, 0}, 0x01da }, // U01DA # LATIN SMALL LETTER U WITH DIAERESIS AND CARON -+ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x002f, 0, 0, 0}, 0x00a2 }, // U00A2 # CENT SIGN -+ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x0041, 0, 0, 0}, 0x01cd }, // U01CD # LATIN CAPITAL LETTER A WITH CARON -+ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x0043, 0, 0, 0}, 0x010c }, // U010C # LATIN CAPITAL LETTER C WITH CARON -+ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x0044, 0, 0, 0}, 0x010e }, // U010E # LATIN CAPITAL LETTER D WITH CARON -+ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x0045, 0, 0, 0}, 0x011a }, // U011A # LATIN CAPITAL LETTER E WITH CARON -+ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x0047, 0, 0, 0}, 0x01e6 }, // U01E6 # LATIN CAPITAL LETTER G WITH CARON -+ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x0048, 0, 0, 0}, 0x021e }, // U021E # LATIN CAPITAL LETTER H WITH CARON -+ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x0049, 0, 0, 0}, 0x01cf }, // U01CF # LATIN CAPITAL LETTER I WITH CARON -+ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x004b, 0, 0, 0}, 0x01e8 }, // U01E8 # LATIN CAPITAL LETTER K WITH CARON -+ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x004c, 0, 0, 0}, 0x013d }, // U013D # LATIN CAPITAL LETTER L WITH CARON -+ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x004e, 0, 0, 0}, 0x0147 }, // U0147 # LATIN CAPITAL LETTER N WITH CARON -+ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x004f, 0, 0, 0}, 0x01d1 }, // U01D1 # LATIN CAPITAL LETTER O WITH CARON -+ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x0052, 0, 0, 0}, 0x0158 }, // U0158 # LATIN CAPITAL LETTER R WITH CARON -+ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x0053, 0, 0, 0}, 0x0160 }, // U0160 # LATIN CAPITAL LETTER S WITH CARON -+ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x0054, 0, 0, 0}, 0x0164 }, // U0164 # LATIN CAPITAL LETTER T WITH CARON -+ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x0055, 0, 0, 0}, 0x01d3 }, // U01D3 # LATIN CAPITAL LETTER U WITH CARON -+ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x005a, 0, 0, 0}, 0x017d }, // U017D # LATIN CAPITAL LETTER Z WITH CARON -+ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x0061, 0, 0, 0}, 0x01ce }, // U01CE # LATIN SMALL LETTER A WITH CARON -+ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x0063, 0, 0, 0}, 0x010d }, // U010D # LATIN SMALL LETTER C WITH CARON -+ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x0064, 0, 0, 0}, 0x010f }, // U010F # LATIN SMALL LETTER D WITH CARON -+ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x0065, 0, 0, 0}, 0x011b }, // U011B # LATIN SMALL LETTER E WITH CARON -+ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x0067, 0, 0, 0}, 0x01e7 }, // U01E7 # LATIN SMALL LETTER G WITH CARON -+ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x0068, 0, 0, 0}, 0x021f }, // U021F # LATIN SMALL LETTER H WITH CARON -+ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x0069, 0, 0, 0}, 0x01d0 }, // U01D0 # LATIN SMALL LETTER I WITH CARON -+ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x006a, 0, 0, 0}, 0x01f0 }, // U01F0 # LATIN SMALL LETTER J WITH CARON -+ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x006b, 0, 0, 0}, 0x01e9 }, // U01E9 # LATIN SMALL LETTER K WITH CARON -+ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x006c, 0, 0, 0}, 0x013e }, // U013E # LATIN SMALL LETTER L WITH CARON -+ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x006e, 0, 0, 0}, 0x0148 }, // U0148 # LATIN SMALL LETTER N WITH CARON -+ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x006f, 0, 0, 0}, 0x01d2 }, // U01D2 # LATIN SMALL LETTER O WITH CARON -+ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x0072, 0, 0, 0}, 0x0159 }, // U0159 # LATIN SMALL LETTER R WITH CARON -+ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x0073, 0, 0, 0}, 0x0161 }, // U0161 # LATIN SMALL LETTER S WITH CARON -+ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x0074, 0, 0, 0}, 0x0165 }, // U0165 # LATIN SMALL LETTER T WITH CARON -+ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x0075, 0, 0, 0}, 0x01d4 }, // U01D4 # LATIN SMALL LETTER U WITH CARON -+ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x007a, 0, 0, 0}, 0x017e }, // U017E # LATIN SMALL LETTER Z WITH CARON -+ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x007c, 0, 0, 0}, 0x00a2 }, // U00A2 # CENT SIGN -+ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x00dc, 0, 0, 0}, 0x01d9 }, // U01D9 # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON -+ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x00fc, 0, 0, 0}, 0x01da }, // U01DA # LATIN SMALL LETTER U WITH DIAERESIS AND CARON -+ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x01b7, 0, 0, 0}, 0x01ee }, // U01EE # LATIN CAPITAL LETTER EZH WITH CARON -+ { {UNITIZE(Qt::Key_Multi_key), 0x0063, 0x0292, 0, 0, 0}, 0x01ef }, // U01EF # LATIN SMALL LETTER EZH WITH CARON -+ { {UNITIZE(Qt::Key_Multi_key), 0x0063, UNITIZE(Qt::Key_Dead_Diaeresis), 0x0055, 0, 0}, 0x01d9 }, // U01D9 # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON -+ { {UNITIZE(Qt::Key_Multi_key), 0x0063, UNITIZE(Qt::Key_Dead_Diaeresis), 0x0075, 0, 0}, 0x01da }, // U01DA # LATIN SMALL LETTER U WITH DIAERESIS AND CARON -+ { {UNITIZE(Qt::Key_Multi_key), 0x0064, 0x002d, 0, 0, 0}, 0x20ab }, // U20ab # DONG SIGN -+ { {UNITIZE(Qt::Key_Multi_key), 0x0064, 0x0068, 0, 0, 0}, 0x00f0 }, // U00F0 # LATIN SMALL LETTER ETH -+ { {UNITIZE(Qt::Key_Multi_key), 0x0065, 0x0065, 0, 0, 0}, 0x0259 }, // U0259 # LATIN SMALL LETTER SCHWA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0066, 0x0053, 0, 0, 0}, 0x017f }, // U017f # LONG S -+ { {UNITIZE(Qt::Key_Multi_key), 0x0066, 0x0073, 0, 0, 0}, 0x017f }, // U017f # LONG S -+ { {UNITIZE(Qt::Key_Multi_key), 0x0069, 0x002e, 0, 0, 0}, 0x0131 }, // U0131 # LATIN SMALL LETTER DOTLESS I -+ { {UNITIZE(Qt::Key_Multi_key), 0x006b, 0x006b, 0, 0, 0}, 0x0138 }, // U0138 # LATIN SMALL LETTER KRA -+ { {UNITIZE(Qt::Key_Multi_key), 0x006c, 0x0076, 0, 0, 0}, 0x007c }, // bar -+ { {UNITIZE(Qt::Key_Multi_key), 0x006d, 0x002f, 0, 0, 0}, 0x20a5 }, // U20a5 # MILL SIGN -+ { {UNITIZE(Qt::Key_Multi_key), 0x006d, 0x0075, 0, 0, 0}, 0x00b5 }, // U00B5 # MICRO SIGN -+ { {UNITIZE(Qt::Key_Multi_key), 0x006e, 0x0067, 0, 0, 0}, 0x014b }, // U014B # LATIN SMALL LETTER ENG -+ { {UNITIZE(Qt::Key_Multi_key), 0x006f, 0x0027, 0x0041, 0, 0}, 0x01fa }, // U01FA # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x006f, 0x0027, 0x0061, 0, 0}, 0x01fb }, // U01FB # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x006f, 0x0041, 0, 0, 0}, 0x00c5 }, // U00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x006f, 0x0043, 0, 0, 0}, 0x00a9 }, // copyright -+ { {UNITIZE(Qt::Key_Multi_key), 0x006f, 0x0052, 0, 0, 0}, 0x00ae }, // registered -+ { {UNITIZE(Qt::Key_Multi_key), 0x006f, 0x0055, 0, 0, 0}, 0x016e }, // U016E # LATIN CAPITAL LETTER U WITH RING ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x006f, 0x0061, 0, 0, 0}, 0x00e5 }, // U00E5 # LATIN SMALL LETTER A WITH RING ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x006f, 0x0063, 0, 0, 0}, 0x00a9 }, // copyright -+ { {UNITIZE(Qt::Key_Multi_key), 0x006f, 0x0065, 0, 0, 0}, 0x0153 }, // oe -+ { {UNITIZE(Qt::Key_Multi_key), 0x006f, 0x006f, 0, 0, 0}, 0x00b0 }, // degree # ^0 already taken -+ { {UNITIZE(Qt::Key_Multi_key), 0x006f, 0x0072, 0, 0, 0}, 0x00ae }, // registered -+ { {UNITIZE(Qt::Key_Multi_key), 0x006f, 0x0073, 0, 0, 0}, 0x00a7 }, // section # SECTION SIGN -+ { {UNITIZE(Qt::Key_Multi_key), 0x006f, 0x0075, 0, 0, 0}, 0x016f }, // U016F # LATIN SMALL LETTER U WITH RING ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x006f, 0x0077, 0, 0, 0}, 0x1e98 }, // U1E98 # LATIN SMALL LETTER W WITH RING ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x006f, 0x0078, 0, 0, 0}, 0x00a4 }, // currency -+ { {UNITIZE(Qt::Key_Multi_key), 0x006f, 0x0079, 0, 0, 0}, 0x1e99 }, // U1E99 # LATIN SMALL LETTER Y WITH RING ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0070, 0x0021, 0, 0, 0}, 0x00b6 }, // paragraph -+ { {UNITIZE(Qt::Key_Multi_key), 0x0073, 0x006f, 0, 0, 0}, 0x00a7 }, // section # SECTION SIGN -+ { {UNITIZE(Qt::Key_Multi_key), 0x0073, 0x0073, 0, 0, 0}, 0x00df }, // ssharp -+ { {UNITIZE(Qt::Key_Multi_key), 0x0074, 0x0068, 0, 0, 0}, 0x00fe }, // U00FE # LATIN SMALL LETTER THORN -+ { {UNITIZE(Qt::Key_Multi_key), 0x0076, 0x006c, 0, 0, 0}, 0x007c }, // bar -+ { {UNITIZE(Qt::Key_Multi_key), 0x0078, 0x006f, 0, 0, 0}, 0x00a4 }, // currency -+ { {UNITIZE(Qt::Key_Multi_key), 0x0078, 0x0078, 0, 0, 0}, 0x00d7 }, // U00D7 # MULTIPLICATION SIGN -+ { {UNITIZE(Qt::Key_Multi_key), 0x007c, 0x0043, 0, 0, 0}, 0x00a2 }, // U00A2 # CENT SIGN -+ { {UNITIZE(Qt::Key_Multi_key), 0x007c, 0x0063, 0, 0, 0}, 0x00a2 }, // U00A2 # CENT SIGN -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0000, 0, 0, 0}, 0x1eee }, // U1EEE # LATIN CAPITAL LETTER U WITH HORN AND TILDE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0000, 0, 0, 0}, 0x1ee1 }, // U1EE1 # LATIN SMALL LETTER O WITH HORN AND TILDE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0000, 0, 0, 0}, 0x1eef }, // U1EEF # LATIN SMALL LETTER U WITH HORN AND TILDE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0000, 0, 0, 0}, 0x1ee0 }, // U1EE0 # LATIN CAPITAL LETTER O WITH HORN AND TILDE -+ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0020, 0, 0, 0}, 0x007e }, // asciitilde -+ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0022, 0x03b9, 0, 0}, 0x1fd7 }, // U1FD7 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0022, 0x03c5, 0, 0}, 0x1fe7 }, // U1FE7 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0028, 0x0391, 0, 0}, 0x1f0f }, // U1F0F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0028, 0x0397, 0, 0}, 0x1f2f }, // U1F2F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0028, 0x0399, 0, 0}, 0x1f3f }, // U1F3F # GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0028, 0x03a5, 0, 0}, 0x1f5f }, // U1F5F # GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0028, 0x03a9, 0, 0}, 0x1f6f }, // U1F6F # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0028, 0x03b1, 0, 0}, 0x1f07 }, // U1F07 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0028, 0x03b7, 0, 0}, 0x1f27 }, // U1F27 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0028, 0x03b9, 0, 0}, 0x1f37 }, // U1F37 # GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0028, 0x03c5, 0, 0}, 0x1f57 }, // U1F57 # GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0028, 0x03c9, 0, 0}, 0x1f67 }, // U1F67 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0029, 0x0391, 0, 0}, 0x1f0e }, // U1F0E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0029, 0x0397, 0, 0}, 0x1f2e }, // U1F2E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0029, 0x0399, 0, 0}, 0x1f3e }, // U1F3E # GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0029, 0x03a9, 0, 0}, 0x1f6e }, // U1F6E # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0029, 0x03b1, 0, 0}, 0x1f06 }, // U1F06 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0029, 0x03b7, 0, 0}, 0x1f26 }, // U1F26 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0029, 0x03b9, 0, 0}, 0x1f36 }, // U1F36 # GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0029, 0x03c5, 0, 0}, 0x1f56 }, // U1F56 # GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0029, 0x03c9, 0, 0}, 0x1f66 }, // U1F66 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x002b, 0x004f, 0, 0}, 0x1ee0 }, // U1EE0 # LATIN CAPITAL LETTER O WITH HORN AND TILDE -+ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x002b, 0x0055, 0, 0}, 0x1eee }, // U1EEE # LATIN CAPITAL LETTER U WITH HORN AND TILDE -+ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x002b, 0x006f, 0, 0}, 0x1ee1 }, // U1EE1 # LATIN SMALL LETTER O WITH HORN AND TILDE -+ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x002b, 0x0075, 0, 0}, 0x1eef }, // U1EEF # LATIN SMALL LETTER U WITH HORN AND TILDE -+ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0041, 0, 0, 0}, 0x00c3 }, // U00C3 # LATIN CAPITAL LETTER A WITH TILDE -+ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0045, 0, 0, 0}, 0x1ebc }, // U1EBC # LATIN CAPITAL LETTER E WITH TILDE -+ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0049, 0, 0, 0}, 0x0128 }, // U0128 # LATIN CAPITAL LETTER I WITH TILDE -+ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x004e, 0, 0, 0}, 0x00d1 }, // U00D1 # LATIN CAPITAL LETTER N WITH TILDE -+ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x004f, 0, 0, 0}, 0x00d5 }, // U00D5 # LATIN CAPITAL LETTER O WITH TILDE -+ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0055, 0, 0, 0}, 0x0168 }, // U0168 # LATIN CAPITAL LETTER U WITH TILDE -+ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0055, 0x0041, 0, 0}, 0x1eb4 }, // U1EB4 # LATIN CAPITAL LETTER A WITH BREVE AND TILDE -+ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0055, 0x0061, 0, 0}, 0x1eb5 }, // U1EB5 # LATIN SMALL LETTER A WITH BREVE AND TILDE -+ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0056, 0, 0, 0}, 0x1e7c }, // U1E7C # LATIN CAPITAL LETTER V WITH TILDE -+ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0059, 0, 0, 0}, 0x1ef8 }, // U1EF8 # LATIN CAPITAL LETTER Y WITH TILDE -+ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x005e, 0x0041, 0, 0}, 0x1eaa }, // U1EAA # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE -+ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x005e, 0x0045, 0, 0}, 0x1ec4 }, // U1EC4 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE -+ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x005e, 0x004f, 0, 0}, 0x1ed6 }, // U1ED6 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE -+ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x005e, 0x0061, 0, 0}, 0x1eab }, // U1EAB # LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE -+ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x005e, 0x0065, 0, 0}, 0x1ec5 }, // U1EC5 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE -+ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x005e, 0x006f, 0, 0}, 0x1ed7 }, // U1ED7 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE -+ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0061, 0, 0, 0}, 0x00e3 }, // U00E3 # LATIN SMALL LETTER A WITH TILDE -+ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0062, 0x0041, 0, 0}, 0x1eb4 }, // U1EB4 # LATIN CAPITAL LETTER A WITH BREVE AND TILDE -+ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0062, 0x0061, 0, 0}, 0x1eb5 }, // U1EB5 # LATIN SMALL LETTER A WITH BREVE AND TILDE -+ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0065, 0, 0, 0}, 0x1ebd }, // U1EBD # LATIN SMALL LETTER E WITH TILDE -+ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0069, 0, 0, 0}, 0x0129 }, // U0129 # LATIN SMALL LETTER I WITH TILDE -+ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x006e, 0, 0, 0}, 0x00f1 }, // U00F1 # LATIN SMALL LETTER N WITH TILDE -+ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x006f, 0, 0, 0}, 0x00f5 }, // U00F5 # LATIN SMALL LETTER O WITH TILDE -+ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0075, 0, 0, 0}, 0x0169 }, // U0169 # LATIN SMALL LETTER U WITH TILDE -+ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0076, 0, 0, 0}, 0x1e7d }, // U1E7D # LATIN SMALL LETTER V WITH TILDE -+ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0079, 0, 0, 0}, 0x1ef9 }, // U1EF9 # LATIN SMALL LETTER Y WITH TILDE -+ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x00c2, 0, 0, 0}, 0x1eaa }, // U1EAA # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE -+ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x00ca, 0, 0, 0}, 0x1ec4 }, // U1EC4 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE -+ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x00d4, 0, 0, 0}, 0x1ed6 }, // U1ED6 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE -+ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x00e2, 0, 0, 0}, 0x1eab }, // U1EAB # LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE -+ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x00ea, 0, 0, 0}, 0x1ec5 }, // U1EC5 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE -+ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x00f4, 0, 0, 0}, 0x1ed7 }, // U1ED7 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE -+ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0102, 0, 0, 0}, 0x1eb4 }, // U1EB4 # LATIN CAPITAL LETTER A WITH BREVE AND TILDE -+ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0103, 0, 0, 0}, 0x1eb5 }, // U1EB5 # LATIN SMALL LETTER A WITH BREVE AND TILDE -+ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0313, 0x0391, 0, 0}, 0x1f0e }, // U1F0E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0313, 0x0397, 0, 0}, 0x1f2e }, // U1F2E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0313, 0x0399, 0, 0}, 0x1f3e }, // U1F3E # GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0313, 0x03a9, 0, 0}, 0x1f6e }, // U1F6E # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0313, 0x03b1, 0, 0}, 0x1f06 }, // U1F06 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0313, 0x03b7, 0, 0}, 0x1f26 }, // U1F26 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0313, 0x03b9, 0, 0}, 0x1f36 }, // U1F36 # GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0313, 0x03c5, 0, 0}, 0x1f56 }, // U1F56 # GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0313, 0x03c9, 0, 0}, 0x1f66 }, // U1F66 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0314, 0x0391, 0, 0}, 0x1f0f }, // U1F0F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0314, 0x0397, 0, 0}, 0x1f2f }, // U1F2F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0314, 0x0399, 0, 0}, 0x1f3f }, // U1F3F # GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0314, 0x03a5, 0, 0}, 0x1f5f }, // U1F5F # GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0314, 0x03a9, 0, 0}, 0x1f6f }, // U1F6F # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0314, 0x03b1, 0, 0}, 0x1f07 }, // U1F07 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0314, 0x03b7, 0, 0}, 0x1f27 }, // U1F27 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0314, 0x03b9, 0, 0}, 0x1f37 }, // U1F37 # GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0314, 0x03c5, 0, 0}, 0x1f57 }, // U1F57 # GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0314, 0x03c9, 0, 0}, 0x1f67 }, // U1F67 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x03b1, 0, 0, 0}, 0x1fb6 }, // U1FB6 # GREEK SMALL LETTER ALPHA WITH PERISPOMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x03b7, 0, 0, 0}, 0x1fc6 }, // U1FC6 # GREEK SMALL LETTER ETA WITH PERISPOMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x03b9, 0, 0, 0}, 0x1fd6 }, // U1FD6 # GREEK SMALL LETTER IOTA WITH PERISPOMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x03c5, 0, 0, 0}, 0x1fe6 }, // U1FE6 # GREEK SMALL LETTER UPSILON WITH PERISPOMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x03c9, 0, 0, 0}, 0x1ff6 }, // U1FF6 # GREEK SMALL LETTER OMEGA WITH PERISPOMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x03ca, 0, 0, 0}, 0x1fd7 }, // U1FD7 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x03cb, 0, 0, 0}, 0x1fe7 }, // U1FE7 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f00, 0, 0, 0}, 0x1f06 }, // U1F06 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f01, 0, 0, 0}, 0x1f07 }, // U1F07 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f08, 0, 0, 0}, 0x1f0e }, // U1F0E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f09, 0, 0, 0}, 0x1f0f }, // U1F0F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f20, 0, 0, 0}, 0x1f26 }, // U1F26 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f21, 0, 0, 0}, 0x1f27 }, // U1F27 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f28, 0, 0, 0}, 0x1f2e }, // U1F2E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f29, 0, 0, 0}, 0x1f2f }, // U1F2F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f30, 0, 0, 0}, 0x1f36 }, // U1F36 # GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f31, 0, 0, 0}, 0x1f37 }, // U1F37 # GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f38, 0, 0, 0}, 0x1f3e }, // U1F3E # GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f39, 0, 0, 0}, 0x1f3f }, // U1F3F # GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f50, 0, 0, 0}, 0x1f56 }, // U1F56 # GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f51, 0, 0, 0}, 0x1f57 }, // U1F57 # GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f59, 0, 0, 0}, 0x1f5f }, // U1F5F # GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f60, 0, 0, 0}, 0x1f66 }, // U1F66 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f61, 0, 0, 0}, 0x1f67 }, // U1F67 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f68, 0, 0, 0}, 0x1f6e }, // U1F6E # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f69, 0, 0, 0}, 0x1f6f }, // U1F6F # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x007e, UNITIZE(Qt::Key_Dead_Circumflex), 0x0041, 0, 0}, 0x1eaa }, // U1EAA # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE -+ { {UNITIZE(Qt::Key_Multi_key), 0x007e, UNITIZE(Qt::Key_Dead_Circumflex), 0x0045, 0, 0}, 0x1ec4 }, // U1EC4 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE -+ { {UNITIZE(Qt::Key_Multi_key), 0x007e, UNITIZE(Qt::Key_Dead_Circumflex), 0x004f, 0, 0}, 0x1ed6 }, // U1ED6 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE -+ { {UNITIZE(Qt::Key_Multi_key), 0x007e, UNITIZE(Qt::Key_Dead_Circumflex), 0x0061, 0, 0}, 0x1eab }, // U1EAB # LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE -+ { {UNITIZE(Qt::Key_Multi_key), 0x007e, UNITIZE(Qt::Key_Dead_Circumflex), 0x0065, 0, 0}, 0x1ec5 }, // U1EC5 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE -+ { {UNITIZE(Qt::Key_Multi_key), 0x007e, UNITIZE(Qt::Key_Dead_Circumflex), 0x006f, 0, 0}, 0x1ed7 }, // U1ED7 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE -+ { {UNITIZE(Qt::Key_Multi_key), 0x007e, UNITIZE(Qt::Key_Dead_Breve), 0x0041, 0, 0}, 0x1eb4 }, // U1EB4 # LATIN CAPITAL LETTER A WITH BREVE AND TILDE -+ { {UNITIZE(Qt::Key_Multi_key), 0x007e, UNITIZE(Qt::Key_Dead_Breve), 0x0061, 0, 0}, 0x1eb5 }, // U1EB5 # LATIN SMALL LETTER A WITH BREVE AND TILDE -+ { {UNITIZE(Qt::Key_Multi_key), 0x007e, UNITIZE(Qt::Key_Dead_Diaeresis), 0x03b9, 0, 0}, 0x1fd7 }, // U1FD7 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x007e, UNITIZE(Qt::Key_Dead_Diaeresis), 0x03c5, 0, 0}, 0x1fe7 }, // U1FE7 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x007e, UNITIZE(Qt::Key_Dead_Horn), 0x004f, 0, 0}, 0x1ee0 }, // U1EE0 # LATIN CAPITAL LETTER O WITH HORN AND TILDE -+ { {UNITIZE(Qt::Key_Multi_key), 0x007e, UNITIZE(Qt::Key_Dead_Horn), 0x0055, 0, 0}, 0x1eee }, // U1EEE # LATIN CAPITAL LETTER U WITH HORN AND TILDE -+ { {UNITIZE(Qt::Key_Multi_key), 0x007e, UNITIZE(Qt::Key_Dead_Horn), 0x006f, 0, 0}, 0x1ee1 }, // U1EE1 # LATIN SMALL LETTER O WITH HORN AND TILDE -+ { {UNITIZE(Qt::Key_Multi_key), 0x007e, UNITIZE(Qt::Key_Dead_Horn), 0x0075, 0, 0}, 0x1eef }, // U1EEF # LATIN SMALL LETTER U WITH HORN AND TILDE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x00a8, 0x0000, 0, 0, 0}, 0x0385 }, // U0385 # GREEK DIALYTIKA TONOS -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x00a8, 0x0000, 0, 0, 0}, 0x1fed }, // U1FED # GREEK DIALYTIKA AND VARIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x00a8, 0x0027, 0, 0, 0}, 0x0385 }, // U0385 # GREEK DIALYTIKA TONOS -+ { {UNITIZE(Qt::Key_Multi_key), 0x00a8, 0x0060, 0, 0, 0}, 0x1fed }, // U1FED # GREEK DIALYTIKA AND VARIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x00a8, 0x007e, 0, 0, 0}, 0x1fc1 }, // U1FC1 # GREEK DIALYTIKA AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x00a8, 0x00b4, 0, 0, 0}, 0x0385 }, // U0385 # GREEK DIALYTIKA TONOS -+ { {UNITIZE(Qt::Key_Multi_key), 0x00a8, 0x0342, 0, 0, 0}, 0x1fc1 }, // U1FC1 # GREEK DIALYTIKA AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x00a8, UNITIZE(Qt::Key_Dead_Grave), 0, 0, 0}, 0x1fed }, // U1FED # GREEK DIALYTIKA AND VARIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x00a8, UNITIZE(Qt::Key_Dead_Acute), 0, 0, 0}, 0x0385 }, // U0385 # GREEK DIALYTIKA TONOS -+ { {UNITIZE(Qt::Key_Multi_key), 0x00a8, UNITIZE(Qt::Key_Dead_Tilde), 0, 0, 0}, 0x1fc1 }, // U1FC1 # GREEK DIALYTIKA AND PERISPOMENI -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0000, 0x004c, 0, 0}, 0x1e38 }, // U1E38 # LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0000, 0x004f, 0, 0}, 0x022c }, // U022C # LATIN CAPITAL LETTER O WITH TILDE AND MACRON -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0000, 0x0052, 0, 0}, 0x1e5c }, // U1E5C # LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0000, 0x006c, 0, 0}, 0x1e39 }, // U1E39 # LATIN SMALL LETTER L WITH DOT BELOW AND MACRON -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0000, 0x006f, 0, 0}, 0x022d }, // U022D # LATIN SMALL LETTER O WITH TILDE AND MACRON -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0000, 0x0072, 0, 0}, 0x1e5d }, // U1E5D # LATIN SMALL LETTER R WITH DOT BELOW AND MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0021, 0x004c, 0, 0}, 0x1e38 }, // U1E38 # LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0021, 0x0052, 0, 0}, 0x1e5c }, // U1E5C # LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0021, 0x006c, 0, 0}, 0x1e39 }, // U1E39 # LATIN SMALL LETTER L WITH DOT BELOW AND MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0021, 0x0072, 0, 0}, 0x1e5d }, // U1E5D # LATIN SMALL LETTER R WITH DOT BELOW AND MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0022, 0x0041, 0, 0}, 0x01de }, // U01DE # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0022, 0x004f, 0, 0}, 0x022a }, // U022A # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0022, 0x0055, 0, 0}, 0x01d5 }, // U01D5 # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0022, 0x0061, 0, 0}, 0x01df }, // U01DF # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0022, 0x006f, 0, 0}, 0x022b }, // U022B # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0022, 0x0075, 0, 0}, 0x01d6 }, // U01D6 # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x002e, 0x0041, 0, 0}, 0x01e0 }, // U01E0 # LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x002e, 0x004f, 0, 0}, 0x0230 }, // U0230 # LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x002e, 0x0061, 0, 0}, 0x01e1 }, // U01E1 # LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x002e, 0x006f, 0, 0}, 0x0231 }, // U0231 # LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x003b, 0x004f, 0, 0}, 0x01ec }, // U01EC # LATIN CAPITAL LETTER O WITH OGONEK AND MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x003b, 0x006f, 0, 0}, 0x01ed }, // U01ED # LATIN SMALL LETTER O WITH OGONEK AND MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0041, 0, 0, 0}, 0x0100 }, // U0100 # LATIN CAPITAL LETTER A WITH MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0045, 0, 0, 0}, 0x0112 }, // U0112 # LATIN CAPITAL LETTER E WITH MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0047, 0, 0, 0}, 0x1e20 }, // U1E20 # LATIN CAPITAL LETTER G WITH MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0049, 0, 0, 0}, 0x012a }, // U012A # LATIN CAPITAL LETTER I WITH MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x004f, 0, 0, 0}, 0x014c }, // U014C # LATIN CAPITAL LETTER O WITH MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0055, 0, 0, 0}, 0x016a }, // U016A # LATIN CAPITAL LETTER U WITH MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0059, 0, 0, 0}, 0x0232 }, // U0232 # LATIN CAPITAL LETTER Y WITH MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0061, 0, 0, 0}, 0x0101 }, // U0101 # LATIN SMALL LETTER A WITH MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0065, 0, 0, 0}, 0x0113 }, // U0113 # LATIN SMALL LETTER E WITH MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0067, 0, 0, 0}, 0x1e21 }, // U1E21 # LATIN SMALL LETTER G WITH MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0069, 0, 0, 0}, 0x012b }, // U012B # LATIN SMALL LETTER I WITH MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x006f, 0, 0, 0}, 0x014d }, // U014D # LATIN SMALL LETTER O WITH MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0075, 0, 0, 0}, 0x016b }, // U016B # LATIN SMALL LETTER U WITH MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0079, 0, 0, 0}, 0x0233 }, // U0233 # LATIN SMALL LETTER Y WITH MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x007e, 0x004f, 0, 0}, 0x022c }, // U022C # LATIN CAPITAL LETTER O WITH TILDE AND MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x007e, 0x006f, 0, 0}, 0x022d }, // U022D # LATIN SMALL LETTER O WITH TILDE AND MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x00c4, 0, 0, 0}, 0x01de }, // U01DE # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x00c6, 0, 0, 0}, 0x01e2 }, // U01E2 # LATIN CAPITAL LETTER AE WITH MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x00d5, 0, 0, 0}, 0x022c }, // U022C # LATIN CAPITAL LETTER O WITH TILDE AND MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x00d6, 0, 0, 0}, 0x022a }, // U022A # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x00dc, 0, 0, 0}, 0x01d5 }, // U01D5 # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x00e4, 0, 0, 0}, 0x01df }, // U01DF # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x00e6, 0, 0, 0}, 0x01e3 }, // U01E3 # LATIN SMALL LETTER AE WITH MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x00f5, 0, 0, 0}, 0x022d }, // U022D # LATIN SMALL LETTER O WITH TILDE AND MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x00f6, 0, 0, 0}, 0x022b }, // U022B # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x00fc, 0, 0, 0}, 0x01d6 }, // U01D6 # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x01ea, 0, 0, 0}, 0x01ec }, // U01EC # LATIN CAPITAL LETTER O WITH OGONEK AND MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x01eb, 0, 0, 0}, 0x01ed }, // U01ED # LATIN SMALL LETTER O WITH OGONEK AND MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0226, 0, 0, 0}, 0x01e0 }, // U01E0 # LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0227, 0, 0, 0}, 0x01e1 }, // U01E1 # LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x022e, 0, 0, 0}, 0x0230 }, // U0230 # LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x022f, 0, 0, 0}, 0x0231 }, // U0231 # LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0391, 0, 0, 0}, 0x1fb9 }, // U1FB9 # GREEK CAPITAL LETTER ALPHA WITH MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0399, 0, 0, 0}, 0x1fd9 }, // U1FD9 # GREEK CAPITAL LETTER IOTA WITH MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x03a5, 0, 0, 0}, 0x1fe9 }, // U1FE9 # GREEK CAPITAL LETTER UPSILON WITH MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x03b1, 0, 0, 0}, 0x1fb1 }, // U1FB1 # GREEK SMALL LETTER ALPHA WITH MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x03b9, 0, 0, 0}, 0x1fd1 }, // U1FD1 # GREEK SMALL LETTER IOTA WITH MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x03c5, 0, 0, 0}, 0x1fe1 }, // U1FE1 # GREEK SMALL LETTER UPSILON WITH MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0418, 0, 0, 0}, 0x04e2 }, // U04E2 # CYRILLIC CAPITAL LETTER I WITH MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0423, 0, 0, 0}, 0x04ee }, // U04EE # CYRILLIC CAPITAL LETTER U WITH MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0438, 0, 0, 0}, 0x04e3 }, // U04E3 # CYRILLIC SMALL LETTER I WITH MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0443, 0, 0, 0}, 0x04ef }, // U04EF # CYRILLIC SMALL LETTER U WITH MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x1e36, 0, 0, 0}, 0x1e38 }, // U1E38 # LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x1e37, 0, 0, 0}, 0x1e39 }, // U1E39 # LATIN SMALL LETTER L WITH DOT BELOW AND MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x1e5a, 0, 0, 0}, 0x1e5c }, // U1E5C # LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x00af, 0x1e5b, 0, 0, 0}, 0x1e5d }, // U1E5D # LATIN SMALL LETTER R WITH DOT BELOW AND MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x00af, UNITIZE(Qt::Key_Dead_Tilde), 0x004f, 0, 0}, 0x022c }, // U022C # LATIN CAPITAL LETTER O WITH TILDE AND MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x00af, UNITIZE(Qt::Key_Dead_Tilde), 0x006f, 0, 0}, 0x022d }, // U022D # LATIN SMALL LETTER O WITH TILDE AND MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x00af, UNITIZE(Qt::Key_Dead_Abovedot), 0x0041, 0, 0}, 0x01e0 }, // U01E0 # LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x00af, UNITIZE(Qt::Key_Dead_Abovedot), 0x004f, 0, 0}, 0x0230 }, // U0230 # LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x00af, UNITIZE(Qt::Key_Dead_Abovedot), 0x0061, 0, 0}, 0x01e1 }, // U01E1 # LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x00af, UNITIZE(Qt::Key_Dead_Abovedot), 0x006f, 0, 0}, 0x0231 }, // U0231 # LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x00af, UNITIZE(Qt::Key_Dead_Diaeresis), 0x0041, 0, 0}, 0x01de }, // U01DE # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x00af, UNITIZE(Qt::Key_Dead_Diaeresis), 0x004f, 0, 0}, 0x022a }, // U022A # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x00af, UNITIZE(Qt::Key_Dead_Diaeresis), 0x0055, 0, 0}, 0x01d5 }, // U01D5 # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x00af, UNITIZE(Qt::Key_Dead_Diaeresis), 0x0061, 0, 0}, 0x01df }, // U01DF # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x00af, UNITIZE(Qt::Key_Dead_Diaeresis), 0x006f, 0, 0}, 0x022b }, // U022B # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x00af, UNITIZE(Qt::Key_Dead_Diaeresis), 0x0075, 0, 0}, 0x01d6 }, // U01D6 # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x00af, UNITIZE(Qt::Key_Dead_Ogonek), 0x004f, 0, 0}, 0x01ec }, // U01EC # LATIN CAPITAL LETTER O WITH OGONEK AND MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x00af, UNITIZE(Qt::Key_Dead_Ogonek), 0x006f, 0, 0}, 0x01ed }, // U01ED # LATIN SMALL LETTER O WITH OGONEK AND MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x00af, UNITIZE(Qt::Key_Dead_Belowdot), 0x004c, 0, 0}, 0x1e38 }, // U1E38 # LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x00af, UNITIZE(Qt::Key_Dead_Belowdot), 0x0052, 0, 0}, 0x1e5c }, // U1E5C # LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x00af, UNITIZE(Qt::Key_Dead_Belowdot), 0x006c, 0, 0}, 0x1e39 }, // U1E39 # LATIN SMALL LETTER L WITH DOT BELOW AND MACRON -+ { {UNITIZE(Qt::Key_Multi_key), 0x00af, UNITIZE(Qt::Key_Dead_Belowdot), 0x0072, 0, 0}, 0x1e5d }, // U1E5D # LATIN SMALL LETTER R WITH DOT BELOW AND MACRON -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0000, 0, 0, 0}, 0x1edb }, // U1EDB # LATIN SMALL LETTER O WITH HORN AND ACUTE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0000, 0, 0, 0}, 0x1ee9 }, // U1EE9 # LATIN SMALL LETTER U WITH HORN AND ACUTE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0000, 0, 0, 0}, 0x1ee8 }, // U1EE8 # LATIN CAPITAL LETTER U WITH HORN AND ACUTE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0000, 0, 0, 0}, 0x1eda }, // U1EDA # LATIN CAPITAL LETTER O WITH HORN AND ACUTE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0000, 0x004f, 0, 0}, 0x01fe }, // U01FE # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0000, 0x004f, 0, 0}, 0x1e4c }, // U1E4C # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0000, 0x0055, 0, 0}, 0x1e78 }, // U1E78 # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0000, 0x006f, 0, 0}, 0x01ff }, // U01FF # LATIN SMALL LETTER O WITH STROKE AND ACUTE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0000, 0x006f, 0, 0}, 0x1e4d }, // U1E4D # LATIN SMALL LETTER O WITH TILDE AND ACUTE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0000, 0x0075, 0, 0}, 0x1e79 }, // U1E79 # LATIN SMALL LETTER U WITH TILDE AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0022, 0x0049, 0, 0}, 0x1e2e }, // U1E2E # LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0022, 0x0055, 0, 0}, 0x01d7 }, // U01D7 # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0022, 0x0069, 0, 0}, 0x1e2f }, // U1E2F # LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0022, 0x0075, 0, 0}, 0x01d8 }, // U01D8 # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0022, 0x03b9, 0, 0}, 0x0390 }, // U0390 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0022, 0x03c5, 0, 0}, 0x03b0 }, // U03B0 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0028, 0x0391, 0, 0}, 0x1f0d }, // U1F0D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0028, 0x0395, 0, 0}, 0x1f1d }, // U1F1D # GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0028, 0x0397, 0, 0}, 0x1f2d }, // U1F2D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0028, 0x0399, 0, 0}, 0x1f3d }, // U1F3D # GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0028, 0x039f, 0, 0}, 0x1f4d }, // U1F4D # GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0028, 0x03a5, 0, 0}, 0x1f5d }, // U1F5D # GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0028, 0x03a9, 0, 0}, 0x1f6d }, // U1F6D # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0028, 0x03b1, 0, 0}, 0x1f05 }, // U1F05 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0028, 0x03b5, 0, 0}, 0x1f15 }, // U1F15 # GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0028, 0x03b7, 0, 0}, 0x1f25 }, // U1F25 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0028, 0x03b9, 0, 0}, 0x1f35 }, // U1F35 # GREEK SMALL LETTER IOTA WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0028, 0x03bf, 0, 0}, 0x1f45 }, // U1F45 # GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0028, 0x03c5, 0, 0}, 0x1f55 }, // U1F55 # GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0028, 0x03c9, 0, 0}, 0x1f65 }, // U1F65 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0029, 0x0391, 0, 0}, 0x1f0c }, // U1F0C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0029, 0x0395, 0, 0}, 0x1f1c }, // U1F1C # GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0029, 0x0397, 0, 0}, 0x1f2c }, // U1F2C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0029, 0x0399, 0, 0}, 0x1f3c }, // U1F3C # GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0029, 0x039f, 0, 0}, 0x1f4c }, // U1F4C # GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0029, 0x03a9, 0, 0}, 0x1f6c }, // U1F6C # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0029, 0x03b1, 0, 0}, 0x1f04 }, // U1F04 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0029, 0x03b5, 0, 0}, 0x1f14 }, // U1F14 # GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0029, 0x03b7, 0, 0}, 0x1f24 }, // U1F24 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0029, 0x03b9, 0, 0}, 0x1f34 }, // U1F34 # GREEK SMALL LETTER IOTA WITH PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0029, 0x03bf, 0, 0}, 0x1f44 }, // U1F44 # GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0029, 0x03c5, 0, 0}, 0x1f54 }, // U1F54 # GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0029, 0x03c9, 0, 0}, 0x1f64 }, // U1F64 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x002b, 0x004f, 0, 0}, 0x1eda }, // U1EDA # LATIN CAPITAL LETTER O WITH HORN AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x002b, 0x0055, 0, 0}, 0x1ee8 }, // U1EE8 # LATIN CAPITAL LETTER U WITH HORN AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x002b, 0x006f, 0, 0}, 0x1edb }, // U1EDB # LATIN SMALL LETTER O WITH HORN AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x002b, 0x0075, 0, 0}, 0x1ee9 }, // U1EE9 # LATIN SMALL LETTER U WITH HORN AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x002c, 0x0043, 0, 0}, 0x1e08 }, // U1E08 # LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x002c, 0x0063, 0, 0}, 0x1e09 }, // U1E09 # LATIN SMALL LETTER C WITH CEDILLA AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x002f, 0x004f, 0, 0}, 0x01fe }, // U01FE # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x002f, 0x006f, 0, 0}, 0x01ff }, // U01FF # LATIN SMALL LETTER O WITH STROKE AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0041, 0, 0, 0}, 0x00c1 }, // U00C1 # LATIN CAPITAL LETTER A WITH ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0043, 0, 0, 0}, 0x0106 }, // U0106 # LATIN CAPITAL LETTER C WITH ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0045, 0, 0, 0}, 0x00c9 }, // U00C9 # LATIN CAPITAL LETTER E WITH ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0047, 0, 0, 0}, 0x01f4 }, // U01F4 # LATIN CAPITAL LETTER G WITH ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0049, 0, 0, 0}, 0x00cd }, // U00CD # LATIN CAPITAL LETTER I WITH ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x004b, 0, 0, 0}, 0x1e30 }, // U1E30 # LATIN CAPITAL LETTER K WITH ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x004c, 0, 0, 0}, 0x0139 }, // U0139 # LATIN CAPITAL LETTER L WITH ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x004d, 0, 0, 0}, 0x1e3e }, // U1E3E # LATIN CAPITAL LETTER M WITH ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x004e, 0, 0, 0}, 0x0143 }, // U0143 # LATIN CAPITAL LETTER N WITH ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x004f, 0, 0, 0}, 0x00d3 }, // U00D3 # LATIN CAPITAL LETTER O WITH ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0050, 0, 0, 0}, 0x1e54 }, // U1E54 # LATIN CAPITAL LETTER P WITH ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0052, 0, 0, 0}, 0x0154 }, // U0154 # LATIN CAPITAL LETTER R WITH ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0053, 0, 0, 0}, 0x015a }, // U015A # LATIN CAPITAL LETTER S WITH ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0055, 0, 0, 0}, 0x00da }, // U00DA # LATIN CAPITAL LETTER U WITH ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0055, 0x0041, 0, 0}, 0x1eae }, // U1EAE # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0055, 0x0061, 0, 0}, 0x1eaf }, // U1EAF # LATIN SMALL LETTER A WITH BREVE AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0057, 0, 0, 0}, 0x1e82 }, // U1E82 # LATIN CAPITAL LETTER W WITH ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0059, 0, 0, 0}, 0x00dd }, // U00DD # LATIN CAPITAL LETTER Y WITH ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x005a, 0, 0, 0}, 0x0179 }, // U0179 # LATIN CAPITAL LETTER Z WITH ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x005e, 0x0041, 0, 0}, 0x1ea4 }, // U1EA4 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x005e, 0x0045, 0, 0}, 0x1ebe }, // U1EBE # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x005e, 0x004f, 0, 0}, 0x1ed0 }, // U1ED0 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x005e, 0x0061, 0, 0}, 0x1ea5 }, // U1EA5 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x005e, 0x0065, 0, 0}, 0x1ebf }, // U1EBF # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x005e, 0x006f, 0, 0}, 0x1ed1 }, // U1ED1 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x005f, 0x0045, 0, 0}, 0x1e16 }, // U1E16 # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x005f, 0x004f, 0, 0}, 0x1e52 }, // U1E52 # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x005f, 0x0065, 0, 0}, 0x1e17 }, // U1E17 # LATIN SMALL LETTER E WITH MACRON AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x005f, 0x006f, 0, 0}, 0x1e53 }, // U1E53 # LATIN SMALL LETTER O WITH MACRON AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0061, 0, 0, 0}, 0x00e1 }, // U00E1 # LATIN SMALL LETTER A WITH ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0062, 0x0041, 0, 0}, 0x1eae }, // U1EAE # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0062, 0x0061, 0, 0}, 0x1eaf }, // U1EAF # LATIN SMALL LETTER A WITH BREVE AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0063, 0, 0, 0}, 0x0107 }, // U0107 # LATIN SMALL LETTER C WITH ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0065, 0, 0, 0}, 0x00e9 }, // U00E9 # LATIN SMALL LETTER E WITH ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0067, 0, 0, 0}, 0x01f5 }, // U01F5 # LATIN SMALL LETTER G WITH ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0069, 0, 0, 0}, 0x00ed }, // U00ED # LATIN SMALL LETTER I WITH ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x006b, 0, 0, 0}, 0x1e31 }, // U1E31 # LATIN SMALL LETTER K WITH ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x006c, 0, 0, 0}, 0x013a }, // U013A # LATIN SMALL LETTER L WITH ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x006d, 0, 0, 0}, 0x1e3f }, // U1E3F # LATIN SMALL LETTER M WITH ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x006e, 0, 0, 0}, 0x0144 }, // U0144 # LATIN SMALL LETTER N WITH ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x006f, 0, 0, 0}, 0x00f3 }, // U00F3 # LATIN SMALL LETTER O WITH ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x006f, 0x0041, 0, 0}, 0x01fa }, // U01FA # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x006f, 0x0061, 0, 0}, 0x01fb }, // U01FB # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0070, 0, 0, 0}, 0x1e55 }, // U1E55 # LATIN SMALL LETTER P WITH ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0072, 0, 0, 0}, 0x0155 }, // U0155 # LATIN SMALL LETTER R WITH ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0073, 0, 0, 0}, 0x015b }, // U015B # LATIN SMALL LETTER S WITH ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0075, 0, 0, 0}, 0x00fa }, // U00FA # LATIN SMALL LETTER U WITH ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0077, 0, 0, 0}, 0x1e83 }, // U1E83 # LATIN SMALL LETTER W WITH ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0079, 0, 0, 0}, 0x00fd }, // U00FD # LATIN SMALL LETTER Y WITH ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x007a, 0, 0, 0}, 0x017a }, // U017A # LATIN SMALL LETTER Z WITH ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x007e, 0x004f, 0, 0}, 0x1e4c }, // U1E4C # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x007e, 0x0055, 0, 0}, 0x1e78 }, // U1E78 # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x007e, 0x006f, 0, 0}, 0x1e4d }, // U1E4D # LATIN SMALL LETTER O WITH TILDE AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x007e, 0x0075, 0, 0}, 0x1e79 }, // U1E79 # LATIN SMALL LETTER U WITH TILDE AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x00af, 0x0045, 0, 0}, 0x1e16 }, // U1E16 # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x00af, 0x004f, 0, 0}, 0x1e52 }, // U1E52 # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x00af, 0x0065, 0, 0}, 0x1e17 }, // U1E17 # LATIN SMALL LETTER E WITH MACRON AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x00af, 0x006f, 0, 0}, 0x1e53 }, // U1E53 # LATIN SMALL LETTER O WITH MACRON AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x00c2, 0, 0, 0}, 0x1ea4 }, // U1EA4 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x00c5, 0, 0, 0}, 0x01fa }, // U01FA # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x00c6, 0, 0, 0}, 0x01fc }, // U01FC # LATIN CAPITAL LETTER AE WITH ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x00c7, 0, 0, 0}, 0x1e08 }, // U1E08 # LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x00ca, 0, 0, 0}, 0x1ebe }, // U1EBE # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x00cf, 0, 0, 0}, 0x1e2e }, // U1E2E # LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x00d4, 0, 0, 0}, 0x1ed0 }, // U1ED0 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x00d5, 0, 0, 0}, 0x1e4c }, // U1E4C # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x00d8, 0, 0, 0}, 0x01fe }, // U01FE # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x00dc, 0, 0, 0}, 0x01d7 }, // U01D7 # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x00e2, 0, 0, 0}, 0x1ea5 }, // U1EA5 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x00e5, 0, 0, 0}, 0x01fb }, // U01FB # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x00e6, 0, 0, 0}, 0x01fd }, // U01FD # LATIN SMALL LETTER AE WITH ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x00e7, 0, 0, 0}, 0x1e09 }, // U1E09 # LATIN SMALL LETTER C WITH CEDILLA AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x00ea, 0, 0, 0}, 0x1ebf }, // U1EBF # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x00ef, 0, 0, 0}, 0x1e2f }, // U1E2F # LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x00f4, 0, 0, 0}, 0x1ed1 }, // U1ED1 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x00f5, 0, 0, 0}, 0x1e4d }, // U1E4D # LATIN SMALL LETTER O WITH TILDE AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x00f8, 0, 0, 0}, 0x01ff }, // U01FF # LATIN SMALL LETTER O WITH STROKE AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x00fc, 0, 0, 0}, 0x01d8 }, // U01D8 # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0102, 0, 0, 0}, 0x1eae }, // U1EAE # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0103, 0, 0, 0}, 0x1eaf }, // U1EAF # LATIN SMALL LETTER A WITH BREVE AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0112, 0, 0, 0}, 0x1e16 }, // U1E16 # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0113, 0, 0, 0}, 0x1e17 }, // U1E17 # LATIN SMALL LETTER E WITH MACRON AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x014c, 0, 0, 0}, 0x1e52 }, // U1E52 # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x014d, 0, 0, 0}, 0x1e53 }, // U1E53 # LATIN SMALL LETTER O WITH MACRON AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0168, 0, 0, 0}, 0x1e78 }, // U1E78 # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0169, 0, 0, 0}, 0x1e79 }, // U1E79 # LATIN SMALL LETTER U WITH TILDE AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0313, 0x0391, 0, 0}, 0x1f0c }, // U1F0C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0313, 0x0395, 0, 0}, 0x1f1c }, // U1F1C # GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0313, 0x0397, 0, 0}, 0x1f2c }, // U1F2C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0313, 0x0399, 0, 0}, 0x1f3c }, // U1F3C # GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0313, 0x039f, 0, 0}, 0x1f4c }, // U1F4C # GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0313, 0x03a9, 0, 0}, 0x1f6c }, // U1F6C # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0313, 0x03b1, 0, 0}, 0x1f04 }, // U1F04 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0313, 0x03b5, 0, 0}, 0x1f14 }, // U1F14 # GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0313, 0x03b7, 0, 0}, 0x1f24 }, // U1F24 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0313, 0x03b9, 0, 0}, 0x1f34 }, // U1F34 # GREEK SMALL LETTER IOTA WITH PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0313, 0x03bf, 0, 0}, 0x1f44 }, // U1F44 # GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0313, 0x03c5, 0, 0}, 0x1f54 }, // U1F54 # GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0313, 0x03c9, 0, 0}, 0x1f64 }, // U1F64 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0314, 0x0391, 0, 0}, 0x1f0d }, // U1F0D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0314, 0x0395, 0, 0}, 0x1f1d }, // U1F1D # GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0314, 0x0397, 0, 0}, 0x1f2d }, // U1F2D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0314, 0x0399, 0, 0}, 0x1f3d }, // U1F3D # GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0314, 0x039f, 0, 0}, 0x1f4d }, // U1F4D # GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0314, 0x03a5, 0, 0}, 0x1f5d }, // U1F5D # GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0314, 0x03a9, 0, 0}, 0x1f6d }, // U1F6D # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0314, 0x03b1, 0, 0}, 0x1f05 }, // U1F05 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0314, 0x03b5, 0, 0}, 0x1f15 }, // U1F15 # GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0314, 0x03b7, 0, 0}, 0x1f25 }, // U1F25 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0314, 0x03b9, 0, 0}, 0x1f35 }, // U1F35 # GREEK SMALL LETTER IOTA WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0314, 0x03bf, 0, 0}, 0x1f45 }, // U1F45 # GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0314, 0x03c5, 0, 0}, 0x1f55 }, // U1F55 # GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0314, 0x03c9, 0, 0}, 0x1f65 }, // U1F65 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0391, 0, 0, 0}, 0x0386 }, // U0386 # GREEK CAPITAL LETTER ALPHA WITH TONOS -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0395, 0, 0, 0}, 0x0388 }, // U0388 # GREEK CAPITAL LETTER EPSILON WITH TONOS -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0397, 0, 0, 0}, 0x0389 }, // U0389 # GREEK CAPITAL LETTER ETA WITH TONOS -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0399, 0, 0, 0}, 0x038a }, // U038A # GREEK CAPITAL LETTER IOTA WITH TONOS -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x039f, 0, 0, 0}, 0x038c }, // U038C # GREEK CAPITAL LETTER OMICRON WITH TONOS -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x03a5, 0, 0, 0}, 0x038e }, // U038E # GREEK CAPITAL LETTER UPSILON WITH TONOS -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x03a9, 0, 0, 0}, 0x038f }, // U038F # GREEK CAPITAL LETTER OMEGA WITH TONOS -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x03b1, 0, 0, 0}, 0x03ac }, // U03AC # GREEK SMALL LETTER ALPHA WITH TONOS -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x03b5, 0, 0, 0}, 0x03ad }, // U03AD # GREEK SMALL LETTER EPSILON WITH TONOS -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x03b7, 0, 0, 0}, 0x03ae }, // U03AE # GREEK SMALL LETTER ETA WITH TONOS -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x03b9, 0, 0, 0}, 0x03af }, // U03AF # GREEK SMALL LETTER IOTA WITH TONOS -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x03bf, 0, 0, 0}, 0x03cc }, // U03CC # GREEK SMALL LETTER OMICRON WITH TONOS -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x03c5, 0, 0, 0}, 0x03cd }, // U03CD # GREEK SMALL LETTER UPSILON WITH TONOS -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x03c9, 0, 0, 0}, 0x03ce }, // U03CE # GREEK SMALL LETTER OMEGA WITH TONOS -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x03ca, 0, 0, 0}, 0x0390 }, // U0390 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x03cb, 0, 0, 0}, 0x03b0 }, // U03B0 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x03d2, 0, 0, 0}, 0x03d3 }, // U03D3 # GREEK UPSILON WITH ACUTE AND HOOK SYMBOL -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0413, 0, 0, 0}, 0x0403 }, // U0403 # CYRILLIC CAPITAL LETTER GJE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x041a, 0, 0, 0}, 0x040c }, // U040C # CYRILLIC CAPITAL LETTER KJE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0433, 0, 0, 0}, 0x0453 }, // U0453 # CYRILLIC SMALL LETTER GJE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x043a, 0, 0, 0}, 0x045c }, // U045C # CYRILLIC SMALL LETTER KJE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f00, 0, 0, 0}, 0x1f04 }, // U1F04 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f01, 0, 0, 0}, 0x1f05 }, // U1F05 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f08, 0, 0, 0}, 0x1f0c }, // U1F0C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f09, 0, 0, 0}, 0x1f0d }, // U1F0D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f10, 0, 0, 0}, 0x1f14 }, // U1F14 # GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f11, 0, 0, 0}, 0x1f15 }, // U1F15 # GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f18, 0, 0, 0}, 0x1f1c }, // U1F1C # GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f19, 0, 0, 0}, 0x1f1d }, // U1F1D # GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f20, 0, 0, 0}, 0x1f24 }, // U1F24 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f21, 0, 0, 0}, 0x1f25 }, // U1F25 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f28, 0, 0, 0}, 0x1f2c }, // U1F2C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f29, 0, 0, 0}, 0x1f2d }, // U1F2D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f30, 0, 0, 0}, 0x1f34 }, // U1F34 # GREEK SMALL LETTER IOTA WITH PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f31, 0, 0, 0}, 0x1f35 }, // U1F35 # GREEK SMALL LETTER IOTA WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f38, 0, 0, 0}, 0x1f3c }, // U1F3C # GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f39, 0, 0, 0}, 0x1f3d }, // U1F3D # GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f40, 0, 0, 0}, 0x1f44 }, // U1F44 # GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f41, 0, 0, 0}, 0x1f45 }, // U1F45 # GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f48, 0, 0, 0}, 0x1f4c }, // U1F4C # GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f49, 0, 0, 0}, 0x1f4d }, // U1F4D # GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f50, 0, 0, 0}, 0x1f54 }, // U1F54 # GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f51, 0, 0, 0}, 0x1f55 }, // U1F55 # GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f59, 0, 0, 0}, 0x1f5d }, // U1F5D # GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f60, 0, 0, 0}, 0x1f64 }, // U1F64 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f61, 0, 0, 0}, 0x1f65 }, // U1F65 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f68, 0, 0, 0}, 0x1f6c }, // U1F6C # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f69, 0, 0, 0}, 0x1f6d }, // U1F6D # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Circumflex), 0x0041, 0, 0}, 0x1ea4 }, // U1EA4 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Circumflex), 0x0045, 0, 0}, 0x1ebe }, // U1EBE # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Circumflex), 0x004f, 0, 0}, 0x1ed0 }, // U1ED0 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Circumflex), 0x0061, 0, 0}, 0x1ea5 }, // U1EA5 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Circumflex), 0x0065, 0, 0}, 0x1ebf }, // U1EBF # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Circumflex), 0x006f, 0, 0}, 0x1ed1 }, // U1ED1 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Tilde), 0x004f, 0, 0}, 0x1e4c }, // U1E4C # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Tilde), 0x0055, 0, 0}, 0x1e78 }, // U1E78 # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Tilde), 0x006f, 0, 0}, 0x1e4d }, // U1E4D # LATIN SMALL LETTER O WITH TILDE AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Tilde), 0x0075, 0, 0}, 0x1e79 }, // U1E79 # LATIN SMALL LETTER U WITH TILDE AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Macron), 0x0045, 0, 0}, 0x1e16 }, // U1E16 # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Macron), 0x004f, 0, 0}, 0x1e52 }, // U1E52 # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Macron), 0x0065, 0, 0}, 0x1e17 }, // U1E17 # LATIN SMALL LETTER E WITH MACRON AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Macron), 0x006f, 0, 0}, 0x1e53 }, // U1E53 # LATIN SMALL LETTER O WITH MACRON AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Breve), 0x0041, 0, 0}, 0x1eae }, // U1EAE # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Breve), 0x0061, 0, 0}, 0x1eaf }, // U1EAF # LATIN SMALL LETTER A WITH BREVE AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Diaeresis), 0x0049, 0, 0}, 0x1e2e }, // U1E2E # LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Diaeresis), 0x0055, 0, 0}, 0x01d7 }, // U01D7 # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Diaeresis), 0x0069, 0, 0}, 0x1e2f }, // U1E2F # LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Diaeresis), 0x0075, 0, 0}, 0x01d8 }, // U01D8 # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Diaeresis), 0x03b9, 0, 0}, 0x0390 }, // U0390 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Diaeresis), 0x03c5, 0, 0}, 0x03b0 }, // U03B0 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Abovering), 0x0041, 0, 0}, 0x01fa }, // U01FA # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Abovering), 0x0061, 0, 0}, 0x01fb }, // U01FB # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Cedilla), 0x0043, 0, 0}, 0x1e08 }, // U1E08 # LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Cedilla), 0x0063, 0, 0}, 0x1e09 }, // U1E09 # LATIN SMALL LETTER C WITH CEDILLA AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Horn), 0x004f, 0, 0}, 0x1eda }, // U1EDA # LATIN CAPITAL LETTER O WITH HORN AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Horn), 0x0055, 0, 0}, 0x1ee8 }, // U1EE8 # LATIN CAPITAL LETTER U WITH HORN AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Horn), 0x006f, 0, 0}, 0x1edb }, // U1EDB # LATIN SMALL LETTER O WITH HORN AND ACUTE -+ { {UNITIZE(Qt::Key_Multi_key), 0x00b4, UNITIZE(Qt::Key_Dead_Horn), 0x0075, 0, 0}, 0x1ee9 }, // U1EE9 # LATIN SMALL LETTER U WITH HORN AND ACUTE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0028, 0x0391, 0}, 0x1f8d }, // U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0028, 0x0391, 0}, 0x1f8b }, // U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0028, 0x0397, 0}, 0x1f9b }, // U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0028, 0x0397, 0}, 0x1f9d }, // U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0028, 0x03a9, 0}, 0x1fab }, // U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0028, 0x03a9, 0}, 0x1fad }, // U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0028, 0x03b1, 0}, 0x1f85 }, // U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0028, 0x03b1, 0}, 0x1f83 }, // U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0028, 0x03b7, 0}, 0x1f93 }, // U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0028, 0x03b7, 0}, 0x1f95 }, // U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0028, 0x03c9, 0}, 0x1fa3 }, // U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0028, 0x03c9, 0}, 0x1fa5 }, // U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0029, 0x0391, 0}, 0x1f8c }, // U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0029, 0x0391, 0}, 0x1f8a }, // U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0029, 0x0397, 0}, 0x1f9c }, // U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0029, 0x0397, 0}, 0x1f9a }, // U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0029, 0x03a9, 0}, 0x1faa }, // U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0029, 0x03a9, 0}, 0x1fac }, // U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0029, 0x03b1, 0}, 0x1f84 }, // U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0029, 0x03b1, 0}, 0x1f82 }, // U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0029, 0x03b7, 0}, 0x1f92 }, // U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0029, 0x03b7, 0}, 0x1f94 }, // U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0029, 0x03c9, 0}, 0x1fa4 }, // U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0029, 0x03c9, 0}, 0x1fa2 }, // U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0313, 0x0391, 0}, 0x1f8c }, // U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0313, 0x0391, 0}, 0x1f8a }, // U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0313, 0x0397, 0}, 0x1f9a }, // U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0313, 0x0397, 0}, 0x1f9c }, // U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0313, 0x03a9, 0}, 0x1faa }, // U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0313, 0x03a9, 0}, 0x1fac }, // U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0313, 0x03b1, 0}, 0x1f82 }, // U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0313, 0x03b1, 0}, 0x1f84 }, // U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0313, 0x03b7, 0}, 0x1f92 }, // U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0313, 0x03b7, 0}, 0x1f94 }, // U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0313, 0x03c9, 0}, 0x1fa4 }, // U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0313, 0x03c9, 0}, 0x1fa2 }, // U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0314, 0x0391, 0}, 0x1f8b }, // U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0314, 0x0391, 0}, 0x1f8d }, // U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0314, 0x0397, 0}, 0x1f9b }, // U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0314, 0x0397, 0}, 0x1f9d }, // U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0314, 0x03a9, 0}, 0x1fab }, // U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0314, 0x03a9, 0}, 0x1fad }, // U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0314, 0x03b1, 0}, 0x1f85 }, // U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0314, 0x03b1, 0}, 0x1f83 }, // U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0314, 0x03b7, 0}, 0x1f95 }, // U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0314, 0x03b7, 0}, 0x1f93 }, // U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0314, 0x03c9, 0}, 0x1fa5 }, // U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x0314, 0x03c9, 0}, 0x1fa3 }, // U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x03b1, 0, 0}, 0x1fb4 }, // U1FB4 # GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x03b1, 0, 0}, 0x1fb2 }, // U1FB2 # GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x03b7, 0, 0}, 0x1fc4 }, // U1FC4 # GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x03b7, 0, 0}, 0x1fc2 }, // U1FC2 # GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x03c9, 0, 0}, 0x1ff4 }, // U1FF4 # GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x03c9, 0, 0}, 0x1ff2 }, // U1FF2 # GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x1f00, 0, 0}, 0x1f84 }, // U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x1f00, 0, 0}, 0x1f82 }, // U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x1f01, 0, 0}, 0x1f83 }, // U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x1f01, 0, 0}, 0x1f85 }, // U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x1f08, 0, 0}, 0x1f8c }, // U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x1f08, 0, 0}, 0x1f8a }, // U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x1f09, 0, 0}, 0x1f8b }, // U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x1f09, 0, 0}, 0x1f8d }, // U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x1f20, 0, 0}, 0x1f92 }, // U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x1f20, 0, 0}, 0x1f94 }, // U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x1f21, 0, 0}, 0x1f93 }, // U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x1f21, 0, 0}, 0x1f95 }, // U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x1f28, 0, 0}, 0x1f9c }, // U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x1f28, 0, 0}, 0x1f9a }, // U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x1f29, 0, 0}, 0x1f9b }, // U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x1f29, 0, 0}, 0x1f9d }, // U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x1f60, 0, 0}, 0x1fa2 }, // U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x1f60, 0, 0}, 0x1fa4 }, // U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x1f61, 0, 0}, 0x1fa5 }, // U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x1f61, 0, 0}, 0x1fa3 }, // U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x1f68, 0, 0}, 0x1fac }, // U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x1f68, 0, 0}, 0x1faa }, // U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x1f69, 0, 0}, 0x1fad }, // U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0000, 0x1f69, 0, 0}, 0x1fab }, // U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x0028, 0x0391, 0}, 0x1f8d }, // U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x0028, 0x0397, 0}, 0x1f9d }, // U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x0028, 0x03a9, 0}, 0x1fad }, // U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x0028, 0x03b1, 0}, 0x1f85 }, // U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x0028, 0x03b7, 0}, 0x1f95 }, // U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x0028, 0x03c9, 0}, 0x1fa5 }, // U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x0029, 0x0391, 0}, 0x1f8c }, // U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x0029, 0x0397, 0}, 0x1f9c }, // U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x0029, 0x03a9, 0}, 0x1fac }, // U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x0029, 0x03b1, 0}, 0x1f84 }, // U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x0029, 0x03b7, 0}, 0x1f94 }, // U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x0029, 0x03c9, 0}, 0x1fa4 }, // U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x0313, 0x0391, 0}, 0x1f8c }, // U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x0313, 0x0397, 0}, 0x1f9c }, // U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x0313, 0x03a9, 0}, 0x1fac }, // U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x0313, 0x03b1, 0}, 0x1f84 }, // U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x0313, 0x03b7, 0}, 0x1f94 }, // U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x0313, 0x03c9, 0}, 0x1fa4 }, // U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x0314, 0x0391, 0}, 0x1f8d }, // U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x0314, 0x0397, 0}, 0x1f9d }, // U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x0314, 0x03a9, 0}, 0x1fad }, // U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x0314, 0x03b1, 0}, 0x1f85 }, // U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x0314, 0x03b7, 0}, 0x1f95 }, // U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x0314, 0x03c9, 0}, 0x1fa5 }, // U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x03b1, 0, 0}, 0x1fb4 }, // U1FB4 # GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x03b7, 0, 0}, 0x1fc4 }, // U1FC4 # GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x03c9, 0, 0}, 0x1ff4 }, // U1FF4 # GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x1f00, 0, 0}, 0x1f84 }, // U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x1f01, 0, 0}, 0x1f85 }, // U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x1f08, 0, 0}, 0x1f8c }, // U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x1f09, 0, 0}, 0x1f8d }, // U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x1f20, 0, 0}, 0x1f94 }, // U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x1f21, 0, 0}, 0x1f95 }, // U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x1f28, 0, 0}, 0x1f9c }, // U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x1f29, 0, 0}, 0x1f9d }, // U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x1f60, 0, 0}, 0x1fa4 }, // U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x1f61, 0, 0}, 0x1fa5 }, // U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x1f68, 0, 0}, 0x1fac }, // U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0027, 0x1f69, 0, 0}, 0x1fad }, // U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0028, 0x0391, 0, 0}, 0x1f89 }, // U1F89 # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0028, 0x0397, 0, 0}, 0x1f99 }, // U1F99 # GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0028, 0x03a9, 0, 0}, 0x1fa9 }, // U1FA9 # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0028, 0x03b1, 0, 0}, 0x1f81 }, // U1F81 # GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0028, 0x03b7, 0, 0}, 0x1f91 }, // U1F91 # GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0028, 0x03c9, 0, 0}, 0x1fa1 }, // U1FA1 # GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0029, 0x0391, 0, 0}, 0x1f88 }, // U1F88 # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0029, 0x0397, 0, 0}, 0x1f98 }, // U1F98 # GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0029, 0x03a9, 0, 0}, 0x1fa8 }, // U1FA8 # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0029, 0x03b1, 0, 0}, 0x1f80 }, // U1F80 # GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0029, 0x03b7, 0, 0}, 0x1f90 }, // U1F90 # GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0029, 0x03c9, 0, 0}, 0x1fa0 }, // U1FA0 # GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x0028, 0x0391, 0}, 0x1f8b }, // U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x0028, 0x0397, 0}, 0x1f9b }, // U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x0028, 0x03a9, 0}, 0x1fab }, // U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x0028, 0x03b1, 0}, 0x1f83 }, // U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x0028, 0x03b7, 0}, 0x1f93 }, // U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x0028, 0x03c9, 0}, 0x1fa3 }, // U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x0029, 0x0391, 0}, 0x1f8a }, // U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x0029, 0x0397, 0}, 0x1f9a }, // U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x0029, 0x03a9, 0}, 0x1faa }, // U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x0029, 0x03b1, 0}, 0x1f82 }, // U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x0029, 0x03b7, 0}, 0x1f92 }, // U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x0029, 0x03c9, 0}, 0x1fa2 }, // U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x0313, 0x0391, 0}, 0x1f8a }, // U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x0313, 0x0397, 0}, 0x1f9a }, // U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x0313, 0x03a9, 0}, 0x1faa }, // U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x0313, 0x03b1, 0}, 0x1f82 }, // U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x0313, 0x03b7, 0}, 0x1f92 }, // U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x0313, 0x03c9, 0}, 0x1fa2 }, // U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x0314, 0x0391, 0}, 0x1f8b }, // U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x0314, 0x0397, 0}, 0x1f9b }, // U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x0314, 0x03a9, 0}, 0x1fab }, // U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x0314, 0x03b1, 0}, 0x1f83 }, // U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x0314, 0x03b7, 0}, 0x1f93 }, // U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x0314, 0x03c9, 0}, 0x1fa3 }, // U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x03b1, 0, 0}, 0x1fb2 }, // U1FB2 # GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x03b7, 0, 0}, 0x1fc2 }, // U1FC2 # GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x03c9, 0, 0}, 0x1ff2 }, // U1FF2 # GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x1f00, 0, 0}, 0x1f82 }, // U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x1f01, 0, 0}, 0x1f83 }, // U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x1f08, 0, 0}, 0x1f8a }, // U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x1f09, 0, 0}, 0x1f8b }, // U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x1f20, 0, 0}, 0x1f92 }, // U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x1f21, 0, 0}, 0x1f93 }, // U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x1f28, 0, 0}, 0x1f9a }, // U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x1f29, 0, 0}, 0x1f9b }, // U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x1f60, 0, 0}, 0x1fa2 }, // U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x1f61, 0, 0}, 0x1fa3 }, // U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x1f68, 0, 0}, 0x1faa }, // U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0060, 0x1f69, 0, 0}, 0x1fab }, // U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x0028, 0x0391, 0}, 0x1f8f }, // U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x0028, 0x0397, 0}, 0x1f9f }, // U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x0028, 0x03a9, 0}, 0x1faf }, // U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x0028, 0x03b1, 0}, 0x1f87 }, // U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x0028, 0x03b7, 0}, 0x1f97 }, // U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x0028, 0x03c9, 0}, 0x1fa7 }, // U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x0029, 0x0391, 0}, 0x1f8e }, // U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x0029, 0x0397, 0}, 0x1f9e }, // U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x0029, 0x03a9, 0}, 0x1fae }, // U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x0029, 0x03b1, 0}, 0x1f86 }, // U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x0029, 0x03b7, 0}, 0x1f96 }, // U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x0029, 0x03c9, 0}, 0x1fa6 }, // U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x0313, 0x0391, 0}, 0x1f8e }, // U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x0313, 0x0397, 0}, 0x1f9e }, // U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x0313, 0x03a9, 0}, 0x1fae }, // U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x0313, 0x03b1, 0}, 0x1f86 }, // U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x0313, 0x03b7, 0}, 0x1f96 }, // U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x0313, 0x03c9, 0}, 0x1fa6 }, // U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x0314, 0x0391, 0}, 0x1f8f }, // U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x0314, 0x0397, 0}, 0x1f9f }, // U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x0314, 0x03a9, 0}, 0x1faf }, // U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x0314, 0x03b1, 0}, 0x1f87 }, // U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x0314, 0x03b7, 0}, 0x1f97 }, // U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x0314, 0x03c9, 0}, 0x1fa7 }, // U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x03b1, 0, 0}, 0x1fb7 }, // U1FB7 # GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x03b7, 0, 0}, 0x1fc7 }, // U1FC7 # GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x03c9, 0, 0}, 0x1ff7 }, // U1FF7 # GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x1f00, 0, 0}, 0x1f86 }, // U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x1f01, 0, 0}, 0x1f87 }, // U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x1f08, 0, 0}, 0x1f8e }, // U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x1f09, 0, 0}, 0x1f8f }, // U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x1f20, 0, 0}, 0x1f96 }, // U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x1f21, 0, 0}, 0x1f97 }, // U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x1f28, 0, 0}, 0x1f9e }, // U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x1f29, 0, 0}, 0x1f9f }, // U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x1f60, 0, 0}, 0x1fa6 }, // U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x1f61, 0, 0}, 0x1fa7 }, // U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x1f68, 0, 0}, 0x1fae }, // U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x007e, 0x1f69, 0, 0}, 0x1faf }, // U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x0028, 0x0391, 0}, 0x1f8d }, // U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x0028, 0x0397, 0}, 0x1f9d }, // U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x0028, 0x03a9, 0}, 0x1fad }, // U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x0028, 0x03b1, 0}, 0x1f85 }, // U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x0028, 0x03b7, 0}, 0x1f95 }, // U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x0028, 0x03c9, 0}, 0x1fa5 }, // U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x0029, 0x0391, 0}, 0x1f8c }, // U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x0029, 0x0397, 0}, 0x1f9c }, // U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x0029, 0x03a9, 0}, 0x1fac }, // U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x0029, 0x03b1, 0}, 0x1f84 }, // U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x0029, 0x03b7, 0}, 0x1f94 }, // U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x0029, 0x03c9, 0}, 0x1fa4 }, // U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x0313, 0x0391, 0}, 0x1f8c }, // U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x0313, 0x0397, 0}, 0x1f9c }, // U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x0313, 0x03a9, 0}, 0x1fac }, // U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x0313, 0x03b1, 0}, 0x1f84 }, // U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x0313, 0x03b7, 0}, 0x1f94 }, // U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x0313, 0x03c9, 0}, 0x1fa4 }, // U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x0314, 0x0391, 0}, 0x1f8d }, // U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x0314, 0x0397, 0}, 0x1f9d }, // U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x0314, 0x03a9, 0}, 0x1fad }, // U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x0314, 0x03b1, 0}, 0x1f85 }, // U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x0314, 0x03b7, 0}, 0x1f95 }, // U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x0314, 0x03c9, 0}, 0x1fa5 }, // U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x03b1, 0, 0}, 0x1fb4 }, // U1FB4 # GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x03b7, 0, 0}, 0x1fc4 }, // U1FC4 # GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x03c9, 0, 0}, 0x1ff4 }, // U1FF4 # GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x1f00, 0, 0}, 0x1f84 }, // U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x1f01, 0, 0}, 0x1f85 }, // U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x1f08, 0, 0}, 0x1f8c }, // U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x1f09, 0, 0}, 0x1f8d }, // U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x1f20, 0, 0}, 0x1f94 }, // U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x1f21, 0, 0}, 0x1f95 }, // U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x1f28, 0, 0}, 0x1f9c }, // U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x1f29, 0, 0}, 0x1f9d }, // U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x1f60, 0, 0}, 0x1fa4 }, // U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x1f61, 0, 0}, 0x1fa5 }, // U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x1f68, 0, 0}, 0x1fac }, // U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x00b4, 0x1f69, 0, 0}, 0x1fad }, // U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0313, 0x0391, 0, 0}, 0x1f88 }, // U1F88 # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0313, 0x0397, 0, 0}, 0x1f98 }, // U1F98 # GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0313, 0x03a9, 0, 0}, 0x1fa8 }, // U1FA8 # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0313, 0x03b1, 0, 0}, 0x1f80 }, // U1F80 # GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0313, 0x03b7, 0, 0}, 0x1f90 }, // U1F90 # GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0313, 0x03c9, 0, 0}, 0x1fa0 }, // U1FA0 # GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0314, 0x0391, 0, 0}, 0x1f89 }, // U1F89 # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0314, 0x0397, 0, 0}, 0x1f99 }, // U1F99 # GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0314, 0x03a9, 0, 0}, 0x1fa9 }, // U1FA9 # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0314, 0x03b1, 0, 0}, 0x1f81 }, // U1F81 # GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0314, 0x03b7, 0, 0}, 0x1f91 }, // U1F91 # GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0314, 0x03c9, 0, 0}, 0x1fa1 }, // U1FA1 # GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x0028, 0x0391, 0}, 0x1f8f }, // U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x0028, 0x0397, 0}, 0x1f9f }, // U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x0028, 0x03a9, 0}, 0x1faf }, // U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x0028, 0x03b1, 0}, 0x1f87 }, // U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x0028, 0x03b7, 0}, 0x1f97 }, // U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x0028, 0x03c9, 0}, 0x1fa7 }, // U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x0029, 0x0391, 0}, 0x1f8e }, // U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x0029, 0x0397, 0}, 0x1f9e }, // U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x0029, 0x03a9, 0}, 0x1fae }, // U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x0029, 0x03b1, 0}, 0x1f86 }, // U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x0029, 0x03b7, 0}, 0x1f96 }, // U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x0029, 0x03c9, 0}, 0x1fa6 }, // U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x0313, 0x0391, 0}, 0x1f8e }, // U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x0313, 0x0397, 0}, 0x1f9e }, // U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x0313, 0x03a9, 0}, 0x1fae }, // U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x0313, 0x03b1, 0}, 0x1f86 }, // U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x0313, 0x03b7, 0}, 0x1f96 }, // U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x0313, 0x03c9, 0}, 0x1fa6 }, // U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x0314, 0x0391, 0}, 0x1f8f }, // U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x0314, 0x0397, 0}, 0x1f9f }, // U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x0314, 0x03a9, 0}, 0x1faf }, // U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x0314, 0x03b1, 0}, 0x1f87 }, // U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x0314, 0x03b7, 0}, 0x1f97 }, // U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x0314, 0x03c9, 0}, 0x1fa7 }, // U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x03b1, 0, 0}, 0x1fb7 }, // U1FB7 # GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x03b7, 0, 0}, 0x1fc7 }, // U1FC7 # GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x03c9, 0, 0}, 0x1ff7 }, // U1FF7 # GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x1f00, 0, 0}, 0x1f86 }, // U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x1f01, 0, 0}, 0x1f87 }, // U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x1f08, 0, 0}, 0x1f8e }, // U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x1f09, 0, 0}, 0x1f8f }, // U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x1f20, 0, 0}, 0x1f96 }, // U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x1f21, 0, 0}, 0x1f97 }, // U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x1f28, 0, 0}, 0x1f9e }, // U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x1f29, 0, 0}, 0x1f9f }, // U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x1f60, 0, 0}, 0x1fa6 }, // U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x1f61, 0, 0}, 0x1fa7 }, // U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x1f68, 0, 0}, 0x1fae }, // U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0342, 0x1f69, 0, 0}, 0x1faf }, // U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0391, 0, 0, 0}, 0x1fbc }, // U1FBC # GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x0397, 0, 0, 0}, 0x1fcc }, // U1FCC # GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x03a9, 0, 0, 0}, 0x1ffc }, // U1FFC # GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x03ac, 0, 0, 0}, 0x1fb4 }, // U1FB4 # GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x03ae, 0, 0, 0}, 0x1fc4 }, // U1FC4 # GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x03b1, 0, 0, 0}, 0x1fb3 }, // U1FB3 # GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x03b7, 0, 0, 0}, 0x1fc3 }, // U1FC3 # GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x03c9, 0, 0, 0}, 0x1ff3 }, // U1FF3 # GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x03ce, 0, 0, 0}, 0x1ff4 }, // U1FF4 # GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f00, 0, 0, 0}, 0x1f80 }, // U1F80 # GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f01, 0, 0, 0}, 0x1f81 }, // U1F81 # GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f02, 0, 0, 0}, 0x1f82 }, // U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f03, 0, 0, 0}, 0x1f83 }, // U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f04, 0, 0, 0}, 0x1f84 }, // U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f05, 0, 0, 0}, 0x1f85 }, // U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f06, 0, 0, 0}, 0x1f86 }, // U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f07, 0, 0, 0}, 0x1f87 }, // U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f08, 0, 0, 0}, 0x1f88 }, // U1F88 # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f09, 0, 0, 0}, 0x1f89 }, // U1F89 # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f0a, 0, 0, 0}, 0x1f8a }, // U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f0b, 0, 0, 0}, 0x1f8b }, // U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f0c, 0, 0, 0}, 0x1f8c }, // U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f0d, 0, 0, 0}, 0x1f8d }, // U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f0e, 0, 0, 0}, 0x1f8e }, // U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f0f, 0, 0, 0}, 0x1f8f }, // U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f20, 0, 0, 0}, 0x1f90 }, // U1F90 # GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f21, 0, 0, 0}, 0x1f91 }, // U1F91 # GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f22, 0, 0, 0}, 0x1f92 }, // U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f23, 0, 0, 0}, 0x1f93 }, // U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f24, 0, 0, 0}, 0x1f94 }, // U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f25, 0, 0, 0}, 0x1f95 }, // U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f26, 0, 0, 0}, 0x1f96 }, // U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f27, 0, 0, 0}, 0x1f97 }, // U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f28, 0, 0, 0}, 0x1f98 }, // U1F98 # GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f29, 0, 0, 0}, 0x1f99 }, // U1F99 # GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f2a, 0, 0, 0}, 0x1f9a }, // U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f2b, 0, 0, 0}, 0x1f9b }, // U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f2c, 0, 0, 0}, 0x1f9c }, // U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f2d, 0, 0, 0}, 0x1f9d }, // U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f2e, 0, 0, 0}, 0x1f9e }, // U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f2f, 0, 0, 0}, 0x1f9f }, // U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f60, 0, 0, 0}, 0x1fa0 }, // U1FA0 # GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f61, 0, 0, 0}, 0x1fa1 }, // U1FA1 # GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f62, 0, 0, 0}, 0x1fa2 }, // U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f63, 0, 0, 0}, 0x1fa3 }, // U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f64, 0, 0, 0}, 0x1fa4 }, // U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f65, 0, 0, 0}, 0x1fa5 }, // U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f66, 0, 0, 0}, 0x1fa6 }, // U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f67, 0, 0, 0}, 0x1fa7 }, // U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f68, 0, 0, 0}, 0x1fa8 }, // U1FA8 # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f69, 0, 0, 0}, 0x1fa9 }, // U1FA9 # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f6a, 0, 0, 0}, 0x1faa }, // U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f6b, 0, 0, 0}, 0x1fab }, // U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f6c, 0, 0, 0}, 0x1fac }, // U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f6d, 0, 0, 0}, 0x1fad }, // U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f6e, 0, 0, 0}, 0x1fae }, // U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f6f, 0, 0, 0}, 0x1faf }, // U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f70, 0, 0, 0}, 0x1fb2 }, // U1FB2 # GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f74, 0, 0, 0}, 0x1fc2 }, // U1FC2 # GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1f7c, 0, 0, 0}, 0x1ff2 }, // U1FF2 # GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1fb6, 0, 0, 0}, 0x1fb7 }, // U1FB7 # GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1fc6, 0, 0, 0}, 0x1fc7 }, // U1FC7 # GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, 0x1ff6, 0, 0, 0}, 0x1ff7 }, // U1FF7 # GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x0028, 0x0391, 0}, 0x1f8b }, // U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x0028, 0x0397, 0}, 0x1f9b }, // U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x0028, 0x03a9, 0}, 0x1fab }, // U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x0028, 0x03b1, 0}, 0x1f83 }, // U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x0028, 0x03b7, 0}, 0x1f93 }, // U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x0028, 0x03c9, 0}, 0x1fa3 }, // U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x0029, 0x0391, 0}, 0x1f8a }, // U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x0029, 0x0397, 0}, 0x1f9a }, // U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x0029, 0x03a9, 0}, 0x1faa }, // U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x0029, 0x03b1, 0}, 0x1f82 }, // U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x0029, 0x03b7, 0}, 0x1f92 }, // U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x0029, 0x03c9, 0}, 0x1fa2 }, // U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x0313, 0x0391, 0}, 0x1f8a }, // U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x0313, 0x0397, 0}, 0x1f9a }, // U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x0313, 0x03a9, 0}, 0x1faa }, // U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x0313, 0x03b1, 0}, 0x1f82 }, // U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x0313, 0x03b7, 0}, 0x1f92 }, // U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x0313, 0x03c9, 0}, 0x1fa2 }, // U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x0314, 0x0391, 0}, 0x1f8b }, // U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x0314, 0x0397, 0}, 0x1f9b }, // U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x0314, 0x03a9, 0}, 0x1fab }, // U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x0314, 0x03b1, 0}, 0x1f83 }, // U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x0314, 0x03b7, 0}, 0x1f93 }, // U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x0314, 0x03c9, 0}, 0x1fa3 }, // U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x03b1, 0, 0}, 0x1fb2 }, // U1FB2 # GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x03b7, 0, 0}, 0x1fc2 }, // U1FC2 # GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x03c9, 0, 0}, 0x1ff2 }, // U1FF2 # GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x1f00, 0, 0}, 0x1f82 }, // U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x1f01, 0, 0}, 0x1f83 }, // U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x1f08, 0, 0}, 0x1f8a }, // U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x1f09, 0, 0}, 0x1f8b }, // U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x1f20, 0, 0}, 0x1f92 }, // U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x1f21, 0, 0}, 0x1f93 }, // U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x1f28, 0, 0}, 0x1f9a }, // U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x1f29, 0, 0}, 0x1f9b }, // U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x1f60, 0, 0}, 0x1fa2 }, // U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x1f61, 0, 0}, 0x1fa3 }, // U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x1f68, 0, 0}, 0x1faa }, // U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Grave), 0x1f69, 0, 0}, 0x1fab }, // U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x0028, 0x0391, 0}, 0x1f8d }, // U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x0028, 0x0397, 0}, 0x1f9d }, // U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x0028, 0x03a9, 0}, 0x1fad }, // U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x0028, 0x03b1, 0}, 0x1f85 }, // U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x0028, 0x03b7, 0}, 0x1f95 }, // U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x0028, 0x03c9, 0}, 0x1fa5 }, // U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x0029, 0x0391, 0}, 0x1f8c }, // U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x0029, 0x0397, 0}, 0x1f9c }, // U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x0029, 0x03a9, 0}, 0x1fac }, // U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x0029, 0x03b1, 0}, 0x1f84 }, // U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x0029, 0x03b7, 0}, 0x1f94 }, // U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x0029, 0x03c9, 0}, 0x1fa4 }, // U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x0313, 0x0391, 0}, 0x1f8c }, // U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x0313, 0x0397, 0}, 0x1f9c }, // U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x0313, 0x03a9, 0}, 0x1fac }, // U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x0313, 0x03b1, 0}, 0x1f84 }, // U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x0313, 0x03b7, 0}, 0x1f94 }, // U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x0313, 0x03c9, 0}, 0x1fa4 }, // U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x0314, 0x0391, 0}, 0x1f8d }, // U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x0314, 0x0397, 0}, 0x1f9d }, // U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x0314, 0x03a9, 0}, 0x1fad }, // U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x0314, 0x03b1, 0}, 0x1f85 }, // U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x0314, 0x03b7, 0}, 0x1f95 }, // U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x0314, 0x03c9, 0}, 0x1fa5 }, // U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x03b1, 0, 0}, 0x1fb4 }, // U1FB4 # GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x03b7, 0, 0}, 0x1fc4 }, // U1FC4 # GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x03c9, 0, 0}, 0x1ff4 }, // U1FF4 # GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x1f00, 0, 0}, 0x1f84 }, // U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x1f01, 0, 0}, 0x1f85 }, // U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x1f08, 0, 0}, 0x1f8c }, // U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x1f09, 0, 0}, 0x1f8d }, // U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x1f20, 0, 0}, 0x1f94 }, // U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x1f21, 0, 0}, 0x1f95 }, // U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x1f28, 0, 0}, 0x1f9c }, // U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x1f29, 0, 0}, 0x1f9d }, // U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x1f60, 0, 0}, 0x1fa4 }, // U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x1f61, 0, 0}, 0x1fa5 }, // U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x1f68, 0, 0}, 0x1fac }, // U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Acute), 0x1f69, 0, 0}, 0x1fad }, // U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x0028, 0x0391, 0}, 0x1f8f }, // U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x0028, 0x0397, 0}, 0x1f9f }, // U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x0028, 0x03a9, 0}, 0x1faf }, // U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x0028, 0x03b1, 0}, 0x1f87 }, // U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x0028, 0x03b7, 0}, 0x1f97 }, // U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x0028, 0x03c9, 0}, 0x1fa7 }, // U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x0029, 0x0391, 0}, 0x1f8e }, // U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x0029, 0x0397, 0}, 0x1f9e }, // U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x0029, 0x03a9, 0}, 0x1fae }, // U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x0029, 0x03b1, 0}, 0x1f86 }, // U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x0029, 0x03b7, 0}, 0x1f96 }, // U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x0029, 0x03c9, 0}, 0x1fa6 }, // U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x0313, 0x0391, 0}, 0x1f8e }, // U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x0313, 0x0397, 0}, 0x1f9e }, // U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x0313, 0x03a9, 0}, 0x1fae }, // U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x0313, 0x03b1, 0}, 0x1f86 }, // U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x0313, 0x03b7, 0}, 0x1f96 }, // U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x0313, 0x03c9, 0}, 0x1fa6 }, // U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x0314, 0x0391, 0}, 0x1f8f }, // U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x0314, 0x0397, 0}, 0x1f9f }, // U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x0314, 0x03a9, 0}, 0x1faf }, // U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x0314, 0x03b1, 0}, 0x1f87 }, // U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x0314, 0x03b7, 0}, 0x1f97 }, // U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x0314, 0x03c9, 0}, 0x1fa7 }, // U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x03b1, 0, 0}, 0x1fb7 }, // U1FB7 # GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x03b7, 0, 0}, 0x1fc7 }, // U1FC7 # GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x03c9, 0, 0}, 0x1ff7 }, // U1FF7 # GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x1f00, 0, 0}, 0x1f86 }, // U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x1f01, 0, 0}, 0x1f87 }, // U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x1f08, 0, 0}, 0x1f8e }, // U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x1f09, 0, 0}, 0x1f8f }, // U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x1f20, 0, 0}, 0x1f96 }, // U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x1f21, 0, 0}, 0x1f97 }, // U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x1f28, 0, 0}, 0x1f9e }, // U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x1f29, 0, 0}, 0x1f9f }, // U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x1f60, 0, 0}, 0x1fa6 }, // U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x1f61, 0, 0}, 0x1fa7 }, // U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x1f68, 0, 0}, 0x1fae }, // U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x03b9, UNITIZE(Qt::Key_Dead_Tilde), 0x1f69, 0, 0}, 0x1faf }, // U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x05b4, 0x05d9, 0, 0, 0}, 0xfb1d }, // UFB1D # HEBREW LETTER YOD WITH HIRIQ -+ { {UNITIZE(Qt::Key_Multi_key), 0x05b7, 0x05d0, 0, 0, 0}, 0xfb2e }, // UFB2E # HEBREW LETTER ALEF WITH PATAH -+ { {UNITIZE(Qt::Key_Multi_key), 0x05b7, 0x05f2, 0, 0, 0}, 0xfb1f }, // UFB1F # HEBREW LIGATURE YIDDISH YOD YOD PATAH -+ { {UNITIZE(Qt::Key_Multi_key), 0x05b8, 0x05d0, 0, 0, 0}, 0xfb2f }, // UFB2F # HEBREW LETTER ALEF WITH QAMATS -+ { {UNITIZE(Qt::Key_Multi_key), 0x05b9, 0x05d5, 0, 0, 0}, 0xfb4b }, // UFB4B # HEBREW LETTER VAV WITH HOLAM -+ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05d0, 0, 0, 0}, 0xfb30 }, // UFB30 # HEBREW LETTER ALEF WITH MAPIQ -+ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05d1, 0, 0, 0}, 0xfb31 }, // UFB31 # HEBREW LETTER BET WITH DAGESH -+ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05d1, 0, 0, 0}, 0xfb31 }, // UFB31 # HEBREW LETTER BET WITH DAGESH -+ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05d2, 0, 0, 0}, 0xfb32 }, // UFB32 # HEBREW LETTER GIMEL WITH DAGESH -+ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05d2, 0, 0, 0}, 0xfb32 }, // UFB32 # HEBREW LETTER GIMEL WITH DAGESH -+ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05d3, 0, 0, 0}, 0xfb33 }, // UFB33 # HEBREW LETTER DALET WITH DAGESH -+ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05d3, 0, 0, 0}, 0xfb33 }, // UFB33 # HEBREW LETTER DALET WITH DAGESH -+ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05d4, 0, 0, 0}, 0xfb34 }, // UFB34 # HEBREW LETTER HE WITH MAPIQ -+ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05d5, 0, 0, 0}, 0xfb35 }, // UFB35 # HEBREW LETTER VAV WITH DAGESH -+ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05d6, 0, 0, 0}, 0xfb36 }, // UFB36 # HEBREW LETTER ZAYIN WITH DAGESH -+ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05d6, 0, 0, 0}, 0xfb36 }, // UFB36 # HEBREW LETTER ZAYIN WITH DAGESH -+ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05d8, 0, 0, 0}, 0xfb38 }, // UFB38 # HEBREW LETTER TET WITH DAGESH -+ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05d8, 0, 0, 0}, 0xfb38 }, // UFB38 # HEBREW LETTER TET WITH DAGESH -+ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05d9, 0, 0, 0}, 0xfb39 }, // UFB39 # HEBREW LETTER YOD WITH DAGESH -+ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05da, 0, 0, 0}, 0xfb3a }, // UFB3A # HEBREW LETTER FINAL KAF WITH DAGESH -+ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05db, 0, 0, 0}, 0xfb3b }, // UFB3B # HEBREW LETTER KAF WITH DAGESH -+ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05dc, 0, 0, 0}, 0xfb3c }, // UFB3C # HEBREW LETTER LAMED WITH DAGESH -+ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05de, 0, 0, 0}, 0xfb3e }, // UFB3E # HEBREW LETTER MEM WITH DAGESH -+ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05e0, 0, 0, 0}, 0xfb40 }, // UFB40 # HEBREW LETTER NUN WITH DAGESH -+ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05e1, 0, 0, 0}, 0xfb41 }, // UFB41 # HEBREW LETTER SAMEKH WITH DAGESH -+ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05e1, 0, 0, 0}, 0xfb41 }, // UFB41 # HEBREW LETTER SAMEKH WITH DAGESH -+ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05e3, 0, 0, 0}, 0xfb43 }, // UFB43 # HEBREW LETTER FINAL PE WITH DAGESH -+ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05e4, 0, 0, 0}, 0xfb44 }, // UFB44 # HEBREW LETTER PE WITH DAGESH -+ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05e6, 0, 0, 0}, 0xfb46 }, // UFB46 # HEBREW LETTER TSADI WITH DAGESH -+ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05e6, 0, 0, 0}, 0xfb46 }, // UFB46 # HEBREW LETTER TSADI WITH DAGESH -+ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05e7, 0, 0, 0}, 0xfb47 }, // UFB47 # HEBREW LETTER QOF WITH DAGESH -+ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05e7, 0, 0, 0}, 0xfb47 }, // UFB47 # HEBREW LETTER QOF WITH DAGESH -+ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05e8, 0, 0, 0}, 0xfb48 }, // UFB48 # HEBREW LETTER RESH WITH DAGESH -+ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05e9, 0, 0, 0}, 0xfb49 }, // UFB49 # HEBREW LETTER SHIN WITH DAGESH -+ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05ea, 0, 0, 0}, 0xfb4a }, // UFB4A # HEBREW LETTER TAV WITH DAGESH -+ { {UNITIZE(Qt::Key_Multi_key), 0x05bc, 0x05ea, 0, 0, 0}, 0xfb4a }, // UFB4A # HEBREW LETTER TAV WITH DAGESH -+ { {UNITIZE(Qt::Key_Multi_key), 0x05bf, 0x05d1, 0, 0, 0}, 0xfb4c }, // UFB4C # HEBREW LETTER BET WITH RAFE -+ { {UNITIZE(Qt::Key_Multi_key), 0x05bf, 0x05d1, 0, 0, 0}, 0xfb4c }, // UFB4C # HEBREW LETTER BET WITH RAFE -+ { {UNITIZE(Qt::Key_Multi_key), 0x05bf, 0x05db, 0, 0, 0}, 0xfb4d }, // UFB4D # HEBREW LETTER KAF WITH RAFE -+ { {UNITIZE(Qt::Key_Multi_key), 0x05bf, 0x05e4, 0, 0, 0}, 0xfb4e }, // UFB4E # HEBREW LETTER PE WITH RAFE -+ { {UNITIZE(Qt::Key_Multi_key), 0x05c1, 0x05bc, 0x05e9, 0, 0}, 0xfb2c }, // UFB2C # HEBREW LETTER SHIN WITH DAGESH AND SHIN DOT -+ { {UNITIZE(Qt::Key_Multi_key), 0x05c1, 0x05e9, 0, 0, 0}, 0xfb2a }, // UFB2A # HEBREW LETTER SHIN WITH SHIN DOT -+ { {UNITIZE(Qt::Key_Multi_key), 0x05c1, 0xfb49, 0, 0, 0}, 0xfb2c }, // UFB2C # HEBREW LETTER SHIN WITH DAGESH AND SHIN DOT -+ { {UNITIZE(Qt::Key_Multi_key), 0x05c2, 0x05bc, 0x05e9, 0, 0}, 0xfb2d }, // UFB2D # HEBREW LETTER SHIN WITH DAGESH AND SIN DOT -+ { {UNITIZE(Qt::Key_Multi_key), 0x05c2, 0x05e9, 0, 0, 0}, 0xfb2b }, // UFB2B # HEBREW LETTER SHIN WITH SIN DOT -+ { {UNITIZE(Qt::Key_Multi_key), 0x05c2, 0xfb49, 0, 0, 0}, 0xfb2d }, // UFB2D # HEBREW LETTER SHIN WITH DAGESH AND SIN DOT -+ { {UNITIZE(Qt::Key_Multi_key), 0x0653, 0x0627, 0, 0, 0}, 0x0622 }, // U0622 # ARABIC LETTER ALEF WITH MADDA ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0654, 0x0627, 0, 0, 0}, 0x0623 }, // U0623 # ARABIC LETTER ALEF WITH HAMZA ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0654, 0x0648, 0, 0, 0}, 0x0624 }, // U0624 # ARABIC LETTER WAW WITH HAMZA ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0654, 0x064a, 0, 0, 0}, 0x0626 }, // U0626 # ARABIC LETTER YEH WITH HAMZA ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0654, 0x06c1, 0, 0, 0}, 0x06c2 }, // U06C2 # ARABIC LETTER HEH GOAL WITH HAMZA ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0654, 0x06d2, 0, 0, 0}, 0x06d3 }, // U06D3 # ARABIC LETTER YEH BARREE WITH HAMZA ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0654, 0x06d5, 0, 0, 0}, 0x06c0 }, // U06C0 # ARABIC LETTER HEH WITH YEH ABOVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0655, 0x0627, 0, 0, 0}, 0x0625 }, // U0625 # ARABIC LETTER ALEF WITH HAMZA BELOW -+ { {UNITIZE(Qt::Key_Multi_key), 0x093c, 0x0915, 0, 0, 0}, 0x0958 }, // U0958 # DEVANAGARI LETTER QA -+ { {UNITIZE(Qt::Key_Multi_key), 0x093c, 0x0916, 0, 0, 0}, 0x0959 }, // U0959 # DEVANAGARI LETTER KHHA -+ { {UNITIZE(Qt::Key_Multi_key), 0x093c, 0x0917, 0, 0, 0}, 0x095a }, // U095A # DEVANAGARI LETTER GHHA -+ { {UNITIZE(Qt::Key_Multi_key), 0x093c, 0x091c, 0, 0, 0}, 0x095b }, // U095B # DEVANAGARI LETTER ZA -+ { {UNITIZE(Qt::Key_Multi_key), 0x093c, 0x0921, 0, 0, 0}, 0x095c }, // U095C # DEVANAGARI LETTER DDDHA -+ { {UNITIZE(Qt::Key_Multi_key), 0x093c, 0x0922, 0, 0, 0}, 0x095d }, // U095D # DEVANAGARI LETTER RHA -+ { {UNITIZE(Qt::Key_Multi_key), 0x093c, 0x0928, 0, 0, 0}, 0x0929 }, // U0929 # DEVANAGARI LETTER NNNA -+ { {UNITIZE(Qt::Key_Multi_key), 0x093c, 0x092b, 0, 0, 0}, 0x095e }, // U095E # DEVANAGARI LETTER FA -+ { {UNITIZE(Qt::Key_Multi_key), 0x093c, 0x092f, 0, 0, 0}, 0x095f }, // U095F # DEVANAGARI LETTER YYA -+ { {UNITIZE(Qt::Key_Multi_key), 0x093c, 0x0930, 0, 0, 0}, 0x0931 }, // U0931 # DEVANAGARI LETTER RRA -+ { {UNITIZE(Qt::Key_Multi_key), 0x093c, 0x0933, 0, 0, 0}, 0x0934 }, // U0934 # DEVANAGARI LETTER LLLA -+ { {UNITIZE(Qt::Key_Multi_key), 0x09bc, 0x09a1, 0, 0, 0}, 0x09dc }, // U09DC # BENGALI LETTER RRA -+ { {UNITIZE(Qt::Key_Multi_key), 0x09bc, 0x09a2, 0, 0, 0}, 0x09dd }, // U09DD # BENGALI LETTER RHA -+ { {UNITIZE(Qt::Key_Multi_key), 0x09bc, 0x09af, 0, 0, 0}, 0x09df }, // U09DF # BENGALI LETTER YYA -+ { {UNITIZE(Qt::Key_Multi_key), 0x09c7, 0x09be, 0, 0, 0}, 0x09cb }, // U09CB # BENGALI VOWEL SIGN O -+ { {UNITIZE(Qt::Key_Multi_key), 0x09c7, 0x09d7, 0, 0, 0}, 0x09cc }, // U09CC # BENGALI VOWEL SIGN AU -+ { {UNITIZE(Qt::Key_Multi_key), 0x0a3c, 0x0a16, 0, 0, 0}, 0x0a59 }, // U0A59 # GURMUKHI LETTER KHHA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0a3c, 0x0a17, 0, 0, 0}, 0x0a5a }, // U0A5A # GURMUKHI LETTER GHHA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0a3c, 0x0a1c, 0, 0, 0}, 0x0a5b }, // U0A5B # GURMUKHI LETTER ZA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0a3c, 0x0a2b, 0, 0, 0}, 0x0a5e }, // U0A5E # GURMUKHI LETTER FA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0a3c, 0x0a32, 0, 0, 0}, 0x0a33 }, // U0A33 # GURMUKHI LETTER LLA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0a3c, 0x0a38, 0, 0, 0}, 0x0a36 }, // U0A36 # GURMUKHI LETTER SHA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0b3c, 0x0b21, 0, 0, 0}, 0x0b5c }, // U0B5C # ORIYA LETTER RRA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0b3c, 0x0b22, 0, 0, 0}, 0x0b5d }, // U0B5D # ORIYA LETTER RHA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0b47, 0x0b3e, 0, 0, 0}, 0x0b4b }, // U0B4B # ORIYA VOWEL SIGN O -+ { {UNITIZE(Qt::Key_Multi_key), 0x0b47, 0x0b56, 0, 0, 0}, 0x0b48 }, // U0B48 # ORIYA VOWEL SIGN AI -+ { {UNITIZE(Qt::Key_Multi_key), 0x0b47, 0x0b57, 0, 0, 0}, 0x0b4c }, // U0B4C # ORIYA VOWEL SIGN AU -+ { {UNITIZE(Qt::Key_Multi_key), 0x0bc6, 0x0bbe, 0, 0, 0}, 0x0bca }, // U0BCA # TAMIL VOWEL SIGN O -+ { {UNITIZE(Qt::Key_Multi_key), 0x0bc6, 0x0bd7, 0, 0, 0}, 0x0bcc }, // U0BCC # TAMIL VOWEL SIGN AU -+ { {UNITIZE(Qt::Key_Multi_key), 0x0bc7, 0x0bbe, 0, 0, 0}, 0x0bcb }, // U0BCB # TAMIL VOWEL SIGN OO -+ { {UNITIZE(Qt::Key_Multi_key), 0x0bd7, 0x0b92, 0, 0, 0}, 0x0b94 }, // U0B94 # TAMIL LETTER AU -+ { {UNITIZE(Qt::Key_Multi_key), 0x0c46, 0x0c56, 0, 0, 0}, 0x0c48 }, // U0C48 # TELUGU VOWEL SIGN AI -+ { {UNITIZE(Qt::Key_Multi_key), 0x0cbf, 0x0cd5, 0, 0, 0}, 0x0cc0 }, // U0CC0 # KANNADA VOWEL SIGN II -+ { {UNITIZE(Qt::Key_Multi_key), 0x0cc6, 0x0cc2, 0, 0, 0}, 0x0cca }, // U0CCA # KANNADA VOWEL SIGN O -+ { {UNITIZE(Qt::Key_Multi_key), 0x0cc6, 0x0cc2, 0x0cd5, 0, 0}, 0x0ccb }, // U0CCB # KANNADA VOWEL SIGN OO -+ { {UNITIZE(Qt::Key_Multi_key), 0x0cc6, 0x0cd5, 0, 0, 0}, 0x0cc7 }, // U0CC7 # KANNADA VOWEL SIGN EE -+ { {UNITIZE(Qt::Key_Multi_key), 0x0cc6, 0x0cd6, 0, 0, 0}, 0x0cc8 }, // U0CC8 # KANNADA VOWEL SIGN AI -+ { {UNITIZE(Qt::Key_Multi_key), 0x0cca, 0x0cd5, 0, 0, 0}, 0x0ccb }, // U0CCB # KANNADA VOWEL SIGN OO -+ { {UNITIZE(Qt::Key_Multi_key), 0x0d46, 0x0d3e, 0, 0, 0}, 0x0d4a }, // U0D4A # MALAYALAM VOWEL SIGN O -+ { {UNITIZE(Qt::Key_Multi_key), 0x0d46, 0x0d57, 0, 0, 0}, 0x0d4c }, // U0D4C # MALAYALAM VOWEL SIGN AU -+ { {UNITIZE(Qt::Key_Multi_key), 0x0d47, 0x0d3e, 0, 0, 0}, 0x0d4b }, // U0D4B # MALAYALAM VOWEL SIGN OO -+ { {UNITIZE(Qt::Key_Multi_key), 0x0dd9, 0x0dca, 0, 0, 0}, 0x0dda }, // U0DDA # SINHALA VOWEL SIGN DIGA KOMBUVA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0dd9, 0x0dcf, 0, 0, 0}, 0x0ddc }, // U0DDC # SINHALA VOWEL SIGN KOMBUVA HAA AELA-PILLA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0dd9, 0x0dcf, 0x0dca, 0, 0}, 0x0ddd }, // U0DDD # SINHALA VOWEL SIGN KOMBUVA HAA DIGA AELA-PILLA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0dd9, 0x0ddf, 0, 0, 0}, 0x0dde }, // U0DDE # SINHALA VOWEL SIGN KOMBUVA HAA GAYANUKITTA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0ddc, 0x0dca, 0, 0, 0}, 0x0ddd }, // U0DDD # SINHALA VOWEL SIGN KOMBUVA HAA DIGA AELA-PILLA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0f71, 0x0f72, 0, 0, 0}, 0x0f73 }, // U0F73 # TIBETAN VOWEL SIGN II -+ { {UNITIZE(Qt::Key_Multi_key), 0x0f71, 0x0f74, 0, 0, 0}, 0x0f75 }, // U0F75 # TIBETAN VOWEL SIGN UU -+ { {UNITIZE(Qt::Key_Multi_key), 0x0f71, 0x0f80, 0, 0, 0}, 0x0f81 }, // U0F81 # TIBETAN VOWEL SIGN REVERSED II -+ { {UNITIZE(Qt::Key_Multi_key), 0x0f90, 0x0fb5, 0, 0, 0}, 0x0fb9 }, // U0FB9 # TIBETAN SUBJOINED LETTER KSSA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0f92, 0x0fb7, 0, 0, 0}, 0x0f93 }, // U0F93 # TIBETAN SUBJOINED LETTER GHA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0f9c, 0x0fb7, 0, 0, 0}, 0x0f9d }, // U0F9D # TIBETAN SUBJOINED LETTER DDHA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0fa1, 0x0fb7, 0, 0, 0}, 0x0fa2 }, // U0FA2 # TIBETAN SUBJOINED LETTER DHA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0fa6, 0x0fb7, 0, 0, 0}, 0x0fa7 }, // U0FA7 # TIBETAN SUBJOINED LETTER BHA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0fab, 0x0fb7, 0, 0, 0}, 0x0fac }, // U0FAC # TIBETAN SUBJOINED LETTER DZHA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0fb2, 0x0f80, 0, 0, 0}, 0x0f76 }, // U0F76 # TIBETAN VOWEL SIGN VOCALIC R -+ { {UNITIZE(Qt::Key_Multi_key), 0x0fb3, 0x0f80, 0, 0, 0}, 0x0f78 }, // U0F78 # TIBETAN VOWEL SIGN VOCALIC L -+ { {UNITIZE(Qt::Key_Multi_key), 0x0fb5, 0x0f40, 0, 0, 0}, 0x0f69 }, // U0F69 # TIBETAN LETTER KSSA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0fb7, 0x0f42, 0, 0, 0}, 0x0f43 }, // U0F43 # TIBETAN LETTER GHA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0fb7, 0x0f4c, 0, 0, 0}, 0x0f4d }, // U0F4D # TIBETAN LETTER DDHA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0fb7, 0x0f51, 0, 0, 0}, 0x0f52 }, // U0F52 # TIBETAN LETTER DHA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0fb7, 0x0f56, 0, 0, 0}, 0x0f57 }, // U0F57 # TIBETAN LETTER BHA -+ { {UNITIZE(Qt::Key_Multi_key), 0x0fb7, 0x0f5b, 0, 0, 0}, 0x0f5c }, // U0F5C # TIBETAN LETTER DZHA -+ { {UNITIZE(Qt::Key_Multi_key), 0x102e, 0x1025, 0, 0, 0}, 0x1026 }, // U1026 # MYANMAR LETTER UU -+ { {UNITIZE(Qt::Key_Multi_key), 0x1100, 0x1100, 0, 0, 0}, 0x1101 }, // U1101 # àà àà = áà -+ { {UNITIZE(Qt::Key_Multi_key), 0x1102, 0x1100, 0, 0, 0}, 0x1113 }, // U1113 # âà àà = óà -+ { {UNITIZE(Qt::Key_Multi_key), 0x1102, 0x1102, 0, 0, 0}, 0x1114 }, // U1114 # âà âà = ôà -+ { {UNITIZE(Qt::Key_Multi_key), 0x1102, 0x1103, 0, 0, 0}, 0x1115 }, // U1115 # âà ãà = õà -+ { {UNITIZE(Qt::Key_Multi_key), 0x1102, 0x1107, 0, 0, 0}, 0x1116 }, // U1116 # âà çà = öà -+ { {UNITIZE(Qt::Key_Multi_key), 0x1103, 0x1100, 0, 0, 0}, 0x1117 }, // U1117 # ãà àà = ÷à -+ { {UNITIZE(Qt::Key_Multi_key), 0x1103, 0x1103, 0, 0, 0}, 0x1104 }, // U1104 # ãà ãà = äà -+ { {UNITIZE(Qt::Key_Multi_key), 0x1105, 0x1102, 0, 0, 0}, 0x1118 }, // U1118 # åà âà = øà -+ { {UNITIZE(Qt::Key_Multi_key), 0x1105, 0x1105, 0, 0, 0}, 0x1119 }, // U1119 # åà åà = ùà -+ { {UNITIZE(Qt::Key_Multi_key), 0x1105, 0x110b, 0, 0, 0}, 0x111b }, // U111b # åà ëà = ûà -+ { {UNITIZE(Qt::Key_Multi_key), 0x1105, 0x1112, 0, 0, 0}, 0x111a }, // U111a # åà òà = úà -+ { {UNITIZE(Qt::Key_Multi_key), 0x1106, 0x1107, 0, 0, 0}, 0x111c }, // U111c # æà çà = üà -+ { {UNITIZE(Qt::Key_Multi_key), 0x1106, 0x110b, 0, 0, 0}, 0x111d }, // U111d # æà ëà = ýà -+ { {UNITIZE(Qt::Key_Multi_key), 0x1107, 0x1100, 0, 0, 0}, 0x111e }, // U111e # çà àà = þà -+ { {UNITIZE(Qt::Key_Multi_key), 0x1107, 0x1102, 0, 0, 0}, 0x111f }, // U111f # çà âà = ÿà -+ { {UNITIZE(Qt::Key_Multi_key), 0x1107, 0x1103, 0, 0, 0}, 0x1120 }, // U1120 # çà ãà =  à -+ { {UNITIZE(Qt::Key_Multi_key), 0x1107, 0x1107, 0, 0, 0}, 0x1108 }, // U1108 # çà çà = èà -+ { {UNITIZE(Qt::Key_Multi_key), 0x1107, 0x1107, 0x110b, 0, 0}, 0x112c }, // U112c # çà çà ëà = ¬à -+ { {UNITIZE(Qt::Key_Multi_key), 0x1107, 0x1109, 0, 0, 0}, 0x1121 }, // U1121 # çà éà = ¡à -+ { {UNITIZE(Qt::Key_Multi_key), 0x1107, 0x1109, 0x1100, 0, 0}, 0x1122 }, // U1122 # çà éà àà = ¢à -+ { {UNITIZE(Qt::Key_Multi_key), 0x1107, 0x1109, 0x1103, 0, 0}, 0x1123 }, // U1123 # çà éà ãà = £à -+ { {UNITIZE(Qt::Key_Multi_key), 0x1107, 0x1109, 0x1107, 0, 0}, 0x1124 }, // U1124 # çà éà çà = ¤à -+ { {UNITIZE(Qt::Key_Multi_key), 0x1107, 0x1109, 0x1109, 0, 0}, 0x1125 }, // U1125 # çà éà éà = ¥à -+ { {UNITIZE(Qt::Key_Multi_key), 0x1107, 0x1109, 0x110c, 0, 0}, 0x1126 }, // U1126 # çà éà ìà = ¦à -+ { {UNITIZE(Qt::Key_Multi_key), 0x1107, 0x110a, 0, 0, 0}, 0x1125 }, // U1125 # çà êà = ¥à -+ { {UNITIZE(Qt::Key_Multi_key), 0x1107, 0x110b, 0, 0, 0}, 0x112b }, // U112b # çà ëà = «à -+ { {UNITIZE(Qt::Key_Multi_key), 0x1107, 0x110c, 0, 0, 0}, 0x1127 }, // U1127 # çà ìà = §à -+ { {UNITIZE(Qt::Key_Multi_key), 0x1107, 0x110e, 0, 0, 0}, 0x1128 }, // U1128 # çà îà = ¨à -+ { {UNITIZE(Qt::Key_Multi_key), 0x1107, 0x1110, 0, 0, 0}, 0x1129 }, // U1129 # çà ðà = ©à -+ { {UNITIZE(Qt::Key_Multi_key), 0x1107, 0x1111, 0, 0, 0}, 0x112a }, // U112a # çà ñà = ªà -+ { {UNITIZE(Qt::Key_Multi_key), 0x1107, 0x112b, 0, 0, 0}, 0x112c }, // U112c # çà «à = ¬à -+ { {UNITIZE(Qt::Key_Multi_key), 0x1107, 0x112d, 0, 0, 0}, 0x1122 }, // U1122 # çà ­à = ¢à -+ { {UNITIZE(Qt::Key_Multi_key), 0x1107, 0x112f, 0, 0, 0}, 0x1123 }, // U1123 # çà ¯à = £à -+ { {UNITIZE(Qt::Key_Multi_key), 0x1107, 0x1132, 0, 0, 0}, 0x1124 }, // U1124 # çà ²à = ¤à -+ { {UNITIZE(Qt::Key_Multi_key), 0x1107, 0x1136, 0, 0, 0}, 0x1126 }, // U1126 # çà ¶à = ¦à -+ { {UNITIZE(Qt::Key_Multi_key), 0x1108, 0x110b, 0, 0, 0}, 0x112c }, // U112c # èà ëà = ¬à -+ { {UNITIZE(Qt::Key_Multi_key), 0x1109, 0x1100, 0, 0, 0}, 0x112d }, // U112d # éà àà = ­à -+ { {UNITIZE(Qt::Key_Multi_key), 0x1109, 0x1102, 0, 0, 0}, 0x112e }, // U112e # éà âà = ®à -+ { {UNITIZE(Qt::Key_Multi_key), 0x1109, 0x1103, 0, 0, 0}, 0x112f }, // U112f # éà ãà = ¯à -+ { {UNITIZE(Qt::Key_Multi_key), 0x1109, 0x1105, 0, 0, 0}, 0x1130 }, // U1130 # éà åà = °à -+ { {UNITIZE(Qt::Key_Multi_key), 0x1109, 0x1106, 0, 0, 0}, 0x1131 }, // U1131 # éà æà = ±à -+ { {UNITIZE(Qt::Key_Multi_key), 0x1109, 0x1107, 0, 0, 0}, 0x1132 }, // U1132 # éà çà = ²à -+ { {UNITIZE(Qt::Key_Multi_key), 0x1109, 0x1107, 0x1100, 0, 0}, 0x1133 }, // U1133 # éà çà àà = ³à -+ { {UNITIZE(Qt::Key_Multi_key), 0x1109, 0x1109, 0, 0, 0}, 0x110a }, // U110a # éà éà = êà -+ { {UNITIZE(Qt::Key_Multi_key), 0x1109, 0x1109, 0x1109, 0, 0}, 0x1134 }, // U1134 # éà éà éà = ´à -+ { {UNITIZE(Qt::Key_Multi_key), 0x1109, 0x110a, 0, 0, 0}, 0x1134 }, // U1134 # éà êà = ´à -+ { {UNITIZE(Qt::Key_Multi_key), 0x1109, 0x110b, 0, 0, 0}, 0x1135 }, // U1135 # éà ëà = µà -+ { {UNITIZE(Qt::Key_Multi_key), 0x1109, 0x110c, 0, 0, 0}, 0x1136 }, // U1136 # éà ìà = ¶à -+ { {UNITIZE(Qt::Key_Multi_key), 0x1109, 0x110e, 0, 0, 0}, 0x1137 }, // U1137 # éà îà = ·à -+ { {UNITIZE(Qt::Key_Multi_key), 0x1109, 0x110f, 0, 0, 0}, 0x1138 }, // U1138 # éà ïà = ¸à -+ { {UNITIZE(Qt::Key_Multi_key), 0x1109, 0x1110, 0, 0, 0}, 0x1139 }, // U1139 # éà ðà = ¹à -+ { {UNITIZE(Qt::Key_Multi_key), 0x1109, 0x1111, 0, 0, 0}, 0x113a }, // U113a # éà ñà = ºà -+ { {UNITIZE(Qt::Key_Multi_key), 0x1109, 0x1112, 0, 0, 0}, 0x113b }, // U113b # éà òà = »à -+ { {UNITIZE(Qt::Key_Multi_key), 0x1109, 0x111e, 0, 0, 0}, 0x1133 }, // U1133 # éà þà = ³à -+ { {UNITIZE(Qt::Key_Multi_key), 0x110a, 0x1109, 0, 0, 0}, 0x1134 }, // U1134 # êà éà = ´à -+ { {UNITIZE(Qt::Key_Multi_key), 0x110b, 0x1100, 0, 0, 0}, 0x1141 }, // U1141 # ëà àà = Áà -+ { {UNITIZE(Qt::Key_Multi_key), 0x110b, 0x1103, 0, 0, 0}, 0x1142 }, // U1142 # ëà ãà = Âà -+ { {UNITIZE(Qt::Key_Multi_key), 0x110b, 0x1106, 0, 0, 0}, 0x1143 }, // U1143 # ëà æà = Ãà -+ { {UNITIZE(Qt::Key_Multi_key), 0x110b, 0x1107, 0, 0, 0}, 0x1144 }, // U1144 # ëà çà = Äà -+ { {UNITIZE(Qt::Key_Multi_key), 0x110b, 0x1109, 0, 0, 0}, 0x1145 }, // U1145 # ëà éà = Åà -+ { {UNITIZE(Qt::Key_Multi_key), 0x110b, 0x110b, 0, 0, 0}, 0x1147 }, // U1147 # ëà ëà = Çà -+ { {UNITIZE(Qt::Key_Multi_key), 0x110b, 0x110c, 0, 0, 0}, 0x1148 }, // U1148 # ëà ìà = Èà -+ { {UNITIZE(Qt::Key_Multi_key), 0x110b, 0x110e, 0, 0, 0}, 0x1149 }, // U1149 # ëà îà = Éà -+ { {UNITIZE(Qt::Key_Multi_key), 0x110b, 0x1110, 0, 0, 0}, 0x114a }, // U114a # ëà ðà = Êà -+ { {UNITIZE(Qt::Key_Multi_key), 0x110b, 0x1111, 0, 0, 0}, 0x114b }, // U114b # ëà ñà = Ëà -+ { {UNITIZE(Qt::Key_Multi_key), 0x110b, 0x1140, 0, 0, 0}, 0x1146 }, // U1146 # ëà Àà = Æà -+ { {UNITIZE(Qt::Key_Multi_key), 0x110c, 0x110b, 0, 0, 0}, 0x114d }, // U114d # ìà ëà = Íà -+ { {UNITIZE(Qt::Key_Multi_key), 0x110c, 0x110c, 0, 0, 0}, 0x110d }, // U110d # ìà ìà = íà -+ { {UNITIZE(Qt::Key_Multi_key), 0x110e, 0x110f, 0, 0, 0}, 0x1152 }, // U1152 # îà ïà = Òà -+ { {UNITIZE(Qt::Key_Multi_key), 0x110e, 0x1112, 0, 0, 0}, 0x1153 }, // U1153 # îà òà = Óà -+ { {UNITIZE(Qt::Key_Multi_key), 0x1111, 0x1107, 0, 0, 0}, 0x1156 }, // U1156 # ñà çà = Öà -+ { {UNITIZE(Qt::Key_Multi_key), 0x1111, 0x110b, 0, 0, 0}, 0x1157 }, // U1157 # ñà ëà = ×à -+ { {UNITIZE(Qt::Key_Multi_key), 0x1112, 0x1112, 0, 0, 0}, 0x1158 }, // U1158 # òà òà = Øà -+ { {UNITIZE(Qt::Key_Multi_key), 0x1121, 0x1100, 0, 0, 0}, 0x1122 }, // U1122 # ¡à àà = ¢à -+ { {UNITIZE(Qt::Key_Multi_key), 0x1121, 0x1103, 0, 0, 0}, 0x1123 }, // U1123 # ¡à ãà = £à -+ { {UNITIZE(Qt::Key_Multi_key), 0x1121, 0x1107, 0, 0, 0}, 0x1124 }, // U1124 # ¡à çà = ¤à -+ { {UNITIZE(Qt::Key_Multi_key), 0x1121, 0x1109, 0, 0, 0}, 0x1125 }, // U1125 # ¡à éà = ¥à -+ { {UNITIZE(Qt::Key_Multi_key), 0x1121, 0x110c, 0, 0, 0}, 0x1126 }, // U1126 # ¡à ìà = ¦à -+ { {UNITIZE(Qt::Key_Multi_key), 0x1132, 0x1100, 0, 0, 0}, 0x1133 }, // U1133 # ²à àà = ³à -+ { {UNITIZE(Qt::Key_Multi_key), 0x113c, 0x113c, 0, 0, 0}, 0x113d }, // U113d # ¼à ¼à = ½à -+ { {UNITIZE(Qt::Key_Multi_key), 0x113e, 0x113e, 0, 0, 0}, 0x113f }, // U113f # ¾à ¾à = ¿à -+ { {UNITIZE(Qt::Key_Multi_key), 0x114e, 0x114e, 0, 0, 0}, 0x114f }, // U114f # Îà Îà = Ïà -+ { {UNITIZE(Qt::Key_Multi_key), 0x1150, 0x1150, 0, 0, 0}, 0x1151 }, // U1151 # Ðà Ðà = Ñà -+ { {UNITIZE(Qt::Key_Multi_key), 0x1161, 0x1169, 0, 0, 0}, 0x1176 }, // U1176 # ßá ßé = ßö -+ { {UNITIZE(Qt::Key_Multi_key), 0x1161, 0x116e, 0, 0, 0}, 0x1177 }, // U1177 # ßá ßî = ß÷ -+ { {UNITIZE(Qt::Key_Multi_key), 0x1161, 0x1175, 0, 0, 0}, 0x1162 }, // U1162 # ßá ßõ = ßâ -+ { {UNITIZE(Qt::Key_Multi_key), 0x1163, 0x1169, 0, 0, 0}, 0x1178 }, // U1178 # ßã ßé = ßø -+ { {UNITIZE(Qt::Key_Multi_key), 0x1163, 0x116d, 0, 0, 0}, 0x1179 }, // U1179 # ßã ßí = ßù -+ { {UNITIZE(Qt::Key_Multi_key), 0x1163, 0x1175, 0, 0, 0}, 0x1164 }, // U1164 # ßã ßõ = ßä -+ { {UNITIZE(Qt::Key_Multi_key), 0x1165, 0x1169, 0, 0, 0}, 0x117a }, // U117a # ßå ßé = ßú -+ { {UNITIZE(Qt::Key_Multi_key), 0x1165, 0x116e, 0, 0, 0}, 0x117b }, // U117b # ßå ßî = ßû -+ { {UNITIZE(Qt::Key_Multi_key), 0x1165, 0x1173, 0, 0, 0}, 0x117c }, // U117c # ßå ßó = ßü -+ { {UNITIZE(Qt::Key_Multi_key), 0x1165, 0x1175, 0, 0, 0}, 0x1166 }, // U1166 # ßå ßõ = ßæ -+ { {UNITIZE(Qt::Key_Multi_key), 0x1167, 0x1169, 0, 0, 0}, 0x117d }, // U117d # ßç ßé = ßý -+ { {UNITIZE(Qt::Key_Multi_key), 0x1167, 0x116e, 0, 0, 0}, 0x117e }, // U117e # ßç ßî = ßþ -+ { {UNITIZE(Qt::Key_Multi_key), 0x1167, 0x1175, 0, 0, 0}, 0x1168 }, // U1168 # ßç ßõ = ßè -+ { {UNITIZE(Qt::Key_Multi_key), 0x1169, 0x1161, 0, 0, 0}, 0x116a }, // U116a # ßé ßá = ßê -+ { {UNITIZE(Qt::Key_Multi_key), 0x1169, 0x1161, 0x1175, 0, 0}, 0x116b }, // U116b # ßé ßá ßõ = ßë -+ { {UNITIZE(Qt::Key_Multi_key), 0x1169, 0x1162, 0, 0, 0}, 0x116b }, // U116b # ßé ßâ = ßë -+ { {UNITIZE(Qt::Key_Multi_key), 0x1169, 0x1165, 0, 0, 0}, 0x117f }, // U117f # ßé ßå = ßÿ -+ { {UNITIZE(Qt::Key_Multi_key), 0x1169, 0x1166, 0, 0, 0}, 0x1180 }, // U1180 # ßé ßæ = ß  -+ { {UNITIZE(Qt::Key_Multi_key), 0x1169, 0x1168, 0, 0, 0}, 0x1181 }, // U1181 # ßé ßè = ß¡ -+ { {UNITIZE(Qt::Key_Multi_key), 0x1169, 0x1169, 0, 0, 0}, 0x1182 }, // U1182 # ßé ßé = ߢ -+ { {UNITIZE(Qt::Key_Multi_key), 0x1169, 0x116e, 0, 0, 0}, 0x1183 }, // U1183 # ßé ßî = ߣ -+ { {UNITIZE(Qt::Key_Multi_key), 0x1169, 0x1175, 0, 0, 0}, 0x116c }, // U116c # ßé ßõ = ßì -+ { {UNITIZE(Qt::Key_Multi_key), 0x116a, 0x1175, 0, 0, 0}, 0x116b }, // U116b # ßê ßõ = ßë -+ { {UNITIZE(Qt::Key_Multi_key), 0x116d, 0x1163, 0, 0, 0}, 0x1184 }, // U1184 # ßí ßã = ߤ -+ { {UNITIZE(Qt::Key_Multi_key), 0x116d, 0x1164, 0, 0, 0}, 0x1185 }, // U1185 # ßí ßä = ߥ -+ { {UNITIZE(Qt::Key_Multi_key), 0x116d, 0x1167, 0, 0, 0}, 0x1186 }, // U1186 # ßí ßç = ߦ -+ { {UNITIZE(Qt::Key_Multi_key), 0x116d, 0x1169, 0, 0, 0}, 0x1187 }, // U1187 # ßí ßé = ߧ -+ { {UNITIZE(Qt::Key_Multi_key), 0x116d, 0x1175, 0, 0, 0}, 0x1188 }, // U1188 # ßí ßõ = ߨ -+ { {UNITIZE(Qt::Key_Multi_key), 0x116e, 0x1161, 0, 0, 0}, 0x1189 }, // U1189 # ßî ßá = ß© -+ { {UNITIZE(Qt::Key_Multi_key), 0x116e, 0x1162, 0, 0, 0}, 0x118a }, // U118a # ßî ßâ = ߪ -+ { {UNITIZE(Qt::Key_Multi_key), 0x116e, 0x1165, 0, 0, 0}, 0x116f }, // U116f # ßî ßå = ßï -+ { {UNITIZE(Qt::Key_Multi_key), 0x116e, 0x1165, 0x1173, 0, 0}, 0x118b }, // U118b # ßî ßå ßó = ß« -+ { {UNITIZE(Qt::Key_Multi_key), 0x116e, 0x1165, 0x1175, 0, 0}, 0x1170 }, // U1170 # ßî ßå ßõ = ßð -+ { {UNITIZE(Qt::Key_Multi_key), 0x116e, 0x1166, 0, 0, 0}, 0x1170 }, // U1170 # ßî ßæ = ßð -+ { {UNITIZE(Qt::Key_Multi_key), 0x116e, 0x1168, 0, 0, 0}, 0x118c }, // U118c # ßî ßè = ߬ -+ { {UNITIZE(Qt::Key_Multi_key), 0x116e, 0x116e, 0, 0, 0}, 0x118d }, // U118d # ßî ßî = ß­ -+ { {UNITIZE(Qt::Key_Multi_key), 0x116e, 0x1175, 0, 0, 0}, 0x1171 }, // U1171 # ßî ßõ = ßñ -+ { {UNITIZE(Qt::Key_Multi_key), 0x116e, 0x117c, 0, 0, 0}, 0x118b }, // U118b # ßî ßü = ß« -+ { {UNITIZE(Qt::Key_Multi_key), 0x116f, 0x1173, 0, 0, 0}, 0x118b }, // U118b # ßï ßó = ß« -+ { {UNITIZE(Qt::Key_Multi_key), 0x116f, 0x1175, 0, 0, 0}, 0x1170 }, // U1170 # ßï ßõ = ßð -+ { {UNITIZE(Qt::Key_Multi_key), 0x1172, 0x1161, 0, 0, 0}, 0x118e }, // U118e # ßò ßá = ß® -+ { {UNITIZE(Qt::Key_Multi_key), 0x1172, 0x1165, 0, 0, 0}, 0x118f }, // U118f # ßò ßå = ߯ -+ { {UNITIZE(Qt::Key_Multi_key), 0x1172, 0x1166, 0, 0, 0}, 0x1190 }, // U1190 # ßò ßæ = ß° -+ { {UNITIZE(Qt::Key_Multi_key), 0x1172, 0x1167, 0, 0, 0}, 0x1191 }, // U1191 # ßò ßç = ß± -+ { {UNITIZE(Qt::Key_Multi_key), 0x1172, 0x1168, 0, 0, 0}, 0x1192 }, // U1192 # ßò ßè = ß² -+ { {UNITIZE(Qt::Key_Multi_key), 0x1172, 0x116e, 0, 0, 0}, 0x1193 }, // U1193 # ßò ßî = ß³ -+ { {UNITIZE(Qt::Key_Multi_key), 0x1172, 0x1175, 0, 0, 0}, 0x1194 }, // U1194 # ßò ßõ = ß´ -+ { {UNITIZE(Qt::Key_Multi_key), 0x1173, 0x116e, 0, 0, 0}, 0x1195 }, // U1195 # ßó ßî = ßµ -+ { {UNITIZE(Qt::Key_Multi_key), 0x1173, 0x1173, 0, 0, 0}, 0x1196 }, // U1196 # ßó ßó = ߶ -+ { {UNITIZE(Qt::Key_Multi_key), 0x1173, 0x1175, 0, 0, 0}, 0x1174 }, // U1174 # ßó ßõ = ßô -+ { {UNITIZE(Qt::Key_Multi_key), 0x1174, 0x116e, 0, 0, 0}, 0x1197 }, // U1197 # ßô ßî = ß· -+ { {UNITIZE(Qt::Key_Multi_key), 0x1175, 0x1161, 0, 0, 0}, 0x1198 }, // U1198 # ßõ ßá = ߸ -+ { {UNITIZE(Qt::Key_Multi_key), 0x1175, 0x1163, 0, 0, 0}, 0x1199 }, // U1199 # ßõ ßã = ß¹ -+ { {UNITIZE(Qt::Key_Multi_key), 0x1175, 0x1169, 0, 0, 0}, 0x119a }, // U119a # ßõ ßé = ߺ -+ { {UNITIZE(Qt::Key_Multi_key), 0x1175, 0x116e, 0, 0, 0}, 0x119b }, // U119b # ßõ ßî = ß» -+ { {UNITIZE(Qt::Key_Multi_key), 0x1175, 0x1173, 0, 0, 0}, 0x119c }, // U119c # ßõ ßó = ß¼ -+ { {UNITIZE(Qt::Key_Multi_key), 0x1175, 0x119e, 0, 0, 0}, 0x119d }, // U119d # ßõ ß¾ = ß½ -+ { {UNITIZE(Qt::Key_Multi_key), 0x119e, 0x1165, 0, 0, 0}, 0x119f }, // U119f # ß¾ ßå = ß¿ -+ { {UNITIZE(Qt::Key_Multi_key), 0x119e, 0x116e, 0, 0, 0}, 0x11a0 }, // U11a0 # ß¾ ßî = ßÀ -+ { {UNITIZE(Qt::Key_Multi_key), 0x119e, 0x1175, 0, 0, 0}, 0x11a1 }, // U11a1 # ß¾ ßõ = ßÁ -+ { {UNITIZE(Qt::Key_Multi_key), 0x119e, 0x119e, 0, 0, 0}, 0x11a2 }, // U11a2 # ß¾ ß¾ = ß -+ { {UNITIZE(Qt::Key_Multi_key), 0x11a8, 0x11a8, 0, 0, 0}, 0x11a9 }, // U11a9 # ßàÈ ßàÈ = ßàÉ -+ { {UNITIZE(Qt::Key_Multi_key), 0x11a8, 0x11af, 0, 0, 0}, 0x11c3 }, // U11c3 # ßàÈ ßàÏ = ßàã -+ { {UNITIZE(Qt::Key_Multi_key), 0x11a8, 0x11ba, 0, 0, 0}, 0x11aa }, // U11aa # ßàÈ ßàÚ = ßàÊ -+ { {UNITIZE(Qt::Key_Multi_key), 0x11a8, 0x11ba, 0x11a8, 0, 0}, 0x11c4 }, // U11c4 # ßàÈ ßàÚ ßàÈ = ßàä -+ { {UNITIZE(Qt::Key_Multi_key), 0x11a8, 0x11e7, 0, 0, 0}, 0x11c4 }, // U11c4 # ßàÈ ßৠ= ßàä -+ { {UNITIZE(Qt::Key_Multi_key), 0x11aa, 0x11a8, 0, 0, 0}, 0x11c4 }, // U11c4 # ßàÊ ßàÈ = ßàä -+ { {UNITIZE(Qt::Key_Multi_key), 0x11ab, 0x11a8, 0, 0, 0}, 0x11c5 }, // U11c5 # ßàË ßàÈ = ßàå -+ { {UNITIZE(Qt::Key_Multi_key), 0x11ab, 0x11ae, 0, 0, 0}, 0x11c6 }, // U11c6 # ßàË ßàÎ = ßàæ -+ { {UNITIZE(Qt::Key_Multi_key), 0x11ab, 0x11ba, 0, 0, 0}, 0x11c7 }, // U11c7 # ßàË ßàÚ = ßàç -+ { {UNITIZE(Qt::Key_Multi_key), 0x11ab, 0x11bd, 0, 0, 0}, 0x11ac }, // U11ac # ßàË ßàÝ = ßàÌ -+ { {UNITIZE(Qt::Key_Multi_key), 0x11ab, 0x11c0, 0, 0, 0}, 0x11c9 }, // U11c9 # ßàË ßàà = ßàé -+ { {UNITIZE(Qt::Key_Multi_key), 0x11ab, 0x11c2, 0, 0, 0}, 0x11ad }, // U11ad # ßàË ßàâ = ßàÍ -+ { {UNITIZE(Qt::Key_Multi_key), 0x11ab, 0x11eb, 0, 0, 0}, 0x11c8 }, // U11c8 # ßàË ßà« = ßàè -+ { {UNITIZE(Qt::Key_Multi_key), 0x11ae, 0x11a8, 0, 0, 0}, 0x11ca }, // U11ca # ßàÎ ßàÈ = ßàê -+ { {UNITIZE(Qt::Key_Multi_key), 0x11ae, 0x11af, 0, 0, 0}, 0x11cb }, // U11cb # ßàÎ ßàÏ = ßàë -+ { {UNITIZE(Qt::Key_Multi_key), 0x11af, 0x11a8, 0, 0, 0}, 0x11b0 }, // U11b0 # ßàÏ ßàÈ = ßàÐ -+ { {UNITIZE(Qt::Key_Multi_key), 0x11af, 0x11a8, 0x11ba, 0, 0}, 0x11cc }, // U11cc # ßàÏ ßàÈ ßàÚ = ßàì -+ { {UNITIZE(Qt::Key_Multi_key), 0x11af, 0x11aa, 0, 0, 0}, 0x11cc }, // U11cc # ßàÏ ßàÊ = ßàì -+ { {UNITIZE(Qt::Key_Multi_key), 0x11af, 0x11ab, 0, 0, 0}, 0x11cd }, // U11cd # ßàÏ ßàË = ßàí -+ { {UNITIZE(Qt::Key_Multi_key), 0x11af, 0x11ae, 0, 0, 0}, 0x11ce }, // U11ce # ßàÏ ßàÎ = ßàî -+ { {UNITIZE(Qt::Key_Multi_key), 0x11af, 0x11ae, 0x11c2, 0, 0}, 0x11cf }, // U11cf # ßàÏ ßàÎ ßàâ = ßàï -+ { {UNITIZE(Qt::Key_Multi_key), 0x11af, 0x11af, 0, 0, 0}, 0x11d0 }, // U11d0 # ßàÏ ßàÏ = ßàð -+ { {UNITIZE(Qt::Key_Multi_key), 0x11af, 0x11b7, 0, 0, 0}, 0x11b1 }, // U11b1 # ßàÏ ßà× = ßàÑ -+ { {UNITIZE(Qt::Key_Multi_key), 0x11af, 0x11b7, 0x11a8, 0, 0}, 0x11d1 }, // U11d1 # ßàÏ ßà× ßàÈ = ßàñ -+ { {UNITIZE(Qt::Key_Multi_key), 0x11af, 0x11b7, 0x11ba, 0, 0}, 0x11d2 }, // U11d2 # ßàÏ ßà× ßàÚ = ßàò -+ { {UNITIZE(Qt::Key_Multi_key), 0x11af, 0x11b8, 0, 0, 0}, 0x11b2 }, // U11b2 # ßàÏ ßàØ = ßàÒ -+ { {UNITIZE(Qt::Key_Multi_key), 0x11af, 0x11b8, 0x11ba, 0, 0}, 0x11d3 }, // U11d3 # ßàÏ ßàØ ßàÚ = ßàó -+ { {UNITIZE(Qt::Key_Multi_key), 0x11af, 0x11b8, 0x11bc, 0, 0}, 0x11d5 }, // U11d5 # ßàÏ ßàØ ßàÜ = ßàõ -+ { {UNITIZE(Qt::Key_Multi_key), 0x11af, 0x11b8, 0x11c2, 0, 0}, 0x11d4 }, // U11d4 # ßàÏ ßàØ ßàâ = ßàô -+ { {UNITIZE(Qt::Key_Multi_key), 0x11af, 0x11b9, 0, 0, 0}, 0x11d3 }, // U11d3 # ßàÏ ßàÙ = ßàó -+ { {UNITIZE(Qt::Key_Multi_key), 0x11af, 0x11ba, 0, 0, 0}, 0x11b3 }, // U11b3 # ßàÏ ßàÚ = ßàÓ -+ { {UNITIZE(Qt::Key_Multi_key), 0x11af, 0x11ba, 0x11ba, 0, 0}, 0x11d6 }, // U11d6 # ßàÏ ßàÚ ßàÚ = ßàö -+ { {UNITIZE(Qt::Key_Multi_key), 0x11af, 0x11bb, 0, 0, 0}, 0x11d6 }, // U11d6 # ßàÏ ßàÛ = ßàö -+ { {UNITIZE(Qt::Key_Multi_key), 0x11af, 0x11bf, 0, 0, 0}, 0x11d8 }, // U11d8 # ßàÏ ßàß = ßàø -+ { {UNITIZE(Qt::Key_Multi_key), 0x11af, 0x11c0, 0, 0, 0}, 0x11b4 }, // U11b4 # ßàÏ ßàà = ßàÔ -+ { {UNITIZE(Qt::Key_Multi_key), 0x11af, 0x11c1, 0, 0, 0}, 0x11b5 }, // U11b5 # ßàÏ ßàá = ßàÕ -+ { {UNITIZE(Qt::Key_Multi_key), 0x11af, 0x11c2, 0, 0, 0}, 0x11b6 }, // U11b6 # ßàÏ ßàâ = ßàÖ -+ { {UNITIZE(Qt::Key_Multi_key), 0x11af, 0x11da, 0, 0, 0}, 0x11d1 }, // U11d1 # ßàÏ ßàú = ßàñ -+ { {UNITIZE(Qt::Key_Multi_key), 0x11af, 0x11dd, 0, 0, 0}, 0x11d2 }, // U11d2 # ßàÏ ßàý = ßàò -+ { {UNITIZE(Qt::Key_Multi_key), 0x11af, 0x11e5, 0, 0, 0}, 0x11d4 }, // U11d4 # ßàÏ ßॠ= ßàô -+ { {UNITIZE(Qt::Key_Multi_key), 0x11af, 0x11e6, 0, 0, 0}, 0x11d5 }, // U11d5 # ßàÏ ßঠ= ßàõ -+ { {UNITIZE(Qt::Key_Multi_key), 0x11af, 0x11eb, 0, 0, 0}, 0x11d7 }, // U11d7 # ßàÏ ßà« = ßà÷ -+ { {UNITIZE(Qt::Key_Multi_key), 0x11af, 0x11f9, 0, 0, 0}, 0x11d9 }, // U11d9 # ßàÏ ß๠= ßàù -+ { {UNITIZE(Qt::Key_Multi_key), 0x11b0, 0x11ba, 0, 0, 0}, 0x11cc }, // U11cc # ßàÐ ßàÚ = ßàì -+ { {UNITIZE(Qt::Key_Multi_key), 0x11b1, 0x11a8, 0, 0, 0}, 0x11d1 }, // U11d1 # ßàÑ ßàÈ = ßàñ -+ { {UNITIZE(Qt::Key_Multi_key), 0x11b1, 0x11ba, 0, 0, 0}, 0x11d2 }, // U11d2 # ßàÑ ßàÚ = ßàò -+ { {UNITIZE(Qt::Key_Multi_key), 0x11b2, 0x11ba, 0, 0, 0}, 0x11d3 }, // U11d3 # ßàÒ ßàÚ = ßàó -+ { {UNITIZE(Qt::Key_Multi_key), 0x11b2, 0x11bc, 0, 0, 0}, 0x11d5 }, // U11d5 # ßàÒ ßàÜ = ßàõ -+ { {UNITIZE(Qt::Key_Multi_key), 0x11b2, 0x11c2, 0, 0, 0}, 0x11d4 }, // U11d4 # ßàÒ ßàâ = ßàô -+ { {UNITIZE(Qt::Key_Multi_key), 0x11b3, 0x11ba, 0, 0, 0}, 0x11d6 }, // U11d6 # ßàÓ ßàÚ = ßàö -+ { {UNITIZE(Qt::Key_Multi_key), 0x11b7, 0x11a8, 0, 0, 0}, 0x11da }, // U11da # ßà× ßàÈ = ßàú -+ { {UNITIZE(Qt::Key_Multi_key), 0x11b7, 0x11af, 0, 0, 0}, 0x11db }, // U11db # ßà× ßàÏ = ßàû -+ { {UNITIZE(Qt::Key_Multi_key), 0x11b7, 0x11b8, 0, 0, 0}, 0x11dc }, // U11dc # ßà× ßàØ = ßàü -+ { {UNITIZE(Qt::Key_Multi_key), 0x11b7, 0x11ba, 0, 0, 0}, 0x11dd }, // U11dd # ßà× ßàÚ = ßàý -+ { {UNITIZE(Qt::Key_Multi_key), 0x11b7, 0x11ba, 0x11ba, 0, 0}, 0x11de }, // U11de # ßà× ßàÚ ßàÚ = ßàþ -+ { {UNITIZE(Qt::Key_Multi_key), 0x11b7, 0x11bb, 0, 0, 0}, 0x11de }, // U11de # ßà× ßàÛ = ßàþ -+ { {UNITIZE(Qt::Key_Multi_key), 0x11b7, 0x11bc, 0, 0, 0}, 0x11e2 }, // U11e2 # ßà× ßàÜ = ßࢠ-+ { {UNITIZE(Qt::Key_Multi_key), 0x11b7, 0x11be, 0, 0, 0}, 0x11e0 }, // U11e0 # ßà× ßàÞ = ßà  -+ { {UNITIZE(Qt::Key_Multi_key), 0x11b7, 0x11c2, 0, 0, 0}, 0x11e1 }, // U11e1 # ßà× ßàâ = ßà¡ -+ { {UNITIZE(Qt::Key_Multi_key), 0x11b7, 0x11eb, 0, 0, 0}, 0x11df }, // U11df # ßà× ßà« = ßàÿ -+ { {UNITIZE(Qt::Key_Multi_key), 0x11b8, 0x11af, 0, 0, 0}, 0x11e3 }, // U11e3 # ßàØ ßàÏ = ß࣠-+ { {UNITIZE(Qt::Key_Multi_key), 0x11b8, 0x11ba, 0, 0, 0}, 0x11b9 }, // U11b9 # ßàØ ßàÚ = ßàÙ -+ { {UNITIZE(Qt::Key_Multi_key), 0x11b8, 0x11bc, 0, 0, 0}, 0x11e6 }, // U11e6 # ßàØ ßàÜ = ßঠ-+ { {UNITIZE(Qt::Key_Multi_key), 0x11b8, 0x11c1, 0, 0, 0}, 0x11e4 }, // U11e4 # ßàØ ßàá = ßठ-+ { {UNITIZE(Qt::Key_Multi_key), 0x11b8, 0x11c2, 0, 0, 0}, 0x11e5 }, // U11e5 # ßàØ ßàâ = ßॠ-+ { {UNITIZE(Qt::Key_Multi_key), 0x11ba, 0x11a8, 0, 0, 0}, 0x11e7 }, // U11e7 # ßàÚ ßàÈ = ßৠ-+ { {UNITIZE(Qt::Key_Multi_key), 0x11ba, 0x11ae, 0, 0, 0}, 0x11e8 }, // U11e8 # ßàÚ ßàÎ = ßਠ-+ { {UNITIZE(Qt::Key_Multi_key), 0x11ba, 0x11af, 0, 0, 0}, 0x11e9 }, // U11e9 # ßàÚ ßàÏ = ßà© -+ { {UNITIZE(Qt::Key_Multi_key), 0x11ba, 0x11b8, 0, 0, 0}, 0x11ea }, // U11ea # ßàÚ ßàØ = ßઠ-+ { {UNITIZE(Qt::Key_Multi_key), 0x11ba, 0x11ba, 0, 0, 0}, 0x11bb }, // U11bb # ßàÚ ßàÚ = ßàÛ -+ { {UNITIZE(Qt::Key_Multi_key), 0x11bc, 0x11a8, 0, 0, 0}, 0x11ec }, // U11ec # ßàÜ ßàÈ = ßଠ-+ { {UNITIZE(Qt::Key_Multi_key), 0x11bc, 0x11a8, 0x11a8, 0, 0}, 0x11ed }, // U11ed # ßàÜ ßàÈ ßàÈ = ßà­ -+ { {UNITIZE(Qt::Key_Multi_key), 0x11bc, 0x11a9, 0, 0, 0}, 0x11ed }, // U11ed # ßàÜ ßàÉ = ßà­ -+ { {UNITIZE(Qt::Key_Multi_key), 0x11bc, 0x11bc, 0, 0, 0}, 0x11ee }, // U11ee # ßàÜ ßàÜ = ßà® -+ { {UNITIZE(Qt::Key_Multi_key), 0x11bc, 0x11bf, 0, 0, 0}, 0x11ef }, // U11ef # ßàÜ ßàß = ß௠-+ { {UNITIZE(Qt::Key_Multi_key), 0x11c1, 0x11b8, 0, 0, 0}, 0x11f3 }, // U11f3 # ßàá ßàØ = ßà³ -+ { {UNITIZE(Qt::Key_Multi_key), 0x11c1, 0x11bc, 0, 0, 0}, 0x11f4 }, // U11f4 # ßàá ßàÜ = ßà´ -+ { {UNITIZE(Qt::Key_Multi_key), 0x11c2, 0x11ab, 0, 0, 0}, 0x11f5 }, // U11f5 # ßàâ ßàË = ßൠ-+ { {UNITIZE(Qt::Key_Multi_key), 0x11c2, 0x11af, 0, 0, 0}, 0x11f6 }, // U11f6 # ßàâ ßàÏ = ßච-+ { {UNITIZE(Qt::Key_Multi_key), 0x11c2, 0x11b7, 0, 0, 0}, 0x11f7 }, // U11f7 # ßàâ ßà× = ßà· -+ { {UNITIZE(Qt::Key_Multi_key), 0x11c2, 0x11b8, 0, 0, 0}, 0x11f8 }, // U11f8 # ßàâ ßàØ = ßภ-+ { {UNITIZE(Qt::Key_Multi_key), 0x11ce, 0x11c2, 0, 0, 0}, 0x11cf }, // U11cf # ßàî ßàâ = ßàï -+ { {UNITIZE(Qt::Key_Multi_key), 0x11dd, 0x11ba, 0, 0, 0}, 0x11de }, // U11de # ßàý ßàÚ = ßàþ -+ { {UNITIZE(Qt::Key_Multi_key), 0x11ec, 0x11a8, 0, 0, 0}, 0x11ed }, // U11ed # ßଠßàÈ = ßà­ -+ { {UNITIZE(Qt::Key_Multi_key), 0x11f0, 0x11ba, 0, 0, 0}, 0x11f1 }, // U11f1 # ßà° ßàÚ = ßà± -+ { {UNITIZE(Qt::Key_Multi_key), 0x11f0, 0x11eb, 0, 0, 0}, 0x11f2 }, // U11f2 # ßà° ßà« = ßಠ-+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x1d157, 0x1d165, 0, 0, 0}, 0xd15e }, // U1D15E # MUSICAL SYMBOL HALF NOTE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x1d158, 0x1d165, 0, 0, 0}, 0xd15f }, // U1D15F # MUSICAL SYMBOL QUARTER NOTE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x1d158, 0x1d165, 0x1d16e, 0, 0}, 0xd160 }, // U1D160 # MUSICAL SYMBOL EIGHTH NOTE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x1d158, 0x1d165, 0x1d16f, 0, 0}, 0xd161 }, // U1D161 # MUSICAL SYMBOL SIXTEENTH NOTE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x1d158, 0x1d165, 0x1d170, 0, 0}, 0xd162 }, // U1D162 # MUSICAL SYMBOL THIRTY-SECOND NOTE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x1d158, 0x1d165, 0x1d171, 0, 0}, 0xd163 }, // U1D163 # MUSICAL SYMBOL SIXTY-FOURTH NOTE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x1d158, 0x1d165, 0x1d172, 0, 0}, 0xd164 }, // U1D164 # MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x1d15f, 0x1d16e, 0, 0, 0}, 0xd160 }, // U1D160 # MUSICAL SYMBOL EIGHTH NOTE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x1d15f, 0x1d16f, 0, 0, 0}, 0xd161 }, // U1D161 # MUSICAL SYMBOL SIXTEENTH NOTE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x1d15f, 0x1d170, 0, 0, 0}, 0xd162 }, // U1D162 # MUSICAL SYMBOL THIRTY-SECOND NOTE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x1d15f, 0x1d171, 0, 0, 0}, 0xd163 }, // U1D163 # MUSICAL SYMBOL SIXTY-FOURTH NOTE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x1d15f, 0x1d172, 0, 0, 0}, 0xd164 }, // U1D164 # MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x1d1b9, 0x1d165, 0, 0, 0}, 0xd1bb }, // U1D1BB # MUSICAL SYMBOL MINIMA -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x1d1b9, 0x1d165, 0x1d16e, 0, 0}, 0xd1bd }, // U1D1BD # MUSICAL SYMBOL SEMIMINIMA WHITE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x1d1b9, 0x1d165, 0x1d16f, 0, 0}, 0xd1bf }, // U1D1BF # MUSICAL SYMBOL FUSA WHITE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x1d1ba, 0x1d165, 0, 0, 0}, 0xd1bc }, // U1D1BC # MUSICAL SYMBOL MINIMA BLACK -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x1d1ba, 0x1d165, 0x1d16e, 0, 0}, 0xd1be }, // U1D1BE # MUSICAL SYMBOL SEMIMINIMA BLACK -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x1d1ba, 0x1d165, 0x1d16f, 0, 0}, 0xd1c0 }, // U1D1C0 # MUSICAL SYMBOL FUSA BLACK -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x1d1bb, 0x1d16e, 0, 0, 0}, 0xd1bd }, // U1D1BD # MUSICAL SYMBOL SEMIMINIMA WHITE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x1d1bb, 0x1d16f, 0, 0, 0}, 0xd1bf }, // U1D1BF # MUSICAL SYMBOL FUSA WHITE -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x1d1bc, 0x1d16e, 0, 0, 0}, 0xd1be }, // U1D1BE # MUSICAL SYMBOL SEMIMINIMA BLACK -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x1d1bc, 0x1d16f, 0, 0, 0}, 0xd1c0 }, // U1D1C0 # MUSICAL SYMBOL FUSA BLACK -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x1fbf, 0x0000, 0, 0, 0}, 0x1fcd }, // U1FCD # GREEK PSILI AND VARIA -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x1fbf, 0x0000, 0, 0, 0}, 0x1fce }, // U1FCE # GREEK PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x1fbf, 0x0027, 0, 0, 0}, 0x1fce }, // U1FCE # GREEK PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x1fbf, 0x0060, 0, 0, 0}, 0x1fcd }, // U1FCD # GREEK PSILI AND VARIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x1fbf, 0x007e, 0, 0, 0}, 0x1fcf }, // U1FCF # GREEK PSILI AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x1fbf, 0x00b4, 0, 0, 0}, 0x1fce }, // U1FCE # GREEK PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x1fbf, 0x0342, 0, 0, 0}, 0x1fcf }, // U1FCF # GREEK PSILI AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x1fbf, UNITIZE(Qt::Key_Dead_Grave), 0, 0, 0}, 0x1fcd }, // U1FCD # GREEK PSILI AND VARIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x1fbf, UNITIZE(Qt::Key_Dead_Acute), 0, 0, 0}, 0x1fce }, // U1FCE # GREEK PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x1fbf, UNITIZE(Qt::Key_Dead_Tilde), 0, 0, 0}, 0x1fcf }, // U1FCF # GREEK PSILI AND PERISPOMENI -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x1ffe, 0x0000, 0, 0, 0}, 0x1fdd }, // U1FDD # GREEK DASIA AND VARIA -+// /* broken */ { {UNITIZE(Qt::Key_Multi_key), 0x1ffe, 0x0000, 0, 0, 0}, 0x1fde }, // U1FDE # GREEK DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x1ffe, 0x0027, 0, 0, 0}, 0x1fde }, // U1FDE # GREEK DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x1ffe, 0x0060, 0, 0, 0}, 0x1fdd }, // U1FDD # GREEK DASIA AND VARIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x1ffe, 0x007e, 0, 0, 0}, 0x1fdf }, // U1FDF # GREEK DASIA AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x1ffe, 0x00b4, 0, 0, 0}, 0x1fde }, // U1FDE # GREEK DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x1ffe, 0x0342, 0, 0, 0}, 0x1fdf }, // U1FDF # GREEK DASIA AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x1ffe, UNITIZE(Qt::Key_Dead_Grave), 0, 0, 0}, 0x1fdd }, // U1FDD # GREEK DASIA AND VARIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x1ffe, UNITIZE(Qt::Key_Dead_Acute), 0, 0, 0}, 0x1fde }, // U1FDE # GREEK DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Multi_key), 0x1ffe, UNITIZE(Qt::Key_Dead_Tilde), 0, 0, 0}, 0x1fdf }, // U1FDF # GREEK DASIA AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Multi_key), 0x2203, 0x0338, 0, 0, 0}, 0x2204 }, // U2204 # THERE DOES NOT EXIST -+ { {UNITIZE(Qt::Key_Multi_key), 0x2208, 0x0338, 0, 0, 0}, 0x2209 }, // U2209 # NOT AN ELEMENT OF -+ { {UNITIZE(Qt::Key_Multi_key), 0x220b, 0x0338, 0, 0, 0}, 0x220c }, // U220C # DOES NOT CONTAIN AS MEMBER -+ { {UNITIZE(Qt::Key_Multi_key), 0x2223, 0x0338, 0, 0, 0}, 0x2224 }, // U2224 # DOES NOT DIVIDE -+ { {UNITIZE(Qt::Key_Multi_key), 0x2225, 0x0338, 0, 0, 0}, 0x2226 }, // U2226 # NOT PARALLEL TO -+ { {UNITIZE(Qt::Key_Multi_key), 0x223c, 0x0338, 0, 0, 0}, 0x2241 }, // U2241 # NOT TILDE -+ { {UNITIZE(Qt::Key_Multi_key), 0x223c, 0x0338, 0, 0, 0}, 0x2247 }, // U2247 # NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO -+ { {UNITIZE(Qt::Key_Multi_key), 0x2243, 0x0338, 0, 0, 0}, 0x2244 }, // U2244 # NOT ASYMPTOTICALLY EQUAL TO -+ { {UNITIZE(Qt::Key_Multi_key), 0x2248, 0x0338, 0, 0, 0}, 0x2249 }, // U2249 # NOT ALMOST EQUAL TO -+ { {UNITIZE(Qt::Key_Multi_key), 0x224d, 0x0338, 0, 0, 0}, 0x226d }, // U226D # NOT EQUIVALENT TO -+ { {UNITIZE(Qt::Key_Multi_key), 0x2261, 0x0338, 0, 0, 0}, 0x2262 }, // U2262 # NOT IDENTICAL TO -+ { {UNITIZE(Qt::Key_Multi_key), 0x2264, 0x0338, 0, 0, 0}, 0x2270 }, // U2270 # NEITHER LESS-THAN NOR EQUAL TO -+ { {UNITIZE(Qt::Key_Multi_key), 0x2265, 0x0338, 0, 0, 0}, 0x2271 }, // U2271 # NEITHER GREATER-THAN NOR EQUAL TO -+ { {UNITIZE(Qt::Key_Multi_key), 0x2272, 0x0338, 0, 0, 0}, 0x2274 }, // U2274 # NEITHER LESS-THAN NOR EQUIVALENT TO -+ { {UNITIZE(Qt::Key_Multi_key), 0x2273, 0x0338, 0, 0, 0}, 0x2275 }, // U2275 # NEITHER GREATER-THAN NOR EQUIVALENT TO -+ { {UNITIZE(Qt::Key_Multi_key), 0x2276, 0x0338, 0, 0, 0}, 0x2278 }, // U2278 # NEITHER LESS-THAN NOR GREATER-THAN -+ { {UNITIZE(Qt::Key_Multi_key), 0x2277, 0x0338, 0, 0, 0}, 0x2279 }, // U2279 # NEITHER GREATER-THAN NOR LESS-THAN -+ { {UNITIZE(Qt::Key_Multi_key), 0x227a, 0x0338, 0, 0, 0}, 0x2280 }, // U2280 # DOES NOT PRECEDE -+ { {UNITIZE(Qt::Key_Multi_key), 0x227b, 0x0338, 0, 0, 0}, 0x2281 }, // U2281 # DOES NOT SUCCEED -+ { {UNITIZE(Qt::Key_Multi_key), 0x227c, 0x0338, 0, 0, 0}, 0x22e0 }, // U22E0 # DOES NOT PRECEDE OR EQUAL -+ { {UNITIZE(Qt::Key_Multi_key), 0x227d, 0x0338, 0, 0, 0}, 0x22e1 }, // U22E1 # DOES NOT SUCCEED OR EQUAL -+ { {UNITIZE(Qt::Key_Multi_key), 0x2282, 0x0338, 0, 0, 0}, 0x2284 }, // U2284 # NOT A SUBSET OF -+ { {UNITIZE(Qt::Key_Multi_key), 0x2282, 0x0338, 0, 0, 0}, 0x2284 }, // U2284 # NOT A SUBSET OF -+ { {UNITIZE(Qt::Key_Multi_key), 0x2283, 0x0338, 0, 0, 0}, 0x2285 }, // U2285 # NOT A SUPERSET OF -+ { {UNITIZE(Qt::Key_Multi_key), 0x2283, 0x0338, 0, 0, 0}, 0x2285 }, // U2285 # NOT A SUPERSET OF -+ { {UNITIZE(Qt::Key_Multi_key), 0x2286, 0x0338, 0, 0, 0}, 0x2288 }, // U2288 # NEITHER A SUBSET OF NOR EQUAL TO -+ { {UNITIZE(Qt::Key_Multi_key), 0x2287, 0x0338, 0, 0, 0}, 0x2289 }, // U2289 # NEITHER A SUPERSET OF NOR EQUAL TO -+ { {UNITIZE(Qt::Key_Multi_key), 0x2291, 0x0338, 0, 0, 0}, 0x22e2 }, // U22E2 # NOT SQUARE IMAGE OF OR EQUAL TO -+ { {UNITIZE(Qt::Key_Multi_key), 0x2292, 0x0338, 0, 0, 0}, 0x22e3 }, // U22E3 # NOT SQUARE ORIGINAL OF OR EQUAL TO -+ { {UNITIZE(Qt::Key_Multi_key), 0x22a3, 0x0338, 0, 0, 0}, 0x22ac }, // U22AC # DOES NOT PROVE -+ { {UNITIZE(Qt::Key_Multi_key), 0x22a8, 0x0338, 0, 0, 0}, 0x22ad }, // U22AD # NOT TRUE -+ { {UNITIZE(Qt::Key_Multi_key), 0x22a9, 0x0338, 0, 0, 0}, 0x22ae }, // U22AE # DOES NOT FORCE -+ { {UNITIZE(Qt::Key_Multi_key), 0x22ab, 0x0338, 0, 0, 0}, 0x22af }, // U22AF # NEGATED DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE -+ { {UNITIZE(Qt::Key_Multi_key), 0x22b2, 0x0338, 0, 0, 0}, 0x22ea }, // U22EA # NOT NORMAL SUBGROUP OF -+ { {UNITIZE(Qt::Key_Multi_key), 0x22b3, 0x0338, 0, 0, 0}, 0x22eb }, // U22EB # DOES NOT CONTAIN AS NORMAL SUBGROUP -+ { {UNITIZE(Qt::Key_Multi_key), 0x22b4, 0x0338, 0, 0, 0}, 0x22ec }, // U22EC # NOT NORMAL SUBGROUP OF OR EQUAL TO -+ { {UNITIZE(Qt::Key_Multi_key), 0x22b5, 0x0338, 0, 0, 0}, 0x22ed }, // U22ED # DOES NOT CONTAIN AS NORMAL SUBGROUP OR EQUAL -+ { {UNITIZE(Qt::Key_Multi_key), 0x2add, 0x0338, 0, 0, 0}, 0x2adc }, // U2ADC # FORKING -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Grave), 0x0000, 0, 0, 0, 0}, 0x1eeb }, // U1EEB # LATIN SMALL LETTER U WITH HORN AND GRAVE -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Grave), 0x0000, 0, 0, 0, 0}, 0x1edd }, // U1EDD # LATIN SMALL LETTER O WITH HORN AND GRAVE -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Grave), 0x0000, 0, 0, 0, 0}, 0x1edc }, // U1EDC # LATIN CAPITAL LETTER O WITH HORN AND GRAVE -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Grave), 0x0000, 0, 0, 0, 0}, 0x1eea }, // U1EEA # LATIN CAPITAL LETTER U WITH HORN AND GRAVE -+ { {UNITIZE(Qt::Key_Dead_Grave), 0x0020, 0, 0, 0, 0}, 0x0060 }, // grave -+ { {UNITIZE(Qt::Key_Dead_Grave), 0x0041, 0, 0, 0, 0}, 0x00c0 }, // U00C0 # LATIN CAPITAL LETTER A WITH GRAVE -+ { {UNITIZE(Qt::Key_Dead_Grave), 0x0045, 0, 0, 0, 0}, 0x00c8 }, // U00C8 # LATIN CAPITAL LETTER E WITH GRAVE -+ { {UNITIZE(Qt::Key_Dead_Grave), 0x0049, 0, 0, 0, 0}, 0x00cc }, // U00CC # LATIN CAPITAL LETTER I WITH GRAVE -+ { {UNITIZE(Qt::Key_Dead_Grave), 0x004e, 0, 0, 0, 0}, 0x01f8 }, // U01F8 # LATIN CAPITAL LETTER N WITH GRAVE -+ { {UNITIZE(Qt::Key_Dead_Grave), 0x004f, 0, 0, 0, 0}, 0x00d2 }, // U00D2 # LATIN CAPITAL LETTER O WITH GRAVE -+ { {UNITIZE(Qt::Key_Dead_Grave), 0x0055, 0, 0, 0, 0}, 0x00d9 }, // U00D9 # LATIN CAPITAL LETTER U WITH GRAVE -+ { {UNITIZE(Qt::Key_Dead_Grave), 0x0057, 0, 0, 0, 0}, 0x1e80 }, // U1E80 # LATIN CAPITAL LETTER W WITH GRAVE -+ { {UNITIZE(Qt::Key_Dead_Grave), 0x0059, 0, 0, 0, 0}, 0x1ef2 }, // U1EF2 # LATIN CAPITAL LETTER Y WITH GRAVE -+ { {UNITIZE(Qt::Key_Dead_Grave), 0x0061, 0, 0, 0, 0}, 0x00e0 }, // U00E0 # LATIN SMALL LETTER A WITH GRAVE -+ { {UNITIZE(Qt::Key_Dead_Grave), 0x0065, 0, 0, 0, 0}, 0x00e8 }, // U00E8 # LATIN SMALL LETTER E WITH GRAVE -+ { {UNITIZE(Qt::Key_Dead_Grave), 0x0069, 0, 0, 0, 0}, 0x00ec }, // U00EC # LATIN SMALL LETTER I WITH GRAVE -+ { {UNITIZE(Qt::Key_Dead_Grave), 0x006e, 0, 0, 0, 0}, 0x01f9 }, // U01F9 # LATIN SMALL LETTER N WITH GRAVE -+ { {UNITIZE(Qt::Key_Dead_Grave), 0x006f, 0, 0, 0, 0}, 0x00f2 }, // U00F2 # LATIN SMALL LETTER O WITH GRAVE -+ { {UNITIZE(Qt::Key_Dead_Grave), 0x0075, 0, 0, 0, 0}, 0x00f9 }, // U00F9 # LATIN SMALL LETTER U WITH GRAVE -+ { {UNITIZE(Qt::Key_Dead_Grave), 0x0077, 0, 0, 0, 0}, 0x1e81 }, // U1E81 # LATIN SMALL LETTER W WITH GRAVE -+ { {UNITIZE(Qt::Key_Dead_Grave), 0x0079, 0, 0, 0, 0}, 0x1ef3 }, // U1EF3 # LATIN SMALL LETTER Y WITH GRAVE -+ { {UNITIZE(Qt::Key_Dead_Grave), 0x00c2, 0, 0, 0, 0}, 0x1ea6 }, // U1EA6 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE -+ { {UNITIZE(Qt::Key_Dead_Grave), 0x00ca, 0, 0, 0, 0}, 0x1ec0 }, // U1EC0 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE -+ { {UNITIZE(Qt::Key_Dead_Grave), 0x00d4, 0, 0, 0, 0}, 0x1ed2 }, // U1ED2 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE -+ { {UNITIZE(Qt::Key_Dead_Grave), 0x00dc, 0, 0, 0, 0}, 0x01db }, // U01DB # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE -+ { {UNITIZE(Qt::Key_Dead_Grave), 0x00e2, 0, 0, 0, 0}, 0x1ea7 }, // U1EA7 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE -+ { {UNITIZE(Qt::Key_Dead_Grave), 0x00ea, 0, 0, 0, 0}, 0x1ec1 }, // U1EC1 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE -+ { {UNITIZE(Qt::Key_Dead_Grave), 0x00f4, 0, 0, 0, 0}, 0x1ed3 }, // U1ED3 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE -+ { {UNITIZE(Qt::Key_Dead_Grave), 0x00fc, 0, 0, 0, 0}, 0x01dc }, // U01DC # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE -+ { {UNITIZE(Qt::Key_Dead_Grave), 0x0102, 0, 0, 0, 0}, 0x1eb0 }, // U1EB0 # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE -+ { {UNITIZE(Qt::Key_Dead_Grave), 0x0103, 0, 0, 0, 0}, 0x1eb1 }, // U1EB1 # LATIN SMALL LETTER A WITH BREVE AND GRAVE -+ { {UNITIZE(Qt::Key_Dead_Grave), 0x0112, 0, 0, 0, 0}, 0x1e14 }, // U1E14 # LATIN CAPITAL LETTER E WITH MACRON AND GRAVE -+ { {UNITIZE(Qt::Key_Dead_Grave), 0x0113, 0, 0, 0, 0}, 0x1e15 }, // U1E15 # LATIN SMALL LETTER E WITH MACRON AND GRAVE -+ { {UNITIZE(Qt::Key_Dead_Grave), 0x014c, 0, 0, 0, 0}, 0x1e50 }, // U1E50 # LATIN CAPITAL LETTER O WITH MACRON AND GRAVE -+ { {UNITIZE(Qt::Key_Dead_Grave), 0x014d, 0, 0, 0, 0}, 0x1e51 }, // U1E51 # LATIN SMALL LETTER O WITH MACRON AND GRAVE -+ { {UNITIZE(Qt::Key_Dead_Grave), 0x01A0, 0, 0, 0, 0}, 0x1edc }, // U1EDC # LATIN CAPITAL LETTER O WITH HORN AND GRAVE -+ { {UNITIZE(Qt::Key_Dead_Grave), 0x01A1, 0, 0, 0, 0}, 0x1edd }, // U1EDD # LATIN SMALL LETTER O WITH HORN AND GRAVE -+ { {UNITIZE(Qt::Key_Dead_Grave), 0x01AF, 0, 0, 0, 0}, 0x1eea }, // U1EEA # LATIN CAPITAL LETTER U WITH HORN AND GRAVE -+ { {UNITIZE(Qt::Key_Dead_Grave), 0x01B0, 0, 0, 0, 0}, 0x1eeb }, // U1EEB # LATIN SMALL LETTER U WITH HORN AND GRAVE -+ { {UNITIZE(Qt::Key_Dead_Grave), 0x0313, 0x0391, 0, 0, 0}, 0x1f0a }, // U1F0A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA -+ { {UNITIZE(Qt::Key_Dead_Grave), 0x0313, 0x0395, 0, 0, 0}, 0x1f1a }, // U1F1A # GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA -+ { {UNITIZE(Qt::Key_Dead_Grave), 0x0313, 0x0397, 0, 0, 0}, 0x1f2a }, // U1F2A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA -+ { {UNITIZE(Qt::Key_Dead_Grave), 0x0313, 0x0399, 0, 0, 0}, 0x1f3a }, // U1F3A # GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA -+ { {UNITIZE(Qt::Key_Dead_Grave), 0x0313, 0x039f, 0, 0, 0}, 0x1f4a }, // U1F4A # GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA -+ { {UNITIZE(Qt::Key_Dead_Grave), 0x0313, 0x03a9, 0, 0, 0}, 0x1f6a }, // U1F6A # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA -+ { {UNITIZE(Qt::Key_Dead_Grave), 0x0313, 0x03b1, 0, 0, 0}, 0x1f02 }, // U1F02 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA -+ { {UNITIZE(Qt::Key_Dead_Grave), 0x0313, 0x03b5, 0, 0, 0}, 0x1f12 }, // U1F12 # GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA -+ { {UNITIZE(Qt::Key_Dead_Grave), 0x0313, 0x03b7, 0, 0, 0}, 0x1f22 }, // U1F22 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA -+ { {UNITIZE(Qt::Key_Dead_Grave), 0x0313, 0x03b9, 0, 0, 0}, 0x1f32 }, // U1F32 # GREEK SMALL LETTER IOTA WITH PSILI AND VARIA -+ { {UNITIZE(Qt::Key_Dead_Grave), 0x0313, 0x03bf, 0, 0, 0}, 0x1f42 }, // U1F42 # GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA -+ { {UNITIZE(Qt::Key_Dead_Grave), 0x0313, 0x03c5, 0, 0, 0}, 0x1f52 }, // U1F52 # GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA -+ { {UNITIZE(Qt::Key_Dead_Grave), 0x0313, 0x03c9, 0, 0, 0}, 0x1f62 }, // U1F62 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA -+ { {UNITIZE(Qt::Key_Dead_Grave), 0x0314, 0x0391, 0, 0, 0}, 0x1f0b }, // U1F0B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA -+ { {UNITIZE(Qt::Key_Dead_Grave), 0x0314, 0x0395, 0, 0, 0}, 0x1f1b }, // U1F1B # GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA -+ { {UNITIZE(Qt::Key_Dead_Grave), 0x0314, 0x0397, 0, 0, 0}, 0x1f2b }, // U1F2B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA -+ { {UNITIZE(Qt::Key_Dead_Grave), 0x0314, 0x0399, 0, 0, 0}, 0x1f3b }, // U1F3B # GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA -+ { {UNITIZE(Qt::Key_Dead_Grave), 0x0314, 0x039f, 0, 0, 0}, 0x1f4b }, // U1F4B # GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA -+ { {UNITIZE(Qt::Key_Dead_Grave), 0x0314, 0x03a5, 0, 0, 0}, 0x1f5b }, // U1F5B # GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA -+ { {UNITIZE(Qt::Key_Dead_Grave), 0x0314, 0x03a9, 0, 0, 0}, 0x1f6b }, // U1F6B # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA -+ { {UNITIZE(Qt::Key_Dead_Grave), 0x0314, 0x03b1, 0, 0, 0}, 0x1f03 }, // U1F03 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA -+ { {UNITIZE(Qt::Key_Dead_Grave), 0x0314, 0x03b5, 0, 0, 0}, 0x1f13 }, // U1F13 # GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA -+ { {UNITIZE(Qt::Key_Dead_Grave), 0x0314, 0x03b7, 0, 0, 0}, 0x1f23 }, // U1F23 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA -+ { {UNITIZE(Qt::Key_Dead_Grave), 0x0314, 0x03b9, 0, 0, 0}, 0x1f33 }, // U1F33 # GREEK SMALL LETTER IOTA WITH DASIA AND VARIA -+ { {UNITIZE(Qt::Key_Dead_Grave), 0x0314, 0x03bf, 0, 0, 0}, 0x1f43 }, // U1F43 # GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA -+ { {UNITIZE(Qt::Key_Dead_Grave), 0x0314, 0x03c5, 0, 0, 0}, 0x1f53 }, // U1F53 # GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA -+ { {UNITIZE(Qt::Key_Dead_Grave), 0x0314, 0x03c9, 0, 0, 0}, 0x1f63 }, // U1F63 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA -+ { {UNITIZE(Qt::Key_Dead_Grave), 0x0391, 0, 0, 0, 0}, 0x1fba }, // U1FBA # GREEK CAPITAL LETTER ALPHA WITH VARIA -+ { {UNITIZE(Qt::Key_Dead_Grave), 0x0395, 0, 0, 0, 0}, 0x1fc8 }, // U1FC8 # GREEK CAPITAL LETTER EPSILON WITH VARIA -+ { {UNITIZE(Qt::Key_Dead_Grave), 0x0397, 0, 0, 0, 0}, 0x1fca }, // U1FCA # GREEK CAPITAL LETTER ETA WITH VARIA -+ { {UNITIZE(Qt::Key_Dead_Grave), 0x0399, 0, 0, 0, 0}, 0x1fda }, // U1FDA # GREEK CAPITAL LETTER IOTA WITH VARIA -+ { {UNITIZE(Qt::Key_Dead_Grave), 0x039f, 0, 0, 0, 0}, 0x1ff8 }, // U1FF8 # GREEK CAPITAL LETTER OMICRON WITH VARIA -+ { {UNITIZE(Qt::Key_Dead_Grave), 0x03a5, 0, 0, 0, 0}, 0x1fea }, // U1FEA # GREEK CAPITAL LETTER UPSILON WITH VARIA -+ { {UNITIZE(Qt::Key_Dead_Grave), 0x03a9, 0, 0, 0, 0}, 0x1ffa }, // U1FFA # GREEK CAPITAL LETTER OMEGA WITH VARIA -+ { {UNITIZE(Qt::Key_Dead_Grave), 0x03b1, 0, 0, 0, 0}, 0x1f70 }, // U1F70 # GREEK SMALL LETTER ALPHA WITH VARIA -+ { {UNITIZE(Qt::Key_Dead_Grave), 0x03b5, 0, 0, 0, 0}, 0x1f72 }, // U1F72 # GREEK SMALL LETTER EPSILON WITH VARIA -+ { {UNITIZE(Qt::Key_Dead_Grave), 0x03b7, 0, 0, 0, 0}, 0x1f74 }, // U1F74 # GREEK SMALL LETTER ETA WITH VARIA -+ { {UNITIZE(Qt::Key_Dead_Grave), 0x03b9, 0, 0, 0, 0}, 0x1f76 }, // U1F76 # GREEK SMALL LETTER IOTA WITH VARIA -+ { {UNITIZE(Qt::Key_Dead_Grave), 0x03bf, 0, 0, 0, 0}, 0x1f78 }, // U1F78 # GREEK SMALL LETTER OMICRON WITH VARIA -+ { {UNITIZE(Qt::Key_Dead_Grave), 0x03c5, 0, 0, 0, 0}, 0x1f7a }, // U1F7A # GREEK SMALL LETTER UPSILON WITH VARIA -+ { {UNITIZE(Qt::Key_Dead_Grave), 0x03c9, 0, 0, 0, 0}, 0x1f7c }, // U1F7C # GREEK SMALL LETTER OMEGA WITH VARIA -+ { {UNITIZE(Qt::Key_Dead_Grave), 0x03ca, 0, 0, 0, 0}, 0x1fd2 }, // U1FD2 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA -+ { {UNITIZE(Qt::Key_Dead_Grave), 0x03cb, 0, 0, 0, 0}, 0x1fe2 }, // U1FE2 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA -+ { {UNITIZE(Qt::Key_Dead_Grave), 0x0415, 0, 0, 0, 0}, 0x0400 }, // U0400 # CYRILLIC CAPITAL LETTER IE WITH GRAVE -+ { {UNITIZE(Qt::Key_Dead_Grave), 0x0418, 0, 0, 0, 0}, 0x040d }, // U040D # CYRILLIC CAPITAL LETTER I WITH GRAVE -+ { {UNITIZE(Qt::Key_Dead_Grave), 0x0435, 0, 0, 0, 0}, 0x0450 }, // U0450 # CYRILLIC SMALL LETTER IE WITH GRAVE -+ { {UNITIZE(Qt::Key_Dead_Grave), 0x0438, 0, 0, 0, 0}, 0x045d }, // U045D # CYRILLIC SMALL LETTER I WITH GRAVE -+ { {UNITIZE(Qt::Key_Dead_Grave), 0x1f00, 0, 0, 0, 0}, 0x1f02 }, // U1F02 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA -+ { {UNITIZE(Qt::Key_Dead_Grave), 0x1f01, 0, 0, 0, 0}, 0x1f03 }, // U1F03 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA -+ { {UNITIZE(Qt::Key_Dead_Grave), 0x1f08, 0, 0, 0, 0}, 0x1f0a }, // U1F0A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA -+ { {UNITIZE(Qt::Key_Dead_Grave), 0x1f09, 0, 0, 0, 0}, 0x1f0b }, // U1F0B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA -+ { {UNITIZE(Qt::Key_Dead_Grave), 0x1f10, 0, 0, 0, 0}, 0x1f12 }, // U1F12 # GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA -+ { {UNITIZE(Qt::Key_Dead_Grave), 0x1f11, 0, 0, 0, 0}, 0x1f13 }, // U1F13 # GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA -+ { {UNITIZE(Qt::Key_Dead_Grave), 0x1f18, 0, 0, 0, 0}, 0x1f1a }, // U1F1A # GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA -+ { {UNITIZE(Qt::Key_Dead_Grave), 0x1f19, 0, 0, 0, 0}, 0x1f1b }, // U1F1B # GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA -+ { {UNITIZE(Qt::Key_Dead_Grave), 0x1f20, 0, 0, 0, 0}, 0x1f22 }, // U1F22 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA -+ { {UNITIZE(Qt::Key_Dead_Grave), 0x1f21, 0, 0, 0, 0}, 0x1f23 }, // U1F23 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA -+ { {UNITIZE(Qt::Key_Dead_Grave), 0x1f28, 0, 0, 0, 0}, 0x1f2a }, // U1F2A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA -+ { {UNITIZE(Qt::Key_Dead_Grave), 0x1f29, 0, 0, 0, 0}, 0x1f2b }, // U1F2B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA -+ { {UNITIZE(Qt::Key_Dead_Grave), 0x1f30, 0, 0, 0, 0}, 0x1f32 }, // U1F32 # GREEK SMALL LETTER IOTA WITH PSILI AND VARIA -+ { {UNITIZE(Qt::Key_Dead_Grave), 0x1f31, 0, 0, 0, 0}, 0x1f33 }, // U1F33 # GREEK SMALL LETTER IOTA WITH DASIA AND VARIA -+ { {UNITIZE(Qt::Key_Dead_Grave), 0x1f38, 0, 0, 0, 0}, 0x1f3a }, // U1F3A # GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA -+ { {UNITIZE(Qt::Key_Dead_Grave), 0x1f39, 0, 0, 0, 0}, 0x1f3b }, // U1F3B # GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA -+ { {UNITIZE(Qt::Key_Dead_Grave), 0x1f40, 0, 0, 0, 0}, 0x1f42 }, // U1F42 # GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA -+ { {UNITIZE(Qt::Key_Dead_Grave), 0x1f41, 0, 0, 0, 0}, 0x1f43 }, // U1F43 # GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA -+ { {UNITIZE(Qt::Key_Dead_Grave), 0x1f48, 0, 0, 0, 0}, 0x1f4a }, // U1F4A # GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA -+ { {UNITIZE(Qt::Key_Dead_Grave), 0x1f49, 0, 0, 0, 0}, 0x1f4b }, // U1F4B # GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA -+ { {UNITIZE(Qt::Key_Dead_Grave), 0x1f50, 0, 0, 0, 0}, 0x1f52 }, // U1F52 # GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA -+ { {UNITIZE(Qt::Key_Dead_Grave), 0x1f51, 0, 0, 0, 0}, 0x1f53 }, // U1F53 # GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA -+ { {UNITIZE(Qt::Key_Dead_Grave), 0x1f59, 0, 0, 0, 0}, 0x1f5b }, // U1F5B # GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA -+ { {UNITIZE(Qt::Key_Dead_Grave), 0x1f60, 0, 0, 0, 0}, 0x1f62 }, // U1F62 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA -+ { {UNITIZE(Qt::Key_Dead_Grave), 0x1f61, 0, 0, 0, 0}, 0x1f63 }, // U1F63 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA -+ { {UNITIZE(Qt::Key_Dead_Grave), 0x1f68, 0, 0, 0, 0}, 0x1f6a }, // U1F6A # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA -+ { {UNITIZE(Qt::Key_Dead_Grave), 0x1f69, 0, 0, 0, 0}, 0x1f6b }, // U1F6B # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA -+ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0055, 0, 0}, 0x01db }, // U01DB # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE -+ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0075, 0, 0}, 0x01dc }, // U01DC # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE -+ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0022, 0x03b9, 0, 0}, 0x1fd2 }, // U1FD2 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA -+ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0022, 0x03c5, 0, 0}, 0x1fe2 }, // U1FE2 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA -+ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0391, 0, 0}, 0x1f0b }, // U1F0B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA -+ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0395, 0, 0}, 0x1f1b }, // U1F1B # GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA -+ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0397, 0, 0}, 0x1f2b }, // U1F2B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA -+ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0399, 0, 0}, 0x1f3b }, // U1F3B # GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA -+ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x039f, 0, 0}, 0x1f4b }, // U1F4B # GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA -+ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03a5, 0, 0}, 0x1f5b }, // U1F5B # GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA -+ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03a9, 0, 0}, 0x1f6b }, // U1F6B # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA -+ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b1, 0, 0}, 0x1f03 }, // U1F03 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA -+ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b5, 0, 0}, 0x1f13 }, // U1F13 # GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA -+ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b7, 0, 0}, 0x1f23 }, // U1F23 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA -+ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b9, 0, 0}, 0x1f33 }, // U1F33 # GREEK SMALL LETTER IOTA WITH DASIA AND VARIA -+ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03bf, 0, 0}, 0x1f43 }, // U1F43 # GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA -+ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03c5, 0, 0}, 0x1f53 }, // U1F53 # GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA -+ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03c9, 0, 0}, 0x1f63 }, // U1F63 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA -+ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0391, 0, 0}, 0x1f0a }, // U1F0A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA -+ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0395, 0, 0}, 0x1f1a }, // U1F1A # GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA -+ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0397, 0, 0}, 0x1f2a }, // U1F2A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA -+ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0399, 0, 0}, 0x1f3a }, // U1F3A # GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA -+ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x039f, 0, 0}, 0x1f4a }, // U1F4A # GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA -+ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03a9, 0, 0}, 0x1f6a }, // U1F6A # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA -+ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b1, 0, 0}, 0x1f02 }, // U1F02 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA -+ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b5, 0, 0}, 0x1f12 }, // U1F12 # GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA -+ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b7, 0, 0}, 0x1f22 }, // U1F22 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA -+ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b9, 0, 0}, 0x1f32 }, // U1F32 # GREEK SMALL LETTER IOTA WITH PSILI AND VARIA -+ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03bf, 0, 0}, 0x1f42 }, // U1F42 # GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA -+ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03c5, 0, 0}, 0x1f52 }, // U1F52 # GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA -+ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03c9, 0, 0}, 0x1f62 }, // U1F62 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA -+ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x002b, 0x004f, 0, 0}, 0x1edc }, // U1EDC # LATIN CAPITAL LETTER O WITH HORN AND GRAVE -+ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x002b, 0x0055, 0, 0}, 0x1eea }, // U1EEA # LATIN CAPITAL LETTER U WITH HORN AND GRAVE -+ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x002b, 0x006f, 0, 0}, 0x1edd }, // U1EDD # LATIN SMALL LETTER O WITH HORN AND GRAVE -+ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x002b, 0x0075, 0, 0}, 0x1eeb }, // U1EEB # LATIN SMALL LETTER U WITH HORN AND GRAVE -+ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0041, 0, 0}, 0x1eb0 }, // U1EB0 # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE -+ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0061, 0, 0}, 0x1eb1 }, // U1EB1 # LATIN SMALL LETTER A WITH BREVE AND GRAVE -+ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0041, 0, 0}, 0x1ea6 }, // U1EA6 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE -+ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0045, 0, 0}, 0x1ec0 }, // U1EC0 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE -+ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x005e, 0x004f, 0, 0}, 0x1ed2 }, // U1ED2 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE -+ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0061, 0, 0}, 0x1ea7 }, // U1EA7 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE -+ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0065, 0, 0}, 0x1ec1 }, // U1EC1 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE -+ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x005e, 0x006f, 0, 0}, 0x1ed3 }, // U1ED3 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE -+ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0045, 0, 0}, 0x1e14 }, // U1E14 # LATIN CAPITAL LETTER E WITH MACRON AND GRAVE -+ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x004f, 0, 0}, 0x1e50 }, // U1E50 # LATIN CAPITAL LETTER O WITH MACRON AND GRAVE -+ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0065, 0, 0}, 0x1e15 }, // U1E15 # LATIN SMALL LETTER E WITH MACRON AND GRAVE -+ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x006f, 0, 0}, 0x1e51 }, // U1E51 # LATIN SMALL LETTER O WITH MACRON AND GRAVE -+ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0041, 0, 0}, 0x1eb0 }, // U1EB0 # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE -+ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0061, 0, 0}, 0x1eb1 }, // U1EB1 # LATIN SMALL LETTER A WITH BREVE AND GRAVE -+ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0045, 0, 0}, 0x1e14 }, // U1E14 # LATIN CAPITAL LETTER E WITH MACRON AND GRAVE -+ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x00af, 0x004f, 0, 0}, 0x1e50 }, // U1E50 # LATIN CAPITAL LETTER O WITH MACRON AND GRAVE -+ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0065, 0, 0}, 0x1e15 }, // U1E15 # LATIN SMALL LETTER E WITH MACRON AND GRAVE -+ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x00af, 0x006f, 0, 0}, 0x1e51 }, // U1E51 # LATIN SMALL LETTER O WITH MACRON AND GRAVE -+ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Dead_Grave), 0, 0, 0, 0}, 0x0060 }, // grave -+ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Dead_Circumflex), 0x0041, 0, 0, 0}, 0x1ea6 }, // U1EA6 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE -+ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Dead_Circumflex), 0x0045, 0, 0, 0}, 0x1ec0 }, // U1EC0 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE -+ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Dead_Circumflex), 0x004f, 0, 0, 0}, 0x1ed2 }, // U1ED2 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE -+ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Dead_Circumflex), 0x0061, 0, 0, 0}, 0x1ea7 }, // U1EA7 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE -+ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Dead_Circumflex), 0x0065, 0, 0, 0}, 0x1ec1 }, // U1EC1 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE -+ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Dead_Circumflex), 0x006f, 0, 0, 0}, 0x1ed3 }, // U1ED3 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE -+ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Dead_Macron), 0x0045, 0, 0, 0}, 0x1e14 }, // U1E14 # LATIN CAPITAL LETTER E WITH MACRON AND GRAVE -+ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Dead_Macron), 0x004f, 0, 0, 0}, 0x1e50 }, // U1E50 # LATIN CAPITAL LETTER O WITH MACRON AND GRAVE -+ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Dead_Macron), 0x0065, 0, 0, 0}, 0x1e15 }, // U1E15 # LATIN SMALL LETTER E WITH MACRON AND GRAVE -+ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Dead_Macron), 0x006f, 0, 0, 0}, 0x1e51 }, // U1E51 # LATIN SMALL LETTER O WITH MACRON AND GRAVE -+ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Dead_Breve), 0x0041, 0, 0, 0}, 0x1eb0 }, // U1EB0 # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE -+ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Dead_Breve), 0x0061, 0, 0, 0}, 0x1eb1 }, // U1EB1 # LATIN SMALL LETTER A WITH BREVE AND GRAVE -+ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Dead_Diaeresis), 0x0055, 0, 0, 0}, 0x01db }, // U01DB # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE -+ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Dead_Diaeresis), 0x0075, 0, 0, 0}, 0x01dc }, // U01DC # LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE -+ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Dead_Diaeresis), 0x03b9, 0, 0, 0}, 0x1fd2 }, // U1FD2 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA -+ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Dead_Diaeresis), 0x03c5, 0, 0, 0}, 0x1fe2 }, // U1FE2 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA -+ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Dead_Horn), 0x004f, 0, 0, 0}, 0x1edc }, // U1EDC # LATIN CAPITAL LETTER O WITH HORN AND GRAVE -+ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Dead_Horn), 0x0055, 0, 0, 0}, 0x1eea }, // U1EEA # LATIN CAPITAL LETTER U WITH HORN AND GRAVE -+ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Dead_Horn), 0x006f, 0, 0, 0}, 0x1edd }, // U1EDD # LATIN SMALL LETTER O WITH HORN AND GRAVE -+ { {UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Dead_Horn), 0x0075, 0, 0, 0}, 0x1eeb }, // U1EEB # LATIN SMALL LETTER U WITH HORN AND GRAVE -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Acute), 0x0000, 0, 0, 0, 0}, 0x1eda }, // U1EDA # LATIN CAPITAL LETTER O WITH HORN AND ACUTE -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Acute), 0x0000, 0, 0, 0, 0}, 0x1ee9 }, // U1EE9 # LATIN SMALL LETTER U WITH HORN AND ACUTE -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Acute), 0x0000, 0, 0, 0, 0}, 0x1edb }, // U1EDB # LATIN SMALL LETTER O WITH HORN AND ACUTE -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Acute), 0x0000, 0, 0, 0, 0}, 0x1ee8 }, // U1EE8 # LATIN CAPITAL LETTER U WITH HORN AND ACUTE -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Acute), 0x0000, 0x004f, 0, 0, 0}, 0x1e4c }, // U1E4C # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Acute), 0x0000, 0x0055, 0, 0, 0}, 0x1e78 }, // U1E78 # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Acute), 0x0000, 0x006f, 0, 0, 0}, 0x1e4d }, // U1E4D # LATIN SMALL LETTER O WITH TILDE AND ACUTE -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Acute), 0x0000, 0x0075, 0, 0, 0}, 0x1e79 }, // U1E79 # LATIN SMALL LETTER U WITH TILDE AND ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x0020, 0, 0, 0, 0}, 0x0027 }, // apostrophe -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x0041, 0, 0, 0, 0}, 0x00c1 }, // U00C1 # LATIN CAPITAL LETTER A WITH ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x0043, 0, 0, 0, 0}, 0x0106 }, // U0106 # LATIN CAPITAL LETTER C WITH ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x0045, 0, 0, 0, 0}, 0x00c9 }, // U00C9 # LATIN CAPITAL LETTER E WITH ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x0047, 0, 0, 0, 0}, 0x01f4 }, // U01F4 # LATIN CAPITAL LETTER G WITH ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x0049, 0, 0, 0, 0}, 0x00cd }, // U00CD # LATIN CAPITAL LETTER I WITH ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x004b, 0, 0, 0, 0}, 0x1e30 }, // U1E30 # LATIN CAPITAL LETTER K WITH ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x004c, 0, 0, 0, 0}, 0x0139 }, // U0139 # LATIN CAPITAL LETTER L WITH ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x004d, 0, 0, 0, 0}, 0x1e3e }, // U1E3E # LATIN CAPITAL LETTER M WITH ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x004e, 0, 0, 0, 0}, 0x0143 }, // U0143 # LATIN CAPITAL LETTER N WITH ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x004f, 0, 0, 0, 0}, 0x00d3 }, // U00D3 # LATIN CAPITAL LETTER O WITH ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x0050, 0, 0, 0, 0}, 0x1e54 }, // U1E54 # LATIN CAPITAL LETTER P WITH ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x0052, 0, 0, 0, 0}, 0x0154 }, // U0154 # LATIN CAPITAL LETTER R WITH ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x0053, 0, 0, 0, 0}, 0x015a }, // U015A # LATIN CAPITAL LETTER S WITH ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x0055, 0, 0, 0, 0}, 0x00da }, // U00DA # LATIN CAPITAL LETTER U WITH ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x0057, 0, 0, 0, 0}, 0x1e82 }, // U1E82 # LATIN CAPITAL LETTER W WITH ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x0059, 0, 0, 0, 0}, 0x00dd }, // U00DD # LATIN CAPITAL LETTER Y WITH ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x005a, 0, 0, 0, 0}, 0x0179 }, // U0179 # LATIN CAPITAL LETTER Z WITH ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x0061, 0, 0, 0, 0}, 0x00e1 }, // U00E1 # LATIN SMALL LETTER A WITH ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x0063, 0, 0, 0, 0}, 0x0107 }, // U0107 # LATIN SMALL LETTER C WITH ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x0065, 0, 0, 0, 0}, 0x00e9 }, // U00E9 # LATIN SMALL LETTER E WITH ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x0067, 0, 0, 0, 0}, 0x01f5 }, // U01F5 # LATIN SMALL LETTER G WITH ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x0069, 0, 0, 0, 0}, 0x00ed }, // U00ED # LATIN SMALL LETTER I WITH ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x006b, 0, 0, 0, 0}, 0x1e31 }, // U1E31 # LATIN SMALL LETTER K WITH ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x006c, 0, 0, 0, 0}, 0x013a }, // U013A # LATIN SMALL LETTER L WITH ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x006d, 0, 0, 0, 0}, 0x1e3f }, // U1E3F # LATIN SMALL LETTER M WITH ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x006e, 0, 0, 0, 0}, 0x0144 }, // U0144 # LATIN SMALL LETTER N WITH ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x006f, 0, 0, 0, 0}, 0x00f3 }, // U00F3 # LATIN SMALL LETTER O WITH ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x0070, 0, 0, 0, 0}, 0x1e55 }, // U1E55 # LATIN SMALL LETTER P WITH ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x0072, 0, 0, 0, 0}, 0x0155 }, // U0155 # LATIN SMALL LETTER R WITH ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x0073, 0, 0, 0, 0}, 0x015b }, // U015B # LATIN SMALL LETTER S WITH ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x0075, 0, 0, 0, 0}, 0x00fa }, // U00FA # LATIN SMALL LETTER U WITH ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x0077, 0, 0, 0, 0}, 0x1e83 }, // U1E83 # LATIN SMALL LETTER W WITH ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x0079, 0, 0, 0, 0}, 0x00fd }, // U00FD # LATIN SMALL LETTER Y WITH ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x007a, 0, 0, 0, 0}, 0x017a }, // U017A # LATIN SMALL LETTER Z WITH ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x00c2, 0, 0, 0, 0}, 0x1ea4 }, // U1EA4 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x00c5, 0, 0, 0, 0}, 0x01fa }, // U01FA # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x00c6, 0, 0, 0, 0}, 0x01fc }, // U01FC # LATIN CAPITAL LETTER AE WITH ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x00c7, 0, 0, 0, 0}, 0x1e08 }, // U1E08 # LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x00ca, 0, 0, 0, 0}, 0x1ebe }, // U1EBE # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x00cf, 0, 0, 0, 0}, 0x1e2e }, // U1E2E # LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x00d4, 0, 0, 0, 0}, 0x1ed0 }, // U1ED0 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x00d5, 0, 0, 0, 0}, 0x1e4c }, // U1E4C # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x00d8, 0, 0, 0, 0}, 0x01fe }, // U01FE # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x00dc, 0, 0, 0, 0}, 0x01d7 }, // U01D7 # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x00e2, 0, 0, 0, 0}, 0x1ea5 }, // U1EA5 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x00e5, 0, 0, 0, 0}, 0x01fb }, // U01FB # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x00e6, 0, 0, 0, 0}, 0x01fd }, // U01FD # LATIN SMALL LETTER AE WITH ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x00e7, 0, 0, 0, 0}, 0x1e09 }, // U1E09 # LATIN SMALL LETTER C WITH CEDILLA AND ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x00ea, 0, 0, 0, 0}, 0x1ebf }, // U1EBF # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x00ef, 0, 0, 0, 0}, 0x1e2f }, // U1E2F # LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x00f4, 0, 0, 0, 0}, 0x1ed1 }, // U1ED1 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x00f5, 0, 0, 0, 0}, 0x1e4d }, // U1E4D # LATIN SMALL LETTER O WITH TILDE AND ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x00f8, 0, 0, 0, 0}, 0x01ff }, // U01FF # LATIN SMALL LETTER O WITH STROKE AND ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x00fc, 0, 0, 0, 0}, 0x01d8 }, // U01D8 # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x0102, 0, 0, 0, 0}, 0x1eae }, // U1EAE # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x0103, 0, 0, 0, 0}, 0x1eaf }, // U1EAF # LATIN SMALL LETTER A WITH BREVE AND ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x0112, 0, 0, 0, 0}, 0x1e16 }, // U1E16 # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x0113, 0, 0, 0, 0}, 0x1e17 }, // U1E17 # LATIN SMALL LETTER E WITH MACRON AND ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x014c, 0, 0, 0, 0}, 0x1e52 }, // U1E52 # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x014d, 0, 0, 0, 0}, 0x1e53 }, // U1E53 # LATIN SMALL LETTER O WITH MACRON AND ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x0168, 0, 0, 0, 0}, 0x1e78 }, // U1E78 # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x0169, 0, 0, 0, 0}, 0x1e79 }, // U1E79 # LATIN SMALL LETTER U WITH TILDE AND ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x01A0, 0, 0, 0, 0}, 0x1eda }, // U1EDA # LATIN CAPITAL LETTER O WITH HORN AND ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x01A1, 0, 0, 0, 0}, 0x1edb }, // U1EDB # LATIN SMALL LETTER O WITH HORN AND ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x01AF, 0, 0, 0, 0}, 0x1ee8 }, // U1EE8 # LATIN CAPITAL LETTER U WITH HORN AND ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x01B0, 0, 0, 0, 0}, 0x1ee9 }, // U1EE9 # LATIN SMALL LETTER U WITH HORN AND ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x0313, 0x0391, 0, 0, 0}, 0x1f0c }, // U1F0C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x0313, 0x0395, 0, 0, 0}, 0x1f1c }, // U1F1C # GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x0313, 0x0397, 0, 0, 0}, 0x1f2c }, // U1F2C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x0313, 0x0399, 0, 0, 0}, 0x1f3c }, // U1F3C # GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x0313, 0x039f, 0, 0, 0}, 0x1f4c }, // U1F4C # GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x0313, 0x03a9, 0, 0, 0}, 0x1f6c }, // U1F6C # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x0313, 0x03b1, 0, 0, 0}, 0x1f04 }, // U1F04 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x0313, 0x03b5, 0, 0, 0}, 0x1f14 }, // U1F14 # GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x0313, 0x03b7, 0, 0, 0}, 0x1f24 }, // U1F24 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x0313, 0x03b9, 0, 0, 0}, 0x1f34 }, // U1F34 # GREEK SMALL LETTER IOTA WITH PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x0313, 0x03bf, 0, 0, 0}, 0x1f44 }, // U1F44 # GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x0313, 0x03c5, 0, 0, 0}, 0x1f54 }, // U1F54 # GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x0313, 0x03c9, 0, 0, 0}, 0x1f64 }, // U1F64 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x0314, 0x0391, 0, 0, 0}, 0x1f0d }, // U1F0D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x0314, 0x0395, 0, 0, 0}, 0x1f1d }, // U1F1D # GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x0314, 0x0397, 0, 0, 0}, 0x1f2d }, // U1F2D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x0314, 0x0399, 0, 0, 0}, 0x1f3d }, // U1F3D # GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x0314, 0x039f, 0, 0, 0}, 0x1f4d }, // U1F4D # GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x0314, 0x03a5, 0, 0, 0}, 0x1f5d }, // U1F5D # GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x0314, 0x03a9, 0, 0, 0}, 0x1f6d }, // U1F6D # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x0314, 0x03b1, 0, 0, 0}, 0x1f05 }, // U1F05 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x0314, 0x03b5, 0, 0, 0}, 0x1f15 }, // U1F15 # GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x0314, 0x03b7, 0, 0, 0}, 0x1f25 }, // U1F25 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x0314, 0x03b9, 0, 0, 0}, 0x1f35 }, // U1F35 # GREEK SMALL LETTER IOTA WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x0314, 0x03bf, 0, 0, 0}, 0x1f45 }, // U1F45 # GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x0314, 0x03c5, 0, 0, 0}, 0x1f55 }, // U1F55 # GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x0314, 0x03c9, 0, 0, 0}, 0x1f65 }, // U1F65 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x0391, 0, 0, 0, 0}, 0x0386 }, // U0386 # GREEK CAPITAL LETTER ALPHA WITH TONOS -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x0395, 0, 0, 0, 0}, 0x0388 }, // U0388 # GREEK CAPITAL LETTER EPSILON WITH TONOS -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x0397, 0, 0, 0, 0}, 0x0389 }, // U0389 # GREEK CAPITAL LETTER ETA WITH TONOS -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x0399, 0, 0, 0, 0}, 0x038a }, // U038A # GREEK CAPITAL LETTER IOTA WITH TONOS -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x039f, 0, 0, 0, 0}, 0x038c }, // U038C # GREEK CAPITAL LETTER OMICRON WITH TONOS -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x03a5, 0, 0, 0, 0}, 0x038e }, // U038E # GREEK CAPITAL LETTER UPSILON WITH TONOS -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x03a9, 0, 0, 0, 0}, 0x038f }, // U038F # GREEK CAPITAL LETTER OMEGA WITH TONOS -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x03b1, 0, 0, 0, 0}, 0x03ac }, // U03AC # GREEK SMALL LETTER ALPHA WITH TONOS -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x03b5, 0, 0, 0, 0}, 0x03ad }, // U03AD # GREEK SMALL LETTER EPSILON WITH TONOS -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x03b7, 0, 0, 0, 0}, 0x03ae }, // U03AE # GREEK SMALL LETTER ETA WITH TONOS -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x03b9, 0, 0, 0, 0}, 0x03af }, // U03AF # GREEK SMALL LETTER IOTA WITH TONOS -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x03bf, 0, 0, 0, 0}, 0x03cc }, // U03CC # GREEK SMALL LETTER OMICRON WITH TONOS -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x03c5, 0, 0, 0, 0}, 0x03cd }, // U03CD # GREEK SMALL LETTER UPSILON WITH TONOS -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x03c9, 0, 0, 0, 0}, 0x03ce }, // U03CE # GREEK SMALL LETTER OMEGA WITH TONOS -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x03ca, 0, 0, 0, 0}, 0x0390 }, // U0390 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x03cb, 0, 0, 0, 0}, 0x03b0 }, // U03B0 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x0413, 0, 0, 0, 0}, 0x0403 }, // U0403 # CYRILLIC CAPITAL LETTER GJE -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x041a, 0, 0, 0, 0}, 0x040c }, // U040C # CYRILLIC CAPITAL LETTER KJE -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x0433, 0, 0, 0, 0}, 0x0453 }, // U0453 # CYRILLIC SMALL LETTER GJE -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x043a, 0, 0, 0, 0}, 0x045c }, // U045C # CYRILLIC SMALL LETTER KJE -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x1f00, 0, 0, 0, 0}, 0x1f04 }, // U1F04 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x1f01, 0, 0, 0, 0}, 0x1f05 }, // U1F05 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x1f08, 0, 0, 0, 0}, 0x1f0c }, // U1F0C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x1f09, 0, 0, 0, 0}, 0x1f0d }, // U1F0D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x1f10, 0, 0, 0, 0}, 0x1f14 }, // U1F14 # GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x1f11, 0, 0, 0, 0}, 0x1f15 }, // U1F15 # GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x1f18, 0, 0, 0, 0}, 0x1f1c }, // U1F1C # GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x1f19, 0, 0, 0, 0}, 0x1f1d }, // U1F1D # GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x1f20, 0, 0, 0, 0}, 0x1f24 }, // U1F24 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x1f21, 0, 0, 0, 0}, 0x1f25 }, // U1F25 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x1f28, 0, 0, 0, 0}, 0x1f2c }, // U1F2C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x1f29, 0, 0, 0, 0}, 0x1f2d }, // U1F2D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x1f30, 0, 0, 0, 0}, 0x1f34 }, // U1F34 # GREEK SMALL LETTER IOTA WITH PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x1f31, 0, 0, 0, 0}, 0x1f35 }, // U1F35 # GREEK SMALL LETTER IOTA WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x1f38, 0, 0, 0, 0}, 0x1f3c }, // U1F3C # GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x1f39, 0, 0, 0, 0}, 0x1f3d }, // U1F3D # GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x1f40, 0, 0, 0, 0}, 0x1f44 }, // U1F44 # GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x1f41, 0, 0, 0, 0}, 0x1f45 }, // U1F45 # GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x1f48, 0, 0, 0, 0}, 0x1f4c }, // U1F4C # GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x1f49, 0, 0, 0, 0}, 0x1f4d }, // U1F4D # GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x1f50, 0, 0, 0, 0}, 0x1f54 }, // U1F54 # GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x1f51, 0, 0, 0, 0}, 0x1f55 }, // U1F55 # GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x1f59, 0, 0, 0, 0}, 0x1f5d }, // U1F5D # GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x1f60, 0, 0, 0, 0}, 0x1f64 }, // U1F64 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x1f61, 0, 0, 0, 0}, 0x1f65 }, // U1F65 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x1f68, 0, 0, 0, 0}, 0x1f6c }, // U1F6C # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Dead_Acute), 0x1f69, 0, 0, 0, 0}, 0x1f6d }, // U1F6D # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0000, 0x004f, 0, 0}, 0x01fe }, // U01FE # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0000, 0x006f, 0, 0}, 0x01ff }, // U01FF # LATIN SMALL LETTER O WITH STROKE AND ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0049, 0, 0}, 0x1e2e }, // U1E2E # LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0055, 0, 0}, 0x01d7 }, // U01D7 # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0069, 0, 0}, 0x1e2f }, // U1E2F # LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0075, 0, 0}, 0x01d8 }, // U01D8 # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0022, 0x03b9, 0, 0}, 0x0390 }, // U0390 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS -+ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0022, 0x03c5, 0, 0}, 0x03b0 }, // U03B0 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS -+ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0391, 0, 0}, 0x1f0d }, // U1F0D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0395, 0, 0}, 0x1f1d }, // U1F1D # GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0397, 0, 0}, 0x1f2d }, // U1F2D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0399, 0, 0}, 0x1f3d }, // U1F3D # GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x039f, 0, 0}, 0x1f4d }, // U1F4D # GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03a5, 0, 0}, 0x1f5d }, // U1F5D # GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03a9, 0, 0}, 0x1f6d }, // U1F6D # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b1, 0, 0}, 0x1f05 }, // U1F05 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b5, 0, 0}, 0x1f15 }, // U1F15 # GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b7, 0, 0}, 0x1f25 }, // U1F25 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b9, 0, 0}, 0x1f35 }, // U1F35 # GREEK SMALL LETTER IOTA WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03bf, 0, 0}, 0x1f45 }, // U1F45 # GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03c5, 0, 0}, 0x1f55 }, // U1F55 # GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03c9, 0, 0}, 0x1f65 }, // U1F65 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA -+ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0391, 0, 0}, 0x1f0c }, // U1F0C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0395, 0, 0}, 0x1f1c }, // U1F1C # GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0397, 0, 0}, 0x1f2c }, // U1F2C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0399, 0, 0}, 0x1f3c }, // U1F3C # GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x039f, 0, 0}, 0x1f4c }, // U1F4C # GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03a9, 0, 0}, 0x1f6c }, // U1F6C # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b1, 0, 0}, 0x1f04 }, // U1F04 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b5, 0, 0}, 0x1f14 }, // U1F14 # GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b7, 0, 0}, 0x1f24 }, // U1F24 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b9, 0, 0}, 0x1f34 }, // U1F34 # GREEK SMALL LETTER IOTA WITH PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03bf, 0, 0}, 0x1f44 }, // U1F44 # GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03c5, 0, 0}, 0x1f54 }, // U1F54 # GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03c9, 0, 0}, 0x1f64 }, // U1F64 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA -+ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x002b, 0x004f, 0, 0}, 0x1eda }, // U1EDA # LATIN CAPITAL LETTER O WITH HORN AND ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x002b, 0x0055, 0, 0}, 0x1ee8 }, // U1EE8 # LATIN CAPITAL LETTER U WITH HORN AND ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x002b, 0x006f, 0, 0}, 0x1edb }, // U1EDB # LATIN SMALL LETTER O WITH HORN AND ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x002b, 0x0075, 0, 0}, 0x1ee9 }, // U1EE9 # LATIN SMALL LETTER U WITH HORN AND ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x002c, 0x0043, 0, 0}, 0x1e08 }, // U1E08 # LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x002c, 0x0063, 0, 0}, 0x1e09 }, // U1E09 # LATIN SMALL LETTER C WITH CEDILLA AND ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x002f, 0x004f, 0, 0}, 0x01fe }, // U01FE # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x002f, 0x006f, 0, 0}, 0x01ff }, // U01FF # LATIN SMALL LETTER O WITH STROKE AND ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0041, 0, 0}, 0x1eae }, // U1EAE # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0061, 0, 0}, 0x1eaf }, // U1EAF # LATIN SMALL LETTER A WITH BREVE AND ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0041, 0, 0}, 0x1ea4 }, // U1EA4 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0045, 0, 0}, 0x1ebe }, // U1EBE # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x005e, 0x004f, 0, 0}, 0x1ed0 }, // U1ED0 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0061, 0, 0}, 0x1ea5 }, // U1EA5 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0065, 0, 0}, 0x1ebf }, // U1EBF # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x005e, 0x006f, 0, 0}, 0x1ed1 }, // U1ED1 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0045, 0, 0}, 0x1e16 }, // U1E16 # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x004f, 0, 0}, 0x1e52 }, // U1E52 # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0065, 0, 0}, 0x1e17 }, // U1E17 # LATIN SMALL LETTER E WITH MACRON AND ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x006f, 0, 0}, 0x1e53 }, // U1E53 # LATIN SMALL LETTER O WITH MACRON AND ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0041, 0, 0}, 0x1eae }, // U1EAE # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0061, 0, 0}, 0x1eaf }, // U1EAF # LATIN SMALL LETTER A WITH BREVE AND ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x006f, 0x0041, 0, 0}, 0x01fa }, // U01FA # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x006f, 0x0061, 0, 0}, 0x01fb }, // U01FB # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x004f, 0, 0}, 0x1e4c }, // U1E4C # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0055, 0, 0}, 0x1e78 }, // U1E78 # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x006f, 0, 0}, 0x1e4d }, // U1E4D # LATIN SMALL LETTER O WITH TILDE AND ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0075, 0, 0}, 0x1e79 }, // U1E79 # LATIN SMALL LETTER U WITH TILDE AND ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0045, 0, 0}, 0x1e16 }, // U1E16 # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x00af, 0x004f, 0, 0}, 0x1e52 }, // U1E52 # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0065, 0, 0}, 0x1e17 }, // U1E17 # LATIN SMALL LETTER E WITH MACRON AND ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x00af, 0x006f, 0, 0}, 0x1e53 }, // U1E53 # LATIN SMALL LETTER O WITH MACRON AND ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Acute), 0, 0, 0, 0}, 0x00b4 }, // acute -+ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Circumflex), 0x0041, 0, 0, 0}, 0x1ea4 }, // U1EA4 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Circumflex), 0x0045, 0, 0, 0}, 0x1ebe }, // U1EBE # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Circumflex), 0x004f, 0, 0, 0}, 0x1ed0 }, // U1ED0 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Circumflex), 0x0061, 0, 0, 0}, 0x1ea5 }, // U1EA5 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Circumflex), 0x0065, 0, 0, 0}, 0x1ebf }, // U1EBF # LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Circumflex), 0x006f, 0, 0, 0}, 0x1ed1 }, // U1ED1 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Tilde), 0x004f, 0, 0, 0}, 0x1e4c }, // U1E4C # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Tilde), 0x0055, 0, 0, 0}, 0x1e78 }, // U1E78 # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Tilde), 0x006f, 0, 0, 0}, 0x1e4d }, // U1E4D # LATIN SMALL LETTER O WITH TILDE AND ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Tilde), 0x0075, 0, 0, 0}, 0x1e79 }, // U1E79 # LATIN SMALL LETTER U WITH TILDE AND ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Macron), 0x0045, 0, 0, 0}, 0x1e16 }, // U1E16 # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Macron), 0x004f, 0, 0, 0}, 0x1e52 }, // U1E52 # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Macron), 0x0065, 0, 0, 0}, 0x1e17 }, // U1E17 # LATIN SMALL LETTER E WITH MACRON AND ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Macron), 0x006f, 0, 0, 0}, 0x1e53 }, // U1E53 # LATIN SMALL LETTER O WITH MACRON AND ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Breve), 0x0041, 0, 0, 0}, 0x1eae }, // U1EAE # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Breve), 0x0061, 0, 0, 0}, 0x1eaf }, // U1EAF # LATIN SMALL LETTER A WITH BREVE AND ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Diaeresis), 0x0049, 0, 0, 0}, 0x1e2e }, // U1E2E # LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Diaeresis), 0x0055, 0, 0, 0}, 0x01d7 }, // U01D7 # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Diaeresis), 0x0069, 0, 0, 0}, 0x1e2f }, // U1E2F # LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Diaeresis), 0x0075, 0, 0, 0}, 0x01d8 }, // U01D8 # LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Diaeresis), 0x03b9, 0, 0, 0}, 0x0390 }, // U0390 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS -+ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Diaeresis), 0x03c5, 0, 0, 0}, 0x03b0 }, // U03B0 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS -+ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Abovering), 0x0041, 0, 0, 0}, 0x01fa }, // U01FA # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Abovering), 0x0061, 0, 0, 0}, 0x01fb }, // U01FB # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Cedilla), 0x0043, 0, 0, 0}, 0x1e08 }, // U1E08 # LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Cedilla), 0x0063, 0, 0, 0}, 0x1e09 }, // U1E09 # LATIN SMALL LETTER C WITH CEDILLA AND ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Horn), 0x004f, 0, 0, 0}, 0x1eda }, // U1EDA # LATIN CAPITAL LETTER O WITH HORN AND ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Horn), 0x0055, 0, 0, 0}, 0x1ee8 }, // U1EE8 # LATIN CAPITAL LETTER U WITH HORN AND ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Horn), 0x006f, 0, 0, 0}, 0x1edb }, // U1EDB # LATIN SMALL LETTER O WITH HORN AND ACUTE -+ { {UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Dead_Horn), 0x0075, 0, 0, 0}, 0x1ee9 }, // U1EE9 # LATIN SMALL LETTER U WITH HORN AND ACUTE -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0000, 0, 0, 0, 0}, 0x207a }, // U207A # SUPERSCRIPT PLUS SIGN -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0000, 0, 0, 0, 0}, 0x207c }, // U207C # SUPERSCRIPT EQUALS SIGN -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0000, 0, 0, 0, 0}, 0x00b2 }, // U00B2 # SUPERSCRIPT TWO -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0000, 0, 0, 0, 0}, 0x2079 }, // U2079 # SUPERSCRIPT NINE -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0000, 0, 0, 0, 0}, 0x00b3 }, // U00B3 # SUPERSCRIPT THREE -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0000, 0, 0, 0, 0}, 0x00b9 }, // U00B9 # SUPERSCRIPT ONE -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0000, 0, 0, 0, 0}, 0x2070 }, // U2070 # SUPERSCRIPT ZERO -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0000, 0, 0, 0, 0}, 0x2078 }, // U2078 # SUPERSCRIPT EIGHT -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0000, 0, 0, 0, 0}, 0x2074 }, // U2074 # SUPERSCRIPT FOUR -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0000, 0, 0, 0, 0}, 0x2075 }, // U2075 # SUPERSCRIPT FIVE -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0000, 0, 0, 0, 0}, 0x2077 }, // U2077 # SUPERSCRIPT SEVEN -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0000, 0, 0, 0, 0}, 0x00b2 }, // U00B2 # SUPERSCRIPT TWO -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0000, 0, 0, 0, 0}, 0x2076 }, // U2076 # SUPERSCRIPT SIX -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0000, 0x0041, 0, 0, 0}, 0x1eac }, // U1EAC # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0000, 0x0045, 0, 0, 0}, 0x1ec6 }, // U1EC6 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0000, 0x004f, 0, 0, 0}, 0x1ed8 }, // U1ED8 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0000, 0x0061, 0, 0, 0}, 0x1ead }, // U1EAD # LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0000, 0x0065, 0, 0, 0}, 0x1ec7 }, // U1EC7 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0000, 0x006f, 0, 0, 0}, 0x1ed9 }, // U1ED9 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW -+ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0020, 0, 0, 0, 0}, 0x005e }, // asciicircum -+ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0028, 0, 0, 0, 0}, 0x207d }, // U207D # SUPERSCRIPT LEFT PARENTHESIS -+ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0029, 0, 0, 0, 0}, 0x207e }, // U207E # SUPERSCRIPT RIGHT PARENTHESIS -+ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x002b, 0, 0, 0, 0}, 0x207a }, // U207A # SUPERSCRIPT PLUS SIGN -+ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0030, 0, 0, 0, 0}, 0x2070 }, // U2070 # SUPERSCRIPT ZERO -+ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0031, 0, 0, 0, 0}, 0x00b9 }, // U00B9 # SUPERSCRIPT ONE -+ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0032, 0, 0, 0, 0}, 0x00b2 }, // U00B2 # SUPERSCRIPT TWO -+ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0033, 0, 0, 0, 0}, 0x00b3 }, // U00B3 # SUPERSCRIPT THREE -+ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0034, 0, 0, 0, 0}, 0x2074 }, // U2074 # SUPERSCRIPT FOUR -+ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0035, 0, 0, 0, 0}, 0x2075 }, // U2075 # SUPERSCRIPT FIVE -+ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0036, 0, 0, 0, 0}, 0x2076 }, // U2076 # SUPERSCRIPT SIX -+ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0037, 0, 0, 0, 0}, 0x2077 }, // U2077 # SUPERSCRIPT SEVEN -+ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0038, 0, 0, 0, 0}, 0x2078 }, // U2078 # SUPERSCRIPT EIGHT -+ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0039, 0, 0, 0, 0}, 0x2079 }, // U2079 # SUPERSCRIPT NINE -+ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x003d, 0, 0, 0, 0}, 0x207c }, // U207C # SUPERSCRIPT EQUALS SIGN -+ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0041, 0, 0, 0, 0}, 0x00c2 }, // U00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX -+ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0043, 0, 0, 0, 0}, 0x0108 }, // U0108 # LATIN CAPITAL LETTER C WITH CIRCUMFLEX -+ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0045, 0, 0, 0, 0}, 0x00ca }, // U00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX -+ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0047, 0, 0, 0, 0}, 0x011c }, // U011C # LATIN CAPITAL LETTER G WITH CIRCUMFLEX -+ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0048, 0, 0, 0, 0}, 0x0124 }, // U0124 # LATIN CAPITAL LETTER H WITH CIRCUMFLEX -+ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0049, 0, 0, 0, 0}, 0x00ce }, // U00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX -+ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x004a, 0, 0, 0, 0}, 0x0134 }, // U0134 # LATIN CAPITAL LETTER J WITH CIRCUMFLEX -+ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x004f, 0, 0, 0, 0}, 0x00d4 }, // U00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX -+ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0053, 0, 0, 0, 0}, 0x015c }, // U015C # LATIN CAPITAL LETTER S WITH CIRCUMFLEX -+ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0055, 0, 0, 0, 0}, 0x00db }, // U00DB # LATIN CAPITAL LETTER U WITH CIRCUMFLEX -+ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0057, 0, 0, 0, 0}, 0x0174 }, // U0174 # LATIN CAPITAL LETTER W WITH CIRCUMFLEX -+ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0059, 0, 0, 0, 0}, 0x0176 }, // U0176 # LATIN CAPITAL LETTER Y WITH CIRCUMFLEX -+ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x005a, 0, 0, 0, 0}, 0x1e90 }, // U1E90 # LATIN CAPITAL LETTER Z WITH CIRCUMFLEX -+ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0061, 0, 0, 0, 0}, 0x00e2 }, // U00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX -+ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0063, 0, 0, 0, 0}, 0x0109 }, // U0109 # LATIN SMALL LETTER C WITH CIRCUMFLEX -+ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0065, 0, 0, 0, 0}, 0x00ea }, // U00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX -+ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0067, 0, 0, 0, 0}, 0x011d }, // U011D # LATIN SMALL LETTER G WITH CIRCUMFLEX -+ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0068, 0, 0, 0, 0}, 0x0125 }, // U0125 # LATIN SMALL LETTER H WITH CIRCUMFLEX -+ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0069, 0, 0, 0, 0}, 0x00ee }, // U00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX -+ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x006a, 0, 0, 0, 0}, 0x0135 }, // U0135 # LATIN SMALL LETTER J WITH CIRCUMFLEX -+ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x006f, 0, 0, 0, 0}, 0x00f4 }, // U00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX -+ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0073, 0, 0, 0, 0}, 0x015d }, // U015D # LATIN SMALL LETTER S WITH CIRCUMFLEX -+ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0075, 0, 0, 0, 0}, 0x00fb }, // U00FB # LATIN SMALL LETTER U WITH CIRCUMFLEX -+ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0077, 0, 0, 0, 0}, 0x0175 }, // U0175 # LATIN SMALL LETTER W WITH CIRCUMFLEX -+ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x0079, 0, 0, 0, 0}, 0x0177 }, // U0177 # LATIN SMALL LETTER Y WITH CIRCUMFLEX -+ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x007a, 0, 0, 0, 0}, 0x1e91 }, // U1E91 # LATIN SMALL LETTER Z WITH CIRCUMFLEX -+ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x1ea0, 0, 0, 0, 0}, 0x1eac }, // U1EAC # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW -+ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x1ea1, 0, 0, 0, 0}, 0x1ead }, // U1EAD # LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW -+ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x1eb8, 0, 0, 0, 0}, 0x1ec6 }, // U1EC6 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW -+ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x1eb9, 0, 0, 0, 0}, 0x1ec7 }, // U1EC7 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW -+ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x1ecc, 0, 0, 0, 0}, 0x1ed8 }, // U1ED8 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW -+ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x1ecd, 0, 0, 0, 0}, 0x1ed9 }, // U1ED9 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW -+ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x2212, 0, 0, 0, 0}, 0x207b }, // U207B # SUPERSCRIPT MINUS -+ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x4e00, 0, 0, 0, 0}, 0x3192 }, // U3192 # IDEOGRAPHIC ANNOTATION ONE MARK -+ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x4e01, 0, 0, 0, 0}, 0x319c }, // U319C # IDEOGRAPHIC ANNOTATION FOURTH MARK -+ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x4e09, 0, 0, 0, 0}, 0x3194 }, // U3194 # IDEOGRAPHIC ANNOTATION THREE MARK -+ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x4e0a, 0, 0, 0, 0}, 0x3196 }, // U3196 # IDEOGRAPHIC ANNOTATION TOP MARK -+ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x4e0b, 0, 0, 0, 0}, 0x3198 }, // U3198 # IDEOGRAPHIC ANNOTATION BOTTOM MARK -+ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x4e19, 0, 0, 0, 0}, 0x319b }, // U319B # IDEOGRAPHIC ANNOTATION THIRD MARK -+ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x4e2d, 0, 0, 0, 0}, 0x3197 }, // U3197 # IDEOGRAPHIC ANNOTATION MIDDLE MARK -+ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x4e59, 0, 0, 0, 0}, 0x319a }, // U319A # IDEOGRAPHIC ANNOTATION SECOND MARK -+ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x4e8c, 0, 0, 0, 0}, 0x3193 }, // U3193 # IDEOGRAPHIC ANNOTATION TWO MARK -+ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x4eba, 0, 0, 0, 0}, 0x319f }, // U319F # IDEOGRAPHIC ANNOTATION MAN MARK -+ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x56db, 0, 0, 0, 0}, 0x3195 }, // U3195 # IDEOGRAPHIC ANNOTATION FOUR MARK -+ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x5730, 0, 0, 0, 0}, 0x319e }, // U319E # IDEOGRAPHIC ANNOTATION EARTH MARK -+ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x5929, 0, 0, 0, 0}, 0x319d }, // U319D # IDEOGRAPHIC ANNOTATION HEAVEN MARK -+ { {UNITIZE(Qt::Key_Dead_Circumflex), 0x7532, 0, 0, 0, 0}, 0x3199 }, // U3199 # IDEOGRAPHIC ANNOTATION FIRST MARK -+ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0041, 0, 0}, 0x1eac }, // U1EAC # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW -+ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0045, 0, 0}, 0x1ec6 }, // U1EC6 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW -+ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x0021, 0x004f, 0, 0}, 0x1ed8 }, // U1ED8 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW -+ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0061, 0, 0}, 0x1ead }, // U1EAD # LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW -+ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0065, 0, 0}, 0x1ec7 }, // U1EC7 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW -+ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x0021, 0x006f, 0, 0}, 0x1ed9 }, // U1ED9 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW -+ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x0053, 0x004d, 0, 0}, 0x2120 }, // U2120 # SERVICE MARK -+ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x0054, 0x004d, 0, 0}, 0x2122 }, // U2122 # TRADE MARK SIGN -+ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0061, 0, 0}, 0x00aa }, // U00AA # FEMININE ORDINAL INDICATOR -+ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0061, 0, 0}, 0x00aa }, // U00AA # FEMININE ORDINAL INDICATOR -+ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0068, 0, 0}, 0x02b0 }, // U02B0 # MODIFIER LETTER SMALL H -+ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0068, 0, 0}, 0x02b0 }, // U02B0 # MODIFIER LETTER SMALL H -+ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0069, 0, 0}, 0x2071 }, // U2071 # SUPERSCRIPT LATIN SMALL LETTER I -+ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0069, 0, 0}, 0x2071 }, // U2071 # SUPERSCRIPT LATIN SMALL LETTER I -+ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x006a, 0, 0}, 0x02b2 }, // U02B2 # MODIFIER LETTER SMALL J -+ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x006a, 0, 0}, 0x02b2 }, // U02B2 # MODIFIER LETTER SMALL J -+ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x006c, 0, 0}, 0x02e1 }, // U02E1 # MODIFIER LETTER SMALL L -+ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x006c, 0, 0}, 0x02e1 }, // U02E1 # MODIFIER LETTER SMALL L -+ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x006e, 0, 0}, 0x207f }, // U207F # SUPERSCRIPT LATIN SMALL LETTER N -+ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x006e, 0, 0}, 0x207f }, // U207F # SUPERSCRIPT LATIN SMALL LETTER N -+ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x006f, 0, 0}, 0x00ba }, // U00BA # MASCULINE ORDINAL INDICATOR -+ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x006f, 0, 0}, 0x00ba }, // U00BA # MASCULINE ORDINAL INDICATOR -+ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0072, 0, 0}, 0x02b3 }, // U02B3 # MODIFIER LETTER SMALL R -+ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0072, 0, 0}, 0x02b3 }, // U02B3 # MODIFIER LETTER SMALL R -+ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0073, 0, 0}, 0x02e2 }, // U02E2 # MODIFIER LETTER SMALL S -+ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0073, 0, 0}, 0x02e2 }, // U02E2 # MODIFIER LETTER SMALL S -+ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0077, 0, 0}, 0x02b7 }, // U02B7 # MODIFIER LETTER SMALL W -+ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0077, 0, 0}, 0x02b7 }, // U02B7 # MODIFIER LETTER SMALL W -+ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0078, 0, 0}, 0x02e3 }, // U02E3 # MODIFIER LETTER SMALL X -+ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0078, 0, 0}, 0x02e3 }, // U02E3 # MODIFIER LETTER SMALL X -+ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0079, 0, 0}, 0x02b8 }, // U02B8 # MODIFIER LETTER SMALL Y -+ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0079, 0, 0}, 0x02b8 }, // U02B8 # MODIFIER LETTER SMALL Y -+ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0263, 0, 0}, 0x02e0 }, // U02E0 # MODIFIER LETTER SMALL GAMMA -+ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0263, 0, 0}, 0x02e0 }, // U02E0 # MODIFIER LETTER SMALL GAMMA -+ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0266, 0, 0}, 0x02b1 }, // U02B1 # MODIFIER LETTER SMALL H WITH HOOK -+ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0266, 0, 0}, 0x02b1 }, // U02B1 # MODIFIER LETTER SMALL H WITH HOOK -+ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0279, 0, 0}, 0x02b4 }, // U02B4 # MODIFIER LETTER SMALL TURNED R -+ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0279, 0, 0}, 0x02b4 }, // U02B4 # MODIFIER LETTER SMALL TURNED R -+ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x027b, 0, 0}, 0x02b5 }, // U02B5 # MODIFIER LETTER SMALL TURNED R WITH HOOK -+ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x027b, 0, 0}, 0x02b5 }, // U02B5 # MODIFIER LETTER SMALL TURNED R WITH HOOK -+ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0281, 0, 0}, 0x02b6 }, // U02B6 # MODIFIER LETTER SMALL CAPITAL INVERTED R -+ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0281, 0, 0}, 0x02b6 }, // U02B6 # MODIFIER LETTER SMALL CAPITAL INVERTED R -+ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0295, 0, 0}, 0x02e4 }, // U02E4 # MODIFIER LETTER SMALL REVERSED GLOTTAL STOP -+ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0295, 0, 0}, 0x02e4 }, // U02E4 # MODIFIER LETTER SMALL REVERSED GLOTTAL STOP -+ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Dead_Circumflex), 0, 0, 0, 0}, 0x005e }, // asciicircum -+ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Dead_Belowdot), 0x0041, 0, 0, 0}, 0x1eac }, // U1EAC # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW -+ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Dead_Belowdot), 0x0045, 0, 0, 0}, 0x1ec6 }, // U1EC6 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW -+ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Dead_Belowdot), 0x004f, 0, 0, 0}, 0x1ed8 }, // U1ED8 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW -+ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Dead_Belowdot), 0x0061, 0, 0, 0}, 0x1ead }, // U1EAD # LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW -+ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Dead_Belowdot), 0x0065, 0, 0, 0}, 0x1ec7 }, // U1EC7 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW -+ { {UNITIZE(Qt::Key_Dead_Circumflex), UNITIZE(Qt::Key_Dead_Belowdot), 0x006f, 0, 0, 0}, 0x1ed9 }, // U1ED9 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0000, 0, 0, 0, 0}, 0x1ee0 }, // U1EE0 # LATIN CAPITAL LETTER O WITH HORN AND TILDE -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0000, 0, 0, 0, 0}, 0x1eee }, // U1EEE # LATIN CAPITAL LETTER U WITH HORN AND TILDE -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0000, 0, 0, 0, 0}, 0x1eef }, // U1EEF # LATIN SMALL LETTER U WITH HORN AND TILDE -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0000, 0, 0, 0, 0}, 0x1ee1 }, // U1EE1 # LATIN SMALL LETTER O WITH HORN AND TILDE -+ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0020, 0, 0, 0, 0}, 0x007e }, // asciitilde -+ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0041, 0, 0, 0, 0}, 0x00c3 }, // U00C3 # LATIN CAPITAL LETTER A WITH TILDE -+ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0045, 0, 0, 0, 0}, 0x1ebc }, // U1EBC # LATIN CAPITAL LETTER E WITH TILDE -+ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0049, 0, 0, 0, 0}, 0x0128 }, // U0128 # LATIN CAPITAL LETTER I WITH TILDE -+ { {UNITIZE(Qt::Key_Dead_Tilde), 0x004e, 0, 0, 0, 0}, 0x00d1 }, // U00D1 # LATIN CAPITAL LETTER N WITH TILDE -+ { {UNITIZE(Qt::Key_Dead_Tilde), 0x004f, 0, 0, 0, 0}, 0x00d5 }, // U00D5 # LATIN CAPITAL LETTER O WITH TILDE -+ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0055, 0, 0, 0, 0}, 0x0168 }, // U0168 # LATIN CAPITAL LETTER U WITH TILDE -+ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0056, 0, 0, 0, 0}, 0x1e7c }, // U1E7C # LATIN CAPITAL LETTER V WITH TILDE -+ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0059, 0, 0, 0, 0}, 0x1ef8 }, // U1EF8 # LATIN CAPITAL LETTER Y WITH TILDE -+ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0061, 0, 0, 0, 0}, 0x00e3 }, // U00E3 # LATIN SMALL LETTER A WITH TILDE -+ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0065, 0, 0, 0, 0}, 0x1ebd }, // U1EBD # LATIN SMALL LETTER E WITH TILDE -+ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0069, 0, 0, 0, 0}, 0x0129 }, // U0129 # LATIN SMALL LETTER I WITH TILDE -+ { {UNITIZE(Qt::Key_Dead_Tilde), 0x006e, 0, 0, 0, 0}, 0x00f1 }, // U00F1 # LATIN SMALL LETTER N WITH TILDE -+ { {UNITIZE(Qt::Key_Dead_Tilde), 0x006f, 0, 0, 0, 0}, 0x00f5 }, // U00F5 # LATIN SMALL LETTER O WITH TILDE -+ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0075, 0, 0, 0, 0}, 0x0169 }, // U0169 # LATIN SMALL LETTER U WITH TILDE -+ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0076, 0, 0, 0, 0}, 0x1e7d }, // U1E7D # LATIN SMALL LETTER V WITH TILDE -+ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0079, 0, 0, 0, 0}, 0x1ef9 }, // U1EF9 # LATIN SMALL LETTER Y WITH TILDE -+ { {UNITIZE(Qt::Key_Dead_Tilde), 0x00c2, 0, 0, 0, 0}, 0x1eaa }, // U1EAA # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE -+ { {UNITIZE(Qt::Key_Dead_Tilde), 0x00ca, 0, 0, 0, 0}, 0x1ec4 }, // U1EC4 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE -+ { {UNITIZE(Qt::Key_Dead_Tilde), 0x00d4, 0, 0, 0, 0}, 0x1ed6 }, // U1ED6 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE -+ { {UNITIZE(Qt::Key_Dead_Tilde), 0x00e2, 0, 0, 0, 0}, 0x1eab }, // U1EAB # LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE -+ { {UNITIZE(Qt::Key_Dead_Tilde), 0x00ea, 0, 0, 0, 0}, 0x1ec5 }, // U1EC5 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE -+ { {UNITIZE(Qt::Key_Dead_Tilde), 0x00f4, 0, 0, 0, 0}, 0x1ed7 }, // U1ED7 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE -+ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0102, 0, 0, 0, 0}, 0x1eb4 }, // U1EB4 # LATIN CAPITAL LETTER A WITH BREVE AND TILDE -+ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0103, 0, 0, 0, 0}, 0x1eb5 }, // U1EB5 # LATIN SMALL LETTER A WITH BREVE AND TILDE -+ { {UNITIZE(Qt::Key_Dead_Tilde), 0x01A0, 0, 0, 0, 0}, 0x1ee0 }, // U1EE0 # LATIN CAPITAL LETTER O WITH HORN AND TILDE -+ { {UNITIZE(Qt::Key_Dead_Tilde), 0x01A1, 0, 0, 0, 0}, 0x1ee1 }, // U1EE1 # LATIN SMALL LETTER O WITH HORN AND TILDE -+ { {UNITIZE(Qt::Key_Dead_Tilde), 0x01AF, 0, 0, 0, 0}, 0x1eee }, // U1EEE # LATIN CAPITAL LETTER U WITH HORN AND TILDE -+ { {UNITIZE(Qt::Key_Dead_Tilde), 0x01B0, 0, 0, 0, 0}, 0x1eef }, // U1EEF # LATIN SMALL LETTER U WITH HORN AND TILDE -+ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0313, 0x0391, 0, 0, 0}, 0x1f0e }, // U1F0E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0313, 0x0397, 0, 0, 0}, 0x1f2e }, // U1F2E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0313, 0x0399, 0, 0, 0}, 0x1f3e }, // U1F3E # GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0313, 0x03a9, 0, 0, 0}, 0x1f6e }, // U1F6E # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0313, 0x03b1, 0, 0, 0}, 0x1f06 }, // U1F06 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0313, 0x03b7, 0, 0, 0}, 0x1f26 }, // U1F26 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0313, 0x03b9, 0, 0, 0}, 0x1f36 }, // U1F36 # GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0313, 0x03c5, 0, 0, 0}, 0x1f56 }, // U1F56 # GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0313, 0x03c9, 0, 0, 0}, 0x1f66 }, // U1F66 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0314, 0x0391, 0, 0, 0}, 0x1f0f }, // U1F0F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0314, 0x0397, 0, 0, 0}, 0x1f2f }, // U1F2F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0314, 0x0399, 0, 0, 0}, 0x1f3f }, // U1F3F # GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0314, 0x03a5, 0, 0, 0}, 0x1f5f }, // U1F5F # GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0314, 0x03a9, 0, 0, 0}, 0x1f6f }, // U1F6F # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0314, 0x03b1, 0, 0, 0}, 0x1f07 }, // U1F07 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0314, 0x03b7, 0, 0, 0}, 0x1f27 }, // U1F27 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0314, 0x03b9, 0, 0, 0}, 0x1f37 }, // U1F37 # GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0314, 0x03c5, 0, 0, 0}, 0x1f57 }, // U1F57 # GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Dead_Tilde), 0x0314, 0x03c9, 0, 0, 0}, 0x1f67 }, // U1F67 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Dead_Tilde), 0x03b1, 0, 0, 0, 0}, 0x1fb6 }, // U1FB6 # GREEK SMALL LETTER ALPHA WITH PERISPOMENI -+ { {UNITIZE(Qt::Key_Dead_Tilde), 0x03b7, 0, 0, 0, 0}, 0x1fc6 }, // U1FC6 # GREEK SMALL LETTER ETA WITH PERISPOMENI -+ { {UNITIZE(Qt::Key_Dead_Tilde), 0x03b9, 0, 0, 0, 0}, 0x1fd6 }, // U1FD6 # GREEK SMALL LETTER IOTA WITH PERISPOMENI -+ { {UNITIZE(Qt::Key_Dead_Tilde), 0x03c5, 0, 0, 0, 0}, 0x1fe6 }, // U1FE6 # GREEK SMALL LETTER UPSILON WITH PERISPOMENI -+ { {UNITIZE(Qt::Key_Dead_Tilde), 0x03c9, 0, 0, 0, 0}, 0x1ff6 }, // U1FF6 # GREEK SMALL LETTER OMEGA WITH PERISPOMENI -+ { {UNITIZE(Qt::Key_Dead_Tilde), 0x03ca, 0, 0, 0, 0}, 0x1fd7 }, // U1FD7 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Dead_Tilde), 0x03cb, 0, 0, 0, 0}, 0x1fe7 }, // U1FE7 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Dead_Tilde), 0x1f00, 0, 0, 0, 0}, 0x1f06 }, // U1F06 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Dead_Tilde), 0x1f01, 0, 0, 0, 0}, 0x1f07 }, // U1F07 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Dead_Tilde), 0x1f08, 0, 0, 0, 0}, 0x1f0e }, // U1F0E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Dead_Tilde), 0x1f09, 0, 0, 0, 0}, 0x1f0f }, // U1F0F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Dead_Tilde), 0x1f20, 0, 0, 0, 0}, 0x1f26 }, // U1F26 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Dead_Tilde), 0x1f21, 0, 0, 0, 0}, 0x1f27 }, // U1F27 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Dead_Tilde), 0x1f28, 0, 0, 0, 0}, 0x1f2e }, // U1F2E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Dead_Tilde), 0x1f29, 0, 0, 0, 0}, 0x1f2f }, // U1F2F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Dead_Tilde), 0x1f30, 0, 0, 0, 0}, 0x1f36 }, // U1F36 # GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Dead_Tilde), 0x1f31, 0, 0, 0, 0}, 0x1f37 }, // U1F37 # GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Dead_Tilde), 0x1f38, 0, 0, 0, 0}, 0x1f3e }, // U1F3E # GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Dead_Tilde), 0x1f39, 0, 0, 0, 0}, 0x1f3f }, // U1F3F # GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Dead_Tilde), 0x1f50, 0, 0, 0, 0}, 0x1f56 }, // U1F56 # GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Dead_Tilde), 0x1f51, 0, 0, 0, 0}, 0x1f57 }, // U1F57 # GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Dead_Tilde), 0x1f59, 0, 0, 0, 0}, 0x1f5f }, // U1F5F # GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Dead_Tilde), 0x1f60, 0, 0, 0, 0}, 0x1f66 }, // U1F66 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Dead_Tilde), 0x1f61, 0, 0, 0, 0}, 0x1f67 }, // U1F67 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Dead_Tilde), 0x1f68, 0, 0, 0, 0}, 0x1f6e }, // U1F6E # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Dead_Tilde), 0x1f69, 0, 0, 0, 0}, 0x1f6f }, // U1F6F # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0022, 0x03b9, 0, 0}, 0x1fd7 }, // U1FD7 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0022, 0x03c5, 0, 0}, 0x1fe7 }, // U1FE7 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0391, 0, 0}, 0x1f0f }, // U1F0F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0397, 0, 0}, 0x1f2f }, // U1F2F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0399, 0, 0}, 0x1f3f }, // U1F3F # GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03a5, 0, 0}, 0x1f5f }, // U1F5F # GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03a9, 0, 0}, 0x1f6f }, // U1F6F # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b1, 0, 0}, 0x1f07 }, // U1F07 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b7, 0, 0}, 0x1f27 }, // U1F27 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b9, 0, 0}, 0x1f37 }, // U1F37 # GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03c5, 0, 0}, 0x1f57 }, // U1F57 # GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03c9, 0, 0}, 0x1f67 }, // U1F67 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0391, 0, 0}, 0x1f0e }, // U1F0E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0397, 0, 0}, 0x1f2e }, // U1F2E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0399, 0, 0}, 0x1f3e }, // U1F3E # GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03a9, 0, 0}, 0x1f6e }, // U1F6E # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b1, 0, 0}, 0x1f06 }, // U1F06 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b7, 0, 0}, 0x1f26 }, // U1F26 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b9, 0, 0}, 0x1f36 }, // U1F36 # GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03c5, 0, 0}, 0x1f56 }, // U1F56 # GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03c9, 0, 0}, 0x1f66 }, // U1F66 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x002b, 0x004f, 0, 0}, 0x1ee0 }, // U1EE0 # LATIN CAPITAL LETTER O WITH HORN AND TILDE -+ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x002b, 0x0055, 0, 0}, 0x1eee }, // U1EEE # LATIN CAPITAL LETTER U WITH HORN AND TILDE -+ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x002b, 0x006f, 0, 0}, 0x1ee1 }, // U1EE1 # LATIN SMALL LETTER O WITH HORN AND TILDE -+ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x002b, 0x0075, 0, 0}, 0x1eef }, // U1EEF # LATIN SMALL LETTER U WITH HORN AND TILDE -+ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0041, 0, 0}, 0x1eb4 }, // U1EB4 # LATIN CAPITAL LETTER A WITH BREVE AND TILDE -+ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0061, 0, 0}, 0x1eb5 }, // U1EB5 # LATIN SMALL LETTER A WITH BREVE AND TILDE -+ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0041, 0, 0}, 0x1eaa }, // U1EAA # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE -+ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0045, 0, 0}, 0x1ec4 }, // U1EC4 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE -+ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x005e, 0x004f, 0, 0}, 0x1ed6 }, // U1ED6 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE -+ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0061, 0, 0}, 0x1eab }, // U1EAB # LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE -+ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0065, 0, 0}, 0x1ec5 }, // U1EC5 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE -+ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x005e, 0x006f, 0, 0}, 0x1ed7 }, // U1ED7 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE -+ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0041, 0, 0}, 0x1eb4 }, // U1EB4 # LATIN CAPITAL LETTER A WITH BREVE AND TILDE -+ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0061, 0, 0}, 0x1eb5 }, // U1EB5 # LATIN SMALL LETTER A WITH BREVE AND TILDE -+ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Dead_Circumflex), 0x0041, 0, 0, 0}, 0x1eaa }, // U1EAA # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE -+ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Dead_Circumflex), 0x0045, 0, 0, 0}, 0x1ec4 }, // U1EC4 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE -+ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Dead_Circumflex), 0x004f, 0, 0, 0}, 0x1ed6 }, // U1ED6 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE -+ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Dead_Circumflex), 0x0061, 0, 0, 0}, 0x1eab }, // U1EAB # LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE -+ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Dead_Circumflex), 0x0065, 0, 0, 0}, 0x1ec5 }, // U1EC5 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE -+ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Dead_Circumflex), 0x006f, 0, 0, 0}, 0x1ed7 }, // U1ED7 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE -+ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Dead_Tilde), 0, 0, 0, 0}, 0x007e }, // asciitilde -+ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Dead_Breve), 0x0041, 0, 0, 0}, 0x1eb4 }, // U1EB4 # LATIN CAPITAL LETTER A WITH BREVE AND TILDE -+ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Dead_Breve), 0x0061, 0, 0, 0}, 0x1eb5 }, // U1EB5 # LATIN SMALL LETTER A WITH BREVE AND TILDE -+ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Dead_Diaeresis), 0x03b9, 0, 0, 0}, 0x1fd7 }, // U1FD7 # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Dead_Diaeresis), 0x03c5, 0, 0, 0}, 0x1fe7 }, // U1FE7 # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI -+ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Dead_Horn), 0x004f, 0, 0, 0}, 0x1ee0 }, // U1EE0 # LATIN CAPITAL LETTER O WITH HORN AND TILDE -+ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Dead_Horn), 0x0055, 0, 0, 0}, 0x1eee }, // U1EEE # LATIN CAPITAL LETTER U WITH HORN AND TILDE -+ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Dead_Horn), 0x006f, 0, 0, 0}, 0x1ee1 }, // U1EE1 # LATIN SMALL LETTER O WITH HORN AND TILDE -+ { {UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Dead_Horn), 0x0075, 0, 0, 0}, 0x1eef }, // U1EEF # LATIN SMALL LETTER U WITH HORN AND TILDE -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Macron), 0x0000, 0x004c, 0, 0, 0}, 0x1e38 }, // U1E38 # LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Macron), 0x0000, 0x004f, 0, 0, 0}, 0x022c }, // U022C # LATIN CAPITAL LETTER O WITH TILDE AND MACRON -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Macron), 0x0000, 0x0052, 0, 0, 0}, 0x1e5c }, // U1E5C # LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Macron), 0x0000, 0x006c, 0, 0, 0}, 0x1e39 }, // U1E39 # LATIN SMALL LETTER L WITH DOT BELOW AND MACRON -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Macron), 0x0000, 0x006f, 0, 0, 0}, 0x022d }, // U022D # LATIN SMALL LETTER O WITH TILDE AND MACRON -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Macron), 0x0000, 0x0072, 0, 0, 0}, 0x1e5d }, // U1E5D # LATIN SMALL LETTER R WITH DOT BELOW AND MACRON -+ { {UNITIZE(Qt::Key_Dead_Macron), 0x0020, 0, 0, 0, 0}, 0x00af }, // macron -+ { {UNITIZE(Qt::Key_Dead_Macron), 0x0041, 0, 0, 0, 0}, 0x0100 }, // U0100 # LATIN CAPITAL LETTER A WITH MACRON -+ { {UNITIZE(Qt::Key_Dead_Macron), 0x0045, 0, 0, 0, 0}, 0x0112 }, // U0112 # LATIN CAPITAL LETTER E WITH MACRON -+ { {UNITIZE(Qt::Key_Dead_Macron), 0x0047, 0, 0, 0, 0}, 0x1e20 }, // U1E20 # LATIN CAPITAL LETTER G WITH MACRON -+ { {UNITIZE(Qt::Key_Dead_Macron), 0x0049, 0, 0, 0, 0}, 0x012a }, // U012A # LATIN CAPITAL LETTER I WITH MACRON -+ { {UNITIZE(Qt::Key_Dead_Macron), 0x004f, 0, 0, 0, 0}, 0x014c }, // U014C # LATIN CAPITAL LETTER O WITH MACRON -+ { {UNITIZE(Qt::Key_Dead_Macron), 0x0055, 0, 0, 0, 0}, 0x016a }, // U016A # LATIN CAPITAL LETTER U WITH MACRON -+ { {UNITIZE(Qt::Key_Dead_Macron), 0x0059, 0, 0, 0, 0}, 0x0232 }, // U0232 # LATIN CAPITAL LETTER Y WITH MACRON -+ { {UNITIZE(Qt::Key_Dead_Macron), 0x0061, 0, 0, 0, 0}, 0x0101 }, // U0101 # LATIN SMALL LETTER A WITH MACRON -+ { {UNITIZE(Qt::Key_Dead_Macron), 0x0065, 0, 0, 0, 0}, 0x0113 }, // U0113 # LATIN SMALL LETTER E WITH MACRON -+ { {UNITIZE(Qt::Key_Dead_Macron), 0x0067, 0, 0, 0, 0}, 0x1e21 }, // U1E21 # LATIN SMALL LETTER G WITH MACRON -+ { {UNITIZE(Qt::Key_Dead_Macron), 0x0069, 0, 0, 0, 0}, 0x012b }, // U012B # LATIN SMALL LETTER I WITH MACRON -+ { {UNITIZE(Qt::Key_Dead_Macron), 0x006f, 0, 0, 0, 0}, 0x014d }, // U014D # LATIN SMALL LETTER O WITH MACRON -+ { {UNITIZE(Qt::Key_Dead_Macron), 0x0075, 0, 0, 0, 0}, 0x016b }, // U016B # LATIN SMALL LETTER U WITH MACRON -+ { {UNITIZE(Qt::Key_Dead_Macron), 0x0079, 0, 0, 0, 0}, 0x0233 }, // U0233 # LATIN SMALL LETTER Y WITH MACRON -+ { {UNITIZE(Qt::Key_Dead_Macron), 0x00c4, 0, 0, 0, 0}, 0x01de }, // U01DE # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON -+ { {UNITIZE(Qt::Key_Dead_Macron), 0x00c6, 0, 0, 0, 0}, 0x01e2 }, // U01E2 # LATIN CAPITAL LETTER AE WITH MACRON -+ { {UNITIZE(Qt::Key_Dead_Macron), 0x00d5, 0, 0, 0, 0}, 0x022c }, // U022C # LATIN CAPITAL LETTER O WITH TILDE AND MACRON -+ { {UNITIZE(Qt::Key_Dead_Macron), 0x00d6, 0, 0, 0, 0}, 0x022a }, // U022A # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON -+ { {UNITIZE(Qt::Key_Dead_Macron), 0x00dc, 0, 0, 0, 0}, 0x01d5 }, // U01D5 # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON -+ { {UNITIZE(Qt::Key_Dead_Macron), 0x00e4, 0, 0, 0, 0}, 0x01df }, // U01DF # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON -+ { {UNITIZE(Qt::Key_Dead_Macron), 0x00e6, 0, 0, 0, 0}, 0x01e3 }, // U01E3 # LATIN SMALL LETTER AE WITH MACRON -+ { {UNITIZE(Qt::Key_Dead_Macron), 0x00f5, 0, 0, 0, 0}, 0x022d }, // U022D # LATIN SMALL LETTER O WITH TILDE AND MACRON -+ { {UNITIZE(Qt::Key_Dead_Macron), 0x00f6, 0, 0, 0, 0}, 0x022b }, // U022B # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON -+ { {UNITIZE(Qt::Key_Dead_Macron), 0x00fc, 0, 0, 0, 0}, 0x01d6 }, // U01D6 # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON -+ { {UNITIZE(Qt::Key_Dead_Macron), 0x01ea, 0, 0, 0, 0}, 0x01ec }, // U01EC # LATIN CAPITAL LETTER O WITH OGONEK AND MACRON -+ { {UNITIZE(Qt::Key_Dead_Macron), 0x01eb, 0, 0, 0, 0}, 0x01ed }, // U01ED # LATIN SMALL LETTER O WITH OGONEK AND MACRON -+ { {UNITIZE(Qt::Key_Dead_Macron), 0x0226, 0, 0, 0, 0}, 0x01e0 }, // U01E0 # LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON -+ { {UNITIZE(Qt::Key_Dead_Macron), 0x0227, 0, 0, 0, 0}, 0x01e1 }, // U01E1 # LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON -+ { {UNITIZE(Qt::Key_Dead_Macron), 0x022e, 0, 0, 0, 0}, 0x0230 }, // U0230 # LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON -+ { {UNITIZE(Qt::Key_Dead_Macron), 0x022f, 0, 0, 0, 0}, 0x0231 }, // U0231 # LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON -+ { {UNITIZE(Qt::Key_Dead_Macron), 0x0391, 0, 0, 0, 0}, 0x1fb9 }, // U1FB9 # GREEK CAPITAL LETTER ALPHA WITH MACRON -+ { {UNITIZE(Qt::Key_Dead_Macron), 0x0399, 0, 0, 0, 0}, 0x1fd9 }, // U1FD9 # GREEK CAPITAL LETTER IOTA WITH MACRON -+ { {UNITIZE(Qt::Key_Dead_Macron), 0x03a5, 0, 0, 0, 0}, 0x1fe9 }, // U1FE9 # GREEK CAPITAL LETTER UPSILON WITH MACRON -+ { {UNITIZE(Qt::Key_Dead_Macron), 0x03b1, 0, 0, 0, 0}, 0x1fb1 }, // U1FB1 # GREEK SMALL LETTER ALPHA WITH MACRON -+ { {UNITIZE(Qt::Key_Dead_Macron), 0x03b9, 0, 0, 0, 0}, 0x1fd1 }, // U1FD1 # GREEK SMALL LETTER IOTA WITH MACRON -+ { {UNITIZE(Qt::Key_Dead_Macron), 0x03c5, 0, 0, 0, 0}, 0x1fe1 }, // U1FE1 # GREEK SMALL LETTER UPSILON WITH MACRON -+ { {UNITIZE(Qt::Key_Dead_Macron), 0x0418, 0, 0, 0, 0}, 0x04e2 }, // U04E2 # CYRILLIC CAPITAL LETTER I WITH MACRON -+ { {UNITIZE(Qt::Key_Dead_Macron), 0x0423, 0, 0, 0, 0}, 0x04ee }, // U04EE # CYRILLIC CAPITAL LETTER U WITH MACRON -+ { {UNITIZE(Qt::Key_Dead_Macron), 0x0438, 0, 0, 0, 0}, 0x04e3 }, // U04E3 # CYRILLIC SMALL LETTER I WITH MACRON -+ { {UNITIZE(Qt::Key_Dead_Macron), 0x0443, 0, 0, 0, 0}, 0x04ef }, // U04EF # CYRILLIC SMALL LETTER U WITH MACRON -+ { {UNITIZE(Qt::Key_Dead_Macron), 0x1e36, 0, 0, 0, 0}, 0x1e38 }, // U1E38 # LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON -+ { {UNITIZE(Qt::Key_Dead_Macron), 0x1e37, 0, 0, 0, 0}, 0x1e39 }, // U1E39 # LATIN SMALL LETTER L WITH DOT BELOW AND MACRON -+ { {UNITIZE(Qt::Key_Dead_Macron), 0x1e5a, 0, 0, 0, 0}, 0x1e5c }, // U1E5C # LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON -+ { {UNITIZE(Qt::Key_Dead_Macron), 0x1e5b, 0, 0, 0, 0}, 0x1e5d }, // U1E5D # LATIN SMALL LETTER R WITH DOT BELOW AND MACRON -+ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Multi_key), 0x0021, 0x004c, 0, 0}, 0x1e38 }, // U1E38 # LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON -+ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0052, 0, 0}, 0x1e5c }, // U1E5C # LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON -+ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Multi_key), 0x0021, 0x006c, 0, 0}, 0x1e39 }, // U1E39 # LATIN SMALL LETTER L WITH DOT BELOW AND MACRON -+ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0072, 0, 0}, 0x1e5d }, // U1E5D # LATIN SMALL LETTER R WITH DOT BELOW AND MACRON -+ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0041, 0, 0}, 0x01de }, // U01DE # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON -+ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Multi_key), 0x0022, 0x004f, 0, 0}, 0x022a }, // U022A # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON -+ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0055, 0, 0}, 0x01d5 }, // U01D5 # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON -+ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0061, 0, 0}, 0x01df }, // U01DF # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON -+ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Multi_key), 0x0022, 0x006f, 0, 0}, 0x022b }, // U022B # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON -+ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0075, 0, 0}, 0x01d6 }, // U01D6 # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON -+ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0041, 0, 0}, 0x01e0 }, // U01E0 # LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON -+ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Multi_key), 0x002e, 0x004f, 0, 0}, 0x0230 }, // U0230 # LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON -+ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Multi_key), 0x002e, 0x0061, 0, 0}, 0x01e1 }, // U01E1 # LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON -+ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Multi_key), 0x002e, 0x006f, 0, 0}, 0x0231 }, // U0231 # LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON -+ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Multi_key), 0x003b, 0x004f, 0, 0}, 0x01ec }, // U01EC # LATIN CAPITAL LETTER O WITH OGONEK AND MACRON -+ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Multi_key), 0x003b, 0x006f, 0, 0}, 0x01ed }, // U01ED # LATIN SMALL LETTER O WITH OGONEK AND MACRON -+ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x004f, 0, 0}, 0x022c }, // U022C # LATIN CAPITAL LETTER O WITH TILDE AND MACRON -+ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x006f, 0, 0}, 0x022d }, // U022D # LATIN SMALL LETTER O WITH TILDE AND MACRON -+ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Dead_Tilde), 0x004f, 0, 0, 0}, 0x022c }, // U022C # LATIN CAPITAL LETTER O WITH TILDE AND MACRON -+ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Dead_Tilde), 0x006f, 0, 0, 0}, 0x022d }, // U022D # LATIN SMALL LETTER O WITH TILDE AND MACRON -+ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Dead_Macron), 0, 0, 0, 0}, 0x00af }, // macron -+ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Dead_Abovedot), 0x0041, 0, 0, 0}, 0x01e0 }, // U01E0 # LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON -+ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Dead_Abovedot), 0x004f, 0, 0, 0}, 0x0230 }, // U0230 # LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON -+ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Dead_Abovedot), 0x0061, 0, 0, 0}, 0x01e1 }, // U01E1 # LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON -+ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Dead_Abovedot), 0x006f, 0, 0, 0}, 0x0231 }, // U0231 # LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON -+ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Dead_Diaeresis), 0x0041, 0, 0, 0}, 0x01de }, // U01DE # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON -+ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Dead_Diaeresis), 0x004f, 0, 0, 0}, 0x022a }, // U022A # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON -+ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Dead_Diaeresis), 0x0055, 0, 0, 0}, 0x01d5 }, // U01D5 # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON -+ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Dead_Diaeresis), 0x0061, 0, 0, 0}, 0x01df }, // U01DF # LATIN SMALL LETTER A WITH DIAERESIS AND MACRON -+ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Dead_Diaeresis), 0x006f, 0, 0, 0}, 0x022b }, // U022B # LATIN SMALL LETTER O WITH DIAERESIS AND MACRON -+ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Dead_Diaeresis), 0x0075, 0, 0, 0}, 0x01d6 }, // U01D6 # LATIN SMALL LETTER U WITH DIAERESIS AND MACRON -+ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Dead_Ogonek), 0x004f, 0, 0, 0}, 0x01ec }, // U01EC # LATIN CAPITAL LETTER O WITH OGONEK AND MACRON -+ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Dead_Ogonek), 0x006f, 0, 0, 0}, 0x01ed }, // U01ED # LATIN SMALL LETTER O WITH OGONEK AND MACRON -+ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Dead_Belowdot), 0x004c, 0, 0, 0}, 0x1e38 }, // U1E38 # LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON -+ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Dead_Belowdot), 0x0052, 0, 0, 0}, 0x1e5c }, // U1E5C # LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON -+ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Dead_Belowdot), 0x006c, 0, 0, 0}, 0x1e39 }, // U1E39 # LATIN SMALL LETTER L WITH DOT BELOW AND MACRON -+ { {UNITIZE(Qt::Key_Dead_Macron), UNITIZE(Qt::Key_Dead_Belowdot), 0x0072, 0, 0, 0}, 0x1e5d }, // U1E5D # LATIN SMALL LETTER R WITH DOT BELOW AND MACRON -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Breve), 0x0000, 0x0041, 0, 0, 0}, 0x1eb6 }, // U1EB6 # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Breve), 0x0000, 0x0061, 0, 0, 0}, 0x1eb7 }, // U1EB7 # LATIN SMALL LETTER A WITH BREVE AND DOT BELOW -+ { {UNITIZE(Qt::Key_Dead_Breve), 0x0020, 0, 0, 0, 0}, 0x02d8 }, // breve -+ { {UNITIZE(Qt::Key_Dead_Breve), 0x0041, 0, 0, 0, 0}, 0x0102 }, // U0102 # LATIN CAPITAL LETTER A WITH BREVE -+ { {UNITIZE(Qt::Key_Dead_Breve), 0x0045, 0, 0, 0, 0}, 0x0114 }, // U0114 # LATIN CAPITAL LETTER E WITH BREVE -+ { {UNITIZE(Qt::Key_Dead_Breve), 0x0047, 0, 0, 0, 0}, 0x011e }, // U011E # LATIN CAPITAL LETTER G WITH BREVE -+ { {UNITIZE(Qt::Key_Dead_Breve), 0x0049, 0, 0, 0, 0}, 0x012c }, // U012C # LATIN CAPITAL LETTER I WITH BREVE -+ { {UNITIZE(Qt::Key_Dead_Breve), 0x004f, 0, 0, 0, 0}, 0x014e }, // U014E # LATIN CAPITAL LETTER O WITH BREVE -+ { {UNITIZE(Qt::Key_Dead_Breve), 0x0055, 0, 0, 0, 0}, 0x016c }, // U016C # LATIN CAPITAL LETTER U WITH BREVE -+ { {UNITIZE(Qt::Key_Dead_Breve), 0x0061, 0, 0, 0, 0}, 0x0103 }, // U0103 # LATIN SMALL LETTER A WITH BREVE -+ { {UNITIZE(Qt::Key_Dead_Breve), 0x0065, 0, 0, 0, 0}, 0x0115 }, // U0115 # LATIN SMALL LETTER E WITH BREVE -+ { {UNITIZE(Qt::Key_Dead_Breve), 0x0067, 0, 0, 0, 0}, 0x011f }, // U011F # LATIN SMALL LETTER G WITH BREVE -+ { {UNITIZE(Qt::Key_Dead_Breve), 0x0069, 0, 0, 0, 0}, 0x012d }, // U012D # LATIN SMALL LETTER I WITH BREVE -+ { {UNITIZE(Qt::Key_Dead_Breve), 0x006f, 0, 0, 0, 0}, 0x014f }, // U014F # LATIN SMALL LETTER O WITH BREVE -+ { {UNITIZE(Qt::Key_Dead_Breve), 0x0075, 0, 0, 0, 0}, 0x016d }, // U016D # LATIN SMALL LETTER U WITH BREVE -+ { {UNITIZE(Qt::Key_Dead_Breve), 0x0228, 0, 0, 0, 0}, 0x1e1c }, // U1E1C # LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE -+ { {UNITIZE(Qt::Key_Dead_Breve), 0x0229, 0, 0, 0, 0}, 0x1e1d }, // U1E1D # LATIN SMALL LETTER E WITH CEDILLA AND BREVE -+ { {UNITIZE(Qt::Key_Dead_Breve), 0x0391, 0, 0, 0, 0}, 0x1fb8 }, // U1FB8 # GREEK CAPITAL LETTER ALPHA WITH VRACHY -+ { {UNITIZE(Qt::Key_Dead_Breve), 0x0399, 0, 0, 0, 0}, 0x1fd8 }, // U1FD8 # GREEK CAPITAL LETTER IOTA WITH VRACHY -+ { {UNITIZE(Qt::Key_Dead_Breve), 0x03a5, 0, 0, 0, 0}, 0x1fe8 }, // U1FE8 # GREEK CAPITAL LETTER UPSILON WITH VRACHY -+ { {UNITIZE(Qt::Key_Dead_Breve), 0x03b1, 0, 0, 0, 0}, 0x1fb0 }, // U1FB0 # GREEK SMALL LETTER ALPHA WITH VRACHY -+ { {UNITIZE(Qt::Key_Dead_Breve), 0x03b9, 0, 0, 0, 0}, 0x1fd0 }, // U1FD0 # GREEK SMALL LETTER IOTA WITH VRACHY -+ { {UNITIZE(Qt::Key_Dead_Breve), 0x03c5, 0, 0, 0, 0}, 0x1fe0 }, // U1FE0 # GREEK SMALL LETTER UPSILON WITH VRACHY -+ { {UNITIZE(Qt::Key_Dead_Breve), 0x0410, 0, 0, 0, 0}, 0x04d0 }, // U04D0 # CYRILLIC CAPITAL LETTER A WITH BREVE -+ { {UNITIZE(Qt::Key_Dead_Breve), 0x0415, 0, 0, 0, 0}, 0x04d6 }, // U04D6 # CYRILLIC CAPITAL LETTER IE WITH BREVE -+ { {UNITIZE(Qt::Key_Dead_Breve), 0x0416, 0, 0, 0, 0}, 0x04c1 }, // U04C1 # CYRILLIC CAPITAL LETTER ZHE WITH BREVE -+ { {UNITIZE(Qt::Key_Dead_Breve), 0x0418, 0, 0, 0, 0}, 0x0419 }, // U0419 # CYRILLIC CAPITAL LETTER SHORT I -+ { {UNITIZE(Qt::Key_Dead_Breve), 0x0423, 0, 0, 0, 0}, 0x040e }, // U040E # CYRILLIC CAPITAL LETTER SHORT U -+ { {UNITIZE(Qt::Key_Dead_Breve), 0x0430, 0, 0, 0, 0}, 0x04d1 }, // U04D1 # CYRILLIC SMALL LETTER A WITH BREVE -+ { {UNITIZE(Qt::Key_Dead_Breve), 0x0435, 0, 0, 0, 0}, 0x04d7 }, // U04D7 # CYRILLIC SMALL LETTER IE WITH BREVE -+ { {UNITIZE(Qt::Key_Dead_Breve), 0x0436, 0, 0, 0, 0}, 0x04c2 }, // U04C2 # CYRILLIC SMALL LETTER ZHE WITH BREVE -+ { {UNITIZE(Qt::Key_Dead_Breve), 0x0438, 0, 0, 0, 0}, 0x0439 }, // U0439 # CYRILLIC SMALL LETTER SHORT I -+ { {UNITIZE(Qt::Key_Dead_Breve), 0x0443, 0, 0, 0, 0}, 0x045e }, // U045E # CYRILLIC SMALL LETTER SHORT U -+ { {UNITIZE(Qt::Key_Dead_Breve), 0x1ea0, 0, 0, 0, 0}, 0x1eb6 }, // U1EB6 # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW -+ { {UNITIZE(Qt::Key_Dead_Breve), 0x1ea1, 0, 0, 0, 0}, 0x1eb7 }, // U1EB7 # LATIN SMALL LETTER A WITH BREVE AND DOT BELOW -+ { {UNITIZE(Qt::Key_Dead_Breve), UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0041, 0, 0}, 0x1eb6 }, // U1EB6 # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW -+ { {UNITIZE(Qt::Key_Dead_Breve), UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0061, 0, 0}, 0x1eb7 }, // U1EB7 # LATIN SMALL LETTER A WITH BREVE AND DOT BELOW -+ { {UNITIZE(Qt::Key_Dead_Breve), UNITIZE(Qt::Key_Multi_key), 0x002c, 0x0045, 0, 0}, 0x1e1c }, // U1E1C # LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE -+ { {UNITIZE(Qt::Key_Dead_Breve), UNITIZE(Qt::Key_Multi_key), 0x002c, 0x0065, 0, 0}, 0x1e1d }, // U1E1D # LATIN SMALL LETTER E WITH CEDILLA AND BREVE -+ { {UNITIZE(Qt::Key_Dead_Breve), UNITIZE(Qt::Key_Dead_Breve), 0, 0, 0, 0}, 0x02d8 }, // breve -+ { {UNITIZE(Qt::Key_Dead_Breve), UNITIZE(Qt::Key_Dead_Cedilla), 0x0045, 0, 0, 0}, 0x1e1c }, // U1E1C # LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE -+ { {UNITIZE(Qt::Key_Dead_Breve), UNITIZE(Qt::Key_Dead_Cedilla), 0x0065, 0, 0, 0}, 0x1e1d }, // U1E1D # LATIN SMALL LETTER E WITH CEDILLA AND BREVE -+ { {UNITIZE(Qt::Key_Dead_Breve), UNITIZE(Qt::Key_Dead_Belowdot), 0x0041, 0, 0, 0}, 0x1eb6 }, // U1EB6 # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW -+ { {UNITIZE(Qt::Key_Dead_Breve), UNITIZE(Qt::Key_Dead_Belowdot), 0x0061, 0, 0, 0}, 0x1eb7 }, // U1EB7 # LATIN SMALL LETTER A WITH BREVE AND DOT BELOW -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0000, 0x0053, 0, 0, 0}, 0x1e64 }, // U1E64 # LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0000, 0x0053, 0, 0, 0}, 0x1e68 }, // U1E68 # LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0000, 0x0073, 0, 0, 0}, 0x1e69 }, // U1E69 # LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0000, 0x0073, 0, 0, 0}, 0x1e65 }, // U1E65 # LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE -+ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0020, 0, 0, 0, 0}, 0x02d9 }, // abovedot -+ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0041, 0, 0, 0, 0}, 0x0226 }, // U0226 # LATIN CAPITAL LETTER A WITH DOT ABOVE -+ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0042, 0, 0, 0, 0}, 0x1e02 }, // U1E02 # LATIN CAPITAL LETTER B WITH DOT ABOVE -+ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0043, 0, 0, 0, 0}, 0x010a }, // U010A # LATIN CAPITAL LETTER C WITH DOT ABOVE -+ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0044, 0, 0, 0, 0}, 0x1e0a }, // U1E0A # LATIN CAPITAL LETTER D WITH DOT ABOVE -+ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0045, 0, 0, 0, 0}, 0x0116 }, // U0116 # LATIN CAPITAL LETTER E WITH DOT ABOVE -+ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0046, 0, 0, 0, 0}, 0x1e1e }, // U1E1E # LATIN CAPITAL LETTER F WITH DOT ABOVE -+ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0047, 0, 0, 0, 0}, 0x0120 }, // U0120 # LATIN CAPITAL LETTER G WITH DOT ABOVE -+ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0048, 0, 0, 0, 0}, 0x1e22 }, // U1E22 # LATIN CAPITAL LETTER H WITH DOT ABOVE -+ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0049, 0, 0, 0, 0}, 0x0130 }, // U0130 # LATIN CAPITAL LETTER I WITH DOT ABOVE -+ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x004d, 0, 0, 0, 0}, 0x1e40 }, // U1E40 # LATIN CAPITAL LETTER M WITH DOT ABOVE -+ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x004e, 0, 0, 0, 0}, 0x1e44 }, // U1E44 # LATIN CAPITAL LETTER N WITH DOT ABOVE -+ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x004f, 0, 0, 0, 0}, 0x022e }, // U022E # LATIN CAPITAL LETTER O WITH DOT ABOVE -+ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0050, 0, 0, 0, 0}, 0x1e56 }, // U1E56 # LATIN CAPITAL LETTER P WITH DOT ABOVE -+ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0052, 0, 0, 0, 0}, 0x1e58 }, // U1E58 # LATIN CAPITAL LETTER R WITH DOT ABOVE -+ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0053, 0, 0, 0, 0}, 0x1e60 }, // U1E60 # LATIN CAPITAL LETTER S WITH DOT ABOVE -+ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0054, 0, 0, 0, 0}, 0x1e6a }, // U1E6A # LATIN CAPITAL LETTER T WITH DOT ABOVE -+ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0057, 0, 0, 0, 0}, 0x1e86 }, // U1E86 # LATIN CAPITAL LETTER W WITH DOT ABOVE -+ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0058, 0, 0, 0, 0}, 0x1e8a }, // U1E8A # LATIN CAPITAL LETTER X WITH DOT ABOVE -+ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0059, 0, 0, 0, 0}, 0x1e8e }, // U1E8E # LATIN CAPITAL LETTER Y WITH DOT ABOVE -+ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x005a, 0, 0, 0, 0}, 0x017b }, // U017B # LATIN CAPITAL LETTER Z WITH DOT ABOVE -+ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0061, 0, 0, 0, 0}, 0x0227 }, // U0227 # LATIN SMALL LETTER A WITH DOT ABOVE -+ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0062, 0, 0, 0, 0}, 0x1e03 }, // U1E03 # LATIN SMALL LETTER B WITH DOT ABOVE -+ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0063, 0, 0, 0, 0}, 0x010b }, // U010B # LATIN SMALL LETTER C WITH DOT ABOVE -+ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0064, 0, 0, 0, 0}, 0x1e0b }, // U1E0B # LATIN SMALL LETTER D WITH DOT ABOVE -+ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0065, 0, 0, 0, 0}, 0x0117 }, // U0117 # LATIN SMALL LETTER E WITH DOT ABOVE -+ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0066, 0, 0, 0, 0}, 0x1e1f }, // U1E1F # LATIN SMALL LETTER F WITH DOT ABOVE -+ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0067, 0, 0, 0, 0}, 0x0121 }, // U0121 # LATIN SMALL LETTER G WITH DOT ABOVE -+ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0068, 0, 0, 0, 0}, 0x1e23 }, // U1E23 # LATIN SMALL LETTER H WITH DOT ABOVE -+ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0069, 0, 0, 0, 0}, 0x0131 }, // U0131 # LATIN SMALL LETTER DOTLESS I -+ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x006d, 0, 0, 0, 0}, 0x1e41 }, // U1E41 # LATIN SMALL LETTER M WITH DOT ABOVE -+ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x006e, 0, 0, 0, 0}, 0x1e45 }, // U1E45 # LATIN SMALL LETTER N WITH DOT ABOVE -+ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x006f, 0, 0, 0, 0}, 0x022f }, // U022F # LATIN SMALL LETTER O WITH DOT ABOVE -+ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0070, 0, 0, 0, 0}, 0x1e57 }, // U1E57 # LATIN SMALL LETTER P WITH DOT ABOVE -+ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0072, 0, 0, 0, 0}, 0x1e59 }, // U1E59 # LATIN SMALL LETTER R WITH DOT ABOVE -+ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0073, 0, 0, 0, 0}, 0x1e61 }, // U1E61 # LATIN SMALL LETTER S WITH DOT ABOVE -+ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0074, 0, 0, 0, 0}, 0x1e6b }, // U1E6B # LATIN SMALL LETTER T WITH DOT ABOVE -+ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0077, 0, 0, 0, 0}, 0x1e87 }, // U1E87 # LATIN SMALL LETTER W WITH DOT ABOVE -+ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0078, 0, 0, 0, 0}, 0x1e8b }, // U1E8B # LATIN SMALL LETTER X WITH DOT ABOVE -+ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0079, 0, 0, 0, 0}, 0x1e8f }, // U1E8F # LATIN SMALL LETTER Y WITH DOT ABOVE -+ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x007a, 0, 0, 0, 0}, 0x017c }, // U017C # LATIN SMALL LETTER Z WITH DOT ABOVE -+ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x015a, 0, 0, 0, 0}, 0x1e64 }, // U1E64 # LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE -+ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x015b, 0, 0, 0, 0}, 0x1e65 }, // U1E65 # LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE -+ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0160, 0, 0, 0, 0}, 0x1e66 }, // U1E66 # LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE -+ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x0161, 0, 0, 0, 0}, 0x1e67 }, // U1E67 # LATIN SMALL LETTER S WITH CARON AND DOT ABOVE -+ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x017f, 0, 0, 0, 0}, 0x1e9b }, // U1E9B # LATIN SMALL LETTER LONG S WITH DOT ABOVE -+ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x1e62, 0, 0, 0, 0}, 0x1e68 }, // U1E68 # LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE -+ { {UNITIZE(Qt::Key_Dead_Abovedot), 0x1e63, 0, 0, 0, 0}, 0x1e69 }, // U1E69 # LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE -+ { {UNITIZE(Qt::Key_Dead_Abovedot), UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0053, 0, 0}, 0x1e68 }, // U1E68 # LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE -+ { {UNITIZE(Qt::Key_Dead_Abovedot), UNITIZE(Qt::Key_Multi_key), 0x0021, 0x0073, 0, 0}, 0x1e69 }, // U1E69 # LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE -+ { {UNITIZE(Qt::Key_Dead_Abovedot), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0053, 0, 0}, 0x1e64 }, // U1E64 # LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE -+ { {UNITIZE(Qt::Key_Dead_Abovedot), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0073, 0, 0}, 0x1e65 }, // U1E65 # LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE -+ { {UNITIZE(Qt::Key_Dead_Abovedot), UNITIZE(Qt::Key_Multi_key), 0x0063, 0x0053, 0, 0}, 0x1e66 }, // U1E66 # LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE -+ { {UNITIZE(Qt::Key_Dead_Abovedot), UNITIZE(Qt::Key_Multi_key), 0x0063, 0x0073, 0, 0}, 0x1e67 }, // U1E67 # LATIN SMALL LETTER S WITH CARON AND DOT ABOVE -+ { {UNITIZE(Qt::Key_Dead_Abovedot), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0053, 0, 0}, 0x1e64 }, // U1E64 # LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE -+ { {UNITIZE(Qt::Key_Dead_Abovedot), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0073, 0, 0}, 0x1e65 }, // U1E65 # LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE -+ { {UNITIZE(Qt::Key_Dead_Abovedot), UNITIZE(Qt::Key_Dead_Acute), 0x0053, 0, 0, 0}, 0x1e64 }, // U1E64 # LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE -+ { {UNITIZE(Qt::Key_Dead_Abovedot), UNITIZE(Qt::Key_Dead_Acute), 0x0073, 0, 0, 0}, 0x1e65 }, // U1E65 # LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE -+ { {UNITIZE(Qt::Key_Dead_Abovedot), UNITIZE(Qt::Key_Dead_Abovedot), 0, 0, 0, 0}, 0x02d9 }, // abovedot -+ { {UNITIZE(Qt::Key_Dead_Abovedot), UNITIZE(Qt::Key_Dead_Caron), 0x0053, 0, 0, 0}, 0x1e66 }, // U1E66 # LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE -+ { {UNITIZE(Qt::Key_Dead_Abovedot), UNITIZE(Qt::Key_Dead_Caron), 0x0073, 0, 0, 0}, 0x1e67 }, // U1E67 # LATIN SMALL LETTER S WITH CARON AND DOT ABOVE -+ { {UNITIZE(Qt::Key_Dead_Abovedot), UNITIZE(Qt::Key_Dead_Belowdot), 0x0053, 0, 0, 0}, 0x1e68 }, // U1E68 # LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE -+ { {UNITIZE(Qt::Key_Dead_Abovedot), UNITIZE(Qt::Key_Dead_Belowdot), 0x0073, 0, 0, 0}, 0x1e69 }, // U1E69 # LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0000, 0x004f, 0, 0, 0}, 0x1e4e }, // U1E4E # LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0000, 0x006f, 0, 0, 0}, 0x1e4f }, // U1E4F # LATIN SMALL LETTER O WITH TILDE AND DIAERESIS -+ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0020, 0, 0, 0, 0}, 0x005c }, // quotedbl -+ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0027, 0, 0, 0, 0}, 0x0344 }, // U0344 # COMBINING GREEK DIALYTIKA TONOS -+ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0041, 0, 0, 0, 0}, 0x00c4 }, // U00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS -+ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0045, 0, 0, 0, 0}, 0x00cb }, // U00CB # LATIN CAPITAL LETTER E WITH DIAERESIS -+ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0048, 0, 0, 0, 0}, 0x1e26 }, // U1E26 # LATIN CAPITAL LETTER H WITH DIAERESIS -+ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0049, 0, 0, 0, 0}, 0x00cf }, // U00CF # LATIN CAPITAL LETTER I WITH DIAERESIS -+ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x004f, 0, 0, 0, 0}, 0x00d6 }, // U00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS -+ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0055, 0, 0, 0, 0}, 0x00dc }, // U00DC # LATIN CAPITAL LETTER U WITH DIAERESIS -+ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0057, 0, 0, 0, 0}, 0x1e84 }, // U1E84 # LATIN CAPITAL LETTER W WITH DIAERESIS -+ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0058, 0, 0, 0, 0}, 0x1e8c }, // U1E8C # LATIN CAPITAL LETTER X WITH DIAERESIS -+ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0059, 0, 0, 0, 0}, 0x0178 }, // U0178 # LATIN CAPITAL LETTER Y WITH DIAERESIS -+ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0061, 0, 0, 0, 0}, 0x00e4 }, // U00E4 # LATIN SMALL LETTER A WITH DIAERESIS -+ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0065, 0, 0, 0, 0}, 0x00eb }, // U00EB # LATIN SMALL LETTER E WITH DIAERESIS -+ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0068, 0, 0, 0, 0}, 0x1e27 }, // U1E27 # LATIN SMALL LETTER H WITH DIAERESIS -+ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0069, 0, 0, 0, 0}, 0x00ef }, // U00EF # LATIN SMALL LETTER I WITH DIAERESIS -+ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x006f, 0, 0, 0, 0}, 0x00f6 }, // U00F6 # LATIN SMALL LETTER O WITH DIAERESIS -+ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0074, 0, 0, 0, 0}, 0x1e97 }, // U1E97 # LATIN SMALL LETTER T WITH DIAERESIS -+ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0075, 0, 0, 0, 0}, 0x00fc }, // U00FC # LATIN SMALL LETTER U WITH DIAERESIS -+ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0077, 0, 0, 0, 0}, 0x1e85 }, // U1E85 # LATIN SMALL LETTER W WITH DIAERESIS -+ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0078, 0, 0, 0, 0}, 0x1e8d }, // U1E8D # LATIN SMALL LETTER X WITH DIAERESIS -+ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0079, 0, 0, 0, 0}, 0x00ff }, // U00FF # LATIN SMALL LETTER Y WITH DIAERESIS -+ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x00b4, 0, 0, 0, 0}, 0x0344 }, // U0344 # COMBINING GREEK DIALYTIKA TONOS -+ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x00d5, 0, 0, 0, 0}, 0x1e4e }, // U1E4E # LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS -+ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x00f5, 0, 0, 0, 0}, 0x1e4f }, // U1E4F # LATIN SMALL LETTER O WITH TILDE AND DIAERESIS -+ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x016a, 0, 0, 0, 0}, 0x1e7a }, // U1E7A # LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS -+ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x016b, 0, 0, 0, 0}, 0x1e7b }, // U1E7B # LATIN SMALL LETTER U WITH MACRON AND DIAERESIS -+ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0399, 0, 0, 0, 0}, 0x03aa }, // U03AA # GREEK CAPITAL LETTER IOTA WITH DIALYTIKA -+ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x03a5, 0, 0, 0, 0}, 0x03ab }, // U03AB # GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA -+ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x03b9, 0, 0, 0, 0}, 0x03ca }, // U03CA # GREEK SMALL LETTER IOTA WITH DIALYTIKA -+ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x03c5, 0, 0, 0, 0}, 0x03cb }, // U03CB # GREEK SMALL LETTER UPSILON WITH DIALYTIKA -+ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0406, 0, 0, 0, 0}, 0x0407 }, // U0407 # CYRILLIC CAPITAL LETTER YI -+ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0410, 0, 0, 0, 0}, 0x04d2 }, // U04D2 # CYRILLIC CAPITAL LETTER A WITH DIAERESIS -+ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0415, 0, 0, 0, 0}, 0x0401 }, // U0401 # CYRILLIC CAPITAL LETTER IO -+ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0416, 0, 0, 0, 0}, 0x04dc }, // U04DC # CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS -+ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0417, 0, 0, 0, 0}, 0x04de }, // U04DE # CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS -+ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0418, 0, 0, 0, 0}, 0x04e4 }, // U04E4 # CYRILLIC CAPITAL LETTER I WITH DIAERESIS -+ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x041e, 0, 0, 0, 0}, 0x04e6 }, // U04E6 # CYRILLIC CAPITAL LETTER O WITH DIAERESIS -+ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0423, 0, 0, 0, 0}, 0x04f0 }, // U04F0 # CYRILLIC CAPITAL LETTER U WITH DIAERESIS -+ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0427, 0, 0, 0, 0}, 0x04f4 }, // U04F4 # CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS -+ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x042b, 0, 0, 0, 0}, 0x04f8 }, // U04F8 # CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS -+ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x042d, 0, 0, 0, 0}, 0x04ec }, // U04EC # CYRILLIC CAPITAL LETTER E WITH DIAERESIS -+ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0430, 0, 0, 0, 0}, 0x04d3 }, // U04D3 # CYRILLIC SMALL LETTER A WITH DIAERESIS -+ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0435, 0, 0, 0, 0}, 0x0451 }, // U0451 # CYRILLIC SMALL LETTER IO -+ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0436, 0, 0, 0, 0}, 0x04dd }, // U04DD # CYRILLIC SMALL LETTER ZHE WITH DIAERESIS -+ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0437, 0, 0, 0, 0}, 0x04df }, // U04DF # CYRILLIC SMALL LETTER ZE WITH DIAERESIS -+ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0438, 0, 0, 0, 0}, 0x04e5 }, // U04E5 # CYRILLIC SMALL LETTER I WITH DIAERESIS -+ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x043e, 0, 0, 0, 0}, 0x04e7 }, // U04E7 # CYRILLIC SMALL LETTER O WITH DIAERESIS -+ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0443, 0, 0, 0, 0}, 0x04f1 }, // U04F1 # CYRILLIC SMALL LETTER U WITH DIAERESIS -+ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0447, 0, 0, 0, 0}, 0x04f5 }, // U04F5 # CYRILLIC SMALL LETTER CHE WITH DIAERESIS -+ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x044b, 0, 0, 0, 0}, 0x04f9 }, // U04F9 # CYRILLIC SMALL LETTER YERU WITH DIAERESIS -+ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x044d, 0, 0, 0, 0}, 0x04ed }, // U04ED # CYRILLIC SMALL LETTER E WITH DIAERESIS -+ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x0456, 0, 0, 0, 0}, 0x0457 }, // U0457 # CYRILLIC SMALL LETTER YI -+ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x04d8, 0, 0, 0, 0}, 0x04da }, // U04DA # CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS -+ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x04d9, 0, 0, 0, 0}, 0x04db }, // U04DB # CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS -+ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x04e8, 0, 0, 0, 0}, 0x04ea }, // U04EA # CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS -+ { {UNITIZE(Qt::Key_Dead_Diaeresis), 0x04e9, 0, 0, 0, 0}, 0x04eb }, // U04EB # CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS -+ { {UNITIZE(Qt::Key_Dead_Diaeresis), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0055, 0, 0}, 0x1e7a }, // U1E7A # LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS -+ { {UNITIZE(Qt::Key_Dead_Diaeresis), UNITIZE(Qt::Key_Multi_key), 0x005f, 0x0075, 0, 0}, 0x1e7b }, // U1E7B # LATIN SMALL LETTER U WITH MACRON AND DIAERESIS -+ { {UNITIZE(Qt::Key_Dead_Diaeresis), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x004f, 0, 0}, 0x1e4e }, // U1E4E # LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS -+ { {UNITIZE(Qt::Key_Dead_Diaeresis), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x006f, 0, 0}, 0x1e4f }, // U1E4F # LATIN SMALL LETTER O WITH TILDE AND DIAERESIS -+ { {UNITIZE(Qt::Key_Dead_Diaeresis), UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0055, 0, 0}, 0x1e7a }, // U1E7A # LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS -+ { {UNITIZE(Qt::Key_Dead_Diaeresis), UNITIZE(Qt::Key_Multi_key), 0x00af, 0x0075, 0, 0}, 0x1e7b }, // U1E7B # LATIN SMALL LETTER U WITH MACRON AND DIAERESIS -+ { {UNITIZE(Qt::Key_Dead_Diaeresis), UNITIZE(Qt::Key_Dead_Tilde), 0x004f, 0, 0, 0}, 0x1e4e }, // U1E4E # LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS -+ { {UNITIZE(Qt::Key_Dead_Diaeresis), UNITIZE(Qt::Key_Dead_Tilde), 0x006f, 0, 0, 0}, 0x1e4f }, // U1E4F # LATIN SMALL LETTER O WITH TILDE AND DIAERESIS -+ { {UNITIZE(Qt::Key_Dead_Diaeresis), UNITIZE(Qt::Key_Dead_Macron), 0x0055, 0, 0, 0}, 0x1e7a }, // U1E7A # LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS -+ { {UNITIZE(Qt::Key_Dead_Diaeresis), UNITIZE(Qt::Key_Dead_Macron), 0x0075, 0, 0, 0}, 0x1e7b }, // U1E7B # LATIN SMALL LETTER U WITH MACRON AND DIAERESIS -+ { {UNITIZE(Qt::Key_Dead_Diaeresis), UNITIZE(Qt::Key_Dead_Diaeresis), 0, 0, 0, 0}, 0x00a8 }, // diaeresis -+ { {UNITIZE(Qt::Key_Dead_Abovering), 0x0020, 0, 0, 0, 0}, 0x00b0 }, // degree -+ { {UNITIZE(Qt::Key_Dead_Abovering), 0x0041, 0, 0, 0, 0}, 0x00c5 }, // U00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE -+ { {UNITIZE(Qt::Key_Dead_Abovering), 0x0055, 0, 0, 0, 0}, 0x016e }, // U016E # LATIN CAPITAL LETTER U WITH RING ABOVE -+ { {UNITIZE(Qt::Key_Dead_Abovering), 0x0061, 0, 0, 0, 0}, 0x00e5 }, // U00E5 # LATIN SMALL LETTER A WITH RING ABOVE -+ { {UNITIZE(Qt::Key_Dead_Abovering), 0x0075, 0, 0, 0, 0}, 0x016f }, // U016F # LATIN SMALL LETTER U WITH RING ABOVE -+ { {UNITIZE(Qt::Key_Dead_Abovering), 0x0077, 0, 0, 0, 0}, 0x1e98 }, // U1E98 # LATIN SMALL LETTER W WITH RING ABOVE -+ { {UNITIZE(Qt::Key_Dead_Abovering), 0x0079, 0, 0, 0, 0}, 0x1e99 }, // U1E99 # LATIN SMALL LETTER Y WITH RING ABOVE -+ { {UNITIZE(Qt::Key_Dead_Abovering), UNITIZE(Qt::Key_Dead_Abovering), 0, 0, 0, 0}, 0x00b0 }, // degree -+ { {UNITIZE(Qt::Key_Dead_Doubleacute), 0x0020, 0, 0, 0, 0}, 0x02dd }, // U2dd -+ { {UNITIZE(Qt::Key_Dead_Doubleacute), 0x004f, 0, 0, 0, 0}, 0x0150 }, // U0150 # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE -+ { {UNITIZE(Qt::Key_Dead_Doubleacute), 0x0055, 0, 0, 0, 0}, 0x0170 }, // U0170 # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE -+ { {UNITIZE(Qt::Key_Dead_Doubleacute), 0x006f, 0, 0, 0, 0}, 0x0151 }, // U0151 # LATIN SMALL LETTER O WITH DOUBLE ACUTE -+ { {UNITIZE(Qt::Key_Dead_Doubleacute), 0x0075, 0, 0, 0, 0}, 0x0171 }, // U0171 # LATIN SMALL LETTER U WITH DOUBLE ACUTE -+ { {UNITIZE(Qt::Key_Dead_Doubleacute), 0x0423, 0, 0, 0, 0}, 0x04f2 }, // U04F2 # CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE -+ { {UNITIZE(Qt::Key_Dead_Doubleacute), 0x0443, 0, 0, 0, 0}, 0x04f3 }, // U04F3 # CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE -+ { {UNITIZE(Qt::Key_Dead_Doubleacute), UNITIZE(Qt::Key_Dead_Doubleacute), 0, 0, 0, 0}, 0x02dd }, // U2dd -+ { {UNITIZE(Qt::Key_Dead_Caron), 0x0020, 0, 0, 0, 0}, 0x02c7 }, // caron -+ { {UNITIZE(Qt::Key_Dead_Caron), 0x0041, 0, 0, 0, 0}, 0x01cd }, // U01CD # LATIN CAPITAL LETTER A WITH CARON -+ { {UNITIZE(Qt::Key_Dead_Caron), 0x0043, 0, 0, 0, 0}, 0x010c }, // U010C # LATIN CAPITAL LETTER C WITH CARON -+ { {UNITIZE(Qt::Key_Dead_Caron), 0x0044, 0, 0, 0, 0}, 0x010e }, // U010E # LATIN CAPITAL LETTER D WITH CARON -+ { {UNITIZE(Qt::Key_Dead_Caron), 0x0045, 0, 0, 0, 0}, 0x011a }, // U011A # LATIN CAPITAL LETTER E WITH CARON -+ { {UNITIZE(Qt::Key_Dead_Caron), 0x0047, 0, 0, 0, 0}, 0x01e6 }, // U01E6 # LATIN CAPITAL LETTER G WITH CARON -+ { {UNITIZE(Qt::Key_Dead_Caron), 0x0048, 0, 0, 0, 0}, 0x021e }, // U021E # LATIN CAPITAL LETTER H WITH CARON -+ { {UNITIZE(Qt::Key_Dead_Caron), 0x0049, 0, 0, 0, 0}, 0x01cf }, // U01CF # LATIN CAPITAL LETTER I WITH CARON -+ { {UNITIZE(Qt::Key_Dead_Caron), 0x004b, 0, 0, 0, 0}, 0x01e8 }, // U01E8 # LATIN CAPITAL LETTER K WITH CARON -+ { {UNITIZE(Qt::Key_Dead_Caron), 0x004c, 0, 0, 0, 0}, 0x013d }, // U013D # LATIN CAPITAL LETTER L WITH CARON -+ { {UNITIZE(Qt::Key_Dead_Caron), 0x004e, 0, 0, 0, 0}, 0x0147 }, // U0147 # LATIN CAPITAL LETTER N WITH CARON -+ { {UNITIZE(Qt::Key_Dead_Caron), 0x004f, 0, 0, 0, 0}, 0x01d1 }, // U01D1 # LATIN CAPITAL LETTER O WITH CARON -+ { {UNITIZE(Qt::Key_Dead_Caron), 0x0052, 0, 0, 0, 0}, 0x0158 }, // U0158 # LATIN CAPITAL LETTER R WITH CARON -+ { {UNITIZE(Qt::Key_Dead_Caron), 0x0053, 0, 0, 0, 0}, 0x0160 }, // U0160 # LATIN CAPITAL LETTER S WITH CARON -+ { {UNITIZE(Qt::Key_Dead_Caron), 0x0054, 0, 0, 0, 0}, 0x0164 }, // U0164 # LATIN CAPITAL LETTER T WITH CARON -+ { {UNITIZE(Qt::Key_Dead_Caron), 0x0055, 0, 0, 0, 0}, 0x01d3 }, // U01D3 # LATIN CAPITAL LETTER U WITH CARON -+ { {UNITIZE(Qt::Key_Dead_Caron), 0x005a, 0, 0, 0, 0}, 0x017d }, // U017D # LATIN CAPITAL LETTER Z WITH CARON -+ { {UNITIZE(Qt::Key_Dead_Caron), 0x0061, 0, 0, 0, 0}, 0x01ce }, // U01CE # LATIN SMALL LETTER A WITH CARON -+ { {UNITIZE(Qt::Key_Dead_Caron), 0x0063, 0, 0, 0, 0}, 0x010d }, // U010D # LATIN SMALL LETTER C WITH CARON -+ { {UNITIZE(Qt::Key_Dead_Caron), 0x0064, 0, 0, 0, 0}, 0x010f }, // U010F # LATIN SMALL LETTER D WITH CARON -+ { {UNITIZE(Qt::Key_Dead_Caron), 0x0065, 0, 0, 0, 0}, 0x011b }, // U011B # LATIN SMALL LETTER E WITH CARON -+ { {UNITIZE(Qt::Key_Dead_Caron), 0x0067, 0, 0, 0, 0}, 0x01e7 }, // U01E7 # LATIN SMALL LETTER G WITH CARON -+ { {UNITIZE(Qt::Key_Dead_Caron), 0x0068, 0, 0, 0, 0}, 0x021f }, // U021F # LATIN SMALL LETTER H WITH CARON -+ { {UNITIZE(Qt::Key_Dead_Caron), 0x0069, 0, 0, 0, 0}, 0x01d0 }, // U01D0 # LATIN SMALL LETTER I WITH CARON -+ { {UNITIZE(Qt::Key_Dead_Caron), 0x006a, 0, 0, 0, 0}, 0x01f0 }, // U01F0 # LATIN SMALL LETTER J WITH CARON -+ { {UNITIZE(Qt::Key_Dead_Caron), 0x006b, 0, 0, 0, 0}, 0x01e9 }, // U01E9 # LATIN SMALL LETTER K WITH CARON -+ { {UNITIZE(Qt::Key_Dead_Caron), 0x006c, 0, 0, 0, 0}, 0x013e }, // U013E # LATIN SMALL LETTER L WITH CARON -+ { {UNITIZE(Qt::Key_Dead_Caron), 0x006e, 0, 0, 0, 0}, 0x0148 }, // U0148 # LATIN SMALL LETTER N WITH CARON -+ { {UNITIZE(Qt::Key_Dead_Caron), 0x006f, 0, 0, 0, 0}, 0x01d2 }, // U01D2 # LATIN SMALL LETTER O WITH CARON -+ { {UNITIZE(Qt::Key_Dead_Caron), 0x0072, 0, 0, 0, 0}, 0x0159 }, // U0159 # LATIN SMALL LETTER R WITH CARON -+ { {UNITIZE(Qt::Key_Dead_Caron), 0x0073, 0, 0, 0, 0}, 0x0161 }, // U0161 # LATIN SMALL LETTER S WITH CARON -+ { {UNITIZE(Qt::Key_Dead_Caron), 0x0074, 0, 0, 0, 0}, 0x0165 }, // U0165 # LATIN SMALL LETTER T WITH CARON -+ { {UNITIZE(Qt::Key_Dead_Caron), 0x0075, 0, 0, 0, 0}, 0x01d4 }, // U01D4 # LATIN SMALL LETTER U WITH CARON -+ { {UNITIZE(Qt::Key_Dead_Caron), 0x007a, 0, 0, 0, 0}, 0x017e }, // U017E # LATIN SMALL LETTER Z WITH CARON -+ { {UNITIZE(Qt::Key_Dead_Caron), 0x00dc, 0, 0, 0, 0}, 0x01d9 }, // U01D9 # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON -+ { {UNITIZE(Qt::Key_Dead_Caron), 0x00fc, 0, 0, 0, 0}, 0x01da }, // U01DA # LATIN SMALL LETTER U WITH DIAERESIS AND CARON -+ { {UNITIZE(Qt::Key_Dead_Caron), 0x01b7, 0, 0, 0, 0}, 0x01ee }, // U01EE # LATIN CAPITAL LETTER EZH WITH CARON -+ { {UNITIZE(Qt::Key_Dead_Caron), 0x0292, 0, 0, 0, 0}, 0x01ef }, // U01EF # LATIN SMALL LETTER EZH WITH CARON -+ { {UNITIZE(Qt::Key_Dead_Caron), UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0055, 0, 0}, 0x01d9 }, // U01D9 # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON -+ { {UNITIZE(Qt::Key_Dead_Caron), UNITIZE(Qt::Key_Multi_key), 0x0022, 0x0075, 0, 0}, 0x01da }, // U01DA # LATIN SMALL LETTER U WITH DIAERESIS AND CARON -+ { {UNITIZE(Qt::Key_Dead_Caron), UNITIZE(Qt::Key_Dead_Diaeresis), 0x0055, 0, 0, 0}, 0x01d9 }, // U01D9 # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON -+ { {UNITIZE(Qt::Key_Dead_Caron), UNITIZE(Qt::Key_Dead_Diaeresis), 0x0075, 0, 0, 0}, 0x01da }, // U01DA # LATIN SMALL LETTER U WITH DIAERESIS AND CARON -+ { {UNITIZE(Qt::Key_Dead_Caron), UNITIZE(Qt::Key_Dead_Caron), 0, 0, 0, 0}, 0x02c7 }, // caron -+ { {UNITIZE(Qt::Key_Dead_Cedilla), 0x0020, 0, 0, 0, 0}, 0x00b8 }, // cedilla -+ { {UNITIZE(Qt::Key_Dead_Cedilla), 0x0043, 0, 0, 0, 0}, 0x00c7 }, // U00C7 # LATIN CAPITAL LETTER C WITH CEDILLA -+ { {UNITIZE(Qt::Key_Dead_Cedilla), 0x0044, 0, 0, 0, 0}, 0x1e10 }, // U1E10 # LATIN CAPITAL LETTER D WITH CEDILLA -+ { {UNITIZE(Qt::Key_Dead_Cedilla), 0x0045, 0, 0, 0, 0}, 0x0228 }, // U0228 # LATIN CAPITAL LETTER E WITH CEDILLA -+ { {UNITIZE(Qt::Key_Dead_Cedilla), 0x0047, 0, 0, 0, 0}, 0x0122 }, // U0122 # LATIN CAPITAL LETTER G WITH CEDILLA -+ { {UNITIZE(Qt::Key_Dead_Cedilla), 0x0048, 0, 0, 0, 0}, 0x1e28 }, // U1E28 # LATIN CAPITAL LETTER H WITH CEDILLA -+ { {UNITIZE(Qt::Key_Dead_Cedilla), 0x004b, 0, 0, 0, 0}, 0x0136 }, // U0136 # LATIN CAPITAL LETTER K WITH CEDILLA -+ { {UNITIZE(Qt::Key_Dead_Cedilla), 0x004c, 0, 0, 0, 0}, 0x013b }, // U013B # LATIN CAPITAL LETTER L WITH CEDILLA -+ { {UNITIZE(Qt::Key_Dead_Cedilla), 0x004e, 0, 0, 0, 0}, 0x0145 }, // U0145 # LATIN CAPITAL LETTER N WITH CEDILLA -+ { {UNITIZE(Qt::Key_Dead_Cedilla), 0x0052, 0, 0, 0, 0}, 0x0156 }, // U0156 # LATIN CAPITAL LETTER R WITH CEDILLA -+ { {UNITIZE(Qt::Key_Dead_Cedilla), 0x0053, 0, 0, 0, 0}, 0x015e }, // U015E # LATIN CAPITAL LETTER S WITH CEDILLA -+ { {UNITIZE(Qt::Key_Dead_Cedilla), 0x0054, 0, 0, 0, 0}, 0x0162 }, // U0162 # LATIN CAPITAL LETTER T WITH CEDILLA -+ { {UNITIZE(Qt::Key_Dead_Cedilla), 0x0063, 0, 0, 0, 0}, 0x00e7 }, // U00E7 # LATIN SMALL LETTER C WITH CEDILLA -+ { {UNITIZE(Qt::Key_Dead_Cedilla), 0x0064, 0, 0, 0, 0}, 0x1e11 }, // U1E11 # LATIN SMALL LETTER D WITH CEDILLA -+ { {UNITIZE(Qt::Key_Dead_Cedilla), 0x0065, 0, 0, 0, 0}, 0x0229 }, // U0229 # LATIN SMALL LETTER E WITH CEDILLA -+ { {UNITIZE(Qt::Key_Dead_Cedilla), 0x0067, 0, 0, 0, 0}, 0x0123 }, // U0123 # LATIN SMALL LETTER G WITH CEDILLA -+ { {UNITIZE(Qt::Key_Dead_Cedilla), 0x0068, 0, 0, 0, 0}, 0x1e29 }, // U1E29 # LATIN SMALL LETTER H WITH CEDILLA -+ { {UNITIZE(Qt::Key_Dead_Cedilla), 0x006b, 0, 0, 0, 0}, 0x0137 }, // U0137 # LATIN SMALL LETTER K WITH CEDILLA -+ { {UNITIZE(Qt::Key_Dead_Cedilla), 0x006c, 0, 0, 0, 0}, 0x013c }, // U013C # LATIN SMALL LETTER L WITH CEDILLA -+ { {UNITIZE(Qt::Key_Dead_Cedilla), 0x006e, 0, 0, 0, 0}, 0x0146 }, // U0146 # LATIN SMALL LETTER N WITH CEDILLA -+ { {UNITIZE(Qt::Key_Dead_Cedilla), 0x0072, 0, 0, 0, 0}, 0x0157 }, // U0157 # LATIN SMALL LETTER R WITH CEDILLA -+ { {UNITIZE(Qt::Key_Dead_Cedilla), 0x0073, 0, 0, 0, 0}, 0x015f }, // U015F # LATIN SMALL LETTER S WITH CEDILLA -+ { {UNITIZE(Qt::Key_Dead_Cedilla), 0x0074, 0, 0, 0, 0}, 0x0163 }, // U0163 # LATIN SMALL LETTER T WITH CEDILLA -+ { {UNITIZE(Qt::Key_Dead_Cedilla), UNITIZE(Qt::Key_Dead_Cedilla), 0, 0, 0, 0}, 0x00b8 }, // cedilla -+ { {UNITIZE(Qt::Key_Dead_Ogonek), 0x0041, 0, 0, 0, 0}, 0x0104 }, // U0104 # LATIN CAPITAL LETTER A WITH OGONEK -+ { {UNITIZE(Qt::Key_Dead_Ogonek), 0x0045, 0, 0, 0, 0}, 0x0118 }, // U0118 # LATIN CAPITAL LETTER E WITH OGONEK -+ { {UNITIZE(Qt::Key_Dead_Ogonek), 0x0049, 0, 0, 0, 0}, 0x012e }, // U012E # LATIN CAPITAL LETTER I WITH OGONEK -+ { {UNITIZE(Qt::Key_Dead_Ogonek), 0x004f, 0, 0, 0, 0}, 0x01ea }, // U01EA # LATIN CAPITAL LETTER O WITH OGONEK -+ { {UNITIZE(Qt::Key_Dead_Ogonek), 0x0055, 0, 0, 0, 0}, 0x0172 }, // U0172 # LATIN CAPITAL LETTER U WITH OGONEK -+ { {UNITIZE(Qt::Key_Dead_Ogonek), 0x0061, 0, 0, 0, 0}, 0x0105 }, // U0105 # LATIN SMALL LETTER A WITH OGONEK -+ { {UNITIZE(Qt::Key_Dead_Ogonek), 0x0065, 0, 0, 0, 0}, 0x0119 }, // U0119 # LATIN SMALL LETTER E WITH OGONEK -+ { {UNITIZE(Qt::Key_Dead_Ogonek), 0x0069, 0, 0, 0, 0}, 0x012f }, // U012F # LATIN SMALL LETTER I WITH OGONEK -+ { {UNITIZE(Qt::Key_Dead_Ogonek), 0x006f, 0, 0, 0, 0}, 0x01eb }, // U01EB # LATIN SMALL LETTER O WITH OGONEK -+ { {UNITIZE(Qt::Key_Dead_Ogonek), 0x0075, 0, 0, 0, 0}, 0x0173 }, // U0173 # LATIN SMALL LETTER U WITH OGONEK -+ { {UNITIZE(Qt::Key_Dead_Ogonek), UNITIZE(Qt::Key_Dead_Ogonek), 0, 0, 0, 0}, 0x02db }, // ogonek -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Ogonek), dead_space, 0, 0, 0, 0}, 0x02db }, // ogonek -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x0313, 0x0391, 0, 0}, 0x1f8c }, // U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x0313, 0x0391, 0, 0}, 0x1f8a }, // U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x0313, 0x0397, 0, 0}, 0x1f9c }, // U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x0313, 0x0397, 0, 0}, 0x1f9a }, // U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x0313, 0x03a9, 0, 0}, 0x1faa }, // U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x0313, 0x03a9, 0, 0}, 0x1fac }, // U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x0313, 0x03b1, 0, 0}, 0x1f82 }, // U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x0313, 0x03b1, 0, 0}, 0x1f84 }, // U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x0313, 0x03b7, 0, 0}, 0x1f94 }, // U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x0313, 0x03b7, 0, 0}, 0x1f92 }, // U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x0313, 0x03c9, 0, 0}, 0x1fa2 }, // U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x0313, 0x03c9, 0, 0}, 0x1fa4 }, // U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x0314, 0x0391, 0, 0}, 0x1f8b }, // U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x0314, 0x0391, 0, 0}, 0x1f8d }, // U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x0314, 0x0397, 0, 0}, 0x1f9b }, // U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x0314, 0x0397, 0, 0}, 0x1f9d }, // U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x0314, 0x03a9, 0, 0}, 0x1fab }, // U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x0314, 0x03a9, 0, 0}, 0x1fad }, // U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x0314, 0x03b1, 0, 0}, 0x1f83 }, // U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x0314, 0x03b1, 0, 0}, 0x1f85 }, // U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x0314, 0x03b7, 0, 0}, 0x1f95 }, // U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x0314, 0x03b7, 0, 0}, 0x1f93 }, // U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x0314, 0x03c9, 0, 0}, 0x1fa5 }, // U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x0314, 0x03c9, 0, 0}, 0x1fa3 }, // U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x03b1, 0, 0, 0}, 0x1fb4 }, // U1FB4 # GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x03b1, 0, 0, 0}, 0x1fb2 }, // U1FB2 # GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x03b7, 0, 0, 0}, 0x1fc4 }, // U1FC4 # GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x03b7, 0, 0, 0}, 0x1fc2 }, // U1FC2 # GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x03c9, 0, 0, 0}, 0x1ff4 }, // U1FF4 # GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x03c9, 0, 0, 0}, 0x1ff2 }, // U1FF2 # GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x1f00, 0, 0, 0}, 0x1f84 }, // U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x1f00, 0, 0, 0}, 0x1f82 }, // U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x1f01, 0, 0, 0}, 0x1f83 }, // U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x1f01, 0, 0, 0}, 0x1f85 }, // U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x1f08, 0, 0, 0}, 0x1f8a }, // U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x1f08, 0, 0, 0}, 0x1f8c }, // U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x1f09, 0, 0, 0}, 0x1f8b }, // U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x1f09, 0, 0, 0}, 0x1f8d }, // U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x1f20, 0, 0, 0}, 0x1f94 }, // U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x1f20, 0, 0, 0}, 0x1f92 }, // U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x1f21, 0, 0, 0}, 0x1f93 }, // U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x1f21, 0, 0, 0}, 0x1f95 }, // U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x1f28, 0, 0, 0}, 0x1f9c }, // U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x1f28, 0, 0, 0}, 0x1f9a }, // U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x1f29, 0, 0, 0}, 0x1f9d }, // U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x1f29, 0, 0, 0}, 0x1f9b }, // U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x1f60, 0, 0, 0}, 0x1fa2 }, // U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x1f60, 0, 0, 0}, 0x1fa4 }, // U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x1f61, 0, 0, 0}, 0x1fa5 }, // U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x1f61, 0, 0, 0}, 0x1fa3 }, // U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x1f68, 0, 0, 0}, 0x1fac }, // U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x1f68, 0, 0, 0}, 0x1faa }, // U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x1f69, 0, 0, 0}, 0x1fad }, // U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, 0x1f69, 0, 0, 0}, 0x1fab }, // U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0391, 0}, 0x1f8d }, // U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0391, 0}, 0x1f8b }, // U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0397, 0}, 0x1f9d }, // U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0397, 0}, 0x1f9b }, // U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03a9, 0}, 0x1fab }, // U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03a9, 0}, 0x1fad }, // U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b1, 0}, 0x1f85 }, // U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b1, 0}, 0x1f83 }, // U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b7, 0}, 0x1f95 }, // U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b7, 0}, 0x1f93 }, // U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03c9, 0}, 0x1fa3 }, // U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03c9, 0}, 0x1fa5 }, // U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0391, 0}, 0x1f8a }, // U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0391, 0}, 0x1f8c }, // U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0397, 0}, 0x1f9a }, // U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0397, 0}, 0x1f9c }, // U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03a9, 0}, 0x1fac }, // U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03a9, 0}, 0x1faa }, // U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b1, 0}, 0x1f84 }, // U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b1, 0}, 0x1f82 }, // U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b7, 0}, 0x1f94 }, // U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b7, 0}, 0x1f92 }, // U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03c9, 0}, 0x1fa2 }, // U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), 0x0000, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03c9, 0}, 0x1fa4 }, // U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), 0x0313, 0x0391, 0, 0, 0}, 0x1f88 }, // U1F88 # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), 0x0313, 0x0397, 0, 0, 0}, 0x1f98 }, // U1F98 # GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), 0x0313, 0x03a9, 0, 0, 0}, 0x1fa8 }, // U1FA8 # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), 0x0313, 0x03b1, 0, 0, 0}, 0x1f80 }, // U1F80 # GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), 0x0313, 0x03b7, 0, 0, 0}, 0x1f90 }, // U1F90 # GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), 0x0313, 0x03c9, 0, 0, 0}, 0x1fa0 }, // U1FA0 # GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), 0x0314, 0x0391, 0, 0, 0}, 0x1f89 }, // U1F89 # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), 0x0314, 0x0397, 0, 0, 0}, 0x1f99 }, // U1F99 # GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), 0x0314, 0x03a9, 0, 0, 0}, 0x1fa9 }, // U1FA9 # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), 0x0314, 0x03b1, 0, 0, 0}, 0x1f81 }, // U1F81 # GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), 0x0314, 0x03b7, 0, 0, 0}, 0x1f91 }, // U1F91 # GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), 0x0314, 0x03c9, 0, 0, 0}, 0x1fa1 }, // U1FA1 # GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, 0x0313, 0x0391, 0, 0}, 0x1f8e }, // U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, 0x0313, 0x0397, 0, 0}, 0x1f9e }, // U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, 0x0313, 0x03a9, 0, 0}, 0x1fae }, // U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, 0x0313, 0x03b1, 0, 0}, 0x1f86 }, // U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, 0x0313, 0x03b7, 0, 0}, 0x1f96 }, // U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, 0x0313, 0x03c9, 0, 0}, 0x1fa6 }, // U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, 0x0314, 0x0391, 0, 0}, 0x1f8f }, // U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, 0x0314, 0x0397, 0, 0}, 0x1f9f }, // U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, 0x0314, 0x03a9, 0, 0}, 0x1faf }, // U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, 0x0314, 0x03b1, 0, 0}, 0x1f87 }, // U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, 0x0314, 0x03b7, 0, 0}, 0x1f97 }, // U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, 0x0314, 0x03c9, 0, 0}, 0x1fa7 }, // U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, 0x03b1, 0, 0, 0}, 0x1fb7 }, // U1FB7 # GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, 0x03b7, 0, 0, 0}, 0x1fc7 }, // U1FC7 # GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, 0x03c9, 0, 0, 0}, 0x1ff7 }, // U1FF7 # GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, 0x1f00, 0, 0, 0}, 0x1f86 }, // U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, 0x1f01, 0, 0, 0}, 0x1f87 }, // U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, 0x1f08, 0, 0, 0}, 0x1f8e }, // U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, 0x1f09, 0, 0, 0}, 0x1f8f }, // U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, 0x1f20, 0, 0, 0}, 0x1f96 }, // U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, 0x1f21, 0, 0, 0}, 0x1f97 }, // U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, 0x1f28, 0, 0, 0}, 0x1f9e }, // U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, 0x1f29, 0, 0, 0}, 0x1f9f }, // U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, 0x1f60, 0, 0, 0}, 0x1fa6 }, // U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, 0x1f61, 0, 0, 0}, 0x1fa7 }, // U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, 0x1f68, 0, 0, 0}, 0x1fae }, // U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, 0x1f69, 0, 0, 0}, 0x1faf }, // U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0391, 0}, 0x1f8f }, // U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0397, 0}, 0x1f9f }, // U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03a9, 0}, 0x1faf }, // U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b1, 0}, 0x1f87 }, // U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b7, 0}, 0x1f97 }, // U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03c9, 0}, 0x1fa7 }, // U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0391, 0}, 0x1f8e }, // U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0397, 0}, 0x1f9e }, // U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03a9, 0}, 0x1fae }, // U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b1, 0}, 0x1f86 }, // U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b7, 0}, 0x1f96 }, // U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), 0x0342, UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03c9, 0}, 0x1fa6 }, // U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), 0x0391, 0, 0, 0, 0}, 0x1fbc }, // U1FBC # GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), 0x0397, 0, 0, 0, 0}, 0x1fcc }, // U1FCC # GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), 0x03a9, 0, 0, 0, 0}, 0x1ffc }, // U1FFC # GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), 0x03ac, 0, 0, 0, 0}, 0x1fb4 }, // U1FB4 # GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), 0x03ae, 0, 0, 0, 0}, 0x1fc4 }, // U1FC4 # GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), 0x03b1, 0, 0, 0, 0}, 0x1fb3 }, // U1FB3 # GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), 0x03b7, 0, 0, 0, 0}, 0x1fc3 }, // U1FC3 # GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), 0x03c9, 0, 0, 0, 0}, 0x1ff3 }, // U1FF3 # GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), 0x03ce, 0, 0, 0, 0}, 0x1ff4 }, // U1FF4 # GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f00, 0, 0, 0, 0}, 0x1f80 }, // U1F80 # GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f01, 0, 0, 0, 0}, 0x1f81 }, // U1F81 # GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f02, 0, 0, 0, 0}, 0x1f82 }, // U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f03, 0, 0, 0, 0}, 0x1f83 }, // U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f04, 0, 0, 0, 0}, 0x1f84 }, // U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f05, 0, 0, 0, 0}, 0x1f85 }, // U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f06, 0, 0, 0, 0}, 0x1f86 }, // U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f07, 0, 0, 0, 0}, 0x1f87 }, // U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f08, 0, 0, 0, 0}, 0x1f88 }, // U1F88 # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f09, 0, 0, 0, 0}, 0x1f89 }, // U1F89 # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f0a, 0, 0, 0, 0}, 0x1f8a }, // U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f0b, 0, 0, 0, 0}, 0x1f8b }, // U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f0c, 0, 0, 0, 0}, 0x1f8c }, // U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f0d, 0, 0, 0, 0}, 0x1f8d }, // U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f0e, 0, 0, 0, 0}, 0x1f8e }, // U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f0f, 0, 0, 0, 0}, 0x1f8f }, // U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f20, 0, 0, 0, 0}, 0x1f90 }, // U1F90 # GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f21, 0, 0, 0, 0}, 0x1f91 }, // U1F91 # GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f22, 0, 0, 0, 0}, 0x1f92 }, // U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f23, 0, 0, 0, 0}, 0x1f93 }, // U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f24, 0, 0, 0, 0}, 0x1f94 }, // U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f25, 0, 0, 0, 0}, 0x1f95 }, // U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f26, 0, 0, 0, 0}, 0x1f96 }, // U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f27, 0, 0, 0, 0}, 0x1f97 }, // U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f28, 0, 0, 0, 0}, 0x1f98 }, // U1F98 # GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f29, 0, 0, 0, 0}, 0x1f99 }, // U1F99 # GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f2a, 0, 0, 0, 0}, 0x1f9a }, // U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f2b, 0, 0, 0, 0}, 0x1f9b }, // U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f2c, 0, 0, 0, 0}, 0x1f9c }, // U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f2d, 0, 0, 0, 0}, 0x1f9d }, // U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f2e, 0, 0, 0, 0}, 0x1f9e }, // U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f2f, 0, 0, 0, 0}, 0x1f9f }, // U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f60, 0, 0, 0, 0}, 0x1fa0 }, // U1FA0 # GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f61, 0, 0, 0, 0}, 0x1fa1 }, // U1FA1 # GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f62, 0, 0, 0, 0}, 0x1fa2 }, // U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f63, 0, 0, 0, 0}, 0x1fa3 }, // U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f64, 0, 0, 0, 0}, 0x1fa4 }, // U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f65, 0, 0, 0, 0}, 0x1fa5 }, // U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f66, 0, 0, 0, 0}, 0x1fa6 }, // U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f67, 0, 0, 0, 0}, 0x1fa7 }, // U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f68, 0, 0, 0, 0}, 0x1fa8 }, // U1FA8 # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f69, 0, 0, 0, 0}, 0x1fa9 }, // U1FA9 # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f6a, 0, 0, 0, 0}, 0x1faa }, // U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f6b, 0, 0, 0, 0}, 0x1fab }, // U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f6c, 0, 0, 0, 0}, 0x1fac }, // U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f6d, 0, 0, 0, 0}, 0x1fad }, // U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f6e, 0, 0, 0, 0}, 0x1fae }, // U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f6f, 0, 0, 0, 0}, 0x1faf }, // U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f70, 0, 0, 0, 0}, 0x1fb2 }, // U1FB2 # GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f74, 0, 0, 0, 0}, 0x1fc2 }, // U1FC2 # GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), 0x1f7c, 0, 0, 0, 0}, 0x1ff2 }, // U1FF2 # GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), 0x1fb6, 0, 0, 0, 0}, 0x1fb7 }, // U1FB7 # GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), 0x1fc6, 0, 0, 0, 0}, 0x1fc7 }, // U1FC7 # GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), 0x1ff6, 0, 0, 0, 0}, 0x1ff7 }, // U1FF7 # GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0028, 0x0391, 0}, 0x1f8d }, // U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0028, 0x0397, 0}, 0x1f9d }, // U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0028, 0x03a9, 0}, 0x1fad }, // U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0028, 0x03b1, 0}, 0x1f85 }, // U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0028, 0x03b7, 0}, 0x1f95 }, // U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0028, 0x03c9, 0}, 0x1fa5 }, // U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0029, 0x0391, 0}, 0x1f8c }, // U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0029, 0x0397, 0}, 0x1f9c }, // U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0029, 0x03a9, 0}, 0x1fac }, // U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0029, 0x03b1, 0}, 0x1f84 }, // U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0029, 0x03b7, 0}, 0x1f94 }, // U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0029, 0x03c9, 0}, 0x1fa4 }, // U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0313, 0x0391, 0}, 0x1f8c }, // U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0313, 0x0397, 0}, 0x1f9c }, // U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0313, 0x03a9, 0}, 0x1fac }, // U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0313, 0x03b1, 0}, 0x1f84 }, // U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0313, 0x03b7, 0}, 0x1f94 }, // U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0313, 0x03c9, 0}, 0x1fa4 }, // U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0314, 0x0391, 0}, 0x1f8d }, // U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0314, 0x0397, 0}, 0x1f9d }, // U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0314, 0x03a9, 0}, 0x1fad }, // U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0314, 0x03b1, 0}, 0x1f85 }, // U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0314, 0x03b7, 0}, 0x1f95 }, // U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x0314, 0x03c9, 0}, 0x1fa5 }, // U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x03b1, 0, 0}, 0x1fb4 }, // U1FB4 # GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x03b7, 0, 0}, 0x1fc4 }, // U1FC4 # GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x03c9, 0, 0}, 0x1ff4 }, // U1FF4 # GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f00, 0, 0}, 0x1f84 }, // U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f01, 0, 0}, 0x1f85 }, // U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f08, 0, 0}, 0x1f8c }, // U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f09, 0, 0}, 0x1f8d }, // U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f20, 0, 0}, 0x1f94 }, // U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f21, 0, 0}, 0x1f95 }, // U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f28, 0, 0}, 0x1f9c }, // U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f29, 0, 0}, 0x1f9d }, // U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f60, 0, 0}, 0x1fa4 }, // U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f61, 0, 0}, 0x1fa5 }, // U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f68, 0, 0}, 0x1fac }, // U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0027, 0x1f69, 0, 0}, 0x1fad }, // U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0391, 0, 0}, 0x1f89 }, // U1F89 # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0397, 0, 0}, 0x1f99 }, // U1F99 # GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03a9, 0, 0}, 0x1fa9 }, // U1FA9 # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b1, 0, 0}, 0x1f81 }, // U1F81 # GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b7, 0, 0}, 0x1f91 }, // U1F91 # GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03c9, 0, 0}, 0x1fa1 }, // U1FA1 # GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0391, 0, 0}, 0x1f88 }, // U1F88 # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0397, 0, 0}, 0x1f98 }, // U1F98 # GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03a9, 0, 0}, 0x1fa8 }, // U1FA8 # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b1, 0, 0}, 0x1f80 }, // U1F80 # GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b7, 0, 0}, 0x1f90 }, // U1F90 # GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03c9, 0, 0}, 0x1fa0 }, // U1FA0 # GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0028, 0x0391, 0}, 0x1f8b }, // U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0028, 0x0397, 0}, 0x1f9b }, // U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0028, 0x03a9, 0}, 0x1fab }, // U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0028, 0x03b1, 0}, 0x1f83 }, // U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0028, 0x03b7, 0}, 0x1f93 }, // U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0028, 0x03c9, 0}, 0x1fa3 }, // U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0029, 0x0391, 0}, 0x1f8a }, // U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0029, 0x0397, 0}, 0x1f9a }, // U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0029, 0x03a9, 0}, 0x1faa }, // U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0029, 0x03b1, 0}, 0x1f82 }, // U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0029, 0x03b7, 0}, 0x1f92 }, // U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0029, 0x03c9, 0}, 0x1fa2 }, // U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0313, 0x0391, 0}, 0x1f8a }, // U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0313, 0x0397, 0}, 0x1f9a }, // U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0313, 0x03a9, 0}, 0x1faa }, // U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0313, 0x03b1, 0}, 0x1f82 }, // U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0313, 0x03b7, 0}, 0x1f92 }, // U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0313, 0x03c9, 0}, 0x1fa2 }, // U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0314, 0x0391, 0}, 0x1f8b }, // U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0314, 0x0397, 0}, 0x1f9b }, // U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0314, 0x03a9, 0}, 0x1fab }, // U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0314, 0x03b1, 0}, 0x1f83 }, // U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0314, 0x03b7, 0}, 0x1f93 }, // U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x0314, 0x03c9, 0}, 0x1fa3 }, // U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x03b1, 0, 0}, 0x1fb2 }, // U1FB2 # GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x03b7, 0, 0}, 0x1fc2 }, // U1FC2 # GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x03c9, 0, 0}, 0x1ff2 }, // U1FF2 # GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f00, 0, 0}, 0x1f82 }, // U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f01, 0, 0}, 0x1f83 }, // U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f08, 0, 0}, 0x1f8a }, // U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f09, 0, 0}, 0x1f8b }, // U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f20, 0, 0}, 0x1f92 }, // U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f21, 0, 0}, 0x1f93 }, // U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f28, 0, 0}, 0x1f9a }, // U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f29, 0, 0}, 0x1f9b }, // U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f60, 0, 0}, 0x1fa2 }, // U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f61, 0, 0}, 0x1fa3 }, // U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f68, 0, 0}, 0x1faa }, // U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x0060, 0x1f69, 0, 0}, 0x1fab }, // U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0028, 0x0391, 0}, 0x1f8f }, // U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0028, 0x0397, 0}, 0x1f9f }, // U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0028, 0x03a9, 0}, 0x1faf }, // U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0028, 0x03b1, 0}, 0x1f87 }, // U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0028, 0x03b7, 0}, 0x1f97 }, // U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0028, 0x03c9, 0}, 0x1fa7 }, // U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0029, 0x0391, 0}, 0x1f8e }, // U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0029, 0x0397, 0}, 0x1f9e }, // U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0029, 0x03a9, 0}, 0x1fae }, // U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0029, 0x03b1, 0}, 0x1f86 }, // U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0029, 0x03b7, 0}, 0x1f96 }, // U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0029, 0x03c9, 0}, 0x1fa6 }, // U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0313, 0x0391, 0}, 0x1f8e }, // U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0313, 0x0397, 0}, 0x1f9e }, // U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0313, 0x03a9, 0}, 0x1fae }, // U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0313, 0x03b1, 0}, 0x1f86 }, // U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0313, 0x03b7, 0}, 0x1f96 }, // U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0313, 0x03c9, 0}, 0x1fa6 }, // U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0314, 0x0391, 0}, 0x1f8f }, // U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0314, 0x0397, 0}, 0x1f9f }, // U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0314, 0x03a9, 0}, 0x1faf }, // U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0314, 0x03b1, 0}, 0x1f87 }, // U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0314, 0x03b7, 0}, 0x1f97 }, // U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x0314, 0x03c9, 0}, 0x1fa7 }, // U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x03b1, 0, 0}, 0x1fb7 }, // U1FB7 # GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x03b7, 0, 0}, 0x1fc7 }, // U1FC7 # GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x03c9, 0, 0}, 0x1ff7 }, // U1FF7 # GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f00, 0, 0}, 0x1f86 }, // U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f01, 0, 0}, 0x1f87 }, // U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f08, 0, 0}, 0x1f8e }, // U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f09, 0, 0}, 0x1f8f }, // U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f20, 0, 0}, 0x1f96 }, // U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f21, 0, 0}, 0x1f97 }, // U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f28, 0, 0}, 0x1f9e }, // U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f29, 0, 0}, 0x1f9f }, // U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f60, 0, 0}, 0x1fa6 }, // U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f61, 0, 0}, 0x1fa7 }, // U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f68, 0, 0}, 0x1fae }, // U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x007e, 0x1f69, 0, 0}, 0x1faf }, // U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0028, 0x0391, 0}, 0x1f8d }, // U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0028, 0x0397, 0}, 0x1f9d }, // U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0028, 0x03a9, 0}, 0x1fad }, // U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0028, 0x03b1, 0}, 0x1f85 }, // U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0028, 0x03b7, 0}, 0x1f95 }, // U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0028, 0x03c9, 0}, 0x1fa5 }, // U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0029, 0x0391, 0}, 0x1f8c }, // U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0029, 0x0397, 0}, 0x1f9c }, // U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0029, 0x03a9, 0}, 0x1fac }, // U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0029, 0x03b1, 0}, 0x1f84 }, // U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0029, 0x03b7, 0}, 0x1f94 }, // U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0029, 0x03c9, 0}, 0x1fa4 }, // U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0313, 0x0391, 0}, 0x1f8c }, // U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0313, 0x0397, 0}, 0x1f9c }, // U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0313, 0x03a9, 0}, 0x1fac }, // U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0313, 0x03b1, 0}, 0x1f84 }, // U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0313, 0x03b7, 0}, 0x1f94 }, // U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0313, 0x03c9, 0}, 0x1fa4 }, // U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0314, 0x0391, 0}, 0x1f8d }, // U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0314, 0x0397, 0}, 0x1f9d }, // U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0314, 0x03a9, 0}, 0x1fad }, // U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0314, 0x03b1, 0}, 0x1f85 }, // U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0314, 0x03b7, 0}, 0x1f95 }, // U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x0314, 0x03c9, 0}, 0x1fa5 }, // U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x03b1, 0, 0}, 0x1fb4 }, // U1FB4 # GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x03b7, 0, 0}, 0x1fc4 }, // U1FC4 # GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x03c9, 0, 0}, 0x1ff4 }, // U1FF4 # GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f00, 0, 0}, 0x1f84 }, // U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f01, 0, 0}, 0x1f85 }, // U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f08, 0, 0}, 0x1f8c }, // U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f09, 0, 0}, 0x1f8d }, // U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f20, 0, 0}, 0x1f94 }, // U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f21, 0, 0}, 0x1f95 }, // U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f28, 0, 0}, 0x1f9c }, // U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f29, 0, 0}, 0x1f9d }, // U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f60, 0, 0}, 0x1fa4 }, // U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f61, 0, 0}, 0x1fa5 }, // U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f68, 0, 0}, 0x1fac }, // U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Multi_key), 0x00b4, 0x1f69, 0, 0}, 0x1fad }, // U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), 0x0313, 0x0391, 0, 0}, 0x1f8a }, // U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), 0x0313, 0x0397, 0, 0}, 0x1f9a }, // U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), 0x0313, 0x03a9, 0, 0}, 0x1faa }, // U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), 0x0313, 0x03b1, 0, 0}, 0x1f82 }, // U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), 0x0313, 0x03b7, 0, 0}, 0x1f92 }, // U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), 0x0313, 0x03c9, 0, 0}, 0x1fa2 }, // U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), 0x0314, 0x0391, 0, 0}, 0x1f8b }, // U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), 0x0314, 0x0397, 0, 0}, 0x1f9b }, // U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), 0x0314, 0x03a9, 0, 0}, 0x1fab }, // U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), 0x0314, 0x03b1, 0, 0}, 0x1f83 }, // U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), 0x0314, 0x03b7, 0, 0}, 0x1f93 }, // U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), 0x0314, 0x03c9, 0, 0}, 0x1fa3 }, // U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), 0x03b1, 0, 0, 0}, 0x1fb2 }, // U1FB2 # GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), 0x03b7, 0, 0, 0}, 0x1fc2 }, // U1FC2 # GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), 0x03c9, 0, 0, 0}, 0x1ff2 }, // U1FF2 # GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), 0x1f00, 0, 0, 0}, 0x1f82 }, // U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), 0x1f01, 0, 0, 0}, 0x1f83 }, // U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), 0x1f08, 0, 0, 0}, 0x1f8a }, // U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), 0x1f09, 0, 0, 0}, 0x1f8b }, // U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), 0x1f20, 0, 0, 0}, 0x1f92 }, // U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), 0x1f21, 0, 0, 0}, 0x1f93 }, // U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), 0x1f28, 0, 0, 0}, 0x1f9a }, // U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), 0x1f29, 0, 0, 0}, 0x1f9b }, // U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), 0x1f60, 0, 0, 0}, 0x1fa2 }, // U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), 0x1f61, 0, 0, 0}, 0x1fa3 }, // U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), 0x1f68, 0, 0, 0}, 0x1faa }, // U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), 0x1f69, 0, 0, 0}, 0x1fab }, // U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0391, 0}, 0x1f8b }, // U1F8B # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0397, 0}, 0x1f9b }, // U1F9B # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03a9, 0}, 0x1fab }, // U1FAB # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b1, 0}, 0x1f83 }, // U1F83 # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b7, 0}, 0x1f93 }, // U1F93 # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03c9, 0}, 0x1fa3 }, // U1FA3 # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0391, 0}, 0x1f8a }, // U1F8A # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0397, 0}, 0x1f9a }, // U1F9A # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03a9, 0}, 0x1faa }, // U1FAA # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b1, 0}, 0x1f82 }, // U1F82 # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b7, 0}, 0x1f92 }, // U1F92 # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Grave), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03c9, 0}, 0x1fa2 }, // U1FA2 # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), 0x0313, 0x0391, 0, 0}, 0x1f8c }, // U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), 0x0313, 0x0397, 0, 0}, 0x1f9c }, // U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), 0x0313, 0x03a9, 0, 0}, 0x1fac }, // U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), 0x0313, 0x03b1, 0, 0}, 0x1f84 }, // U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), 0x0313, 0x03b7, 0, 0}, 0x1f94 }, // U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), 0x0313, 0x03c9, 0, 0}, 0x1fa4 }, // U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), 0x0314, 0x0391, 0, 0}, 0x1f8d }, // U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), 0x0314, 0x0397, 0, 0}, 0x1f9d }, // U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), 0x0314, 0x03a9, 0, 0}, 0x1fad }, // U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), 0x0314, 0x03b1, 0, 0}, 0x1f85 }, // U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), 0x0314, 0x03b7, 0, 0}, 0x1f95 }, // U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), 0x0314, 0x03c9, 0, 0}, 0x1fa5 }, // U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), 0x03b1, 0, 0, 0}, 0x1fb4 }, // U1FB4 # GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), 0x03b7, 0, 0, 0}, 0x1fc4 }, // U1FC4 # GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), 0x03c9, 0, 0, 0}, 0x1ff4 }, // U1FF4 # GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), 0x1f00, 0, 0, 0}, 0x1f84 }, // U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), 0x1f01, 0, 0, 0}, 0x1f85 }, // U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), 0x1f08, 0, 0, 0}, 0x1f8c }, // U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), 0x1f09, 0, 0, 0}, 0x1f8d }, // U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), 0x1f20, 0, 0, 0}, 0x1f94 }, // U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), 0x1f21, 0, 0, 0}, 0x1f95 }, // U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), 0x1f28, 0, 0, 0}, 0x1f9c }, // U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), 0x1f29, 0, 0, 0}, 0x1f9d }, // U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), 0x1f60, 0, 0, 0}, 0x1fa4 }, // U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), 0x1f61, 0, 0, 0}, 0x1fa5 }, // U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), 0x1f68, 0, 0, 0}, 0x1fac }, // U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), 0x1f69, 0, 0, 0}, 0x1fad }, // U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0391, 0}, 0x1f8d }, // U1F8D # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0397, 0}, 0x1f9d }, // U1F9D # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03a9, 0}, 0x1fad }, // U1FAD # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b1, 0}, 0x1f85 }, // U1F85 # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b7, 0}, 0x1f95 }, // U1F95 # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03c9, 0}, 0x1fa5 }, // U1FA5 # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0391, 0}, 0x1f8c }, // U1F8C # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0397, 0}, 0x1f9c }, // U1F9C # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03a9, 0}, 0x1fac }, // U1FAC # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b1, 0}, 0x1f84 }, // U1F84 # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b7, 0}, 0x1f94 }, // U1F94 # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Acute), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03c9, 0}, 0x1fa4 }, // U1FA4 # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), 0x0313, 0x0391, 0, 0}, 0x1f8e }, // U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), 0x0313, 0x0397, 0, 0}, 0x1f9e }, // U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), 0x0313, 0x03a9, 0, 0}, 0x1fae }, // U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), 0x0313, 0x03b1, 0, 0}, 0x1f86 }, // U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), 0x0313, 0x03b7, 0, 0}, 0x1f96 }, // U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), 0x0313, 0x03c9, 0, 0}, 0x1fa6 }, // U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), 0x0314, 0x0391, 0, 0}, 0x1f8f }, // U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), 0x0314, 0x0397, 0, 0}, 0x1f9f }, // U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), 0x0314, 0x03a9, 0, 0}, 0x1faf }, // U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), 0x0314, 0x03b1, 0, 0}, 0x1f87 }, // U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), 0x0314, 0x03b7, 0, 0}, 0x1f97 }, // U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), 0x0314, 0x03c9, 0, 0}, 0x1fa7 }, // U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), 0x03b1, 0, 0, 0}, 0x1fb7 }, // U1FB7 # GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), 0x03b7, 0, 0, 0}, 0x1fc7 }, // U1FC7 # GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), 0x03c9, 0, 0, 0}, 0x1ff7 }, // U1FF7 # GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), 0x1f00, 0, 0, 0}, 0x1f86 }, // U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), 0x1f01, 0, 0, 0}, 0x1f87 }, // U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), 0x1f08, 0, 0, 0}, 0x1f8e }, // U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), 0x1f09, 0, 0, 0}, 0x1f8f }, // U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), 0x1f20, 0, 0, 0}, 0x1f96 }, // U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), 0x1f21, 0, 0, 0}, 0x1f97 }, // U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), 0x1f28, 0, 0, 0}, 0x1f9e }, // U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), 0x1f29, 0, 0, 0}, 0x1f9f }, // U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), 0x1f60, 0, 0, 0}, 0x1fa6 }, // U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), 0x1f61, 0, 0, 0}, 0x1fa7 }, // U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), 0x1f68, 0, 0, 0}, 0x1fae }, // U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), 0x1f69, 0, 0, 0}, 0x1faf }, // U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0391, 0}, 0x1f8f }, // U1F8F # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x0397, 0}, 0x1f9f }, // U1F9F # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03a9, 0}, 0x1faf }, // U1FAF # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b1, 0}, 0x1f87 }, // U1F87 # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03b7, 0}, 0x1f97 }, // U1F97 # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0028, 0x03c9, 0}, 0x1fa7 }, // U1FA7 # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0391, 0}, 0x1f8e }, // U1F8E # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x0397, 0}, 0x1f9e }, // U1F9E # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03a9, 0}, 0x1fae }, // U1FAE # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b1, 0}, 0x1f86 }, // U1F86 # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03b7, 0}, 0x1f96 }, // U1F96 # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Tilde), UNITIZE(Qt::Key_Multi_key), 0x0029, 0x03c9, 0}, 0x1fa6 }, // U1FA6 # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI -+ { {UNITIZE(Qt::Key_Dead_Iota), UNITIZE(Qt::Key_Dead_Iota), 0, 0, 0, 0}, 0x037a }, // U37a -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Iota), dead_space, 0, 0, 0, 0}, 0x037a }, // U37a -+ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x3046, 0, 0, 0, 0}, 0x3094 }, // U3094 # HIRAGANA LETTER VU -+ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x304b, 0, 0, 0, 0}, 0x304c }, // U304C # HIRAGANA LETTER GA -+ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x304d, 0, 0, 0, 0}, 0x304e }, // U304E # HIRAGANA LETTER GI -+ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x304f, 0, 0, 0, 0}, 0x3050 }, // U3050 # HIRAGANA LETTER GU -+ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x3051, 0, 0, 0, 0}, 0x3052 }, // U3052 # HIRAGANA LETTER GE -+ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x3053, 0, 0, 0, 0}, 0x3054 }, // U3054 # HIRAGANA LETTER GO -+ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x3055, 0, 0, 0, 0}, 0x3056 }, // U3056 # HIRAGANA LETTER ZA -+ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x3057, 0, 0, 0, 0}, 0x3058 }, // U3058 # HIRAGANA LETTER ZI -+ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x3059, 0, 0, 0, 0}, 0x305a }, // U305A # HIRAGANA LETTER ZU -+ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x305b, 0, 0, 0, 0}, 0x305c }, // U305C # HIRAGANA LETTER ZE -+ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x305d, 0, 0, 0, 0}, 0x305e }, // U305E # HIRAGANA LETTER ZO -+ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x305f, 0, 0, 0, 0}, 0x3060 }, // U3060 # HIRAGANA LETTER DA -+ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x3061, 0, 0, 0, 0}, 0x3062 }, // U3062 # HIRAGANA LETTER DI -+ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x3064, 0, 0, 0, 0}, 0x3065 }, // U3065 # HIRAGANA LETTER DU -+ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x3066, 0, 0, 0, 0}, 0x3067 }, // U3067 # HIRAGANA LETTER DE -+ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x3068, 0, 0, 0, 0}, 0x3069 }, // U3069 # HIRAGANA LETTER DO -+ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x306f, 0, 0, 0, 0}, 0x3070 }, // U3070 # HIRAGANA LETTER BA -+ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x3072, 0, 0, 0, 0}, 0x3073 }, // U3073 # HIRAGANA LETTER BI -+ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x3075, 0, 0, 0, 0}, 0x3076 }, // U3076 # HIRAGANA LETTER BU -+ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x3078, 0, 0, 0, 0}, 0x3079 }, // U3079 # HIRAGANA LETTER BE -+ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x307b, 0, 0, 0, 0}, 0x307c }, // U307C # HIRAGANA LETTER BO -+ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x309d, 0, 0, 0, 0}, 0x309e }, // U309E # HIRAGANA VOICED ITERATION MARK -+ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x30a6, 0, 0, 0, 0}, 0x30f4 }, // U30F4 # KATAKANA LETTER VU -+ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x30ab, 0, 0, 0, 0}, 0x30ac }, // U30AC # KATAKANA LETTER GA -+ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x30ad, 0, 0, 0, 0}, 0x30ae }, // U30AE # KATAKANA LETTER GI -+ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x30af, 0, 0, 0, 0}, 0x30b0 }, // U30B0 # KATAKANA LETTER GU -+ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x30b1, 0, 0, 0, 0}, 0x30b2 }, // U30B2 # KATAKANA LETTER GE -+ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x30b3, 0, 0, 0, 0}, 0x30b4 }, // U30B4 # KATAKANA LETTER GO -+ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x30b5, 0, 0, 0, 0}, 0x30b6 }, // U30B6 # KATAKANA LETTER ZA -+ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x30b7, 0, 0, 0, 0}, 0x30b8 }, // U30B8 # KATAKANA LETTER ZI -+ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x30b9, 0, 0, 0, 0}, 0x30ba }, // U30BA # KATAKANA LETTER ZU -+ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x30bb, 0, 0, 0, 0}, 0x30bc }, // U30BC # KATAKANA LETTER ZE -+ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x30bd, 0, 0, 0, 0}, 0x30be }, // U30BE # KATAKANA LETTER ZO -+ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x30bf, 0, 0, 0, 0}, 0x30c0 }, // U30C0 # KATAKANA LETTER DA -+ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x30c1, 0, 0, 0, 0}, 0x30c2 }, // U30C2 # KATAKANA LETTER DI -+ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x30c4, 0, 0, 0, 0}, 0x30c5 }, // U30C5 # KATAKANA LETTER DU -+ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x30c6, 0, 0, 0, 0}, 0x30c7 }, // U30C7 # KATAKANA LETTER DE -+ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x30c8, 0, 0, 0, 0}, 0x30c9 }, // U30C9 # KATAKANA LETTER DO -+ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x30cf, 0, 0, 0, 0}, 0x30d0 }, // U30D0 # KATAKANA LETTER BA -+ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x30d2, 0, 0, 0, 0}, 0x30d3 }, // U30D3 # KATAKANA LETTER BI -+ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x30d5, 0, 0, 0, 0}, 0x30d6 }, // U30D6 # KATAKANA LETTER BU -+ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x30d8, 0, 0, 0, 0}, 0x30d9 }, // U30D9 # KATAKANA LETTER BE -+ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x30db, 0, 0, 0, 0}, 0x30dc }, // U30DC # KATAKANA LETTER BO -+ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x30ef, 0, 0, 0, 0}, 0x30f7 }, // U30F7 # KATAKANA LETTER VA -+ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x30f0, 0, 0, 0, 0}, 0x30f8 }, // U30F8 # KATAKANA LETTER VI -+ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x30f1, 0, 0, 0, 0}, 0x30f9 }, // U30F9 # KATAKANA LETTER VE -+ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x30f2, 0, 0, 0, 0}, 0x30fa }, // U30FA # KATAKANA LETTER VO -+ { {UNITIZE(Qt::Key_Dead_Voiced_Sound), 0x30fd, 0, 0, 0, 0}, 0x30fe }, // U30FE # KATAKANA VOICED ITERATION MARK -+ { {UNITIZE(Qt::Key_Dead_Semivoiced_Sound), 0x306f, 0, 0, 0, 0}, 0x3071 }, // U3071 # HIRAGANA LETTER PA -+ { {UNITIZE(Qt::Key_Dead_Semivoiced_Sound), 0x3072, 0, 0, 0, 0}, 0x3074 }, // U3074 # HIRAGANA LETTER PI -+ { {UNITIZE(Qt::Key_Dead_Semivoiced_Sound), 0x3075, 0, 0, 0, 0}, 0x3077 }, // U3077 # HIRAGANA LETTER PU -+ { {UNITIZE(Qt::Key_Dead_Semivoiced_Sound), 0x3078, 0, 0, 0, 0}, 0x307a }, // U307A # HIRAGANA LETTER PE -+ { {UNITIZE(Qt::Key_Dead_Semivoiced_Sound), 0x307b, 0, 0, 0, 0}, 0x307d }, // U307D # HIRAGANA LETTER PO -+ { {UNITIZE(Qt::Key_Dead_Semivoiced_Sound), 0x30cf, 0, 0, 0, 0}, 0x30d1 }, // U30D1 # KATAKANA LETTER PA -+ { {UNITIZE(Qt::Key_Dead_Semivoiced_Sound), 0x30d2, 0, 0, 0, 0}, 0x30d4 }, // U30D4 # KATAKANA LETTER PI -+ { {UNITIZE(Qt::Key_Dead_Semivoiced_Sound), 0x30d5, 0, 0, 0, 0}, 0x30d7 }, // U30D7 # KATAKANA LETTER PU -+ { {UNITIZE(Qt::Key_Dead_Semivoiced_Sound), 0x30d8, 0, 0, 0, 0}, 0x30da }, // U30DA # KATAKANA LETTER PE -+ { {UNITIZE(Qt::Key_Dead_Semivoiced_Sound), 0x30db, 0, 0, 0, 0}, 0x30dd }, // U30DD # KATAKANA LETTER PO -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0000, 0, 0, 0, 0}, 0x1ee2 }, // U1EE2 # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0000, 0, 0, 0, 0}, 0x1ef1 }, // U1EF1 # LATIN SMALL LETTER U WITH HORN AND DOT BELOW -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0000, 0, 0, 0, 0}, 0x1ee3 }, // U1EE3 # LATIN SMALL LETTER O WITH HORN AND DOT BELOW -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0000, 0, 0, 0, 0}, 0x1ef0 }, // U1EF0 # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW -+ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0041, 0, 0, 0, 0}, 0x1ea0 }, // U1EA0 # LATIN CAPITAL LETTER A WITH DOT BELOW -+ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0042, 0, 0, 0, 0}, 0x1e04 }, // U1E04 # LATIN CAPITAL LETTER B WITH DOT BELOW -+ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0044, 0, 0, 0, 0}, 0x1e0c }, // U1E0C # LATIN CAPITAL LETTER D WITH DOT BELOW -+ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0045, 0, 0, 0, 0}, 0x1eb8 }, // U1EB8 # LATIN CAPITAL LETTER E WITH DOT BELOW -+ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0048, 0, 0, 0, 0}, 0x1e24 }, // U1E24 # LATIN CAPITAL LETTER H WITH DOT BELOW -+ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0049, 0, 0, 0, 0}, 0x1eca }, // U1ECA # LATIN CAPITAL LETTER I WITH DOT BELOW -+ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x004b, 0, 0, 0, 0}, 0x1e32 }, // U1E32 # LATIN CAPITAL LETTER K WITH DOT BELOW -+ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x004c, 0, 0, 0, 0}, 0x1e36 }, // U1E36 # LATIN CAPITAL LETTER L WITH DOT BELOW -+ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x004d, 0, 0, 0, 0}, 0x1e42 }, // U1E42 # LATIN CAPITAL LETTER M WITH DOT BELOW -+ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x004e, 0, 0, 0, 0}, 0x1e46 }, // U1E46 # LATIN CAPITAL LETTER N WITH DOT BELOW -+ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x004f, 0, 0, 0, 0}, 0x1ecc }, // U1ECC # LATIN CAPITAL LETTER O WITH DOT BELOW -+ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0052, 0, 0, 0, 0}, 0x1e5a }, // U1E5A # LATIN CAPITAL LETTER R WITH DOT BELOW -+ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0053, 0, 0, 0, 0}, 0x1e62 }, // U1E62 # LATIN CAPITAL LETTER S WITH DOT BELOW -+ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0054, 0, 0, 0, 0}, 0x1e6c }, // U1E6C # LATIN CAPITAL LETTER T WITH DOT BELOW -+ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0055, 0, 0, 0, 0}, 0x1ee4 }, // U1EE4 # LATIN CAPITAL LETTER U WITH DOT BELOW -+ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0056, 0, 0, 0, 0}, 0x1e7e }, // U1E7E # LATIN CAPITAL LETTER V WITH DOT BELOW -+ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0057, 0, 0, 0, 0}, 0x1e88 }, // U1E88 # LATIN CAPITAL LETTER W WITH DOT BELOW -+ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0059, 0, 0, 0, 0}, 0x1ef4 }, // U1EF4 # LATIN CAPITAL LETTER Y WITH DOT BELOW -+ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x005a, 0, 0, 0, 0}, 0x1e92 }, // U1E92 # LATIN CAPITAL LETTER Z WITH DOT BELOW -+ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0061, 0, 0, 0, 0}, 0x1ea1 }, // U1EA1 # LATIN SMALL LETTER A WITH DOT BELOW -+ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0062, 0, 0, 0, 0}, 0x1e05 }, // U1E05 # LATIN SMALL LETTER B WITH DOT BELOW -+ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0064, 0, 0, 0, 0}, 0x1e0d }, // U1E0D # LATIN SMALL LETTER D WITH DOT BELOW -+ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0065, 0, 0, 0, 0}, 0x1eb9 }, // U1EB9 # LATIN SMALL LETTER E WITH DOT BELOW -+ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0068, 0, 0, 0, 0}, 0x1e25 }, // U1E25 # LATIN SMALL LETTER H WITH DOT BELOW -+ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0069, 0, 0, 0, 0}, 0x1ecb }, // U1ECB # LATIN SMALL LETTER I WITH DOT BELOW -+ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x006b, 0, 0, 0, 0}, 0x1e33 }, // U1E33 # LATIN SMALL LETTER K WITH DOT BELOW -+ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x006c, 0, 0, 0, 0}, 0x1e37 }, // U1E37 # LATIN SMALL LETTER L WITH DOT BELOW -+ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x006d, 0, 0, 0, 0}, 0x1e43 }, // U1E43 # LATIN SMALL LETTER M WITH DOT BELOW -+ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x006e, 0, 0, 0, 0}, 0x1e47 }, // U1E47 # LATIN SMALL LETTER N WITH DOT BELOW -+ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x006f, 0, 0, 0, 0}, 0x1ecd }, // U1ECD # LATIN SMALL LETTER O WITH DOT BELOW -+ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0072, 0, 0, 0, 0}, 0x1e5b }, // U1E5B # LATIN SMALL LETTER R WITH DOT BELOW -+ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0073, 0, 0, 0, 0}, 0x1e63 }, // U1E63 # LATIN SMALL LETTER S WITH DOT BELOW -+ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0074, 0, 0, 0, 0}, 0x1e6d }, // U1E6D # LATIN SMALL LETTER T WITH DOT BELOW -+ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0075, 0, 0, 0, 0}, 0x1ee5 }, // U1EE5 # LATIN SMALL LETTER U WITH DOT BELOW -+ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0076, 0, 0, 0, 0}, 0x1e7f }, // U1E7F # LATIN SMALL LETTER V WITH DOT BELOW -+ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0077, 0, 0, 0, 0}, 0x1e89 }, // U1E89 # LATIN SMALL LETTER W WITH DOT BELOW -+ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0079, 0, 0, 0, 0}, 0x1ef5 }, // U1EF5 # LATIN SMALL LETTER Y WITH DOT BELOW -+ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x007a, 0, 0, 0, 0}, 0x1e93 }, // U1E93 # LATIN SMALL LETTER Z WITH DOT BELOW -+ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x00c2, 0, 0, 0, 0}, 0x1eac }, // U1EAC # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW -+ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x00ca, 0, 0, 0, 0}, 0x1ec6 }, // U1EC6 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW -+ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x00d4, 0, 0, 0, 0}, 0x1ed8 }, // U1ED8 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW -+ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x00e2, 0, 0, 0, 0}, 0x1ead }, // U1EAD # LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW -+ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x00ea, 0, 0, 0, 0}, 0x1ec7 }, // U1EC7 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW -+ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x00f4, 0, 0, 0, 0}, 0x1ed9 }, // U1ED9 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW -+ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0102, 0, 0, 0, 0}, 0x1eb6 }, // U1EB6 # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW -+ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x0103, 0, 0, 0, 0}, 0x1eb7 }, // U1EB7 # LATIN SMALL LETTER A WITH BREVE AND DOT BELOW -+ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x01A0, 0, 0, 0, 0}, 0x1ee2 }, // U1EE2 # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW -+ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x01A1, 0, 0, 0, 0}, 0x1ee3 }, // U1EE3 # LATIN SMALL LETTER O WITH HORN AND DOT BELOW -+ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x01AF, 0, 0, 0, 0}, 0x1ef0 }, // U1EF0 # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW -+ { {UNITIZE(Qt::Key_Dead_Belowdot), 0x01B0, 0, 0, 0, 0}, 0x1ef1 }, // U1EF1 # LATIN SMALL LETTER U WITH HORN AND DOT BELOW -+ { {UNITIZE(Qt::Key_Dead_Belowdot), UNITIZE(Qt::Key_Multi_key), 0x002b, 0x004f, 0, 0}, 0x1ee2 }, // U1EE2 # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW -+ { {UNITIZE(Qt::Key_Dead_Belowdot), UNITIZE(Qt::Key_Multi_key), 0x002b, 0x0055, 0, 0}, 0x1ef0 }, // U1EF0 # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW -+ { {UNITIZE(Qt::Key_Dead_Belowdot), UNITIZE(Qt::Key_Multi_key), 0x002b, 0x006f, 0, 0}, 0x1ee3 }, // U1EE3 # LATIN SMALL LETTER O WITH HORN AND DOT BELOW -+ { {UNITIZE(Qt::Key_Dead_Belowdot), UNITIZE(Qt::Key_Multi_key), 0x002b, 0x0075, 0, 0}, 0x1ef1 }, // U1EF1 # LATIN SMALL LETTER U WITH HORN AND DOT BELOW -+ { {UNITIZE(Qt::Key_Dead_Belowdot), UNITIZE(Qt::Key_Dead_Horn), 0x004f, 0, 0, 0}, 0x1ee2 }, // U1EE2 # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW -+ { {UNITIZE(Qt::Key_Dead_Belowdot), UNITIZE(Qt::Key_Dead_Horn), 0x0055, 0, 0, 0}, 0x1ef0 }, // U1EF0 # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW -+ { {UNITIZE(Qt::Key_Dead_Belowdot), UNITIZE(Qt::Key_Dead_Horn), 0x006f, 0, 0, 0}, 0x1ee3 }, // U1EE3 # LATIN SMALL LETTER O WITH HORN AND DOT BELOW -+ { {UNITIZE(Qt::Key_Dead_Belowdot), UNITIZE(Qt::Key_Dead_Horn), 0x0075, 0, 0, 0}, 0x1ef1 }, // U1EF1 # LATIN SMALL LETTER U WITH HORN AND DOT BELOW -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Hook), 0x0000, 0, 0, 0, 0}, 0x1edf }, // U1EDF # LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Hook), 0x0000, 0, 0, 0, 0}, 0x1eec }, // U1EEC # LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Hook), 0x0000, 0, 0, 0, 0}, 0x1eed }, // U1EED # LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE -+// /* broken */ { {UNITIZE(Qt::Key_Dead_Hook), 0x0000, 0, 0, 0, 0}, 0x1ede }, // U1EDE # LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE -+ { {UNITIZE(Qt::Key_Dead_Hook), 0x0041, 0, 0, 0, 0}, 0x1ea2 }, // U1EA2 # LATIN CAPITAL LETTER A WITH HOOK ABOVE -+ { {UNITIZE(Qt::Key_Dead_Hook), 0x0045, 0, 0, 0, 0}, 0x1eba }, // U1EBA # LATIN CAPITAL LETTER E WITH HOOK ABOVE -+ { {UNITIZE(Qt::Key_Dead_Hook), 0x0049, 0, 0, 0, 0}, 0x1ec8 }, // U1EC8 # LATIN CAPITAL LETTER I WITH HOOK ABOVE -+ { {UNITIZE(Qt::Key_Dead_Hook), 0x004f, 0, 0, 0, 0}, 0x1ece }, // U1ECE # LATIN CAPITAL LETTER O WITH HOOK ABOVE -+ { {UNITIZE(Qt::Key_Dead_Hook), 0x0055, 0, 0, 0, 0}, 0x1ee6 }, // U1EE6 # LATIN CAPITAL LETTER U WITH HOOK ABOVE -+ { {UNITIZE(Qt::Key_Dead_Hook), 0x0059, 0, 0, 0, 0}, 0x1ef6 }, // U1EF6 # LATIN CAPITAL LETTER Y WITH HOOK ABOVE -+ { {UNITIZE(Qt::Key_Dead_Hook), 0x0061, 0, 0, 0, 0}, 0x1ea3 }, // U1EA3 # LATIN SMALL LETTER A WITH HOOK ABOVE -+ { {UNITIZE(Qt::Key_Dead_Hook), 0x0065, 0, 0, 0, 0}, 0x1ebb }, // U1EBB # LATIN SMALL LETTER E WITH HOOK ABOVE -+ { {UNITIZE(Qt::Key_Dead_Hook), 0x0069, 0, 0, 0, 0}, 0x1ec9 }, // U1EC9 # LATIN SMALL LETTER I WITH HOOK ABOVE -+ { {UNITIZE(Qt::Key_Dead_Hook), 0x006f, 0, 0, 0, 0}, 0x1ecf }, // U1ECF # LATIN SMALL LETTER O WITH HOOK ABOVE -+ { {UNITIZE(Qt::Key_Dead_Hook), 0x0075, 0, 0, 0, 0}, 0x1ee7 }, // U1EE7 # LATIN SMALL LETTER U WITH HOOK ABOVE -+ { {UNITIZE(Qt::Key_Dead_Hook), 0x0079, 0, 0, 0, 0}, 0x1ef7 }, // U1EF7 # LATIN SMALL LETTER Y WITH HOOK ABOVE -+ { {UNITIZE(Qt::Key_Dead_Hook), 0x00c2, 0, 0, 0, 0}, 0x1ea8 }, // U1EA8 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE -+ { {UNITIZE(Qt::Key_Dead_Hook), 0x00ca, 0, 0, 0, 0}, 0x1ec2 }, // U1EC2 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE -+ { {UNITIZE(Qt::Key_Dead_Hook), 0x00d4, 0, 0, 0, 0}, 0x1ed4 }, // U1ED4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE -+ { {UNITIZE(Qt::Key_Dead_Hook), 0x00e2, 0, 0, 0, 0}, 0x1ea9 }, // U1EA9 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE -+ { {UNITIZE(Qt::Key_Dead_Hook), 0x00ea, 0, 0, 0, 0}, 0x1ec3 }, // U1EC3 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE -+ { {UNITIZE(Qt::Key_Dead_Hook), 0x00f4, 0, 0, 0, 0}, 0x1ed5 }, // U1ED5 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE -+ { {UNITIZE(Qt::Key_Dead_Hook), 0x0102, 0, 0, 0, 0}, 0x1eb2 }, // U1EB2 # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE -+ { {UNITIZE(Qt::Key_Dead_Hook), 0x0103, 0, 0, 0, 0}, 0x1eb3 }, // U1EB3 # LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE -+ { {UNITIZE(Qt::Key_Dead_Hook), 0x01A0, 0, 0, 0, 0}, 0x1ede }, // U1EDE # LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE -+ { {UNITIZE(Qt::Key_Dead_Hook), 0x01A1, 0, 0, 0, 0}, 0x1edf }, // U1EDF # LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE -+ { {UNITIZE(Qt::Key_Dead_Hook), 0x01AF, 0, 0, 0, 0}, 0x1eec }, // U1EEC # LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE -+ { {UNITIZE(Qt::Key_Dead_Hook), 0x01B0, 0, 0, 0, 0}, 0x1eed }, // U1EED # LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE -+ { {UNITIZE(Qt::Key_Dead_Hook), UNITIZE(Qt::Key_Multi_key), 0x002b, 0x004f, 0, 0}, 0x1ede }, // U1EDE # LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE -+ { {UNITIZE(Qt::Key_Dead_Hook), UNITIZE(Qt::Key_Multi_key), 0x002b, 0x0055, 0, 0}, 0x1eec }, // U1EEC # LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE -+ { {UNITIZE(Qt::Key_Dead_Hook), UNITIZE(Qt::Key_Multi_key), 0x002b, 0x006f, 0, 0}, 0x1edf }, // U1EDF # LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE -+ { {UNITIZE(Qt::Key_Dead_Hook), UNITIZE(Qt::Key_Multi_key), 0x002b, 0x0075, 0, 0}, 0x1eed }, // U1EED # LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE -+ { {UNITIZE(Qt::Key_Dead_Hook), UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0041, 0, 0}, 0x1eb2 }, // U1EB2 # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE -+ { {UNITIZE(Qt::Key_Dead_Hook), UNITIZE(Qt::Key_Multi_key), 0x0055, 0x0061, 0, 0}, 0x1eb3 }, // U1EB3 # LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE -+ { {UNITIZE(Qt::Key_Dead_Hook), UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0041, 0, 0}, 0x1ea8 }, // U1EA8 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE -+ { {UNITIZE(Qt::Key_Dead_Hook), UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0045, 0, 0}, 0x1ec2 }, // U1EC2 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE -+ { {UNITIZE(Qt::Key_Dead_Hook), UNITIZE(Qt::Key_Multi_key), 0x005e, 0x004f, 0, 0}, 0x1ed4 }, // U1ED4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE -+ { {UNITIZE(Qt::Key_Dead_Hook), UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0061, 0, 0}, 0x1ea9 }, // U1EA9 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE -+ { {UNITIZE(Qt::Key_Dead_Hook), UNITIZE(Qt::Key_Multi_key), 0x005e, 0x0065, 0, 0}, 0x1ec3 }, // U1EC3 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE -+ { {UNITIZE(Qt::Key_Dead_Hook), UNITIZE(Qt::Key_Multi_key), 0x005e, 0x006f, 0, 0}, 0x1ed5 }, // U1ED5 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE -+ { {UNITIZE(Qt::Key_Dead_Hook), UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0041, 0, 0}, 0x1eb2 }, // U1EB2 # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE -+ { {UNITIZE(Qt::Key_Dead_Hook), UNITIZE(Qt::Key_Multi_key), 0x0062, 0x0061, 0, 0}, 0x1eb3 }, // U1EB3 # LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE -+ { {UNITIZE(Qt::Key_Dead_Hook), UNITIZE(Qt::Key_Dead_Circumflex), 0x0041, 0, 0, 0}, 0x1ea8 }, // U1EA8 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE -+ { {UNITIZE(Qt::Key_Dead_Hook), UNITIZE(Qt::Key_Dead_Circumflex), 0x0045, 0, 0, 0}, 0x1ec2 }, // U1EC2 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE -+ { {UNITIZE(Qt::Key_Dead_Hook), UNITIZE(Qt::Key_Dead_Circumflex), 0x004f, 0, 0, 0}, 0x1ed4 }, // U1ED4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE -+ { {UNITIZE(Qt::Key_Dead_Hook), UNITIZE(Qt::Key_Dead_Circumflex), 0x0061, 0, 0, 0}, 0x1ea9 }, // U1EA9 # LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE -+ { {UNITIZE(Qt::Key_Dead_Hook), UNITIZE(Qt::Key_Dead_Circumflex), 0x0065, 0, 0, 0}, 0x1ec3 }, // U1EC3 # LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE -+ { {UNITIZE(Qt::Key_Dead_Hook), UNITIZE(Qt::Key_Dead_Circumflex), 0x006f, 0, 0, 0}, 0x1ed5 }, // U1ED5 # LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE -+ { {UNITIZE(Qt::Key_Dead_Hook), UNITIZE(Qt::Key_Dead_Breve), 0x0041, 0, 0, 0}, 0x1eb2 }, // U1EB2 # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE -+ { {UNITIZE(Qt::Key_Dead_Hook), UNITIZE(Qt::Key_Dead_Breve), 0x0061, 0, 0, 0}, 0x1eb3 }, // U1EB3 # LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE -+ { {UNITIZE(Qt::Key_Dead_Hook), UNITIZE(Qt::Key_Dead_Horn), 0x004f, 0, 0, 0}, 0x1ede }, // U1EDE # LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE -+ { {UNITIZE(Qt::Key_Dead_Hook), UNITIZE(Qt::Key_Dead_Horn), 0x0055, 0, 0, 0}, 0x1eec }, // U1EEC # LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE -+ { {UNITIZE(Qt::Key_Dead_Hook), UNITIZE(Qt::Key_Dead_Horn), 0x006f, 0, 0, 0}, 0x1edf }, // U1EDF # LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE -+ { {UNITIZE(Qt::Key_Dead_Hook), UNITIZE(Qt::Key_Dead_Horn), 0x0075, 0, 0, 0}, 0x1eed }, // U1EED # LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE -+ { {UNITIZE(Qt::Key_Dead_Horn), 0x004f, 0, 0, 0, 0}, 0x01a0 }, // U01A0 # LATIN CAPITAL LETTER O WITH HORN -+ { {UNITIZE(Qt::Key_Dead_Horn), 0x0055, 0, 0, 0, 0}, 0x01af }, // U01AF # LATIN CAPITAL LETTER U WITH HORN -+ { {UNITIZE(Qt::Key_Dead_Horn), 0x006f, 0, 0, 0, 0}, 0x01a1 }, // U01A1 # LATIN SMALL LETTER O WITH HORN -+ { {UNITIZE(Qt::Key_Dead_Horn), 0x0075, 0, 0, 0, 0}, 0x01b0 } // U01B0 # LATIN SMALL LETTER U WITH HORN -+}; -+ -+const QComposeTable QSimpleInputContext::defaultComposeTable = { -+ defaultTable, -+ ( sizeof(defaultTable) / sizeof(QComposeTableElement) ) -+}; ---- plugins/src/inputmethods/simple/qsimpleinputcontext.cpp -+++ plugins/src/inputmethods/simple/qsimpleinputcontext.cpp -@@ -0,0 +1,285 @@ -+/**************************************************************************** -+** $Id$ -+** -+** Implementation of QSimpleInputContext class -+** -+** Copyright (C) 2004 immodule for Qt Project. All rights reserved. -+** -+** This file is written to contribute to Trolltech AS under their own -+** licence. You may use this file under your Qt license. Following -+** description is copied from their original file headers. Contact -+** immodule-qt@freedesktop.org if any conditions of this licensing are -+** not clear to you. -+** -+** -+** This file is part of the input method module of the Qt GUI Toolkit. -+** -+** This file may be distributed under the terms of the Q Public License -+** as defined by Trolltech AS of Norway and appearing in the file -+** LICENSE.QPL included in the packaging of this file. -+** -+** This file may be distributed and/or modified under the terms of the -+** GNU General Public License version 2 as published by the Free Software -+** Foundation and appearing in the file LICENSE.GPL included in the -+** packaging of this file. -+** -+** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition -+** licenses may use this file in accordance with the Qt Commercial License -+** Agreement provided with the Software. -+** -+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -+** -+** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for -+** information about Qt Commercial License Agreements. -+** See http://www.trolltech.com/qpl/ for QPL licensing information. -+** See http://www.trolltech.com/gpl/ for GPL licensing information. -+** -+** Contact info@trolltech.com if any conditions of this licensing are -+** not clear to you. -+** -+**********************************************************************/ -+ -+#include "qsimpleinputcontext.h" -+ -+#include -+#include -+#include -+#include -+ -+static const int ignoreKeys[] = { -+ Qt::Key_Shift, -+ Qt::Key_Control, -+ Qt::Key_Meta, -+ Qt::Key_Alt, -+ Qt::Key_CapsLock, -+ Qt::Key_Super_L, -+ Qt::Key_Super_R, -+ Qt::Key_Hyper_L, -+ Qt::Key_Hyper_R, -+ Qt::Key_Mode_switch -+}; -+ -+static const int composingKeys[] = { -+ Qt::Key_Multi_key, -+ Qt::Key_Dead_Grave, -+ Qt::Key_Dead_Acute, -+ Qt::Key_Dead_Circumflex, -+ Qt::Key_Dead_Tilde, -+ Qt::Key_Dead_Macron, -+ Qt::Key_Dead_Breve, -+ Qt::Key_Dead_Abovedot, -+ Qt::Key_Dead_Diaeresis, -+ Qt::Key_Dead_Abovering, -+ Qt::Key_Dead_Doubleacute, -+ Qt::Key_Dead_Caron, -+ Qt::Key_Dead_Cedilla, -+ Qt::Key_Dead_Ogonek, -+ Qt::Key_Dead_Iota, -+ Qt::Key_Dead_Voiced_Sound, -+ Qt::Key_Dead_Semivoiced_Sound, -+ Qt::Key_Dead_Belowdot, -+ Qt::Key_Dead_Hook, -+ Qt::Key_Dead_Horn -+}; -+ -+class Cmp -+{ -+public: -+ bool operator () (const QComposeTableElement &lhs, const QComposeTableElement &rhs) const { -+ for ( size_t i=0; i < QT_KEYSEQUENCE_MAX_LEN; i++ ) { -+ if ( lhs.keys[i] < rhs.keys[i] ) return TRUE; -+ else -+ if ( lhs.keys[i] > rhs.keys[i] ) return FALSE; -+ } -+ return FALSE; -+ } -+ -+ bool operator () (const QComposeTableElement &lhs, const uint rhs[QT_KEYSEQUENCE_MAX_LEN]) const { -+ for ( size_t i=0; i < QT_KEYSEQUENCE_MAX_LEN; i++ ) { -+ if ( lhs.keys[i] < rhs[i] ) return TRUE; -+ else -+ if ( lhs.keys[i] > rhs[i] ) return FALSE; -+ } -+ return FALSE; -+ } -+}; -+ -+QSimpleInputContext::QSimpleInputContext() -+ : QInputContext() -+{ -+ clearComposeBuffer(); -+} -+ -+QSimpleInputContext::~QSimpleInputContext() -+{ -+ clearComposeBuffer(); -+} -+ -+bool QSimpleInputContext::filterEvent( const QEvent *event ) -+{ -+ if ( event->type() != QEvent::KeyPress ) -+ return FALSE; -+ -+ QKeyEvent *keyevent = (QKeyEvent *)event; -+ int keyval = keyevent->key(); -+ int val = 0; -+ -+ if ( isIgnoreKeys( keyval ) ) -+ return FALSE; -+ -+ if ( isComposingKeys( keyval ) ) { -+ // If composing keys are pressed, use keyval directly -+ val = UNITIZE( keyval ); -+ } else { -+ QString text = keyevent->text(); -+ if ( text.isEmpty() ) -+ return FALSE; -+ -+ // If not composing keys are pressed, use the character's unicode value -+ // NOTE : The contents of QKeyEvent::text() is restricted to -+ // only one character. See description of -+ // QInputContext::filterEvent() about key compression. -+ val = text[0].unicode(); -+ qDebug( "str = %s", (const char*)keyevent->text().local8Bit() ); -+ } -+ -+ // Store value -+ int nCompose = 0; -+ while ( composeBuffer[nCompose] != 0 && nCompose < QT_KEYSEQUENCE_MAX_LEN ) -+ nCompose++; -+ -+ if ( nCompose == QT_KEYSEQUENCE_MAX_LEN ) { -+ clearComposeBuffer(); -+ nCompose = 0; -+ } -+ -+ composeBuffer[nCompose] = val; -+ -+ // check sequence -+ if( checkComposeTable( composeBuffer, &defaultComposeTable ) ) -+ return TRUE; -+ -+ return FALSE; -+} -+ -+void QSimpleInputContext::setFocus() -+{ -+ qDebug( "QSimpleInputContext: %p->setFocus(), focusWidget()=%p", -+ this, focusWidget() ); -+} -+ -+void QSimpleInputContext::unsetFocus() -+{ -+ qDebug( "QSimpleInputContext: %p->unsetFocus(), focusWidget()=%p", -+ this, focusWidget() ); -+ reset(); -+} -+ -+void QSimpleInputContext::setMicroFocus( int x, int y, int w, int h, QFont *f ) -+{ -+} -+ -+void QSimpleInputContext::mouseHandler( int x, QEvent::Type type, -+ Qt::ButtonState button, -+ Qt::ButtonState state ) -+{ -+ switch ( type ) { -+ case QEvent::MouseButtonPress: -+ case QEvent::MouseButtonRelease: -+ case QEvent::MouseButtonDblClick: -+ case QEvent::MouseMove: -+ qDebug( "QSimpleInputContext::mouseHandler: " -+ "x=%d, type=%d, button=%d, state=%d", x, type, button, state ); -+ break; -+ default: -+ break; -+ } -+} -+ -+ -+void QSimpleInputContext::reset() -+{ -+ clearComposeBuffer(); -+ QInputContext::reset(); -+} -+ -+QString QSimpleInputContext::identifierName() -+{ -+ return "simple"; -+} -+ -+QString QSimpleInputContext::language() -+{ -+ return ""; // FIXME -+} -+ -+bool QSimpleInputContext::isIgnoreKeys( int keyval ) -+{ -+ for ( uint i = 0; i < (sizeof(ignoreKeys)/sizeof(ignoreKeys[0])); i++ ) -+ if ( keyval == ignoreKeys[i] ) -+ return TRUE; -+ -+ return FALSE; -+} -+ -+bool QSimpleInputContext::isComposingKeys( int keyval ) -+{ -+ for ( uint i = 0; i < (sizeof(composingKeys)/sizeof(composingKeys[0])); i++ ) -+ if ( keyval == composingKeys[i] ) -+ return TRUE; -+ -+ return FALSE; -+} -+ -+bool QSimpleInputContext::checkComposeTable( uint* composeBuffer, const QComposeTable *composeTable ) -+{ -+ const QComposeTableElement *p = std::lower_bound( composeTable->data, -+ composeTable->data + composeTable->size, -+ composeBuffer, -+ Cmp() ); -+ -+ // no entries were found -+ if ( p == composeTable->data + composeTable->size ) { -+ qDebug( "no match" ); -+ clearComposeBuffer(); -+ return FALSE; -+ } -+ -+ // check if compose buffer is matched -+ for ( int i=0; i < QT_KEYSEQUENCE_MAX_LEN; i++ ) { -+ -+ // check if partial match -+ if ( composeBuffer[i] == 0 && p->keys[i] ) { -+ qDebug("partial match"); -+ return TRUE; -+ } -+ -+ if ( composeBuffer[i] != p->keys[i] ) { -+ qDebug("different entry"); -+ clearComposeBuffer(); -+ return i!=0; -+ } -+ } -+ -+ qDebug("match exactly"); -+ -+ // match exactly -+ commitChar( p->value ); -+ clearComposeBuffer(); -+ -+ return TRUE; -+} -+ -+void QSimpleInputContext::commitChar( uint c ) -+{ -+ sendIMEvent( QEvent::IMStart ); -+ sendIMEvent( QEvent::IMEnd, QString(QChar(c)) ); -+} -+ -+void QSimpleInputContext::clearComposeBuffer(void) -+{ -+ for ( uint i=0; i < (sizeof(composeBuffer)/sizeof(int)); i++ ) -+ composeBuffer[i] = 0; -+} -+ ---- plugins/src/inputmethods/simple/qsimpleinputcontext.h -+++ plugins/src/inputmethods/simple/qsimpleinputcontext.h -@@ -0,0 +1,93 @@ -+/**************************************************************************** -+** $Id$ -+** -+** Definition of QSimpleInputContext class -+** -+** Copyright (C) 2004 immodule for Qt Project. All rights reserved. -+** -+** This file is written to contribute to Trolltech AS under their own -+** licence. You may use this file under your Qt license. Following -+** description is copied from their original file headers. Contact -+** immodule-qt@freedesktop.org if any conditions of this licensing are -+** not clear to you. -+** -+** -+** This file is part of the input method module of the Qt GUI Toolkit. -+** -+** This file may be distributed under the terms of the Q Public License -+** as defined by Trolltech AS of Norway and appearing in the file -+** LICENSE.QPL included in the packaging of this file. -+** -+** This file may be distributed and/or modified under the terms of the -+** GNU General Public License version 2 as published by the Free Software -+** Foundation and appearing in the file LICENSE.GPL included in the -+** packaging of this file. -+** -+** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition -+** licenses may use this file in accordance with the Qt Commercial License -+** Agreement provided with the Software. -+** -+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -+** -+** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for -+** information about Qt Commercial License Agreements. -+** See http://www.trolltech.com/qpl/ for QPL licensing information. -+** See http://www.trolltech.com/gpl/ for GPL licensing information. -+** -+** Contact info@trolltech.com if any conditions of this licensing are -+** not clear to you. -+** -+**********************************************************************/ -+ -+#ifndef QSIMPLEINPUT_CONTEXT_H -+#define QSIMPLEINPUT_CONTEXT_H -+ -+#include -+#include -+ -+#define QT_KEYSEQUENCE_MAX_LEN 6 -+#define UNITIZE(qkey) (0x02000000|qkey) -+ -+struct QComposeTableElement { -+ uint keys[QT_KEYSEQUENCE_MAX_LEN]; -+ uint value; -+}; -+ -+struct QComposeTable { -+ const QComposeTableElement *data; -+ uint size; -+}; -+ -+ -+class QSimpleInputContext : public QInputContext { -+ Q_OBJECT -+public: -+ QSimpleInputContext(); -+ ~QSimpleInputContext(); -+ -+ virtual QString identifierName(); -+ virtual QString language(); -+ -+ virtual bool filterEvent( const QEvent *event ); -+ virtual void reset(); -+ virtual void setFocus(); -+ virtual void unsetFocus(); -+ virtual void setMicroFocus( int x, int y, int w, int h, QFont *f = 0 ); -+ virtual void mouseHandler( int x, QEvent::Type type, -+ Qt::ButtonState button, Qt::ButtonState state ); -+ -+protected: -+ bool isIgnoreKeys(int keyval ); -+ bool isComposingKeys( int keyval ); -+ bool checkComposeTable( uint composeBuffer[], const QComposeTable *composeTable ); -+ void commitChar( uint c ); -+ -+ void clearComposeBuffer(void); -+ -+protected: -+ uint composeBuffer[QT_KEYSEQUENCE_MAX_LEN + 1]; -+ static const QComposeTable defaultComposeTable; -+}; -+ -+#endif // QSIMPLEINPUT_CONTEXT_H ---- plugins/src/inputmethods/simple/qsimpleinputcontextplugin.cpp -+++ plugins/src/inputmethods/simple/qsimpleinputcontextplugin.cpp -@@ -0,0 +1,86 @@ -+/**************************************************************************** -+** $Id$ -+** -+** Implementation of QSimpleInputContextPlugin class -+** -+** Copyright (C) 2004 immodule for Qt Project. All rights reserved. -+** -+** This file is written to contribute to Trolltech AS under their own -+** licence. You may use this file under your Qt license. Following -+** description is copied from their original file headers. Contact -+** immodule-qt@freedesktop.org if any conditions of this licensing are -+** not clear to you. -+** -+** -+** This file is part of the input method module of the Qt GUI Toolkit. -+** -+** This file may be distributed under the terms of the Q Public License -+** as defined by Trolltech AS of Norway and appearing in the file -+** LICENSE.QPL included in the packaging of this file. -+** -+** This file may be distributed and/or modified under the terms of the -+** GNU General Public License version 2 as published by the Free Software -+** Foundation and appearing in the file LICENSE.GPL included in the -+** packaging of this file. -+** -+** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition -+** licenses may use this file in accordance with the Qt Commercial License -+** Agreement provided with the Software. -+** -+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -+** -+** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for -+** information about Qt Commercial License Agreements. -+** See http://www.trolltech.com/qpl/ for QPL licensing information. -+** See http://www.trolltech.com/gpl/ for GPL licensing information. -+** -+** Contact info@trolltech.com if any conditions of this licensing are -+** not clear to you. -+** -+**********************************************************************/ -+ -+#ifndef QT_NO_IM -+#include "qsimpleinputcontext.h" -+#include "qsimpleinputcontextplugin.h" -+#include -+#include -+ -+ -+QSimpleInputContextPlugin::QSimpleInputContextPlugin() -+{ -+} -+ -+QSimpleInputContextPlugin::~QSimpleInputContextPlugin() -+{ -+} -+ -+QStringList QSimpleInputContextPlugin::keys() const -+{ -+ return QStringList( "simple" ); -+} -+ -+QInputContext *QSimpleInputContextPlugin::create( const QString & ) -+{ -+ return new QSimpleInputContext; -+} -+ -+QStringList QSimpleInputContextPlugin::languages( const QString & ) -+{ -+ return QStringList( "" ); -+} -+ -+QString QSimpleInputContextPlugin::displayName( const QString & ) -+{ -+ return tr( "Simple Composing Input Method" ); -+} -+ -+QString QSimpleInputContextPlugin::description( const QString & ) -+{ -+ return tr( "Simple composing input method" ); -+} -+ -+ -+Q_EXPORT_PLUGIN( QSimpleInputContextPlugin ) -+ -+#endif ---- plugins/src/inputmethods/simple/qsimpleinputcontextplugin.h -+++ plugins/src/inputmethods/simple/qsimpleinputcontextplugin.h -@@ -0,0 +1,63 @@ -+/**************************************************************************** -+** $Id$ -+** -+** Definition of QSimpleInputContextPlugin class -+** -+** Copyright (C) 2004 immodule for Qt Project. All rights reserved. -+** -+** This file is written to contribute to Trolltech AS under their own -+** licence. You may use this file under your Qt license. Following -+** description is copied from their original file headers. Contact -+** immodule-qt@freedesktop.org if any conditions of this licensing are -+** not clear to you. -+** -+** -+** This file is part of the input method module of the Qt GUI Toolkit. -+** -+** This file may be distributed under the terms of the Q Public License -+** as defined by Trolltech AS of Norway and appearing in the file -+** LICENSE.QPL included in the packaging of this file. -+** -+** This file may be distributed and/or modified under the terms of the -+** GNU General Public License version 2 as published by the Free Software -+** Foundation and appearing in the file LICENSE.GPL included in the -+** packaging of this file. -+** -+** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition -+** licenses may use this file in accordance with the Qt Commercial License -+** Agreement provided with the Software. -+** -+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -+** -+** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for -+** information about Qt Commercial License Agreements. -+** See http://www.trolltech.com/qpl/ for QPL licensing information. -+** See http://www.trolltech.com/gpl/ for GPL licensing information. -+** -+** Contact info@trolltech.com if any conditions of this licensing are -+** not clear to you. -+** -+**********************************************************************/ -+ -+#ifndef QT_NO_IM -+#include "qsimpleinputcontext.h" -+#include -+#include -+ -+ -+class QSimpleInputContextPlugin : public QInputContextPlugin -+{ -+ Q_OBJECT -+public: -+ QSimpleInputContextPlugin(); -+ ~QSimpleInputContextPlugin(); -+ -+ QStringList keys() const; -+ QInputContext *create( const QString &key ); -+ QStringList languages( const QString &key ); -+ QString displayName( const QString &key ); -+ QString description( const QString &key ); -+}; -+ -+#endif ---- plugins/src/inputmethods/simple/simple.pro -+++ plugins/src/inputmethods/simple/simple.pro -@@ -0,0 +1,15 @@ -+TEMPLATE = lib -+TARGET = qsimple -+DESTDIR = ../../../inputmethods -+ -+INCLUDEPATH += . -+CONFIG += qt warn_on debug plugin -+target.path += $$plugins.path/inputmethods -+INSTALLS += target -+ -+# Input -+HEADERS += qsimpleinputcontext.h \ -+ qsimpleinputcontextplugin.h -+SOURCES += qsimpleinputcontext.cpp \ -+ qsimpleinputcontextplugin.cpp \ -+ composetable.cpp ---- plugins/src/inputmethods/simple/xcompose2q.rb -+++ plugins/src/inputmethods/simple/xcompose2q.rb -@@ -0,0 +1,450 @@ -+#!/usr/bin/env ruby -+ -+# xcompose2q.rb: X Compose table to QSimpleInputContext table translator -+# Copyright (C) 2004 immodule for Qt Project. All rights reserved. -+# -+# This file is written to contribute to Trolltech AS under their own -+# licence. You may use this file under your Qt license. Following -+# description is copied from their original file headers. Contact -+# immodule-qt@freedesktop.org if any conditions of this licensing are -+# not clear to you. -+ -+# This file may be distributed under the terms of the Q Public License -+# as defined by Trolltech AS of Norway and appearing in the file -+# LICENSE.QPL included in the packaging of this file. -+# -+# This file may be distributed and/or modified under the terms of the -+# GNU General Public License version 2 as published by the Free Software -+# Foundation and appearing in the file LICENSE.GPL included in the -+# packaging of this file. -+# -+# Licensees holding valid Qt Enterprise Edition or Qt Professional Edition -+# licenses may use this file in accordance with the Qt Commercial License -+# Agreement provided with the Software. -+# -+# This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -+# WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -+# -+# See http://www.trolltech.com/pricing.html or email sales@trolltech.com for -+# information about Qt Commercial License Agreements. -+# See http://www.trolltech.com/qpl/ for QPL licensing information. -+# See http://www.trolltech.com/gpl/ for GPL licensing information. -+# -+# Contact info@trolltech.com if any conditions of this licensing are -+# not clear to you. -+ -+ -+# Usage: -+# xcompose2q.rb /usr/X11R6/lib/X11/locale/en_US.UTF-8/Compose -+ -+require 'uconv' -+ -+# translation table for lazy sorting -+raw2key = { -+ "0y1120" => "UNITIZE(Qt::Key_Multi_key)", -+ "0y1250" => "UNITIZE(Qt::Key_Dead_Grave)", -+ "0y1251" => "UNITIZE(Qt::Key_Dead_Acute)", -+ "0y1252" => "UNITIZE(Qt::Key_Dead_Circumflex)", -+ "0y1253" => "UNITIZE(Qt::Key_Dead_Tilde)", -+ "0y1254" => "UNITIZE(Qt::Key_Dead_Macron)", -+ "0y1255" => "UNITIZE(Qt::Key_Dead_Breve)", -+ "0y1256" => "UNITIZE(Qt::Key_Dead_Abovedot)", -+ "0y1257" => "UNITIZE(Qt::Key_Dead_Diaeresis)", -+ "0y1258" => "UNITIZE(Qt::Key_Dead_Abovering)", -+ "0y1259" => "UNITIZE(Qt::Key_Dead_Doubleacute)", -+ "0y125a" => "UNITIZE(Qt::Key_Dead_Caron)", -+ "0y125b" => "UNITIZE(Qt::Key_Dead_Cedilla)", -+ "0y125c" => "UNITIZE(Qt::Key_Dead_Ogonek)", -+ "0y125d" => "UNITIZE(Qt::Key_Dead_Iota)", -+ "0y125e" => "UNITIZE(Qt::Key_Dead_Voiced_Sound)", -+ "0y125f" => "UNITIZE(Qt::Key_Dead_Semivoiced_Sound)", -+ "0y1260" => "UNITIZE(Qt::Key_Dead_Belowdot)", -+ "0y1261" => "UNITIZE(Qt::Key_Dead_Hook)", -+ "0y1262" => "UNITIZE(Qt::Key_Dead_Horn)", -+} -+ -+# X's KeySym to Unicode translation table. The unicode value is -+# extracted from -+# QETWidget::translateKeyEventInternal(). Translation for some -+# keys are not available -+x2q = { -+ "Multi_key" => "0y1120", -+ "dead_grave" => "0y1250", -+ "dead_acute" => "0y1251", -+ "dead_circumflex" => "0y1252", -+ "dead_tilde" => "0y1253", -+ "dead_macron" => "0y1254", -+ "dead_breve" => "0y1255", -+ "dead_abovedot" => "0y1256", -+ "dead_diaeresis" => "0y1257", -+ "dead_abovering" => "0y1258", -+ "dead_doubleacute" => "0y1259", -+ "dead_caron" => "0y125a", -+ "dead_cedilla" => "0y125b", -+ "dead_ogonek" => "0y125c", -+ "dead_iota" => "0y125d", -+ "dead_voiced_sound" => "0y125e", -+ "dead_semivoiced_sound" => "0y125f", -+ "dead_belowdot" => "0y1260", -+ "dead_hook" => "0y1261", -+ "dead_horn" => "0y1262", -+ -+ "0" => "0x0030", -+ "1" => "0x0031", -+ "2" => "0x0032", -+ "3" => "0x0033", -+ "4" => "0x0034", -+ "5" => "0x0035", -+ "6" => "0x0036", -+ "7" => "0x0037", -+ "8" => "0x0038", -+ "9" => "0x0039", -+ "A" => "0x0041", -+ "AE" => "0x00c6", -+ "Abreve" => "0x0102", -+ "Acircumflex" => "0x00c2", -+ "Adiaeresis" => "0x00c4", -+ "Arabic_alef" => "0x0627", -+ "Arabic_waw" => "0x0648", -+ "Arabic_yeh" => "0x064a", -+ "Aring" => "0x00c5", -+ "B" => "0x0042", -+ "C" => "0x0043", -+ "Ccedilla" => "0x00c7", -+ "Cyrillic_A" => "0x0410", -+ "Cyrillic_CHE" => "0x0427", -+ "Cyrillic_E" => "0x042d", -+ "Cyrillic_GHE" => "0x0413", -+ "Cyrillic_I" => "0x0418", -+ "Cyrillic_IE" => "0x0415", -+ "Cyrillic_KA" => "0x041a", -+ "Cyrillic_O" => "0x041e", -+ "Cyrillic_U" => "0x0423", -+ "Cyrillic_YERU" => "0x042b", -+ "Cyrillic_ZE" => "0x0417", -+ "Cyrillic_ZHE" => "0x0416", -+ "Cyrillic_a" => "0x0430", -+ "Cyrillic_che" => "0x0447", -+ "Cyrillic_e" => "0x044d", -+ "Cyrillic_ghe" => "0x0433", -+ "Cyrillic_i" => "0x0438", -+ "Cyrillic_ie" => "0x0435", -+ "Cyrillic_ka" => "0x043a", -+ "Cyrillic_o" => "0x043e", -+ "Cyrillic_u" => "0x0443", -+ "Cyrillic_yeru" => "0x044b", -+ "Cyrillic_ze" => "0x0437", -+ "Cyrillic_zhe" => "0x0436", -+ "D" => "0x0044", -+ "E" => "0x0045", -+ "Ecircumflex" => "0x00ca", -+ "Emacron" => "0x0112", -+ "F" => "0x0046", -+ "G" => "0x0047", -+ "Greek_ALPHA" => "0x0391", -+ "Greek_EPSILON" => "0x0395", -+ "Greek_ETA" => "0x0397", -+ "Greek_IOTA" => "0x0399", -+ "Greek_OMEGA" => "0x03a9", -+ "Greek_OMICRON" => "0x039f", -+ "Greek_RHO" => "0x03a1", -+ "Greek_UPSILON" => "0x03a5", -+ "Greek_alpha" => "0x03b1", -+ "Greek_alphaaccent" => "0x03ac", -+ "Greek_epsilon" => "0x03b5", -+ "Greek_eta" => "0x03b7", -+ "Greek_etaaccent" => "0x03ae", -+ "Greek_iota" => "0x03b9", -+ "Greek_iotadieresis" => "0x03ca", -+ "Greek_omega" => "0x03c9", -+ "Greek_omegaaccent" => "0x03ce", -+ "Greek_omicron" => "0x03bf", -+ "Greek_rho" => "0x03c1", -+ "Greek_upsilon" => "0x03c5", -+ "Greek_upsilondieresis" => "0x03cb", -+ "H" => "0x0048", -+ "I" => "0x0049", -+ "Idiaeresis" => "0x00cf", -+ "J" => "0x004a", -+ "K" => "0x004b", -+ "KP_0" => "0x0000", -+ "KP_1" => "0x0000", -+ "KP_2" => "0x0000", -+ "KP_3" => "0x0000", -+ "KP_4" => "0x0000", -+ "KP_5" => "0x0000", -+ "KP_6" => "0x0000", -+ "KP_7" => "0x0000", -+ "KP_8" => "0x0000", -+ "KP_9" => "0x0000", -+ "KP_Add" => "0x0000", -+ "KP_Divide" => "0x0000", -+ "KP_Equal" => "0x0000", -+ "KP_Space" => "0x0000", -+ "L" => "0x004c", -+ "M" => "0x004d", -+ "N" => "0x004e", -+ "O" => "0x004f", -+ "Ocircumflex" => "0x00d4", -+ "Odiaeresis" => "0x00d6", -+ "Ohorn" => "0x0000", -+ "Omacron" => "0x014c", -+ "Ooblique" => "0x00d8", -+ "Otilde" => "0x00d5", -+ "P" => "0x0050", -+ "Q" => "0x0051", -+ "R" => "0x0052", -+ "S" => "0x0053", -+ "Sacute" => "0x015a", -+ "Scaron" => "0x0160", -+ "T" => "0x0054", -+ "U" => "0x0055", -+ "Udiaeresis" => "0x00dc", -+ "Uhorn" => "0x0000", -+ "Ukrainian_I" => "0x0406", -+ "Ukrainian_i" => "0x0456", -+ "Umacron" => "0x016a", -+ "Utilde" => "0x0168", -+ "V" => "0x0056", -+ "W" => "0x0057", -+ "X" => "0x0058", -+ "Y" => "0x0059", -+ "Z" => "0x005a", -+ "a" => "0x0061", -+ "abreve" => "0x0103", -+ "acircumflex" => "0x00e2", -+ "acute" => "0x00b4", -+ "adiaeresis" => "0x00e4", -+ "ae" => "0x00e6", -+ "ampersand" => "0x0026", -+ "apostrophe" => "0x0027", -+ "approximate" => "0x223c", -+ "aring" => "0x00e5", -+ "asciicircum" => "0x005e", -+ "asciitilde" => "0x007e", -+ "asterisk" => "0x002a", -+ "at" => "0x0040", -+ "b" => "0x0062", -+ "backslash" => "0x005c", -+ "bar" => "0x007c", -+ "braceleft" => "0x007b", -+ "braceright" => "0x007d", -+ "bracketleft" => "0x005b", -+ "bracketright" => "0x005d", -+ "c" => "0x0063", -+ "ccedilla" => "0x00e7", -+ "colon" => "0x003a", -+ "combining_acute" => "0x0000", -+ "combining_belowdot" => "0x0000", -+ "combining_grave" => "0x0000", -+ "combining_hook" => "0x0000", -+ "combining_tilde" => "0x0000", -+ "comma" => "0x002c", -+ "d" => "0x0064", -+ "diaeresis" => "0x00a8", -+ "dollar" => "0x0024", -+ "e" => "0x0065", -+ "ecircumflex" => "0x00ea", -+ "emacron" => "0x0113", -+ "equal" => "0x003d", -+ "exclam" => "0x0021", -+ "f" => "0x0066", -+ "g" => "0x0067", -+ "grave" => "0x0060", -+ "greater" => "0x003e", -+ "greaterthanequal" => "0x2265", -+ "h" => "0x0068", -+ "hebrew_aleph" => "0x05d0", -+ "hebrew_bet" => "0x05d1", -+ "hebrew_beth" => "0x05d1", -+ "hebrew_dalet" => "0x05d3", -+ "hebrew_daleth" => "0x05d3", -+ "hebrew_finalkaph" => "0x05da", -+ "hebrew_finalpe" => "0x05e3", -+ "hebrew_gimel" => "0x05d2", -+ "hebrew_gimmel" => "0x05d2", -+ "hebrew_he" => "0x05d4", -+ "hebrew_kaph" => "0x05db", -+ "hebrew_kuf" => "0x05e7", -+ "hebrew_lamed" => "0x05dc", -+ "hebrew_mem" => "0x05de", -+ "hebrew_nun" => "0x05e0", -+ "hebrew_pe" => "0x05e4", -+ "hebrew_qoph" => "0x05e7", -+ "hebrew_resh" => "0x05e8", -+ "hebrew_samech" => "0x05e1", -+ "hebrew_samekh" => "0x05e1", -+ "hebrew_shin" => "0x05e9", -+ "hebrew_taf" => "0x05ea", -+ "hebrew_taw" => "0x05ea", -+ "hebrew_tet" => "0x05d8", -+ "hebrew_teth" => "0x05d8", -+ "hebrew_waw" => "0x05d5", -+ "hebrew_yod" => "0x05d9", -+ "hebrew_zade" => "0x05e6", -+ "hebrew_zadi" => "0x05e6", -+ "hebrew_zain" => "0x05d6", -+ "hebrew_zayin" => "0x05d6", -+ "i" => "0x0069", -+ "identical" => "0x2261", -+ "idiaeresis" => "0x00ef", -+ "includedin" => "0x2282", -+ "includes" => "0x2283", -+ "j" => "0x006a", -+ "k" => "0x006b", -+ "kana_A" => "0x30a2", -+ "kana_CHI" => "0x30c1", -+ "kana_E" => "0x30a8", -+ "kana_FU" => "0x30d5", -+ "kana_HA" => "0x30cf", -+ "kana_HE" => "0x30d8", -+ "kana_HI" => "0x30d2", -+ "kana_HO" => "0x30db", -+ "kana_I" => "0x30a4", -+ "kana_KA" => "0x30ab", -+ "kana_KE" => "0x30b1", -+ "kana_KI" => "0x30ad", -+ "kana_KO" => "0x30b3", -+ "kana_KU" => "0x30af", -+ "kana_MA" => "0x30de", -+ "kana_ME" => "0x30e1", -+ "kana_MI" => "0x30df", -+ "kana_MO" => "0x30e2", -+ "kana_MU" => "0x30e0", -+ "kana_NA" => "0x30ca", -+ "kana_NE" => "0x30cd", -+ "kana_NI" => "0x30cb", -+ "kana_NO" => "0x30ce", -+ "kana_NU" => "0x30cc", -+ "kana_O" => "0x30aa", -+ "kana_RA" => "0x30e9", -+ "kana_RE" => "0x30ec", -+ "kana_RI" => "0x30ea", -+ "kana_RO" => "0x30ed", -+ "kana_RU" => "0x30eb", -+ "kana_SA" => "0x30b5", -+ "kana_SE" => "0x30bb", -+ "kana_SHI" => "0x30b7", -+ "kana_SO" => "0x30bd", -+ "kana_SU" => "0x30b9", -+ "kana_TA" => "0x30bf", -+ "kana_TE" => "0x30c6", -+ "kana_TO" => "0x30c8", -+ "kana_TSU" => "0x30c4", -+ "kana_U" => "0x30a6", -+ "kana_WA" => "0x30ef", -+ "kana_WO" => "0x30f2", -+ "kana_YA" => "0x30e4", -+ "kana_YO" => "0x30e8", -+ "kana_YU" => "0x30e6", -+ "l" => "0x006c", -+ "leftarrow" => "0x2190", -+ "leftcaret" => "0x003c", -+ "leftshoe" => "0x2282", -+ "less" => "0x003c", -+ "lessthanequal" => "0x2264", -+ "m" => "0x006d", -+ "macron" => "0x00af", -+ "minus" => "0x002d", -+ "n" => "0x006e", -+ "numbersign" => "0x0023", -+ "o" => "0x006f", -+ "ocircumflex" => "0x00f4", -+ "odiaeresis" => "0x00f6", -+ "ohorn" => "0x0000", -+ "omacron" => "0x014d", -+ "oslash" => "0x00f8", -+ "otilde" => "0x00f5", -+ "p" => "0x0070", -+ "parenleft" => "0x0028", -+ "parenright" => "0x0029", -+ "percent" => "0x0025", -+ "period" => "0x002e", -+ "plus" => "0x002b", -+ "q" => "0x0071", -+ "question" => "0x003f", -+ "quotedbl" => "0x0022", -+ "r" => "0x0072", -+ "rightarrow" => "0x2192", -+ "rightcaret" => "0x003e", -+ "rightshoe" => "0x2283", -+ "righttack" => "0x22a3", -+ "s" => "0x0073", -+ "sacute" => "0x015b", -+ "scaron" => "0x0161", -+ "semicolon" => "0x003b", -+ "slash" => "0x002f", -+ "space" => "0x0020", -+ "t" => "0x0074", -+ "u" => "0x0075", -+ "udiaeresis" => "0x00fc", -+ "uhorn" => "0x0000", -+ "umacron" => "0x016b", -+ "underbar" => "0x005f", -+ "underscore" => "0x005f", -+ "utilde" => "0x0169", -+ "v" => "0x0076", -+ "w" => "0x0077", -+ "x" => "0x0078", -+ "y" => "0x0079", -+ "z" => "0x007a", -+} -+ -+readlines.collect { -+ |line| -+ -+ broken = "" -+ seq = ["0", "0", "0", "0", "0", "0"] -+ index = 0 -+ rhs = "0x0000" -+ comment = "" -+ -+ case line -+ when /^(#|XCOMM)(.*)$/ -+ comment = "// #{$2}\n" -+ rhs = :isCommentLine -+ when /^$/ -+ comment = "\n" -+ rhs = :isCommentLine -+ else -+ line.scan(/<([^>]+)>/) { -+ |args| -+ keysym = args[0] -+ unit = x2q[keysym] || keysym.sub(/^U([\da-fA-F]{4,5})$/, "0x\\1") -+ if (/^(0x(0000|[\da-fA-F]{5,})|dead_space)$/ =~ unit) -+ broken = "// /* broken */" -+ end -+ seq[index] = unit -+ index += 1 -+ } -+ -+ Regexp.new(':\s+"(.+)"\s+(.+)$', nil, 'u') =~ line -+ rhs = Uconv::u8tou16($1).unpack('v')[0] -+ rhs = format("0x%04x", rhs) -+ comment = $2 -+ end -+ -+ entry = { -+ :broken => broken, -+ :seq => seq, -+ :rhs => rhs, -+ :comment => comment -+ } -+}.sort { -+ |entry_a, entry_b| -+ -+ entry_a[:seq] <=> entry_b[:seq] -+}.each { -+ |entry| -+ -+ broken, seq, rhs, comment = entry.values_at(:broken, :seq, :rhs, :comment) -+ if (rhs == :isCommentLine) -+ print comment -+ else -+ seq = seq.collect { -+ |unit| -+ raw2key[unit] || unit -+ } -+ print "#{broken} { {#{seq.join(", ")}}, #{rhs} }, // #{comment}\n" -+ end -+} ---- plugins/src/inputmethods/xim/qximinputcontext.h -+++ plugins/src/inputmethods/xim/qximinputcontext.h -@@ -0,0 +1,130 @@ -+/**************************************************************************** -+** $Id: qximinputcontext_p.h,v 1.6 2004/06/22 06:47:27 daisuke Exp $ -+** -+** Definition of QXIMInputContext -+** -+** Copyright (C) 1992-2002 Trolltech AS. All rights reserved. -+** -+** This file is part of the input method module of the Qt GUI Toolkit. -+** -+** This file may be distributed under the terms of the Q Public License -+** as defined by Trolltech AS of Norway and appearing in the file -+** LICENSE.QPL included in the packaging of this file. -+** -+** This file may be distributed and/or modified under the terms of the -+** GNU General Public License version 2 as published by the Free Software -+** Foundation and appearing in the file LICENSE.GPL included in the -+** packaging of this file. -+** -+** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition -+** licenses may use this file in accordance with the Qt Commercial License -+** Agreement provided with the Software. -+** -+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -+** -+** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for -+** information about Qt Commercial License Agreements. -+** See http://www.trolltech.com/qpl/ for QPL licensing information. -+** See http://www.trolltech.com/gpl/ for GPL licensing information. -+** -+** Contact info@trolltech.com if any conditions of this licensing are -+** not clear to you. -+** -+**********************************************************************/ -+ -+#ifndef QXIMINPUTCONTEXT_H -+#define QXIMINPUTCONTEXT_H -+ -+ -+// -+// W A R N I N G -+// ------------- -+// -+// This file is not part of the Qt API. It exists for the convenience -+// of internal files. This header file may change from version to version -+// without notice, or even be removed. -+// -+// We mean it. -+// -+// -+ -+#if !defined(Q_NO_IM) -+ -+#include "qglobal.h" -+#include -+#include -+#include -+ -+class QKeyEvent; -+class QWidget; -+class QFont; -+class QString; -+ -+ -+#ifdef Q_WS_X11 -+#include "qarray.h" -+#include "qwindowdefs.h" -+#include -+#endif -+ -+class QXIMInputContext : public QInputContext -+{ -+ Q_OBJECT -+public: -+#ifdef Q_WS_X11 -+ QXIMInputContext(); -+ ~QXIMInputContext(); -+ -+ QString identifierName(); -+ QString language(); -+ -+ bool x11FilterEvent( QWidget *keywidget, XEvent *event ); -+ void reset(); -+ -+ void setFocus(); -+ void unsetFocus(); -+ void setMicroFocus( int x, int y, int w, int h, QFont *f = 0 ); -+ void mouseHandler( int x, QEvent::Type type, -+ Qt::ButtonState button, Qt::ButtonState state ); -+ bool isPreeditRelocationEnabled(); -+ -+ void setHolderWidget( QWidget *widget ); -+ -+ bool hasFocus() const; -+ void resetClientState(); -+ void close( const QString &errMsg ); -+ -+ void sendIMEvent( QEvent::Type type, -+ const QString &text = QString::null, -+ int cursorPosition = -1, int selLength = 0 ); -+ -+ static void init_xim(); -+ static void create_xim(); -+ static void close_xim(); -+ -+ void *ic; -+ QString composingText; -+ QFont font; -+ XFontSet fontset; -+ QMemArray selectedChars; -+ -+protected: -+ virtual bool isPreeditPreservationEnabled(); // not a QInputContext func -+ -+ QCString _language; -+ -+private: -+ void setComposePosition(int, int); -+ void setComposeArea(int, int, int, int); -+ void setXFontSet(const QFont &); -+ -+ int lookupString(XKeyEvent *, QCString &, KeySym *, Status *) const; -+ -+#endif // Q_WS_X11 -+}; -+ -+ -+#endif //Q_NO_IM -+ -+#endif // QXIMINPUTCONTEXT_H ---- plugins/src/inputmethods/xim/qximinputcontextplugin.cpp -+++ plugins/src/inputmethods/xim/qximinputcontextplugin.cpp -@@ -0,0 +1,86 @@ -+/**************************************************************************** -+** $Id$ -+** -+** Implementation of QXIMInputContextPlugin class -+** -+** Copyright (C) 2004 immodule for Qt Project. All rights reserved. -+** -+** This file is written to contribute to Trolltech AS under their own -+** licence. You may use this file under your Qt license. Following -+** description is copied from their original file headers. Contact -+** immodule-qt@freedesktop.org if any conditions of this licensing are -+** not clear to you. -+** -+** -+** This file is part of the input method module of the Qt GUI Toolkit. -+** -+** This file may be distributed under the terms of the Q Public License -+** as defined by Trolltech AS of Norway and appearing in the file -+** LICENSE.QPL included in the packaging of this file. -+** -+** This file may be distributed and/or modified under the terms of the -+** GNU General Public License version 2 as published by the Free Software -+** Foundation and appearing in the file LICENSE.GPL included in the -+** packaging of this file. -+** -+** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition -+** licenses may use this file in accordance with the Qt Commercial License -+** Agreement provided with the Software. -+** -+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -+** -+** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for -+** information about Qt Commercial License Agreements. -+** See http://www.trolltech.com/qpl/ for QPL licensing information. -+** See http://www.trolltech.com/gpl/ for GPL licensing information. -+** -+** Contact info@trolltech.com if any conditions of this licensing are -+** not clear to you. -+** -+**********************************************************************/ -+ -+#ifndef QT_NO_IM -+#include "qximinputcontext.h" -+#include "qximinputcontextplugin.h" -+#include -+#include -+ -+ -+QXIMInputContextPlugin::QXIMInputContextPlugin() -+{ -+} -+ -+QXIMInputContextPlugin::~QXIMInputContextPlugin() -+{ -+} -+ -+QStringList QXIMInputContextPlugin::keys() const -+{ -+ return QStringList( "xim" ); -+} -+ -+QInputContext *QXIMInputContextPlugin::create( const QString & ) -+{ -+ return new QXIMInputContext; -+} -+ -+QStringList QXIMInputContextPlugin::languages( const QString & ) -+{ -+ return QStringList( "" ); -+} -+ -+QString QXIMInputContextPlugin::displayName( const QString & ) -+{ -+ return tr( "XIM" ); -+} -+ -+QString QXIMInputContextPlugin::description( const QString & ) -+{ -+ return tr( "XIM input method" ); -+} -+ -+ -+Q_EXPORT_PLUGIN( QXIMInputContextPlugin ) -+ -+#endif ---- plugins/src/inputmethods/xim/qximinputcontextplugin.h -+++ plugins/src/inputmethods/xim/qximinputcontextplugin.h -@@ -0,0 +1,63 @@ -+/**************************************************************************** -+** $Id$ -+** -+** Definition of QXIMInputContextPlugin class -+** -+** Copyright (C) 2004 immodule for Qt Project. All rights reserved. -+** -+** This file is written to contribute to Trolltech AS under their own -+** licence. You may use this file under your Qt license. Following -+** description is copied from their original file headers. Contact -+** immodule-qt@freedesktop.org if any conditions of this licensing are -+** not clear to you. -+** -+** -+** This file is part of the input method module of the Qt GUI Toolkit. -+** -+** This file may be distributed under the terms of the Q Public License -+** as defined by Trolltech AS of Norway and appearing in the file -+** LICENSE.QPL included in the packaging of this file. -+** -+** This file may be distributed and/or modified under the terms of the -+** GNU General Public License version 2 as published by the Free Software -+** Foundation and appearing in the file LICENSE.GPL included in the -+** packaging of this file. -+** -+** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition -+** licenses may use this file in accordance with the Qt Commercial License -+** Agreement provided with the Software. -+** -+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -+** -+** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for -+** information about Qt Commercial License Agreements. -+** See http://www.trolltech.com/qpl/ for QPL licensing information. -+** See http://www.trolltech.com/gpl/ for GPL licensing information. -+** -+** Contact info@trolltech.com if any conditions of this licensing are -+** not clear to you. -+** -+**********************************************************************/ -+ -+#ifndef QT_NO_IM -+#include "qximinputcontext.h" -+#include -+#include -+ -+ -+class QXIMInputContextPlugin : public QInputContextPlugin -+{ -+ Q_OBJECT -+public: -+ QXIMInputContextPlugin(); -+ ~QXIMInputContextPlugin(); -+ -+ QStringList keys() const; -+ QInputContext *create( const QString &key ); -+ QStringList languages( const QString &key ); -+ QString displayName( const QString &key ); -+ QString description( const QString &key ); -+}; -+ -+#endif ---- plugins/src/inputmethods/xim/qximinputcontext_x11.cpp -+++ plugins/src/inputmethods/xim/qximinputcontext_x11.cpp -@@ -0,0 +1,930 @@ -+/**************************************************************************** -+** $Id: qximinputcontext_x11.cpp,v 1.10 2004/06/22 06:47:27 daisuke Exp $ -+** -+** Implementation of QXIMInputContext class -+** -+** Copyright (C) 2000-2003 Trolltech AS. All rights reserved. -+** -+** This file is part of the input method module of the Qt GUI Toolkit. -+** -+** This file may be distributed under the terms of the Q Public License -+** as defined by Trolltech AS of Norway and appearing in the file -+** LICENSE.QPL included in the packaging of this file. -+** -+** This file may be distributed and/or modified under the terms of the -+** GNU General Public License version 2 as published by the Free Software -+** Foundation and appearing in the file LICENSE.GPL included in the -+** packaging of this file. -+** -+** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition -+** licenses for Unix/X11 may use this file in accordance with the Qt Commercial -+** License Agreement provided with the Software. -+** -+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -+** -+** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for -+** information about Qt Commercial License Agreements. -+** See http://www.trolltech.com/qpl/ for QPL licensing information. -+** See http://www.trolltech.com/gpl/ for GPL licensing information. -+** -+** Contact info@trolltech.com if any conditions of this licensing are -+** not clear to you. -+** -+**********************************************************************/ -+ -+ -+#include "qximinputcontext.h" -+ -+const int XKeyPress = KeyPress; -+const int XKeyRelease = KeyRelease; -+#undef KeyPress -+#undef KeyRelease -+ -+#if !defined(QT_NO_IM) -+ -+#include "qplatformdefs.h" -+ -+#include "qapplication.h" -+#include "qwidget.h" -+#include "qstring.h" -+#include "qptrlist.h" -+#include "qintdict.h" -+#include "qtextcodec.h" -+ -+#include -+#include -+ -+#if !defined(QT_NO_XIM) -+ -+#define XK_MISCELLANY -+#define XK_LATIN1 -+#include -+ -+// #define QT_XIM_DEBUG -+ -+// from qapplication_x11.cpp -+static XIM qt_xim = 0; -+extern XIMStyle qt_xim_style; -+extern XIMStyle qt_xim_preferred_style; -+extern char *qt_ximServer; -+static bool isInitXIM = FALSE; -+static QPtrList *ximContextList = 0; -+#endif -+extern int qt_ximComposingKeycode; -+extern QTextCodec * qt_input_mapper; -+ -+ -+#if !defined(QT_NO_XIM) -+ -+#if defined(Q_C_CALLBACKS) -+extern "C" { -+#endif // Q_C_CALLBACKS -+ -+#ifdef USE_X11R6_XIM -+ static void xim_create_callback(XIM /*im*/, -+ XPointer /*client_data*/, -+ XPointer /*call_data*/) -+ { -+ // qDebug("xim_create_callback"); -+ QXIMInputContext::create_xim(); -+ } -+ -+ static void xim_destroy_callback(XIM /*im*/, -+ XPointer /*client_data*/, -+ XPointer /*call_data*/) -+ { -+ // qDebug("xim_destroy_callback"); -+ QXIMInputContext::close_xim(); -+ Display *dpy = QPaintDevice::x11AppDisplay(); -+ XRegisterIMInstantiateCallback(dpy, 0, 0, 0, -+ (XIMProc) xim_create_callback, 0); -+ } -+ -+#endif // USE_X11R6_XIM -+ -+#if defined(Q_C_CALLBACKS) -+} -+#endif // Q_C_CALLBACKS -+ -+#endif // QT_NO_XIM -+ -+#ifndef QT_NO_XIM -+ -+/* The cache here is needed, as X11 leaks a few kb for every -+ XFreeFontSet call, so we avoid creating and deletion of fontsets as -+ much as possible -+*/ -+static XFontSet fontsetCache[8] = { 0, 0, 0, 0, 0, 0, 0, 0 }; -+static int fontsetRefCount = 0; -+ -+static const char * const fontsetnames[] = { -+ "-*-fixed-medium-r-*-*-16-*,-*-*-medium-r-*-*-16-*", -+ "-*-fixed-medium-i-*-*-16-*,-*-*-medium-i-*-*-16-*", -+ "-*-fixed-bold-r-*-*-16-*,-*-*-bold-r-*-*-16-*", -+ "-*-fixed-bold-i-*-*-16-*,-*-*-bold-i-*-*-16-*", -+ "-*-fixed-medium-r-*-*-24-*,-*-*-medium-r-*-*-24-*", -+ "-*-fixed-medium-i-*-*-24-*,-*-*-medium-i-*-*-24-*", -+ "-*-fixed-bold-r-*-*-24-*,-*-*-bold-r-*-*-24-*", -+ "-*-fixed-bold-i-*-*-24-*,-*-*-bold-i-*-*-24-*" -+}; -+ -+static XFontSet getFontSet( const QFont &f ) -+{ -+ int i = 0; -+ if (f.italic()) -+ i |= 1; -+ if (f.bold()) -+ i |= 2; -+ -+ if ( f.pointSize() > 20 ) -+ i += 4; -+ -+ if ( !fontsetCache[i] ) { -+ Display* dpy = QPaintDevice::x11AppDisplay(); -+ int missCount; -+ char** missList; -+ fontsetCache[i] = XCreateFontSet(dpy, fontsetnames[i], &missList, &missCount, 0); -+ if(missCount > 0) -+ XFreeStringList(missList); -+ if ( !fontsetCache[i] ) { -+ fontsetCache[i] = XCreateFontSet(dpy, "-*-fixed-*-*-*-*-16-*", &missList, &missCount, 0); -+ if(missCount > 0) -+ XFreeStringList(missList); -+ if ( !fontsetCache[i] ) -+ fontsetCache[i] = (XFontSet)-1; -+ } -+ } -+ return (fontsetCache[i] == (XFontSet)-1) ? 0 : fontsetCache[i]; -+} -+ -+ -+#ifdef Q_C_CALLBACKS -+extern "C" { -+#endif // Q_C_CALLBACKS -+ -+ // These static functions should be rewritten as member of -+ // QXIMInputContext -+ -+ static int xic_start_callback(XIC, XPointer client_data, XPointer) { -+ QXIMInputContext *qic = (QXIMInputContext *) client_data; -+ if (! qic) { -+#ifdef QT_XIM_DEBUG -+ qDebug("compose start: no qic"); -+#endif // QT_XIM_DEBUG -+ -+ return 0; -+ } -+ -+ qic->resetClientState(); -+ qic->sendIMEvent( QEvent::IMStart ); -+ -+#ifdef QT_XIM_DEBUG -+ qDebug("compose start"); -+#endif // QT_XIM_DEBUG -+ -+ return 0; -+ } -+ -+ static int xic_draw_callback(XIC, XPointer client_data, XPointer call_data) { -+ QXIMInputContext *qic = (QXIMInputContext *) client_data; -+ if (! qic) { -+#ifdef QT_XIM_DEBUG -+ qDebug("compose event: invalid compose event %p", qic); -+#endif // QT_XIM_DEBUG -+ -+ return 0; -+ } -+ -+ bool send_imstart = FALSE; -+ if( ! qic->isComposing() && qic->hasFocus() ) { -+ qic->resetClientState(); -+ send_imstart = TRUE; -+ } else if ( ! qic->isComposing() || ! qic->hasFocus() ) { -+#ifdef QT_XIM_DEBUG -+ qDebug( "compose event: invalid compose event composing=%d hasFocus=%d", -+ qic->isComposing(), qic->hasFocus() ); -+#endif // QT_XIM_DEBUG -+ -+ return 0; -+ } -+ -+ if ( send_imstart ) -+ qic->sendIMEvent( QEvent::IMStart ); -+ -+ XIMPreeditDrawCallbackStruct *drawstruct = -+ (XIMPreeditDrawCallbackStruct *) call_data; -+ XIMText *text = (XIMText *) drawstruct->text; -+ int cursor = drawstruct->caret, sellen = 0; -+ -+ if ( ! drawstruct->caret && ! drawstruct->chg_first && -+ ! drawstruct->chg_length && ! text ) { -+ if( qic->composingText.isEmpty() ) { -+#ifdef QT_XIM_DEBUG -+ qDebug( "compose emptied" ); -+#endif // QT_XIM_DEBUG -+ // if the composition string has been emptied, we need -+ // to send an IMEnd event -+ qic->sendIMEvent( QEvent::IMEnd ); -+ qic->resetClientState(); -+ // if the commit string has coming after here, IMStart -+ // will be sent dynamically -+ } -+ return 0; -+ } -+ -+ if (text) { -+ char *str = 0; -+ if (text->encoding_is_wchar) { -+ int l = wcstombs(NULL, text->string.wide_char, text->length); -+ if (l != -1) { -+ str = new char[l + 1]; -+ wcstombs(str, text->string.wide_char, l); -+ str[l] = 0; -+ } -+ } else -+ str = text->string.multi_byte; -+ -+ if (! str) -+ return 0; -+ -+ QString s = QString::fromLocal8Bit(str); -+ -+ if (text->encoding_is_wchar) -+ delete [] str; -+ -+ if (drawstruct->chg_length < 0) -+ qic->composingText.replace(drawstruct->chg_first, UINT_MAX, s); -+ else -+ qic->composingText.replace(drawstruct->chg_first, drawstruct->chg_length, s); -+ -+ if ( qic->selectedChars.size() < qic->composingText.length() ) { -+ // expand the selectedChars array if the compose string is longer -+ uint from = qic->selectedChars.size(); -+ qic->selectedChars.resize( qic->composingText.length() ); -+ for ( uint x = from; from < qic->selectedChars.size(); ++x ) -+ qic->selectedChars[x] = 0; -+ } -+ -+ uint x; -+ bool *p = qic->selectedChars.data() + drawstruct->chg_first; -+ // determine if the changed chars are selected based on text->feedback -+ for ( x = 0; x < s.length(); ++x ) -+ *p++ = ( text->feedback ? ( text->feedback[x] & XIMReverse ) : 0 ); -+ -+ // figure out where the selection starts, and how long it is -+ p = qic->selectedChars.data(); -+ bool started = FALSE; -+ for ( x = 0; x < QMIN(qic->composingText.length(), qic->selectedChars.size()); ++x ) { -+ if ( started ) { -+ if ( *p ) ++sellen; -+ else break; -+ } else { -+ if ( *p ) { -+ cursor = x; -+ started = TRUE; -+ sellen = 1; -+ } -+ } -+ ++p; -+ } -+ } else { -+ if (drawstruct->chg_length == 0) -+ drawstruct->chg_length = -1; -+ -+ qic->composingText.remove(drawstruct->chg_first, drawstruct->chg_length); -+ bool qt_compose_emptied = qic->composingText.isEmpty(); -+ if ( qt_compose_emptied ) { -+#ifdef QT_XIM_DEBUG -+ qDebug( "compose emptied" ); -+#endif // QT_XIM_DEBUG -+ // if the composition string has been emptied, we need -+ // to send an IMEnd event -+ qic->sendIMEvent( QEvent::IMEnd ); -+ qic->resetClientState(); -+ // if the commit string has coming after here, IMStart -+ // will be sent dynamically -+ return 0; -+ } -+ } -+ -+ qic->sendIMEvent( QEvent::IMCompose, -+ qic->composingText, cursor, sellen ); -+ -+ return 0; -+ } -+ -+ static int xic_done_callback(XIC, XPointer client_data, XPointer) { -+ QXIMInputContext *qic = (QXIMInputContext *) client_data; -+ if (! qic) -+ return 0; -+ -+ // Don't send IMEnd here. QXIMInputContext::x11FilterEvent() -+ // handles IMEnd with commit string. -+#if 0 -+ if ( qic->isComposing() ) -+ qic->sendIMEvent( QEvent::IMEnd ); -+ qic->resetClientState(); -+#endif -+ -+ return 0; -+ } -+ -+#ifdef Q_C_CALLBACKS -+} -+#endif // Q_C_CALLBACKS -+ -+#endif // !QT_NO_XIM -+ -+ -+ -+QXIMInputContext::QXIMInputContext() -+ : QInputContext(), ic(0), fontset(0) -+{ -+ if(!isInitXIM) -+ QXIMInputContext::init_xim(); -+} -+ -+ -+void QXIMInputContext::setHolderWidget( QWidget *widget ) -+{ -+ if ( ! widget ) -+ return; -+ -+ QInputContext::setHolderWidget( widget ); -+ -+#if !defined(QT_NO_XIM) -+ fontsetRefCount++; -+ if (! qt_xim) { -+ qWarning("QInputContext: no input method context available"); -+ return; -+ } -+ -+ if (! widget->isTopLevel()) { -+ qWarning("QInputContext: cannot create input context for non-toplevel widgets"); -+ return; -+ } -+ -+ XPoint spot; -+ XRectangle rect; -+ XVaNestedList preedit_attr = 0; -+ XIMCallback startcallback, drawcallback, donecallback; -+ -+ font = widget->font(); -+ fontset = getFontSet( font ); -+ -+ if (qt_xim_style & XIMPreeditArea) { -+ rect.x = 0; -+ rect.y = 0; -+ rect.width = widget->width(); -+ rect.height = widget->height(); -+ -+ preedit_attr = XVaCreateNestedList(0, -+ XNArea, &rect, -+ XNFontSet, fontset, -+ (char *) 0); -+ } else if (qt_xim_style & XIMPreeditPosition) { -+ spot.x = 1; -+ spot.y = 1; -+ -+ preedit_attr = XVaCreateNestedList(0, -+ XNSpotLocation, &spot, -+ XNFontSet, fontset, -+ (char *) 0); -+ } else if (qt_xim_style & XIMPreeditCallbacks) { -+ startcallback.client_data = (XPointer) this; -+ startcallback.callback = (XIMProc) xic_start_callback; -+ drawcallback.client_data = (XPointer) this; -+ drawcallback.callback = (XIMProc)xic_draw_callback; -+ donecallback.client_data = (XPointer) this; -+ donecallback.callback = (XIMProc) xic_done_callback; -+ -+ preedit_attr = XVaCreateNestedList(0, -+ XNPreeditStartCallback, &startcallback, -+ XNPreeditDrawCallback, &drawcallback, -+ XNPreeditDoneCallback, &donecallback, -+ (char *) 0); -+ } -+ -+ if (preedit_attr) { -+ ic = XCreateIC(qt_xim, -+ XNInputStyle, qt_xim_style, -+ XNClientWindow, widget->winId(), -+ XNPreeditAttributes, preedit_attr, -+ (char *) 0); -+ XFree(preedit_attr); -+ } else -+ ic = XCreateIC(qt_xim, -+ XNInputStyle, qt_xim_style, -+ XNClientWindow, widget->winId(), -+ (char *) 0); -+ -+ if (! ic) -+ qFatal("Failed to create XIM input context!"); -+ -+ // when resetting the input context, preserve the input state -+ (void) XSetICValues((XIC) ic, XNResetState, XIMPreserveState, (char *) 0); -+ -+ if( ! ximContextList ) -+ ximContextList = new QPtrList; -+ ximContextList->append( this ); -+#endif // !QT_NO_XIM -+} -+ -+ -+QXIMInputContext::~QXIMInputContext() -+{ -+ -+#if !defined(QT_NO_XIM) -+ if (ic) -+ XDestroyIC((XIC) ic); -+ -+ if ( --fontsetRefCount == 0 ) { -+ Display *dpy = QPaintDevice::x11AppDisplay(); -+ for ( int i = 0; i < 8; i++ ) { -+ if ( fontsetCache[i] && fontsetCache[i] != (XFontSet)-1 ) { -+ XFreeFontSet(dpy, fontsetCache[i]); -+ fontsetCache[i] = 0; -+ } -+ } -+ } -+ -+ if( ximContextList ) { -+ ximContextList->remove( this ); -+ if(ximContextList->isEmpty()) { -+ // Calling XCloseIM gives a Purify FMR error -+ // XCloseIM( qt_xim ); -+ // We prefer a less serious memory leak -+ if( qt_xim ) { -+ qt_xim = 0; -+ isInitXIM = FALSE; -+ } -+ -+ delete ximContextList; -+ ximContextList = 0; -+ } -+ } -+#endif // !QT_NO_XIM -+ -+ ic = 0; -+} -+ -+void QXIMInputContext::init_xim() -+{ -+#ifndef QT_NO_XIM -+ if(!isInitXIM) -+ isInitXIM = TRUE; -+ -+ qt_xim = 0; -+ QString ximServerName(qt_ximServer); -+ if (qt_ximServer) -+ ximServerName.prepend("@im="); -+ else -+ ximServerName = ""; -+ -+ if ( !XSupportsLocale() ) -+ qWarning("Qt: Locales not supported on X server"); -+ -+#ifdef USE_X11R6_XIM -+ else if ( XSetLocaleModifiers (ximServerName.ascii()) == 0 ) -+ qWarning( "Qt: Cannot set locale modifiers: %s", -+ ximServerName.ascii()); -+ else { -+ Display *dpy = QPaintDevice::x11AppDisplay(); -+ XWindowAttributes attr; // XIM unselects all events on the root window -+ XGetWindowAttributes( dpy, QPaintDevice::x11AppRootWindow(),&attr ); -+ XRegisterIMInstantiateCallback(dpy, 0, 0, 0, -+ (XIMProc) xim_create_callback, 0); -+ XSelectInput( dpy, QPaintDevice::x11AppRootWindow(), attr.your_event_mask ); -+ } -+#else // !USE_X11R6_XIM -+ else if ( XSetLocaleModifiers ("") == 0 ) -+ qWarning("Qt: Cannot set locale modifiers"); -+ else -+ QXIMInputContext::create_xim(); -+#endif // USE_X11R6_XIM -+#endif // QT_NO_XIM -+} -+ -+ -+/*! \internal -+ Creates the application input method. -+ */ -+void QXIMInputContext::create_xim() -+{ -+#ifndef QT_NO_XIM -+ Display *appDpy = QPaintDevice::x11AppDisplay(); -+ qt_xim = XOpenIM( appDpy, 0, 0, 0 ); -+ if ( qt_xim ) { -+ -+#ifdef USE_X11R6_XIM -+ XIMCallback destroy; -+ destroy.callback = (XIMProc) xim_destroy_callback; -+ destroy.client_data = 0; -+ if ( XSetIMValues( qt_xim, XNDestroyCallback, &destroy, (char *) 0 ) != 0 ) -+ qWarning( "Xlib doesn't support destroy callback"); -+#endif // USE_X11R6_XIM -+ -+ XIMStyles *styles = 0; -+ XGetIMValues(qt_xim, XNQueryInputStyle, &styles, (char *) 0, (char *) 0); -+ if ( styles ) { -+ int i; -+ for ( i = 0; !qt_xim_style && i < styles->count_styles; i++ ) { -+ if ( styles->supported_styles[i] == qt_xim_preferred_style ) { -+ qt_xim_style = qt_xim_preferred_style; -+ break; -+ } -+ } -+ // if the preferred input style couldn't be found, look for -+ // Nothing -+ for ( i = 0; !qt_xim_style && i < styles->count_styles; i++ ) { -+ if ( styles->supported_styles[i] == (XIMPreeditNothing | -+ XIMStatusNothing) ) { -+ qt_xim_style = XIMPreeditNothing | XIMStatusNothing; -+ break; -+ } -+ } -+ // ... and failing that, None. -+ for ( i = 0; !qt_xim_style && i < styles->count_styles; i++ ) { -+ if ( styles->supported_styles[i] == (XIMPreeditNone | -+ XIMStatusNone) ) { -+ qt_xim_style = XIMPreeditNone | XIMStatusNone; -+ break; -+ } -+ } -+ -+ // qDebug("QApplication: using im style %lx", qt_xim_style); -+ XFree( (char *)styles ); -+ } -+ -+ if ( qt_xim_style ) { -+ -+#ifdef USE_X11R6_XIM -+ XUnregisterIMInstantiateCallback(appDpy, 0, 0, 0, -+ (XIMProc) xim_create_callback, 0); -+#endif // USE_X11R6_XIM -+ -+ } else { -+ // Give up -+ qWarning( "No supported input style found." -+ " See InputMethod documentation."); -+ QXIMInputContext::close_xim(); -+ } -+ } -+#endif // QT_NO_XIM -+} -+ -+ -+/*! \internal -+ Closes the application input method. -+*/ -+void QXIMInputContext::close_xim() -+{ -+#ifndef QT_NO_XIM -+ QString errMsg( "QXIMInputContext::close_xim() has been called" ); -+ -+ // Calling XCloseIM gives a Purify FMR error -+ // XCloseIM( qt_xim ); -+ // We prefer a less serious memory leak -+ -+ qt_xim = 0; -+ if( ximContextList ) { -+ QPtrList contexts( *ximContextList ); -+ QPtrList::Iterator it = contexts.begin(); -+ while( it != contexts.end() ) { -+ (*it)->close( errMsg ); -+ ++it; -+ } -+ // ximContextList will be deleted in ~QXIMInputContext -+ } -+#endif // QT_NO_XIM -+} -+ -+ -+bool QXIMInputContext::x11FilterEvent( QWidget *keywidget, XEvent *event ) -+{ -+#ifndef QT_NO_XIM -+ int xkey_keycode = event->xkey.keycode; -+ if ( XFilterEvent( event, keywidget->topLevelWidget()->winId() ) ) { -+ qt_ximComposingKeycode = xkey_keycode; // ### not documented in xlib -+ -+ // Cancel of the composition is realizable even if -+ // follwing codes don't exist -+#if 0 -+ if ( event->type != XKeyPress || ! (qt_xim_style & XIMPreeditCallbacks) ) -+ return TRUE; -+ -+ /* -+ * The Solaris htt input method will transform a ClientMessage -+ * event into a filtered KeyPress event, in which case our -+ * keywidget is still zero. -+ */ -+ QETWidget *widget = (QETWidget*)QWidget::find( (WId)event->xany.window ); -+ if ( ! keywidget ) { -+ keywidget = (QETWidget*)QWidget::keyboardGrabber(); -+ if ( keywidget ) { -+ grabbed = TRUE; -+ } else { -+ if ( focus_widget ) -+ keywidget = (QETWidget*)focus_widget; -+ if ( !keywidget ) { -+ if ( qApp->inPopupMode() ) // no focus widget, see if we have a popup -+ keywidget = (QETWidget*) qApp->activePopupWidget(); -+ else if ( widget ) -+ keywidget = (QETWidget*)widget->topLevelWidget(); -+ } -+ } -+ } -+ -+ /* -+ if the composition string has been emptied, we need to send -+ an IMEnd event. however, we have no way to tell if the user -+ has cancelled input, or if the user has accepted the -+ composition. -+ -+ so, we have to look for the next keypress and see if it is -+ the 'commit' key press (keycode == 0). if it is, we deliver -+ an IMEnd event with the final text, otherwise we deliver an -+ IMEnd with empty text (meaning the user has cancelled the -+ input). -+ */ -+ if ( composing && focusWidget && qt_compose_emptied ) { -+ XEvent event2; -+ bool found = FALSE; -+ if ( XCheckTypedEvent( QPaintDevice::x11AppDisplay(), -+ XKeyPress, &event2 ) ) { -+ if ( event2.xkey.keycode == 0 ) { -+ // found a key event with the 'commit' string -+ found = TRUE; -+ XPutBackEvent( QPaintDevice::x11AppDisplay(), &event2 ); -+ } -+ } -+ -+ if ( !found ) { -+ // no key event, so the user must have cancelled the composition -+ QIMEvent endevent( QEvent::IMEnd, QString::null, -1 ); -+ QApplication::sendEvent( focusWidget, &endevent ); -+ -+ focusWidget = 0; -+ } -+ -+ qt_compose_emptied = FALSE; -+ } -+#endif -+ return TRUE; -+ } else if ( focusWidget() ) { -+ if ( event->type == XKeyPress && event->xkey.keycode == 0 ) { -+ // input method has sent us a commit string -+ QCString data(513); -+ KeySym sym; // unused -+ Status status; // unused -+ QString inputText; -+ int count = lookupString( &(event->xkey), data, &sym, &status ); -+ if ( count > 0 ) -+ inputText = qt_input_mapper->toUnicode( data, count ); -+ -+ if ( ! ( qt_xim_style & XIMPreeditCallbacks ) || ! isComposing() ) { -+ // there is no composing state -+ sendIMEvent( QEvent::IMStart ); -+ } -+ -+ sendIMEvent( QEvent::IMEnd, inputText ); -+ resetClientState(); -+ -+ return TRUE; -+ } -+ } -+#endif // !QT_NO_XIM -+ -+ return FALSE; -+} -+ -+ -+void QXIMInputContext::sendIMEvent( QEvent::Type type, const QString &text, -+ int cursorPosition, int selLength ) -+{ -+ QInputContext::sendIMEvent( type, text, cursorPosition, selLength ); -+ if ( type == QEvent::IMCompose ) -+ composingText = text; -+} -+ -+ -+void QXIMInputContext::reset() -+{ -+#if !defined(QT_NO_XIM) -+ if ( focusWidget() && isComposing() && ! composingText.isNull() ) { -+#ifdef QT_XIM_DEBUG -+ qDebug("QXIMInputContext::reset: composing - sending IMEnd (empty) to %p", -+ focusWidget() ); -+#endif // QT_XIM_DEBUG -+ -+ QInputContext::reset(); -+ resetClientState(); -+ -+ char *mb = XmbResetIC((XIC) ic); -+ if (mb) -+ XFree(mb); -+ } -+#endif // !QT_NO_XIM -+} -+ -+ -+void QXIMInputContext::resetClientState() -+{ -+#if !defined(QT_NO_XIM) -+ composingText = QString::null; -+ if ( selectedChars.size() < 128 ) -+ selectedChars.resize( 128 ); -+ selectedChars.fill( 0 ); -+#endif // !QT_NO_XIM -+} -+ -+ -+void QXIMInputContext::close( const QString &errMsg ) -+{ -+ qDebug( errMsg ); -+ emit deletionRequested(); -+} -+ -+ -+bool QXIMInputContext::hasFocus() const -+{ -+ return ( focusWidget() != 0 ); -+} -+ -+ -+void QXIMInputContext::setMicroFocus(int x, int y, int, int h, QFont *f) -+{ -+ QWidget *widget = focusWidget(); -+ if ( qt_xim && widget ) { -+ QPoint p( x, y ); -+ QPoint p2 = widget->mapTo( widget->topLevelWidget(), QPoint( 0, 0 ) ); -+ p = widget->topLevelWidget()->mapFromGlobal( p ); -+ setXFontSet( f ? *f : widget->font() ); -+ setComposePosition(p.x(), p.y() + h); -+ setComposeArea(p2.x(), p2.y(), widget->width(), widget->height()); -+ } -+ -+} -+ -+void QXIMInputContext::mouseHandler( int , QEvent::Type type, -+ Qt::ButtonState button, -+ Qt::ButtonState) -+{ -+ if ( type == QEvent::MouseButtonPress || -+ type == QEvent::MouseButtonDblClick ) { -+ // Don't reset Japanese input context here. Japanese input -+ // context sometimes contains a whole paragraph and has -+ // minutes of lifetime different to ephemeral one in other -+ // languages. The input context should be survived until -+ // focused again. -+ if ( ! isPreeditPreservationEnabled() ) -+ reset(); -+ } -+} -+ -+void QXIMInputContext::setComposePosition(int x, int y) -+{ -+#if !defined(QT_NO_XIM) -+ if (qt_xim && ic) { -+ XPoint point; -+ point.x = x; -+ point.y = y; -+ -+ XVaNestedList preedit_attr = -+ XVaCreateNestedList(0, -+ XNSpotLocation, &point, -+ -+ (char *) 0); -+ XSetICValues((XIC) ic, XNPreeditAttributes, preedit_attr, (char *) 0); -+ XFree(preedit_attr); -+ } -+#endif // !QT_NO_XIM -+} -+ -+ -+void QXIMInputContext::setComposeArea(int x, int y, int w, int h) -+{ -+#if !defined(QT_NO_XIM) -+ if (qt_xim && ic) { -+ XRectangle rect; -+ rect.x = x; -+ rect.y = y; -+ rect.width = w; -+ rect.height = h; -+ -+ XVaNestedList preedit_attr = XVaCreateNestedList(0, -+ XNArea, &rect, -+ -+ (char *) 0); -+ XSetICValues((XIC) ic, XNPreeditAttributes, preedit_attr, (char *) 0); -+ XFree(preedit_attr); -+ } -+#endif -+} -+ -+ -+void QXIMInputContext::setXFontSet(const QFont &f) -+{ -+#if !defined(QT_NO_XIM) -+ if (font == f) return; // nothing to do -+ font = f; -+ -+ XFontSet fs = getFontSet(font); -+ if (fontset == fs) return; // nothing to do -+ fontset = fs; -+ -+ XVaNestedList preedit_attr = XVaCreateNestedList(0, XNFontSet, fontset, (char *) 0); -+ XSetICValues((XIC) ic, XNPreeditAttributes, preedit_attr, (char *) 0); -+ XFree(preedit_attr); -+#else -+ Q_UNUSED( f ); -+#endif -+} -+ -+ -+int QXIMInputContext::lookupString(XKeyEvent *event, QCString &chars, -+ KeySym *key, Status *status) const -+{ -+ int count = 0; -+ -+#if !defined(QT_NO_XIM) -+ if (qt_xim && ic) { -+ count = XmbLookupString((XIC) ic, event, chars.data(), -+ chars.size(), key, status); -+ -+ if ((*status) == XBufferOverflow ) { -+ chars.resize(count + 1); -+ count = XmbLookupString((XIC) ic, event, chars.data(), -+ chars.size(), key, status); -+ } -+ } -+ -+#endif // QT_NO_XIM -+ -+ return count; -+} -+ -+void QXIMInputContext::setFocus() -+{ -+#if !defined(QT_NO_XIM) -+ if ( qt_xim && ic ) -+ XSetICFocus((XIC) ic); -+#endif // !QT_NO_XIM -+} -+ -+void QXIMInputContext::unsetFocus() -+{ -+#if !defined(QT_NO_XIM) -+ if (qt_xim && ic) -+ XUnsetICFocus((XIC) ic); -+#endif // !QT_NO_XIM -+ -+ // Don't reset Japanese input context here. Japanese input context -+ // sometimes contains a whole paragraph and has minutes of -+ // lifetime different to ephemeral one in other languages. The -+ // input context should be survived until focused again. -+ if ( ! isPreeditPreservationEnabled() ) -+ reset(); -+} -+ -+ -+bool QXIMInputContext::isPreeditRelocationEnabled() -+{ -+ return ( language() == "ja" ); -+} -+ -+ -+bool QXIMInputContext::isPreeditPreservationEnabled() -+{ -+ return ( language() == "ja" ); -+} -+ -+ -+QString QXIMInputContext::identifierName() -+{ -+ // the name should be "xim" rather than "XIM" to be consistent -+ // with corresponding immodule of GTK+ -+ return "xim"; -+} -+ -+ -+QString QXIMInputContext::language() -+{ -+#if !defined(QT_NO_XIM) -+ if ( qt_xim ) { -+ QString locale( XLocaleOfIM( qt_xim ) ); -+ -+ if ( locale.startsWith( "zh" ) ) { -+ // Chinese language should be formed as "zh_CN", "zh_TW", "zh_HK" -+ _language = locale.left( 5 ); -+ } else { -+ // other languages should be two-letter ISO 639 language code -+ _language = locale.left( 2 ); -+ } -+ } -+#endif -+ return _language; -+} -+ -+#endif //QT_NO_IM ---- plugins/src/inputmethods/xim/xim.pro -+++ plugins/src/inputmethods/xim/xim.pro -@@ -0,0 +1,14 @@ -+TEMPLATE = lib -+TARGET = qxim -+DESTDIR = ../../../inputmethods -+ -+INCLUDEPATH += . -+CONFIG += qt warn_on debug plugin -+target.path += $$plugins.path/inputmethods -+INSTALLS += target -+ -+# Input -+HEADERS += qximinputcontext.h \ -+ qximinputcontextplugin.h -+SOURCES += qximinputcontext_x11.cpp \ -+ qximinputcontextplugin.cpp ---- plugins/src/src.pro -+++ plugins/src/src.pro -@@ -1,10 +1,10 @@ - TEMPLATE = subdirs - - shared { -- SUBDIRS *= accessible codecs imageformats sqldrivers styles -+ SUBDIRS *= accessible codecs imageformats inputmethods sqldrivers styles - embedded:SUBDIRS *= gfxdrivers - } - dll { -- SUBDIRS *= accessible codecs imageformats sqldrivers styles -+ SUBDIRS *= accessible codecs imageformats inputmethods sqldrivers styles - embedded:SUBDIRS *= gfxdrivers - } ---- README.immodule -+++ README.immodule -@@ -0,0 +1,107 @@ -+immodule for Qt -+ -+ -+* What is this? -+ -+ immodule for Qt is a modular, extensible input method subsystem for -+ Qt. -+ -+ This project brings functionality similar to the immodule for GTK+ -+ to the Qt library. The main goal of the project is to extend and -+ enhance the input method support in the Qt library, in order to -+ provide a modern and powerful multi-language input system. Our short -+ term goal is to make Qt (especially Qt/X11) "up-to-date" with other -+ X11-based toolkits such as GTK+. We are also focusing on what the -+ input method API should be for future Qt versions. -+ -+ See our webpage for further information. -+ -+ http://immodule-qt.freedesktop.org/ -+ -+ -+* About this release -+ -+ qt-x11-immodule-unified-qt3.3.3-20040910 is a stable release. Since -+ it breaks backward compatibility (source and binary) about immodule -+ with our previous releases qt-x11-immodule-unified-qt3.3.3-20040819 -+ and qt-x11-immodule-bc-qt3.3.2-20040623, optional immodule plugins -+ must be updated to proper version. See 'Optional immodule plugins' -+ section of our download page. -+ -+ http://immodule-qt.freedesktop.org/Software/ImmoduleQtDownload -+ -+ However, backward compatibility (source and binary) with normal Qt -+ 3.3.3 is kept in 'Binary Compatible' mode. -+ -+ -+* How to install -+ -+ After extract the Qt archive, perform following instructions -+ -+ cd qt-x11-free-3.3.3 -+ patch -p0 < qt-x11-immodule-unified-qt3.3.3-20040910.diff -+ ./make-symlinks.sh -+ ./configure -+ -+ Our patch provides following two configure options. Choose 'Binary -+ Compatible' for normal use. -+ -+ Build Qt with 'Binary Compatible' immodule support (default) -+ -+ configure -inputmethod -+ -+ Build Qt without binary compatibility, but supports more advanced -+ immodule extensions. It cannot be used with ordinary application -+ binaries (i.e. the option is for developers) -+ -+ configure -inputmethod -inputmethod-ext -+ -+ -+* How to use -+ -+ - See users manual of each input method plugins -+ -+ - Run qtconfig to choose your favorite XIM input style -+ -+ -+* Environment variables -+ -+ Some environment variables are available for expert users and system -+ integrators. The specification is preliminary and may be changed -+ without notification. Be careful. -+ -+ See following examples to use the variables. -+ -+ -+ - set "xim" input method as default -+ -+ export QT_IM_MODULE=xim -+ -+ -+ - set "simple" composing input method as default -+ -+ export QT_IM_MODULE=simple -+ -+ -+ - set "xim" input method as default, and disable input method -+ selection menu in the context menu -+ -+ export QT_IM_SWITCHER=imsw-none -+ export QT_IM_MODULE=xim -+ -+ -+ - set "xim" input method as default, and enable input method -+ selection menu in the context menu (default configuration) -+ -+ export QT_IM_SWITCHER=imsw-multi -+ export QT_IM_MODULE=xim -+ -+ -+ - set "iiimqcf" that has its own input method switching framework as -+ default, and disable input method selection menu in the context -+ menu. Such configuration is required by some system integrators to -+ provide unified user interface for global input method switching -+ over the desktop -+ -+ export QT_IM_SWITCHER=imsw-none -+ export QT_IM_MODULE=iiimqcf ---- src/inputmethod/qinputcontextfactory.cpp -+++ src/inputmethod/qinputcontextfactory.cpp -@@ -0,0 +1,186 @@ -+/**************************************************************************** -+** $Id: qinputcontextfactory.cpp,v 1.2 2004/06/20 18:43:11 daisuke Exp $ -+** -+** Implementation of QInputContextFactory class -+** -+** Created : 001103 -+** -+** Copyright (C) 1992-2002 Trolltech AS. All rights reserved. -+** -+** This file is part of the widgets module of the Qt GUI Toolkit. -+** -+** This file may be distributed under the terms of the Q Public License -+** as defined by Trolltech AS of Norway and appearing in the file -+** LICENSE.QPL included in the packaging of this file. -+** -+** This file may be distributed and/or modified under the terms of the -+** GNU General Public License version 2 as published by the Free Software -+** Foundation and appearing in the file LICENSE.GPL included in the -+** packaging of this file. -+** -+** Licensees holding valid Qt Enterprise Edition licenses may use this -+** file in accordance with the Qt Commercial License Agreement provided -+** with the Software. -+** -+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -+** -+** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for -+** information about Qt Commercial License Agreements. -+** See http://www.trolltech.com/qpl/ for QPL licensing information. -+** See http://www.trolltech.com/gpl/ for GPL licensing information. -+** -+** Contact info@trolltech.com if any conditions of this licensing are -+** not clear to you. -+** -+**********************************************************************/ -+ -+#include "qinputcontextinterface_p.h" // up here for GCC 2.7.* compatibility -+#include "qinputcontextfactory.h" -+#include "qinputcontext.h" -+ -+#ifndef QT_NO_IM -+ -+#include "qapplication.h" -+ -+#ifdef QT_THREAD_SUPPORT -+#include -+#endif // QT_THREAD_SUPPORT -+ -+#include -+ -+#include "qcleanuphandler.h" -+#include -+#ifndef QT_NO_COMPONENT -+ -+ -+static QPluginManager *manager = 0; -+static QSingleCleanupHandler< QPluginManager > cleanup_manager; -+ -+static void create_manager() -+{ -+ if( manager ) // already created -+ return; -+ -+#ifdef QT_THREAD_SUPPORT -+ // protect manager creation -+ QMutexLocker locker( qt_global_mutexpool ? -+ qt_global_mutexpool->get( &manager ) : 0); -+ -+ // we check the manager pointer again to make sure that another thread -+ // has not created the manager before us. -+ -+ if ( manager ) // already created -+ return; -+#endif -+ -+ manager = new QPluginManager( IID_QInputContextFactory, QApplication::libraryPaths(), "/inputmethods", FALSE ); -+ -+ Q_CHECK_PTR( manager ); -+ cleanup_manager.set( &manager ); -+} -+ -+#endif //QT_NO_COMPONENT -+ -+ -+/*! -+ This function generates the input context that has the identifier -+ name which is in agreement with \a key. \a widget is the client -+ widget of QInputContext. \a widget may be null. -+*/ -+QInputContext *QInputContextFactory::create( const QString& key, QWidget *widget ) -+{ -+ QInputContext *ret = 0; -+ QString inputcontext = key; -+#ifndef QT_NO_COMPONENT -+ // make sure the manager is created -+ create_manager(); -+ -+ QInterfacePtr iface; -+ manager->queryInterface( inputcontext, &iface ); -+ -+ if ( iface ) { -+ ret = iface->create( inputcontext ); -+#ifdef Q_WS_X11 -+ if ( ret ) -+ ret->setHolderWidget( widget ); -+#endif -+ } -+#endif -+ return ret; -+} -+ -+ -+/*! -+ This function returns the list of the names input methods. -+ Only input methods included in default and placed under -+ $QTDIR/plugins/inputmethods are listed. -+*/ -+QStringList QInputContextFactory::keys() -+{ -+ QStringList list; -+#ifndef QT_NO_COMPONENT -+ // make sure the manager is created -+ create_manager(); -+ -+ list = manager->featureList(); -+#endif //QT_NO_COMPONENT -+ -+ return list; -+} -+ -+ -+QStringList QInputContextFactory::languages( const QString &key ) -+{ -+ QStringList result; -+#ifndef QT_NO_COMPONENT -+ // make sure the manager is created -+ create_manager(); -+ -+ QInterfacePtr iface; -+ manager->queryInterface( key, &iface ); -+ -+ if ( iface ) -+ result = iface->languages( key ); -+#endif //QT_NO_COMPONENT -+ -+ return result; -+} -+ -+ -+QString QInputContextFactory::displayName( const QString &key ) -+{ -+ QString result( "" ); -+#ifndef QT_NO_COMPONENT -+ // make sure the manager is created -+ create_manager(); -+ -+ QInterfacePtr iface; -+ manager->queryInterface( key, &iface ); -+ -+ if ( iface ) -+ result = iface->displayName( key ); -+#endif //QT_NO_COMPONENT -+ -+ return result; -+} -+ -+ -+QString QInputContextFactory::description( const QString &key ) -+{ -+ QString result( "" ); -+#ifndef QT_NO_COMPONENT -+ // make sure the manager is created -+ create_manager(); -+ -+ QInterfacePtr iface; -+ manager->queryInterface( key, &iface ); -+ -+ if ( iface ) -+ result = iface->description( key ); -+#endif //QT_NO_COMPONENT -+ -+ return result; -+} -+ -+#endif // QT_NO_IM ---- src/inputmethod/qinputcontextfactory.h -+++ src/inputmethod/qinputcontextfactory.h -@@ -0,0 +1,59 @@ -+/**************************************************************************** -+** $Id: qinputcontextfactory.h,v 1.1.1.1 2004/05/11 11:16:49 daisuke Exp $ -+** -+** Definition of QInputContextFactory class -+** -+** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. -+** -+** This file is part of the widgets module of the Qt GUI Toolkit. -+** -+** This file may be distributed under the terms of the Q Public License -+** as defined by Trolltech AS of Norway and appearing in the file -+** LICENSE.QPL included in the packaging of this file. -+** -+** This file may be distributed and/or modified under the terms of the -+** GNU General Public License version 2 as published by the Free Software -+** Foundation and appearing in the file LICENSE.GPL included in the -+** packaging of this file. -+** -+** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition -+** licenses may use this file in accordance with the Qt Commercial License -+** Agreement provided with the Software. -+** -+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -+** -+** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for -+** information about Qt Commercial License Agreements. -+** See http://www.trolltech.com/qpl/ for QPL licensing information. -+** See http://www.trolltech.com/gpl/ for GPL licensing information. -+** -+** Contact info@trolltech.com if any conditions of this licensing are -+** not clear to you. -+** -+**********************************************************************/ -+ -+#ifndef QINPUTCONTEXTFACTORY_H -+#define QINPUTCONTEXTFACTORY_H -+ -+#ifndef QT_H -+#include "qstringlist.h" -+#endif // QT_H -+ -+#ifndef QT_NO_IM -+ -+class QInputContext; -+class QWidget; -+ -+class Q_EXPORT QInputContextFactory -+{ -+public: -+ static QStringList keys(); -+ static QInputContext *create( const QString &key, QWidget *widget ); // should be a toplevel widget -+ static QStringList languages( const QString &key ); -+ static QString displayName( const QString &key ); -+ static QString description( const QString &key ); -+}; -+#endif //QT_NO_IM -+ -+#endif //QINPUTCONTEXTFACTORY_H ---- src/inputmethod/qinputcontextinterface_p.h -+++ src/inputmethod/qinputcontextinterface_p.h -@@ -0,0 +1,87 @@ -+/**************************************************************************** -+** $Id: qinputcontextinterface_p.h,v 1.2 2004/06/20 18:43:11 daisuke Exp $ -+** -+** ... -+** -+** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. -+** -+** This file is part of the widgets module of the Qt GUI Toolkit. -+** -+** This file may be distributed under the terms of the Q Public License -+** as defined by Trolltech AS of Norway and appearing in the file -+** LICENSE.QPL included in the packaging of this file. -+** -+** This file may be distributed and/or modified under the terms of the -+** GNU General Public License version 2 as published by the Free Software -+** Foundation and appearing in the file LICENSE.GPL included in the -+** packaging of this file. -+** -+** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition -+** licenses may use this file in accordance with the Qt Commercial License -+** Agreement provided with the Software. -+** -+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -+** -+** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for -+** information about Qt Commercial License Agreements. -+** See http://www.trolltech.com/qpl/ for QPL licensing information. -+** See http://www.trolltech.com/gpl/ for GPL licensing information. -+** -+** Contact info@trolltech.com if any conditions of this licensing are -+** not clear to you. -+** -+**********************************************************************/ -+ -+#ifndef QINPUTCONTEXTINTERFACE_P_H -+#define QINPUTCONTEXTINTERFACE_P_H -+ -+// -+// W A R N I N G -+// ------------- -+// -+// This file is not part of the Qt API. This header file may -+// change from version to version without notice, or even be -+// removed. -+// -+// We mean it. -+// -+// -+ -+#ifndef QT_H -+#include -+#endif // QT_H -+ -+#ifndef QT_NO_IM -+#ifndef QT_NO_COMPONENT -+ -+class QWidget; -+class QInputContext; -+ -+// old version interface in qt-x11-immodule-bc-qt3.3.2-20040623.diff: -+// {6C2B9EDE-B63C-14c9-A729-3C7643739C4C} -+// -+// new version interface: -+// {a5f5c63d-e044-11d8-9718-000d6077a78d} -+// {b0bf3e59-e526-11d8-80da-000d6077a78d} -+// {9ef05c7f-0272-11d9-846c-000d6077a78d} -+ -+#ifndef IID_QInputContextFactory -+//#define IID_QInputContextFactory QUuid(0x6c2b9ede, 0xb63c, 0x14c9, 0xa7, 0x29, 0x3c, 0x76, 0x43, 0x73, 0x9c, 0x4c) -+//#define IID_QInputContextFactory QUuid(0xa5f5c63d, 0xe044, 0x11d8, 0x97, 0x18, 0x00, 0x0d, 0x60, 0x77, 0xa7, 0x8d) -+//#define IID_QInputContextFactory QUuid(0xb0bf3e59, 0xe526, 0x11d8, 0x80, 0xda, 0x00, 0x0d, 0x60, 0x77, 0xa7, 0x8d) -+#define IID_QInputContextFactory QUuid(0x9ef05c7f, 0x0272, 0x11d9, 0x84, 0x6c, 0x00, 0x0d, 0x60, 0x77, 0xa7, 0x8d) -+#endif -+ -+struct Q_EXPORT QInputContextFactoryInterface : public QFeatureListInterface -+{ -+ virtual QInputContext *create( const QString &key ) = 0; -+ virtual QStringList languages( const QString &key ) = 0; -+ virtual QString displayName( const QString &key ) = 0; -+ virtual QString description( const QString &key ) = 0; -+}; -+ -+#endif //QT_NO_COMPONENT -+#endif //QT_NO_IM -+ -+#endif //QINPUTCONTEXTINTERFACE_P_H ---- src/inputmethod/qinputcontextplugin.cpp -+++ src/inputmethod/qinputcontextplugin.cpp -@@ -0,0 +1,231 @@ -+/**************************************************************************** -+** $Id: qinputcontextplugin.cpp,v 1.2 2004/06/20 18:43:11 daisuke Exp $ -+** -+** Implementation of QInputContextPlugin class -+** -+** Created : 010920 -+** -+** Copyright (C) 2001 Trolltech AS. All rights reserved. -+** -+** This file is part of the widgets module of the Qt GUI Toolkit. -+** -+** This file may be distributed under the terms of the Q Public License -+** as defined by Trolltech AS of Norway and appearing in the file -+** LICENSE.QPL included in the packaging of this file. -+** -+** This file may be distributed and/or modified under the terms of the -+** GNU General Public License version 2 as published by the Free Software -+** Foundation and appearing in the file LICENSE.GPL included in the -+** packaging of this file. -+** -+** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition -+** licenses may use this file in accordance with the Qt Commercial License -+** Agreement provided with the Software. -+** -+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -+** -+** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for -+** information about Qt Commercial License Agreements. -+** See http://www.trolltech.com/qpl/ for QPL licensing information. -+** See http://www.trolltech.com/gpl/ for GPL licensing information. -+** -+** Contact info@trolltech.com if any conditions of this licensing are -+** not clear to you. -+** -+**********************************************************************/ -+ -+#include "qinputcontextplugin.h" -+ -+#ifndef QT_NO_IM -+#ifndef QT_NO_COMPONENT -+ -+#include "qinputcontextinterface_p.h" -+ -+/*! -+ \class QInputContextPlugin qinputcontextplugin.h -+ \brief The QInputContextPlugin class provides an abstract base for custom QInputContext plugins. -+ \reentrant -+ \ingroup plugins -+ -+ The input context plugin is a simple plugin interface that makes it -+ easy to create custom input contexts that can be loaded dynamically -+ into applications. -+ -+ Writing a input context plugin is achieved by subclassing this -+ base class, reimplementing the pure virtual functions keys(), -+ create(), languages(), displayName() description() and exporting -+ the class with the \c Q_EXPORT_PLUGIN macro. See the \link -+ plugins-howto.html Qt Plugins documentation \endlink for details. -+ -+ \sa QInputContext -+*/ -+ -+/*! -+ \fn QStringList QInputContextPlugin::keys() const -+ -+ Returns the list of QInputContext keys this plugin provides. -+ -+ These keys are usually the class names of the custom input context -+ that are implemented in the plugin. -+ -+ Return value is the names to identify and specify input methods -+ for the input method switching mechanism and so on. The names have -+ to be consistent with QInputContext::identifierName(). The names -+ have to consist of ASCII characters only. See also -+ QInputContext::identifierName() for further information. -+ -+ \sa create(), displayName(), QInputContext::identifierName() -+*/ -+ -+/*! -+ \fn QInputContext* QInputContextPlugin::create( const QString& key ) -+ -+ Creates and returns a QInputContext instance for the input context key \a key. -+ The input context key is usually the class name of the required input method. -+ -+ \sa keys() -+*/ -+ -+/*! -+ \fn QStringList languages( const QString &key ) -+ -+ Returns what languages are supported by the QInputContext instance -+ specified by \a key. -+ -+ The languages are expressed as language code (e.g. "zh_CN", -+ "zh_TW", "zh_HK", "ja", "ko", ...). An input context that suports -+ multiple languages can return all supported languages as -+ QStringList. The name has to be consistent with -+ QInputContextPlugin::language(). -+ -+ This information may be used to optimize user interface. -+ -+ \sa QInputContext::language() -+*/ -+ -+/*! -+ \fn QString displayName( const QString &key ) -+ -+ Returns a user friendly i18n-ized name of the QInputContext -+ instance specified by \a key. This string may be appeared in a -+ menu and so on for users. -+ -+ There are two different names with different responsibility in the -+ input method domain. This function returns one of them. Another -+ name is called 'identifier name' to identify and specify input -+ methods for the input method switching mechanism and so on. -+ -+ Although tr( identifierName ) can provide user friendly i18n-ized -+ name without this function, the message catalog have to be managed -+ by Qt in the case. However, some sophisticated input method -+ framework manages their own message catalogs to provide this -+ i18n-ized name string. So we need this function rather than just -+ call tr() for identifier name. -+ -+ \sa keys(), QInputContext::identifierName() -+*/ -+ -+/*! -+ \fn QString description( const QString &key ) -+ -+ Returns a i18n-ized brief description of the QInputContext -+ instance specified by \a key. This string may be appeared in some -+ user interfaces. -+*/ -+ -+ -+ -+class QInputContextPluginPrivate : public QInputContextFactoryInterface -+{ -+public: -+ QInputContextPluginPrivate( QInputContextPlugin *p ) -+ : plugin( p ) -+ { -+ } -+ -+ virtual ~QInputContextPluginPrivate(); -+ -+ QRESULT queryInterface( const QUuid &iid, QUnknownInterface **iface ); -+ Q_REFCOUNT; -+ -+ QStringList featureList() const; -+ QInputContext *create( const QString &key ); -+ QStringList languages( const QString &key ); -+ QString displayName( const QString &key ); -+ QString description( const QString &key ); -+ -+private: -+ QInputContextPlugin *plugin; -+}; -+ -+QRESULT QInputContextPluginPrivate::queryInterface( const QUuid &iid, QUnknownInterface **iface ) -+{ -+ *iface = 0; -+ -+ if ( iid == IID_QUnknown ) -+ *iface = this; -+ else if ( iid == IID_QFeatureList ) -+ *iface = this; -+ else if ( iid == IID_QInputContextFactory ) -+ *iface = this; -+ else -+ return QE_NOINTERFACE; -+ -+ (*iface)->addRef(); -+ return QS_OK; -+} -+ -+QInputContextPluginPrivate::~QInputContextPluginPrivate() -+{ -+ delete plugin; -+} -+ -+QStringList QInputContextPluginPrivate::featureList() const -+{ -+ return plugin->keys(); -+} -+ -+QInputContext *QInputContextPluginPrivate::create( const QString &key ) -+{ -+ return plugin->create( key ); -+} -+ -+QStringList QInputContextPluginPrivate::languages( const QString &key ) -+{ -+ return plugin->languages( key ); -+} -+ -+QString QInputContextPluginPrivate::displayName( const QString &key ) -+{ -+ return plugin->displayName( key ); -+} -+ -+QString QInputContextPluginPrivate::description( const QString &key ) -+{ -+ return plugin->description( key ); -+} -+ -+ -+/*! -+ Constructs a input context plugin. This is invoked automatically by the -+ \c Q_EXPORT_PLUGIN macro. -+*/ -+QInputContextPlugin::QInputContextPlugin() -+ : QGPlugin( d = new QInputContextPluginPrivate( this ) ) -+{ -+} -+ -+/*! -+ Destroys the input context plugin. -+ -+ You never have to call this explicitly. Qt destroys a plugin -+ automatically when it is no longer used. -+*/ -+QInputContextPlugin::~QInputContextPlugin() -+{ -+ // don't delete d, as this is deleted by d -+} -+ -+#endif // QT_NO_COMPONENT -+#endif // QT_NO_IM ---- src/inputmethod/qinputcontextplugin.h -+++ src/inputmethod/qinputcontextplugin.h -@@ -0,0 +1,67 @@ -+/**************************************************************************** -+** $Id: qinputcontextplugin.h,v 1.2 2004/06/20 18:43:11 daisuke Exp $ -+** -+** Definition of QInputContextPlugin class -+** -+** Created : 010920 -+** -+** Copyright (C) 2001 Trolltech AS. All rights reserved. -+** -+** This file is part of the tools module of the Qt GUI Toolkit. -+** -+** This file may be distributed under the terms of the Q Public License -+** as defined by Trolltech AS of Norway and appearing in the file -+** LICENSE.QPL included in the packaging of this file. -+** -+** This file may be distributed and/or modified under the terms of the -+** GNU General Public License version 2 as published by the Free Software -+** Foundation and appearing in the file LICENSE.GPL included in the -+** packaging of this file. -+** -+** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition -+** licenses may use this file in accordance with the Qt Commercial License -+** Agreement provided with the Software. -+** -+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -+** -+** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for -+** information about Qt Commercial License Agreements. -+** See http://www.trolltech.com/qpl/ for QPL licensing information. -+** See http://www.trolltech.com/gpl/ for GPL licensing information. -+** -+** Contact info@trolltech.com if any conditions of this licensing are -+** not clear to you. -+** -+**********************************************************************/ -+ -+#ifndef QINPUTCONTEXTPLUGIN_H -+#define QINPUTCONTEXTPLUGIN_H -+ -+#ifndef QT_H -+#include "qgplugin.h" -+#include "qstringlist.h" -+#endif // QT_H -+ -+#ifndef QT_NO_IM -+class QInputContext; -+class QInputContextPluginPrivate; -+ -+class Q_EXPORT QInputContextPlugin : public QGPlugin -+{ -+ Q_OBJECT -+public: -+ QInputContextPlugin(); -+ ~QInputContextPlugin(); -+ -+ virtual QStringList keys() const = 0; -+ virtual QInputContext *create( const QString &key ) = 0; -+ virtual QStringList languages( const QString &key ) = 0; -+ virtual QString displayName( const QString &key ) = 0; -+ virtual QString description( const QString &key ) = 0; -+ -+private: -+ QInputContextPluginPrivate *d; -+}; -+#endif // QT_NO_IM -+#endif // QINPUTCONTEXTPLUGIN_H ---- src/inputmethod/qt_inputmethod.pri -+++ src/inputmethod/qt_inputmethod.pri -@@ -0,0 +1,10 @@ -+# Qt inputmetod module -+ -+inputmethod { -+ INPUTMETHOD_P = inputmethod -+ HEADERS +=$$INPUTMETHOD_H/qinputcontextfactory.h \ -+ $$INPUTMETHOD_P/qinputcontextinterface_p.h \ -+ $$INPUTMETHOD_H/qinputcontextplugin.h -+ SOURCES +=$$INPUTMETHOD_CPP/qinputcontextfactory.cpp \ -+ $$INPUTMETHOD_CPP/qinputcontextplugin.cpp -+} ---- src/kernel/qapplication.cpp -+++ src/kernel/qapplication.cpp -@@ -3161,6 +3161,35 @@ - }; - } - -+#if !defined(QT_NO_IM) -+ // if this is one of the compressible IM events, do compression -+ else if ( event->type() == QEvent::IMCompose ) { -+ l->last(); -+ QPostEvent * cur = 0; -+ for ( ;; ) { -+ while ( (cur=l->current()) != 0 && -+ ( cur->receiver != receiver || -+ cur->event == 0 || -+ cur->event->type() != event->type() || -+ cur->event->type() != QEvent::IMStart ) ) -+ l->prev(); -+ if ( l->current() != 0 ) { -+ // IMCompose must not be compressed with another one -+ // beyond its IMStart boundary -+ if ( cur->event->type() == QEvent::IMStart ) { -+ break; -+ } else if ( cur->event->type() == QEvent::IMCompose ) { -+ QIMComposeEvent * e = (QIMComposeEvent *)(cur->event); -+ *e = *(QIMComposeEvent *)event; -+ delete event; -+ return; -+ } -+ } -+ break; -+ }; -+ } -+#endif -+ - // if no compression could be done, just append something - event->posted = TRUE; - QPostEvent * pe = new QPostEvent( receiver, event ); -@@ -3307,6 +3336,23 @@ - - void QApplication::removePostedEvents( QObject *receiver ) - { -+ removePostedEvents( receiver, 0 ); -+} -+ -+/*! -+ Removes all events that have the event type \a event_type posted -+ using postEvent() for \a receiver. -+ -+ The events are \e not dispatched, instead they are removed from the -+ queue. -+ -+ If \a event_type is 0, all the events are removed from the queue. -+ -+ \threadsafe -+*/ -+ -+void QApplication::removePostedEvents( QObject *receiver, int event_type ) -+{ - if ( !receiver ) - return; - -@@ -3325,18 +3371,24 @@ - // leave the QPostEvent objects; they'll be deleted by - // sendPostedEvents(). - QPostEventList * l = receiver->postedEvents; -- receiver->postedEvents = 0; - l->first(); - QPostEvent * pe; - while( (pe=l->current()) != 0 ) { -- if ( pe->event ) { -- pe->event->posted = FALSE; -- delete pe->event; -- pe->event = 0; -+ if ( !event_type || pe->event->type() == event_type ) { -+ if ( pe->event ) { -+ pe->event->posted = FALSE; -+ delete pe->event; -+ pe->event = 0; -+ } -+ l->remove(); -+ } else { -+ l->next(); - } -- l->remove(); - } -- delete l; -+ if ( !event_type || !l->count() ) { -+ receiver->postedEvents = 0; -+ delete l; -+ } - } - - -@@ -3521,6 +3573,8 @@ - focus_widget = 0; - #ifdef Q_WS_WIN - QInputContext::accept( tmp ); -+#elif defined(Q_WS_X11) -+ tmp->unfocusInputContext(); - #endif - QApplication::sendSpontaneousEvent( tmp, &out ); - } else if ( active_window ) { ---- src/kernel/qapplication.h -+++ src/kernel/qapplication.h -@@ -51,6 +51,9 @@ - class QStyle; - class QTranslator; - class QEventLoop; -+#if defined(Q_WS_X11) -+class QIMEvent; -+#endif - #if defined(Q_WS_QWS) - class QWSDecoration; - #endif -@@ -272,8 +275,19 @@ - virtual void saveState( QSessionManager& sm ); - #endif - #if defined(Q_WS_X11) -+#if !defined(QT_NO_IM_EXTENSIONS) -+ virtual QWidget *locateICHolderWidget( QWidget *w ); -+ virtual QWidgetList *icHolderWidgets(); -+ static void create_im(); -+ static void close_im(); -+#else -+ QWidget *locateICHolderWidget( QWidget *w ); -+ QWidgetList *icHolderWidgets(); - static void create_xim(); - static void close_xim(); -+#endif -+ static QString defaultInputMethod(); -+ void changeAllInputContext( const QString & ); - static bool x11_apply_settings(); - #endif - void wakeUpGuiThread(); -@@ -328,6 +342,12 @@ - friend void qt_init(int *, char **, QApplication::Type); - #endif - -+#if defined(Q_WS_X11) -+private slots: -+ void postIMEvent( QObject *receiver, QIMEvent *event ); -+#endif -+ -+private: - #ifdef QT_THREAD_SUPPORT - static QMutex *qt_mutex; - #endif // QT_THREAD_SUPPORT -@@ -377,9 +397,12 @@ - static QString* session_key; - bool is_session_restored; - #endif --#if defined(Q_WS_X11) && !defined (QT_NO_STYLE ) -+#if defined(Q_WS_X11) -+#if !defined (QT_NO_STYLE) - static void x11_initialize_style(); - #endif -+ static QString defaultIM; // default input method's name in this application. -+#endif - - static QSize app_strut; - #ifndef QT_NO_COMPONENT -@@ -396,6 +419,7 @@ - - static bool sendSpontaneousEvent( QObject *receiver, QEvent *event ); - static void removePostedEvent( QEvent * ); -+ static void removePostedEvents( QObject *receiver, int event_type ); - - friend class QWidget; - friend class QETWidget; ---- src/kernel/qapplication_x11.cpp -+++ src/kernel/qapplication_x11.cpp -@@ -89,7 +89,9 @@ - #include "qfileinfo.h" - - // Input method stuff - UNFINISHED --#include "qinputcontext_p.h" -+#ifndef QT_NO_IM -+#include "qinputcontext.h" -+#endif // QT_NO_IM - #include "qinternal_p.h" // shared double buffer cleanup - - #if defined(QT_THREAD_SUPPORT) -@@ -189,10 +191,9 @@ - static const char *mwGeometry = 0; // main widget geometry - static const char *mwTitle = 0; // main widget title - //Ming-Che 10/10 --static char *ximServer = 0; // XIM Server will connect to -+char *qt_ximServer = 0; // XIM Server will connect to - static bool mwIconic = FALSE; // main widget iconified - //Ming-Che 10/10 --static bool noxim = FALSE; // connect to xim or not - static Display *appDpy = 0; // X11 application display - static char *appDpyName = 0; // X11 display name - static bool appForeignDpy = FALSE; // we didn't create display -@@ -391,14 +392,14 @@ - - - #if !defined(QT_NO_XIM) --XIM qt_xim = 0; -+//XIM qt_xim = 0; - XIMStyle qt_xim_style = 0; -+XIMStyle qt_xim_preferred_style = 0; - static XIMStyle xim_default_style = XIMPreeditCallbacks | XIMStatusNothing; --static XIMStyle xim_preferred_style = 0; - #endif - --static int composingKeycode=0; --static QTextCodec * input_mapper = 0; -+int qt_ximComposingKeycode=0; -+QTextCodec * qt_input_mapper = 0; - - Q_EXPORT Time qt_x_time = CurrentTime; - Q_EXPORT Time qt_x_user_time = CurrentTime; -@@ -511,8 +512,7 @@ - void setWFlags( WFlags f ) { QWidget::setWFlags(f); } - void clearWFlags( WFlags f ) { QWidget::clearWFlags(f); } - bool translateMouseEvent( const XEvent * ); -- bool translateKeyEventInternal( const XEvent *, int& count, QString& text, int& state, char& ascii, int &code, -- QEvent::Type &type, bool willRepeat=FALSE ); -+ bool translateKeyEventInternal( const XEvent *, int& count, QString& text, int& state, char& ascii, int &code, QEvent::Type &type, bool willRepeat=FALSE, bool statefulTranslation=TRUE ); - bool translateKeyEvent( const XEvent *, bool grab ); - bool translatePaintEvent( const XEvent * ); - bool translateConfigEvent( const XEvent * ); -@@ -529,114 +529,120 @@ - - - // ************************************************************************ --// X Input Method support -+// Input Method support - // ************************************************************************ - --#if !defined(QT_NO_XIM) -+/*! -+ An identifier name of the default input method. -+*/ -+QString QApplication::defaultIM = "imsw-multi"; - --#if defined(Q_C_CALLBACKS) --extern "C" { --#endif // Q_C_CALLBACKS - --#ifdef USE_X11R6_XIM -- static void xim_create_callback(XIM /*im*/, -- XPointer /*client_data*/, -- XPointer /*call_data*/) -- { -- // qDebug("xim_create_callback"); -- QApplication::create_xim(); -- } -+/*! -+ This function handles the query about location of the widget -+ holding the QInputContext instance for widget \a w. - -- static void xim_destroy_callback(XIM /*im*/, -- XPointer /*client_data*/, -- XPointer /*call_data*/) -- { -- // qDebug("xim_destroy_callback"); -- QApplication::close_xim(); -- XRegisterIMInstantiateCallback(appDpy, 0, 0, 0, -- (XIMProc) xim_create_callback, 0); -- } -+ The input context is used for text input to widget \a w. By -+ default, it returns the top-level widget of \a w. - --#endif // USE_X11R6_XIM -+ If you want to change the mapping of widget \w to QInputContext -+ instance, reimplement both this function and -+ QApplication::icHolderWidgets(). For example, suppose a tabbed web -+ browser. The browser should allocate a input context per tab -+ widget because users may switch the tabs and input a new text -+ during previous input contexts live. - --#if defined(Q_C_CALLBACKS) -+ See also 'Sharing input context between text widgets' and 'Preedit -+ preservation' section of the class description of QInputContext. -+ -+ \sa QInputContext, icHolderWidgets() -+*/ -+QWidget *QApplication::locateICHolderWidget( QWidget *w ) -+{ -+ return w->topLevelWidget(); - } --#endif // Q_C_CALLBACKS - --#endif // QT_NO_XIM - -+/*! -+ This function returns all widgets holding QInputContext. - --/*! \internal -- Creates the application input method. -- */ --void QApplication::create_xim() -+ By default, This function returns top-level widgets. So if you -+ want to change the mapping of a widget to QInputContext instance, -+ you must override this function and locateICHolderWidget(). -+ -+ \sa locateICHolderWidget() -+*/ -+QWidgetList *QApplication::icHolderWidgets() - { --#ifndef QT_NO_XIM -- qt_xim = XOpenIM( appDpy, 0, 0, 0 ); -- if ( qt_xim ) { -+ return QApplication::topLevelWidgets(); -+} - --#ifdef USE_X11R6_XIM -- XIMCallback destroy; -- destroy.callback = (XIMProc) xim_destroy_callback; -- destroy.client_data = 0; -- if ( XSetIMValues( qt_xim, XNDestroyCallback, &destroy, (char *) 0 ) != 0 ) -- qWarning( "Xlib dosn't support destroy callback"); --#endif // USE_X11R6_XIM -- -- XIMStyles *styles = 0; -- XGetIMValues(qt_xim, XNQueryInputStyle, &styles, (char *) 0, (char *) 0); -- if ( styles ) { -- int i; -- for ( i = 0; !qt_xim_style && i < styles->count_styles; i++ ) { -- if ( styles->supported_styles[i] == xim_preferred_style ) { -- qt_xim_style = xim_preferred_style; -- break; -- } -- } -- // if the preferred input style couldn't be found, look for -- // Nothing -- for ( i = 0; !qt_xim_style && i < styles->count_styles; i++ ) { -- if ( styles->supported_styles[i] == (XIMPreeditNothing | -- XIMStatusNothing) ) { -- qt_xim_style = XIMPreeditNothing | XIMStatusNothing; -- break; -- } -- } -- // ... and failing that, None. -- for ( i = 0; !qt_xim_style && i < styles->count_styles; i++ ) { -- if ( styles->supported_styles[i] == (XIMPreeditNone | -- XIMStatusNone) ) { -- qt_xim_style = XIMPreeditNone | XIMStatusNone; -- break; -- } -- } - -- // qDebug("QApplication: using im style %lx", qt_xim_style); -- XFree( (char *)styles ); -- } -+/*! -+ This function replaces all QInputContext instances in the -+ application. The function's argument is the identifier name of -+ the newly selected input method. -+*/ -+void QApplication::changeAllInputContext( const QString &identifierName ) -+{ -+ QWidgetList *list = qApp->icHolderWidgets(); -+ QWidgetListIt it(*list); -+ while(it.current()) { -+ it.current()->changeInputContext( identifierName ); -+ ++it; -+ } -+ delete list; -+ -+ // defaultIM = identifierName ; // Change of defaultIM -- default input method -- may be enabled. -+} - -- if ( qt_xim_style ) { - --#ifdef USE_X11R6_XIM -- XUnregisterIMInstantiateCallback(appDpy, 0, 0, 0, -- (XIMProc) xim_create_callback, 0); --#endif // USE_X11R6_XIM -- -- QWidgetList *list= qApp->topLevelWidgets(); -- QWidgetListIt it(*list); -- QWidget * w; -- while( (w=it.current()) != 0 ) { -- ++it; -- w->createTLSysExtra(); -- } -- delete list; -- } else { -- // Give up -- qWarning( "No supported input style found." -- " See InputMethod documentation."); -- close_xim(); -- } -+/*! -+ \internal -+ This is an internal function, you should never call this. -+ -+ \sa QInputContext::imEventGenerated() -+*/ -+void QApplication::postIMEvent( QObject *receiver, QIMEvent *event ) -+{ -+ if ( event->type() == QEvent::IMCompose ) { -+ // enable event compression to reduce preedit flicker on fast -+ // typing -+ postEvent( receiver, event ); -+ } else { -+ // cancel queued preedit update -+ if ( event->type() == QEvent::IMEnd ) -+ removePostedEvents( receiver, QEvent::IMCompose ); -+ -+ // to avoid event receiving order inversion between QKeyEvent -+ // and QIMEvent, we must send IMStart and IMEnd via -+ // sendEvent(). -+ sendEvent( receiver, event ); -+ delete event; - } -+} -+ -+ -+/*! -+ This function returns the identifier name of the default input -+ method in this Application. The value is identical to the value of -+ QApplication::defaultIM. -+*/ -+QString QApplication::defaultInputMethod() -+{ -+ return QApplication::defaultIM; -+} -+ -+ -+#if !defined(QT_NO_IM_EXTENSIONS) -+/*! \internal -+ Creates the application input method. -+*/ -+void QApplication::create_im() -+{ -+#ifndef QT_NO_XIM -+ if ( ! qt_xim_preferred_style ) // no configured input style, use the default -+ qt_xim_preferred_style = xim_default_style; - #endif // QT_NO_XIM - } - -@@ -644,6 +650,43 @@ - /*! \internal - Closes the application input method. - */ -+void QApplication::close_im() -+{ -+ QWidgetList *list = qApp->icHolderWidgets(); -+ QWidgetListIt it(*list); -+ while(it.current()) { -+ it.current()->destroyInputContext(); -+ ++it; -+ } -+ delete list; -+} -+ -+#else -+ -+/*! \internal -+ Creates the application input method. -+*/ -+void QApplication::create_xim() -+{ -+#ifndef QT_NO_XIM -+ if ( ! qt_xim_preferred_style ) // no configured input style, use the default -+ qt_xim_preferred_style = xim_default_style; -+#endif // QT_NO_XIM -+ -+ QWidgetList *list= qApp->topLevelWidgets(); -+ QWidgetListIt it(*list); -+ QWidget * w; -+ while( (w=it.current()) != 0 ) { -+ ++it; -+ w->createTLSysExtra(); -+ } -+ delete list; -+} -+ -+ -+ /*! \internal -+ Closes the application input method. -+ */ - void QApplication::close_xim() - { - #ifndef QT_NO_XIM -@@ -651,7 +694,10 @@ - // XCloseIM( qt_xim ); - // We prefer a less serious memory leak - -- qt_xim = 0; -+ // if ( qt_xim ) -+ // qt_xim = 0; -+ -+#endif // QT_NO_XIM - QWidgetList *list = qApp->topLevelWidgets(); - QWidgetListIt it(*list); - while(it.current()) { -@@ -659,9 +705,8 @@ - ++it; - } - delete list; --#endif // QT_NO_XIM - } -- -+#endif - - /***************************************************************************** - Default X error handlers -@@ -1032,18 +1077,40 @@ - settings.readBoolEntry("/qt/useRtlExtensions", FALSE); - - #ifndef QT_NO_XIM -- if (xim_preferred_style == 0) { -+ if (qt_xim_preferred_style == 0) { - QString ximInputStyle = - settings.readEntry( "/qt/XIMInputStyle", - QObject::trUtf8( "On The Spot" ) ).lower(); - if ( ximInputStyle == "on the spot" ) -- xim_preferred_style = XIMPreeditCallbacks | XIMStatusNothing; -+ qt_xim_preferred_style = XIMPreeditCallbacks | XIMStatusNothing; - else if ( ximInputStyle == "over the spot" ) -- xim_preferred_style = XIMPreeditPosition | XIMStatusNothing; -+ qt_xim_preferred_style = XIMPreeditPosition | XIMStatusNothing; - else if ( ximInputStyle == "off the spot" ) -- xim_preferred_style = XIMPreeditArea | XIMStatusArea; -+ qt_xim_preferred_style = XIMPreeditArea | XIMStatusArea; - else if ( ximInputStyle == "root" ) -- xim_preferred_style = XIMPreeditNothing | XIMStatusNothing; -+ qt_xim_preferred_style = XIMPreeditNothing | XIMStatusNothing; -+ } -+#endif -+ -+#ifndef QT_NO_IM -+ /* -+ The identifier name of an input method is acquired from the -+ configuration file as a default. If a environment variable -+ "QT_IM_SWITCHER" is not empty it will overwrite the -+ configuration file. The "imsw-multi" becomes the default if the entry -+ is not configured. -+ */ -+ if ( getenv( "QT_IM_SWITCHER" ) ) -+ defaultIM = getenv( "QT_IM_SWITCHER" ); -+#ifndef QT_NO_IM_EXTENSIONS -+ else -+ defaultIM = settings.readEntry( "/qt/DefaultInputMethodSwitcher", "imsw-multi" ); -+#endif -+ -+ // defaultIM is restricted to be an IM-switcher. An IM-switcher -+ // has a 'imsw-' prefix -+ if ( ! defaultIM.startsWith( "imsw-" ) ) { -+ defaultIM = "imsw-multi"; - } - #endif - -@@ -1079,19 +1146,19 @@ - // Always use the locale codec, since we have no examples of non-local - // XIMs, and since we cannot get a sensible answer about the encoding - // from the XIM. -- input_mapper = QTextCodec::codecForLocale(); -+ qt_input_mapper = QTextCodec::codecForLocale(); - - } else { - if ( !qstricmp( data, "locale" ) ) -- input_mapper = QTextCodec::codecForLocale(); -+ qt_input_mapper = QTextCodec::codecForLocale(); - else -- input_mapper = QTextCodec::codecForName( data ); -+ qt_input_mapper = QTextCodec::codecForName( data ); - // make sure we have an input codec -- if( !input_mapper ) -- input_mapper = QTextCodec::codecForName( "ISO 8859-1" ); -+ if( !qt_input_mapper ) -+ qt_input_mapper = QTextCodec::codecForName( "ISO 8859-1" ); - } -- if ( input_mapper->mibEnum() == 11 ) // 8859-8 -- input_mapper = QTextCodec::codecForName( "ISO 8859-8-I"); -+ if ( qt_input_mapper->mibEnum() == 11 ) // 8859-8 -+ qt_input_mapper = QTextCodec::codecForName( "ISO 8859-8-I"); - if( data ) - XFree( (char *)data ); - } -@@ -1529,6 +1596,8 @@ - - #define XK_MISCELLANY - #define XK_LATIN1 -+#define XK_KOREAN -+#define XK_XKB_KEYS - #include - - // ### This should be static but it isn't because of the friend declaration -@@ -1619,10 +1688,7 @@ - //Ming-Che 10/10 - } else if ( arg == "-im" ) { - if ( ++i < argc ) -- ximServer = argv[i]; -- } else if ( arg == "-noxim" ) { -- noxim=TRUE; -- // -+ qt_ximServer = argv[i]; - } else if ( arg == "-iconic" ) { - mwIconic = !mwIconic; - } else if ( arg == "-ncols" ) { // xv and netscape use this name -@@ -1642,17 +1708,17 @@ - if ( ++i < argc ) { - QCString s = QCString(argv[i]).lower(); - if ( s == "onthespot" ) -- xim_preferred_style = XIMPreeditCallbacks | -- XIMStatusNothing; -+ qt_xim_preferred_style = XIMPreeditCallbacks | -+ XIMStatusNothing; - else if ( s == "overthespot" ) -- xim_preferred_style = XIMPreeditPosition | -- XIMStatusNothing; -+ qt_xim_preferred_style = XIMPreeditPosition | -+ XIMStatusNothing; - else if ( s == "offthespot" ) -- xim_preferred_style = XIMPreeditArea | -- XIMStatusArea; -+ qt_xim_preferred_style = XIMPreeditArea | -+ XIMStatusArea; - else if ( s == "root" ) -- xim_preferred_style = XIMPreeditNothing | -- XIMStatusNothing; -+ qt_xim_preferred_style = XIMPreeditNothing | -+ XIMStatusNothing; - } - #endif - } else if ( arg == "-cmap" ) { // xv uses this name -@@ -2100,34 +2166,13 @@ - QApplication::setFont( f ); - } - --#ifndef QT_NO_XIM -- if ( ! xim_preferred_style ) // no configured input style, use the default -- xim_preferred_style = xim_default_style; -- -- qt_xim = 0; -- QString ximServerName(ximServer); -- if (ximServer) -- ximServerName.prepend("@im="); -- else -- ximServerName = ""; -- -- if ( !XSupportsLocale() ) -- qWarning("Qt: Locales not supported on X server"); -- --#ifdef USE_X11R6_XIM -- else if ( XSetLocaleModifiers (ximServerName.ascii()) == 0 ) -- qWarning( "Qt: Cannot set locale modifiers: %s", -- ximServerName.ascii()); -- else if (! noxim) -- XRegisterIMInstantiateCallback(appDpy, 0, 0, 0, -- (XIMProc) xim_create_callback, 0); --#else // !USE_X11R6_XIM -- else if ( XSetLocaleModifiers ("") == 0 ) -- qWarning("Qt: Cannot set locale modifiers"); -- else if (! noxim) -- QApplication::create_xim(); --#endif // USE_X11R6_XIM --#endif // QT_NO_XIM -+#if !defined(QT_NO_IM) -+#if !defined(QT_NO_IM_EXTENSIONS) -+ QApplication::create_im(); -+#else -+ QApplication::create_xim(); -+#endif -+#endif - - #if defined (QT_TABLET_SUPPORT) - int ndev, -@@ -2376,9 +2421,12 @@ - XCloseDevice( appDpy, devEraser ); - #endif - --#if !defined(QT_NO_XIM) -- if ( qt_xim ) -- QApplication::close_xim(); -+#if !defined(QT_NO_IM) -+#if !defined(QT_NO_IM_EXTENSIONS) -+ QApplication::close_im(); -+#else -+ QApplication::close_xim(); -+#endif - #endif - - if ( qt_is_gui_used ) { -@@ -3237,77 +3285,59 @@ - } - } - -- int xkey_keycode = event->xkey.keycode; -- if ( XFilterEvent( event, -- keywidget ? keywidget->topLevelWidget()->winId() : None ) ) { -- if ( keywidget ) -- composingKeycode = xkey_keycode; // ### not documented in xlib -- --#ifndef QT_NO_XIM -- if ( event->type != XKeyPress || ! (qt_xim_style & XIMPreeditCallbacks) ) -- return 1; -- -- /* -- * The Solaris htt input method will transform a ClientMessage -- * event into a filtered KeyPress event, in which case our -- * keywidget is still zero. -- */ -- if ( ! keywidget ) { -- keywidget = (QETWidget*)QWidget::keyboardGrabber(); -- if ( keywidget ) { -- grabbed = TRUE; -- } else { -- if ( focus_widget ) -- keywidget = (QETWidget*)focus_widget; -- if ( !keywidget ) { -- if ( inPopupMode() ) // no focus widget, see if we have a popup -- keywidget = (QETWidget*) activePopupWidget(); -- else if ( widget ) -- keywidget = (QETWidget*)widget->topLevelWidget(); -- } -- } -- } -+#ifndef QT_NO_IM -+ // Filtering input events by the input context. It has to be taken -+ // place before any other key event consumers such as eventfilters -+ // and accelerators because some input methods require quite -+ // various key combination and sequences. It often conflicts with -+ // accelerators and so on, so we must give the input context the -+ // filtering opportunity first to ensure all input methods work -+ // properly regardless of application design. - -- /* -- if the composition string has been emptied, we need to send -- an IMEnd event. however, we have no way to tell if the user -- has cancelled input, or if the user has accepted the -- composition. -- -- so, we have to look for the next keypress and see if it is -- the 'commit' key press (keycode == 0). if it is, we deliver -- an IMEnd event with the final text, otherwise we deliver an -- IMEnd with empty text (meaning the user has cancelled the -- input). -- */ -- QInputContext *qic = -- (QInputContext *) keywidget->topLevelWidget()->topData()->xic; -- extern bool qt_compose_emptied; // qinputcontext_x11.cpp -- if ( qic && qic->composing && qic->focusWidget && qt_compose_emptied ) { -- XEvent event2; -- bool found = FALSE; -- if ( XCheckTypedEvent( QPaintDevice::x11AppDisplay(), -- XKeyPress, &event2 ) ) { -- if ( event2.xkey.keycode == 0 ) { -- // found a key event with the 'commit' string -- found = TRUE; -- XPutBackEvent( QPaintDevice::x11AppDisplay(), &event2 ); -- } -- } -+#ifndef QT_NO_IM_EXTENSIONS -+ if( keywidget && keywidget->isEnabled() && keywidget->isInputMethodEnabled() ) { -+#else -+ if( keywidget && keywidget->isEnabled() ) { -+#endif -+ if( ( event->type==XKeyPress || event->type==XKeyRelease ) && -+ sm_blockUserInput ) // block user interaction during session management -+ return TRUE; - -- if ( !found ) { -- // no key event, so the user must have cancelled the composition -- QIMEvent endevent( QEvent::IMEnd, QString::null, -1 ); -- QApplication::sendEvent( qic->focusWidget, &endevent ); -+ // for XIM handling -+ QInputContext *qic = keywidget->getInputContext(); -+ if( qic && qic->x11FilterEvent( keywidget, event ) ) -+ return TRUE; - -- qic->focusWidget = 0; -- } -+ // filterEvent() accepts QEvent *event rather than preexpanded key -+ // event attribute values. This is intended to pass other IM-related -+ // events in future. The IM-related events are supposed as -+ // QWheelEvent, QTabletEvent and so on. Other non IM-related events -+ // should not be forwarded to input contexts to prevent weird event -+ // handling. -+ if ( ( event->type == XKeyPress || event->type == XKeyRelease ) ) { -+ int code = -1; -+ int count = 0; -+ int state; -+ char ascii = 0; -+ QEvent::Type type; -+ QString text; -+ -+ keywidget->translateKeyEventInternal( event, count, text, -+ state, ascii, code, type, -+ FALSE, FALSE ); -+ -+ // both key press/release is required for some complex -+ // input methods. don't eliminate anything. -+ QKeyEvent keyevent( type, code, ascii, state, text, FALSE, count ); - -- qt_compose_emptied = FALSE; -+ if( qic && qic->filterEvent( &keyevent ) ) -+ return TRUE; - } --#endif // QT_NO_XIM -- -- return 1; -+ } else -+#endif // QT_NO_IM -+ { -+ if ( XFilterEvent( event, None ) ) -+ return TRUE; - } - - if ( qt_x11EventFilter(event) ) // send through app filter -@@ -3459,34 +3489,8 @@ - case XKeyRelease: - { - if ( keywidget && keywidget->isEnabled() ) { // should always exist --#ifndef QT_NO_XIM -- QInputContext *qic = -- (QInputContext *) keywidget->topLevelWidget()->topData()->xic; -- -- if ((qt_xim_style & XIMPreeditCallbacks) && event->xkey.keycode == 0 && -- qic && qic->composing && qic->focusWidget) { -- // input method has sent us a commit string -- QCString data(513); -- KeySym sym; // unused -- Status status; // unused -- QString text; -- int count = qic->lookupString( &(event->xkey), data, -- &sym, &status ); -- if ( count > 0 ) -- text = input_mapper->toUnicode( data, count ); -- -- // qDebug( "sending IMEnd with %d chars", text.length() ); -- QIMEvent endevent( QEvent::IMEnd, text, -1 ); -- QApplication::sendEvent( qic->focusWidget, &endevent ); -- -- qic->focusWidget = 0; -- qic->text = QString::null; -- } else --#endif // !QT_NO_XIM -- { -- // qDebug( "sending key event" ); -- keywidget->translateKeyEvent( event, grabbed ); -- } -+ // qDebug( "sending key event" ); -+ keywidget->translateKeyEvent( event, grabbed ); - } - break; - } -@@ -4781,6 +4785,92 @@ - 0x1005FF10, Qt::Key_F11, // hardcoded Sun F36 (labeled F11) - 0x1005FF11, Qt::Key_F12, // hardcoded Sun F37 (labeled F12) - -+ // International input method support keys -+ -+ // International & multi-key character composition -+ XK_Multi_key, Qt::Key_Multi_key, -+ XK_Codeinput, Qt::Key_Codeinput, -+ XK_SingleCandidate, Qt::Key_SingleCandidate, -+ XK_MultipleCandidate, Qt::Key_MultipleCandidate, -+ XK_PreviousCandidate, Qt::Key_PreviousCandidate, -+ -+ // Misc Functions -+ XK_Mode_switch, Qt::Key_Mode_switch, -+ //XK_script_switch, Qt::Key_script_switch, -+ XK_script_switch, Qt::Key_Mode_switch, -+ -+ // Japanese keyboard support -+ XK_Kanji, Qt::Key_Kanji, -+ XK_Muhenkan, Qt::Key_Muhenkan, -+ //XK_Henkan_Mode, Qt::Key_Henkan_Mode, -+ XK_Henkan_Mode, Qt::Key_Henkan, -+ XK_Henkan, Qt::Key_Henkan, -+ XK_Romaji, Qt::Key_Romaji, -+ XK_Hiragana, Qt::Key_Hiragana, -+ XK_Katakana, Qt::Key_Katakana, -+ XK_Hiragana_Katakana, Qt::Key_Hiragana_Katakana, -+ XK_Zenkaku, Qt::Key_Zenkaku, -+ XK_Hankaku, Qt::Key_Hankaku, -+ XK_Zenkaku_Hankaku, Qt::Key_Zenkaku_Hankaku, -+ XK_Touroku, Qt::Key_Touroku, -+ XK_Massyo, Qt::Key_Massyo, -+ XK_Kana_Lock, Qt::Key_Kana_Lock, -+ XK_Kana_Shift, Qt::Key_Kana_Shift, -+ XK_Eisu_Shift, Qt::Key_Eisu_Shift, -+ XK_Eisu_toggle, Qt::Key_Eisu_toggle, -+ //XK_Kanji_Bangou, Qt::Key_Kanji_Bangou, -+ //XK_Zen_Koho, Qt::Key_Zen_Koho, -+ //XK_Mae_Koho, Qt::Key_Mae_Koho, -+ XK_Kanji_Bangou, Qt::Key_Codeinput, -+ XK_Zen_Koho, Qt::Key_MultipleCandidate, -+ XK_Mae_Koho, Qt::Key_PreviousCandidate, -+ -+#ifdef XK_KOREAN -+ // Korean keyboard support -+ XK_Hangul, Qt::Key_Hangul, -+ XK_Hangul_Start, Qt::Key_Hangul_Start, -+ XK_Hangul_End, Qt::Key_Hangul_End, -+ XK_Hangul_Hanja, Qt::Key_Hangul_Hanja, -+ XK_Hangul_Jamo, Qt::Key_Hangul_Jamo, -+ XK_Hangul_Romaja, Qt::Key_Hangul_Romaja, -+ //XK_Hangul_Codeinput, Qt::Key_Hangul_Codeinput, -+ XK_Hangul_Codeinput, Qt::Key_Codeinput, -+ XK_Hangul_Jeonja, Qt::Key_Hangul_Jeonja, -+ XK_Hangul_Banja, Qt::Key_Hangul_Banja, -+ XK_Hangul_PreHanja, Qt::Key_Hangul_PreHanja, -+ XK_Hangul_PostHanja, Qt::Key_Hangul_PostHanja, -+ //XK_Hangul_SingleCandidate, Qt::Key_Hangul_SingleCandidate, -+ //XK_Hangul_MultipleCandidate, Qt::Key_Hangul_MultipleCandidate, -+ //XK_Hangul_PreviousCandidate, Qt::Key_Hangul_PreviousCandidate, -+ XK_Hangul_SingleCandidate, Qt::Key_SingleCandidate, -+ XK_Hangul_MultipleCandidate, Qt::Key_MultipleCandidate, -+ XK_Hangul_PreviousCandidate, Qt::Key_PreviousCandidate, -+ XK_Hangul_Special, Qt::Key_Hangul_Special, -+ //XK_Hangul_switch, Qt::Key_Hangul_switch, -+ XK_Hangul_switch, Qt::Key_Mode_switch, -+#endif // XK_KOREAN -+ -+ // dead keys -+ XK_dead_grave, Qt::Key_Dead_Grave, -+ XK_dead_acute, Qt::Key_Dead_Acute, -+ XK_dead_circumflex, Qt::Key_Dead_Circumflex, -+ XK_dead_tilde, Qt::Key_Dead_Tilde, -+ XK_dead_macron, Qt::Key_Dead_Macron, -+ XK_dead_breve, Qt::Key_Dead_Breve, -+ XK_dead_abovedot, Qt::Key_Dead_Abovedot, -+ XK_dead_diaeresis, Qt::Key_Dead_Diaeresis, -+ XK_dead_abovering, Qt::Key_Dead_Abovering, -+ XK_dead_doubleacute, Qt::Key_Dead_Doubleacute, -+ XK_dead_caron, Qt::Key_Dead_Caron, -+ XK_dead_cedilla, Qt::Key_Dead_Cedilla, -+ XK_dead_ogonek, Qt::Key_Dead_Ogonek, -+ XK_dead_iota, Qt::Key_Dead_Iota, -+ XK_dead_voiced_sound, Qt::Key_Dead_Voiced_Sound, -+ XK_dead_semivoiced_sound, Qt::Key_Dead_Semivoiced_Sound, -+ XK_dead_belowdot, Qt::Key_Dead_Belowdot, -+ XK_dead_hook, Qt::Key_Dead_Hook, -+ XK_dead_horn, Qt::Key_Dead_Horn, -+ - // Special multimedia keys - // currently only tested with MS internet keyboard - -@@ -4998,9 +5088,9 @@ - bool QETWidget::translateKeyEventInternal( const XEvent *event, int& count, - QString& text, - int& state, -- char& ascii, int& code, QEvent::Type &type, bool willRepeat ) -+ char& ascii, int& code, QEvent::Type &type, bool willRepeat, bool statefulTranslation ) - { -- QTextCodec *mapper = input_mapper; -+ QTextCodec *mapper = qt_input_mapper; - // some XmbLookupString implementations don't return buffer overflow correctly, - // so we increase the input buffer to allow for long strings... - // 256 chars * 2 bytes + 1 null-term == 513 bytes -@@ -5047,6 +5137,11 @@ - - if ( type == QEvent::KeyPress ) { - bool mb=FALSE; -+ // commit string handling is done by -+ // QXIMInputContext::x11FilterEvent() and are passed to -+ // widgets via QIMEvent regardless of XIM style, so the -+ // following code is commented out. -+#if 0 - if ( qt_xim ) { - QTLWExtra* xd = tlw->topData(); - QInputContext *qic = (QInputContext *) xd->xic; -@@ -5055,13 +5150,14 @@ - count = qic->lookupString(&xkeyevent, chars, &key, &status); - } - } -+#endif - if ( !mb ) { - count = XLookupString( &xkeyevent, - chars.data(), chars.size(), &key, 0 ); - } - if ( count && !keycode ) { -- keycode = composingKeycode; -- composingKeycode = 0; -+ keycode = qt_ximComposingKeycode; -+ qt_ximComposingKeycode = 0; - } - if ( key ) - keyDict->replace( keycode, (void*)key ); -@@ -5138,15 +5234,18 @@ - state = qt_x11_translateButtonState( keystate ); - - static int directionKeyEvent = 0; -- if ( qt_use_rtl_extensions && type == QEvent::KeyRelease ) { -+ static unsigned int lastWinId = 0; -+ if ( qt_use_rtl_extensions && type == QEvent::KeyRelease && statefulTranslation ) { - if (directionKeyEvent == Key_Direction_R || directionKeyEvent == Key_Direction_L ) { - type = QEvent::KeyPress; - code = directionKeyEvent; - chars[0] = 0; - directionKeyEvent = 0; -+ lastWinId = 0; - return TRUE; - } else { - directionKeyEvent = 0; -+ lastWinId = 0; - } - } - -@@ -5156,10 +5255,14 @@ - // (to figure out whether the Ctrl modifier is held while Shift is pressed, - // or Shift is held while Ctrl is pressed) since the 'state' doesn't tell - // us whether the modifier held is Left or Right. -- if (qt_use_rtl_extensions && type == QEvent::KeyPress) -+ if ( qt_use_rtl_extensions && type == QEvent::KeyPress && statefulTranslation ) - if (key == XK_Control_L || key == XK_Control_R || key == XK_Shift_L || key == XK_Shift_R) { -- if (!directionKeyEvent) -+ if (!directionKeyEvent) { - directionKeyEvent = key; -+ // This code exists in order to check that -+ // the event is occurred in the same widget. -+ lastWinId = winId(); -+ } - } else { - // this can no longer be a direction-changing accel. - // if any other key was pressed. -@@ -5173,7 +5276,7 @@ - // Qt keycodes between 128 and 255, but should rather use the - // QKeyEvent::text(). - // -- if ( key < 128 || (key < 256 && (!input_mapper || input_mapper->mibEnum()==4)) ) { -+ if ( key < 128 || (key < 256 && (!qt_input_mapper || qt_input_mapper->mibEnum()==4)) ) { - code = isprint((int)key) ? toupper((int)key) : 0; // upper-case key, if known - } else if ( key >= XK_F1 && key <= XK_F35 ) { - code = Key_F1 + ((int)key - XK_F1); // function keys -@@ -5224,8 +5327,8 @@ - chars[0] = 0; - } - -- if ( qt_use_rtl_extensions && type == QEvent::KeyPress ) { -- if ( directionKeyEvent ) { -+ if ( qt_use_rtl_extensions && type == QEvent::KeyPress && statefulTranslation ) { -+ if ( directionKeyEvent && lastWinId == winId() ) { - if ( key == XK_Shift_L && directionKeyEvent == XK_Control_L || - key == XK_Control_L && directionKeyEvent == XK_Shift_L ) { - directionKeyEvent = Key_Direction_L; -@@ -5403,8 +5506,34 @@ - translateKeyEventInternal( event, count, text, state, ascii, code, type ); - } - -+#ifndef QT_NO_IM -+ QInputContext *qic = getInputContext(); -+#endif -+ - // compress keys - if ( !text.isEmpty() && testWState(WState_CompressKeys) && -+#ifndef QT_NO_IM -+ // Ordinary input methods require discrete key events to work -+ // properly, so key compression has to be disabled when input -+ // context exists. -+ // -+ // And further consideration, some complex input method -+ // require all key press/release events discretely even if -+ // the input method awares of key compression and compressed -+ // keys are ordinary alphabets. For example, the uim project -+ // is planning to implement "combinational shift" feature for -+ // a Japanese input method, uim-skk. It will work as follows. -+ // -+ // 1. press "r" -+ // 2. press "u" -+ // 3. release both "r" and "u" in arbitrary order -+ // 4. above key sequence generates "Ru" -+ // -+ // Of course further consideration about other participants -+ // such as key repeat mechanism is required to implement such -+ // feature. -+ ! qic && -+#endif // QT_NO_IM - // do not compress keys if the key event we just got above matches - // one of the key ranges used to compute stopCompression - ! ( ( code >= Key_Escape && code <= Key_SysReq ) || -@@ -5463,7 +5592,12 @@ - - // autorepeat compression makes sense for all widgets (Windows - // does it automatically .... ) -- if ( event->type == XKeyPress && text.length() <= 1 ) { -+ if ( event->type == XKeyPress && text.length() <= 1 -+#ifndef QT_NO_IM -+ // input methods need discrete key events -+ && ! qic -+#endif// QT_NO_IM -+ ) { - XEvent dummy; - - for (;;) { ---- src/kernel/qevent.cpp -+++ src/kernel/qevent.cpp -@@ -732,6 +732,10 @@ - the result of a known key (e.g. it may be the result of a compose - sequence or a keyboard macro, or due to key event compression). - -+ Applications should not use the Qt latin 1 keycodes between 128 -+ and 255, but should rather use the QKeyEvent::text(). This is -+ mainly for compatibility. -+ - \sa QWidget::setKeyCompression() - */ - ---- src/kernel/qinputcontext.cpp -+++ src/kernel/qinputcontext.cpp -@@ -0,0 +1,856 @@ -+/**************************************************************************** -+** $Id: qinputcontext.cpp,v 1.6 2004/06/22 06:47:30 daisuke Exp $ -+** -+** Implementation of QInputContext class -+** -+** Copyright (C) 2000-2003 Trolltech AS. All rights reserved. -+** -+** This file is part of the kernel module of the Qt GUI Toolkit. -+** -+** This file may be distributed under the terms of the Q Public License -+** as defined by Trolltech AS of Norway and appearing in the file -+** LICENSE.QPL included in the packaging of this file. -+** -+** This file may be distributed and/or modified under the terms of the -+** GNU General Public License version 2 as published by the Free Software -+** Foundation and appearing in the file LICENSE.GPL included in the -+** packaging of this file. -+** -+** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition -+** licenses for Unix/X11 may use this file in accordance with the Qt Commercial -+** License Agreement provided with the Software. -+** -+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -+** -+** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for -+** information about Qt Commercial License Agreements. -+** See http://www.trolltech.com/qpl/ for QPL licensing information. -+** See http://www.trolltech.com/gpl/ for GPL licensing information. -+** -+** Contact info@trolltech.com if any conditions of this licensing are -+** not clear to you. -+** -+**********************************************************************/ -+ -+//#define QT_NO_IM_PREEDIT_RELOCATION -+ -+#include "qinputcontext.h" -+ -+#ifndef QT_NO_IM -+ -+#include "qplatformdefs.h" -+ -+#include "qapplication.h" -+#include "qwidget.h" -+#include "qpopupmenu.h" -+ -+#include -+#include -+ -+class QInputContextPrivate -+{ -+public: -+ QInputContextPrivate() -+ : holderWidget( 0 ), composingWidget( 0 ), hasFocus( FALSE ), -+ isComposing( FALSE ) -+#if !defined(QT_NO_IM_PREEDIT_RELOCATION) -+ , preeditString( QString::null ), -+ cursorPosition( -1 ), selLength ( 0 ) -+#endif -+ {} -+ -+ QWidget *holderWidget; // widget to which QInputContext instance belongs. -+ QWidget *composingWidget; -+ bool hasFocus; -+ bool isComposing; -+ -+ void updateComposingState( const QString &text, -+ int newCursorPosition, int newSelLength ) { -+#if !defined(QT_NO_IM_PREEDIT_RELOCATION) -+ preeditString = text; -+ cursorPosition = newCursorPosition; -+ selLength = newSelLength; -+#endif -+ } -+ -+ void resetComposingState() { -+ isComposing = FALSE; -+#if !defined(QT_NO_IM_PREEDIT_RELOCATION) -+ preeditString = QString::null; -+ cursorPosition = -1; -+ selLength = 0; -+#endif -+ } -+ -+#if !defined(QT_NO_IM_PREEDIT_RELOCATION) -+ QString preeditString; -+ int cursorPosition; -+ int selLength; -+#endif -+}; -+ -+ -+// UPDATED COMMENT REQUIRED -- 2004-07-08 YamaKen -+/*! -+ \class QInputContext qinputcontext.h -+ \brief The QInputContext class abstracts the input method dependent data and composing state. -+ -+ \ingroup i18n -+ -+ An input method is responsible to input complex text that cannot -+ be inputted via simple keymap. It converts a sequence of input -+ events (typically key events) into a text string through the input -+ method specific converting process. The class of the processes are -+ widely ranging from simple finite state machine to complex text -+ translator that pools a whole paragraph of a text with text -+ editing capability to perform grammar and semantic analysis. -+ -+ To abstract such different input method specific intermediate -+ information, Qt offers the QInputContext as base class. The -+ concept is well known as 'input context' in the input method -+ domain. an input context is created for a text widget in response -+ to a demand. It is ensured that an input context is prepared for -+ an input method before input to a text widget. -+ -+ Multiple input contexts that is belonging to a single input method -+ may concurrently coexist. Suppose multi-window text editor. Each -+ text widget of window A and B holds different QInputContext -+ instance which contains different state information such as -+ partially composed text. -+ -+ \section1 Groups of functions: -+ -+ \table -+ \header \i Context \i Functions -+ -+ \row \i Receiving information \i -+ x11FilterEvent(), -+ filterEvent(), -+ setMicroFocus(), -+ mouseHandler() -+ -+ \row \i Sending back composed text \i -+ sendIMEvent(), -+ -+ \row \i State change notification \i -+ setFocus(), -+ unsetFocus(), -+ reset() -+ -+ \row \i Context information \i -+ identifierName(), -+ language(), -+ font(), -+ isComposing(), -+ -+ \endtable -+ -+ -+ \section1 Sharing input context between text widgets -+ -+ Any input context can be shared between several text widgets to -+ reduce resource consumption. In ideal case, each text widgets -+ should be allocated dedicated input context. But some complex -+ input contexts require slightly heavy resource such as 100 -+ kilobytes of memory. It prevents quite many text widgets from -+ being used concurrently. -+ -+ To resolve such problem, we can share an input context. There is -+ one 'input context holder widget' per text widgets that shares -+ identical input context. In this model, the holder widget owns the -+ shared input context. Other text widgets access the input context -+ via QApplication::locateICHolderWidget(). But the access -+ convention is transparently hidden into QWidget, so developers are -+ not required to aware of it. -+ -+ What developer should know is only the mapping function -+ QApplication::locateICHolderWidget(). It accepts a widget as -+ argument and returns its holder widget. Default implementation -+ returns the top-level widget of the widget as reasonable -+ assumption. But some applications should reimplement the function -+ to fit application specific usability. See -+ QApplication::locateICHolderWidget() for further information. -+ -+ -+ \section1 Preedit preservation -+ -+ As described above, input contexts have wide variety of amount of -+ the state information in accordance with belonging input -+ method. It is ranging from 2-3 keystrokes of sequence in -+ deterministic input methods to hundreds of keystrokes with -+ semantic text refinement in complex input methods such as ordinary -+ Japanese input method. The difference requires the different reset -+ policies in losing input focus. -+ -+ The former simple input method case, users will prefer resetting -+ the context to back to the neutral state when something -+ happened. Suppose a web browsing. The user scroll the page by -+ scrollbar after he or she has typed a half of the valid key -+ sequence into a text widget. In the case, the input context should -+ be reset in losing focus when he or she has dragged the -+ scrollbar. He or she will be confused if the input context is -+ still preserved until focused back to the text widget because he -+ or she will restart typing with first key of the sequence as a -+ habitual operation. -+ -+ On the other hand, we should choose completely different policy -+ for the latter complex input method case. Suppose same situation -+ as above but he or she is using a complex input method. In the -+ case, he or she will be angry if the input context has been lost -+ when he or she has dragged the scrollbar because the input context -+ contained a valuably composed text made up by considerable input -+ cost. So we should not reset the input context in the case. And -+ the input context should be preserved until focused back to the -+ text widget. This behavior is named as 'preedit preservation'. -+ -+ The two policies can be switched by calling or not calling reset() -+ in unsetFocus(). Default implementation of unsetFocus() calls -+ reset() to fit the simple input methods. The implementation is -+ expressed as 'preedit preservation is disabled'. -+ -+ -+ \section1 Preedit relocation -+ -+ Although the most case of the preedit preservation problem for -+ complex input methods is resolved as described above, there is a -+ special case. Suppose the case that matches all of the following -+ conditions. -+ -+ \list -+ -+ \i a input focus has been moved from a text widget to another text -+ widget directly -+ -+ \i the input context is shared between the two text widgets -+ -+ \i preedit preservation is enabled for the input context -+ -+ \endlist -+ -+ In the case, there are the following two requirements that -+ contradicts each other. The input context sharing causes it. -+ -+ \list -+ -+ \i the input context has to be reset to prepare to input to the -+ newly focused text widget -+ -+ \i the input context has to be preserved until focused back to the -+ previous text widget -+ -+ \endlist -+ -+ A intrinsic feature named 'preedit relocation' is available to -+ compromise the requirements. If the feature is enabled for the -+ input context, it is simply moved to the new text widget with the -+ preedit string. The user continues the input on the new text -+ widget, or relocate it to another text widget. The preedit of -+ previous text widget is automatically cleared to back to the -+ neutral state of the widget. -+ -+ This strange behavior is just a compromise. As described in -+ previous section, complex input method user should not be exposed -+ to the risk losing the input context because it contains valuable -+ long text made up with considerable input cost. The user will -+ immediately focus back to the previous text widget to continue the -+ input in the correct text widget if the preedit relocation -+ occurred. The feature is mainly existing as safety. -+ -+ The feature properly works even if the focus is moved as -+ following. Input method developers are not required to be aware of -+ the relocation protocol since QInputContext transparently handles -+ it. -+ -+ a text widget -> a non-text widget -> another text widget -+ -+ To enable the preedit relocation feature, the input context class -+ have to reimplement isPreeditRelocationEnabled() as returns TRUE. -+ The implementation requires that the preedit preservation is also -+ enabled since preedit relocation is a special case of the preedit -+ preservation. If the preedit relocation is disabled, the input -+ context is simply reset in the relocation case. -+ -+ -+ \section1 Input context instanciation -+ \section1 Input method switching -+ -+ \section1 Text widget implementor's guide -+ -+ Add following code fragment into createPopupMenu() to add input -+ method dependent submenus. -+ -+ \code -+ #ifndef QT_NO_IM -+ QInputContext *qic = getInputContext(); -+ if ( qic ) -+ qic->addMenusTo( popup ); -+ #endif -+ \endcode -+ -+ \sa QInputContextPlugin, QInputContextFactory, QApplication::locateICHolderWidget(), QApplication::defaultInputMethod() -+*/ -+ -+ -+/*! -+ Constructs an input context. -+ -+ holderWidget is set immediately after this constructor has been -+ returned on the X11 platform. -+*/ -+QInputContext::QInputContext( QObject *parent ) -+ : QObject( parent ) -+{ -+ d = new QInputContextPrivate; -+} -+ -+ -+/*! -+ Destroys the input context. -+*/ -+QInputContext::~QInputContext() -+{ -+ delete d; -+} -+ -+#if defined(Q_WS_X11) -+/*! -+ \internal -+ Returns the owner of this input context. Ordinary input methods -+ should not call this function directly to keep platform -+ independence and flexible configuration possibility. -+ -+ The return value may differ from focusWidget() if the input -+ context is shared between several text widgets. -+ -+ \sa setHolderWidget(), focusWidget() -+*/ -+QWidget *QInputContext::holderWidget() const -+{ -+ return d->holderWidget; -+} -+ -+/*! -+ \internal -+ Sets the owner of this input context. Ordinary input methods -+ must not call this function directly. -+ -+ \sa holderWidget() -+*/ -+void QInputContext::setHolderWidget( QWidget *w ) -+{ -+ d->holderWidget = w; -+} -+ -+/*! -+ \internal -+ Returns the widget that has an input focus for this input -+ context. Ordinary input methods should not call this function -+ directly to keep platform independence and flexible configuration -+ possibility. -+ -+ The return value may differ from holderWidget() if the input -+ context is shared between several text widgets. -+ -+ \sa setFocusWidget(), holderWidget() -+*/ -+QWidget *QInputContext::focusWidget() const -+{ -+ return d->hasFocus ? d->composingWidget : 0; -+} -+ -+ -+/*! -+ \internal -+ Sets the widget that has an input focus for this input -+ context. Ordinary input methods must not call this function -+ directly. -+ -+ \sa focusWidget() -+*/ -+void QInputContext::setFocusWidget( QWidget *w ) -+{ -+ if ( w ) { -+ bool isFocusingBack = ( w == d->composingWidget ); -+ bool isPreeditRelocation = ( ! isFocusingBack && isComposing() && -+ d->composingWidget ); -+ // invoke sendIMEventInternal() rather than sendIMEvent() to -+ // avoid altering the composing state -+ if ( isPreeditRelocation == TRUE ) { -+ // clear preedit of previously focused text -+ // widget. preserved preedit may be exist even if -+ // isPreeditRelocationEnabled() == FALSE. -+ sendIMEventInternal( QEvent::IMEnd ); -+ } -+ d->composingWidget = w; // changes recipient of QIMEvent -+ if ( isPreeditRelocation == TRUE ) { -+#if !defined(QT_NO_IM_PREEDIT_RELOCATION) -+ if ( isPreeditRelocationEnabled() ) { -+ // copy preedit state to the widget that gaining focus -+ sendIMEventInternal( QEvent::IMStart ); -+ sendIMEventInternal( QEvent::IMCompose, d->preeditString, -+ d->cursorPosition, d->selLength ); -+ } else -+#endif -+ { -+ // reset input context when the shared context has -+ // focused on another text widget -+ reset(); -+ } -+ } -+ } -+ d->hasFocus = w ? TRUE : FALSE; -+} -+ -+ -+/*! -+ \internal -+ This function is called from QWidget to keep input state -+ consistency. Ordinary input method must not call this function -+ directly. -+*/ -+void QInputContext::releaseComposingWidget( QWidget *w ) -+{ -+ if ( d->composingWidget == w ) { -+ d->composingWidget = 0; -+ d->hasFocus = FALSE; -+ } -+} -+#endif // Q_WS_X11 -+ -+/*! -+ \internal -+ This function can be reimplemented in a subclass as returning TRUE -+ if you want making your input method enable the preedit -+ relocation. See the description for preedit relocation of -+ QInputContext. -+ -+ /sa QInputContext -+*/ -+bool QInputContext::isPreeditRelocationEnabled() -+{ -+ return FALSE; -+} -+ -+/*! -+ This function indicates whether IMStart event had been sent to the -+ text widget. It is ensured that an input context can send IMCompose -+ or IMEnd event safely if this function returned TRUE. -+ -+ The state is automatically being tracked through sendIMEvent(). -+ -+ \sa sendIMEvent() -+*/ -+bool QInputContext::isComposing() const -+{ -+ return d->isComposing; -+} -+ -+ -+/*! -+ This function can be reimplemented in a subclass to filter input -+ events. -+ -+ Return TRUE if the \a event has been consumed. Otherwise, the -+ unfiltered \a event will be forwarded to widgets as ordinary -+ way. Although the input events have accept() and ignore() -+ methods, leave it untouched. -+ -+ \a event is currently restricted to QKeyEvent. But some input -+ method related events such as QWheelEvent or QTabletEvent may be -+ added in future. -+ -+ The filtering opportunity is always given to the input context as -+ soon as possible. It has to be taken place before any other key -+ event consumers such as eventfilters and accelerators because some -+ input methods require quite various key combination and -+ sequences. It often conflicts with accelerators and so on, so we -+ must give the input context the filtering opportunity first to -+ ensure all input methods work properly regardless of application -+ design. -+ -+ Ordinary input methods require discrete key events to work -+ properly, so Qt's key compression is always disabled for any input -+ contexts. -+ -+ \sa QKeyEvent, x11FilterEvent() -+*/ -+bool QInputContext::filterEvent( const QEvent *event ) -+{ -+ return FALSE; -+} -+ -+ -+/*! -+ \fn void QInputContext::deletionRequested() -+ -+ Emit this signal when a fatal error has been caused in the input -+ context. The input context will be deleted by the owner which is -+ usually the holder widget. -+*/ -+ -+/*! -+ \fn void QInputContext::imEventGenerated( QObject *receiver, QIMEvent *e ) -+ -+ \internal -+ This signal is emitted when the user has sent a QIMEvent through -+ sendIMEvent(). Ordinary input methods should not emit this signal -+ directly. -+ -+ \a receiver is a platform dependent destination of the \a e. -+ -+ \sa QIMEvent, sendIMEvent(), sendIMEventInternal(), -+*/ -+ -+/*! -+ \internal -+ Sends a QIMEvent to the client via imEventGenerated() -+ signal. Ordinary input method should not call this function -+ directly. -+ -+ \sa QIMEvent, QIMComposeEvent, sendIMEvent(), imEventGenerated() -+*/ -+void QInputContext::sendIMEventInternal( QEvent::Type type, -+ const QString &text, -+ int cursorPosition, int selLength ) -+{ -+ QObject *receiver = 0; -+ QIMEvent *event = 0; -+ -+#if defined(Q_WS_X11) -+ receiver = d->composingWidget; -+#elif defined(Q_WS_QWS) -+ // just a placeholder -+#endif -+ if ( ! receiver ) -+ return; -+ -+ if ( type == QEvent::IMStart ) { -+ qDebug( "sending IMStart with %d chars to %p", -+ text.length(), receiver ); -+ event = new QIMEvent( type, text, cursorPosition ); -+ } else if ( type == QEvent::IMEnd ) { -+ qDebug( "sending IMEnd with %d chars to %p, text=%s", -+ text.length(), receiver, (const char*)text.local8Bit() ); -+ event = new QIMEvent( type, text, cursorPosition ); -+ } else if ( type == QEvent::IMCompose ) { -+ qDebug( "sending IMCompose to %p with %d chars, cpos=%d, sellen=%d, text=%s", -+ receiver, text.length(), cursorPosition, selLength, -+ (const char*)text.local8Bit() ); -+ event = new QIMComposeEvent( type, text, cursorPosition, selLength ); -+ } -+ -+ if ( event ) -+ emit imEventGenerated( receiver, event ); -+} -+ -+ -+/*! -+ Call this function to send QIMEvent to the text widget. This -+ function constructs a QIMEvent based on the arguments and send it -+ to the appropriate widget. Ordinary input method should not -+ reimplement this function. -+ -+ \a type is either \c QEvent::IMStart or \c QEvent::IMCompose or \c -+ QEvent::IMEnd. You have to send a \c QEvent::IMStart to start -+ composing, then send several \c QEvent::IMCompose to update the -+ preedit of the widget, and finalize the composition with sending -+ \c QEvent::IMEnd. -+ -+ \c QEvent::IMStart should always be sent without arguments as: -+ \code -+ sendIMEvent( QEvent::IMStart ) -+ \endcode -+ -+ And \c QEvent::IMCompose can be sent without cursor: -+ \code -+ sendIMEvent( QEvent::IMCompose, QString( "a text" ) ) -+ \endcode -+ -+ Or optionally with cursor with \a cursorPosition: -+ \code -+ sendIMEvent( QEvent::IMCompose, QString( "a text with cursor" ), 12 ) -+ \endcode -+ Note that \a cursorPosition also specifies microfocus position. -+ -+ Or optionally with selection text: -+ \code -+ sendIMEvent( QEvent::IMCompose, QString( "a text with selection" ), 12, 9 ) -+ \endcode -+ \a cursorPosition and \a selLength must be within the \a text. The -+ \a cursorPosition also specifies microfocus position in the case: -+ -+ \c QEvent::IMEnd can be sent without arguments to terminate the -+ composition with null string: -+ \code -+ sendIMEvent( QEvent::IMEnd ) -+ \endcode -+ -+ Or optionally accepts \a text to commit a string: -+ \code -+ sendIMEvent( QEvent::IMEnd, QString( "a text" ) ) -+ \endcode -+ -+ \sa QIMEvent, QIMComposeEvent, setMicroFocus() -+*/ -+void QInputContext::sendIMEvent( QEvent::Type type, const QString &text, -+ int cursorPosition, int selLength ) -+{ -+#if defined(Q_WS_X11) -+ if ( !focusWidget() ) -+ return; -+#endif -+ -+ if ( type == QEvent::IMStart ) { -+ sendIMEventInternal( type, text, cursorPosition, selLength ); -+ d->isComposing = TRUE; -+ } else if ( type == QEvent::IMEnd ) { -+ d->resetComposingState(); -+ sendIMEventInternal( type, text, cursorPosition, selLength ); -+ } else if ( type == QEvent::IMCompose ) { -+ d->updateComposingState( text, cursorPosition, selLength ); -+ sendIMEventInternal( type, text, cursorPosition, selLength ); -+ } -+} -+ -+ -+/*! -+ This function can be reimplemented in a subclass to detect -+ that the input context has been focused on. -+ -+ The input context will receive input events through -+ x11FilterEvent() and filterEvent() after setFocus() until -+ unsetFocus() has been called. -+ -+ an input context is ensured that setFocus() is called exactly once -+ until unsetFocus() has been called even if preedit relocation has -+ occurred. This means that an input focus will survive between -+ several widgets that sharing the input context. -+ -+ On the X11 platform, focusWidget is already set before this -+ function has been called. -+ -+ \sa unsetFocus() -+*/ -+void QInputContext::setFocus() -+{ -+} -+ -+ -+/*! -+ This function can be reimplemented in a subclass to detect -+ that the input context has lost the focus. -+ -+ an input context is ensured that unsetFocus() is not called during -+ preedit relocation. This means that an input focus will survive -+ between several widgets that sharing the input context. -+ -+ Default implementation that calls reset() is sufficient for simple -+ input methods. You can override this function to alter the -+ behavior. For example, most Japanese input contexts should not be -+ reset on losing focus. The context sometimes contains a whole -+ paragraph and has minutes of lifetime different to ephemeral one -+ in other languages. The piled input context should be survived -+ until focused again since Japanese user naturally expects so. -+ -+ On the X11 platform, focusWidget is valid until this function has -+ been returned. -+ -+ \sa setFocus() -+*/ -+void QInputContext::unsetFocus() -+{ -+ reset(); -+} -+ -+ -+/*! -+ This function can be implemented in a subclass to handle -+ microfocus changes. -+ -+ 'microfocus' stands for the input method focus point in the -+ preedit (XIM "spot" point) for complex language input handling. It -+ can be used to place auxiliary GUI widgets such as candidate -+ selection window. -+ -+ \a x, \a y, \a w and \a h represents the position and size of the -+ cursor in the preedit string. \a f is the font on the location of -+ the cursor. -+*/ -+void QInputContext::setMicroFocus( int x, int y, int w, int h, QFont *f ) -+{ -+} -+ -+ -+/*! -+ This function can be reimplemented in a subclass to handle mouse -+ presses/releases/doubleclicks/moves within the preedit text. You -+ can use the function to implement mouse-oriented user interface -+ such as text selection or popup menu for candidate selection. -+ -+ The parameter \a x is the offset within the string that was sent -+ with the IMCompose event. The alteration boundary of \a x is -+ ensured as character boundary of preedit string accurately. -+ -+ \a type is either \c QEvent::MouseButtonPress or \c -+ QEvent::MouseButtonRelease or \c QEvent::MouseButtonDblClick or \c -+ QEvent::MouseButtonMove. Refer \a button and \a state to determine -+ what operation has performed. -+ -+ The method interface is imported from -+ QWSInputMethod::mouseHandler() of Qt/Embedded 2.3.7 and extended -+ for desktop system. -+ */ -+void QInputContext::mouseHandler( int x, QEvent::Type type, -+ Qt::ButtonState button, -+ Qt::ButtonState state ) -+{ -+ // Default behavior for simple ephemeral input contexts. Some -+ // complex input contexts should not be reset here. -+ if ( type == QEvent::MouseButtonPress || -+ type == QEvent::MouseButtonDblClick ) -+ reset(); -+} -+ -+ -+/*! -+ Returns the font of the current input widget -+ */ -+QFont QInputContext::font() const -+{ -+ if ( !focusWidget() ) -+ return QApplication::font(); //### absolutely last resort -+ -+ return focusWidget()->font(); -+} -+ -+ -+/*! -+ This function can be reimplemented in a subclass to reset the -+ state of the input method. -+ -+ This function is called by several widgets to reset input -+ state. For example, a text widget call this function before -+ inserting a text to make widget ready to accept a text. -+ -+ Default implementation is sufficient for simple input method. You -+ can override this function to reset external input method engines -+ in complex input method. In the case, call QInputContext::reset() -+ to ensure proper termination of inputting. -+ -+ You must not send any QIMEvent except empty IMEnd event using -+ QInputContext::reset() at reimplemented reset(). It will break -+ input state consistency. -+*/ -+void QInputContext::reset() -+{ -+ if ( isComposing() ) -+ sendIMEvent( QEvent::IMEnd ); -+} -+ -+ -+/*! -+ This function must be implemented in any subclasses to return the -+ identifier name of the input method. -+ -+ Return value is the name to identify and specify input methods for -+ the input method switching mechanism and so on. The name has to be -+ consistent with QInputContextPlugin::keys(). The name has to -+ consist of ASCII characters only. -+ -+ There are two different names with different responsibility in the -+ input method domain. This function returns one of them. Another -+ name is called 'display name' that stands for the name for -+ endusers appeared in a menu and so on. -+ -+ \sa QInputContextPlugin::keys(), QInputContextPlugin::displayName() -+*/ -+QString QInputContext::identifierName() -+{ -+ return ""; -+} -+ -+ -+/*! -+ This function must be implemented in any subclasses to return a -+ language code (e.g. "zh_CN", "zh_TW", "zh_HK", "ja", "ko", ...) -+ of the input context. If the input context can handle multiple -+ languages, return the currently used one. The name has to be -+ consistent with QInputContextPlugin::language(). -+ -+ This information will be used by language tagging feature in -+ QIMEvent. It is required to distinguish unified han characters -+ correctly. It enables proper font and character code -+ handling. Suppose CJK-awared multilingual web browser -+ (that automatically modifies fonts in CJK-mixed text) and XML editor -+ (that automatically inserts lang attr). -+ -+ \sa QInputContextPlugin::language() -+*/ -+QString QInputContext::language() -+{ -+ return ""; -+} -+ -+ -+#if (QT_VERSION-0 >= 0x040000) -+/*! -+ This is a preliminary interface for Qt4 -+ */ -+QList QInputContext::actions() -+{ -+} -+#else -+/*! -+ This function can be reimplemented in a subclass to provide input -+ method dependent popup menus. Return 0 if the menus are -+ unnecessary. -+ -+ Ownership of the object and children are transferred to the -+ caller, and the result must not be called -+ setAutoDelete(). QInputContextMenu::title is used for label text -+ of the popup menu as submenu. -+ -+ \sa addMenusTo() -+*/ -+QPtrList *QInputContext::menus() -+{ -+ return 0; -+} -+#endif -+ -+/*! -+ Appends input method dependent submenus into \a popup. A separator -+ is also inserted into \a popup if \a action is InsertSeparator. -+ -+ This is an utility function only for convenience in limited -+ situation. This function is used by input context owner such as -+ text widgets to add the submenus to its own context menu. If you -+ want to insert the submenus in more flexible way, use -+ QInputContext::menus() manually. \a popup is not restricted to -+ context menu of a text widget. For example, the owner may be a -+ input method menu of Qtopia taskbar in Qt/Embedded platform. -+ -+ \sa menus(), QInputContextMenu::Action -+*/ -+void QInputContext::addMenusTo( QPopupMenu *popup, QInputContextMenu::Action action ) -+{ -+ if ( ! popup ) -+ return; -+ -+ QPtrList *imMenus = menus(); -+ if ( imMenus ) { -+ if ( action == QInputContextMenu::InsertSeparator ) -+ popup->insertSeparator(); -+ for ( QPtrList::Iterator it = imMenus->begin(); -+ it != imMenus->end(); -+ ++it ) { -+ QInputContextMenu *imMenu = *it; -+ popup->insertItem( imMenu->title, imMenu->popup ); -+ } -+ imMenus->clear(); -+ delete imMenus; -+ } -+} -+ -+#endif //Q_NO_IM ---- src/kernel/qinputcontext.h -+++ src/kernel/qinputcontext.h -@@ -0,0 +1,143 @@ -+/**************************************************************************** -+** $Id: qinputcontext.h,v 1.8 2004/06/22 06:47:30 daisuke Exp $ -+** -+** Definition of QInputContext -+** -+** Copyright (C) 1992-2002 Trolltech AS. All rights reserved. -+** -+** This file is part of the kernel module of the Qt GUI Toolkit. -+** -+** This file may be distributed under the terms of the Q Public License -+** as defined by Trolltech AS of Norway and appearing in the file -+** LICENSE.QPL included in the packaging of this file. -+** -+** This file may be distributed and/or modified under the terms of the -+** GNU General Public License version 2 as published by the Free Software -+** Foundation and appearing in the file LICENSE.GPL included in the -+** packaging of this file. -+** -+** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition -+** licenses may use this file in accordance with the Qt Commercial License -+** Agreement provided with the Software. -+** -+** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE -+** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. -+** -+** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for -+** information about Qt Commercial License Agreements. -+** See http://www.trolltech.com/qpl/ for QPL licensing information. -+** See http://www.trolltech.com/gpl/ for GPL licensing information. -+** -+** Contact info@trolltech.com if any conditions of this licensing are -+** not clear to you. -+** -+**********************************************************************/ -+ -+#ifndef QINPUTCONTEXT_H -+#define QINPUTCONTEXT_H -+ -+#ifndef QT_NO_IM -+ -+#ifndef QT_H -+#include "qobject.h" -+#include "qglobal.h" -+#include "qevent.h" -+#include "qstring.h" -+#if (QT_VERSION-0 >= 0x040000) -+#include "qlist.h" -+#include "qaction.h" -+#else -+#include "qptrlist.h" -+#endif -+#endif -+ -+class QWidget; -+class QFont; -+class QPopupMenu; -+class QInputContextPrivate; -+ -+ -+struct QInputContextMenu { -+ enum Action { -+ NoSeparator, -+ InsertSeparator -+ }; -+#if !(QT_VERSION-0 >= 0x040000) -+ QString title; -+ QPopupMenu *popup; -+#endif -+}; -+ -+ -+class QInputContext : public QObject -+{ -+ Q_OBJECT -+public: -+ QInputContext( QObject *parent = 0 ); -+ virtual ~QInputContext(); -+ -+ virtual QString identifierName(); -+ virtual QString language(); -+ -+#if defined(Q_WS_X11) -+ virtual bool x11FilterEvent( QWidget *keywidget, XEvent *event ); -+#endif // Q_WS_X11 -+ virtual bool filterEvent( const QEvent *event ); -+ virtual void reset(); -+ -+ virtual void setFocus(); -+ virtual void unsetFocus(); -+ virtual void setMicroFocus( int x, int y, int w, int h, QFont *f = 0 ); -+ virtual void mouseHandler( int x, QEvent::Type type, -+ Qt::ButtonState button, Qt::ButtonState state ); -+ virtual QFont font() const; -+ virtual bool isComposing() const; -+ virtual bool isPreeditRelocationEnabled(); -+ -+#if (QT_VERSION-0 >= 0x040000) -+ virtual QList actions(); -+ void addActionsTo( QMenu *menu, QInputContextMenu::Action action = QInputContextMenu::InsertSeparator ); -+#else -+ virtual QPtrList *menus(); -+ void addMenusTo( QPopupMenu *popup, QInputContextMenu::Action action = QInputContextMenu::InsertSeparator ); -+#endif -+ -+#if defined(Q_WS_X11) -+ // these functions are not recommended for ordinary use -+ virtual QWidget *focusWidget() const; -+ virtual QWidget *holderWidget() const; -+ -+ // these functions must not be used by ordinary input method -+ virtual void setFocusWidget( QWidget *w ); -+ virtual void setHolderWidget( QWidget *w ); -+ virtual void releaseComposingWidget( QWidget *w ); -+#endif -+ -+signals: -+ void deletionRequested(); -+ void imEventGenerated( QObject *receiver, QIMEvent *e ); -+ -+protected: -+ virtual void sendIMEvent( QEvent::Type type, -+ const QString &text = QString::null, -+ int cursorPosition = -1, int selLength = 0 ); -+ -+private: -+ void sendIMEventInternal( QEvent::Type type, -+ const QString &text = QString::null, -+ int cursorPosition = -1, int selLength = 0 ); -+ -+ QInputContextPrivate *d; -+ -+ friend class QWidget; -+ friend class QInputContextFactory; -+ -+private: // Disabled copy constructor and operator= -+ QInputContext( const QInputContext & ); -+ QInputContext &operator=( const QInputContext & ); -+ -+}; -+ -+#endif //Q_NO_IM -+ -+#endif // QINPUTCONTEXT_H ---- src/kernel/qinputcontext_x11.cpp -+++ src/kernel/qinputcontext_x11.cpp -@@ -33,500 +33,38 @@ - ** - **********************************************************************/ - -+#include "qinputcontext.h" -+ -+#ifndef QT_NO_IM -+ - #include "qplatformdefs.h" - - #include "qapplication.h" - #include "qwidget.h" --#include "qinputcontext_p.h" -- --#include --#include - -+#include "qt_x11_p.h" - --bool qt_compose_emptied = FALSE; -+/*! -+ This function may be overridden only if input method is depending -+ on X11 and you need raw XEvent. Otherwise, this function must not. - --#if !defined(QT_NO_XIM) -+ This function is designed to filter raw key events for XIM, but -+ other input methods may use this to implement some special -+ features such as distinguishing Shift_L and Shift_R. - --#define XK_MISCELLANY --#define XK_LATIN1 --#include -+ Return TRUE if the \a event has been consumed. Otherwise, the -+ unfiltered \a event will be translated into QEvent and forwarded -+ to filterEvent(). Filtering at both x11FilterEvent() and -+ filterEvent() in single input method is allowed. - --// #define QT_XIM_DEBUG -+ \a keywidget is a client widget into which a text is inputted. \a -+ event is inputted XEvent. - --// from qapplication_x11.cpp --extern XIM qt_xim; --extern XIMStyle qt_xim_style; -- --/* The cache here is needed, as X11 leaks a few kb for every -- XFreeFontSet call, so we avoid creating and deletion of fontsets as -- much as possible -+ \sa filterEvent() - */ --static XFontSet fontsetCache[8] = { 0, 0, 0, 0, 0, 0, 0, 0 }; --static int fontsetRefCount = 0; -- --static const char * const fontsetnames[] = { -- "-*-fixed-medium-r-*-*-16-*,-*-*-medium-r-*-*-16-*", -- "-*-fixed-medium-i-*-*-16-*,-*-*-medium-i-*-*-16-*", -- "-*-fixed-bold-r-*-*-16-*,-*-*-bold-r-*-*-16-*", -- "-*-fixed-bold-i-*-*-16-*,-*-*-bold-i-*-*-16-*", -- "-*-fixed-medium-r-*-*-24-*,-*-*-medium-r-*-*-24-*", -- "-*-fixed-medium-i-*-*-24-*,-*-*-medium-i-*-*-24-*", -- "-*-fixed-bold-r-*-*-24-*,-*-*-bold-r-*-*-24-*", -- "-*-fixed-bold-i-*-*-24-*,-*-*-bold-i-*-*-24-*" --}; -- --static XFontSet getFontSet( const QFont &f ) --{ -- int i = 0; -- if (f.italic()) -- i |= 1; -- if (f.bold()) -- i |= 2; -- -- if ( f.pointSize() > 20 ) -- i += 4; -- -- if ( !fontsetCache[i] ) { -- Display* dpy = QPaintDevice::x11AppDisplay(); -- int missCount; -- char** missList; -- fontsetCache[i] = XCreateFontSet(dpy, fontsetnames[i], &missList, &missCount, 0); -- if(missCount > 0) -- XFreeStringList(missList); -- if ( !fontsetCache[i] ) { -- fontsetCache[i] = XCreateFontSet(dpy, "-*-fixed-*-*-*-*-16-*", &missList, &missCount, 0); -- if(missCount > 0) -- XFreeStringList(missList); -- if ( !fontsetCache[i] ) -- fontsetCache[i] = (XFontSet)-1; -- } -- } -- return (fontsetCache[i] == (XFontSet)-1) ? 0 : fontsetCache[i]; --} -- -- --#ifdef Q_C_CALLBACKS --extern "C" { --#endif // Q_C_CALLBACKS -- -- static int xic_start_callback(XIC, XPointer client_data, XPointer) { -- QInputContext *qic = (QInputContext *) client_data; -- if (! qic) { --#ifdef QT_XIM_DEBUG -- qDebug("compose start: no qic"); --#endif // QT_XIM_DEBUG -- -- return 0; -- } -- -- qic->composing = TRUE; -- qic->text = QString::null; -- qic->focusWidget = 0; -- -- if ( qic->selectedChars.size() < 128 ) -- qic->selectedChars.resize( 128 ); -- qic->selectedChars.fill( 0 ); -- --#ifdef QT_XIM_DEBUG -- qDebug("compose start"); --#endif // QT_XIM_DEBUG -- -- return 0; -- } -- -- static int xic_draw_callback(XIC, XPointer client_data, XPointer call_data) { -- QInputContext *qic = (QInputContext *) client_data; -- if (! qic) { --#ifdef QT_XIM_DEBUG -- qDebug("compose event: invalid compose event %p", qic); --#endif // QT_XIM_DEBUG -- -- return 0; -- } -- -- bool send_imstart = FALSE; -- if (qApp->focusWidget() != qic->focusWidget && qic->text.isEmpty()) { -- if (qic->focusWidget) { --#ifdef QT_XIM_DEBUG -- qDebug( "sending IMEnd (empty) to %p", qic->focusWidget ); --#endif // QT_XIM_DEBUG -- -- QIMEvent endevent(QEvent::IMEnd, QString::null, -1); -- QApplication::sendEvent(qic->focusWidget, &endevent); -- } -- -- qic->text = QString::null; -- qic->focusWidget = qApp->focusWidget(); -- qic->composing = FALSE; -- -- if ( qic->selectedChars.size() < 128 ) -- qic->selectedChars.resize( 128 ); -- qic->selectedChars.fill( 0 ); -- -- if (qic->focusWidget) { -- qic->composing = TRUE; -- send_imstart = TRUE; -- } -- } -- -- if (! qic->composing || ! qic->focusWidget) { --#ifdef QT_XIM_DEBUG -- qDebug("compose event: invalid compose event %d %p", -- qic->composing, qic->focusWidget); --#endif // QT_XIM_DEBUG -- -- return 0; -- } -- -- if ( send_imstart ) { --#ifdef QT_XIM_DEBUG -- qDebug( "sending IMStart to %p", qic->focusWidget ); --#endif // QT_XIM_DEBUG -- -- qt_compose_emptied = FALSE; -- QIMEvent startevent(QEvent::IMStart, QString::null, -1); -- QApplication::sendEvent(qic->focusWidget, &startevent); -- } -- -- XIMPreeditDrawCallbackStruct *drawstruct = -- (XIMPreeditDrawCallbackStruct *) call_data; -- XIMText *text = (XIMText *) drawstruct->text; -- int cursor = drawstruct->caret, sellen = 0; -- -- if ( ! drawstruct->caret && ! drawstruct->chg_first && -- ! drawstruct->chg_length && ! text ) { -- // nothing to do -- return 0; -- } -- -- if (text) { -- char *str = 0; -- if (text->encoding_is_wchar) { -- int l = wcstombs(NULL, text->string.wide_char, text->length); -- if (l != -1) { -- str = new char[l + 1]; -- wcstombs(str, text->string.wide_char, l); -- str[l] = 0; -- } -- } else -- str = text->string.multi_byte; -- -- if (! str) -- return 0; -- -- QString s = QString::fromLocal8Bit(str); -- -- if (text->encoding_is_wchar) -- delete [] str; -- -- if (drawstruct->chg_length < 0) -- qic->text.replace(drawstruct->chg_first, UINT_MAX, s); -- else -- qic->text.replace(drawstruct->chg_first, drawstruct->chg_length, s); -- -- if ( qic->selectedChars.size() < qic->text.length() ) { -- // expand the selectedChars array if the compose string is longer -- uint from = qic->selectedChars.size(); -- qic->selectedChars.resize( qic->text.length() ); -- for ( uint x = from; from < qic->selectedChars.size(); ++x ) -- qic->selectedChars[x] = 0; -- } -- -- uint x; -- bool *p = qic->selectedChars.data() + drawstruct->chg_first; -- // determine if the changed chars are selected based on text->feedback -- for ( x = 0; x < s.length(); ++x ) -- *p++ = ( text->feedback ? ( text->feedback[x] & XIMReverse ) : 0 ); -- -- // figure out where the selection starts, and how long it is -- p = qic->selectedChars.data(); -- bool started = FALSE; -- for ( x = 0; x < QMIN(qic->text.length(), qic->selectedChars.size()); ++x ) { -- if ( started ) { -- if ( *p ) ++sellen; -- else break; -- } else { -- if ( *p ) { -- cursor = x; -- started = TRUE; -- sellen = 1; -- } -- } -- ++p; -- } -- } else { -- if (drawstruct->chg_length == 0) -- drawstruct->chg_length = -1; -- -- qic->text.remove(drawstruct->chg_first, drawstruct->chg_length); -- qt_compose_emptied = qic->text.isEmpty(); -- if ( qt_compose_emptied ) { --#ifdef QT_XIM_DEBUG -- qDebug( "compose emptied" ); --#endif // QT_XIM_DEBUG -- -- // don't send an empty compose, since we will send an IMEnd with -- // either the correct compose text (or null text if the user has -- // cancelled the compose or deleted all chars). -- return 0; -- } -- } -- --#ifdef QT_XIM_DEBUG -- qDebug( "sending IMCompose to %p with %d chars", -- qic->focusWidget, qic->text.length() ); --#endif // QT_XIM_DEBUG -- -- QIMComposeEvent event( QEvent::IMCompose, qic->text, cursor, sellen ); -- QApplication::sendEvent(qic->focusWidget, &event); -- return 0; -- } -- -- static int xic_done_callback(XIC, XPointer client_data, XPointer) { -- QInputContext *qic = (QInputContext *) client_data; -- if (! qic) -- return 0; -- -- if (qic->composing && qic->focusWidget) { --#ifdef QT_XIM_DEBUG -- qDebug( "sending IMEnd (empty) to %p", qic->focusWidget ); --#endif // QT_XIM_DEBUG -- -- QIMEvent event(QEvent::IMEnd, QString::null, -1); -- QApplication::sendEvent(qic->focusWidget, &event); -- } -- -- qic->composing = FALSE; -- qic->focusWidget = 0; -- -- if ( qic->selectedChars.size() < 128 ) -- qic->selectedChars.resize( 128 ); -- qic->selectedChars.fill( 0 ); -- -- return 0; -- } -- --#ifdef Q_C_CALLBACKS --} --#endif // Q_C_CALLBACKS -- --#endif // !QT_NO_XIM -- -- -- --QInputContext::QInputContext(QWidget *widget) -- : ic(0), focusWidget(0), composing(FALSE), fontset(0) --{ --#if !defined(QT_NO_XIM) -- fontsetRefCount++; -- if (! qt_xim) { -- qWarning("QInputContext: no input method context available"); -- return; -- } -- -- if (! widget->isTopLevel()) { -- qWarning("QInputContext: cannot create input context for non-toplevel widgets"); -- return; -- } -- -- XPoint spot; -- XRectangle rect; -- XVaNestedList preedit_attr = 0; -- XIMCallback startcallback, drawcallback, donecallback; -- -- font = widget->font(); -- fontset = getFontSet( font ); -- -- if (qt_xim_style & XIMPreeditArea) { -- rect.x = 0; -- rect.y = 0; -- rect.width = widget->width(); -- rect.height = widget->height(); -- -- preedit_attr = XVaCreateNestedList(0, -- XNArea, &rect, -- XNFontSet, fontset, -- (char *) 0); -- } else if (qt_xim_style & XIMPreeditPosition) { -- spot.x = 1; -- spot.y = 1; -- -- preedit_attr = XVaCreateNestedList(0, -- XNSpotLocation, &spot, -- XNFontSet, fontset, -- (char *) 0); -- } else if (qt_xim_style & XIMPreeditCallbacks) { -- startcallback.client_data = (XPointer) this; -- startcallback.callback = (XIMProc) xic_start_callback; -- drawcallback.client_data = (XPointer) this; -- drawcallback.callback = (XIMProc)xic_draw_callback; -- donecallback.client_data = (XPointer) this; -- donecallback.callback = (XIMProc) xic_done_callback; -- -- preedit_attr = XVaCreateNestedList(0, -- XNPreeditStartCallback, &startcallback, -- XNPreeditDrawCallback, &drawcallback, -- XNPreeditDoneCallback, &donecallback, -- (char *) 0); -- } -- -- if (preedit_attr) { -- ic = XCreateIC(qt_xim, -- XNInputStyle, qt_xim_style, -- XNClientWindow, widget->winId(), -- XNPreeditAttributes, preedit_attr, -- (char *) 0); -- XFree(preedit_attr); -- } else -- ic = XCreateIC(qt_xim, -- XNInputStyle, qt_xim_style, -- XNClientWindow, widget->winId(), -- (char *) 0); -- -- if (! ic) -- qFatal("Failed to create XIM input context!"); -- -- // when resetting the input context, preserve the input state -- (void) XSetICValues((XIC) ic, XNResetState, XIMPreserveState, (char *) 0); --#endif // !QT_NO_XIM --} -- -- --QInputContext::~QInputContext() --{ -- --#if !defined(QT_NO_XIM) -- if (ic) -- XDestroyIC((XIC) ic); -- -- if ( --fontsetRefCount == 0 ) { -- Display *dpy = QPaintDevice::x11AppDisplay(); -- for ( int i = 0; i < 8; i++ ) { -- if ( fontsetCache[i] && fontsetCache[i] != (XFontSet)-1 ) { -- XFreeFontSet(dpy, fontsetCache[i]); -- fontsetCache[i] = 0; -- } -- } -- } -- --#endif // !QT_NO_XIM -- -- ic = 0; -- focusWidget = 0; -- composing = FALSE; --} -- -- --void QInputContext::reset() --{ --#if !defined(QT_NO_XIM) -- if (focusWidget && composing && ! text.isNull()) { --#ifdef QT_XIM_DEBUG -- qDebug("QInputContext::reset: composing - sending IMEnd (empty) to %p", -- focusWidget); --#endif // QT_XIM_DEBUG -- -- QIMEvent endevent(QEvent::IMEnd, QString::null, -1); -- QApplication::sendEvent(focusWidget, &endevent); -- focusWidget = 0; -- text = QString::null; -- if ( selectedChars.size() < 128 ) -- selectedChars.resize( 128 ); -- selectedChars.fill( 0 ); -- -- char *mb = XmbResetIC((XIC) ic); -- if (mb) -- XFree(mb); -- } --#endif // !QT_NO_XIM --} -- -- --void QInputContext::setComposePosition(int x, int y) --{ --#if !defined(QT_NO_XIM) -- if (qt_xim && ic) { -- XPoint point; -- point.x = x; -- point.y = y; -- -- XVaNestedList preedit_attr = -- XVaCreateNestedList(0, -- XNSpotLocation, &point, -- -- (char *) 0); -- XSetICValues((XIC) ic, XNPreeditAttributes, preedit_attr, (char *) 0); -- XFree(preedit_attr); -- } --#endif // !QT_NO_XIM --} -- -- --void QInputContext::setComposeArea(int x, int y, int w, int h) -+bool QInputContext::x11FilterEvent( QWidget *keywidget, XEvent *event ) - { --#if !defined(QT_NO_XIM) -- if (qt_xim && ic) { -- XRectangle rect; -- rect.x = x; -- rect.y = y; -- rect.width = w; -- rect.height = h; -- -- XVaNestedList preedit_attr = XVaCreateNestedList(0, -- XNArea, &rect, -- -- (char *) 0); -- XSetICValues((XIC) ic, XNPreeditAttributes, preedit_attr, (char *) 0); -- XFree(preedit_attr); -- } --#endif -+ return FALSE; - } - -- --int QInputContext::lookupString(XKeyEvent *event, QCString &chars, -- KeySym *key, Status *status) const --{ -- int count = 0; -- --#if !defined(QT_NO_XIM) -- if (qt_xim && ic) { -- count = XmbLookupString((XIC) ic, event, chars.data(), -- chars.size(), key, status); -- -- if ((*status) == XBufferOverflow ) { -- chars.resize(count + 1); -- count = XmbLookupString((XIC) ic, event, chars.data(), -- chars.size(), key, status); -- } -- } -- --#endif // QT_NO_XIM -- -- return count; --} -- --void QInputContext::setFocus() --{ --#if !defined(QT_NO_XIM) -- if (qt_xim && ic) -- XSetICFocus((XIC) ic); --#endif // !QT_NO_XIM --} -- --void QInputContext::setXFontSet(const QFont &f) --{ --#if !defined(QT_NO_XIM) -- if (font == f) return; // nothing to do -- font = f; -- -- XFontSet fs = getFontSet(font); -- if (fontset == fs) return; // nothing to do -- fontset = fs; -- -- XVaNestedList preedit_attr = XVaCreateNestedList(0, XNFontSet, fontset, (char *) 0); -- XSetICValues((XIC) ic, XNPreeditAttributes, preedit_attr, (char *) 0); -- XFree(preedit_attr); --#else -- Q_UNUSED( f ); --#endif --} -+#endif //Q_NO_IM ---- src/kernel/qnamespace.h -+++ src/kernel/qnamespace.h -@@ -397,6 +397,87 @@ - Key_Help = 0x1058, - Key_Direction_L = 0x1059, - Key_Direction_R = 0x1060, -+ -+ // International input method support (X keycode - 0xEE00, the -+ // definition follows Qt/Embedded 2.3.7) Only interesting if -+ // you are writing your own input method -+ -+ // International & multi-key character composition -+ Key_Multi_key = 0x1120, // Multi-key character compose -+ Key_Codeinput = 0x1137, -+ Key_SingleCandidate = 0x113c, -+ Key_MultipleCandidate = 0x113d, -+ Key_PreviousCandidate = 0x113e, -+ -+ // Misc Functions -+ Key_Mode_switch = 0x117e, // Character set switch -+ //Key_script_switch = 0x117e, // Alias for mode_switch -+ -+ // Japanese keyboard support -+ Key_Kanji = 0x1121, // Kanji, Kanji convert -+ Key_Muhenkan = 0x1122, // Cancel Conversion -+ //Key_Henkan_Mode = 0x1123, // Start/Stop Conversion -+ Key_Henkan = 0x1123, // Alias for Henkan_Mode -+ Key_Romaji = 0x1124, // to Romaji -+ Key_Hiragana = 0x1125, // to Hiragana -+ Key_Katakana = 0x1126, // to Katakana -+ Key_Hiragana_Katakana = 0x1127, // Hiragana/Katakana toggle -+ Key_Zenkaku = 0x1128, // to Zenkaku -+ Key_Hankaku = 0x1129, // to Hankaku -+ Key_Zenkaku_Hankaku = 0x112a, // Zenkaku/Hankaku toggle -+ Key_Touroku = 0x112b, // Add to Dictionary -+ Key_Massyo = 0x112c, // Delete from Dictionary -+ Key_Kana_Lock = 0x112d, // Kana Lock -+ Key_Kana_Shift = 0x112e, // Kana Shift -+ Key_Eisu_Shift = 0x112f, // Alphanumeric Shift -+ Key_Eisu_toggle = 0x1130, // Alphanumeric toggle -+ //Key_Kanji_Bangou = 0x1137, // Codeinput -+ //Key_Zen_Koho = 0x113d, // Multiple/All Candidate(s) -+ //Key_Mae_Koho = 0x113e, // Previous Candidate -+ -+ // Korean keyboard support -+ // -+ // In fact, many Korean users need only 2 keys, Key_Hangul and -+ // Key_Hangul_Hanja. But rest of the keys are good for future. -+ -+ Key_Hangul = 0x1131, // Hangul start/stop(toggle) -+ Key_Hangul_Start = 0x1132, // Hangul start -+ Key_Hangul_End = 0x1133, // Hangul end, English start -+ Key_Hangul_Hanja = 0x1134, // Start Hangul->Hanja Conversion -+ Key_Hangul_Jamo = 0x1135, // Hangul Jamo mode -+ Key_Hangul_Romaja = 0x1136, // Hangul Romaja mode -+ //Key_Hangul_Codeinput = 0x1137, // Hangul code input mode -+ Key_Hangul_Jeonja = 0x1138, // Jeonja mode -+ Key_Hangul_Banja = 0x1139, // Banja mode -+ Key_Hangul_PreHanja = 0x113a, // Pre Hanja conversion -+ Key_Hangul_PostHanja = 0x113b, // Post Hanja conversion -+ //Key_Hangul_SingleCandidate = 0x113c, // Single candidate -+ //Key_Hangul_MultipleCandidate = 0x113d, // Multiple candidate -+ //Key_Hangul_PreviousCandidate = 0x113e, // Previous candidate -+ Key_Hangul_Special = 0x113f, // Special symbols -+ //Key_Hangul_switch = 0x117e, // Alias for mode_switch -+ -+ // dead keys (X keycode - 0xED00 to avoid the conflict) -+ Key_Dead_Grave = 0x1250, -+ Key_Dead_Acute = 0x1251, -+ Key_Dead_Circumflex = 0x1252, -+ Key_Dead_Tilde = 0x1253, -+ Key_Dead_Macron = 0x1254, -+ Key_Dead_Breve = 0x1255, -+ Key_Dead_Abovedot = 0x1256, -+ Key_Dead_Diaeresis = 0x1257, -+ Key_Dead_Abovering = 0x1258, -+ Key_Dead_Doubleacute = 0x1259, -+ Key_Dead_Caron = 0x125a, -+ Key_Dead_Cedilla = 0x125b, -+ Key_Dead_Ogonek = 0x125c, -+ Key_Dead_Iota = 0x125d, -+ Key_Dead_Voiced_Sound = 0x125e, -+ Key_Dead_Semivoiced_Sound = 0x125f, -+ Key_Dead_Belowdot = 0x1260, -+ Key_Dead_Hook = 0x1261, -+ Key_Dead_Horn = 0x1262, -+ - Key_Space = 0x20, // 7 bit printable ASCII - Key_Any = Key_Space, - Key_Exclam = 0x21, -@@ -469,6 +550,11 @@ - Key_AsciiTilde = 0x7e, - - // Latin 1 codes adapted from X: keysymdef.h,v 1.21 94/08/28 16:17:06 -+ // -+ // This is mainly for compatibility - applications and input -+ // methods should not use the Qt keycodes between 128 and 255, -+ // but should rather use the QKeyEvent::text(). See -+ // QETWidget::translateKeyEventInternal() for more details. - - Key_nobreakspace = 0x0a0, - Key_exclamdown = 0x0a1, ---- src/kernel/qrichtext.cpp -+++ src/kernel/qrichtext.cpp -@@ -662,7 +662,7 @@ - pop(); - } - --bool QTextCursor::place( const QPoint &p, QTextParagraph *s, bool link ) -+bool QTextCursor::place( const QPoint &p, QTextParagraph *s, bool link, bool loosePlacing, bool matchBetweenCharacters ) - { - QPoint pos( p ); - QRect r; -@@ -680,7 +680,7 @@ - str = s; - if ( pos.y() >= r.y() && pos.y() <= r.y() + r.height() ) - break; -- if ( !s->next() ) { -+ if ( loosePlacing == TRUE && !s->next() ) { - #ifdef Q_WS_MACX - pos.setX( s->rect().x() + s->rect().width() ); - #endif -@@ -721,7 +721,7 @@ - if ( pos.x() < x ) - pos.setX( x + 1 ); - int cw; -- int curpos = s->length()-1; -+ int curpos = -1; - int dist = 10000000; - bool inCustom = FALSE; - while ( i < nextLine ) { -@@ -743,14 +743,21 @@ - cpos += cw; - int d = cpos - pos.x(); - bool dm = d < 0 ? !chr->rightToLeft : chr->rightToLeft; -- if ( (QABS( d ) < dist || (dist == d && dm == TRUE )) && para->string()->validCursorPosition( i ) ) { -+ if ( ( matchBetweenCharacters == TRUE && (QABS( d ) < dist || (dist == d && dm == TRUE )) && para->string()->validCursorPosition( i ) ) || -+ ( matchBetweenCharacters == FALSE && ( d == 0 || dm == TRUE ) ) ) { - dist = QABS( d ); -- if ( !link || pos.x() >= x + chr->x ) -+ if ( !link || ( pos.x() >= x + chr->x && ( loosePlacing == TRUE || pos.x() < cpos ) ) ) - curpos = i; - } - } - i++; - } -+ if ( curpos == -1 ) { -+ if ( loosePlacing == TRUE ) -+ curpos = s->length()-1; -+ else -+ return FALSE; -+ } - setIndex( curpos ); - - #ifndef QT_NO_TEXTCUSTOMITEM -@@ -4876,6 +4883,9 @@ - tmpw = fullSelectionWidth - xleft; - painter.fillRect( xleft, y, tmpw, h, color ); - painter.drawText( xstart, y + baseLine, str, start, len, dir ); -+ // draw preedit's underline -+ if (selection == QTextDocument::IMCompositionText) -+ painter.drawLine(xstart, y + baseLine + 1, xstart + w, y + baseLine + 1); - if (selStart != start || selEnd != start + len || selWrap) - painter.restore(); - } ---- src/kernel/qrichtext_p.h -+++ src/kernel/qrichtext_p.h -@@ -362,7 +362,8 @@ - int totalOffsetY() const; // total document offset - - bool place( const QPoint &pos, QTextParagraph *s ) { return place( pos, s, FALSE ); } -- bool place( const QPoint &pos, QTextParagraph *s, bool link ); -+ bool place( const QPoint &pos, QTextParagraph *s, bool link ) { return place( pos, s, link, TRUE, TRUE ); } -+ bool place( const QPoint &pos, QTextParagraph *s, bool link, bool loosePlacing, bool matchBetweenCharacters ); - void restoreState(); - - ---- src/kernel/qt_kernel.pri -+++ src/kernel/qt_kernel.pri -@@ -34,7 +34,6 @@ - $$KERNEL_H/qimage.h \ - $$KERNEL_P/qimageformatinterface_p.h \ - $$KERNEL_H/qimageformatplugin.h \ -- $$KERNEL_P/qinputcontext_p.h \ - $$KERNEL_H/qkeycode.h \ - $$KERNEL_H/qkeysequence.h \ - $$KERNEL_H/qlayout.h \ -@@ -99,6 +98,12 @@ - $$KERNEL_CPP/qfontengine_p.h \ - $$KERNEL_CPP/qtextlayout_p.h - -+ unix:x11 { -+ HEADERS += $$KERNEL_H/qinputcontext.h -+ } else { -+ HEADERS += $$KERNEL_P/qinputcontext_p.h -+ } -+ - win32:SOURCES += $$KERNEL_CPP/qapplication_win.cpp \ - $$KERNEL_CPP/qclipboard_win.cpp \ - $$KERNEL_CPP/qcolor_win.cpp \ -@@ -130,6 +135,7 @@ - $$KERNEL_CPP/qdesktopwidget_x11.cpp \ - $$KERNEL_CPP/qeventloop_x11.cpp \ - $$KERNEL_CPP/qfont_x11.cpp \ -+ $$KERNEL_CPP/qinputcontext.cpp \ - $$KERNEL_CPP/qinputcontext_x11.cpp \ - $$KERNEL_CPP/qmotifdnd_x11.cpp \ - $$KERNEL_CPP/qpixmap_x11.cpp \ ---- src/kernel/qwidget.cpp -+++ src/kernel/qwidget.cpp -@@ -3282,8 +3282,24 @@ - if ( isActiveWindow() ) { - QWidget * prev = qApp->focus_widget; - if ( prev ) { -- if ( prev != this ) -+ // This part is never executed when Q_WS_X11? Preceding XFocusOut -+ // had already reset focus_widget when received XFocusIn -+ -+ // Don't reset input context explicitly here. Whether reset or not -+ // when focusing out is a responsibility of input methods. For -+ // example, Japanese input context should not be reset here. The -+ // context sometimes contains a whole paragraph and has minutes of -+ // lifetime different to ephemeral one in other languages. The -+ // input context should be survived until focused again. So we -+ // delegate the responsibility to input context via -+ // unfocusInputContext(). -+ if ( prev != this && prev->isInputMethodEnabled() ) { -+#if 0 - prev->resetInputContext(); -+#else -+ prev->unfocusInputContext(); -+#endif -+ } - } - #if defined(Q_WS_WIN) - else { -@@ -3291,9 +3307,8 @@ - } - #endif - qApp->focus_widget = this; --#if defined(Q_WS_X11) -- focusInputContext(); --#endif -+ if( isInputMethodEnabled() ) -+ focusInputContext(); - - #if defined(Q_WS_WIN) - if ( !topLevelWidget()->isPopup() ) -@@ -3341,7 +3356,11 @@ - focusProxy()->clearFocus(); - return; - } else if ( hasFocus() ) { -+#if !defined(Q_WS_X11) - resetInputContext(); -+#else -+ unfocusInputContext(); -+#endif - QWidget* w = qApp->focusWidget(); - // clear active focus - qApp->focus_widget = 0; -@@ -4667,7 +4686,13 @@ - break; - - case QEvent::MouseButtonPress: -+ // Don't reset input context here. Whether reset or not is -+ // a responsibility of input method. reset() will be -+ // called by mouseHandler() of input method if necessary -+ // via mousePressEvent() of text widgets. -+#if 0 - resetInputContext(); -+#endif - mousePressEvent( (QMouseEvent*)e ); - if ( ! ((QMouseEvent*)e)->isAccepted() ) - return FALSE; ---- src/kernel/qwidget.h -+++ src/kernel/qwidget.h -@@ -49,6 +49,10 @@ - #include "qsizepolicy.h" - #endif // QT_H - -+#if defined(Q_WS_X11) && !defined(QT_NO_IM) -+class QInputContext; -+#endif -+ - class QLayout; - struct QWExtra; - struct QTLWExtra; -@@ -535,6 +539,18 @@ - - int metric( int ) const; - -+#if defined(Q_WS_X11) -+#if !defined(QT_NO_IM_EXTENSIONS) -+ virtual QWidget *icHolderWidget(); -+#else -+ QWidget *icHolderWidget(); -+#endif -+ QInputContext *getInputContext(); -+ void changeInputContext( const QString & ); -+ void sendMouseEventToInputContext( int x, QEvent::Type type, -+ Qt::ButtonState button, -+ Qt::ButtonState state ); -+#endif - void resetInputContext(); - - virtual void create( WId = 0, bool initializeWindow = TRUE, -@@ -566,13 +582,16 @@ - - private slots: - void focusProxyDestroyed(); -+#if defined(Q_WS_X11) -+ void destroyInputContext(); -+#endif - - private: - void setFontSys( QFont *f = 0 ); - #if defined(Q_WS_X11) - void createInputContext(); -- void destroyInputContext(); - void focusInputContext(); -+ void unfocusInputContext(); - void checkChildrenDnd(); - #elif defined(Q_WS_MAC) - uint own_id : 1, macDropEnabled : 1; -@@ -644,6 +663,9 @@ - #ifndef QT_NO_LAYOUT - QLayout *lay_out; - #endif -+#if defined(Q_WS_X11) && !defined(QT_NO_IM) && !defined(QT_NO_IM_EXTENSIONS) -+ QInputContext *ic; // Input Context -+#endif - QWExtra *extra; - #if defined(Q_WS_QWS) - QRegion req_region; // Requested region -@@ -949,7 +971,9 @@ - uint dnd : 1; // DND properties installed - uint uspos : 1; // User defined position - uint ussize : 1; // User defined size -- void *xic; // XIM Input Context -+#if defined(QT_NO_IM_EXTENSIONS) -+ void *xic; // Input Context -+#endif - #endif - #if defined(Q_WS_MAC) - WindowGroupRef group; ---- src/kernel/qwidget_x11.cpp -+++ src/kernel/qwidget_x11.cpp -@@ -61,11 +61,9 @@ - bool qt_wstate_iconified( WId ); - void qt_updated_rootinfo(); - --#ifndef QT_NO_XIM --#include "qinputcontext_p.h" -- --extern XIM qt_xim; --extern XIMStyle qt_xim_style; -+#ifndef QT_NO_IM -+#include "qinputcontext.h" -+#include "qinputcontextfactory.h" - #endif - - // Paint event clipping magic -@@ -688,6 +686,10 @@ - - if ( destroyw ) - qt_XDestroyWindow( this, dpy, destroyw ); -+ -+#if !defined(QT_NO_IM_EXTENSIONS) -+ ic = 0; -+#endif - } - - -@@ -751,6 +753,16 @@ - extern void qPRCleanup( QWidget *widget ); // from qapplication_x11.cpp - if ( testWState(WState_Reparented) ) - qPRCleanup(this); -+ -+ if( this == icHolderWidget() ) { -+ destroyInputContext(); -+ } else { -+ // release previous focus information participating with -+ // preedit preservation of qic -+ QInputContext *qic = getInputContext(); -+ if ( qic ) -+ qic->releaseComposingWidget( this ); -+ } - } - } - -@@ -787,11 +799,11 @@ - XReparentWindow( x11Display(), old_winid, - RootWindow( x11Display(), x11Screen() ), 0, 0 ); - -- if ( isTopLevel() ) { -- // input contexts are associated with toplevel widgets, so we need -- // destroy the context here. if we are reparenting back to toplevel, -- // then we will have another context created, otherwise we will -- // use our new toplevel's context -+ if ( this == icHolderWidget() ) { -+ // input contexts are sometimes associated with toplevel widgets, so -+ // we need destroy the context here. if we are reparenting back to -+ // toplevel, then we may have another context created, otherwise we -+ // will use our new ic holder's context - destroyInputContext(); - } - -@@ -947,7 +959,8 @@ - language input systems. - - In the X11 version of Qt, if \a text is TRUE, this method sets the -- XIM "spot" point for complex language input handling. -+ input method focus point in the preedit (XIM "spot" point) for -+ complex language input handling. - - The font \a f is a rendering hint to the currently active input method. - If \a f is 0 the widget's font is used. -@@ -957,22 +970,15 @@ - void QWidget::setMicroFocusHint(int x, int y, int width, int height, - bool text, QFont *f ) - { --#ifndef QT_NO_XIM -+#ifndef QT_NO_IM - if ( text ) { -- QWidget* tlw = topLevelWidget(); -- QTLWExtra *topdata = tlw->topData(); -- - // trigger input context creation if it hasn't happened already - createInputContext(); -- QInputContext *qic = (QInputContext *) topdata->xic; - -- if ( qt_xim && qic ) { -- QPoint p( x, y ); -- QPoint p2 = mapTo( topLevelWidget(), QPoint( 0, 0 ) ); -- p = mapTo( topLevelWidget(), p); -- qic->setXFontSet( f ? *f : fnt ); -- qic->setComposePosition(p.x(), p.y() + height); -- qic->setComposeArea(p2.x(), p2.y(), this->width(), this->height()); -+ QInputContext *qic = getInputContext(); -+ if(qic) { -+ QPoint gp = mapToGlobal( QPoint( x, y ) ); -+ qic->setMicroFocus(gp.x(), gp.y(), width, height, f); - } - } - #endif -@@ -1442,7 +1448,7 @@ - QWidget *tlw = topLevelWidget(); - if ( tlw->isVisible() && !tlw->topData()->embedded && !qt_deferred_map_contains(tlw) ) { - XSetInputFocus( x11Display(), tlw->winId(), RevertToNone, qt_x_time); -- focusInputContext(); -+ focusInputContext(); - } - } - -@@ -2422,13 +2428,16 @@ - - void QWidget::createTLSysExtra() - { -+#if defined(QT_NO_IM_EXTENSIONS) - // created lazily - extra->topextra->xic = 0; -+#endif - } - - void QWidget::deleteTLSysExtra() - { -- destroyInputContext(); -+ // don't destroy input context here. it will be destroyed in -+ // QWidget::destroy() destroyInputContext(); - } - - /* -@@ -2660,76 +2669,255 @@ - } - - -+/*! -+ This function returns the widget holding the QInputContext -+ instance for this widget. The instance is used for text input to -+ this widget, switching input method, etc. -+ -+ By default, this function delegates the role of returning input -+ context holder widget to QApplication::locateICHolderWidget(). -+ -+ This definition enables application developer to change the -+ mapping of widgets to QInputContext instance simply by overriding -+ QApplication::locateICHolderWidget(). -+ -+ \sa QApplication::locateICHolderWidget() -+*/ -+QWidget *QWidget::icHolderWidget() -+{ -+ return qApp->locateICHolderWidget(this); -+} -+ -+ -+/*! -+ This function returns the QInputContext instance for this widget. -+ This instance is used for text input to this widget, etc. -+ It is simply the accessor function. -+*/ -+QInputContext *QWidget::getInputContext() -+{ -+ QInputContext *qic = 0; -+ -+#if !defined(QT_NO_IM_EXTENSIONS) -+ if ( isInputMethodEnabled() ) { -+ qic = icHolderWidget()->ic; -+#else -+ { -+ // icHolderWidget is always topLevelWidget -+ QTLWExtra *topdata = icHolderWidget()->topData(); -+ qic = (QInputContext *)topdata->xic; -+#endif -+ } -+ -+ return qic; -+} -+ -+ -+/*! -+ This function replaces the QInputContext instance used for text -+ input to this widget. The \a identifierName is the identifier name -+ of newly choosed input method. -+*/ -+void QWidget::changeInputContext( const QString& identifierName ) -+{ -+ QWidget *icWidget = icHolderWidget(); -+#if !defined(QT_NO_IM_EXTENSIONS) -+ QInputContext **qicp = &icWidget->ic; -+#else -+ QInputContext **qicp = (QInputContext **)&icWidget->topData()->xic; -+#endif -+ -+ if( *qicp ) -+ delete *qicp; -+ // an input context that has the identifierName is generated. -+ QInputContext *qic = QInputContextFactory::create( identifierName, icWidget ); -+ *qicp = qic; -+ if ( qic ) { -+ QObject::connect( qic, SIGNAL(imEventGenerated(QObject *,QIMEvent *)), -+ qApp, SLOT(postIMEvent(QObject *,QIMEvent *)) ); -+ QObject::connect( qic, SIGNAL(deletionRequested()), -+ icWidget, SLOT(destroyInputContext()) ); -+ } -+} -+ -+ -+/*! -+ \internal -+ This is an internal function, you should never call this. -+ -+ This function is called to generate an input context -+ according to a configuration for default input method -+ -+ When QT_NO_IM_EXTENSIONS is not set, input context is -+ generated only when isInputMethodEnabled() returns TRUE. -+*/ - void QWidget::createInputContext() - { -- QWidget *tlw = topLevelWidget(); -- QTLWExtra *topdata = tlw->topData(); -+#if !defined(QT_NO_IM_EXTENSIONS) -+ if( !isInputMethodEnabled() || QApplication::closingDown() ) -+ return; -+#endif - --#ifndef QT_NO_XIM -- if (qt_xim) { -- if (! topdata->xic) { -- QInputContext *qic = new QInputContext(tlw); -- topdata->xic = (void *) qic; -- } -- } else --#endif // QT_NO_XIM -- { -- // qDebug("QWidget::createInputContext: no xim"); -- topdata->xic = 0; -- } -+ QWidget *icWidget = icHolderWidget(); -+#ifndef QT_NO_IM -+#if !defined(QT_NO_IM_EXTENSIONS) -+ QInputContext **qicp = &icWidget->ic; -+#else -+ QInputContext **qicp = (QInputContext **)&icWidget->topData()->xic; -+#endif -+ -+ if ( ! *qicp ) { -+ // an input context of the default input method is generated. -+ QInputContext *qic = QInputContextFactory::create( QApplication::defaultInputMethod(), icWidget ); -+ -+ *qicp = qic; -+ if ( qic ) { -+ QObject::connect( qic, SIGNAL(imEventGenerated(QObject *,QIMEvent *)), -+ qApp, SLOT(postIMEvent(QObject *,QIMEvent *)) ); -+ QObject::connect( qic, SIGNAL(deletionRequested()), -+ icWidget, SLOT(destroyInputContext()) ); -+ } -+ } -+#endif // QT_NO_IM - } - - -+/*! -+ \internal -+ -+ This slot is used to destroy the input context that belonging -+ to the widget itself, so icHolderWidget()->ic is not fetched. -+ -+ \sa QInputContext::deletionRequested() -+*/ - void QWidget::destroyInputContext() - { --#ifndef QT_NO_XIM -- QInputContext *qic = (QInputContext *) extra->topextra->xic; -- delete qic; --#endif // QT_NO_XIM -- extra->topextra->xic = 0; -+#ifndef QT_NO_IM -+#if !defined(QT_NO_IM_EXTENSIONS) -+ QInputContext **qicp = ⁣ -+#else -+ if ( ! extra || ! extra->topextra ) -+ return; -+ -+ QInputContext **qicp = (QInputContext **)&extra->topextra->xic; -+#endif -+ -+ if( *qicp ) -+ delete *qicp; -+ -+ *qicp = 0; -+#endif // QT_NO_IM - } - - - /*! -- This function is called when the user finishes input composition, -- e.g. changes focus to another widget, moves the cursor, etc. -+ This function is called when text widgets need to be neutral state to -+ execute text operations properly. See qlineedit.cpp and qtextedit.cpp as -+ example. -+ -+ Ordinary reset that along with changing focus to another widget, -+ moving the cursor, etc, is implicitly handled via -+ unfocusInputContext() because whether reset or not when such -+ situation is a responsibility of input methods. So we delegate the -+ responsibility to the input context via unfocusInputContext(). See -+ 'Preedit preservation' section of the class description of -+ QInputContext for further information. -+ -+ \sa QInputContext, unfocusInputContext(), QInputContext::unsetFocus() - */ - void QWidget::resetInputContext() - { --#ifndef QT_NO_XIM -- if ((qt_xim_style & XIMPreeditCallbacks) && hasFocus()) { -- QWidget *tlw = topLevelWidget(); -- QTLWExtra *topdata = tlw->topData(); -+#ifndef QT_NO_IM -+ // trigger input context creation if it hasn't happened already -+ createInputContext(); -+ -+ QInputContext *qic = getInputContext(); -+ if( qic ) -+ qic->reset(); -+#endif // QT_NO_IM -+} -+ -+ -+/*! -+ \internal -+ This is an internal function, you should never call this. -+ -+ This function is called to focus associated input context. The -+ code intends to eliminate duplicate focus for the context even if -+ the context is shared between widgets -+ -+ \sa QInputContext::setFocus() -+ */ -+void QWidget::focusInputContext() -+{ -+#ifndef QT_NO_IM -+ QWidget* tlw = topLevelWidget(); - -+ if (!tlw->isPopup() || isInputMethodEnabled()) { - // trigger input context creation if it hasn't happened already - createInputContext(); - -- if (topdata->xic) { -- QInputContext *qic = (QInputContext *) topdata->xic; -- qic->reset(); -+ QInputContext *qic = getInputContext(); -+ if ( qic ) { -+ if( qic->focusWidget() != this ) { -+ qic->setFocusWidget( this ); -+ qic->setFocus(); -+ } - } - } --#endif // QT_NO_XIM -+#endif // QT_NO_IM - } - - --void QWidget::focusInputContext() -+/*! -+ \internal -+ This is an internal function, you should never call this. -+ -+ This function is called to remove focus from associated input -+ context. -+ -+ \sa QInputContext::unsetFocus() -+ */ -+void QWidget::unfocusInputContext() - { --#ifndef QT_NO_XIM -- QWidget *tlw = topLevelWidget(); -- if (!tlw->isPopup() || isInputMethodEnabled()) { -- QTLWExtra *topdata = tlw->topData(); -+#ifndef QT_NO_IM -+ // trigger input context creation if it hasn't happened already -+ createInputContext(); -+ -+ QInputContext *qic = getInputContext(); -+ if ( qic ) { -+ // may be caused reset() in some input methods -+ qic->unsetFocus(); -+ qic->setFocusWidget( 0 ); -+ } -+#endif // QT_NO_IM -+} -+ - -- // trigger input context creation if it hasn't happened already -- createInputContext(); -+/*! -+ This function is called to send mouse event to associated input -+ context by derived text widgets. A derived text widget must be -+ calculate \a x as character offset at the mouse cursor in the -+ preedit. - -- if (topdata->xic) { -- QInputContext *qic = (QInputContext *) topdata->xic; -- qic->setFocus(); -- } -+ \sa QInputContext::mouseHandler() -+ */ -+void QWidget::sendMouseEventToInputContext( int x, QEvent::Type type, -+ Qt::ButtonState button, -+ Qt::ButtonState state ) -+{ -+#ifndef QT_NO_IM -+ // trigger input context creation if it hasn't happened already -+ createInputContext(); -+ -+ QInputContext *qic = getInputContext(); -+ if ( qic ) { -+ // may be causing reset() in some input methods -+ qic->mouseHandler( x, type, button, state ); - } --#endif // QT_NO_XIM -+#endif // QT_NO_IM - } -+ - - void QWidget::setWindowOpacity(double) - { ---- src/qt.pro -+++ src/qt.pro -@@ -37,6 +37,7 @@ - TOOLS_CPP = tools - CODECS_CPP = codecs - WORKSPACE_CPP = workspace -+INPUTMETHOD_CPP = inputmethod - XML_CPP = xml - STYLES_CPP = styles - EMBEDDED_CPP = embedded -@@ -54,6 +55,7 @@ - TOOLS_H = $$TOOLS_CPP - CODECS_H = $$CODECS_CPP - WORKSPACE_H = $$WORKSPACE_CPP -+ #INPUTMETHOD_H = $$INPUTMETHOD_CPP - XML_H = $$XML_CPP - CANVAS_H = $$CANVAS_CPP - STYLES_H = $$STYLES_CPP -@@ -70,6 +72,7 @@ - TOOLS_H = $$WIN_ALL_H - CODECS_H = $$WIN_ALL_H - WORKSPACE_H = $$WIN_ALL_H -+ #INPUTMETHOD_H = $$WIN_ALL_H - XML_H = $$WIN_ALL_H - CANVAS_H = $$WIN_ALL_H - STYLES_H = $$WIN_ALL_H -@@ -98,6 +101,7 @@ - TOOLS_H = $$TOOLS_CPP - CODECS_H = $$CODECS_CPP - WORKSPACE_H = $$WORKSPACE_CPP -+ INPUTMETHOD_H = $$INPUTMETHOD_CPP - XML_H = $$XML_CPP - STYLES_H = $$STYLES_CPP - !embedded:!mac:CONFIG += x11 x11inc -@@ -112,7 +116,7 @@ - EMBEDDED_H = $$EMBEDDED_CPP - } - --DEPENDPATH += ;$$NETWORK_H;$$KERNEL_H;$$WIDGETS_H;$$SQL_H;$$TABLE_H;$$DIALOGS_H; -+DEPENDPATH += ;$$NETWORK_H;$$KERNEL_H;$$WIDGETS_H;$$INPUTMETHOD_H;$$SQL_H;$$TABLE_H;$$DIALOGS_H; - DEPENDPATH += $$ICONVIEW_H;$$OPENGL_H;$$TOOLS_H;$$CODECS_H;$$WORKSPACE_H;$$XML_H; - DEPENDPATH += $$CANVAS_H;$$STYLES_H - embedded:DEPENDPATH += ;$$EMBEDDED_H -@@ -147,6 +151,7 @@ - include($$DIALOGS_CPP/qt_dialogs.pri) - include($$ICONVIEW_CPP/qt_iconview.pri) - include($$WORKSPACE_CPP/qt_workspace.pri) -+include($$INPUTMETHOD_CPP/qt_inputmethod.pri) - include($$NETWORK_CPP/qt_network.pri) - include($$CANVAS_CPP/qt_canvas.pri) - include($$TABLE_CPP/qt_table.pri) ---- src/tools/qfeatures.h -+++ src/tools/qfeatures.h -@@ -982,3 +982,13 @@ - #define QT_NO_WORKSPACE - #endif - -+// Input method -+#if !defined(QT_NO_IM) && (defined(QT_NO_STRINGLIST)) -+#define QT_NO_IM -+#endif -+ -+// Input method extensions -+#if !defined(QT_NO_IM_EXTENSIONS) && (defined(QT_NO_IM) || defined(QT_NO_STRINGLIST)) -+#define QT_NO_IM_EXTENSIONS -+#endif -+ ---- src/widgets/qlineedit.cpp -+++ src/widgets/qlineedit.cpp -@@ -37,6 +37,12 @@ - - #include "qlineedit.h" - #ifndef QT_NO_LINEEDIT -+ -+// Keep this position to avoid patch rejection -+#ifndef QT_NO_IM -+#include "qinputcontext.h" -+#endif -+ - #include "qpainter.h" - #include "qdrawutil.h" - #include "qfontmetrics.h" -@@ -245,12 +251,17 @@ - - // input methods - int imstart, imend, imselstart, imselend; -+ bool composeMode() const { return preeditLength(); } -+ bool hasIMSelection() const { return imSelectionLength(); } -+ int preeditLength() const { return ( imend - imstart ); } -+ int imSelectionLength() const { return ( imselend - imselstart ); } - - // complex text layout - QTextLayout textLayout; - void updateTextLayout(); - void moveCursor( int pos, bool mark = FALSE ); - void setText( const QString& txt ); -+ int xToPosInternal( int x, QTextItem::CursorPosition ) const; - int xToPos( int x, QTextItem::CursorPosition = QTextItem::BetweenCharacters ) const; - inline int visualAlignment() const { return alignment ? alignment : int( isRightToLeft() ? AlignRight : AlignLeft ); } - QRect cursorRect() const; -@@ -588,6 +599,7 @@ - return; - d->echoMode = mode; - d->updateTextLayout(); -+ setInputMethodEnabled( mode == Normal ); - update(); - } - -@@ -1419,6 +1431,8 @@ - */ - void QLineEdit::mousePressEvent( QMouseEvent* e ) - { -+ if ( sendMouseEventToInputContext( e ) ) -+ return; - if ( e->button() == RightButton ) - return; - if ( d->tripleClickTimer && ( e->pos() - d->tripleClick ).manhattanLength() < -@@ -1448,7 +1462,8 @@ - */ - void QLineEdit::mouseMoveEvent( QMouseEvent * e ) - { -- -+ if ( sendMouseEventToInputContext( e ) ) -+ return; - #ifndef QT_NO_CURSOR - if ( ( e->state() & MouseButtonMask ) == 0 ) { - if ( !d->readOnly && d->dragEnabled -@@ -1477,6 +1492,8 @@ - */ - void QLineEdit::mouseReleaseEvent( QMouseEvent* e ) - { -+ if ( sendMouseEventToInputContext( e ) ) -+ return; - #ifndef QT_NO_DRAGANDDROP - if ( e->button() == LeftButton ) { - if ( d->dndTimer ) { -@@ -1503,6 +1520,8 @@ - */ - void QLineEdit::mouseDoubleClickEvent( QMouseEvent* e ) - { -+ if ( sendMouseEventToInputContext( e ) ) -+ return; - if ( e->button() == Qt::LeftButton ) { - deselect(); - d->cursor = d->xToPos( e->pos().x() ); -@@ -1772,6 +1791,33 @@ - e->ignore(); - } - -+ -+/*! -+ This function is not intended as polymorphic usage. Just a shared code -+ fragment that calls QWidget::sendMouseEventToInputContext() easily for this -+ class. -+ */ -+bool QLineEdit::sendMouseEventToInputContext( QMouseEvent *e ) -+{ -+#ifndef QT_NO_IM -+ if ( d->composeMode() ) { -+ int cursor = d->xToPosInternal( e->pos().x(), QTextItem::OnCharacters ); -+ int mousePos = cursor - d->imstart; -+ if ( mousePos >= 0 && mousePos < d->preeditLength() ) { -+ QWidget::sendMouseEventToInputContext( mousePos, e->type(), -+ e->button(), e->state() ); -+ } else if ( e->type() != QEvent::MouseMove ) { -+ // send button events on out of preedit -+ QWidget::sendMouseEventToInputContext( -1, e->type(), -+ e->button(), e->state() ); -+ } -+ return TRUE; -+ } -+#endif -+ return FALSE; -+} -+ -+ - /*! \reimp - */ - void QLineEdit::imStartEvent( QIMEvent *e ) -@@ -1832,6 +1878,8 @@ - } - if( !hasSelectedText() || style().styleHint( QStyle::SH_BlinkCursorWhenTextSelected ) ) - d->setCursorVisible( TRUE ); -+ if ( d->hasIMSelection() ) -+ d->cursor = d->imselstart; - d->updateMicroFocusHint(); - } - -@@ -1916,6 +1964,14 @@ - } else if (d->hscroll < 0) { - d->hscroll = 0; - } -+ // This updateMicroFocusHint() is corresponding to update() at -+ // IMCompose event. Although the function is invoked from various -+ // other points, some situations such as "candidate selection on -+ // AlignHCenter'ed text" need this invocation because -+ // updateMicroFocusHint() requires updated contentsRect(), and -+ // there are no other chances in such situation that invoke the -+ // function. -+ d->updateMicroFocusHint(); - // the y offset is there to keep the baseline constant in case we have script changes in the text. - QPoint topLeft = lineRect.topLeft() - QPoint(d->hscroll, d->ascent-fm.ascent()); - -@@ -1956,7 +2012,7 @@ - } - - // input method edit area -- if ( d->imstart < d->imend && (last >= d->imstart && first < d->imend ) ) { -+ if ( d->composeMode() && (last >= d->imstart && first < d->imend ) ) { - QRect highlight = QRect( QPoint( tix + ti.cursorToX( QMAX( d->imstart - first, 0 ) ), lineRect.top() ), - QPoint( tix + ti.cursorToX( QMIN( d->imend - first, last - first + 1 ) )-1, lineRect.bottom() ) ).normalize(); - p->save(); -@@ -1969,11 +2025,16 @@ - imCol.setHsv( h1, s1, ( v1 + v2 ) / 2 ); - p->fillRect( highlight, imCol ); - p->drawTextItem( topLeft, ti, textflags ); -+ // draw preedit's underline -+ if (d->imend - d->imstart > 0) { -+ p->setPen( cg.text() ); -+ p->drawLine( highlight.bottomLeft(), highlight.bottomRight() ); -+ } - p->restore(); - } - - // input method selection -- if ( d->imselstart < d->imselend && (last >= d->imselstart && first < d->imselend ) ) { -+ if ( d->hasIMSelection() && (last >= d->imselstart && first < d->imselend ) ) { - QRect highlight = QRect( QPoint( tix + ti.cursorToX( QMAX( d->imselstart - first, 0 ) ), lineRect.top() ), - QPoint( tix + ti.cursorToX( QMIN( d->imselend - first, last - first + 1 ) )-1, lineRect.bottom() ) ).normalize(); - p->save(); -@@ -2001,7 +2062,11 @@ - } - - // draw cursor -- if ( d->cursorVisible && !supressCursor ) { -+ // -+ // Asian users regard IM selection text as cursor on candidate -+ // selection phase of input method, so ordinary cursor should be -+ // invisible if IM selection text exists. -+ if ( d->cursorVisible && !supressCursor && !d->hasIMSelection() ) { - QPoint from( topLeft.x() + cix, lineRect.top() ); - QPoint to = from + QPoint( 0, lineRect.height() ); - p->drawLine( from, to ); -@@ -2116,6 +2181,10 @@ - void QLineEdit::contextMenuEvent( QContextMenuEvent * e ) - { - #ifndef QT_NO_POPUPMENU -+#ifndef QT_NO_IM -+ if ( d->composeMode() ) -+ return; -+#endif - d->separate(); - QPopupMenu *menu = createPopupMenu(); - if (!menu) -@@ -2169,6 +2238,13 @@ - + ACCEL_KEY( A ) - #endif - ); -+ -+#ifndef QT_NO_IM -+ QInputContext *qic = getInputContext(); -+ if ( qic ) -+ qic->addMenusTo( popup ); -+#endif -+ - popup->setItemEnabled( id - IdUndo, d->isUndoAvailable() ); - popup->setItemEnabled( id - IdRedo, d->isRedoAvailable() ); - #ifndef QT_NO_CLIPBOARD -@@ -2302,7 +2378,7 @@ - textLayout.endLine(0, 0, Qt::AlignLeft|Qt::SingleLine, &ascent); - } - --int QLineEditPrivate::xToPos( int x, QTextItem::CursorPosition betweenOrOn ) const -+int QLineEditPrivate::xToPosInternal( int x, QTextItem::CursorPosition betweenOrOn ) const - { - x-= q->contentsRect().x() - hscroll + innerMargin; - for ( int i = 0; i < textLayout.numItems(); ++i ) { -@@ -2311,7 +2387,13 @@ - if ( x >= tir.left() && x <= tir.right() ) - return ti.xToCursor( x - tir.x(), betweenOrOn ) + ti.from(); - } -- return x < 0 ? 0 : text.length(); -+ return x < 0 ? -1 : text.length(); -+} -+ -+int QLineEditPrivate::xToPos( int x, QTextItem::CursorPosition betweenOrOn ) const -+{ -+ int pos = xToPosInternal( x, betweenOrOn ); -+ return ( pos < 0 ) ? 0 : pos; - } - - -@@ -2332,9 +2414,19 @@ - - void QLineEditPrivate::updateMicroFocusHint() - { -+ // To reduce redundant microfocus update notification, we remember -+ // the old rect and update the microfocus if actual update is -+ // required. The rect o is intentionally static because some -+ // notifyee requires the microfocus information as global update -+ // rather than per notifyee update to place shared widget around -+ // microfocus. -+ static QRect o; - if ( q->hasFocus() ) { -- QRect r = cursorRect(); -- q->setMicroFocusHint( r.x(), r.y(), r.width(), r.height() ); -+ QRect r = cursorRect(); -+ if ( o != r ) { -+ o = r; -+ q->setMicroFocusHint( r.x(), r.y(), r.width(), r.height() ); -+ } - } - } - ---- src/widgets/qlineedit.h -+++ src/widgets/qlineedit.h -@@ -196,6 +196,7 @@ - void dropEvent( QDropEvent * ); - #endif - void contextMenuEvent( QContextMenuEvent * ); -+ bool sendMouseEventToInputContext( QMouseEvent *e ); - virtual QPopupMenu *createPopupMenu(); - void windowActivationChange( bool ); - #ifndef QT_NO_COMPAT ---- src/widgets/qtextedit.cpp -+++ src/widgets/qtextedit.cpp -@@ -39,6 +39,11 @@ - - #ifndef QT_NO_TEXTEDIT - -+// Keep this position to avoid patch rejection -+#ifndef QT_NO_IM -+#include "qinputcontext.h" -+#endif -+ - #include "../kernel/qrichtext_p.h" - #include "qpainter.h" - #include "qpen.h" -@@ -108,6 +113,8 @@ - int id[ 7 ]; - int preeditStart; - int preeditLength; -+ bool composeMode() const { return ( preeditLength > 0 ); } -+ - uint ensureCursorVisibleInShowEvent : 1; - uint tabChangesFocus : 1; - QString scrollToAnchor; // used to deferr scrollToAnchor() until the show event when we are resized -@@ -1078,6 +1085,10 @@ - l += v; - } - } -+ -+ // This invocation is required to follow dragging of active window -+ // by the showed candidate window. -+ updateMicroFocusHint(); - } - - /*! -@@ -1553,6 +1564,35 @@ - } - - /*! -+ This function is not intended as polymorphic usage. Just a shared code -+ fragment that calls QWidget::sendMouseEventToInputContext() easily for this -+ class. -+ */ -+bool QTextEdit::sendMouseEventToInputContext( QMouseEvent *e ) -+{ -+#ifndef QT_NO_IM -+ if ( d->composeMode() ) { -+ QTextCursor c( doc ); -+ if ( c.place( e->pos(), doc->firstParagraph(), FALSE, FALSE, FALSE ) ) { -+ int mousePos = c.index() - d->preeditStart; -+ if ( cursor->globalY() == c.globalY() && -+ mousePos >= 0 && mousePos < d->preeditLength ) { -+ QWidget::sendMouseEventToInputContext( mousePos, e->type(), -+ e->button(), e->state() ); -+ } -+ } else if ( e->type() != QEvent::MouseMove ) { -+ // send button events on out of preedit -+ QWidget::sendMouseEventToInputContext( -1, e->type(), -+ e->button(), e->state() ); -+ } -+ return TRUE; -+ } -+#endif -+ return FALSE; -+} -+ -+ -+/*! - \reimp - */ - void QTextEdit::imStartEvent( QIMEvent *e ) -@@ -1582,11 +1622,17 @@ - doc->removeSelection( QTextDocument::IMCompositionText ); - doc->removeSelection( QTextDocument::IMSelectionText ); - -- if ( d->preeditLength > 0 && cursor->paragraph() ) -+ if ( d->composeMode() && cursor->paragraph() ) - cursor->paragraph()->remove( d->preeditStart, d->preeditLength ); - cursor->setIndex( d->preeditStart ); - d->preeditLength = e->text().length(); -- insert( e->text() ); -+ -+ int sellen = e->selectionLength(); -+ uint insertionFlags = CheckNewLines | RemoveSelected | AsIMCompositionText; -+ if ( sellen > 0 ) { -+ insertionFlags |= WithIMSelection; -+ } -+ insert( e->text(), insertionFlags ); - // insert can trigger an imEnd event as it emits a textChanged signal, so better - // be careful - if(d->preeditStart != -1) { -@@ -1598,14 +1644,20 @@ - - cursor->setIndex( d->preeditStart + e->cursorPos() ); - -- int sellen = e->selectionLength(); - if ( sellen > 0 ) { - cursor->setIndex( d->preeditStart + e->cursorPos() + sellen ); - c = *cursor; - cursor->setIndex( d->preeditStart + e->cursorPos() ); - doc->setSelectionStart( QTextDocument::IMSelectionText, *cursor ); - doc->setSelectionEnd( QTextDocument::IMSelectionText, c ); -+#if 0 -+ // Disabled for Asian input method that shows candidate -+ // window. This behavior is same as Qt/E 2.3.7 which supports -+ // Asian input methods. Asian input methods need start point -+ // of IM selection text to place candidate window as adjacent -+ // to the selection text. - cursor->setIndex( d->preeditStart + d->preeditLength ); -+#endif - } - } - -@@ -1629,11 +1681,12 @@ - if (undoRedoInfo.type == UndoRedoInfo::IME) - undoRedoInfo.type = UndoRedoInfo::Invalid; - -- if ( d->preeditLength > 0 && cursor->paragraph() ) -+ if ( d->composeMode() && cursor->paragraph() ) - cursor->paragraph()->remove( d->preeditStart, d->preeditLength ); - if ( d->preeditStart >= 0 ) { - cursor->setIndex( d->preeditStart ); -- insert( e->text() ); -+ //TODO: Qt 4 we should use the new virtual insert function -+ insert( e->text(), FALSE ); - } - d->preeditStart = d->preeditLength = -1; - -@@ -2124,6 +2177,13 @@ - isReadOnly() ) - return; - -+ // Asian users regard selection text as cursor on candidate -+ // selection phase of input method, so ordinary cursor should be -+ // invisible if IM selection text exists. -+ if ( doc->hasSelection( QTextDocument::IMSelectionText ) ) { -+ visible = FALSE; -+ } -+ - QPainter p( viewport() ); - QRect r( cursor->topParagraph()->rect() ); - cursor->paragraph()->setChanged( TRUE ); -@@ -2198,6 +2258,9 @@ - } - #endif - -+ if ( sendMouseEventToInputContext( e ) ) -+ return; -+ - if ( d->trippleClickTimer->isActive() && - ( e->globalPos() - d->trippleClickPoint ).manhattanLength() < - QApplication::startDragDistance() ) { -@@ -2303,7 +2366,9 @@ - return; - } - #endif -- if ( mousePressed ) { -+ if ( sendMouseEventToInputContext( e ) ) { -+ // don't return from here to avoid cursor vanishing -+ } else if ( mousePressed ) { - #ifndef QT_NO_DRAGANDDROP - if ( mightStartDrag ) { - dragStartTimer->stop(); -@@ -2360,7 +2425,7 @@ - - void QTextEdit::contentsMouseReleaseEvent( QMouseEvent * e ) - { -- if ( !inDoubleClick ) { // could be the release of a dblclick -+ if ( !inDoubleClick && !d->composeMode() ) { // could be the release of a dblclick - int para = 0; - int index = charAt( e->pos(), ¶ ); - emit clicked( para, index ); -@@ -2371,6 +2436,8 @@ - return; - } - #endif -+ if ( sendMouseEventToInputContext( e ) ) -+ return; - QTextCursor oldCursor = *cursor; - if ( scrollTimer->isActive() ) - scrollTimer->stop(); -@@ -2464,7 +2531,7 @@ - - void QTextEdit::contentsMouseDoubleClickEvent( QMouseEvent * e ) - { -- if ( e->button() != Qt::LeftButton ) { -+ if ( e->button() != Qt::LeftButton && !d->composeMode() ) { - e->ignore(); - return; - } -@@ -2495,6 +2562,9 @@ - } else - #endif - { -+ if ( sendMouseEventToInputContext( e ) ) -+ return; -+ - QTextCursor c1 = *cursor; - QTextCursor c2 = *cursor; - #if defined(Q_OS_MAC) -@@ -2670,10 +2740,15 @@ - */ - void QTextEdit::contentsContextMenuEvent( QContextMenuEvent *e ) - { -+ e->accept(); -+#ifndef QT_NO_IM -+ if ( d->composeMode() ) -+ return; -+#endif -+ - clearUndoRedo(); - mousePressed = FALSE; - -- e->accept(); - #ifndef QT_NO_POPUPMENU - QGuardedPtr that = this; - QGuardedPtr popup = createPopupMenu( e->pos() ); -@@ -2823,6 +2898,12 @@ - void QTextEdit::updateMicroFocusHint() - { - QTextCursor c( *cursor ); -+#if 0 -+ // Disabled for Asian input method that shows candidate -+ // window. This behavior is same as Qt/E 2.3.7 which supports -+ // Asian input methods. Asian input methods need start point of IM -+ // selection text to place candidate window as adjacent to the -+ // selection text. - if ( d->preeditStart != -1 ) { - c.setIndex( d->preeditStart ); - if(doc->hasSelection(QTextDocument::IMSelectionText)) { -@@ -2831,7 +2912,8 @@ - c.setIndex(index); - } - } -- -+#endif -+ - if ( hasFocus() || viewport()->hasFocus() ) { - int h = c.paragraph()->lineHeightOfChar( cursor->index() ); - if ( !readonly ) { -@@ -2995,6 +3077,8 @@ - bool indent = insertionFlags & RedoIndentation; - bool checkNewLine = insertionFlags & CheckNewLines; - bool removeSelected = insertionFlags & RemoveSelected; -+ bool imComposition = insertionFlags & AsIMCompositionText; -+ bool imSelection = insertionFlags & WithIMSelection; - QString txt( text ); - drawCursor( FALSE ); - if ( !isReadOnly() && doc->hasSelection( QTextDocument::Standard ) && removeSelected ) -@@ -3034,7 +3118,10 @@ - formatMore(); - repaintChanged(); - ensureCursorVisible(); -- drawCursor( TRUE ); -+ // Asian users regard selection text as cursor on candidate -+ // selection phase of input method, so ordinary cursor should be -+ // invisible if IM selection text exists. -+ drawCursor( !imSelection ); - - if ( undoEnabled && !isReadOnly() && undoRedoInfo.type != UndoRedoInfo::IME ) { - undoRedoInfo.d->text += txt; -@@ -3056,7 +3143,13 @@ - doc->setSelectionEnd( QTextDocument::Standard, *cursor ); - repaintChanged(); - } -- updateMicroFocusHint(); -+ // updateMicroFocusHint() should not be invoked here when this -+ // function is invoked from imComposeEvent() because cursor -+ // postion is incorrect yet. imComposeEvent() invokes -+ // updateMicroFocusHint() later. -+ if ( !imComposition ) { -+ updateMicroFocusHint(); -+ } - setModified(); - emit textChanged(); - } -@@ -5568,6 +5661,13 @@ - #else - d->id[ IdSelectAll ] = popup->insertItem( tr( "Select All" ) + ACCEL_KEY( A ) ); - #endif -+ -+#ifndef QT_NO_IM -+ QInputContext *qic = getInputContext(); -+ if ( qic ) -+ qic->addMenusTo( popup ); -+#endif -+ - popup->setItemEnabled( d->id[ IdUndo ], !isReadOnly() && doc->commands()->isUndoAvailable() ); - popup->setItemEnabled( d->id[ IdRedo ], !isReadOnly() && doc->commands()->isRedoAvailable() ); - #ifndef QT_NO_CLIPBOARD ---- src/widgets/qtextedit.h -+++ src/widgets/qtextedit.h -@@ -211,7 +211,9 @@ - enum TextInsertionFlags { - RedoIndentation = 0x0001, - CheckNewLines = 0x0002, -- RemoveSelected = 0x0004 -+ RemoveSelected = 0x0004, -+ AsIMCompositionText = 0x0008, // internal use -+ WithIMSelection = 0x0010 // internal use - }; - - QTextEdit( const QString& text, const QString& context = QString::null, -@@ -439,6 +441,7 @@ - void contentsDropEvent( QDropEvent *e ); - #endif - void contentsContextMenuEvent( QContextMenuEvent *e ); -+ bool sendMouseEventToInputContext( QMouseEvent *e ); - bool focusNextPrevChild( bool next ); - QTextDocument *document() const; - QTextCursor *textCursor() const; ---- tools/qtconfig/mainwindowbase.ui -+++ tools/qtconfig/mainwindowbase.ui -@@ -1016,6 +1016,19 @@ - 0 - - -+ -+ -+ inputMethodLabel -+ -+ -+ Default Input Method: -+ -+ -+ -+ -+ inputMethodCombo -+ -+ - - - spacer5 -@@ -1029,7 +1042,7 @@ - - - 20 -- 40 -+ 30 - - - -@@ -1705,6 +1718,12 @@ - somethingModified() - - -+ inputMethodCombo -+ activated(int) -+ MainWindowBase -+ somethingModified() -+ -+ - gstylecombo - activated(const QString&) - MainWindowBase ---- tools/qtconfig/mainwindow.cpp -+++ tools/qtconfig/mainwindow.cpp -@@ -27,6 +27,7 @@ - #include - #include - #include -+#include - #include - #include - #include -@@ -361,13 +362,73 @@ - - rtlExtensions->setChecked( settings.readBoolEntry( "/qt/useRtlExtensions", FALSE ) ); - --#ifdef Q_WS_X11 -+#if defined(Q_WS_X11) - inputStyle->setCurrentText( settings.readEntry( "/qt/XIMInputStyle", trUtf8( "On The Spot" ) ) ); - #else - inputStyle->hide(); - inputStyleLabel->hide(); - #endif - -+#if defined(Q_WS_X11) && !defined(QT_NO_IM_EXTENSIONS) -+ /* -+ This code makes it possible to set up default input method. -+ -+ The list of identifier names of input method which can be used -+ is acquired using QInputContextFactory::keys(). And it is -+ translated to display name and set to inputMethodCombo which -+ displays the list of input method. -+ */ -+ inputMethodIdentifiers = QInputContextFactory::keys(); -+ QStringList imDispNames; -+ { -+ // input method switcher should named with "imsw-" prefix to -+ // prevent to be listed in ordinary input method list. -+ QStringList::Iterator imIt = inputMethodIdentifiers.begin(); -+ while (imIt != inputMethodIdentifiers.end()) { -+ if ((*imIt).find("imsw-") == 0) -+ imIt = inputMethodIdentifiers.remove(imIt); -+ else -+ imIt++; -+ } -+ // we should not sort the list -+ //inputMethodIdentifiers.sort(); -+ for (imIt = inputMethodIdentifiers.begin(); -+ imIt != inputMethodIdentifiers.end(); -+ imIt++) { -+ QString dispName = QInputContextFactory::displayName(*imIt); -+ if (dispName.isNull() || dispName.isEmpty()) -+ dispName = *imIt; -+ imDispNames << dispName; -+ } -+ } -+ //inputMethodCombo->insertStringList(inputMethodIdentifiers); -+ inputMethodCombo->insertStringList(imDispNames); -+ -+ /* -+ input method set up as a default in the past is chosen. -+ If nothing is set up, default input method in the platform is chosen. -+ */ -+ // default input method is XIM in X11. -+ QString currentIM = settings.readEntry("/qt/DefaultInputMethod", "xim"); -+ { -+ int index = inputMethodIdentifiers.findIndex(currentIM); -+ // set up Selected input method. -+ if (0 <= index && index < inputMethodIdentifiers.count()) { -+ inputMethodCombo->setCurrentItem(index); -+ } else { -+ // Give up. this part is executed when specified IM is not -+ // installed. -+ QString dispName = tr("Unknown Input Method") + " (" + currentIM + ")"; -+ inputMethodCombo->insertItem(dispName); -+ inputMethodCombo->setCurrentItem(inputMethodCombo->count() - 1); -+ inputMethodIdentifiers << currentIM; -+ } -+ } -+#else -+ inputMethodCombo->hide(); -+ inputMethodLabel->hide(); -+#endif -+ - fontembeddingcheckbox->setChecked( settings.readBoolEntry("/qt/embedFonts", TRUE) ); - fontpaths = settings.readListEntry("/qt/fontPath", ':'); - fontpathlistbox->insertStringList(fontpaths); -@@ -444,6 +505,13 @@ - else if ( style == trUtf8( "Root" ) ) - str = "Root"; - settings.writeEntry( "/qt/XIMInputStyle", inputStyle->currentText() ); -+ -+#if !defined(QT_NO_IM_EXTENSIONS) -+ QString imSwitcher = settings.readEntry("/qt/DefaultInputMethodSwitcher", "imsw-multi"); -+ settings.writeEntry("/qt/DefaultInputMethodSwitcher", imSwitcher); -+ int imIndex = inputMethodCombo->currentItem(); -+ settings.writeEntry("/qt/DefaultInputMethod", inputMethodIdentifiers[imIndex]); -+#endif - #endif - - QStringList effects; ---- tools/qtconfig/mainwindow.h -+++ tools/qtconfig/mainwindow.h -@@ -83,6 +83,7 @@ - QPalette editPalette, previewPalette; - QStyle *previewstyle; - QStringList fontpaths; -+ QStringList inputMethodIdentifiers; - bool modified; - }; - diff --git a/opensuse/core/qt3/qt3-devel-doc.spec b/opensuse/core/qt3/qt3-devel-doc.spec index 622fb9854..601b85b0c 100644 --- a/opensuse/core/qt3/qt3-devel-doc.spec +++ b/opensuse/core/qt3/qt3-devel-doc.spec @@ -66,23 +66,14 @@ Patch1: aliasing.diff Patch2: head.diff Patch4: qt3-never-strip.diff Patch5: external-libs.diff -Patch6: 0001-dnd_optimization.patch -Patch7: 0002-dnd_active_window_fix.patch -Patch8: 0007-qpixmap_constants.patch -Patch11: 0038-dragobject-dont-prefer-unknown.patch Patch12: qtrc-path.diff Patch14: lib64-plugin-support.diff Patch15: pluginmanager-fix.diff Patch18: no-rpath.dif Patch19: shut-up.diff -Patch20: rubberband.diff Patch21: fix-GL-loading.diff Patch23: fix-accessible.diff -# From http://www.freedesktop.org/wiki/Software_2fImmoduleQtDownload -# Current version from http://freedesktop.org/~daisuke/qt-x11-immodule-unified-qt3.3.5-20060318.diff.bz2 -Patch25: qt-x11-immodule-unified-qt3.3.8-20060318.diff Patch28: fix-key-release-event-with-imm.diff -Patch29: 0047-fix-kmenu-width.diff Patch31: limit-image-size.diff Patch34: 0005-qpixmap_mitshm.patch Patch35: qt-transparency.patch @@ -149,10 +140,6 @@ getting started with Qt in /usr/lib/qt3/doc. %patch2 %patch4 %patch5 -%patch6 -%patch7 -%patch8 -%patch11 %patch12 if [ "%_lib" = "lib64" ]; then %patch14 @@ -160,11 +147,8 @@ fi %patch15 %patch18 %patch19 -%patch20 %patch23 -%patch25 -%patch28 -%patch29 +#%patch28 %patch31 %patch34 %patch35 @@ -210,7 +194,6 @@ fi %patch138 -p1 %endif %patch139 -%patch200 # copy qt kde integration files cp %SOURCE100 %SOURCE101 src/kernel/ cp %SOURCE101 include/private/ diff --git a/opensuse/core/qt3/qt3-extensions.spec b/opensuse/core/qt3/qt3-extensions.spec index c9b4459b5..969cc4da2 100644 --- a/opensuse/core/qt3/qt3-extensions.spec +++ b/opensuse/core/qt3/qt3-extensions.spec @@ -46,7 +46,7 @@ Source9: linguist.desktop Source5: linguist.png Source10: qt3.sh Source11: qt3.csh -# Translations did not change at 3.3.8c +# Translations did not change at 3.3.8d Source12: qt3-3.3.8b-translations.tar.bz2 Source100: qtkdeintegration_x11.cpp Source101: qtkdeintegration_x11_p.h @@ -57,23 +57,14 @@ Patch1: aliasing.diff Patch2: head.diff Patch4: qt3-never-strip.diff Patch5: external-libs.diff -Patch6: 0001-dnd_optimization.patch -Patch7: 0002-dnd_active_window_fix.patch -Patch8: 0007-qpixmap_constants.patch -Patch11: 0038-dragobject-dont-prefer-unknown.patch Patch12: qtrc-path.diff Patch14: lib64-plugin-support.diff Patch15: pluginmanager-fix.diff Patch18: no-rpath.dif Patch19: shut-up.diff -Patch20: rubberband.diff Patch21: fix-GL-loading.diff Patch23: fix-accessible.diff -# From http://www.freedesktop.org/wiki/Software_2fImmoduleQtDownload -# Current version from http://freedesktop.org/~daisuke/qt-x11-immodule-unified-qt3.3.5-20060318.diff.bz2 -Patch25: qt-x11-immodule-unified-qt3.3.8-20060318.diff Patch28: fix-key-release-event-with-imm.diff -Patch29: 0047-fix-kmenu-width.diff Patch31: limit-image-size.diff Patch34: 0005-qpixmap_mitshm.patch Patch35: qt-transparency.patch @@ -115,15 +106,6 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-build This package contains extension libraries for Qt 3, such as the Netscape plug-in modules. -This package contains extension libraries for Qt 3, such as the -Netscape plug-in modules. - -This package contains extension libraries for Qt 3, such as the -Netscape plug-in modules. - -This package contains extension libraries for Qt 3, such as the -Netscape plug-in modules. - %define build_sub_dirs src plugins/src tools/designer/uilib/ tools/designer/uic tools/qtconfig tools/assistant/lib tools/assistant tutorial %prep @@ -132,10 +114,6 @@ Netscape plug-in modules. %patch2 %patch4 %patch5 -%patch6 -%patch7 -%patch8 -%patch11 %patch12 if [ "%_lib" = "lib64" ]; then %patch14 @@ -143,11 +121,8 @@ fi %patch15 %patch18 %patch19 -%patch20 %patch23 -%patch25 -%patch28 -%patch29 +#%patch28 %patch31 %patch34 %patch35 @@ -193,7 +168,6 @@ fi %patch138 -p1 %endif %patch139 -%patch200 # copy qt kde integration files cp %SOURCE100 %SOURCE101 src/kernel/ cp %SOURCE101 include/private/ diff --git a/opensuse/core/qt3/qt3.changes b/opensuse/core/qt3/qt3.changes index db0df1efa..72551ce1c 100644 --- a/opensuse/core/qt3/qt3.changes +++ b/opensuse/core/qt3/qt3.changes @@ -1,3 +1,13 @@ +------------------------------------------------------------------- +Sun Nov 13 22:40:37 UTC 2011 - robxu9@gmail.com + +- Remove 0001-dnd_optimization.patch; upstream + +------------------------------------------------------------------- +Sun Nov 13 16:28:34 UTC 2011 - robxu9@gmail.com + +- Qt3 has a new upstream; update to 3.3.8d + ------------------------------------------------------------------- Fri Sep 23 10:16:33 UTC 2011 - coolo@suse.com diff --git a/opensuse/core/qt3/qt3.spec b/opensuse/core/qt3/qt3.spec index 3dc97953a..0c6df00cd 100644 --- a/opensuse/core/qt3/qt3.spec +++ b/opensuse/core/qt3/qt3.spec @@ -65,23 +65,14 @@ Patch1: aliasing.diff Patch2: head.diff Patch4: qt3-never-strip.diff Patch5: external-libs.diff -Patch6: 0001-dnd_optimization.patch -Patch7: 0002-dnd_active_window_fix.patch -Patch8: 0007-qpixmap_constants.patch -Patch11: 0038-dragobject-dont-prefer-unknown.patch Patch12: qtrc-path.diff Patch14: lib64-plugin-support.diff Patch15: pluginmanager-fix.diff Patch18: no-rpath.dif Patch19: shut-up.diff -Patch20: rubberband.diff Patch21: fix-GL-loading.diff Patch23: fix-accessible.diff -# From http://www.freedesktop.org/wiki/Software_2fImmoduleQtDownload -# Current version from http://freedesktop.org/~daisuke/qt-x11-immodule-unified-qt3.3.5-20060318.diff.bz2 -Patch25: qt-x11-immodule-unified-qt3.3.8-20060318.diff Patch28: fix-key-release-event-with-imm.diff -Patch29: 0047-fix-kmenu-width.diff Patch31: limit-image-size.diff Patch34: 0005-qpixmap_mitshm.patch Patch35: qt-transparency.patch @@ -140,10 +131,6 @@ the current Qt library! %patch2 %patch4 %patch5 -%patch6 -%patch7 -%patch8 -%patch11 %patch12 if [ "%_lib" = "lib64" ]; then %patch14 @@ -151,11 +138,8 @@ fi %patch15 %patch18 %patch19 -%patch20 %patch23 -%patch25 -%patch28 -%patch29 +#%patch28 %patch31 %patch34 %patch35 @@ -201,7 +185,6 @@ fi %patch138 -p1 %endif %patch139 -%patch200 # copy qt kde integration files cp %SOURCE100 %SOURCE101 src/kernel/ cp %SOURCE101 include/private/ diff --git a/opensuse/core/qt3/rubberband.diff b/opensuse/core/qt3/rubberband.diff deleted file mode 100644 index e02b17a98..000000000 --- a/opensuse/core/qt3/rubberband.diff +++ /dev/null @@ -1,339 +0,0 @@ ---- src/iconview/qiconview.cpp -+++ src/iconview/qiconview.cpp -@@ -261,6 +261,7 @@ - - QIconViewToolTip *toolTip; - QPixmapCache maskCache; -+ QPixmap *backrubber; - QPtrDict selectedItems; - - struct ItemContainer { -@@ -1975,14 +1976,27 @@ - if ( picture() ) { - QPicture *pic = picture(); - if ( isSelected() ) { -- p->fillRect( pixmapRect( FALSE ), QBrush( cg.highlight(), QBrush::Dense4Pattern) ); -+ p->setBrush( QBrush( cg.highlight(), QBrush::Dense4Pattern ) ); -+ p->setPen( QPen( cg.highlight(), QBrush::Dense4Pattern ) ); -+ p->drawRoundRect( pixmapRect( FALSE ), -+ 1000 / pixmapRect( FALSE ).width(), -+ 1000 / pixmapRect( FALSE ).height() ); - } - p->drawPicture( x()-pic->boundingRect().x(), y()-pic->boundingRect().y(), *pic ); - if ( isSelected() ) { -- p->fillRect( textRect( FALSE ), cg.highlight() ); -+ p->setBrush( QBrush( cg.highlight() ) ); -+ p->setPen( QPen( cg.highlight() ) ); -+ p->drawRoundRect( textRect( FALSE ), -+ 1000 / textRect( FALSE ).width(), -+ 1000 / textRect( FALSE ).height() ); - p->setPen( QPen( cg.highlightedText() ) ); -- } else if ( view->d->itemTextBrush != NoBrush ) -- p->fillRect( textRect( FALSE ), view->d->itemTextBrush ); -+ } else if ( view->d->itemTextBrush != NoBrush ) { -+ p->setBrush( view->d->itemTextBrush ); -+ p->setPen( QPen( view->d->itemTextBrush.color() ) ); -+ p->drawRoundRect( textRect( FALSE ), -+ 1000 / textRect( FALSE ).width(), -+ 1000 / textRect( FALSE ).height() ); -+ } - - int align = view->itemTextPos() == QIconView::Bottom ? AlignHCenter : AlignAuto; - if ( view->d->wordWrapIconText ) -@@ -2040,10 +2054,19 @@ - - p->save(); - if ( isSelected() ) { -- p->fillRect( textRect( FALSE ), cg.highlight() ); -+ p->setBrush( QBrush( cg.highlight() ) ); -+ p->setPen( QPen( cg.highlight() ) ); -+ p->drawRoundRect( textRect( FALSE ), -+ 1000 / textRect( FALSE ).width(), -+ 1000 / textRect( FALSE ).height() ); - p->setPen( QPen( cg.highlightedText() ) ); -- } else if ( view->d->itemTextBrush != NoBrush ) -- p->fillRect( textRect( FALSE ), view->d->itemTextBrush ); -+ } else if ( view->d->itemTextBrush != NoBrush ) { -+ p->setBrush( view->d->itemTextBrush ); -+ p->setPen( QPen( view->d->itemTextBrush.color() ) ); -+ p->drawRoundRect( textRect( FALSE ), -+ 1000 / textRect( FALSE ).width(), -+ 1000 / textRect( FALSE ).height() ); -+ } - - int align = AlignHCenter; - if ( view->d->wordWrapIconText ) -@@ -2059,31 +2082,13 @@ - /*! - Paints the focus rectangle of the item using the painter \a p and - the color group \a cg. -+ -+ The default implementation does nothing; subclasses may -+ reimplement this function. - */ - --void QIconViewItem::paintFocus( QPainter *p, const QColorGroup &cg ) -+void QIconViewItem::paintFocus( QPainter *, const QColorGroup & ) - { -- if ( !view ) -- return; -- -- view->style().drawPrimitive(QStyle::PE_FocusRect, p, -- QRect( textRect( FALSE ).x(), textRect( FALSE ).y(), -- textRect( FALSE ).width(), -- textRect( FALSE ).height() ), cg, -- (isSelected() ? -- QStyle::Style_FocusAtBorder : -- QStyle::Style_Default), -- QStyleOption(isSelected() ? cg.highlight() : cg.base())); -- -- if ( this != view->d->currentItem ) { -- view->style().drawPrimitive(QStyle::PE_FocusRect, p, -- QRect( pixmapRect( FALSE ).x(), -- pixmapRect( FALSE ).y(), -- pixmapRect( FALSE ).width(), -- pixmapRect( FALSE ).height() ), -- cg, QStyle::Style_Default, -- QStyleOption(cg.base())); -- } - } - - /*! -@@ -2781,6 +2786,7 @@ - d->renamingItem = 0; - d->drawActiveSelection = TRUE; - d->drawDragShapes = FALSE; -+ d->backrubber = 0; - - connect( d->adjustTimer, SIGNAL( timeout() ), - this, SLOT( adjustItems() ) ); -@@ -3265,7 +3271,7 @@ - - void QIconView::doAutoScroll() - { -- QRect oldRubber = QRect( *d->rubber ); -+ QRect oldRubber = *d->rubber; - - QPoint vp = viewport()->mapFromGlobal( QCursor::pos() ); - QPoint pos = viewportToContents( vp ); -@@ -3282,7 +3288,6 @@ - bool block = signalsBlocked(); - - QRect rr; -- QRegion region( 0, 0, visibleWidth(), visibleHeight() ); - - blockSignals( TRUE ); - viewport()->setUpdatesEnabled( FALSE ); -@@ -3308,9 +3313,6 @@ - item->setSelected( TRUE, TRUE ); - changed = TRUE; - rr = rr.unite( item->rect() ); -- } else { -- region = region.subtract( QRect( contentsToViewport( item->pos() ), -- item->size() ) ); - } - - minx = QMIN( minx, item->x() - 1 ); -@@ -3327,42 +3329,77 @@ - viewport()->setUpdatesEnabled( TRUE ); - blockSignals( block ); - -- QRect r = *d->rubber; -- *d->rubber = oldRubber; -- -- QPainter p; -- p.begin( viewport() ); -- p.setRasterOp( NotROP ); -- p.setPen( QPen( color0, 1 ) ); -- p.setBrush( NoBrush ); -- drawRubber( &p ); -- d->dragging = FALSE; -- p.end(); -- -- *d->rubber = r; -- -- if ( changed ) { -- d->drawAllBack = FALSE; -- d->clipRegion = region; -- repaintContents( rr, FALSE ); -- d->drawAllBack = TRUE; -+ // static bool drawAll; -+ if ( d->backrubber == 0 ) { -+ d->backrubber = new QPixmap( viewport()->rect().size() ); -+ d->backrubber->fill( viewport(), viewport()->rect().topLeft() ); -+ // drawAll = true; - } - -+ // int oldX = 0, oldY = 0; -+ // if ( !drawAll && d->scrollTimer ) { -+ // oldX = contentsX(); -+ // oldY = contentsY(); -+ // } - ensureVisible( pos.x(), pos.y() ); -+ // if ( !drawAll && d->scrollTimer && ( oldX != contentsX() || oldY != contentsY() ) ) -+ // drawAll = true; - -- p.begin( viewport() ); -- p.setRasterOp( NotROP ); -- p.setPen( QPen( color0, 1 ) ); -- p.setBrush( NoBrush ); -- drawRubber( &p ); -- d->dragging = TRUE; -+ QRect allRect = oldRubber.normalize(); -+ if ( changed ) -+ allRect |= rr.normalize(); -+ allRect |= d->rubber->normalize(); -+ QPoint point = contentsToViewport( allRect.topLeft() ); -+ allRect = QRect( point.x(), point.y(), allRect.width(), allRect.height() ); -+ allRect &= viewport()->rect(); -+ -+ d->dragging = FALSE; -+ -+ QPainter p( d->backrubber ); -+ p.translate( -contentsX(), -contentsY() ); -+#if 0 -+ if ( !drawAll ) { -+ oldRubber = oldRubber.normalize(); -+ point = contentsToViewport( oldRubber.topLeft() ); -+ oldRubber = QRect( point.x(), point.y(), oldRubber.width(), oldRubber.height() ); -+ oldRubber &= viewport()->rect(); -+ -+ point = contentsToViewport( nr.topLeft() ); -+ nr = QRect( point.x(), point.y(), nr.width(), nr.height() ); -+ nr &= viewport()->rect(); -+ -+ QRegion region; -+ if ( allRect != nr ) -+ region = QRegion(allRect).subtract( QRegion( nr ) ); -+ if ( allRect != oldRubber ) -+ region += QRegion(allRect).subtract( QRegion( oldRubber ) ); -+ -+ QMemArray< QRect > ar = region.rects(); -+ for ( uint i = 0; i < ar.size(); ++i ) { -+ ar[i].addCoords( -2, -2, 4, 4 ); -+ ar[i] = ar[i].normalize(); -+ -+ p.setClipRect( ar[i] ); -+ drawContents( &p, contentsX() + ar[i].left(), contentsY() + ar[i].top(), ar[i].width(), ar[i].height() ); -+ } -+ } -+ else -+#endif -+ { -+ drawContents( &p, -+ contentsX() + allRect.left(), contentsY() + allRect.top(), -+ allRect.width(), allRect.height() ); -+ } - - p.end(); -+ // drawAll = false; -+ d->dragging = TRUE; -+ bitBlt( viewport(), allRect.topLeft(), d->backrubber, allRect ); - - if ( changed ) { - emit selectionChanged(); -- if ( d->selectionMode == Single ) -- emit selectionChanged( d->currentItem ); -+ if ( d->selectionMode == Single ) -+ emit selectionChanged( d->currentItem ); - } - - if ( !QRect( 50, 50, viewport()->width()-100, viewport()->height()-100 ).contains( vp ) && -@@ -3389,9 +3426,7 @@ - - void QIconView::drawContents( QPainter *p, int cx, int cy, int cw, int ch ) - { -- if ( d->dragging && d->rubber ) -- drawRubber( p ); -- -+ p->save(); - QRect r = QRect( cx, cy, cw, ch ); - - QIconViewPrivate::ItemContainer *c = d->firstContainer; -@@ -3465,8 +3500,16 @@ - d->currentItem->paintFocus( p, colorGroup() ); - } - -- if ( d->dragging && d->rubber ) -- drawRubber( p ); -+ p->restore(); -+ if ( d->rubber ) { -+ p->save(); -+ p->translate( contentsX(), contentsY() ); -+ p->setRasterOp( NotROP ); -+ p->setPen( QPen( color0, 1 ) ); -+ p->setBrush( NoBrush ); -+ drawRubber( p ); -+ p->restore(); -+ } - } - - /*! -@@ -4365,17 +4408,15 @@ - void QIconView::contentsMousePressEventEx( QMouseEvent *e ) - { - if ( d->rubber ) { -- QPainter p; -- p.begin( viewport() ); -- p.setRasterOp( NotROP ); -- p.setPen( QPen( color0, 1 ) ); -- p.setBrush( NoBrush ); -+ QRect r( d->rubber->normalize() ); -+ delete d->rubber; -+ d->rubber = 0; -+ -+ repaintContents( r, FALSE ); -+ d->dragging = FALSE; - -- drawRubber( &p ); -- d->dragging = FALSE; -- p.end(); -- delete d->rubber; -- d->rubber = 0; -+ delete d->backrubber; -+ d->backrubber = 0; - - if ( d->scrollTimer ) { - disconnect( d->scrollTimer, SIGNAL( timeout() ), this, SLOT( doAutoScroll() ) ); -@@ -4560,21 +4601,17 @@ - d->startDragItem = 0; - - if ( d->rubber ) { -- QPainter p; -- p.begin( viewport() ); -- p.setRasterOp( NotROP ); -- p.setPen( QPen( color0, 1 ) ); -- p.setBrush( NoBrush ); -- -- drawRubber( &p ); -- d->dragging = FALSE; -- p.end(); -- -+ QRect r(d->rubber->normalize()); -+ - if ( ( d->rubber->topLeft() - d->rubber->bottomRight() ).manhattanLength() > - QApplication::startDragDistance() ) - emitClicked = FALSE; - delete d->rubber; -- d->rubber = 0; -+ d->rubber = 0; -+ repaintContents(r, FALSE); -+ d->dragging = FALSE; -+ delete d->backrubber; -+ d->backrubber = 0; - d->currentItem = d->tmpCurrentItem; - d->tmpCurrentItem = 0; - if ( d->currentItem ) -@@ -5334,9 +5371,9 @@ - QPoint pnt( d->rubber->x(), d->rubber->y() ); - pnt = contentsToViewport( pnt ); - -- style().drawPrimitive(QStyle::PE_RubberBand, p, -- QRect(pnt.x(), pnt.y(), d->rubber->width(), d->rubber->height()), -- colorGroup(), QStyle::Style_Default, QStyleOption(colorGroup().base())); -+ style().drawPrimitive( QStyle::PE_RubberBand, p, -+ QRect( pnt.x(), pnt.y(), d->rubber->width(), d->rubber->height() ).normalize(), -+ colorGroup(), QStyle::Style_Default, QStyleOption(colorGroup().base()) ); - } - - /*! -- cgit v1.2.3 From d23dfe93da17397db5e6f8bdf74fedf769379bdb Mon Sep 17 00:00:00 2001 From: Robert Xu Date: Wed, 16 Nov 2011 18:31:44 -0500 Subject: ah! my eclipse files! >_> --- opensuse/.gitignore | 1 - opensuse/core/.metadata/.mylyn/tasks.xml.zip | Bin 0 -> 675 bytes .../.history/27/20f492dd7a0e00111528b7e658abf294 | 405 ++++++++++++++++++ .../.history/49/801f98f6760e00111528b7e658abf294 | 407 ++++++++++++++++++ .../.history/57/d0539bf6760e00111528b7e658abf294 | 289 +++++++++++++ .../.history/60/c05c99dd7a0e00111528b7e658abf294 | 287 +++++++++++++ .../.history/6d/30a0e5bffc0e00111528b7e658abf294 | 283 ++++++++++++ .../.history/77/f0bbc270480e00111528b7e658abf294 | 473 +++++++++++++++++++++ .../.history/7d/a05a9559480e00111528b7e658abf294 | 180 ++++++++ .../.history/81/10a57b7a1c0f00111528b7e658abf294 | 279 ++++++++++++ .../.history/89/a07cdabffc0e00111528b7e658abf294 | 401 +++++++++++++++++ .../.history/95/700a9bdd7a0e00111528b7e658abf294 | 467 ++++++++++++++++++++ .../.history/9a/b01da97a1c0f00111528b7e658abf294 | 450 ++++++++++++++++++++ .../.history/a3/00652d4e000f00111528b7e658abf294 | 397 +++++++++++++++++ .../.history/a5/b0d8e6bffc0e00111528b7e658abf294 | 463 ++++++++++++++++++++ .../.history/a9/f01f324e000f00111528b7e658abf294 | 450 ++++++++++++++++++++ .../.history/ab/60c0304e000f00111528b7e658abf294 | 279 ++++++++++++ .../.history/b8/10e1717a1c0f00111528b7e658abf294 | 397 +++++++++++++++++ .../.history/c0/60ebbe70480e00111528b7e658abf294 | 293 +++++++++++++ .../.history/d2/707cc05f480e00111528b7e658abf294 | 411 ++++++++++++++++++ .../.history/e2/40d69ef6760e00111528b7e658abf294 | 469 ++++++++++++++++++++ .../.settings/org.eclipse.ui.browser.prefs | 3 + .../.settings/org.eclipse.wst.sse.core.prefs | 3 + .../.workspace/2011/11/47/refactorings.history | 4 + .../.workspace/2011/11/47/refactorings.index | 1 + 25 files changed, 7091 insertions(+), 1 deletion(-) create mode 100644 opensuse/core/.metadata/.mylyn/tasks.xml.zip create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.history/27/20f492dd7a0e00111528b7e658abf294 create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.history/49/801f98f6760e00111528b7e658abf294 create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.history/57/d0539bf6760e00111528b7e658abf294 create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.history/60/c05c99dd7a0e00111528b7e658abf294 create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.history/6d/30a0e5bffc0e00111528b7e658abf294 create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.history/77/f0bbc270480e00111528b7e658abf294 create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.history/7d/a05a9559480e00111528b7e658abf294 create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.history/81/10a57b7a1c0f00111528b7e658abf294 create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.history/89/a07cdabffc0e00111528b7e658abf294 create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.history/95/700a9bdd7a0e00111528b7e658abf294 create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.history/9a/b01da97a1c0f00111528b7e658abf294 create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.history/a3/00652d4e000f00111528b7e658abf294 create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.history/a5/b0d8e6bffc0e00111528b7e658abf294 create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.history/a9/f01f324e000f00111528b7e658abf294 create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.history/ab/60c0304e000f00111528b7e658abf294 create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.history/b8/10e1717a1c0f00111528b7e658abf294 create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.history/c0/60ebbe70480e00111528b7e658abf294 create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.history/d2/707cc05f480e00111528b7e658abf294 create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.history/e2/40d69ef6760e00111528b7e658abf294 create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.browser.prefs create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.wst.sse.core.prefs create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.ltk.core.refactoring/.refactorings/.workspace/2011/11/47/refactorings.history create mode 100644 opensuse/core/.metadata/.plugins/org.eclipse.ltk.core.refactoring/.refactorings/.workspace/2011/11/47/refactorings.index diff --git a/opensuse/.gitignore b/opensuse/.gitignore index 5f0a10e64..3534a469b 100644 --- a/opensuse/.gitignore +++ b/opensuse/.gitignore @@ -1,4 +1,3 @@ *~ _build* .osc -.metadata diff --git a/opensuse/core/.metadata/.mylyn/tasks.xml.zip b/opensuse/core/.metadata/.mylyn/tasks.xml.zip new file mode 100644 index 000000000..0c226bf6d Binary files /dev/null and b/opensuse/core/.metadata/.mylyn/tasks.xml.zip differ diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.history/27/20f492dd7a0e00111528b7e658abf294 b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.history/27/20f492dd7a0e00111528b7e658abf294 new file mode 100644 index 000000000..a37e73495 --- /dev/null +++ b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.history/27/20f492dd7a0e00111528b7e658abf294 @@ -0,0 +1,405 @@ +# +# spec file for package qt3 +# +# Copyright (c) 2011 SUSE LINUX Products GmbH, Nuernberg, Germany. +# +# All modifications and additions to the file contributed by third parties +# remain the property of their copyright owners, unless otherwise agreed +# upon. The license for this file, and modifications and additions to the +# file, is the same license as for the pristine package itself (unless the +# license for the pristine package is not an Open Source License, in which +# case the license is the MIT License). An "Open Source License" is a +# license that conforms to the Open Source Definition (Version 1.9) +# published by the Open Source Initiative. + +# Please submit bugfixes or comments via http://bugs.opensuse.org/ +# + + + +Name: qt3 +#Remember also to modify Requires in -devel package +BuildRequires: Mesa-devel c++_compiler cups-devel freetype2-devel libjpeg-devel libmng-devel pkgconfig update-desktop-files xorg-x11-devel +Url: http://www.trolltech.com/ +License: GPLv2 ; GPLv3 ; QPL .. +%if %suse_version > 1120 +BuildRequires: libpng14-compat-devel +%else +BuildRequires: libpng-devel +%endif +Group: System/Libraries +# bug437293 +%ifarch ppc64 +Obsoletes: qt3-64bit +%endif +# +Summary: A library for developing applications with graphical user interfaces +Version: 3.3.8d +Release: 110 +Provides: qt_library_%version +Recommends: kdelibs3-default-style +PreReq: /bin/grep +# COMMON-BEGIN +%define x11_free -x11-free- +%define rversion 3.3.8b +Source0: http://mirror.its.uidaho.edu/pub/trinity/releases/3.5.13/dependencies/qt3-3.3.8.d.tar.gz +Source1: build_script.sh +Source2: qtconfig3.desktop +Source3: qtrc +Source4: assistant3.png +Source6: assistant3.desktop +Source7: designer.desktop +Source8: designer.png +Source9: linguist.desktop +Source5: linguist.png +Source10: qt3.sh +Source11: qt3.csh +# Translations did not change at 3.3.8c +Source12: qt3-3.3.8b-translations.tar.bz2 +Source100: qtkdeintegration_x11.cpp +Source101: qtkdeintegration_x11_p.h +Source102: baselibs.conf +Source200: attributes +Source201: update_spec.pl +Patch1: aliasing.diff +Patch2: head.diff +Patch4: qt3-never-strip.diff +Patch5: external-libs.diff +Patch11: 0038-dragobject-dont-prefer-unknown.patch +Patch12: qtrc-path.diff +Patch14: lib64-plugin-support.diff +Patch15: pluginmanager-fix.diff +Patch18: no-rpath.dif +Patch19: shut-up.diff +Patch20: rubberband.diff +Patch21: fix-GL-loading.diff +Patch23: fix-accessible.diff +# From http://www.freedesktop.org/wiki/Software_2fImmoduleQtDownload +# Current version from http://freedesktop.org/~daisuke/qt-x11-immodule-unified-qt3.3.5-20060318.diff.bz2 +Patch25: qt-x11-immodule-unified-qt3.3.8-20060318.diff +Patch28: fix-key-release-event-with-imm.diff +Patch29: 0047-fix-kmenu-width.diff +Patch31: limit-image-size.diff +Patch34: 0005-qpixmap_mitshm.patch +Patch35: qt-transparency.patch +Patch37: 0055-qtextedit_zoom.patch +Patch38: 0048-qclipboard_hack_80072.patch +Patch39: fix-qtranslator-crash.diff +Patch40: 0059-qpopup_has_mouse.patch +Patch41: 0060-qpopup_ignore_mousepos.patch +Patch42: add_qexport_visibility.patch +Patch43: 0056-khotkeys_input_84434.patch +Source250: enable-designer-plugins.diff +Patch53: fix-xinerama-dialog-placement.diff +Patch54: kmenu-search-fix.diff +Patch55: qt3-fix-cast.diff +Patch100: qt.patch +Patch101: qt3-arm-gcc4.patch +Patch102: xinerama.patch +Patch113: fix-assistant-path.patch +Patch117: qtimer-debug.diff +Patch119: xinerama-qpopupmenu.diff +Patch121: qt3-warnings.diff +Patch123: use-xrandr-1.2.diff +Patch125: qcstring-format-warnings.diff +Patch127: mng-reading-fix.patch +Patch128: 0079-compositing-types.patch +Patch129: 0080-net-wm-sync-request.patch +Patch132: revert-qt-3.3.8-khmer-fix.diff +Patch133: 0085-fix-buildkey.diff +Patch134: fix-xinput-clash.diff +Patch135: parseFontName.diff +Patch136: qt3-no-date.diff +Patch137: popen-leak-fix.diff +Patch138: qt3-libpng14.diff +Patch139: gcc46.diff + +BuildRoot: %{_tmppath}/%{name}-%{version}-build + +%description +Qt is a program library for developing applications with graphical user +interfaces. It allows you to rapidly develop professional programs. The +Qt library is available not only for Linux but for a great number of +Unices and even for Windows. Thus it is possible to write programs that +may be easily ported to those platforms. + +You need a license for using Qt with a non-GPL application, which can +be acquired from sales@trolltech.com. + +See /usr/share/doc/packages/qt3 for details about the new features of +the current Qt library! + +%define build_sub_dirs src plugins/src tools/designer/uilib/ tools/designer/uic tools/qtconfig tools/assistant/lib tools/assistant tutorial + +%prep +%setup -q -n qt3 +%patch1 +%patch2 +%patch4 +%patch5 +%patch11 +%patch12 +if [ "%_lib" = "lib64" ]; then +%patch14 +fi +%patch15 +%patch18 +%patch19 +%patch20 +%patch23 +%patch25 +%patch28 +%patch29 +%patch31 +%patch34 +%patch35 +%patch37 +%patch38 +%patch39 +%patch40 +%patch41 +%patch42 +%patch43 +%patch100 +%patch102 +%patch53 +%patch54 +%patch55 +%patch101 +%patch113 +%patch117 +%patch119 +%patch121 +%patch123 +ln -sf $PWD/src/inputmethod/qinputcontextfactory.h include/ +ln -sf $PWD/src/inputmethod/qinputcontextplugin.h include/ +ln -sf $PWD/src/kernel/qinputcontext.h include/ +ln -sf $PWD/src/kernel/qinputcontextinterface_p.h include/private/ +ln -sf $PWD/src/kernel/qximinputcontext_p.h include/private/ +if [ %_lib = "lib" ]; then +sed 's,/lib64/,/lib/,' %PATCH21 | patch -p0 +else +%patch21 +fi +%patch125 +%patch127 +%patch128 +%patch129 +%patch132 +%patch133 +%patch134 +%patch135 +%patch136 +%patch137 +%if %suse_version > 1120 +%patch138 -p1 +%endif +%patch139 +# copy qt kde integration files +cp %SOURCE100 %SOURCE101 src/kernel/ +cp %SOURCE101 include/private/ +cd translations +tar xvjf %SOURCE12 +cd .. +# COMMON-END + +%package devel +License: GPLv2 ; GPLv3 ; QPL .. +Summary: Include Files and Libraries mandatory for Development +Requires: qt3 = %version +Requires: pkgconfig cups-devel freetype2-devel libmng-devel libjpeg-devel c++_compiler xorg-x11-devel +%if %suse_version > 1120 +Recommends: libpng14-compat-devel +Requires: libpng-devel +%else +Requires: libpng-devel +%endif +%if %suse_version > 1000 +Requires: Mesa-devel +%else +Requires: xorg-x11-Mesa xorg-x11-Mesa-devel +%endif +%ifnarch x86_64 s390x sparc64 ppc64 mips64 +Conflicts: devel_libs-32bit +%endif +# bug437293 +%ifarch ppc64 +Obsoletes: qt3-devel-64bit +%endif +# +Group: Development/Libraries/X11 + +%description devel +You need this package if you want to compile programs with Qt 3. It +contains the "Qt Crossplatform Development Kit 2". Under /usr/lib/qt3 +you will find include files. + +You need a license for using Qt with a non-GPL application. A license +can be acquired at sales@trolltech.com. + +%build +export VERSION=%suse_version +source %SOURCE1 %{version} +export WLIB=%_lib +export QTDIR=`pwd` +if [ %_lib == "lib64" ]; then +export RPM_OPT_FLAGS="$RPM_OPT_FLAGS -DUSE_LIB64_PATHES" +fi +export RPM_OPT_FLAGS="$RPM_OPT_FLAGS -fno-strict-aliasing" +# +# call build from build_script.rpmrc for threaded Qt library +# only really needed tools will be builded here, all extra tools will be +# builded in qt3.spec +# +call_configure -v -thread -shared -no-sql-mysql -no-sql-psql -no-sql-odbc -no-sql-sqlite $OPTIONS +for i in %build_sub_dirs ; do + cd $i + make %{?jobs:-j%jobs} + cd - +done + +%install +export VERSION=%suse_version +export WLIB=%_lib +export QTDIR=`pwd` +source %SOURCE1 %{version} +for i in %build_sub_dirs ; do + cd $i + make INSTALL_ROOT=$RPM_BUILD_ROOT install + cd - +done +post_install $RPM_BUILD_ROOT/usr/lib/qt3/ +mkdir -p $RPM_BUILD_ROOT/usr/share/pixmaps/ +sed -i -e 's, on: .*,,' $RPM_BUILD_ROOT/usr/lib/qt3/%_lib/*.la +# +# copy additional files +# +install -m 0755 bin/qmake bin/moc ${RPM_BUILD_ROOT}/usr/lib/qt3/bin/ +install -m 0755 -d ${RPM_BUILD_ROOT}/usr/lib/qt3/translations/ +install -m 0644 translations/*.qm ${RPM_BUILD_ROOT}/usr/lib/qt3/translations/ +if [ %_lib = lib64 ]; then + for i in $RPM_BUILD_ROOT/usr/lib/qt3/plugins/*/*.so; do + mv "$i" "${i%.so}.lib64.so" + done +fi +# +# move pkgconfig files +# +mkdir -p $RPM_BUILD_ROOT/%_libdir/pkgconfig +mv $RPM_BUILD_ROOT/usr/lib/qt3/%_lib/pkgconfig/*.pc \ + $RPM_BUILD_ROOT/%_libdir/pkgconfig +rmdir $RPM_BUILD_ROOT/usr/lib/qt3/%_lib/pkgconfig +# +# move docs in doc dir +# +install -d -m 0755 ${RPM_BUILD_ROOT}/%{_defaultdocdir}/qt3/ +install -d -m 0755 ${RPM_BUILD_ROOT}/usr/lib/qt3/mkspecs/ +install -d -m 0755 ${RPM_BUILD_ROOT}/usr/lib/qt3/mkspecs/ +cp -a mkspecs/* ${RPM_BUILD_ROOT}/usr/lib/qt3/mkspecs/ +if [ %_lib == "lib64" ]; then + ln -sf linux-g++-64 ${RPM_BUILD_ROOT}/usr/lib/qt3/mkspecs/default +else + ln -sf linux-g++ ${RPM_BUILD_ROOT}/usr/lib/qt3/mkspecs/default +fi +find ${RPM_BUILD_ROOT}/usr/lib/qt3/mkspecs -type f -perm /111 -print0 | xargs -0 chmod a-x +# +# create links in ld.so.conf path +# +install -d -m 0755 ${RPM_BUILD_ROOT}/%{_libdir} +ln -sf ../lib/qt3/%{_lib}/libqt-mt.so.3 ${RPM_BUILD_ROOT}/%{_libdir}/libqt-mt.so.3 +ln -sf ../lib/qt3/%{_lib}/libqui.so.1 ${RPM_BUILD_ROOT}/%{_libdir}/libqui.so.1 +[ "lib" != "%{_lib}" ] && \ + ln -sf ../lib/qt3 ${RPM_BUILD_ROOT}/%{_libdir}/qt3 +mkdir -p ${RPM_BUILD_ROOT}/etc/profile.d +install -m 644 %SOURCE10 %SOURCE11 ${RPM_BUILD_ROOT}/etc/profile.d +# +# default qt settings +# +mkdir -p ${RPM_BUILD_ROOT}/etc/X11 +mkdir -p ${RPM_BUILD_ROOT}/usr/lib/qt3/etc/ +ln -sf /etc/X11/ ${RPM_BUILD_ROOT}/usr/lib/qt3/etc/settings +install -m 0644 %SOURCE3 ${RPM_BUILD_ROOT}/etc/X11/qtrc +# +# clean broken links +# +if [ %_lib == "lib64" ]; then + rm ${RPM_BUILD_ROOT}/usr/lib/qt3/mkspecs/linux-g++-64/linux-g++-64 +else + rm ${RPM_BUILD_ROOT}/usr/lib/qt3/mkspecs/linux-g++/linux-g++ +fi +rm -rf ${RPM_BUILD_ROOT}/usr/lib/qt3/doc/html + +%pre +if test -L usr/lib/qt3; then + rm usr/lib/qt3 +fi + +%post +/sbin/ldconfig +if ! grep -q '^\[3.3\]' etc/X11/qtrc ; then +echo "" >> etc/X11/qtrc +echo "[3.3]" >> etc/X11/qtrc +echo "libraryPath=/opt/kde3/lib64/kde3/plugins/:/opt/kde3/lib/kde3/plugins/" >> etc/X11/qtrc +fi + +%postun -p /sbin/ldconfig + +%files +%defattr(-,root,root,755) +# FIXME provide new changelog if kb9vqf will give one +%doc changes-3.3.8b README* LICENSE* MANIFEST FAQ +%dir /usr/lib/qt3/translations +%dir /usr/lib/qt3 +%dir /usr/lib/qt3/bin +%dir /usr/lib/qt3/%{_lib} +%{_libdir}/libqt-mt.so.* +%{_libdir}/libqui.so.* +/usr/lib/qt3/bin/qtconfig +/usr/lib/qt3/%{_lib}/libqt-mt.so.* +/usr/lib/qt3/%{_lib}/libqui.so.* +%dir /usr/lib/qt3/etc +/usr/lib/qt3/etc/settings +/usr/lib/qt3/plugins +/usr/lib/qt3/bin/assistant +%lang(de) /usr/lib/qt3/translations/assistant_de.qm +%lang(ar) /usr/lib/qt3/translations/qt_ar.qm +%lang(ca) /usr/lib/qt3/translations/qt_ca.qm +%lang(cs) /usr/lib/qt3/translations/qt_cs.qm +%lang(de) /usr/lib/qt3/translations/qt_de.qm +%lang(es) /usr/lib/qt3/translations/qt_es.qm +%lang(fr) /usr/lib/qt3/translations/qt_fr.qm +%lang(he) /usr/lib/qt3/translations/qt_he.qm +%lang(ru) /usr/lib/qt3/translations/qt_ru.qm +%lang(sk) /usr/lib/qt3/translations/qt_sk.qm +%lang(it) /usr/lib/qt3/translations/qt_it.qm +%lang(ja) /usr/lib/qt3/translations/qt_ja.qm +%lang(nb) /usr/lib/qt3/translations/qt_nb.qm +%lang(pl) /usr/lib/qt3/translations/qt_pl.qm +%lang(pt) /usr/lib/qt3/translations/qt_pt-br.qm +%lang(pt) /usr/lib/qt3/translations/qt_pt.qm +%lang(zh) /usr/lib/qt3/translations/qt_zh-cn.qm +%lang(zh) /usr/lib/qt3/translations/qt_zh-tw.qm +%config(noreplace) /etc/X11/qtrc +%ifarch s390x sparc64 x86_64 ppc64 mips64 +%dir %{_libdir}/qt3 +%endif + +%files devel +%defattr(-,root,root,755) +# FIXME provide new changelog if kb9vqf will give one +%doc changes-3.3.8b +/usr/lib/qt3/bin/moc +/usr/lib/qt3/bin/qmake +/usr/lib/qt3/bin/uic +/usr/lib/qt3/include +/usr/lib/qt3/%{_lib}/libqt-mt.la +/usr/lib/qt3/%{_lib}/libqt-mt.so +/usr/lib/qt3/%{_lib}/libqt-mt.prl +/usr/lib/qt3/%{_lib}/libqui.so +/usr/lib/qt3/%{_lib}/libqui.prl +/usr/lib/qt3/mkspecs +/%_libdir/pkgconfig/qt-mt.pc +/usr/lib/qt3/%_lib/libqassistantclient.* +%config /etc/profile.d/qt3.* + +%changelog diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.history/49/801f98f6760e00111528b7e658abf294 b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.history/49/801f98f6760e00111528b7e658abf294 new file mode 100644 index 000000000..dfb70a703 --- /dev/null +++ b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.history/49/801f98f6760e00111528b7e658abf294 @@ -0,0 +1,407 @@ +# +# spec file for package qt3 +# +# Copyright (c) 2011 SUSE LINUX Products GmbH, Nuernberg, Germany. +# +# All modifications and additions to the file contributed by third parties +# remain the property of their copyright owners, unless otherwise agreed +# upon. The license for this file, and modifications and additions to the +# file, is the same license as for the pristine package itself (unless the +# license for the pristine package is not an Open Source License, in which +# case the license is the MIT License). An "Open Source License" is a +# license that conforms to the Open Source Definition (Version 1.9) +# published by the Open Source Initiative. + +# Please submit bugfixes or comments via http://bugs.opensuse.org/ +# + + + +Name: qt3 +#Remember also to modify Requires in -devel package +BuildRequires: Mesa-devel c++_compiler cups-devel freetype2-devel libjpeg-devel libmng-devel pkgconfig update-desktop-files xorg-x11-devel +Url: http://www.trolltech.com/ +License: GPLv2 ; GPLv3 ; QPL .. +%if %suse_version > 1120 +BuildRequires: libpng14-compat-devel +%else +BuildRequires: libpng-devel +%endif +Group: System/Libraries +# bug437293 +%ifarch ppc64 +Obsoletes: qt3-64bit +%endif +# +Summary: A library for developing applications with graphical user interfaces +Version: 3.3.8d +Release: 110 +Provides: qt_library_%version +Recommends: kdelibs3-default-style +PreReq: /bin/grep +# COMMON-BEGIN +%define x11_free -x11-free- +%define rversion 3.3.8b +Source0: http://mirror.its.uidaho.edu/pub/trinity/releases/3.5.13/dependencies/qt3-3.3.8.d.tar.gz +Source1: build_script.sh +Source2: qtconfig3.desktop +Source3: qtrc +Source4: assistant3.png +Source6: assistant3.desktop +Source7: designer.desktop +Source8: designer.png +Source9: linguist.desktop +Source5: linguist.png +Source10: qt3.sh +Source11: qt3.csh +# Translations did not change at 3.3.8c +Source12: qt3-3.3.8b-translations.tar.bz2 +Source100: qtkdeintegration_x11.cpp +Source101: qtkdeintegration_x11_p.h +Source102: baselibs.conf +Source200: attributes +Source201: update_spec.pl +Patch1: aliasing.diff +Patch2: head.diff +Patch4: qt3-never-strip.diff +Patch5: external-libs.diff +Patch8: 0007-qpixmap_constants.patch +Patch11: 0038-dragobject-dont-prefer-unknown.patch +Patch12: qtrc-path.diff +Patch14: lib64-plugin-support.diff +Patch15: pluginmanager-fix.diff +Patch18: no-rpath.dif +Patch19: shut-up.diff +Patch20: rubberband.diff +Patch21: fix-GL-loading.diff +Patch23: fix-accessible.diff +# From http://www.freedesktop.org/wiki/Software_2fImmoduleQtDownload +# Current version from http://freedesktop.org/~daisuke/qt-x11-immodule-unified-qt3.3.5-20060318.diff.bz2 +Patch25: qt-x11-immodule-unified-qt3.3.8-20060318.diff +Patch28: fix-key-release-event-with-imm.diff +Patch29: 0047-fix-kmenu-width.diff +Patch31: limit-image-size.diff +Patch34: 0005-qpixmap_mitshm.patch +Patch35: qt-transparency.patch +Patch37: 0055-qtextedit_zoom.patch +Patch38: 0048-qclipboard_hack_80072.patch +Patch39: fix-qtranslator-crash.diff +Patch40: 0059-qpopup_has_mouse.patch +Patch41: 0060-qpopup_ignore_mousepos.patch +Patch42: add_qexport_visibility.patch +Patch43: 0056-khotkeys_input_84434.patch +Source250: enable-designer-plugins.diff +Patch53: fix-xinerama-dialog-placement.diff +Patch54: kmenu-search-fix.diff +Patch55: qt3-fix-cast.diff +Patch100: qt.patch +Patch101: qt3-arm-gcc4.patch +Patch102: xinerama.patch +Patch113: fix-assistant-path.patch +Patch117: qtimer-debug.diff +Patch119: xinerama-qpopupmenu.diff +Patch121: qt3-warnings.diff +Patch123: use-xrandr-1.2.diff +Patch125: qcstring-format-warnings.diff +Patch127: mng-reading-fix.patch +Patch128: 0079-compositing-types.patch +Patch129: 0080-net-wm-sync-request.patch +Patch132: revert-qt-3.3.8-khmer-fix.diff +Patch133: 0085-fix-buildkey.diff +Patch134: fix-xinput-clash.diff +Patch135: parseFontName.diff +Patch136: qt3-no-date.diff +Patch137: popen-leak-fix.diff +Patch138: qt3-libpng14.diff +Patch139: gcc46.diff + +BuildRoot: %{_tmppath}/%{name}-%{version}-build + +%description +Qt is a program library for developing applications with graphical user +interfaces. It allows you to rapidly develop professional programs. The +Qt library is available not only for Linux but for a great number of +Unices and even for Windows. Thus it is possible to write programs that +may be easily ported to those platforms. + +You need a license for using Qt with a non-GPL application, which can +be acquired from sales@trolltech.com. + +See /usr/share/doc/packages/qt3 for details about the new features of +the current Qt library! + +%define build_sub_dirs src plugins/src tools/designer/uilib/ tools/designer/uic tools/qtconfig tools/assistant/lib tools/assistant tutorial + +%prep +%setup -q -n qt3 +%patch1 +%patch2 +%patch4 +%patch5 +%patch8 +%patch11 +%patch12 +if [ "%_lib" = "lib64" ]; then +%patch14 +fi +%patch15 +%patch18 +%patch19 +%patch20 +%patch23 +%patch25 +%patch28 +%patch29 +%patch31 +%patch34 +%patch35 +%patch37 +%patch38 +%patch39 +%patch40 +%patch41 +%patch42 +%patch43 +%patch100 +%patch102 +%patch53 +%patch54 +%patch55 +%patch101 +%patch113 +%patch117 +%patch119 +%patch121 +%patch123 +ln -sf $PWD/src/inputmethod/qinputcontextfactory.h include/ +ln -sf $PWD/src/inputmethod/qinputcontextplugin.h include/ +ln -sf $PWD/src/kernel/qinputcontext.h include/ +ln -sf $PWD/src/kernel/qinputcontextinterface_p.h include/private/ +ln -sf $PWD/src/kernel/qximinputcontext_p.h include/private/ +if [ %_lib = "lib" ]; then +sed 's,/lib64/,/lib/,' %PATCH21 | patch -p0 +else +%patch21 +fi +%patch125 +%patch127 +%patch128 +%patch129 +%patch132 +%patch133 +%patch134 +%patch135 +%patch136 +%patch137 +%if %suse_version > 1120 +%patch138 -p1 +%endif +%patch139 +# copy qt kde integration files +cp %SOURCE100 %SOURCE101 src/kernel/ +cp %SOURCE101 include/private/ +cd translations +tar xvjf %SOURCE12 +cd .. +# COMMON-END + +%package devel +License: GPLv2 ; GPLv3 ; QPL .. +Summary: Include Files and Libraries mandatory for Development +Requires: qt3 = %version +Requires: pkgconfig cups-devel freetype2-devel libmng-devel libjpeg-devel c++_compiler xorg-x11-devel +%if %suse_version > 1120 +Recommends: libpng14-compat-devel +Requires: libpng-devel +%else +Requires: libpng-devel +%endif +%if %suse_version > 1000 +Requires: Mesa-devel +%else +Requires: xorg-x11-Mesa xorg-x11-Mesa-devel +%endif +%ifnarch x86_64 s390x sparc64 ppc64 mips64 +Conflicts: devel_libs-32bit +%endif +# bug437293 +%ifarch ppc64 +Obsoletes: qt3-devel-64bit +%endif +# +Group: Development/Libraries/X11 + +%description devel +You need this package if you want to compile programs with Qt 3. It +contains the "Qt Crossplatform Development Kit 2". Under /usr/lib/qt3 +you will find include files. + +You need a license for using Qt with a non-GPL application. A license +can be acquired at sales@trolltech.com. + +%build +export VERSION=%suse_version +source %SOURCE1 %{version} +export WLIB=%_lib +export QTDIR=`pwd` +if [ %_lib == "lib64" ]; then +export RPM_OPT_FLAGS="$RPM_OPT_FLAGS -DUSE_LIB64_PATHES" +fi +export RPM_OPT_FLAGS="$RPM_OPT_FLAGS -fno-strict-aliasing" +# +# call build from build_script.rpmrc for threaded Qt library +# only really needed tools will be builded here, all extra tools will be +# builded in qt3.spec +# +call_configure -v -thread -shared -no-sql-mysql -no-sql-psql -no-sql-odbc -no-sql-sqlite $OPTIONS +for i in %build_sub_dirs ; do + cd $i + make %{?jobs:-j%jobs} + cd - +done + +%install +export VERSION=%suse_version +export WLIB=%_lib +export QTDIR=`pwd` +source %SOURCE1 %{version} +for i in %build_sub_dirs ; do + cd $i + make INSTALL_ROOT=$RPM_BUILD_ROOT install + cd - +done +post_install $RPM_BUILD_ROOT/usr/lib/qt3/ +mkdir -p $RPM_BUILD_ROOT/usr/share/pixmaps/ +sed -i -e 's, on: .*,,' $RPM_BUILD_ROOT/usr/lib/qt3/%_lib/*.la +# +# copy additional files +# +install -m 0755 bin/qmake bin/moc ${RPM_BUILD_ROOT}/usr/lib/qt3/bin/ +install -m 0755 -d ${RPM_BUILD_ROOT}/usr/lib/qt3/translations/ +install -m 0644 translations/*.qm ${RPM_BUILD_ROOT}/usr/lib/qt3/translations/ +if [ %_lib = lib64 ]; then + for i in $RPM_BUILD_ROOT/usr/lib/qt3/plugins/*/*.so; do + mv "$i" "${i%.so}.lib64.so" + done +fi +# +# move pkgconfig files +# +mkdir -p $RPM_BUILD_ROOT/%_libdir/pkgconfig +mv $RPM_BUILD_ROOT/usr/lib/qt3/%_lib/pkgconfig/*.pc \ + $RPM_BUILD_ROOT/%_libdir/pkgconfig +rmdir $RPM_BUILD_ROOT/usr/lib/qt3/%_lib/pkgconfig +# +# move docs in doc dir +# +install -d -m 0755 ${RPM_BUILD_ROOT}/%{_defaultdocdir}/qt3/ +install -d -m 0755 ${RPM_BUILD_ROOT}/usr/lib/qt3/mkspecs/ +install -d -m 0755 ${RPM_BUILD_ROOT}/usr/lib/qt3/mkspecs/ +cp -a mkspecs/* ${RPM_BUILD_ROOT}/usr/lib/qt3/mkspecs/ +if [ %_lib == "lib64" ]; then + ln -sf linux-g++-64 ${RPM_BUILD_ROOT}/usr/lib/qt3/mkspecs/default +else + ln -sf linux-g++ ${RPM_BUILD_ROOT}/usr/lib/qt3/mkspecs/default +fi +find ${RPM_BUILD_ROOT}/usr/lib/qt3/mkspecs -type f -perm /111 -print0 | xargs -0 chmod a-x +# +# create links in ld.so.conf path +# +install -d -m 0755 ${RPM_BUILD_ROOT}/%{_libdir} +ln -sf ../lib/qt3/%{_lib}/libqt-mt.so.3 ${RPM_BUILD_ROOT}/%{_libdir}/libqt-mt.so.3 +ln -sf ../lib/qt3/%{_lib}/libqui.so.1 ${RPM_BUILD_ROOT}/%{_libdir}/libqui.so.1 +[ "lib" != "%{_lib}" ] && \ + ln -sf ../lib/qt3 ${RPM_BUILD_ROOT}/%{_libdir}/qt3 +mkdir -p ${RPM_BUILD_ROOT}/etc/profile.d +install -m 644 %SOURCE10 %SOURCE11 ${RPM_BUILD_ROOT}/etc/profile.d +# +# default qt settings +# +mkdir -p ${RPM_BUILD_ROOT}/etc/X11 +mkdir -p ${RPM_BUILD_ROOT}/usr/lib/qt3/etc/ +ln -sf /etc/X11/ ${RPM_BUILD_ROOT}/usr/lib/qt3/etc/settings +install -m 0644 %SOURCE3 ${RPM_BUILD_ROOT}/etc/X11/qtrc +# +# clean broken links +# +if [ %_lib == "lib64" ]; then + rm ${RPM_BUILD_ROOT}/usr/lib/qt3/mkspecs/linux-g++-64/linux-g++-64 +else + rm ${RPM_BUILD_ROOT}/usr/lib/qt3/mkspecs/linux-g++/linux-g++ +fi +rm -rf ${RPM_BUILD_ROOT}/usr/lib/qt3/doc/html + +%pre +if test -L usr/lib/qt3; then + rm usr/lib/qt3 +fi + +%post +/sbin/ldconfig +if ! grep -q '^\[3.3\]' etc/X11/qtrc ; then +echo "" >> etc/X11/qtrc +echo "[3.3]" >> etc/X11/qtrc +echo "libraryPath=/opt/kde3/lib64/kde3/plugins/:/opt/kde3/lib/kde3/plugins/" >> etc/X11/qtrc +fi + +%postun -p /sbin/ldconfig + +%files +%defattr(-,root,root,755) +# FIXME provide new changelog if kb9vqf will give one +%doc changes-3.3.8b README* LICENSE* MANIFEST FAQ +%dir /usr/lib/qt3/translations +%dir /usr/lib/qt3 +%dir /usr/lib/qt3/bin +%dir /usr/lib/qt3/%{_lib} +%{_libdir}/libqt-mt.so.* +%{_libdir}/libqui.so.* +/usr/lib/qt3/bin/qtconfig +/usr/lib/qt3/%{_lib}/libqt-mt.so.* +/usr/lib/qt3/%{_lib}/libqui.so.* +%dir /usr/lib/qt3/etc +/usr/lib/qt3/etc/settings +/usr/lib/qt3/plugins +/usr/lib/qt3/bin/assistant +%lang(de) /usr/lib/qt3/translations/assistant_de.qm +%lang(ar) /usr/lib/qt3/translations/qt_ar.qm +%lang(ca) /usr/lib/qt3/translations/qt_ca.qm +%lang(cs) /usr/lib/qt3/translations/qt_cs.qm +%lang(de) /usr/lib/qt3/translations/qt_de.qm +%lang(es) /usr/lib/qt3/translations/qt_es.qm +%lang(fr) /usr/lib/qt3/translations/qt_fr.qm +%lang(he) /usr/lib/qt3/translations/qt_he.qm +%lang(ru) /usr/lib/qt3/translations/qt_ru.qm +%lang(sk) /usr/lib/qt3/translations/qt_sk.qm +%lang(it) /usr/lib/qt3/translations/qt_it.qm +%lang(ja) /usr/lib/qt3/translations/qt_ja.qm +%lang(nb) /usr/lib/qt3/translations/qt_nb.qm +%lang(pl) /usr/lib/qt3/translations/qt_pl.qm +%lang(pt) /usr/lib/qt3/translations/qt_pt-br.qm +%lang(pt) /usr/lib/qt3/translations/qt_pt.qm +%lang(zh) /usr/lib/qt3/translations/qt_zh-cn.qm +%lang(zh) /usr/lib/qt3/translations/qt_zh-tw.qm +%config(noreplace) /etc/X11/qtrc +%ifarch s390x sparc64 x86_64 ppc64 mips64 +%dir %{_libdir}/qt3 +%endif + +%files devel +%defattr(-,root,root,755) +# FIXME provide new changelog if kb9vqf will give one +%doc changes-3.3.8b +/usr/lib/qt3/bin/moc +/usr/lib/qt3/bin/qmake +/usr/lib/qt3/bin/uic +/usr/lib/qt3/include +/usr/lib/qt3/%{_lib}/libqt-mt.la +/usr/lib/qt3/%{_lib}/libqt-mt.so +/usr/lib/qt3/%{_lib}/libqt-mt.prl +/usr/lib/qt3/%{_lib}/libqui.so +/usr/lib/qt3/%{_lib}/libqui.prl +/usr/lib/qt3/mkspecs +/%_libdir/pkgconfig/qt-mt.pc +/usr/lib/qt3/%_lib/libqassistantclient.* +%config /etc/profile.d/qt3.* + +%changelog diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.history/57/d0539bf6760e00111528b7e658abf294 b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.history/57/d0539bf6760e00111528b7e658abf294 new file mode 100644 index 000000000..c8cd70015 --- /dev/null +++ b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.history/57/d0539bf6760e00111528b7e658abf294 @@ -0,0 +1,289 @@ +# +# spec file for package qt3-devel-doc +# +# Copyright (c) 2011 SUSE LINUX Products GmbH, Nuernberg, Germany. +# +# All modifications and additions to the file contributed by third parties +# remain the property of their copyright owners, unless otherwise agreed +# upon. The license for this file, and modifications and additions to the +# file, is the same license as for the pristine package itself (unless the +# license for the pristine package is not an Open Source License, in which +# case the license is the MIT License). An "Open Source License" is a +# license that conforms to the Open Source Definition (Version 1.9) +# published by the Open Source Initiative. + +# Please submit bugfixes or comments via http://bugs.opensuse.org/ +# + +# norootforbuild + + +Name: qt3-devel-doc +BuildRequires: cups-devel freeglut-devel freetype2-devel gcc-c++ pkgconfig qt3-devel update-desktop-files +%if %suse_version < 1130 +BuildRequires: libpng-devel +%else +BuildRequires: libpng14-devel +%endif +Url: http://www.trolltech.com/ +License: GPL, QPL +AutoReqProv: on +Summary: Documentation for the Qt 3 Development Kit +Group: Documentation/HTML +Version: 3.3.8d +Release: 1 +PreReq: /bin/grep +BuildArch: noarch +Provides: qt3-devel-tutorial +Obsoletes: qt3-devel-tutorial +Requires: qt3-devel +%define x11_free -x11-free- +%define rversion %version +# COMMON-BEGIN +# COMMON-BEGIN +%define x11_free -x11-free- +%define rversion 3.3.8b +Source0: http://mirror.its.uidaho.edu/pub/trinity/releases/3.5.13/dependencies/qt3-3.3.8.d.tar.gz +Source1: build_script.sh +Source2: qtconfig3.desktop +Source3: qtrc +Source4: assistant3.png +Source6: assistant3.desktop +Source7: designer.desktop +Source8: designer.png +Source9: linguist.desktop +Source5: linguist.png +Source10: qt3.sh +Source11: qt3.csh +# Translations did not change at 3.3.8c +Source12: qt3-3.3.8b-translations.tar.bz2 +Source100: qtkdeintegration_x11.cpp +Source101: qtkdeintegration_x11_p.h +Source102: baselibs.conf +Source200: attributes +Source201: update_spec.pl +Patch1: aliasing.diff +Patch2: head.diff +Patch4: qt3-never-strip.diff +Patch5: external-libs.diff +Patch8: 0007-qpixmap_constants.patch +Patch11: 0038-dragobject-dont-prefer-unknown.patch +Patch12: qtrc-path.diff +Patch14: lib64-plugin-support.diff +Patch15: pluginmanager-fix.diff +Patch18: no-rpath.dif +Patch19: shut-up.diff +Patch20: rubberband.diff +Patch21: fix-GL-loading.diff +Patch23: fix-accessible.diff +# From http://www.freedesktop.org/wiki/Software_2fImmoduleQtDownload +# Current version from http://freedesktop.org/~daisuke/qt-x11-immodule-unified-qt3.3.5-20060318.diff.bz2 +Patch25: qt-x11-immodule-unified-qt3.3.8-20060318.diff +Patch28: fix-key-release-event-with-imm.diff +Patch29: 0047-fix-kmenu-width.diff +Patch31: limit-image-size.diff +Patch34: 0005-qpixmap_mitshm.patch +Patch35: qt-transparency.patch +Patch37: 0055-qtextedit_zoom.patch +Patch38: 0048-qclipboard_hack_80072.patch +Patch39: fix-qtranslator-crash.diff +Patch40: 0059-qpopup_has_mouse.patch +Patch41: 0060-qpopup_ignore_mousepos.patch +Patch42: add_qexport_visibility.patch +Patch43: 0056-khotkeys_input_84434.patch +Source250: enable-designer-plugins.diff +Patch53: fix-xinerama-dialog-placement.diff +Patch54: kmenu-search-fix.diff +Patch55: qt3-fix-cast.diff +Patch100: qt.patch +Patch101: qt3-arm-gcc4.patch +Patch102: xinerama.patch +Patch113: fix-assistant-path.patch +Patch117: qtimer-debug.diff +Patch119: xinerama-qpopupmenu.diff +Patch121: qt3-warnings.diff +Patch123: use-xrandr-1.2.diff +Patch125: qcstring-format-warnings.diff +Patch127: mng-reading-fix.patch +Patch128: 0079-compositing-types.patch +Patch129: 0080-net-wm-sync-request.patch +Patch132: revert-qt-3.3.8-khmer-fix.diff +Patch133: 0085-fix-buildkey.diff +Patch134: fix-xinput-clash.diff +Patch135: parseFontName.diff +Patch136: qt3-no-date.diff +Patch137: popen-leak-fix.diff +Patch138: qt3-libpng14.diff +Patch139: gcc46.diff + +BuildRoot: %{_tmppath}/%{name}-%{version}-build + +%description +This package contains the documentation for the Qt 3 Development Kit. + +You will find documentation, precompiled examples, and a tutorial for +getting started with Qt in /usr/lib/qt3/doc. + +This package contains the documentation for the Qt 3 Development Kit. + +You will find documentation, precompiled examples, and a tutorial for +getting started with Qt in /usr/lib/qt3/doc. + +This package contains the documentation for the Qt 3 Development Kit. + +You will find documentation, precompiled examples, and a tutorial for +getting started with Qt in /usr/lib/qt3/doc. + +This package contains the documentation for the Qt 3 Development Kit. + +You will find documentation, precompiled examples, and a tutorial for +getting started with Qt in /usr/lib/qt3/doc. + +%define build_sub_dirs src plugins/src tools/designer/uilib/ tools/designer/uic tools/qtconfig tools/assistant/lib tools/assistant tutorial + +%prep +%setup -q -n qt3 +%patch1 +%patch2 +%patch4 +%patch5 +%patch8 +%patch11 +%patch12 +if [ "%_lib" = "lib64" ]; then +%patch14 +fi +%patch15 +%patch18 +%patch19 +%patch20 +%patch23 +%patch25 +%patch28 +%patch29 +%patch31 +%patch34 +%patch35 +%patch37 +%patch38 +%patch39 +%patch40 +%patch41 +%patch42 +%patch43 +%patch100 +%patch102 +%patch53 +%patch54 +%patch55 +%patch101 +%patch113 +%patch117 +%patch119 +%patch121 +%patch123 +ln -sf $PWD/src/inputmethod/qinputcontextfactory.h include/ +ln -sf $PWD/src/inputmethod/qinputcontextplugin.h include/ +ln -sf $PWD/src/kernel/qinputcontext.h include/ +ln -sf $PWD/src/kernel/qinputcontextinterface_p.h include/private/ +ln -sf $PWD/src/kernel/qximinputcontext_p.h include/private/ +if [ %_lib = "lib" ]; then +sed 's,/lib64/,/lib/,' %PATCH21 | patch -p0 +else +%patch21 +fi +%patch125 +%patch127 +%patch128 +%patch129 +%patch132 +%patch133 +%patch134 +%patch135 +%patch136 +%patch137 +%if %suse_version > 1120 +%patch138 -p1 +%endif +%patch139 +# copy qt kde integration files +cp %SOURCE100 %SOURCE101 src/kernel/ +cp %SOURCE101 include/private/ +cd translations +tar xvjf %SOURCE12 +cd .. +# COMMON-END +# COMMON-END + +%description +This package contains the documentation for the Qt 3 Development Kit. + +You will find documentation, precompiled examples, and a tutorial for +getting started with Qt in /usr/lib/qt3/doc. + +This package contains the documentation for the Qt 3 Development Kit. + +You will find documentation, precompiled examples, and a tutorial for +getting started with Qt in /usr/lib/qt3/doc. + +This package contains the documentation for the Qt 3 Development Kit. + +You will find documentation, precompiled examples, and a tutorial for +getting started with Qt in /usr/lib/qt3/doc. + +This package contains the documentation for the Qt 3 Development Kit. + +You will find documentation, precompiled examples, and a tutorial for +getting started with Qt in /usr/lib/qt3/doc. + +%build +export VERSION=%suse_version +source %SOURCE1 %{version} +export WLIB=%_lib +export QTDIR=`pwd` +if [ %_lib == "lib64" ]; then +export RPM_OPT_FLAGS="$RPM_OPT_FLAGS -DUSE_LIB64_PATHES" +fi +export RPM_OPT_FLAGS="$RPM_OPT_FLAGS -fno-strict-aliasing" +# +# call build from build_script.rpmrc for threaded Qt library +# only really needed tools will be builded here, all extra tools will be +# builded in qt3.spec +# +call_configure -thread -shared -no-sql-mysql -no-sql-psql -no-sql-odbc -no-sql-sqlite $OPTIONS +cd src +make %{?jobs:-j%jobs} +cd .. + +%install +export VERSION=%suse_version +export WLIB=%_lib +export QTDIR=`pwd` +source %SOURCE1 %{version} +cd src +make INSTALL_ROOT=$RPM_BUILD_ROOT install_htmldocs +cd .. +# +# install menu entries +# +%suse_update_desktop_file -i -u qtconfig3 Qt Utility DesktopSettings +%suse_update_desktop_file -i assistant3 Qt Development Documentation + +install -d -m 0755 ${RPM_BUILD_ROOT}/%{_defaultdocdir}/qt3/ +ln -sf /usr/lib/qt3/doc/html ${RPM_BUILD_ROOT}/%{_defaultdocdir}/qt3/ +mkdir -p $RPM_BUILD_ROOT/usr/share/pixmaps/ +install -m 0644 %SOURCE4 $RPM_BUILD_ROOT/usr/share/pixmaps/ + +%clean +rm -rf ${RPM_BUILD_ROOT} + +%files +%defattr(-,root,root) +%dir /usr/lib/qt3/doc +%doc /usr/lib/qt3/doc/html +%{_docdir}/qt3/html +/usr/share/applications/qtconfig3.desktop +/usr/share/applications/assistant3.desktop +/usr/share/pixmaps/assistant3.png + +%changelog diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.history/60/c05c99dd7a0e00111528b7e658abf294 b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.history/60/c05c99dd7a0e00111528b7e658abf294 new file mode 100644 index 000000000..f9e7725b4 --- /dev/null +++ b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.history/60/c05c99dd7a0e00111528b7e658abf294 @@ -0,0 +1,287 @@ +# +# spec file for package qt3-devel-doc +# +# Copyright (c) 2011 SUSE LINUX Products GmbH, Nuernberg, Germany. +# +# All modifications and additions to the file contributed by third parties +# remain the property of their copyright owners, unless otherwise agreed +# upon. The license for this file, and modifications and additions to the +# file, is the same license as for the pristine package itself (unless the +# license for the pristine package is not an Open Source License, in which +# case the license is the MIT License). An "Open Source License" is a +# license that conforms to the Open Source Definition (Version 1.9) +# published by the Open Source Initiative. + +# Please submit bugfixes or comments via http://bugs.opensuse.org/ +# + +# norootforbuild + + +Name: qt3-devel-doc +BuildRequires: cups-devel freeglut-devel freetype2-devel gcc-c++ pkgconfig qt3-devel update-desktop-files +%if %suse_version < 1130 +BuildRequires: libpng-devel +%else +BuildRequires: libpng14-devel +%endif +Url: http://www.trolltech.com/ +License: GPL, QPL +AutoReqProv: on +Summary: Documentation for the Qt 3 Development Kit +Group: Documentation/HTML +Version: 3.3.8d +Release: 1 +PreReq: /bin/grep +BuildArch: noarch +Provides: qt3-devel-tutorial +Obsoletes: qt3-devel-tutorial +Requires: qt3-devel +%define x11_free -x11-free- +%define rversion %version +# COMMON-BEGIN +# COMMON-BEGIN +%define x11_free -x11-free- +%define rversion 3.3.8b +Source0: http://mirror.its.uidaho.edu/pub/trinity/releases/3.5.13/dependencies/qt3-3.3.8.d.tar.gz +Source1: build_script.sh +Source2: qtconfig3.desktop +Source3: qtrc +Source4: assistant3.png +Source6: assistant3.desktop +Source7: designer.desktop +Source8: designer.png +Source9: linguist.desktop +Source5: linguist.png +Source10: qt3.sh +Source11: qt3.csh +# Translations did not change at 3.3.8c +Source12: qt3-3.3.8b-translations.tar.bz2 +Source100: qtkdeintegration_x11.cpp +Source101: qtkdeintegration_x11_p.h +Source102: baselibs.conf +Source200: attributes +Source201: update_spec.pl +Patch1: aliasing.diff +Patch2: head.diff +Patch4: qt3-never-strip.diff +Patch5: external-libs.diff +Patch11: 0038-dragobject-dont-prefer-unknown.patch +Patch12: qtrc-path.diff +Patch14: lib64-plugin-support.diff +Patch15: pluginmanager-fix.diff +Patch18: no-rpath.dif +Patch19: shut-up.diff +Patch20: rubberband.diff +Patch21: fix-GL-loading.diff +Patch23: fix-accessible.diff +# From http://www.freedesktop.org/wiki/Software_2fImmoduleQtDownload +# Current version from http://freedesktop.org/~daisuke/qt-x11-immodule-unified-qt3.3.5-20060318.diff.bz2 +Patch25: qt-x11-immodule-unified-qt3.3.8-20060318.diff +Patch28: fix-key-release-event-with-imm.diff +Patch29: 0047-fix-kmenu-width.diff +Patch31: limit-image-size.diff +Patch34: 0005-qpixmap_mitshm.patch +Patch35: qt-transparency.patch +Patch37: 0055-qtextedit_zoom.patch +Patch38: 0048-qclipboard_hack_80072.patch +Patch39: fix-qtranslator-crash.diff +Patch40: 0059-qpopup_has_mouse.patch +Patch41: 0060-qpopup_ignore_mousepos.patch +Patch42: add_qexport_visibility.patch +Patch43: 0056-khotkeys_input_84434.patch +Source250: enable-designer-plugins.diff +Patch53: fix-xinerama-dialog-placement.diff +Patch54: kmenu-search-fix.diff +Patch55: qt3-fix-cast.diff +Patch100: qt.patch +Patch101: qt3-arm-gcc4.patch +Patch102: xinerama.patch +Patch113: fix-assistant-path.patch +Patch117: qtimer-debug.diff +Patch119: xinerama-qpopupmenu.diff +Patch121: qt3-warnings.diff +Patch123: use-xrandr-1.2.diff +Patch125: qcstring-format-warnings.diff +Patch127: mng-reading-fix.patch +Patch128: 0079-compositing-types.patch +Patch129: 0080-net-wm-sync-request.patch +Patch132: revert-qt-3.3.8-khmer-fix.diff +Patch133: 0085-fix-buildkey.diff +Patch134: fix-xinput-clash.diff +Patch135: parseFontName.diff +Patch136: qt3-no-date.diff +Patch137: popen-leak-fix.diff +Patch138: qt3-libpng14.diff +Patch139: gcc46.diff + +BuildRoot: %{_tmppath}/%{name}-%{version}-build + +%description +This package contains the documentation for the Qt 3 Development Kit. + +You will find documentation, precompiled examples, and a tutorial for +getting started with Qt in /usr/lib/qt3/doc. + +This package contains the documentation for the Qt 3 Development Kit. + +You will find documentation, precompiled examples, and a tutorial for +getting started with Qt in /usr/lib/qt3/doc. + +This package contains the documentation for the Qt 3 Development Kit. + +You will find documentation, precompiled examples, and a tutorial for +getting started with Qt in /usr/lib/qt3/doc. + +This package contains the documentation for the Qt 3 Development Kit. + +You will find documentation, precompiled examples, and a tutorial for +getting started with Qt in /usr/lib/qt3/doc. + +%define build_sub_dirs src plugins/src tools/designer/uilib/ tools/designer/uic tools/qtconfig tools/assistant/lib tools/assistant tutorial + +%prep +%setup -q -n qt3 +%patch1 +%patch2 +%patch4 +%patch5 +%patch11 +%patch12 +if [ "%_lib" = "lib64" ]; then +%patch14 +fi +%patch15 +%patch18 +%patch19 +%patch20 +%patch23 +%patch25 +%patch28 +%patch29 +%patch31 +%patch34 +%patch35 +%patch37 +%patch38 +%patch39 +%patch40 +%patch41 +%patch42 +%patch43 +%patch100 +%patch102 +%patch53 +%patch54 +%patch55 +%patch101 +%patch113 +%patch117 +%patch119 +%patch121 +%patch123 +ln -sf $PWD/src/inputmethod/qinputcontextfactory.h include/ +ln -sf $PWD/src/inputmethod/qinputcontextplugin.h include/ +ln -sf $PWD/src/kernel/qinputcontext.h include/ +ln -sf $PWD/src/kernel/qinputcontextinterface_p.h include/private/ +ln -sf $PWD/src/kernel/qximinputcontext_p.h include/private/ +if [ %_lib = "lib" ]; then +sed 's,/lib64/,/lib/,' %PATCH21 | patch -p0 +else +%patch21 +fi +%patch125 +%patch127 +%patch128 +%patch129 +%patch132 +%patch133 +%patch134 +%patch135 +%patch136 +%patch137 +%if %suse_version > 1120 +%patch138 -p1 +%endif +%patch139 +# copy qt kde integration files +cp %SOURCE100 %SOURCE101 src/kernel/ +cp %SOURCE101 include/private/ +cd translations +tar xvjf %SOURCE12 +cd .. +# COMMON-END +# COMMON-END + +%description +This package contains the documentation for the Qt 3 Development Kit. + +You will find documentation, precompiled examples, and a tutorial for +getting started with Qt in /usr/lib/qt3/doc. + +This package contains the documentation for the Qt 3 Development Kit. + +You will find documentation, precompiled examples, and a tutorial for +getting started with Qt in /usr/lib/qt3/doc. + +This package contains the documentation for the Qt 3 Development Kit. + +You will find documentation, precompiled examples, and a tutorial for +getting started with Qt in /usr/lib/qt3/doc. + +This package contains the documentation for the Qt 3 Development Kit. + +You will find documentation, precompiled examples, and a tutorial for +getting started with Qt in /usr/lib/qt3/doc. + +%build +export VERSION=%suse_version +source %SOURCE1 %{version} +export WLIB=%_lib +export QTDIR=`pwd` +if [ %_lib == "lib64" ]; then +export RPM_OPT_FLAGS="$RPM_OPT_FLAGS -DUSE_LIB64_PATHES" +fi +export RPM_OPT_FLAGS="$RPM_OPT_FLAGS -fno-strict-aliasing" +# +# call build from build_script.rpmrc for threaded Qt library +# only really needed tools will be builded here, all extra tools will be +# builded in qt3.spec +# +call_configure -thread -shared -no-sql-mysql -no-sql-psql -no-sql-odbc -no-sql-sqlite $OPTIONS +cd src +make %{?jobs:-j%jobs} +cd .. + +%install +export VERSION=%suse_version +export WLIB=%_lib +export QTDIR=`pwd` +source %SOURCE1 %{version} +cd src +make INSTALL_ROOT=$RPM_BUILD_ROOT install_htmldocs +cd .. +# +# install menu entries +# +%suse_update_desktop_file -i -u qtconfig3 Qt Utility DesktopSettings +%suse_update_desktop_file -i assistant3 Qt Development Documentation + +install -d -m 0755 ${RPM_BUILD_ROOT}/%{_defaultdocdir}/qt3/ +ln -sf /usr/lib/qt3/doc/html ${RPM_BUILD_ROOT}/%{_defaultdocdir}/qt3/ +mkdir -p $RPM_BUILD_ROOT/usr/share/pixmaps/ +install -m 0644 %SOURCE4 $RPM_BUILD_ROOT/usr/share/pixmaps/ + +%clean +rm -rf ${RPM_BUILD_ROOT} + +%files +%defattr(-,root,root) +%dir /usr/lib/qt3/doc +%doc /usr/lib/qt3/doc/html +%{_docdir}/qt3/html +/usr/share/applications/qtconfig3.desktop +/usr/share/applications/assistant3.desktop +/usr/share/pixmaps/assistant3.png + +%changelog diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.history/6d/30a0e5bffc0e00111528b7e658abf294 b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.history/6d/30a0e5bffc0e00111528b7e658abf294 new file mode 100644 index 000000000..6b4daaccb --- /dev/null +++ b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.history/6d/30a0e5bffc0e00111528b7e658abf294 @@ -0,0 +1,283 @@ +# +# spec file for package qt3-devel-doc +# +# Copyright (c) 2011 SUSE LINUX Products GmbH, Nuernberg, Germany. +# +# All modifications and additions to the file contributed by third parties +# remain the property of their copyright owners, unless otherwise agreed +# upon. The license for this file, and modifications and additions to the +# file, is the same license as for the pristine package itself (unless the +# license for the pristine package is not an Open Source License, in which +# case the license is the MIT License). An "Open Source License" is a +# license that conforms to the Open Source Definition (Version 1.9) +# published by the Open Source Initiative. + +# Please submit bugfixes or comments via http://bugs.opensuse.org/ +# + +# norootforbuild + + +Name: qt3-devel-doc +BuildRequires: cups-devel freeglut-devel freetype2-devel gcc-c++ pkgconfig qt3-devel update-desktop-files +%if %suse_version < 1130 +BuildRequires: libpng-devel +%else +BuildRequires: libpng14-devel +%endif +Url: http://www.trolltech.com/ +License: GPL, QPL +AutoReqProv: on +Summary: Documentation for the Qt 3 Development Kit +Group: Documentation/HTML +Version: 3.3.8d +Release: 1 +PreReq: /bin/grep +BuildArch: noarch +Provides: qt3-devel-tutorial +Obsoletes: qt3-devel-tutorial +Requires: qt3-devel +%define x11_free -x11-free- +%define rversion %version +# COMMON-BEGIN +# COMMON-BEGIN +%define x11_free -x11-free- +%define rversion 3.3.8b +Source0: http://mirror.its.uidaho.edu/pub/trinity/releases/3.5.13/dependencies/qt3-3.3.8.d.tar.gz +Source1: build_script.sh +Source2: qtconfig3.desktop +Source3: qtrc +Source4: assistant3.png +Source6: assistant3.desktop +Source7: designer.desktop +Source8: designer.png +Source9: linguist.desktop +Source5: linguist.png +Source10: qt3.sh +Source11: qt3.csh +# Translations did not change at 3.3.8c +Source12: qt3-3.3.8b-translations.tar.bz2 +Source100: qtkdeintegration_x11.cpp +Source101: qtkdeintegration_x11_p.h +Source102: baselibs.conf +Source200: attributes +Source201: update_spec.pl +Patch1: aliasing.diff +Patch2: head.diff +Patch4: qt3-never-strip.diff +Patch5: external-libs.diff +Patch12: qtrc-path.diff +Patch14: lib64-plugin-support.diff +Patch15: pluginmanager-fix.diff +Patch18: no-rpath.dif +Patch19: shut-up.diff +Patch21: fix-GL-loading.diff +Patch23: fix-accessible.diff +# From http://www.freedesktop.org/wiki/Software_2fImmoduleQtDownload +# Current version from http://freedesktop.org/~daisuke/qt-x11-immodule-unified-qt3.3.5-20060318.diff.bz2 +Patch25: qt-x11-immodule-unified-qt3.3.8-20060318.diff +Patch28: fix-key-release-event-with-imm.diff +Patch29: 0047-fix-kmenu-width.diff +Patch31: limit-image-size.diff +Patch34: 0005-qpixmap_mitshm.patch +Patch35: qt-transparency.patch +Patch37: 0055-qtextedit_zoom.patch +Patch38: 0048-qclipboard_hack_80072.patch +Patch39: fix-qtranslator-crash.diff +Patch40: 0059-qpopup_has_mouse.patch +Patch41: 0060-qpopup_ignore_mousepos.patch +Patch42: add_qexport_visibility.patch +Patch43: 0056-khotkeys_input_84434.patch +Source250: enable-designer-plugins.diff +Patch53: fix-xinerama-dialog-placement.diff +Patch54: kmenu-search-fix.diff +Patch55: qt3-fix-cast.diff +Patch100: qt.patch +Patch101: qt3-arm-gcc4.patch +Patch102: xinerama.patch +Patch113: fix-assistant-path.patch +Patch117: qtimer-debug.diff +Patch119: xinerama-qpopupmenu.diff +Patch121: qt3-warnings.diff +Patch123: use-xrandr-1.2.diff +Patch125: qcstring-format-warnings.diff +Patch127: mng-reading-fix.patch +Patch128: 0079-compositing-types.patch +Patch129: 0080-net-wm-sync-request.patch +Patch132: revert-qt-3.3.8-khmer-fix.diff +Patch133: 0085-fix-buildkey.diff +Patch134: fix-xinput-clash.diff +Patch135: parseFontName.diff +Patch136: qt3-no-date.diff +Patch137: popen-leak-fix.diff +Patch138: qt3-libpng14.diff +Patch139: gcc46.diff + +BuildRoot: %{_tmppath}/%{name}-%{version}-build + +%description +This package contains the documentation for the Qt 3 Development Kit. + +You will find documentation, precompiled examples, and a tutorial for +getting started with Qt in /usr/lib/qt3/doc. + +This package contains the documentation for the Qt 3 Development Kit. + +You will find documentation, precompiled examples, and a tutorial for +getting started with Qt in /usr/lib/qt3/doc. + +This package contains the documentation for the Qt 3 Development Kit. + +You will find documentation, precompiled examples, and a tutorial for +getting started with Qt in /usr/lib/qt3/doc. + +This package contains the documentation for the Qt 3 Development Kit. + +You will find documentation, precompiled examples, and a tutorial for +getting started with Qt in /usr/lib/qt3/doc. + +%define build_sub_dirs src plugins/src tools/designer/uilib/ tools/designer/uic tools/qtconfig tools/assistant/lib tools/assistant tutorial + +%prep +%setup -q -n qt3 +%patch1 +%patch2 +%patch4 +%patch5 +%patch12 +if [ "%_lib" = "lib64" ]; then +%patch14 +fi +%patch15 +%patch18 +%patch19 +%patch23 +%patch25 +%patch28 +%patch29 +%patch31 +%patch34 +%patch35 +%patch37 +%patch38 +%patch39 +%patch40 +%patch41 +%patch42 +%patch43 +%patch100 +%patch102 +%patch53 +%patch54 +%patch55 +%patch101 +%patch113 +%patch117 +%patch119 +%patch121 +%patch123 +ln -sf $PWD/src/inputmethod/qinputcontextfactory.h include/ +ln -sf $PWD/src/inputmethod/qinputcontextplugin.h include/ +ln -sf $PWD/src/kernel/qinputcontext.h include/ +ln -sf $PWD/src/kernel/qinputcontextinterface_p.h include/private/ +ln -sf $PWD/src/kernel/qximinputcontext_p.h include/private/ +if [ %_lib = "lib" ]; then +sed 's,/lib64/,/lib/,' %PATCH21 | patch -p0 +else +%patch21 +fi +%patch125 +%patch127 +%patch128 +%patch129 +%patch132 +%patch133 +%patch134 +%patch135 +%patch136 +%patch137 +%if %suse_version > 1120 +%patch138 -p1 +%endif +%patch139 +# copy qt kde integration files +cp %SOURCE100 %SOURCE101 src/kernel/ +cp %SOURCE101 include/private/ +cd translations +tar xvjf %SOURCE12 +cd .. +# COMMON-END +# COMMON-END + +%description +This package contains the documentation for the Qt 3 Development Kit. + +You will find documentation, precompiled examples, and a tutorial for +getting started with Qt in /usr/lib/qt3/doc. + +This package contains the documentation for the Qt 3 Development Kit. + +You will find documentation, precompiled examples, and a tutorial for +getting started with Qt in /usr/lib/qt3/doc. + +This package contains the documentation for the Qt 3 Development Kit. + +You will find documentation, precompiled examples, and a tutorial for +getting started with Qt in /usr/lib/qt3/doc. + +This package contains the documentation for the Qt 3 Development Kit. + +You will find documentation, precompiled examples, and a tutorial for +getting started with Qt in /usr/lib/qt3/doc. + +%build +export VERSION=%suse_version +source %SOURCE1 %{version} +export WLIB=%_lib +export QTDIR=`pwd` +if [ %_lib == "lib64" ]; then +export RPM_OPT_FLAGS="$RPM_OPT_FLAGS -DUSE_LIB64_PATHES" +fi +export RPM_OPT_FLAGS="$RPM_OPT_FLAGS -fno-strict-aliasing" +# +# call build from build_script.rpmrc for threaded Qt library +# only really needed tools will be builded here, all extra tools will be +# builded in qt3.spec +# +call_configure -thread -shared -no-sql-mysql -no-sql-psql -no-sql-odbc -no-sql-sqlite $OPTIONS +cd src +make %{?jobs:-j%jobs} +cd .. + +%install +export VERSION=%suse_version +export WLIB=%_lib +export QTDIR=`pwd` +source %SOURCE1 %{version} +cd src +make INSTALL_ROOT=$RPM_BUILD_ROOT install_htmldocs +cd .. +# +# install menu entries +# +%suse_update_desktop_file -i -u qtconfig3 Qt Utility DesktopSettings +%suse_update_desktop_file -i assistant3 Qt Development Documentation + +install -d -m 0755 ${RPM_BUILD_ROOT}/%{_defaultdocdir}/qt3/ +ln -sf /usr/lib/qt3/doc/html ${RPM_BUILD_ROOT}/%{_defaultdocdir}/qt3/ +mkdir -p $RPM_BUILD_ROOT/usr/share/pixmaps/ +install -m 0644 %SOURCE4 $RPM_BUILD_ROOT/usr/share/pixmaps/ + +%clean +rm -rf ${RPM_BUILD_ROOT} + +%files +%defattr(-,root,root) +%dir /usr/lib/qt3/doc +%doc /usr/lib/qt3/doc/html +%{_docdir}/qt3/html +/usr/share/applications/qtconfig3.desktop +/usr/share/applications/assistant3.desktop +/usr/share/pixmaps/assistant3.png + +%changelog diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.history/77/f0bbc270480e00111528b7e658abf294 b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.history/77/f0bbc270480e00111528b7e658abf294 new file mode 100644 index 000000000..f1703cf9f --- /dev/null +++ b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.history/77/f0bbc270480e00111528b7e658abf294 @@ -0,0 +1,473 @@ +# +# spec file for package qt3-extensions +# +# Copyright (c) 2011 SUSE LINUX Products GmbH, Nuernberg, Germany. +# +# All modifications and additions to the file contributed by third parties +# remain the property of their copyright owners, unless otherwise agreed +# upon. The license for this file, and modifications and additions to the +# file, is the same license as for the pristine package itself (unless the +# license for the pristine package is not an Open Source License, in which +# case the license is the MIT License). An "Open Source License" is a +# license that conforms to the Open Source Definition (Version 1.9) +# published by the Open Source Initiative. + +# Please submit bugfixes or comments via http://bugs.opensuse.org/ +# + +# norootforbuild + + +Name: qt3-extensions +BuildRequires: cups-devel krb5-devel mysql-devel postgresql-devel qt3-devel sqlite2-devel unixODBC-devel update-desktop-files +%if %suse_version > 1020 +BuildRequires: fdupes +%endif +License: GPL, QPL +Version: 3.3.8d +Release: 1 +AutoReqProv: on +Requires: qt3 = %version +Group: Development/Tools/Other +Summary: Qt3 Extensions +# COMMON-BEGIN +# COMMON-BEGIN +%define x11_free -x11-free- +%define rversion 3.3.8b +Source0: http://mirror.its.uidaho.edu/pub/trinity/releases/3.5.13/dependencies/qt3-3.3.8.d.tar.gz +Source1: build_script.sh +Source2: qtconfig3.desktop +Source3: qtrc +Source4: assistant3.png +Source6: assistant3.desktop +Source7: designer.desktop +Source8: designer.png +Source9: linguist.desktop +Source5: linguist.png +Source10: qt3.sh +Source11: qt3.csh +# Translations did not change at 3.3.8d +Source12: qt3-3.3.8b-translations.tar.bz2 +Source100: qtkdeintegration_x11.cpp +Source101: qtkdeintegration_x11_p.h +Source102: baselibs.conf +Source200: attributes +Source201: update_spec.pl +Patch1: aliasing.diff +Patch2: head.diff +Patch4: qt3-never-strip.diff +Patch5: external-libs.diff +Patch6: 0001-dnd_optimization.patch +Patch7: 0002-dnd_active_window_fix.patch +Patch8: 0007-qpixmap_constants.patch +Patch11: 0038-dragobject-dont-prefer-unknown.patch +Patch12: qtrc-path.diff +Patch14: lib64-plugin-support.diff +Patch15: pluginmanager-fix.diff +Patch18: no-rpath.dif +Patch19: shut-up.diff +Patch20: rubberband.diff +Patch21: fix-GL-loading.diff +Patch23: fix-accessible.diff +# From http://www.freedesktop.org/wiki/Software_2fImmoduleQtDownload +# Current version from http://freedesktop.org/~daisuke/qt-x11-immodule-unified-qt3.3.5-20060318.diff.bz2 +Patch25: qt-x11-immodule-unified-qt3.3.8-20060318.diff +Patch28: fix-key-release-event-with-imm.diff +Patch29: 0047-fix-kmenu-width.diff +Patch31: limit-image-size.diff +Patch34: 0005-qpixmap_mitshm.patch +Patch35: qt-transparency.patch +Patch37: 0055-qtextedit_zoom.patch +Patch38: 0048-qclipboard_hack_80072.patch +Patch39: fix-qtranslator-crash.diff +Patch40: 0059-qpopup_has_mouse.patch +Patch41: 0060-qpopup_ignore_mousepos.patch +Patch42: add_qexport_visibility.patch +Patch43: 0056-khotkeys_input_84434.patch +Source250: enable-designer-plugins.diff +Patch53: fix-xinerama-dialog-placement.diff +Patch54: kmenu-search-fix.diff +Patch55: qt3-fix-cast.diff +Patch100: qt.patch +Patch101: qt3-arm-gcc4.patch +Patch102: xinerama.patch +Patch113: fix-assistant-path.patch +Patch117: qtimer-debug.diff +Patch119: xinerama-qpopupmenu.diff +Patch121: qt3-warnings.diff +Patch123: use-xrandr-1.2.diff +Patch125: qcstring-format-warnings.diff +Patch127: mng-reading-fix.patch +Patch128: 0079-compositing-types.patch +Patch129: 0080-net-wm-sync-request.patch +Patch132: revert-qt-3.3.8-khmer-fix.diff +Patch133: 0085-fix-buildkey.diff +Patch134: fix-xinput-clash.diff +Patch135: parseFontName.diff +Patch136: qt3-no-date.diff +Patch137: popen-leak-fix.diff +Patch138: qt3-libpng14.diff +Patch139: gcc46.diff + +BuildRoot: %{_tmppath}/%{name}-%{version}-build + +%description +This package contains extension libraries for Qt 3, such as the +Netscape plug-in modules. + +This package contains extension libraries for Qt 3, such as the +Netscape plug-in modules. + +This package contains extension libraries for Qt 3, such as the +Netscape plug-in modules. + +This package contains extension libraries for Qt 3, such as the +Netscape plug-in modules. + +%define build_sub_dirs src plugins/src tools/designer/uilib/ tools/designer/uic tools/qtconfig tools/assistant/lib tools/assistant tutorial + +%prep +%setup -q -n qt3 +%patch1 +%patch2 +%patch4 +%patch5 +%patch6 +%patch7 +%patch8 +%patch11 +%patch12 +if [ "%_lib" = "lib64" ]; then +%patch14 +fi +%patch15 +%patch18 +%patch19 +%patch20 +%patch23 +%patch25 +%patch28 +%patch29 +%patch31 +%patch34 +%patch35 +%patch37 +%patch38 +%patch39 +%patch40 +%patch41 +%patch42 +%patch43 +%patch100 +%patch102 +%patch53 +%patch54 +%patch55 +%patch101 +%patch113 +%patch117 +%patch119 +%patch121 +%patch123 +ln -sf $PWD/src/inputmethod/qinputcontextfactory.h include/ +ln -sf $PWD/src/inputmethod/qinputcontextplugin.h include/ +ln -sf $PWD/src/kernel/qinputcontext.h include/ +ln -sf $PWD/src/kernel/qinputcontextinterface_p.h include/private/ +ln -sf $PWD/src/kernel/qximinputcontext_p.h include/private/ +if [ %_lib = "lib" ]; then +sed 's,/lib64/,/lib/,' %PATCH21 | patch -p0 +else +%patch21 +fi +%patch125 +%patch127 +%patch128 +%patch129 +%patch132 +%patch133 +%patch134 +%patch135 +%patch136 +%patch137 +%if %suse_version > 1120 +%patch138 -p1 +%endif +%patch139 +# copy qt kde integration files +cp %SOURCE100 %SOURCE101 src/kernel/ +cp %SOURCE101 include/private/ +cd translations +tar xvjf %SOURCE12 +cd .. +# COMMON-END +# COMMON-END + +%description +This package contains extension libraries for Qt 3, such as the +Netscape plug-in modules. + +This package contains extension libraries for Qt 3, such as the +Netscape plug-in modules. + +This package contains extension libraries for Qt 3, such as the +Netscape plug-in modules. + +This package contains extension libraries for Qt 3, such as the +Netscape plug-in modules. + +%package -n qt3-devel-examples +Summary: Programming Examples for Qt 3 +AutoReqProv: on +Group: Development/Sources +Provides: qt3-examples +Obsoletes: qt3-examples + +%description -n qt3-devel-examples +This package contains small executables with code to demonstrate Qt +programming. + +Have a look in /usr/share/doc/packages/qt3/examples/. + +%package -n qt3-mysql +Summary: MySQL Plug-In for Qt +Provides: qt3_database_plugin +Group: Productivity/Databases/Clients + +%description -n qt3-mysql +Plug-in for using the MySQL database with the generic Qt database +interface. + +%package -n qt3-unixODBC +Summary: A UnixODBC Plug-In for Qt +Provides: qt3_database_plugin +Group: Productivity/Databases/Clients + +%description -n qt3-unixODBC +A plug-in for using UnixODBC supported databases with the generic Qt +database interface. + +%package -n qt3-postgresql +Summary: A PostgreSQL Plug-In for Qt +Provides: qt3_database_plugin +Group: Productivity/Databases/Clients + +%description -n qt3-postgresql +A Plug-in for using the PostgreSQL database with the generic Qt +database interface. + +%package -n qt3-sqlite +Summary: SQLite Database Plug-In for Qt +Provides: qt3_database_plugin +Group: Development/Tools/Other + +%description -n qt3-sqlite +The Qt database supports SQLite with this plug-in. (No configured and +running daemon is required.) + +%package -n qt3-devel-tools +Summary: User Interface Builder and other tools (designer, assistant, linguist) +AutoReqProv: on +Requires: qt3-devel = %version +Provides: qt3-designer +Obsoletes: qt3-designer +Group: Development/Tools/GUI Builders + +%description -n qt3-devel-tools +The designer creates .ui files. The uic generates C++ code from these +files. The package also contains the Qt Assistant (Qt documentation +browser) and the Qt Linguist (for translations). + +%package -n qt3-man +Summary: Qt 3 Man Pages +AutoReqProv: on +Requires: qt3-devel = %version +Conflicts: qtman qt-man +Group: Documentation/Man + +%description -n qt3-man +This package contains all the man pages for all the Qt 3 classes. + +%build +export QTDIR=/usr/lib/qt3/ +export WLIB=%_lib +export VERSION=%suse_version +source %{SOURCE1} %{version} +export RPM_OPT_FLAGS="$RPM_OPT_FLAGS -fno-strict-aliasing" +# +# compile threaded version to build all tools. +# the lib itself becomes packaged from qt3.spec +# +call_configure -thread -shared -L$PWD/%_lib $OPTIONS +ln -sf /usr/lib/qt3/%_lib/* lib/ +ln -sf /usr/lib/qt3/bin/* bin/ +cd plugins/src +make %{?jobs:-j%jobs} +make INSTALL_ROOT=$RPM_BUILD_ROOT install +cd - +# +# build examples +# +cd tools/assistant/lib +make %{?jobs:-j%jobs} +cd - +cd examples +make %{?jobs:-j%jobs} +cd - +# +# build extra tools +# +cd tools +make %{?jobs:-j%jobs} +make INSTALL_ROOT=$RPM_BUILD_ROOT install +for i in qvfb qembed qconfig msg2qm mergetr ; do + cd "$i" && make %{?jobs:-j%jobs} && install -m 0755 $i ${RPM_BUILD_ROOT}/usr/lib/qt3/bin/ && cd - +done +cd .. +install -m 0755 bin/findtr bin/qt20fix bin/qtrename140 ${RPM_BUILD_ROOT}/usr/lib/qt3/bin/ +if [ %_lib = lib64 ]; then + for i in $RPM_BUILD_ROOT/usr/lib/qt3/plugins/*/*.so; do + mv "$i" "${i%.so}.lib64.so" + done +fi + +%install +export WLIB=%_lib +export VERSION=%suse_version +source %{SOURCE1} +post_install $RPM_BUILD_ROOT/usr/lib/qt3/ +# +# create default doc dir +# +install -d -m 0755 ${RPM_BUILD_ROOT}/%{_docdir}/qt3/ +# +# create links in ld.so.conf path +# +install -d -m 0755 ${RPM_BUILD_ROOT}/%{_libdir} +#install -d -m 0755 ${RPM_BUILD_ROOT}/usr/bin/ +#ln -sf ../lib/qt3/bin/designer ${RPM_BUILD_ROOT}/usr/bin/designer +#ln -sf ../lib/qt3/bin/linguist ${RPM_BUILD_ROOT}/usr/bin/linguist +%suse_update_desktop_file -i designer Qt Development GUIDesigner +%suse_update_desktop_file -i linguist Qt Development Translation +mkdir -p $RPM_BUILD_ROOT/usr/share/pixmaps +perl -pi -e 's/Icon=designer/Icon=designer3/' ${RPM_BUILD_ROOT}/usr/share/applications/designer.desktop +perl -pi -e 's,Exec=designer,Exec=/usr/lib/qt3/bin/designer,' ${RPM_BUILD_ROOT}/usr/share/applications/designer.desktop +mv ${RPM_BUILD_ROOT}/usr/share/applications/designer.desktop ${RPM_BUILD_ROOT}/usr/share/applications/designer3.desktop +install -m 0644 tools/assistant/images/designer.png $RPM_BUILD_ROOT/usr/share/pixmaps/designer3.png +rm -f ${RPM_BUILD_ROOT}/usr/share/pixmaps/designer.png +perl -pi -e 's,Exec=linguist,Exec=/usr/lib/qt3/bin/linguist,' ${RPM_BUILD_ROOT}/usr/share/applications/linguist.desktop +perl -pi -e 's,Icon=linguist,Icon=linguist3,' ${RPM_BUILD_ROOT}/usr/share/applications/linguist.desktop +mv ${RPM_BUILD_ROOT}/usr/share/pixmaps/linguist.png ${RPM_BUILD_ROOT}/usr/share/pixmaps/linguist3.png + +##### these files are not getting installed by "make install" ... bug ? +# +# +# install manpages +# +rm -rf $RPM_BUILD_ROOT/%{_mandir} +install -d $RPM_BUILD_ROOT/%{_mandir} +cp -a doc/man/* $RPM_BUILD_ROOT/%{_mandir}/ +# +# install examples +# +install -d ${RPM_BUILD_ROOT}/usr/lib/qt3/doc/ +find ./examples/ \ + -name \*.o -o -name .obj -o -name .moc -o -name Makefile \ + | xargs rm -rf +cp -a examples ${RPM_BUILD_ROOT}/usr/lib/qt3/doc/ +ln -sf /usr/lib/qt3/doc/examples ${RPM_BUILD_ROOT}/%{_docdir}/qt3/ +# +# to be sure we do not package files which are packaged in other qt3 packages +# +rpm -ql qt3 qt3-devel qt3-devel-doc \ + | while read i ; do + [ -d "$i" ] || rm -f $RPM_BUILD_ROOT/"$i" +done +# +# we do have them in qt3-devel-doc already +# +rm -f $RPM_BUILD_ROOT/usr/lib/qt3/bin/assistant +rm -f $RPM_BUILD_ROOT/usr/lib/qt3/%_lib/libqassistantclient.* +rm -f $RPM_BUILD_ROOT/usr/lib/qt3/translations/assistant_de.qm + +for l in $RPM_BUILD_ROOT/usr/lib/qt3/%_lib/*.a; do + strip --strip-unneeded $l +done + +%if %suse_version > 1020 +%fdupes -s $RPM_BUILD_ROOT +%endif + +%pre +if test -L usr/lib/qt3; then + rm usr/lib/qt3 +fi + +%clean +rm -rf ${RPM_BUILD_ROOT} + +%post +%run_ldconfig + +%post -n qt3-devel-tools +%run_ldconfig + +%files +%defattr(-,root,root) +/usr/lib/qt3/bin/qembed +/usr/lib/qt3/bin/qvfb + +%files -n qt3-mysql +%defattr(-,root,root) +%dir /usr/lib/qt3/plugins/sqldrivers +/usr/lib/qt3/plugins/sqldrivers/libqsqlmysql*.so + +%files -n qt3-postgresql +%defattr(-,root,root) +%dir /usr/lib/qt3/plugins/sqldrivers +/usr/lib/qt3/plugins/sqldrivers/libqsqlpsql*.so + +%files -n qt3-unixODBC +%defattr(-,root,root) +%dir /usr/lib/qt3/plugins/sqldrivers +/usr/lib/qt3/plugins/sqldrivers/libqsqlodbc*.so + +%files -n qt3-sqlite +%defattr(-,root,root) +%dir /usr/lib/qt3/plugins/sqldrivers +/usr/lib/qt3/plugins/sqldrivers/libqsqlite*.so + +%files -n qt3-devel-tools +%defattr(-,root,root) +#/usr/bin/designer +#/usr/bin/linguist +/usr/lib/qt3/bin/qconfig +/usr/lib/qt3/bin/findtr +/usr/lib/qt3/bin/qt20fix +/usr/lib/qt3/bin/qtrename140 +/usr/lib/qt3/bin/msg2qm +/usr/lib/qt3/bin/mergetr +/usr/lib/qt3/bin/designer +/usr/lib/qt3/bin/linguist +/usr/lib/qt3/bin/qm2ts +/usr/lib/qt3/bin/lrelease +/usr/lib/qt3/bin/lupdate +/usr/lib/qt3/templates +/usr/lib/qt3/plugins/designer +/usr/lib/qt3/phrasebooks +/usr/lib/qt3/%_lib/libdesignercore.* +/usr/lib/qt3/%_lib/libeditor.* +/usr/share/applications/* +/usr/share/pixmaps/designer3.png +/usr/share/pixmaps/linguist3.png + +%files -n qt3-devel-examples +%defattr(-,root,root) +%dir /usr/lib/qt3/doc +/%{_docdir}/qt3/examples +/usr/lib/qt3/doc/examples + +%files -n qt3-man +%defattr(-,root,root) +%{_mandir}/man*/* + +%changelog diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.history/7d/a05a9559480e00111528b7e658abf294 b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.history/7d/a05a9559480e00111528b7e658abf294 new file mode 100644 index 000000000..a464765cd --- /dev/null +++ b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.history/7d/a05a9559480e00111528b7e658abf294 @@ -0,0 +1,180 @@ +--- src/kernel/qdnd_x11.cpp ++++ src/kernel/qdnd_x11.cpp +@@ -49,13 +49,15 @@ + #include "qdragobject.h" + #include "qobjectlist.h" + #include "qcursor.h" ++#include "qbitmap.h" ++#include "qpainter.h" + + #include "qt_x11_p.h" + + // conflict resolution + +-// unused, may be used again later: const int XKeyPress = KeyPress; +-// unused, may be used again later: const int XKeyRelease = KeyRelease; ++const int XKeyPress = KeyPress; ++const int XKeyRelease = KeyRelease; + #undef KeyPress + #undef KeyRelease + +@@ -252,20 +254,47 @@ + public: + QShapedPixmapWidget(int screen = -1) : + QWidget(QApplication::desktop()->screen( screen ), +- 0, WStyle_Customize | WStyle_Tool | WStyle_NoBorder | WX11BypassWM ) ++ 0, WStyle_Customize | WStyle_Tool | WStyle_NoBorder | WX11BypassWM ), oldpmser( 0 ), oldbmser( 0 ) + { + } + +- void setPixmap(QPixmap pm) ++ void setPixmap(QPixmap pm, QPoint hot) + { +- if ( pm.mask() ) { ++ int bmser = pm.mask() ? pm.mask()->serialNumber() : 0; ++ if( oldpmser == pm.serialNumber() && oldbmser == bmser ++ && oldhot == hot ) ++ return; ++ oldpmser = pm.serialNumber(); ++ oldbmser = bmser; ++ oldhot = hot; ++ bool hotspot_in = !(hot.x() < 0 || hot.y() < 0 || hot.x() >= pm.width() || hot.y() >= pm.height()); ++// if the pixmap has hotspot in its area, make a "hole" in it at that position ++// this will allow XTranslateCoordinates() to find directly the window below the cursor instead ++// of finding this pixmap, and therefore there won't be needed any (slow) search for the window ++// using findRealWindow() ++ if( hotspot_in ) { ++ QBitmap mask = pm.mask() ? *pm.mask() : QBitmap( pm.width(), pm.height()); ++ if( !pm.mask()) ++ mask.fill( Qt::color1 ); ++ QPainter p( &mask ); ++ p.setPen( Qt::color0 ); ++ p.drawPoint( hot.x(), hot.y()); ++ p.end(); ++ pm.setMask( mask ); ++ setMask( mask ); ++ } else if ( pm.mask() ) { + setMask( *pm.mask() ); + } else { + clearMask(); + } + resize(pm.width(),pm.height()); + setErasePixmap(pm); ++ erase(); + } ++private: ++ int oldpmser; ++ int oldbmser; ++ QPoint oldhot; + }; + + static QShapedPixmapWidget * qt_xdnd_deco = 0; +@@ -862,6 +891,45 @@ + move( QCursor::pos() ); + } + ++static bool qt_xdnd_was_move = false; ++static bool qt_xdnd_found = false; ++// check whole incoming X queue for move events ++// checking whole queue is done by always returning False in the predicate ++// if there's another move event in the queue, and there's not a mouse button ++// or keyboard or ClientMessage event before it, the current move event ++// may be safely discarded ++// this helps avoiding being overloaded by being flooded from many events ++// from the XServer ++static ++Bool qt_xdnd_predicate( Display*, XEvent* ev, XPointer ) ++{ ++ if( qt_xdnd_found ) ++ return False; ++ if( ev->type == MotionNotify ) ++ { ++ qt_xdnd_was_move = true; ++ qt_xdnd_found = true; ++ } ++ if( ev->type == ButtonPress || ev->type == ButtonRelease ++ || ev->type == XKeyPress || ev->type == XKeyRelease ++ || ev->type == ClientMessage ) ++ { ++ qt_xdnd_was_move = false; ++ qt_xdnd_found = true; ++ } ++ return False; ++} ++ ++static ++bool qt_xdnd_another_movement() ++{ ++ qt_xdnd_was_move = false; ++ qt_xdnd_found = false; ++ XEvent dummy; ++ XCheckIfEvent( qt_xdisplay(), &dummy, qt_xdnd_predicate, NULL ); ++ return qt_xdnd_was_move; ++} ++ + bool QDragManager::eventFilter( QObject * o, QEvent * e) + { + if ( beingCancelled ) { +@@ -884,8 +952,10 @@ + + if ( e->type() == QEvent::MouseMove ) { + QMouseEvent* me = (QMouseEvent *)e; +- updateMode(me->stateAfter()); +- move( me->globalPos() ); ++ if( !qt_xdnd_another_movement()) { ++ updateMode(me->stateAfter()); ++ move( me->globalPos() ); ++ } + return TRUE; + } else if ( e->type() == QEvent::MouseButtonRelease ) { + qApp->removeEventFilter( this ); +@@ -1126,7 +1196,7 @@ + qt_xdnd_deco->grabMouse(); + } + } +- updatePixmap(); ++ updatePixmap( globalPos ); + + if ( qt_xdnd_source_sameanswer.contains( globalPos ) && + qt_xdnd_source_sameanswer.isValid() ) { +@@ -1717,7 +1787,7 @@ + // qt_xdnd_source_object persists until we get an xdnd_finish message + } + +-void QDragManager::updatePixmap() ++void QDragManager::updatePixmap( const QPoint& cursorPos ) + { + if ( qt_xdnd_deco ) { + QPixmap pm; +@@ -1732,9 +1802,8 @@ + defaultPm = new QPixmap(default_pm); + pm = *defaultPm; + } +- qt_xdnd_deco->setPixmap(pm); +- qt_xdnd_deco->move(QCursor::pos()-pm_hot); +- qt_xdnd_deco->repaint(FALSE); ++ qt_xdnd_deco->setPixmap(pm, pm_hot); ++ qt_xdnd_deco->move(cursorPos-pm_hot); + //if ( willDrop ) { + qt_xdnd_deco->show(); + //} else { +@@ -1743,4 +1812,9 @@ + } + } + ++void QDragManager::updatePixmap() ++{ ++ updatePixmap( QCursor::pos()); ++} ++ + #endif // QT_NO_DRAGANDDROP +--- src/kernel/qdragobject.h ++++ src/kernel/qdragobject.h +@@ -245,6 +245,7 @@ + void move( const QPoint & ); + void drop(); + void updatePixmap(); ++ void updatePixmap( const QPoint& cursorPos ); + + private: + QDragObject * object; diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.history/81/10a57b7a1c0f00111528b7e658abf294 b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.history/81/10a57b7a1c0f00111528b7e658abf294 new file mode 100644 index 000000000..6006926a3 --- /dev/null +++ b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.history/81/10a57b7a1c0f00111528b7e658abf294 @@ -0,0 +1,279 @@ +# +# spec file for package qt3-devel-doc +# +# Copyright (c) 2011 SUSE LINUX Products GmbH, Nuernberg, Germany. +# +# All modifications and additions to the file contributed by third parties +# remain the property of their copyright owners, unless otherwise agreed +# upon. The license for this file, and modifications and additions to the +# file, is the same license as for the pristine package itself (unless the +# license for the pristine package is not an Open Source License, in which +# case the license is the MIT License). An "Open Source License" is a +# license that conforms to the Open Source Definition (Version 1.9) +# published by the Open Source Initiative. + +# Please submit bugfixes or comments via http://bugs.opensuse.org/ +# + +# norootforbuild + + +Name: qt3-devel-doc +BuildRequires: cups-devel freeglut-devel freetype2-devel gcc-c++ pkgconfig qt3-devel update-desktop-files +%if %suse_version < 1130 +BuildRequires: libpng-devel +%else +BuildRequires: libpng14-devel +%endif +Url: http://www.trolltech.com/ +License: GPL, QPL +AutoReqProv: on +Summary: Documentation for the Qt 3 Development Kit +Group: Documentation/HTML +Version: 3.3.8d +Release: 1 +PreReq: /bin/grep +BuildArch: noarch +Provides: qt3-devel-tutorial +Obsoletes: qt3-devel-tutorial +Requires: qt3-devel +%define x11_free -x11-free- +%define rversion %version +# COMMON-BEGIN +# COMMON-BEGIN +%define x11_free -x11-free- +%define rversion 3.3.8b +Source0: http://mirror.its.uidaho.edu/pub/trinity/releases/3.5.13/dependencies/qt3-3.3.8.d.tar.gz +Source1: build_script.sh +Source2: qtconfig3.desktop +Source3: qtrc +Source4: assistant3.png +Source6: assistant3.desktop +Source7: designer.desktop +Source8: designer.png +Source9: linguist.desktop +Source5: linguist.png +Source10: qt3.sh +Source11: qt3.csh +# Translations did not change at 3.3.8c +Source12: qt3-3.3.8b-translations.tar.bz2 +Source100: qtkdeintegration_x11.cpp +Source101: qtkdeintegration_x11_p.h +Source102: baselibs.conf +Source200: attributes +Source201: update_spec.pl +Patch1: aliasing.diff +Patch2: head.diff +Patch4: qt3-never-strip.diff +Patch5: external-libs.diff +Patch12: qtrc-path.diff +Patch14: lib64-plugin-support.diff +Patch15: pluginmanager-fix.diff +Patch18: no-rpath.dif +Patch19: shut-up.diff +Patch21: fix-GL-loading.diff +Patch23: fix-accessible.diff +Patch28: fix-key-release-event-with-imm.diff +Patch29: 0047-fix-kmenu-width.diff +Patch31: limit-image-size.diff +Patch34: 0005-qpixmap_mitshm.patch +Patch35: qt-transparency.patch +Patch37: 0055-qtextedit_zoom.patch +Patch38: 0048-qclipboard_hack_80072.patch +Patch39: fix-qtranslator-crash.diff +Patch40: 0059-qpopup_has_mouse.patch +Patch41: 0060-qpopup_ignore_mousepos.patch +Patch42: add_qexport_visibility.patch +Patch43: 0056-khotkeys_input_84434.patch +Source250: enable-designer-plugins.diff +Patch53: fix-xinerama-dialog-placement.diff +Patch54: kmenu-search-fix.diff +Patch55: qt3-fix-cast.diff +Patch100: qt.patch +Patch101: qt3-arm-gcc4.patch +Patch102: xinerama.patch +Patch113: fix-assistant-path.patch +Patch117: qtimer-debug.diff +Patch119: xinerama-qpopupmenu.diff +Patch121: qt3-warnings.diff +Patch123: use-xrandr-1.2.diff +Patch125: qcstring-format-warnings.diff +Patch127: mng-reading-fix.patch +Patch128: 0079-compositing-types.patch +Patch129: 0080-net-wm-sync-request.patch +Patch132: revert-qt-3.3.8-khmer-fix.diff +Patch133: 0085-fix-buildkey.diff +Patch134: fix-xinput-clash.diff +Patch135: parseFontName.diff +Patch136: qt3-no-date.diff +Patch137: popen-leak-fix.diff +Patch138: qt3-libpng14.diff +Patch139: gcc46.diff + +BuildRoot: %{_tmppath}/%{name}-%{version}-build + +%description +This package contains the documentation for the Qt 3 Development Kit. + +You will find documentation, precompiled examples, and a tutorial for +getting started with Qt in /usr/lib/qt3/doc. + +This package contains the documentation for the Qt 3 Development Kit. + +You will find documentation, precompiled examples, and a tutorial for +getting started with Qt in /usr/lib/qt3/doc. + +This package contains the documentation for the Qt 3 Development Kit. + +You will find documentation, precompiled examples, and a tutorial for +getting started with Qt in /usr/lib/qt3/doc. + +This package contains the documentation for the Qt 3 Development Kit. + +You will find documentation, precompiled examples, and a tutorial for +getting started with Qt in /usr/lib/qt3/doc. + +%define build_sub_dirs src plugins/src tools/designer/uilib/ tools/designer/uic tools/qtconfig tools/assistant/lib tools/assistant tutorial + +%prep +%setup -q -n qt3 +%patch1 +%patch2 +%patch4 +%patch5 +%patch12 +if [ "%_lib" = "lib64" ]; then +%patch14 +fi +%patch15 +%patch18 +%patch19 +%patch23 +#%patch28 +%patch29 +%patch31 +%patch34 +%patch35 +%patch37 +%patch38 +%patch39 +%patch40 +%patch41 +%patch42 +%patch43 +%patch100 +%patch102 +%patch53 +%patch54 +%patch55 +%patch101 +%patch113 +%patch117 +%patch119 +%patch121 +%patch123 +ln -sf $PWD/src/inputmethod/qinputcontextfactory.h include/ +ln -sf $PWD/src/inputmethod/qinputcontextplugin.h include/ +ln -sf $PWD/src/kernel/qinputcontext.h include/ +ln -sf $PWD/src/kernel/qinputcontextinterface_p.h include/private/ +ln -sf $PWD/src/kernel/qximinputcontext_p.h include/private/ +if [ %_lib = "lib" ]; then +sed 's,/lib64/,/lib/,' %PATCH21 | patch -p0 +else +%patch21 +fi +%patch125 +%patch127 +%patch128 +%patch129 +%patch132 +%patch133 +%patch134 +%patch135 +%patch136 +%patch137 +%if %suse_version > 1120 +%patch138 -p1 +%endif +%patch139 +# copy qt kde integration files +cp %SOURCE100 %SOURCE101 src/kernel/ +cp %SOURCE101 include/private/ +cd translations +tar xvjf %SOURCE12 +cd .. +# COMMON-END +# COMMON-END + +%description +This package contains the documentation for the Qt 3 Development Kit. + +You will find documentation, precompiled examples, and a tutorial for +getting started with Qt in /usr/lib/qt3/doc. + +This package contains the documentation for the Qt 3 Development Kit. + +You will find documentation, precompiled examples, and a tutorial for +getting started with Qt in /usr/lib/qt3/doc. + +This package contains the documentation for the Qt 3 Development Kit. + +You will find documentation, precompiled examples, and a tutorial for +getting started with Qt in /usr/lib/qt3/doc. + +This package contains the documentation for the Qt 3 Development Kit. + +You will find documentation, precompiled examples, and a tutorial for +getting started with Qt in /usr/lib/qt3/doc. + +%build +export VERSION=%suse_version +source %SOURCE1 %{version} +export WLIB=%_lib +export QTDIR=`pwd` +if [ %_lib == "lib64" ]; then +export RPM_OPT_FLAGS="$RPM_OPT_FLAGS -DUSE_LIB64_PATHES" +fi +export RPM_OPT_FLAGS="$RPM_OPT_FLAGS -fno-strict-aliasing" +# +# call build from build_script.rpmrc for threaded Qt library +# only really needed tools will be builded here, all extra tools will be +# builded in qt3.spec +# +call_configure -thread -shared -no-sql-mysql -no-sql-psql -no-sql-odbc -no-sql-sqlite $OPTIONS +cd src +make %{?jobs:-j%jobs} +cd .. + +%install +export VERSION=%suse_version +export WLIB=%_lib +export QTDIR=`pwd` +source %SOURCE1 %{version} +cd src +make INSTALL_ROOT=$RPM_BUILD_ROOT install_htmldocs +cd .. +# +# install menu entries +# +%suse_update_desktop_file -i -u qtconfig3 Qt Utility DesktopSettings +%suse_update_desktop_file -i assistant3 Qt Development Documentation + +install -d -m 0755 ${RPM_BUILD_ROOT}/%{_defaultdocdir}/qt3/ +ln -sf /usr/lib/qt3/doc/html ${RPM_BUILD_ROOT}/%{_defaultdocdir}/qt3/ +mkdir -p $RPM_BUILD_ROOT/usr/share/pixmaps/ +install -m 0644 %SOURCE4 $RPM_BUILD_ROOT/usr/share/pixmaps/ + +%clean +rm -rf ${RPM_BUILD_ROOT} + +%files +%defattr(-,root,root) +%dir /usr/lib/qt3/doc +%doc /usr/lib/qt3/doc/html +%{_docdir}/qt3/html +/usr/share/applications/qtconfig3.desktop +/usr/share/applications/assistant3.desktop +/usr/share/pixmaps/assistant3.png + +%changelog diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.history/89/a07cdabffc0e00111528b7e658abf294 b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.history/89/a07cdabffc0e00111528b7e658abf294 new file mode 100644 index 000000000..1bff6eef0 --- /dev/null +++ b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.history/89/a07cdabffc0e00111528b7e658abf294 @@ -0,0 +1,401 @@ +# +# spec file for package qt3 +# +# Copyright (c) 2011 SUSE LINUX Products GmbH, Nuernberg, Germany. +# +# All modifications and additions to the file contributed by third parties +# remain the property of their copyright owners, unless otherwise agreed +# upon. The license for this file, and modifications and additions to the +# file, is the same license as for the pristine package itself (unless the +# license for the pristine package is not an Open Source License, in which +# case the license is the MIT License). An "Open Source License" is a +# license that conforms to the Open Source Definition (Version 1.9) +# published by the Open Source Initiative. + +# Please submit bugfixes or comments via http://bugs.opensuse.org/ +# + + + +Name: qt3 +#Remember also to modify Requires in -devel package +BuildRequires: Mesa-devel c++_compiler cups-devel freetype2-devel libjpeg-devel libmng-devel pkgconfig update-desktop-files xorg-x11-devel +Url: http://www.trolltech.com/ +License: GPLv2 ; GPLv3 ; QPL .. +%if %suse_version > 1120 +BuildRequires: libpng14-compat-devel +%else +BuildRequires: libpng-devel +%endif +Group: System/Libraries +# bug437293 +%ifarch ppc64 +Obsoletes: qt3-64bit +%endif +# +Summary: A library for developing applications with graphical user interfaces +Version: 3.3.8d +Release: 110 +Provides: qt_library_%version +Recommends: kdelibs3-default-style +PreReq: /bin/grep +# COMMON-BEGIN +%define x11_free -x11-free- +%define rversion 3.3.8b +Source0: http://mirror.its.uidaho.edu/pub/trinity/releases/3.5.13/dependencies/qt3-3.3.8.d.tar.gz +Source1: build_script.sh +Source2: qtconfig3.desktop +Source3: qtrc +Source4: assistant3.png +Source6: assistant3.desktop +Source7: designer.desktop +Source8: designer.png +Source9: linguist.desktop +Source5: linguist.png +Source10: qt3.sh +Source11: qt3.csh +# Translations did not change at 3.3.8c +Source12: qt3-3.3.8b-translations.tar.bz2 +Source100: qtkdeintegration_x11.cpp +Source101: qtkdeintegration_x11_p.h +Source102: baselibs.conf +Source200: attributes +Source201: update_spec.pl +Patch1: aliasing.diff +Patch2: head.diff +Patch4: qt3-never-strip.diff +Patch5: external-libs.diff +Patch12: qtrc-path.diff +Patch14: lib64-plugin-support.diff +Patch15: pluginmanager-fix.diff +Patch18: no-rpath.dif +Patch19: shut-up.diff +Patch21: fix-GL-loading.diff +Patch23: fix-accessible.diff +# From http://www.freedesktop.org/wiki/Software_2fImmoduleQtDownload +# Current version from http://freedesktop.org/~daisuke/qt-x11-immodule-unified-qt3.3.5-20060318.diff.bz2 +Patch25: qt-x11-immodule-unified-qt3.3.8-20060318.diff +Patch28: fix-key-release-event-with-imm.diff +Patch29: 0047-fix-kmenu-width.diff +Patch31: limit-image-size.diff +Patch34: 0005-qpixmap_mitshm.patch +Patch35: qt-transparency.patch +Patch37: 0055-qtextedit_zoom.patch +Patch38: 0048-qclipboard_hack_80072.patch +Patch39: fix-qtranslator-crash.diff +Patch40: 0059-qpopup_has_mouse.patch +Patch41: 0060-qpopup_ignore_mousepos.patch +Patch42: add_qexport_visibility.patch +Patch43: 0056-khotkeys_input_84434.patch +Source250: enable-designer-plugins.diff +Patch53: fix-xinerama-dialog-placement.diff +Patch54: kmenu-search-fix.diff +Patch55: qt3-fix-cast.diff +Patch100: qt.patch +Patch101: qt3-arm-gcc4.patch +Patch102: xinerama.patch +Patch113: fix-assistant-path.patch +Patch117: qtimer-debug.diff +Patch119: xinerama-qpopupmenu.diff +Patch121: qt3-warnings.diff +Patch123: use-xrandr-1.2.diff +Patch125: qcstring-format-warnings.diff +Patch127: mng-reading-fix.patch +Patch128: 0079-compositing-types.patch +Patch129: 0080-net-wm-sync-request.patch +Patch132: revert-qt-3.3.8-khmer-fix.diff +Patch133: 0085-fix-buildkey.diff +Patch134: fix-xinput-clash.diff +Patch135: parseFontName.diff +Patch136: qt3-no-date.diff +Patch137: popen-leak-fix.diff +Patch138: qt3-libpng14.diff +Patch139: gcc46.diff + +BuildRoot: %{_tmppath}/%{name}-%{version}-build + +%description +Qt is a program library for developing applications with graphical user +interfaces. It allows you to rapidly develop professional programs. The +Qt library is available not only for Linux but for a great number of +Unices and even for Windows. Thus it is possible to write programs that +may be easily ported to those platforms. + +You need a license for using Qt with a non-GPL application, which can +be acquired from sales@trolltech.com. + +See /usr/share/doc/packages/qt3 for details about the new features of +the current Qt library! + +%define build_sub_dirs src plugins/src tools/designer/uilib/ tools/designer/uic tools/qtconfig tools/assistant/lib tools/assistant tutorial + +%prep +%setup -q -n qt3 +%patch1 +%patch2 +%patch4 +%patch5 +%patch12 +if [ "%_lib" = "lib64" ]; then +%patch14 +fi +%patch15 +%patch18 +%patch19 +%patch23 +%patch25 +%patch28 +%patch29 +%patch31 +%patch34 +%patch35 +%patch37 +%patch38 +%patch39 +%patch40 +%patch41 +%patch42 +%patch43 +%patch100 +%patch102 +%patch53 +%patch54 +%patch55 +%patch101 +%patch113 +%patch117 +%patch119 +%patch121 +%patch123 +ln -sf $PWD/src/inputmethod/qinputcontextfactory.h include/ +ln -sf $PWD/src/inputmethod/qinputcontextplugin.h include/ +ln -sf $PWD/src/kernel/qinputcontext.h include/ +ln -sf $PWD/src/kernel/qinputcontextinterface_p.h include/private/ +ln -sf $PWD/src/kernel/qximinputcontext_p.h include/private/ +if [ %_lib = "lib" ]; then +sed 's,/lib64/,/lib/,' %PATCH21 | patch -p0 +else +%patch21 +fi +%patch125 +%patch127 +%patch128 +%patch129 +%patch132 +%patch133 +%patch134 +%patch135 +%patch136 +%patch137 +%if %suse_version > 1120 +%patch138 -p1 +%endif +%patch139 +# copy qt kde integration files +cp %SOURCE100 %SOURCE101 src/kernel/ +cp %SOURCE101 include/private/ +cd translations +tar xvjf %SOURCE12 +cd .. +# COMMON-END + +%package devel +License: GPLv2 ; GPLv3 ; QPL .. +Summary: Include Files and Libraries mandatory for Development +Requires: qt3 = %version +Requires: pkgconfig cups-devel freetype2-devel libmng-devel libjpeg-devel c++_compiler xorg-x11-devel +%if %suse_version > 1120 +Recommends: libpng14-compat-devel +Requires: libpng-devel +%else +Requires: libpng-devel +%endif +%if %suse_version > 1000 +Requires: Mesa-devel +%else +Requires: xorg-x11-Mesa xorg-x11-Mesa-devel +%endif +%ifnarch x86_64 s390x sparc64 ppc64 mips64 +Conflicts: devel_libs-32bit +%endif +# bug437293 +%ifarch ppc64 +Obsoletes: qt3-devel-64bit +%endif +# +Group: Development/Libraries/X11 + +%description devel +You need this package if you want to compile programs with Qt 3. It +contains the "Qt Crossplatform Development Kit 2". Under /usr/lib/qt3 +you will find include files. + +You need a license for using Qt with a non-GPL application. A license +can be acquired at sales@trolltech.com. + +%build +export VERSION=%suse_version +source %SOURCE1 %{version} +export WLIB=%_lib +export QTDIR=`pwd` +if [ %_lib == "lib64" ]; then +export RPM_OPT_FLAGS="$RPM_OPT_FLAGS -DUSE_LIB64_PATHES" +fi +export RPM_OPT_FLAGS="$RPM_OPT_FLAGS -fno-strict-aliasing" +# +# call build from build_script.rpmrc for threaded Qt library +# only really needed tools will be builded here, all extra tools will be +# builded in qt3.spec +# +call_configure -v -thread -shared -no-sql-mysql -no-sql-psql -no-sql-odbc -no-sql-sqlite $OPTIONS +for i in %build_sub_dirs ; do + cd $i + make %{?jobs:-j%jobs} + cd - +done + +%install +export VERSION=%suse_version +export WLIB=%_lib +export QTDIR=`pwd` +source %SOURCE1 %{version} +for i in %build_sub_dirs ; do + cd $i + make INSTALL_ROOT=$RPM_BUILD_ROOT install + cd - +done +post_install $RPM_BUILD_ROOT/usr/lib/qt3/ +mkdir -p $RPM_BUILD_ROOT/usr/share/pixmaps/ +sed -i -e 's, on: .*,,' $RPM_BUILD_ROOT/usr/lib/qt3/%_lib/*.la +# +# copy additional files +# +install -m 0755 bin/qmake bin/moc ${RPM_BUILD_ROOT}/usr/lib/qt3/bin/ +install -m 0755 -d ${RPM_BUILD_ROOT}/usr/lib/qt3/translations/ +install -m 0644 translations/*.qm ${RPM_BUILD_ROOT}/usr/lib/qt3/translations/ +if [ %_lib = lib64 ]; then + for i in $RPM_BUILD_ROOT/usr/lib/qt3/plugins/*/*.so; do + mv "$i" "${i%.so}.lib64.so" + done +fi +# +# move pkgconfig files +# +mkdir -p $RPM_BUILD_ROOT/%_libdir/pkgconfig +mv $RPM_BUILD_ROOT/usr/lib/qt3/%_lib/pkgconfig/*.pc \ + $RPM_BUILD_ROOT/%_libdir/pkgconfig +rmdir $RPM_BUILD_ROOT/usr/lib/qt3/%_lib/pkgconfig +# +# move docs in doc dir +# +install -d -m 0755 ${RPM_BUILD_ROOT}/%{_defaultdocdir}/qt3/ +install -d -m 0755 ${RPM_BUILD_ROOT}/usr/lib/qt3/mkspecs/ +install -d -m 0755 ${RPM_BUILD_ROOT}/usr/lib/qt3/mkspecs/ +cp -a mkspecs/* ${RPM_BUILD_ROOT}/usr/lib/qt3/mkspecs/ +if [ %_lib == "lib64" ]; then + ln -sf linux-g++-64 ${RPM_BUILD_ROOT}/usr/lib/qt3/mkspecs/default +else + ln -sf linux-g++ ${RPM_BUILD_ROOT}/usr/lib/qt3/mkspecs/default +fi +find ${RPM_BUILD_ROOT}/usr/lib/qt3/mkspecs -type f -perm /111 -print0 | xargs -0 chmod a-x +# +# create links in ld.so.conf path +# +install -d -m 0755 ${RPM_BUILD_ROOT}/%{_libdir} +ln -sf ../lib/qt3/%{_lib}/libqt-mt.so.3 ${RPM_BUILD_ROOT}/%{_libdir}/libqt-mt.so.3 +ln -sf ../lib/qt3/%{_lib}/libqui.so.1 ${RPM_BUILD_ROOT}/%{_libdir}/libqui.so.1 +[ "lib" != "%{_lib}" ] && \ + ln -sf ../lib/qt3 ${RPM_BUILD_ROOT}/%{_libdir}/qt3 +mkdir -p ${RPM_BUILD_ROOT}/etc/profile.d +install -m 644 %SOURCE10 %SOURCE11 ${RPM_BUILD_ROOT}/etc/profile.d +# +# default qt settings +# +mkdir -p ${RPM_BUILD_ROOT}/etc/X11 +mkdir -p ${RPM_BUILD_ROOT}/usr/lib/qt3/etc/ +ln -sf /etc/X11/ ${RPM_BUILD_ROOT}/usr/lib/qt3/etc/settings +install -m 0644 %SOURCE3 ${RPM_BUILD_ROOT}/etc/X11/qtrc +# +# clean broken links +# +if [ %_lib == "lib64" ]; then + rm ${RPM_BUILD_ROOT}/usr/lib/qt3/mkspecs/linux-g++-64/linux-g++-64 +else + rm ${RPM_BUILD_ROOT}/usr/lib/qt3/mkspecs/linux-g++/linux-g++ +fi +rm -rf ${RPM_BUILD_ROOT}/usr/lib/qt3/doc/html + +%pre +if test -L usr/lib/qt3; then + rm usr/lib/qt3 +fi + +%post +/sbin/ldconfig +if ! grep -q '^\[3.3\]' etc/X11/qtrc ; then +echo "" >> etc/X11/qtrc +echo "[3.3]" >> etc/X11/qtrc +echo "libraryPath=/opt/kde3/lib64/kde3/plugins/:/opt/kde3/lib/kde3/plugins/" >> etc/X11/qtrc +fi + +%postun -p /sbin/ldconfig + +%files +%defattr(-,root,root,755) +# FIXME provide new changelog if kb9vqf will give one +%doc changes-3.3.8b README* LICENSE* MANIFEST FAQ +%dir /usr/lib/qt3/translations +%dir /usr/lib/qt3 +%dir /usr/lib/qt3/bin +%dir /usr/lib/qt3/%{_lib} +%{_libdir}/libqt-mt.so.* +%{_libdir}/libqui.so.* +/usr/lib/qt3/bin/qtconfig +/usr/lib/qt3/%{_lib}/libqt-mt.so.* +/usr/lib/qt3/%{_lib}/libqui.so.* +%dir /usr/lib/qt3/etc +/usr/lib/qt3/etc/settings +/usr/lib/qt3/plugins +/usr/lib/qt3/bin/assistant +%lang(de) /usr/lib/qt3/translations/assistant_de.qm +%lang(ar) /usr/lib/qt3/translations/qt_ar.qm +%lang(ca) /usr/lib/qt3/translations/qt_ca.qm +%lang(cs) /usr/lib/qt3/translations/qt_cs.qm +%lang(de) /usr/lib/qt3/translations/qt_de.qm +%lang(es) /usr/lib/qt3/translations/qt_es.qm +%lang(fr) /usr/lib/qt3/translations/qt_fr.qm +%lang(he) /usr/lib/qt3/translations/qt_he.qm +%lang(ru) /usr/lib/qt3/translations/qt_ru.qm +%lang(sk) /usr/lib/qt3/translations/qt_sk.qm +%lang(it) /usr/lib/qt3/translations/qt_it.qm +%lang(ja) /usr/lib/qt3/translations/qt_ja.qm +%lang(nb) /usr/lib/qt3/translations/qt_nb.qm +%lang(pl) /usr/lib/qt3/translations/qt_pl.qm +%lang(pt) /usr/lib/qt3/translations/qt_pt-br.qm +%lang(pt) /usr/lib/qt3/translations/qt_pt.qm +%lang(zh) /usr/lib/qt3/translations/qt_zh-cn.qm +%lang(zh) /usr/lib/qt3/translations/qt_zh-tw.qm +%config(noreplace) /etc/X11/qtrc +%ifarch s390x sparc64 x86_64 ppc64 mips64 +%dir %{_libdir}/qt3 +%endif + +%files devel +%defattr(-,root,root,755) +# FIXME provide new changelog if kb9vqf will give one +%doc changes-3.3.8b +/usr/lib/qt3/bin/moc +/usr/lib/qt3/bin/qmake +/usr/lib/qt3/bin/uic +/usr/lib/qt3/include +/usr/lib/qt3/%{_lib}/libqt-mt.la +/usr/lib/qt3/%{_lib}/libqt-mt.so +/usr/lib/qt3/%{_lib}/libqt-mt.prl +/usr/lib/qt3/%{_lib}/libqui.so +/usr/lib/qt3/%{_lib}/libqui.prl +/usr/lib/qt3/mkspecs +/%_libdir/pkgconfig/qt-mt.pc +/usr/lib/qt3/%_lib/libqassistantclient.* +%config /etc/profile.d/qt3.* + +%changelog diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.history/95/700a9bdd7a0e00111528b7e658abf294 b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.history/95/700a9bdd7a0e00111528b7e658abf294 new file mode 100644 index 000000000..8f4c01254 --- /dev/null +++ b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.history/95/700a9bdd7a0e00111528b7e658abf294 @@ -0,0 +1,467 @@ +# +# spec file for package qt3-extensions +# +# Copyright (c) 2011 SUSE LINUX Products GmbH, Nuernberg, Germany. +# +# All modifications and additions to the file contributed by third parties +# remain the property of their copyright owners, unless otherwise agreed +# upon. The license for this file, and modifications and additions to the +# file, is the same license as for the pristine package itself (unless the +# license for the pristine package is not an Open Source License, in which +# case the license is the MIT License). An "Open Source License" is a +# license that conforms to the Open Source Definition (Version 1.9) +# published by the Open Source Initiative. + +# Please submit bugfixes or comments via http://bugs.opensuse.org/ +# + +# norootforbuild + + +Name: qt3-extensions +BuildRequires: cups-devel krb5-devel mysql-devel postgresql-devel qt3-devel sqlite2-devel unixODBC-devel update-desktop-files +%if %suse_version > 1020 +BuildRequires: fdupes +%endif +License: GPL, QPL +Version: 3.3.8d +Release: 1 +AutoReqProv: on +Requires: qt3 = %version +Group: Development/Tools/Other +Summary: Qt3 Extensions +# COMMON-BEGIN +# COMMON-BEGIN +%define x11_free -x11-free- +%define rversion 3.3.8b +Source0: http://mirror.its.uidaho.edu/pub/trinity/releases/3.5.13/dependencies/qt3-3.3.8.d.tar.gz +Source1: build_script.sh +Source2: qtconfig3.desktop +Source3: qtrc +Source4: assistant3.png +Source6: assistant3.desktop +Source7: designer.desktop +Source8: designer.png +Source9: linguist.desktop +Source5: linguist.png +Source10: qt3.sh +Source11: qt3.csh +# Translations did not change at 3.3.8d +Source12: qt3-3.3.8b-translations.tar.bz2 +Source100: qtkdeintegration_x11.cpp +Source101: qtkdeintegration_x11_p.h +Source102: baselibs.conf +Source200: attributes +Source201: update_spec.pl +Patch1: aliasing.diff +Patch2: head.diff +Patch4: qt3-never-strip.diff +Patch5: external-libs.diff +Patch11: 0038-dragobject-dont-prefer-unknown.patch +Patch12: qtrc-path.diff +Patch14: lib64-plugin-support.diff +Patch15: pluginmanager-fix.diff +Patch18: no-rpath.dif +Patch19: shut-up.diff +Patch20: rubberband.diff +Patch21: fix-GL-loading.diff +Patch23: fix-accessible.diff +# From http://www.freedesktop.org/wiki/Software_2fImmoduleQtDownload +# Current version from http://freedesktop.org/~daisuke/qt-x11-immodule-unified-qt3.3.5-20060318.diff.bz2 +Patch25: qt-x11-immodule-unified-qt3.3.8-20060318.diff +Patch28: fix-key-release-event-with-imm.diff +Patch29: 0047-fix-kmenu-width.diff +Patch31: limit-image-size.diff +Patch34: 0005-qpixmap_mitshm.patch +Patch35: qt-transparency.patch +Patch37: 0055-qtextedit_zoom.patch +Patch38: 0048-qclipboard_hack_80072.patch +Patch39: fix-qtranslator-crash.diff +Patch40: 0059-qpopup_has_mouse.patch +Patch41: 0060-qpopup_ignore_mousepos.patch +Patch42: add_qexport_visibility.patch +Patch43: 0056-khotkeys_input_84434.patch +Source250: enable-designer-plugins.diff +Patch53: fix-xinerama-dialog-placement.diff +Patch54: kmenu-search-fix.diff +Patch55: qt3-fix-cast.diff +Patch100: qt.patch +Patch101: qt3-arm-gcc4.patch +Patch102: xinerama.patch +Patch113: fix-assistant-path.patch +Patch117: qtimer-debug.diff +Patch119: xinerama-qpopupmenu.diff +Patch121: qt3-warnings.diff +Patch123: use-xrandr-1.2.diff +Patch125: qcstring-format-warnings.diff +Patch127: mng-reading-fix.patch +Patch128: 0079-compositing-types.patch +Patch129: 0080-net-wm-sync-request.patch +Patch132: revert-qt-3.3.8-khmer-fix.diff +Patch133: 0085-fix-buildkey.diff +Patch134: fix-xinput-clash.diff +Patch135: parseFontName.diff +Patch136: qt3-no-date.diff +Patch137: popen-leak-fix.diff +Patch138: qt3-libpng14.diff +Patch139: gcc46.diff + +BuildRoot: %{_tmppath}/%{name}-%{version}-build + +%description +This package contains extension libraries for Qt 3, such as the +Netscape plug-in modules. + +This package contains extension libraries for Qt 3, such as the +Netscape plug-in modules. + +This package contains extension libraries for Qt 3, such as the +Netscape plug-in modules. + +This package contains extension libraries for Qt 3, such as the +Netscape plug-in modules. + +%define build_sub_dirs src plugins/src tools/designer/uilib/ tools/designer/uic tools/qtconfig tools/assistant/lib tools/assistant tutorial + +%prep +%setup -q -n qt3 +%patch1 +%patch2 +%patch4 +%patch5 +%patch11 +%patch12 +if [ "%_lib" = "lib64" ]; then +%patch14 +fi +%patch15 +%patch18 +%patch19 +%patch20 +%patch23 +%patch25 +%patch28 +%patch29 +%patch31 +%patch34 +%patch35 +%patch37 +%patch38 +%patch39 +%patch40 +%patch41 +%patch42 +%patch43 +%patch100 +%patch102 +%patch53 +%patch54 +%patch55 +%patch101 +%patch113 +%patch117 +%patch119 +%patch121 +%patch123 +ln -sf $PWD/src/inputmethod/qinputcontextfactory.h include/ +ln -sf $PWD/src/inputmethod/qinputcontextplugin.h include/ +ln -sf $PWD/src/kernel/qinputcontext.h include/ +ln -sf $PWD/src/kernel/qinputcontextinterface_p.h include/private/ +ln -sf $PWD/src/kernel/qximinputcontext_p.h include/private/ +if [ %_lib = "lib" ]; then +sed 's,/lib64/,/lib/,' %PATCH21 | patch -p0 +else +%patch21 +fi +%patch125 +%patch127 +%patch128 +%patch129 +%patch132 +%patch133 +%patch134 +%patch135 +%patch136 +%patch137 +%if %suse_version > 1120 +%patch138 -p1 +%endif +%patch139 +# copy qt kde integration files +cp %SOURCE100 %SOURCE101 src/kernel/ +cp %SOURCE101 include/private/ +cd translations +tar xvjf %SOURCE12 +cd .. +# COMMON-END +# COMMON-END + +%description +This package contains extension libraries for Qt 3, such as the +Netscape plug-in modules. + +This package contains extension libraries for Qt 3, such as the +Netscape plug-in modules. + +This package contains extension libraries for Qt 3, such as the +Netscape plug-in modules. + +This package contains extension libraries for Qt 3, such as the +Netscape plug-in modules. + +%package -n qt3-devel-examples +Summary: Programming Examples for Qt 3 +AutoReqProv: on +Group: Development/Sources +Provides: qt3-examples +Obsoletes: qt3-examples + +%description -n qt3-devel-examples +This package contains small executables with code to demonstrate Qt +programming. + +Have a look in /usr/share/doc/packages/qt3/examples/. + +%package -n qt3-mysql +Summary: MySQL Plug-In for Qt +Provides: qt3_database_plugin +Group: Productivity/Databases/Clients + +%description -n qt3-mysql +Plug-in for using the MySQL database with the generic Qt database +interface. + +%package -n qt3-unixODBC +Summary: A UnixODBC Plug-In for Qt +Provides: qt3_database_plugin +Group: Productivity/Databases/Clients + +%description -n qt3-unixODBC +A plug-in for using UnixODBC supported databases with the generic Qt +database interface. + +%package -n qt3-postgresql +Summary: A PostgreSQL Plug-In for Qt +Provides: qt3_database_plugin +Group: Productivity/Databases/Clients + +%description -n qt3-postgresql +A Plug-in for using the PostgreSQL database with the generic Qt +database interface. + +%package -n qt3-sqlite +Summary: SQLite Database Plug-In for Qt +Provides: qt3_database_plugin +Group: Development/Tools/Other + +%description -n qt3-sqlite +The Qt database supports SQLite with this plug-in. (No configured and +running daemon is required.) + +%package -n qt3-devel-tools +Summary: User Interface Builder and other tools (designer, assistant, linguist) +AutoReqProv: on +Requires: qt3-devel = %version +Provides: qt3-designer +Obsoletes: qt3-designer +Group: Development/Tools/GUI Builders + +%description -n qt3-devel-tools +The designer creates .ui files. The uic generates C++ code from these +files. The package also contains the Qt Assistant (Qt documentation +browser) and the Qt Linguist (for translations). + +%package -n qt3-man +Summary: Qt 3 Man Pages +AutoReqProv: on +Requires: qt3-devel = %version +Conflicts: qtman qt-man +Group: Documentation/Man + +%description -n qt3-man +This package contains all the man pages for all the Qt 3 classes. + +%build +export QTDIR=/usr/lib/qt3/ +export WLIB=%_lib +export VERSION=%suse_version +source %{SOURCE1} %{version} +export RPM_OPT_FLAGS="$RPM_OPT_FLAGS -fno-strict-aliasing" +# +# compile threaded version to build all tools. +# the lib itself becomes packaged from qt3.spec +# +call_configure -thread -shared -L$PWD/%_lib $OPTIONS +ln -sf /usr/lib/qt3/%_lib/* lib/ +ln -sf /usr/lib/qt3/bin/* bin/ +cd plugins/src +make %{?jobs:-j%jobs} +make INSTALL_ROOT=$RPM_BUILD_ROOT install +cd - +# +# build examples +# +cd tools/assistant/lib +make %{?jobs:-j%jobs} +cd - +cd examples +make %{?jobs:-j%jobs} +cd - +# +# build extra tools +# +cd tools +make %{?jobs:-j%jobs} +make INSTALL_ROOT=$RPM_BUILD_ROOT install +for i in qvfb qembed qconfig msg2qm mergetr ; do + cd "$i" && make %{?jobs:-j%jobs} && install -m 0755 $i ${RPM_BUILD_ROOT}/usr/lib/qt3/bin/ && cd - +done +cd .. +install -m 0755 bin/findtr bin/qt20fix bin/qtrename140 ${RPM_BUILD_ROOT}/usr/lib/qt3/bin/ +if [ %_lib = lib64 ]; then + for i in $RPM_BUILD_ROOT/usr/lib/qt3/plugins/*/*.so; do + mv "$i" "${i%.so}.lib64.so" + done +fi + +%install +export WLIB=%_lib +export VERSION=%suse_version +source %{SOURCE1} +post_install $RPM_BUILD_ROOT/usr/lib/qt3/ +# +# create default doc dir +# +install -d -m 0755 ${RPM_BUILD_ROOT}/%{_docdir}/qt3/ +# +# create links in ld.so.conf path +# +install -d -m 0755 ${RPM_BUILD_ROOT}/%{_libdir} +#install -d -m 0755 ${RPM_BUILD_ROOT}/usr/bin/ +#ln -sf ../lib/qt3/bin/designer ${RPM_BUILD_ROOT}/usr/bin/designer +#ln -sf ../lib/qt3/bin/linguist ${RPM_BUILD_ROOT}/usr/bin/linguist +%suse_update_desktop_file -i designer Qt Development GUIDesigner +%suse_update_desktop_file -i linguist Qt Development Translation +mkdir -p $RPM_BUILD_ROOT/usr/share/pixmaps +perl -pi -e 's/Icon=designer/Icon=designer3/' ${RPM_BUILD_ROOT}/usr/share/applications/designer.desktop +perl -pi -e 's,Exec=designer,Exec=/usr/lib/qt3/bin/designer,' ${RPM_BUILD_ROOT}/usr/share/applications/designer.desktop +mv ${RPM_BUILD_ROOT}/usr/share/applications/designer.desktop ${RPM_BUILD_ROOT}/usr/share/applications/designer3.desktop +install -m 0644 tools/assistant/images/designer.png $RPM_BUILD_ROOT/usr/share/pixmaps/designer3.png +rm -f ${RPM_BUILD_ROOT}/usr/share/pixmaps/designer.png +perl -pi -e 's,Exec=linguist,Exec=/usr/lib/qt3/bin/linguist,' ${RPM_BUILD_ROOT}/usr/share/applications/linguist.desktop +perl -pi -e 's,Icon=linguist,Icon=linguist3,' ${RPM_BUILD_ROOT}/usr/share/applications/linguist.desktop +mv ${RPM_BUILD_ROOT}/usr/share/pixmaps/linguist.png ${RPM_BUILD_ROOT}/usr/share/pixmaps/linguist3.png + +##### these files are not getting installed by "make install" ... bug ? +# +# +# install manpages +# +rm -rf $RPM_BUILD_ROOT/%{_mandir} +install -d $RPM_BUILD_ROOT/%{_mandir} +cp -a doc/man/* $RPM_BUILD_ROOT/%{_mandir}/ +# +# install examples +# +install -d ${RPM_BUILD_ROOT}/usr/lib/qt3/doc/ +find ./examples/ \ + -name \*.o -o -name .obj -o -name .moc -o -name Makefile \ + | xargs rm -rf +cp -a examples ${RPM_BUILD_ROOT}/usr/lib/qt3/doc/ +ln -sf /usr/lib/qt3/doc/examples ${RPM_BUILD_ROOT}/%{_docdir}/qt3/ +# +# to be sure we do not package files which are packaged in other qt3 packages +# +rpm -ql qt3 qt3-devel qt3-devel-doc \ + | while read i ; do + [ -d "$i" ] || rm -f $RPM_BUILD_ROOT/"$i" +done +# +# we do have them in qt3-devel-doc already +# +rm -f $RPM_BUILD_ROOT/usr/lib/qt3/bin/assistant +rm -f $RPM_BUILD_ROOT/usr/lib/qt3/%_lib/libqassistantclient.* +rm -f $RPM_BUILD_ROOT/usr/lib/qt3/translations/assistant_de.qm + +for l in $RPM_BUILD_ROOT/usr/lib/qt3/%_lib/*.a; do + strip --strip-unneeded $l +done + +%if %suse_version > 1020 +%fdupes -s $RPM_BUILD_ROOT +%endif + +%pre +if test -L usr/lib/qt3; then + rm usr/lib/qt3 +fi + +%clean +rm -rf ${RPM_BUILD_ROOT} + +%post +%run_ldconfig + +%post -n qt3-devel-tools +%run_ldconfig + +%files +%defattr(-,root,root) +/usr/lib/qt3/bin/qembed +/usr/lib/qt3/bin/qvfb + +%files -n qt3-mysql +%defattr(-,root,root) +%dir /usr/lib/qt3/plugins/sqldrivers +/usr/lib/qt3/plugins/sqldrivers/libqsqlmysql*.so + +%files -n qt3-postgresql +%defattr(-,root,root) +%dir /usr/lib/qt3/plugins/sqldrivers +/usr/lib/qt3/plugins/sqldrivers/libqsqlpsql*.so + +%files -n qt3-unixODBC +%defattr(-,root,root) +%dir /usr/lib/qt3/plugins/sqldrivers +/usr/lib/qt3/plugins/sqldrivers/libqsqlodbc*.so + +%files -n qt3-sqlite +%defattr(-,root,root) +%dir /usr/lib/qt3/plugins/sqldrivers +/usr/lib/qt3/plugins/sqldrivers/libqsqlite*.so + +%files -n qt3-devel-tools +%defattr(-,root,root) +#/usr/bin/designer +#/usr/bin/linguist +/usr/lib/qt3/bin/qconfig +/usr/lib/qt3/bin/findtr +/usr/lib/qt3/bin/qt20fix +/usr/lib/qt3/bin/qtrename140 +/usr/lib/qt3/bin/msg2qm +/usr/lib/qt3/bin/mergetr +/usr/lib/qt3/bin/designer +/usr/lib/qt3/bin/linguist +/usr/lib/qt3/bin/qm2ts +/usr/lib/qt3/bin/lrelease +/usr/lib/qt3/bin/lupdate +/usr/lib/qt3/templates +/usr/lib/qt3/plugins/designer +/usr/lib/qt3/phrasebooks +/usr/lib/qt3/%_lib/libdesignercore.* +/usr/lib/qt3/%_lib/libeditor.* +/usr/share/applications/* +/usr/share/pixmaps/designer3.png +/usr/share/pixmaps/linguist3.png + +%files -n qt3-devel-examples +%defattr(-,root,root) +%dir /usr/lib/qt3/doc +/%{_docdir}/qt3/examples +/usr/lib/qt3/doc/examples + +%files -n qt3-man +%defattr(-,root,root) +%{_mandir}/man*/* + +%changelog diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.history/9a/b01da97a1c0f00111528b7e658abf294 b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.history/9a/b01da97a1c0f00111528b7e658abf294 new file mode 100644 index 000000000..577ee9deb --- /dev/null +++ b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.history/9a/b01da97a1c0f00111528b7e658abf294 @@ -0,0 +1,450 @@ +# +# spec file for package qt3-extensions +# +# Copyright (c) 2011 SUSE LINUX Products GmbH, Nuernberg, Germany. +# +# All modifications and additions to the file contributed by third parties +# remain the property of their copyright owners, unless otherwise agreed +# upon. The license for this file, and modifications and additions to the +# file, is the same license as for the pristine package itself (unless the +# license for the pristine package is not an Open Source License, in which +# case the license is the MIT License). An "Open Source License" is a +# license that conforms to the Open Source Definition (Version 1.9) +# published by the Open Source Initiative. + +# Please submit bugfixes or comments via http://bugs.opensuse.org/ +# + +# norootforbuild + + +Name: qt3-extensions +BuildRequires: cups-devel krb5-devel mysql-devel postgresql-devel qt3-devel sqlite2-devel unixODBC-devel update-desktop-files +%if %suse_version > 1020 +BuildRequires: fdupes +%endif +License: GPL, QPL +Version: 3.3.8d +Release: 1 +AutoReqProv: on +Requires: qt3 = %version +Group: Development/Tools/Other +Summary: Qt3 Extensions +# COMMON-BEGIN +# COMMON-BEGIN +%define x11_free -x11-free- +%define rversion 3.3.8b +Source0: http://mirror.its.uidaho.edu/pub/trinity/releases/3.5.13/dependencies/qt3-3.3.8.d.tar.gz +Source1: build_script.sh +Source2: qtconfig3.desktop +Source3: qtrc +Source4: assistant3.png +Source6: assistant3.desktop +Source7: designer.desktop +Source8: designer.png +Source9: linguist.desktop +Source5: linguist.png +Source10: qt3.sh +Source11: qt3.csh +# Translations did not change at 3.3.8d +Source12: qt3-3.3.8b-translations.tar.bz2 +Source100: qtkdeintegration_x11.cpp +Source101: qtkdeintegration_x11_p.h +Source102: baselibs.conf +Source200: attributes +Source201: update_spec.pl +Patch1: aliasing.diff +Patch2: head.diff +Patch4: qt3-never-strip.diff +Patch5: external-libs.diff +Patch12: qtrc-path.diff +Patch14: lib64-plugin-support.diff +Patch15: pluginmanager-fix.diff +Patch18: no-rpath.dif +Patch19: shut-up.diff +Patch21: fix-GL-loading.diff +Patch23: fix-accessible.diff +Patch28: fix-key-release-event-with-imm.diff +Patch29: 0047-fix-kmenu-width.diff +Patch31: limit-image-size.diff +Patch34: 0005-qpixmap_mitshm.patch +Patch35: qt-transparency.patch +Patch37: 0055-qtextedit_zoom.patch +Patch38: 0048-qclipboard_hack_80072.patch +Patch39: fix-qtranslator-crash.diff +Patch40: 0059-qpopup_has_mouse.patch +Patch41: 0060-qpopup_ignore_mousepos.patch +Patch42: add_qexport_visibility.patch +Patch43: 0056-khotkeys_input_84434.patch +Source250: enable-designer-plugins.diff +Patch53: fix-xinerama-dialog-placement.diff +Patch54: kmenu-search-fix.diff +Patch55: qt3-fix-cast.diff +Patch100: qt.patch +Patch101: qt3-arm-gcc4.patch +Patch102: xinerama.patch +Patch113: fix-assistant-path.patch +Patch117: qtimer-debug.diff +Patch119: xinerama-qpopupmenu.diff +Patch121: qt3-warnings.diff +Patch123: use-xrandr-1.2.diff +Patch125: qcstring-format-warnings.diff +Patch127: mng-reading-fix.patch +Patch128: 0079-compositing-types.patch +Patch129: 0080-net-wm-sync-request.patch +Patch132: revert-qt-3.3.8-khmer-fix.diff +Patch133: 0085-fix-buildkey.diff +Patch134: fix-xinput-clash.diff +Patch135: parseFontName.diff +Patch136: qt3-no-date.diff +Patch137: popen-leak-fix.diff +Patch138: qt3-libpng14.diff +Patch139: gcc46.diff + +BuildRoot: %{_tmppath}/%{name}-%{version}-build + +%description +This package contains extension libraries for Qt 3, such as the +Netscape plug-in modules. + +%define build_sub_dirs src plugins/src tools/designer/uilib/ tools/designer/uic tools/qtconfig tools/assistant/lib tools/assistant tutorial + +%prep +%setup -q -n qt3 +%patch1 +%patch2 +%patch4 +%patch5 +%patch12 +if [ "%_lib" = "lib64" ]; then +%patch14 +fi +%patch15 +%patch18 +%patch19 +%patch23 +#%patch28 +%patch29 +%patch31 +%patch34 +%patch35 +%patch37 +%patch38 +%patch39 +%patch40 +%patch41 +%patch42 +%patch43 +%patch100 +%patch102 +%patch53 +%patch54 +%patch55 +%patch101 +%patch113 +%patch117 +%patch119 +%patch121 +%patch123 +ln -sf $PWD/src/inputmethod/qinputcontextfactory.h include/ +ln -sf $PWD/src/inputmethod/qinputcontextplugin.h include/ +ln -sf $PWD/src/kernel/qinputcontext.h include/ +ln -sf $PWD/src/kernel/qinputcontextinterface_p.h include/private/ +ln -sf $PWD/src/kernel/qximinputcontext_p.h include/private/ +if [ %_lib = "lib" ]; then +sed 's,/lib64/,/lib/,' %PATCH21 | patch -p0 +else +%patch21 +fi +%patch125 +%patch127 +%patch128 +%patch129 +%patch132 +%patch133 +%patch134 +%patch135 +%patch136 +%patch137 +%if %suse_version > 1120 +%patch138 -p1 +%endif +%patch139 +# copy qt kde integration files +cp %SOURCE100 %SOURCE101 src/kernel/ +cp %SOURCE101 include/private/ +cd translations +tar xvjf %SOURCE12 +cd .. +# COMMON-END +# COMMON-END + +%description +This package contains extension libraries for Qt 3, such as the +Netscape plug-in modules. + +This package contains extension libraries for Qt 3, such as the +Netscape plug-in modules. + +This package contains extension libraries for Qt 3, such as the +Netscape plug-in modules. + +This package contains extension libraries for Qt 3, such as the +Netscape plug-in modules. + +%package -n qt3-devel-examples +Summary: Programming Examples for Qt 3 +AutoReqProv: on +Group: Development/Sources +Provides: qt3-examples +Obsoletes: qt3-examples + +%description -n qt3-devel-examples +This package contains small executables with code to demonstrate Qt +programming. + +Have a look in /usr/share/doc/packages/qt3/examples/. + +%package -n qt3-mysql +Summary: MySQL Plug-In for Qt +Provides: qt3_database_plugin +Group: Productivity/Databases/Clients + +%description -n qt3-mysql +Plug-in for using the MySQL database with the generic Qt database +interface. + +%package -n qt3-unixODBC +Summary: A UnixODBC Plug-In for Qt +Provides: qt3_database_plugin +Group: Productivity/Databases/Clients + +%description -n qt3-unixODBC +A plug-in for using UnixODBC supported databases with the generic Qt +database interface. + +%package -n qt3-postgresql +Summary: A PostgreSQL Plug-In for Qt +Provides: qt3_database_plugin +Group: Productivity/Databases/Clients + +%description -n qt3-postgresql +A Plug-in for using the PostgreSQL database with the generic Qt +database interface. + +%package -n qt3-sqlite +Summary: SQLite Database Plug-In for Qt +Provides: qt3_database_plugin +Group: Development/Tools/Other + +%description -n qt3-sqlite +The Qt database supports SQLite with this plug-in. (No configured and +running daemon is required.) + +%package -n qt3-devel-tools +Summary: User Interface Builder and other tools (designer, assistant, linguist) +AutoReqProv: on +Requires: qt3-devel = %version +Provides: qt3-designer +Obsoletes: qt3-designer +Group: Development/Tools/GUI Builders + +%description -n qt3-devel-tools +The designer creates .ui files. The uic generates C++ code from these +files. The package also contains the Qt Assistant (Qt documentation +browser) and the Qt Linguist (for translations). + +%package -n qt3-man +Summary: Qt 3 Man Pages +AutoReqProv: on +Requires: qt3-devel = %version +Conflicts: qtman qt-man +Group: Documentation/Man + +%description -n qt3-man +This package contains all the man pages for all the Qt 3 classes. + +%build +export QTDIR=/usr/lib/qt3/ +export WLIB=%_lib +export VERSION=%suse_version +source %{SOURCE1} %{version} +export RPM_OPT_FLAGS="$RPM_OPT_FLAGS -fno-strict-aliasing" +# +# compile threaded version to build all tools. +# the lib itself becomes packaged from qt3.spec +# +call_configure -thread -shared -L$PWD/%_lib $OPTIONS +ln -sf /usr/lib/qt3/%_lib/* lib/ +ln -sf /usr/lib/qt3/bin/* bin/ +cd plugins/src +make %{?jobs:-j%jobs} +make INSTALL_ROOT=$RPM_BUILD_ROOT install +cd - +# +# build examples +# +cd tools/assistant/lib +make %{?jobs:-j%jobs} +cd - +cd examples +make %{?jobs:-j%jobs} +cd - +# +# build extra tools +# +cd tools +make %{?jobs:-j%jobs} +make INSTALL_ROOT=$RPM_BUILD_ROOT install +for i in qvfb qembed qconfig msg2qm mergetr ; do + cd "$i" && make %{?jobs:-j%jobs} && install -m 0755 $i ${RPM_BUILD_ROOT}/usr/lib/qt3/bin/ && cd - +done +cd .. +install -m 0755 bin/findtr bin/qt20fix bin/qtrename140 ${RPM_BUILD_ROOT}/usr/lib/qt3/bin/ +if [ %_lib = lib64 ]; then + for i in $RPM_BUILD_ROOT/usr/lib/qt3/plugins/*/*.so; do + mv "$i" "${i%.so}.lib64.so" + done +fi + +%install +export WLIB=%_lib +export VERSION=%suse_version +source %{SOURCE1} +post_install $RPM_BUILD_ROOT/usr/lib/qt3/ +# +# create default doc dir +# +install -d -m 0755 ${RPM_BUILD_ROOT}/%{_docdir}/qt3/ +# +# create links in ld.so.conf path +# +install -d -m 0755 ${RPM_BUILD_ROOT}/%{_libdir} +#install -d -m 0755 ${RPM_BUILD_ROOT}/usr/bin/ +#ln -sf ../lib/qt3/bin/designer ${RPM_BUILD_ROOT}/usr/bin/designer +#ln -sf ../lib/qt3/bin/linguist ${RPM_BUILD_ROOT}/usr/bin/linguist +%suse_update_desktop_file -i designer Qt Development GUIDesigner +%suse_update_desktop_file -i linguist Qt Development Translation +mkdir -p $RPM_BUILD_ROOT/usr/share/pixmaps +perl -pi -e 's/Icon=designer/Icon=designer3/' ${RPM_BUILD_ROOT}/usr/share/applications/designer.desktop +perl -pi -e 's,Exec=designer,Exec=/usr/lib/qt3/bin/designer,' ${RPM_BUILD_ROOT}/usr/share/applications/designer.desktop +mv ${RPM_BUILD_ROOT}/usr/share/applications/designer.desktop ${RPM_BUILD_ROOT}/usr/share/applications/designer3.desktop +install -m 0644 tools/assistant/images/designer.png $RPM_BUILD_ROOT/usr/share/pixmaps/designer3.png +rm -f ${RPM_BUILD_ROOT}/usr/share/pixmaps/designer.png +perl -pi -e 's,Exec=linguist,Exec=/usr/lib/qt3/bin/linguist,' ${RPM_BUILD_ROOT}/usr/share/applications/linguist.desktop +perl -pi -e 's,Icon=linguist,Icon=linguist3,' ${RPM_BUILD_ROOT}/usr/share/applications/linguist.desktop +mv ${RPM_BUILD_ROOT}/usr/share/pixmaps/linguist.png ${RPM_BUILD_ROOT}/usr/share/pixmaps/linguist3.png + +##### these files are not getting installed by "make install" ... bug ? +# +# +# install manpages +# +rm -rf $RPM_BUILD_ROOT/%{_mandir} +install -d $RPM_BUILD_ROOT/%{_mandir} +cp -a doc/man/* $RPM_BUILD_ROOT/%{_mandir}/ +# +# install examples +# +install -d ${RPM_BUILD_ROOT}/usr/lib/qt3/doc/ +find ./examples/ \ + -name \*.o -o -name .obj -o -name .moc -o -name Makefile \ + | xargs rm -rf +cp -a examples ${RPM_BUILD_ROOT}/usr/lib/qt3/doc/ +ln -sf /usr/lib/qt3/doc/examples ${RPM_BUILD_ROOT}/%{_docdir}/qt3/ +# +# to be sure we do not package files which are packaged in other qt3 packages +# +rpm -ql qt3 qt3-devel qt3-devel-doc \ + | while read i ; do + [ -d "$i" ] || rm -f $RPM_BUILD_ROOT/"$i" +done +# +# we do have them in qt3-devel-doc already +# +rm -f $RPM_BUILD_ROOT/usr/lib/qt3/bin/assistant +rm -f $RPM_BUILD_ROOT/usr/lib/qt3/%_lib/libqassistantclient.* +rm -f $RPM_BUILD_ROOT/usr/lib/qt3/translations/assistant_de.qm + +for l in $RPM_BUILD_ROOT/usr/lib/qt3/%_lib/*.a; do + strip --strip-unneeded $l +done + +%if %suse_version > 1020 +%fdupes -s $RPM_BUILD_ROOT +%endif + +%pre +if test -L usr/lib/qt3; then + rm usr/lib/qt3 +fi + +%clean +rm -rf ${RPM_BUILD_ROOT} + +%post +%run_ldconfig + +%post -n qt3-devel-tools +%run_ldconfig + +%files +%defattr(-,root,root) +/usr/lib/qt3/bin/qembed +/usr/lib/qt3/bin/qvfb + +%files -n qt3-mysql +%defattr(-,root,root) +%dir /usr/lib/qt3/plugins/sqldrivers +/usr/lib/qt3/plugins/sqldrivers/libqsqlmysql*.so + +%files -n qt3-postgresql +%defattr(-,root,root) +%dir /usr/lib/qt3/plugins/sqldrivers +/usr/lib/qt3/plugins/sqldrivers/libqsqlpsql*.so + +%files -n qt3-unixODBC +%defattr(-,root,root) +%dir /usr/lib/qt3/plugins/sqldrivers +/usr/lib/qt3/plugins/sqldrivers/libqsqlodbc*.so + +%files -n qt3-sqlite +%defattr(-,root,root) +%dir /usr/lib/qt3/plugins/sqldrivers +/usr/lib/qt3/plugins/sqldrivers/libqsqlite*.so + +%files -n qt3-devel-tools +%defattr(-,root,root) +#/usr/bin/designer +#/usr/bin/linguist +/usr/lib/qt3/bin/qconfig +/usr/lib/qt3/bin/findtr +/usr/lib/qt3/bin/qt20fix +/usr/lib/qt3/bin/qtrename140 +/usr/lib/qt3/bin/msg2qm +/usr/lib/qt3/bin/mergetr +/usr/lib/qt3/bin/designer +/usr/lib/qt3/bin/linguist +/usr/lib/qt3/bin/qm2ts +/usr/lib/qt3/bin/lrelease +/usr/lib/qt3/bin/lupdate +/usr/lib/qt3/templates +/usr/lib/qt3/plugins/designer +/usr/lib/qt3/phrasebooks +/usr/lib/qt3/%_lib/libdesignercore.* +/usr/lib/qt3/%_lib/libeditor.* +/usr/share/applications/* +/usr/share/pixmaps/designer3.png +/usr/share/pixmaps/linguist3.png + +%files -n qt3-devel-examples +%defattr(-,root,root) +%dir /usr/lib/qt3/doc +/%{_docdir}/qt3/examples +/usr/lib/qt3/doc/examples + +%files -n qt3-man +%defattr(-,root,root) +%{_mandir}/man*/* + +%changelog diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.history/a3/00652d4e000f00111528b7e658abf294 b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.history/a3/00652d4e000f00111528b7e658abf294 new file mode 100644 index 000000000..7258dc45c --- /dev/null +++ b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.history/a3/00652d4e000f00111528b7e658abf294 @@ -0,0 +1,397 @@ +# +# spec file for package qt3 +# +# Copyright (c) 2011 SUSE LINUX Products GmbH, Nuernberg, Germany. +# +# All modifications and additions to the file contributed by third parties +# remain the property of their copyright owners, unless otherwise agreed +# upon. The license for this file, and modifications and additions to the +# file, is the same license as for the pristine package itself (unless the +# license for the pristine package is not an Open Source License, in which +# case the license is the MIT License). An "Open Source License" is a +# license that conforms to the Open Source Definition (Version 1.9) +# published by the Open Source Initiative. + +# Please submit bugfixes or comments via http://bugs.opensuse.org/ +# + + + +Name: qt3 +#Remember also to modify Requires in -devel package +BuildRequires: Mesa-devel c++_compiler cups-devel freetype2-devel libjpeg-devel libmng-devel pkgconfig update-desktop-files xorg-x11-devel +Url: http://www.trolltech.com/ +License: GPLv2 ; GPLv3 ; QPL .. +%if %suse_version > 1120 +BuildRequires: libpng14-compat-devel +%else +BuildRequires: libpng-devel +%endif +Group: System/Libraries +# bug437293 +%ifarch ppc64 +Obsoletes: qt3-64bit +%endif +# +Summary: A library for developing applications with graphical user interfaces +Version: 3.3.8d +Release: 110 +Provides: qt_library_%version +Recommends: kdelibs3-default-style +PreReq: /bin/grep +# COMMON-BEGIN +%define x11_free -x11-free- +%define rversion 3.3.8b +Source0: http://mirror.its.uidaho.edu/pub/trinity/releases/3.5.13/dependencies/qt3-3.3.8.d.tar.gz +Source1: build_script.sh +Source2: qtconfig3.desktop +Source3: qtrc +Source4: assistant3.png +Source6: assistant3.desktop +Source7: designer.desktop +Source8: designer.png +Source9: linguist.desktop +Source5: linguist.png +Source10: qt3.sh +Source11: qt3.csh +# Translations did not change at 3.3.8c +Source12: qt3-3.3.8b-translations.tar.bz2 +Source100: qtkdeintegration_x11.cpp +Source101: qtkdeintegration_x11_p.h +Source102: baselibs.conf +Source200: attributes +Source201: update_spec.pl +Patch1: aliasing.diff +Patch2: head.diff +Patch4: qt3-never-strip.diff +Patch5: external-libs.diff +Patch12: qtrc-path.diff +Patch14: lib64-plugin-support.diff +Patch15: pluginmanager-fix.diff +Patch18: no-rpath.dif +Patch19: shut-up.diff +Patch21: fix-GL-loading.diff +Patch23: fix-accessible.diff +Patch28: fix-key-release-event-with-imm.diff +Patch29: 0047-fix-kmenu-width.diff +Patch31: limit-image-size.diff +Patch34: 0005-qpixmap_mitshm.patch +Patch35: qt-transparency.patch +Patch37: 0055-qtextedit_zoom.patch +Patch38: 0048-qclipboard_hack_80072.patch +Patch39: fix-qtranslator-crash.diff +Patch40: 0059-qpopup_has_mouse.patch +Patch41: 0060-qpopup_ignore_mousepos.patch +Patch42: add_qexport_visibility.patch +Patch43: 0056-khotkeys_input_84434.patch +Source250: enable-designer-plugins.diff +Patch53: fix-xinerama-dialog-placement.diff +Patch54: kmenu-search-fix.diff +Patch55: qt3-fix-cast.diff +Patch100: qt.patch +Patch101: qt3-arm-gcc4.patch +Patch102: xinerama.patch +Patch113: fix-assistant-path.patch +Patch117: qtimer-debug.diff +Patch119: xinerama-qpopupmenu.diff +Patch121: qt3-warnings.diff +Patch123: use-xrandr-1.2.diff +Patch125: qcstring-format-warnings.diff +Patch127: mng-reading-fix.patch +Patch128: 0079-compositing-types.patch +Patch129: 0080-net-wm-sync-request.patch +Patch132: revert-qt-3.3.8-khmer-fix.diff +Patch133: 0085-fix-buildkey.diff +Patch134: fix-xinput-clash.diff +Patch135: parseFontName.diff +Patch136: qt3-no-date.diff +Patch137: popen-leak-fix.diff +Patch138: qt3-libpng14.diff +Patch139: gcc46.diff + +BuildRoot: %{_tmppath}/%{name}-%{version}-build + +%description +Qt is a program library for developing applications with graphical user +interfaces. It allows you to rapidly develop professional programs. The +Qt library is available not only for Linux but for a great number of +Unices and even for Windows. Thus it is possible to write programs that +may be easily ported to those platforms. + +You need a license for using Qt with a non-GPL application, which can +be acquired from sales@trolltech.com. + +See /usr/share/doc/packages/qt3 for details about the new features of +the current Qt library! + +%define build_sub_dirs src plugins/src tools/designer/uilib/ tools/designer/uic tools/qtconfig tools/assistant/lib tools/assistant tutorial + +%prep +%setup -q -n qt3 +%patch1 +%patch2 +%patch4 +%patch5 +%patch12 +if [ "%_lib" = "lib64" ]; then +%patch14 +fi +%patch15 +%patch18 +%patch19 +%patch23 +%patch28 +%patch29 +%patch31 +%patch34 +%patch35 +%patch37 +%patch38 +%patch39 +%patch40 +%patch41 +%patch42 +%patch43 +%patch100 +%patch102 +%patch53 +%patch54 +%patch55 +%patch101 +%patch113 +%patch117 +%patch119 +%patch121 +%patch123 +ln -sf $PWD/src/inputmethod/qinputcontextfactory.h include/ +ln -sf $PWD/src/inputmethod/qinputcontextplugin.h include/ +ln -sf $PWD/src/kernel/qinputcontext.h include/ +ln -sf $PWD/src/kernel/qinputcontextinterface_p.h include/private/ +ln -sf $PWD/src/kernel/qximinputcontext_p.h include/private/ +if [ %_lib = "lib" ]; then +sed 's,/lib64/,/lib/,' %PATCH21 | patch -p0 +else +%patch21 +fi +%patch125 +%patch127 +%patch128 +%patch129 +%patch132 +%patch133 +%patch134 +%patch135 +%patch136 +%patch137 +%if %suse_version > 1120 +%patch138 -p1 +%endif +%patch139 +# copy qt kde integration files +cp %SOURCE100 %SOURCE101 src/kernel/ +cp %SOURCE101 include/private/ +cd translations +tar xvjf %SOURCE12 +cd .. +# COMMON-END + +%package devel +License: GPLv2 ; GPLv3 ; QPL .. +Summary: Include Files and Libraries mandatory for Development +Requires: qt3 = %version +Requires: pkgconfig cups-devel freetype2-devel libmng-devel libjpeg-devel c++_compiler xorg-x11-devel +%if %suse_version > 1120 +Recommends: libpng14-compat-devel +Requires: libpng-devel +%else +Requires: libpng-devel +%endif +%if %suse_version > 1000 +Requires: Mesa-devel +%else +Requires: xorg-x11-Mesa xorg-x11-Mesa-devel +%endif +%ifnarch x86_64 s390x sparc64 ppc64 mips64 +Conflicts: devel_libs-32bit +%endif +# bug437293 +%ifarch ppc64 +Obsoletes: qt3-devel-64bit +%endif +# +Group: Development/Libraries/X11 + +%description devel +You need this package if you want to compile programs with Qt 3. It +contains the "Qt Crossplatform Development Kit 2". Under /usr/lib/qt3 +you will find include files. + +You need a license for using Qt with a non-GPL application. A license +can be acquired at sales@trolltech.com. + +%build +export VERSION=%suse_version +source %SOURCE1 %{version} +export WLIB=%_lib +export QTDIR=`pwd` +if [ %_lib == "lib64" ]; then +export RPM_OPT_FLAGS="$RPM_OPT_FLAGS -DUSE_LIB64_PATHES" +fi +export RPM_OPT_FLAGS="$RPM_OPT_FLAGS -fno-strict-aliasing" +# +# call build from build_script.rpmrc for threaded Qt library +# only really needed tools will be builded here, all extra tools will be +# builded in qt3.spec +# +call_configure -v -thread -shared -no-sql-mysql -no-sql-psql -no-sql-odbc -no-sql-sqlite $OPTIONS +for i in %build_sub_dirs ; do + cd $i + make %{?jobs:-j%jobs} + cd - +done + +%install +export VERSION=%suse_version +export WLIB=%_lib +export QTDIR=`pwd` +source %SOURCE1 %{version} +for i in %build_sub_dirs ; do + cd $i + make INSTALL_ROOT=$RPM_BUILD_ROOT install + cd - +done +post_install $RPM_BUILD_ROOT/usr/lib/qt3/ +mkdir -p $RPM_BUILD_ROOT/usr/share/pixmaps/ +sed -i -e 's, on: .*,,' $RPM_BUILD_ROOT/usr/lib/qt3/%_lib/*.la +# +# copy additional files +# +install -m 0755 bin/qmake bin/moc ${RPM_BUILD_ROOT}/usr/lib/qt3/bin/ +install -m 0755 -d ${RPM_BUILD_ROOT}/usr/lib/qt3/translations/ +install -m 0644 translations/*.qm ${RPM_BUILD_ROOT}/usr/lib/qt3/translations/ +if [ %_lib = lib64 ]; then + for i in $RPM_BUILD_ROOT/usr/lib/qt3/plugins/*/*.so; do + mv "$i" "${i%.so}.lib64.so" + done +fi +# +# move pkgconfig files +# +mkdir -p $RPM_BUILD_ROOT/%_libdir/pkgconfig +mv $RPM_BUILD_ROOT/usr/lib/qt3/%_lib/pkgconfig/*.pc \ + $RPM_BUILD_ROOT/%_libdir/pkgconfig +rmdir $RPM_BUILD_ROOT/usr/lib/qt3/%_lib/pkgconfig +# +# move docs in doc dir +# +install -d -m 0755 ${RPM_BUILD_ROOT}/%{_defaultdocdir}/qt3/ +install -d -m 0755 ${RPM_BUILD_ROOT}/usr/lib/qt3/mkspecs/ +install -d -m 0755 ${RPM_BUILD_ROOT}/usr/lib/qt3/mkspecs/ +cp -a mkspecs/* ${RPM_BUILD_ROOT}/usr/lib/qt3/mkspecs/ +if [ %_lib == "lib64" ]; then + ln -sf linux-g++-64 ${RPM_BUILD_ROOT}/usr/lib/qt3/mkspecs/default +else + ln -sf linux-g++ ${RPM_BUILD_ROOT}/usr/lib/qt3/mkspecs/default +fi +find ${RPM_BUILD_ROOT}/usr/lib/qt3/mkspecs -type f -perm /111 -print0 | xargs -0 chmod a-x +# +# create links in ld.so.conf path +# +install -d -m 0755 ${RPM_BUILD_ROOT}/%{_libdir} +ln -sf ../lib/qt3/%{_lib}/libqt-mt.so.3 ${RPM_BUILD_ROOT}/%{_libdir}/libqt-mt.so.3 +ln -sf ../lib/qt3/%{_lib}/libqui.so.1 ${RPM_BUILD_ROOT}/%{_libdir}/libqui.so.1 +[ "lib" != "%{_lib}" ] && \ + ln -sf ../lib/qt3 ${RPM_BUILD_ROOT}/%{_libdir}/qt3 +mkdir -p ${RPM_BUILD_ROOT}/etc/profile.d +install -m 644 %SOURCE10 %SOURCE11 ${RPM_BUILD_ROOT}/etc/profile.d +# +# default qt settings +# +mkdir -p ${RPM_BUILD_ROOT}/etc/X11 +mkdir -p ${RPM_BUILD_ROOT}/usr/lib/qt3/etc/ +ln -sf /etc/X11/ ${RPM_BUILD_ROOT}/usr/lib/qt3/etc/settings +install -m 0644 %SOURCE3 ${RPM_BUILD_ROOT}/etc/X11/qtrc +# +# clean broken links +# +if [ %_lib == "lib64" ]; then + rm ${RPM_BUILD_ROOT}/usr/lib/qt3/mkspecs/linux-g++-64/linux-g++-64 +else + rm ${RPM_BUILD_ROOT}/usr/lib/qt3/mkspecs/linux-g++/linux-g++ +fi +rm -rf ${RPM_BUILD_ROOT}/usr/lib/qt3/doc/html + +%pre +if test -L usr/lib/qt3; then + rm usr/lib/qt3 +fi + +%post +/sbin/ldconfig +if ! grep -q '^\[3.3\]' etc/X11/qtrc ; then +echo "" >> etc/X11/qtrc +echo "[3.3]" >> etc/X11/qtrc +echo "libraryPath=/opt/kde3/lib64/kde3/plugins/:/opt/kde3/lib/kde3/plugins/" >> etc/X11/qtrc +fi + +%postun -p /sbin/ldconfig + +%files +%defattr(-,root,root,755) +# FIXME provide new changelog if kb9vqf will give one +%doc changes-3.3.8b README* LICENSE* MANIFEST FAQ +%dir /usr/lib/qt3/translations +%dir /usr/lib/qt3 +%dir /usr/lib/qt3/bin +%dir /usr/lib/qt3/%{_lib} +%{_libdir}/libqt-mt.so.* +%{_libdir}/libqui.so.* +/usr/lib/qt3/bin/qtconfig +/usr/lib/qt3/%{_lib}/libqt-mt.so.* +/usr/lib/qt3/%{_lib}/libqui.so.* +%dir /usr/lib/qt3/etc +/usr/lib/qt3/etc/settings +/usr/lib/qt3/plugins +/usr/lib/qt3/bin/assistant +%lang(de) /usr/lib/qt3/translations/assistant_de.qm +%lang(ar) /usr/lib/qt3/translations/qt_ar.qm +%lang(ca) /usr/lib/qt3/translations/qt_ca.qm +%lang(cs) /usr/lib/qt3/translations/qt_cs.qm +%lang(de) /usr/lib/qt3/translations/qt_de.qm +%lang(es) /usr/lib/qt3/translations/qt_es.qm +%lang(fr) /usr/lib/qt3/translations/qt_fr.qm +%lang(he) /usr/lib/qt3/translations/qt_he.qm +%lang(ru) /usr/lib/qt3/translations/qt_ru.qm +%lang(sk) /usr/lib/qt3/translations/qt_sk.qm +%lang(it) /usr/lib/qt3/translations/qt_it.qm +%lang(ja) /usr/lib/qt3/translations/qt_ja.qm +%lang(nb) /usr/lib/qt3/translations/qt_nb.qm +%lang(pl) /usr/lib/qt3/translations/qt_pl.qm +%lang(pt) /usr/lib/qt3/translations/qt_pt-br.qm +%lang(pt) /usr/lib/qt3/translations/qt_pt.qm +%lang(zh) /usr/lib/qt3/translations/qt_zh-cn.qm +%lang(zh) /usr/lib/qt3/translations/qt_zh-tw.qm +%config(noreplace) /etc/X11/qtrc +%ifarch s390x sparc64 x86_64 ppc64 mips64 +%dir %{_libdir}/qt3 +%endif + +%files devel +%defattr(-,root,root,755) +# FIXME provide new changelog if kb9vqf will give one +%doc changes-3.3.8b +/usr/lib/qt3/bin/moc +/usr/lib/qt3/bin/qmake +/usr/lib/qt3/bin/uic +/usr/lib/qt3/include +/usr/lib/qt3/%{_lib}/libqt-mt.la +/usr/lib/qt3/%{_lib}/libqt-mt.so +/usr/lib/qt3/%{_lib}/libqt-mt.prl +/usr/lib/qt3/%{_lib}/libqui.so +/usr/lib/qt3/%{_lib}/libqui.prl +/usr/lib/qt3/mkspecs +/%_libdir/pkgconfig/qt-mt.pc +/usr/lib/qt3/%_lib/libqassistantclient.* +%config /etc/profile.d/qt3.* + +%changelog diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.history/a5/b0d8e6bffc0e00111528b7e658abf294 b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.history/a5/b0d8e6bffc0e00111528b7e658abf294 new file mode 100644 index 000000000..1bf8f4791 --- /dev/null +++ b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.history/a5/b0d8e6bffc0e00111528b7e658abf294 @@ -0,0 +1,463 @@ +# +# spec file for package qt3-extensions +# +# Copyright (c) 2011 SUSE LINUX Products GmbH, Nuernberg, Germany. +# +# All modifications and additions to the file contributed by third parties +# remain the property of their copyright owners, unless otherwise agreed +# upon. The license for this file, and modifications and additions to the +# file, is the same license as for the pristine package itself (unless the +# license for the pristine package is not an Open Source License, in which +# case the license is the MIT License). An "Open Source License" is a +# license that conforms to the Open Source Definition (Version 1.9) +# published by the Open Source Initiative. + +# Please submit bugfixes or comments via http://bugs.opensuse.org/ +# + +# norootforbuild + + +Name: qt3-extensions +BuildRequires: cups-devel krb5-devel mysql-devel postgresql-devel qt3-devel sqlite2-devel unixODBC-devel update-desktop-files +%if %suse_version > 1020 +BuildRequires: fdupes +%endif +License: GPL, QPL +Version: 3.3.8d +Release: 1 +AutoReqProv: on +Requires: qt3 = %version +Group: Development/Tools/Other +Summary: Qt3 Extensions +# COMMON-BEGIN +# COMMON-BEGIN +%define x11_free -x11-free- +%define rversion 3.3.8b +Source0: http://mirror.its.uidaho.edu/pub/trinity/releases/3.5.13/dependencies/qt3-3.3.8.d.tar.gz +Source1: build_script.sh +Source2: qtconfig3.desktop +Source3: qtrc +Source4: assistant3.png +Source6: assistant3.desktop +Source7: designer.desktop +Source8: designer.png +Source9: linguist.desktop +Source5: linguist.png +Source10: qt3.sh +Source11: qt3.csh +# Translations did not change at 3.3.8d +Source12: qt3-3.3.8b-translations.tar.bz2 +Source100: qtkdeintegration_x11.cpp +Source101: qtkdeintegration_x11_p.h +Source102: baselibs.conf +Source200: attributes +Source201: update_spec.pl +Patch1: aliasing.diff +Patch2: head.diff +Patch4: qt3-never-strip.diff +Patch5: external-libs.diff +Patch12: qtrc-path.diff +Patch14: lib64-plugin-support.diff +Patch15: pluginmanager-fix.diff +Patch18: no-rpath.dif +Patch19: shut-up.diff +Patch21: fix-GL-loading.diff +Patch23: fix-accessible.diff +# From http://www.freedesktop.org/wiki/Software_2fImmoduleQtDownload +# Current version from http://freedesktop.org/~daisuke/qt-x11-immodule-unified-qt3.3.5-20060318.diff.bz2 +Patch25: qt-x11-immodule-unified-qt3.3.8-20060318.diff +Patch28: fix-key-release-event-with-imm.diff +Patch29: 0047-fix-kmenu-width.diff +Patch31: limit-image-size.diff +Patch34: 0005-qpixmap_mitshm.patch +Patch35: qt-transparency.patch +Patch37: 0055-qtextedit_zoom.patch +Patch38: 0048-qclipboard_hack_80072.patch +Patch39: fix-qtranslator-crash.diff +Patch40: 0059-qpopup_has_mouse.patch +Patch41: 0060-qpopup_ignore_mousepos.patch +Patch42: add_qexport_visibility.patch +Patch43: 0056-khotkeys_input_84434.patch +Source250: enable-designer-plugins.diff +Patch53: fix-xinerama-dialog-placement.diff +Patch54: kmenu-search-fix.diff +Patch55: qt3-fix-cast.diff +Patch100: qt.patch +Patch101: qt3-arm-gcc4.patch +Patch102: xinerama.patch +Patch113: fix-assistant-path.patch +Patch117: qtimer-debug.diff +Patch119: xinerama-qpopupmenu.diff +Patch121: qt3-warnings.diff +Patch123: use-xrandr-1.2.diff +Patch125: qcstring-format-warnings.diff +Patch127: mng-reading-fix.patch +Patch128: 0079-compositing-types.patch +Patch129: 0080-net-wm-sync-request.patch +Patch132: revert-qt-3.3.8-khmer-fix.diff +Patch133: 0085-fix-buildkey.diff +Patch134: fix-xinput-clash.diff +Patch135: parseFontName.diff +Patch136: qt3-no-date.diff +Patch137: popen-leak-fix.diff +Patch138: qt3-libpng14.diff +Patch139: gcc46.diff + +BuildRoot: %{_tmppath}/%{name}-%{version}-build + +%description +This package contains extension libraries for Qt 3, such as the +Netscape plug-in modules. + +This package contains extension libraries for Qt 3, such as the +Netscape plug-in modules. + +This package contains extension libraries for Qt 3, such as the +Netscape plug-in modules. + +This package contains extension libraries for Qt 3, such as the +Netscape plug-in modules. + +%define build_sub_dirs src plugins/src tools/designer/uilib/ tools/designer/uic tools/qtconfig tools/assistant/lib tools/assistant tutorial + +%prep +%setup -q -n qt3 +%patch1 +%patch2 +%patch4 +%patch5 +%patch12 +if [ "%_lib" = "lib64" ]; then +%patch14 +fi +%patch15 +%patch18 +%patch19 +%patch23 +%patch25 +%patch28 +%patch29 +%patch31 +%patch34 +%patch35 +%patch37 +%patch38 +%patch39 +%patch40 +%patch41 +%patch42 +%patch43 +%patch100 +%patch102 +%patch53 +%patch54 +%patch55 +%patch101 +%patch113 +%patch117 +%patch119 +%patch121 +%patch123 +ln -sf $PWD/src/inputmethod/qinputcontextfactory.h include/ +ln -sf $PWD/src/inputmethod/qinputcontextplugin.h include/ +ln -sf $PWD/src/kernel/qinputcontext.h include/ +ln -sf $PWD/src/kernel/qinputcontextinterface_p.h include/private/ +ln -sf $PWD/src/kernel/qximinputcontext_p.h include/private/ +if [ %_lib = "lib" ]; then +sed 's,/lib64/,/lib/,' %PATCH21 | patch -p0 +else +%patch21 +fi +%patch125 +%patch127 +%patch128 +%patch129 +%patch132 +%patch133 +%patch134 +%patch135 +%patch136 +%patch137 +%if %suse_version > 1120 +%patch138 -p1 +%endif +%patch139 +# copy qt kde integration files +cp %SOURCE100 %SOURCE101 src/kernel/ +cp %SOURCE101 include/private/ +cd translations +tar xvjf %SOURCE12 +cd .. +# COMMON-END +# COMMON-END + +%description +This package contains extension libraries for Qt 3, such as the +Netscape plug-in modules. + +This package contains extension libraries for Qt 3, such as the +Netscape plug-in modules. + +This package contains extension libraries for Qt 3, such as the +Netscape plug-in modules. + +This package contains extension libraries for Qt 3, such as the +Netscape plug-in modules. + +%package -n qt3-devel-examples +Summary: Programming Examples for Qt 3 +AutoReqProv: on +Group: Development/Sources +Provides: qt3-examples +Obsoletes: qt3-examples + +%description -n qt3-devel-examples +This package contains small executables with code to demonstrate Qt +programming. + +Have a look in /usr/share/doc/packages/qt3/examples/. + +%package -n qt3-mysql +Summary: MySQL Plug-In for Qt +Provides: qt3_database_plugin +Group: Productivity/Databases/Clients + +%description -n qt3-mysql +Plug-in for using the MySQL database with the generic Qt database +interface. + +%package -n qt3-unixODBC +Summary: A UnixODBC Plug-In for Qt +Provides: qt3_database_plugin +Group: Productivity/Databases/Clients + +%description -n qt3-unixODBC +A plug-in for using UnixODBC supported databases with the generic Qt +database interface. + +%package -n qt3-postgresql +Summary: A PostgreSQL Plug-In for Qt +Provides: qt3_database_plugin +Group: Productivity/Databases/Clients + +%description -n qt3-postgresql +A Plug-in for using the PostgreSQL database with the generic Qt +database interface. + +%package -n qt3-sqlite +Summary: SQLite Database Plug-In for Qt +Provides: qt3_database_plugin +Group: Development/Tools/Other + +%description -n qt3-sqlite +The Qt database supports SQLite with this plug-in. (No configured and +running daemon is required.) + +%package -n qt3-devel-tools +Summary: User Interface Builder and other tools (designer, assistant, linguist) +AutoReqProv: on +Requires: qt3-devel = %version +Provides: qt3-designer +Obsoletes: qt3-designer +Group: Development/Tools/GUI Builders + +%description -n qt3-devel-tools +The designer creates .ui files. The uic generates C++ code from these +files. The package also contains the Qt Assistant (Qt documentation +browser) and the Qt Linguist (for translations). + +%package -n qt3-man +Summary: Qt 3 Man Pages +AutoReqProv: on +Requires: qt3-devel = %version +Conflicts: qtman qt-man +Group: Documentation/Man + +%description -n qt3-man +This package contains all the man pages for all the Qt 3 classes. + +%build +export QTDIR=/usr/lib/qt3/ +export WLIB=%_lib +export VERSION=%suse_version +source %{SOURCE1} %{version} +export RPM_OPT_FLAGS="$RPM_OPT_FLAGS -fno-strict-aliasing" +# +# compile threaded version to build all tools. +# the lib itself becomes packaged from qt3.spec +# +call_configure -thread -shared -L$PWD/%_lib $OPTIONS +ln -sf /usr/lib/qt3/%_lib/* lib/ +ln -sf /usr/lib/qt3/bin/* bin/ +cd plugins/src +make %{?jobs:-j%jobs} +make INSTALL_ROOT=$RPM_BUILD_ROOT install +cd - +# +# build examples +# +cd tools/assistant/lib +make %{?jobs:-j%jobs} +cd - +cd examples +make %{?jobs:-j%jobs} +cd - +# +# build extra tools +# +cd tools +make %{?jobs:-j%jobs} +make INSTALL_ROOT=$RPM_BUILD_ROOT install +for i in qvfb qembed qconfig msg2qm mergetr ; do + cd "$i" && make %{?jobs:-j%jobs} && install -m 0755 $i ${RPM_BUILD_ROOT}/usr/lib/qt3/bin/ && cd - +done +cd .. +install -m 0755 bin/findtr bin/qt20fix bin/qtrename140 ${RPM_BUILD_ROOT}/usr/lib/qt3/bin/ +if [ %_lib = lib64 ]; then + for i in $RPM_BUILD_ROOT/usr/lib/qt3/plugins/*/*.so; do + mv "$i" "${i%.so}.lib64.so" + done +fi + +%install +export WLIB=%_lib +export VERSION=%suse_version +source %{SOURCE1} +post_install $RPM_BUILD_ROOT/usr/lib/qt3/ +# +# create default doc dir +# +install -d -m 0755 ${RPM_BUILD_ROOT}/%{_docdir}/qt3/ +# +# create links in ld.so.conf path +# +install -d -m 0755 ${RPM_BUILD_ROOT}/%{_libdir} +#install -d -m 0755 ${RPM_BUILD_ROOT}/usr/bin/ +#ln -sf ../lib/qt3/bin/designer ${RPM_BUILD_ROOT}/usr/bin/designer +#ln -sf ../lib/qt3/bin/linguist ${RPM_BUILD_ROOT}/usr/bin/linguist +%suse_update_desktop_file -i designer Qt Development GUIDesigner +%suse_update_desktop_file -i linguist Qt Development Translation +mkdir -p $RPM_BUILD_ROOT/usr/share/pixmaps +perl -pi -e 's/Icon=designer/Icon=designer3/' ${RPM_BUILD_ROOT}/usr/share/applications/designer.desktop +perl -pi -e 's,Exec=designer,Exec=/usr/lib/qt3/bin/designer,' ${RPM_BUILD_ROOT}/usr/share/applications/designer.desktop +mv ${RPM_BUILD_ROOT}/usr/share/applications/designer.desktop ${RPM_BUILD_ROOT}/usr/share/applications/designer3.desktop +install -m 0644 tools/assistant/images/designer.png $RPM_BUILD_ROOT/usr/share/pixmaps/designer3.png +rm -f ${RPM_BUILD_ROOT}/usr/share/pixmaps/designer.png +perl -pi -e 's,Exec=linguist,Exec=/usr/lib/qt3/bin/linguist,' ${RPM_BUILD_ROOT}/usr/share/applications/linguist.desktop +perl -pi -e 's,Icon=linguist,Icon=linguist3,' ${RPM_BUILD_ROOT}/usr/share/applications/linguist.desktop +mv ${RPM_BUILD_ROOT}/usr/share/pixmaps/linguist.png ${RPM_BUILD_ROOT}/usr/share/pixmaps/linguist3.png + +##### these files are not getting installed by "make install" ... bug ? +# +# +# install manpages +# +rm -rf $RPM_BUILD_ROOT/%{_mandir} +install -d $RPM_BUILD_ROOT/%{_mandir} +cp -a doc/man/* $RPM_BUILD_ROOT/%{_mandir}/ +# +# install examples +# +install -d ${RPM_BUILD_ROOT}/usr/lib/qt3/doc/ +find ./examples/ \ + -name \*.o -o -name .obj -o -name .moc -o -name Makefile \ + | xargs rm -rf +cp -a examples ${RPM_BUILD_ROOT}/usr/lib/qt3/doc/ +ln -sf /usr/lib/qt3/doc/examples ${RPM_BUILD_ROOT}/%{_docdir}/qt3/ +# +# to be sure we do not package files which are packaged in other qt3 packages +# +rpm -ql qt3 qt3-devel qt3-devel-doc \ + | while read i ; do + [ -d "$i" ] || rm -f $RPM_BUILD_ROOT/"$i" +done +# +# we do have them in qt3-devel-doc already +# +rm -f $RPM_BUILD_ROOT/usr/lib/qt3/bin/assistant +rm -f $RPM_BUILD_ROOT/usr/lib/qt3/%_lib/libqassistantclient.* +rm -f $RPM_BUILD_ROOT/usr/lib/qt3/translations/assistant_de.qm + +for l in $RPM_BUILD_ROOT/usr/lib/qt3/%_lib/*.a; do + strip --strip-unneeded $l +done + +%if %suse_version > 1020 +%fdupes -s $RPM_BUILD_ROOT +%endif + +%pre +if test -L usr/lib/qt3; then + rm usr/lib/qt3 +fi + +%clean +rm -rf ${RPM_BUILD_ROOT} + +%post +%run_ldconfig + +%post -n qt3-devel-tools +%run_ldconfig + +%files +%defattr(-,root,root) +/usr/lib/qt3/bin/qembed +/usr/lib/qt3/bin/qvfb + +%files -n qt3-mysql +%defattr(-,root,root) +%dir /usr/lib/qt3/plugins/sqldrivers +/usr/lib/qt3/plugins/sqldrivers/libqsqlmysql*.so + +%files -n qt3-postgresql +%defattr(-,root,root) +%dir /usr/lib/qt3/plugins/sqldrivers +/usr/lib/qt3/plugins/sqldrivers/libqsqlpsql*.so + +%files -n qt3-unixODBC +%defattr(-,root,root) +%dir /usr/lib/qt3/plugins/sqldrivers +/usr/lib/qt3/plugins/sqldrivers/libqsqlodbc*.so + +%files -n qt3-sqlite +%defattr(-,root,root) +%dir /usr/lib/qt3/plugins/sqldrivers +/usr/lib/qt3/plugins/sqldrivers/libqsqlite*.so + +%files -n qt3-devel-tools +%defattr(-,root,root) +#/usr/bin/designer +#/usr/bin/linguist +/usr/lib/qt3/bin/qconfig +/usr/lib/qt3/bin/findtr +/usr/lib/qt3/bin/qt20fix +/usr/lib/qt3/bin/qtrename140 +/usr/lib/qt3/bin/msg2qm +/usr/lib/qt3/bin/mergetr +/usr/lib/qt3/bin/designer +/usr/lib/qt3/bin/linguist +/usr/lib/qt3/bin/qm2ts +/usr/lib/qt3/bin/lrelease +/usr/lib/qt3/bin/lupdate +/usr/lib/qt3/templates +/usr/lib/qt3/plugins/designer +/usr/lib/qt3/phrasebooks +/usr/lib/qt3/%_lib/libdesignercore.* +/usr/lib/qt3/%_lib/libeditor.* +/usr/share/applications/* +/usr/share/pixmaps/designer3.png +/usr/share/pixmaps/linguist3.png + +%files -n qt3-devel-examples +%defattr(-,root,root) +%dir /usr/lib/qt3/doc +/%{_docdir}/qt3/examples +/usr/lib/qt3/doc/examples + +%files -n qt3-man +%defattr(-,root,root) +%{_mandir}/man*/* + +%changelog diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.history/a9/f01f324e000f00111528b7e658abf294 b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.history/a9/f01f324e000f00111528b7e658abf294 new file mode 100644 index 000000000..4579a371f --- /dev/null +++ b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.history/a9/f01f324e000f00111528b7e658abf294 @@ -0,0 +1,450 @@ +# +# spec file for package qt3-extensions +# +# Copyright (c) 2011 SUSE LINUX Products GmbH, Nuernberg, Germany. +# +# All modifications and additions to the file contributed by third parties +# remain the property of their copyright owners, unless otherwise agreed +# upon. The license for this file, and modifications and additions to the +# file, is the same license as for the pristine package itself (unless the +# license for the pristine package is not an Open Source License, in which +# case the license is the MIT License). An "Open Source License" is a +# license that conforms to the Open Source Definition (Version 1.9) +# published by the Open Source Initiative. + +# Please submit bugfixes or comments via http://bugs.opensuse.org/ +# + +# norootforbuild + + +Name: qt3-extensions +BuildRequires: cups-devel krb5-devel mysql-devel postgresql-devel qt3-devel sqlite2-devel unixODBC-devel update-desktop-files +%if %suse_version > 1020 +BuildRequires: fdupes +%endif +License: GPL, QPL +Version: 3.3.8d +Release: 1 +AutoReqProv: on +Requires: qt3 = %version +Group: Development/Tools/Other +Summary: Qt3 Extensions +# COMMON-BEGIN +# COMMON-BEGIN +%define x11_free -x11-free- +%define rversion 3.3.8b +Source0: http://mirror.its.uidaho.edu/pub/trinity/releases/3.5.13/dependencies/qt3-3.3.8.d.tar.gz +Source1: build_script.sh +Source2: qtconfig3.desktop +Source3: qtrc +Source4: assistant3.png +Source6: assistant3.desktop +Source7: designer.desktop +Source8: designer.png +Source9: linguist.desktop +Source5: linguist.png +Source10: qt3.sh +Source11: qt3.csh +# Translations did not change at 3.3.8d +Source12: qt3-3.3.8b-translations.tar.bz2 +Source100: qtkdeintegration_x11.cpp +Source101: qtkdeintegration_x11_p.h +Source102: baselibs.conf +Source200: attributes +Source201: update_spec.pl +Patch1: aliasing.diff +Patch2: head.diff +Patch4: qt3-never-strip.diff +Patch5: external-libs.diff +Patch12: qtrc-path.diff +Patch14: lib64-plugin-support.diff +Patch15: pluginmanager-fix.diff +Patch18: no-rpath.dif +Patch19: shut-up.diff +Patch21: fix-GL-loading.diff +Patch23: fix-accessible.diff +Patch28: fix-key-release-event-with-imm.diff +Patch29: 0047-fix-kmenu-width.diff +Patch31: limit-image-size.diff +Patch34: 0005-qpixmap_mitshm.patch +Patch35: qt-transparency.patch +Patch37: 0055-qtextedit_zoom.patch +Patch38: 0048-qclipboard_hack_80072.patch +Patch39: fix-qtranslator-crash.diff +Patch40: 0059-qpopup_has_mouse.patch +Patch41: 0060-qpopup_ignore_mousepos.patch +Patch42: add_qexport_visibility.patch +Patch43: 0056-khotkeys_input_84434.patch +Source250: enable-designer-plugins.diff +Patch53: fix-xinerama-dialog-placement.diff +Patch54: kmenu-search-fix.diff +Patch55: qt3-fix-cast.diff +Patch100: qt.patch +Patch101: qt3-arm-gcc4.patch +Patch102: xinerama.patch +Patch113: fix-assistant-path.patch +Patch117: qtimer-debug.diff +Patch119: xinerama-qpopupmenu.diff +Patch121: qt3-warnings.diff +Patch123: use-xrandr-1.2.diff +Patch125: qcstring-format-warnings.diff +Patch127: mng-reading-fix.patch +Patch128: 0079-compositing-types.patch +Patch129: 0080-net-wm-sync-request.patch +Patch132: revert-qt-3.3.8-khmer-fix.diff +Patch133: 0085-fix-buildkey.diff +Patch134: fix-xinput-clash.diff +Patch135: parseFontName.diff +Patch136: qt3-no-date.diff +Patch137: popen-leak-fix.diff +Patch138: qt3-libpng14.diff +Patch139: gcc46.diff + +BuildRoot: %{_tmppath}/%{name}-%{version}-build + +%description +This package contains extension libraries for Qt 3, such as the +Netscape plug-in modules. + +%define build_sub_dirs src plugins/src tools/designer/uilib/ tools/designer/uic tools/qtconfig tools/assistant/lib tools/assistant tutorial + +%prep +%setup -q -n qt3 +%patch1 +%patch2 +%patch4 +%patch5 +%patch12 +if [ "%_lib" = "lib64" ]; then +%patch14 +fi +%patch15 +%patch18 +%patch19 +%patch23 +%patch28 +%patch29 +%patch31 +%patch34 +%patch35 +%patch37 +%patch38 +%patch39 +%patch40 +%patch41 +%patch42 +%patch43 +%patch100 +%patch102 +%patch53 +%patch54 +%patch55 +%patch101 +%patch113 +%patch117 +%patch119 +%patch121 +%patch123 +ln -sf $PWD/src/inputmethod/qinputcontextfactory.h include/ +ln -sf $PWD/src/inputmethod/qinputcontextplugin.h include/ +ln -sf $PWD/src/kernel/qinputcontext.h include/ +ln -sf $PWD/src/kernel/qinputcontextinterface_p.h include/private/ +ln -sf $PWD/src/kernel/qximinputcontext_p.h include/private/ +if [ %_lib = "lib" ]; then +sed 's,/lib64/,/lib/,' %PATCH21 | patch -p0 +else +%patch21 +fi +%patch125 +%patch127 +%patch128 +%patch129 +%patch132 +%patch133 +%patch134 +%patch135 +%patch136 +%patch137 +%if %suse_version > 1120 +%patch138 -p1 +%endif +%patch139 +# copy qt kde integration files +cp %SOURCE100 %SOURCE101 src/kernel/ +cp %SOURCE101 include/private/ +cd translations +tar xvjf %SOURCE12 +cd .. +# COMMON-END +# COMMON-END + +%description +This package contains extension libraries for Qt 3, such as the +Netscape plug-in modules. + +This package contains extension libraries for Qt 3, such as the +Netscape plug-in modules. + +This package contains extension libraries for Qt 3, such as the +Netscape plug-in modules. + +This package contains extension libraries for Qt 3, such as the +Netscape plug-in modules. + +%package -n qt3-devel-examples +Summary: Programming Examples for Qt 3 +AutoReqProv: on +Group: Development/Sources +Provides: qt3-examples +Obsoletes: qt3-examples + +%description -n qt3-devel-examples +This package contains small executables with code to demonstrate Qt +programming. + +Have a look in /usr/share/doc/packages/qt3/examples/. + +%package -n qt3-mysql +Summary: MySQL Plug-In for Qt +Provides: qt3_database_plugin +Group: Productivity/Databases/Clients + +%description -n qt3-mysql +Plug-in for using the MySQL database with the generic Qt database +interface. + +%package -n qt3-unixODBC +Summary: A UnixODBC Plug-In for Qt +Provides: qt3_database_plugin +Group: Productivity/Databases/Clients + +%description -n qt3-unixODBC +A plug-in for using UnixODBC supported databases with the generic Qt +database interface. + +%package -n qt3-postgresql +Summary: A PostgreSQL Plug-In for Qt +Provides: qt3_database_plugin +Group: Productivity/Databases/Clients + +%description -n qt3-postgresql +A Plug-in for using the PostgreSQL database with the generic Qt +database interface. + +%package -n qt3-sqlite +Summary: SQLite Database Plug-In for Qt +Provides: qt3_database_plugin +Group: Development/Tools/Other + +%description -n qt3-sqlite +The Qt database supports SQLite with this plug-in. (No configured and +running daemon is required.) + +%package -n qt3-devel-tools +Summary: User Interface Builder and other tools (designer, assistant, linguist) +AutoReqProv: on +Requires: qt3-devel = %version +Provides: qt3-designer +Obsoletes: qt3-designer +Group: Development/Tools/GUI Builders + +%description -n qt3-devel-tools +The designer creates .ui files. The uic generates C++ code from these +files. The package also contains the Qt Assistant (Qt documentation +browser) and the Qt Linguist (for translations). + +%package -n qt3-man +Summary: Qt 3 Man Pages +AutoReqProv: on +Requires: qt3-devel = %version +Conflicts: qtman qt-man +Group: Documentation/Man + +%description -n qt3-man +This package contains all the man pages for all the Qt 3 classes. + +%build +export QTDIR=/usr/lib/qt3/ +export WLIB=%_lib +export VERSION=%suse_version +source %{SOURCE1} %{version} +export RPM_OPT_FLAGS="$RPM_OPT_FLAGS -fno-strict-aliasing" +# +# compile threaded version to build all tools. +# the lib itself becomes packaged from qt3.spec +# +call_configure -thread -shared -L$PWD/%_lib $OPTIONS +ln -sf /usr/lib/qt3/%_lib/* lib/ +ln -sf /usr/lib/qt3/bin/* bin/ +cd plugins/src +make %{?jobs:-j%jobs} +make INSTALL_ROOT=$RPM_BUILD_ROOT install +cd - +# +# build examples +# +cd tools/assistant/lib +make %{?jobs:-j%jobs} +cd - +cd examples +make %{?jobs:-j%jobs} +cd - +# +# build extra tools +# +cd tools +make %{?jobs:-j%jobs} +make INSTALL_ROOT=$RPM_BUILD_ROOT install +for i in qvfb qembed qconfig msg2qm mergetr ; do + cd "$i" && make %{?jobs:-j%jobs} && install -m 0755 $i ${RPM_BUILD_ROOT}/usr/lib/qt3/bin/ && cd - +done +cd .. +install -m 0755 bin/findtr bin/qt20fix bin/qtrename140 ${RPM_BUILD_ROOT}/usr/lib/qt3/bin/ +if [ %_lib = lib64 ]; then + for i in $RPM_BUILD_ROOT/usr/lib/qt3/plugins/*/*.so; do + mv "$i" "${i%.so}.lib64.so" + done +fi + +%install +export WLIB=%_lib +export VERSION=%suse_version +source %{SOURCE1} +post_install $RPM_BUILD_ROOT/usr/lib/qt3/ +# +# create default doc dir +# +install -d -m 0755 ${RPM_BUILD_ROOT}/%{_docdir}/qt3/ +# +# create links in ld.so.conf path +# +install -d -m 0755 ${RPM_BUILD_ROOT}/%{_libdir} +#install -d -m 0755 ${RPM_BUILD_ROOT}/usr/bin/ +#ln -sf ../lib/qt3/bin/designer ${RPM_BUILD_ROOT}/usr/bin/designer +#ln -sf ../lib/qt3/bin/linguist ${RPM_BUILD_ROOT}/usr/bin/linguist +%suse_update_desktop_file -i designer Qt Development GUIDesigner +%suse_update_desktop_file -i linguist Qt Development Translation +mkdir -p $RPM_BUILD_ROOT/usr/share/pixmaps +perl -pi -e 's/Icon=designer/Icon=designer3/' ${RPM_BUILD_ROOT}/usr/share/applications/designer.desktop +perl -pi -e 's,Exec=designer,Exec=/usr/lib/qt3/bin/designer,' ${RPM_BUILD_ROOT}/usr/share/applications/designer.desktop +mv ${RPM_BUILD_ROOT}/usr/share/applications/designer.desktop ${RPM_BUILD_ROOT}/usr/share/applications/designer3.desktop +install -m 0644 tools/assistant/images/designer.png $RPM_BUILD_ROOT/usr/share/pixmaps/designer3.png +rm -f ${RPM_BUILD_ROOT}/usr/share/pixmaps/designer.png +perl -pi -e 's,Exec=linguist,Exec=/usr/lib/qt3/bin/linguist,' ${RPM_BUILD_ROOT}/usr/share/applications/linguist.desktop +perl -pi -e 's,Icon=linguist,Icon=linguist3,' ${RPM_BUILD_ROOT}/usr/share/applications/linguist.desktop +mv ${RPM_BUILD_ROOT}/usr/share/pixmaps/linguist.png ${RPM_BUILD_ROOT}/usr/share/pixmaps/linguist3.png + +##### these files are not getting installed by "make install" ... bug ? +# +# +# install manpages +# +rm -rf $RPM_BUILD_ROOT/%{_mandir} +install -d $RPM_BUILD_ROOT/%{_mandir} +cp -a doc/man/* $RPM_BUILD_ROOT/%{_mandir}/ +# +# install examples +# +install -d ${RPM_BUILD_ROOT}/usr/lib/qt3/doc/ +find ./examples/ \ + -name \*.o -o -name .obj -o -name .moc -o -name Makefile \ + | xargs rm -rf +cp -a examples ${RPM_BUILD_ROOT}/usr/lib/qt3/doc/ +ln -sf /usr/lib/qt3/doc/examples ${RPM_BUILD_ROOT}/%{_docdir}/qt3/ +# +# to be sure we do not package files which are packaged in other qt3 packages +# +rpm -ql qt3 qt3-devel qt3-devel-doc \ + | while read i ; do + [ -d "$i" ] || rm -f $RPM_BUILD_ROOT/"$i" +done +# +# we do have them in qt3-devel-doc already +# +rm -f $RPM_BUILD_ROOT/usr/lib/qt3/bin/assistant +rm -f $RPM_BUILD_ROOT/usr/lib/qt3/%_lib/libqassistantclient.* +rm -f $RPM_BUILD_ROOT/usr/lib/qt3/translations/assistant_de.qm + +for l in $RPM_BUILD_ROOT/usr/lib/qt3/%_lib/*.a; do + strip --strip-unneeded $l +done + +%if %suse_version > 1020 +%fdupes -s $RPM_BUILD_ROOT +%endif + +%pre +if test -L usr/lib/qt3; then + rm usr/lib/qt3 +fi + +%clean +rm -rf ${RPM_BUILD_ROOT} + +%post +%run_ldconfig + +%post -n qt3-devel-tools +%run_ldconfig + +%files +%defattr(-,root,root) +/usr/lib/qt3/bin/qembed +/usr/lib/qt3/bin/qvfb + +%files -n qt3-mysql +%defattr(-,root,root) +%dir /usr/lib/qt3/plugins/sqldrivers +/usr/lib/qt3/plugins/sqldrivers/libqsqlmysql*.so + +%files -n qt3-postgresql +%defattr(-,root,root) +%dir /usr/lib/qt3/plugins/sqldrivers +/usr/lib/qt3/plugins/sqldrivers/libqsqlpsql*.so + +%files -n qt3-unixODBC +%defattr(-,root,root) +%dir /usr/lib/qt3/plugins/sqldrivers +/usr/lib/qt3/plugins/sqldrivers/libqsqlodbc*.so + +%files -n qt3-sqlite +%defattr(-,root,root) +%dir /usr/lib/qt3/plugins/sqldrivers +/usr/lib/qt3/plugins/sqldrivers/libqsqlite*.so + +%files -n qt3-devel-tools +%defattr(-,root,root) +#/usr/bin/designer +#/usr/bin/linguist +/usr/lib/qt3/bin/qconfig +/usr/lib/qt3/bin/findtr +/usr/lib/qt3/bin/qt20fix +/usr/lib/qt3/bin/qtrename140 +/usr/lib/qt3/bin/msg2qm +/usr/lib/qt3/bin/mergetr +/usr/lib/qt3/bin/designer +/usr/lib/qt3/bin/linguist +/usr/lib/qt3/bin/qm2ts +/usr/lib/qt3/bin/lrelease +/usr/lib/qt3/bin/lupdate +/usr/lib/qt3/templates +/usr/lib/qt3/plugins/designer +/usr/lib/qt3/phrasebooks +/usr/lib/qt3/%_lib/libdesignercore.* +/usr/lib/qt3/%_lib/libeditor.* +/usr/share/applications/* +/usr/share/pixmaps/designer3.png +/usr/share/pixmaps/linguist3.png + +%files -n qt3-devel-examples +%defattr(-,root,root) +%dir /usr/lib/qt3/doc +/%{_docdir}/qt3/examples +/usr/lib/qt3/doc/examples + +%files -n qt3-man +%defattr(-,root,root) +%{_mandir}/man*/* + +%changelog diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.history/ab/60c0304e000f00111528b7e658abf294 b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.history/ab/60c0304e000f00111528b7e658abf294 new file mode 100644 index 000000000..5d60eda8f --- /dev/null +++ b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.history/ab/60c0304e000f00111528b7e658abf294 @@ -0,0 +1,279 @@ +# +# spec file for package qt3-devel-doc +# +# Copyright (c) 2011 SUSE LINUX Products GmbH, Nuernberg, Germany. +# +# All modifications and additions to the file contributed by third parties +# remain the property of their copyright owners, unless otherwise agreed +# upon. The license for this file, and modifications and additions to the +# file, is the same license as for the pristine package itself (unless the +# license for the pristine package is not an Open Source License, in which +# case the license is the MIT License). An "Open Source License" is a +# license that conforms to the Open Source Definition (Version 1.9) +# published by the Open Source Initiative. + +# Please submit bugfixes or comments via http://bugs.opensuse.org/ +# + +# norootforbuild + + +Name: qt3-devel-doc +BuildRequires: cups-devel freeglut-devel freetype2-devel gcc-c++ pkgconfig qt3-devel update-desktop-files +%if %suse_version < 1130 +BuildRequires: libpng-devel +%else +BuildRequires: libpng14-devel +%endif +Url: http://www.trolltech.com/ +License: GPL, QPL +AutoReqProv: on +Summary: Documentation for the Qt 3 Development Kit +Group: Documentation/HTML +Version: 3.3.8d +Release: 1 +PreReq: /bin/grep +BuildArch: noarch +Provides: qt3-devel-tutorial +Obsoletes: qt3-devel-tutorial +Requires: qt3-devel +%define x11_free -x11-free- +%define rversion %version +# COMMON-BEGIN +# COMMON-BEGIN +%define x11_free -x11-free- +%define rversion 3.3.8b +Source0: http://mirror.its.uidaho.edu/pub/trinity/releases/3.5.13/dependencies/qt3-3.3.8.d.tar.gz +Source1: build_script.sh +Source2: qtconfig3.desktop +Source3: qtrc +Source4: assistant3.png +Source6: assistant3.desktop +Source7: designer.desktop +Source8: designer.png +Source9: linguist.desktop +Source5: linguist.png +Source10: qt3.sh +Source11: qt3.csh +# Translations did not change at 3.3.8c +Source12: qt3-3.3.8b-translations.tar.bz2 +Source100: qtkdeintegration_x11.cpp +Source101: qtkdeintegration_x11_p.h +Source102: baselibs.conf +Source200: attributes +Source201: update_spec.pl +Patch1: aliasing.diff +Patch2: head.diff +Patch4: qt3-never-strip.diff +Patch5: external-libs.diff +Patch12: qtrc-path.diff +Patch14: lib64-plugin-support.diff +Patch15: pluginmanager-fix.diff +Patch18: no-rpath.dif +Patch19: shut-up.diff +Patch21: fix-GL-loading.diff +Patch23: fix-accessible.diff +Patch28: fix-key-release-event-with-imm.diff +Patch29: 0047-fix-kmenu-width.diff +Patch31: limit-image-size.diff +Patch34: 0005-qpixmap_mitshm.patch +Patch35: qt-transparency.patch +Patch37: 0055-qtextedit_zoom.patch +Patch38: 0048-qclipboard_hack_80072.patch +Patch39: fix-qtranslator-crash.diff +Patch40: 0059-qpopup_has_mouse.patch +Patch41: 0060-qpopup_ignore_mousepos.patch +Patch42: add_qexport_visibility.patch +Patch43: 0056-khotkeys_input_84434.patch +Source250: enable-designer-plugins.diff +Patch53: fix-xinerama-dialog-placement.diff +Patch54: kmenu-search-fix.diff +Patch55: qt3-fix-cast.diff +Patch100: qt.patch +Patch101: qt3-arm-gcc4.patch +Patch102: xinerama.patch +Patch113: fix-assistant-path.patch +Patch117: qtimer-debug.diff +Patch119: xinerama-qpopupmenu.diff +Patch121: qt3-warnings.diff +Patch123: use-xrandr-1.2.diff +Patch125: qcstring-format-warnings.diff +Patch127: mng-reading-fix.patch +Patch128: 0079-compositing-types.patch +Patch129: 0080-net-wm-sync-request.patch +Patch132: revert-qt-3.3.8-khmer-fix.diff +Patch133: 0085-fix-buildkey.diff +Patch134: fix-xinput-clash.diff +Patch135: parseFontName.diff +Patch136: qt3-no-date.diff +Patch137: popen-leak-fix.diff +Patch138: qt3-libpng14.diff +Patch139: gcc46.diff + +BuildRoot: %{_tmppath}/%{name}-%{version}-build + +%description +This package contains the documentation for the Qt 3 Development Kit. + +You will find documentation, precompiled examples, and a tutorial for +getting started with Qt in /usr/lib/qt3/doc. + +This package contains the documentation for the Qt 3 Development Kit. + +You will find documentation, precompiled examples, and a tutorial for +getting started with Qt in /usr/lib/qt3/doc. + +This package contains the documentation for the Qt 3 Development Kit. + +You will find documentation, precompiled examples, and a tutorial for +getting started with Qt in /usr/lib/qt3/doc. + +This package contains the documentation for the Qt 3 Development Kit. + +You will find documentation, precompiled examples, and a tutorial for +getting started with Qt in /usr/lib/qt3/doc. + +%define build_sub_dirs src plugins/src tools/designer/uilib/ tools/designer/uic tools/qtconfig tools/assistant/lib tools/assistant tutorial + +%prep +%setup -q -n qt3 +%patch1 +%patch2 +%patch4 +%patch5 +%patch12 +if [ "%_lib" = "lib64" ]; then +%patch14 +fi +%patch15 +%patch18 +%patch19 +%patch23 +%patch28 +%patch29 +%patch31 +%patch34 +%patch35 +%patch37 +%patch38 +%patch39 +%patch40 +%patch41 +%patch42 +%patch43 +%patch100 +%patch102 +%patch53 +%patch54 +%patch55 +%patch101 +%patch113 +%patch117 +%patch119 +%patch121 +%patch123 +ln -sf $PWD/src/inputmethod/qinputcontextfactory.h include/ +ln -sf $PWD/src/inputmethod/qinputcontextplugin.h include/ +ln -sf $PWD/src/kernel/qinputcontext.h include/ +ln -sf $PWD/src/kernel/qinputcontextinterface_p.h include/private/ +ln -sf $PWD/src/kernel/qximinputcontext_p.h include/private/ +if [ %_lib = "lib" ]; then +sed 's,/lib64/,/lib/,' %PATCH21 | patch -p0 +else +%patch21 +fi +%patch125 +%patch127 +%patch128 +%patch129 +%patch132 +%patch133 +%patch134 +%patch135 +%patch136 +%patch137 +%if %suse_version > 1120 +%patch138 -p1 +%endif +%patch139 +# copy qt kde integration files +cp %SOURCE100 %SOURCE101 src/kernel/ +cp %SOURCE101 include/private/ +cd translations +tar xvjf %SOURCE12 +cd .. +# COMMON-END +# COMMON-END + +%description +This package contains the documentation for the Qt 3 Development Kit. + +You will find documentation, precompiled examples, and a tutorial for +getting started with Qt in /usr/lib/qt3/doc. + +This package contains the documentation for the Qt 3 Development Kit. + +You will find documentation, precompiled examples, and a tutorial for +getting started with Qt in /usr/lib/qt3/doc. + +This package contains the documentation for the Qt 3 Development Kit. + +You will find documentation, precompiled examples, and a tutorial for +getting started with Qt in /usr/lib/qt3/doc. + +This package contains the documentation for the Qt 3 Development Kit. + +You will find documentation, precompiled examples, and a tutorial for +getting started with Qt in /usr/lib/qt3/doc. + +%build +export VERSION=%suse_version +source %SOURCE1 %{version} +export WLIB=%_lib +export QTDIR=`pwd` +if [ %_lib == "lib64" ]; then +export RPM_OPT_FLAGS="$RPM_OPT_FLAGS -DUSE_LIB64_PATHES" +fi +export RPM_OPT_FLAGS="$RPM_OPT_FLAGS -fno-strict-aliasing" +# +# call build from build_script.rpmrc for threaded Qt library +# only really needed tools will be builded here, all extra tools will be +# builded in qt3.spec +# +call_configure -thread -shared -no-sql-mysql -no-sql-psql -no-sql-odbc -no-sql-sqlite $OPTIONS +cd src +make %{?jobs:-j%jobs} +cd .. + +%install +export VERSION=%suse_version +export WLIB=%_lib +export QTDIR=`pwd` +source %SOURCE1 %{version} +cd src +make INSTALL_ROOT=$RPM_BUILD_ROOT install_htmldocs +cd .. +# +# install menu entries +# +%suse_update_desktop_file -i -u qtconfig3 Qt Utility DesktopSettings +%suse_update_desktop_file -i assistant3 Qt Development Documentation + +install -d -m 0755 ${RPM_BUILD_ROOT}/%{_defaultdocdir}/qt3/ +ln -sf /usr/lib/qt3/doc/html ${RPM_BUILD_ROOT}/%{_defaultdocdir}/qt3/ +mkdir -p $RPM_BUILD_ROOT/usr/share/pixmaps/ +install -m 0644 %SOURCE4 $RPM_BUILD_ROOT/usr/share/pixmaps/ + +%clean +rm -rf ${RPM_BUILD_ROOT} + +%files +%defattr(-,root,root) +%dir /usr/lib/qt3/doc +%doc /usr/lib/qt3/doc/html +%{_docdir}/qt3/html +/usr/share/applications/qtconfig3.desktop +/usr/share/applications/assistant3.desktop +/usr/share/pixmaps/assistant3.png + +%changelog diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.history/b8/10e1717a1c0f00111528b7e658abf294 b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.history/b8/10e1717a1c0f00111528b7e658abf294 new file mode 100644 index 000000000..8411f569b --- /dev/null +++ b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.history/b8/10e1717a1c0f00111528b7e658abf294 @@ -0,0 +1,397 @@ +# +# spec file for package qt3 +# +# Copyright (c) 2011 SUSE LINUX Products GmbH, Nuernberg, Germany. +# +# All modifications and additions to the file contributed by third parties +# remain the property of their copyright owners, unless otherwise agreed +# upon. The license for this file, and modifications and additions to the +# file, is the same license as for the pristine package itself (unless the +# license for the pristine package is not an Open Source License, in which +# case the license is the MIT License). An "Open Source License" is a +# license that conforms to the Open Source Definition (Version 1.9) +# published by the Open Source Initiative. + +# Please submit bugfixes or comments via http://bugs.opensuse.org/ +# + + + +Name: qt3 +#Remember also to modify Requires in -devel package +BuildRequires: Mesa-devel c++_compiler cups-devel freetype2-devel libjpeg-devel libmng-devel pkgconfig update-desktop-files xorg-x11-devel +Url: http://www.trolltech.com/ +License: GPLv2 ; GPLv3 ; QPL .. +%if %suse_version > 1120 +BuildRequires: libpng14-compat-devel +%else +BuildRequires: libpng-devel +%endif +Group: System/Libraries +# bug437293 +%ifarch ppc64 +Obsoletes: qt3-64bit +%endif +# +Summary: A library for developing applications with graphical user interfaces +Version: 3.3.8d +Release: 110 +Provides: qt_library_%version +Recommends: kdelibs3-default-style +PreReq: /bin/grep +# COMMON-BEGIN +%define x11_free -x11-free- +%define rversion 3.3.8b +Source0: http://mirror.its.uidaho.edu/pub/trinity/releases/3.5.13/dependencies/qt3-3.3.8.d.tar.gz +Source1: build_script.sh +Source2: qtconfig3.desktop +Source3: qtrc +Source4: assistant3.png +Source6: assistant3.desktop +Source7: designer.desktop +Source8: designer.png +Source9: linguist.desktop +Source5: linguist.png +Source10: qt3.sh +Source11: qt3.csh +# Translations did not change at 3.3.8c +Source12: qt3-3.3.8b-translations.tar.bz2 +Source100: qtkdeintegration_x11.cpp +Source101: qtkdeintegration_x11_p.h +Source102: baselibs.conf +Source200: attributes +Source201: update_spec.pl +Patch1: aliasing.diff +Patch2: head.diff +Patch4: qt3-never-strip.diff +Patch5: external-libs.diff +Patch12: qtrc-path.diff +Patch14: lib64-plugin-support.diff +Patch15: pluginmanager-fix.diff +Patch18: no-rpath.dif +Patch19: shut-up.diff +Patch21: fix-GL-loading.diff +Patch23: fix-accessible.diff +Patch28: fix-key-release-event-with-imm.diff +Patch29: 0047-fix-kmenu-width.diff +Patch31: limit-image-size.diff +Patch34: 0005-qpixmap_mitshm.patch +Patch35: qt-transparency.patch +Patch37: 0055-qtextedit_zoom.patch +Patch38: 0048-qclipboard_hack_80072.patch +Patch39: fix-qtranslator-crash.diff +Patch40: 0059-qpopup_has_mouse.patch +Patch41: 0060-qpopup_ignore_mousepos.patch +Patch42: add_qexport_visibility.patch +Patch43: 0056-khotkeys_input_84434.patch +Source250: enable-designer-plugins.diff +Patch53: fix-xinerama-dialog-placement.diff +Patch54: kmenu-search-fix.diff +Patch55: qt3-fix-cast.diff +Patch100: qt.patch +Patch101: qt3-arm-gcc4.patch +Patch102: xinerama.patch +Patch113: fix-assistant-path.patch +Patch117: qtimer-debug.diff +Patch119: xinerama-qpopupmenu.diff +Patch121: qt3-warnings.diff +Patch123: use-xrandr-1.2.diff +Patch125: qcstring-format-warnings.diff +Patch127: mng-reading-fix.patch +Patch128: 0079-compositing-types.patch +Patch129: 0080-net-wm-sync-request.patch +Patch132: revert-qt-3.3.8-khmer-fix.diff +Patch133: 0085-fix-buildkey.diff +Patch134: fix-xinput-clash.diff +Patch135: parseFontName.diff +Patch136: qt3-no-date.diff +Patch137: popen-leak-fix.diff +Patch138: qt3-libpng14.diff +Patch139: gcc46.diff + +BuildRoot: %{_tmppath}/%{name}-%{version}-build + +%description +Qt is a program library for developing applications with graphical user +interfaces. It allows you to rapidly develop professional programs. The +Qt library is available not only for Linux but for a great number of +Unices and even for Windows. Thus it is possible to write programs that +may be easily ported to those platforms. + +You need a license for using Qt with a non-GPL application, which can +be acquired from sales@trolltech.com. + +See /usr/share/doc/packages/qt3 for details about the new features of +the current Qt library! + +%define build_sub_dirs src plugins/src tools/designer/uilib/ tools/designer/uic tools/qtconfig tools/assistant/lib tools/assistant tutorial + +%prep +%setup -q -n qt3 +%patch1 +%patch2 +%patch4 +%patch5 +%patch12 +if [ "%_lib" = "lib64" ]; then +%patch14 +fi +%patch15 +%patch18 +%patch19 +%patch23 +#%patch28 +%patch29 +%patch31 +%patch34 +%patch35 +%patch37 +%patch38 +%patch39 +%patch40 +%patch41 +%patch42 +%patch43 +%patch100 +%patch102 +%patch53 +%patch54 +%patch55 +%patch101 +%patch113 +%patch117 +%patch119 +%patch121 +%patch123 +ln -sf $PWD/src/inputmethod/qinputcontextfactory.h include/ +ln -sf $PWD/src/inputmethod/qinputcontextplugin.h include/ +ln -sf $PWD/src/kernel/qinputcontext.h include/ +ln -sf $PWD/src/kernel/qinputcontextinterface_p.h include/private/ +ln -sf $PWD/src/kernel/qximinputcontext_p.h include/private/ +if [ %_lib = "lib" ]; then +sed 's,/lib64/,/lib/,' %PATCH21 | patch -p0 +else +%patch21 +fi +%patch125 +%patch127 +%patch128 +%patch129 +%patch132 +%patch133 +%patch134 +%patch135 +%patch136 +%patch137 +%if %suse_version > 1120 +%patch138 -p1 +%endif +%patch139 +# copy qt kde integration files +cp %SOURCE100 %SOURCE101 src/kernel/ +cp %SOURCE101 include/private/ +cd translations +tar xvjf %SOURCE12 +cd .. +# COMMON-END + +%package devel +License: GPLv2 ; GPLv3 ; QPL .. +Summary: Include Files and Libraries mandatory for Development +Requires: qt3 = %version +Requires: pkgconfig cups-devel freetype2-devel libmng-devel libjpeg-devel c++_compiler xorg-x11-devel +%if %suse_version > 1120 +Recommends: libpng14-compat-devel +Requires: libpng-devel +%else +Requires: libpng-devel +%endif +%if %suse_version > 1000 +Requires: Mesa-devel +%else +Requires: xorg-x11-Mesa xorg-x11-Mesa-devel +%endif +%ifnarch x86_64 s390x sparc64 ppc64 mips64 +Conflicts: devel_libs-32bit +%endif +# bug437293 +%ifarch ppc64 +Obsoletes: qt3-devel-64bit +%endif +# +Group: Development/Libraries/X11 + +%description devel +You need this package if you want to compile programs with Qt 3. It +contains the "Qt Crossplatform Development Kit 2". Under /usr/lib/qt3 +you will find include files. + +You need a license for using Qt with a non-GPL application. A license +can be acquired at sales@trolltech.com. + +%build +export VERSION=%suse_version +source %SOURCE1 %{version} +export WLIB=%_lib +export QTDIR=`pwd` +if [ %_lib == "lib64" ]; then +export RPM_OPT_FLAGS="$RPM_OPT_FLAGS -DUSE_LIB64_PATHES" +fi +export RPM_OPT_FLAGS="$RPM_OPT_FLAGS -fno-strict-aliasing" +# +# call build from build_script.rpmrc for threaded Qt library +# only really needed tools will be builded here, all extra tools will be +# builded in qt3.spec +# +call_configure -v -thread -shared -no-sql-mysql -no-sql-psql -no-sql-odbc -no-sql-sqlite $OPTIONS +for i in %build_sub_dirs ; do + cd $i + make %{?jobs:-j%jobs} + cd - +done + +%install +export VERSION=%suse_version +export WLIB=%_lib +export QTDIR=`pwd` +source %SOURCE1 %{version} +for i in %build_sub_dirs ; do + cd $i + make INSTALL_ROOT=$RPM_BUILD_ROOT install + cd - +done +post_install $RPM_BUILD_ROOT/usr/lib/qt3/ +mkdir -p $RPM_BUILD_ROOT/usr/share/pixmaps/ +sed -i -e 's, on: .*,,' $RPM_BUILD_ROOT/usr/lib/qt3/%_lib/*.la +# +# copy additional files +# +install -m 0755 bin/qmake bin/moc ${RPM_BUILD_ROOT}/usr/lib/qt3/bin/ +install -m 0755 -d ${RPM_BUILD_ROOT}/usr/lib/qt3/translations/ +install -m 0644 translations/*.qm ${RPM_BUILD_ROOT}/usr/lib/qt3/translations/ +if [ %_lib = lib64 ]; then + for i in $RPM_BUILD_ROOT/usr/lib/qt3/plugins/*/*.so; do + mv "$i" "${i%.so}.lib64.so" + done +fi +# +# move pkgconfig files +# +mkdir -p $RPM_BUILD_ROOT/%_libdir/pkgconfig +mv $RPM_BUILD_ROOT/usr/lib/qt3/%_lib/pkgconfig/*.pc \ + $RPM_BUILD_ROOT/%_libdir/pkgconfig +rmdir $RPM_BUILD_ROOT/usr/lib/qt3/%_lib/pkgconfig +# +# move docs in doc dir +# +install -d -m 0755 ${RPM_BUILD_ROOT}/%{_defaultdocdir}/qt3/ +install -d -m 0755 ${RPM_BUILD_ROOT}/usr/lib/qt3/mkspecs/ +install -d -m 0755 ${RPM_BUILD_ROOT}/usr/lib/qt3/mkspecs/ +cp -a mkspecs/* ${RPM_BUILD_ROOT}/usr/lib/qt3/mkspecs/ +if [ %_lib == "lib64" ]; then + ln -sf linux-g++-64 ${RPM_BUILD_ROOT}/usr/lib/qt3/mkspecs/default +else + ln -sf linux-g++ ${RPM_BUILD_ROOT}/usr/lib/qt3/mkspecs/default +fi +find ${RPM_BUILD_ROOT}/usr/lib/qt3/mkspecs -type f -perm /111 -print0 | xargs -0 chmod a-x +# +# create links in ld.so.conf path +# +install -d -m 0755 ${RPM_BUILD_ROOT}/%{_libdir} +ln -sf ../lib/qt3/%{_lib}/libqt-mt.so.3 ${RPM_BUILD_ROOT}/%{_libdir}/libqt-mt.so.3 +ln -sf ../lib/qt3/%{_lib}/libqui.so.1 ${RPM_BUILD_ROOT}/%{_libdir}/libqui.so.1 +[ "lib" != "%{_lib}" ] && \ + ln -sf ../lib/qt3 ${RPM_BUILD_ROOT}/%{_libdir}/qt3 +mkdir -p ${RPM_BUILD_ROOT}/etc/profile.d +install -m 644 %SOURCE10 %SOURCE11 ${RPM_BUILD_ROOT}/etc/profile.d +# +# default qt settings +# +mkdir -p ${RPM_BUILD_ROOT}/etc/X11 +mkdir -p ${RPM_BUILD_ROOT}/usr/lib/qt3/etc/ +ln -sf /etc/X11/ ${RPM_BUILD_ROOT}/usr/lib/qt3/etc/settings +install -m 0644 %SOURCE3 ${RPM_BUILD_ROOT}/etc/X11/qtrc +# +# clean broken links +# +if [ %_lib == "lib64" ]; then + rm ${RPM_BUILD_ROOT}/usr/lib/qt3/mkspecs/linux-g++-64/linux-g++-64 +else + rm ${RPM_BUILD_ROOT}/usr/lib/qt3/mkspecs/linux-g++/linux-g++ +fi +rm -rf ${RPM_BUILD_ROOT}/usr/lib/qt3/doc/html + +%pre +if test -L usr/lib/qt3; then + rm usr/lib/qt3 +fi + +%post +/sbin/ldconfig +if ! grep -q '^\[3.3\]' etc/X11/qtrc ; then +echo "" >> etc/X11/qtrc +echo "[3.3]" >> etc/X11/qtrc +echo "libraryPath=/opt/kde3/lib64/kde3/plugins/:/opt/kde3/lib/kde3/plugins/" >> etc/X11/qtrc +fi + +%postun -p /sbin/ldconfig + +%files +%defattr(-,root,root,755) +# FIXME provide new changelog if kb9vqf will give one +%doc changes-3.3.8b README* LICENSE* MANIFEST FAQ +%dir /usr/lib/qt3/translations +%dir /usr/lib/qt3 +%dir /usr/lib/qt3/bin +%dir /usr/lib/qt3/%{_lib} +%{_libdir}/libqt-mt.so.* +%{_libdir}/libqui.so.* +/usr/lib/qt3/bin/qtconfig +/usr/lib/qt3/%{_lib}/libqt-mt.so.* +/usr/lib/qt3/%{_lib}/libqui.so.* +%dir /usr/lib/qt3/etc +/usr/lib/qt3/etc/settings +/usr/lib/qt3/plugins +/usr/lib/qt3/bin/assistant +%lang(de) /usr/lib/qt3/translations/assistant_de.qm +%lang(ar) /usr/lib/qt3/translations/qt_ar.qm +%lang(ca) /usr/lib/qt3/translations/qt_ca.qm +%lang(cs) /usr/lib/qt3/translations/qt_cs.qm +%lang(de) /usr/lib/qt3/translations/qt_de.qm +%lang(es) /usr/lib/qt3/translations/qt_es.qm +%lang(fr) /usr/lib/qt3/translations/qt_fr.qm +%lang(he) /usr/lib/qt3/translations/qt_he.qm +%lang(ru) /usr/lib/qt3/translations/qt_ru.qm +%lang(sk) /usr/lib/qt3/translations/qt_sk.qm +%lang(it) /usr/lib/qt3/translations/qt_it.qm +%lang(ja) /usr/lib/qt3/translations/qt_ja.qm +%lang(nb) /usr/lib/qt3/translations/qt_nb.qm +%lang(pl) /usr/lib/qt3/translations/qt_pl.qm +%lang(pt) /usr/lib/qt3/translations/qt_pt-br.qm +%lang(pt) /usr/lib/qt3/translations/qt_pt.qm +%lang(zh) /usr/lib/qt3/translations/qt_zh-cn.qm +%lang(zh) /usr/lib/qt3/translations/qt_zh-tw.qm +%config(noreplace) /etc/X11/qtrc +%ifarch s390x sparc64 x86_64 ppc64 mips64 +%dir %{_libdir}/qt3 +%endif + +%files devel +%defattr(-,root,root,755) +# FIXME provide new changelog if kb9vqf will give one +%doc changes-3.3.8b +/usr/lib/qt3/bin/moc +/usr/lib/qt3/bin/qmake +/usr/lib/qt3/bin/uic +/usr/lib/qt3/include +/usr/lib/qt3/%{_lib}/libqt-mt.la +/usr/lib/qt3/%{_lib}/libqt-mt.so +/usr/lib/qt3/%{_lib}/libqt-mt.prl +/usr/lib/qt3/%{_lib}/libqui.so +/usr/lib/qt3/%{_lib}/libqui.prl +/usr/lib/qt3/mkspecs +/%_libdir/pkgconfig/qt-mt.pc +/usr/lib/qt3/%_lib/libqassistantclient.* +%config /etc/profile.d/qt3.* + +%changelog diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.history/c0/60ebbe70480e00111528b7e658abf294 b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.history/c0/60ebbe70480e00111528b7e658abf294 new file mode 100644 index 000000000..2acd61112 --- /dev/null +++ b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.history/c0/60ebbe70480e00111528b7e658abf294 @@ -0,0 +1,293 @@ +# +# spec file for package qt3-devel-doc +# +# Copyright (c) 2011 SUSE LINUX Products GmbH, Nuernberg, Germany. +# +# All modifications and additions to the file contributed by third parties +# remain the property of their copyright owners, unless otherwise agreed +# upon. The license for this file, and modifications and additions to the +# file, is the same license as for the pristine package itself (unless the +# license for the pristine package is not an Open Source License, in which +# case the license is the MIT License). An "Open Source License" is a +# license that conforms to the Open Source Definition (Version 1.9) +# published by the Open Source Initiative. + +# Please submit bugfixes or comments via http://bugs.opensuse.org/ +# + +# norootforbuild + + +Name: qt3-devel-doc +BuildRequires: cups-devel freeglut-devel freetype2-devel gcc-c++ pkgconfig qt3-devel update-desktop-files +%if %suse_version < 1130 +BuildRequires: libpng-devel +%else +BuildRequires: libpng14-devel +%endif +Url: http://www.trolltech.com/ +License: GPL, QPL +AutoReqProv: on +Summary: Documentation for the Qt 3 Development Kit +Group: Documentation/HTML +Version: 3.3.8d +Release: 1 +PreReq: /bin/grep +BuildArch: noarch +Provides: qt3-devel-tutorial +Obsoletes: qt3-devel-tutorial +Requires: qt3-devel +%define x11_free -x11-free- +%define rversion %version +# COMMON-BEGIN +# COMMON-BEGIN +%define x11_free -x11-free- +%define rversion 3.3.8b +Source0: http://mirror.its.uidaho.edu/pub/trinity/releases/3.5.13/dependencies/qt3-3.3.8.d.tar.gz +Source1: build_script.sh +Source2: qtconfig3.desktop +Source3: qtrc +Source4: assistant3.png +Source6: assistant3.desktop +Source7: designer.desktop +Source8: designer.png +Source9: linguist.desktop +Source5: linguist.png +Source10: qt3.sh +Source11: qt3.csh +# Translations did not change at 3.3.8c +Source12: qt3-3.3.8b-translations.tar.bz2 +Source100: qtkdeintegration_x11.cpp +Source101: qtkdeintegration_x11_p.h +Source102: baselibs.conf +Source200: attributes +Source201: update_spec.pl +Patch1: aliasing.diff +Patch2: head.diff +Patch4: qt3-never-strip.diff +Patch5: external-libs.diff +Patch6: 0001-dnd_optimization.patch +Patch7: 0002-dnd_active_window_fix.patch +Patch8: 0007-qpixmap_constants.patch +Patch11: 0038-dragobject-dont-prefer-unknown.patch +Patch12: qtrc-path.diff +Patch14: lib64-plugin-support.diff +Patch15: pluginmanager-fix.diff +Patch18: no-rpath.dif +Patch19: shut-up.diff +Patch20: rubberband.diff +Patch21: fix-GL-loading.diff +Patch23: fix-accessible.diff +# From http://www.freedesktop.org/wiki/Software_2fImmoduleQtDownload +# Current version from http://freedesktop.org/~daisuke/qt-x11-immodule-unified-qt3.3.5-20060318.diff.bz2 +Patch25: qt-x11-immodule-unified-qt3.3.8-20060318.diff +Patch28: fix-key-release-event-with-imm.diff +Patch29: 0047-fix-kmenu-width.diff +Patch31: limit-image-size.diff +Patch34: 0005-qpixmap_mitshm.patch +Patch35: qt-transparency.patch +Patch37: 0055-qtextedit_zoom.patch +Patch38: 0048-qclipboard_hack_80072.patch +Patch39: fix-qtranslator-crash.diff +Patch40: 0059-qpopup_has_mouse.patch +Patch41: 0060-qpopup_ignore_mousepos.patch +Patch42: add_qexport_visibility.patch +Patch43: 0056-khotkeys_input_84434.patch +Source250: enable-designer-plugins.diff +Patch53: fix-xinerama-dialog-placement.diff +Patch54: kmenu-search-fix.diff +Patch55: qt3-fix-cast.diff +Patch100: qt.patch +Patch101: qt3-arm-gcc4.patch +Patch102: xinerama.patch +Patch113: fix-assistant-path.patch +Patch117: qtimer-debug.diff +Patch119: xinerama-qpopupmenu.diff +Patch121: qt3-warnings.diff +Patch123: use-xrandr-1.2.diff +Patch125: qcstring-format-warnings.diff +Patch127: mng-reading-fix.patch +Patch128: 0079-compositing-types.patch +Patch129: 0080-net-wm-sync-request.patch +Patch132: revert-qt-3.3.8-khmer-fix.diff +Patch133: 0085-fix-buildkey.diff +Patch134: fix-xinput-clash.diff +Patch135: parseFontName.diff +Patch136: qt3-no-date.diff +Patch137: popen-leak-fix.diff +Patch138: qt3-libpng14.diff +Patch139: gcc46.diff + +BuildRoot: %{_tmppath}/%{name}-%{version}-build + +%description +This package contains the documentation for the Qt 3 Development Kit. + +You will find documentation, precompiled examples, and a tutorial for +getting started with Qt in /usr/lib/qt3/doc. + +This package contains the documentation for the Qt 3 Development Kit. + +You will find documentation, precompiled examples, and a tutorial for +getting started with Qt in /usr/lib/qt3/doc. + +This package contains the documentation for the Qt 3 Development Kit. + +You will find documentation, precompiled examples, and a tutorial for +getting started with Qt in /usr/lib/qt3/doc. + +This package contains the documentation for the Qt 3 Development Kit. + +You will find documentation, precompiled examples, and a tutorial for +getting started with Qt in /usr/lib/qt3/doc. + +%define build_sub_dirs src plugins/src tools/designer/uilib/ tools/designer/uic tools/qtconfig tools/assistant/lib tools/assistant tutorial + +%prep +%setup -q -n qt3 +%patch1 +%patch2 +%patch4 +%patch5 +%patch6 +%patch7 +%patch8 +%patch11 +%patch12 +if [ "%_lib" = "lib64" ]; then +%patch14 +fi +%patch15 +%patch18 +%patch19 +%patch20 +%patch23 +%patch25 +%patch28 +%patch29 +%patch31 +%patch34 +%patch35 +%patch37 +%patch38 +%patch39 +%patch40 +%patch41 +%patch42 +%patch43 +%patch100 +%patch102 +%patch53 +%patch54 +%patch55 +%patch101 +%patch113 +%patch117 +%patch119 +%patch121 +%patch123 +ln -sf $PWD/src/inputmethod/qinputcontextfactory.h include/ +ln -sf $PWD/src/inputmethod/qinputcontextplugin.h include/ +ln -sf $PWD/src/kernel/qinputcontext.h include/ +ln -sf $PWD/src/kernel/qinputcontextinterface_p.h include/private/ +ln -sf $PWD/src/kernel/qximinputcontext_p.h include/private/ +if [ %_lib = "lib" ]; then +sed 's,/lib64/,/lib/,' %PATCH21 | patch -p0 +else +%patch21 +fi +%patch125 +%patch127 +%patch128 +%patch129 +%patch132 +%patch133 +%patch134 +%patch135 +%patch136 +%patch137 +%if %suse_version > 1120 +%patch138 -p1 +%endif +%patch139 +# copy qt kde integration files +cp %SOURCE100 %SOURCE101 src/kernel/ +cp %SOURCE101 include/private/ +cd translations +tar xvjf %SOURCE12 +cd .. +# COMMON-END +# COMMON-END + +%description +This package contains the documentation for the Qt 3 Development Kit. + +You will find documentation, precompiled examples, and a tutorial for +getting started with Qt in /usr/lib/qt3/doc. + +This package contains the documentation for the Qt 3 Development Kit. + +You will find documentation, precompiled examples, and a tutorial for +getting started with Qt in /usr/lib/qt3/doc. + +This package contains the documentation for the Qt 3 Development Kit. + +You will find documentation, precompiled examples, and a tutorial for +getting started with Qt in /usr/lib/qt3/doc. + +This package contains the documentation for the Qt 3 Development Kit. + +You will find documentation, precompiled examples, and a tutorial for +getting started with Qt in /usr/lib/qt3/doc. + +%build +export VERSION=%suse_version +source %SOURCE1 %{version} +export WLIB=%_lib +export QTDIR=`pwd` +if [ %_lib == "lib64" ]; then +export RPM_OPT_FLAGS="$RPM_OPT_FLAGS -DUSE_LIB64_PATHES" +fi +export RPM_OPT_FLAGS="$RPM_OPT_FLAGS -fno-strict-aliasing" +# +# call build from build_script.rpmrc for threaded Qt library +# only really needed tools will be builded here, all extra tools will be +# builded in qt3.spec +# +call_configure -thread -shared -no-sql-mysql -no-sql-psql -no-sql-odbc -no-sql-sqlite $OPTIONS +cd src +make %{?jobs:-j%jobs} +cd .. + +%install +export VERSION=%suse_version +export WLIB=%_lib +export QTDIR=`pwd` +source %SOURCE1 %{version} +cd src +make INSTALL_ROOT=$RPM_BUILD_ROOT install_htmldocs +cd .. +# +# install menu entries +# +%suse_update_desktop_file -i -u qtconfig3 Qt Utility DesktopSettings +%suse_update_desktop_file -i assistant3 Qt Development Documentation + +install -d -m 0755 ${RPM_BUILD_ROOT}/%{_defaultdocdir}/qt3/ +ln -sf /usr/lib/qt3/doc/html ${RPM_BUILD_ROOT}/%{_defaultdocdir}/qt3/ +mkdir -p $RPM_BUILD_ROOT/usr/share/pixmaps/ +install -m 0644 %SOURCE4 $RPM_BUILD_ROOT/usr/share/pixmaps/ + +%clean +rm -rf ${RPM_BUILD_ROOT} + +%files +%defattr(-,root,root) +%dir /usr/lib/qt3/doc +%doc /usr/lib/qt3/doc/html +%{_docdir}/qt3/html +/usr/share/applications/qtconfig3.desktop +/usr/share/applications/assistant3.desktop +/usr/share/pixmaps/assistant3.png + +%changelog diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.history/d2/707cc05f480e00111528b7e658abf294 b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.history/d2/707cc05f480e00111528b7e658abf294 new file mode 100644 index 000000000..44cacdb7e --- /dev/null +++ b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.history/d2/707cc05f480e00111528b7e658abf294 @@ -0,0 +1,411 @@ +# +# spec file for package qt3 +# +# Copyright (c) 2011 SUSE LINUX Products GmbH, Nuernberg, Germany. +# +# All modifications and additions to the file contributed by third parties +# remain the property of their copyright owners, unless otherwise agreed +# upon. The license for this file, and modifications and additions to the +# file, is the same license as for the pristine package itself (unless the +# license for the pristine package is not an Open Source License, in which +# case the license is the MIT License). An "Open Source License" is a +# license that conforms to the Open Source Definition (Version 1.9) +# published by the Open Source Initiative. + +# Please submit bugfixes or comments via http://bugs.opensuse.org/ +# + + + +Name: qt3 +#Remember also to modify Requires in -devel package +BuildRequires: Mesa-devel c++_compiler cups-devel freetype2-devel libjpeg-devel libmng-devel pkgconfig update-desktop-files xorg-x11-devel +Url: http://www.trolltech.com/ +License: GPLv2 ; GPLv3 ; QPL .. +%if %suse_version > 1120 +BuildRequires: libpng14-compat-devel +%else +BuildRequires: libpng-devel +%endif +Group: System/Libraries +# bug437293 +%ifarch ppc64 +Obsoletes: qt3-64bit +%endif +# +Summary: A library for developing applications with graphical user interfaces +Version: 3.3.8d +Release: 110 +Provides: qt_library_%version +Recommends: kdelibs3-default-style +PreReq: /bin/grep +# COMMON-BEGIN +%define x11_free -x11-free- +%define rversion 3.3.8b +Source0: http://mirror.its.uidaho.edu/pub/trinity/releases/3.5.13/dependencies/qt3-3.3.8.d.tar.gz +Source1: build_script.sh +Source2: qtconfig3.desktop +Source3: qtrc +Source4: assistant3.png +Source6: assistant3.desktop +Source7: designer.desktop +Source8: designer.png +Source9: linguist.desktop +Source5: linguist.png +Source10: qt3.sh +Source11: qt3.csh +# Translations did not change at 3.3.8c +Source12: qt3-3.3.8b-translations.tar.bz2 +Source100: qtkdeintegration_x11.cpp +Source101: qtkdeintegration_x11_p.h +Source102: baselibs.conf +Source200: attributes +Source201: update_spec.pl +Patch1: aliasing.diff +Patch2: head.diff +Patch4: qt3-never-strip.diff +Patch5: external-libs.diff +Patch6: 0001-dnd_optimization.patch +Patch7: 0002-dnd_active_window_fix.patch +Patch8: 0007-qpixmap_constants.patch +Patch11: 0038-dragobject-dont-prefer-unknown.patch +Patch12: qtrc-path.diff +Patch14: lib64-plugin-support.diff +Patch15: pluginmanager-fix.diff +Patch18: no-rpath.dif +Patch19: shut-up.diff +Patch20: rubberband.diff +Patch21: fix-GL-loading.diff +Patch23: fix-accessible.diff +# From http://www.freedesktop.org/wiki/Software_2fImmoduleQtDownload +# Current version from http://freedesktop.org/~daisuke/qt-x11-immodule-unified-qt3.3.5-20060318.diff.bz2 +Patch25: qt-x11-immodule-unified-qt3.3.8-20060318.diff +Patch28: fix-key-release-event-with-imm.diff +Patch29: 0047-fix-kmenu-width.diff +Patch31: limit-image-size.diff +Patch34: 0005-qpixmap_mitshm.patch +Patch35: qt-transparency.patch +Patch37: 0055-qtextedit_zoom.patch +Patch38: 0048-qclipboard_hack_80072.patch +Patch39: fix-qtranslator-crash.diff +Patch40: 0059-qpopup_has_mouse.patch +Patch41: 0060-qpopup_ignore_mousepos.patch +Patch42: add_qexport_visibility.patch +Patch43: 0056-khotkeys_input_84434.patch +Source250: enable-designer-plugins.diff +Patch53: fix-xinerama-dialog-placement.diff +Patch54: kmenu-search-fix.diff +Patch55: qt3-fix-cast.diff +Patch100: qt.patch +Patch101: qt3-arm-gcc4.patch +Patch102: xinerama.patch +Patch113: fix-assistant-path.patch +Patch117: qtimer-debug.diff +Patch119: xinerama-qpopupmenu.diff +Patch121: qt3-warnings.diff +Patch123: use-xrandr-1.2.diff +Patch125: qcstring-format-warnings.diff +Patch127: mng-reading-fix.patch +Patch128: 0079-compositing-types.patch +Patch129: 0080-net-wm-sync-request.patch +Patch132: revert-qt-3.3.8-khmer-fix.diff +Patch133: 0085-fix-buildkey.diff +Patch134: fix-xinput-clash.diff +Patch135: parseFontName.diff +Patch136: qt3-no-date.diff +Patch137: popen-leak-fix.diff +Patch138: qt3-libpng14.diff +Patch139: gcc46.diff + +BuildRoot: %{_tmppath}/%{name}-%{version}-build + +%description +Qt is a program library for developing applications with graphical user +interfaces. It allows you to rapidly develop professional programs. The +Qt library is available not only for Linux but for a great number of +Unices and even for Windows. Thus it is possible to write programs that +may be easily ported to those platforms. + +You need a license for using Qt with a non-GPL application, which can +be acquired from sales@trolltech.com. + +See /usr/share/doc/packages/qt3 for details about the new features of +the current Qt library! + +%define build_sub_dirs src plugins/src tools/designer/uilib/ tools/designer/uic tools/qtconfig tools/assistant/lib tools/assistant tutorial + +%prep +%setup -q -n qt3 +%patch1 +%patch2 +%patch4 +%patch5 +%patch6 +%patch7 +%patch8 +%patch11 +%patch12 +if [ "%_lib" = "lib64" ]; then +%patch14 +fi +%patch15 +%patch18 +%patch19 +%patch20 +%patch23 +%patch25 +%patch28 +%patch29 +%patch31 +%patch34 +%patch35 +%patch37 +%patch38 +%patch39 +%patch40 +%patch41 +%patch42 +%patch43 +%patch100 +%patch102 +%patch53 +%patch54 +%patch55 +%patch101 +%patch113 +%patch117 +%patch119 +%patch121 +%patch123 +ln -sf $PWD/src/inputmethod/qinputcontextfactory.h include/ +ln -sf $PWD/src/inputmethod/qinputcontextplugin.h include/ +ln -sf $PWD/src/kernel/qinputcontext.h include/ +ln -sf $PWD/src/kernel/qinputcontextinterface_p.h include/private/ +ln -sf $PWD/src/kernel/qximinputcontext_p.h include/private/ +if [ %_lib = "lib" ]; then +sed 's,/lib64/,/lib/,' %PATCH21 | patch -p0 +else +%patch21 +fi +%patch125 +%patch127 +%patch128 +%patch129 +%patch132 +%patch133 +%patch134 +%patch135 +%patch136 +%patch137 +%if %suse_version > 1120 +%patch138 -p1 +%endif +%patch139 +# copy qt kde integration files +cp %SOURCE100 %SOURCE101 src/kernel/ +cp %SOURCE101 include/private/ +cd translations +tar xvjf %SOURCE12 +cd .. +# COMMON-END + +%package devel +License: GPLv2 ; GPLv3 ; QPL .. +Summary: Include Files and Libraries mandatory for Development +Requires: qt3 = %version +Requires: pkgconfig cups-devel freetype2-devel libmng-devel libjpeg-devel c++_compiler xorg-x11-devel +%if %suse_version > 1120 +Recommends: libpng14-compat-devel +Requires: libpng-devel +%else +Requires: libpng-devel +%endif +%if %suse_version > 1000 +Requires: Mesa-devel +%else +Requires: xorg-x11-Mesa xorg-x11-Mesa-devel +%endif +%ifnarch x86_64 s390x sparc64 ppc64 mips64 +Conflicts: devel_libs-32bit +%endif +# bug437293 +%ifarch ppc64 +Obsoletes: qt3-devel-64bit +%endif +# +Group: Development/Libraries/X11 + +%description devel +You need this package if you want to compile programs with Qt 3. It +contains the "Qt Crossplatform Development Kit 2". Under /usr/lib/qt3 +you will find include files. + +You need a license for using Qt with a non-GPL application. A license +can be acquired at sales@trolltech.com. + +%build +export VERSION=%suse_version +source %SOURCE1 %{version} +export WLIB=%_lib +export QTDIR=`pwd` +if [ %_lib == "lib64" ]; then +export RPM_OPT_FLAGS="$RPM_OPT_FLAGS -DUSE_LIB64_PATHES" +fi +export RPM_OPT_FLAGS="$RPM_OPT_FLAGS -fno-strict-aliasing" +# +# call build from build_script.rpmrc for threaded Qt library +# only really needed tools will be builded here, all extra tools will be +# builded in qt3.spec +# +call_configure -v -thread -shared -no-sql-mysql -no-sql-psql -no-sql-odbc -no-sql-sqlite $OPTIONS +for i in %build_sub_dirs ; do + cd $i + make %{?jobs:-j%jobs} + cd - +done + +%install +export VERSION=%suse_version +export WLIB=%_lib +export QTDIR=`pwd` +source %SOURCE1 %{version} +for i in %build_sub_dirs ; do + cd $i + make INSTALL_ROOT=$RPM_BUILD_ROOT install + cd - +done +post_install $RPM_BUILD_ROOT/usr/lib/qt3/ +mkdir -p $RPM_BUILD_ROOT/usr/share/pixmaps/ +sed -i -e 's, on: .*,,' $RPM_BUILD_ROOT/usr/lib/qt3/%_lib/*.la +# +# copy additional files +# +install -m 0755 bin/qmake bin/moc ${RPM_BUILD_ROOT}/usr/lib/qt3/bin/ +install -m 0755 -d ${RPM_BUILD_ROOT}/usr/lib/qt3/translations/ +install -m 0644 translations/*.qm ${RPM_BUILD_ROOT}/usr/lib/qt3/translations/ +if [ %_lib = lib64 ]; then + for i in $RPM_BUILD_ROOT/usr/lib/qt3/plugins/*/*.so; do + mv "$i" "${i%.so}.lib64.so" + done +fi +# +# move pkgconfig files +# +mkdir -p $RPM_BUILD_ROOT/%_libdir/pkgconfig +mv $RPM_BUILD_ROOT/usr/lib/qt3/%_lib/pkgconfig/*.pc \ + $RPM_BUILD_ROOT/%_libdir/pkgconfig +rmdir $RPM_BUILD_ROOT/usr/lib/qt3/%_lib/pkgconfig +# +# move docs in doc dir +# +install -d -m 0755 ${RPM_BUILD_ROOT}/%{_defaultdocdir}/qt3/ +install -d -m 0755 ${RPM_BUILD_ROOT}/usr/lib/qt3/mkspecs/ +install -d -m 0755 ${RPM_BUILD_ROOT}/usr/lib/qt3/mkspecs/ +cp -a mkspecs/* ${RPM_BUILD_ROOT}/usr/lib/qt3/mkspecs/ +if [ %_lib == "lib64" ]; then + ln -sf linux-g++-64 ${RPM_BUILD_ROOT}/usr/lib/qt3/mkspecs/default +else + ln -sf linux-g++ ${RPM_BUILD_ROOT}/usr/lib/qt3/mkspecs/default +fi +find ${RPM_BUILD_ROOT}/usr/lib/qt3/mkspecs -type f -perm /111 -print0 | xargs -0 chmod a-x +# +# create links in ld.so.conf path +# +install -d -m 0755 ${RPM_BUILD_ROOT}/%{_libdir} +ln -sf ../lib/qt3/%{_lib}/libqt-mt.so.3 ${RPM_BUILD_ROOT}/%{_libdir}/libqt-mt.so.3 +ln -sf ../lib/qt3/%{_lib}/libqui.so.1 ${RPM_BUILD_ROOT}/%{_libdir}/libqui.so.1 +[ "lib" != "%{_lib}" ] && \ + ln -sf ../lib/qt3 ${RPM_BUILD_ROOT}/%{_libdir}/qt3 +mkdir -p ${RPM_BUILD_ROOT}/etc/profile.d +install -m 644 %SOURCE10 %SOURCE11 ${RPM_BUILD_ROOT}/etc/profile.d +# +# default qt settings +# +mkdir -p ${RPM_BUILD_ROOT}/etc/X11 +mkdir -p ${RPM_BUILD_ROOT}/usr/lib/qt3/etc/ +ln -sf /etc/X11/ ${RPM_BUILD_ROOT}/usr/lib/qt3/etc/settings +install -m 0644 %SOURCE3 ${RPM_BUILD_ROOT}/etc/X11/qtrc +# +# clean broken links +# +if [ %_lib == "lib64" ]; then + rm ${RPM_BUILD_ROOT}/usr/lib/qt3/mkspecs/linux-g++-64/linux-g++-64 +else + rm ${RPM_BUILD_ROOT}/usr/lib/qt3/mkspecs/linux-g++/linux-g++ +fi +rm -rf ${RPM_BUILD_ROOT}/usr/lib/qt3/doc/html + +%pre +if test -L usr/lib/qt3; then + rm usr/lib/qt3 +fi + +%post +/sbin/ldconfig +if ! grep -q '^\[3.3\]' etc/X11/qtrc ; then +echo "" >> etc/X11/qtrc +echo "[3.3]" >> etc/X11/qtrc +echo "libraryPath=/opt/kde3/lib64/kde3/plugins/:/opt/kde3/lib/kde3/plugins/" >> etc/X11/qtrc +fi + +%postun -p /sbin/ldconfig + +%files +%defattr(-,root,root,755) +# FIXME provide new changelog if kb9vqf will give one +%doc changes-3.3.8b README* LICENSE* MANIFEST FAQ +%dir /usr/lib/qt3/translations +%dir /usr/lib/qt3 +%dir /usr/lib/qt3/bin +%dir /usr/lib/qt3/%{_lib} +%{_libdir}/libqt-mt.so.* +%{_libdir}/libqui.so.* +/usr/lib/qt3/bin/qtconfig +/usr/lib/qt3/%{_lib}/libqt-mt.so.* +/usr/lib/qt3/%{_lib}/libqui.so.* +%dir /usr/lib/qt3/etc +/usr/lib/qt3/etc/settings +/usr/lib/qt3/plugins +/usr/lib/qt3/bin/assistant +%lang(de) /usr/lib/qt3/translations/assistant_de.qm +%lang(ar) /usr/lib/qt3/translations/qt_ar.qm +%lang(ca) /usr/lib/qt3/translations/qt_ca.qm +%lang(cs) /usr/lib/qt3/translations/qt_cs.qm +%lang(de) /usr/lib/qt3/translations/qt_de.qm +%lang(es) /usr/lib/qt3/translations/qt_es.qm +%lang(fr) /usr/lib/qt3/translations/qt_fr.qm +%lang(he) /usr/lib/qt3/translations/qt_he.qm +%lang(ru) /usr/lib/qt3/translations/qt_ru.qm +%lang(sk) /usr/lib/qt3/translations/qt_sk.qm +%lang(it) /usr/lib/qt3/translations/qt_it.qm +%lang(ja) /usr/lib/qt3/translations/qt_ja.qm +%lang(nb) /usr/lib/qt3/translations/qt_nb.qm +%lang(pl) /usr/lib/qt3/translations/qt_pl.qm +%lang(pt) /usr/lib/qt3/translations/qt_pt-br.qm +%lang(pt) /usr/lib/qt3/translations/qt_pt.qm +%lang(zh) /usr/lib/qt3/translations/qt_zh-cn.qm +%lang(zh) /usr/lib/qt3/translations/qt_zh-tw.qm +%config(noreplace) /etc/X11/qtrc +%ifarch s390x sparc64 x86_64 ppc64 mips64 +%dir %{_libdir}/qt3 +%endif + +%files devel +%defattr(-,root,root,755) +# FIXME provide new changelog if kb9vqf will give one +%doc changes-3.3.8b +/usr/lib/qt3/bin/moc +/usr/lib/qt3/bin/qmake +/usr/lib/qt3/bin/uic +/usr/lib/qt3/include +/usr/lib/qt3/%{_lib}/libqt-mt.la +/usr/lib/qt3/%{_lib}/libqt-mt.so +/usr/lib/qt3/%{_lib}/libqt-mt.prl +/usr/lib/qt3/%{_lib}/libqui.so +/usr/lib/qt3/%{_lib}/libqui.prl +/usr/lib/qt3/mkspecs +/%_libdir/pkgconfig/qt-mt.pc +/usr/lib/qt3/%_lib/libqassistantclient.* +%config /etc/profile.d/qt3.* + +%changelog diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.history/e2/40d69ef6760e00111528b7e658abf294 b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.history/e2/40d69ef6760e00111528b7e658abf294 new file mode 100644 index 000000000..fa042376b --- /dev/null +++ b/opensuse/core/.metadata/.plugins/org.eclipse.core.resources/.history/e2/40d69ef6760e00111528b7e658abf294 @@ -0,0 +1,469 @@ +# +# spec file for package qt3-extensions +# +# Copyright (c) 2011 SUSE LINUX Products GmbH, Nuernberg, Germany. +# +# All modifications and additions to the file contributed by third parties +# remain the property of their copyright owners, unless otherwise agreed +# upon. The license for this file, and modifications and additions to the +# file, is the same license as for the pristine package itself (unless the +# license for the pristine package is not an Open Source License, in which +# case the license is the MIT License). An "Open Source License" is a +# license that conforms to the Open Source Definition (Version 1.9) +# published by the Open Source Initiative. + +# Please submit bugfixes or comments via http://bugs.opensuse.org/ +# + +# norootforbuild + + +Name: qt3-extensions +BuildRequires: cups-devel krb5-devel mysql-devel postgresql-devel qt3-devel sqlite2-devel unixODBC-devel update-desktop-files +%if %suse_version > 1020 +BuildRequires: fdupes +%endif +License: GPL, QPL +Version: 3.3.8d +Release: 1 +AutoReqProv: on +Requires: qt3 = %version +Group: Development/Tools/Other +Summary: Qt3 Extensions +# COMMON-BEGIN +# COMMON-BEGIN +%define x11_free -x11-free- +%define rversion 3.3.8b +Source0: http://mirror.its.uidaho.edu/pub/trinity/releases/3.5.13/dependencies/qt3-3.3.8.d.tar.gz +Source1: build_script.sh +Source2: qtconfig3.desktop +Source3: qtrc +Source4: assistant3.png +Source6: assistant3.desktop +Source7: designer.desktop +Source8: designer.png +Source9: linguist.desktop +Source5: linguist.png +Source10: qt3.sh +Source11: qt3.csh +# Translations did not change at 3.3.8d +Source12: qt3-3.3.8b-translations.tar.bz2 +Source100: qtkdeintegration_x11.cpp +Source101: qtkdeintegration_x11_p.h +Source102: baselibs.conf +Source200: attributes +Source201: update_spec.pl +Patch1: aliasing.diff +Patch2: head.diff +Patch4: qt3-never-strip.diff +Patch5: external-libs.diff +Patch8: 0007-qpixmap_constants.patch +Patch11: 0038-dragobject-dont-prefer-unknown.patch +Patch12: qtrc-path.diff +Patch14: lib64-plugin-support.diff +Patch15: pluginmanager-fix.diff +Patch18: no-rpath.dif +Patch19: shut-up.diff +Patch20: rubberband.diff +Patch21: fix-GL-loading.diff +Patch23: fix-accessible.diff +# From http://www.freedesktop.org/wiki/Software_2fImmoduleQtDownload +# Current version from http://freedesktop.org/~daisuke/qt-x11-immodule-unified-qt3.3.5-20060318.diff.bz2 +Patch25: qt-x11-immodule-unified-qt3.3.8-20060318.diff +Patch28: fix-key-release-event-with-imm.diff +Patch29: 0047-fix-kmenu-width.diff +Patch31: limit-image-size.diff +Patch34: 0005-qpixmap_mitshm.patch +Patch35: qt-transparency.patch +Patch37: 0055-qtextedit_zoom.patch +Patch38: 0048-qclipboard_hack_80072.patch +Patch39: fix-qtranslator-crash.diff +Patch40: 0059-qpopup_has_mouse.patch +Patch41: 0060-qpopup_ignore_mousepos.patch +Patch42: add_qexport_visibility.patch +Patch43: 0056-khotkeys_input_84434.patch +Source250: enable-designer-plugins.diff +Patch53: fix-xinerama-dialog-placement.diff +Patch54: kmenu-search-fix.diff +Patch55: qt3-fix-cast.diff +Patch100: qt.patch +Patch101: qt3-arm-gcc4.patch +Patch102: xinerama.patch +Patch113: fix-assistant-path.patch +Patch117: qtimer-debug.diff +Patch119: xinerama-qpopupmenu.diff +Patch121: qt3-warnings.diff +Patch123: use-xrandr-1.2.diff +Patch125: qcstring-format-warnings.diff +Patch127: mng-reading-fix.patch +Patch128: 0079-compositing-types.patch +Patch129: 0080-net-wm-sync-request.patch +Patch132: revert-qt-3.3.8-khmer-fix.diff +Patch133: 0085-fix-buildkey.diff +Patch134: fix-xinput-clash.diff +Patch135: parseFontName.diff +Patch136: qt3-no-date.diff +Patch137: popen-leak-fix.diff +Patch138: qt3-libpng14.diff +Patch139: gcc46.diff + +BuildRoot: %{_tmppath}/%{name}-%{version}-build + +%description +This package contains extension libraries for Qt 3, such as the +Netscape plug-in modules. + +This package contains extension libraries for Qt 3, such as the +Netscape plug-in modules. + +This package contains extension libraries for Qt 3, such as the +Netscape plug-in modules. + +This package contains extension libraries for Qt 3, such as the +Netscape plug-in modules. + +%define build_sub_dirs src plugins/src tools/designer/uilib/ tools/designer/uic tools/qtconfig tools/assistant/lib tools/assistant tutorial + +%prep +%setup -q -n qt3 +%patch1 +%patch2 +%patch4 +%patch5 +%patch8 +%patch11 +%patch12 +if [ "%_lib" = "lib64" ]; then +%patch14 +fi +%patch15 +%patch18 +%patch19 +%patch20 +%patch23 +%patch25 +%patch28 +%patch29 +%patch31 +%patch34 +%patch35 +%patch37 +%patch38 +%patch39 +%patch40 +%patch41 +%patch42 +%patch43 +%patch100 +%patch102 +%patch53 +%patch54 +%patch55 +%patch101 +%patch113 +%patch117 +%patch119 +%patch121 +%patch123 +ln -sf $PWD/src/inputmethod/qinputcontextfactory.h include/ +ln -sf $PWD/src/inputmethod/qinputcontextplugin.h include/ +ln -sf $PWD/src/kernel/qinputcontext.h include/ +ln -sf $PWD/src/kernel/qinputcontextinterface_p.h include/private/ +ln -sf $PWD/src/kernel/qximinputcontext_p.h include/private/ +if [ %_lib = "lib" ]; then +sed 's,/lib64/,/lib/,' %PATCH21 | patch -p0 +else +%patch21 +fi +%patch125 +%patch127 +%patch128 +%patch129 +%patch132 +%patch133 +%patch134 +%patch135 +%patch136 +%patch137 +%if %suse_version > 1120 +%patch138 -p1 +%endif +%patch139 +# copy qt kde integration files +cp %SOURCE100 %SOURCE101 src/kernel/ +cp %SOURCE101 include/private/ +cd translations +tar xvjf %SOURCE12 +cd .. +# COMMON-END +# COMMON-END + +%description +This package contains extension libraries for Qt 3, such as the +Netscape plug-in modules. + +This package contains extension libraries for Qt 3, such as the +Netscape plug-in modules. + +This package contains extension libraries for Qt 3, such as the +Netscape plug-in modules. + +This package contains extension libraries for Qt 3, such as the +Netscape plug-in modules. + +%package -n qt3-devel-examples +Summary: Programming Examples for Qt 3 +AutoReqProv: on +Group: Development/Sources +Provides: qt3-examples +Obsoletes: qt3-examples + +%description -n qt3-devel-examples +This package contains small executables with code to demonstrate Qt +programming. + +Have a look in /usr/share/doc/packages/qt3/examples/. + +%package -n qt3-mysql +Summary: MySQL Plug-In for Qt +Provides: qt3_database_plugin +Group: Productivity/Databases/Clients + +%description -n qt3-mysql +Plug-in for using the MySQL database with the generic Qt database +interface. + +%package -n qt3-unixODBC +Summary: A UnixODBC Plug-In for Qt +Provides: qt3_database_plugin +Group: Productivity/Databases/Clients + +%description -n qt3-unixODBC +A plug-in for using UnixODBC supported databases with the generic Qt +database interface. + +%package -n qt3-postgresql +Summary: A PostgreSQL Plug-In for Qt +Provides: qt3_database_plugin +Group: Productivity/Databases/Clients + +%description -n qt3-postgresql +A Plug-in for using the PostgreSQL database with the generic Qt +database interface. + +%package -n qt3-sqlite +Summary: SQLite Database Plug-In for Qt +Provides: qt3_database_plugin +Group: Development/Tools/Other + +%description -n qt3-sqlite +The Qt database supports SQLite with this plug-in. (No configured and +running daemon is required.) + +%package -n qt3-devel-tools +Summary: User Interface Builder and other tools (designer, assistant, linguist) +AutoReqProv: on +Requires: qt3-devel = %version +Provides: qt3-designer +Obsoletes: qt3-designer +Group: Development/Tools/GUI Builders + +%description -n qt3-devel-tools +The designer creates .ui files. The uic generates C++ code from these +files. The package also contains the Qt Assistant (Qt documentation +browser) and the Qt Linguist (for translations). + +%package -n qt3-man +Summary: Qt 3 Man Pages +AutoReqProv: on +Requires: qt3-devel = %version +Conflicts: qtman qt-man +Group: Documentation/Man + +%description -n qt3-man +This package contains all the man pages for all the Qt 3 classes. + +%build +export QTDIR=/usr/lib/qt3/ +export WLIB=%_lib +export VERSION=%suse_version +source %{SOURCE1} %{version} +export RPM_OPT_FLAGS="$RPM_OPT_FLAGS -fno-strict-aliasing" +# +# compile threaded version to build all tools. +# the lib itself becomes packaged from qt3.spec +# +call_configure -thread -shared -L$PWD/%_lib $OPTIONS +ln -sf /usr/lib/qt3/%_lib/* lib/ +ln -sf /usr/lib/qt3/bin/* bin/ +cd plugins/src +make %{?jobs:-j%jobs} +make INSTALL_ROOT=$RPM_BUILD_ROOT install +cd - +# +# build examples +# +cd tools/assistant/lib +make %{?jobs:-j%jobs} +cd - +cd examples +make %{?jobs:-j%jobs} +cd - +# +# build extra tools +# +cd tools +make %{?jobs:-j%jobs} +make INSTALL_ROOT=$RPM_BUILD_ROOT install +for i in qvfb qembed qconfig msg2qm mergetr ; do + cd "$i" && make %{?jobs:-j%jobs} && install -m 0755 $i ${RPM_BUILD_ROOT}/usr/lib/qt3/bin/ && cd - +done +cd .. +install -m 0755 bin/findtr bin/qt20fix bin/qtrename140 ${RPM_BUILD_ROOT}/usr/lib/qt3/bin/ +if [ %_lib = lib64 ]; then + for i in $RPM_BUILD_ROOT/usr/lib/qt3/plugins/*/*.so; do + mv "$i" "${i%.so}.lib64.so" + done +fi + +%install +export WLIB=%_lib +export VERSION=%suse_version +source %{SOURCE1} +post_install $RPM_BUILD_ROOT/usr/lib/qt3/ +# +# create default doc dir +# +install -d -m 0755 ${RPM_BUILD_ROOT}/%{_docdir}/qt3/ +# +# create links in ld.so.conf path +# +install -d -m 0755 ${RPM_BUILD_ROOT}/%{_libdir} +#install -d -m 0755 ${RPM_BUILD_ROOT}/usr/bin/ +#ln -sf ../lib/qt3/bin/designer ${RPM_BUILD_ROOT}/usr/bin/designer +#ln -sf ../lib/qt3/bin/linguist ${RPM_BUILD_ROOT}/usr/bin/linguist +%suse_update_desktop_file -i designer Qt Development GUIDesigner +%suse_update_desktop_file -i linguist Qt Development Translation +mkdir -p $RPM_BUILD_ROOT/usr/share/pixmaps +perl -pi -e 's/Icon=designer/Icon=designer3/' ${RPM_BUILD_ROOT}/usr/share/applications/designer.desktop +perl -pi -e 's,Exec=designer,Exec=/usr/lib/qt3/bin/designer,' ${RPM_BUILD_ROOT}/usr/share/applications/designer.desktop +mv ${RPM_BUILD_ROOT}/usr/share/applications/designer.desktop ${RPM_BUILD_ROOT}/usr/share/applications/designer3.desktop +install -m 0644 tools/assistant/images/designer.png $RPM_BUILD_ROOT/usr/share/pixmaps/designer3.png +rm -f ${RPM_BUILD_ROOT}/usr/share/pixmaps/designer.png +perl -pi -e 's,Exec=linguist,Exec=/usr/lib/qt3/bin/linguist,' ${RPM_BUILD_ROOT}/usr/share/applications/linguist.desktop +perl -pi -e 's,Icon=linguist,Icon=linguist3,' ${RPM_BUILD_ROOT}/usr/share/applications/linguist.desktop +mv ${RPM_BUILD_ROOT}/usr/share/pixmaps/linguist.png ${RPM_BUILD_ROOT}/usr/share/pixmaps/linguist3.png + +##### these files are not getting installed by "make install" ... bug ? +# +# +# install manpages +# +rm -rf $RPM_BUILD_ROOT/%{_mandir} +install -d $RPM_BUILD_ROOT/%{_mandir} +cp -a doc/man/* $RPM_BUILD_ROOT/%{_mandir}/ +# +# install examples +# +install -d ${RPM_BUILD_ROOT}/usr/lib/qt3/doc/ +find ./examples/ \ + -name \*.o -o -name .obj -o -name .moc -o -name Makefile \ + | xargs rm -rf +cp -a examples ${RPM_BUILD_ROOT}/usr/lib/qt3/doc/ +ln -sf /usr/lib/qt3/doc/examples ${RPM_BUILD_ROOT}/%{_docdir}/qt3/ +# +# to be sure we do not package files which are packaged in other qt3 packages +# +rpm -ql qt3 qt3-devel qt3-devel-doc \ + | while read i ; do + [ -d "$i" ] || rm -f $RPM_BUILD_ROOT/"$i" +done +# +# we do have them in qt3-devel-doc already +# +rm -f $RPM_BUILD_ROOT/usr/lib/qt3/bin/assistant +rm -f $RPM_BUILD_ROOT/usr/lib/qt3/%_lib/libqassistantclient.* +rm -f $RPM_BUILD_ROOT/usr/lib/qt3/translations/assistant_de.qm + +for l in $RPM_BUILD_ROOT/usr/lib/qt3/%_lib/*.a; do + strip --strip-unneeded $l +done + +%if %suse_version > 1020 +%fdupes -s $RPM_BUILD_ROOT +%endif + +%pre +if test -L usr/lib/qt3; then + rm usr/lib/qt3 +fi + +%clean +rm -rf ${RPM_BUILD_ROOT} + +%post +%run_ldconfig + +%post -n qt3-devel-tools +%run_ldconfig + +%files +%defattr(-,root,root) +/usr/lib/qt3/bin/qembed +/usr/lib/qt3/bin/qvfb + +%files -n qt3-mysql +%defattr(-,root,root) +%dir /usr/lib/qt3/plugins/sqldrivers +/usr/lib/qt3/plugins/sqldrivers/libqsqlmysql*.so + +%files -n qt3-postgresql +%defattr(-,root,root) +%dir /usr/lib/qt3/plugins/sqldrivers +/usr/lib/qt3/plugins/sqldrivers/libqsqlpsql*.so + +%files -n qt3-unixODBC +%defattr(-,root,root) +%dir /usr/lib/qt3/plugins/sqldrivers +/usr/lib/qt3/plugins/sqldrivers/libqsqlodbc*.so + +%files -n qt3-sqlite +%defattr(-,root,root) +%dir /usr/lib/qt3/plugins/sqldrivers +/usr/lib/qt3/plugins/sqldrivers/libqsqlite*.so + +%files -n qt3-devel-tools +%defattr(-,root,root) +#/usr/bin/designer +#/usr/bin/linguist +/usr/lib/qt3/bin/qconfig +/usr/lib/qt3/bin/findtr +/usr/lib/qt3/bin/qt20fix +/usr/lib/qt3/bin/qtrename140 +/usr/lib/qt3/bin/msg2qm +/usr/lib/qt3/bin/mergetr +/usr/lib/qt3/bin/designer +/usr/lib/qt3/bin/linguist +/usr/lib/qt3/bin/qm2ts +/usr/lib/qt3/bin/lrelease +/usr/lib/qt3/bin/lupdate +/usr/lib/qt3/templates +/usr/lib/qt3/plugins/designer +/usr/lib/qt3/phrasebooks +/usr/lib/qt3/%_lib/libdesignercore.* +/usr/lib/qt3/%_lib/libeditor.* +/usr/share/applications/* +/usr/share/pixmaps/designer3.png +/usr/share/pixmaps/linguist3.png + +%files -n qt3-devel-examples +%defattr(-,root,root) +%dir /usr/lib/qt3/doc +/%{_docdir}/qt3/examples +/usr/lib/qt3/doc/examples + +%files -n qt3-man +%defattr(-,root,root) +%{_mandir}/man*/* + +%changelog diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.browser.prefs b/opensuse/core/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.browser.prefs new file mode 100644 index 000000000..151d42e9e --- /dev/null +++ b/opensuse/core/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.browser.prefs @@ -0,0 +1,3 @@ +#Sun Nov 13 11:10:42 EST 2011 +eclipse.preferences.version=1 +internalWebBrowserHistory=http\://192.168.0.108/bamboo/browse/SUSETDE-BA-9|*|http\://192.168.0.108/bamboo/browse/SUSETDE-BA-8|*|http\://192.168.0.108/bamboo/build/admin/edit/editBuildTasks.action?buildKey\=SUSETDE-BA-JOB1|*|http\://192.168.0.108/bamboo/chain/admin/config/defaultStages.action?buildKey\=SUSETDE-BA|*|http\://192.168.0.108/bamboo/browse/SUSETDE-BA-7|*|http\://192.168.0.108/bamboo/browse/SUSETDE-BA-JOB1-6/log|*|http\://192.168.0.108/bamboo/browse/SUSETDE-BA-6|*|http\://192.168.0.108/bamboo/browse/SUSETDE-BA-5|*|http\://192.168.0.108/bamboo/browse/SUSETDE-BA/|*|http\://192.168.0.108/bamboo/chain/result/viewChainResult.action?planKey\=SUSETDE-BA&buildNumber\=5|*|http\://192.168.0.108/bamboo/userlogin\!default.action?os_destination\=%2Fuserlogin\!default.action%3Fos_destination%3D%252Fchain%252Fresult%252FviewChainResult.action%253FplanKey%253DSUSETDE-BA%2526buildNumber%253D5|*|http\://192.168.0.108/bamboo/userlogin\!default.action?os_destination\=%2Fchain%2Fresult%2FviewChainResult.action%3FplanKey%3DSUSETDE-BA%26buildNumber%3D5|*|http\://192.168.0.108/bamboo/browse/SUSETDE-BA-JOB1-4/log|*|http\://192.168.0.108/bamboo/browse/SUSETDE-BA-4|*|http\://192.168.0.108/bamboo/browse/SUSETDE-BA-4/|*|http\://192.168.0.108/bamboo/browse/SUSETDE-BA/;jsessionid\=1uz0pobbhmfof1j39ayqeg4lue|*|http\://192.168.0.108/bamboo/browse/SUSETDE-BA-1|*| diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.wst.sse.core.prefs b/opensuse/core/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.wst.sse.core.prefs new file mode 100644 index 000000000..ac80b2632 --- /dev/null +++ b/opensuse/core/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.wst.sse.core.prefs @@ -0,0 +1,3 @@ +#Sun Nov 13 23:11:56 EST 2011 +task-tag-projects-already-scanned=arts,libdbus-1-tqt-0,libdbus-tqt-1-0,libtqt4,qt3,tde-filesystem,tdeaccessibility,tdeaddons,tdeartwork,tdebase,tdebindings,tdedevelop,tdeedu,tdegames,tdegraphics,tdelibs,tdemultimedia,tdenetwork,tdepim,tdesdk,tdetoys,tdeutils,tdewebdev +eclipse.preferences.version=1 diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.ltk.core.refactoring/.refactorings/.workspace/2011/11/47/refactorings.history b/opensuse/core/.metadata/.plugins/org.eclipse.ltk.core.refactoring/.refactorings/.workspace/2011/11/47/refactorings.history new file mode 100644 index 000000000..de6d7ae4d --- /dev/null +++ b/opensuse/core/.metadata/.plugins/org.eclipse.ltk.core.refactoring/.refactorings/.workspace/2011/11/47/refactorings.history @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/opensuse/core/.metadata/.plugins/org.eclipse.ltk.core.refactoring/.refactorings/.workspace/2011/11/47/refactorings.index b/opensuse/core/.metadata/.plugins/org.eclipse.ltk.core.refactoring/.refactorings/.workspace/2011/11/47/refactorings.index new file mode 100644 index 000000000..347fa6faf --- /dev/null +++ b/opensuse/core/.metadata/.plugins/org.eclipse.ltk.core.refactoring/.refactorings/.workspace/2011/11/47/refactorings.index @@ -0,0 +1 @@ +1321223970221 Delete resource 'qt3/0001-dnd_optimization.patch' -- cgit v1.2.3 From 27c9e783c6283f8916ebee3a23c6d1ba909a5126 Mon Sep 17 00:00:00 2001 From: Robert Xu Date: Sat, 19 Nov 2011 19:30:53 -0500 Subject: Thanks to Andrea Cascio for getting Qt3 3.3.8d building! --- opensuse/core/qt3/0005-qpixmap_mitshm.patch | 569 --------------------- opensuse/core/qt3/0048-qclipboard_hack_80072.patch | 51 -- opensuse/core/qt3/0055-qtextedit_zoom.patch | 4 +- opensuse/core/qt3/0056-khotkeys_input_84434.patch | 22 - opensuse/core/qt3/0059-qpopup_has_mouse.patch | 69 --- .../core/qt3/0060-qpopup_ignore_mousepos.patch | 60 --- opensuse/core/qt3/0079-compositing-types.patch | 413 --------------- opensuse/core/qt3/0080-net-wm-sync-request.patch | 301 ----------- opensuse/core/qt3/0085-fix-buildkey.diff | 22 - opensuse/core/qt3/add_qexport_visibility.patch | 4 +- opensuse/core/qt3/aliasing.diff | 2 +- opensuse/core/qt3/external-libs.diff | 2 +- opensuse/core/qt3/fix-GL-loading.diff | 44 -- opensuse/core/qt3/fix-assistant-path.patch | 2 +- .../core/qt3/fix-key-release-event-with-imm.diff | 55 -- opensuse/core/qt3/fix-qtranslator-crash.diff | 2 +- .../core/qt3/fix-xinerama-dialog-placement.diff | 13 - opensuse/core/qt3/gcc46.diff | 20 +- opensuse/core/qt3/kmenu-search-fix.diff | 2 +- opensuse/core/qt3/lib64-plugin-support.diff | 2 +- opensuse/core/qt3/limit-image-size.diff | 12 +- opensuse/core/qt3/mng-reading-fix.patch | 4 +- opensuse/core/qt3/parseFontName.diff | 2 +- opensuse/core/qt3/pluginmanager-fix.diff | 2 +- opensuse/core/qt3/qcstring-format-warnings.diff | 2 +- opensuse/core/qt3/qt-3.3.8c.diff | 58 --- opensuse/core/qt3/qt-transparency.patch | 10 +- opensuse/core/qt3/qt.patch | 270 ---------- opensuse/core/qt3/qt3-arm-gcc4.patch | 22 - opensuse/core/qt3/qt3-devel-doc.changes | 19 + opensuse/core/qt3/qt3-devel-doc.spec | 78 +-- opensuse/core/qt3/qt3-devel-doc.spec.in | 6 +- opensuse/core/qt3/qt3-extensions.changes | 19 + opensuse/core/qt3/qt3-extensions.spec | 65 +-- opensuse/core/qt3/qt3-extensions.spec.in | 6 +- opensuse/core/qt3/qt3-fix-cast.diff | 13 - opensuse/core/qt3/qt3-libpng14.diff | 22 - opensuse/core/qt3/qt3-never-strip.diff | 2 +- opensuse/core/qt3/qt3-warnings.diff | 2 +- opensuse/core/qt3/qt3.changes | 9 + opensuse/core/qt3/qt3.spec | 58 +-- opensuse/core/qt3/qtimer-debug.diff | 4 +- opensuse/core/qt3/qtkdeintegration_x11.cpp | 242 --------- opensuse/core/qt3/qtkdeintegration_x11_p.h | 59 --- opensuse/core/qt3/qtrc-path.diff | 6 +- opensuse/core/qt3/revert-iodbc-to-uodbc.diff | 22 + opensuse/core/qt3/shut-up.diff | 4 +- opensuse/core/qt3/use-xrandr-1.2.diff | 106 ---- opensuse/core/qt3/xinerama-qpopupmenu.diff | 104 ---- opensuse/core/qt3/xinerama.patch | 49 -- .../core/tde-filesystem/tde-filesystem.changes | 5 + 51 files changed, 133 insertions(+), 2808 deletions(-) delete mode 100644 opensuse/core/qt3/0005-qpixmap_mitshm.patch delete mode 100644 opensuse/core/qt3/0048-qclipboard_hack_80072.patch delete mode 100644 opensuse/core/qt3/0056-khotkeys_input_84434.patch delete mode 100644 opensuse/core/qt3/0059-qpopup_has_mouse.patch delete mode 100644 opensuse/core/qt3/0060-qpopup_ignore_mousepos.patch delete mode 100644 opensuse/core/qt3/0079-compositing-types.patch delete mode 100644 opensuse/core/qt3/0080-net-wm-sync-request.patch delete mode 100644 opensuse/core/qt3/0085-fix-buildkey.diff delete mode 100644 opensuse/core/qt3/fix-GL-loading.diff delete mode 100644 opensuse/core/qt3/fix-key-release-event-with-imm.diff delete mode 100644 opensuse/core/qt3/fix-xinerama-dialog-placement.diff delete mode 100644 opensuse/core/qt3/qt-3.3.8c.diff delete mode 100644 opensuse/core/qt3/qt.patch delete mode 100644 opensuse/core/qt3/qt3-arm-gcc4.patch delete mode 100644 opensuse/core/qt3/qt3-fix-cast.diff delete mode 100644 opensuse/core/qt3/qt3-libpng14.diff delete mode 100644 opensuse/core/qt3/qtkdeintegration_x11.cpp delete mode 100644 opensuse/core/qt3/qtkdeintegration_x11_p.h create mode 100644 opensuse/core/qt3/revert-iodbc-to-uodbc.diff delete mode 100644 opensuse/core/qt3/use-xrandr-1.2.diff delete mode 100644 opensuse/core/qt3/xinerama-qpopupmenu.diff delete mode 100644 opensuse/core/qt3/xinerama.patch diff --git a/opensuse/core/qt3/0005-qpixmap_mitshm.patch b/opensuse/core/qt3/0005-qpixmap_mitshm.patch deleted file mode 100644 index e6683f726..000000000 --- a/opensuse/core/qt3/0005-qpixmap_mitshm.patch +++ /dev/null @@ -1,569 +0,0 @@ -qt-bugs@ issue : 11790 (part of) -applied: no -author: Lubos Lunak - -NOTE: Needs #define QT_MITSHM in the matching qplatformdefs.h file. This - patch does so only for linux-g++ and linux-g++-distcc platforms. - -MITSHM extension support for QPixmap<->QImage conversions. - -Hello, - - the review and apply the attached patches that improve performance of -QImage->QPixmap conversions. They should be applied in order -'mitshm','more_local' and 'fast', but they're independent from each other -(well, besides merging problems). - - Mitshm patch adds MITSHM extension support for both -QPixmap::convertFromImage() and QPixmap::convertToImage(). I've noticed there -was some MITSHM support already, turned off by default, but it was used only -for QPixmap::xForm() , and it used shared pixmaps (and I'd bet nobody uses -it). My patch adds shared ximages support for faster pixmap<->image -conversions. Since I don't understand the xForm() code much, and I didn't -want to do anything with it, I added three #define's: - - QT_MITSHM generally enabling MITSHM support, which should be set in -qplatformsdefs.h (or wherever you setup platform specific stuff), it can be -enabled at least on Linux - - QT_MITSHM_CONVERSIONS - this is for my new code - - QT_MITSHM_XFORM - this is for the xForm() code - There's one more #define, QT_MITSHM_RMID_IGNORES_REFCOUNT. Glibc -documentation of shmctl( ... IPC_RMID ) quite clearly says that the memory -segment is freed only after the refcount increased by shmat() and decreased -by shmdt() is 0. However, at least according to -http://bugs.kde.org/show_bug.cgi?id=27517 , this doesn't happen on other -platforms for some strange reason. Such platforms should have this #define if -you ever consider supporting MITSHM on them. - - The lower limit for using MITSHM for the image is about 8KiB -(width*height*depth > 100*100*32 ). Also, BestOptim in such case doesn't keep -the ximage, as the shared ximage is always freed before the function returns -(I don't know if it's worth copying it). - - The second patch ('more_local'), in short, does nothing. Besides improving -performance by about 10% by making variables more "local", making few of them -const, and also making some of them unsigned (this help gcc for some reason). - - The last one, 'fast', moves some if's out of the loops, and handles some most -common case specially (15bpp, 16bpp and 32bpp ximage depths). 32bpp case, if -the endianess matches, is simply uses memcpy(), for the 15/16bpp depth, -variables are replaced directly by matching values, statements are a bit -reordered and merged when suitable, and again, in case endianess matches, -pixels are written simply as Q_INT16. Most probably it would also help to -process two pixels at once and write them as Q_INT32, but I didn't want to -complicate the code too much (later >;) ). - - The last snippet of 'fast' handles case when xi->bytes_per_line is not equal -to width for 8bpp ximage. I'm not actually sure if that can ever happen, but -since I've already written it *shrug*. - - The 'more_local' and 'fast' patches change only convertFromImage(), as I -don't think convertToImage() is that performance critical (but it's as -unoptimized as convertFromImage() was). - - Maybe some numbers. The difference is of course mainly visible with larger -pixmaps. The two optimizations alone reduce the time to 50% for 32bpp, to 70% -for 16bpp. The MITSHM support, when other patches are already applied too, -for 32bpp images saves about 33%. Together, the total time is reduced to -about 40% for 32bpp. Imlib probably still beats that, but at least this -obsoletes KPixmapIO. - - ---- src/kernel/qpixmap_x11.cpp -+++ src/kernel/qpixmap_x11.cpp -@@ -37,7 +37,19 @@ - - // NOT REVISED - -+#include "qplatformdefs.h" -+ -+#if defined(Q_OS_WIN32) && defined(QT_MITSHM) -+#undef QT_MITSHM -+#endif -+ -+#ifdef QT_MITSHM -+ -+// Use the MIT Shared Memory extension for pixmap<->image conversions -+#define QT_MITSHM_CONVERSIONS -+ - // Uncomment the next line to enable the MIT Shared Memory extension -+// for QPixmap::xForm() - // - // WARNING: This has some problems: - // -@@ -45,14 +57,13 @@ - // 2. Qt does not handle the ShmCompletion message, so you will - // get strange effects if you xForm() repeatedly. - // --// #define QT_MITSHM -+// #define QT_MITSHM_XFORM - --#if defined(Q_OS_WIN32) && defined(QT_MITSHM) --#undef QT_MITSHM -+#else -+#undef QT_MITSHM_CONVERSIONS -+#undef QT_MITSHM_XFORM - #endif - --#include "qplatformdefs.h" -- - #include "qbitmap.h" - #include "qpaintdevicemetrics.h" - #include "qimage.h" -@@ -91,7 +102,7 @@ inline static void qSafeXDestroyImage( X - MIT Shared Memory Extension support: makes xForm noticeably (~20%) faster. - *****************************************************************************/ - --#if defined(QT_MITSHM) -+#if defined(QT_MITSHM_XFORM) - - static bool xshminit = FALSE; - static XShmSegmentInfo xshminfo; -@@ -173,8 +184,100 @@ static bool qt_create_mitshm_buffer( con - // return FALSE; - // } - --#endif // QT_MITSHM -+#endif // QT_MITSHM_XFORM -+ -+#ifdef QT_MITSHM_CONVERSIONS -+ -+static bool qt_mitshm_error = false; -+static int qt_mitshm_errorhandler( Display*, XErrorEvent* ) -+{ -+ qt_mitshm_error = true; -+ return 0; -+} -+ -+static XImage* qt_XShmCreateImage( Display* dpy, Visual* visual, unsigned int depth, -+ int format, int /*offset*/, char* /*data*/, unsigned int width, unsigned int height, -+ int /*bitmap_pad*/, int /*bytes_per_line*/, XShmSegmentInfo* shminfo ) -+{ -+ if( width * height * depth < 100*100*32 ) -+ return NULL; -+ static int shm_inited = -1; -+ if( shm_inited == -1 ) { -+ if( XShmQueryExtension( dpy )) -+ shm_inited = 1; -+ else -+ shm_inited = 0; -+ } -+ if( shm_inited == 0 ) -+ return NULL; -+ XImage* xi = XShmCreateImage( dpy, visual, depth, format, NULL, shminfo, width, -+ height ); -+ if( xi == NULL ) -+ return NULL; -+ shminfo->shmid = shmget( IPC_PRIVATE, xi->bytes_per_line * xi->height, -+ IPC_CREAT|0600); -+ if( shminfo->shmid < 0 ) { -+ XDestroyImage( xi ); -+ return NULL; -+ } -+ shminfo->readOnly = False; -+ shminfo->shmaddr = (char*)shmat( shminfo->shmid, 0, 0 ); -+ if( shminfo->shmaddr == (char*)-1 ) { -+ XDestroyImage( xi ); -+ shmctl( shminfo->shmid, IPC_RMID, 0 ); -+ return NULL; -+ } -+ xi->data = shminfo->shmaddr; -+#ifndef QT_MITSHM_RMID_IGNORES_REFCOUNT -+ // mark as deleted to automatically free the memory in case -+ // of a crash (but this doesn't work e.g. on Solaris) -+ shmctl( shminfo->shmid, IPC_RMID, 0 ); -+#endif -+ if( shm_inited == 1 ) { // first time -+ XErrorHandler old_h = XSetErrorHandler( qt_mitshm_errorhandler ); -+ XShmAttach( dpy, shminfo ); -+ shm_inited = 2; -+ XSync( dpy, False ); -+ XSetErrorHandler( old_h ); -+ if( qt_mitshm_error ) { // oops ... perhaps we are remote? -+ shm_inited = 0; -+ XDestroyImage( xi ); -+ shmdt( shminfo->shmaddr ); -+#ifdef QT_MITSHM_RMID_IGNORES_REFCOUNT -+ shmctl( shminfo->shmid, IPC_RMID, 0 ); -+#endif -+ return NULL; -+ } -+ } else -+ XShmAttach( dpy, shminfo ); -+ return xi; -+} -+ -+static void qt_XShmDestroyImage( XImage* xi, XShmSegmentInfo* shminfo ) -+{ -+ XShmDetach( QPaintDevice::x11AppDisplay(), shminfo ); -+ XDestroyImage( xi ); -+ shmdt( shminfo->shmaddr ); -+#ifdef QT_MITSHM_RMID_IGNORES_REFCOUNT -+ shmctl( shminfo->shmid, IPC_RMID, 0 ); -+#endif -+} -+ -+static XImage* qt_XShmGetImage( const QPixmap* pix, int format, -+ XShmSegmentInfo* shminfo ) -+{ -+ XImage* xi = qt_XShmCreateImage( pix->x11Display(), (Visual*)pix->x11Visual(), -+ pix->depth(), format, 0, 0, pix->width(), pix->height(), 32, 0, shminfo ); -+ if( xi == NULL ) -+ return NULL; -+ if( XShmGetImage( pix->x11Display(), pix->handle(), xi, 0, 0, AllPlanes ) == False ) { -+ qt_XShmDestroyImage( xi, shminfo ); -+ return NULL; -+ } -+ return xi; -+} - -+#endif // QT_MITSHM_CONVERSIONS - - /***************************************************************************** - Internal functions -@@ -627,9 +730,20 @@ QImage QPixmap::convertToImage() const - d = 32; // > 8 ==> 32 - - XImage *xi = (XImage *)data->ximage; // any cached ximage? -- if ( !xi ) // fetch data from X server -+#ifdef QT_MITSHM_CONVERSIONS -+ bool mitshm_ximage = false; -+ XShmSegmentInfo shminfo; -+#endif -+ if ( !xi ) { // fetch data from X server -+#ifdef QT_MITSHM_CONVERSIONS -+ xi = qt_XShmGetImage( this, mono ? XYPixmap : ZPixmap, &shminfo ); -+ if( xi ) { -+ mitshm_ximage = true; -+ } else -+#endif - xi = XGetImage( x11Display(), hd, 0, 0, w, h, AllPlanes, - mono ? XYPixmap : ZPixmap ); -+ } - Q_CHECK_PTR( xi ); - if (!xi) - return image; // null image -@@ -640,15 +754,31 @@ QImage QPixmap::convertToImage() const - QImage::LittleEndian : QImage::BigEndian; - } - image.create( w, h, d, 0, bitOrder ); -- if ( image.isNull() ) // could not create image -+ if ( image.isNull() ) { // could not create image -+#ifdef QT_MITSHM_CONVERSIONS -+ if( mitshm_ximage ) -+ qt_XShmDestroyImage( xi, &shminfo ); -+ else -+#endif -+ qSafeXDestroyImage( xi ); - return image; -+ } - - const QPixmap* msk = mask(); - const QPixmap *alf = data->alphapm; - - QImage alpha; - if (alf) { -- XImage *axi = XGetImage(x11Display(), alf->hd, 0, 0, w, h, AllPlanes, ZPixmap); -+ XImage* axi; -+#ifdef QT_MITSHM_CONVERSIONS -+ bool mitshm_aximage = false; -+ XShmSegmentInfo ashminfo; -+ axi = qt_XShmGetImage( alf, ZPixmap, &ashminfo ); -+ if( axi ) { -+ mitshm_aximage = true; -+ } else -+#endif -+ axi = XGetImage(x11Display(), alf->hd, 0, 0, w, h, AllPlanes, ZPixmap); - - if (axi) { - image.setAlphaBuffer( TRUE ); -@@ -662,6 +792,11 @@ QImage QPixmap::convertToImage() const - src += axi->bytes_per_line; - } - -+#ifdef QT_MITSHM_CONVERSIONS -+ if( mitshm_aximage ) -+ qt_XShmDestroyImage( axi, &ashminfo ); -+ else -+#endif - qSafeXDestroyImage( axi ); - } - } else if (msk) { -@@ -804,6 +939,12 @@ QImage QPixmap::convertToImage() const - xi->bits_per_pixel ); - #endif - image.reset(); -+#ifdef QT_MITSHM_CONVERSIONS -+ if( mitshm_ximage ) -+ qt_XShmDestroyImage( xi, &shminfo ); -+ else -+#endif -+ qSafeXDestroyImage( xi ); - return image; - } - -@@ -909,10 +1050,22 @@ QImage QPixmap::convertToImage() const - delete [] carr; - } - if ( data->optim != BestOptim ) { // throw away image data -+#ifdef QT_MITSHM_CONVERSIONS -+ if( mitshm_ximage ) -+ qt_XShmDestroyImage( xi, &shminfo ); -+ else -+#endif - qSafeXDestroyImage( xi ); - ((QPixmap*)this)->data->ximage = 0; -- } else // keep ximage data -+ } else { // keep ximage data -+#ifdef QT_MITSHM_CONVERSIONS -+ if( mitshm_ximage ) { // copy the XImage? -+ qt_XShmDestroyImage( xi, &shminfo ); -+ xi = 0; -+ } -+#endif - ((QPixmap*)this)->data->ximage = xi; -+ } - - return image; - } -@@ -1085,6 +1238,11 @@ bool QPixmap::convertFromImage( const QI - bool trucol = (visual->c_class == TrueColor || visual->c_class == DirectColor); - int nbytes = image.numBytes(); - uchar *newbits= 0; -+ int newbits_size = 0; -+#ifdef QT_MITSHM_CONVERSIONS -+ bool mitshm_ximage = false; -+ XShmSegmentInfo shminfo; -+#endif - - if ( trucol ) { // truecolor display - QRgb pix[256]; // pixel translation table -@@ -1113,10 +1271,18 @@ bool QPixmap::convertFromImage( const QI - } - } - -+#ifdef QT_MITSHM_CONVERSIONS -+ xi = qt_XShmCreateImage( dpy, visual, dd, ZPixmap, 0, 0, w, h, 32, 0, &shminfo ); -+ if( xi != NULL ) { -+ mitshm_ximage = true; -+ newbits = (uchar*)xi->data; -+ } -+ else -+#endif - xi = XCreateImage( dpy, visual, dd, ZPixmap, 0, 0, w, h, 32, 0 ); -- Q_CHECK_PTR( xi ); - if (!xi) - return false; -+ if( newbits == NULL ) - newbits = (uchar *)malloc( xi->bytes_per_line*h ); - Q_CHECK_PTR( newbits ); - if ( !newbits ) // no memory -@@ -1323,6 +1489,7 @@ bool QPixmap::convertFromImage( const QI - } - - newbits = (uchar *)malloc( nbytes ); // copy image into newbits -+ newbits_size = nbytes; - Q_CHECK_PTR( newbits ); - if ( !newbits ) // no memory - return FALSE; -@@ -1440,11 +1607,18 @@ bool QPixmap::convertFromImage( const QI - } - - if ( !xi ) { // X image not created -+#ifdef QT_MITSHM_CONVERSIONS -+ xi = qt_XShmCreateImage( dpy, visual, dd, ZPixmap, 0, 0, w, h, 32, 0, &shminfo ); -+ if( xi != NULL ) -+ mitshm_ximage = true; -+ else -+#endif - xi = XCreateImage( dpy, visual, dd, ZPixmap, 0, 0, w, h, 32, 0 ); - if ( xi->bits_per_pixel == 16 ) { // convert 8 bpp ==> 16 bpp - ushort *p2; - int p2inc = xi->bytes_per_line/sizeof(ushort); - ushort *newerbits = (ushort *)malloc( xi->bytes_per_line * h ); -+ newbits_size = xi->bytes_per_line * h; - Q_CHECK_PTR( newerbits ); - if ( !newerbits ) // no memory - return FALSE; -@@ -1462,6 +1636,14 @@ bool QPixmap::convertFromImage( const QI - "(bpp=%d)", xi->bits_per_pixel ); - #endif - } -+#ifdef QT_MITSHM_CONVERSIONS -+ if( newbits_size > 0 && mitshm_ximage ) { // need to copy to shared memory -+ memcpy( xi->data, newbits, newbits_size ); -+ free( newbits ); -+ newbits = (uchar*)xi->data; -+ } -+ else -+#endif - xi->data = (char *)newbits; - } - -@@ -1495,19 +1677,24 @@ bool QPixmap::convertFromImage( const QI - - } - -+#ifdef QT_MITSHM_CONVERSIONS -+ if( mitshm_ximage ) -+ XShmPutImage( dpy, hd, qt_xget_readonly_gc( x11Screen(), FALSE ), -+ xi, 0, 0, 0, 0, w, h, False ); -+ else -+#endif - XPutImage( dpy, hd, qt_xget_readonly_gc( x11Screen(), FALSE ), - xi, 0, 0, 0, 0, w, h ); - -- if ( data->optim != BestOptim ) { // throw away image -- qSafeXDestroyImage( xi ); -- data->ximage = 0; -- } else { // keep ximage that we created -- data->ximage = xi; -- } - data->w = w; - data->h = h; - data->d = dd; - -+ XImage* axi = NULL; -+#ifdef QT_MITSHM_CONVERSIONS -+ bool mitshm_aximage = false; -+ XShmSegmentInfo ashminfo; -+#endif - if ( image.hasAlphaBuffer() ) { - QBitmap m; - m = image.createAlphaMask( conversion_flags ); -@@ -1543,13 +1730,22 @@ bool QPixmap::convertFromImage( const QI - data->alphapm->rendhd = - (HANDLE) XftDrawCreateAlpha( x11Display(), data->alphapm->hd, 8 ); - -- XImage *axi = XCreateImage(x11Display(), (Visual *) x11Visual(), -+#ifdef QT_MITSHM_CONVERSIONS -+ axi = qt_XShmCreateImage( x11Display(), (Visual*)x11Visual(), -+ 8, ZPixmap, 0, 0, w, h, 8, 0, &ashminfo ); -+ if( axi != NULL ) -+ mitshm_aximage = true; -+ else -+#endif -+ axi = XCreateImage(x11Display(), (Visual *) x11Visual(), - 8, ZPixmap, 0, 0, w, h, 8, 0); - - if (axi) { -+ if( axi->data==NULL ) { - // the data is deleted by qSafeXDestroyImage - axi->data = (char *) malloc(h * axi->bytes_per_line); - Q_CHECK_PTR( axi->data ); -+ } - char *aptr = axi->data; - - if (image.depth() == 32) { -@@ -1567,14 +1763,48 @@ bool QPixmap::convertFromImage( const QI - } - - GC gc = XCreateGC(x11Display(), data->alphapm->hd, 0, 0); -+ #ifdef QT_MITSHM_CONVERSIONS -+ if( mitshm_aximage ) -+ XShmPutImage( dpy, data->alphapm->hd, gc, axi, 0, 0, 0, 0, w, h, False ); -+ else -+#endif - XPutImage(dpy, data->alphapm->hd, gc, axi, 0, 0, 0, 0, w, h); - XFreeGC(x11Display(), gc); -- qSafeXDestroyImage(axi); - } - } - #endif // QT_NO_XFTFREETYPE - } - -+#ifdef QT_MITSHM_CONVERSIONS -+ if( mitshm_ximage || mitshm_aximage ) -+ XSync( x11Display(), False ); // wait until processed -+#endif -+ -+ if ( data->optim != BestOptim ) { // throw away image -+#ifdef QT_MITSHM_CONVERSIONS -+ if( mitshm_ximage ) -+ qt_XShmDestroyImage( xi, &shminfo ); -+ else -+#endif -+ qSafeXDestroyImage( xi ); -+ data->ximage = 0; -+ } else { // keep ximage that we created -+#ifdef QT_MITSHM_CONVERSIONS -+ if( mitshm_ximage ) { // copy the XImage? -+ qt_XShmDestroyImage( xi, &shminfo ); -+ xi = 0; -+ } -+#endif -+ data->ximage = xi; -+ } -+ if( axi ) { -+#ifdef QT_MITSHM_CONVERSIONS -+ if( mitshm_aximage ) -+ qt_XShmDestroyImage( axi, &ashminfo ); -+ else -+#endif -+ qSafeXDestroyImage(axi); -+ } - return TRUE; - } - -@@ -1737,7 +1967,7 @@ QPixmap QPixmap::xForm( const QWMatrix & - return pm; - } - --#if defined(QT_MITSHM) -+#if defined(QT_MITSHM_XFORM) - static bool try_once = TRUE; - if (try_once) { - try_once = FALSE; -@@ -1770,7 +2000,7 @@ QPixmap QPixmap::xForm( const QWMatrix & - dbpl = ((w*bpp+31)/32)*4; - dbytes = dbpl*h; - --#if defined(QT_MITSHM) -+#if defined(QT_MITSHM_XFORM) - if ( use_mitshm ) { - dptr = (uchar *)xshmimg->data; - uchar fillbyte = bpp == 8 ? white.pixel() : 0xff; -@@ -1786,7 +2016,7 @@ QPixmap QPixmap::xForm( const QWMatrix & - memset( dptr, Qt::white.pixel( x11Screen() ), dbytes ); - else - memset( dptr, 0xff, dbytes ); --#if defined(QT_MITSHM) -+#if defined(QT_MITSHM_XFORM) - } - #endif - -@@ -1817,7 +2047,7 @@ QPixmap QPixmap::xForm( const QWMatrix & - } else { - xbpl = (w*bpp)/8; - p_inc = dbpl - xbpl; --#if defined(QT_MITSHM) -+#if defined(QT_MITSHM_XFORM) - if ( use_mitshm ) - p_inc = xshmimg->bytes_per_line - xbpl; - #endif -@@ -1854,7 +2084,7 @@ QPixmap QPixmap::xForm( const QWMatrix & - QPixmap pm( w, h ); - pm.data->uninit = FALSE; - pm.x11SetScreen( x11Screen() ); --#if defined(QT_MITSHM) -+#if defined(QT_MITSHM_XFORM) - if ( use_mitshm ) { - XCopyArea( dpy, xshmpm, pm.handle(), gc, 0, 0, w, h, 0, 0 ); - } else { -@@ -1863,7 +2093,7 @@ QPixmap QPixmap::xForm( const QWMatrix & - ZPixmap, 0, (char *)dptr, w, h, 32, 0 ); - XPutImage( dpy, pm.handle(), gc, xi, 0, 0, 0, 0, w, h); - qSafeXDestroyImage( xi ); --#if defined(QT_MITSHM) -+#if defined(QT_MITSHM_XFORM) - } - #endif - ---- mkspecs/linux-g++/qplatformdefs.h -+++ mkspecs/linux-g++/qplatformdefs.h -@@ -102,5 +102,6 @@ - #define QT_VSNPRINTF ::vsnprintf - #endif - -+#define QT_MITSHM - - #endif // QPLATFORMDEFS_H diff --git a/opensuse/core/qt3/0048-qclipboard_hack_80072.patch b/opensuse/core/qt3/0048-qclipboard_hack_80072.patch deleted file mode 100644 index 2f508019b..000000000 --- a/opensuse/core/qt3/0048-qclipboard_hack_80072.patch +++ /dev/null @@ -1,51 +0,0 @@ -qt-bugs@ issue : none, probably even won't be -bugs.kde.org number : 80072 -applied: no -author: Lubos Lunak - -A crude hack for KDE #80072. No good idea how to fix it properly yet :(. - -================================================================================ -Index: src/kernel/qclipboard_x11.cpp -=================================================================== ---- src/kernel/qclipboard_x11.cpp.orig -+++ src/kernel/qclipboard_x11.cpp -@@ -112,6 +112,7 @@ static int pending_timer_id = 0; - static bool pending_clipboard_changed = FALSE; - static bool pending_selection_changed = FALSE; - -+Q_EXPORT bool qt_qclipboard_bailout_hack = false; - - // event capture mechanism for qt_xclb_wait_for_event - static bool waiting_for_data = FALSE; -@@ -464,6 +465,15 @@ static Bool checkForClipboardEvents(Disp - || e->xselectionclear.selection == qt_xa_clipboard))); - } - -+static bool selection_request_pending = false; -+ -+static Bool check_selection_request_pending( Display*, XEvent* e, XPointer ) -+ { -+ if( e->type == SelectionRequest && e->xselectionrequest.owner == owner->winId()) -+ selection_request_pending = true; -+ return False; -+ } -+ - bool qt_xclb_wait_for_event( Display *dpy, Window win, int type, XEvent *event, - int timeout ) - { -@@ -515,6 +525,14 @@ bool qt_xclb_wait_for_event( Display *dp - do { - if ( XCheckTypedWindowEvent(dpy,win,type,event) ) - return TRUE; -+ if( qt_qclipboard_bailout_hack ) { -+ XEvent dummy; -+ selection_request_pending = false; -+ if ( owner != NULL ) -+ XCheckIfEvent(dpy,&dummy,check_selection_request_pending,NULL); -+ if( selection_request_pending ) -+ return TRUE; -+ } - - // process other clipboard events, since someone is probably requesting data from us - XEvent e; diff --git a/opensuse/core/qt3/0055-qtextedit_zoom.patch b/opensuse/core/qt3/0055-qtextedit_zoom.patch index ad4174a1f..38cdaa8a7 100644 --- a/opensuse/core/qt3/0055-qtextedit_zoom.patch +++ b/opensuse/core/qt3/0055-qtextedit_zoom.patch @@ -11,7 +11,7 @@ Index: widgets/qtextedit.cpp ================================================================================ --- src/widgets/qtextedit.cpp +++ src/widgets/qtextedit.cpp -@@ -5767,7 +5767,11 @@ +@@ -5774,7 +5774,11 @@ void QTextEdit::zoomIn( int range ) { QFont f( QScrollView::font() ); @@ -24,7 +24,7 @@ Index: widgets/qtextedit.cpp setFont( f ); } -@@ -5782,7 +5786,11 @@ +@@ -5789,7 +5793,11 @@ void QTextEdit::zoomOut( int range ) { QFont f( QScrollView::font() ); diff --git a/opensuse/core/qt3/0056-khotkeys_input_84434.patch b/opensuse/core/qt3/0056-khotkeys_input_84434.patch deleted file mode 100644 index d6092c3e9..000000000 --- a/opensuse/core/qt3/0056-khotkeys_input_84434.patch +++ /dev/null @@ -1,22 +0,0 @@ -qt-bugs@ issue : 58251 -bugs.kde.org number : 84434 -applied: no -author: Lubos Lunak - -Fixes keyboard input action in KHotKeys (see bug #84434). - -================================================================================ ---- src/kernel/qapplication_x11.cpp -+++ src/kernel/qapplication_x11.cpp -@@ -5401,8 +5401,10 @@ - qt_auto_repeat_data *d = (qt_auto_repeat_data *) arg; - if (d->error || - event->xkey.window != d->window || -- event->xkey.keycode != d->keycode) -+ event->xkey.keycode != d->keycode) { -+ d->error = TRUE; - return FALSE; -+ } - - if (event->type == XKeyPress) { - d->error = (! d->release || event->xkey.time - d->timestamp > 10); diff --git a/opensuse/core/qt3/0059-qpopup_has_mouse.patch b/opensuse/core/qt3/0059-qpopup_has_mouse.patch deleted file mode 100644 index 18ae0081d..000000000 --- a/opensuse/core/qt3/0059-qpopup_has_mouse.patch +++ /dev/null @@ -1,69 +0,0 @@ -qt-bugs@ issue : 49417 -bugs.kde.org number : 58719 -applied: no -author: Lubos Lunak - -Hello, - - please consider applying the two attached QPopupMenu patches fixing KDE bugs - #58719 and #74778 (http://bugs.kde.org/show_bug.cgi?id=58719, - http://bugs.kde.org/show_bug.cgi?id=74778), which complain about keyboard - navigation in popup menus being very uncomfortable because of being affected - by mouse position despite mouse not being used at all. - - - hasmouse.patch - (#58719) - use keyboard to open and navigate in any popup - menu and "accidentally" hit your mouse. Depending on the mouse cursor - position either no popup entry is selected or the random popup entry - happening to be at the cursor position becomes highlighted. The patch - basically copies the 'hasmouse' code from QMenuBar which prevents the mouse - having any effect on the popup if it's outside the popup geometry. - - [ ... #74778 ... ] - -================================================================================ ---- src/widgets/qpopupmenu.cpp -+++ src/widgets/qpopupmenu.cpp -@@ -253,6 +253,7 @@ - } scroll; - QSize calcSize; - QRegion mouseMoveBuffer; -+ uint hasmouse : 1; - }; - - static QPopupMenu* active_popup_menu = 0; -@@ -272,6 +273,7 @@ - d->scroll.scrollableSize = d->scroll.topScrollableIndex = 0; - d->scroll.scrollable = QPopupMenuPrivate::Scroll::ScrollNone; - d->scroll.scrolltimer = 0; -+ d->hasmouse = 0; - isPopupMenu = TRUE; - #ifndef QT_NO_ACCEL - autoaccel = 0; -@@ -1741,6 +1743,11 @@ - - int item = itemAtPos( e->pos() ); - if ( item == -1 ) { // no valid item -+ if( !d->hasmouse ) { -+ tryMenuBar( e ); -+ return; -+ } -+ d->hasmouse = 0; - int lastActItem = actItem; - actItem = -1; - if ( lastActItem >= 0 ) -@@ -1752,6 +1759,7 @@ - } - } else { // mouse on valid item - // but did not register mouse press -+ d->hasmouse = 1; - if ( (e->state() & Qt::MouseButtonMask) && !mouseBtDn ) - mouseBtDn = TRUE; // so mouseReleaseEvent will pop down - -@@ -2160,6 +2168,7 @@ - */ - void QPopupMenu::leaveEvent( QEvent * ) - { -+ d->hasmouse = 0; - if ( testWFlags( WStyle_Tool ) && style().styleHint(QStyle::SH_PopupMenu_MouseTracking, this) ) { - int lastActItem = actItem; - actItem = -1; diff --git a/opensuse/core/qt3/0060-qpopup_ignore_mousepos.patch b/opensuse/core/qt3/0060-qpopup_ignore_mousepos.patch deleted file mode 100644 index 50d48bd35..000000000 --- a/opensuse/core/qt3/0060-qpopup_ignore_mousepos.patch +++ /dev/null @@ -1,60 +0,0 @@ -qt-bugs@ issue : 49417 -bugs.kde.org number : 74778 -applied: no -author: Lubos Lunak - - Hello, - - please consider applying the two attached QPopupMenu patches fixing KDE bugs - #58719 and #74778 (http://bugs.kde.org/show_bug.cgi?id=58719, - http://bugs.kde.org/show_bug.cgi?id=74778), which complain about keyboard - navigation in popup menus being very uncomfortable because of being affected - by mouse position despite mouse not being used at all. - - [... #58719 ... ] - - - ignoremousepos.patch - (#74778) - use keyboard to open some popup which - doesn't show up at mouse position (e.g. Alt+F3 with KWin or the context menu - key with some file selected in Konqueror). If the mouse is positioned in the - area where the popup shows, the random entry happening to be at the cursor - position becomes highlighted. - The patch fixes this by ignoring mouse events that happen at mouse position - which was current when the popup was shown, i.e. all mouse move events that - actually aren't triggered by mouse move are ignored. I first wanted to ignore - only the very first mouse move event (which should be caused by EnterNotify - for the popup) but I realized that Qt's event handling causes the popup to - possibly get more than just one initial move event, caused by LeaveNotify - events for normal widgets being transformed to mouse move events for the - popup, so I have no better idea how to solve this problem. - -================================================================================ ---- src/widgets/qpopupmenu.cpp -+++ src/widgets/qpopupmenu.cpp -@@ -254,6 +254,7 @@ - QSize calcSize; - QRegion mouseMoveBuffer; - uint hasmouse : 1; -+ QPoint ignoremousepos; - }; - - static QPopupMenu* active_popup_menu = 0; -@@ -1356,6 +1357,7 @@ - popupActive = -1; - if(style().styleHint(QStyle::SH_PopupMenu_SubMenuPopupDelay, this)) - d->mouseMoveBuffer = QRegion(); -+ d->ignoremousepos = QCursor::pos(); - } - - /*! -@@ -1703,6 +1705,11 @@ - - void QPopupMenu::mouseMoveEvent( QMouseEvent *e ) - { -+ if( e->globalPos() == d->ignoremousepos ) { -+ return; -+ } -+ d->ignoremousepos = QPoint(); -+ - motion++; - - if ( parentMenu && parentMenu->isPopupMenu ) { diff --git a/opensuse/core/qt3/0079-compositing-types.patch b/opensuse/core/qt3/0079-compositing-types.patch deleted file mode 100644 index 7899cf584..000000000 --- a/opensuse/core/qt3/0079-compositing-types.patch +++ /dev/null @@ -1,413 +0,0 @@ -qt-bugs@ issue : none -bugs.kde.org number : none -applied: no -author: Lubos Lunak - -This patch adds support for window types used for compositing (popup menu, dropdown menu, -tooltip, combobox, dnd). - ---- src/kernel/qdnd_x11.cpp.sav 2007-05-25 18:56:23.000000000 +0200 -+++ src/kernel/qdnd_x11.cpp 2007-05-31 10:30:58.000000000 +0200 -@@ -261,6 +261,7 @@ public: - QWidget(QApplication::desktop()->screen( screen ), - 0, WStyle_Customize | WStyle_Tool | WStyle_NoBorder | WX11BypassWM ), oldpmser( 0 ), oldbmser( 0 ) - { -+ x11SetWindowType( X11WindowTypeDND ); - } - - void setPixmap(QPixmap pm, QPoint hot) -@@ -1221,6 +1222,7 @@ void QDragManager::move( const QPoint & - // recreate the pixmap on the new screen... - delete qt_xdnd_deco; - qt_xdnd_deco = new QShapedPixmapWidget( screen ); -+ qt_xdnd_deco->x11SetWindowTransient( dragSource->topLevelWidget()); - if (!QWidget::mouseGrabber()) { - updatePixmap(); - qt_xdnd_deco->grabMouse(); -@@ -1774,6 +1776,7 @@ bool QDragManager::drag( QDragObject * o - - dragSource = (QWidget *)(object->parent()); - -+ qt_xdnd_deco->x11SetWindowTransient( dragSource->topLevelWidget()); - qApp->installEventFilter( this ); - qt_xdnd_source_current_time = qt_x_time; - XSetSelectionOwner( QPaintDevice::x11AppDisplay(), qt_xdnd_selection, ---- src/kernel/qapplication_x11.cpp.sav 2007-05-29 16:24:58.000000000 +0200 -+++ src/kernel/qapplication_x11.cpp 2007-05-31 10:30:58.000000000 +0200 -@@ -268,6 +268,11 @@ Atom qt_net_wm_window_type_menu = 0; - Atom qt_net_wm_window_type_utility = 0; - Atom qt_net_wm_window_type_splash = 0; - Atom qt_net_wm_window_type_override = 0; // KDE extension -+Atom qt_net_wm_window_type_dropdown_menu = 0; -+Atom qt_net_wm_window_type_popup_menu = 0; -+Atom qt_net_wm_window_type_tooltip = 0; -+Atom qt_net_wm_window_type_combo = 0; -+Atom qt_net_wm_window_type_dnd = 0; - Atom qt_net_wm_frame_strut = 0; // KDE extension - Atom qt_net_wm_state_stays_on_top = 0; // KDE extension - Atom qt_net_wm_pid = 0; -@@ -1920,6 +1925,11 @@ void qt_init_internal( int *argcptr, cha - qt_x11_intern_atom( "_NET_WM_WINDOW_TYPE_UTILITY", &qt_net_wm_window_type_utility ); - qt_x11_intern_atom( "_NET_WM_WINDOW_TYPE_SPLASH", &qt_net_wm_window_type_splash ); - qt_x11_intern_atom( "_KDE_NET_WM_WINDOW_TYPE_OVERRIDE", &qt_net_wm_window_type_override ); -+ qt_x11_intern_atom( "_NET_WM_WINDOW_TYPE_DROPDOWN_MENU", &qt_net_wm_window_type_dropdown_menu ); -+ qt_x11_intern_atom( "_NET_WM_WINDOW_TYPE_POPUP_MENU", &qt_net_wm_window_type_popup_menu ); -+ qt_x11_intern_atom( "_NET_WM_WINDOW_TYPE_TOOLTIP", &qt_net_wm_window_type_tooltip ); -+ qt_x11_intern_atom( "_NET_WM_WINDOW_TYPE_COMBO", &qt_net_wm_window_type_combo ); -+ qt_x11_intern_atom( "_NET_WM_WINDOW_TYPE_DND", &qt_net_wm_window_type_dnd ); - qt_x11_intern_atom( "_KDE_NET_WM_FRAME_STRUT", &qt_net_wm_frame_strut ); - qt_x11_intern_atom( "_NET_WM_STATE_STAYS_ON_TOP", - &qt_net_wm_state_stays_on_top ); ---- src/kernel/qwidget_x11.cpp.sav 2007-05-25 18:56:23.000000000 +0200 -+++ src/kernel/qwidget_x11.cpp 2007-05-31 10:30:58.000000000 +0200 -@@ -125,6 +125,11 @@ extern Atom qt_net_wm_window_type_menu; - extern Atom qt_net_wm_window_type_utility; - extern Atom qt_net_wm_window_type_splash; - extern Atom qt_net_wm_window_type_override; -+extern Atom qt_net_wm_window_type_dropdown_menu; -+extern Atom qt_net_wm_window_type_popup_menu; -+extern Atom qt_net_wm_window_type_combo; -+extern Atom qt_net_wm_window_type_dnd; -+extern Atom qt_net_wm_window_type_tooltip; - extern Atom qt_net_wm_pid; - extern Atom qt_net_wm_user_time; - extern Atom qt_enlightenment_desktop; -@@ -448,10 +453,6 @@ void QWidget::create( WId window, bool i - x11Colormap() ); - #endif // QT_NO_XFTFREETYPE - -- // NET window types -- long net_wintypes[7] = { 0, 0, 0, 0, 0, 0, 0 }; -- int curr_wintype = 0; -- - // NET window states - long net_winstates[6] = { 0, 0, 0, 0, 0, 0 }; - int curr_winstate = 0; -@@ -473,7 +474,6 @@ void QWidget::create( WId window, bool i - if ( testWFlags(WStyle_Splash) ) { - if (qt_net_supports(qt_net_wm_window_type_splash)) { - clearWFlags( WX11BypassWM ); -- net_wintypes[curr_wintype++] = qt_net_wm_window_type_splash; - } else { - setWFlags( WX11BypassWM | WStyle_Tool | WStyle_NoBorder ); - } -@@ -482,27 +482,22 @@ void QWidget::create( WId window, bool i - mwmhints.decorations = 0L; - mwmhints.flags |= (1L << 1); // MWM_HINTS_DECORATIONS - -- if ( testWFlags( WStyle_NoBorder ) ) { -- // override netwm type - quick and easy for KDE noborder -- net_wintypes[curr_wintype++] = qt_net_wm_window_type_override; -- } else { -- if ( testWFlags( WStyle_NormalBorder | WStyle_DialogBorder ) ) { -- mwmhints.decorations |= (1L << 1); // MWM_DECOR_BORDER -- mwmhints.decorations |= (1L << 2); // MWM_DECOR_RESIZEH -- } -+ if ( testWFlags( WStyle_NormalBorder | WStyle_DialogBorder ) ) { -+ mwmhints.decorations |= (1L << 1); // MWM_DECOR_BORDER -+ mwmhints.decorations |= (1L << 2); // MWM_DECOR_RESIZEH -+ } - -- if ( testWFlags( WStyle_Title ) ) -- mwmhints.decorations |= (1L << 3); // MWM_DECOR_TITLE -+ if ( testWFlags( WStyle_Title ) ) -+ mwmhints.decorations |= (1L << 3); // MWM_DECOR_TITLE - -- if ( testWFlags( WStyle_SysMenu ) ) -- mwmhints.decorations |= (1L << 4); // MWM_DECOR_MENU -+ if ( testWFlags( WStyle_SysMenu ) ) -+ mwmhints.decorations |= (1L << 4); // MWM_DECOR_MENU - -- if ( testWFlags( WStyle_Minimize ) ) -- mwmhints.decorations |= (1L << 5); // MWM_DECOR_MINIMIZE -+ if ( testWFlags( WStyle_Minimize ) ) -+ mwmhints.decorations |= (1L << 5); // MWM_DECOR_MINIMIZE - -- if ( testWFlags( WStyle_Maximize ) ) -- mwmhints.decorations |= (1L << 6); // MWM_DECOR_MAXIMIZE -- } -+ if ( testWFlags( WStyle_Maximize ) ) -+ mwmhints.decorations |= (1L << 6); // MWM_DECOR_MAXIMIZE - - if (testWFlags(WStyle_Tool)) { - wsa.save_under = True; -@@ -522,23 +517,6 @@ void QWidget::create( WId window, bool i - } - } - -- // ### need a better way to do this -- if (inherits("QPopupMenu")) { -- // menu netwm type -- net_wintypes[curr_wintype++] = qt_net_wm_window_type_menu; -- } else if (inherits("QToolBar")) { -- // toolbar netwm type -- net_wintypes[curr_wintype++] = qt_net_wm_window_type_toolbar; -- } else if (testWFlags(WStyle_Customize) && testWFlags(WStyle_Tool)) { -- // utility netwm type -- net_wintypes[curr_wintype++] = qt_net_wm_window_type_utility; -- } -- -- if (dialog) // dialog netwm type -- net_wintypes[curr_wintype++] = qt_net_wm_window_type_dialog; -- // normal netwm type - default -- net_wintypes[curr_wintype++] = qt_net_wm_window_type_normal; -- - // stays on top - if (testWFlags(WStyle_StaysOnTop)) { - net_winstates[curr_winstate++] = qt_net_wm_state_above; -@@ -573,6 +551,7 @@ void QWidget::create( WId window, bool i - wsa.save_under = True; - XChangeWindowAttributes( dpy, id, CWOverrideRedirect | CWSaveUnder, - &wsa ); -+ x11SetWindowType(); - } else if ( topLevel && !desktop ) { // top-level widget - QWidget *p = parentWidget(); // real parent - if (p) -@@ -632,12 +611,7 @@ void QWidget::create( WId window, bool i - else - XDeleteProperty(dpy, id, qt_xa_motif_wm_hints); - -- // set _NET_WM_WINDOW_TYPE -- if (curr_wintype > 0) -- XChangeProperty(dpy, id, qt_net_wm_window_type, XA_ATOM, 32, PropModeReplace, -- (unsigned char *) net_wintypes, curr_wintype); -- else -- XDeleteProperty(dpy, id, qt_net_wm_window_type); -+ x11SetWindowType(); - - // set _NET_WM_WINDOW_STATE - if (curr_winstate > 0) -@@ -896,6 +870,64 @@ void QWidget::reparentSys( QWidget *pare - setMouseTracking(mouse_tracking); - } - -+// Sets the EWMH (netwm) window type. Needed as a separate function -+// because create() may be too soon in some cases. -+void QWidget::x11SetWindowType( X11WindowType type ) -+{ -+ // NET window types -+ long net_wintypes[7] = { 0, 0, 0, 0, 0, 0, 0 }; -+ int curr_wintype = 0; -+ if( testWFlags(WType_Desktop)) -+ return; -+ if( type == X11WindowTypeSelect ) { -+ if ( testWFlags(WStyle_Splash)) { -+ if (qt_net_supports(qt_net_wm_window_type_splash)) { -+ net_wintypes[curr_wintype++] = qt_net_wm_window_type_splash; -+ } -+ } else if (inherits("QToolBar")) { -+ // toolbar netwm type -+ net_wintypes[curr_wintype++] = qt_net_wm_window_type_toolbar; -+ } else if (testWFlags(WStyle_Customize) && testWFlags(WStyle_Tool)) { -+ // utility netwm type -+ net_wintypes[curr_wintype++] = qt_net_wm_window_type_utility; -+ } else if (testWFlags(WType_Dialog)) { -+ // dialog netwm type -+ net_wintypes[curr_wintype++] = qt_net_wm_window_type_dialog; -+ } -+ } else if( type == X11WindowTypeCombo ) { -+ // combo netwm type -+ net_wintypes[curr_wintype++] = qt_net_wm_window_type_combo; -+ } else if( type == X11WindowTypeDND ) { -+ // dnd netwm type -+ net_wintypes[curr_wintype++] = qt_net_wm_window_type_dnd; -+ } else if( type == X11WindowTypeDropdown ) { -+ // dropdown netwm type -+ net_wintypes[curr_wintype++] = qt_net_wm_window_type_dropdown_menu; -+ } else if( type == X11WindowTypePopup ) { -+ // popup netwm type -+ net_wintypes[curr_wintype++] = qt_net_wm_window_type_popup_menu; -+ } else if( type == X11WindowTypeMenu ) { -+ // menu netwm type -+ net_wintypes[curr_wintype++] = qt_net_wm_window_type_menu; -+ } else if( type == X11WindowTypeTooltip ) { -+ // tooltip netwm type -+ net_wintypes[curr_wintype++] = qt_net_wm_window_type_tooltip; -+ } -+ -+ // normal netwm type - default -+ net_wintypes[curr_wintype++] = qt_net_wm_window_type_normal; -+ // set _NET_WM_WINDOW_TYPE -+ if (curr_wintype > 0) -+ XChangeProperty(x11Display(), winId(), qt_net_wm_window_type, XA_ATOM, 32, PropModeReplace, -+ (unsigned char *) net_wintypes, curr_wintype); -+ else -+ XDeleteProperty(x11Display(), winId(), qt_net_wm_window_type); -+} -+ -+void QWidget::x11SetWindowTransient( QWidget* parent ) -+{ -+ XSetTransientForHint( x11Display(), winId(), parent->winId()); -+} - - /*! - Translates the widget coordinate \a pos to global screen ---- src/kernel/qwidget.h.sav 2007-05-25 18:56:23.000000000 +0200 -+++ src/kernel/qwidget.h 2007-05-31 10:30:58.000000000 +0200 -@@ -464,7 +464,19 @@ public: - CGContextRef macCGContext(bool clipped=TRUE) const; - #endif - #endif -- -+#if defined(Q_WS_X11) -+ enum X11WindowType { -+ X11WindowTypeSelect, -+ X11WindowTypeCombo, -+ X11WindowTypeDND, -+ X11WindowTypeTooltip, -+ X11WindowTypeMenu, // torn-off -+ X11WindowTypeDropdown, -+ X11WindowTypePopup -+ }; -+ void x11SetWindowType( X11WindowType type = X11WindowTypeSelect ); -+ void x11SetWindowTransient( QWidget* parent ); -+#endif - void setWindowOpacity(double level); - double windowOpacity() const; - ---- src/dialogs/qdialog.cpp.sav 2007-05-25 18:56:23.000000000 +0200 -+++ src/dialogs/qdialog.cpp 2007-05-31 10:30:58.000000000 +0200 -@@ -705,7 +701,7 @@ void QDialog::show() - && qApp->mainWidget() && qApp->mainWidget()->isVisible() - && !qApp->mainWidget()->isMinimized()) { - // make sure the transient for hint is set properly for modal dialogs -- XSetTransientForHint( x11Display(), winId(), qApp->mainWidget()->winId() ); -+ x11SetWindowTransient( qApp->mainWidget()); - } - #endif // Q_WS_X11 - ---- src/widgets/qtooltip.cpp.sav 2007-05-25 18:56:23.000000000 +0200 -+++ src/widgets/qtooltip.cpp 2007-05-31 10:30:58.000000000 +0200 -@@ -72,6 +72,7 @@ public: - polish(); - setText(text); - adjustSize(); -+ x11SetWindowType( X11WindowTypeTooltip ); - } - void setWidth( int w ) { resize( sizeForWidth( w ) ); } - }; -@@ -528,6 +529,10 @@ void QTipManager::showTip() - if (!widget) - return; - -+#ifdef Q_WS_X11 -+ label->x11SetWindowTransient( widget->topLevelWidget()); -+#endif -+ - #ifdef Q_WS_MAC - QRect screen = QApplication::desktop()->availableGeometry( scr ); - #else ---- src/widgets/qcombobox.cpp.sav 2007-05-25 18:56:23.000000000 +0200 -+++ src/widgets/qcombobox.cpp 2007-05-31 10:49:13.000000000 +0200 -@@ -389,12 +389,8 @@ public: - inline QListBox * listBox() { return lBox; } - inline QComboBoxPopup * popup() { return pop; } - void updateLinedGeometry(); -- -- void setListBox( QListBox *l ) { lBox = l ; usingLBox = TRUE; -- l->setMouseTracking( TRUE );} -- -- void setPopupMenu( QComboBoxPopup * pm, bool isPopup=TRUE ) -- { pop = pm; if(isPopup) usingLBox = FALSE; } -+ void setListBox( QListBox *l ); -+ void setPopupMenu( QComboBoxPopup * pm, bool isPopup=TRUE ); - - int current; - int maxCount; -@@ -440,6 +436,30 @@ void QComboBoxData::updateLinedGeometry( - ed->setGeometry( r ); - } - -+void QComboBoxData::setListBox( QListBox *l ) -+{ -+ lBox = l; -+ usingLBox = TRUE; -+ l->setMouseTracking( TRUE ); -+#ifdef Q_WS_X11 -+ l->x11SetWindowType( QWidget::X11WindowTypeCombo ); -+ l->x11SetWindowTransient( combo->topLevelWidget()); -+#endif -+} -+ -+void QComboBoxData::setPopupMenu( QComboBoxPopup * pm, bool isPopup ) -+{ -+ pop = pm; -+ if(isPopup) -+ usingLBox = FALSE; -+#ifdef Q_WS_X11 -+ if( pm ) { -+ pm->x11SetWindowType( QWidget::X11WindowTypeCombo ); -+ pm->x11SetWindowTransient( combo->topLevelWidget()); -+ } -+#endif -+} -+ - static inline bool checkInsertIndex( const char *method, const char * name, - int count, int *index) - { ---- src/widgets/qpopupmenu.cpp.sav 2007-05-25 18:56:23.000000000 +0200 -+++ src/widgets/qpopupmenu.cpp 2007-05-31 11:09:22.000000000 +0200 -@@ -298,6 +298,9 @@ QPopupMenu::QPopupMenu( QWidget *parent, - connectModalRecursionSafety = 0; - - setFocusPolicy( StrongFocus ); -+#ifdef Q_WS_X11 -+ x11SetWindowType( X11WindowTypePopup ); -+#endif - } - - /*! -@@ -537,6 +540,29 @@ void QPopupMenu::popup( const QPoint &po - emit aboutToShow(); - updateSize(TRUE); - } -+#ifdef Q_WS_X11 -+#ifndef QT_NO_MENUBAR -+ QMenuData *top = this; // find top level -+ while ( top->parentMenu ) -+ top = top->parentMenu; -+ if( top->isMenuBar ) -+ x11SetWindowType( X11WindowTypeDropdown ); -+ if( parentMenu && parentMenu->isMenuBar ) -+ x11SetWindowTransient( static_cast< QMenuBar* >( parentMenu )->topLevelWidget()); -+#endif -+ if( parentMenu && !parentMenu->isMenuBar ) -+ x11SetWindowTransient( static_cast< QPopupMenu* >( parentMenu )); -+ if( !parentMenu ) { -+ // hackish ... try to find the main window related to this popup -+ QWidget* parent = parentWidget() ? parentWidget()->topLevelWidget() : NULL; -+ if( parent == NULL ) -+ parent = QApplication::widgetAt( pos ); -+ if( parent == NULL ) -+ parent = qApp->activeWindow(); -+ if( parent != NULL ) -+ x11SetWindowTransient( parent ); -+ } -+#endif - - int sw = screen.width(); // screen width - int sh = screen.height(); // screen height -@@ -1390,6 +1416,13 @@ void QPopupMenu::hide() - #if defined(QT_ACCESSIBILITY_SUPPORT) - QAccessible::updateAccessibility( this, 0, QAccessible::PopupMenuEnd ); - #endif -+#ifndef QT_NO_MENUBAR -+ QMenuData *top = this; // find top level -+ while ( top->parentMenu ) -+ top = top->parentMenu; -+ if( top->isMenuBar ) -+ x11SetWindowType( X11WindowTypePopup ); // reset -+#endif - parentMenu = 0; - hidePopups(); - QWidget::hide(); -@@ -2713,6 +2746,9 @@ void QPopupMenu::toggleTearOff() - geometry().topLeft(), FALSE ); - p->mitems->setAutoDelete( FALSE ); - p->tornOff = TRUE; -+#ifdef Q_WS_X11 -+ p->x11SetWindowType( X11WindowTypeMenu ); -+#endif - for ( QMenuItemListIt it( *mitems ); it.current(); ++it ) { - if ( it.current()->id() != QMenuData::d->aInt && !it.current()->widget() ) - p->mitems->append( it.current() ); diff --git a/opensuse/core/qt3/0080-net-wm-sync-request.patch b/opensuse/core/qt3/0080-net-wm-sync-request.patch deleted file mode 100644 index b3e23cd13..000000000 --- a/opensuse/core/qt3/0080-net-wm-sync-request.patch +++ /dev/null @@ -1,301 +0,0 @@ -This qt-copy patch has been slightly modified to apply to the SUSE package -(does not apply directly because of the immodule patch). - ---- src/kernel/qwidget_x11.cpp.sav 2007-08-29 15:04:42.000000000 +0200 -+++ src/kernel/qwidget_x11.cpp 2007-08-29 15:06:17.000000000 +0200 -@@ -85,6 +85,12 @@ static QWidget *keyboardGrb = 0; - extern Time qt_x_time; - extern Time qt_x_user_time; - -+#ifndef QT_NO_XSYNC -+extern Atom qt_net_wm_sync_request_counter; -+extern Atom qt_net_wm_sync_request; -+extern bool qt_use_xsync; -+#endif -+ - // defined in qfont_x11.cpp - extern bool qt_has_xft; - -@@ -593,11 +599,14 @@ void QWidget::create( WId window, bool i - - XResizeWindow( dpy, id, crect.width(), crect.height() ); - XStoreName( dpy, id, qAppName() ); -- Atom protocols[4]; -+ Atom protocols[5]; - int n = 0; - protocols[n++] = qt_wm_delete_window; // support del window protocol - protocols[n++] = qt_wm_take_focus; // support take focus window protocol - protocols[n++] = qt_net_wm_ping; // support _NET_WM_PING protocol -+#ifndef QT_NO_XSYNC -+ protocols[n++] = qt_net_wm_sync_request;// support the _NET_WM_SYNC_REQUEST protocol -+#endif - if ( testWFlags( WStyle_ContextHelp ) ) - protocols[n++] = qt_net_wm_context_help; - XSetWMProtocols( dpy, id, protocols, n ); -@@ -623,6 +632,14 @@ void QWidget::create( WId window, bool i - XChangeProperty(dpy, id, qt_net_wm_pid, XA_CARDINAL, 32, PropModeReplace, - (unsigned char *) &curr_pid, 1); - -+#ifndef QT_NO_XSYNC -+ // set _NET_WM_SYNC_COUNTER -+ createSyncCounter(); -+ long counterVal = topData()->syncCounter; -+ XChangeProperty( dpy, id, qt_net_wm_sync_request_counter, XA_CARDINAL, 32, PropModeReplace, -+ (unsigned char*) &counterVal, 1); -+#endif -+ - // when we create a toplevel widget, the frame strut should be dirty - fstrut_dirty = 1; - -@@ -722,6 +739,9 @@ void QWidget::destroy( bool destroyWindo - if ( destroyWindow ) - qt_XDestroyWindow( this, x11Display(), winid ); - } -+#ifndef QT_NO_XSYNC -+ destroySyncCounter(); -+#endif - setWinId( 0 ); - - extern void qPRCleanup( QWidget *widget ); // from qapplication_x11.cpp -@@ -781,6 +801,10 @@ void QWidget::reparentSys( QWidget *pare - destroyInputContext(); - } - -+#ifndef QT_NO_XSYNC -+ destroySyncCounter(); -+#endif -+ - if ( isTopLevel() || !parent ) // we are toplevel, or reparenting to toplevel - topData()->parentWinId = 0; - -@@ -2464,6 +2488,11 @@ void QWidget::createTLSysExtra() - // created lazily - extra->topextra->xic = 0; - #endif -+#ifndef QT_NO_XSYNC -+ extra->topextra->syncCounter = 0; -+ extra->topextra->syncRequestValue[0] = 0; -+ extra->topextra->syncRequestValue[1] = 0; -+#endif - } - - void QWidget::deleteTLSysExtra() -@@ -2510,6 +2539,51 @@ void QWidget::checkChildrenDnd() - } - } - -+ -+#ifndef QT_NO_XSYNC -+// create a window's XSyncCounter -+void QWidget::createSyncCounter() -+{ -+ if( !qt_use_xsync || !isTopLevel() || topData()->syncCounter ) -+ return; -+ XSyncValue zero; -+ XSyncIntToValue( &zero, 0 ); -+ topData()->syncCounter = XSyncCreateCounter( x11Display(), zero ); -+} -+ -+// destroy a window's XSyncCounter -+void QWidget::destroySyncCounter() -+{ -+ if( !qt_use_xsync || !extra || !extra->topextra -+ || !extra->topextra->syncCounter ) -+ return; -+ XSyncDestroyCounter( x11Display(), extra->topextra->syncCounter ); -+ extra->topextra->syncCounter = 0; -+} -+ -+// increment a window's XSyncCounter -+void QWidget::incrementSyncCounter() -+{ -+ if( qt_use_xsync && topData()->syncCounter && -+ !(topData()->syncRequestValue[0] == 0 && -+ topData()->syncRequestValue[1] == 0) ) { -+ XSyncValue val; -+ XSyncIntsToValue( &val, topData()->syncRequestValue[ 0 ], topData()->syncRequestValue[ 1 ] ); -+ XSyncSetCounter( x11Display(), topData()->syncCounter, val ); -+ topData()->syncRequestValue[0] = topData()->syncRequestValue[1] = 0; -+ } -+} -+ -+// handle _NET_WM_SYNC_REQUEST -+void QWidget::handleSyncRequest( void* ev ) -+{ -+ XEvent* xev = (XEvent*)ev; -+ topData()->syncRequestValue[ 0 ] = xev->xclient.data.l[ 2 ]; -+ topData()->syncRequestValue[ 1 ] = xev->xclient.data.l[ 3 ]; -+} -+#endif // QT_NO_XSYNC -+ -+ - /*! - \property QWidget::acceptDrops - \brief whether drop events are enabled for this widget ---- src/kernel/qt_x11_p.h.sav 2007-08-29 15:04:42.000000000 +0200 -+++ src/kernel/qt_x11_p.h 2007-08-29 15:05:27.000000000 +0200 -@@ -174,6 +174,11 @@ extern "C" { - #endif // QT_NO_XRENDER - - -+#ifndef QT_NO_XSYNC -+# include -+#endif // QT_NO_XSYNC -+ -+ - #ifndef QT_NO_XKB - # include - #endif // QT_NO_XKB ---- src/kernel/qwidget.h.sav 2007-08-29 15:04:42.000000000 +0200 -+++ src/kernel/qwidget.h 2007-08-29 15:05:52.000000000 +0200 -@@ -605,6 +605,14 @@ private: - void focusInputContext(); - void unfocusInputContext(); - void checkChildrenDnd(); -+ -+#ifndef QT_NO_XSYNC -+ void createSyncCounter(); -+ void destroySyncCounter(); -+ void incrementSyncCounter(); -+ void handleSyncRequest( void* ev ); -+#endif -+ - #elif defined(Q_WS_MAC) - uint own_id : 1, macDropEnabled : 1; - EventHandlerRef window_event; -@@ -986,6 +994,10 @@ struct Q_EXPORT QTLWExtra { - #if defined(QT_NO_IM_EXTENSIONS) - void *xic; // Input Context - #endif -+#ifndef QT_NO_XSYNC -+ ulong syncCounter; -+ uint syncRequestValue[2]; -+#endif - #endif - #if defined(Q_WS_MAC) - WindowGroupRef group; ---- src/kernel/qapplication_x11.cpp.sav 2007-08-29 15:04:42.000000000 +0200 -+++ src/kernel/qapplication_x11.cpp 2007-08-29 15:05:27.000000000 +0200 -@@ -288,6 +288,11 @@ Atom *qt_net_supported_list = 0; - Window *qt_net_virtual_root_list = 0; - - -+// X11 SYNC support -+#ifndef QT_NO_XSYNC -+Atom qt_net_wm_sync_request_counter = 0; -+Atom qt_net_wm_sync_request = 0; -+#endif - - // client leader window - Window qt_x11_wm_client_leader = 0; -@@ -312,6 +317,13 @@ static int xrandr_eventbase; - // Display - Q_EXPORT bool qt_use_xrender = FALSE; - -+#ifndef QT_NO_XSYNC -+// True if SYNC extension exists on the connected display -+bool qt_use_xsync = FALSE; -+static int xsync_eventbase; -+static int xsync_errorbase; -+#endif -+ - // modifier masks for alt/meta - detected when the application starts - static long qt_alt_mask = 0; - static long qt_meta_mask = 0; -@@ -2007,6 +2019,11 @@ void qt_init_internal( int *argcptr, cha - qt_x11_intern_atom( "UTF8_STRING", &qt_utf8_string ); - qt_x11_intern_atom( "_SGI_DESKS_MANAGER", &qt_sgi_desks_manager ); - -+#ifndef QT_NO_XSYNC -+ qt_x11_intern_atom( "_NET_WM_SYNC_REQUEST_COUNTER", &qt_net_wm_sync_request_counter ); -+ qt_x11_intern_atom( "_NET_WM_SYNC_REQUEST", &qt_net_wm_sync_request ); -+#endif -+ - qt_xdnd_setup(); - qt_x11_motifdnd_init(); - -@@ -2043,6 +2060,15 @@ void qt_init_internal( int *argcptr, cha - } - #endif // QT_NO_XRENDER - -+#ifndef QT_NO_XSYNC -+ // Try to initialize SYNC extension on the connected display -+ int xsync_major, xsync_minor; -+ if ( XSyncQueryExtension( appDpy, &xsync_eventbase, &xsync_errorbase ) && -+ XSyncInitialize( appDpy, &xsync_major, &xsync_minor ) ) { -+ qt_use_xsync = TRUE; -+ } -+#endif -+ - #ifndef QT_NO_XKB - // If XKB is detected, set the GrabsUseXKBState option so input method - // compositions continue to work (ie. deadkeys) -@@ -3196,6 +3222,10 @@ int QApplication::x11ClientMessage(QWidg - XSendEvent( event->xclient.display, event->xclient.window, - False, SubstructureNotifyMask|SubstructureRedirectMask, event ); - } -+#ifndef QT_NO_XSYNC -+ } else if (a == qt_net_wm_sync_request ) { -+ widget->handleSyncRequest( event ); -+#endif - } - } else if ( event->xclient.message_type == qt_qt_scrolldone ) { - widget->translateScrollDoneEvent(event); -@@ -5818,6 +5848,21 @@ bool QETWidget::translateScrollDoneEvent - return FALSE; - } - -+#if defined(Q_C_CALLBACKS) -+extern "C" { -+#endif -+#ifndef QT_NO_XSYNC -+static Bool qt_net_wm_sync_request_scanner(Display*, XEvent* event, XPointer arg) -+{ -+ return (event->type == ClientMessage && event->xclient.window == *(Window*)arg -+ && event->xclient.message_type == qt_wm_protocols -+ && event->xclient.data.l[ 0 ] == qt_net_wm_sync_request ); -+} -+#endif -+ -+#if defined(Q_C_CALLBACKS) -+} -+#endif - - // - // ConfigureNotify (window move and resize) event translation -@@ -5849,6 +5894,7 @@ bool QETWidget::translateConfigEvent( co - if (! extra || extra->compress_events) { - // ConfigureNotify compression for faster opaque resizing - XEvent otherEvent; -+ int compressed_configs = 0; - while ( XCheckTypedWindowEvent( x11Display(), winId(), ConfigureNotify, - &otherEvent ) ) { - if ( qt_x11EventFilter( &otherEvent ) ) -@@ -5869,7 +5915,18 @@ bool QETWidget::translateConfigEvent( co - newCPos.ry() = otherEvent.xconfigure.y + - otherEvent.xconfigure.border_width; - } -+ ++compressed_configs; -+ } -+#ifndef QT_NO_XSYNC -+ // _NET_WM_SYNC_REQUEST compression -+ Window wid = winId(); -+ while ( compressed_configs && -+ XCheckIfEvent( x11Display(), &otherEvent, -+ qt_net_wm_sync_request_scanner, (XPointer)&wid ) ) { -+ handleSyncRequest( (void*)&otherEvent ); -+ --compressed_configs; - } -+#endif - } - - QRect cr ( geometry() ); -@@ -5923,6 +5980,8 @@ bool QETWidget::translateConfigEvent( co - repaint( !testWFlags(WResizeNoErase) || transbg ); - } - -+ incrementSyncCounter(); -+ - return TRUE; - } - diff --git a/opensuse/core/qt3/0085-fix-buildkey.diff b/opensuse/core/qt3/0085-fix-buildkey.diff deleted file mode 100644 index 5891d6144..000000000 --- a/opensuse/core/qt3/0085-fix-buildkey.diff +++ /dev/null @@ -1,22 +0,0 @@ ---- configure -+++ configure -@@ -3140,15 +3140,15 @@ case "$COMPILER" in - g++*) - # GNU C++ - QMAKE_CONF_COMPILER=`grep "QMAKE_CXX[^_A-Z0-9a-z]" $QMAKESPEC/qmake.conf | sed "s,.* *= *\(.*\)$,\1,"` -- COMPILER_VERSION=`${QMAKE_CONF_COMPILER} --version 2>/dev/null` -+ COMPILER_VERSION=`${QMAKE_CONF_COMPILER} --version 2>/dev/null | sed 's,^[^0-9]*,,g'` - case "$COMPILER_VERSION" in -- *2.95.*) -+ 2.95.*) - COMPILER_VERSION="2.95.*" - ;; -- *3.*) -+ 3.*) - COMPILER_VERSION="3.*" - ;; -- *4.*) -+ 4.*) - COMPILER_VERSION="4" - ;; - *) diff --git a/opensuse/core/qt3/add_qexport_visibility.patch b/opensuse/core/qt3/add_qexport_visibility.patch index da256192c..26399a498 100644 --- a/opensuse/core/qt3/add_qexport_visibility.patch +++ b/opensuse/core/qt3/add_qexport_visibility.patch @@ -2,7 +2,7 @@ Index: src/kernel/qgplugin.h ================================================================================ --- src/kernel/qgplugin.h +++ src/kernel/qgplugin.h -@@ -90,35 +90,19 @@ +@@ -93,35 +93,19 @@ return i->iface(); \ } @@ -50,7 +50,7 @@ Index: src/kernel/qgplugin.h struct QUnknownInterface; --- src/tools/qglobal.h +++ src/tools/qglobal.h -@@ -882,6 +882,10 @@ +@@ -885,6 +885,10 @@ # define Q_TEMPLATE_EXTERN # undef Q_DISABLE_COPY /* avoid unresolved externals */ # endif diff --git a/opensuse/core/qt3/aliasing.diff b/opensuse/core/qt3/aliasing.diff index 88ef366b5..d3e2f58ea 100644 --- a/opensuse/core/qt3/aliasing.diff +++ b/opensuse/core/qt3/aliasing.diff @@ -1,6 +1,6 @@ --- src/qt.pro +++ src/qt.pro -@@ -40,6 +40,8 @@ +@@ -41,6 +41,8 @@ XML_CPP = xml STYLES_CPP = styles EMBEDDED_CPP = embedded diff --git a/opensuse/core/qt3/external-libs.diff b/opensuse/core/qt3/external-libs.diff index dcf7f04ae..c11174071 100644 --- a/opensuse/core/qt3/external-libs.diff +++ b/opensuse/core/qt3/external-libs.diff @@ -67,7 +67,7 @@ target.path += $$plugins.path/sqldrivers --- src/tools/qcstring.cpp +++ src/tools/qcstring.cpp -@@ -50,7 +50,7 @@ +@@ -53,7 +53,7 @@ #include #include #ifndef QT_NO_COMPRESS diff --git a/opensuse/core/qt3/fix-GL-loading.diff b/opensuse/core/qt3/fix-GL-loading.diff deleted file mode 100644 index 61c2f379a..000000000 --- a/opensuse/core/qt3/fix-GL-loading.diff +++ /dev/null @@ -1,44 +0,0 @@ ---- src/opengl/qgl_x11.cpp -+++ src/opengl/qgl_x11.cpp 2004/04/13 14:56:00 -@@ -267,7 +267,7 @@ - typedef Status (*_XmuLookupStandardColormap)( Display *dpy, int screen, VisualID visualid, unsigned int depth, - Atom property, Bool replace, Bool retain ); - _XmuLookupStandardColormap qt_XmuLookupStandardColormap; -- qt_XmuLookupStandardColormap = (_XmuLookupStandardColormap) QLibrary::resolve("Xmu", "XmuLookupStandardColormap"); -+ qt_XmuLookupStandardColormap = (_XmuLookupStandardColormap) QLibrary::resolve("Xmu.so.6", "XmuLookupStandardColormap"); - if (!qt_XmuLookupStandardColormap) - qFatal("Unable to resolve Xmu symbols - please check your Xmu library installation."); - #define XmuLookupStandardColormap qt_XmuLookupStandardColormap -Index: src/tools/qlibrary.cpp -=================================================================== -RCS file: /home/kde/qt-copy/src/tools/qlibrary.cpp,v -retrieving revision 1.26 -diff -u -3 -p -r1.26 qlibrary.cpp ---- src/tools/qlibrary.cpp 4 Feb 2004 14:25:02 -0000 1.26 -+++ src/tools/qlibrary.cpp 2 Jun 2004 08:26:21 -0000 -@@ -424,7 +424,8 @@ QString QLibrary::library() const - } else { - tmpfilename = QString( "lib%1" ).arg( filename ); - } -- tmpfilename += filter; -+ if ( !filename.contains(".so") ) -+ tmpfilename += filter; - if(QFile::exists(tmpfilename) || it == filters.end()) { - filename = tmpfilename; - break; -Index: src/opengl/qgl_x11.cpp -=================================================================== -RCS file: /home/kde/qt-copy/src/opengl/qgl_x11.cpp,v -retrieving revision 1.34 -diff -u -3 -p -r1.34 qgl_x11.cpp ---- src/opengl/qgl_x11.cpp 21 Dec 2003 00:48:09 -0000 1.34 -+++ src/opengl/qgl_x11.cpp 2 Jun 2004 08:26:21 -0000 -@@ -116,7 +116,7 @@ bool qt_resolve_gl_symbols(bool fatal) - if (gl_syms_resolved) - return TRUE; - -- QLibrary gl("GL"); -+ QLibrary gl("GL.so.1"); - gl.setAutoUnload(FALSE); - - qt_glCallLists = (_glCallLists) gl.resolve("glCallLists"); diff --git a/opensuse/core/qt3/fix-assistant-path.patch b/opensuse/core/qt3/fix-assistant-path.patch index 3f30e7013..f508d5069 100644 --- a/opensuse/core/qt3/fix-assistant-path.patch +++ b/opensuse/core/qt3/fix-assistant-path.patch @@ -1,6 +1,6 @@ --- tools/assistant/lib/qassistantclient.cpp +++ tools/assistant/lib/qassistantclient.cpp -@@ -128,7 +128,7 @@ +@@ -135,7 +135,7 @@ : QObject( parent, name ), host ( "localhost" ) { if ( path.isEmpty() ) diff --git a/opensuse/core/qt3/fix-key-release-event-with-imm.diff b/opensuse/core/qt3/fix-key-release-event-with-imm.diff deleted file mode 100644 index 3bd1b8da2..000000000 --- a/opensuse/core/qt3/fix-key-release-event-with-imm.diff +++ /dev/null @@ -1,55 +0,0 @@ ---- src/kernel/qapplication_x11.cpp -+++ src/kernel/qapplication_x11.cpp -@@ -3294,11 +3294,7 @@ - // filtering opportunity first to ensure all input methods work - // properly regardless of application design. - --#ifndef QT_NO_IM_EXTENSIONS - if( keywidget && keywidget->isEnabled() && keywidget->isInputMethodEnabled() ) { --#else -- if( keywidget && keywidget->isEnabled() ) { --#endif - if( ( event->type==XKeyPress || event->type==XKeyRelease ) && - sm_blockUserInput ) // block user interaction during session management - return TRUE; -@@ -5220,11 +5216,12 @@ - } else { - key = (int)(long)keyDict->find( keycode ); - if ( key ) -- if( !willRepeat ) // Take out key of dictionary only if this call. -+ if( !willRepeat && statefulTranslation ) // Take out key of dictionary only if this call. - keyDict->take( keycode ); - long s = (long)textDict->find( keycode ); - if ( s ) { -- textDict->take( keycode ); -+ if( statefulTranslation ) -+ textDict->take( keycode ); - ascii = (char)(s-256); - } - } ---- src/kernel/qwidget_x11.cpp -+++ src/kernel/qwidget_x11.cpp -@@ -2699,11 +2699,10 @@ - { - QInputContext *qic = 0; - --#if !defined(QT_NO_IM_EXTENSIONS) - if ( isInputMethodEnabled() ) { -+#if !defined(QT_NO_IM_EXTENSIONS) - qic = icHolderWidget()->ic; - #else -- { - // icHolderWidget is always topLevelWidget - QTLWExtra *topdata = icHolderWidget()->topData(); - qic = (QInputContext *)topdata->xic; -@@ -2754,10 +2753,8 @@ - */ - void QWidget::createInputContext() - { --#if !defined(QT_NO_IM_EXTENSIONS) - if( !isInputMethodEnabled() || QApplication::closingDown() ) - return; --#endif - - QWidget *icWidget = icHolderWidget(); - #ifndef QT_NO_IM diff --git a/opensuse/core/qt3/fix-qtranslator-crash.diff b/opensuse/core/qt3/fix-qtranslator-crash.diff index e28d7126a..2e3488c86 100644 --- a/opensuse/core/qt3/fix-qtranslator-crash.diff +++ b/opensuse/core/qt3/fix-qtranslator-crash.diff @@ -1,6 +1,6 @@ --- src/kernel/qtranslator.cpp +++ src/kernel/qtranslator.cpp -@@ -1012,7 +1012,7 @@ +@@ -1015,7 +1015,7 @@ char con[256]; for ( ;; ) { t >> len; diff --git a/opensuse/core/qt3/fix-xinerama-dialog-placement.diff b/opensuse/core/qt3/fix-xinerama-dialog-placement.diff deleted file mode 100644 index 26ca37c16..000000000 --- a/opensuse/core/qt3/fix-xinerama-dialog-placement.diff +++ /dev/null @@ -1,13 +0,0 @@ ---- src/dialogs/qdialog.cpp -+++ src/dialogs/qdialog.cpp -@@ -803,7 +803,9 @@ - w = w->topLevelWidget(); - QRect desk; - if ( w ) { -- scrn = QApplication::desktop()->screenNumber( w ); -+ // Use mapToGlobal rather than geometry() in case w might -+ // be embedded in another application -+ scrn = QApplication::desktop()->screenNumber( w->mapToGlobal( QPoint(0,0) ) ); - } else if ( QApplication::desktop()->isVirtualDesktop() ) { - scrn = QApplication::desktop()->screenNumber( QCursor::pos() ); - } else { diff --git a/opensuse/core/qt3/gcc46.diff b/opensuse/core/qt3/gcc46.diff index beae96ff2..756aadd7b 100644 --- a/opensuse/core/qt3/gcc46.diff +++ b/opensuse/core/qt3/gcc46.diff @@ -1,20 +1,8 @@ -Index: src/tools/qvaluelist.h -=================================================================== ---- src/tools/qvaluelist.h.orig 2011-03-31 20:14:47.200973928 +0200 -+++ src/tools/qvaluelist.h 2011-03-31 20:14:55.352615654 +0200 -@@ -50,6 +50,7 @@ - #ifndef QT_NO_STL - #include - #include -+#include - #endif - - //#define QT_CHECK_VALUELIST_RANGE Index: src/tools/qvaluevector.h =================================================================== --- src/tools/qvaluevector.h.orig 2008-01-15 20:09:13.000000000 +0100 +++ src/tools/qvaluevector.h 2011-03-31 20:15:15.904712567 +0200 -@@ -244,7 +244,7 @@ public: +@@ -246,7 +246,7 @@ public: typedef const value_type& const_reference; typedef size_t size_type; #ifndef QT_NO_STL @@ -27,7 +15,7 @@ Index: src/tools/qmap.h =================================================================== --- src/tools/qmap.h.orig 2008-01-15 20:09:13.000000000 +0100 +++ src/tools/qmap.h 2011-03-31 20:24:35.802101605 +0200 -@@ -107,7 +107,7 @@ class QMapIterator +@@ -108,7 +108,7 @@ class QMapIterator #endif typedef T value_type; #ifndef QT_NO_STL @@ -36,7 +24,7 @@ Index: src/tools/qmap.h #else typedef int difference_type; #endif -@@ -223,7 +223,7 @@ class QMapConstIterator +@@ -224,7 +224,7 @@ class QMapConstIterator #endif typedef T value_type; #ifndef QT_NO_STL @@ -45,7 +33,7 @@ Index: src/tools/qmap.h #else typedef int difference_type; #endif -@@ -604,7 +604,7 @@ public: +@@ -605,7 +605,7 @@ public: typedef value_type& reference; typedef const value_type& const_reference; #ifndef QT_NO_STL diff --git a/opensuse/core/qt3/kmenu-search-fix.diff b/opensuse/core/qt3/kmenu-search-fix.diff index 8aff068ad..c63011de0 100644 --- a/opensuse/core/qt3/kmenu-search-fix.diff +++ b/opensuse/core/qt3/kmenu-search-fix.diff @@ -1,6 +1,6 @@ --- src/widgets/qpopupmenu.cpp +++ src/widgets/qpopupmenu.cpp -@@ -1354,6 +1354,7 @@ +@@ -1391,6 +1391,7 @@ performDelayedChanges(); updateSize(TRUE); QWidget::show(); diff --git a/opensuse/core/qt3/lib64-plugin-support.diff b/opensuse/core/qt3/lib64-plugin-support.diff index 384673269..e78a9cf2b 100644 --- a/opensuse/core/qt3/lib64-plugin-support.diff +++ b/opensuse/core/qt3/lib64-plugin-support.diff @@ -1,6 +1,6 @@ --- src/tools/qgpluginmanager.cpp +++ src/tools/qgpluginmanager.cpp 2004/09/25 11:46:41 -@@ -377,6 +377,9 @@ +@@ -380,6 +380,9 @@ QString basename = (*git).left( (*git).find( QChar(0xfffd) ) ); ++git; diff --git a/opensuse/core/qt3/limit-image-size.diff b/opensuse/core/qt3/limit-image-size.diff index dcf8d6f21..6d4fab3fa 100644 --- a/opensuse/core/qt3/limit-image-size.diff +++ b/opensuse/core/qt3/limit-image-size.diff @@ -2,7 +2,7 @@ Index: kernel/qasyncimageio.cpp ================================================================================ --- src/kernel/qasyncimageio.cpp +++ src/kernel/qasyncimageio.cpp -@@ -901,7 +901,12 @@ +@@ -904,7 +904,12 @@ sheight = newtop + newheight; if (img.isNull()) { @@ -16,7 +16,7 @@ Index: kernel/qasyncimageio.cpp memset( img.bits(), 0, img.numBytes() ); if (consumer) consumer->setSize(swidth, sheight); } -@@ -956,9 +961,15 @@ +@@ -959,9 +964,15 @@ if (backingstore.width() < w || backingstore.height() < h) { // We just use the backing store as a byte array @@ -35,7 +35,7 @@ Index: kernel/qasyncimageio.cpp for (int ln=0; lnalpha = enable; } @@ -73,7 +73,7 @@ Index: kernel/qasyncimageio.cpp /*! Sets the image \a width, \a height, \a depth, its number of colors -@@ -1230,6 +1254,14 @@ +@@ -1240,6 +1264,14 @@ reset(); // reset old data if ( width <= 0 || height <= 0 || depth <= 0 || numColors < 0 ) return FALSE; // invalid parameter(s) @@ -90,7 +90,7 @@ Index: kernel/qasyncimageio.cpp qWarning( "QImage::create: Bit order is required for 1 bpp images" ); --- src/kernel/qimage.h +++ src/kernel/qimage.h -@@ -194,6 +194,10 @@ +@@ -197,6 +197,10 @@ int quality=-1 ) const; bool save( QIODevice * device, const char* format, int quality=-1 ) const; diff --git a/opensuse/core/qt3/mng-reading-fix.patch b/opensuse/core/qt3/mng-reading-fix.patch index f0582ac6c..ccfd1c452 100644 --- a/opensuse/core/qt3/mng-reading-fix.patch +++ b/opensuse/core/qt3/mng-reading-fix.patch @@ -1,6 +1,6 @@ --- src/kernel/qmngio.cpp.sav 2007-02-23 14:01:19.000000000 +0100 +++ src/kernel/qmngio.cpp 2007-08-28 15:27:28.000000000 +0200 -@@ -411,8 +411,11 @@ int QMNGFormat::decode( QImage& img, QIm +@@ -414,8 +414,11 @@ int QMNGFormat::decode( QImage& img, QIm } losttime += losingtimer.elapsed(); @@ -14,7 +14,7 @@ losingtimer.start(); image = 0; -@@ -422,6 +425,13 @@ int QMNGFormat::decode( QImage& img, QIm +@@ -425,6 +428,13 @@ int QMNGFormat::decode( QImage& img, QIm // Move back unused tail memcpy(buffer,buffer+ubuffer,nbuffer); } diff --git a/opensuse/core/qt3/parseFontName.diff b/opensuse/core/qt3/parseFontName.diff index eb0c6cbea..d6ad66602 100644 --- a/opensuse/core/qt3/parseFontName.diff +++ b/opensuse/core/qt3/parseFontName.diff @@ -1,6 +1,6 @@ --- src/kernel/qfontdatabase.cpp +++ src/kernel/qfontdatabase.cpp -@@ -2470,11 +2470,14 @@ void QFontDatabase::parseFontName(const +@@ -2476,11 +2476,14 @@ void QFontDatabase::parseFontName(const int i = name.find('['); int li = name.findRev(']'); diff --git a/opensuse/core/qt3/pluginmanager-fix.diff b/opensuse/core/qt3/pluginmanager-fix.diff index 88ad08ae4..d24c38aa1 100644 --- a/opensuse/core/qt3/pluginmanager-fix.diff +++ b/opensuse/core/qt3/pluginmanager-fix.diff @@ -1,6 +1,6 @@ --- src/tools/qgpluginmanager.cpp +++ src/tools/qgpluginmanager.cpp -@@ -383,6 +383,8 @@ +@@ -389,6 +389,8 @@ sameBasename << (*git).mid( (*git).find( QChar(0xfffd) ) + 1 ); ++git; } diff --git a/opensuse/core/qt3/qcstring-format-warnings.diff b/opensuse/core/qt3/qcstring-format-warnings.diff index a597dc578..cac735dbb 100644 --- a/opensuse/core/qt3/qcstring-format-warnings.diff +++ b/opensuse/core/qt3/qcstring-format-warnings.diff @@ -1,6 +1,6 @@ --- src/tools/qcstring.h (revision 658213) +++ src/tools/qcstring.h (working copy) -@@ -161,7 +161,11 @@ public: +@@ -164,7 +164,11 @@ public: QCString copy() const; diff --git a/opensuse/core/qt3/qt-3.3.8c.diff b/opensuse/core/qt3/qt-3.3.8c.diff deleted file mode 100644 index 860e99e4b..000000000 --- a/opensuse/core/qt3/qt-3.3.8c.diff +++ /dev/null @@ -1,58 +0,0 @@ ---- src/kernel/qobject.cpp -+++ src/kernel/qobject.cpp -@@ -360,6 +360,30 @@ - } - } - -+/*! \internal -+ TQt compatibility function -+*/ -+QObjectList QObject::childrenListObject() { -+ if (children()) return *(children()); -+ else return QObjectList(); -+} -+ -+/*! \internal -+ TQt compatibility function -+*/ -+const QObjectList QObject::childrenListObject() const { -+ if (children()) return *(children()); -+ else return QObjectList(); -+} -+ -+/*! \internal -+ TQt compatibility function -+*/ -+const QObjectList QObject::objectTreesListObject() { -+ if (objectTrees()) return *(objectTrees()); -+ else return QObjectList(); -+} -+ - - /***************************************************************************** - QObject member functions ---- src/kernel/qobject.h -+++ src/kernel/qobject.h -@@ -101,8 +101,11 @@ - - QObject *child( const char *objName, const char *inheritsClass = 0, bool recursiveSearch = TRUE ); //### const in 4.0 - const QObjectList *children() const { return childObjects; } -+ QObjectList childrenListObject(); -+ const QObjectList childrenListObject() const; - - static const QObjectList *objectTrees(); -+ static const QObjectList objectTreesListObject(); - - QObjectList *queryList( const char *inheritsClass = 0, - const char *objName = 0, ---- src/tools/qglobal.h -+++ src/tools/qglobal.h -@@ -41,7 +41,7 @@ - #ifndef QGLOBAL_H - #define QGLOBAL_H - --#define QT_VERSION_STR "3.3.8b" -+#define QT_VERSION_STR "3.3.8c" - /* - QT_VERSION is (major << 16) + (minor << 8) + patch. - */ diff --git a/opensuse/core/qt3/qt-transparency.patch b/opensuse/core/qt3/qt-transparency.patch index d2de72f0d..b7bfa7b8a 100644 --- a/opensuse/core/qt3/qt-transparency.patch +++ b/opensuse/core/qt3/qt-transparency.patch @@ -1,6 +1,6 @@ --- src/kernel/qapplication.cpp +++ src/kernel/qapplication.cpp -@@ -317,6 +317,7 @@ +@@ -320,6 +320,7 @@ void qt_cleanup(); #if defined(Q_WS_X11) void qt_init( Display* dpy, Qt::HANDLE, Qt::HANDLE ); @@ -8,7 +8,7 @@ #endif Q_EXPORT bool qt_tryModalHelper( QWidget *widget, QWidget **rettop ); -@@ -905,7 +906,7 @@ +@@ -908,7 +909,7 @@ qt_init( &argc, argv, GuiClient ); } else { @@ -19,7 +19,7 @@ process_cmdline( &argc, argv ); --- src/kernel/qapplication_x11.cpp +++ src/kernel/qapplication_x11.cpp -@@ -197,6 +197,7 @@ +@@ -201,6 +201,7 @@ static Display *appDpy = 0; // X11 application display static char *appDpyName = 0; // X11 display name static bool appForeignDpy = FALSE; // we didn't create display @@ -27,7 +27,7 @@ static bool appSync = FALSE; // X11 synchronization #if defined(QT_DEBUG) static bool appNoGrab = FALSE; // X11 grabbing enabled -@@ -1610,7 +1611,7 @@ +@@ -1632,7 +1633,7 @@ setlocale( LC_ALL, "" ); // use correct char set mapping setlocale( LC_NUMERIC, "C" ); // make sprintf()/scanf() work @@ -36,7 +36,7 @@ // Qt part of other application appForeignDpy = TRUE; -@@ -2390,6 +2391,10 @@ +@@ -2432,6 +2433,10 @@ qt_init_internal( 0, 0, display, visual, colormap ); } diff --git a/opensuse/core/qt3/qt.patch b/opensuse/core/qt3/qt.patch deleted file mode 100644 index fb236265a..000000000 --- a/opensuse/core/qt3/qt.patch +++ /dev/null @@ -1,270 +0,0 @@ ---- src/dialogs/qcolordialog.cpp -+++ src/dialogs/qcolordialog.cpp -@@ -60,6 +60,10 @@ - QColor macGetColor( const QColor& initial, QWidget *parent, const char *name ); - #endif - -+#ifdef Q_WS_X11 -+#include "private/qtkdeintegration_x11_p.h" -+#endif -+ - //////////// QWellArray BEGIN - - struct QWellArrayData; -@@ -1478,7 +1482,10 @@ - QColor QColorDialog::getColor( const QColor& initial, QWidget *parent, - const char *name ) - { --#if defined(Q_WS_MAC) -+#if defined(Q_WS_X11) -+ if( QKDEIntegration::enabled()) -+ return QKDEIntegration::getColor( initial, parent, name ); -+#elif defined(Q_WS_MAC) - return macGetColor(initial, parent, name); - #endif - -@@ -1516,6 +1523,13 @@ - QWidget *parent, const char* name ) - { - #if defined(Q_WS_MAC) -+ if( QKDEIntegration::enabled()) { -+ QColor color = QKDEIntegration::getColor( QColor( initial ), parent, name ); -+ if( ok ) -+ *ok = color.isValid(); -+ return color.rgba(); -+ } -+#elif defined(Q_WS_MAC) - return macGetRgba(initial, ok, parent, name); - #endif - ---- src/dialogs/qfiledialog.cpp -+++ src/dialogs/qfiledialog.cpp -@@ -92,6 +92,10 @@ - #include "qvbox.h" - #include "qwidgetstack.h" - -+#ifdef Q_WS_X11 -+#include "private/qtkdeintegration_x11_p.h" -+#endif -+ - #ifdef Q_WS_WIN - #ifdef QT_THREAD_SUPPORT - # include -@@ -3464,7 +3468,11 @@ - if ( workingDirectory->isNull() ) - *workingDirectory = ::toRootIfNotExists( QDir::currentDirPath() ); - --#if defined(Q_WS_WIN) -+#if defined(Q_WS_X11) -+ if ( qt_use_native_dialogs && QKDEIntegration::enabled()) -+ return QKDEIntegration::getOpenFileNames( filter, workingDirectory, parent, name, -+ caption, selectedFilter, false ).first(); -+#elif defined(Q_WS_WIN) - if ( qt_use_native_dialogs && qApp->style().styleHint( QStyle::SH_GUIStyle ) == WindowsStyle ) - return winGetOpenFileName( initialSelection, filter, workingDirectory, - parent, name, caption, selectedFilter ); -@@ -3585,7 +3593,11 @@ - if ( workingDirectory->isNull() ) - *workingDirectory = ::toRootIfNotExists( QDir::currentDirPath() ); - --#if defined(Q_WS_WIN) -+#if defined(Q_WS_X11) -+ if ( qt_use_native_dialogs && QKDEIntegration::enabled()) -+ return QKDEIntegration::getSaveFileName( initialSelection, filter, workingDirectory, -+ parent, name, caption, selectedFilter ); -+#elif defined(Q_WS_WIN) - if ( qt_use_native_dialogs && qApp->style().styleHint( QStyle::SH_GUIStyle ) == WindowsStyle ) - return winGetSaveFileName( initialSelection, filter, workingDirectory, - parent, name, caption, selectedFilter ); -@@ -4475,7 +4487,17 @@ - if ( workingDirectory ) - wd = *workingDirectory; - --#if defined(Q_WS_WIN) -+#if defined(Q_WS_X11) -+ QString initialDir; -+ if ( !dir.isEmpty() ) { -+ QUrlOperator u( dir ); -+ if ( QFileInfo( u.path() ).isDir() ) -+ initialDir = dir; -+ } else -+ initialDir = QString::null; -+ if ( qt_use_native_dialogs && QKDEIntegration::enabled()) -+ return QKDEIntegration::getExistingDirectory( initialDir, parent, name, caption ); -+#elif defined(Q_WS_WIN) - QString initialDir; - if ( !dir.isEmpty() ) { - QUrlOperator u( dir ); -@@ -5636,7 +5658,10 @@ - } - } - --#if defined(Q_WS_WIN) -+#if defined(Q_WS_X11) -+ if ( qt_use_native_dialogs && QKDEIntegration::enabled()) -+ return QKDEIntegration::getOpenFileNames( filter, workingDirectory, parent, name, caption, selectedFilter, true ); -+#elif defined(Q_WS_WIN) - if ( qt_use_native_dialogs && qApp->style().styleHint( QStyle::SH_GUIStyle ) == WindowsStyle ) - return winGetOpenFileNames( filter, workingDirectory, parent, name, caption, selectedFilter ); - #elif defined(Q_WS_MAC) ---- src/dialogs/qfontdialog.cpp -+++ src/dialogs/qfontdialog.cpp -@@ -56,6 +56,10 @@ - #include - #include - -+#ifdef Q_WS_X11 -+#include "private/qtkdeintegration_x11_p.h" -+#endif -+ - /*! - \class QFontDialog qfontdialog.h - \ingroup dialogs -@@ -384,9 +388,15 @@ - return getFont( ok, 0, parent, name ); - } - -+extern bool qt_use_native_dialogs; -+ - QFont QFontDialog::getFont( bool *ok, const QFont *def, - QWidget *parent, const char* name) - { -+#if defined(Q_WS_X11) -+ if ( qt_use_native_dialogs && QKDEIntegration::enabled()) -+ return QKDEIntegration::getFont( ok, def, parent, name ); -+#endif - QFont result; - if ( def ) - result = *def; ---- src/dialogs/qmessagebox.cpp -+++ src/dialogs/qmessagebox.cpp -@@ -54,6 +54,12 @@ - #endif - - -+#ifdef Q_WS_X11 -+#include "private/qtkdeintegration_x11_p.h" -+#endif -+ -+extern bool qt_use_native_dialogs; -+ - // Internal class - don't touch - - class QMessageBoxLabel : public QLabel -@@ -1110,6 +1116,10 @@ - const QString& caption, const QString& text, - int button0, int button1, int button2 ) - { -+#if defined(Q_WS_X11) -+ if ( qt_use_native_dialogs && QKDEIntegration::enabled()) -+ return QKDEIntegration::information( parent, caption, text, button0, button1, button2 ); -+#endif - QMessageBox *mb = new QMessageBox( caption, text, Information, - button0, button1, button2, - parent, "qt_msgbox_information", TRUE, -@@ -1157,6 +1167,10 @@ - const QString& caption, const QString& text, - int button0, int button1, int button2 ) - { -+#if defined(Q_WS_X11) -+ if ( qt_use_native_dialogs && QKDEIntegration::enabled()) -+ return QKDEIntegration::question( parent, caption, text, button0, button1, button2 ); -+#endif - QMessageBox *mb = new QMessageBox( caption, text, Question, - button0, button1, button2, - parent, "qt_msgbox_information", TRUE, -@@ -1205,6 +1219,10 @@ - const QString& caption, const QString& text, - int button0, int button1, int button2 ) - { -+#if defined(Q_WS_X11) -+ if ( qt_use_native_dialogs && QKDEIntegration::enabled()) -+ return QKDEIntegration::warning( parent, caption, text, button0, button1, button2 ); -+#endif - QMessageBox *mb = new QMessageBox( caption, text, Warning, - button0, button1, button2, - parent, "qt_msgbox_warning", TRUE, -@@ -1253,6 +1271,10 @@ - const QString& caption, const QString& text, - int button0, int button1, int button2 ) - { -+#if defined(Q_WS_X11) -+ if ( qt_use_native_dialogs && QKDEIntegration::enabled()) -+ return QKDEIntegration::critical( parent, caption, text, button0, button1, button2 ); -+#endif - QMessageBox *mb = new QMessageBox( caption, text, Critical, - button0, button1, button2, - parent, "qt_msgbox_critical", TRUE, -@@ -1400,6 +1422,11 @@ - int defaultButtonNumber, - int escapeButtonNumber ) - { -+#if defined(Q_WS_X11) -+ if ( qt_use_native_dialogs && QKDEIntegration::enabled()) -+ return QKDEIntegration::information( parent, caption, text, -+ button0Text, button1Text, button2Text, defaultButtonNumber, escapeButtonNumber ); -+#endif - return textBox( parent, Information, caption, text, - button0Text, button1Text, button2Text, - defaultButtonNumber, escapeButtonNumber ); -@@ -1442,6 +1469,11 @@ - int defaultButtonNumber, - int escapeButtonNumber ) - { -+#if defined(Q_WS_X11) -+ if ( qt_use_native_dialogs && QKDEIntegration::enabled()) -+ return QKDEIntegration::question( parent, caption, text, -+ button0Text, button1Text, button2Text, defaultButtonNumber, escapeButtonNumber ); -+#endif - return textBox( parent, Question, caption, text, - button0Text, button1Text, button2Text, - defaultButtonNumber, escapeButtonNumber ); -@@ -1486,6 +1518,11 @@ - int defaultButtonNumber, - int escapeButtonNumber ) - { -+#if defined(Q_WS_X11) -+ if ( qt_use_native_dialogs && QKDEIntegration::enabled()) -+ return QKDEIntegration::warning( parent, caption, text, -+ button0Text, button1Text, button2Text, defaultButtonNumber, escapeButtonNumber ); -+#endif - return textBox( parent, Warning, caption, text, - button0Text, button1Text, button2Text, - defaultButtonNumber, escapeButtonNumber ); -@@ -1526,6 +1563,11 @@ - int defaultButtonNumber, - int escapeButtonNumber ) - { -+#if defined(Q_WS_X11) -+ if ( qt_use_native_dialogs && QKDEIntegration::enabled()) -+ return QKDEIntegration::critical( parent, caption, text, -+ button0Text, button1Text, button2Text, defaultButtonNumber, escapeButtonNumber ); -+#endif - return textBox( parent, Critical, caption, text, - button0Text, button1Text, button2Text, - defaultButtonNumber, escapeButtonNumber ); ---- src/kernel/qt.h -+++ src/kernel/qt.h -@@ -313,6 +313,10 @@ - #endif // Private headers - - -+#ifdef Q_WS_X11 -+#include "private/qtkdeintegration_x11_p.h" -+#endif -+ - #ifdef Q_WS_MAC - #include - #include ---- src/kernel/qt_x11.pri -+++ src/kernel/qt_x11.pri -@@ -10,6 +10,9 @@ - - SOURCES += $$KERNEL_CPP/qtaddons_x11.cpp - PRECOMPILED_HEADER = kernel/qt_pch.h -+ -+ SOURCES += $$KERNEL_CPP/qtkdeintegration_x11.cpp -+ HEADERS += $$KERNEL_H/qtkdeintegration_x11_p.h - } - - nas { diff --git a/opensuse/core/qt3/qt3-arm-gcc4.patch b/opensuse/core/qt3/qt3-arm-gcc4.patch deleted file mode 100644 index d9f38f547..000000000 --- a/opensuse/core/qt3/qt3-arm-gcc4.patch +++ /dev/null @@ -1,22 +0,0 @@ ---- src/tools/qglobal.h -+++ src/tools/qglobal.h -@@ -317,7 +317,7 @@ - supposedly know what you are doing.) */ - # if (defined(__arm__) || defined(__ARMEL__)) && !defined(QT_MOC_CPP) - # define Q_PACKED __attribute__ ((packed)) --# if __GNUC__ == 3 && __GNUC_MINOR__ >= 4 -+# if (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) || __GNUC__ > 3 - # define Q_NO_PACKED_REFERENCE - # endif - # endif ---- src/tools/qstring.h -+++ src/tools/qstring.h -@@ -194,7 +194,7 @@ - char latin1() const { return ucs > 0xff ? 0 : (char) ucs; } - ushort unicode() const { return ucs; } - #ifdef Q_NO_PACKED_REFERENCE -- ushort &unicode() { return *(&ucs); } -+ ushort &unicode() { return *((ushort*)&ucs); } - #else - ushort &unicode() { return ucs; } - #endif diff --git a/opensuse/core/qt3/qt3-devel-doc.changes b/opensuse/core/qt3/qt3-devel-doc.changes index db0df1efa..bffb1fdc2 100644 --- a/opensuse/core/qt3/qt3-devel-doc.changes +++ b/opensuse/core/qt3/qt3-devel-doc.changes @@ -1,3 +1,22 @@ +------------------------------------------------------------------- +Sat Nov 19 23:23:57 UTC 2011 - andrea@nucleus.it + +- Removed all the patches already applied in the 3.3.8d tree. +- Modified all the remaining to apply with fuzz=0. +- Created a new patch to revert the use of libiodbc to libodbc + otherwise qt3-unixODBC does not build. +- Some cosmetic change to the specfiles. + +------------------------------------------------------------------- +Sun Nov 13 22:40:37 UTC 2011 - robxu9@gmail.com + +- Remove 0001-dnd_optimization.patch; upstream + +------------------------------------------------------------------- +Sun Nov 13 16:28:34 UTC 2011 - robxu9@gmail.com + +- Qt3 has a new upstream; update to 3.3.8d + ------------------------------------------------------------------- Fri Sep 23 10:16:33 UTC 2011 - coolo@suse.com diff --git a/opensuse/core/qt3/qt3-devel-doc.spec b/opensuse/core/qt3/qt3-devel-doc.spec index 601b85b0c..aa2dbcfa9 100644 --- a/opensuse/core/qt3/qt3-devel-doc.spec +++ b/opensuse/core/qt3/qt3-devel-doc.spec @@ -37,12 +37,8 @@ BuildArch: noarch Provides: qt3-devel-tutorial Obsoletes: qt3-devel-tutorial Requires: qt3-devel -%define x11_free -x11-free- -%define rversion %version # COMMON-BEGIN # COMMON-BEGIN -%define x11_free -x11-free- -%define rversion 3.3.8b Source0: http://mirror.its.uidaho.edu/pub/trinity/releases/3.5.13/dependencies/qt3-3.3.8.d.tar.gz Source1: build_script.sh Source2: qtconfig3.desktop @@ -55,10 +51,8 @@ Source9: linguist.desktop Source5: linguist.png Source10: qt3.sh Source11: qt3.csh -# Translations did not change at 3.3.8c +# Translations did not change at 3.3.8d Source12: qt3-3.3.8b-translations.tar.bz2 -Source100: qtkdeintegration_x11.cpp -Source101: qtkdeintegration_x11_p.h Source102: baselibs.conf Source200: attributes Source201: update_spec.pl @@ -71,43 +65,24 @@ Patch14: lib64-plugin-support.diff Patch15: pluginmanager-fix.diff Patch18: no-rpath.dif Patch19: shut-up.diff -Patch21: fix-GL-loading.diff Patch23: fix-accessible.diff -Patch28: fix-key-release-event-with-imm.diff Patch31: limit-image-size.diff -Patch34: 0005-qpixmap_mitshm.patch Patch35: qt-transparency.patch Patch37: 0055-qtextedit_zoom.patch -Patch38: 0048-qclipboard_hack_80072.patch Patch39: fix-qtranslator-crash.diff -Patch40: 0059-qpopup_has_mouse.patch -Patch41: 0060-qpopup_ignore_mousepos.patch Patch42: add_qexport_visibility.patch -Patch43: 0056-khotkeys_input_84434.patch -Source250: enable-designer-plugins.diff -Patch53: fix-xinerama-dialog-placement.diff Patch54: kmenu-search-fix.diff -Patch55: qt3-fix-cast.diff -Patch100: qt.patch -Patch101: qt3-arm-gcc4.patch -Patch102: xinerama.patch Patch113: fix-assistant-path.patch Patch117: qtimer-debug.diff -Patch119: xinerama-qpopupmenu.diff Patch121: qt3-warnings.diff -Patch123: use-xrandr-1.2.diff Patch125: qcstring-format-warnings.diff Patch127: mng-reading-fix.patch -Patch128: 0079-compositing-types.patch -Patch129: 0080-net-wm-sync-request.patch -Patch132: revert-qt-3.3.8-khmer-fix.diff -Patch133: 0085-fix-buildkey.diff Patch134: fix-xinput-clash.diff Patch135: parseFontName.diff Patch136: qt3-no-date.diff Patch137: popen-leak-fix.diff -Patch138: qt3-libpng14.diff Patch139: gcc46.diff +Patch140: revert-iodbc-to-uodbc.diff BuildRoot: %{_tmppath}/%{name}-%{version}-build @@ -122,16 +97,6 @@ This package contains the documentation for the Qt 3 Development Kit. You will find documentation, precompiled examples, and a tutorial for getting started with Qt in /usr/lib/qt3/doc. -This package contains the documentation for the Qt 3 Development Kit. - -You will find documentation, precompiled examples, and a tutorial for -getting started with Qt in /usr/lib/qt3/doc. - -This package contains the documentation for the Qt 3 Development Kit. - -You will find documentation, precompiled examples, and a tutorial for -getting started with Qt in /usr/lib/qt3/doc. - %define build_sub_dirs src plugins/src tools/designer/uilib/ tools/designer/uic tools/qtconfig tools/assistant/lib tools/assistant tutorial %prep @@ -148,55 +113,28 @@ fi %patch18 %patch19 %patch23 -#%patch28 %patch31 -%patch34 %patch35 %patch37 -%patch38 %patch39 -%patch40 -%patch41 %patch42 -%patch43 -%patch100 -%patch102 -%patch53 %patch54 -%patch55 -%patch101 %patch113 %patch117 -%patch119 %patch121 -%patch123 ln -sf $PWD/src/inputmethod/qinputcontextfactory.h include/ ln -sf $PWD/src/inputmethod/qinputcontextplugin.h include/ ln -sf $PWD/src/kernel/qinputcontext.h include/ ln -sf $PWD/src/kernel/qinputcontextinterface_p.h include/private/ ln -sf $PWD/src/kernel/qximinputcontext_p.h include/private/ -if [ %_lib = "lib" ]; then -sed 's,/lib64/,/lib/,' %PATCH21 | patch -p0 -else -%patch21 -fi %patch125 %patch127 -%patch128 -%patch129 -%patch132 -%patch133 %patch134 %patch135 %patch136 %patch137 -%if %suse_version > 1120 -%patch138 -p1 -%endif %patch139 -# copy qt kde integration files -cp %SOURCE100 %SOURCE101 src/kernel/ -cp %SOURCE101 include/private/ +%patch140 cd translations tar xvjf %SOURCE12 cd .. @@ -214,16 +152,6 @@ This package contains the documentation for the Qt 3 Development Kit. You will find documentation, precompiled examples, and a tutorial for getting started with Qt in /usr/lib/qt3/doc. -This package contains the documentation for the Qt 3 Development Kit. - -You will find documentation, precompiled examples, and a tutorial for -getting started with Qt in /usr/lib/qt3/doc. - -This package contains the documentation for the Qt 3 Development Kit. - -You will find documentation, precompiled examples, and a tutorial for -getting started with Qt in /usr/lib/qt3/doc. - %build export VERSION=%suse_version source %SOURCE1 %{version} diff --git a/opensuse/core/qt3/qt3-devel-doc.spec.in b/opensuse/core/qt3/qt3-devel-doc.spec.in index ad9fd3e99..090675643 100644 --- a/opensuse/core/qt3/qt3-devel-doc.spec.in +++ b/opensuse/core/qt3/qt3-devel-doc.spec.in @@ -1,5 +1,5 @@ # -# spec file for package qt3 (Version 3.3.8b) +# spec file for package qt3 (Version 3.3.8d) # # Copyright (c) 2006 SUSE LINUX Products GmbH, Nuernberg, Germany. # This file and all modifications and additions to the pristine @@ -22,15 +22,13 @@ License: GPL, QPL Autoreqprov: on Summary: Qt 3 Development Kit Group: Documentation/HTML -Version: 3.3.8c +Version: 3.3.8d Release: 1 PreReq: /bin/grep BuildArch: noarch Provides: qt3-devel-tutorial Obsoletes: qt3-devel-tutorial Requires: qt3-devel -%define x11_free -x11-free- -%define rversion %version # COMMON-BEGIN # COMMON-END diff --git a/opensuse/core/qt3/qt3-extensions.changes b/opensuse/core/qt3/qt3-extensions.changes index db0df1efa..bffb1fdc2 100644 --- a/opensuse/core/qt3/qt3-extensions.changes +++ b/opensuse/core/qt3/qt3-extensions.changes @@ -1,3 +1,22 @@ +------------------------------------------------------------------- +Sat Nov 19 23:23:57 UTC 2011 - andrea@nucleus.it + +- Removed all the patches already applied in the 3.3.8d tree. +- Modified all the remaining to apply with fuzz=0. +- Created a new patch to revert the use of libiodbc to libodbc + otherwise qt3-unixODBC does not build. +- Some cosmetic change to the specfiles. + +------------------------------------------------------------------- +Sun Nov 13 22:40:37 UTC 2011 - robxu9@gmail.com + +- Remove 0001-dnd_optimization.patch; upstream + +------------------------------------------------------------------- +Sun Nov 13 16:28:34 UTC 2011 - robxu9@gmail.com + +- Qt3 has a new upstream; update to 3.3.8d + ------------------------------------------------------------------- Fri Sep 23 10:16:33 UTC 2011 - coolo@suse.com diff --git a/opensuse/core/qt3/qt3-extensions.spec b/opensuse/core/qt3/qt3-extensions.spec index 969cc4da2..d44f8c188 100644 --- a/opensuse/core/qt3/qt3-extensions.spec +++ b/opensuse/core/qt3/qt3-extensions.spec @@ -32,8 +32,6 @@ Group: Development/Tools/Other Summary: Qt3 Extensions # COMMON-BEGIN # COMMON-BEGIN -%define x11_free -x11-free- -%define rversion 3.3.8b Source0: http://mirror.its.uidaho.edu/pub/trinity/releases/3.5.13/dependencies/qt3-3.3.8.d.tar.gz Source1: build_script.sh Source2: qtconfig3.desktop @@ -48,8 +46,6 @@ Source10: qt3.sh Source11: qt3.csh # Translations did not change at 3.3.8d Source12: qt3-3.3.8b-translations.tar.bz2 -Source100: qtkdeintegration_x11.cpp -Source101: qtkdeintegration_x11_p.h Source102: baselibs.conf Source200: attributes Source201: update_spec.pl @@ -62,43 +58,24 @@ Patch14: lib64-plugin-support.diff Patch15: pluginmanager-fix.diff Patch18: no-rpath.dif Patch19: shut-up.diff -Patch21: fix-GL-loading.diff Patch23: fix-accessible.diff -Patch28: fix-key-release-event-with-imm.diff Patch31: limit-image-size.diff -Patch34: 0005-qpixmap_mitshm.patch Patch35: qt-transparency.patch Patch37: 0055-qtextedit_zoom.patch -Patch38: 0048-qclipboard_hack_80072.patch Patch39: fix-qtranslator-crash.diff -Patch40: 0059-qpopup_has_mouse.patch -Patch41: 0060-qpopup_ignore_mousepos.patch Patch42: add_qexport_visibility.patch -Patch43: 0056-khotkeys_input_84434.patch -Source250: enable-designer-plugins.diff -Patch53: fix-xinerama-dialog-placement.diff Patch54: kmenu-search-fix.diff -Patch55: qt3-fix-cast.diff -Patch100: qt.patch -Patch101: qt3-arm-gcc4.patch -Patch102: xinerama.patch Patch113: fix-assistant-path.patch Patch117: qtimer-debug.diff -Patch119: xinerama-qpopupmenu.diff Patch121: qt3-warnings.diff -Patch123: use-xrandr-1.2.diff Patch125: qcstring-format-warnings.diff Patch127: mng-reading-fix.patch -Patch128: 0079-compositing-types.patch -Patch129: 0080-net-wm-sync-request.patch -Patch132: revert-qt-3.3.8-khmer-fix.diff -Patch133: 0085-fix-buildkey.diff Patch134: fix-xinput-clash.diff Patch135: parseFontName.diff Patch136: qt3-no-date.diff Patch137: popen-leak-fix.diff -Patch138: qt3-libpng14.diff Patch139: gcc46.diff +Patch140: revert-iodbc-to-uodbc.diff BuildRoot: %{_tmppath}/%{name}-%{version}-build @@ -106,6 +83,9 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-build This package contains extension libraries for Qt 3, such as the Netscape plug-in modules. +This package contains extension libraries for Qt 3, such as the +Netscape plug-in modules. + %define build_sub_dirs src plugins/src tools/designer/uilib/ tools/designer/uic tools/qtconfig tools/assistant/lib tools/assistant tutorial %prep @@ -122,55 +102,28 @@ fi %patch18 %patch19 %patch23 -#%patch28 %patch31 -%patch34 %patch35 %patch37 -%patch38 %patch39 -%patch40 -%patch41 %patch42 -%patch43 -%patch100 -%patch102 -%patch53 %patch54 -%patch55 -%patch101 %patch113 %patch117 -%patch119 %patch121 -%patch123 ln -sf $PWD/src/inputmethod/qinputcontextfactory.h include/ ln -sf $PWD/src/inputmethod/qinputcontextplugin.h include/ ln -sf $PWD/src/kernel/qinputcontext.h include/ ln -sf $PWD/src/kernel/qinputcontextinterface_p.h include/private/ ln -sf $PWD/src/kernel/qximinputcontext_p.h include/private/ -if [ %_lib = "lib" ]; then -sed 's,/lib64/,/lib/,' %PATCH21 | patch -p0 -else -%patch21 -fi %patch125 %patch127 -%patch128 -%patch129 -%patch132 -%patch133 %patch134 %patch135 %patch136 %patch137 -%if %suse_version > 1120 -%patch138 -p1 -%endif %patch139 -# copy qt kde integration files -cp %SOURCE100 %SOURCE101 src/kernel/ -cp %SOURCE101 include/private/ +%patch140 cd translations tar xvjf %SOURCE12 cd .. @@ -184,12 +137,6 @@ Netscape plug-in modules. This package contains extension libraries for Qt 3, such as the Netscape plug-in modules. -This package contains extension libraries for Qt 3, such as the -Netscape plug-in modules. - -This package contains extension libraries for Qt 3, such as the -Netscape plug-in modules. - %package -n qt3-devel-examples Summary: Programming Examples for Qt 3 AutoReqProv: on @@ -415,6 +362,8 @@ rm -rf ${RPM_BUILD_ROOT} %defattr(-,root,root) #/usr/bin/designer #/usr/bin/linguist +/usr/lib/qt3/bin/createcw +/usr/lib/qt3/bin/makeqpf /usr/lib/qt3/bin/qconfig /usr/lib/qt3/bin/findtr /usr/lib/qt3/bin/qt20fix diff --git a/opensuse/core/qt3/qt3-extensions.spec.in b/opensuse/core/qt3/qt3-extensions.spec.in index e1014767a..736f1ae2b 100644 --- a/opensuse/core/qt3/qt3-extensions.spec.in +++ b/opensuse/core/qt3/qt3-extensions.spec.in @@ -1,5 +1,5 @@ # -# spec file for package qt3-extensions (Version 3.3.8b) +# spec file for package qt3-extensions (Version 3.3.8d) # # Copyright (c) 2005 SUSE LINUX Products GmbH, Nuernberg, Germany. # This file and all modifications and additions to the pristine @@ -16,7 +16,7 @@ BuildRequires: cups-devel krb5-devel mysql-devel postgresql-devel qt3-devel sqli BuildRequires: fdupes %endif License: GPL, QPL -Version: 3.3.8c +Version: 3.3.8d Release: 1 Autoreqprov: on Requires: qt3 = %version @@ -325,6 +325,8 @@ rm -rf ${RPM_BUILD_ROOT} %defattr(-,root,root) #/usr/bin/designer #/usr/bin/linguist +/usr/lib/qt3/bin/createcw +/usr/lib/qt3/bin/makeqpf /usr/lib/qt3/bin/qconfig /usr/lib/qt3/bin/findtr /usr/lib/qt3/bin/qt20fix diff --git a/opensuse/core/qt3/qt3-fix-cast.diff b/opensuse/core/qt3/qt3-fix-cast.diff deleted file mode 100644 index 5ad34108b..000000000 --- a/opensuse/core/qt3/qt3-fix-cast.diff +++ /dev/null @@ -1,13 +0,0 @@ -Index: tools/qvfb/qvfbview.cpp -================================================================================ ---- tools/qvfb/qvfbview.cpp -+++ tools/qvfb/qvfbview.cpp -@@ -115,7 +115,7 @@ - data = (unsigned char *)shmat( shmId, 0, 0 ); - } - -- if ( (int)data == -1 ) -+ if ( (long)data == -1 ) - qFatal( "Cannot attach to shared memory" ); - - hdr = (QVFbHeader *)data; diff --git a/opensuse/core/qt3/qt3-libpng14.diff b/opensuse/core/qt3/qt3-libpng14.diff deleted file mode 100644 index 8df6929fa..000000000 --- a/opensuse/core/qt3/qt3-libpng14.diff +++ /dev/null @@ -1,22 +0,0 @@ -Index: qt-x11-free-3.3.8b/src/kernel/qpngio.cpp -=================================================================== ---- qt-x11-free-3.3.8b.orig/src/kernel/qpngio.cpp -+++ qt-x11-free-3.3.8b/src/kernel/qpngio.cpp -@@ -162,7 +162,7 @@ void setup_qt( QImage& image, png_struct - image.setColor( i, qRgba(c,c,c,0xff) ); - } - if ( png_get_valid(png_ptr, info_ptr, PNG_INFO_tRNS) ) { -- const int g = info_ptr->trans_values.gray; -+ const int g = info_ptr->trans_color.gray; - if (g < ncols) { - image.setAlphaBuffer(TRUE); - image.setColor(g, image.color(g) & RGB_MASK); -@@ -190,7 +190,7 @@ void setup_qt( QImage& image, png_struct - info_ptr->palette[i].red, - info_ptr->palette[i].green, - info_ptr->palette[i].blue, -- info_ptr->trans[i] -+ info_ptr->trans_alpha[i] - ) - ); - i++; diff --git a/opensuse/core/qt3/qt3-never-strip.diff b/opensuse/core/qt3/qt3-never-strip.diff index 86e09c1ef..da38a015b 100644 --- a/opensuse/core/qt3/qt3-never-strip.diff +++ b/opensuse/core/qt3/qt3-never-strip.diff @@ -1,6 +1,6 @@ --- qmake/generators/unix/unixmake.cpp +++ qmake/generators/unix/unixmake.cpp -@@ -836,7 +836,7 @@ +@@ -839,7 +839,7 @@ ret += "\n\t"; ret += QString(resource ? "-$(INSTALL_DIR)" : "-$(INSTALL_FILE)") + " \"" + src_targ + "\" \"" + dst_targ + "\""; diff --git a/opensuse/core/qt3/qt3-warnings.diff b/opensuse/core/qt3/qt3-warnings.diff index 870017ded..a67293de3 100644 --- a/opensuse/core/qt3/qt3-warnings.diff +++ b/opensuse/core/qt3/qt3-warnings.diff @@ -2,7 +2,7 @@ Index: src/kernel/qimage.h =================================================================== --- src/kernel/qimage.h (revision 594273) +++ src/kernel/qimage.h (working copy) -@@ -55,7 +55,7 @@ public: +@@ -58,7 +58,7 @@ public: QCString lang; bool operator< (const QImageTextKeyLang& other) const diff --git a/opensuse/core/qt3/qt3.changes b/opensuse/core/qt3/qt3.changes index 72551ce1c..bffb1fdc2 100644 --- a/opensuse/core/qt3/qt3.changes +++ b/opensuse/core/qt3/qt3.changes @@ -1,3 +1,12 @@ +------------------------------------------------------------------- +Sat Nov 19 23:23:57 UTC 2011 - andrea@nucleus.it + +- Removed all the patches already applied in the 3.3.8d tree. +- Modified all the remaining to apply with fuzz=0. +- Created a new patch to revert the use of libiodbc to libodbc + otherwise qt3-unixODBC does not build. +- Some cosmetic change to the specfiles. + ------------------------------------------------------------------- Sun Nov 13 22:40:37 UTC 2011 - robxu9@gmail.com diff --git a/opensuse/core/qt3/qt3.spec b/opensuse/core/qt3/qt3.spec index 0c6df00cd..ffc2a9e61 100644 --- a/opensuse/core/qt3/qt3.spec +++ b/opensuse/core/qt3/qt3.spec @@ -40,8 +40,6 @@ Provides: qt_library_%version Recommends: kdelibs3-default-style PreReq: /bin/grep # COMMON-BEGIN -%define x11_free -x11-free- -%define rversion 3.3.8b Source0: http://mirror.its.uidaho.edu/pub/trinity/releases/3.5.13/dependencies/qt3-3.3.8.d.tar.gz Source1: build_script.sh Source2: qtconfig3.desktop @@ -54,10 +52,8 @@ Source9: linguist.desktop Source5: linguist.png Source10: qt3.sh Source11: qt3.csh -# Translations did not change at 3.3.8c +# Translations did not change at 3.3.8d Source12: qt3-3.3.8b-translations.tar.bz2 -Source100: qtkdeintegration_x11.cpp -Source101: qtkdeintegration_x11_p.h Source102: baselibs.conf Source200: attributes Source201: update_spec.pl @@ -70,43 +66,24 @@ Patch14: lib64-plugin-support.diff Patch15: pluginmanager-fix.diff Patch18: no-rpath.dif Patch19: shut-up.diff -Patch21: fix-GL-loading.diff Patch23: fix-accessible.diff -Patch28: fix-key-release-event-with-imm.diff Patch31: limit-image-size.diff -Patch34: 0005-qpixmap_mitshm.patch Patch35: qt-transparency.patch Patch37: 0055-qtextedit_zoom.patch -Patch38: 0048-qclipboard_hack_80072.patch Patch39: fix-qtranslator-crash.diff -Patch40: 0059-qpopup_has_mouse.patch -Patch41: 0060-qpopup_ignore_mousepos.patch Patch42: add_qexport_visibility.patch -Patch43: 0056-khotkeys_input_84434.patch -Source250: enable-designer-plugins.diff -Patch53: fix-xinerama-dialog-placement.diff Patch54: kmenu-search-fix.diff -Patch55: qt3-fix-cast.diff -Patch100: qt.patch -Patch101: qt3-arm-gcc4.patch -Patch102: xinerama.patch Patch113: fix-assistant-path.patch Patch117: qtimer-debug.diff -Patch119: xinerama-qpopupmenu.diff Patch121: qt3-warnings.diff -Patch123: use-xrandr-1.2.diff Patch125: qcstring-format-warnings.diff Patch127: mng-reading-fix.patch -Patch128: 0079-compositing-types.patch -Patch129: 0080-net-wm-sync-request.patch -Patch132: revert-qt-3.3.8-khmer-fix.diff -Patch133: 0085-fix-buildkey.diff Patch134: fix-xinput-clash.diff Patch135: parseFontName.diff Patch136: qt3-no-date.diff Patch137: popen-leak-fix.diff -Patch138: qt3-libpng14.diff Patch139: gcc46.diff +Patch140: revert-iodbc-to-uodbc.diff BuildRoot: %{_tmppath}/%{name}-%{version}-build @@ -139,55 +116,28 @@ fi %patch18 %patch19 %patch23 -#%patch28 %patch31 -%patch34 %patch35 %patch37 -%patch38 %patch39 -%patch40 -%patch41 %patch42 -%patch43 -%patch100 -%patch102 -%patch53 %patch54 -%patch55 -%patch101 %patch113 %patch117 -%patch119 %patch121 -%patch123 ln -sf $PWD/src/inputmethod/qinputcontextfactory.h include/ ln -sf $PWD/src/inputmethod/qinputcontextplugin.h include/ ln -sf $PWD/src/kernel/qinputcontext.h include/ ln -sf $PWD/src/kernel/qinputcontextinterface_p.h include/private/ ln -sf $PWD/src/kernel/qximinputcontext_p.h include/private/ -if [ %_lib = "lib" ]; then -sed 's,/lib64/,/lib/,' %PATCH21 | patch -p0 -else -%patch21 -fi %patch125 %patch127 -%patch128 -%patch129 -%patch132 -%patch133 %patch134 %patch135 %patch136 %patch137 -%if %suse_version > 1120 -%patch138 -p1 -%endif %patch139 -# copy qt kde integration files -cp %SOURCE100 %SOURCE101 src/kernel/ -cp %SOURCE101 include/private/ +%patch140 cd translations tar xvjf %SOURCE12 cd .. @@ -337,7 +287,7 @@ fi %files %defattr(-,root,root,755) # FIXME provide new changelog if kb9vqf will give one -%doc changes-3.3.8b README* LICENSE* MANIFEST FAQ +%doc changes-3.3.8d README* LICENSE* MANIFEST FAQ %dir /usr/lib/qt3/translations %dir /usr/lib/qt3 %dir /usr/lib/qt3/bin diff --git a/opensuse/core/qt3/qtimer-debug.diff b/opensuse/core/qt3/qtimer-debug.diff index 5511f2a16..65db5f4f6 100644 --- a/opensuse/core/qt3/qtimer-debug.diff +++ b/opensuse/core/qt3/qtimer-debug.diff @@ -1,6 +1,6 @@ --- src/kernel/qeventloop_unix.cpp +++ src/kernel/qeventloop_unix.cpp -@@ -514,6 +528,17 @@ +@@ -517,6 +531,17 @@ return (tm->tv_sec*1000) + (tm->tv_usec/1000); } @@ -18,7 +18,7 @@ int QEventLoop::activateTimers() { if ( !timerList || !timerList->count() ) // no timers -@@ -549,9 +574,27 @@ +@@ -552,9 +577,27 @@ t->timeout += t->interval; if ( t->timeout < currentTime ) t->timeout = currentTime + t->interval; diff --git a/opensuse/core/qt3/qtkdeintegration_x11.cpp b/opensuse/core/qt3/qtkdeintegration_x11.cpp deleted file mode 100644 index 8f837b412..000000000 --- a/opensuse/core/qt3/qtkdeintegration_x11.cpp +++ /dev/null @@ -1,242 +0,0 @@ -#define QT_CLEAN_NAMESPACE -#include "qtkdeintegration_x11_p.h" - -#include -#include -#include -#include -#include -#include -#include - -bool QKDEIntegration::inited = false; -bool QKDEIntegration::enable = false; - -bool QKDEIntegration::enabled() - { - if( !inited ) - initLibrary(); - return enable; - } - -static QCString findLibrary() - { - if( getenv( "QT_NO_KDE_INTEGRATION" ) == NULL - || getenv( "QT_NO_KDE_INTEGRATION" )[ 0 ] == '0' ) - { -#ifdef USE_LIB64_PATHES - return "/opt/kde3/lib64/kde3/plugins/integration/libqtkde"; -#else - return "/opt/kde3/lib/kde3/plugins/integration/libqtkde"; -#endif - } - return ""; - } - -inline static long widgetToWinId( const QWidget* w ) - { - return w != NULL ? w->winId() : 0; - } - -inline static QFont fontPtrToFontRef( const QFont* f ) - { - return f != NULL ? *f : QFont(); - } - -// --- -static bool (*qtkde_initializeIntegration)( ); -static QStringList (*qtkde_getOpenFileNames)( const QString& filter, QString* workingDirectory, - long parent, const QCString& name, const QString& caption, QString* selectedFilter, - bool multiple ); -static QString (*qtkde_getSaveFileName)( const QString& initialSelection, const QString& filter, - QString* workingDirectory, long parent, const QCString& name, const QString& caption, - QString* selectedFilter ); -static QString (*qtkde_getExistingDirectory)( const QString& initialDirectory, long parent, - const QCString& name, const QString& caption ); -static QColor (*qtkde_getColor)( const QColor& color, long parent, const QCString& name ); -static QFont (*qtkde_getFont)( bool* ok, const QFont& def, long parent, const QCString& name ); -static int (*qtkde_messageBox1)( int type, long parent, const QString& caption, const QString& text, - int button0, int button1, int button2 ); -static int (*qtkde_messageBox2)( int type, long parent, const QString& caption, const QString& text, - const QString& button0Text, const QString& button1Text, const QString& button2Text, - int defaultButton, int escapeButton ); - -void QKDEIntegration::initLibrary() - { - if( !inited ) - { - enable = false; - inited = true; - QString libpath = findLibrary(); - if( libpath.isEmpty()) - return; - QLibrary lib( libpath ); - lib.setAutoUnload( false ); - qtkde_initializeIntegration = ( - bool (*)( ) - ) - lib.resolve("initializeIntegration"); - if( qtkde_initializeIntegration == NULL ) - return; - qtkde_getOpenFileNames = ( - QStringList (*)( const QString& filter, QString* workingDirectory, long parent, - const QCString& name, const QString& caption, QString* selectedFilter, - bool multiple ) - ) - lib.resolve("getOpenFileNames"); - if( qtkde_getOpenFileNames == NULL ) - return; - qtkde_getSaveFileName = ( - QString (*)( const QString& initialSelection, const QString& filter, QString* workingDirectory, - long parent, const QCString& name, const QString& caption, QString* selectedFilter ) - ) - lib.resolve("getSaveFileName"); - if( qtkde_getSaveFileName == NULL ) - return; - qtkde_getExistingDirectory = ( - QString (*)( const QString& initialDirectory, long parent, const QCString& name, - const QString& caption ) - ) - lib.resolve("getExistingDirectory"); - if( qtkde_getExistingDirectory == NULL ) - return; - qtkde_getColor = ( - QColor (*)( const QColor& color, long parent, const QCString& name ) - ) - lib.resolve("getColor"); - if( qtkde_getColor == NULL ) - return; - qtkde_getFont = ( - QFont (*)( bool* ok, const QFont& def, long parent, const QCString& name ) - ) - lib.resolve("getFont"); - if( qtkde_getFont == NULL ) - return; - qtkde_messageBox1 = ( - int (*)( int type, long parent, const QString& caption, const QString& text, - int button0, int button1, int button2 ) - ) - lib.resolve("messageBox1"); - if( qtkde_messageBox1 == NULL ) - return; - qtkde_messageBox2 = ( - int (*)( int type, long parent, const QString& caption, const QString& text, - const QString& button0Text, const QString& button1Text, const QString& button2Text, - int defaultButton, int escapeButton ) - ) - lib.resolve("messageBox2"); - if( qtkde_messageBox2 == NULL ) - return; - enable = qtkde_initializeIntegration(); - } - } - -bool QKDEIntegration::initializeIntegration( ) - { - return qtkde_initializeIntegration( - ); - } -QStringList QKDEIntegration::getOpenFileNames( const QString& filter, QString* workingDirectory, - QWidget* parent, const char* name, const QString& caption, QString* selectedFilter, - bool multiple ) - { - return qtkde_getOpenFileNames( - filter, workingDirectory, widgetToWinId( parent ), name, caption, selectedFilter, multiple ); - } -QString QKDEIntegration::getSaveFileName( const QString& initialSelection, const QString& filter, - QString* workingDirectory, QWidget* parent, const char* name, const QString& caption, - QString* selectedFilter ) - { - return qtkde_getSaveFileName( - initialSelection, filter, workingDirectory, widgetToWinId( parent ), name, caption, selectedFilter ); - } -QString QKDEIntegration::getExistingDirectory( const QString& initialDirectory, QWidget* parent, - const char* name, const QString& caption ) - { - return qtkde_getExistingDirectory( - initialDirectory, widgetToWinId( parent ), name, caption ); - } -QColor QKDEIntegration::getColor( const QColor& color, QWidget* parent, const char* name ) - { - return qtkde_getColor( - color, widgetToWinId( parent ), name ); - } -QFont QKDEIntegration::getFont( bool* ok, const QFont* def, QWidget* parent, const char* name ) - { - return qtkde_getFont( - ok, fontPtrToFontRef( def ), widgetToWinId( parent ), name ); - } -int QKDEIntegration::messageBox1( int type, QWidget* parent, const QString& caption, - const QString& text, int button0, int button1, int button2 ) - { - return qtkde_messageBox1( - type, widgetToWinId( parent ), caption, text, button0, button1, button2 ); - } -int QKDEIntegration::messageBox2( int type, QWidget* parent, const QString& caption, - const QString& text, const QString& button0Text, const QString& button1Text, const QString& button2Text, - int defaultButton, int escapeButton ) - { - return qtkde_messageBox2( - type, widgetToWinId( parent ), caption, text, button0Text, button1Text, button2Text, defaultButton, escapeButton ); - } -// --- - -int QKDEIntegration::information( QWidget* parent, const QString& caption, - const QString& text, int button0, int button1, int button2 ) - { - return qtkde_messageBox1( - QMessageBox::Information, widgetToWinId( parent ), caption, text, button0, button1, button2 ); - } - -int QKDEIntegration::question( QWidget* parent, const QString& caption, - const QString& text, int button0, int button1, int button2 ) - { - return qtkde_messageBox1( - QMessageBox::Question, widgetToWinId( parent ), caption, text, button0, button1, button2 ); - } - -int QKDEIntegration::warning( QWidget* parent, const QString& caption, - const QString& text, int button0, int button1, int button2 ) - { - return qtkde_messageBox1( - QMessageBox::Warning, widgetToWinId( parent ), caption, text, button0, button1, button2 ); - } - -int QKDEIntegration::critical( QWidget* parent, const QString& caption, - const QString& text, int button0, int button1, int button2 ) - { - return qtkde_messageBox1( - QMessageBox::Critical, widgetToWinId( parent ), caption, text, button0, button1, button2 ); - } - -int QKDEIntegration::information( QWidget* parent, const QString& caption, - const QString& text, const QString& button0Text, const QString& button1Text, const QString& button2Text, - int defaultButton, int escapeButton ) - { - return qtkde_messageBox2( - QMessageBox::Information, widgetToWinId( parent ), caption, text, button0Text, button1Text, button2Text, defaultButton, escapeButton ); - } - -int QKDEIntegration::question( QWidget* parent, const QString& caption, - const QString& text, const QString& button0Text, const QString& button1Text, const QString& button2Text, - int defaultButton, int escapeButton ) - { - return qtkde_messageBox2( - QMessageBox::Question, widgetToWinId( parent ), caption, text, button0Text, button1Text, button2Text, defaultButton, escapeButton ); - } - -int QKDEIntegration::warning( QWidget* parent, const QString& caption, - const QString& text, const QString& button0Text, const QString& button1Text, const QString& button2Text, - int defaultButton, int escapeButton ) - { - return qtkde_messageBox2( - QMessageBox::Warning, widgetToWinId( parent ), caption, text, button0Text, button1Text, button2Text, defaultButton, escapeButton ); - } - -int QKDEIntegration::critical( QWidget* parent, const QString& caption, - const QString& text, const QString& button0Text, const QString& button1Text, const QString& button2Text, - int defaultButton, int escapeButton ) - { - return qtkde_messageBox2( - QMessageBox::Critical, widgetToWinId( parent ), caption, text, button0Text, button1Text, button2Text, defaultButton, escapeButton ); - } diff --git a/opensuse/core/qt3/qtkdeintegration_x11_p.h b/opensuse/core/qt3/qtkdeintegration_x11_p.h deleted file mode 100644 index 9c1676ddb..000000000 --- a/opensuse/core/qt3/qtkdeintegration_x11_p.h +++ /dev/null @@ -1,59 +0,0 @@ -#ifndef QKDEINTEGRATION_H -#define QKDEINTEGRATION_H - -#include - -class QLibrary; -class QWidget; -class QColor; -class QFont; - -class QKDEIntegration - { - public: - static bool enabled(); -// --- - static bool initializeIntegration( ); - static QStringList getOpenFileNames( const QString& filter, QString* workingDirectory, - QWidget* parent, const char* name, const QString& caption, QString* selectedFilter, - bool multiple ); - static QString getSaveFileName( const QString& initialSelection, const QString& filter, - QString* workingDirectory, QWidget* parent, const char* name, const QString& caption, - QString* selectedFilter ); - static QString getExistingDirectory( const QString& initialDirectory, QWidget* parent, - const char* name, const QString& caption ); - static QColor getColor( const QColor& color, QWidget* parent, const char* name ); - static QFont getFont( bool* ok, const QFont* def, QWidget* parent, const char* name ); - static int messageBox1( int type, QWidget* parent, const QString& caption, - const QString& text, int button0, int button1, int button2 ); - static int information( QWidget* parent, const QString& caption, const QString& text, - int button0, int button1, int button2 ); - static int question( QWidget* parent, const QString& caption, const QString& text, - int button0, int button1, int button2 ); - static int warning( QWidget* parent, const QString& caption, const QString& text, - int button0, int button1, int button2 ); - static int critical( QWidget* parent, const QString& caption, const QString& text, - int button0, int button1, int button2 ); - static int messageBox2( int type, QWidget* parent, const QString& caption, - const QString& text, const QString& button0Text, const QString& button1Text, - const QString& button2Text, int defaultButton, int escapeButton ); - static int information( QWidget* parent, const QString& caption, const QString& text, - const QString& button0Text, const QString& button1Text, const QString& button2Text, - int defaultButton, int escapeButton ); - static int question( QWidget* parent, const QString& caption, const QString& text, - const QString& button0Text, const QString& button1Text, const QString& button2Text, - int defaultButton, int escapeButton ); - static int warning( QWidget* parent, const QString& caption, const QString& text, - const QString& button0Text, const QString& button1Text, const QString& button2Text, - int defaultButton, int escapeButton ); - static int critical( QWidget* parent, const QString& caption, const QString& text, - const QString& button0Text, const QString& button1Text, const QString& button2Text, - int defaultButton, int escapeButton ); -// --- - private: - static void initLibrary(); - static bool inited; - static bool enable; - }; - -#endif diff --git a/opensuse/core/qt3/qtrc-path.diff b/opensuse/core/qt3/qtrc-path.diff index 41830d988..3ed8a86a0 100644 --- a/opensuse/core/qt3/qtrc-path.diff +++ b/opensuse/core/qt3/qtrc-path.diff @@ -1,6 +1,6 @@ --- src/tools/qsettings.cpp +++ src/tools/qsettings.cpp -@@ -36,6 +36,7 @@ +@@ -39,6 +39,7 @@ **********************************************************************/ #include "qplatformdefs.h" @@ -8,7 +8,7 @@ // POSIX Large File Support redefines open -> open64 static inline int qt_open( const char *pathname, int flags, mode_t mode ) -@@ -465,8 +466,18 @@ +@@ -468,8 +469,18 @@ Q_UNUSED( format ); #endif @@ -29,7 +29,7 @@ #ifdef Q_WS_WIN #ifdef Q_OS_TEMP TCHAR path[MAX_PATH]; -@@ -514,6 +525,15 @@ +@@ -517,6 +528,15 @@ if ( !!defPath ) searchPaths.append(defPath); diff --git a/opensuse/core/qt3/revert-iodbc-to-uodbc.diff b/opensuse/core/qt3/revert-iodbc-to-uodbc.diff new file mode 100644 index 000000000..f7c815ef1 --- /dev/null +++ b/opensuse/core/qt3/revert-iodbc-to-uodbc.diff @@ -0,0 +1,22 @@ +--- src/sql/qt_sql.pri 2011-10-30 19:55:58.000000000 +0100 ++++ src/sql/qt_sql.pri 2008-01-15 20:09:13.000000000 +0100 +@@ -116,7 +116,7 @@ + + unix { + !contains( LIBS, .*odbc.* ) { +- LIBS *= -liodbc ++ LIBS *= -lodbc + } + } + +--- plugins/src/sqldrivers/odbc/odbc.pro 2011-10-30 19:55:57.000000000 +0100 ++++ plugins/src/sqldrivers/odbc/odbc.pro 2008-01-15 20:09:17.000000000 +0100 +@@ -17,7 +17,7 @@ + unix { + OBJECTS_DIR = .obj + !contains( LIBS, .*odbc.* ) { +- LIBS *= -liodbc ++ LIBS *= -lodbc + } + } + diff --git a/opensuse/core/qt3/shut-up.diff b/opensuse/core/qt3/shut-up.diff index 6191c5d93..498b25b62 100644 --- a/opensuse/core/qt3/shut-up.diff +++ b/opensuse/core/qt3/shut-up.diff @@ -1,6 +1,6 @@ --- src/kernel/qpixmap_x11.cpp +++ src/kernel/qpixmap_x11.cpp -@@ -288,8 +288,9 @@ +@@ -394,8 +394,9 @@ { #if defined(QT_CHECK_STATE) if ( qApp->type() == QApplication::Tty ) { @@ -14,7 +14,7 @@ --- src/tools/qcomlibrary.cpp +++ src/tools/qcomlibrary.cpp -@@ -102,25 +102,11 @@ +@@ -105,25 +105,11 @@ (const char*) QFile::encodeName(library) ); } else if ( ( version > QT_VERSION ) || ( ( QT_VERSION & 0xff0000 ) > ( version & 0xff0000 ) ) ) { diff --git a/opensuse/core/qt3/use-xrandr-1.2.diff b/opensuse/core/qt3/use-xrandr-1.2.diff deleted file mode 100644 index 4ec4174e7..000000000 --- a/opensuse/core/qt3/use-xrandr-1.2.diff +++ /dev/null @@ -1,106 +0,0 @@ -qt-bugs@ issue : -bugs.kde.org number : -applied: no -author: Dirk Mueller - -support xrandr 1.2 configurations. same patch like for trunk qt-copy, -please see there for details. - - ---- src/kernel/qdesktopwidget_x11.cpp -+++ src/kernel/qdesktopwidget_x11.cpp -@@ -107,7 +107,7 @@ QDesktopWidgetPrivate::~QDesktopWidgetPr - screens[i] = 0; - } - -- delete [] screens; -+ free(screens); - } - - if ( rects ) delete [] rects; -@@ -119,30 +119,33 @@ void QDesktopWidgetPrivate::init() - // get the screen count - #ifndef QT_NO_XINERAMA - XineramaScreenInfo *xinerama_screeninfo = 0; -- int unused; -+ int unused, newScreenCount; - use_xinerama = (XineramaQueryExtension(QPaintDevice::x11AppDisplay(), - &unused, &unused) && - XineramaIsActive(QPaintDevice::x11AppDisplay())); - - if (use_xinerama) { - xinerama_screeninfo = -- XineramaQueryScreens(QPaintDevice::x11AppDisplay(), &screenCount); -+ XineramaQueryScreens(QPaintDevice::x11AppDisplay(), &newScreenCount); -+ -+ if (xinerama_screeninfo) - defaultScreen = 0; - } else - #endif // QT_NO_XINERAMA - { - defaultScreen = DefaultScreen(QPaintDevice::x11AppDisplay()); -- screenCount = ScreenCount(QPaintDevice::x11AppDisplay()); -+ newScreenCount = ScreenCount(QPaintDevice::x11AppDisplay()); -+ use_xinerama = false; - } - - delete [] rects; -- rects = new QRect[ screenCount ]; -+ rects = new QRect[ newScreenCount ]; - delete [] workareas; -- workareas = new QRect[ screenCount ]; -+ workareas = new QRect[ newScreenCount ]; - - // get the geometry of each screen -- int i, x, y, w, h; -- for ( i = 0; i < screenCount; i++ ) { -+ int i, j, x, y, w, h; -+ for ( i = 0, j = 0; i < newScreenCount; i++ ) { - - #ifndef QT_NO_XINERAMA - if (use_xinerama) { -@@ -159,11 +162,33 @@ void QDesktopWidgetPrivate::init() - h = HeightOfScreen(ScreenOfDisplay(QPaintDevice::x11AppDisplay(), i)); - } - -- rects[i].setRect(x, y, w, h); - workareas[i] = QRect(); -+ rects[j].setRect(x, y, w, h); -+ -+ // overlapping? -+ if (j > 0 && rects[j-1].intersects(rects[j])) { -+ // pick the bigger one, ignore the other -+ if ((rects[j].width()*rects[j].height()) > -+ (rects[j-1].width()*rects[j-1].height())) -+ rects[j-1] = rects[j]; -+ } -+ else -+ j++; - } - -+ if (screens) { -+ // leaks QWidget* pointers on purpose, can't delete them as pointer escapes -+ screens = (QWidget**) realloc(screens, j * sizeof(QWidget*)); -+ if (j > screenCount) -+ memset(&screens[screenCount], 0, (j-screenCount) * sizeof(QWidget*)); -+ } -+ -+ screenCount = j; -+ - #ifndef QT_NO_XINERAMA -+ if (use_xinerama && screenCount == 1) -+ use_xinerama = false; -+ - if (xinerama_screeninfo) - XFree(xinerama_screeninfo); - #endif // QT_NO_XINERAMA -@@ -216,8 +241,7 @@ QWidget *QDesktopWidget::screen( int scr - screen = d->defaultScreen; - - if ( ! d->screens ) { -- d->screens = new QWidget*[ d->screenCount ]; -- memset( d->screens, 0, d->screenCount * sizeof( QWidget * ) ); -+ d->screens = (QWidget**) calloc( d->screenCount, sizeof(QWidget*)); - d->screens[ d->defaultScreen ] = this; - } - diff --git a/opensuse/core/qt3/xinerama-qpopupmenu.diff b/opensuse/core/qt3/xinerama-qpopupmenu.diff deleted file mode 100644 index 07927206f..000000000 --- a/opensuse/core/qt3/xinerama-qpopupmenu.diff +++ /dev/null @@ -1,104 +0,0 @@ ---- src/widgets/qpopupmenu.cpp.sav -+++ src/widgets/qpopupmenu.cpp -@@ -457,6 +457,15 @@ - menuContentsChanged(); - } - -+QRect QPopupMenu::screenRect( const QPoint& pos ) -+{ -+ int screen_num = QApplication::desktop()->screenNumber( pos ); -+#ifdef Q_WS_MAC -+ return QApplication::desktop()->availableGeometry( screen_num ); -+#else -+ return QApplication::desktop()->screenGeometry( screen_num ); -+#endif -+} - /*! - Displays the popup menu so that the item number \a indexAtPoint - will be at the specified \e global position \a pos. To translate a -@@ -501,6 +510,15 @@ - // point. - #endif - -+ QRect screen = screenRect( geometry().center()); -+ QRect screen2 = screenRect( QApplication::reverseLayout() -+ ? pos+QPoint(width(),0) : pos ); -+ // if the widget is not in the screen given by the position, move it -+ // there, so that updateSize() uses the right size of the screen -+ if( screen != screen2 ) { -+ screen = screen2; -+ move( screen.x(), screen.y()); -+ } - if(d->scroll.scrollable) { - d->scroll.scrollable = QPopupMenuPrivate::Scroll::ScrollNone; - d->scroll.topScrollableIndex = d->scroll.scrollableSize = 0; -@@ -520,18 +538,6 @@ - updateSize(TRUE); - } - -- int screen_num; -- if (QApplication::desktop()->isVirtualDesktop()) -- screen_num = -- QApplication::desktop()->screenNumber( QApplication::reverseLayout() ? -- pos+QPoint(width(),0) : pos ); -- else -- screen_num = QApplication::desktop()->screenNumber( this ); --#ifdef Q_WS_MAC -- QRect screen = QApplication::desktop()->availableGeometry( screen_num ); --#else -- QRect screen = QApplication::desktop()->screenGeometry( screen_num ); --#endif - int sw = screen.width(); // screen width - int sh = screen.height(); // screen height - int sx = screen.x(); // screen pos -@@ -1059,7 +1065,7 @@ - mi->iconSet()->pixmap( QIconSet::Small, QIconSet::Normal ).width() + 4 ); - } - -- int dh = QApplication::desktop()->height(); -+ int dh = screenRect( geometry().center()).height(); - ncols = 1; - - for ( QMenuItemListIt it2( *mitems ); it2.current(); ++it2 ) { -@@ -2313,9 +2319,9 @@ - bool right = FALSE; - if ( ( parentMenu && parentMenu->isPopupMenu && - ((QPopupMenu*)parentMenu)->geometry().x() < geometry().x() ) || -- p.x() < 0 ) -+ p.x() < screenRect( p ).left()) - right = TRUE; -- if ( right && (ps.width() > QApplication::desktop()->width() - mapToGlobal( r.topRight() ).x() ) ) -+ if ( right && (ps.width() > screenRect( p ).right() - mapToGlobal( r.topRight() ).x() ) ) - right = FALSE; - if ( right ) - p.setX( mapToGlobal( r.topRight() ).x() ); -@@ -2326,7 +2332,7 @@ - bool left = FALSE; - if ( ( parentMenu && parentMenu->isPopupMenu && - ((QPopupMenu*)parentMenu)->geometry().x() > geometry().x() ) || -- p.x() + ps.width() > QApplication::desktop()->width() ) -+ p.x() + ps.width() > screenRect( p ).right() ) - left = TRUE; - if ( left && (ps.width() > mapToGlobal( r.topLeft() ).x() ) ) - left = FALSE; -@@ -2334,8 +2340,8 @@ - p.setX( mapToGlobal( r.topLeft() ).x() - ps.width() ); - } - QRect pr = popup->itemGeometry(popup->count() - 1); -- if (p.y() + ps.height() > QApplication::desktop()->height() && -- p.y() - ps.height() + (QCOORD) pr.height() >= 0) -+ if (p.y() + ps.height() > screenRect( p ).bottom() && -+ p.y() - ps.height() + (QCOORD) pr.height() >= screenRect( p ).top()) - p.setY( p.y() - ps.height() + (QCOORD) pr.height()); - - if ( style().styleHint(QStyle::SH_PopupMenu_SloppySubMenus, this )) { ---- src/widgets/qpopupmenu.h.sav -+++ src/widgets/qpopupmenu.h -@@ -152,6 +152,7 @@ - - QSize updateSize(bool force_recalc=FALSE, bool do_resize=TRUE); - void updateRow( int row ); -+ QRect screenRect(const QPoint& pos); - #ifndef QT_NO_ACCEL - void updateAccel( QWidget * ); - void enableAccel( bool ); diff --git a/opensuse/core/qt3/xinerama.patch b/opensuse/core/qt3/xinerama.patch deleted file mode 100644 index 1fee04aae..000000000 --- a/opensuse/core/qt3/xinerama.patch +++ /dev/null @@ -1,49 +0,0 @@ ---- src/dialogs/qdialog.cpp -+++ src/dialogs/qdialog.cpp -@@ -670,6 +670,11 @@ - - #if defined(Q_WS_X11) - extern "C" { int XSetTransientForHint( Display *, unsigned long, unsigned long ); } -+#include -+#undef FocusIn -+// defined in qapplication_x11.cpp -+extern Atom qt_net_wm_full_placement; -+extern bool qt_net_supports(Atom atom); - #endif // Q_WS_X11 - - /*! -@@ -691,10 +696,12 @@ - - if ( !did_resize ) - adjustSize(); -- if ( has_relpos && !did_move ) { -- adjustPositionInternal( parentWidget(), TRUE ); -- } else if ( !did_move ) { -- adjustPositionInternal( parentWidget() ); -+ if( !qt_net_supports( qt_net_wm_full_placement )) { -+ if ( has_relpos && !did_move ) { -+ adjustPositionInternal( parentWidget(), TRUE ); -+ } else if ( !did_move ) { -+ adjustPositionInternal( parentWidget() ); -+ } - } - - if (windowState() != state) ---- src/kernel/qapplication_x11.cpp -+++ src/kernel/qapplication_x11.cpp -@@ -273,6 +273,7 @@ - Atom qt_net_wm_state_stays_on_top = 0; // KDE extension - Atom qt_net_wm_pid = 0; - Atom qt_net_wm_user_time = 0; -+Atom qt_net_wm_full_placement = 0; // KDE extension - // Enlightenment support - Atom qt_enlightenment_desktop = 0; - -@@ -1989,6 +1990,7 @@ - &qt_net_wm_state_stays_on_top ); - qt_x11_intern_atom( "_NET_WM_PID", &qt_net_wm_pid ); - qt_x11_intern_atom( "_NET_WM_USER_TIME", &qt_net_wm_user_time ); -+ qt_x11_intern_atom( "_NET_WM_FULL_PLACEMENT", &qt_net_wm_full_placement ); - qt_x11_intern_atom( "ENLIGHTENMENT_DESKTOP", &qt_enlightenment_desktop ); - qt_x11_intern_atom( "_NET_WM_NAME", &qt_net_wm_name ); - qt_x11_intern_atom( "_NET_WM_ICON_NAME", &qt_net_wm_icon_name ); diff --git a/opensuse/core/tde-filesystem/tde-filesystem.changes b/opensuse/core/tde-filesystem/tde-filesystem.changes index c63ff71b2..35830013d 100644 --- a/opensuse/core/tde-filesystem/tde-filesystem.changes +++ b/opensuse/core/tde-filesystem/tde-filesystem.changes @@ -1,3 +1,8 @@ +------------------------------------------------------------------- +Wed Nov 16 23:34:53 UTC 2011 - robxu9@gmail.com + +- directories updated + ------------------------------------------------------------------- Tue Aug 9 21:06:07 UTC 2011 - rxu@lincomlinux.org -- cgit v1.2.3 From 5f93960dbb108c2c6d09964d1ee0d2e390b1498c Mon Sep 17 00:00:00 2001 From: Robert Xu Date: Wed, 1 Feb 2012 00:38:02 -0500 Subject: Eugh, get eclipse metadata out of here. --- opensuse/.gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/opensuse/.gitignore b/opensuse/.gitignore index 3534a469b..5f0a10e64 100644 --- a/opensuse/.gitignore +++ b/opensuse/.gitignore @@ -1,3 +1,4 @@ *~ _build* .osc +.metadata -- cgit v1.2.3